swftools_0.9.2+git20130725.orig/0002755000175000017500000000000012216332657015335 5ustar gawaingawainswftools_0.9.2+git20130725.orig/config.h.in0000644000175000017500000001363412216332640017355 0ustar gawaingawain#ifndef __config_h__ #define __config_h__ /* Define to empty if the keyword does not work. */ #undef const /* Define as __inline if that's what the C compiler calls it. */ #undef inline /* Define to `long' if doesn't define. */ #undef off_t /* Define to `unsigned' if doesn't define. */ #undef size_t #undef SIZEOF_SIGNED_CHAR #undef SIZEOF_SIGNED_SHORT #undef SIZEOF_SIGNED #undef SIZEOF_SIGNED_LONG_LONG #undef SIZEOF_VOIDP /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if your declares struct tm. */ #undef TM_IN_SYS_TIME /* Define if you have the time() function */ #undef HAVE_TIME /* Define if you have the time.h header file */ #undef HAVE_TIME_H /* Define if you have the sys/time.h header file */ #undef HAVE_SYS_TIME_H /* Define if you have the sys/resource.h header file */ #undef HAVE_SYS_RESOURCE_H /* Define if you have the malloc.h header file */ #undef HAVE_MALLOC_H /* Define if you have the getrusage function */ #undef HAVE_GETRUSAGE /* Define if you have the mallinfo function */ #undef HAVE_MALLINFO /* Define if you have the unistd.h header file */ #undef HAVE_UNISTD_H /* Define if you have the open64 function. */ #undef HAVE_OPEN64 /* Define if you have the lrand48 function. */ #undef HAVE_LRAND48 /* Define if you have the popen function. */ #undef HAVE_POPEN /* Define if you have the bcopy function. */ #undef HAVE_BCOPY /* Define if you have the bzero function. */ #undef HAVE_BZERO /* Define if you have the rand function. */ #undef HAVE_RAND /* Define if you have the srand function. */ #undef HAVE_SRAND /* Define if you have the srand48 function. */ #undef HAVE_SRAND48 /* Define if you have the calloc function. */ #undef HAVE_CALLOC /* Define if you have the stat function. */ #undef HAVE_STAT /* Define if you have the mmap function. */ #undef HAVE_MMAP /* Define if you have the header file. */ #undef HAVE_DIRENT_H /* Define if you have the header file. */ #undef HAVE_ASSERT_H /* Define if you have the header file. */ #undef HAVE_SIGNAL_H /* Define if you have the header file. */ #undef HAVE_PTHREAD_H /* Define if you have the header file. */ #undef HAVE_JPEGLIB_H /* Define if you have the header file. */ #undef HAVE_NDIR_H /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H /* Define if you have the header file. */ #undef HAVE_IO_H /* Define if you have the header file. */ #undef HAVE_SYS_BSDTYPES_H /* Define if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the header file. */ /* #undef HAVE_T1LIB_H */ /* Define if you have the header file. */ #undef HAVE_ZLIB_H /* Define if you have the header file. */ #undef HAVE_ZZIP_LIB_H /* Define if you have the header file. */ #undef HAVE_PDFLIB_H /* Define if you have the header file. */ #undef HAVE_AVIFILE_VERSION_H /* Define if you have the header file. */ #undef HAVE_FT2BUILD_H /* Define if you have the header file. */ #undef HAVE_VERSION_H /* Define if you have the OpenGL header files */ #undef HAVE_GL_GL_H #undef HAVE_GL_GLUT_H /* Define if you have the OpenGL libraries */ #undef HAVE_LIBGL #undef HAVE_LIBGLU #undef HAVE_LIBGLUT /* Define if OpenGL seems to work */ #undef HAVE_OPENGL /* Define if you use poppler */ #undef HAVE_POPPLER /* Define to 1 if you have the `poppler' library (-lpoppler). */ #undef HAVE_LIBPOPPLER /* Define to 1 if you have the header file. */ #undef HAVE_OUTPUTDEV_H /* Define if you have the jpeg library (-ljpeg). */ #undef HAVE_LIBJPEG /* Define if you have the pdf library (-lpdf). */ #undef HAVE_LIBPDF /* Define if you have the zzip library (-lzzip). */ #undef HAVE_LIBZZIP /* Define if you have the m library (-lm). */ #undef HAVE_LIBM /* Define if you have the t1 library (-lt1). */ /* #undef HAVE_LIBT1 */ /* Define if you have the z library (-lz). */ #undef HAVE_LIBZ /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION /* Typedefs */ #undef boolean /* use gzip/uncompress */ #undef USE_GZIP /* let ttf2pt1 use libfreetype */ #undef USE_FREETYPE /* have/use freetype library */ #undef HAVE_FREETYPE #undef HAVE_FREETYPE_FREETYPE_H /* have/use freetype library */ #undef HAVE_AVIFILE #undef HAVE_FONTCONFIG_H #undef HAVE_FONTCONFIG #undef HAVE_FFTW3_H #undef HAVE_FFTW3 /* have/use internal l.a.m.e. mp3 library */ #undef HAVE_LAME /* whether python-imaging was found */ #undef HAVE_PYTHON_IMAGING /* system() can handle command substitution */ #undef SYSTEM_BACKTICKS /* Define to 1 if this machine has network byte order*/ #undef WORDS_BIGENDIAN #undef LOWERCASE_UPPERCASE /* Define to 0 on non-windows systems */ #undef O_BINARY #ifdef HAVE_ZLIB_H #ifdef HAVE_LIBZ #define HAVE_ZLIB #endif #endif #ifdef HAVE_JPEGLIB_H #ifdef HAVE_LIBJPEG #define HAVE_JPEGLIB #endif #endif #ifdef HAVE_FT2BUILD_H #define HAVE_FREETYPE_H 1 #endif /* #ifdef HAVE_T1LIB_H */ /* #ifdef HAVE_LIBT1 */ /* #define HAVE_T1LIB */ /* #endif */ /* #endif */ #ifdef HAVE_GL_GL_H #ifdef HAVE_GL_GLUT_H #ifdef HAVE_OPENGL #define USE_OPENGL #endif #endif #endif #ifdef HAVE_POPPLER #define GString GooString #define GHash GooHash #endif #ifdef HAVE_ZZIP_LIB_H #ifdef HAVE_LIBZZIP #define HAVE_ZZIP 1 #endif #endif //#ifdef HAVE_BUILTIN_EXPECT #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) # define likely(x) __builtin_expect((x), 1) # define unlikely(x) __builtin_expect((x), 0) #else # define likely(x) (x) # define unlikely(x) (x) #endif #endif swftools_0.9.2+git20130725.orig/install-sh0000755000175000017500000001273612216332640017340 0ustar gawaingawain#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # 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 $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 swftools_0.9.2+git20130725.orig/configure0000755000175000017500000074175612216332642017260 0ustar gawaingawain#! /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" 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'" 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="src/" # 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='LTLIBOBJS LIBOBJS PNG2SWF GIF2SWF JPEG2SWF PDF2PDF DEVICE_PDF LIBPDF PDF2SWF HAVE_PYTHON_IMAGING PYTHON_INSTALL_PATH PYTHON_INCLUDES PYTHON_LIB PYTHON_EXECUTABLE RUBY_INSTALLDIR RUBY_LDFLAGS RUBY_CPPFLAGS RUBY_LIBS RUBY USE_GZIP VIDEO_CFLAGS VIDEO_LIBS AVIFILE_CONFIG xpdf_include splash_in_source xpdf_in_source CXXCPP lame_in_source DEVICE_OPENGL FREETYPE_CONFIG HAVE_UNISTD_H VERSION PACKAGE EGREP GREP SYSTEM_BACKTICKS WORDS_BIGENDIAN target_os target_vendor target_cpu target STRIP CXXLIBS SLEXT AR AREXT UNCOMPRESS LN_S INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM SET_MAKE RANLIB CPP ac_ct_CXX CXXFLAGS CXX OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SHARED host_os host_vendor host_cpu host build_os build_vendor build_cpu build 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_checkmem enable_debug enable_profiling enable_warnings enable_optimizations enable_poppler enable_lame ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' 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] --target=TARGET configure for building compilers for TARGET [HOST] _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-checkmem turn on ccmalloc debugging --enable-debug turn on debugging --enable-profiling turn on profiling --enable-warnings turn on compiler warnings --enable-optimizations turn on compiler optimizations (recommended for avi2swf) --enable-poppler link againist libpoppler --disable-lame "don't compile any L.A.M.E. mp3 encoding code in" 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 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_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_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_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_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 # 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_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { 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 eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 (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_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # 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 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 # ------------------- option parsing ------------------------------- DEBUG= CHECKMEM= PROFILING= ENABLE_WARNINGS= OPTIMIZE= USE_POPPLER= DISABLE_LAME= # Check whether --enable-checkmem was given. if test "${enable_checkmem+set}" = set; then : enableval=$enable_checkmem; CHECKMEM=true fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; DEBUG=true fi # Check whether --enable-profiling was given. if test "${enable_profiling+set}" = set; then : enableval=$enable_profiling; PROFILING=true fi # Check whether --enable-warnings was given. if test "${enable_warnings+set}" = set; then : enableval=$enable_warnings; ENABLE_WARNINGS=true fi # Check whether --enable-optimizations was given. if test "${enable_optimizations+set}" = set; then : enableval=$enable_optimizations; OPTIMIZE=true fi # Check whether --enable-poppler was given. if test "${enable_poppler+set}" = set; then : enableval=$enable_poppler; USE_POPPLER=true fi # Check whether --enable-lame was given. if test "${enable_lame+set}" = set; then : enableval=$enable_lame; if test "x$enable_lame" = "xno";then DISABLE_LAME=yes fi else DISABLE_LAME= fi PACKAGE=swftools VERSION=0.9.2+git20130725 # ------------------------------------------------------------------ if test "x${srcdir}" != "x."; then echo "--srcdir is not supported" exit 1 fi WARNINGS="-Wimplicit -Wreturn-type -Wno-write-strings -Wformat" if test "x$ENABLE_WARNINGS" '!=' "x";then WARNINGS="-Wall -Wno-unused -Wno-format -Wno-redundant-decls -Wno-write-strings -D_FORTIFY_SOURCE=2 " fi if test "x$CHECKMEM" '!=' "x";then DEBUG=yes fi if test "x$PROFILING" '!=' "x";then DEBUG=yes fi if test "x$DEBUG" '!=' "x";then if test "x$PROFILING" = "x";then CFLAGS="$WARNINGS -O2 -g $CFLAGS" CXXFLAGS="$WARNINGS -O2 -g $CXXFLAGS" LDFLAGS="-g $LDFLAGS" else CFLAGS="$WARNINGS -O2 -g -pg $CFLAGS" CXXFLAGS="$WARNINGS -O2 -g -pg $CXXFLAGS" LDFLAGS="-g -pg $LDFLAGS" fi else if test "x$OPTIMIZE" '!=' "x"; then CFLAGS="$WARNINGS -O3 -fomit-frame-pointer -Winline $CFLAGS" CXXFLAGS="$WARNINGS -O3 -fomit-frame-pointer -Winline $CXXFLAGS" else CFLAGS="$WARNINGS -O -fomit-frame-pointer $CFLAGS" CXXFLAGS="$WARNINGS -O -fomit-frame-pointer $CXXFLAGS" fi fi CFLAGS="-fPIC $CFLAGS" CXXFLAGS="-fPIC $CFLAGS" #OLDGCC=1 #if test "x$OLDGCC" '!=' "x";then # #CFLAGS="$CFLAGS --std=c89 -ansi -pendantic" # #CXXFLAGS="$CXXFLAGS --std=c89 -ansi -pendantic" # CFLAGS="$CFLAGS -ansi -pendantic" # CXXFLAGS="$CXXFLAGS -ansi -pendantic" #fi export PACKAGE VERSION CFLAGS CXXFLAGS 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. # 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 SLEXT="so" SHARED="-shared" MACOSX= case $host_os in *darwin* ) MACOSX=yes CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS -fno-rtti" SHARED="-bundle" SLEXT="bundle" if test -d /opt/local/include && test -d /opt/local/lib; then CPPFLAGS="${CPPFLAGS} -I/opt/local/include" LDFLAGS="${LDFLAGS} -L/opt/local/lib" fi # Use fink packages if available. #if test -d /sw/include && test -d /sw/lib; then # CPPFLAGS="${CPPFLAGS} -I/sw/include" # LDFLAGS="${LDFLAGS} -L/sw/lib" #fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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=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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports lazy variable declaration" >&5 $as_echo_n "checking whether gcc supports lazy variable declaration... " >&6; } cat > conftest.c << EOF #include #include int main () { int a,b; b=3; int c; c=4; return 0; } EOF testprog_link='$CC $CPPFLAGS $CFLAGS conftest.c -o conftest${ac_exeext}' if { (eval echo gcc.2.95.m4:19: \"$testprog_link\") 1>&5; (eval $testprog_link) 2>&5; } && test -s conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } GCC_IS_OK=true export GCC_IS_OK else echo "configure: failed program was:" >&5 cat conftest.c >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* if test "x$GCC_IS_OK" '=' "x";then echo "***************************************************" echo "* Your gcc is too old to compile this!" echo "* " echo "* The last version compileable by this compiler is " echo "* swftools 0.7.0, which you can download from " echo "* http://www.swftools.org/swftools-0.7.0.tar.gz " echo "* ." echo "* Newer versions require at least gcc 3.0.0 " echo "***************************************************" exit 1 fi if test "x$CHECKMEM" '!=' "x";then CC="ccmalloc $CC" CXX="ccmalloc $CXX" #echo running again #unset ac_cv_prog_CC #unset ac_cv_prog_CXX #AC_PROG_CC #AC_PROG_CXX 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 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 { $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 # 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 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 for ac_prog in gzip uncompress compress 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_UNCOMPRESS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$UNCOMPRESS"; then ac_cv_prog_UNCOMPRESS="$UNCOMPRESS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir 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_UNCOMPRESS="$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 UNCOMPRESS=$ac_cv_prog_UNCOMPRESS if test -n "$UNCOMPRESS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCOMPRESS" >&5 $as_echo "$UNCOMPRESS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$UNCOMPRESS" && break done OBJEXT="o" AREXT=".a" CXXLIBS="-lstdc++" if test "x$EXEEXT" = "x.exe";then OBJEXT="obj" AREXT=".lib" CXXLIBS="" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for target system" >&5 $as_echo_n "checking for target system... " >&6; } CYGWIN= MINGW= case $host_os in *cygwin* ) CYGWIN=yes;; *mingw* ) MINGW=yes;; esac AR=ar if test "x$MINGW" = "xyes"; then #fix for the debian distribution of mingw if test -x "/usr/i586-mingw32msvc/bin/ar";then AR="/usr/i586-mingw32msvc/bin/ar" fi if test -x "/usr/i586-mingw32msvc/bin/ranlib";then RANLIB="/usr/i586-mingw32msvc/bin/ranlib" fi #fix for the gentoo distribution of mingw if test -x "/opt/xmingw/bin/i386-mingw32msvc-ar";then AR="/opt/xmingw/bin/i386-mingw32msvc-ar" fi if test -x "/opt/xmingw/bin/i386-mingw32msvc-ranlib";then RANLIB="/opt/xmingw/bin/i386-mingw32msvc-ranlib" fi if test -x "/opt/xmingw/bin/i386-mingw32msvc-strip";then STRIP="/opt/xmingw/bin/i386-mingw32msvc-strip" fi fi if test "x${CYGWIN}" = "xyes"; then $as_echo "#define CYGWIN 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: cygwin" >&5 $as_echo "cygwin" >&6; } else if test "x${MINGW}" = "xyes"; then $as_echo "#define MINGW 1" >>confdefs.h WIN32=1 $as_echo "#define WIN32 1" >>confdefs.h LIBS="$LIBS -lws2_32 -lgdi32" { $as_echo "$as_me:${as_lineno-$LINENO}: result: mingw" >&5 $as_echo "mingw" >&6; } else LINUX=1 export LINUX $as_echo "#define LINUX 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } fi fi if test "x${MINGW}" != "xyes"; then # no mingW $as_echo "#define O_BINARY 0" >>confdefs.h else # mingW SLEXT="dll" CXXLIBS="" fi export SLEXT # The following tries to make use of includes and libraries in # /usr/local, too. Notice: A -I/usr/local/include might break # things (MingW, cross-compiling etc.) in the same way as -I/usr/include, # especially on systems which link /usr/local to /usr, so it has yet # to be seen how useful this is. if test -d /usr/local/lib; then LDFLAGS="$LDFLAGS -L/usr/local/lib" fi if test -d /usr/local/include; then # Leave that alone. It's causing trouble e.g. with gcc 3.2 on gentoo. # CPPFLAGS="$CPPFLAGS -I/usr/local/include" echo > /dev/null fi if test "$prefix" != "NONE" -a "$prefix" != "/usr/local" -a "$prefix" != "/usr/local/"; then # if the user has a special prefix (like /opt), there might also be $prefix/lib # and $prefix/include, which should be included in our search paths for libraries # and includes. LDFLAGS="$LDFLAGS -L${libdir}" CPPFLAGS="$CPPFLAGS -I${includedir}" # TODO- test whether gcc still works after this fi #Mac OS: #LDFLAGS "-L/sw/lib" ; CPPFLAGS "-I/sw/include -I/sw/include/lame" # this must be done after (I believe) AC_PROG_MAKE_SET if test "x$DEBUG" '!=' "x" -o "x$STRIP" = "x";then if test "$MACOSX";then STRIP=dsymutil else STRIP="@echo debug enabled, not stripping " fi export STRIP fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sin in -lm" >&5 $as_echo_n "checking for sin in -lm... " >&6; } if ${ac_cv_lib_m_sin+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $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 sin (); int main () { return sin (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_sin=yes else ac_cv_lib_m_sin=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_m_sin" >&5 $as_echo "$ac_cv_lib_m_sin" >&6; } if test "x$ac_cv_lib_m_sin" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" else echo "Error: Math library not found."; exit; fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if ${ac_cv_lib_z_deflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $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 deflate (); int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=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_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else ZLIBMISSING=true fi if test "x$ZLIBMISSING" = "xtrue";then echo echo "ERROR:" echo "You need zlib to compile swftools" echo exit fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDF_open_file in -lpdf" >&5 $as_echo_n "checking for PDF_open_file in -lpdf... " >&6; } if ${ac_cv_lib_pdf_PDF_open_file+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpdf $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 PDF_open_file (); int main () { return PDF_open_file (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pdf_PDF_open_file=yes else ac_cv_lib_pdf_PDF_open_file=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_pdf_PDF_open_file" >&5 $as_echo "$ac_cv_lib_pdf_PDF_open_file" >&6; } if test "x$ac_cv_lib_pdf_PDF_open_file" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPDF 1 _ACEOF LIBS="-lpdf $LIBS" else PDFLIBMISSING=true fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_write_raw_data in -ljpeg" >&5 $as_echo_n "checking for jpeg_write_raw_data in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_write_raw_data+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $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 jpeg_write_raw_data (); int main () { return jpeg_write_raw_data (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_write_raw_data=yes else ac_cv_lib_jpeg_jpeg_write_raw_data=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_jpeg_jpeg_write_raw_data" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_write_raw_data" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_write_raw_data" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBJPEG 1 _ACEOF LIBS="-ljpeg $LIBS" else JPEGLIBMISSING=true fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpen in -lungif" >&5 $as_echo_n "checking for DGifOpen in -lungif... " >&6; } if ${ac_cv_lib_ungif_DGifOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lungif $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 DGifOpen (); int main () { return DGifOpen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ungif_DGifOpen=yes else ac_cv_lib_ungif_DGifOpen=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_ungif_DGifOpen" >&5 $as_echo "$ac_cv_lib_ungif_DGifOpen" >&6; } if test "x$ac_cv_lib_ungif_DGifOpen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBUNGIF 1 _ACEOF LIBS="-lungif $LIBS" else UNGIFMISSING=true fi if test "$UNGIFMISSING";then UNGIFMISSING= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpen in -lgif" >&5 $as_echo_n "checking for DGifOpen in -lgif... " >&6; } if ${ac_cv_lib_gif_DGifOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgif $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 DGifOpen (); int main () { return DGifOpen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gif_DGifOpen=yes else ac_cv_lib_gif_DGifOpen=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_gif_DGifOpen" >&5 $as_echo "$ac_cv_lib_gif_DGifOpen" >&6; } if test "x$ac_cv_lib_gif_DGifOpen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGIF 1 _ACEOF LIBS="-lgif $LIBS" else UNGIFMISSING=true fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zzip_file_open in -lzzip" >&5 $as_echo_n "checking for zzip_file_open in -lzzip... " >&6; } if ${ac_cv_lib_zzip_zzip_file_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lzzip $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 zzip_file_open (); int main () { return zzip_file_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_zzip_zzip_file_open=yes else ac_cv_lib_zzip_zzip_file_open=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_zzip_zzip_file_open" >&5 $as_echo "$ac_cv_lib_zzip_zzip_file_open" >&6; } if test "x$ac_cv_lib_zzip_zzip_file_open" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZZIP 1 _ACEOF LIBS="-lzzip $LIBS" else ZZIPMISSING=true fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for byte order" >&5 $as_echo_n "checking for byte order... " >&6; } if test "$cross_compiling" = yes; then : CROSSCOMPILE=1 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char *argv[]) { int i = 1; return *(char*)&i; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : BIGENDIAN=1 else LITTLEENDIAN=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi export CROSSCOMPILE if test "x${CROSSCOMPILE}" = "x1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: we are cross compiling- trying to guess from system type" >&5 $as_echo "we are cross compiling- trying to guess from system type" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for byte order, try 2" >&5 $as_echo_n "checking for byte order, try 2... " >&6; } case "${target}" in *86* | *-pc-* ) LITTLEENDIAN=1 ;; *sparc* | *68* | *88k* | *mac* | *Mac* | *sun* | *Sun* | *Amiga* | *amiga* ) BIGENDIAN=1 ;; esac fi export LITTLEENDIAN if test "x${LITTLEENDIAN}" = "x1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: little endian" >&5 $as_echo "little endian" >&6; } BYTEORDERCHECKOK=1 fi export BIGENDIAN if test "x${BIGENDIAN}" = "x1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: big endian" >&5 $as_echo "big endian" >&6; } BYTEORDERCHECKOK=1 WORDS_BIGENDIAN=1 export WORDS_BIGENDIAN $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h fi if test "x${BYTEORDERCHECKOK}" != "x1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } echo Byte order could not determined. exit 1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system() can handle command substitution" >&5 $as_echo_n "checking whether system() can handle command substitution... " >&6; } if test "$cross_compiling" = yes; then : CROSSCOMPILE=1 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "stdlib.h" int main (int argc, char*argv[]) { return system("test `touch config.tmp2`"); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : OK=OK fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "x${OK}" = "xOK";then test -f config.tmp2 || OK= fi if test "x${CROSSCOMPILE}" = "x1";then OK=no; fi if test "x${OK}" = "xOK";then rm -f config.tmp2 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SYSTEM_BACKTICKS=1 export SYSTEM_BACKTICKS $as_echo "#define SYSTEM_BACKTICKS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi 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"` ac_config_headers="$ac_config_headers config.h" ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; 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_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} 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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; 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_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi 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 # 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 zlib.h gif_lib.h io.h jpeglib.h assert.h signal.h pthread.h sys/stat.h sys/mman.h sys/types.h dirent.h sys/bsdtypes.h sys/ndir.h sys/dir.h ndir.h time.h sys/time.h sys/resource.h pdflib.h zzip/lib.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "boolean" "ac_cv_type_boolean" "$ac_includes_default" if test "x$ac_cv_type_boolean" = xyes; then : else cat >>confdefs.h <<_ACEOF #define boolean int _ACEOF fi #needed for jpeglib for ac_func in popen mkstemp stat mmap lrand48 rand srand48 srand bcopy bzero time getrusage mallinfo open64 calloc do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed char" >&5 $as_echo_n "checking size of signed char... " >&6; } if ${ac_cv_sizeof_signed_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed char))" "ac_cv_sizeof_signed_char" "$ac_includes_default"; then : else if test "$ac_cv_type_signed_char" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (signed char) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_signed_char=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_char" >&5 $as_echo "$ac_cv_sizeof_signed_char" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed short" >&5 $as_echo_n "checking size of signed short... " >&6; } if ${ac_cv_sizeof_signed_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed short))" "ac_cv_sizeof_signed_short" "$ac_includes_default"; then : else if test "$ac_cv_type_signed_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (signed short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_signed_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_short" >&5 $as_echo "$ac_cv_sizeof_signed_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIGNED_SHORT $ac_cv_sizeof_signed_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed" >&5 $as_echo_n "checking size of signed... " >&6; } if ${ac_cv_sizeof_signed+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed))" "ac_cv_sizeof_signed" "$ac_includes_default"; then : else if test "$ac_cv_type_signed" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (signed) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_signed=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed" >&5 $as_echo "$ac_cv_sizeof_signed" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIGNED $ac_cv_sizeof_signed _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed long long" >&5 $as_echo_n "checking size of signed long long... " >&6; } if ${ac_cv_sizeof_signed_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed long long))" "ac_cv_sizeof_signed_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_signed_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (signed long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_signed_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_long_long" >&5 $as_echo "$ac_cv_sizeof_signed_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SIGNED_LONG_LONG $ac_cv_sizeof_signed_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : else if test "$ac_cv_type_voidp" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void*) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_voidp=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_voidp" >&5 $as_echo "$ac_cv_sizeof_voidp" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOIDP $ac_cv_sizeof_voidp _ACEOF # Extract the first word of "freetype-config", so it can be a program name with args. set dummy freetype-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_FREETYPE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $FREETYPE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FREETYPE_CONFIG="$FREETYPE_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy=""$PATH:/usr/local/bin:/sw/bin:/opt/local/bin"" for as_dir in $as_dummy 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_FREETYPE_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 FREETYPE_CONFIG=$ac_cv_path_FREETYPE_CONFIG if test -n "$FREETYPE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_CONFIG" >&5 $as_echo "$FREETYPE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi OLDCPPFLAGS="${CPPFLAGS}" OLDLIBS="${LIBS}" if test "x${FREETYPE_CONFIG}" '!=' "x"; then CPPFLAGS="$CPPFLAGS "`$FREETYPE_CONFIG --cflags` else if test -d /usr/include/freetype2; then CPPFLAGS="$CPPFLAGS -I/usr/include/freetype2" else if test -d /usr/local/include/freetype2; then CPPFLAGS="$CPPFLAGS -I/usr/local/include/freetype2" fi fi fi if test "x${FREETYPE_CONFIG}" '=' "x";then # if we didn't find the freetype-config program, we won't # know where the libs are expected to be. So just blindly # try to link against them. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT_Init_FreeType in -lfreetype" >&5 $as_echo_n "checking for FT_Init_FreeType in -lfreetype... " >&6; } if ${ac_cv_lib_freetype_FT_Init_FreeType+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfreetype $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 FT_Init_FreeType (); int main () { return FT_Init_FreeType (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_freetype_FT_Init_FreeType=yes else ac_cv_lib_freetype_FT_Init_FreeType=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_freetype_FT_Init_FreeType" >&5 $as_echo "$ac_cv_lib_freetype_FT_Init_FreeType" >&6; } if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = xyes; then : HAVE_LIB_FREETYPE=1 fi fi for ac_header in ft2build.h do : ac_fn_c_check_header_mongrel "$LINENO" "ft2build.h" "ac_cv_header_ft2build_h" "$ac_includes_default" if test "x$ac_cv_header_ft2build_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FT2BUILD_H 1 _ACEOF HAVE_FT2BUILD_H=1 fi done if test "x${HAVE_FT2BUILD_H}" '=' "x";then for ac_header in freetype/freetype.h do : ac_fn_c_check_header_mongrel "$LINENO" "freetype/freetype.h" "ac_cv_header_freetype_freetype_h" "$ac_includes_default" if test "x$ac_cv_header_freetype_freetype_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FREETYPE_FREETYPE_H 1 _ACEOF HAVE_FREETYPE_FREETYPE_H=1 fi done fi if test "x${HAVE_LIB_FREETYPE}" '!=' "x" -o \ "x${FREETYPE_CONFIG}" '!=' "x";then if test "x${HAVE_FREETYPE_FREETYPE_H}" '!=' "x";then HAVE_FREETYPE=1 fi if test "x${HAVE_FT2BUILD_H}" '!=' "x";then HAVE_FREETYPE=1 fi fi if test "x${HAVE_FREETYPE}" = "x1"; then if test "x${FREETYPE_CONFIG}" '!=' "x"; then LIBS="$LIBS "`$FREETYPE_CONFIG --libs` else LIBS="$LIBS -lfreetype" fi if test "x${HAVE_FT2BUILD_H}" = "x1"; then HAVE_FT2BUILD_H_DEFINE='#define HAVE_FT2BUILD_H' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile the freetype test program" >&5 $as_echo_n "checking whether we can compile the freetype test program... " >&6; } cat > conftest.c << EOF $HAVE_FT2BUILD_H_DEFINE #ifdef HAVE_FT2BUILD_H #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_SIZES_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_OUTLINE_H #else #include #include #include #include #include #include #endif int main() { FT_Library ftlibrary; FT_Face face; FT_Error error; FT_ULong charcode; FT_UInt gindex; FT_Glyph glyph; FT_BBox bbox; FT_Matrix matrix; FT_UInt i; char* name = 0; char italic, bold; FT_Init_FreeType(&ftlibrary); FT_New_Face(ftlibrary, "filename", 0, &face); i = face->num_glyphs - 1; italic = face->style_flags&FT_STYLE_FLAG_ITALIC; bold = face->style_flags&FT_STYLE_FLAG_BOLD; FT_Get_Postscript_Name(face); FT_Get_Char_Index(face, 33); FT_Get_First_Char(face, &i); FT_Get_Next_Char(face, 33, &i); if(FT_HAS_GLYPH_NAMES(face)) { FT_Get_Glyph_Name(face, 33, name, 127); } FT_Load_Glyph(face, 33, FT_LOAD_NO_BITMAP|FT_LOAD_NO_SCALE); FT_Get_Glyph(face->glyph, &glyph); FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); FT_Done_Glyph(glyph); FT_Done_Face(face); FT_Done_FreeType(ftlibrary); return 0; } EOF ac_link='$CC $CPPFLAGS $CFLAGS conftest.c $LDFLAGS $LIBS -o conftest${ac_exeext}' if { (eval echo freetype.m4:71: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FREETYPE 1" >>confdefs.h $as_echo "#define HAVE_FREETYPE_FREETYPE_H 1" >>confdefs.h $as_echo "#define USE_FREETYPE 1" >>confdefs.h # for ttf2tp1 else echo "configure: failed program was:" >&5 cat conftest.c >&5 HAVE_FREETYPE=0 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* fi # if the above didn't work out, reset all changes to the compiler variables. if test "x${HAVE_FREETYPE}" '!=' "x1"; then CPPFLAGS=$OLDCPPFLAGS LIBS=$OLDLIBS fi OLDCPPFLAGS="${CPPFLAGS}" OLDLIBS="${LIBS}" if test -d /usr/include/fontconfig; then CPPFLAGS="$CPPFLAGS -I/usr/include/fontconfig" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FcInit in -lfontconfig" >&5 $as_echo_n "checking for FcInit in -lfontconfig... " >&6; } if ${ac_cv_lib_fontconfig_FcInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfontconfig $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 FcInit (); int main () { return FcInit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fontconfig_FcInit=yes else ac_cv_lib_fontconfig_FcInit=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_fontconfig_FcInit" >&5 $as_echo "$ac_cv_lib_fontconfig_FcInit" >&6; } if test "x$ac_cv_lib_fontconfig_FcInit" = xyes; then : HAVE_LIB_FONTCONFIG=1 fi for ac_header in fontconfig.h do : ac_fn_c_check_header_mongrel "$LINENO" "fontconfig.h" "ac_cv_header_fontconfig_h" "$ac_includes_default" if test "x$ac_cv_header_fontconfig_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FONTCONFIG_H 1 _ACEOF HAVE_FONTCONFIG_H=1 fi done if test "x${HAVE_LIB_FONTCONFIG}" != "x";then if test "x${HAVE_FONTCONFIG_H}" != "x";then HAVE_FONTCONFIG=1 fi fi if test "x${HAVE_FONTCONFIG}" = "x1"; then LIBS="$LIBS -lfontconfig" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile the fontconfig test program" >&5 $as_echo_n "checking whether we can compile the fontconfig test program... " >&6; } if (echo $LIBS | grep lfreetype >/dev/null 2>&1); then #move freetype library to the end of libraries, otherwise fontconfig #won't compile. LIBS=`echo $LIBS | sed -e 's/-lfreetype//g' -e 's/$/ -lfreetype/'` fi cat > conftest.c << EOF #include #include int main() { FcPattern *pattern, *match; FcResult result; FcChar8 *v; char*s1="abc",*s2="ABC"; strcasecmp(s1,s2); FcInit(); pattern = FcPatternBuild(0, FC_FAMILY, FcTypeString, "", 0); FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); FcConfig*c = FcConfigCreate(); FcConfigParseAndLoad(c, (FcChar8*)"", 1); FcConfigBuildFonts(c); FcConfigSetCurrent(c); FcFontSet * set = FcConfigGetFonts(c, FcSetSystem); FcFontSetDestroy(set); FcConfigSubstitute(0, pattern, FcMatchPattern); FcDefaultSubstitute(pattern); match = FcFontMatch(0, pattern, &result); FcPatternGetString(match, "family", 0, &v) == FcResultMatch; FcPatternGetBool(match, "family", 0, &v) == FcResultMatch; FcPatternPrint(pattern); FcPatternDestroy(pattern); FcPatternDestroy(match); FcFini(); return 0; } EOF ac_link='$CC $CPPFLAGS $CFLAGS conftest.c $LDFLAGS $LIBS -o conftest${ac_exeext}' if { (eval echo freetype.m4:71: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FONTCONFIG 1" >>confdefs.h else echo "configure: failed program was:" >&5 cat conftest.c >&5 HAVE_FONTCONFIG=0 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* fi # if the above didn't work out, reset all changes to the compiler variables. if test "x${HAVE_FONTCONFIG}" "!=" "x1"; then CPPFLAGS=$OLDCPPFLAGS LIBS=$OLDLIBS fi OLDCPPFLAGS="${CPPFLAGS}" OLDLIBS="${LIBS}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fftwf_plan_dft_r2c_2d in -lfftw3f" >&5 $as_echo_n "checking for fftwf_plan_dft_r2c_2d in -lfftw3f... " >&6; } if ${ac_cv_lib_fftw3f_fftwf_plan_dft_r2c_2d+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfftw3f $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 fftwf_plan_dft_r2c_2d (); int main () { return fftwf_plan_dft_r2c_2d (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_fftw3f_fftwf_plan_dft_r2c_2d=yes else ac_cv_lib_fftw3f_fftwf_plan_dft_r2c_2d=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_fftw3f_fftwf_plan_dft_r2c_2d" >&5 $as_echo "$ac_cv_lib_fftw3f_fftwf_plan_dft_r2c_2d" >&6; } if test "x$ac_cv_lib_fftw3f_fftwf_plan_dft_r2c_2d" = xyes; then : HAVE_LIBFFTW3=1 fi for ac_header in fftw3.h do : ac_fn_c_check_header_mongrel "$LINENO" "fftw3.h" "ac_cv_header_fftw3_h" "$ac_includes_default" if test "x$ac_cv_header_fftw3_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FFTW3_H 1 _ACEOF HAVE_FFTW3_H=1 fi done if test "x${HAVE_LIBFFTW3}" != "x";then if test "x${HAVE_FFTW3_H}" != "x";then HAVE_FFTW3=1 fi fi if test "x${HAVE_FFTW3}" = "x1"; then LIBS="$LIBS -lfftw3f" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile the fftw3 test program" >&5 $as_echo_n "checking whether we can compile the fftw3 test program... " >&6; } cat > conftest.c << EOF #include int main() { char*data = fftwf_malloc(sizeof(fftwf_complex)*600*800); fftwf_plan plan = fftwf_plan_dft_2d(600, 800, (fftwf_complex*)data, (fftwf_complex*)data, FFTW_FORWARD, FFTW_ESTIMATE); plan = fftwf_plan_dft_r2c_2d(600, 800, (float*)data, (fftwf_complex*)data, FFTW_ESTIMATE); plan = fftwf_plan_dft_c2r_2d(600, 800, (fftwf_complex*)data, (float*)data, FFTW_ESTIMATE); fftwf_execute(plan); fftwf_destroy_plan(plan); } EOF ac_link='$CC $CPPFLAGS $CFLAGS conftest.c $LDFLAGS $LIBS -o conftest${ac_exeext}' if { (eval echo fftw3.m4:71: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FFTW3 1" >>confdefs.h else echo "configure: failed program was:" >&5 cat conftest.c >&5 HAVE_FFTW3=0 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* fi # if the above didn't work out, reset all changes to the compiler variables. if test "x${HAVE_FFTW3}" "!=" "x1"; then CPPFLAGS=$OLDCPPFLAGS LIBS=$OLDLIBS fi # RFX_CHECK_OPENGL # if test "$HAVE_OPENGL";then # DEVICE_OPENGL='devices/opengl.$(O)' # AC_SUBST(DEVICE_OPENGL) # fi lame_in_source= lame_makefile= if test "x${DISABLE_LAME}" = "xtrue"; then echo "*" Disabling lame support... else # old lame code at lib/lame if test -f lib/lame/Makefile.in; then lame_in_source='$(lame_objects)' lame_makefile="lib/lame/Makefile" CPPFLAGS="$CPPFLAGS -Ilame -Ilib/lame" $as_echo "#define HAVE_LAME 1" >>confdefs.h else if test -d /usr/include/lame; then CPPFLAGS="$CPPFLAGS -I /usr/include/lame" else if test -d /usr/local/include/lame; then CPPFLAGS="$CPPFLAGS -I /usr/local/include/lame" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lame_init in -lmp3lame" >&5 $as_echo_n "checking for lame_init in -lmp3lame... " >&6; } if ${ac_cv_lib_mp3lame_lame_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmp3lame $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 lame_init (); int main () { return lame_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mp3lame_lame_init=yes else ac_cv_lib_mp3lame_lame_init=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_mp3lame_lame_init" >&5 $as_echo "$ac_cv_lib_mp3lame_lame_init" >&6; } if test "x$ac_cv_lib_mp3lame_lame_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBMP3LAME 1 _ACEOF LIBS="-lmp3lame $LIBS" else NO_LIBMP3LAME=1 fi HASLAMEHEADER= for ac_header in lame.h do : ac_fn_c_check_header_mongrel "$LINENO" "lame.h" "ac_cv_header_lame_h" "$ac_includes_default" if test "x$ac_cv_header_lame_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LAME_H 1 _ACEOF HASLAMEHEADER=1 fi done if test "x$NO_LIBMP3LAME" "!=" "x1" -a "x$HASLAMEHEADER" '!=' "x";then $as_echo "#define HAVE_LAME 1" >>confdefs.h fi fi fi xpdf_in_source= splash_in_source= xpdf_include= if test "x$USE_POPPLER" = "xtrue"; then $as_echo "#define HAVE_POPPLER 1" >>confdefs.h #PKG_CHECK_MODULES([POPPLER],[poppler poppler-splash],,[poppler_pkgconfig=no]) if test "x$poppler_pkgconfig" = "xno"; 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 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=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu for ac_header in OutputDev.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "OutputDev.h" "ac_cv_header_OutputDev_h" "$ac_includes_default" if test "x$ac_cv_header_OutputDev_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OUTPUTDEV_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpoppler" >&5 $as_echo_n "checking for main in -lpoppler... " >&6; } if ${ac_cv_lib_poppler_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpoppler $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_poppler_main=yes else ac_cv_lib_poppler_main=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_poppler_main" >&5 $as_echo "$ac_cv_lib_poppler_main" >&6; } if test "x$ac_cv_lib_poppler_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPOPPLER 1 _ACEOF LIBS="-lpoppler $LIBS" fi else as_fn_error $? "No poppler library found. This library is required." "$LINENO" 5 fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS" LIBS="$LIBS $POPPLER_LIBS" $as_echo "#define HAVE_POPPLER 1" >>confdefs.h fi else splash_in_source='$(splash_objects)' xpdf_in_source='$(xpdf_objects)' xpdf_include=' -I xpdf ' fi # ------------------------------------------------------------------ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the filesystem normalizes file names" >&5 $as_echo_n "checking whether the filesystem normalizes file names... " >&6; } echo test1 > __abcdefghijklmnopqrstuvwxyz.txt echo test2 > __ABCDEFGHIJKLMNOPQRSTUVWXYZ.txt if test `cat __abcdefghijklmnopqrstuvwxyz.txt` = "test2";then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define LOWERCASE_UPPERCASE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f __abcdefghijklmnopqrstuvwxyz.txt rm -f __ABCDEFGHIJKLMNOPQRSTUVWXYZ.txt for ac_prog in avifile-config 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_AVIFILE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AVIFILE_CONFIG"; then ac_cv_prog_AVIFILE_CONFIG="$AVIFILE_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AVIFILE_CONFIG="$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 AVIFILE_CONFIG=$ac_cv_prog_AVIFILE_CONFIG if test -n "$AVIFILE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AVIFILE_CONFIG" >&5 $as_echo "$AVIFILE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AVIFILE_CONFIG" && break done if test "x$AVIFILE_CONFIG" '!=' "x";then OLDCPPFLAGS="$CPPFLAGS" # temporarily add avifile paths to CPPFLAGS... CPPFLAGS="$CPPFLAGS $CXXFLAGS "`$AVIFILE_CONFIG --cflags` for ac_header in avifile/version.h version.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # ... and reset CPPFLAGS="$OLDCPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile the avifile test program" >&5 $as_echo_n "checking whether we can compile the avifile test program... " >&6; } if test "x${ac_cv_header_version_h}" '=' "xyes";then HAVE_VERSION_H_DEFINE='#define HAVE_VERSION_H' fi if test "x${ac_cv_header_avifile_version_h}" '=' "xyes";then HAVE_AVIFILE_VERSION_H_DEFINE='#define HAVE_AVIFILE_VERSION_H' fi cat > conftest.cpp << EOF // hack- we can't yet access the variables in config.h (because it hasn't been generated yet), // so we have to introduce them this way $HAVE_VERSION_H_DEFINE $HAVE_AVIFILE_VERSION_H_DEFINE #ifdef HAVE_VERSION_H #include #endif #ifdef HAVE_AVIFILE_VERSION_H #include #endif #if (AVIFILE_MAJOR_VERSION == 0) && (AVIFILE_MINOR_VERSION>=6) #include #include #include #include #include #define VERSION6 #else #include #include #include #define Width width #define Height height #define Data data #define Bpp bpp #endif void test() { IAviReadFile* player; IAviReadStream* astream; IAviReadStream* vstream; player = CreateIAviReadFile(0); astream = player->GetStream(0, AviStream::Audio); vstream = player->GetStream(0, AviStream::Video); vstream -> StartStreaming(); astream -> StartStreaming(); #ifndef VERSION6 MainAVIHeader head; player->GetFileHeader(&head); head.dwMicroSecPerFrame; head.dwTotalFrames; head.dwStreams; head.dwWidth; head.dwHeight; head.dwMicroSecPerFrame; astream->GetEndPos(), astream->GetEndTime()); player->StreamCount(); #else StreamInfo*audioinfo; StreamInfo*videoinfo; audioinfo = astream->GetStreamInfo(); videoinfo = vstream->GetStreamInfo(); videoinfo->GetVideoWidth(); videoinfo->GetVideoHeight(); audioinfo->GetAudioSamplesPerSec(); videoinfo->GetFps(); #endif CImage*img = vstream->GetFrame(); img->ToRGB(); img->Data(); img->Bpp(); img->Width(); img->Height(); WAVEFORMATEX wave; astream->GetAudioFormatInfo(&wave,0); uint_t a,b; astream->ReadFrames(0,0,0,a,b); } int main (int argc, char*argv) { return 0; } EOF if test "x$AVIFILE_CONFIG" '!=' "x";then AVIFILE_LIBS=`$AVIFILE_CONFIG --libs` AVIFILE_CFLAGS=`$AVIFILE_CONFIG --cflags` avifile_link='$CXX $CPPFLAGS $CXXFLAGS $AVIFILE_CFLAGS conftest.cpp $AVIFILE_LIBS -o conftest${ac_exeext}' if { (eval echo avi2swf.m4:71: \"$avifile_link\") 1>&5; (eval $avifile_link) 2>&5; } && test -s conftest${ac_exeext} && ./conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } AVIFILE=true export AVIFILE $as_echo "#define AVIFILE true" >>confdefs.h else echo "configure: failed program was:" >&5 cat conftest.cpp >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* if test "x${AVIFILE}" = "xtrue"; then VIDEO_LIBS="$VIDEO_LIBS $AVIFILE_LIBS" VIDEO_CFLAGS="$VIDEO_CFLAGS $AVIFILE_CFLAGS" $as_echo "#define HAVE_AVIFILE 1" >>confdefs.h fi if test "x${WIN32}" != "x"; then #AC_CHECK_LIB(avifil32, AVIFileInit,AVIFIL32=true) #if test "x${AVIFIL32}" != "x"; then # VIDEO_LIBS="$VIDEO_LIBS -lavifil32" #fi VIDEO_LIBS="$VIDEO_LIBS -lavifil32" AVIFIL32=true fi # ------------------------------------------------------------------ if test "x${UNCOMPRESS}" = "xgzip"; then $as_echo "#define USE_GZIP 1" >>confdefs.h fi # ------------------------------------------------------------------ # Extract the first word of "ruby", so it can be a program name with args. set dummy ruby; 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_RUBY+:} false; then : $as_echo_n "(cached) " >&6 else case $RUBY in [\\/]* | ?:[\\/]*) ac_cv_path_RUBY="$RUBY" # 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_RUBY="$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 RUBY=$ac_cv_path_RUBY if test -n "$RUBY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5 $as_echo "$RUBY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi RUBY_CPPFLAGS="" RUBY_LDFLAGS="" RUBY_LIBS="" rubylib=ruby18 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ruby's include directory" >&5 $as_echo_n "checking for ruby's include directory... " >&6; } if test "x$RUBY" '!=' "x";then rubyinc=`$RUBY -e 'require "rbconfig";puts Config::expand(Config::CONFIG.send("\x5b\x5d", "archdir"))' 2>/dev/null` if test -d $rubyinc;then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyinc" >&5 $as_echo "$rubyinc" >&6; } # If we got a sensible archdir, we also ask ruby to supply us with CPPFLAGS # and LDFLAGS. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ruby's cpp flags" >&5 $as_echo_n "checking for ruby's cpp flags... " >&6; } rubycpp=`$RUBY -e 'require "rbconfig";puts Config::expand(Config::CONFIG.send("\x5b\x5d", "CPPFLAGS"))' 2>/dev/null` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubycpp" >&5 $as_echo "$rubycpp" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ruby's ld flags" >&5 $as_echo_n "checking for ruby's ld flags... " >&6; } rubyld=`$RUBY -e 'require "rbconfig";puts Config::expand(Config::CONFIG.send("\x5b\x5d", "LIBRUBYARG_SHARED"))' 2>/dev/null` rubyld2=`$RUBY -e 'require "rbconfig";v=Config::expand(Config::CONFIG.send("\x5b\x5d", "LIBRUBY_LDSHARED"));puts v.gsub(/^g?cc/,"")' 2>/dev/null` { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$rubyld $rubyld2\"" >&5 $as_echo "\"$rubyld $rubyld2\"" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ruby library name" >&5 $as_echo_n "checking for ruby library name... " >&6; } rubylib=`$RUBY -e 'require "rbconfig";puts Config::expand(Config::CONFIG.send("\x5b\x5d", "RUBY_SO_NAME"))' 2>/dev/null` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubylib" >&5 $as_echo "$rubylib" >&6; } RUBY_CPPFLAGS="$rubycpp -I$rubyinc $RUBY_CPPFLAGS" RUBY_LDFLAGS="$rubyld $rubyld2 $RUBY_LDFLAGS" RUBY_INSTALLDIR="$rubyinc" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'unknown'" >&5 $as_echo "'unknown'" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: 'unknown'" >&5 $as_echo "'unknown'" >&6; } fi #OLDLDFLAGS="$LDFLAGS" #LDFLAGS="$LDFLAGS $RUBY_LDFLAGS" #AC_CHECK_LIB($rubylib, rb_define_method, HAVE_RUBY_LIB=1,) #LDFLAGS="$OLDLDFLAGS" OLDCPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $RUBY_CPPFLAGS" for ac_header in ruby.h do : ac_fn_c_check_header_mongrel "$LINENO" "ruby.h" "ac_cv_header_ruby_h" "$ac_includes_default" if test "x$ac_cv_header_ruby_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_RUBY_H 1 _ACEOF HAVE_RUBY_H=1 fi done CPPFLAGS="$OLDCPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we should compile the ruby module" >&5 $as_echo_n "checking whether we should compile the ruby module... " >&6; } if test "x${HAVE_RUBY_H}" '!=' "x";then #RUBY_LIBS="$RUBY_LIBS -l$rubylib" cat > conftest.c << EOF #include static VALUE foobar; VALUE foobar_set_foo(VALUE module, VALUE _key, VALUE _value) { return Qnil; } int Init_foobar() { foobar = rb_define_module("foobar"); rb_define_module_function(foobar, "set_foo", foobar_set_foo, 2); return 0; } int main() {return 0;} EOF ac_link='$CC $SHARED $CPPFLAGS $RUBY_CPPFLAGS $CFLAGS conftest.c $LDFLAGS $RUBY_LDFLAGS $LIBS $RUBY_LIBS -o conftest${SLEXT}' if { (eval echo ruby.m4: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${SLEXT}; then RUBY_OK=yes else echo "configure: failed program was:" >&5 cat conftest.c >&5 fi rm -f conftest* fi if test "x${RUBY_OK}" '=' "xyes"; 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; } RUBY_CPPFLAGS="" RUBY_LDFLAGS="" RUBY_LIBS="" RUBY_INSTALLDIR="" fi if test "x$RUBY_OK" '!=' "xyes";then if test -d "lib/ruby/";then echo all install uninstall clean: > lib/ruby/Makefile fi # fail silently- the most users won't have any need for the # ruby interface anyway else if test -f "lib/ruby/Makefile.in";then rubygfx="lib/ruby/Makefile" fi fi # ------------------------------------------------------------------ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for missing libraries" >&5 $as_echo_n "checking for missing libraries... " >&6; } if test "x$ZLIBMISSING" = "xtrue";then MISSINGLIBS="${MISSINGLIBS} zlib" DISABLEPNG2SWF=true PARTIAL=true fi if test "x$JPEGLIBMISSING" = "xtrue";then MISSINGLIBS="${MISSINGLIBS} jpeglib" DISABLEPDF2SWF=true DISABLEJPEG2SWF=true PARTIAL=true fi if test "x$PDFLIBMISSING" = "xtrue";then DISABLEPDF2PDF=true; fi #if test "x$T1LIBMISSING" = "xtrue";then # MISSINGLIBS="${MISSINGLIBS} t1lib" #fi if test "x$UNGIFMISSING" = "xtrue";then DISABLEGIF2SWF=true MISSINGLIBS="${MISSINGLIBS} ungif" PARTIAL=true fi if test "x${ac_cv_header_pdflib_h}" '!=' "xyes";then DISABLEPDF2PDF=true; fi if test "x${ac_cv_header_jpeglib_h}" '!=' "xyes"; then DISABLEPDF2SWF=true; DISABLEJPEG2SWF=true; MISSINGLIBS="${MISSINGLIBS} jpeglib.h" PARTIAL=true fi if test "x$HAVE_FREETYPE" '!=' "x1"; then DISABLEPDF2SWF=true; MISSINGLIBS="${MISSINGLIBS} freetype" PARTIAL=true fi #if test "x${ac_cv_header_t1lib_h}" '!=' "xyes"; then # MISSINGLIBS="${MISSINGLIBS} t1lib.h" #fi if test "x${ac_cv_header_gif_lib_h}" '!=' "xyes"; then DISABLEGIF2SWF=true MISSINGLIBS="${MISSINGLIBS} gif_lib.h" PARTIAL=true fi if test "x${ac_cv_header_zlib_h}" '!=' "xyes"; then DISABLEPNG2SWF=true; MISSINGLIBS="${MISSINGLIBS} zlib.h" PARTIAL=true fi #if test "x${AVIFILE}" '!=' "xtrue" -a "x${AVIFIL32}" '!=' "xtrue"; then # MISSINGLIBS="${MISSINGLIBS} avifile" #fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${MISSINGLIBS}" >&5 $as_echo "${MISSINGLIBS}" >&6; } # ------------------------------------------------------------------ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python version" >&5 $as_echo_n "checking for Python version... " >&6; } if test "x$PYTHON_LIB" '!=' "x" -a "x$PYTHON_INCLUDES" '!=' "x";then # you can override the python detection by putting PYTHON_LIB # and PYTHON_INCLUDES into the environment case "$PYTHON_INCLUDES" in *python2.4*) PY_VERSION=2.4 ;; *python2.5*) PY_VERSION=2.5 ;; *python2.6*) PY_VERSION=2.6 ;; *python2.7*) PY_VERSION=2.7 ;; *python3.0*) PY_VERSION=3.0 ;; *python3.1*) PY_VERSION=3.1 ;; *python3.2*) PY_VERSION=3.2 ;; *python3.3*) PY_VERSION=3.3 ;; *) PY_VERSION=unknown ;; esac else if test "x$PYTHON_LIB" '!=' "x" -o "x$PYTHON_INCLUDES" '!=' "x";then echo "Set both PYTHON_LIB and PYTHON_INCLUDES, or none at all" fi # iterate through version 2.4 to 3.3 VERSIONS="2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3" case "$PYTHON" in 2*) VERSIONS="2.4 2.5 2.6 2.7 $PYTHON" ;; 3*) VERSIONS="3.0 3.1 3.2 3.3 $PYTHON" ;; esac for v in $VERSIONS; do # Linux if test -f "/usr/include/python$v/Python.h";then PY_VERSION=$v PYTHON_LIB="-lpython$PY_VERSION" if test -f "/usr/lib/python$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /usr/lib/python$v/site-packages/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I/usr/include/python$PY_VERSION" # Mac OS X elif test -f "/Library/Frameworks/Python.framework/Versions/$v/include/python$v/Python.h";then PY_VERSION=$v PYTHON_LIB="-framework Python" if test -f "/Library/Frameworks/Python.framework/Versions/$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /Library/Python/$v/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I/Library/Frameworks/Python.framework/Versions/$v/include/python$v/" # Mac OS X [Fink]: elif test "(" -f "/sw/lib/python$v/config/libpython$v.dylib" \ -o -f "/sw/lib/python$v/config/libpython$v.a" \ -o -f "/sw/lib/python$v/config/libpython$v.so" \ ")" \ -a -f "/sw/include/python$v/Python.h"; then PY_VERSION=$v PYTHON_LIB="-L /sw/lib/python$v/config/ -lpython$PY_VERSION /sw/lib/python$v/site-packages/PIL/_imaging.so" if test -f "/sw/lib/python$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /sw/lib/python$v/site-packages/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I /sw/include/python$v/" fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PY_VERSION" >&5 $as_echo "$PY_VERSION" >&6; } if test "x$PY_VERSION" "!=" "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python executable" >&5 $as_echo_n "checking for Python executable... " >&6; } if python$PY_VERSION -V 2>&5;then PYTHON_EXECUTABLE=python$PY_VERSION { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXECUTABLE" >&5 $as_echo "$PYTHON_EXECUTABLE" >&6; } elif python -V >&5 2>&5;then if python -V 2>&1 | grep -q "\b$PY_VERSION"; then PYTHON_EXECUTABLE=python { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXECUTABLE" >&5 $as_echo "$PYTHON_EXECUTABLE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"'python' executable is not version $PY_VERSION\"" >&5 $as_echo "\"'python' executable is not version $PY_VERSION\"" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } fi fi if test "x$PY_VERSION" "!=" "x" -a "x$PYTHON_EXECUTABLE" "!=" "x"; then export PYTHON_INCLUDES PYTHON_LIB { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile the Python test program" >&5 $as_echo_n "checking whether we can compile the Python test program... " >&6; } cat > conftest.c << EOF # include int main() { int ret; ret = Py_Main(0, 0); int x; // check also for gcc 2.95.x incompatibilities return ret; } EOF ac_link='$CC $CPPFLAGS $CFLAGS $PYTHON_INCLUDES conftest.c $LDFLAGS $PYTHON_LIB $LIBS -o conftest${ac_exeext}' if { (eval echo python.m4: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } PYTHON_OK=yes else echo "configure: failed program was:" >&5 cat conftest.c >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python install path" >&5 $as_echo_n "checking for Python install path... " >&6; } cat > _pypath.py << EOF import distutils import distutils.sysconfig import sys sys.stdout.write(distutils.sysconfig.get_python_lib(plat_specific=0,standard_lib=0)) EOF echo $PYTHON_EXECUTABLE _pypath.py 1>&5 if $PYTHON_EXECUTABLE _pypath.py >_pypath.txt 2>&5;then PYTHON_INSTALL_PATH=`cat _pypath.txt` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_INSTALL_PATH" >&5 $as_echo "$PYTHON_INSTALL_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } fi #rm -f _pypath.txt _pypath.py if test "x$PYTHON_OK" = "xyes";then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python-Imaging" >&5 $as_echo_n "checking for Python-Imaging... " >&6; } cat > conftest.c << EOF # include # include int main() { Py_Main(0, 0); return 0; } EOF if test "$HAVE_PYTHON_IMAGING_LIB"; then ac_link='$CC $CPPFLAGS $CFLAGS $PYTHON_INCLUDES conftest.c $LDFLAGS ${PYTHON_LIB2} $LIBS -o conftest${ac_exeext}' if { (eval echo python.m4: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then PYTHON_LIB="${PYTHON_LIB2}" $as_echo "#define HAVE_PYTHON_IMAGING 1" >>confdefs.h HAVE_PYTHON_IMAGING=yes export HAVE_PYTHON_IMAGING { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else echo "configure: failed program was:" >&5 cat conftest.c >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else echo "(didn't find the Python-Imaging libraries)" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi rm -f conftest* fi if test "x$PYTHON_OK" '!=' "xyes" -o "$DISABLEPDF2SWF";then echo all install uninstall clean: > lib/python/Makefile # fail silently- the most users won't have any need for the # python interface anyway else pythongfx="lib/python/Makefile" fi # ------------------------------------------------------------------ if test "x${MISSINGLIBS}" '!=' "x"; then echo "***************************************************" echo "* The following headers/libraries are missing: " ${MISSINGLIBS} fi avi2swf="avi2swf/Makefile" if test "x${AVIFILE}" '!=' "xtrue" -a "x${AVIFIL32}" '!=' "xtrue"; then #don't whine, avi2swf is outdated anyway #echo "* Disabling avi2swf tool..." echo all install uninstall clean: > avi2swf/Makefile avi2swf= fi pdf2swf_makefile="lib/pdf/Makefile" PDF2SWF='pdf2swf$(E)' LIBPDF='libpdf$(A)' if test "x${DISABLEPDF2SWF}" = "xtrue"; then echo "* Disabling pdf2swf tool..." rm -f lib/pdf/Makefile echo all install uninstall clean libpdf libgfxpdf: > lib/pdf/Makefile pdf2swf_makefile="" PDF2SWF= LIBPDF= fi PDF2PDF='pdf2pdf$(E)' DEVICE_PDF='devices/pdf.$(O)' if test "x${DISABLEPDF2PDF}" = "xtrue"; then #echo "* Disabling pdf2pdf tool..." PDF2PDF= DEVICE_PDF= fi if test "x${ZLIBMISSING}" = "xtrue"; then echo echo "* Warning! Without zlib, you will not be able to read" echo "* or write compressed Flash MX files!" fi JPEG2SWF='jpeg2swf$(E)' if test "x${DISABLEJPEG2SWF}" = "xtrue"; then echo "* Disabling jpeg2swf tool..." JPEG2SWF= fi export JPEG2SWF GIF2SWF='gif2swf$(E)' if test "x${DISABLEGIF2SWF}" = "xtrue"; then echo "* Disabling gif2swf tool..." GIF2SWF= fi export GIF2SWF PNG2SWF='png2swf$(E)' if test "x${DISABLEPNG2SWF}" = "xtrue"; then echo "* Disabling png2swf tool..." PNG2SWF= fi export PNG2SWF if test "x${MISSINGLIBS}" '!=' "x"; then if test "x${PARTIAL}" '=' "x"; then echo "* (never mind)" fi echo "***************************************************" fi # ------------------------------------------------------------------ if test -f "release.in"; then release_in="./release"; fi if test -f "Makefile.new.in"; then mk_in="./Makefile.new"; fi FILES="$release_in $mk_in Makefile.common ${avi2swf} Makefile lib/Makefile lib/action/Makefile src/Makefile ${pdf2swf_makefile} swfs/Makefile ${pythongfx} ${rubygfx} ${lame_makefile} lib/readers/Makefile" ac_config_files="$ac_config_files ${FILES}" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers 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' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "${FILES}") CONFIG_FILES="$CONFIG_FILES ${FILES}" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " 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 _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 $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; 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 # # On development trees, create snapshots of config.status # if test -f snapshot -a "x$CHECKMEM" = "x" -a "x$PROFILING" = "x";then if test "x${MINGW}" = "xyes"; then echo cp config.status config.status.win32 cp config.status config.status.win32 else if test "x$DEBUG" '=' "x" -a "x$OPTIMIZE" '=' "x";then echo cp config.status config.status.linux cp config.status config.status.linux fi if test "x$DEBUG" '!=' "x" -a "x$OPTIMIZE" '=' "x";then echo cp config.status config.status.debug cp config.status config.status.debug fi if test "x$DEBUG" = "x" -a "x$OPTIMIZE" '!=' "x"; then echo cp config.status config.status.optimize cp config.status config.status.optimize fi fi fi swftools_0.9.2+git20130725.orig/m4/0002755000175000017500000000000012216332657015655 5ustar gawaingawainswftools_0.9.2+git20130725.orig/m4/freetype.m40000644000175000017500000000765112216332640017741 0ustar gawaingawain# ----------- freetype.m4 ---------------- # # Checks for: # * freetype library (-lfreetype) # * freetype headers (freetype2/freetype/freetype.h) # * whether a freetype test program can be compiled # # Environment set: # * HAVE_FREETYPE # # Defines: # * HAVE_FREETYPE # * USE_FREETYPE # # Substitutes: # AC_DEFUN([RFX_CHECK_FREETYPE], [ AC_PATH_PROG([FREETYPE_CONFIG], [freetype-config],, ["$PATH:/usr/local/bin:/sw/bin:/opt/local/bin"]) OLDCPPFLAGS="${CPPFLAGS}" OLDLIBS="${LIBS}" if test "x${FREETYPE_CONFIG}" '!=' "x"; then CPPFLAGS="$CPPFLAGS "`$FREETYPE_CONFIG --cflags` else if test -d /usr/include/freetype2; then CPPFLAGS="$CPPFLAGS -I/usr/include/freetype2" else if test -d /usr/local/include/freetype2; then CPPFLAGS="$CPPFLAGS -I/usr/local/include/freetype2" fi fi fi if test "x${FREETYPE_CONFIG}" '=' "x";then # if we didn't find the freetype-config program, we won't # know where the libs are expected to be. So just blindly # try to link against them. AC_CHECK_LIB([freetype], [FT_Init_FreeType],[HAVE_LIB_FREETYPE=1],) fi AC_CHECK_HEADERS([ft2build.h],[HAVE_FT2BUILD_H=1]) if test "x${HAVE_FT2BUILD_H}" '=' "x";then AC_CHECK_HEADERS([freetype/freetype.h],[HAVE_FREETYPE_FREETYPE_H=1]) fi if test "x${HAVE_LIB_FREETYPE}" '!=' "x" -o \ "x${FREETYPE_CONFIG}" '!=' "x";then if test "x${HAVE_FREETYPE_FREETYPE_H}" '!=' "x";then HAVE_FREETYPE=1 fi if test "x${HAVE_FT2BUILD_H}" '!=' "x";then HAVE_FREETYPE=1 fi fi if test "x${HAVE_FREETYPE}" = "x1"; then if test "x${FREETYPE_CONFIG}" '!=' "x"; then LIBS="$LIBS "`$FREETYPE_CONFIG --libs` else LIBS="$LIBS -lfreetype" fi if test "x${HAVE_FT2BUILD_H}" = "x1"; then HAVE_FT2BUILD_H_DEFINE='#define HAVE_FT2BUILD_H' fi AC_MSG_CHECKING([whether we can compile the freetype test program]) cat > conftest.c << EOF $HAVE_FT2BUILD_H_DEFINE #ifdef HAVE_FT2BUILD_H #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_SIZES_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_OUTLINE_H #else #include #include #include #include #include #include #endif int main() { FT_Library ftlibrary; FT_Face face; FT_Error error; FT_ULong charcode; FT_UInt gindex; FT_Glyph glyph; FT_BBox bbox; FT_Matrix matrix; FT_UInt i; char* name = 0; char italic, bold; FT_Init_FreeType(&ftlibrary); FT_New_Face(ftlibrary, "filename", 0, &face); i = face->num_glyphs - 1; italic = face->style_flags&FT_STYLE_FLAG_ITALIC; bold = face->style_flags&FT_STYLE_FLAG_BOLD; FT_Get_Postscript_Name(face); FT_Get_Char_Index(face, 33); FT_Get_First_Char(face, &i); FT_Get_Next_Char(face, 33, &i); if(FT_HAS_GLYPH_NAMES(face)) { FT_Get_Glyph_Name(face, 33, name, 127); } FT_Load_Glyph(face, 33, FT_LOAD_NO_BITMAP|FT_LOAD_NO_SCALE); FT_Get_Glyph(face->glyph, &glyph); FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); FT_Done_Glyph(glyph); FT_Done_Face(face); FT_Done_FreeType(ftlibrary); return 0; } EOF ac_link='$CC $CPPFLAGS $CFLAGS conftest.c $LDFLAGS $LIBS -o conftest${ac_exeext}' if { (eval echo freetype.m4:71: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_FREETYPE], [1], [have/use freetype library]) AC_DEFINE([HAVE_FREETYPE_FREETYPE_H], [1], [Define if freetype headers are available]) AC_DEFINE([USE_FREETYPE], [1], [Define if freetype is available]) # for ttf2tp1 else echo "configure: failed program was:" >&5 cat conftest.c >&5 HAVE_FREETYPE=0 AC_MSG_RESULT([no]) fi rm -f conftest* fi # if the above didn't work out, reset all changes to the compiler variables. if test "x${HAVE_FREETYPE}" '!=' "x1"; then CPPFLAGS=$OLDCPPFLAGS LIBS=$OLDLIBS fi ]) swftools_0.9.2+git20130725.orig/m4/python.m40000644000175000017500000001401512216332640017427 0ustar gawaingawainAC_DEFUN([RFX_CHECK_PYTHON], [ AC_MSG_CHECKING([for Python version]) if test "x$PYTHON_LIB" '!=' "x" -a "x$PYTHON_INCLUDES" '!=' "x";then # you can override the python detection by putting PYTHON_LIB # and PYTHON_INCLUDES into the environment case "$PYTHON_INCLUDES" in *python2.4*) PY_VERSION=2.4 ;; *python2.5*) PY_VERSION=2.5 ;; *python2.6*) PY_VERSION=2.6 ;; *python2.7*) PY_VERSION=2.7 ;; *python3.0*) PY_VERSION=3.0 ;; *python3.1*) PY_VERSION=3.1 ;; *python3.2*) PY_VERSION=3.2 ;; *python3.3*) PY_VERSION=3.3 ;; *) PY_VERSION=unknown ;; esac else if test "x$PYTHON_LIB" '!=' "x" -o "x$PYTHON_INCLUDES" '!=' "x";then echo "Set both PYTHON_LIB and PYTHON_INCLUDES, or none at all" fi # iterate through version 2.4 to 3.3 VERSIONS="2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3" case "$PYTHON" in 2*) VERSIONS="2.4 2.5 2.6 2.7 $PYTHON" ;; 3*) VERSIONS="3.0 3.1 3.2 3.3 $PYTHON" ;; esac for v in $VERSIONS; do # Linux if test -f "/usr/include/python$v/Python.h";then PY_VERSION=$v PYTHON_LIB="-lpython$PY_VERSION" if test -f "/usr/lib/python$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /usr/lib/python$v/site-packages/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I/usr/include/python$PY_VERSION" # Mac OS X elif test -f "/Library/Frameworks/Python.framework/Versions/$v/include/python$v/Python.h";then PY_VERSION=$v PYTHON_LIB="-framework Python" if test -f "/Library/Frameworks/Python.framework/Versions/$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /Library/Python/$v/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I/Library/Frameworks/Python.framework/Versions/$v/include/python$v/" # Mac OS X [Fink]: elif test "(" -f "/sw/lib/python$v/config/libpython$v.dylib" \ -o -f "/sw/lib/python$v/config/libpython$v.a" \ -o -f "/sw/lib/python$v/config/libpython$v.so" \ ")" \ -a -f "/sw/include/python$v/Python.h"; then PY_VERSION=$v PYTHON_LIB="-L /sw/lib/python$v/config/ -lpython$PY_VERSION /sw/lib/python$v/site-packages/PIL/_imaging.so" if test -f "/sw/lib/python$v/site-packages/PIL/_imaging.so";then PYTHON_LIB2="$PYTHON_LIB /sw/lib/python$v/site-packages/PIL/_imaging.so" HAVE_PYTHON_IMAGING_LIB=1 else PYTHON_LIB2="$PYTHON_LIB" fi PYTHON_INCLUDES="-I /sw/include/python$v/" fi done fi AC_MSG_RESULT($PY_VERSION) if test "x$PY_VERSION" "!=" "x"; then AC_MSG_CHECKING([for Python executable]) if python$PY_VERSION -V 2>&5;then PYTHON_EXECUTABLE=python$PY_VERSION AC_SUBST(PYTHON_EXECUTABLE) AC_MSG_RESULT([$PYTHON_EXECUTABLE]) elif python -V >&5 2>&5;then if python -V 2>&1 | grep -q "\b$PY_VERSION"; then PYTHON_EXECUTABLE=python AC_SUBST(PYTHON_EXECUTABLE) AC_MSG_RESULT([$PYTHON_EXECUTABLE]) else AC_MSG_RESULT(["'python' executable is not version $PY_VERSION"]) fi else AC_MSG_RESULT([failed]) fi fi if test "x$PY_VERSION" "!=" "x" -a "x$PYTHON_EXECUTABLE" "!=" "x"; then export PYTHON_INCLUDES PYTHON_LIB AC_SUBST(PYTHON_LIB) AC_SUBST(PYTHON_INCLUDES) AC_MSG_CHECKING([whether we can compile the Python test program]) cat > conftest.c << EOF # include int main() { int ret; ret = Py_Main(0, 0); int x; // check also for gcc 2.95.x incompatibilities return ret; } EOF ac_link='$CC $CPPFLAGS $CFLAGS $PYTHON_INCLUDES conftest.c $LDFLAGS $PYTHON_LIB $LIBS -o conftest${ac_exeext}' if { (eval echo python.m4: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then AC_MSG_RESULT(yes) PYTHON_OK=yes else echo "configure: failed program was:" >&5 cat conftest.c >&5 AC_MSG_RESULT(no) fi rm -f conftest* AC_MSG_CHECKING([for Python install path]) cat > _pypath.py << EOF import distutils import distutils.sysconfig import sys sys.stdout.write(distutils.sysconfig.get_python_lib(plat_specific=0,standard_lib=0)) EOF echo $PYTHON_EXECUTABLE _pypath.py 1>&5 if $PYTHON_EXECUTABLE _pypath.py >_pypath.txt 2>&5;then PYTHON_INSTALL_PATH=`cat _pypath.txt` AC_SUBST(PYTHON_INSTALL_PATH) AC_MSG_RESULT($PYTHON_INSTALL_PATH) else AC_MSG_RESULT([failed]) fi #rm -f _pypath.txt _pypath.py if test "x$PYTHON_OK" = "xyes";then AC_MSG_CHECKING([for Python-Imaging]) cat > conftest.c << EOF # include # include int main() { Py_Main(0, 0); return 0; } EOF if test "$HAVE_PYTHON_IMAGING_LIB"; then ac_link='$CC $CPPFLAGS $CFLAGS $PYTHON_INCLUDES conftest.c $LDFLAGS ${PYTHON_LIB2} $LIBS -o conftest${ac_exeext}' if { (eval echo python.m4: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then PYTHON_LIB="${PYTHON_LIB2}" AC_DEFINE([HAVE_PYTHON_IMAGING], [1], [whether Python-Imaging was found]) HAVE_PYTHON_IMAGING=yes export HAVE_PYTHON_IMAGING AC_SUBST(HAVE_PYTHON_IMAGING) AC_MSG_RESULT(yes) else echo "configure: failed program was:" >&5 cat conftest.c >&5 AC_MSG_RESULT(no) fi else echo "(didn't find the Python-Imaging libraries)" >&5 AC_MSG_RESULT(no) fi fi rm -f conftest* fi ]) swftools_0.9.2+git20130725.orig/m4/gcc.2.95.m40000644000175000017500000000113712216332640017237 0ustar gawaingawainAC_DEFUN([RFX_CHECK_OLDGCC], [ AC_MSG_CHECKING([whether gcc supports lazy variable declaration]) cat > conftest.c << EOF #include #include int main () { int a,b; b=3; int c; c=4; return 0; } EOF testprog_link='$CC $CPPFLAGS $CFLAGS conftest.c -o conftest${ac_exeext}' if { (eval echo gcc.2.95.m4:19: \"$testprog_link\") 1>&5; (eval $testprog_link) 2>&5; } && test -s conftest${ac_exeext}; then AC_MSG_RESULT(yes) GCC_IS_OK=true export GCC_IS_OK else echo "configure: failed program was:" >&5 cat conftest.c >&5 AC_MSG_RESULT(no) fi rm -f conftest* ]) swftools_0.9.2+git20130725.orig/m4/backticks.m40000644000175000017500000000113012216332640020036 0ustar gawaingawainAC_DEFUN([RFX_CHECK_SYSTEM_BACKTICKS], [ AC_MSG_CHECKING([whether system() can handle command substitution]) AC_TRY_RUN([ #include "stdlib.h" int main (int argc, char*argv[]) { return system("test `touch config.tmp2`"); } ], [OK=OK],,[CROSSCOMPILE=1]) if test "x${OK}" = "xOK";then test -f config.tmp2 || OK= fi if test "x${CROSSCOMPILE}" = "x1";then OK=no; fi if test "x${OK}" = "xOK";then rm -f config.tmp2 AC_MSG_RESULT(yes) SYSTEM_BACKTICKS=1 export SYSTEM_BACKTICKS AC_DEFINE([SYSTEM_BACKTICKS], [1], [Define if system handles command substitution]) else AC_MSG_RESULT(no) fi ]) swftools_0.9.2+git20130725.orig/m4/Makefile0000644000175000017500000000075112216332640017306 0ustar gawaingawain# simple pmake detecting Makefile all: clear test.o clean: clear install: uninstall: CC=@echo "*******************************************************";\ echo "Your make is broken- try to get yourself a working one.";\ echo "gmake 3.79.1 or newer should be fine. ";\ echo "*******************************************************";\ exit 1;exec >/dev/null;echo clear: @rm -f test.c %.o: %.c test.c: @touch test.c test.o: test.c .SUFFIXES: .o .cpp swftools_0.9.2+git20130725.orig/m4/fontconfig.m40000644000175000017500000000524612216332640020250 0ustar gawaingawain# ----------- freetype.m4 ---------------- # # Checks for: # * freetype library (-lfreetype) # * freetype headers (freetype2/freetype/freetype.h) # * whether a freetype test program can be compiled # # Environment set: # * HAVE_FREETYPE # # Defines: # * HAVE_FREETYPE # * USE_FREETYPE # # Substitutes: # AC_DEFUN([RFX_CHECK_FONTCONFIG], [ OLDCPPFLAGS="${CPPFLAGS}" OLDLIBS="${LIBS}" if test -d /usr/include/fontconfig; then CPPFLAGS="$CPPFLAGS -I/usr/include/fontconfig" fi AC_CHECK_LIB(fontconfig, FcInit, [HAVE_LIB_FONTCONFIG=1],) AC_CHECK_HEADERS(fontconfig.h,[HAVE_FONTCONFIG_H=1]) if test "x${HAVE_LIB_FONTCONFIG}" != "x";then if test "x${HAVE_FONTCONFIG_H}" != "x";then HAVE_FONTCONFIG=1 fi fi if test "x${HAVE_FONTCONFIG}" = "x1"; then LIBS="$LIBS -lfontconfig" AC_MSG_CHECKING([whether we can compile the fontconfig test program]) if (echo $LIBS | grep lfreetype >/dev/null 2>&1); then #move freetype library to the end of libraries, otherwise fontconfig #won't compile. LIBS=`echo $LIBS | sed -e 's/-lfreetype//g' -e 's/$/ -lfreetype/'` fi cat > conftest.c << EOF #include #include int main() { FcPattern *pattern, *match; FcResult result; FcChar8 *v; char*s1="abc",*s2="ABC"; strcasecmp(s1,s2); FcInit(); pattern = FcPatternBuild(0, FC_FAMILY, FcTypeString, "", 0); FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); FcConfig*c = FcConfigCreate(); FcConfigParseAndLoad(c, (FcChar8*)"", 1); FcConfigBuildFonts(c); FcConfigSetCurrent(c); FcFontSet * set = FcConfigGetFonts(c, FcSetSystem); FcFontSetDestroy(set); FcConfigSubstitute(0, pattern, FcMatchPattern); FcDefaultSubstitute(pattern); match = FcFontMatch(0, pattern, &result); FcPatternGetString(match, "family", 0, &v) == FcResultMatch; FcPatternGetBool(match, "family", 0, &v) == FcResultMatch; FcPatternPrint(pattern); FcPatternDestroy(pattern); FcPatternDestroy(match); FcFini(); return 0; } EOF ac_link='$CC $CPPFLAGS $CFLAGS conftest.c $LDFLAGS $LIBS -o conftest${ac_exeext}' if { (eval echo freetype.m4:71: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then AC_MSG_RESULT(yes) AC_DEFINE([HAVE_FONTCONFIG], [1], [Define if fontconfig is available]) else echo "configure: failed program was:" >&5 cat conftest.c >&5 HAVE_FONTCONFIG=0 AC_MSG_RESULT(no) fi rm -f conftest* fi # if the above didn't work out, reset all changes to the compiler variables. if test "x${HAVE_FONTCONFIG}" "!=" "x1"; then CPPFLAGS=$OLDCPPFLAGS LIBS=$OLDLIBS fi ]) swftools_0.9.2+git20130725.orig/m4/byteorder.m40000644000175000017500000000204312216332640020103 0ustar gawaingawainAC_DEFUN([RFX_CHECK_BYTEORDER], [ AC_MSG_CHECKING([for byte order]) AC_TRY_RUN([ int main (int argc, char *argv[]) { int i = 1; return *(char*)&i; } ], [BIGENDIAN=1], [LITTLEENDIAN=1], [CROSSCOMPILE=1]) export CROSSCOMPILE if test "x${CROSSCOMPILE}" = "x1"; then AC_MSG_RESULT([we are cross compiling- trying to guess from system type]) AC_CANONICAL_SYSTEM AC_MSG_CHECKING([for byte order, try 2]) case "${target}" in *86* | *-pc-* ) LITTLEENDIAN=1 ;; *sparc* | *68* | *88k* | *mac* | *Mac* | *sun* | *Sun* | *Amiga* | *amiga* ) BIGENDIAN=1 ;; esac fi export LITTLEENDIAN if test "x${LITTLEENDIAN}" = "x1"; then AC_MSG_RESULT([little endian]) BYTEORDERCHECKOK=1 fi export BIGENDIAN if test "x${BIGENDIAN}" = "x1"; then AC_MSG_RESULT([big endian]) BYTEORDERCHECKOK=1 WORDS_BIGENDIAN=1 export WORDS_BIGENDIAN AC_DEFINE([WORDS_BIGENDIAN], [1], [Define to 1 if this machine has network byte order]) fi if test "x${BYTEORDERCHECKOK}" != "x1"; then AC_MSG_RESULT(unknown) echo Byte order could not determined. exit 1 fi ]) swftools_0.9.2+git20130725.orig/m4/mingw.m40000644000175000017500000000247312216332640017234 0ustar gawaingawainAC_DEFUN([RFX_CHECK_MING], [ AC_CANONICAL_HOST AC_EXEEXT AC_MSG_CHECKING([for target system]) CYGWIN= MINGW= case $host_os in *cygwin* ) CYGWIN=yes;; *mingw* ) MINGW=yes;; esac AR=ar if test "x$MINGW" = "xyes"; then #fix for the debian distribution of mingw if test -x "/usr/i586-mingw32msvc/bin/ar";then AR="/usr/i586-mingw32msvc/bin/ar" fi if test -x "/usr/i586-mingw32msvc/bin/ranlib";then RANLIB="/usr/i586-mingw32msvc/bin/ranlib" fi #fix for the gentoo distribution of mingw if test -x "/opt/xmingw/bin/i386-mingw32msvc-ar";then AR="/opt/xmingw/bin/i386-mingw32msvc-ar" fi if test -x "/opt/xmingw/bin/i386-mingw32msvc-ranlib";then RANLIB="/opt/xmingw/bin/i386-mingw32msvc-ranlib" fi if test -x "/opt/xmingw/bin/i386-mingw32msvc-strip";then STRIP="/opt/xmingw/bin/i386-mingw32msvc-strip" fi fi AC_SUBST(AR) dnl Checks for system services if test "x${CYGWIN}" = "xyes"; then AC_DEFINE([CYGWIN], [1], [Define on cygwin]) AC_MSG_RESULT(cygwin) else if test "x${MINGW}" = "xyes"; then AC_DEFINE([MINGW], [1], [Define on Mingw]) WIN32=1 AC_DEFINE([WIN32], [1], [Define on windows]) LIBS="$LIBS -lws2_32 -lgdi32" AC_MSG_RESULT([mingw]) else LINUX=1 export LINUX AC_DEFINE([LINUX], [1], [Define if not on cygwin or mingw]) AC_MSG_RESULT() fi fi ]) swftools_0.9.2+git20130725.orig/m4/avi2swf.m40000644000175000017500000000620612216332640017472 0ustar gawaingawainAC_DEFUN([RFX_CHECK_AVI2SWF], [ AC_CHECK_PROGS([AVIFILE_CONFIG], [avifile-config]) if test "x$AVIFILE_CONFIG" '!=' "x";then OLDCPPFLAGS="$CPPFLAGS" # temporarily add avifile paths to CPPFLAGS... CPPFLAGS="$CPPFLAGS $CXXFLAGS "`$AVIFILE_CONFIG --cflags` AC_CHECK_HEADERS(avifile/version.h version.h) # ... and reset CPPFLAGS="$OLDCPPFLAGS" fi AC_MSG_CHECKING([whether we can compile the avifile test program]) if test "x${ac_cv_header_version_h}" '=' "xyes";then HAVE_VERSION_H_DEFINE='#define HAVE_VERSION_H' fi if test "x${ac_cv_header_avifile_version_h}" '=' "xyes";then HAVE_AVIFILE_VERSION_H_DEFINE='#define HAVE_AVIFILE_VERSION_H' fi cat > conftest.cpp << EOF // hack- we can't yet access the variables in config.h (because it hasn't been generated yet), // so we have to introduce them this way $HAVE_VERSION_H_DEFINE $HAVE_AVIFILE_VERSION_H_DEFINE #ifdef HAVE_VERSION_H #include #endif #ifdef HAVE_AVIFILE_VERSION_H #include #endif #if (AVIFILE_MAJOR_VERSION == 0) && (AVIFILE_MINOR_VERSION>=6) #include #include #include #include #include #define VERSION6 #else #include #include #include #define Width width #define Height height #define Data data #define Bpp bpp #endif void test() { IAviReadFile* player; IAviReadStream* astream; IAviReadStream* vstream; player = CreateIAviReadFile(0); astream = player->GetStream(0, AviStream::Audio); vstream = player->GetStream(0, AviStream::Video); vstream -> StartStreaming(); astream -> StartStreaming(); #ifndef VERSION6 MainAVIHeader head; player->GetFileHeader(&head); head.dwMicroSecPerFrame; head.dwTotalFrames; head.dwStreams; head.dwWidth; head.dwHeight; head.dwMicroSecPerFrame; astream->GetEndPos(), astream->GetEndTime()); player->StreamCount(); #else StreamInfo*audioinfo; StreamInfo*videoinfo; audioinfo = astream->GetStreamInfo(); videoinfo = vstream->GetStreamInfo(); videoinfo->GetVideoWidth(); videoinfo->GetVideoHeight(); audioinfo->GetAudioSamplesPerSec(); videoinfo->GetFps(); #endif CImage*img = vstream->GetFrame(); img->ToRGB(); img->Data(); img->Bpp(); img->Width(); img->Height(); WAVEFORMATEX wave; astream->GetAudioFormatInfo(&wave,0); uint_t a,b; astream->ReadFrames(0,0,0,a,b); } int main (int argc, char*argv[]) { return 0; } EOF if test "x$AVIFILE_CONFIG" '!=' "x";then AVIFILE_LIBS=`$AVIFILE_CONFIG --libs` AVIFILE_CFLAGS=`$AVIFILE_CONFIG --cflags` avifile_link='$CXX $CPPFLAGS $CXXFLAGS $AVIFILE_CFLAGS conftest.cpp $AVIFILE_LIBS -o conftest${ac_exeext}' if { (eval echo avi2swf.m4:71: \"$avifile_link\") 1>&5; (eval $avifile_link) 2>&5; } && test -s conftest${ac_exeext} && ./conftest${ac_exeext}; then AC_MSG_RESULT(yes) AVIFILE=true export AVIFILE AC_DEFINE([AVIFILE], [true], [Define if Avifile is available]) else echo "configure: failed program was:" >&5 cat conftest.cpp >&5 AC_MSG_RESULT(no) fi else AC_MSG_RESULT(no) fi rm -f conftest* ]) swftools_0.9.2+git20130725.orig/Makefile.in0000644000175000017500000000174612216332640017400 0ustar gawaingawaintop_builddir = .. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ./Makefile.common all install uninstall clean: @echo making $@ in m4... cd m4;$(MAKE) $@ @echo making $@ in lib... cd lib;$(MAKE) $@ @echo making $@ in lib/pdf... cd lib/pdf;$(MAKE) $@ @echo making $@ in lib... cd lib;$(MAKE) $@ @echo making $@ in lib/python... cd lib/python;$(MAKE) $@ @echo making $@ in lib/ruby... cd src;$(MAKE) $@ @echo making $@ in avi2swf... cd avi2swf;$(MAKE) $@ @echo making $@ in swfs... cd swfs;$(MAKE) $@ @$(MAKE) $@-local distclean: $(MAKE) clean rm -f config.status config.cache config.h Makefile Makefile.common libtool rm -f lib/readers/Makefile lib/lame/Makefile lib/python/Makefile lib/Makefile src/Makefile avi2swf/Makefile pdf2swf/fonts/Makefile clean-local: rm -f config.cache gmon.out uninstall-local: rm -rf $(pkgdatadir) all-local: @true install-local: @true .PHONY: all install uninstall clean distclean clean-local uninstall-local all-local install-local swftools_0.9.2+git20130725.orig/ChangeLog0000644000175000017500000003274612216332640017111 0ustar gawaingawain0.0.1: initial release 0.0.2: * pdf2swf: Added support for pdf bitmaps, clipping, state saving/restoring, colors, solid fill and line width. The output SWF files are now much smaller. * swfcombine: Added stacking option (-t) * swfcombine: Small bugfixes with the command line options * rfxswf-lib: some bugfixes concerning sprites, cgi, shapes, jpegs. * swfstrings: New: Allows extraction of text from swf files * swfdump: New: Dumps swf file information. (And does some error checking on the SWF) * jpeg2swf: New: Converts one or more jpegs to a swf movie. 0.1.0: * configure: Now works without automake, automatically disables jpeg2swf and pdf2swf if jpeglib is not found (disable both) or t1lib is not found (disable pdf2swf) * swfcombine: bugfix: DEFINETEXT tags didn't get relocated right * swfcombine: bugfix: no longer builds "unstreamable" SWFs * rfxswf-lib: actionscript * rfxswf-lib: lossless image formats * pdf2swf: conversion of lossless image formats * pdf2swf: picture cache to prevent images getting stored more than once * pdf2swf: conversion of (hyper)links * swfdump: -a, -e and -XY options * lib/example/zlibtest: new file, demonstrates using lossless images with rfxswf-lib * lib/example/dumpfont: utility for dumping fonts out of swf (and generate c sourcecode for creating them) * lib/example/demofont: example font, generated with lib/example/dumpfont. 0.1.1: * swfcombine: Wasn't able to handle converted pdfs with links. Fixed. * swfcombine: Introduce --dummy, -X,-Y,-r options * swfdump: new: -r option * pdf2swf: small bugfixes * HOWTO_pdf2swf: added section about correcting size and framerate 0.1.2: * swfdump: can dump all actionscript flavours (button, button2, standalone) now * rfxswf-lib: improved font handling * lib/example/makefonts.cc: new file, converts the standard fonts to swf * lib/example/glyphshape.c: new file, demonstrates using font characters as shapes * pdfswf: many bugfixes. The "pdfscreen" manual now get's converted correctly * rfxswf-lib: bugfix: Couldn't handle jpeg grayscale images 0.2.0: * pdf2swf: TrueType support added. (using ttf2pt1) * rfxswf-lib: performs conversion of jpeg colorspaces now. (Makes pdf2swf cope with more types of jpegs) * swfextract: new tool, allows to extract single objects, frames etc. from movieclips * swfcombine: allows ids instead of names, now, too. * swfdump: added text displaying functionality. (like swfstrings) * swfdump: now dumps also the undocumented placeobject2 actioncode. * lib/example/avi2swf.cc: For now, converts small (!) avi movie files to swf. (using libavifile) 0.2.1: * configure: Does checking for byte order and command substitution capability now. * rfxswf: Applied Anjo Krank's patch for MacOS X. * pdf2swf: Fixed font transformation matrix * swfcombine: new options: --cat, --stack1, --merge, --frame * swfs/: new directory, holds some standard SWFs primarily used for pdf2swf installs into ${DATADIR}/swftools/swfs * pdf2swf: New options --viewer, --preloader, -b, -l * pdf2swf: Fonts are now in ${DATADIR}/swftools/fonts 0.2.2: * swfs/: Added/Wrote sources for some of the swf files * swfdump: Major bugfix in placeobject2, hex output function * swfextract: Can now extract png, jpeg and mp3. * swfcombine: big endian fixes * swfextract: big endian fixes * pdf2swf: Changed from 100dpi to 72dpi conversion * pdf2swf: Some optimizations, fix the zero string problem. * lib/: Added Bladeenc 0.94.1 for mp3 compression * lib/example/avi2swf.cc: Can now handle big files. Slightly better compression ratio. Sound. * lib/example/sound.c: New file, demonstrates use of the sound module in librfxswf. 0.2.3: * pdf2swf: New option --fontdir, can now handle external fonts. * lib/modules/swftext.c: Several font-extraction bugfixes * src/swfdump: Bugfixes, ids and depths are now in decimal * src/swfcombine: Bugfixes. * configure.in: Cleaned up. 0.3.0: * pdf2swf: The --ignore option now actually makes the pdf files smaller. * rfxswf: Can now write DefineFont2 tags * swfextract/swfcombine: Bugfixes (DefineEditText) * swfdump: New option --used, prints out referred IDs of each tag. * rfxswf: Can now read and write Flash 6 (MX) compressed SWFs. (SWCs) * pdf2swf: Added compression flag (-z) * swfcombine: Added compression flag (-z) * configure.in: zlib is now required. * src/png2swf: New tool. * swfdump: Prints some image infos now. * pdf2swf: Fixed Image handling * avi2swf/: Is part of the main distribution now * src/wav2swf: New tool. 0.3.1: * configure: Didn't create all Makefiles when t1lib or jpeglib were absent. Fixed. * swfs/Makefile: FreeBSD fixes. 0.4.0: * pdf2swf/xpdf: Upgraded PDF Parser to Version 1.01. * pdf2swf: Can now handle Type 3 Fonts. (As Bitmaps) * src/swfcombine: Completely rewritten, using the rfxswf routines * configure: Check for libtool * lib/rfxswf: Fixed some parsing bugs (swffont, swfdump) * pdf2swf: Added antialiasing capabilities for Type 3 Fonts * lib/examples/makefonts: Fonts: Bounding boxes are now handled correctly * png2swf: Support for more image types * pdf2swf: New option -t (--stop) 0.4.1: * src/swfcombine: Bugfix with -x option * lib/Makefile: MacOSX fixes * pdf2swf/SWFOutput.cc: fixed undefined sqrt() * src/png2swf: Support for transparency * pdf2swf: Support for CID Fonts * src/swfcombine: Bugfixes * lib/rfxswf: Added Sprite Unfolding routines 0.4.2: * src/Makefile: OpenBSD fixes * lib/lame: Removed *.o files from archive * avi2swf: Implemented --flip option * pdf2swf: Implemented --flashversion option * pdf2swf: Implemented Viewer gadgets- it's now possible to call Flash functions via hyperlink 0.4.3: * src/jpeg2swf: Grayscale fix * lib/rfxswf: Improved MX support * pdf2swf: Command line fixes * swfdump: Added -f (--frames) option * png2swf: Added support for mode 6 images * swfs: Support for print protection in simple_viewer * swfs: added keyboard_viewer * swfcombine: Bugfixes * swfdump: Shows frame position now. * swfdump: Some definesound infos added * wav2swf: added support for definesound, looping and framerate * pdf2swf: Calling Actionscript Functions can now also be done via http: hyperlink, e.g.: http://pdf2swf:call:_root.myFunction:parameter * ./*/Makefile: all Makefiles rewritten. 0.4.4: * src/swfextract: output file name handling fix * lib/rfxswf: better sprite fold/unfold support * src/swfdump: new option -p (--placements), support for exportassets, namecharacter * src/swfextract: support for font extraction * pdf2swf/font2swf: new tool, for converting Type1 fonts to SWF * lib/rfxswf: font routines fixed * lib/rfxswf: support for definejpegbits3 * src/png2swf: better support for 32 bit images with transparency * pdf2swf/pdf2swf: slightly better TTF support, some fixes * pdf2swf/pdf2swf: Output filename is no longer mandatory * lib/rfxswf: added workaround for the 63-byte BMF_32 bug in the Flash Player * lib/rfxswf: fix for ratios in swfobject.c * src/swfdump: shows some info about video tags now * pdf2swf/pdf2swf: greatly improved spline conversion * pdf2swf/: Fix for t1lib-5.0.0 * src/wav2swf: streaming sound now works for all framerates < 35. 0.5.0: * pdf2swf: added support for capline-styles * avi2swf: added h.263 support * avi2swf: improved sound support * Makefiles: added MingW/Cygwin support * pdf2swf/ttf2pt1: upgraded to ttf2pt1 3.4.3. * lib/: changed logf to msg (support for gcc 3.2) * src/jpeg2swf: Added support for H.263 compression (for correlated images). * swfc: New tool, allow compilation of .sc files to swf * swfbbox: New Tool, allows several bounding box operations on SWFs * wav2swf: added support for samplerate 44100 (Marcus Doemling) * avi2swf: added -r (--mp3-samplerate) parameter (Marcus Doemling) * lib/action: Integrated Ming Actioncompiler * lib/modules/swffont.c: New module, allows creation of SWF fonts from Type1 and TTF * lib/modules/swfshape.c: Support for gradients * lib/rfxswf.h: Support for MD5 encrypted passwords (PROTECT tags) 0.5.1: * png2swf: fixed a bug for 8 bit indexed images * lib/rfxswf.h: fixed a bug- could previously only be compiled with either t1lib or freetype * configure: newer avifile versions (>= 0.7.38) now also work. 0.6.0: * configure: added check for broken freetype- disable freetype in some cases * swfbbox: Added support for text boxes * png2swf: Fixed alpha conversion (removed definejpeg3 workaround) * swfc: added buttons, edittext fields * rfxswf: fixed font advance parameters (editboxes with custom font now work) * swfextract: Is able to extract alpha channels out of DEFINEBITS2 now. * pdf2swf: Made MingW compatible. There's now a Win32 version. * pdf2swf: Reworked font routines * swfcombine: Some fixes for clipping depths * swfextract: Reworked object listing output * lib/rfxswf: New method swf_FontPrepareForEditText() * lib/lame: Removed lame library source, it's now linked dynamically * lib/python: Added python interface 0.6.1: * swfc: Fixed .(edit)text- this was broken due to rfxswf font changes * pdf2swf: Fixed font matrix handling * pdf2swf: Fixed "highest charcode not displayed" bug * pdf2swf: Bounding boxes are now of the right size * pdf2swf: Fixed Windows crash in 4 bit palette images * pdf2swf: Fixed another variant of "Didn't find glyph xxx in font" bug 0.6.2: * swfbbox: Calculates the complete movie's bounding box now. New -e,-b,-B options. * pdf2swf: New "-s minlinewidth" option * swfdump: Fixed handling of PLACEOBJECT * lib/modules/swffont.c: Added support for new-style freetype headers * configure: Improved freetype and python detection, added fontconfig detection * swfdump: Support for shapes added * swfdump: several bugfixes from simon-swf@munton.demon.co.uk * pdf2swf: Added fontconfig font replacement * lib/h.263: added better support for custom frames * avi2swf: Is now ported to Win32, too. * pdf2swf: Upgraded to xpdf 3.00 0.6.3: * lib/modules/swfrender.c: New module, for shape->bitmap conversion * lib/rfxswf.c: Several small bugfixes * lib/modules/swftools.c: New function swf_Optimize() * src/swfc.c: .outline and .textshape support line drawings now, too * src/swfc.c: added -O option * src/swfc.c: added support for including actionscript (.action filename=) * src/swfc.c: frames now start at 1 * src/swfextract.c: Objects extracted with -i are now scaled to width 512 * src/swfextract.c: Fixed jpeg extraction bug * src/wav2swf.c: Big endian fixes * lib/modules/swfshape.c: too long lines are now split automatically * configure: Several Mac OS X fixes * pdf2swf/SWFOutputDev: refactored interface to pdf2swf.cc * src/png2swf.c: added -z option * src/jpeg2swf.c: added -z option * m4/python.m4: Python MacOS X fixes * src/gif2swf.c: New tool, for converting (animated) gifs to swf (Daichi Shinozaki) 0.7.0: * swfdump: Fixed bit overflow bug * lib/gfxdevice.h: Started implementation of graphic layer abstraction * pdf2swf: Fixed Type 3 color bug * pdf2swf: Fixed a rare rendering bug caused by the float conversion in moveTo * pdf2swf: Fixed CMYK conversion * pdf2swf: added support for joinstyles * pdf2swf: capstyles don't require clipping anymore * pdf2swf: added support for dashed/dotted lines * pdf2swf: Images are now stored as either jpeg or zlib, whatever is smaller. * pdf2swf: Fixed Type0C handling * swfcombine: Fixed jpeg table conversion * lib/rfxswf.c: added support for definejpeg3 extraction * pdf2swf: New option -s bboxvars * pdf2swf: Added support for stroke/clip text rendering * swfbbox: Default behaviour has been fixed * pdf2swf: fix for non-closed shapes * pdf2swf: Font quality is now determined by the used font sizes * pdf2swf: Shapes are now all starting at (0,0), and then explizitly placed at their actual starting positions (useful with zlib) * pdf2swf: Default Flash version is now 6 0.8.0: * lib/modules/swfsound.c: Fixed compile problem if the lame library is present * pdf2swf: Bugfix: -s flashversion was broken * pdf2swf: -b and -l now also work on Windows * swfbbox: The -c option is now documented * swfdump: Added support for flash 8 * librfxswf: Added support for flash 8 filters and blend modes * src/swfc: Added support for flash 8 filters and blend modes * pdf2swf: upgraded to xpdf 3.01 * swfcombine: new -w (--scalex) -h (--scaley) options 0.8.1: * pdf2swf: Upgraded to xpdf 3.02 * lib/modules/swftools: Fixed several bugs in Flash8 parsing * src/swfrender: Added --ng switch * lib/swf/: New gfxdevice 0.9.0: * pdf2swf: Added support for Flash 8 Flashtype * pdf2swf: numerous bugfixes * pdf2swf: support for gradients * pdf2swf: support for different optimization levels (-O1, -O2, --flatten) * src/swfdump: Flash 8/9 support * pdf2swf: Common fonts are now linked directly into the executable * setup.py: added Python setup script * lib/python/gfx: New python module for accessing pdf2swf functionality * as3compile: New tool, for compiling ActionScript 3.0 * swfc: added AS3.0 support * swfc: added font glyphs selection 0.9.1: * pdf2swf: bugfixes, speedups * pdf2swf: improved font quality (FlashType) * librfxswf: support for fontalignzones * gpdf2swf: completely reworked pdf2swf GUI (Ricardo Pedroso) * as3compile: many bugfixes, support for swc libraries 0.9.2: * as3compile: code cleanup * lib/filters/remove_invisible_characters: new filter for pdf2swf * lib/filters/rescale_images: new filter * lib/gfximage: new fft based image rescaling * lib/gfxpoly/moments: Added functions for polygon moments. * pdf2swf: refactoring, bugfixes, started Poppler integration * src/ttftool: new tool, for debugging Flash 9 TTF fonts swftools_0.9.2+git20130725.orig/INSTALL0000644000175000017500000001707012216332640016361 0ustar gawaingawainBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `AUTHORS' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. swftools_0.9.2+git20130725.orig/config.sub0000644000175000017500000010156512216332640017313 0ustar gawaingawain#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-16' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx | dvp \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[24]a*eb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]a*eb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-*) ;; # Recognize the 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 ;; 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 ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; 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 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; 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 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; 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) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -irx*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: swftools_0.9.2+git20130725.orig/AUTHORS0000644000175000017500000000101312216332640016366 0ustar gawaingawainSWFTools authors ---------------- Maintainer, librfxswf(-python), pdf2swf, avi2swf, png2swf, swfcombine, swfextract, swfdump, swfc: Matthias Kramm librfxswf, jpeg2swf, swfstrings: Rainer Böhme swifty, help with swfc, swfc documentation: De Clarke Contact ------- There's a mailing-list, swftools-common@nongnu.org, which is the right place for anything related to SWFTools (questions, bug reports, feature requests, etc.). Go to http://mail.nongnu.org/mailman/listinfo/swftools-common to subscribe. swftools_0.9.2+git20130725.orig/config.guess0000755000175000017500000013063412216332640017652 0ustar gawaingawain#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-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 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 if [ "${UNAME_SYSTEM}" = "Linux" ] ; then eval $set_cc_for_build cat << EOF > $dummy.c #include #ifdef __UCLIBC__ # ifdef __UCLIBC_CONFIG_VERSION__ LIBC=uclibc __UCLIBC_CONFIG_VERSION__ # else LIBC=uclibc # endif #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` fi # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; 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 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) 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 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo cris-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo frv-unknown-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:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64:Linux:*:*) echo powerpc64-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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-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 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux 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 ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld" exit ;; esac # This should get integrated into the C code below, but now we hack if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: swftools_0.9.2+git20130725.orig/COPYING0000644000175000017500000004311012216332640016355 0ustar gawaingawain GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. swftools_0.9.2+git20130725.orig/swfs/0002755000175000017500000000000012216332657016317 5ustar gawaingawainswftools_0.9.2+git20130725.orig/swfs/tessel_loader.swf0000644000175000017500000002575412216332640021670 0ustar gawaingawainFWSì+p €>€Cÿÿÿ¿òp ŒSº=xfffËÇšœ þlsð¹€MÐæ6B]™pÏcKð y€)rpfÇÁ­ÌYµÁ«lÊtä"°8%¤2O¥1Ûûî@ésƒªFZĘ•`kϖׯ)Ñà‰dô@™ÀlIN|AJšˆcziü åÛ¼éc!ü3 &ÄÈzà³€1U`Ùpý±AÓÌ€ , (0³1†ÊG|ó='8ÐjÍÎjÍ&À£ÀÞÕi\¦{|©cr©ËsgYz\)´p¤€&Æ¿#›“xÏ•hnU9a¾Ã¶ÓgÙÊ·„ø0ZÕñtÏvjÌóêŒàý¼Ÿ©ç<®sÇËy濞¯ƒWcÊòw*œ³#r÷»o®îâ³¥Uw*›73éË5Pô >ý>>ü“Γ ¬Ó ¬«@é`8ÃÔ4 Öen4à Ú`‚rù€ÑáVç ‚­•i¥À38¦Ìâ鼟2–&ެ®š²´p±›šd&6Eœ—'¯€5%}û‹„Æ; ü€µ!e½2awb»c»§¿5¤9«Àç%Ö@Tˆ Ý)È•·T|“צ´÷ †¿u´ãPçcè%ˆ„¾iaíõâYuçàÕ‡YÀÚŽ¥`Æ|Ü„%ëƒÎÔ>ޏKs}p•zÛ®±ŸCEóro¦b^4_QÛ—^v¡íóªÃ­Íœ‡YÍ%޳›µno:ñ,ºõ¹uꌸáÕŒö£«’ÇTe9[¢IÆð»}XÌAu¶ sK—Ÿƒª¶<%ê}ÕŒþ ÏÆ¼¼ÒÃèê{lgÔöØÏ©XNh-€O y¹·Ô¬'7¬àÇKÛsr—¡¢úá+ô=·V@ÚŽ¸0ÈíD넨ËÕŒþ ÎdJÁŒúÎÔu>†@æ– ÇSÛF^³›ð`ºøÁ¢ù‡Ú¡ÎÔBP[¢ELp»`¿4u¸Dg8c %ŒüÞº$Ⱥê:óΉL—§çd‡]ba^­+«}qi|:¥î‚ßõ)Û­'YyßÞpõâ™~ê:óÕ/p‡ªãpçV‡ >oñùõv‚º$7UÆ,-ì-Ñ$é¹õÔóÕšA'ª^™§=ÒÐúË^ÿõ)æ8ê~÷“צ'®ˆ£·XYþÞ§2Í=P:jºä5 õ½4¬ëÉ6ÿÖùY“ªépï]Jb¾¬žÝZ³øm«¾~ÀêÐú¸ ­Êÿ‹™¸™œÀü»æÿ'UäýP[)à{sœ{ªé']Jî¹Éw/M×’.8_B3'?Ã|: Ûó6ó©ÌÐçT_~°³ý½Pµy·¨ Íw´¾³.üJ4ÔÎuJýW3€¿Fu¼£1ç‚aø%‰?^£¤Ï]{޾xétoZôѦÄÖÜÍT9ë×=Ɔ\úËOæu1…êoö+ÖªsžÀai¿ð:ˆÒ‹uG{*Œ²x¹–z×¢õª‘Yë%üg×®{Ž—Fõî:ùê:SOÕC/Ǫ«õ?VÑÐY—íÕ¸G/›|V}r78µKè.¿“>nJ²q^¨Ð]oñœÈíwæ-a€-š¥úÝË6uVªêñà“Ô¢Ùª+\?KÇõº¬ê뮫ÉÕ¸tË®O,g9P¹Î†ÿÕ¥üüÑ´ú½j/º¢:êó#U·®£OW:²µ:aéS¥çRºžî¦ªÕ=Pêhn‰kÆÀÚ:Óe‚Ûá [®U«ÿWž·GgÇÚAmð„­Õ±ÍNÒý[GMmO«ÕÏ ¿Iuǃh _€%ˆ{Tþ£ŠÌ}~>›8Õ™Z²ÔΦÝÝI ñºçm–s¸¨ƒ¬¨þR¥Wî¨Xl× ùáÇ'Ö·¼×¨6­'Tµ²pXÀB×£”™˜¼Gë­üî¿K¬õ@zЃöÇ\Òåâ)Ý€·D”"êàÃcÖ·¹Œ8u¢ÈæŽïZ²A~lOõ¹–Fêšž½ÕÖ‚—«‹ w[UIn©VX}sÑ?:ªuô‚ßw¬Û­š…Gpë[ÜÖæiw¯ÇÓgÆ:ê*—b a°%þ¥fÀLÃúÒoxõÝúÑéu®h†êõ+:/ê` ÁÕ§©5²'Y;ÿ~¨´²ÝI®œÁnÍÖÒñç&çë­ÄŠêš‡«ÕÖ‚—«‹i°-Âù¹ªZ=Ոˬ¨…€-Ñ%ºÙ¨TЕWOª3­¿4uÎìgÒ`¸%‡ÑoÞ£lÉ}@Â|¸Ã^Z}Öî¥lä}K6ÛúëM^s¢ŠË¬¢üÏR4]®©Q½nþæ¹ØgÿÖÓz¯å°ÿTè´ X³Ã“×’—¨óZWBòëo¼Òã½R§Abç¿Lru¸:ë|™Öïÿ³V]\·X¹§®ÛÖQAÿ­> 5/¬zÜõD€êã‚9ÕÏF톤§Tó(žk40õ§Ôë( ÿÖÓvç­ÁÓÿLrukJ¡Q±×[MÛ]sЈ½Q!:ê½ñ˜X0[/tãqòî¾¥Wuj³šzó 3‚Üï'7¬rw'Tè5ÎhÒàu¸úŒëª±Õ×UÕüaBQõÛe*ê线×R‘‹­¼ñø,„£ë¶ÓyÖã×ë«]‚P¿@uÊügè``%Š*Wž¼¾«Iê¾·ÉõÝl'©º[#ª{Ô—^_޹T™Ýb»‹º‘õS+•ëµQaÖÁû¬œrwRJt>¨ýMýytú׊=óŠÜS¨‰¯ßR—¯¡½/]máfº“Õ}uZÌ?êÖ¿§ÕCÌû©Õ(_Kc‚Å+Ρ³1|ì0MëJšýÖRýG­çï¯7=4ùºAÉ͈îþ¨b\ÛÛÅ€Y¹%×+÷®w¢ +n’S®ùR‡8ÄËn‰*ÕЇWªD+-†¥û9 îÙÕжÜ\´ÏSªP¾ºÓEÜï]ÙoΪuÀ¶HfêÆÃo×§«­Æ"ÿ8Im­Ö{Öã+Ož„BÝWÀÅùœ)ÕaqK¬\ìÇZή¢øî ²_ªÂ’X¹@¿C u¿ƒ&g”a°%‹Wç^•têò™ÇiP:Ü­fõ¤ê]×–%=1=c“K:CWõWL%ë°–mÖØÛžX”=j0öú¸çÂu¶•êÉ5ÕuK'¨¨,wRºXµi]Öý”û­’Yí󵄽w¡:„¼¦u@ªÂ꺻ՄÃ?ªºßR?WÀ[èúQ了©ù ‚Ü>OS«$ H-•=…8Œ,ßR|Až jÚXNÒºˆÛÅuK«?× ÍËŽybJuF¼]ë§®ÕOô(ÖäSj3 ºˆ“½õF,_êåũՂƒ7šºÎ ºà`ºšŠõ_XëÎT krµÞ·=[œnå$ó\=5Ö˜ —ªÐ‡V µŽzÁÙõ´`õãr©`¶·+]æc© -ç:¸zÆ>¿> u¹ã<è_à%ˆ¹.>¡æâ¼RÇ®öÕ×ZÐʾ£¸©\Ú¦ ëcÖÝDzOzÐ&ùuDê¡ú ë#™r ~õMþ³måýh@𹃠ÖâT ª#éÇ\¬n~ªa¸ ºïž¦:‡šõN$‘êÞ¦‘×Õbcªà×P0”N¨Ž¤rÙ¶y´¬ÖâT ­ GY¶òþ¶=mÝw¶®º‰§‚ëûÞ¤ÀõÔ›9æ„ëwP¤už¨}§EMp:­ÄuQ[’êŽüÈ iœ²­ê =i{e¹êÔ3Ö𫿪ȗÀ,¼6êÈAŸ×´ë ìa~[Õx›„ ëüö› ë]bÕ¯´äÂÝib¿A u¶cJè_¨%ˆçIó¨å8Û›n š¤z*‡uåfšëdiYÖ¦¬¦ö[ì¯í¹¶üô¼5ãÂW½FªYº¦íªuVŽúêÖbcÔÓL4_ÏóÊÉK¥9´¡Ï|%ÀX”Õ#Î$þ¨6¢=(:×NGuuÁë+ØqÔO«2c¯_>l>©»ÉÝp­¦:̇t¢GVpÉî½ñc]ja:Ênueê³¼“×ñ£#¬Ã›w[¹«n få=PSˆz†„¤u®‘nëø¶qÕø˜Â¦=V‹Ñ6ã[Ð/ÕŽ`ìõ¥}@êÉsÕZøçš‹ýYä9Ám.zCײk'®5/mÒ׃IÔgSª•U)[Oô­qº–VZ^ÌŽ´¯–ÝU®ýúÊ÷iufLu¿D u·#Gç–a¨%‰«}>£`˜ýzB‹øøW[Æî¡ÄQ—\ºãóÕ©­]äg_…T~«Å ± Ç•Ïu#¡çsÖ\°n½VÔýTç”ú„ <ÝmOW­)‡_Ur>!ÝåÕ—H©ï'X-Ôý8ú´Àˆ‚Ê$¢®¿ ï][4úÍ¥Ùõ›Mæê‹WÕp1¼Ô¶˜õ[PêØù¦ ¯sù#¨@ÕO]Ïeþ-…ñÕg#œ=TæóÁuî$u9åôê*rÿÖÃÂ7¯à6Ï7½Æú´Æ´u«¼³æK_[M»n§¼{Úµþ¾WZ=YuzÜ‹õW#zêéÕ§Lå¹…}Z3\ú˧wò¹î³G¼ ·ãk@ê§7ŸÖéŠ?ŽBÑu¥0ëëOÕb<‹ªÖäˆ.·õ¢àº ¿,u»c6ç~b%‰×¬Þ¢ð޽|îs8é­ÿ[AÄÌ}SƒSú褹sÅ«s­–^×^Ì[¾¬Í`·€óÉëCAyÕMÄ'‰_õ_ƒêséž Cÿm޲³ÖÝc”¬º¯9„õ^tÎêt‰¿ÔO!À[Ëñ/PÅcN¡g1üh€÷©ZOÏUˆÆ~xqÝó‹Ÿ{¯b.WTॎ¿¾ÀÝX#@úöcÀuq½NëÃŒßÕb9Ú´œ½u1úÓÁÌõ¡ ¼ëAã×lÇ›ŸtR\ú¥ø/uMDƒê¦ç{Ô-;ªjS*ìëe…e¾˜ç²IIFôk­çظ-–ÚPºûu™õ9ѸAa¿VšåÞ²ÍÖü«³­Mh_Ufž´e]ZŸ•:ú‹Au^m;¿<uãçê`X%‰ÇÝÞ¢|ƒ†c9î¹Ößpׯž4UGÔŽ»‹ÜíÃ7ëtÖׇ˜«uà-Eû:šÒSuÅz’ÞOdu•îvëaÜ5×f«­o27gzϘ>ó›fW`+<Úéê¯ËÕ^ÿ©®¥¯Qê‰0[ÒÿõSƒ%¢¨¿gZyÁ0[>ûóSšƒz'– ®'ó먳§Q þ6ûÔÊ)ï 0ŸUG°^¾xÇXójzðó¯õu­àë³ +Õqzƒ›(•}sad:Ö!\ï»zϘ>õ¬ŒÛëŠõ%Í­»‹ÝR Pz¢Ò„uO#õæ"\§U<°ÎTv nNÀ[‹Ö²<[¯ØÝRH£ð[rtãuºë+ÁsÕaÕ«ï¨-¹;z´·§u–®w¿>u¼£1çü`%‹‰¾¡#+¼ó‚õæ?Ýw\_OÞ´¾UÝeçéºØTõÎÚê2»ÔèlªÐê—V‡®©újýLM|zçµÆu§iëx¸A×£š;ªÖê—]^sn†>‚ÜÒC®‡¢'Wèî¶Ã¥Ûô·€XiòmΟ¸ž¸]T}u¡:³W‚ÃO“nµõeœó›êÒc©Ç÷ Áni!Õ‹?H]ÝŸýNêTSkÕ7hÎëæY«šºØE›uèæ`ëx»›Ô^«©`ÖOSÒXÎ¥1ÝSákú˜ZAð¯@º÷ÿ@z­méóž·ˆ×ýsÜ47[â>Þsž×¯¨ÈUX-¯ú‰:×Õ#õi0Uêò×CÖ‡ªþwZ_B޲óÅF6§:¤ús l(×ýDX³²€¿Cu¸DgjbX%ˆ> u+D-ë°³{ÖÒò+ª>,gY’Þ®¦Š¹œÙLJê//ÌùÉn½˜ÓÝoõúСDu™þ¬ëiy×af÷¨šKT»«Ù¯Y„U:ÎwîuDšæ|¤P,H²6æ/Ù§[ý8íÖ-Çlïø…é‡\šE®¯Mès!:³ïÆs}O‡®^6]K¼n¹4¡Xo˺С¤õ™ýëÝ`‚ër4ê>vÁÇA€léÿ5ÕŸ|¿­ÉT]ñepZ}u —êe6ßÔÑW©œJgTn_^¤2àºûß%:¯ÎZó©sû®^2h-‚)Ýùƒ™iΦP[âõGÆê>V£Ödº¸ÓéEm/RÁnÖØƒÏèØž³œ @¶`6GêÃ}P vXœ®·v}^›Ðz¯Î¼¿#u¶cJç8c %ˆk…¾iYéõâiƒçáWYÆÚÎ¥ZÄüÜl-냓™ÎÕ>¸Stp¥:»®±?CBsq¯O¦bX³ïQÚ˜>v©éóŠ«­ÐWYÓ%>³§µ½nƒºñ4Áõ©ƒêŒíÕ‹v·«’ŸT`8 [¢IÓpºýX´u· sJзŸ„ªÀ¶~õù냌iÕŽ¶³ª„X·álèÎ9½>¬tJuNvyÇ8[ÒôÜíT-×ËŒûÌ>Un§ÈƜҴ êzó³Ñ/J¶vzž»õ=v'êU³² @¢ ~³¦œ.¸-ŠùÚ¨A× Qs¬éü ,ß¶'è….§®‹€± OO®1 ,ß¶'êÇ[X¿?u¸DgjbX%‰¹^g͵uìÉbçÐY§Z׎¤Í<ßTë—’}×RÐë¬-zS8kN¨ÝA}rj½:Þ&õàëQëpŒÕ›º»®]¯V} ¬úœÙK¶ê0Ò øM:ì+!õ´³vë3â©Ö…5ã­þÝ^Ì–.¤÷7½R×"º³Vu^ˆê€hŸÖÿqˬòùwYÎùíÙø- =‘÷X=hS-ùýî ­Êû3š´¡<þ<´ê–º—Õ˜w¬Μ ÝH=”z£u@u3†@êh´h ®þ«‰uàÛ`µ¶5¿ZË^¦ˆÉ¼Õ¬þêôÁÕ›·«©Z^˜-8ºæ½·õó÷—æú§Ð-Çkx…ö‡Yåê€[ôåvóÁÒ+­à×V2ýΨùNœÁʵ¶5¿SfE ¿Bu¼£1çü`%‰“ì>fAzõöù]çÀ]wZSÕ.¢äÑÝPï:êôgõÏTƒëÔ¦‹ª|R]¥þ¶Â…ÝyΧ:×ÒÜõi?«ë…ËÕš†[«5ÿ5‚âz‹ÔK‚ÞÜKªþ÷Z_½Ž~•…uNÊ᡺Ø«õOÞ#êÐüYÖ^Ah<pÐÝiTc,’·\í_¶jýeäºÒþ©uÅûëíò»ÔÄè?Ÿ÷{KMú‹“0uO‹6êS yÔôªŒ[ßíWQU^¢õÜç²²!JW]^›^8 œ dB”®«øDÝt>ï9ÏT< gt ηŠF}Vµ z¼€¹ui>,êaW p:·¬XÜóël%¥¿Jˆ†žÙ\uôù%sÝTËaÁ‡7Bàúâý€¿Euãçê`X%ŒmÞ ?1{ 9‘ô¹×Õ»­d/Yóø=÷~_:ɨ9Ö O×6)èÌgS©©.ªq›}X4w¢F½Tð®z™BÈs›¯¨õ;oZ¹ÔŽ¡ˆÐ}R zî+u5«Zši½gÏ}zˆÛuO, æ"cgYjž[‹Õ¥‚˪ž'§-Å…ó4½hï¨:“C õ5ÛK…‡]G‰×ú«Å`õŠmàë+ÞÔ’ª-WÀ-}É:©Ç‹u§•Gê ÷F ®FòK›ZÝýwÀº¤_õcÂWêÇ‚‰Í$3}û@-Ÿ@Pº†#uWŒê¡‹9z!x–mÿ\aLþ´aýhkÑ:ÓÆ3õÔÉùê³™ÔçìǪügUæ Ϋs=JÑùÔÉËÔOC­jP!f>©‰ÝtQ£¹âÚIÖË›«Sõ°- òz´ÐÑï¦FAng“Ê»:´×[õMB²å]iãœ:#7õ:K!ëe”Å×Ó;­ ißP¯h.ªoˆ`¶I6ØÞ’óuVm ²IÜ_P’³>·ž<Üÿäê¿UÖ¦€$Âdü]{¸Ñ-± Þú©¿{õŽ]NæyØ-„Éø¹ºO½ÖÈ)c¯¦Ìx-¡éð:þüýu´^ê]’çթƳ«•—ZLî¬2 ·€ì7ã¨Ç}{2‘zÐÉ„‚Ê$K~½™l± ú°A~‚Úë¯Έ¿Lu·#Gç–a¨% 껟4<®{š1X=zAtzáuõš2ëJ~+Ö±ï?®çÍQp¢þ§½b½Ywxz­huõS”1ëtÚãÕ˜·­còŸQUj~§É`ÝBâ:…œ‚ÄÕA~" rÝ=^­Q¼rxåºz¼®{«Fw_!H´§’=@íºz«–CÙˆ×Ó{UCÕb5ÌGxCV´zÚj%s{׫.ÝZxò ] áý}þªxÊÀ-©jÐ:«—îõ“œÓæUZ€-žÁü:²fóu¤ oëî‹WÎqð[FA"õêÙëŒKéÕÁ›Õ.“¨¨S—YöµŽ•uëL·×œ—ç«—ig^åx®««¦à°¼gž°‰½mÂÁlUó׻諸a7[žÅþ7un b¯œ~¨Å[€ºào~ºšæõ_ ¨×N‰]ÕήžÇ<°ÛnYÖ£0—>Í‚Ø"… ªŸ—·P5“¬&–ÝUÐöúÇ!juJößËMÙ„!G«Žç[`¶¾»ƒ ·DˆÍç–ÿVHép[¢Dfõ‰Që74 ®÷ëš?i¿KuË¢õç¦ah%‹¶¾?ãW¼šçþ­ß_ü»Þw‡u!öìç6×_f.¨ûXv©º“2ÞÿWߪÝ(o^“»^·gçÝbç³9œ&íÕavûžz¼Ýhü9·Ò¼ýkÌ:¯†tõ¸Å-êÆÜ“ÕaN»¦„fÿ_?TMN>¢ÛG]i8úóÓÁõ]=`¶¥WVwó>«¦[N1RAlóáסתøgW[ŒºzõuÚœæ÷#Ð.¹Ä?î¨úŒ}wfA9Ú¥3×ý¥ãš`}ýTè亅´¬u)ê±ýJ?UÓ-ζ=‡Ûáîn¸éVà¶]ÈaêæÂgÖ÷mœím@¶ú #êÎþgÖ÷xû¬Qà´p(&ëXÆaÔÄï[¬eGRTn³1 °Vœ³š'@®<6®©Äx@³¯Ÿ¬\“GUÁQ°¿/uÉbþçÔ`°%ˆç…ž£Ø]3=Æ€è:ÔýVô³'Uaîþ¼ïdüáG†ë×ê¬h=Ôö¯¨ÄÐ ,šùëÁŒaÕÕ÷»¯;ŸUÈ׎l$cuÏå©ëZ†aÖXA­e\÷¬~™žê`T¯Ìò­þ¨þ ýUXz¢AÅõ í¶ƒ¡ÏVŸû¾«kýL%NAuÊ¡ºuI²ß|öثݧ®Á-ïTcÒ.¼6ì½Y“hºöC:õiþìë K?ÕÑ·³ªDÕ˜-Џkz©b õ:‹ë\eÕ/šþÈ|Ý xæéc§\±^EoÔënõçÍcž»o ¶*á­ê0í©ÍÒÔ0¿=uÊügè``%Š+¨ž¡²Î½2s¾NRëa5%ÒÙSß©ºòýTs•_«¬Wm§R Jžªe´|íTUë`‚¿ÆG:׉ŸulŽNëpJ«Õ§½Sª™#_SVLî£C;´n—ìëJ˜ÖRÿL\µâ?Kcõ:ãvæNª½y¤§GÕ–G©N-%Ï:ëJëõNÌë¶Î‡Õ²9;«©qw]ªu«Y¯ÜÓÐMëŠÊÖ¼Lû¬¥þŸZTÃþ» _\ÝWë­5â d".ª}Fætú§â¿ssÌ»©R€-´õyºN9Ö/¶ß›že ¶@‚"êÍ Õ w׫Zú\\P>®…Å}R"§Al5)Í N¶ñLÀ·¦¬ç;÷\ïºÀZ$Dbo‘:ÞysѺ_³©=(0¿9uÎìgÒ`¸%‹=Æþ `ÁÝ1ÉÇÐCºÛíNô¸ïTƒän¼•Gœé˜aëz¿Ô’”«ªyë¿]J¹î¶ò8<îeÀëc¹ÕÇ;“­Ç«§V»ûn©æ’K5$z´Ú‚ÅÎD^·°=m4‘úÊ/Àõ§ÛÿëÃV•ÓQöŸú¥žÜõk°ê°hÔy’Ø.r"ñ†ƒÞºÒ¨œè¥NëwèÍÕËy0\õÝßTH¹N!­Ö ®z _¨ÏÓ?†}°é÷UT枺«uu]{ú•J¿õ*¸êêŽ+õÔ’¦ð×qÜè¥NçZuˆ-—º7:þ\ðõ»€ê¬ Õ,ú­ŒZWîN®{Êu)Èú¬·ÛÕï«]üÏ[y¨Þ»˜»\ÓÓÿëzÄ y<ÀÞv¶õ»ð¿Ruǃh _€%‰!>Þdq\n¿²nehúÖðÜñ‡?޶këjÊúzõeØñãã® ãMQž—z©#ñyŽ©–U9øŠh¯QrP·óZ.³Õ÷_¯³S1ºå·çT Üî²£êÕ*âêâÅ•×=,ÜãuµRÃê•i-Ôë®v¦§;‹x:Ù©èõpnOºå·ç[¦Yn­‹þývVœúÅ0Rõ0ñê‹LwÔšæðÌzº|F×;ªZãÈ-œ]èzêku[>ñë  ÁÕÖ½o«‹r—\ôn€ºë~ݺ]k©Ö;¿uz¦¦‚Ý/{¬}iÇ4vˆuÖáhuFvFê ´¹ÖË=xÀ,ãüØ™÷ê¤^kÖÒ쟮¦Ñx-÷zzʈs<ŽLû½½oÚ°:êÚ¿Áûœni €¿8 u¼£1ç‚aø%‰&~2²ûÔßs¯M?Zô¿¦Ä±dLº”ZòuElêéxþmò¦õî5㥮}q¹ºÉxæõªž§ë^—ã׋¦Ÿ¨Ž×ÏÖêrW=Õ´xϪ«ŠÏYióþla¿óoõ2ÏÆuâæzç•¡Ï\žknª¢ ·D“Ëã`n$ò:¼Ûõ¼eÈêØ 9Õ‘笎_SN¾+Òæ cgä¬í=r® zê3 s«4³¥ä:•=¢u+¦êj²¯Õ™ƒ©EÍà-šf:ÝÊêõV¾ç¹«oU‘ì°]~Ù¼ú\0ç¸ë¸-Ñ# zÉ~šq^—0[FÒ)õ©þªêˆìÙÔF«««Çý¿\èQþ­/ùj¤Ð9ì éÖ›Áœn¬€¶¤SêŽé¬¿=!u¸Dg8c %Œýü^tIŸó"í¨ëË÷]¹Ž—§ë7“×X˜ã«Jïÿ\Zg~©{™œà#óë/$ÖŽ¸s­¡á^)˜~£¯/Üßä êÐûûÕq‡“ª^žÿQ×g[¢IÓq×S^¬ÒýN™|9‘{Þ #·³:µ`uÖ)ëë~Kï×ès®¥1VOü.¨ÊÝK½·°Wà°ä-ëœ n·ýUŠçDZ_V•*P[˜mõ½4 êôÿÛÎC@n´8ÜÍ»?ëEʼn͎5î¥lÅ}NfeÁu¹@u‹Žæï€-œíjzß+ô½7S»€]nPÜÍÃ4êºCÇÕéÿ·®C%ÿViû~´tX]eçW7°Xºú¥ùþwÕÙ“¨ÛÛÿT-Jδ9ú¼à$áº$b×>»aÀÿ '" †@…@…@…@…@…@…@… @… @… @… @… @…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@… @…!@Ž"½H:sI@Ž"º¨Õ\Í}LÀ@swftools_0.9.2+git20130725.orig/swfs/PreLoaderTemplate.c0000644000175000017500000000576212216332640022034 0ustar gawaingawain/* simple_viewer.c Creates the swf file PreLoaderTemplate.swf. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include #include "rfxswf.h" TAG* tag; int main (int argc,char ** argv) { SWF swf; RGBA rgb; SRECT r; SHAPE* s; MATRIX m; ActionTAG*a1,*a2,*a3; S32 width = 826, height = 1169; int f,i,ls1,fs1; int count; int t; memset(&swf,0x00,sizeof(SWF)); // set global movie parameters swf.fileVersion = 4; // make flash 4 compatible swf swf.frameRate = 0x1900; // about 0x19 frames per second swf.movieSize.xmax = 20*width; // flash units: 1 pixel = 20 units swf.movieSize.ymax = 20*height; swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); tag = swf.firstTag; rgb.r = 0xff; rgb.g = 0xff; rgb.b = 0xff; swf_SetRGB(tag,&rgb); tag = swf_InsertTag(tag,ST_DEFINESPRITE); swf_SetU16(tag, 1); //id swf_SetU16(tag, 0); //frames tag = swf_InsertTag(tag,ST_END); tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 1, 1, 0, 0, "loader"); tag = swf_InsertTag(tag,ST_SHOWFRAME); a1 = action_PushFloat(0, 12.0); a1 = action_PushString(a1, ""); a1 = action_GetProperty(a1); a1 = action_PushFloat(a1, 2.0); a1 = action_Less(a1); a1 = action_If(a1, 2); a1 = action_GotoFrame(a1, 1); a1 = action_End(a1); a2 = action_Stop(0); a2 = action_End(a2); tag = swf_InsertTag(tag,ST_DOACTION); swf_ActionSet(tag, a1); tag = swf_InsertTag(tag,ST_SHOWFRAME); tag = swf_InsertTag(tag,ST_DOACTION); swf_ActionSet(tag, a2); tag = swf_InsertTag(tag,ST_REMOVEOBJECT2); swf_SetU16(tag, 1); tag = swf_InsertTag(tag,ST_DEFINESPRITE); swf_SetU16(tag, 2); //id swf_SetU16(tag, 0); //frames tag = swf_InsertTag(tag,ST_END); tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 2, 2, 0, 0, "movie"); tag = swf_InsertTag(tag,ST_SHOWFRAME); tag = swf_InsertTag(tag,ST_END); f = open("PreLoaderTemplate.swf",O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n"); close(f); swf_FreeTags(&swf); // cleanup swf_ActionFree(a1); swf_ActionFree(a2); return 0; } swftools_0.9.2+git20130725.orig/swfs/Makefile.in0000644000175000017500000000534112216332640020355 0ustar gawaingawaintop_builddir = .. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ../Makefile.common all: simple_viewer.swf keyboard_viewer.swf PreLoaderTemplate.swf programs = simple_viewer$(E) keyboard_viewer$(E) PreLoaderTemplate$(E) simple_viewer.$(O): simple_viewer.c $(C) -I../lib simple_viewer.c -o $@ keyboard_viewer.$(O): keyboard_viewer.c $(C) -I../lib keyboard_viewer.c -o $@ PreLoaderTemplate.$(O): PreLoaderTemplate.c $(C) -I../lib PreLoaderTemplate.c -o $@ simple_viewer$(E): simple_viewer.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) simple_viewer.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) keyboard_viewer$(E): keyboard_viewer.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) keyboard_viewer.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) PreLoaderTemplate$(E): PreLoaderTemplate.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) PreLoaderTemplate.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) simple_viewer.swf: $(programs) @echo Calling ./keybard_viewer to create keyboard_viewer.swf ./simple_viewer$(E) || true keyboard_viewer.swf: $(programs) @echo Calling ./simple_viewer to create simple_viewer.swf ./keyboard_viewer$(E) || true PreLoaderTemplate.swf: $(programs) @echo Calling ./PreLoaderTemplate to create PreLoaderTemplate.swf ./PreLoaderTemplate$(E) || true install: $(mkinstalldirs) $(pkgdatadir) $(mkinstalldirs) $(pkgdatadir)/swfs $(INSTALL_DATA) ./simple_viewer.swf $(pkgdatadir)/swfs/simple_viewer.swf $(INSTALL_DATA) ./keyboard_viewer.swf $(pkgdatadir)/swfs/keyboard_viewer.swf $(INSTALL_DATA) ./PreLoaderTemplate.swf $(pkgdatadir)/swfs/PreLoaderTemplate.swf $(INSTALL_DATA) ./tessel_loader.swf $(pkgdatadir)/swfs/tessel_loader.swf $(INSTALL_DATA) ./swft_loader.swf $(pkgdatadir)/swfs/swft_loader.swf rm -f $(pkgdatadir)/swfs/default_viewer.swf $(LN_S) $(pkgdatadir)/swfs/simple_viewer.swf $(pkgdatadir)/swfs/default_viewer.swf rm -f $(pkgdatadir)/swfs/default_loader.swf $(LN_S) $(pkgdatadir)/swfs/tessel_loader.swf $(pkgdatadir)/swfs/default_loader.swf uninstall: $(UNINSTALL_DATA) $(pkgdatadir)/swfs/simple_viewer.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/keyboard_viewer.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/PreLoaderTemplate.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/tessel_loader.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/swft_loader.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/default_viewer.swf $(UNINSTALL_DATA) $(pkgdatadir)/swfs/default_loader.swf clean: rm -f *.o *.obj *.lo *.a *.lib *.la gmon.out rm -f simple_viewer keyboard_viewer PreLoaderTemplate rm -f simple_viewer$(E) keyboard_viewer$(E) PreLoaderTemplate$(E) rm -f simple_viewer.exe keyboard_viewer.exe PreLoaderTemplate.exe rm -f simple_viewer.swf keyboard_viewer.swf PreLoaderTemplate.swf swftools_0.9.2+git20130725.orig/swfs/rfxview.swf0000644000175000017500000001137112216332640020523 0ustar gawaingawainCWSh,xÚÅX X”Õú¿™ù†aß—DÔÙDaMÌLSa`ÆaXôÞºcÞ-Ë…PÄ%K©Ì®(j¦u%î©™¥™šöÐâVÙ_ÿ¶üëöÄ=Ë73ß 3=.÷yþâ·œw?ïù÷¼ß4ƒðÀ @$¹‚“'Of{Vo Kžè=]yèòõðØ¢r«k?1§ó¥Ê§’.wæ/?½õoʧÿï§_e¾pÂŒøËZÒÛì½<«¦„ÉíÝL[ ?Ø}©’` d e‚GħÛ˜™Y«·ÌlöB² ÙžB@Îv"—^Ž(™èšŠ®·Ðu]ã€Sèú] ®¡+Ô à]tÍpXàŽÃCÿÙŒU“Ït}øÑ“O,G¼äصBSîºõ+4Ò¬Š¸Ÿ‹$kÌ>âí‹Lÿ^Þâ=qúpVÛÞã‘pû¥êŸ;¾Û•_ÃßÔ ÇÔxÂáœiúA§Àäy¬;<ºÓœ¿ô égáÙS°ª~ÿªÏÏ™ tÌÆÅÙ‰`Äóß nó†´m(è*x²0ÎýΔïçê\¹D™Êþp¤iä:ÑYñò MßìóÿcgêÉ#Ÿ]9_òUâluëá•¿tG|¥Ç^áÝúùŸCÁ<æ¥ÒÔåfÁ?Î?÷ÁS}%Æ*Åÿ¬RIN›šèг«Do©R?97§`Ø¡ŽÄoSÖèfM»0lѵEØIÞjù.ùZɮ֠üâmŒ²‡Y:áýŒ¨ 30óZUÁ¦“à8é¦×Æ•štÅ$H¿´þšIp®ÈoÇ…ŽÙóo ïóR.ßç1.0µ·1døº%ʹf÷zØ!w¢VùE_Ù%þÄܰøïBs2”«Ú§}s´êEi Œ;;²ðµs͹晔/ø.DzAåÖ8õÝtCo}ZH®&÷…PÃXÃÛ† 5ûŽfJ¦Ì¸õÙÛµÃ|üÎ…½lù’€ã+*ccò¡½û—{ª$7Ì1û”Ÿßm¡Ò¥WÔ?ty·|ã¤ÉK¸ÐÜ·#í§9ÝŠ¯w@~lØž1ºròá×Ú}YÛ.ë¡ÀƒÑÖ§¼ðÑΙ$÷ÂGÏ·t¼ß¿î¹êq#û$Zóƺêâ¹Cõ¿O0þýpâå¯ÖßYî.¨Š §¦— W¶¾µí¨Šw†¿›ûà“«Ug*Á/¤g+¾¼6òÊ'fI‡Ùïù«“T> „…¯Åˆ'Í:®ßóòšé?ºQ”~&¬Ô'™Ü-kS—ĸÚ&ºSÑaŽÃhy÷›Ÿ.´|35".ùÛ{{ë=<%'Ûüå/¹† jæÄ3ñ%+nN”î¼±Õ˜û®/ÿyVýøæêËaoî…Q•Ð1éP{äí³‚ª2÷¿ë×ø™Ã*Au9±£ùŸ×çk9sá™çÍA•ÐðÆ´-³ ßáo›SI^ß Ñ èLè]ÿž×ìWƒV=F|½õä„¢5Œ2ñî}õ{Xîùá¡]LÊ1Ñ o¶B­Ç3S(’Ùºæ}Ѱ2Í*IH»+NÁžõ‚¹ÊjÙE³d‡jôÉÎ3ÉP€}ÈZGÿ)¬ö¡å=’™PÒùð¬å³[7m½¥ð= Ÿ s×¾}qLØîc»TŠÕнsKÕN˜ó <¶bÌk­;6÷(…‡ÛczÚç/Ȩ€¡ëfxåEݾ´ ç/Ö ôEÒ“±»jÿúõâY²½ÉP¨ûúÃíÏ?ƤÌ-øþ¿zß"ôˆ¤LŸˆ„ûDÁ(HD%J É0R ÒPÊ@%ë=÷mL•HÇè˜Ó‚:fBü4\ÉÆ¯Þæ3Ÿë‡GŠ"?1°xõtô#ÅPâX+‘áGsd©‡ãX7(‚«à]Æàa2øzúNïM ˜»õ´¹`<󗿤ܼ.ôì ŒiêüÅ.sþ?aé2ex¨à÷é/¯–A6;i¹Ã#ßùä)_Æ_(Û38Gåýèßß*++ûû£¢¢ú™@l¼Ì/.tÄœÏvùƪÛ¡§§Ã meÓ=%«ƒ{³A¥jg€©)¾Š,µ-tn{O{{{¿J¥º?Ûé¬ žÎÑã»C½öõ­ßõgØ4PÃñ©>G¶Ü.üÙ;ÕûÒ»Ò´…äT3™eh  ¯¯¯¿IÛ”FH±RW£wìXIâD »³÷d§”ÍŽGT»òýŒÏîò=·wûíÙÒu{Ïí®-Ý~]·»Ëwûuûrv¤wÀŸÙIf=¡àÓ° ÈÆëʃó——9%mZ^wyÏ3ß¿rkNRòr¢4бR6[‹¨ÞPórU‹">ÒùÝž–­#.ÛùsãT½¢"·¿ñyoÛȤEû·eî­[íù¯C97ÏAlñÕ”êùŠO ^Ó¾¦ ßÿSÀüíg÷z´¹Ÿ»ùÕÔ õïÌ.–_̘¼´üò‹?œW§^mÿ÷½NÇÒÝa Äû{îTŸ¿ø|l—9õÕHCïÍ®La”Ptæ„W˦WæÃ6Fs±yë?ôp–ýîx÷d¹_‚»;Ô|­)´q¼º{êušŠr}]¹A Ï‹¢¨šLaHᆀ|ôä¶«ÅÃ\ªÕ×p žždº¸2ÖŠ mÆJÚ:؈-JZ¤\jv.º#ØÁzjö艮+çeñl#+Ø6á„iÍ.|´6Ïtå£Ýƒî:›D n¨A>zróÕdQ×®˜Ò ÕN²|Ùð²Ú­v•Íò±öà±®|`T„Þ*Dt cÝÓÀIÂî#âóþ yST¸òóqoy`9,ë.œäAvy ´è˜ùƒæAÂí>Ôèy×yØŒw‡7Š:úÊÆ˜°|•ÎÅ"¾C:ŠÑ}н¥cÕÇfØè,ÖRÀ}ÝýçÃâdmÖWcâ¦ô]•‹Á÷V.|¹e\u‰æc‘xDß<ü¬v¹‚Ç…‡§>^a‡’•Ä}ˇ‘‡{8y yÒ£ ˆà0"AeTPîLPAý©` t&8œQÁ`*âL0†FRÁAT0Ê™`,L£©à‚Ïá|*@qc2Ê]m `8(®Ÿ@ãj2vƒ4Vãu#cwˆŵÑx a ½êÎ6‹`( ½yë’à˜dò†ó»J-†0OSþxU±¡¦äl”ÛYfëgB¤{ùöÓž[ŸW$ñHµC4‚8П¬—õBc}yÑ`P–âu76»J6ÁjÅ÷̓Eóâ&e™ÐÔÔÔß»nKO7HôÉo²¼üPøB2 ™nŦ@o. u·š&6ÃÙD˜Ìà7.UýÌPùQ‘ä­²wáœ$ ŸÅyKï[`2%s¥]ÉÑ“èÉ„~˜e‘íѸ£F3 n6£í֒ΠÒZM¶Æ• C“¾Â¤Ý“d’¬ üŒo¦Ï¤ã÷™d¬#CÉ1Æ92,“ óYréÔÓ ¹1ÓiõU:“ sÍ.1§—ó¸ zS±ÿ7ÌÍAì æÒКð0—:Œ¹ås™`Ò%ጺÃXþ ÐP‰9B‡^9ØeYÖ”»6‘‚Eb LÒ³JgM(¦KÚ7þõ”6z½$fÂÇ`Ù`Dá5êw³Vk(o¨Ã³GI¨ÒÖ4TÏCgWÌ•¨r*Àçŧ“,:«Ê(ÄÏ¡F›€íÀ5Û²aèõ1¨fkM§ )Š~è· d\­¯¨@çë‘Âru ¡–šŒ&Rªüx®ÊG²¹t‡p5½Ÿî³Ox·$ÞX‚!ø9¢N Ì¥|CpZ²F½¶©ÖXgƒ¶Ò‚>zhõ9‚ëú×¼€ÑMÆ-³õÝ]&µ‘2~•£"h PˆX±œ".…dÆ =g0£Î¨¾€u“ãäy¡ù+ÃUÃaácÉD4Ùef¹PI2µF¤ð†‰D°Ü Ç¨Ö`šŒ'4«ûl·†€–S‚G³nÒ6›lr”UY§©F¬ú¦Jzn”rÇGS%·©K¹§m2%& Nh¹Æ -0Vh¡ÆX‚ßAcÐWÕ@þtÞ)Dï¼Á=Ê5&KÊæ‹îÒfàmÒ…¸ß@-ê"P£zÔ. ôYÇëP7¯-1-DÄjÔ¯M7zLÒ  ­© O^ÎK›Éœ#ú´f¹^k*ÐÔ?M½i‘ÑX 䆨E(ê:g›Œ¼ÖA•ÑdÌ©©(!pÔšÔ(Sx:³~¾¶QkÎ%ç‰ØXhPX£ ¯sÔAŒ¤$Þ°©²ÖX¯´&ªÞ~'ðö¯2ó·†m¯ØÚ…JcyC}3},„ÒF}½~ $èÌ@§.o¸¦ábf9yÉ‘k)‰¤â<™ÖjÉOÍÆš\¶]ÞŠµ­¦^kW”u¨!A[²½sd<Ó)uØ =ƒö$Ù¬êBZ÷éP¨–ÓMI‡b:dY‰=ˆª”õ,´¼XobÁÕ—ªøqC: `}døÂ”PY?B™D)H4ˆØ æ$ÉYEü„z('o£‡Ùɇ‘³ ½’Ê'3ÂD\™½¨Z¸šr€Z¸sµ;µ©Ô"œ«ÉìÔ*¨Éœ«ÉíÔæOùÎÔ"]«åq|gjƒœ¨Q2•F÷(î×Sཨ·Ã—Ï+´áõ¿gÔN¡°-ÄeHˆœ,b|4ŠñÉÏ&Ñ´}¡È£kæI»'b™“—òp%5t ”¥aó‘åY7&ºÒ |-Y¾J|츚]¤€®å‡þ‰¼‡ yû(îNÊ•o?þZ ì×Ò“ÇãÈèÊpL–8YX1åqN#-˜![êOf.·Ÿù½*zŒfèŸDÊ¥lµ9œìž6@VhƲt8ž;bWÌåŠ#‰6ŽÐäø5ž{EÌ„ÜÜÁ`À6F±‰2BMt´‘TBJ*®!âÉ(Ú4z‘Ãa4 ExŒžÉd4Z6y“‰F<É­SNÒ.€ Ž“lÏ!RïÅÝhuzÿîÒ¨»h“"À­làrf/˜N_"Gs† 9 îÐCé &{¡9K´P%*;†k­ñ=XM°–)ó¤v¼hík3D †’d3D R*;Žg0”Ì¢Çbƒ$Þo¡ÏÝå‘$Ð%àa ¼Ž#Få4ÏøOmÈ&ûo¿.P VžGBõ¹åñ•I­5ÄÛÂÇE<Øo G¡j›ÌX'BmIЍÕD°û‰T7’ÓM”Yº é@‘|iÀ5¼ø\˜Êh*ŒoЦ–¸qO€lwóçö ìÀêV éÑ`.P@ ŽÐÈÈ T+®ÅzK´B²ì×`]è@žhX ë#ÁjÙÇ…+ÿ @¿ÑüÌÈ™—À H `¿üÌÈ™—Àd `@Š"obj1¿toýÓµâAÿ5iƒs¾À %”ë%÷8÷NYONYA@Á@êtôêp 8 ²§N²§>Àµ#Þìd²>ç>éË)éË((x(NžNAgAVTéÖTçØwØd²¿ CR°ä5f^žæ½ëØ–x æ%Ü\ý”½ÄFÊVåã…ÕØáŠö,öm¶voçO– ®";)À5cuùX®Ä÷,ëØb5fNóvT¦­çÏ–¨ ää™0˜µ {Zò“(‘“J‰0$c—M]P5àÍ4Ì ªsL§4€»0u–þ¸ÙæË˜äË^c-u€ ®ºU5ažðög¶±{l¶n#¶R·.\)lÀ k€ØyÙDÛb5¨¶¬ÚÚ |6ÅæÍ¶Â 5l:ðùôô?±=ÇŒ—8ïÍ&Äï>Éxv8Ží/[Øcâ84œH™saPÿ4p HìZ!H ŽÀg¦®BXagÀL0DYž ¿u´ãPçcè%ˆ„¾iaíõâYuçàÕ‡YÀÚŽ¥`Æ|Ü„%ëƒÎÔ>ޏKs}p•zÛ®±ŸCEóro¦b^4_QÛ—^v¡íóªÃ­Íœ‡YÍ%޳›µno:ñ,ºõ¹uꌸáÕŒö£«’ÇTe9[¢IÆð»}XÌAu¶ sK—Ÿƒª¶<%ê}ÕŒþ ÏÆ¼¼ÒÃèê{lgÔöØÏ©XNh-€O y¹·Ô¬'7¬àÇKÛsr—¡¢úá+ô=·V@ÚŽ¸0ÈíD넨ËÕŒþ ÎdJÁŒúÎÔu>†@æ– ÇSÛF^³›ð`ºøÁ¢ù‡Ú¡ÎÔBP[¢ELp»`¿0u¸Dg8c %ŒüÞº$Ⱥê:óΉL—§çd‡]ba^­+«}qi|:¥î‚Æ~î¼S/Ü÷KCë-{ÿÔ§˜ã©ûÞO\Z˜žº"ŽÝagûzœË4õ@éªëÖƒÖôÒ³¯$Ûÿ[åfN«¥Ã½u)Šú²xujÏâ «­OYyßÞ«ŒX[Ø4oñùõ´<Ìë2ÿoÌQØ~²òTW“õAn‰'MÖŽ‡“|ýÎ1þ…¢õ1ÄHêVÌEÔæhsª/¿XYþÞ¨Z¼ÛÔæ»Ú_Z:N²ó¿¼à$ ëÅ2ýÔuæª^á.¾„fN†øu䋎æn&gKÓsc’ˆ_"§UÒ,Ny%Ÿõ^@ÎêÍ>¢ g:¥~·Ë? ·0+%âQ¦ ¿F u¼£1ç‚aø%‰?^£¤Ï]{޾xétoZôѦÄÖÜÍT9ë×=Ɔ\úËOæu1…êoö+ÖªsžÀai¿ð:ˆÒ‹uG{*Œ²x¹–z×¢õª‘Yë%üg×®{Ž—Fõî:ùê:SOÕC/Ǫ«õ?VÑÐY—íÕ¸G/›|V}r78µKè.¿“>nJ²q^¨Ð]oñœÈíwæ-a€-š¥úÝË6uVªêñà“Ô¢Ùª+\?KÇõº¬ê뮫ÉÕ¸tË®O,g9P¹Î†ÿÕ¥üüÑ´ú½j/º¢:êó#U·®£OW:²µ:aéS¥çRºžî¦ªÕ=Pêhn‰kÆÀÚ:Óe‚Ûá [«bÿ -¾•ºåZ¿õxðIëxÔqÖ|}¤Ñ´ú½QÜòlÔí/Õ´tпM uǃh _€%ˆ{Tþ£ŠÌ}~>›8Õ™Z²ÔΦÝÝI ñºçm–s¸¨ƒ¬¨þR¥Wî¨Xl× ùáÇ'Ö·¼×¨6­'Tµ²pXÀB×£”™˜¼Gë­üî¿K¬õ@zЃöÇ\Òåâ)Ý€·D”"êàÃcÖ·¹Œ8u¢ÈæŽïZ²A~lOõ¹–Fêšž½ÕÖ‚—«‹ w[UIn©VX}sÑ?:ªuô‚둾öê+)ÓÜx÷À/=z±ú‘ —õ+:/ê` ÁÕ§©5²'Y;ÿ~¨´²ÝI®œÁl6¿Ô¬Ø©€XZMïw}õMCÕêëAKÕÅ´ØÌyE½TˆnzÚ^<ñäÜî·3K ·D‹Þê™~±ÖTBËÉüÜ /›š¥£ÝP(Œn‰(EÖÍB „ªº}QhÀ¿8 uÎìgÒ`¸%‡ÑoÞ£lÉ}@Â|¸Ã^Z}Öî¥lä}K6ÛúëM^s¢ŠË¬¢üÏR4]®©Q½nþæ¹ØgÿÖÓz¯å°ÿTè´ X³Ã“×’—¨óZWBòëo¼Òã½R§Abç¿Lru¸:ë|™Öïÿ³V]\·X¹§®ÛÖQAÿ­> 5/¬zÜõD€êã‚9ÕÏF톤§Tó(žk40õ§Ôë( ÿÖÓvç­ÁÓÿLrukJ¡Q±×[MÛ]sЈ½Q!:ê½ñ˜X0[/tãqòî¾¥Wuj³šzó 3‚Üï'7¬rw'Tè5ÎhÒàu¸úŒëª±Õ×UÕüÛ–uŒ2¡êãƒÔ­®xaBQõÛe*µm"ÏTq n¤”Èe퀿/ uÊügè``%Š*Wž¼¾«Iê¾·ÉõÝl'©º[#ª{Ô—^_޹T™Ýb»‹º‘õS+•ëµQaÖÁû¬œrwRJt>¨ýMýytú׊=óŠÜS¨‰¯ßR—¯¡½/]máfº“Õ}uZÌ?êÖ¿§ÕCÌû©Õ(_Kc‚Å+Ρ³1|ì0MëJšýÖRýG­çï¯7=4ùºAÉ͈îþ¨b\ÛÛÅ€[¢J‡õt!Õê‘ Æ tIPþ§H |ÜôÒêAË` a©~Îh;¶ut-·ëè¨ ®Zç©Õ(_]i¢ž7i™Ó' ¶âlâÜÎd㓺¨yŸuk_Óë`CÖય¶t`ºöлz§ uià¬ê¦D»Í«~®´¨x<Ò´UëęԈ-\¿@ uÉbþçÔ`°%ˆæzž¼î›=L&±øÐZŸîþ–dê¬5[×è®'_X©Þî£èÆUŽøºð„Fõ©•aë3›EÔy]—ª?×Ï^Ș¾µ¨‚üçö9êŒÔŸ­ç¨ÃÉg[wPÞ¦XýW#(z´ø"õRÃ0ê`KSÒÌ@±ÏS¨ÀI÷9î1ºÑƼu–ìçêԽšÏ7Jã8°ý ,Ò+Pë TÃ×Ò,Üš~œ×ñ½æèt@,Ò+Pê‰ëÖ.·³¬]wTHÇPX¾z%ÖÝêϨÀ0˜.¹T.=v ÷ß3< EÔŠÞ´pkýe‡îúÖ¦hs<´‡­Îé-é:ÔÏuñ² Z.¤Vó…ëž\ ²kÛ‡¬Æö¿TSþ£é}]UŒ‘ºÅHèu™Í ¿>uË¢õç¦ah%‹·÷~`Ýïû&¸€__üD>¸è©=h´·:ÌO™õ¬lÐë´ÉÔ¥ã©ÆU¿UÓÒN¬î½TèÌ:“ÎÛèOwšTQýPº˜šsDü©+1·[ƒ¬N¡âÌ\ÜfÚë¼-ÙÍð X+Q©ÖÇ ªé•Qm\n´ã½+áÕn«Ï¯I¢_[³ .yé u£ÿßJ ‚ÝY³«›@-Ñ%›:ÞêNõgq뵓­Ö2„Ï›m]BÙª:® rõgƒê‰¶: cûkï7TâÃà]s8Q\Óçj«?T}¹Þ»²ßTëlÌ!Ն߯OW[ŒEþp’=Û[¬÷­ÆVŸ=…º¯‹ó8R+ªÂâ—X¹ÙŽ´!]EñÝAd<¾?U…$.±r&€¿Cu¿ƒ&g”a°%‹Wç^•têò™ÇiP:Ü­fõ¤ê]×–%=1=c“K:CWõWL%ë°–mÖØÛžX”=j0öú¸çÂu¶•êÉ5ÕuK'¨¨,wRºXµi]Öý”û­’Yí󵄽w¡:„¼¦u@ªÂ꺻ՄÃ?ªºßR?WÀ[èúQ了©ù ‚Ü>OS«$ H-•=…8Œ,ßR|Až jÚXNÒºˆÛÅuK«?× ÍËŽybJuF¼]ë§®ÕOô(Å\Ç=WÀ–:ó•õ¹ã¡ë•÷š krµÞ·=[œnå$†…=m=xܪX-ç:¸zj/­0/U %¬kgÛÌúÆ––u¨Ì&ê"Nö CBžÎeB&óWYÔó\=cH9˜êh¿Cu¹ã<è_à%ˆ¹.>¡æâ¼RÇ®öÕ×ZÐʾ£¸©\Ú¦ ëcÖÝDzOzÐ&ùuDê¡ú ë#™r ~õMþ³måýh@𹃠ÖâT ª#éÇ\¬n~ªa¸ ºïž¦:‡šõN$‘êÞ¦‘×Õbcªà×P0”N¨Ž¤rÙ¶y´¬ÖâT ­ GY¶òþ¶=mÝw¶®º‰§‚ëûÞ¤ÀõÔ›9æ„ëwP¤už¨}§EMp:­ÄuQ[’êŽüÈ iœ²­ê =i{e¹êÔ3Ö𫿪ȗÀ,¼6êÈAŸ×´ë ƒaM]k¬B7ÕP°]žÓa`²ðÚC¥8º²ö‚ܘP;­ @¿=u¶cJè_¨%ˆçIó¨å8Û›n š¤zÛ°s5V»¯ ×—ZéÈî¢n¸<ß±‰Â>=(‘Ôj¥˜l¬õË+íã˜;=i_P:ò\õV¾¹¬ ¯Z˜n«Eè›q­ºµ˜˜õ˜ë3‡Õ¨„»«QGTQ¸VÓÞ­°ëdiYÖ¦¬¦ö[ì¯í¹¶üô¼5ãÂW½FªYº¦íªsçË?¨›©¿Uk¿~ |ê}Y“zùóaõMÞNÖÞ€ÃÅ勺þ-œuA¾#ë„ KÕEúKªÔšWU¢3Ž¢œÝfCƺQ#«8d÷=ð—uÇ ÒuÄëù±¯ÕÕ+¨hJ@-ŸJ®¸¢ÕZÖÅî¨)Ä=Yç$ºÓœuVŒ´ÿJ×^ê§þ­fy]iŒmú¬éH€¿Du·#Gç–a¨%‰«}>£`˜ýzB‹øøW[Æî¡ÄQ—\ºãóÕ©­]äg_…T~«Å ± Ç•Ïu#¡çsÖ\°n½VÔýTç”ú„ <ÝmOW­)‡_Ur>!ÝåÕ—H©ï'X-Ôý8ú´Àˆ‚Ê$¢®¿ ï][4úÍ¥Ùõ›Mæê‹WÕp1¼Ô¶˜õ[PêØù¦ ¯sù#¨@ÕO]Ïeþ-…ñÕg#œ=TæóÁuî$u9åôê*rÿÖÃÂ7¯à6Ï7½Æú´Æ´u«¼³æK_[M»n§¼{Úµþ¾WZ=YuzÜ‹õW#zêéÕ§Lå¹…}Z3\ú˧wò¹î³G¼ ·ãk@ê§7ŸÖéŠ?ŽBÑu¥0ëëOÕb<‹ªÖäˆ.·õ¢àº ¿Ju»c6ç~b%‰×¬Þ¢ð޽|îs8é­ÿ[AÄÌ}SƒSú褹sÅ«s­–^×^Ì[¾¬Í`·€óÉëCAyÕMÄ'‰_õ_ƒêséž v±Xî­N)@ºÞ_‰z†+u 9ãD½JÒ~z¬F3óÃŽï«êp.½wÞŽ©ÁKâçÞëØ‹•Õ/Á{¨Ï×Uç0ž«Î™ÝN‘7ú‰ä8Ùm¥ ­çØ¿SŸLýé ×_n³>q‡òb×ë¥eÕMÎ÷¨òLˆ,âv†êˆÕ5)‹­< ‡Z,^­4)=SSS¹h§5i9zêcõ§ƒ™ëCAyÖ‚3Äá)|«³«MrîúcœGdõõ‚ëS_ïÕY‹ÔGdõ•‘¬ê¿ ¬ (’ÒzÏÁ~õMDƒê&‘ d’G^º).`¶ƒžFëŬ^¿<uãçê`X%‰ÇÝÞ¢|ƒ†c9î¹Ößpׯž4UGÔŽ»‹ÜíÃ7ëtÖׇ˜«uà-Eû:šÒSuÅz’ÞOdu•îvëaÜ5×f«­o27gzϘ>ó›fW`+<Úéê¯ËÕ^ÿ©®¥¯Qê‰0[ÒÿõSƒ%¢¨¿gZyÁ0[qJ>o»yÖBÀ ®'ó먳§Q þ6ûÔÊ)ï 0ŸUG°^¾xÇXójzðó¯õu­àë³ +Õqzƒ›(•}sad:Ö!\ï»zϘ>õ¬ŒÛëŠõ%Í­»‹ÝR Pz¢Ò„uO#õæ"\§U<°ÎTv nNÀ[‹Ö²<[¯ØÝRH£ð[rtãuºë+ÁsÕaÕ«ï¨-¹:qº´°Äõ– ²¿>u¼£1çü`%‹‰¾¡#+¼ó‚õæ?Ýw\_OÞ´¾UÝeçéºØTõÎÚê2»ÔèlªÐê—V‡®©újýLM|zçµÆu§iëx¸A×£š;ªÖê—]^sn†>‚ÜÒC®‡¢'Wèî¶Ã¥Ûô·€XiòmΟ¸ž¸]T}u¡:³W‚ÃO“nµõeœó›êÒc©Ç÷ Áni!Õ‹?H[Þ·Qª¾8 d guóN¬ÕÍ]l"ͺôs0u¼]Íê/NÕÔ°k'©é,gR˜î©ðµýL- øW ["ÕæKêµ·§ÎzÞ.«ù»@¶¿ëžá¡ºØóþð“œö½`¶¿ê$ë_TÕ¤ÁW«Èto]Z«ùÜ]i} :ËÏuÚœê“è]Ì-° [´wuA6¿Cu¸DgjbX%ˆ> u+D-ë°³{ÖÒò+ª>,gY’Þ®¦Š¹œÙLJê//ÌùÉn½˜ÓÝoõúСDu™þ¬ëiy×af÷¨šKT»«Ù¯Y„U:ÎwîuDšæ|¤P,H²6æ/Ù§[ý8íÖ-Çlïø…é‡\šE®¯Mès!:³ïÆs}O‡®^6]K¼n¹4¡Xo˺С¤õ™ýëÝ`‚ër4ê>vÁÇA€léÿ5ÕŸ|¿­ÉT]ñepZ}u —êe6ßÔÑW©œJgTn_^¤2àºûß%:¯ÎZó©sû®^2h-‚)Ýùƒ™iΦP[n¾õ™.®êŒÔ|­G«ÓzUù×€[O¥u´½K»,NW0^ÁnG)ßÖyE`ÓéEXËçºÞÙ€¿$u¶cJç8c %ˆk…¾iYéõâiƒçáWYÆÚÎ¥ZÄüÜl-냓™ÎÕ>¸Stp¥:»®±?CBsq¯O¦bX³ïQÚ˜>v©éóŠ«­ÐWYÓ%>³§µ½nƒºñ4Áõ©ƒêŒíÕ‹v·«’ŸT`8 [¢IÓpºýX´u· sJзŸ„ªÀ¶É¹Ùçj¡\cN¬uµO]‰úž»õ*ÙÙ³ 8æôú±Ñ*uÕ9ÙçáoKÓsµP´_.3ï0ùUºŸ#sJЃ©ëÎÏD¾u*ÙÙ QP?YÓÎ\E@ýO’s:Î1*sJÏ€oÛôB—S×EΧ¯t€¶~êêÅ ø tIWÞ³¦€¿?u¸DgjbX%‰¹^g͵uìÉbçÐY§Z׎¤Í<ßTë—’}×RÐë¬-zS8kN¨ÝA}rj½:Þ&õàëQëpŒÕ›º»®]¯V} ¬úœÙK¶ê0Ò øM:êbó([©=Íè- =Â: Çu¿Û±Ý`õž_.ë9ß=»?ëifíÕ-u/«0ï_YŸ@Z{„u¡L·çôS¸- =‘úЦ¼Ø"â'®Â²5iByüyh gNn¤Ê=Qº :™Ã u4Z4×Þ†Ù׃mƒ¨š4÷þê0ÓÔÊRGœ`ÝWäÒú½0`ufíêëp‹Õ-r(_zgSDdÞjÖu6dZêˆÍÌù7n³>*hS^:ßíØ‚ß§+·¬ç'E0¹XYåꀿQu¼£1çü`%‰“ì>fAzõöù]çÀ]wZSÕ.¢äÑÝPï:êôgõÏTƒëÔ¦‹ª|R]¥þ¶Â…ÝyΧ:×ÒÜõi?«ë…ËÕš†[«5ÿ5‚âz‹ÔK‚ÞÜKªþ÷Z_½Ž~•…uNÊ᡺Ø«õOÞ#êÐüYÖ^Ah<pÐÝiTl@¯sÏû½Î¥‚¦ýEɘ:§Å›u)†<êzUF d•ºçjøõ°3Wë/ µÖ—õK®/Ø_o•Þ¦'AàºÞÿjºŒ‚ªõ¨–ç=¨-‘ RºêôÚñÀTà]{ø_ýPïsAlˆR•Õ›®‡Ýç9ê‡uïáõZÔ-êòåÕ¤ø³©…\`-òJçºÎ§éoÒ¢o’W=Ï9жÂZ@°ÓÛ+ß$®{ªƒY`,"x0æè\\_°0¿Juãçê`X%ŒmÞ ?1{ 9‘ô¹×Õ»­d/Yóø=÷~_:ɨ9Ö O×6)èÌgS©©.ªq›}X4w¢F½Tð®z™BÈs›¯¨õ;oZ¹ÔŽ¡ˆÐ}R zî+u5«Zši½gÏ}zˆÛuO, æ"cgYjž[‹Õ¥‚˪ž'§-Å…ó4½hï¨:“C õ5ÛK…‡]G‰×ú«Å`õŠmàë+ÞÔ’ª-WÀ-}É:©Ç‹u§•Gê ÷F ®FòK¨¯R;îr˜ˆ‚ÚVûª¼`ßYÄÚž¡ˆÇjæÁzS ók»£«­^Ÿ¾¬x(œÒC7ß±dë‰ÃâŸo½R¯ÁlûÓßÍ’™^»1@·¤,ê°ø'ÖW†+™L`·€Éžê‹V~ n(¸N©åÃ@¿;u»c6ç~b%‹<‹>¡‹9z!x–mÿ\aLþ´aýhkÑ:ÓÆ3õÔÉùê³™ÔçìǪügUæ Ϋs=JÑùÔÉËÔOC­jP!f>©‰ÝtQ£¹âÚIÖË›«Sõ°-ñ=!w­ýSP¬¹WgZxç£ÈÍýN’ÈzÙe1uôÄëCZwÔ+Ú ª›â- ­z´×[õ–n]å]h!5ºµ8Öuq²²ëC)Õ‚T]UÝ?T1±}öàÐ.º«º~nòu +3ê¬Ú ­åoŠðõôÙ¶![ßU7ï~±Ë©ÜÏ#»×®„1ÔO+›¤ûÝl‚–:—d¹õ6/êš–ûÔM¬ühP!`n«ÏžýDÑnø•î(.½t!Ž©ô@¶[v¾ê¬ßî¿Hu·#Gç–a¨% 껟4<®{š1X=zAtzáuõš2ëJ~+Ö±ï?®çÍQp¢þ§½b½Ywxz­huõS”1ëtÚãÕ˜·­còŸQUj~§É`ÝBâ:…œ‚ÄÕA~" rÝ=^­Q¼rxåºz¼®{«Fw_!H´§’=@íºz«–CÙˆ×Ó{UCÕb5ÌGxCV´zÚj%s{׫.ÝZxò ] áý}þªxÊÀ-©jÐ:«—îõ“œÓæUZ€.¿Ðpþopõ¹¹ÈëøN g°¬™¼Ýiúû¢Õ‚Ú2 ¯VËÿ\b_N©â½UúËF´Ým0¯‹yuøZ¹ëð± ձ̷ª2”w\b_^z¶Îõ«³têÓÞ ?‘êz„dðu›DM긧ÕÜd Zõ]qÌ"~´®X@úÑúôVõ¥sJëæ‘ÖîU+¨Ƹ+̃¬¯GUkYL_+Õ™,ϧ„ýZÏ ºÓ$‚Êbù^³’@¿;u¹ã<è_à%ŠŸï^)Ÿ×¸%?¥8ºÜO2u¼êˆõÁ×-¤Ÿ¯i©ïZë¹.¾ªíWAb§û×_ q^¤'W@·xtŽê¢¢Ö9ãz­ÕOžÓž½QÝ@¹ËlÖoƒ?­/lG^­\­ë—6=Ö—‰«ž­¼ýo Dz¬Ž„ëû9q뽪ԭìç}sÕ8­»«%yx-„†|:úã¬õN+oëxZp ¯ì'í­ÝD¬z‡ðõS;ëöRiÕ’ƒªø6¨}zØòIu›`ÑëHñÖâkûª#–G\¬‘[75sú¨îZ§UüÕN¾á=[“.zñ"¥uS «¹0_—Uüß.µñ¿½|1zІunO±ë_F ~XžN"rz w‡Hî² ¿Du¿ƒ&g”a°%Œ„@Þ¾Ó)*éÄ—P:î ¾u¨ÃÛë=¡ŸÖŠ÷­ûV_i”ΤPUÓ z°Ÿ˜õ]R@êJ}Σg^¥tßýoÛ£úüûRuFºÍëË yΞç~»™]Tÿ/Ánó'©ÅRú¥Ðzó*ϬûZÇJºõ`¯3ëÖ ÖѬÿ¯r¼WUÕÓp[Îzõ¦Pê´KÖ4‹S« ¥·Ut=¾±ÈZR€}·òÓ@¶*ùÇëÝÎ÷Õ]0›­Ïbÿº·±WÎ?Tb­Î®\€ºào~ºšæõ_ ¨çœ© .ºtJîf¢Js¸2àáñ…j3 xóìØ-˜BzÜ®.‚Ù„!G©>_?ZÁЮ¥†áý\p:ÛµõY0ê1Ô tHŒÞya¯õdŽ—º$FoQ¨•³pC@¿J uË¢õç¦ah%‹¶¾?ãW¼šçþ­ß_ü»Þw‡u!öìç6×_f.¨ûXv©º“2ÞÿWߪÝ(o^“»^·gçÝbç³9œ&íÕavûžz¼Ýhü9·Ò¼ýkÌ:¯†tõ¸Å-êÆÜ“ÕaN»¦„fÿ_?TMN>¢ÛG]i8úóÓÁõ]=`¢KµÏZ-ÒN³ ¶HyðëÐŽëÕ|3«­Æ]= zºíÎs{‘èÃ,¼íêMÍ+V~ªtr]BÚV:ŽõØþ¥ªé–ç[Ãíð÷7\t«~¨úŒ}wfAl»ÃṎ́ϭîÛ9ÚÚmôGÕüÏ­îñ÷;X£ÁhàPMÎìðn¹Ú…]Të4\xm]SˆðºÆQ4u%IÖë1# 7úùúÅÉ4u\‹¯€]qÒ­À¿8!uÉbþçÔ`°%ˆç…ž£Ø]3=Æ€è:ÔýVô³'Uaîþ¼ïdüáG†ë×ê¬h=Ôö¯¨ÄÐ ,šùëÁŒaÕÕ÷»¯;ŸUÈ׎l$cuÏå©ëZ†aÖXA­e\÷¬~™žê`T¯Ìò­þ¨þ ýUXz¢AÅõ í¶ƒ¡ÏVŸû¾«kýL%NAuÊ¡ºuI²ß|öثݧ®Á-ïTcÒ.¼6ì½Y“hºöC:õiþìë K?ÕÑ·³ªDÕ˜-Џkz©b õ:‹ë\eÕ/šþÈ|Ý xæéc§\²ÞD,±W oQ‡mNn–¡‚ë•CtæÀ±Ï]‚·[-ä@õ·zó¿F"uÊügè``%Š+¨ž¡²Î½2s¾NRëa5%ÒÙSß©ºòýTs•_«¬Wm§R Jžªe´|íTUë`‚¿ÆG:׉ŸulŽNëpJ«Õ§½Sª™#_SVLî£C;´n—ìëJ˜ÖRÿL\µâ?Kcõ:ãvæNª½y¤§GÕ–G©N-%Ï:ëJëõNÌë¶Î‡Õ²9;«©qw]ªu«Y¯ÜÓÐMëŠÊÖ¼Lû¬¥þŸZTÃþ» _\ÝWë­5â d".ª}Fætú§â¿ssÌ»©R€-´õyºN9Ö/¶ß›že ¶\H¨ç|»`-Ñ"¼zç}Öu¼ò ëoÌ d".¡¼ÐÀ·¦¬ç;÷S¤¯Þ²–à±{Žç­¼+öö ôÕ€]PÇFºÅðê‚Ѻ_³©=(0¿9#uÎìgÒ`¸%‹=Æþ `ÁÝ1ÉÇÐCºÛíNô¸ïTƒän¼•Gœé˜aëz¿Ô’”«ªyë¿]J¹î¶ò8<îeÀëc¹ÕÇ;“­Ç«§V»ûn©æ’K5$z´Ú‚ÅÎD^·°=m4‘úÊ/Àõ§ÛÿëÃV•ÓQöŸú¥žÜõk°ê°hÔy’Ø.r"ñ†ƒÞºÒ¨œè¥NëwèÍÕËy0\õÝßTH¹N!­Ö ®zîï‹>Áõ*šêUh±ÕWë©%Mà-€ÏOºª§4õÕWêãÉÕÏyC®¥9UƒÖà[^5Çs¢•;iÖ ¶XB½ëw5ÕX¯åÏ]W¨¼Â³ ¶XB½ê }Ô(›ªC«ŸYE~iéÿõ=bê–}> y<ÀÞv¶õ»ð¿D$uǃh _€%‰!>Þdq\n¿²nehúÖðÜñ‡?޶këjÊúzõeØñãã® ãMQž—z©#ñyŽ©–U9øŠh¯QrP·óZ.³Õ÷_¯³S1ºå·çT Üî²£êÕ*âêâÅ•×=,ÜãuµRÃê•i-Ôë®v¦§;‹x:Ù©èõpnOºå·ç[¦Yn­‹þývVœúÅ0Rõ0ñê‹LwÔšæðÌzº|F×;ªZãÈ-œ]èzêku[>ñë  ÁÕÖ½o«‹r—\ôn€¶qw¡ëe‡«Í¢¾¥fº=l³×º£;#uÚ\ê–©³Ô©j ª*YQîg‘Éõ­8æŽÑ-€YÇù±3ïÕH¼Ô]oÛ·K­u"у÷8ÜÒ¿B%u¼£1ç‚aø%‰&~2²ûÔßs¯M?Zô¿¦Ä±dLº”ZòuElêéxþmò¦õî5㥮}q¹ºÉxæõªž§ë^—ã׋¦Ÿ¨Ž×ÏÖêrW=Õ´xϪ«ŠÏYióþla¿óoõ2ÏÆuâæzç•¡Ï\žknª¢ ¶ju˜ê²=—Å@Únÿ/ÅÖñ—#«b€çTVGž²>9}Mý:ø¯K˜-Ÿz°´õʺë¨Ì-άÒΗêTö‰Ô®˜K©ªÊ¿T:f¥7€¶¸+繫o[¹]^ªÃ—ÝQßu½à:s#ª'ª°Š·Wû~¹Ð£ýZ_ó:ÕI u’ý4â½.`ºü³y¹%9ÖîfS˜µz¶jiiê²?Öâl«¯s(°-Ñ# yì è hÛ‚¾¯öà¿F&u¸Dg8c %Œýü^tIŸó"í¨ëË÷]¹Ž—§ë7“×X˜ã«Jïÿ\Zg~©{™œà#óë/$ÖŽ¸s­¡á^)˜~£¯/Üßä êÐûûÕq‡“ª^žÿQ×g[9ÚÔõ^O2âQÙ`²;{3«V÷]bž¾·ä¾ýqž‡:êSudÿÂêÌ­Ô»ÑÛ{~ BÞ¹À–à 3î5z´©RõŪçDZ_9 ºÞšõzí¿ê¬WY—õ]nPÝFâã¹ûà ¯‚麘åÜsœ’‹ª Ïï3nÏúÑqbër€æn§UÒ>º•: ºú¥ùþwÕÙ“¨ÛÛÿS™™p[Eå;oŸÐ9ÀI sž´9ú½Z©9õÛÖôíS«Óÿo\†Kþ¬Óöýhè°bSËO=Ò„@ÿ '' †@…@… @… @… @… @… @…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@…@… @…!@…"@…#@…$@…%@…&@ÿ DŠ‚ð¸ÀŽÍ Ì!¹‚ ­Ž'¾yó #‘ LŽ'¾yôóã–±|@Š"obj2@swftools_0.9.2+git20130725.orig/swfs/PreLoaderTemplate.sc0000644000175000017500000000057412216332640022213 0ustar gawaingawain.flash name=PreLoaderTemplate.swf background=white version=6 .sprite loader # to be replaced by swfcombiner .end .put loader .frame 1 .action: if(this.framesloaded < 2) { GotoFrame(0); Play(); } .end .frame 2 .sprite movie # to be replaced by swfcombine .end .put movie .frame 3 .end swftools_0.9.2+git20130725.orig/swfs/rfxview.sc0000644000175000017500000004503312216332640020333 0ustar gawaingawain# rfxview.sc - a document viewer for pdf2swf converted files # # Copyright (c) 2008 Matthias Kramm # # 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 condition: # # 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. .flash filename=rfxview.swf fps=30 bbox=600x800 version=8 compress background=#CCCCCC export=0 .define width 600 .define height 800 #======================================== buttons =========================================================== .gradient grad1 radial x=4 y=4 r=28: 0% white 50% #666666 100% #202020 .end .gradient grad2 linear width=8 height=6 rotate=120: 0% white 70% #666666 100% #202020 .end .gradient grad4 linear width=8 height=6 rotate=120: 0% white 70% #999999 100% #404040 .end .gradient grad2l linear width=8 height=6 rotate=120: 0% #e0e0e0 100% #000000 .end .gradient grad4l linear width=8 height=6 rotate=120: 0% #ffffff 100% #404040 .end .gradient grad3 radial x=4 y=4 r=28: 0% white 70% #999999 100% #404040 .end .gradient grad7 linear rotate=180: 0% #777777 100% #666666 .end .gradient grad72 linear rotate=45: 0% #999999 100% #666666 .end .outline arrowoutline: moveTo -8,-8 lineTo -8, 8 lineTo 8, 0 lineTo -8,-8 .end .outline larrowoutline: moveTo 8,-8 lineTo 8, 8 lineTo -8, 0 lineTo 8,-8 .end .font arialbold filename="../wx/ArialBold.ttf" glyphs="1:" .font arial filename="../wx/Arial.ttf" glyphs="0123456789 /:" .textshape oneoneoutline text="1:1" font=arialbold size=14pt .outline plusoutline: moveTo 2,-8 lineTo -2,-8 lineTo -2,-2 lineTo -8,-2 lineTo -8,2 lineTo -2,2 lineTo -2,8 lineTo 2,8 lineTo 2,2 lineTo 8,2 lineTo 8,-2 lineTo 2,-2 lineTo 2,-8 .end .outline zoomoutline: moveTo 8,0 lineTo 4,3 lineTo 4,-3 lineTo 8,0 moveTo -8,0 lineTo -4,3 lineTo -4,-3 lineTo -8,0 moveTo 0,8 lineTo 3,4 lineTo -3,4 lineTo 0,8 moveTo 0,-8 lineTo 3,-4 lineTo -3,-4 lineTo 0,-8 .end .outline minusoutline: moveTo -7,2 lineTo -7,-2 lineTo 7,-2 lineTo 7,2 lineTo -7,2 .end .circle shadcircle line=0 fill=#00000033 r=11.5 .circle outcircle line=2 color=#00000060 fill=grad1 r=11 .circle outcircle_over line=2 color=#00000060 fill=grad3 r=11 .filled incircle outline=arrowoutline fill=grad2 line=1 color=#00000060 .filled incircle_over outline=arrowoutline fill=grad4 line=1 color=#00000060 .filled lincircle outline=larrowoutline fill=grad2l line=1 color=#00000060 .filled lincircle_over outline=larrowoutline fill=grad4l line=1 color=#00000060 .filled pincircle outline=plusoutline fill=grad2l line=1 color=#00000060 .filled pincircle_over outline=plusoutline fill=grad4l line=1 color=#00000060 .filled mincircle outline=minusoutline fill=grad2l line=1 color=#00000060 .filled mincircle_over outline=minusoutline fill=grad4l line=1 color=#00000060 .filled oincircle outline=oneoneoutline fill=grad2l line=1.2 color=#00000060 .filled oincircle_over outline=oneoneoutline fill=grad4l line=1.2 color=#00000060 .filled zincircle outline=zoomoutline fill=grad2l line=1 color=#00000060 .filled zincircle_over outline=zoomoutline fill=grad4l line=1 color=#00000060 .sprite plusface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put pincircle 11 11 pin=center scale=90% .end .sprite plusfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put pincircle_over 11 11 pin=center scale=90% .end .sprite plusfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put pincircle_over 11 11 pin=center scale=79% .end .sprite minusface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put mincircle 11 11 pin=center scale=90% luminance=60% .end .sprite minusfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put mincircle_over 11 11 pin=center scale=90% .end .sprite minusfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put mincircle_over 11 11 pin=center scale=79% .end .sprite rbface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put incircle 13 11 pin=center scale=90% .end .sprite rbfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put incircle_over 13 11 pin=center scale=90% .end .sprite rbfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put incircle_over 13 11 pin=center scale=79% .end .sprite lbface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put lincircle 9 11 pin=center scale=90% .end .sprite lbfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put lincircle_over 9 11 pin=center scale=90% .end .sprite lbfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put lincircle_over 9 11 pin=center scale=79% .end .sprite obface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put oincircle 9 11 pin=center scale=90% luminance=50% .end .sprite obfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put oincircle_over 9 11 pin=center scale=90% .end .sprite obfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put oincircle_over 9 11 pin=center scale=79% .end .sprite zbface .put shadcircle 11 13 pin=center .put outcircle 11 11 pin=center .put zincircle 10 11 pin=center scale=90% luminance=50% .end .sprite zbfaceover .put shadcircle 11 13 pin=center .put outcircle_over 11 11 pin=center .put zincircle_over 10 11 pin=center scale=90% .end .sprite zbfacedown .put shadcircle 11 13 pin=center scale=90% .put outcircle_over 11 11 pin=center scale=90% .put zincircle_over 10 11 pin=center scale=79% .end .button rightbutton .show rbface as=idle .show outcircle as=area .show rbfacedown as=pressed .show rbfaceover as=hover .end .button leftbutton .show lbface as=idle .show outcircle as=area .show lbfacedown as=pressed .show lbfaceover as=hover .end .button plusbutton .show plusface as=idle .show outcircle as=area .show plusfacedown as=pressed .show plusfaceover as=hover .end .button minusbutton .show minusface as=idle .show outcircle as=area .show minusfacedown as=pressed .show minusfaceover as=hover .end .button oneonebutton .show obface as=idle .show outcircle as=area .show obfacedown as=pressed .show obfaceover as=hover .end .button fullsizebutton .show zbface as=idle .show outcircle as=area .show zbfacedown as=pressed .show zbfaceover as=hover .end #======================================== frame =========================================================== .frame 1 .box background_box line=1 color=#00000030 fill=#00000030 width=800 height=600 .sprite background .put background_box x=0 y=0 .end .put background # horizontal scroll outline .box hscroll_box line=1 color=#000000 width=800-20 height=10 .sprite hscroll_outline .put hscroll_box x=0 y=0 .end .put hscroll_outline # vertical scroll outline .box vscroll_box line=1 color=#000000 width=10 height=600-20 .sprite vscroll_outline .put vscroll_box x=0 y=0 .end .put vscroll_outline # content outline .box content_box width=100 height=100 line=1 color=#000000 .sprite content_outline .put content_box x=0 y=0 .end .put content_outline .put p1=plusbutton x=width-25-20 y=20 pin=center .put m1=minusbutton x=width-50-20 y=20 pin=center .put o1=oneonebutton x=width-75-20 y=20 pin=center .put z1=fullsizebutton x=width-100-20 y=20 pin=center .put l1=leftbutton x=width/2-100 y=20 pin=center .put r1=rightbutton x=width/2+100 y=20 pin=center .sprite vscrollbar .box vscroll2_shadow line=0 fill=#00000033 width=14 height=100 .sprite vshadow .put vscroll2_shadow x=0 y=0 luminance=1.8 .end .put vshadow .box vscroll2 width=14 height=100 line=1 color=#00000060 fill=grad7 .sprite vbox .put vscroll2 x=0 y=0 luminance=1.5 .end .put vbox .box tick line=1 color=black width=8 height=0 .sprite t1 .put tt1=tick y=0 x=3 .end .put t1 .sprite t2 .put tt2=tick y=0 x=3 .end .put t2 y=50 .sprite t3 .put tt3=tick y=0 x=3 .end .put t3 .button vscrollbutton .show vscroll2 as=area .on_press inside: startDrag(false, _parent.fullwidth-22, 40, _parent.fullwidth-22, 40+_parent.scrollbaryrange); _parent.Dragging = "v"; .end .on_release: stopDrag(); _parent.refreshDrag(); _parent.Dragging = ""; .end .end .put vscrollbutton .end .sprite hscrollbar .box hscroll2_shadow width=100 line=0 fill=#00000033 height=14 .sprite hshadow .put hscroll2_shadow x=0 y=0 luminance=1.5 .end .put hshadow .box hscroll2 width=100 height=14 line=1 color=#00000060 fill=grad72 .sprite hbox .put hscroll2 x=0 y=0 luminance=1.5 .end .put hbox .box htick line=1 color=black width=0 height=8 .sprite th1 .put tht1=htick x=0 y=3 .end .put th1 .sprite th2 .put tht2=htick x=0 y=3 .end .put th2 x=50 .sprite th3 .put tht3=htick x=0 y=3 .end .put th3 .button hscrollbutton .show hscroll2 as=area .on_press inside: startDrag(false, 10 , _parent.fullheight-22, 10+_parent.scrollbarxrange, _parent.fullheight-22); _parent.Dragging = "h"; .end .on_release: stopDrag(); _parent.refreshDrag(); _parent.Dragging = ""; .end .end .put hscrollbutton .end .put hscrollbar y=height-22 x=10 .put vscrollbar x=width-22 y=40 .edittext et width=50 height=20 font=arial size=18pt color=black variable=current_pagenumber maxlength=3 text="1" align=left .edittext etmiddle text="/" width=10 height=25 font=arial color=black noselect size=18pt align=center .edittext et_total_pages width=50 height=25 font=arial color=black noselect size=18pt align=right #.font dbgarial filename="Courier.ttf" #.edittext debugtxt width=width height=20 font=dbgarial size=18pt color=#004000 noselect #.put debugtxt y=20 .put et x=width/2-55 y=8 .put etmiddle x=width/2-5 y=8 .put et_total_pages x=width/2+5 y=8 #.swf viewport filename=paper5.viewport .sprite viewport .end .box f width=100 height=100 line=0 fill=black .button areabutton .show f as=area .on_press inside: viewport.startDrag(false, left-scrollxrange, top-scrollyrange, left,top); Dragging = "xy"; .end .on_release: viewport.stopDrag(); Dragging = ""; .end .end .put areabutton x=10 y=40 .sprite cf .put f .end .put cliparea=cf x=10 y=40 .put viewport x=10 y=40 .action: et_total_pages.text=viewport._totalframes; swfwidth = viewport._width; swfheight = viewport._height; Dragging = ""; Stage.scaleMode="noScale"; Stage.align ="LT"; //Stage.showMenu = false; fullwidth = Stage.width; fullheight = Stage.height; contentwidth = fullwidth - 40; contentheight = fullheight - 70; background._width = fullwidth-1; background._height = fullheight-1; // resize/position hscroll outline hscroll_outline._x = 10; hscroll_outline._y = fullheight-20; hscroll_outline._width = fullwidth-40; hscroll_outline._height = 10; // resize/position vscroll outline vscroll_outline._x = fullwidth-20; vscroll_outline._y = 40; vscroll_outline._width = 10; vscroll_outline._height = fullheight-70; // resize/position content outline content_outline._x = 9; content_outline._y = 39; content_outline._width = contentwidth+1; content_outline._height = contentheight+1; // move all objects to their proper positions vscrollbar._x = fullwidth-22; hscrollbar._y = fullheight-22; p1._x = fullwidth-25-20 - p1._width/2; o1._x = fullwidth-50-20 - o1._width/2; z1._x = fullwidth-75-20 - z1._width/2; m1._x = fullwidth-100-20 - m1._width/2; l1._x = fullwidth/2-100 - l1._width/2; r1._x = fullwidth/2+100 - r1._width/2; et._x = fullwidth/2 - (et._width+etmiddle._width+et_total_pages._width)/2; etmiddle._x = fullwidth/2 - (et._width+etmiddle._width+et_total_pages._width)/2 + et._width; et_total_pages._x = fullwidth/2 - (et._width+etmiddle._width+et_total_pages._width)/2 + et._width+etmiddle._width; areabutton._xscale = contentwidth; areabutton._yscale = contentheight; cliparea._xscale = contentwidth; cliparea._yscale = contentheight; viewport.setMask(cliparea); lastzoom = 1; zoom = 1; //debugtxt.text = Stage.width+ " x " + Stage.height; //debugtxt.text = zoomtype; setPageNr = function(setscroll) { current_pagenumber = pagenr; viewport.gotoAndStop(pagenr); if(!setscroll) { viewport._y = top; swfpos2scrollbars(); } else { viewport._y = setscroll; swfpos2scrollbars(); } }; setNoScrollZoomLevel = function() { // determine initial zoom level xscale = contentwidth / swfwidth; yscale = contentheight / swfheight; if(xscale < yscale) { zoom = xscale; setZoomLevel(); } else { zoom = yscale; setZoomLevel(); } }; setOneDirScrollZoomLevel = function() { xscale = contentwidth / swfwidth; yscale = contentheight / swfheight; if(xscale > yscale) { zoom = xscale; setZoomLevel(); } else { zoom = yscale; setZoomLevel(); } }; set11ZoomLevel = function() { zoom = 1.0; setZoomLevel(); }; swfpos2scrollbars = function() { if(scrollxrange) { hscrollbar._x = 10 + (left-viewport._x)*scrollbarxrange/scrollxrange; } else { hscrollbar._x = 10; } if(scrollyrange) { vscrollbar._y = 40 + (top-viewport._y)*scrollbaryrange/scrollyrange; } else { vscrollbar._y = 40; } }; setZoomLevel = function() { width = contentwidth; height = contentheight; left = 10; top = 40; if(swfwidth * zoom < contentwidth) { width = swfwidth*zoom; left = 10+(contentwidth-width)/2; } if(swfheight * zoom < contentheight) { height = swfheight*zoom; top = 40+(contentheight-height)/2; } scrollxrange = swfwidth*zoom-width; scrollyrange = swfheight*zoom-height; hscrollbar._xscale = (contentwidth*width) / (swfwidth*zoom); vscrollbar._yscale = (contentheight*height) / (swfheight*zoom); scrollbarxrange = contentwidth - hscrollbar._xscale; scrollbaryrange = contentheight - vscrollbar._yscale; if(scrollbarxrange<0) { scrollbarxrange = 0; } if(scrollbaryrange<0) { scrollbaryrange = 0; } viewport._xscale = zoom*100; viewport._yscale = zoom*100; focusx = contentwidth/2 - (viewport._x-10); focusy = contentheight/2 - (viewport._y-40); viewport._x = left - focusx * zoom / lastzoom + width/2; viewport._y = top - focusy * zoom / lastzoom + height/2; if(viewport._x > left) { viewport._x = left; } else if(viewport._x < left-scrollxrange) { viewport._x = left-scrollxrange; } if(viewport._y > top) { viewport._y = top; } else if(viewport._y < top-scrollyrange) { viewport._y = top-scrollyrange; } swfpos2scrollbars(); if(scrollxrange) { hscrollbar._visible = 1; } else { //hscrollbar._visible = 0; } if(scrollyrange) { vscrollbar._visible = 1; } else { //vscrollbar._visible = 0; } lastzoom = zoom; // update the ruler decorations vscrollbar.t1._y = vscrollbar.t2._y - 600.0/vscrollbar._yscale; vscrollbar.t3._y = vscrollbar.t2._y + 600.0/vscrollbar._yscale; hscrollbar.th1._x = hscrollbar.th2._x - 600.0/hscrollbar._xscale; hscrollbar.th3._x = hscrollbar.th2._x + 700.0/hscrollbar._xscale; vscrollbar.vshadow._x = vscrollbar.vbox._x + 500/vscrollbar._xscale; vscrollbar.vshadow._y = vscrollbar.vbox._y + 500/vscrollbar._yscale; hscrollbar.hshadow._x = hscrollbar.hbox._x + 500/hscrollbar._xscale; hscrollbar.hshadow._y = hscrollbar.hbox._y + 500/hscrollbar._yscale; }; pagenr = 1; setPageNr(); if(zoomtype=="1") { set11ZoomLevel(); } else if(zoomtype=="2") { setNoScrollZoomLevel(); } else { setOneDirScrollZoomLevel(); } et.onChanged = function(){ if(current_pagenumber <= viewport._totalframes) { if (current_pagenumber > 0) { pagenr = int(current_pagenumber); setPageNr(); } } }; l1.onRelease = function(){ if(pagenr > 1) { pagenr = pagenr - 1; setPageNr(); } }; r1.onRelease = function(){ if(pagenr < viewport._totalframes) { pagenr = pagenr + 1; setPageNr(); } }; p1.onRelease = function(){ if(zoom < 4) { zoom = zoom + 1; setZoomLevel(); } }; m1.onRelease = function(){ if(zoom > 1) { zoom = zoom - 1; if(zoom < 1) zoom = 1; setZoomLevel(); } }; o1.onRelease = function(){ setNoScrollZoomLevel(); }; z1.onRelease = function(){ setOneDirScrollZoomLevel(); }; refreshDrag = function(){ if(Dragging == "h") { viewport._x = left + (10-hscrollbar._x)*scrollxrange/scrollbarxrange; } else if(Dragging == "v") { viewport._y = top + (40-vscrollbar._y)*scrollyrange/scrollbaryrange; } else if(Dragging == "xy") { swfpos2scrollbars(); } }; dragrefresh = setInterval(refreshDrag, 20); var mouseListener = new Object(); mouseListener.onMouseWheel = function(delta) { divideDelta = delta/Math.abs(delta); viewport._y = viewport._y + 30*zoom*divideDelta; swfpos2scrollbars(); if(viewport._y < top-scrollyrange) { if(pagenr < viewport._totalframes) { pageNr = pageNr + 1; setPageNr(); } else { viewport._y = top-scrollyrange; swfpos2scrollbars(); } } else if(viewport._y > top) { if(pagenr > 1) { pageNr = pageNr - 1; setPageNr(top-scrollyrange); } else { viewport._y = top; swfpos2scrollbars(); } } }; Mouse.addListener(mouseListener); .end .end swftools_0.9.2+git20130725.orig/swfs/keyboard_viewer.c0000644000175000017500000001457412216332640021645 0ustar gawaingawain/* keyboard_viewer.c Creates the swf file keyboard_viewer.swf. This can be used to navigate through frames using the keyboard (space, cursor left, cursor right) Notice that the movie has to clicked with the mouse once to get navigation activated in most browsers. Part of the swftools package. Copyright (c) 2000, 2001 Matthias Kramm 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 */ #include #include #include #include "rfxswf.h" TAG* tag; #define SUBTITLES 1 int main (int argc,char ** argv) { SWF swf; RGBA rgb; SRECT r; SHAPE* s; MATRIX m; ActionTAG*a1,*a2,*a3,*a4,*a5; S32 width=1024,height = 768; int f,i,ls1,fs1; memset(&swf,0x00,sizeof(SWF)); // set global movie parameters swf.fileVersion = 4; // make flash 4 compatible swf swf.frameRate = 0x1900; // about 0x19 frames per second swf.movieSize.xmax = 20*width; // flash units: 1 pixel = 20 units swf.movieSize.ymax = 20*height; swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); tag = swf.firstTag; rgb.r = 0xff; rgb.g = 0xff; rgb.b = 0xff; swf_SetRGB(tag,&rgb); // initialize matrix m.sx = 65536; //scale m.sy = 65536; m.r0 = 0; //rotate m.r1 = 0; m.tx = 0; //move m.ty = 0; /* the "viewport" object will be replaced by swfcombine with the object to browse. It is placed at the upper left corner (0,0), by setting m.tx and m.ty to 0. Therefore, the buttons are "in" the viewport, not above it*/ tag = swf_InsertTag(tag,ST_DEFINESPRITE); swf_SetU16(tag, 23); //id swf_SetU16(tag, 0); //frames tag = swf_InsertTag(tag,ST_END); tag = swf_InsertTag(tag,ST_PLACEOBJECT2); m.tx = 0; //move m.ty = 0; swf_ObjectPlace(tag, 23, 1,&m,0,"viewport"); a1 = action_SetTarget(0, "viewport"); a1 = action_PreviousFrame(a1); a1 = action_SetTarget(a1, ""); a1 = action_End(a1); a2 = action_SetTarget(0, "viewport"); a2 = action_NextFrame(a2); a2 = action_SetTarget(a2,""); a2 = action_End(a2); a3 = action_Stop(0); a3 = action_SetTarget(a3,"viewport"); a3 = action_Stop(a3); a3 = action_SetTarget(a3,""); #ifdef SUBTITLES a3 = action_PushString(a3,"/:subtitle"); a3 = action_PushString(a3,""); //reset variable a3 = action_SetVariable(a3); #endif a3 = action_End(a3); a4 = action_GetUrl(0, "lichtfarbe.html", "_this"); a4 = action_End(a4); a5 = action_GetUrl(0, "phybas.html","_this"); // load html in this window a5 = action_End(a5); tag = swf_InsertTag(tag,ST_DEFINESHAPE); swf_ShapeNew(&s); // create new shape instance rgb.r = rgb.b = rgb.g = 0x00; ls1 = swf_ShapeAddLineStyle(s,40,&rgb); fs1 = swf_ShapeAddSolidFillStyle(s,&rgb); swf_SetU16(tag,77); r.xmin = 0; r.ymin = 0; r.xmax = 20*width; r.ymax = 20*height; swf_SetRect(tag,&r); // set shape bounds swf_SetShapeHeader(tag,s); // write all styles to tag swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); // move to (0,0), select linestyle ls1 and no fillstyle /* SetLine coordinates are relative. It's important that the start and end points match, otherwise the Macromedia Flash player will crash. */ swf_ShapeSetLine(tag,s,20*width,0*height); swf_ShapeSetLine(tag,s,0*width,20*height); swf_ShapeSetLine(tag,s,-20*width,0*height); swf_ShapeSetLine(tag,s,0*width,-20*height); swf_ShapeSetEnd(tag); // finish drawing swf_ShapeFree(s); // clean shape structure (which isn't needed anymore after writing the tag) tag = swf_InsertTag(tag,ST_DEFINEBUTTON2); swf_SetU16(tag,30); //id swf_ButtonSetFlags(tag, 0); //menu=no swf_ButtonSetRecord(tag,BS_HIT,77,1,NULL,NULL); swf_SetU8(tag,0); // end of button records swf_ButtonSetCondition(tag, BC_CURSORLEFT); swf_ActionSet(tag,a1); swf_ButtonSetCondition(tag, BC_CURSORRIGHT); swf_ActionSet(tag,a2); swf_ButtonSetCondition(tag, BC_SPACE); swf_ActionSet(tag,a2); swf_ButtonSetCondition(tag, BC_ESCAPE); swf_ActionSet(tag,a4); swf_ButtonSetCondition(tag, BC_ENTER); swf_ActionSet(tag,a5); swf_ButtonPostProcess(tag, 5); // don't forget! tag = swf_InsertTag(tag,ST_DOACTION); swf_ActionSet(tag,a3); m.tx = 0; //move m.ty = 0; tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 30, 2,&m,0,0); swf_ActionFree(a1); swf_ActionFree(a2); swf_ActionFree(a3); swf_ActionFree(a4); swf_ActionFree(a5); #ifdef SUBTITLES tag = swf_InsertTag(tag,ST_DEFINEFONT2); { U8 data[] = {0x90, 0x00, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; swf_SetU16(tag, 0x76); //id swf_SetBlock(tag, data, sizeof(data)); } tag = swf_InsertTag(tag,ST_DEFINEEDITTEXT); { EditTextLayout layout; layout.align = 0; layout.leftmargin = 0; layout.rightmargin = 0; layout.indent = 0; layout.leading = 0; swf_SetU16(tag, 0x77);//id r.xmin = 20*60; r.xmax = r.xmin+ 826*20; r.ymin = 0; r.ymax = 20*80; rgb.r = rgb.g = rgb.b = 0; rgb.a = 255; swf_SetEditText(tag, ET_MULTILINE|ET_READONLY, r, 0, &rgb, 0, 0x76, 20*40, &layout, "/:subtitle"); m.tx = m.ty = 0; } tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 0x77, 4,&m,0,0); #endif tag = swf_InsertTag(tag,ST_SHOWFRAME); tag = swf_InsertTag(tag,ST_END); f = open("keyboard_viewer.swf",O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n"); close(f); swf_FreeTags(&swf); // cleanup return 0; } swftools_0.9.2+git20130725.orig/swfs/simple_viewer.c0000644000175000017500000002040312216332640021322 0ustar gawaingawain/* simple_viewer.c Creates the swf file simple_viewer.swf. I'm not much of an designer. Suggestions and improvements concerning this file or simple_viewer.swf are highly welcome. -mk Part of the swftools package. Copyright (c) 2000, 2001 Matthias Kramm 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 */ #include #include #include #include "rfxswf.h" TAG* tag; int button_sizex = 20; //button size in pixels int button_sizey = 20; RGBA button_colors[6]= {{0,0x00,0x00,0x80}, //Idle left {0,0x00,0x00,0x80}, // " right {0,0x20,0x20,0xc0}, //MouseOver left {0,0x20,0x20,0xc0}, // " right {0,0x10,0x10,0xff}, //Down left {0,0x10,0x10,0xff}};// " right int useDefineButton2 = 0; // set this to 1 to use DefineButton2 Tags // instead of DefineButton1 #define SUBTITLES 1 //#define USE_WATERMARK 1 // set this flag to print-protect your swfs #define ID_WATERMARK 64 int main (int argc,char ** argv) { SWF swf; RGBA rgb; SRECT r; SHAPE* s; MATRIX m; ActionTAG*a1,*a2,*a3; S32 width=1024,height = 768; int f,i,ls1,fs1; int count; int t; memset(&swf,0x00,sizeof(SWF)); // set global movie parameters swf.fileVersion = 4; // make flash 4 compatible swf swf.frameRate = 0x1900; // about 0x19 frames per second swf.movieSize.xmax = 20*width; // flash units: 1 pixel = 20 units swf.movieSize.ymax = 20*height; swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); tag = swf.firstTag; rgb.r = 0xff; rgb.g = 0xff; rgb.b = 0xff; swf_SetRGB(tag,&rgb); // initialize matrix m.sx = 65536; //scale m.sy = 65536; m.r0 = 0; //rotate m.r1 = 0; m.tx = 0; //move m.ty = 0; /* the "viewport" object will be replaced by swfcombine with the object to browse. It is placed at the upper left corner (0,0), by setting m.tx and m.ty to 0. Therefore, the buttons are "in" the viewport, not above it*/ tag = swf_InsertTag(tag,ST_DEFINESPRITE); swf_SetU16(tag, 23); //id swf_SetU16(tag, 0); //frames tag = swf_InsertTag(tag,ST_END); tag = swf_InsertTag(tag,ST_PLACEOBJECT2); m.tx = 0; //move m.ty = 0; swf_ObjectPlace(tag, 23, 1,&m,0,"viewport"); #ifdef USE_WATERMARK // Insert Alpha watermark to avoid printing tag = swf_InsertTag(tag,ST_DEFINESHAPE3); swf_ShapeNew(&s); rgb.r = rgb.g = rgb.b = 0xff; rgb.a = 0x08; fs1 = swf_ShapeAddSolidFillStyle(s,&rgb); swf_SetU16(tag,ID_WATERMARK); r.xmin = r.ymin = 0; r.xmax = 20*width; r.ymax = 20*height; swf_SetRect(tag,&r); // cover whole viewport swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,0,fs1,0); swf_ShapeSetLine(tag,s,20*width,0); swf_ShapeSetLine(tag,s,0,20*height); swf_ShapeSetLine(tag,s,-20*width,0); swf_ShapeSetLine(tag,s,0,-20*height); swf_ShapeSetEnd(tag); swf_ShapeFree(s); #endif // USE_WATERMARK for(count=0;count<6;count++) { tag = swf_InsertTag(tag,ST_DEFINESHAPE); swf_ShapeNew(&s); // create new shape instance rgb.r = rgb.b = rgb.g = 0x00; ls1 = swf_ShapeAddLineStyle(s,40,&rgb); rgb = button_colors[count]; fs1 = swf_ShapeAddSolidFillStyle(s,&rgb); swf_SetU16(tag,32+count); // now set character ID r.xmin = 0; r.ymin = 0; r.xmax = 20*width; r.ymax = 20*height; swf_SetRect(tag,&r); // set shape bounds swf_SetShapeHeader(tag,s); // write all styles to tag if(count&1) { swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); // move to (0,0), select linestyle ls1 and no fillstyle /* SetLine coordinates are relative. It's important that the start and end points match, otherwise the Macromedia Flash player will crash. */ swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey); swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey); swf_ShapeSetLine(tag,s,0,-40*button_sizey); } else { swf_ShapeSetAll(tag,s,20*button_sizex,0,ls1,fs1,0); swf_ShapeSetLine(tag,s,-20*button_sizex,20*button_sizey); swf_ShapeSetLine(tag,s,20*button_sizex,20*button_sizey); swf_ShapeSetLine(tag,s,0,-40*button_sizey); } swf_ShapeSetEnd(tag); // finish drawing swf_ShapeFree(s); // clean shape structure (which isn't needed anymore after writing the tag) } a1 = action_SetTarget(0, "viewport"); a1 = action_PreviousFrame(a1); a1 = action_SetTarget(a1, ""); a1 = action_End(a1); a2 = action_SetTarget(0, "viewport"); a2 = action_NextFrame(a2); a2 = action_SetTarget(a2,""); a2 = action_End(a2); a3 = action_SetTarget(0,"viewport"); a3 = action_Stop(a3); a3 = action_SetTarget(a3,""); #ifdef SUBTITLES a3 = action_PushString(a3,"/:subtitle"); a3 = action_PushString(a3,""); //reset variable a3 = action_SetVariable(a3); #endif a3 = action_End(a3); for(t=0;t<2;t++) { if(!useDefineButton2) { tag = swf_InsertTag(tag,ST_DEFINEBUTTON); swf_SetU16(tag,30+t); //id swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL); swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL); swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL); swf_SetU8(tag,0); // end of button records if(t) swf_ActionSet(tag,a2); else swf_ActionSet(tag,a1); } else { tag = swf_InsertTag(tag,ST_DEFINEBUTTON2); swf_SetU16(tag,30+t); //id swf_ButtonSetFlags(tag, 0); //menu=no swf_ButtonSetRecord(tag,BS_UP|BS_HIT,32+t,1,NULL,NULL); swf_ButtonSetRecord(tag,BS_OVER,34+t,1,NULL,NULL); swf_ButtonSetRecord(tag,BS_DOWN,36+t,1,NULL,NULL); swf_SetU8(tag,0); // end of button records swf_ButtonSetCondition(tag, BC_OVERDOWN_OVERUP); if(t) swf_ActionSet(tag,a2); else swf_ActionSet(tag,a1); swf_ButtonPostProcess(tag, 1); // don't forget! } } tag = swf_InsertTag(tag,ST_DOACTION); swf_ActionSet(tag,a3); m.tx = 0; //move m.ty = 0; tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 30, 3,&m,0,0); m.tx = button_sizex*30; tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 31, 4,&m,0,0); #ifdef USE_WATERMARK // place watermark tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, ID_WATERMARK, 2, &m, 0,0); #endif // USE_WATERMARK swf_ActionFree(a1); swf_ActionFree(a2); swf_ActionFree(a3); #ifdef SUBTITLES tag = swf_InsertTag(tag,ST_DEFINEFONT2); { U8 data[] = {0x90, 0x00, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; swf_SetU16(tag, 0x76); //id swf_SetBlock(tag, data, sizeof(data)); } tag = swf_InsertTag(tag,ST_DEFINEEDITTEXT); { EditTextLayout layout; layout.align = 0; layout.leftmargin = 0; layout.rightmargin = 0; layout.indent = 0; layout.leading = 0; swf_SetU16(tag, 0x77);//id r.xmin = button_sizex*60; r.xmax = r.xmin+ 826*20; r.ymin = 0; r.ymax = button_sizey*80; rgb.r = rgb.g = rgb.b = 0; rgb.a = 255; swf_SetEditText(tag, ET_MULTILINE|ET_READONLY, r, 0, &rgb, 0, 0x76, button_sizey*40, &layout, "/:subtitle"); m.tx = m.ty = 0; } tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_ObjectPlace(tag, 0x77, 5,&m,0,0); #endif tag = swf_InsertTag(tag,ST_SHOWFRAME); tag = swf_InsertTag(tag,ST_END); f = open("simple_viewer.swf",O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n"); close(f); swf_FreeTags(&swf); // cleanup return 0; } swftools_0.9.2+git20130725.orig/src/0002755000175000017500000000000012216332657016124 5ustar gawaingawainswftools_0.9.2+git20130725.orig/src/wav2swf.c0000644000175000017500000002360112216332640017657 0ustar gawaingawain/* wav2swf.c Converts WAV/WAVE files to SWF. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include "../lib/rfxswf.h" #include "../lib/log.h" #include "../lib/args.h" #include "../lib/wav.h" char * filename = 0; char * outputname = "output.swf"; int verbose = 2; int stopframe0 = 0; int stopframe1 = 0; #define DEFINESOUND_MP3 1 //define sound uses mp3?- undefine for raw sound. static struct options_t options[] = { {"h", "help"}, {"V", "version"}, {"o", "output"}, {"r", "framerate"}, {"s", "samplerate"}, {"d", "definesound"}, {"l", "loop"}, {"C", "cgi"}, {"S", "stop"}, {"E", "end"}, {"b", "bitrate"}, {"v", "verbose"}, {0,0} }; static int loop = 0; static int definesound = 0; static int framerate = 0; static int samplerate = 11025; static int bitrate = 32; static int do_cgi = 0; static int mp3_bitrates[] = { 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0}; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("wav2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { outputname = val; return 1; } else if(!strcmp(name, "d")) { definesound = 1; return 0; } else if(!strcmp(name, "l")) { loop = atoi(val); definesound = 1; return 1; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else if(!strcmp(name, "S")) { stopframe0 = 1; return 0; } else if(!strcmp(name, "E")) { stopframe1 = 1; return 0; } else if(!strcmp(name, "C")) { do_cgi = 1; return 0; } else if(!strcmp(name, "r")) { float f; sscanf(val, "%f", &f); framerate = f*256; return 1; } else if(!strcmp(name, "s")) { samplerate = atoi(val); if(samplerate > 5000 && samplerate < 6000) samplerate = 5512; else if(samplerate > 11000 && samplerate < 12000) samplerate = 11025; else if(samplerate > 22000 && samplerate < 23000) samplerate = 22050; else if(samplerate > 44000 && samplerate < 45000) samplerate = 44100; else { fprintf(stderr, "Invalid samplerate: %d\n", samplerate); fprintf(stderr, "Allowed values: 11025, 22050, 44100\n"); exit(1); } return 1; } else if(!strcmp(name, "b")) { int t; int b = atoi(val); if(b<=0) { fprintf(stderr, "Not a valid bitrate: %s\n", val); exit(1); } if(b>160) { fprintf(stderr, "Bitrate must be <144. (%s)\n", val); exit(1); } for(t=0;mp3_bitrates[t];t++) { if(b== mp3_bitrates[t]) { bitrate = b; return 1; } } fprintf(stderr, "Invalid bitrate. Allowed bitrates are:\n"); for(t=0;mp3_bitrates[t];t++) { printf("%d ", mp3_bitrates[t]); } printf("\n"); exit(1); } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-o filename] file.wav\n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); printf("-o , --output Explicitly specify output file. (Otherwise, output will go to output.swf)\n"); printf("-r , --framerate Set file framerate to frames per second.\n"); printf("-s , --samplerate Set samplerate to frames per second (default: 11025).\n"); printf("-d , --definesound Generate a DefineSound tag instead of streaming sound.\n"); printf("-l , --loop n (Only used with -d)\n"); printf("-C , --cgi For use as CGI- prepend http header, write to stdout.\n"); printf("-S , --stop Stop the movie at frame 0\n"); printf("-E , --end Stop the movie at the end frame\n"); printf("-b , --bitrate Set mp3 bitrate to (default: 32)\n"); printf("-v , --verbose Be more verbose\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } extern int swf_mp3_bitrate; extern int swf_mp3_out_samplerate; extern int swf_mp3_in_samplerate; int main (int argc,char ** argv) { SWF swf; RGBA rgb; SRECT r; S32 width=300,height = 300; TAG * tag; int f,i,ls1,fs1; int count; int t; struct WAV wav,wav2; int blocksize; float blockspersecond; float framespersecond; float samplesperframe; float framesperblock; float samplesperblock; U16* samples; int numsamples; processargs(argc, argv); blocksize = (samplerate > 22050) ? 1152 : 576; blockspersecond = (float)samplerate/blocksize; framespersecond = blockspersecond; if(framerate) framespersecond = framerate/256.0; framesperblock = framespersecond / blockspersecond; samplesperframe = (blocksize * blockspersecond) / framespersecond; samplesperblock = samplesperframe * framesperblock; initLog(0,-1,0,0,-1,verbose); if(!filename) { msg(" You must supply a filename"); exit(1); } if(!wav_read(&wav, filename)) { msg(" Error reading %s", filename); exit(1); } wav_convert2mono(&wav,&wav2, samplerate); //wav_print(&wav); //wav_print(&wav2); samples = (U16*)wav2.data; numsamples = wav2.size/2; #ifdef WORDS_BIGENDIAN /* swap bytes */ for(t=0;t>8)&0xff | (samples[t]<<8)&0xff00; } #endif if(numsamples%blocksize != 0) { // apply padding, so that block is a multiple of blocksize int numblocks = (numsamples+blocksize-1)/blocksize; int numsamples2; U16* samples2; numsamples2 = numblocks * blocksize; samples2 = malloc(sizeof(U16)*numsamples2); memcpy(samples2, samples, numsamples*sizeof(U16)); memset(&samples2[numsamples], 0, sizeof(U16)*(numsamples2 - numsamples)); numsamples = numsamples2; samples = samples2; } memset(&swf,0x00,sizeof(SWF)); swf.fileVersion = 5; swf.frameRate = (int)(framespersecond*256); swf.movieSize.xmax = 20*width; swf.movieSize.ymax = 20*height; swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); tag = swf.firstTag; rgb.r = 0xff; rgb.g = 0xff; rgb.b = 0xff; swf_SetRGB(tag,&rgb); if(stopframe0) { ActionTAG*action = 0; tag = swf_InsertTag(tag, ST_DOACTION); action = action_Stop(action); action = action_End(action); swf_ActionSet(tag, action); swf_ActionFree(action); tag = swf_InsertTag(tag, ST_SHOWFRAME); } swf_mp3_bitrate = bitrate; swf_mp3_out_samplerate = samplerate; swf_mp3_in_samplerate = samplerate; if(!definesound) { int oldframepos=-1, newframepos=0; float framesamplepos = 0; float framepos = 0; float samplepos = 0; ActionTAG* a = 0; U16 v1=0,v2=0; tag = swf_InsertTag(tag, ST_SOUNDSTREAMHEAD); swf_SetSoundStreamHead(tag, samplesperframe); msg(" %d blocks", numsamples/blocksize); for(t=0;t Starting block %d %d+%d", t, (int)samplepos, (int)blocksize); block1 = &samples[t*blocksize]; swf_SetSoundStreamBlock(tag, block1, seek, 1); v1 = v2 = GET16(tag->data); } else { msg(" Adding data...", t); block1 = &samples[t*blocksize]; swf_SetSoundStreamBlock(tag, block1, seek, 0); v1+=v2; PUT16(tag->data, v1); } samplepos += blocksize; oldframepos = (int)framepos; framepos += framesperblock; newframepos = (int)framepos; for(s=oldframepos;s 11025 swf_SetBlock(tag, samples, numsamples*2); #endif tag = swf_InsertTag(tag, ST_STARTSOUND); swf_SetU16(tag, 24); //id memset(&info, 0, sizeof(info)); info.loops = loop; swf_SetSoundInfo(tag, &info); tag = swf_InsertTag(tag, ST_SHOWFRAME); if(stopframe1) { ActionTAG*action = 0; tag = swf_InsertTag(tag, ST_DOACTION); action = action_Stop(action); action = action_End(action); swf_ActionSet(tag, action); swf_ActionFree(action); tag = swf_InsertTag(tag, ST_SHOWFRAME); } tag = swf_InsertTag(tag, ST_END); } if(do_cgi) { if FAILED(swf_WriteCGI(&swf)) fprintf(stderr,"WriteCGI() failed.\n"); } else { f = open(outputname,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&swf)) fprintf(stderr,"WriteSWF() failed.\n"); close(f); } swf_FreeTags(&swf); return 0; } swftools_0.9.2+git20130725.orig/src/swfcombine.c0000644000175000017500000010777112216332640020427 0ustar gawaingawain/* swfcombine.c main routine for swfcombine(1), a tool for merging .swf-files. Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/log.h" #include "../config.h" struct config_t { char overlay; char alloctest; char clip; char stack; char stack1; char antistream; char dummy; char zlib; char cat; char merge; char isframe; char local_with_networking; char local_with_filesystem; char accelerated_blit; char hardware_gpu; int loglevel; int sizex; char hassizex; int sizey; char hassizey; int flashversion; int framerate; int movex; int movey; float scalex; float scaley; int mastermovex; int mastermovey; float masterscalex; float masterscaley; }; struct config_t config; char * master_filename = 0; char * master_name = 0; char * slave_filename[128]; char * slave_name[128]; int slave_movex[128]; int slave_movey[128]; float slave_scalex[128]; float slave_scaley[128]; char slave_isframe[128]; int numslaves = 0; char * outputname = "output.swf"; int args_callback_option(char*name,char*val) { if(!strcmp(name,"c")) { config.clip = 1; return 0; } else if(!strcmp(name,"l")) { config.overlay = 1; return 0; } else if (!strcmp(name, "o")) { outputname = val; return 1; } else if (!strcmp(name, "v")) { config.loglevel ++; return 0; } else if (!strcmp(name, "a")) { config.cat = 1; return 0; } else if (!strcmp(name, "A")) { config.alloctest = 1; return 0; } else if (!strcmp(name, "x")) { float x = atof(val); config.movex = (int)(x*20+0.5); return 1; } else if (!strcmp(name, "y")) { float y = atof(val); config.movey = (int)(y*20+0.5); return 1; } else if (!strcmp(name, "m")) { config.merge = 1; return 0; } else if (!strcmp(name, "f")) { config.isframe = 1; return 0; } else if (!strcmp(name, "F")) { config.flashversion = atoi(val); return 1; } else if (!strcmp(name, "d")) { config.dummy = 1; return 0; } else if (!strcmp(name, "z")) { config.zlib = 1; return 0; } else if (!strcmp(name, "r")) { float rate = atof(val); if ((rate < 0) ||(rate >= 256.0)) { fprintf(stderr, "Error: You must specify a valid framerate between 1/256 and 255.\n"); exit(1); } config.framerate = (int)(rate*256); return 1; } else if (!strcmp(name, "X")) { config.sizex = atoi(val)*20; config.hassizex = 1; return 1; } else if (!strcmp(name, "Y")) { config.sizey = atoi(val)*20; config.hassizey = 1; return 1; } else if (!strcmp(name, "s")) { config.scalex = config.scaley = atoi(val)/100.0; return 1; } else if (!strcmp(name, "w")) { config.scalex = atoi(val)/100.0; return 1; } else if (!strcmp(name, "h")) { config.scaley = atoi(val)/100.0; return 1; } else if (!strcmp(name, "N")) { config.local_with_networking = 1; return 0; } else if (!strcmp(name, "L")) { config.local_with_filesystem = 1; return 0; } else if (!strcmp(name, "B")) { config.accelerated_blit = 1; return 0; } else if (!strcmp(name, "G")) { config.hardware_gpu = 1; return 0; } else if (!strcmp(name, "t") || !strcmp(name, "T")) { if(master_filename) { fprintf(stderr, "error with arguments. Try --help.\n"); exit(1); } config.stack = 1; if(!strcmp(name,"T")) config.stack1 = 1; master_filename = "__none__"; return 0; } else if (!strcmp(name, "V")) { printf("swfcombine - part of %s %s\n", PACKAGE, VERSION); exit(0); } else { fprintf(stderr, "Unknown option: -%s\n", name); exit(1); } } static struct options_t options[] = { {"o", "output"}, {"t", "stack"}, {"T", "stack1"}, {"m", "merge"}, {"a", "cat"}, {"l", "overlay"}, {"c", "clip"}, {"v", "verbose"}, {"F", "flashversion"}, {"d", "dummy"}, {"f", "frame"}, {"x", "movex"}, {"y", "movey"}, {"s", "scale"}, {"r", "rate"}, {"X", "width"}, {"Y", "height"}, {"N", "local-with-networking"}, {"G", "hardware-gpu"}, {"B", "accelerated-blit"}, {"L", "local-with-filesystem"}, {"z", "zlib"}, {0,0} }; int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } int args_callback_command(char*name, char*val) { char*myname = strdup(name); char*filename; filename = strchr(myname, '='); if(filename) { *filename = 0; filename++; } else { // argument has no explicit name field. guess one from the file name char*path = strrchr(myname, '/'); char*ext = strrchr(myname, '.'); if(!path) path = myname; else path ++; if(ext) *ext = 0; myname = path; filename = name; } if(!master_filename) { master_filename = filename; master_name = myname; config.mastermovex = config.movex; config.mastermovey = config.movey; config.masterscalex = config.scalex; config.masterscaley = config.scaley; config.movex = config.movey = 0; config.scalex = config.scaley = 1.0; } else { msg(" slave entity %s (named \"%s\")\n", filename, myname); slave_filename[numslaves] = filename; slave_name[numslaves] = myname; slave_movex[numslaves] = config.movex; slave_movey[numslaves] = config.movey; slave_scalex[numslaves] = config.scalex; slave_scaley[numslaves] = config.scaley; slave_isframe[numslaves] = config.isframe; config.isframe = 0; config.movex = config.movey = 0; config.scalex = config.scaley = 1.0; numslaves ++; } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-rXYomlcv] [-f] masterfile [-xysf] [(name1|#id1)=]slavefile1 .. [-xysf] [(nameN|#idN)=]slavefileN\n", name); printf("OR: %s [-rXYomv] --stack[1] [-xysf] [(name1|#id1)=]slavefile1 .. [-xysf] [(nameN|#idN)=]slavefileN\n", name); printf("OR: %s [-rXYov] --cat [-xysf] [(name1|#id1)=]slavefile1 .. [-xysf] [(nameN|#idN)=]slavefileN\n", name); printf("OR: %s [-rXYomlcv] --dummy [-xys] [file]\n", name); printf("\n"); printf("-o , --output explicitly specify output file. (otherwise, output.swf will be used)\n"); printf("-t , --stack place each slave in a seperate frame (no master movie)\n"); printf("-T , --stack1 place each slave in the first frame (no master movie)\n"); printf("-m , --merge Don't store the slaves in Sprites/MovieClips\n"); printf("-a , --cat concatenate all slave files (no master movie)\n"); printf("-l , --overlay Don't remove any master objects, only overlay new objects\n"); printf("-c , --clip Clip the slave objects by the corresponding master objects\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect \n"); printf("-F , --flashversion Set the flash version of the output file.\n"); printf("-d , --dummy Don't require slave objects (for changing movie attributes)\n"); printf("-f , --frame The following identifier is a frame or framelabel, not an id or objectname\n"); printf("-x , --movex x Adjust position of slave by pixels\n"); printf("-y , --movey y Adjust position of slave by pixels\n"); printf("-s , --scale Adjust size of slave by percent (e.g. 100%% = original size)\n"); printf("-r , --rate Set movie framerate to (frames/sec)\n"); printf("-X , --width Force movie bbox width to (default: use master width (not with -t))\n"); printf("-Y , --height Force movie bbox height to (default: use master height (not with -t))\n"); printf("-N , --local-with-networking Make output file \"local-with-networking\"\n"); printf("-G , --hardware-gpu Set the \"use hardware gpu\" bit in the output file\n"); printf("-B , --accelerated-blit Set the \"use accelerated blit\" bit in the output file\n"); printf("-L , --local-with-filesystem Make output file \"local-with-filesystem\"\n"); printf("-z , --zlib Enable Flash 6 (MX) Zlib Compression\n"); printf("\n"); } void removeCommonTags(SWF * swf) { TAG*tag = swf->firstTag; while(tag) { if(tag->id == ST_SCENEDESCRIPTION || tag->id == ST_FILEATTRIBUTES || tag->id == ST_REFLEX) { tag = swf_DeleteTag(swf, tag); } else { tag = tag->next; } } } static void makestackmaster(SWF*swf) { TAG*tag; int t; SRECT box; int fileversion = config.zlib?6:3; int frameRate = 256; U32 fileAttributes = 0; RGBA rgb; rgb.r=rgb.b=rgb.g=0; memset(&box, 0, sizeof(box)); /* scan all slaves for bounding box */ for(t=numslaves-1;t>=0;t--) { SWF head; int ret; int fi=open(slave_filename[t],O_RDONLY|O_BINARY); TAG*tag; if(fi<0 || swf_ReadSWF(fi, &head)<0) { msg(" Couldn't open/read %s.", slave_filename[t]); exit(1); } close(fi); swf_RemoveJPEGTables(&head); fileAttributes |= head.fileAttributes; removeCommonTags(&head); msg(" File %s has bounding box %d:%d:%d:%d\n", slave_filename[t], head.movieSize.xmin, head.movieSize.ymin, head.movieSize.xmax, head.movieSize.ymax); tag = head.firstTag; while(tag) { if(tag->id == ST_SETBACKGROUNDCOLOR && tag->len>=3) { rgb.r = tag->data[0]; rgb.g = tag->data[1]; rgb.b = tag->data[2]; } tag=tag->next; } frameRate = head.frameRate; if(head.fileVersion > fileversion) fileversion = head.fileVersion; if(!t) box = head.movieSize; else { if(head.movieSize.xmin < box.xmin) box.xmin = head.movieSize.xmin; if(head.movieSize.ymin < box.ymin) box.ymin = head.movieSize.ymin; if(head.movieSize.xmax > box.xmax) box.xmax = head.movieSize.xmax; if(head.movieSize.ymax > box.ymax) box.ymax = head.movieSize.ymax; } msg(" New master bounding box is %d:%d:%d:%d\n", box.xmin, box.ymin, box.xmax, box.ymax); swf_FreeTags(&head); } memset(swf, 0, sizeof(SWF)); swf->fileVersion = fileversion; swf->movieSize = box; swf->frameRate = frameRate; swf->fileAttributes = fileAttributes; swf->firstTag = swf_InsertTag(0, ST_SETBACKGROUNDCOLOR); tag = swf->firstTag; swf_SetRGB(tag, &rgb); for(t=0;t temporary SWF created"); } static char* slavename = 0; static int slaveid = -1; static int slaveframe = -1; static char masterbitmap[65536]; static char depthbitmap[65536]; #define FLAGS_WRITEDEFINES 1 #define FLAGS_WRITENONDEFINES 2 #define FLAGS_WRITESPRITE 4 #define FLAGS_WRITESLAVE 8 int get_free_id(char*bitmap) { int t; for(t=1;t<65536;t++) if(!bitmap[t]) { bitmap[t] = 1; return t; } return -1; } void jpeg_assert(SWF*master, SWF*slave) { /* TODO: if there's a jpegtable found, store it and handle it together with the flash file headers */ /* check that master and slave don't have both jpegtables (which would be fatal) */ int pos; TAG *mpos=0, *spos=0; TAG *mtag,*stag; pos = 0; mtag = master->firstTag; stag = slave->firstTag; while(mtag) { if(mtag->id == ST_JPEGTABLES) mpos = mtag; mtag = mtag->next; } while(stag) { if(stag->id == ST_JPEGTABLES) spos = stag; stag = stag->next; } if(mpos && spos) { if(spos->len == mpos->len && !memcmp(spos->data, mpos->data, mpos->len)) { // ok, both have jpegtables, but they're identical. // delete one and don't throw an error swf_DeleteTag(slave, spos); spos = 0; } } if(spos && mpos) { msg(" Master and slave have incompatible JPEGTABLES."); } } TAG* write_sprite_defines(TAG*tag, SWF*sprite) { TAG*rtag = sprite->firstTag; while(rtag && rtag->id!=ST_END) { if(!swf_isAllowedSpriteTag(rtag)) { msg(" processing sprite tag %02x", tag->id); if(swf_isDefiningTag(rtag)) { msg(" [sprite defs] write tag %02x (%d bytes in body)", tag->id, tag->len); tag = swf_InsertTag(tag, rtag->id); swf_SetBlock(tag, rtag->data, rtag->len); } else if(swf_isPseudoDefiningTag(rtag)) { msg(" [sprite defs] write tag %02x (%d bytes in body)", tag->id, tag->len); tag = swf_InsertTag(tag, rtag->id); swf_SetBlock(tag, rtag->data, rtag->len); } else { switch(rtag->id) { case ST_JPEGTABLES: /* if we get here, jpeg_assert has already run, ensuring this is the only one of it's kind, so we may safely write it out */ tag = swf_InsertTag(tag, rtag->id); swf_SetBlock(tag, rtag->data, rtag->len); break; case ST_EXPORTASSETS: msg(" deliberately ignoring EXPORTASSETS tag"); break; case ST_ENABLEDEBUGGER: msg(" deliberately ignoring ENABLEDEBUGGER tag"); break; case ST_SETBACKGROUNDCOLOR: msg(" deliberately ignoring BACKGROUNDCOLOR tag"); break; case ST_SHOWFRAME: msg(" deliberately ignoring SHOWFRAME tag"); break; case ST_REFLEX: msg(" deliberately ignoring REFLEX tag"); break; case 40: case 49: case 51: msg(" found tag %d. This is a Generator template, isn't it?", rtag->id); break; default: msg(" funny tag: %d is neither defining nor sprite", rtag->id); } } } rtag = rtag->next; } return tag; } void changedepth(TAG*tag, int add) { if(tag->id == ST_PLACEOBJECT) PUT16(&tag->data[2],GET16(&tag->data[2])+add); if(tag->id == ST_PLACEOBJECT2) PUT16(&tag->data[1],GET16(&tag->data[1])+add); if(tag->id == ST_REMOVEOBJECT) PUT16(&tag->data[2],GET16(&tag->data[2])+add); if(tag->id == ST_REMOVEOBJECT2) PUT16(&tag->data[0],GET16(&tag->data[0])+add); if(tag->id == ST_PLACEOBJECT2) { SWFPLACEOBJECT obj; U8 flags; swf_SetTagPos(tag, 0); flags = swf_GetU8(tag); if(flags&2) swf_GetU16(tag); //id if(flags&4) swf_GetMatrix(tag, 0); if(flags&8) swf_GetCXForm(tag, 0,1); if(flags&16) swf_GetU16(tag); //ratio if(flags&64) { swf_ResetReadBits(tag); printf("%d->%d\n", GET16(&tag->data[tag->pos]), GET16(&tag->data[tag->pos])+add); PUT16(&tag->data[tag->pos],GET16(&tag->data[tag->pos])+add); } msg(" Depth relocation not fully working yet with clipdepths", tag->id); } } void matrix_adjust(MATRIX*m, int movex, int movey, float scalex, float scaley, int scalepos) { m->sx = (int)(m->sx*scalex); m->sy = (int)(m->sy*scaley); m->r1 = (int)(m->r1*scalex); m->r0 = (int)(m->r0*scaley); if(scalepos) { m->tx *= scalex; m->ty *= scaley; } m->tx += movex; m->ty += movey; } void write_changepos(TAG*output, TAG*tag, int movex, int movey, float scalex, float scaley, int scalepos) { if(movex || movey || scalex != 1.0 || scaley != 1.0) { switch(tag->id) { case ST_PLACEOBJECT2: { MATRIX m; U8 flags; swf_GetMatrix(0, &m); tag->pos = 0; tag->readBit = 0; flags = swf_GetU8(tag); swf_SetU8(output, flags|4); swf_SetU16(output, swf_GetU16(tag)); //depth //flags&1: move if(flags&2) { swf_SetU16(output, swf_GetU16(tag)); //id } // flags & 4 if(flags&4) { swf_GetMatrix(tag, &m); } else { swf_GetMatrix(0, &m); } matrix_adjust(&m, movex, movey, scalex, scaley, scalepos); swf_SetMatrix(output, &m); if (tag->readBit) { tag->pos++; tag->readBit = 0; } //swf_ResetReadBits(tag); swf_SetBlock(output, &tag->data[tag->pos], tag->len - tag->pos); break; } case ST_PLACEOBJECT: { MATRIX m; swf_SetU16(output, swf_GetU16(tag)); //id swf_SetU16(output, swf_GetU16(tag)); //depth swf_GetMatrix(tag, &m); matrix_adjust(&m, movex, movey, scalex, scaley, scalepos); swf_SetMatrix(output, &m); if (tag->readBit) { tag->pos++; tag->readBit = 0; } //swf_ResetReadBits(tag); swf_SetBlock(output, &tag->data[tag->pos], tag->len - tag->pos); break; } default: swf_SetBlock(output, tag->data, tag->len); } } else { swf_SetBlock(output, tag->data, tag->len); } } TAG* write_sprite(TAG*tag, SWF*sprite, int spriteid, int replaceddefine) { TAG* definespritetag; TAG* rtag; int tmp; definespritetag = tag = swf_InsertTag(tag, ST_DEFINESPRITE); swf_SetU16(tag, spriteid); swf_SetU16(tag, sprite->frameCount); msg (" sprite id is %d", spriteid); tmp = sprite->frameCount; msg(" %d frames to go",tmp); if(config.clip) { tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_SetU8(tag, 2+64); //flags: character+clipdepth swf_SetU16(tag, 0); //depth swf_SetU16(tag, replaceddefine); //id swf_SetU16(tag, 65535); //clipdepth } if(config.overlay && !config.isframe) { tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_SetU8(tag, 2); //flags: character swf_SetU16(tag, 1); //depth swf_SetU16(tag, replaceddefine); //id } rtag = sprite->firstTag; while(rtag && rtag->id!=ST_END) { if (swf_isAllowedSpriteTag(rtag)) { msg(" [sprite main] write tag %02x (%d bytes in body)", rtag->id, rtag->len); tag = swf_InsertTag(tag, rtag->id); write_changepos(tag, rtag, config.movex, config.movey, config.scalex, config.scaley, 0); if(config.clip || (config.overlay && !config.isframe)) changedepth(tag, +2); if(tag->id == ST_SHOWFRAME) { tmp--; msg(" %d frames to go",tmp); } } rtag = rtag->next; } tag = swf_InsertTag(tag, ST_END); return tag; } static char tag_ok_for_slave(int id) { if(id == ST_SETBACKGROUNDCOLOR) return 0; return 1; } TAG* write_master(TAG*tag, SWF*master, SWF*slave, int spriteid, int replaceddefine, int flags) { int outputslave = 0; int frame = 1; int sframe = 0; int slavewritten = 0; int deletedepth = -1; TAG* rtag = master->firstTag; TAG* stag = slave->firstTag; while(rtag && rtag->id!=ST_END) { if(rtag->id == ST_SHOWFRAME && outputslave) { while(stag && stag->id!=ST_END) { if(stag->id == ST_SHOWFRAME) { stag = stag->next; sframe++; break; } if(tag_ok_for_slave(stag->id)) { tag = swf_InsertTag(tag, stag->id); write_changepos(tag, stag, config.movex, config.movey, config.scalex, config.scaley, 0); } stag = stag->next; } } if(rtag->id == ST_SHOWFRAME) { frame ++; tag = swf_InsertTag(tag, ST_SHOWFRAME); if(deletedepth>=0) { tag = swf_InsertTag(tag, ST_REMOVEOBJECT2); swf_SetU16(tag, deletedepth); deletedepth=-1; } rtag = rtag->next; continue; } if(swf_isDefiningTag(rtag) && (flags&FLAGS_WRITEDEFINES)) { msg(" [master] write tag %02x (%d bytes in body)", rtag->id, rtag->len); if(swf_GetDefineID(rtag) == spriteid && !config.isframe) { if(config.overlay) { tag = swf_InsertTag(tag, rtag->id); swf_SetBlock(tag, rtag->data, rtag->len); swf_SetDefineID(tag, replaceddefine); } else { /* don't write this tag */ msg(" replacing tag %d ID %d with sprite", rtag->id ,spriteid); } if(flags&FLAGS_WRITESPRITE) { msg(" writing sprite defines"); tag = write_sprite_defines(tag, slave); msg(" writing sprite"); tag = write_sprite(tag, slave, spriteid, replaceddefine); } if(flags&FLAGS_WRITESLAVE) { msg(" writing slave"); outputslave = 1; } } else { tag = swf_InsertTag(tag, rtag->id); swf_SetBlock(tag, rtag->data, rtag->len); } } if(frame == slaveframe) /* only happens with config.isframe: put slave at specific frame */ { if(flags&FLAGS_WRITESLAVE) { outputslave = 1; slavewritten = 1; } if((flags&FLAGS_WRITESPRITE) && !slavewritten) { int id = get_free_id(masterbitmap); int depth = 65535; deletedepth = 65535; if(config.clip) { msg(" Can't combine --clip and --frame"); } tag = write_sprite_defines(tag, slave); tag = write_sprite(tag, slave, id, -1); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_SetU8(tag, 2); //flags: id swf_SetU16(tag, depth); swf_SetU16(tag, id); slavewritten = 1; } } if(!swf_isDefiningTag(rtag) && (flags&FLAGS_WRITENONDEFINES)) { int dontwrite = 0; switch(rtag->id) { case ST_PLACEOBJECT: case ST_PLACEOBJECT2: if(frame == slaveframe && !config.overlay) dontwrite = 1; case ST_REMOVEOBJECT: /* place/removetags for the object we replaced should be discarded, too, as the object to insert isn't a sprite */ if(spriteid>=0 && swf_GetPlaceID(rtag) == spriteid && !config.isframe && config.merge) dontwrite = 1; break; case ST_REMOVEOBJECT2: break; } if(!dontwrite) { msg(" [master] write tag %02x (%d bytes in body)", rtag->id, rtag->len); tag = swf_InsertTag(tag, rtag->id); write_changepos(tag, rtag, config.mastermovex, config.mastermovey, config.masterscalex, config.masterscaley, 1); } } rtag = rtag->next; } if(outputslave) while(stag && stag->id!=ST_END) { if(tag_ok_for_slave(stag->id)) { msg(" [slave] write tag %02x (%d bytes in body), %.2f %.2f", rtag->id, rtag->len, config.movex /20.0, config.movey /20.0); tag = swf_InsertTag(tag, stag->id); write_changepos(tag, stag, config.movex, config.movey, config.scalex, config.scaley, 0); } stag = stag->next; } if(!slavewritten && config.isframe && (flags&(FLAGS_WRITESLAVE|FLAGS_WRITESPRITE))) { if(slaveframe>=0) msg(" Frame %d doesn't exist in file. No substitution will occur", slaveframe); else msg(" Frame \"%s\" doesn't exist in file. No substitution will occur", slavename); } tag = swf_InsertTag(tag, ST_END); return tag; } void adjustheader(SWF*swf) { if(config.framerate) swf->frameRate = config.framerate; if(config.hassizex) { swf->movieSize.xmax = swf->movieSize.xmin + config.sizex; } if(config.hassizey) { swf->movieSize.ymax = swf->movieSize.ymin + config.sizey; } if(config.flashversion) swf->fileVersion = config.flashversion; } void catcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf) { char* depths; int t; TAG*tag; TAG*mtag,*stag; if(config.isframe) { msg(" Can't combine --cat and --frame"); exit(1); } if(config.flashversion) master->fileVersion = config.flashversion; tag = master->firstTag; while(tag) { if(swf_isDefiningTag(tag)) { int defineid = swf_GetDefineID(tag); msg(" tagid %02x defines object %d", tag->id, defineid); masterbitmap[defineid] = 1; } tag = tag->next; } swf_Relocate(slave, masterbitmap); jpeg_assert(master, slave); memcpy(newswf, master, sizeof(SWF)); adjustheader(newswf); tag = newswf->firstTag = swf_InsertTag(0, ST_REFLEX); // to be removed later depths = malloc(65536); if(!depths) { msg(" Couldn't allocate %d bytes of memory", 65536); return; } memset(depths, 0, 65536); mtag = master->firstTag; while(mtag && mtag->id!=ST_END) { int num=1; U16 depth; msg(" [master] write tag %02x (%d bytes in body)", mtag->id, mtag->len); switch(mtag->id) { case ST_PLACEOBJECT2: num++; case ST_PLACEOBJECT: { depth = swf_GetDepth(mtag); depths[depth] = 1; } break; case ST_REMOVEOBJECT: { depth = swf_GetDepth(mtag); depths[depth] = 0; } break; case ST_REMOVEOBJECT2: { depth = swf_GetDepth(mtag); depths[depth] = 0; } break; } tag = swf_InsertTag(tag, mtag->id); swf_SetBlock(tag, mtag->data, mtag->len); mtag = mtag->next; } for(t=0;t<65536;t++) if(depths[t]) { char data[16]; int len; tag = swf_InsertTag(tag, ST_REMOVEOBJECT2); swf_SetU16(tag, t); } free(depths); stag = slave->firstTag; while(stag && stag->id!=ST_END) { msg(" [slave] write tag %02x (%d bytes in body)", stag->id, stag->len); tag = swf_InsertTag(tag, stag->id); swf_SetBlock(tag, stag->data, stag->len); stag = stag->next; } tag = swf_InsertTag(tag, ST_END); swf_DeleteTag(newswf, tag); } void normalcombine(SWF*master, char*slave_name, SWF*slave, SWF*newswf) { int spriteid = -1; int replaceddefine = -1; int frame = 0; char*framelabel; TAG * tag = master->firstTag; memset(depthbitmap, 0, sizeof(depthbitmap)); // set the idtab while(tag) { int depth = swf_GetDepth(tag); if(depth>=0) { depthbitmap[depth] = 1; } if(swf_isDefiningTag(tag)) { int defineid = swf_GetDefineID(tag); msg(" tagid %02x defines object %d", tag->id, defineid); masterbitmap[defineid] = 1; if (!slavename && defineid==slaveid) { if(defineid>=0) { spriteid = defineid; msg(" Slave file attached to object %d.", defineid); } } } else if(tag->id == ST_EXPORTASSETS) { int t; int num = swf_GetU16(tag); for(t=0;t Slave file attached to object %d exported as %s.", id, name); } } } else if(tag->id == ST_SYMBOLCLASS) { /* a symbolclass tag is like a define tag: it defines id 0000 */ int num = swf_GetU16(tag); int t; for(t=0;tid == ST_PLACEOBJECT2) { char * name = swf_GetName(tag); int id = swf_GetPlaceID(tag); { SWFPLACEOBJECT obj; swf_GetPlaceObject(tag, &obj); swf_PlaceObjectFree(&obj); if(obj.clipdepth) { depthbitmap[obj.clipdepth] = 1; } } if(name) msg(" tagid %02x places object %d named \"%s\"", tag->id, id, name); else msg(" tagid %02x places object %d (no name)", tag->id, id); if (name && slavename && !strcmp(name,slavename)) { if(id>=0) { spriteid = id; msg(" Slave file attached to named object %s (%d).", name, id); } } } else if(tag->id == ST_SHOWFRAME) { if(slaveframe>=0 && frame==slaveframe) { msg(" Slave file attached to frame %d.", frame); } frame++; } else if(tag->id == ST_FRAMELABEL) { char * name = tag->data; if(name && slavename && config.isframe && !strcmp(name, slavename)) { slaveframe = frame; msg(" Slave file attached to frame %d (%s).", frame, name); } } tag = tag->next; }; if (spriteid<0 && !config.isframe) { if(slavename) { if(strcmp(slavename,"!!dummy!!")) { msg(" Didn't find anything named %s in file. No substitutions will occur.", slavename); if(!strcmp(slavename, "swf")) { msg(" (If you were trying to combine rfxview with a document, try replacing 'swf' with 'viewport'."); } } } else msg(" Didn't find id %d in file. No substitutions will occur.", slaveid); spriteid = get_free_id(masterbitmap); } swf_Relocate (slave, masterbitmap); if(config.merge) swf_RelocateDepth (slave, depthbitmap); jpeg_assert(slave, master); if (config.overlay) replaceddefine = get_free_id(masterbitmap); // write file memcpy(newswf, master, sizeof(SWF)); adjustheader(newswf); newswf->firstTag = tag = swf_InsertTag(0, ST_REFLEX); // to be removed later if (config.antistream) { if (config.merge) { msg(" Can't combine --antistream and --merge"); } tag = write_sprite_defines(tag, slave); tag = write_sprite(tag, slave, spriteid, replaceddefine); tag = write_master(tag, master, slave, spriteid, replaceddefine, FLAGS_WRITEDEFINES); tag = write_master(tag, master, slave, spriteid, replaceddefine, FLAGS_WRITENONDEFINES); } else { if (config.merge) tag = write_master(tag, master, slave, spriteid, replaceddefine, FLAGS_WRITEDEFINES|FLAGS_WRITENONDEFINES| FLAGS_WRITESLAVE ); else tag = write_master(tag, master, slave, spriteid, replaceddefine, FLAGS_WRITEDEFINES|FLAGS_WRITENONDEFINES| FLAGS_WRITESPRITE ); } swf_DeleteTag(newswf, newswf->firstTag); } void combine(SWF*master, char*slave_name, SWF*slave, SWF*newswf) { slavename = slave_name; slaveid = -1; slaveframe = -1; if(!master->fileVersion && slave) master->fileVersion = slave->fileVersion; master->fileAttributes |= slave->fileAttributes; swf_FoldAll(master); swf_FoldAll(slave); if(slavename[0] == '#') { slaveid = atoi(&slavename[1]); slavename = 0; } if(config.isframe) { if(slavename && slavename[0]!='#') { int tmp; int len; sscanf(slavename, "%d%n", &tmp, &len); if(len == strlen(slavename)) { /* if the name the slave should replace consists only of digits and the -f option is given, it probably is not a frame name but a frame number. */ slaveid = tmp; slavename = 0; } } if(slaveid>=0) { slaveframe = slaveid; slaveid = -1; } else { /* if id wasn't given as either #number or number, the name is a frame label. BTW: The user wouldn't necessarily have needed to supply the -f option in this case */ } } msg(" move x (%d)", config.movex); msg(" move y (%d)", config.movey); msg(" scale x (%f)", config.scalex); msg(" scale y (%f)", config.scaley); msg(" master move x (%d)", config.mastermovex); msg(" master move y (%d)", config.mastermovey); msg(" master scale x (%f)", config.masterscalex); msg(" master scale y (%f)", config.masterscaley); msg(" is frame (%d)", config.isframe); memset(masterbitmap, 0, sizeof(masterbitmap)); if(config.cat) return catcombine(master, slave_name, slave, newswf); else return normalcombine(master, slave_name, slave, newswf); } int main(int argn, char *argv[]) { int fi; SWF master; SWF slave; SWF newswf; int t; config.overlay = 0; config.antistream = 0; config.alloctest = 0; config.cat = 0; config.merge = 0; config.clip = 0; config.loglevel = 2; config.movex = 0; config.movey = 0; config.scalex = 1.0; config.scaley = 1.0; config.sizex = 0; config.sizey = 0; config.masterscalex = 1.0; config.masterscaley = 1.0; config.mastermovex = 0; config.mastermovey = 0; config.hassizex = 0; config.hassizey = 0; config.framerate = 0; config.stack = 0; config.stack1 = 0; config.dummy = 0; config.zlib = 0; processargs(argn, argv); initLog(0,-1,0,0,-1,config.loglevel); if(config.merge && config.cat) { msg(" Can't combine --cat and --merge"); exit(1); } if(config.stack && config.cat) { msg(" Can't combine --cat and --stack"); exit(1); } if(config.stack) { if(config.overlay) { msg(" Can't combine -l and -t"); exit(1); } if(config.clip) { msg(" Can't combine -c and -t"); exit(1); } msg(" (stacking) %d files found\n", numslaves); makestackmaster(&master); } else { int ret; msg(" master entity %s (named \"%s\")\n", master_filename, master_name); fi = open(master_filename, O_RDONLY|O_BINARY); if(fi<0) { msg(" Failed to open %s\n", master_filename); exit(1); } ret = swf_ReadSWF(fi, &master); if(ret<0) { msg(" Failed to read from %s\n", master_filename); exit(1); } swf_RemoveJPEGTables(&master); removeCommonTags(&master); msg(" Read %d bytes from masterfile\n", ret); close(fi); } for(t=0;t slave entity(%d) %s (%s \"%s\")\n", t+1, slave_filename[t], slave_isframe[t]?"frame":"object", slave_name[t]); } if(config.dummy) { if(numslaves) { msg(" --dummy (-d) implies there are zero slave objects. You supplied %d.", numslaves); exit(1); } numslaves = 1; slave_filename[0] = "!!dummy!!"; slave_name[0] = "!!dummy!!"; slave_isframe[0] = 0; } if (config.alloctest) { char*bitmap = malloc(sizeof(char)*65536); memset(bitmap, 0, 65536*sizeof(char)); memset(bitmap, 1, 101*sizeof(char)); swf_Relocate(&master, bitmap); newswf = master; free(bitmap); // makestackmaster(&newswf); } else { if (!numslaves) { if(config.cat) msg(" You must have at least two objects."); else msg(" You must have at least one slave entity."); return 0; } for(t = 0; t < numslaves; t++) { config.movex = slave_movex[t]; config.movey = slave_movey[t]; config.scalex = slave_scalex[t]; config.scaley = slave_scaley[t]; config.isframe = slave_isframe[t]; msg(" Combine [%s]%s and [%s]%s", master_name, master_filename, slave_name[t], slave_filename[t]); if(!config.dummy) { int ret; fi = open(slave_filename[t], O_RDONLY|O_BINARY); if(fi<0) { msg(" Failed to open %s\n", slave_filename[t]); exit(1); } ret = swf_ReadSWF(fi, &slave); if(ret<0) { msg(" Failed to read from %s\n", slave_filename[t]); exit(1); } msg(" Read %d bytes from slavefile\n", ret); close(fi); swf_RemoveJPEGTables(&slave); removeCommonTags(&slave); } else { memset(&slave, 0, sizeof(slave)); slave.firstTag = swf_InsertTag(0, ST_END); slave.frameRate = 0; slave.fileVersion = 0; slave.frameCount = 0; } combine(&master, slave_name[t], &slave, &newswf); master = newswf; } if(config.dummy && !config.hassizex && !config.hassizey && !config.mastermovex && !config.mastermovey) { newswf.movieSize.xmin = newswf.movieSize.xmin*config.masterscalex; newswf.movieSize.ymin = newswf.movieSize.ymin*config.masterscaley; newswf.movieSize.xmax = newswf.movieSize.xmax*config.masterscalex; newswf.movieSize.ymax = newswf.movieSize.ymax*config.masterscaley; } } if(!newswf.fileVersion) newswf.fileVersion = 4; if(config.local_with_filesystem) newswf.fileAttributes &= ~FILEATTRIBUTE_USENETWORK; if(config.local_with_networking) newswf.fileAttributes |= FILEATTRIBUTE_USENETWORK; if(config.accelerated_blit) newswf.fileAttributes |= FILEATTRIBUTE_USEACCELERATEDBLIT; if(config.hardware_gpu) newswf.fileAttributes |= FILEATTRIBUTE_USEHARDWAREGPU; fi = open(outputname, O_BINARY|O_RDWR|O_TRUNC|O_CREAT, 0777); if(config.zlib) { if(newswf.fileVersion < 6) newswf.fileVersion = 6; newswf.compressed = 1; swf_WriteSWF(fi, &newswf); } else { newswf.compressed = -1; // don't compress swf_WriteSWF(fi, &newswf); } close(fi); return 0; //ok } swftools_0.9.2+git20130725.orig/src/swfstrings.10000644000175000017500000000153112216332640020405 0ustar gawaingawain.TH swfstrings "1" "August 2009" "swfstrings" "swftools" .SH NAME swfstrings - Extracts strings from SWF files. .SH Synopsis .B swfstrings [options] file.swf .SH DESCRIPTION This tool extracts strings from SWF files. It parses SWF font records and text records and prints unicode-encoded characters to stdout. .SH OPTIONS .TP \fB\-f\fR, \fB\-\-fonts\fR Print out font information for each text block .TP \fB\-x\fR, \fB\-\-xpos\fR \fIx\fR Set bounding box x coordinate .TP \fB\-y\fR, \fB\-\-ypos\fR \fIy\fR Set bounding box y coordinate .TP \fB\-W\fR, \fB\-\-width\fR \fIwidth\fR Set bounding box width .TP \fB\-H\fR, \fB\-\-height\fR \fIheight\fR Set bounding box height .TP \fB\-V\fR, \fB\-\-version\fR Print version information and exit .SH AUTHORS Rainer Böhme .TP Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfc-interpolation.h0000644000175000017500000001060712216332640022116 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #ifndef __EASE_H #define __EASE_H typedef struct _interpolation { int function; float slope, speed, amplitude, growth, damping; int bounces; } interpolation_t; enum { IF_LINEAR = 1, IF_QUAD_IN = 2, IF_QUAD_OUT = 3, IF_QUAD_IN_OUT = 4, IF_CUBIC_IN = 5, IF_CUBIC_OUT = 6, IF_CUBIC_IN_OUT = 7, IF_QUART_IN = 8, IF_QUART_OUT = 9, IF_QUART_IN_OUT = 10, IF_QUINT_IN = 11, IF_QUINT_OUT = 12, IF_QUINT_IN_OUT = 13, IF_CIRCLE_IN = 14, IF_CIRCLE_OUT = 15, IF_CIRCLE_IN_OUT = 16, IF_EXPONENTIAL_IN = 17, IF_EXPONENTIAL_OUT = 18, IF_EXPONENTIAL_IN_OUT = 19, IF_SINE_IN = 20, IF_SINE_OUT = 21, IF_SINE_IN_OUT = 22, IF_ELASTIC_IN = 23, IF_ELASTIC_OUT = 24, IF_ELASTIC_IN_OUT = 25, IF_BACK_IN = 26, IF_BACK_OUT = 27, IF_BACK_IN_OUT = 28, IF_BOUNCE_IN = 29, IF_BOUNCE_OUT = 30, IF_BOUNCE_IN_OUT = 31, IF_FAST_BOUNCE_IN = 32, IF_FAST_BOUNCE_OUT = 33, IF_FAST_BOUNCE_IN_OUT = 34 }; float linear(float fraction, float start, float delta); float quadIn(float fraction, float start, float delta, float slope); float quadOut(float fraction, float start, float delta, float slope); float quadInOut(float fraction, float start, float delta, float slope); float cubicIn(float fraction, float start, float delta, float slope); float cubicOut(float fraction, float start, float delta, float slope); float cubicInOut(float fraction, float start, float delta, float slope); float quartIn(float fraction, float start, float delta, float slope); float quartOut(float fraction, float start, float delta, float slope); float quartInOut(float fraction, float start, float delta, float slope); float quintIn(float fraction, float start, float delta, float slope); float quintOut(float fraction, float start, float delta, float slope); float quintInOut(float fraction, float start, float delta, float slope); float circleIn(float fraction, float start, float delta, float slope); float circleOut(float fraction, float start, float delta, float slope); float circleInOut(float fraction, float start, float delta, float slope); float exponentialIn(float fraction, float start, float delta); float exponentialOut(float fraction, float start, float delta); float exponentialInOut(float fraction, float start, float delta); float sineIn(float fraction, float start, float delta); float sineOut(float fraction, float start, float delta); float sineInOut(float fraction, float start, float delta); float elasticIn(float fraction, float start, float delta, float amplitude, int bounces, float damping); float elasticOut(float fraction, float start, float delta, float amplitude, int bounces, float damping); float elasticInOut(float fraction, float start, float delta, float amplitude, int bounces, float damping); float backIn(float fraction, float start, float delta, float speed); float backOut(float fraction, float start, float delta, float speed); float backInOut(float fraction, float start, float delta, float speed); float bounceIn(float fraction, float start, float delta, int bounces, float growth, float damping); float bounceOut(float fraction, float start, float delta, int bounces, float growth, float damping); float bounceInOut(float fraction, float start, float delta, int bounces, float growth, float damping); float fastBounceIn(float fraction, float start, float delta, int bounces, float growth, float damping); float fastBounceOut(float fraction, float start, float delta, int bounces, float growth, float damping); float fastBounceInOut(float fraction, float start, float delta, int bounces, float growth, float damping); #endif swftools_0.9.2+git20130725.orig/src/swfextract.10000644000175000017500000000336412216332640020374 0ustar gawaingawain.TH swfextract "1" "January 2003" "swfdump" "swftools" .SH NAME swfextract - a tool for extracting data out of swf files. .SH Synopsis .B swfextract [\fIoptions\fR] [\fIfile.swf\fR] .SH DESCRIPTION swfextracts allows to extract swf movieclips and objects out of swf files. .PP SWF files are animation files which can be displayed in Web Browsers using the Flash Plugin. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Write output to file \fIfilename\fR .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-i\fR, \fB\-\-id\fR \fIids\fR \fIids\fR is a range of IDs to extract. E.g. 1-10,14 .TP \fB\-j\fR, \fB\-\-jpegs\fR \fIids\fR \fIids\fR is a range of JPEG IDs to extract. E.g. 1-2,3,14- .TP \fB\-p\fR, \fB\-\-pngs\fR \fIids\fR \fIids\fR is a range of PNG IDs to extract. E.g. -10,20-30 .TP \fB\-f\fR, \fB\-\-frame\fR \fIframes\fR \fIframes\fR is a range of frames to extract. E.g. 1-10,20-30,40- .TP \fB\-n\fR, \fB\-\-name\fR \fIname\fR Set the name of the object to extract to \fIname\fR. .TP \fB\-w\fR, \fB\-\-hollow\fR Copy empty frames to the output file, too. .TP \fB\-P\fR, \fB\-\-placeobject\fR Copy original placeobject tag for the given object into the output file (Use with -i). This means that the object is at the same position in the generated movie as in the original movie. .TP \fB\-j\fR, \fB\-\-jpegs\fR \fIrange\fR Extract jpeg pictures in \fIrange\fR .TP \fB\-p\fR, \fB\-\-pngs\fR \fIrange\fR Extract png pictures in \fIrange\fR .TP \fB\-m\fR, \fB\-\-mp3\fR Extract main mp3 stream (There may be substreams in the Movieclips, as well. To extract these, first extract the Movieclips with \fB-i\fR and then use \fB-m\fR) .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfextract.c0000644000175000017500000010347212216332640020457 0ustar gawaingawain/* swfextract.c Allows to extract parts of the swf into a new file. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/log.h" #include "../lib/jpeg.h" #include "../lib/png.h" #ifdef HAVE_ZLIB_H #ifdef HAVE_LIBZ #include "zlib.h" #define _ZLIB_INCLUDED_ #endif #endif char * filename = 0; char * destfilename = "output.swf"; int verbose = 3; char* extractids = 0; char* extractframes = 0; char* extractjpegids = 0; char* extractfontids = 0; char* extractpngids = 0; char* extractsoundids = 0; char* extractmp3ids = 0; char* extractbinaryids = 0; char* extractanyids = 0; char extractmp3 = 0; char* extractname = 0; char hollow = 0; char originalplaceobjects = 0; char movetozero = 0; int numextracts = 0; char *outputformat = NULL; struct options_t options[] = { {"o","output"}, {"w","hollow"}, {"v","verbose"}, {"i","id"}, {"j","jpegs"}, {"p","pngs"}, {"a","any"}, {"P","placeobject"}, {"0","movetozero"}, {"m","mp3"}, {"M","embeddedmp3"}, {"s","sound"}, {"n","name"}, {"f","frame"}, {"F","font"}, {"V","version"}, {"b","binary"}, {"O","outputformat"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfextract - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { destfilename = val; return 1; } else if(!strcmp(name, "i")) { extractids = val; numextracts++; if(extractname) { fprintf(stderr, "You can only supply either name or id\n"); exit(1); } return 1; } else if(!strcmp(name, "n")) { extractname = val; numextracts++; if(extractids) { fprintf(stderr, "You can only supply either name or id\n"); exit(1); } return 1; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else if(!strcmp(name, "m")) { extractmp3 = 1; numextracts++; return 0; } else if(!strcmp(name, "M")) { if(extractsoundids) { fprintf(stderr, "Only one --embeddedmp3 argument is allowed. (Try to use a range, e.g. -M 1,2,3)\n"); exit(1); } numextracts++; extractmp3ids = val; return 1; } else if(!strcmp(name, "j")) { if(extractjpegids) { fprintf(stderr, "Only one --jpegs argument is allowed. (Try to use a range, e.g. -j 1,2,3)\n"); exit(1); } /* TODO: count number of IDs in val range */ numextracts++; extractjpegids = val; return 1; } else if(!strcmp(name, "F")) { if(extractfontids) { fprintf(stderr, "Only one --font argument is allowed. (Try to use a range, e.g. -s 1,2,3)\n"); exit(1); } numextracts++; extractfontids = val; return 1; } else if(!strcmp(name, "s")) { if(extractsoundids) { fprintf(stderr, "Only one --sound argument is allowed. (Try to use a range, e.g. -s 1,2,3)\n"); exit(1); } numextracts++; extractsoundids = val; return 1; } else if(!strcmp(name, "b")) { if(extractbinaryids) { fprintf(stderr, "Only one --binary argument is allowed. (Try to use a range, e.g. -s 1,2,3)\n"); exit(1); } numextracts++; extractbinaryids = val; return 1; } #ifdef _ZLIB_INCLUDED_ else if(!strcmp(name, "p")) { if(extractpngids) { fprintf(stderr, "Only one --png argument is allowed. (Try to use a range, e.g. -p 1,2,3)\n"); exit(1); } numextracts++; extractpngids = val; return 1; } #endif else if(!strcmp(name, "a")) { numextracts++; extractanyids = val; return 1; } else if(!strcmp(name, "f")) { numextracts++; extractframes = val; return 1; } else if(!strcmp(name, "P")) { originalplaceobjects = 1; return 0; } else if(!strcmp(name, "0")) { movetozero = 1; return 0; } else if(!strcmp(name, "w")) { hollow = 1; return 0; } else if (!strcmp(name, "O")) { outputformat = val; return 1; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char*name) { printf("Usage: %s [-v] [-n name] [-ijf ids] file.swf\n", name); printf("\t-v , --verbose\t\t\t Be more verbose\n"); printf("\t-o , --output filename\t\t set output filename\n"); printf("\t-V , --version\t\t\t Print program version and exit\n\n"); printf("SWF Subelement extraction:\n"); printf("\t-n , --name name\t\t instance name of the object (SWF Define) to extract\n"); printf("\t-i , --id ID\t\t\t ID of the object, shape or movieclip to extract\n"); printf("\t-f , --frame frames\t\t frame numbers to extract\n"); printf("\t-w , --hollow\t\t\t hollow mode: don't remove empty frames\n"); printf("\t \t\t\t (use with -f)\n"); printf("\t-P , --placeobject\t\t\t Insert original placeobject into output file\n"); printf("\t \t\t\t (use with -i)\n"); printf("SWF Font/Text extraction:\n"); printf("\t-F , --font ID\t\t\t Extract font(s)\n"); printf("Picture extraction:\n"); printf("\t-j , --jpeg ID\t\t\t Extract JPEG picture(s)\n"); #ifdef _ZLIB_INCLUDED_ printf("\t-p , --pngs ID\t\t\t Extract PNG picture(s)\n"); #endif printf("\n"); printf("Sound extraction:\n"); printf("\t-m , --mp3\t\t\t Extract main mp3 stream\n"); printf("\t-M , --embeddedmp3\t\t\t Extract embedded mp3 stream(s)\n"); printf("\t-s , --sound ID\t\t\t Extract Sound(s)\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } void prepare_name(char *buf, size_t len, const char *prefix, const char *suffix, int idx) { if (outputformat!=NULL) { // override default file name formatting // make sure single-file behavior is not used numextracts = -1; // Other parts of codebase use vsnprintf, so I assume snprintf // is available on all platforms that swftools currently works on. // We need to check for buffer overflows now that the user is // supplying the format string. snprintf(buf,len,outputformat,idx,suffix); } else { // use default file name formatting, unchanged sprintf(buf,"%s%d.%s",prefix,idx,suffix); } } U8 mainr,maing,mainb; /* 1 = used, not expanded, 3 = used, expanded 5 = wanted, not expanded 7 = wanted, expanded */ char used[65536]; TAG*tags[65536]; int changed; char * tagused; int extractname_id = -1; void idcallback(void*data) { if(!(used[GET16(data)]&1)) { changed = 1; used[GET16(data)] |= 1; } } void enumerateIDs(TAG*tag, void(*callback)(void*)) { /* U8*data; int len = tag->len; if(tag->len>=64) { len += 6; data = (U8*)malloc(len); PUT16(data, (tag->id<<6)+63); *(U8*)&data[2] = tag->len; *(U8*)&data[3] = tag->len>>8; *(U8*)&data[4] = tag->len>>16; *(U8*)&data[5] = tag->len>>24; memcpy(&data[6], tag->data, tag->len); } else { len += 2; data = (U8*)malloc(len); PUT16(data, (tag->id<<6)+tag->len); memcpy(&data[2], tag->data, tag->len); } map_ids_mem(data, len, callback); */ int num = swf_GetNumUsedIDs(tag); int *ptr = malloc(sizeof(int)*num); int t; swf_GetUsedIDs(tag, ptr); for(t=0;tdata[ptr[t]]); } void moveToZero(TAG*tag) { if(!swf_isPlaceTag(tag)) return; SWFPLACEOBJECT obj; swf_GetPlaceObject(tag, &obj); obj.matrix.tx = 0; obj.matrix.ty = 0; swf_ResetTag(tag, tag->id); swf_SetPlaceObject(tag, &obj); } void extractTag(SWF*swf, char*filename) { SWF newswf; TAG*desttag; TAG*srctag; RGBA rgb; SRECT objectbbox; char sprite; int f; int t; int tagnum; int copy = 0; memset(&newswf,0x00,sizeof(SWF)); // set global movie parameters newswf.fileVersion = swf->fileVersion; newswf.frameRate = swf->frameRate; newswf.movieSize = swf->movieSize; if(movetozero && originalplaceobjects) { newswf.movieSize.xmax = swf->movieSize.xmax - swf->movieSize.xmin; newswf.movieSize.ymax = swf->movieSize.ymax - swf->movieSize.ymin; newswf.movieSize.xmin = 0; newswf.movieSize.ymin = 0; } newswf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); desttag = newswf.firstTag; rgb.r = mainr; rgb.g = maing; rgb.b = mainb; swf_SetRGB(desttag,&rgb); swf_GetRect(0, &objectbbox); do { changed = 0; for(t=0;t<65536;t++) { if(used[t] && !(used[t]&2)) { if(tags[t]==0) { msg(" ID %d is referenced, but never defined.", t); } else if(tags[t]->id==ST_DEFINESPRITE) { TAG*tag = tags[t]; while(tag->id != ST_END) { enumerateIDs(tag, idcallback); tag = tag->next; } } else enumerateIDs(tags[t], idcallback); used[t] |= 2; } } } while(changed); srctag = swf->firstTag; tagnum = 0; sprite = 0; while(srctag && (srctag->id || sprite)) { int reset = 0; if(!sprite) { copy = 0; } if(srctag->id == ST_END) { sprite = 0; } if(srctag->id == ST_DEFINESPRITE) sprite = 1; if(srctag->id == ST_JPEGTABLES) copy = 1; if(swf_isDefiningTag(srctag)) { int id = swf_GetDefineID(srctag); if(used[id]) { SRECT b; copy = 1; b = swf_GetDefineBBox(srctag); swf_ExpandRect2(&objectbbox, &b); } } else if ((((swf_isPlaceTag(srctag) && originalplaceobjects) || srctag->id == ST_STARTSOUND) && (used[swf_GetPlaceID(srctag)]&4) ) || (swf_isPseudoDefiningTag(srctag) && used[swf_GetDefineID(srctag)]) || (tagused[tagnum])) { if(copy == 0) reset = 1; copy = 1; } if(srctag->id == ST_REMOVEOBJECT) { if(!used[swf_GetPlaceID(srctag)]) copy = 0; } if(copy) { TAG*ttag = (TAG*)malloc(sizeof(TAG)); desttag = swf_InsertTag(desttag, srctag->id); desttag->len = desttag->memsize = srctag->len; desttag->data = malloc(srctag->len); memcpy(desttag->data, srctag->data, srctag->len); if(movetozero && swf_isPlaceTag(desttag)) { moveToZero(desttag); } if(reset) copy = 0; } srctag = srctag->next; tagnum ++; } if(!extractframes && !hollow) { if(!originalplaceobjects && (extractids||extractname_id>=0)) { int number = 0; int id = 0; int t; TAG* objtag = 0; SRECT bbox; memset(&bbox, 0, sizeof(SRECT)); if(extractids) { for(t=0;t<65536;t++) { if(is_in_range(t, extractids)) { id = t; number++; } } } if(number>=2) { printf("warning! You should use the -P when extracting multiple objects\n"); } if(number == 1) { /* if there is only one object, we will scale it. So let's figure out its bounding box */ TAG*tag = swf->firstTag; while(tag) { if(swf_isDefiningTag(tag) && tag->id != ST_DEFINESPRITE) { if(swf_GetDefineID(tag) == id) bbox = swf_GetDefineBBox(tag); objtag = tag; } tag = tag->next; } newswf.movieSize.xmin = 0; newswf.movieSize.ymin = 0; newswf.movieSize.xmax = 512*20; newswf.movieSize.ymax = 512*20; } else { if((objectbbox.xmin|objectbbox.ymin|objectbbox.xmax|objectbbox.ymax)!=0) newswf.movieSize = objectbbox; } if(extractname_id>=0) { desttag = swf_InsertTag(desttag, ST_PLACEOBJECT2); swf_ObjectPlace(desttag, extractname_id, extractname_id, 0,0,extractname); } else { for(t=0;t<65536;t++) { if(is_in_range(t, extractids)) { MATRIX m; desttag = swf_InsertTag(desttag, ST_PLACEOBJECT2); swf_GetMatrix(0, &m); if(objtag) { int width = bbox.xmax - bbox.xmin; int height = bbox.ymax - bbox.ymin; int max = width>height?width:height; m.tx = -bbox.xmin; m.ty = -bbox.ymin; if(max) { m.sx = (512*20*65536)/max; m.sy = (512*20*65536)/max; } //newswf.movieSize = swf_TurnRect(newswf.movieSize, &m); } swf_ObjectPlace(desttag, t, t, &m,0,0); } } } } desttag = swf_InsertTag(desttag,ST_SHOWFRAME); } desttag = swf_InsertTag(desttag,ST_END); f = open(filename, O_TRUNC|O_WRONLY|O_CREAT|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&newswf)) fprintf(stderr,"WriteSWF() failed.\n"); close(f); swf_FreeTags(&newswf); // cleanup } int isOfType(int t, TAG*tag) { int show = 0; if(t == 0 && (tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || tag->id == ST_DEFINESHAPE3)) { show = 1; } if(t==1 && tag->id == ST_DEFINESPRITE) { show = 1; } if(t == 2 && (tag->id == ST_DEFINEBITS || tag->id == ST_DEFINEBITSJPEG2 || tag->id == ST_DEFINEBITSJPEG3)) { show = 1; } if(t == 3 && (tag->id == ST_DEFINEBITSLOSSLESS || tag->id == ST_DEFINEBITSLOSSLESS2)) { show = 1; } if(t == 4 && (tag->id == ST_DEFINESOUND)) { show = 1; } if(t == 5 && (tag->id == ST_DEFINEFONT || tag->id == ST_DEFINEFONT2 || tag->id == ST_DEFINEFONT3)) { show = 1; } if (t== 6 && (tag->id == ST_DEFINEBINARY)) { show = 1; } if (t== 7 && (tag->id == ST_DEFINESPRITE)) { int wasFolded = swf_IsFolded(tag); TAG *toFold = tag; if(wasFolded) swf_UnFoldSprite(tag); while(tag->id != ST_END) { tag = tag->next; if(tag->id == ST_SOUNDSTREAMHEAD || tag->id == ST_SOUNDSTREAMHEAD2) { show = 1; break; } } if(wasFolded) swf_FoldSprite(toFold); } return show; } void listObjects(SWF*swf) { TAG*tag; char first; int t; int frame = 0; char*names[] = {"Shape", "MovieClip", "JPEG", "PNG", "Sound", "Font", "Binary", "Embedded MP3"}; char*options[] = {"-i", "-i", "-j", "-p", "-s", "-F","-b","-M"}; int mp3=0; printf("Objects in file %s:\n",filename); swf_FoldAll(swf); for(t=0;tfirstTag; first = 1; while(tag) { if(tag->id == ST_SOUNDSTREAMHEAD || tag->id == ST_SOUNDSTREAMHEAD2) mp3 = 1; if(isOfType(t,tag)) nr++; tag = tag->next; } if(!nr) continue; printf(" [%s] %d %s%s: ID(s) ", options[t], nr, names[t], nr>1?"s":""); tag = swf->firstTag; while(tag) { char text[80]; char show = isOfType(t,tag); int id; if(!show) { tag = tag->next; continue; } id = swf_GetDefineID(tag); if(id == lastid+1) { follow=1; } else { if(first || !follow) { if(!first) printf(", "); printf("%d", id); } else { if(lastprint + 1 == lastid) printf(", %d, %d", lastid, id); else printf("-%d, %d", lastid, id); } lastprint = id; first = 0; follow = 0; } lastid = id; tag=tag->next; } if(follow) { if(lastprint + 1 == lastid) printf(", %d", lastid); else printf("-%d", lastid); } printf("\n"); } if(frame) printf(" [-f] %d Frames: ID(s) 0-%d\n", frame, frame); else printf(" [-f] 1 Frame: ID(s) 0\n"); if(mp3) printf(" [-m] 1 MP3 Soundstream\n"); } int handlefont(SWF*swf, TAG*tag) { SWFFONT* f=0; U16 id; char name[80]; char*filename = name; int t; id = swf_GetDefineID(tag); prepare_name(name, sizeof(name), "font", "swf", id); if(numextracts==1) { filename = destfilename; } swf_FontExtract(swf, id, &f); if(!f) { if (!extractanyids) { printf("Couldn't extract font %d\n", id); } return 0; } swf_WriteFont(f, filename); swf_FontFree(f); return 1; } static char has_jpegtables=0; static U8*jpegtables = 0; static int jpegtablessize = 0; void handlejpegtables(TAG*tag) { if(tag->id == ST_JPEGTABLES) { jpegtables = tag->data; jpegtablessize = tag->len; has_jpegtables = 1; } } FILE* save_fopen(char* name, char* mode) { FILE*fi = fopen(name, mode); if(!fi) { fprintf(stderr, "Error: Couldn't open %s\n", name); exit(1); } return fi; } int findjpegboundary(U8*data, int len) { int t; int pos=-1; for(t=0;tid != ST_DEFINEBITSJPEG3) { prepare_name(name, sizeof(name), "pic", "jpg", GET16(tag->data)); if(numextracts==1) { filename = destfilename; if(!strcmp(filename,"output.swf")) filename = "output.jpg"; } } else { prepare_name(name, sizeof(name), "pic", "png", GET16(tag->data)); if(numextracts==1) { filename = destfilename; if(!strcmp(filename,"output.swf")) filename = "output.png"; } } /* swf jpeg images have two streams, which both start with ff d8 and end with ff d9. The following code handles sorting the middle bytes out, so that one stream remains */ if(tag->id == ST_DEFINEBITSJPEG && tag->len>2 && has_jpegtables) { fi = save_fopen(filename, "wb"); if(jpegtablessize>=2) { fwrite(jpegtables, 1, jpegtablessize-2, fi); //don't write end tag (ff,d8) fwrite(&tag->data[2+2], tag->len-2-2, 1, fi); //don't write start tag (ff,d9) } else { fwrite(tag->data+2, tag->len-2, 1, fi); } fclose(fi); } else if(tag->id == ST_DEFINEBITSJPEG2 && tag->len>2) { int end = tag->len; int pos = findjpegboundary(&tag->data[2], tag->len-2); if(pos>=0) { pos+=2; fi = save_fopen(filename, "wb"); fwrite(&tag->data[2], pos-2, 1, fi); fwrite(&tag->data[pos+4], end-(pos+4), 1, fi); fclose(fi); } else { fi = save_fopen(filename, "wb"); fwrite(&tag->data[2], end-2, 1, fi); fclose(fi); } } else if(tag->id == ST_DEFINEBITSJPEG3 && tag->len>6) { U32 end = GET32(&tag->data[2])+6; int pos = findjpegboundary(&tag->data[6], end); if(end >= tag->len) { msg(" zlib data out of bounds in definebitsjpeg3"); return 0; } if(pos) { /* TODO: do we actually need this? */ memmove(&tag->data[pos], &tag->data[pos+4], end-(pos+4)); } unsigned char*image; unsigned width=0, height=0; jpeg_load_from_mem(&tag->data[6], end-6, &image, &width, &height); uLongf datalen = width*height; Bytef *data = malloc(datalen); int error = uncompress(data, &datalen, &tag->data[end], (uLong)(tag->len - end)); if(error != Z_OK) { fprintf(stderr, "Zlib error %d\n", error); return 0; } int t, size = width*height; for(t=0;tdata); if (!extractanyids) { fprintf(stderr, "Object %d is not a JPEG picture!\n", id); exit(1); } return 0; } return 1; } #ifdef _ZLIB_INCLUDED_ static U32 mycrc32; static U32*crc32_table = 0; static void make_crc32_table(void) { int t; if(crc32_table) return; crc32_table = (U32*)malloc(1024); for (t = 0; t < 256; t++) { U32 c = t; int s; for (s = 0; s < 8; s++) { c = (0xedb88320L*(c&1)) ^ (c >> 1); } crc32_table[t] = c; } } static inline void png_write_byte(FILE*fi, U8 byte) { fwrite(&byte,1,1,fi); mycrc32 = crc32_table[(mycrc32 ^ byte) & 0xff] ^ (mycrc32 >> 8); } static void png_start_chunk(FILE*fi, char*type, int len) { U8 mytype[4]={0,0,0,0}; U32 mylen = BE_32_TO_NATIVE(len); memcpy(mytype,type,strlen(type)); fwrite(&mylen, 4, 1, fi); mycrc32=0xffffffff; png_write_byte(fi,mytype[0]); png_write_byte(fi,mytype[1]); png_write_byte(fi,mytype[2]); png_write_byte(fi,mytype[3]); } static void png_write_bytes(FILE*fi, U8*bytes, int len) { int t; for(t=0;t>24); png_write_byte(fi,dword>>16); png_write_byte(fi,dword>>8); png_write_byte(fi,dword); } static void png_end_chunk(FILE*fi) { U32 tmp = BE_32_TO_NATIVE((mycrc32^0xffffffff)); fwrite(&tmp,4,1,fi); } /* extract a lossless image (png) out of a tag This routine was originally meant to be a one-pager. I just didn't know png is _that_ much fun. :) -mk */ int handlelossless(TAG*tag) { char name[80]; char*filename = name; FILE*fi; int width, height; int crc; int id; int t; U8 bpp = 1; U8 format; U8 tmp; Bytef* data=0; U8* data2=0; U8* data3=0; uLongf datalen; uLongf datalen2; U32 datalen3; U8 head[] = {137,80,78,71,13,10,26,10}; int cols; char alpha = tag->id == ST_DEFINEBITSLOSSLESS2; RGBA* palette; int pos; int error; U32 tmp32; make_crc32_table(); if(tag->id != ST_DEFINEBITSLOSSLESS && tag->id != ST_DEFINEBITSLOSSLESS2) { int id = GET16(tag->data); if (!extractanyids) { fprintf(stderr, "Object %d is not a PNG picture!\n",id); exit(1); } return 0; } id =swf_GetU16(tag); format = swf_GetU8(tag); if(format == 3) bpp = 8; if(format == 4) bpp = 16; if(format == 5) bpp = 32; if(format!=3 && format!=5) { if(format==4) fprintf(stderr, "Can't handle 16-bit palette images yet (image %d)\n",id); else fprintf(stderr, "Unknown image type %d in image %d\n", format, id); return 0; } width = swf_GetU16(tag); height = swf_GetU16(tag); if(format == 3) cols = swf_GetU8(tag) + 1; // this is what format means according to the flash specification. (which is // clearly wrong) // if(format == 4) cols = swf_GetU16(tag) + 1; // if(format == 5) cols = swf_GetU32(tag) + 1; else cols = 0; msg(" Width %d", width); msg(" Height %d", height); msg(" Format %d", format); msg(" Cols %d", cols); msg(" Bpp %d", bpp); datalen = (width*height*bpp/8+cols*8); do { if(data) free(data); datalen+=4096; data = malloc(datalen); error = uncompress (data, &datalen, &tag->data[tag->pos], tag->len-tag->pos); } while(error == Z_BUF_ERROR); if(error != Z_OK) { fprintf(stderr, "Zlib error %d (image %d)\n", error, id); return 0; } msg(" Uncompressed image is %d bytes (%d colormap)", datalen, (3+alpha)*cols); pos = 0; datalen2 = datalen+16; data2 = malloc(datalen2); palette = (RGBA*)malloc(cols*sizeof(RGBA)); for(t=0;t Compressed data is %d bytes", datalen2); png_start_chunk(fi, "IDAT", datalen2); png_write_bytes(fi,data2,datalen2); png_end_chunk(fi); png_start_chunk(fi, "IEND", 0); png_end_chunk(fi); free(data); free(data2); free(data3); return 1; } #endif static FILE*mp3file=0; void handlesoundstream(TAG*tag) { char*filename = "output.mp3"; if(numextracts==1) { filename = destfilename; if(!strcmp(filename,"output.swf")) filename = "output.mp3"; } switch(tag->id) { case ST_SOUNDSTREAMHEAD: if((tag->data[1]&0x30) == 0x20) { //mp3 compression mp3file = fopen(filename, "wb"); msg(" Writing mp3 data to %s",filename); } else msg(" Soundstream is not mp3"); break; case ST_SOUNDSTREAMHEAD2: if((tag->data[1]&0x30) == 0x20) {//mp3 compression mp3file = fopen(filename, "wb"); msg(" Writing mp3 data to %s",filename); } else msg(" Soundstream is not mp3 (2)"); break; case ST_SOUNDSTREAMBLOCK: if(mp3file) fwrite(&tag->data[4],tag->len-4,1,mp3file); break; } } int handledefinesound(TAG*tag) { U8 flags; U32 samples; char buf[128]; char*filename = buf; FILE*fi; char*extension = 0; int format; U16 id; int rate,bits,stereo; char*rates[] = {"5500","11025","22050","44100"}; id = swf_GetU16(tag); //id flags = swf_GetU8(tag); format = flags>>4; rate = (flags>>2)&3; bits = flags&2?16:8; stereo = flags&1; samples = swf_GetU32(tag); extension = "raw"; if(format == 2) { // mp3 swf_GetU16(tag); //numsamples_seek extension = "mp3"; } else if(format == 0) { // raw printf("Sound is RAW, format: %s samples/sec, %d bit, %s\n", rates[rate], bits, stereo?"stereo":"mono"); // TODO: convert to WAV extension = "raw"; } else if(format == 1) { // adpcm printf("Sound is ADPCM, format: %s samples/sec, %d bit, %s\n", rates[rate], bits, stereo?"stereo":"mono"); extension = "adpcm"; } else { return 0; } prepare_name(buf, sizeof(buf), "sound", extension, id); if(numextracts==1) { filename = destfilename; if(!strcmp(filename,"output.swf")) { sprintf(buf, "output.%s", extension); filename = buf; } } fi = save_fopen(filename, "wb"); fwrite(&tag->data[tag->pos], tag->len - tag->pos, 1, fi); fclose(fi); return 1; } int handlebinary(TAG*tag) { FILE *fout = NULL; char buf[100]; char *filename = buf; int len = tag->memsize; int dx = 6; // offset to binary data if (tag->id!=ST_DEFINEBINARY) { if (!extractanyids) { fprintf(stderr, "Object %d is not a binary entity!\n", GET16(tag->data)); } return 0; } prepare_name(buf, sizeof(buf), "binary", "bin", GET16(tag->data)); if(numextracts==1) { filename = destfilename; if(!strcmp(filename,"output.swf")) { sprintf(buf, "output.bin"); filename = buf; } } fout = fopen(filename, "wb"); fwrite(tag->data+dx,len-dx,1,fout); fclose(fout); return 1; } int handleembeddedmp3(TAG*tag) { int wasFolded; TAG *toFold; if (tag->id!=ST_DEFINESPRITE) { if (!extractanyids) { fprintf(stderr, "Object %d is not a sprite entity!\n", GET16(tag->data)); } return 0; } wasFolded = swf_IsFolded(tag); toFold = tag; if(wasFolded) swf_UnFoldSprite(tag); while(tag->id != ST_END) { tag = tag->next; if(tag->id == ST_SOUNDSTREAMHEAD || tag->id == ST_SOUNDSTREAMHEAD2 || tag->id == ST_SOUNDSTREAMBLOCK) { handlesoundstream(tag); } } if(wasFolded) swf_FoldSprite(toFold); return 1; } int main (int argc,char ** argv) { TAG*tag; SWF swf; int f; int found = 0; int frame = 0; int tagnum = 0; char depths[65536]; char listavailable = 0; processargs(argc, argv); if(!extractframes && !extractids && ! extractname && !extractjpegids && !extractpngids && !extractmp3 && !extractsoundids && !extractfontids && !extractbinaryids && !extractanyids && !extractmp3ids) listavailable = 1; if(!originalplaceobjects && movetozero) { fprintf(stderr, "Error: -0 (--movetozero) can only be used in conjunction with -P (--placeobject)\n"); return 0; } if(!filename) { fprintf(stderr, "You must supply a filename.\n"); return 1; } initLog(0,-1,0,0,-1, verbose); f = open(filename,O_RDONLY|O_BINARY); if (f<0) { perror("Couldn't open file: "); exit(1); } if (swf_ReadSWF(f,&swf) < 0) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(f); exit(1); } close(f); if(listavailable) { listObjects(&swf); swf_FreeTags(&swf); return 0; } tag = swf.firstTag; tagnum = 0; while(tag) { tagnum ++; tag = tag->next; } tagused = (char*)malloc(tagnum); memset(tagused, 0, tagnum); memset(used, 0, 65536); memset(depths, 0, 65536); tag = swf.firstTag; tagnum = 0; while(tag) { if(swf_isAllowedSpriteTag(tag)) { int write = 0; if(extractframes && is_in_range(frame, extractframes)) { write = 1; if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { depths[swf_GetDepth(tag)] = 1; } if(tag->id == ST_REMOVEOBJECT || tag->id == ST_REMOVEOBJECT2) { int depth = swf_GetDepth(tag); if(!depths[depth]) write = 0; depths[swf_GetDepth(tag)] = 0; } } else { if((tag->id == ST_REMOVEOBJECT || tag->id == ST_REMOVEOBJECT2) && (depths[swf_GetDepth(tag)]) && hollow) { write = 1; depths[swf_GetDepth(tag)] = 0; } } if(write) { enumerateIDs(tag, idcallback); found = 1; tagused[tagnum] = 1; } } if(tag->id == ST_SOUNDSTREAMHEAD || tag->id == ST_SOUNDSTREAMHEAD2 || tag->id == ST_SOUNDSTREAMBLOCK) { if(extractmp3) handlesoundstream(tag); } if(tag->id == ST_JPEGTABLES) { handlejpegtables(tag); } if(swf_isDefiningTag(tag)) { int id = swf_GetDefineID(tag); tags[id] = tag; if(extractids && is_in_range(id, extractids)) { used[id] = 5; found = 1; } if(extractfontids && is_in_range(id, extractfontids)) { handlefont(&swf, tag); } if(extractjpegids && is_in_range(id, extractjpegids)) { handlejpeg(tag); } if(extractsoundids && is_in_range(id, extractsoundids)) { handledefinesound(tag); } if(extractmp3ids && is_in_range(id, extractmp3ids)) { handleembeddedmp3(tag); } if(extractbinaryids && is_in_range(id, extractbinaryids)) { handlebinary(tag); } #ifdef _ZLIB_INCLUDED_ if(extractpngids && is_in_range(id, extractpngids)) { handlelossless(tag); } #endif if(extractanyids && is_in_range(id, extractanyids)) { if (handlefont(&swf,tag)) { // pass } else if (handlejpeg(tag)) { // pass } else if (handlebinary(tag)) { // pass #ifdef _ZLIB_INCLUDED_ } else if (handlelossless(tag)) { // pass #endif } else if (handledefinesound(tag)) { // Not sure if sound code checks carefully for type. // pass } else if (handleembeddedmp3(tag)) { // pass } else { printf("#%d not processed\n", id); } } } else if (tag->id == ST_SETBACKGROUNDCOLOR) { mainr = tag->data[0]; maing = tag->data[1]; mainb = tag->data[2]; } else if(swf_isPlaceTag(tag) && tag->id != ST_PLACEOBJECT ) { char*name = swf_GetName(tag); if(name && extractname && !strcmp(name, extractname)) { int id = swf_GetPlaceID(tag); used[id] = 5; found = 1; if(originalplaceobjects) { tagused[tagnum] = 1; } depths[swf_GetDepth(tag)] = 1; extractname_id = id; } } else if(tag->id == ST_SHOWFRAME) { frame ++; if(hollow) { tagused[tagnum] = 1; found = 1; } } if(tag->id == ST_DEFINESPRITE) { while(tag->id != ST_END) { tag = tag->next; tagnum ++; } } tag = tag->next; tagnum ++; } if (found) extractTag(&swf, destfilename); if(mp3file) { fclose(mp3file); } else { if(extractmp3) { msg(" Didn't find a soundstream in file"); } } swf_FreeTags(&swf); return 0; } swftools_0.9.2+git20130725.orig/src/font2swf.10000644000175000017500000000160512216332640017746 0ustar gawaingawain.TH font2swf "1" "April 2012" "font2swf" "swftools" .SH NAME font2swf \- Converts a font to SWF. .SH Synopsis .B font2swf .SH DESCRIPTION Takes a font file (.ttf, .afm, .pfa, .pfb and all other types supported by FreeType) and converts it into a SWF file. .PP The SWF will contain the Font in SWF format (that is, a DefineFont2 Tag) as well as a textfield containing all the characters the font has. This means the resulting SWF will be viewable. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-v\fR, \fB\-\-verbose\fR Be verbose. Use more than one -v for greater effect. .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Write output to file \fIfilename\fR. (If not given, the output will go to a file called "output.swf") .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfbytes.c0000644000175000017500000002220712216332640020127 0ustar gawaingawain/* swfbytes.c A tool for modifying swfs on the tag level Part of the swftools package. Copyright (c) 2008/2009 Matthias Kramm 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 */ #include "../config.h" #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" static char * filename = 0; static int verbose; static char* output_filename = "output.swf"; static struct options_t options[] = { {"h", "help"}, {"v", "verbose"}, {"V", "version"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfedit - part of %s %s\n", PACKAGE, VERSION); return 0; } else if(!strcmp(name, "v")) { verbose++; return 0; } else if(!strcmp(name, "o")) { output_filename = val; return 1; } else { printf("Unknown option: -%s\n", name); return 0; } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-v] file.swf > file.hexdump\n", name); printf("OR: %s file.hexdump\n", name); printf("\n"); printf("-h , --help Print help and exit\n"); printf("-v , --verbose Be more verbose\n"); printf("-V , --version Print program version and exit\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } void dumpTag(FILE*fo, char*prefix, TAG*tag) { int t; for(t=0;tlen;t++) { if(!(t&15)) fprintf(fo, "%s| ", prefix); fprintf(fo, "%02x ", tag->data[t]); if((t && ((t&15)==15)) || (t==tag->len-1)) { fprintf(fo, "\n"); } } } void dumpFile(SWF*swf, FILE*fo) { TAG* tag = swf->firstTag; int indent = 0; int t; char whitespace[33]; char*prefix = ""; memset(whitespace, 32, 32); whitespace[32] = 0; fprintf(fo, "Version: %d\n", swf->fileVersion); fprintf(fo, "FrameRate: %f\n",swf->frameRate/256.0); fprintf(fo, "FrameCount: %d\n",swf->frameCount); fprintf(fo, "Width: %.2f\n",(swf->movieSize.xmax-swf->movieSize.xmin)/20.0); fprintf(fo, "X-Offset: %.2f\n", swf->movieSize.xmin/20.0); fprintf(fo, "Height: %.2f\n",(swf->movieSize.ymax-swf->movieSize.ymin)/20.0); fprintf(fo, "Y-Offset: %.2f\n", swf->movieSize.ymin/20.0); fprintf(fo, "\n"); while(tag) { if(swf_isDefiningTag(tag)) { fprintf(fo, "%s%s <%d>\n", prefix, swf_TagGetName(tag), swf_GetDefineID(tag)); swf_SetTagPos(tag, 2); dumpTag(fo, prefix, tag); } else if(swf_isPseudoDefiningTag(tag)) { fprintf(fo, "%s%s <%d>\n", prefix, swf_TagGetName(tag), swf_GetDefineID(tag)); swf_SetTagPos(tag, 2); dumpTag(fo, prefix, tag); } else if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { SWFPLACEOBJECT po; swf_GetPlaceObject(tag, &po); fprintf(fo, "%s%s <%d>\n", prefix,swf_TagGetName(tag), po.id); /* for now */ swf_SetTagPos(tag, 0); dumpTag(fo, prefix, tag); swf_PlaceObjectFree(&po); } else { fprintf(fo, "%s%s\n", prefix, swf_TagGetName(tag)); dumpTag(fo, prefix, tag); } if(tag->id == ST_DEFINESPRITE) { indent+=4; if(indent>32) indent = 32; prefix = &whitespace[32-indent]; } else if(tag->id == ST_END) { indent-=4; if(indent<0) indent = 0; prefix = &whitespace[32-indent]; } tag = tag->next; } } static void readline(FILE*fi, char*line, int maxlen) { int pos = 0; while(!feof(fi)) { if(!fread(&line[pos],1,1,fi)) break; /* cut of preceding whitespace */ if(pos == 0 && (line[0] == 32 || line[0] == '\t')) continue; if(line[pos] == 13 || line[pos]==10) break; if(pos=1 && (line[pos-1]==32 || line[pos-1]==9)) { pos--; line[pos]=0; } } int getFloat(char*s) { float x; int n; while(*s==32 || *s=='\t') s++; sscanf(s, "%f%n", &x, &n); if(n==0) fprintf(stderr, "Not a float: %s\n", s); return x; } int getInt(char*s) { int i; int n; while(*s==32 || *s=='\t') s++; sscanf(s, "%d%n", &i, &n); if(n==0) fprintf(stderr, "Not an integer: %s\n", s); return i; } int getTwip(char*x) { return (int)(getFloat(x)*20); } static char**lookup; int swf_TagNameToID(char*name) { int t; TAG tag; memset(&tag, 0, sizeof(tag)); if(!lookup) { lookup = (char**)malloc(sizeof(char*)*65536); for(t=0;t<65536;t++) { tag.id = t; lookup[t] = swf_TagGetName(&tag); } } for(t=0;t<65536;t++) { if(lookup[t] && !strcasecmp(name, lookup[t])) return t; } fprintf(stderr, "Not a tag name: \"%s\"\n", name); return -1; } void parseFile(FILE*fi, SWF*swf) { TAG*tag = 0; char line[1024]; memset(swf, 0, sizeof(SWF)); while(1) { char*colon = 0; readline(fi, line, 1024); if(!line[0]) break; colon = strchr(line, ':'); if(colon) { int num = colon - line; int n; if(num == 9 && !strncmp(line, "FrameRate", num)) { swf->frameRate = getFloat(colon+1)*256; } else if(num == 10 && !strncmp(line, "FrameCount", num)) { swf->frameCount = getInt(colon+1); } else if(num == 7 && !strncmp(line, "Version", num)) { swf->fileVersion = getInt(colon+1); } else if(num == 5 && !strncmp(line, "Width", num)) { int width = getTwip(colon+1); swf->movieSize.xmax += width; } else if(num == 6 && !strncmp(line, "Height", num)) { int height = getTwip(colon+1); swf->movieSize.ymax += height; } else if(num == 8 && !strncmp(line, "X-Offset", num)) { int xoffset = getTwip(colon+1); swf->movieSize.xmin += xoffset; swf->movieSize.xmax += xoffset; } else if(num == 8 && !strncmp(line, "Y-Offset", num)) { int yoffset = getTwip(colon+1); swf->movieSize.ymin += yoffset; swf->movieSize.ymax += yoffset; } else { fprintf(stderr, "Ignored line \"%s\"\n", line); } } } while(!feof(fi)) { char*s, *tagname; char*br; readline(fi, line, 1024); if(!line[0]) continue; s = strchr(line, ' '); br = strchr(line, '|'); if(!br) { int id = 0; /* DEFINESHAPE ... type line */ if(!s) { tagname = strdup(line); } else { tagname = strdup(line); tagname[s-line] = 0; } id = swf_TagNameToID(tagname); free(tagname); if(id<0) { fprintf(stderr, "Ignored line \"%s\"\n", line); continue; } tag = swf_InsertTag(tag, id); if(!swf->firstTag) swf->firstTag = tag; } else { /* | 00 34 fe c7 ... type line */ char*p = line; int num = 0; int digits = 0; if(!tag) { fprintf(stderr, "Discarded unassignable data %s\n", line); continue; } while(*p) { int n = 0; if((*p>='a' && *p<='f') || (*p>='A' && *p<='F')) { n = 9 + (*p & 15); num = (num<<4) | n; digits++; } else if(*p>='0' && *p<='9') { n = *p & 15; num = (num<<4) | n; digits++; } else if(digits) { swf_SetU8(tag, num); num = 0; digits = 0; } p++; } if(digits) swf_SetU8(tag, num); } } } char swf_IsSWF(char*filename) { int fi = open(filename,O_RDONLY|O_BINARY); U8 buf[3] = {0,0,0}; if(fi<0) return 0; read(fi, buf, 3); close(fi); if((buf[0] == 'F' || buf[0] == 'C') && buf[1] == 'W' && buf[2] == 'S') return 1; return 0; } int main (int argc,char ** argv) { int fi; TAG*tag = 0; SWF swf; processargs(argc, argv); if(!filename) { fprintf(stderr, "You must supply a filename.\n"); return -1; } if(swf_IsSWF(filename)) { fi = open(filename,O_RDONLY|O_BINARY); if (fi<0) { perror("Couldn't open file: "); exit(1); } if FAILED(swf_ReadSWF(fi,&swf)) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(fi); exit(1); } dumpFile(&swf, stdout); swf_FreeTags(&swf); } else { SWF newswf; FILE*fi = fopen(filename, "rb"); parseFile(fi, &newswf); fclose(fi); int f; char*sname = output_filename; f = open(sname,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if FAILED(swf_WriteSWF(f,&newswf)) { fprintf(stderr, "Unable to write output file: %s\n", sname); } close(f); } return 0; } swftools_0.9.2+git20130725.orig/src/Makefile.in0000644000175000017500000001552012216332640020162 0ustar gawaingawaintop_builddir = .. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ../Makefile.common install_programs = wav2swf$(E) @PNG2SWF@ swfcombine$(E) swfstrings$(E) swfextract$(E) swfdump$(E) swfc$(E) @JPEG2SWF@ @GIF2SWF@ swfbbox$(E) font2swf$(E) swfrender$(E) as3compile$(E) @PDF2SWF@ @PDF2PDF@ programs = $(install_programs) swfbytes$(E) ttftool$(E) all: $(programs) wav2swf.$(O): wav2swf.c ../lib/wav.h $(C) wav2swf.c -o $@ png2swf.$(O): png2swf.c $(C) png2swf.c -o $@ pdf2swf.$(O): pdf2swf.c $(C) pdf2swf.c -o $@ pdf2pdf.$(O): pdf2pdf.c $(C) pdf2pdf.c -o $@ gfx2gfx.$(O): gfx2gfx.c $(C) gfx2gfx.c -o $@ gif2swf.$(O): gif2swf.c $(C) gif2swf.c -o $@ swfcombine.$(O): swfcombine.c $(C) swfcombine.c -o $@ swfdump.$(O): swfdump.c $(C) swfdump.c -o $@ swfextract.$(O): swfextract.c $(C) swfextract.c -o $@ swfstrings.$(O): swfstrings.c $(C) swfstrings.c -o $@ swfbbox.$(O): swfbbox.c $(C) swfbbox.c -o $@ swf2png.$(O): swf2png.c $(C) swf2png.c -o $@ jpeg2swf.$(O): jpeg2swf.c $(C) jpeg2swf.c -o $@ swfrender.$(O): swfrender.c $(C) swfrender.c -o $@ swfbytes.$(O): swfbytes.c $(C) swfbytes.c -o $@ font2swf.$(O): font2swf.c $(C) font2swf.c -o $@ ttftool.$(O): ttftool.c $(C) ttftool.c -o $@ as3compile.$(O): as3compile.c $(C) as3compile.c -o $@ swfc.$(O): swfc.c parser.h ../lib/q.h $(C) swfc.c -o $@ swfc-feedback.$(O): swfc-feedback.c swfc-feedback.h $(C) swfc-feedback.c -o $@ swfc-history.$(O): swfc-history.c swfc-history.h swfc-interpolation.h ../lib/q.h $(C) swfc-history.c -o $@ swfc-interpolation.$(O): swfc-interpolation.c swfc-interpolation.h ../lib/q.h $(C) swfc-interpolation.c -o $@ parser.$(O): parser.yy.c parser.h ../lib/q.h $(C) parser.yy.c -o $@ ../lib/librfxswf$(A): ../lib/modules/swfrender.c ../lib/modules/swfshape.c ../lib/modules/swftext.c ../lib/modules/swffont.c ../lib/modules/swfbits.c ../lib/rfxswf.c ../lib/devices/swf.c ../lib/modules/swfalignzones.c cd ../lib;$(MAKE) librfxswf$(A);cd - ../lib/libgfxpdf$(A): ../lib/pdf/VectorGraphicOutputDev.cc cd ../lib;$(MAKE) libgfxpdf$(A);cd - ../lib/libgfx$(A): ../lib/devices/*.c ../lib/gfxdevice.h ../lib/gfxtools.c ../lib/gfxfont.c cd ../lib;$(MAKE) libgfx$(A);cd - ../lib/libgfxswf$(A): ../lib/devices/swf.c ../lib/readers/swf.c cd ../lib;$(MAKE) libgfxswf$(A);cd - # TODO: include the following rule only if lex is available parser.yy.c: parser.lex flex -B -s -oparser.yy.c parser.lex wav2swf$(E): wav2swf.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) wav2swf.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ png2swf$(E): png2swf.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) png2swf.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ gif2swf$(E): gif2swf.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) gif2swf.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfcombine$(E): swfcombine.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfcombine.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfdump$(E): swfdump.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfdump.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfbytes$(E): swfbytes.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfbytes.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swf2png$(E): swf2png.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swf2png.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfextract$(E): swfextract.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfextract.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfstrings$(E): swfstrings.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfstrings.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfbbox$(E): swfbbox.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) swfbbox.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ font2swf$(E): font2swf.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) font2swf.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ ttftool$(E): ttftool.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) ttftool.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ as3compile$(E): as3compile.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) as3compile.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ jpeg2swf$(E): jpeg2swf.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) jpeg2swf.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ swfrender$(E): swfrender.$(O) ../lib/libgfxswf$(A) ../lib/librfxswf$(A) ../lib/libgfx$(A) ../lib/libbase$(A) $(L) swfrender.$(O) -o $@ ../lib/libgfxswf$(A) ../lib/librfxswf$(A) ../lib/libgfx$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ PDF2SWF_OBJ=../lib/libgfxswf$(A) ../lib/librfxswf$(A) ../lib/libgfxpdf$(A) ../lib/libgfx$(A) ../lib/libbase$(A) pdf2swf$(E): pdf2swf.$(O) $(PDF2SWF_OBJ) $(LL) pdf2swf.$(O) -o $@ $(PDF2SWF_OBJ) $(LIBS) $(CXXLIBS) $(STRIP) $@ pdf2pdf$(E): pdf2pdf.$(O) $(PDF2SWF_OBJ) $(LL) pdf2pdf.$(O) -o $@ $(PDF2SWF_OBJ) $(LIBS) $(CXXLIBS) $(STRIP) $@ gfx2gfx$(E): gfx2gfx.$(O) $(PDF2SWF_OBJ) $(LL) gfx2gfx.$(O) -o $@ $(PDF2SWF_OBJ) $(LIBS) $(CXXLIBS) $(STRIP) $@ swfc$(E): parser.$(O) swfc.$(O) swfc-feedback.$(O) swfc-history.$(O) swfc-interpolation.$(O) ../lib/librfxswf$(A) ../lib/libbase$(A) $(L) parser.$(O) swfc.$(O) swfc-feedback.$(O) swfc-history.$(O) swfc-interpolation.$(O) -o $@ ../lib/librfxswf$(A) ../lib/libbase$(A) $(LIBS) $(STRIP) $@ install: $(mkinstalldirs) $(bindir) $(mkinstalldirs) $(man1dir) @for file in $(install_programs); do if test -f $$file;then $(INSTALL_BIN);$(INSTALL_MAN1);fi;done uninstall: @for file in $(install_programs); do $(UNINSTALL_BIN);$(UNINSTALL_MAN1);done clean: rm -f *.o *.obj *.lo *.la *~ gmon.out rm -f as3compile gif2swf swfbbox swfbytes swfbytes swfdump pdf2swf wav2swf png2swf swfcombine swfextract swfstrings png2swf jpeg2swf swfc font2swf pdf2pdf gfx2gfx swfrender ttftool @rm -f as3compile.exe gif2swf.exe swfbytes.exe swfbytes.exe pdf2swf.exe swfbbox.exe swfdump.exe wav2swf.exe png2swf.exe swfcombine.exe swfextract.exe swfstrings.exe png2swf.exe jpeg2swf.exe swfc.exe font2swf.exe pdf2pdf.exe gfx2gfx.exe swfrender.exe ttftool.exe @rm -f as3compile$(E) gif2swf$(E) pdf2swf$(E) swfbytes$(E) swfbytes$(E) swfbbox$(E) swfdump$(E) wav2swf$(E) png2swf$(E) swfcombine$(E) swfextract$(E) swfstrings$(E) png2swf$(E) jpeg2swf$(E) swfc$(E) font2swf$(E) pdf2pdf$(E) gfx2gfx$(E) swfrender$(E) ttftool$(E) doc: perl ../parsedoc.pl wav2swf.doc perl ../parsedoc.pl png2swf.doc perl ../parsedoc.pl gif2swf.doc perl ../parsedoc.pl swfbbox.doc perl ../parsedoc.pl font2swf.doc perl ../parsedoc.pl jpeg2swf.doc perl ../parsedoc.pl swfcombine.doc perl ../parsedoc.pl swfdump.doc perl ../parsedoc.pl swfc.doc perl ../parsedoc.pl as3compile.doc perl ../parsedoc.pl swfbytes.doc perl ../parsedoc.pl pdf2pdf.doc .PHONY: clean doc swftools_0.9.2+git20130725.orig/src/swfdump.c0000644000175000017500000013334512216332640017754 0ustar gawaingawain/* swfdump.c Shows the structure of a swf file Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include "../config.h" #ifdef HAVE_SYS_STAT_H #include #else #undef HAVE_STAT #endif #ifdef HAVE_SYS_TYPES_H #include #else #undef HAVE_STAT #endif #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/utf8.h" static char * filename = 0; /* idtab stores the ids which are defined in the file. This allows us to detect errors in the file. (i.e. ids which are defined more than once */ static char idtab[65536]; static char * indent = " "; static int placements = 0; static int action = 0; static int html = 0; static int xhtml = 0; static int xy = 0; static int showtext = 0; static int showshapes = 0; static int hex = 0; static int used = 0; static int bbox = 0; static int cumulative = 0; static int showfonts = 0; static int showbuttons = 0; static struct options_t options[] = { {"h", "help"}, {"D", "full"}, {"V", "version"}, {"e", "html"}, {"E", "xhtml"}, {"a", "action"}, {"t", "text"}, {"s", "shapes"}, {"F", "fonts"}, {"p", "placements"}, {"B", "buttons"}, {"b", "bbox"}, {"X", "width"}, {"Y", "height"}, {"r", "rate"}, {"f", "frames"}, {"d", "hex"}, {"u", "used"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfdump - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(name[0]=='a') { action = 1; return 0; } else if(name[0]=='p') { placements = 1; return 0; } else if(name[0]=='t') { showtext = 1; return 0; } else if(name[0]=='s') { showshapes = 1; return 0; } else if(name[0]=='e') { html = 1; return 0; } else if(name[0]=='c') { cumulative = 1; return 0; } else if(name[0]=='E') { html = 1; xhtml = 1; return 0; } else if(name[0]=='X') { xy |= 1; return 0; } else if(name[0]=='Y') { xy |= 2; return 0; } else if(name[0]=='r') { xy |= 4; return 0; } else if(name[0]=='f') { xy |= 8; return 0; } else if(name[0]=='F') { showfonts = 1; return 0; } else if(name[0]=='d') { hex = 1; return 0; } else if(name[0]=='u') { used = 1; return 0; } else if(name[0]=='b') { bbox = 1; return 0; } else if(name[0]=='B') { showbuttons = 1; return 0; } else if(name[0]=='D') { showbuttons = action = placements = showtext = showshapes = 1; return 0; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-atpdu] file.swf\n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-D , --full Show everything. Same as -atp\n"); printf("-V , --version Print version info and exit\n"); printf("-e , --html Print out html code for embedding the file\n"); printf("-E , --xhtml Print out xhtml code for embedding the file\n"); printf("-a , --action Disassemble action tags\n"); printf("-t , --text Show text fields (like swfstrings).\n"); printf("-s , --shapes Show shape coordinates/styles\n"); printf("-F , --fonts Show font information\n"); printf("-p , --placements Show placement information\n"); printf("-B , --buttons Show button information\n"); printf("-b , --bbox Print tag's bounding boxes\n"); printf("-X , --width Prints out a string of the form \"-X width\".\n"); printf("-Y , --height Prints out a string of the form \"-Y height\".\n"); printf("-r , --rate Prints out a string of the form \"-r rate\".\n"); printf("-f , --frames Prints out a string of the form \"-f framenum\".\n"); printf("-d , --hex Print hex output of tag data, too.\n"); printf("-u , --used Show referred IDs for each Tag.\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } char* what; char* testfunc(char*str) { printf("%s: %s\n", what, str); return 0; } void dumpButton2Actions(TAG*tag, char*prefix) { U32 oldTagPos; U32 offsetpos; U32 condition; oldTagPos = swf_GetTagPos(tag); // scan DefineButton2 Record swf_GetU16(tag); // Character ID swf_GetU8(tag); // Flags; offsetpos = swf_GetTagPos(tag); // first offset swf_GetU16(tag); while (swf_GetU8(tag)) // state -> parse ButtonRecord { swf_GetU16(tag); // id swf_GetU16(tag); // layer swf_GetMatrix(tag,NULL); // matrix swf_GetCXForm(tag,NULL,1); // cxform } while(offsetpos) { U8 a; ActionTAG*actions; if(tag->pos >= tag->len) break; offsetpos = swf_GetU16(tag); condition = swf_GetU16(tag); // condition actions = swf_ActionGet(tag); printf("%s condition %04x\n", prefix, condition); swf_DumpActions(actions, prefix); } swf_SetTagPos(tag,oldTagPos); return; } void dumpButtonActions(TAG*tag, char*prefix) { ActionTAG*actions; swf_SetTagPos(tag, 0); swf_GetU16(tag); // id while (swf_GetU8(tag)) // state -> parse ButtonRecord { swf_GetU16(tag); // id swf_GetU16(tag); // layer swf_GetMatrix(tag,NULL); // matrix } actions = swf_ActionGet(tag); swf_DumpActions(actions, prefix); swf_ActionFree(actions); } void dumpButton(TAG*tag, char*prefix) { swf_SetTagPos(tag, 0); swf_GetU16(tag); // id while (1) { U8 flags = swf_GetU8(tag); if(!flags) break; U16 id = swf_GetU16(tag); U16 depth = swf_GetU16(tag); char event[80]; sprintf(event, "%s%s%s%s", (flags&BS_HIT)?"[hit]":"", (flags&BS_DOWN)?"[down]":"", (flags&BS_OVER)?"[over]":"", (flags&BS_UP)?"[up]":""); if(flags&0xf0) { printf("%s | Show %d at depth %d for %s flags=%02x\n", prefix, id, depth, event, flags); } else { printf("%s | Show %d at depth %d for %s\n", prefix, id, depth, event); } swf_GetMatrix(tag,NULL); // matrix } } void dumpFont(TAG*tag, char*prefix) { SWFFONT* font = malloc(sizeof(SWFFONT)); memset(font, 0, sizeof(SWFFONT)); if(tag->id == ST_DEFINEFONT2 || tag->id == ST_DEFINEFONT3) { swf_FontExtract_DefineFont2(0, font, tag); } else if(tag->id == ST_DEFINEFONT) { swf_FontExtract_DefineFont(0, font, tag); } else { printf("%sCan't parse %s yet\n", prefix,swf_TagGetName(tag)); } printf("%sID: %d\n", prefix,font->id); printf("%sVersion: %d\n", prefix,font->version); printf("%sname: %s\n", prefix,font->name); printf("%scharacters: %d\n", prefix,font->numchars); printf("%shightest mapped unicode value: %d\n", prefix,font->maxascii); if(font->layout) { printf("%sascent:%.2f\n", prefix,font->layout->ascent / 20.0); printf("%sdescent:%.2f\n", prefix,font->layout->descent / 20.0); printf("%sleading:%.2f\n", prefix,font->layout->leading / 20.0); printf("%skerning records:%d\n", prefix,font->layout->kerningcount); } printf("%sstyle: %d\n", prefix,font->style); printf("%sencoding: %02x\n", prefix,font->encoding); printf("%slanguage: %02x\n", prefix,font->language); int t; for(t=0;tnumchars;t++) { int u = font->glyph2ascii?font->glyph2ascii[t]:-1; char ustr[16]; if(u>=32) sprintf(ustr, " '%c'", u); else sprintf(ustr, " 0x%02x", u); printf("%s== Glyph %d: advance=%d encoding=%d%s ==\n", prefix, t, font->glyph[t].advance, u, ustr); SHAPE2* shape = swf_ShapeToShape2(font->glyph[t].shape); SHAPELINE*line = shape->lines; while(line) { if(line->type == moveTo) { printf("%smoveTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0); } else if(line->type == lineTo) { printf("%slineTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0); } else if(line->type == splineTo) { printf("%ssplineTo (%.2f %.2f) %.2f %.2f\n", prefix, line->sx/20.0, line->sy/20.0, line->x/20.0, line->y/20.0 ); } line = line->next; } swf_Shape2Free(shape); free(shape); } /* not part of the file printf("%sencoding table:", prefix, prefix); char filled0=0, lastfilled=0; for(t=0;tmaxascii;t++) { if((t&15)==0) { printf("\n%s%08x ", prefix, t); int s; if(!filled0 && t) { for(s=t;smaxascii;s++) { if(font->ascii2glyph[s]>=0) break; } if(s>t+32) { printf("*"); t = ((s-16)&~15)-1; continue; } } filled0 = 0; for(s=t;smaxascii;s++) { if(font->ascii2glyph[s]>=0) filled0=1; } } printf("%4d ", font->ascii2glyph[t]); } printf("\n");*/ swf_FontFree(font); } static SWF swf; static int fontnum = 0; static SWFFONT**fonts; void textcallback(void*self, int*glyphs, int*xpos, int nr, int fontid, int fontsize, int startx, int starty, RGBA*color) { int font=-1,t; if(nr<1) return; printf(" <%2d glyphs in font %04d size %d, color #%02x%02x%02x%02x at %.2f,%.2f> ",nr, fontid, fontsize, color->r, color->g, color->b, color->a, (startx+xpos[0])/20.0, starty/20.0); for(t=0;tid == fontid) { font = t; break; } } for(t=0;t=0) { if(glyphs[t] >= fonts[font]->numchars /*glyph is in range*/ || !fonts[font]->glyph2ascii /* font has ascii<->glyph mapping */ ) a = glyphs[t]; else { if(fonts[font]->glyph2ascii[glyphs[t]]) a = fonts[font]->glyph2ascii[glyphs[t]]; else a = glyphs[t]; } } else { a = glyphs[t]; } if(a>=32) { char* utf8 = getUTF8(a); printf("%s", utf8); } else { printf("\\x%x", (int)a); } } printf("\n"); } void handleText(TAG*tag, char*prefix) { printf("\n"); if(placements) { swf_SetTagPos(tag, 0); swf_GetU16(tag); swf_GetRect(tag, 0); swf_ResetReadBits(tag); MATRIX m; swf_GetMatrix(tag, &m); printf("%s| Matrix\n",prefix); printf("%s| %5.3f %5.3f %6.2f\n", prefix, m.sx/65536.0, m.r1/65536.0, m.tx/20.0); printf("%s| %5.3f %5.3f %6.2f\n", prefix, m.r0/65536.0, m.sy/65536.0, m.ty/20.0); swf_SetTagPos(tag, 0); } if(showtext) { swf_ParseDefineText(tag,textcallback, 0); } } void handleDefineSound(TAG*tag) { U16 id = swf_GetU16(tag); U8 flags = swf_GetU8(tag); int compression = (flags>>4)&7; int rate = (flags>>2)&3; int bits = flags&2?16:8; int stereo = flags&1; printf(" ("); if(compression == 0) printf("Raw "); else if(compression == 1) printf("ADPCM "); else if(compression == 2) printf("MP3 "); else if(compression == 3) printf("Raw little-endian "); else if(compression == 6) printf("ASAO "); else printf("? "); if(rate == 0) printf("5.5Khz "); if(rate == 1) printf("11Khz "); if(rate == 2) printf("22Khz "); if(rate == 3) printf("44Khz "); printf("%dBit ", bits); if(stereo) printf("stereo"); else printf("mono"); printf(")"); } void handleDefineBits(TAG*tag) { U16 id; U8 mode; U16 width,height; int bpp; id = swf_GetU16(tag); mode = swf_GetU8(tag); width = swf_GetU16(tag); height = swf_GetU16(tag); printf(" image %dx%d",width,height); if(mode == 3) printf(" (8 bpp)"); else if(mode == 4) printf(" (16 bpp)"); else if(mode == 5) printf(" (32 bpp)"); else printf(" (? bpp)"); } void handleEditText(TAG*tag) { U16 id ; U16 flags; int t; id = swf_GetU16(tag); swf_GetRect(tag,0); //swf_ResetReadBits(tag); if (tag->readBit) { tag->pos++; tag->readBit = 0; } flags = swf_GetBits(tag,16); if(flags & ET_HASFONT) { swf_GetU16(tag); //font swf_GetU16(tag); //fontheight } if(flags & ET_HASTEXTCOLOR) { swf_GetU8(tag); //rgba swf_GetU8(tag); swf_GetU8(tag); swf_GetU8(tag); } if(flags & ET_HASMAXLENGTH) { swf_GetU16(tag); //maxlength } if(flags & ET_HASLAYOUT) { swf_GetU8(tag); //align swf_GetU16(tag); //left margin swf_GetU16(tag); //right margin swf_GetU16(tag); //indent swf_GetU16(tag); //leading } printf(" variable \"%s\" ", &tag->data[tag->pos]); if(flags & ET_HTML) printf("(html)"); if(flags & ET_NOSELECT) printf("(noselect)"); if(flags & ET_PASSWORD) printf("(password)"); if(flags & ET_READONLY) printf("(readonly)"); if(flags & (ET_X1 | ET_X3 )) { printf(" undefined flags: %08x (%08x)", (flags&(ET_X1|ET_X3)), flags); } while(tag->data[tag->pos++]); if(flags & ET_HASTEXT) // printf(" text \"%s\"\n", &tag->data[tag->pos]) //TODO ; } void printhandlerflags(U32 handlerflags) { if(handlerflags&1) printf("[on load]"); if(handlerflags&2) printf("[enter frame]"); if(handlerflags&4) printf("[unload]"); if(handlerflags&8) printf("[mouse move]"); if(handlerflags&16) printf("[mouse down]"); if(handlerflags&32) printf("[mouse up]"); if(handlerflags&64) printf("[key down]"); if(handlerflags&128) printf("[key up]"); if(handlerflags&256) printf("[data]"); if(handlerflags&512) printf("[initialize]"); if(handlerflags&1024) printf("[mouse press]"); if(handlerflags&2048) printf("[mouse release]"); if(handlerflags&4096) printf("[mouse release outside]"); if(handlerflags&8192) printf("[mouse rollover]"); if(handlerflags&16384) printf("[mouse rollout]"); if(handlerflags&32768) printf("[mouse drag over]"); if(handlerflags&0x10000) printf("[mouse drag out]"); if(handlerflags&0x20000) printf("[key press]"); if(handlerflags&0x40000) printf("[construct even]"); if(handlerflags&0xfff80000) printf("[???]"); } void handleVideoStream(TAG*tag, char*prefix) { U16 id = swf_GetU16(tag); U16 frames = swf_GetU16(tag); U16 width = swf_GetU16(tag); U16 height = swf_GetU16(tag); U8 flags = swf_GetU8(tag); //5-2(videopacket 01=off 10=on)-1(smoothing 1=on) U8 codec = swf_GetU8(tag); printf(" (%d frames, %dx%d", frames, width, height); if(flags&1) printf(" smoothed"); if(codec == 2) printf(" sorenson h.263)"); else printf(" codec 0x%02x)", codec); } void handleVideoFrame(TAG*tag, char*prefix) { U32 code, version, reference, sizeflags; U32 width=0, height=0; U8 type; U16 id = swf_GetU16(tag); U16 frame = swf_GetU16(tag); U8 deblock,flags, tmp, bit; U32 quantizer; char*types[] = {"I-frame", "P-frame", "disposable P-frame", ""}; printf(" (frame %d) ", frame); /* video packet follows */ code = swf_GetBits(tag, 17); version = swf_GetBits(tag, 5); reference = swf_GetBits(tag, 8); sizeflags = swf_GetBits(tag, 3); switch(sizeflags) { case 0: width = swf_GetBits(tag, 8); height = swf_GetBits(tag, 8); break; case 1: width = swf_GetBits(tag, 16); height = swf_GetBits(tag, 16); break; case 2: width = 352; height = 288; break; case 3: width = 176; height = 144; break; case 4: width = 128; height = 96; break; case 5: width = 320; height = 240; break; case 6: width = 160; height = 120; break; case 7: width = -1; height = -1;/*reserved*/ break; } printf("%dx%d ", width, height); type = swf_GetBits(tag, 2); printf("%s", types[type]); deblock = swf_GetBits(tag, 1); if(deblock) printf(" deblock %d ", deblock); quantizer = swf_GetBits(tag, 5); printf(" quant: %d ", quantizer); } void dumpFilter(FILTER*filter) { if(filter->type == FILTERTYPE_BLUR) { FILTER_BLUR*f = (FILTER_BLUR*)filter; printf("blurx: %f blury: %f\n", f->blurx, f->blury); printf("passes: %d\n", f->passes); } if(filter->type == FILTERTYPE_GLOW) { FILTER_GLOW*f = (FILTER_GLOW*)filter; printf("color %02x%02x%02x%02x\n", f->rgba.r,f->rgba.g,f->rgba.b,f->rgba.a); printf("blurx: %f blury: %f strength: %f\n", f->blurx, f->blury, f->strength); printf("passes: %d\n", f->passes); printf("flags: %s%s%s\n", f->knockout?"knockout ":"", f->composite?"composite ":"", f->innerglow?"innerglow":""); } if(filter->type == FILTERTYPE_DROPSHADOW) { FILTER_DROPSHADOW*f = (FILTER_DROPSHADOW*)filter; printf("blurx: %f blury: %f\n", f->blurx, f->blury); printf("passes: %d\n", f->passes); printf("angle: %f distance: %f\n", f->angle, f->distance); printf("strength: %f passes: %d\n", f->strength, f->passes); printf("flags: %s%s%s\n", f->knockout?"knockout ":"", f->composite?"composite ":"", f->innershadow?"innershadow ":""); } if(filter->type == FILTERTYPE_BEVEL) { FILTER_BEVEL*f = (FILTER_BEVEL*)filter; printf("blurx: %f blury: %f\n", f->blurx, f->blury); printf("passes: %d\n", f->passes); printf("angle: %f distance: %f\n", f->angle, f->distance); printf("strength: %f passes: %d\n", f->strength, f->passes); printf("flags: %s%s%s%s\n", f->ontop?"ontop":"", f->knockout?"knockout ":"", f->composite?"composite ":"", f->innershadow?"innershadow ":""); } if(filter->type == FILTERTYPE_GRADIENTGLOW) { FILTER_GRADIENTGLOW*f = (FILTER_GRADIENTGLOW*)filter; swf_DumpGradient(stdout, f->gradient); printf("blurx: %f blury: %f\n", f->blurx, f->blury); printf("angle: %f distance: %f\n", f->angle, f->distance); printf("strength: %f passes: %d\n", f->strength, f->passes); printf("flags: %s%s%s%s\n", f->knockout?"knockout ":"", f->ontop?"ontop ":"", f->composite?"composite ":"", f->innershadow?"innershadow ":""); } rfx_free(filter); } void handlePlaceObject23(TAG*tag, char*prefix) { U8 flags,flags2=0; MATRIX m; CXFORM cx; char pstr[3][256]; int ppos[3] = {0,0,0}; swf_SetTagPos(tag, 0); flags = swf_GetU8(tag); if(tag->id == ST_PLACEOBJECT3) flags2 = swf_GetU8(tag); swf_GetU16(tag); //depth //flags&1: move if(flags&2) swf_GetU16(tag); //id if(flags&4) { swf_GetMatrix(tag,&m); if(placements) { ppos[0] += sprintf(pstr[0], "| Matrix "); ppos[1] += sprintf(pstr[1], "| %5.3f %5.3f %6.2f ", m.sx/65536.0, m.r1/65536.0, m.tx/20.0); ppos[2] += sprintf(pstr[2], "| %5.3f %5.3f %6.2f ", m.r0/65536.0, m.sy/65536.0, m.ty/20.0); } } if(flags&8) { swf_GetCXForm(tag, &cx, 1); if(placements) { ppos[0] += sprintf(pstr[0]+ppos[0], "| CXForm r g b a "); ppos[1] += sprintf(pstr[1]+ppos[1], "| mul %4.1f %4.1f %4.1f %4.1f ", cx.r0/256.0, cx.g0/256.0, cx.b0/256.0, cx.a0/256.0); ppos[2] += sprintf(pstr[2]+ppos[2], "| add %4d %4d %4d %4d ", cx.r1, cx.g1, cx.b1, cx.a1); } } if(flags&16) { U16 ratio = swf_GetU16(tag); //ratio if(placements) { ppos[0] += sprintf(pstr[0]+ppos[0], "| Ratio "); ppos[1] += sprintf(pstr[1]+ppos[1], "| %-5d ", ratio); ppos[2] += sprintf(pstr[2]+ppos[2], "| "); } } if(flags&64) { U16 clip = swf_GetU16(tag); //clip if(placements) { ppos[0] += sprintf(pstr[0]+ppos[0], "| Clip "); ppos[1] += sprintf(pstr[1]+ppos[1], "| %-4d ", clip); ppos[2] += sprintf(pstr[2]+ppos[2], "| "); } } if(flags&32) { while(swf_GetU8(tag)); } if(flags2&1) { // filter list U8 num = swf_GetU8(tag); if(placements) printf("\n%d filters\n", num); char*filtername[] = {"dropshadow","blur","glow","bevel","gradientglow","convolution","colormatrix","gradientbevel"}; int t; for(t=0;ttype, (filter->typetype]:"?"); dumpFilter(filter); } } } if(flags2&2) { // blend mode U8 blendmode = swf_GetU8(tag); if(placements) { int t; char name[80]; sprintf(name, "%-5d", blendmode); for(t=0;blendModeNames[t];t++) { if(blendmode==t) { sprintf(name, "%-5s", blendModeNames[t]); break; } } ppos[0] += sprintf(pstr[0]+ppos[0], "| Blend "); ppos[1] += sprintf(pstr[1]+ppos[1], "| %s ", name); ppos[2] += sprintf(pstr[2]+ppos[2], "| "); } } if(placements && ppos[0]) { printf("\n"); printf("%s %s\n", prefix, pstr[0]); printf("%s %s\n", prefix, pstr[1]); printf("%s %s", prefix, pstr[2]); } if(flags&128) { if (action) { U16 reserved; U32 globalflags; U32 handlerflags; char is32 = 0; printf("\n"); reserved = swf_GetU16(tag); // must be 0 globalflags = swf_GetU16(tag); //TODO: 32 if version>=6 if(reserved) { printf("Unknown parameter field not zero: %04x\n", reserved); return; } printf("global flags: %04x\n", globalflags); handlerflags = swf_GetU16(tag); //TODO: 32 if version>=6 if(!handlerflags) { handlerflags = swf_GetU32(tag); is32 = 1; } while(handlerflags) { int length; int t; ActionTAG*a; globalflags &= ~handlerflags; printf("%s flags %08x ",prefix, handlerflags); printhandlerflags(handlerflags); length = swf_GetU32(tag); printf(", %d bytes actioncode\n",length); a = swf_ActionGet(tag); swf_DumpActions(a,prefix); swf_ActionFree(a); handlerflags = is32?swf_GetU32(tag):swf_GetU16(tag); //TODO: 32 if version>=6 } if(globalflags) // should go to sterr. printf("ERROR: unsatisfied handlerflags: %02x\n", globalflags); } else { printf(" has action code\n"); } } else printf("\n"); } void handlePlaceObject(TAG*tag, char*prefix) { TAG*tag2 = swf_InsertTag(0, ST_PLACEOBJECT2); U16 id, depth; MATRIX matrix; CXFORM cxform; swf_SetTagPos(tag, 0); id = swf_GetU16(tag); depth = swf_GetU16(tag); swf_GetMatrix(tag, &matrix); swf_GetCXForm(tag, &cxform, 0); swf_SetU8(tag2, 14 /* char, matrix, cxform */); swf_SetU16(tag2, depth); swf_SetU16(tag2, id); swf_SetMatrix(tag2, &matrix); swf_SetCXForm(tag2, &cxform, 1); handlePlaceObject23(tag2, prefix); } char stylebuf[256]; char* fillstyle2str(FILLSTYLE*style) { switch(style->type) { case 0x00: sprintf(stylebuf, "SOLID %02x%02x%02x%02x", style->color.r, style->color.g, style->color.b, style->color.a); break; case 0x10: case 0x11: case 0x12: case 0x13: sprintf(stylebuf, "GRADIENT (%d steps)", style->gradient.num); break; case 0x40: case 0x42: /* TODO: display information about that bitmap */ sprintf(stylebuf, "BITMAPt%s %d", (style->type&2)?"n":"", style->id_bitmap); /* TODO: show matrix */ //swf_DumpMatrix(stdout, &style->m); break; case 0x41: case 0x43: /* TODO: display information about that bitmap */ sprintf(stylebuf, "BITMAPc%s %d", (style->type&2)?"n":"", style->id_bitmap); /* TODO: show matrix */ //swf_DumpMatrix(stdout, &style->m); break; default: sprintf(stylebuf, "UNKNOWN[%02x]",style->type); } return stylebuf; } char* linestyle2str(LINESTYLE*style) { sprintf(stylebuf, "%.2f %02x%02x%02x%02x", style->width/20.0, style->color.r, style->color.g, style->color.b, style->color.a); return stylebuf; } void handleShape(TAG*tag, char*prefix) { SHAPE2 shape; SHAPELINE*line; int t,max; tag->pos = 0; tag->readBit = 0; swf_ParseDefineShape(tag, &shape); max = shape.numlinestyles > shape.numfillstyles?shape.numlinestyles:shape.numfillstyles; if(max) printf("%s | fillstyles(%02d) linestyles(%02d)\n", prefix, shape.numfillstyles, shape.numlinestyles ); else printf("%s | (Neither line nor fill styles)\n", prefix); for(t=0;tfillstyle0, line->fillstyle1, line->linestyle); if(line->type == moveTo) { printf("moveTo %.2f %.2f\n", line->x/20.0, line->y/20.0); } else if(line->type == lineTo) { printf("lineTo %.2f %.2f\n", line->x/20.0, line->y/20.0); } else if(line->type == splineTo) { printf("splineTo (%.2f %.2f) %.2f %.2f\n", line->sx/20.0, line->sy/20.0, line->x/20.0, line->y/20.0 ); } line = line->next; } printf("%s |\n", prefix); } void fontcallback1(void*self, U16 id,U8 * name) { fontnum++; } void fontcallback2(void*self, U16 id,U8 * name) { swf_FontExtract(&swf,id,&fonts[fontnum]); fontnum++; } static U8 printable(U8 a) { if(a<32 || a==127) return '.'; else return a; } void hexdumpTag(TAG*tag, char* prefix) { int t; char ascii[32]; printf(" %s-=> ",prefix); for(t=0;tlen;t++) { printf("%02x ", tag->data[t]); ascii[t&15] = printable(tag->data[t]); if((t && ((t&15)==15)) || (t==tag->len-1)) { int s,p=((t)&15)+1; ascii[p] = 0; for(s=p-1;s<16;s++) { printf(" "); } if(t==tag->len-1) printf(" %s\n", ascii); else printf(" %s\n %s-=> ",ascii,prefix); } } } void handleImportAssets(TAG*tag, char* prefix, int assets2) { int num; U16 id; char* url, *name; int t; url = swf_GetString(tag); printf("%sfrom %s\n", prefix, url); if(assets2) { swf_GetU8(tag); // Reserved: Must be 1 swf_GetU8(tag); // Reserved: Must be 0 } num = swf_GetU16(tag); for(t=0;tpos < tag->len) { int nr = swf_GetU8(tag); // should be 2 int t; if(nr>2) { printf("*** unsupported multiboxes ***, "); break; } for(t=0;tprev) swf.firstTag = swf.firstTag->prev; SWFFONT* font = 0; swf_FontExtract(&swf, id, &font); #endif swf_SetTagPos(tag, 3); while(tag->pos < tag->len) { printf("%sglyph %d) ", prefix, num); int nr = swf_GetU8(tag); // should be 2 int t; for(t=0;t<2;t++) { // pos float v = swf_GetF16(tag); printf("%f ", v*1024.0); } int s; for(s=0;snumchars) { SHAPE2* shape = swf_ShapeToShape2(font->glyph[num].shape); SHAPELINE*line = shape->lines; while(line) { if(line->type == moveTo) { printf("%smoveTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0); } else if(line->type == lineTo) { printf("%slineTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0); } else if(line->type == splineTo) { printf("%ssplineTo (%.2f %.2f) %.2f %.2f\n", prefix, line->sx/20.0, line->sy/20.0, line->x/20.0, line->y/20.0 ); } line = line->next; } swf_Shape2Free(shape); free(shape); } if(num==font->numchars-1) break; #endif num++; } } void dumperror(const char* format, ...) { char buf[1024]; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); if(!html && !xy) printf("==== Error: %s ====\n", buf); } static char strbuf[800]; static int bufpos=0; char* timestring(double f) { int hours = (int)(f/3600); int minutes = (int)((f-hours*3600)/60); int seconds = (int)((f-hours*3600-minutes*60)); int useconds = (int)((f-(int)f)*1000+0.5); bufpos+=100; bufpos%=800; sprintf(&strbuf[bufpos], "%02d:%02d:%02d,%03d",hours,minutes,seconds,useconds); return &strbuf[bufpos]; } int main (int argc,char ** argv) { TAG*tag; #ifdef HAVE_STAT struct stat statbuf; #endif int f; int xsize,ysize; char issprite = 0; // are we inside a sprite definition? int spriteframe = 0; int mainframe=0; char* spriteframelabel = 0; char* framelabel = 0; char prefix[128]; int filesize = 0; int filepos = 0; prefix[0] = 0; memset(idtab,0,65536); processargs(argc, argv); if(!filename) { fprintf(stderr, "You must supply a filename.\n"); return 1; } f = open(filename,O_RDONLY|O_BINARY); if (f<0) { char buffer[256]; sprintf(buffer, "Couldn't open %.200s", filename); perror(buffer); exit(1); } char header[3]; read(f, header, 3); char compressed = (header[0]=='C'); char isflash = (header[0]=='F' && header[1] == 'W' && header[2] == 'S') || (header[0]=='C' && header[1] == 'W' && header[2] == 'S'); close(f); int fl=strlen(filename); if(!isflash && fl>3 && !strcmp(&filename[fl-4], ".abc")) { swf_ReadABCfile(filename, &swf); } else { f = open(filename,O_RDONLY|O_BINARY); if FAILED(swf_ReadSWF(f,&swf)) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(f); exit(1); } #ifdef HAVE_STAT fstat(f, &statbuf); if(statbuf.st_size != swf.fileSize && !compressed) dumperror("Real Filesize (%d) doesn't match header Filesize (%d)", statbuf.st_size, swf.fileSize); filesize = statbuf.st_size; #endif close(f); } //if(action && swf.fileVersion>=9) { // fprintf(stderr, "Actionscript parsing (-a) not yet supported for SWF versions>=9\n"); // action = 0; //} xsize = (swf.movieSize.xmax-swf.movieSize.xmin)/20; ysize = (swf.movieSize.ymax-swf.movieSize.ymin)/20; if(xy) { if(xy&1) printf("-X %d", xsize); if((xy&1) && (xy&6)) printf(" "); if(xy&2) printf("-Y %d", ysize); if((xy&3) && (xy&4)) printf(" "); if(xy&4) printf("-r %.2f", swf.frameRate/256.0); if((xy&7) && (xy&8)) printf(" "); if(xy&8) printf("-f %d", swf.frameCount); printf("\n"); return 0; } if(html) { char*fileversions[] = {"","1,0,0,0", "2,0,0,0","3,0,0,0","4,0,0,0", "5,0,0,0","6,0,23,0","7,0,0,0","8,0,0,0","9,0,0,0","10,0,0,0", "11,0,0,0", "12,0,0,0"}; if(swf.fileVersion>10) { fprintf(stderr, "Fileversion>10\n"); exit(1); } if(xhtml) { printf("\n" "\n" "\n" "\n" "\n" "\n" "\n\n", filename, xsize, ysize, filename); } else { printf("\n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "\n", xsize, ysize, fileversions[swf.fileVersion], filename, filename, xsize, ysize); } return 0; } printf("[HEADER] File version: %d\n", swf.fileVersion); if(compressed) { printf("[HEADER] File is zlib compressed."); if(filesize && swf.fileSize) printf(" Ratio: %02d%%\n", filesize*100/(swf.fileSize)); else printf("\n"); } printf("[HEADER] File size: %d%s\n", swf.fileSize, swf.compressed?" (Depacked)":""); printf("[HEADER] Frame rate: %f\n",swf.frameRate/256.0); printf("[HEADER] Frame count: %d\n",swf.frameCount); printf("[HEADER] Movie width: %.2f",(swf.movieSize.xmax-swf.movieSize.xmin)/20.0); if(swf.movieSize.xmin) printf(" (left offset: %.2f)\n", swf.movieSize.xmin/20.0); else printf("\n"); printf("[HEADER] Movie height: %.2f",(swf.movieSize.ymax-swf.movieSize.ymin)/20.0); if(swf.movieSize.ymin) printf(" (top offset: %.2f)\n", swf.movieSize.ymin/20.0); else printf("\n"); tag = swf.firstTag; if(showtext) { fontnum = 0; swf_FontEnumerate(&swf,&fontcallback1, 0); fonts = (SWFFONT**)malloc(fontnum*sizeof(SWFFONT*)); fontnum = 0; swf_FontEnumerate(&swf,&fontcallback2, 0); } while(tag) { char*name = swf_TagGetName(tag); char myprefix[128]; if(!name) { dumperror("Unknown tag:0x%03x", tag->id); //tag = tag->next; //continue; } if(!name) { name = "UNKNOWN TAG"; } if(cumulative) { filepos += tag->len; printf("[%03x] %9d %9d %s%s", tag->id, tag->len, filepos, prefix, swf_TagGetName(tag)); } else { printf("[%03x] %9d %s%s", tag->id, tag->len, prefix, swf_TagGetName(tag)); } if(tag->id == ST_PLACEOBJECT) { printf(" places id %04d at depth %04x", swf_GetPlaceID(tag), swf_GetDepth(tag)); if(swf_GetName(tag)) printf(" name \"%s\"",swf_GetName(tag)); } else if(tag->id == ST_PLACEOBJECT2 || tag->id == ST_PLACEOBJECT3) { if(tag->data[0]&1) printf(" moves"); else printf(" places"); if(tag->data[0]&2) printf(" id %04d",swf_GetPlaceID(tag)); else printf(" object"); printf(" at depth %04d", swf_GetDepth(tag)); if(tag->id == ST_PLACEOBJECT3 && tag->data[1]&4) printf(" as bitmap"); swf_SetTagPos(tag, 0); if(tag->data[0]&64) { SWFPLACEOBJECT po; swf_GetPlaceObject(tag, &po); printf(" (clip to %04d)", po.clipdepth); swf_PlaceObjectFree(&po); } if(swf_GetName(tag)) printf(" name \"%s\"",swf_GetName(tag)); } else if(tag->id == ST_REMOVEOBJECT) { printf(" removes id %04d from depth %04d", swf_GetPlaceID(tag), swf_GetDepth(tag)); } else if(tag->id == ST_REMOVEOBJECT2) { printf(" removes object from depth %04d", swf_GetDepth(tag)); } else if(tag->id == ST_FREECHARACTER) { printf(" frees object %04d", swf_GetPlaceID(tag)); } else if(tag->id == ST_FILEATTRIBUTES) { swf_SetTagPos(tag, 0); U32 flags = swf_GetU32(tag); if(flags&FILEATTRIBUTE_USENETWORK) printf(" usenetwork"); if(flags&FILEATTRIBUTE_AS3) printf(" as3"); if(flags&FILEATTRIBUTE_SYMBOLCLASS) printf(" symbolclass"); if(flags&FILEATTRIBUTE_USEHARDWAREGPU) printf(" hardware-gpu"); if(flags&FILEATTRIBUTE_USEACCELERATEDBLIT) printf(" accelerated-blit"); if(flags&~(1|8|16|32|64)) printf(" flags=%02x", flags); } else if(tag->id == ST_DOABC) { swf_SetTagPos(tag, 0); U32 flags = swf_GetU32(tag); char*s = swf_GetString(tag); if(flags&~1) { printf(" flags=%08x", flags); } if(*s) { printf(" \"%s\"", s); } if(flags&1) { if(name) printf(","); printf(" lazy load"); } swf_SetTagPos(tag, 0); } else if(tag->id == ST_STARTSOUND) { U8 flags; U16 id; id = swf_GetU16(tag); flags = swf_GetU8(tag); if(flags & 32) printf(" stops sound with id %04d", id); else printf(" starts sound with id %04d", id); if(flags & 16) printf(" (if not already playing)"); if(flags & 1) swf_GetU32(tag); if(flags & 2) swf_GetU32(tag); if(flags & 4) { printf(" looping %d times", swf_GetU16(tag)); } } else if(tag->id == ST_FRAMELABEL) { int l = strlen((char*)tag->data); printf(" \"%s\"", tag->data); if((l+1) < tag->len) { printf(" has %d extra bytes", tag->len-1-l); if(tag ->len - (l+1) == 1 && tag->data[tag->len-1] == 1) printf(" (ANCHOR)"); } if((framelabel && !issprite) || (spriteframelabel && issprite)) { dumperror("Frame %d has more than one label", issprite?spriteframe:mainframe); } if(issprite) spriteframelabel = (char*)tag->data; else framelabel = (char*)tag->data; } else if(tag->id == ST_SHOWFRAME) { char*label = issprite?spriteframelabel:framelabel; int frame = issprite?spriteframe:mainframe; int nframe = frame; if(!label) { while(tag->next && tag->next->id == ST_SHOWFRAME && tag->next->len == 0) { tag = tag->next; if(issprite) spriteframe++; else mainframe++; nframe++; } } if(nframe == frame) printf(" %d (%s)", frame+1, timestring(frame*(256.0/(swf.frameRate+0.1)))); else printf(" %d-%d (%s-%s)", frame+1, nframe+1, timestring(frame*(256.0/(swf.frameRate+0.1))), timestring(nframe*(256.0/(swf.frameRate+0.1))) ); if(label) printf(" (label \"%s\")", label); if(issprite) {spriteframe++; spriteframelabel = 0;} if(!issprite) {mainframe++; framelabel = 0;} } else if(tag->id == ST_SETBACKGROUNDCOLOR) { U8 r = swf_GetU8(tag); U8 g = swf_GetU8(tag); U8 b = swf_GetU8(tag); printf(" (%02x/%02x/%02x)",r,g,b); } else if(tag->id == ST_PROTECT) { if(tag->len>0) { printf(" %s", swf_GetString(tag)); } } else if(tag->id == ST_DEFINEFONTALIGNZONES) { handleFontAlign1(tag); } else if(tag->id == ST_CSMTEXTSETTINGS) { U16 id = swf_GetU16(tag); U8 flags = swf_GetU8(tag); printf(" ("); if(flags&0x40) { printf("flashtype,"); } switch(((flags>>3)&7)) { case 0:printf("no grid,");break; case 1:printf("pixel grid,");break; case 2:printf("subpixel grid,");break; case 3:printf("unknown grid,");break; } if(flags&0x87) printf("unknown[%08x],", flags); float thickness = swf_GetFixed(tag); float sharpness = swf_GetFixed(tag); printf("s=%.2f,t=%.2f)", thickness, sharpness); swf_GetU8(tag); } else if(swf_isDefiningTag(tag)) { U16 id = swf_GetDefineID(tag); printf(" defines id %04d", id); if(idtab[id]) dumperror("Id %04d is defined more than once.", id); idtab[id] = 1; } else if(swf_isPseudoDefiningTag(tag)) { U16 id = swf_GetDefineID(tag); printf(" adds information to id %04d", id); if(!idtab[id]) dumperror("Id %04d is not yet defined.\n", id); } if(tag->id == ST_DEFINEBITSLOSSLESS || tag->id == ST_DEFINEBITSLOSSLESS2) { handleDefineBits(tag); printf("\n"); } else if(tag->id == ST_DEFINESOUND) { handleDefineSound(tag); printf("\n"); } else if(tag->id == ST_VIDEOFRAME) { handleVideoFrame(tag, myprefix); printf("\n"); } else if(tag->id == ST_DEFINEVIDEOSTREAM) { handleVideoStream(tag, myprefix); printf("\n"); } else if(tag->id == ST_DEFINEEDITTEXT) { handleEditText(tag); printf("\n"); } else if(tag->id == ST_DEFINEMOVIE) { U16 id = swf_GetU16(tag); char*s = swf_GetString(tag); printf(" URL: %s\n", s); } else if(tag->id == ST_DEFINETEXT || tag->id == ST_DEFINETEXT2) { handleText(tag, myprefix); } else if(tag->id == ST_DEFINESCALINGGRID) { U16 id = swf_GetU16(tag); SRECT r; swf_GetRect(tag, &r); printf(" (%.2f,%.2f)-(%.2f,%.2f)\n", r.xmin/20.0, r.ymin/20.0, r.xmax/20.0, r.ymax/20.0); } else if(tag->id == ST_PLACEOBJECT2 || tag->id == ST_PLACEOBJECT3) { } else if(tag->id == ST_NAMECHARACTER || tag->id==ST_DEFINEFONTNAME) { swf_GetU16(tag); printf(" \"%s\"\n", swf_GetString(tag)); } else { printf("\n"); } if(bbox && swf_isDefiningTag(tag) && tag->id != ST_DEFINESPRITE) { SRECT r = swf_GetDefineBBox(tag); printf(" %s bbox [%.2f, %.2f, %.2f, %.2f]\n", prefix, r.xmin/20.0, r.ymin/20.0, r.xmax/20.0, r.ymax/20.0); } sprintf(myprefix, " %s", prefix); if(tag->id == ST_DEFINESPRITE) { sprintf(prefix, " "); if(issprite) { dumperror("Sprite definition inside a sprite definition"); } issprite = 1; spriteframe = 0; spriteframelabel = 0; } else if(tag->id == ST_END) { *prefix = 0; issprite = 0; spriteframelabel = 0; if(tag->len) dumperror("End Tag not empty"); } else if(tag->id == ST_IMPORTASSETS || tag->id == ST_IMPORTASSETS2) { handleImportAssets(tag, myprefix, tag->id==ST_IMPORTASSETS2?1:0); } else if(tag->id == ST_EXPORTASSETS || tag->id == ST_SYMBOLCLASS) { handleExportAssets(tag, myprefix); } else if(tag->id == ST_DOACTION && action) { ActionTAG*actions; actions = swf_ActionGet(tag); swf_DumpActions(actions, myprefix); } else if((tag->id == ST_DOABC || tag->id == ST_RAWABC) && action) { void*abccode = swf_ReadABC(tag); swf_DumpABC(stdout, abccode, ""); swf_FreeABC(abccode); } else if(tag->id == ST_DOINITACTION && action) { ActionTAG*actions; swf_GetU16(tag); // id actions = swf_ActionGet(tag); swf_DumpActions(actions, myprefix); } else if(tag->id == ST_DEFINEBUTTON) { if(showbuttons) { dumpButton(tag, myprefix); } if(action) { dumpButtonActions(tag, myprefix); } } else if(swf_isFontTag(tag) && showfonts) { dumpFont(tag, myprefix); } else if(tag->id == ST_DEFINEBUTTON2) { if(action) { dumpButton2Actions(tag, myprefix); } } else if(tag->id == ST_PLACEOBJECT) { handlePlaceObject(tag, myprefix); } else if(tag->id == ST_PLACEOBJECT2 || tag->id == ST_PLACEOBJECT3) { handlePlaceObject23(tag, myprefix); } else if(tag->id == ST_DEFINEFONTALIGNZONES) { handleFontAlign2(tag, myprefix); } else if(tag->id == ST_DEFINEFONTNAME) { swf_SetTagPos(tag, 0); swf_GetU16(tag); //id swf_GetString(tag); //name char* copyright = swf_GetString(tag); printf("%s%s\n", myprefix, copyright); } else if(tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || tag->id == ST_DEFINESHAPE3 || tag->id == ST_DEFINESHAPE4) { if(showshapes) handleShape(tag, myprefix); } if(tag->len && used) { int num = swf_GetNumUsedIDs(tag); int* used; int t; if(num) { used = (int*)malloc(sizeof(int)*num); swf_GetUsedIDs(tag, used); printf("%s%suses IDs: ", indent, prefix); for(t=0;tid == ST_FREECHARACTER) { U16 id; swf_SetTagPos(tag, 0); id = swf_GetU16(tag); idtab[id] = 0; } if(tag->len && hex) { hexdumpTag(tag, prefix); } tag = tag->next; fflush(stdout); } swf_FreeTags(&swf); return 0; } swftools_0.9.2+git20130725.orig/src/pdf2swf.c0000644000175000017500000005411312216332640017635 0ustar gawaingawain/* pdf2swf.c main routine for pdf2swf(1) Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #include #include #include #include #include #include #include #include "../config.h" #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_DIRENT_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #include "../lib/args.h" #include "../lib/os.h" #include "../lib/rfxswf.h" #include "../lib/devices/swf.h" #include "../lib/devices/polyops.h" #include "../lib/devices/record.h" #include "../lib/devices/rescale.h" #include "../lib/gfxfilter.h" #include "../lib/pdf/pdf.h" #include "../lib/log.h" #define SWFDIR concatPaths(getInstallationPath(), "swfs") static gfxsource_t*driver = 0; static gfxdevice_t*out = 0; static int maxwidth=0, maxheight=0; static char * outputname = 0; static int loglevel = 3; static char * pagerange = 0; static char * filename = 0; static char * password = 0; static int zlib = 0; static char * preloader = 0; static char * viewer = 0; static int xnup = 1; static int ynup = 1; static int info_only = 0; static int max_time = 0; static int flatten = 0; static char* filters = 0; char* fontpaths[256]; int fontpathpos = 0; int move_x=0; int move_y=0; int custom_move = 0; int clip_x1=0,clip_y1=0,clip_x2=0,clip_y2=0; int custom_clip = 0; static int system_quiet=0; int systemf(const char* format, ...) { char buf[1024]; int ret; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); if(!system_quiet) { printf("%s\n", buf); fflush(stdout); } ret = system(buf); if(ret) { fprintf(stderr, "system() returned %d\n", ret); exit(ret); } return ret; } #ifdef HAVE_SIGNAL_H void sigalarm(int signal) { msg(" Aborting rendering after %d seconds", max_time); #if 0 && defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRUSAGE) struct rusage usage; getrusage(RUSAGE_CHILDREN, &usage); msg(" Memory used: %d,%d,%d", usage.ru_maxrss, usage.ru_idrss, usage.ru_isrss); #endif #if defined(HAVE_MALLINFO) && defined(HAVE_MALLOC_H) struct mallinfo info = mallinfo(); msg(" Memory used: %d Mb (%d bytes)", info.uordblks/1048576, info.uordblks); #endif exit(1); } #endif typedef struct _parameter { struct _parameter*next; const char*name; const char*value; } parameter_t; static parameter_t* device_config = 0; static parameter_t* device_config_next = 0; static void store_parameter(const char*name, const char*value) { parameter_t*o = device_config; while(o) { if(!strcmp(name, o->name)) { /* overwrite old value */ free((void*)o->value); o->value = strdup(value); return; } o = o->next; } parameter_t*p = (parameter_t*)malloc(sizeof(parameter_t)); p->name = strdup(name); p->value = strdup(value); p->next = 0; if(device_config_next) { device_config_next->next = p; device_config_next = p; } else { device_config = p; device_config_next = p; } } int args_callback_option(char*name,char*val) { if (!strcmp(name, "o")) { outputname = val; return 1; } else if (!strcmp(name, "v")) { loglevel ++; setConsoleLogging(loglevel); return 0; } else if (!strcmp(name, "2")) { xnup = 2; ynup = 1; return 0; } else if (!strcmp(name, "4")) { xnup = 2; ynup = 2; return 0; } else if (!strcmp(name, "9")) { xnup = 3; ynup = 3; return 0; } else if (!strcmp(name, "X")) { maxwidth = atoi(val); return 1; } else if (!strcmp(name, "Y")) { maxheight = atoi(val); return 1; } else if (!strcmp(name, "q")) { loglevel --; setConsoleLogging(loglevel); system_quiet = 1; return 0; } else if (name[0]=='p') { /* check whether the page range follows the p directly, like in -p1,2 */ do { name++; } while(*name == 32 || *name == 13 || *name == 10 || *name == '\t'); if(*name) { pagerange = name; return 0; } pagerange = val; return 1; } else if (!strcmp(name, "P")) { password = val; return 1; } else if (!strcmp(name, "c")) { char*s = strdup(val); char*x1 = strtok(s, ":"); char*y1 = strtok(0, ":"); char*x2 = strtok(0, ":"); char*y2 = strtok(0, ":"); if(!(x1 && y1 && x2 && y2)) { fprintf(stderr, "-c option requires four arguments, :::\n"); exit(1); } custom_clip = 1; clip_x1 = atoi(x1); clip_y1 = atoi(y1); clip_x2 = atoi(x2); clip_y2 = atoi(y2); free(s); return 1; } else if (!strcmp(name, "m")) { char*s = strdup(val); char*c = strchr(s, ':'); if(!c) { fprintf(stderr, "-m option requires two arguments, :\n"); exit(1); } *c = 0; custom_move = 1; move_x = atoi(val); move_y = atoi(c+1); free(s); return 1; } else if (!strcmp(name, "s")) { char*s = val; char*c = strchr(s, '='); if(c && *c && c[1]) { *c = 0; c++; store_parameter(s,c); } else if(!strcmp(s,"help")) { printf("PDF Parameters:\n"); gfxsource_t*pdf = gfxsource_pdf_create(); pdf->setparameter(pdf, "help", ""); gfxdevice_t swf; gfxdevice_swf_init(&swf); printf("SWF Parameters:\n"); swf.setparameter(&swf, "help", ""); exit(0); } else { store_parameter(s,"1"); } return 1; } else if (!strcmp(name, "S")) { store_parameter("drawonlyshapes", "1"); return 0; } else if (!strcmp(name, "i")) { store_parameter("ignoredraworder", "1"); return 0; } #ifndef WIN32 else if (!strcmp(name, "Q")) { max_time = atoi(val); alarm(max_time); # ifdef HAVE_SIGNAL_H signal(SIGALRM, sigalarm); # endif return 1; } #endif else if (!strcmp(name, "z")) { store_parameter("enablezlib", "1"); zlib = 1; return 0; } else if (!strcmp(name, "n")) { store_parameter("opennewwindow", "1"); return 0; } else if (!strcmp(name, "I")) { info_only = 1; return 0; } else if (!strcmp(name, "t")) { store_parameter("insertstop", "1"); return 0; } else if (!strcmp(name, "T")) { if(!strcasecmp(val, "mx")) store_parameter("flashversion", "6"); else store_parameter("flashversion", val); return 1; } else if (!strcmp(name, "f")) { store_parameter("storeallcharacters", "1"); store_parameter("extrafontdata", "1"); return 0; } else if (!strcmp(name, "ff")) { if(filters) { // append this to the current filter expression (we allow more than one --filter) int l = strlen(filters); int new_len = l + strlen(val) + 2; filters = (char*)realloc(filters, new_len); filters[l] = ':'; strcpy(filters+l+1, val); } else { filters = strdup(val); } return 1; } else if (!strcmp(name, "w")) { store_parameter("linksopennewwindow", "0"); return 0; } else if (!strcmp(name, "O")) { int level = 1; int ret=0; if(val&& val[0] && val[1]==0 && isdigit(val[0])) { level = atoi(val); ret=1; } if(level>=1) store_parameter("poly2bitmap", "1"); if(level>=2) store_parameter("bitmapfonts", "1"); if(level>=3) store_parameter("ignoredraworder", "1"); return ret; } else if (!strcmp(name, "G")) { //store_parameter("optimize_polygons", "1"); flatten = 1; return 0; } else if (!strcmp(name, "F")) { char *s = strdup(val); int l = strlen(s); while(l && s[l-1]=='/') { s[l-1] = 0; l--; } fontpaths[fontpathpos++] = s; return 1; } else if (!strcmp(name, "l")) { char buf[256]; sprintf(buf, "%s/default_loader.swf", SWFDIR); preloader = strdup(buf); return 0; } else if (!strcmp(name, "b")) { char buf[256]; sprintf(buf, "%s/default_viewer.swf", SWFDIR); viewer = strdup(buf); return 0; } else if (!strcmp(name, "L")) { if(val) { preloader = val; } else { systemf("ls %s/*_loader.swf", SWFDIR); if(!system_quiet) printf("\n"); exit(1); } return 1; } else if (!strcmp(name, "B")) { if(val) { viewer = val; } else { systemf("ls %s/*_viewer.swf", SWFDIR); if(!system_quiet) printf("\n"); exit(1); } return 1; } else if (!strcmp(name, "j")) { if(name[1]) { store_parameter("jpegquality", &name[1]); return 0; } else { store_parameter("jpegquality", val); return 1; } } else if (!strcmp(name, "V")) { printf("pdf2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); } else { fprintf(stderr, "Unknown option: -%s\n", name); exit(1); } return 0; } static struct options_t options[] = { {"h", "help"}, {"V", "version"}, {"o", "output"}, {"p", "pages"}, {"P", "password"}, {"v", "verbose"}, {"z", "zlib"}, {"i", "ignore"}, {"j", "jpegquality"}, {"s", "set"}, {"w", "samewindow"}, {"t", "stop"}, {"T", "flashversion"}, {"F", "fontdir"}, {"ff", "filter"}, {"b", "defaultviewer"}, {"l", "defaultloader"}, {"B", "viewer"}, {"L", "preloader"}, {"q", "quiet"}, {"S", "shapes"}, {"f", "fonts"}, {"G", "flatten"}, {"I", "info"}, {"Q", "maxtime"}, {"X", "width"}, {"Y", "height"}, {0,0} }; int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } int args_callback_command(char*name, char*val) { if (!filename) filename = name; else { if(outputname) { fprintf(stderr, "Error: Do you want the output to go to %s or to %s?", outputname, name); exit(1); } outputname = name; } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-options] file.pdf -o file.swf\n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); printf("-o , --output file.swf Direct output to file.swf. If file.swf contains '%%' (file%%.swf), then each page goes to a separate file.\n"); printf("-p , --pages range Convert only pages in range with range e.g. 1-20 or 1,4,6,9-11 or\n"); printf("-P , --password password Use password for deciphering the pdf.\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect.\n"); printf("-z , --zlib Use Flash 6 (MX) zlib compression.\n"); printf("-i , --ignore Allows pdf2swf to change the draw order of the pdf. This may make the generated\n"); printf("-j , --jpegquality quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)\n"); printf("-s , --set param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information.\n"); printf("-w , --samewindow When converting pdf hyperlinks, don't make the links open a new window. \n"); printf("-t , --stop Insert a stop() command in each page. \n"); printf("-T , --flashversion num Set Flash Version in the SWF header to num.\n"); printf("-F , --fontdir directory Add directory to the font search path.\n"); printf("-b , --defaultviewer Link a standard viewer to the swf file. \n"); printf("-l , --defaultloader Link a standard preloader to the swf file which will be displayed while the main swf is loading.\n"); printf("-B , --viewer filename Link viewer filename to the swf file. \n"); printf("-L , --preloader filename Link preloader filename to the swf file. \n"); printf("-q , --quiet Suppress normal messages. Use -qq to suppress warnings, also.\n"); printf("-S , --shapes Don't use SWF Fonts, but store everything as shape.\n"); printf("-f , --fonts Store full fonts in SWF. (Don't reduce to used characters).\n"); printf("-G , --flatten Remove as many clip layers from file as possible. \n"); printf("-I , --info Don't do actual conversion, just display a list of all pages in the PDF.\n"); printf("-Q , --maxtime n Abort conversion after n seconds. Only available on Unix.\n"); printf("\n"); } float getRate(char*filename) { int fi; SWF swf; fi = open(filename,O_RDONLY|O_BINARY); if(fi<0) { char buffer[256]; sprintf(buffer, "Couldn't open %s", filename); perror(buffer); exit(1); } if(swf_ReadSWF(fi,&swf) < 0) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(fi); exit(1); } swf_FreeTags(&swf); return swf.frameRate / 256.0; } void show_info(gfxsource_t*driver, char*filename) { gfxdocument_t* pdf = driver->open(driver, filename); int pagenr; FILE*fo=0; if(!pdf) { msg(" Couldn't open %s", filename); exit(1); } if(outputname) { fo = fopen(outputname, "wb"); if(!fo) { perror(outputname);exit(1);; } } else { fo = stdout; } for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++) { gfxpage_t*page = pdf->getpage(pdf,pagenr); if(is_in_range(pagenr, pagerange)) { fprintf(fo, "page=%d width=%.2f height=%.2f\n", pagenr, page->width, page->height); } } pdf->destroy(pdf); } static gfxdevice_t swf,wrap,rescale; gfxdevice_t*create_output_device() { gfxdevice_swf_init(&swf); /* set up filter chain */ out = &swf; if(flatten) { gfxdevice_removeclippings_init(&wrap, &swf); out = &wrap; } if(maxwidth || maxheight) { gfxdevice_rescale_init(&rescale, out, maxwidth, maxheight, 0); out = &rescale; } if(filters) { gfxfilterchain_t*chain = gfxfilterchain_parse(filters); if(!chain) { fprintf(stderr, "Unable to parse filters: %s\n", filters); exit(1); } out = gfxfilterchain_apply(chain, out); gfxfilterchain_destroy(chain); } /* pass global parameters to output device */ parameter_t*p = device_config; while(p) { out->setparameter(out, p->name, p->value); p = p->next; } return out; } int main(int argn, char *argv[]) { int ret; char buf[256]; int numfonts = 0; int t; char t1searchpath[1024]; int nup_pos = 0; int x,y; int one_file_per_page = 0; initLog(0,-1,0,0,-1,loglevel); /* not needed anymore since fonts are embedded if(installPath) { fontpaths[fontpathpos++] = concatPaths(installPath, "fonts"); }*/ #ifdef HAVE_SRAND48 srand48(time(0)*getpid()); #else #ifdef HAVE_SRAND srand(time(0)*getpid()); #endif #endif processargs(argn, argv); driver = gfxsource_pdf_create(); /* pass global parameters to PDF driver*/ parameter_t*p = device_config; while(p) { driver->setparameter(driver, p->name, p->value); p = p->next; } if(!filename) { fprintf(stderr, "Please specify an input file\n"); exit(1); } if (!info_only) { if(!outputname) { if(filename) { outputname = stripFilename(filename, ".swf"); msg(" Output filename not given. Writing to %s", outputname); } } if(!outputname) { fprintf(stderr, "Please use -o to specify an output file\n"); exit(1); } } // test if the page range is o.k. is_in_range(0x7fffffff, pagerange); if (!filename) { args_callback_usage(argv[0]); exit(0); } char fullname[256]; if(password && *password) { sprintf(fullname, "%s|%s", filename, password); filename = fullname; } if(pagerange) driver->setparameter(driver, "pages", pagerange); /* add fonts */ for(t=0;tsetparameter(driver, "fontdir", fontpaths[t]); } if(info_only) { show_info(driver, filename); return 0; } char*u = 0; if((u = strchr(outputname, '%'))) { if(strchr(u+1, '%') || strchr(outputname, '%')!=u) { msg(" only one %% allowed in filename\n"); return 1; } if(preloader || viewer) { msg(" -b/-l/-B/-L not supported together with %% in filename\n"); return 1; } msg(" outputting one file per page"); one_file_per_page = 1; char*pattern = (char*)malloc(strlen(outputname)+2); /* convert % to %d */ int l = u-outputname+1; memcpy(pattern, outputname, l); pattern[l]='d'; strcpy(pattern+l+1, outputname+l); outputname = pattern; } gfxdocument_t* pdf = driver->open(driver, filename); if(!pdf) { msg(" Couldn't open %s", filename); exit(1); } /* pass global parameters document */ p = device_config; while(p) { pdf->setparameter(pdf, p->name, p->value); p = p->next; } struct mypage_t { int x; int y; gfxpage_t*page; } pages[4]; int pagenum = 0; int frame = 1; int pagenr; for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++) { if(is_in_range(pagenr, pagerange)) { char mapping[80]; sprintf(mapping, "%d:%d", pagenr, frame); pdf->setparameter(pdf, "pagemap", mapping); pagenum++; } if(pagenum == xnup*ynup || (pagenr == pdf->num_pages && pagenum>1)) { pagenum = 0; frame++; } } if(pagerange && !pagenum && frame==1) { fprintf(stderr, "No pages in range %s", pagerange); exit(1); } pagenum = 0; gfxdevice_t*out = create_output_device();; pdf->prepare(pdf, out); for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++) { if(is_in_range(pagenr, pagerange)) { gfxpage_t* page = pages[pagenum].page = pdf->getpage(pdf, pagenr); pages[pagenum].x = 0; pages[pagenum].y = 0; pages[pagenum].page = page; pagenum++; } if(pagenum == xnup*ynup || (pagenr == pdf->num_pages && pagenum>1)) { int t; int xmax[xnup], ymax[xnup]; int x,y; int width=0, height=0; memset(xmax, 0, xnup*sizeof(int)); memset(ymax, 0, ynup*sizeof(int)); for(y=0;ywidth > xmax[x]) xmax[x] = (int)pages[t].page->width; if(pages[t].page->height > ymax[y]) ymax[y] = (int)pages[t].page->height; } for(x=0;xstartpage(out,clip_x2 - clip_x1, clip_y2 - clip_y1); } else { out->startpage(out,width,height); } for(t=0;t0?xmax[x-1]:0; int ypos = y>0?ymax[y-1]:0; msg(" Render (%d,%d) move:%d/%d\n", (int)(pages[t].page->width + xpos), (int)(pages[t].page->height + ypos), xpos, ypos); pages[t].page->rendersection(pages[t].page, out, custom_move? move_x : xpos, custom_move? move_y : ypos, custom_clip? clip_x1 : 0 + xpos, custom_clip? clip_y1 : 0 + ypos, custom_clip? clip_x2 : pages[t].page->width + xpos, custom_clip? clip_y2 : pages[t].page->height + ypos); } out->endpage(out); for(t=0;tdestroy(pages[t].page); } pagenum = 0; if(one_file_per_page) { gfxresult_t*result = out->finish(out);out=0; char buf[1024]; sprintf(buf, outputname, pagenr); if(result->save(result, buf) < 0) { return 1; } result->destroy(result);result=0; out = create_output_device();; pdf->prepare(pdf, out); msg(" Writing SWF file %s", buf); } } } if(one_file_per_page) { // remove empty device gfxresult_t*result = out->finish(out);out=0; result->destroy(result);result=0; } else { gfxresult_t*result = out->finish(out); msg(" Writing SWF file %s", outputname); if(result->save(result, outputname) < 0) { exit(1); } int width = (int)(ptroff_t)result->get(result, "width"); int height = (int)(ptroff_t)result->get(result, "height"); result->destroy(result);result=0; if(preloader || viewer) { const char*zip = ""; if(zlib) { zip = "-z"; } if(!preloader && viewer) { systemf("swfcombine %s -X %d -Y %d \"%s\" viewport=\"%s\" -o \"%s\"",zip,width,height, viewer, outputname, outputname); if(!system_quiet) printf("\n"); } if(preloader && !viewer) { msg(" --preloader option without --viewer option doesn't make very much sense."); ret = systemf("swfcombine %s -Y %d -X %d %s/PreLoaderTemplate.swf loader=\"%s\" movie=\"%s\" -o \"%s\"",zip,width,height, SWFDIR, preloader, outputname, outputname); if(!system_quiet) printf("\n"); } if(preloader && viewer) { #ifdef HAVE_MKSTEMP char tmpname[] = "__swf__XXXXXX"; mkstemp(tmpname); #else char*tmpname = "__tmp__.swf"; #endif systemf("swfcombine \"%s\" viewport=%s -o %s", viewer, outputname, tmpname); systemf("swfcombine %s -X %d -Y %d -r %f %s/PreLoaderTemplate.swf loader=%s movie=%s -o \"%s\"",zip,width,height, getRate(preloader), SWFDIR, preloader, tmpname, outputname); systemf("rm %s", tmpname); } } } pdf->destroy(pdf); driver->destroy(driver); /* free global parameters */ p = device_config; while(p) { parameter_t*next = p->next; if(p->name) free((void*)p->name);p->name = 0; if(p->value) free((void*)p->value);p->value =0; p->next = 0;free(p); p = next; } if(filters) { free(filters); } return 0; } swftools_0.9.2+git20130725.orig/src/swfbytes.10000644000175000017500000000105412216332640020042 0ustar gawaingawain.TH swfbytes "1" "April 2012" "swfbytes" "swftools" .SH NAME swfbytes \- Tool for simplifying the hex-editing of SWF files. .SH Synopsis .B swfbytes [\-v] file.swf > file.hexdump .PP .B swfbytes file.hexdump .SH DESCRIPTION With this tool and a text editor, you can perform some basic editing operations on SWF files. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print help and exit .TP \fB\-v\fR, \fB\-\-verbose\fR Be more verbose .TP \fB\-V\fR, \fB\-\-version\fR Print program version and exit .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfc.10000644000175000017500000000143612216332640017142 0ustar gawaingawain.TH swfc "1" "April 2012" "swfc" "swftools" .SH NAME swfc \- compile .sc files to swf. .SH Synopsis .B swfc [\-o file.swf] file.sc .SH DESCRIPTION Compiles a file written in sc (SWF Script) into a number of SWF files. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-C\fR, \fB\-\-cgi\fR Output to stdout (for use in CGI environments) .TP \fB\-v\fR, \fB\-\-verbose\fR Increase verbosity. Use more than one \fB-v\fR for greater effect. .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Specify output file (Default: output.swf). This affects only the parts of the .sc file which haven't specified an output file themselves. .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/pdf2pdf.c0000644000175000017500000001506712216332640017614 0ustar gawaingawain/* pdf2pdf.c main routine for pdf2pdf(1) Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #include #include #include #include #include #include "../config.h" #include "../lib/args.h" #include "../lib/os.h" #include "../lib/gfxsource.h" #include "../lib/gfxdevice.h" #include "../lib/gfxpoly.h" #include "../lib/devices/rescale.h" #include "../lib/devices/polyops.h" #include "../lib/devices/pdf.h" #include "../lib/readers/image.h" #include "../lib/readers/swf.h" #include "../lib/pdf/pdf.h" #include "../lib/log.h" static gfxsource_t*driver = 0; static int maxwidth = 0; static int maxheight = 0; static char * outputname = 0; static int loglevel = 3; static char * pagerange = 0; static char * filename = 0; int args_callback_option(char*name,char*val) { if (!strcmp(name, "o")) { outputname = val; return 1; } else if (!strcmp(name, "v")) { loglevel ++; setConsoleLogging(loglevel); return 0; } else if (!strcmp(name, "q")) { loglevel --; setConsoleLogging(loglevel); return 0; } else if (name[0]=='p') { do { name++; } while(*name == 32 || *name == 13 || *name == 10 || *name == '\t'); if(*name) { pagerange = name; return 0; } pagerange = val; return 1; } else if (!strcmp(name, "s")) { if(!driver) { fprintf(stderr, "Specify input file before -s\n"); exit(1); } char*s = strdup(val); char*c = strchr(s, '='); if(c && *c && c[1]) { *c = 0; c++; driver->setparameter(driver, s,c); } else { driver->setparameter(driver, s,"1"); } free(s); return 1; } else if (!strcmp(name, "X")) { maxwidth = atoi(val); return 1; } else if (!strcmp(name, "Y")) { maxheight = atoi(val); return 1; } else if (!strcmp(name, "V")) { printf("pdf2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); } else { fprintf(stderr, "Unknown option: -%s\n", name); exit(1); } return 0; } static struct options_t options[] = { {"h", "help"}, {"v", "verbose"}, {"p", "pages"}, {"X", "width"}, {"Y", "height"}, {"s", "set"}, {"o", "output"}, {"V", "version"}, {0,0} }; int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } int args_callback_command(char*name, char*val) { if (!filename) { filename = name; if(strstr(filename, ".pdf") || strstr(filename, ".PDF")) { msg(" Treating file as PDF"); driver = gfxsource_pdf_create(); } else if(strstr(filename, ".swf") || strstr(filename, ".SWF")) { msg(" Treating file as SWF"); driver = gfxsource_swf_create(); } else if(strstr(filename, ".jpg") || strstr(filename, ".JPG") || strstr(filename, ".png") || strstr(filename, ".PNG")) { msg(" Treating file as Image"); driver = gfxsource_image_create(); } else { driver = gfxsource_pdf_create(); } } else { if(outputname) { fprintf(stderr, "Error: Do you want the output to go to %s or to %s?", outputname, name); exit(1); } outputname = name; } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s \n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect.\n"); printf("-p , --pages Pages to convert\n"); printf("-X , --width Make sure the output pdf is pixels wide\n"); printf("-Y , --height Make sure the output pdf is pixels high\n"); printf("-s , --set = Set to \n"); printf("-o , --output Write output to file .\n"); printf("-V , --version Print version info and exit\n"); printf("\n"); } int main(int argn, char *argv[]) { processargs(argn, argv); initLog(0,-1,0,0,-1,loglevel); if(!filename) { fprintf(stderr, "Please specify an input file\n"); exit(1); } if(!outputname) { if(filename) { outputname = stripFilename(filename, ".print.pdf"); msg(" Output filename not given. Writing to %s", outputname); } } if(!outputname) { fprintf(stderr, "Please use -o to specify an output file\n"); exit(1); } is_in_range(0x7fffffff, pagerange); if(pagerange) driver->setparameter(driver, "pages", pagerange); if(!filename) { args_callback_usage(argv[0]); exit(0); } gfxdocument_t* doc = driver->open(driver, filename); //doc->setparameter(doc, "drawonlyshapes", "1"); doc->setparameter(doc, "disable_polygon_conversion", "1"); if(!doc) { msg(" Couldn't open %s", filename); exit(1); } gfxdevice_t _out,*out=&_out; gfxdevice_pdf_init(out); /*gfxdevice_t wrap; gfxdevice_removeclippings_init(&wrap, out); out = &wrap;*/ gfxdevice_t rescale; if(maxwidth || maxheight) { gfxdevice_rescale_init(&rescale, out, maxwidth, maxheight, 0); out = &rescale; out->setparameter(out, "keepratio", "1"); } int pagenr; for(pagenr = 1; pagenr <= doc->num_pages; pagenr++) { if(is_in_range(pagenr, pagerange)) { gfxpage_t* page = doc->getpage(doc, pagenr); out->startpage(out, page->width, page->height); page->render(page, out); out->endpage(out); page->destroy(page); } } gfxresult_t*result = out->finish(out); if(result) { if(result->save(result, outputname) < 0) { exit(1); } result->destroy(result); } doc->destroy(doc); driver->destroy(driver); return 0; } swftools_0.9.2+git20130725.orig/src/swfc.c0000644000175000017500000037415212216332640017234 0ustar gawaingawain/* swfc.c Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include #include #include #include #include #include "../config.h" #include "../lib/rfxswf.h" #include "../lib/drawer.h" #include "../lib/log.h" #include "../lib/args.h" #include "../lib/q.h" #include "../lib/mp3.h" #include "../lib/wav.h" #include "parser.h" #include "../lib/png.h" #include "swfc-feedback.h" #include "swfc-interpolation.h" #include "swfc-history.h" //#define DEBUG static char * outputname = "output.swf"; static int verbose = 2; static int optimize = 0; static int override_outputname = 0; static int do_cgi = 0; static int change_sets_all = 0; static int do_exports = 0; static char * mainclass = ""; static struct options_t options[] = { {"h", "help"}, {"V", "version"}, {"C", "cgi"}, {"v", "verbose"}, {"o", "output"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfc - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { outputname = val; override_outputname = 1; return 1; } else if(!strcmp(name, "O")) { optimize = 1; return 0; } else if(!strcmp(name, "C")) { do_cgi = 1; return 0; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-o file.swf] file.sc\n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); printf("-C , --cgi Output to stdout (for use in CGI environments)\n"); printf("-v , --verbose Increase verbosity. \n"); printf("-o , --output Set output file to .\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } static struct token_t* file; static int pos; static char*text; static int textlen; static int type; static void readToken() { type = file[pos].type; if(type == END) { syntaxerror("unexpected end of file"); } text = file[pos].text; textlen = strlen(text); line = file[pos].line; column = file[pos].column; pos++; //printf("---> %d(%s) %s\n", type, type_names[type], text); } static void pushBack() { int p; if(!pos) syntaxerror("internal error 3"); pos--; p = pos; if(p) p--; text = file[p].text; textlen = strlen(text); type = file[p].type; line = file[p].line; column = file[p].column; } static int noMoreTokens() { if(file[pos].type == END) return 1; return 0; } enum { PT_PUT = 0, PT_CHANGE = 1, PT_SCHANGE = 2, PT_MOVE = 3, PT_SMOVE = 4, PT_SWEEP = 5, PT_JUMP = 6, PT_STARTCLIP = 7, PT_BUTTON = 8 }; // ------------------------------ swf routines ---------------------------- struct _character; static struct level { int type; //0=swf, 1=sprite, 2=clip, 3=button /* for swf (0): */ SWF*swf; char*filename; char as3; /* for sprites (1): */ TAG*tag; U16 id; char*name; char*as3name; U16 olddepth; int oldframe; dict_t oldinstances; SRECT oldrect; TAG* cut; SRECT scalegrid; } stack[256]; static int stackpos = 0; static dict_t characters; static dict_t images; static dict_t textures; static dict_t outlines; static dict_t gradients; static dict_t filters; static dict_t interpolations; static char idmap[65536]; static TAG*tag = 0; //current tag static int id; //current character id static int currentframe; //current frame in current level static SRECT currentrect; //current bounding box in current level static U16 currentdepth; static dict_t instances; static dict_t fonts; static dict_t sounds; static dict_t fontUsage; typedef struct _parameters { int x,y; float scalex, scaley; CXFORM cxform; float rotate; float shear; SPOINT pivot; SPOINT pin; U8 blendmode; //not interpolated FILTERLIST* filters; U16 set; // bits indicating wether a parameter was set in the c_placement function U16 flags; // bits to toggle anything you may care to implement as a toggle int noinstancename; } parameters_t; typedef struct _character { TAG*definingTag; U16 id; SRECT size; } character_t; typedef struct _instance { character_t*character; U16 depth; parameters_t parameters; history_t* history; } instance_t; typedef struct _outline { SHAPE* shape; SRECT bbox; } outline_t; typedef struct _gradient { GRADIENT gradient; char radial; int rotate; } gradient_t; typedef struct _filter { FILTER filter; } filter_t; typedef struct _texture { FILLSTYLE fs; } texture_t; char* interpolationFunctions[] = {"linear", \ "quadIn", "quadOut", "quadInOut", \ "cubicIn", "cubicOut", "cubicInOut", \ "quartIn", "quartOut", "quartInOut", \ "quintIn", "quintOut", "quintInOut", \ "circleIn", "circleOut", "circleInOut", \ "exponentialIn", "exponentialOut", "exponentialInOut", \ "sineIn", "sineOut", "sineInOut", \ "elasticIn", "elasticOut", "elasticInOut", \ "backIn", "backOut", "backInOut", \ "bounceIn", "bounceOut", "bounceInOut", \ "fastBounceIn", "fastBounceOut", "fastBounceInOut"}; static void character_init(character_t*c) { memset(c, 0, sizeof(character_t)); } static character_t* character_new() { character_t*c; c = (character_t*)malloc(sizeof(character_t)); character_init(c); return c; } static void instance_init(instance_t*i) { memset(i, 0, sizeof(instance_t)); i->history = history_new(); } static void instance_free(instance_t* i) { history_free(i->history); free(i); } static instance_t* instance_new() { instance_t*c; c = (instance_t*)malloc(sizeof(instance_t)); instance_init(c); return c; } static void free_instance(void* i) { instance_free((instance_t*)i); } static void free_font(void* f) { swf_FontFree((SWFFONT*)f); } static void gradient_free(GRADIENT* grad) { free(grad->ratios); free(grad->rgba); free(grad); } static void free_gradient(void* grad) { gradient_free((GRADIENT*) grad); } static void outline_free(outline_t* o) { free(o->shape->data); free(o->shape); free(o); } static void free_outline(void* o) { outline_free((outline_t*)o); } static void freeDictionaries() { dict_free_all(&instances, 1, free_instance); dict_free_all(&characters, 1, free); dict_free_all(&images, 1, free); dict_free_all(&textures, 1, free); dict_free_all(&outlines, 1, free_outline); dict_free_all(&gradients, 1, free_gradient); dict_free_all(&filters, 1, free); dict_free_all(&fonts, 1, free_font); dict_free_all(&sounds, 1, free); dict_free_all(&interpolations, 1, free); cleanUp = 0; } static void freeFontDictionary() { dict_free_all(&fonts, 1, free_font); } static void incrementid() { while(id<65536 && idmap[id]) { id++; } if(id>=65536) syntaxerror("Out of character ids."); idmap[id] = 1; } static void s_addcharacter(const char*name, U16 id, TAG*ctag, SRECT r) { if(dict_lookup(&characters, name)) syntaxerror("character %s defined twice", name); character_t* c = character_new(); c->definingTag = ctag; c->id = id; c->size = r; dict_put(&characters, name, c); if(do_exports) { tag = swf_InsertTag(tag, ST_NAMECHARACTER); swf_SetU16(tag, id); swf_SetString(tag, name); tag = swf_InsertTag(tag, ST_EXPORTASSETS); swf_SetU16(tag, 1); swf_SetU16(tag, id); swf_SetString(tag, name); } } static void s_addimage(const char*name, U16 id, TAG*ctag, SRECT r) { if(dict_lookup(&images, name)) syntaxerror("image %s defined twice", name); character_t* c = character_new(); c->definingTag = ctag; c->id = id; c->size = r; dict_put(&images, name, c); } static instance_t* s_addinstance(const char*name, character_t*c, U16 depth) { if(dict_lookup(&instances, name)) syntaxerror("object %s defined twice", name); instance_t* i = instance_new(); i->character = c; i->depth = depth; //swf_GetMatrix(0, &i->matrix); dict_put(&instances, name, i); return i; } static void parameters_clear(parameters_t*p) { p->x = 0; p->y = 0; p->scalex = 1.0; p->scaley = 1.0; p->pin.x = 0; //1?? p->pin.y = 0; p->pivot.x = 0; p->pivot.y = 0; p->rotate = 0; p->shear = 0; p->blendmode = 0; p->filters = 0; p->noinstancename = 0; swf_GetCXForm(0, &p->cxform, 1); } static void makeMatrix(MATRIX*m, parameters_t*p) { SPOINT h; float sx,r1,r0,sy; /* /sx r1\ /x\ * \r0 sy/ \y/ */ sx = p->scalex*cos(p->rotate/360*2*M_PI); r1 = -p->scalex*sin(p->rotate/360*2*M_PI)+sx*p->shear; r0 = p->scaley*sin(p->rotate/360*2*M_PI); sy = p->scaley*cos(p->rotate/360*2*M_PI)+r0*p->shear; m->sx = (int)(sx*65536+0.5); m->r1 = (int)(r1*65536+0.5); m->r0 = (int)(r0*65536+0.5); m->sy = (int)(sy*65536+0.5); m->tx = m->ty = 0; h = swf_TurnPoint(p->pin, m); m->tx = p->x - h.x; m->ty = p->y - h.y; } static MATRIX s_instancepos(SRECT rect, parameters_t*p) { MATRIX m; SRECT r; makeMatrix(&m, p); r = swf_TurnRect(rect, &m); if(currentrect.xmin == 0 && currentrect.ymin == 0 && currentrect.xmax == 0 && currentrect.ymax == 0) currentrect = r; else swf_ExpandRect2(¤trect, &r); return m; } void initBuiltIns() { interpolation_t* new; new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_LINEAR; dict_put(&interpolations, "linear", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUAD_IN; new->slope = 0; dict_put(&interpolations, "quadIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUAD_OUT; new->slope = 0; dict_put(&interpolations, "quadOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUAD_IN_OUT; new->slope = 0; dict_put(&interpolations, "quadInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CUBIC_IN; new->slope = 0; dict_put(&interpolations, "cubicIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CUBIC_OUT; new->slope = 0; dict_put(&interpolations, "cubicOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CUBIC_IN_OUT; new->slope = 0; dict_put(&interpolations, "cubicInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUART_IN; new->slope = 0; dict_put(&interpolations, "quartIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUART_OUT; new->slope = 0; dict_put(&interpolations, "quartOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUART_IN_OUT; new->slope = 0; dict_put(&interpolations, "quartInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUINT_IN; new->slope = 0; dict_put(&interpolations, "quintIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUINT_OUT; new->slope = 0; dict_put(&interpolations, "quintOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_QUINT_IN_OUT; new->slope = 0; dict_put(&interpolations, "quintInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CIRCLE_IN; dict_put(&interpolations, "circleIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CIRCLE_OUT; dict_put(&interpolations, "circleOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_CIRCLE_IN_OUT; dict_put(&interpolations, "circleInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_EXPONENTIAL_IN; dict_put(&interpolations, "exponentialIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_EXPONENTIAL_OUT; dict_put(&interpolations, "exponentialOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_EXPONENTIAL_IN_OUT; dict_put(&interpolations, "exponentialInOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_SINE_IN; dict_put(&interpolations, "sineIn", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_SINE_OUT; dict_put(&interpolations, "sineOut", new); new = (interpolation_t*)malloc(sizeof(interpolation_t)); new->function = IF_SINE_IN_OUT; dict_put(&interpolations, "sineInOut", new); RGBA c; memset(&c, 0, sizeof(RGBA)); gradient_t* noGradient = (gradient_t*)malloc(sizeof(gradient_t)); noGradient->gradient.ratios = (U8*)malloc(16 * sizeof(U8)); noGradient->gradient.rgba = (RGBA*)malloc(16 * sizeof(RGBA)); noGradient->gradient.num = 2; noGradient->gradient.rgba[0] = c; noGradient->gradient.ratios[0] = 0; noGradient->gradient.rgba[1] = c; noGradient->gradient.ratios[1] = 255; noGradient->radial = 0; noGradient->rotate = 0; dict_put(&gradients, "no_gradient", noGradient); noFilters = 0; // put a no_filters entry in the filters dictionary to provoce a message when a user tries // to define a no_filters filter. The real filter=no_filters case is handled in parseFilters. FILTER* dummy = (FILTER*)malloc(sizeof(FILTER)); dict_put(&filters, "no_filters", dummy); noBlur = (FILTER_BLUR*) swf_NewFilter(FILTERTYPE_BLUR); noBlur->passes = 1; dict_put(&filters, "no_blur", noBlur); noBevel = (FILTER_BEVEL*) swf_NewFilter(FILTERTYPE_BEVEL); noBevel->passes = 1; noBevel->composite = 1; dict_put(&filters, "no_bevel", noBevel); noDropshadow = (FILTER_DROPSHADOW*) swf_NewFilter(FILTERTYPE_DROPSHADOW); noDropshadow->passes = 1; noDropshadow->composite = 1; dict_put(&filters, "no_dropshadow", noDropshadow); noGradientGlow = (FILTER_GRADIENTGLOW*) swf_NewFilter(FILTERTYPE_GRADIENTGLOW); noGradientGlow->passes = 1; noGradientGlow->composite = 1; noGradientGlow->gradient = &noGradient->gradient; dict_put(&filters, "no_gradientglow", noGradientGlow); } void s_swf(const char*name, SRECT r, int version, int fps, int compress, RGBA background) { if(stackpos) syntaxerror(".swf blocks can't be nested"); if(stackpos==sizeof(stack)/sizeof(stack[0])) syntaxerror("too many levels of recursion"); SWF*swf = (SWF*)malloc(sizeof(SWF)); memset(swf, 0, sizeof(swf)); swf->fileVersion = version; swf->movieSize = r; swf->frameRate = fps; swf->firstTag = tag = swf_InsertTag(0, ST_SETBACKGROUNDCOLOR); swf->compressed = compress; swf_SetRGB(tag,&background); dict_init(&characters, 16); dict_init(&images, 16); dict_init(&textures, 16); dict_init(&outlines, 16); dict_init(&gradients, 16); dict_init(&filters, 16); dict_init(&instances, 16); dict_init(&sounds, 16); dict_init(&interpolations, 16); initBuiltIns(); cleanUp = &freeDictionaries; memset(&stack[stackpos], 0, sizeof(stack[0])); stack[stackpos].type = 0; stack[stackpos].filename = strdup(name); stack[stackpos].swf = swf; stack[stackpos].oldframe = -1; stackpos++; currentframe = 0; memset(¤trect, 0, sizeof(currentrect)); currentdepth = 1; memset(idmap, 0, sizeof(idmap)); idmap[0]=1; //main movie has ID 0 incrementid(); } void s_sprite(const char*name, SRECT*scalegrid, const char*as3name) { tag = swf_InsertTag(tag, ST_DEFINESPRITE); swf_SetU16(tag, id); //id swf_SetU16(tag, 0); //frames memset(&stack[stackpos], 0, sizeof(stack[0])); stack[stackpos].type = 1; stack[stackpos].oldframe = currentframe; stack[stackpos].olddepth = currentdepth; stack[stackpos].oldrect = currentrect; stack[stackpos].oldinstances = instances; stack[stackpos].tag = tag; stack[stackpos].id = id; stack[stackpos].name = strdup(name); stack[stackpos].as3name = strdup(as3name); if(scalegrid) { stack[stackpos].scalegrid = *scalegrid; } else { memset(&stack[stackpos].scalegrid, 0, sizeof(SRECT)); } /* FIXME: those four fields should be bundled together */ dict_init(&instances, 16); currentframe = 0; currentdepth = 1; memset(¤trect, 0, sizeof(currentrect)); stackpos++; incrementid(); } typedef struct _buttonrecord { U16 id; MATRIX matrix; CXFORM cxform; char set; } buttonrecord_t; typedef struct _button { int endofshapes; int nr_actions; buttonrecord_t records[4]; } button_t; static button_t mybutton; void s_button(const char*name, const char*as3name) { tag = swf_InsertTag(tag, ST_DEFINEBUTTON2); swf_SetU16(tag, id); //id swf_ButtonSetFlags(tag, 0); //menu=no memset(&mybutton, 0, sizeof(mybutton)); memset(&stack[stackpos], 0, sizeof(stack[0])); stack[stackpos].type = 3; stack[stackpos].tag = tag; stack[stackpos].id = id; stack[stackpos].name = strdup(name); stack[stackpos].as3name = strdup(as3name); stack[stackpos].oldrect = currentrect; memset(¤trect, 0, sizeof(currentrect)); stackpos++; incrementid(); } void s_buttonput(const char*character, const char*as, parameters_t p) { character_t* c = dict_lookup(&characters, character); MATRIX m; int flags = 0; const char*o = as,*s = as; buttonrecord_t r; if(!stackpos || (stack[stackpos-1].type != 3)) { syntaxerror(".show may only appear in .button"); } if(!c) { syntaxerror("character %s not known (in .shape %s)", character, character); } if(mybutton.endofshapes) { syntaxerror("a .do may not precede a .show", character, character); } m = s_instancepos(c->size, &p); r.id = c->id; r.matrix = m; r.cxform = p.cxform; r.set = 1; while(1) { if(*s==',' || *s==0) { if(!strncmp(o,"idle",s-o)) {mybutton.records[0]=r;o=s+1;} else if(!strncmp(o,"shape",s-o)) {mybutton.records[0]=r;o=s+1;} else if(!strncmp(o,"hover",s-o)) {mybutton.records[1]=r;o=s+1;} else if(!strncmp(o,"pressed",s-o)) {mybutton.records[2]=r;o=s+1;} else if(!strncmp(o,"area",s-o)) {mybutton.records[3]=r;o=s+1;} else syntaxerror("unknown \"as\" argument: \"%s\"", strdup_n(o,s-o)); } if(!*s) break; s++; } } static void setbuttonrecords(TAG*tag) { int flags[] = {BS_UP,BS_OVER,BS_DOWN,BS_HIT}; if(!mybutton.endofshapes) { int t; if(!mybutton.records[3].set) { memcpy(&mybutton.records[3], &mybutton.records[0], sizeof(buttonrecord_t)); } for(t=0;t<4;t++) { if(mybutton.records[t].set) { swf_ButtonSetRecord(tag,flags[t],mybutton.records[t].id,1,&mybutton.records[t].matrix,&mybutton.records[t].cxform); } } swf_SetU8(tag,0); // end of button records mybutton.endofshapes = 1; } } void s_buttonaction(int flags, const char*action) { ActionTAG* a = 0; if(flags==0) { return; } if(!stackpos || !stack[stackpos-1].tag || stack[stackpos-1].tag->id != ST_DEFINEBUTTON2) { syntaxerror("Need to be inside a button for .on_* commands"); } setbuttonrecords(stack[stackpos-1].tag); a = swf_ActionCompile(text, stack[0].swf->fileVersion); if(!a) { syntaxerror("Couldn't compile ActionScript"); } swf_ButtonSetCondition(stack[stackpos-1].tag, flags); swf_ActionSet(stack[stackpos-1].tag, a); mybutton.nr_actions++; swf_ActionFree(a); } static void setactionend(TAG*tag) { if(!mybutton.nr_actions) { /* no actions means we didn't have an actionoffset, which means we can't signal the end of the buttonaction records, so, *sigh*, we have to insert a dummy record */ swf_SetU16(tag, 0); //offset swf_SetU16(tag, 0); //condition swf_SetU8(tag, 0); //action } } static void s_endButton() { SRECT r; setbuttonrecords(stack[stackpos-1].tag); setactionend(stack[stackpos-1].tag); stackpos--; swf_ButtonPostProcess(stack[stackpos].tag, mybutton.nr_actions); r = currentrect; tag = stack[stackpos].tag; currentrect = stack[stackpos].oldrect; s_addcharacter(stack[stackpos].name, stack[stackpos].id, stack[stackpos].tag, r); if(*stack[stackpos].as3name) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, stack[stackpos].id); swf_SetString(tag, stack[stackpos].as3name); } free(stack[stackpos].name); } TAG* removeFromTo(TAG*from, TAG*to) { TAG*save = from->prev; while(from!=to) { TAG*next = from->next; if(swf_isAllowedSpriteTag(from)) swf_DeleteTag(0, from); from = next; } save->next = 0; return save; } static int parametersChange(history_t* history, int frame) { int willChange = 0; willChange = willChange || history_change(history, frame, "x"); willChange = willChange || history_change(history, frame, "y"); willChange = willChange || history_change(history, frame, "scalex"); willChange = willChange || history_change(history, frame, "scaley"); willChange = willChange || history_change(history, frame, "cxform.r0"); willChange = willChange || history_change(history, frame, "cxform.g0"); willChange = willChange || history_change(history, frame, "cxform.b0"); willChange = willChange || history_change(history, frame, "cxform.a0"); willChange = willChange || history_change(history, frame, "cxform.r1"); willChange = willChange || history_change(history, frame, "cxform.g1"); willChange = willChange || history_change(history, frame, "cxform.b1"); willChange = willChange || history_change(history, frame, "cxform.a1"); willChange = willChange || history_change(history, frame, "rotate"); willChange = willChange || history_change(history, frame, "shear"); willChange = willChange || history_change(history, frame, "pivot.x"); willChange = willChange || history_change(history, frame, "pivot.y"); willChange = willChange || history_change(history, frame, "pin.x"); willChange = willChange || history_change(history, frame, "pin.y"); willChange = willChange || history_change(history, frame, "blendmode"); willChange = willChange || history_changeFilter(history, frame); return willChange; } static void free_filterlist(FILTERLIST* f_list) { int i; for (i = 0; i < f_list->num; i++) { if(f_list->filter[i]->type == FILTERTYPE_GRADIENTGLOW) gradient_free(((FILTER_GRADIENTGLOW*)f_list->filter[i])->gradient); free(f_list->filter[i]); } free(f_list); } static void readParameters(history_t* history, parameters_t* p, int frame) { p->x = history_value(history, frame, "x"); p->y = history_value(history, frame, "y"); p->scalex = history_value(history, frame, "scalex"); p->scaley = history_value(history, frame, "scaley"); p->cxform.r0 = history_value(history, frame, "cxform.r0"); p->cxform.g0 = history_value(history, frame, "cxform.g0"); p->cxform.b0 = history_value(history, frame, "cxform.b0"); p->cxform.a0 = history_value(history, frame, "cxform.a0"); p->cxform.r1 = history_value(history, frame, "cxform.r1"); p->cxform.g1 = history_value(history, frame, "cxform.g1"); p->cxform.b1 = history_value(history, frame, "cxform.b1"); p->cxform.a1 = history_value(history, frame, "cxform.a1"); p->rotate = history_rotateValue(history, frame); p->shear = history_value(history, frame, "shear"); p->pivot.x = history_value(history, frame, "pivot.x"); p->pivot.y = history_value(history, frame, "pivot.y"); p->pin.x = history_value(history, frame, "pin.x"); p->pin.y = history_value(history, frame, "pin.y"); p->blendmode = history_value(history, frame, "blendmode"); p->filters = history_filterValue(history, frame); } void setPlacement(TAG*tag, U16 id, U16 depth, MATRIX m, const char*name, parameters_t*p, char move) { SWFPLACEOBJECT po; FILTERLIST flist; swf_GetPlaceObject(NULL, &po); po.id = id; po.depth = depth; po.matrix = m; po.cxform = p->cxform; po.name = (char*)name; po.move = move; if(move) po.id = 0; if(p->blendmode) { po.blendmode = p->blendmode; } if(p->filters) po.filters = p->filters; swf_SetPlaceObject(tag, &po); } static void writeInstance(void* _i) { instance_t*i = (instance_t*)_i; parameters_t p; MATRIX m; int frame = i->history->firstFrame; TAG* tag = i->history->firstTag; history_processFlags(i->history); while (tag && frame < currentframe) { frame++; while (tag && tag->id != ST_SHOWFRAME) tag = tag->next; if(parametersChange(i->history, frame)) { readParameters(i->history, &p, frame); m = s_instancepos(i->character->size, &p); if(p.blendmode || p.filters) tag = swf_InsertTag(tag, ST_PLACEOBJECT3); else tag = swf_InsertTag(tag, ST_PLACEOBJECT2); setPlacement(tag, 0, i->depth, m, 0, &p, 1); if(p.filters) free_filterlist(p.filters); } else if(tag) { tag = tag->next; } } } void dumpSWF(SWF*swf) { TAG* tag = swf->firstTag; printf("vvvvvvvvvvvvvvvvvvvvv\n"); while(tag) { printf("%8d %s\n", tag->len, swf_TagGetName(tag)); tag = tag->next; } printf("^^^^^^^^^^^^^^^^^^^^^\n"); } static void s_endSprite() { SRECT r = currentrect; stackpos--; instance_t *i; dict_foreach_value(&instances, writeInstance); if(stack[stackpos].cut) tag = removeFromTo(stack[stackpos].cut, tag); // the writeInstance loop above may have inserted tags after what used to be the current tag, // so let's make sure 'tag' point to the current tag again. while (tag->next) tag = tag->next; tag = swf_InsertTag(tag, ST_SHOWFRAME); tag = swf_InsertTag(tag, ST_END); tag = stack[stackpos].tag; swf_FoldSprite(tag); if(stack[stackpos].scalegrid.xmin | stack[stackpos].scalegrid.ymin | stack[stackpos].scalegrid.xmax | stack[stackpos].scalegrid.ymax) { tag = swf_InsertTag(tag, ST_DEFINESCALINGGRID); swf_SetU16(tag, stack[stackpos].id); swf_SetRect(tag, &stack[stackpos].scalegrid); } if(tag->next != 0) syntaxerror("internal error(7)"); /* TODO: before clearing, prepend "." to names and copy into old instances dict */ dict_free_all(&instances, 1, free_instance); currentframe = stack[stackpos].oldframe; currentrect = stack[stackpos].oldrect; currentdepth = stack[stackpos].olddepth; instances = stack[stackpos].oldinstances; s_addcharacter(stack[stackpos].name, stack[stackpos].id, stack[stackpos].tag, r); if(*stack[stackpos].as3name) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, stack[stackpos].id); swf_SetString(tag, stack[stackpos].as3name); } free(stack[stackpos].name); } static void s_endSWF() { int fi; SWF* swf; char*filename; char*mc=""; dict_foreach_value(&instances, writeInstance); if(stack[stackpos].cut) tag = removeFromTo(stack[stackpos].cut, tag); stackpos--; swf = stack[stackpos].swf; filename = stack[stackpos].filename; // the writeInstance loop above may have inserted tags after what used yo be the current tag, // so let's make sure 'tag' point to the current tag again. while (tag->next) tag = tag->next; //if(tag->prev && tag->prev->id != ST_SHOWFRAME) // tag = swf_InsertTag(tag, ST_SHOWFRAME); tag = swf_InsertTag(tag, ST_SHOWFRAME); if(stack[0].as3) { TAG*tag = swf->firstTag; tag = swf_InsertTag(tag, ST_DOABC); void*code = as3_getcode(); swf_WriteABC(tag, code); if(*mainclass) mc = mainclass; else if(as3_getglobalclass()) mc = as3_getglobalclass(); if(*mc) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, 0); swf_SetString(tag, mc); } else { warning("no global public MovieClip subclass"); } as3_destroy(); } tag = swf_InsertTag(tag, ST_END); swf_OptimizeTagOrder(swf); if(optimize) { swf_Optimize(swf); } if(!(swf->movieSize.xmax-swf->movieSize.xmin) || !(swf->movieSize.ymax-swf->movieSize.ymin)) { swf->movieSize = currentrect; /* "autocrop" */ } if(!(swf->movieSize.xmax-swf->movieSize.xmin) || !(swf->movieSize.ymax-swf->movieSize.ymin)) { swf->movieSize.xmax += 20; /* 1 by 1 pixels */ swf->movieSize.ymax += 20; warning("Empty bounding box for movie"); } if(do_cgi || !strcmp(filename, "-")) fi = fileno(stdout); else fi = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if(fi<0) { syntaxerror("couldn't create output file %s", filename); } if(do_cgi) {if(swf_WriteCGI(swf)<0) syntaxerror("WriteCGI() failed.\n");} else {if(swf_WriteSWF(fi, swf)<0) syntaxerror("WriteSWF() failed.\n");} close(fi); freeDictionaries(); swf_FreeTags(swf); free(swf); free(filename); } void s_close() { if(stackpos) { if(stack[stackpos-1].type == 0) syntaxerror("End of file encountered in .flash block"); if(stack[stackpos-1].type == 1) syntaxerror("End of file encountered in .sprite block"); if(stack[stackpos-1].type == 2) syntaxerror("End of file encountered in .clip block"); } } int s_getframe() { return currentframe+1; } void s_frame(int nr, int cut, const char*name, char anchor) { int t; TAG*now = tag; if(nr<1) syntaxerror("Illegal frame number"); nr--; // internally, frame 1 is frame 0 for(t=currentframe;tfs); } else if((image = dict_lookup(&images, name))) { MATRIX m; swf_GetMatrix(0, &m); m.sx = 65536.0*20.0*(r->xmax - r->xmin)/image->size.xmax; m.sy = 65536.0*20.0*(r->ymax - r->ymin)/image->size.ymax; m.tx = r->xmin; m.ty = r->ymin; return swf_ShapeAddBitmapFillStyle(s, &m, image->id, 0); } else if((gradient = dict_lookup(&gradients, name))) { SRECT r2; MATRIX rot,m; double ccos,csin; swf_GetMatrix(0, &rot); ccos = cos(-gradient->rotate*2*M_PI/360); csin = sin(-gradient->rotate*2*M_PI/360); rot.sx = ccos*65536; rot.r1 = -csin*65536; rot.r0 = csin*65536; rot.sy = ccos*65536; r2 = swf_TurnRect(*r, &rot); swf_GetMatrix(0, &m); m.sx = (r2.xmax - r2.xmin)*2*ccos; m.r1 = -(r2.xmax - r2.xmin)*2*csin; m.r0 = (r2.ymax - r2.ymin)*2*csin; m.sy = (r2.ymax - r2.ymin)*2*ccos; m.tx = r->xmin + (r->xmax - r->xmin)/2; m.ty = r->ymin + (r->ymax - r->ymin)/2; return swf_ShapeAddGradientFillStyle(s, &m, &gradient->gradient, gradient->radial); } else if(parseColor2(name, &color)) { return swf_ShapeAddSolidFillStyle(s, &color); } else { syntaxerror("not a color/fillstyle: %s", name); return 0; } } RGBA black={r:0,g:0,b:0,a:0}; void s_box(const char*name, int width, int height, RGBA color, int linewidth, const char*texture) { SRECT r,r2; SHAPE* s; int ls1=0,fs1=0; r2.xmin = 0; r2.ymin = 0; r2.xmax = width; r2.ymax = height; tag = swf_InsertTag(tag, ST_DEFINESHAPE3); swf_ShapeNew(&s); if(linewidth) { linewidth = linewidth>=20?linewidth-20:0; ls1 = swf_ShapeAddLineStyle(s,linewidth,&color); } if(texture) fs1 = addFillStyle(s, &r2, texture); swf_SetU16(tag,id); r.xmin = r2.xmin-linewidth/2; r.ymin = r2.ymin-linewidth/2; r.xmax = r2.xmax+linewidth/2; r.ymax = r2.ymax+linewidth/2; swf_SetRect(tag,&r); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); swf_ShapeSetLine(tag,s,width,0); swf_ShapeSetLine(tag,s,0,height); swf_ShapeSetLine(tag,s,-width,0); swf_ShapeSetLine(tag,s,0,-height); swf_ShapeSetEnd(tag); swf_ShapeFree(s); s_addcharacter(name, id, tag, r); incrementid(); } void s_filled(const char*name, const char*outlinename, RGBA color, int linewidth, const char*texture) { SRECT rect,r2; SHAPE* s; int ls1,fs1=0; outline_t* outline; outline = dict_lookup(&outlines, outlinename); if(!outline) { syntaxerror("outline %s not defined", outlinename); } r2 = outline->bbox; tag = swf_InsertTag(tag, ST_DEFINESHAPE3); swf_ShapeNew(&s); if(linewidth) { linewidth = linewidth>=20?linewidth-20:0; ls1 = swf_ShapeAddLineStyle(s,linewidth,&color); } if(texture) fs1 = addFillStyle(s, &r2, texture); swf_SetU16(tag,id); rect.xmin = r2.xmin-linewidth/2; rect.ymin = r2.ymin-linewidth/2; rect.xmax = r2.xmax+linewidth/2; rect.ymax = r2.ymax+linewidth/2; swf_SetRect(tag,&rect); swf_SetShapeStyles(tag, s); swf_ShapeCountBits(s,0,0); swf_RecodeShapeData(outline->shape->data, outline->shape->bitlen, outline->shape->bits.fill, outline->shape->bits.line, &s->data, &s->bitlen, s->bits.fill, s->bits.line); swf_SetShapeBits(tag, s); swf_SetBlock(tag, s->data, (s->bitlen+7)/8); swf_ShapeFree(s); s_addcharacter(name, id, tag, rect); incrementid(); } void s_circle(const char*name, int r, RGBA color, int linewidth, const char*texture) { SRECT rect,r2; SHAPE* s; int ls1=0,fs1=0; r2.xmin = r2.ymin = 0; r2.xmax = 2*r; r2.ymax = 2*r; tag = swf_InsertTag(tag, ST_DEFINESHAPE3); swf_ShapeNew(&s); if(linewidth) { linewidth = linewidth>=20?linewidth-20:0; ls1 = swf_ShapeAddLineStyle(s,linewidth,&color); } if(texture) fs1 = addFillStyle(s, &r2, texture); swf_SetU16(tag,id); rect.xmin = r2.xmin-linewidth/2; rect.ymin = r2.ymin-linewidth/2; rect.xmax = r2.xmax+linewidth/2; rect.ymax = r2.ymax+linewidth/2; swf_SetRect(tag,&rect); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,ls1,fs1,0); swf_ShapeSetCircle(tag, s, r,r,r,r); swf_ShapeSetEnd(tag); swf_ShapeFree(s); s_addcharacter(name, id, tag, rect); incrementid(); } void s_textshape(const char*name, const char*fontname, float size, const char*_text) { int g; U8*text = (U8*)_text; outline_t* outline; SWFFONT*font; font = dict_lookup(&fonts, fontname); if(!font) syntaxerror("font \"%s\" not known!", fontname); if(text[0] >= font->maxascii || font->ascii2glyph[text[0]]<0) { warning("no character 0x%02x (%c) in font \"%s\"", text[0], text[0], fontname); s_box(name, 0, 0, black, 20, 0); return; } g = font->ascii2glyph[text[0]]; outline = malloc(sizeof(outline_t)); memset(outline, 0, sizeof(outline_t)); outline->shape = font->glyph[g].shape; outline->bbox = font->layout->bounds[g]; { drawer_t draw; swf_Shape11DrawerInit(&draw, 0); swf_DrawText(&draw, font, (int)(size*100), (char*)_text); draw.finish(&draw); outline->shape = swf_ShapeDrawerToShape(&draw); outline->bbox = swf_ShapeDrawerGetBBox(&draw); draw.dealloc(&draw); } if(dict_lookup(&outlines, name)) syntaxerror("outline %s defined twice", name); dict_put(&outlines, name, outline); } void s_text(const char*name, const char*fontname, const char*text, int size, RGBA color) { SRECT r; MATRIX _m,*m=0; SWFFONT*font; font = dict_lookup(&fonts, fontname); if(!font) syntaxerror("font \"%s\" not known!", fontname); tag = swf_InsertTag(tag, ST_DEFINETEXT2); swf_SetU16(tag, id); if(!font->numchars) { s_box(name, 0, 0, black, 20, 0); return; } r = swf_SetDefineText(tag, font, &color, (char*)text, size); if(stack[0].swf->fileVersion >= 8) { tag = swf_InsertTag(tag, ST_CSMTEXTSETTINGS); swf_SetU16(tag, id); swf_SetU8(tag, /*grid*/(1<<3)|/*flashtype*/0x40); swf_SetU32(tag, 0);//thickness swf_SetU32(tag, 0);//sharpness swf_SetU8(tag, 0);//reserved } s_addcharacter(name, id, tag, r); incrementid(); } void s_quicktime(const char*name, const char*url) { SRECT r; MATRIX _m,*m=0; memset(&r, 0, sizeof(r)); tag = swf_InsertTag(tag, ST_DEFINEMOVIE); swf_SetU16(tag, id); swf_SetString(tag, url); s_addcharacter(name, id, tag, r); incrementid(); } void s_video(const char *name, int width, int height) { SRECT r; memset(&r, 0, sizeof(r)); tag = swf_InsertTag(tag, ST_DEFINEVIDEOSTREAM); swf_SetU16(tag, id); swf_SetU16(tag, 0); // numframes swf_SetU16(tag, width); swf_SetU16(tag, height); swf_SetU8(tag, 0); // videoflags swf_SetU8(tag, 0); // codecid s_addcharacter(name, id, tag, r); incrementid(); } void s_edittext(const char*name, const char*fontname, int size, int width, int height, const char*text, RGBA*color, int maxlength, const char*variable, int flags, int align) { SWFFONT*font = 0; EditTextLayout layout; SRECT r; if(fontname && *fontname) { flags |= ET_USEOUTLINES; font = dict_lookup(&fonts, fontname); if(!font) syntaxerror("font \"%s\" not known!", fontname); } tag = swf_InsertTag(tag, ST_DEFINEEDITTEXT); swf_SetU16(tag, id); layout.align = align; layout.leftmargin = 0; layout.rightmargin = 0; layout.indent = 0; layout.leading = 0; r.xmin = 0; r.ymin = 0; r.xmax = width; r.ymax = height; swf_SetEditText(tag, flags, r, (char*)text, color, maxlength, font?font->id:0, size, &layout, (char*)variable); s_addcharacter(name, id, tag, r); incrementid(); } /* type: either "jpeg" or "png" */ void s_image(const char*name, const char*type, const char*filename, int quality) { /* an image is actually two folded: 1st bitmap, 2nd character. Both of them can be used separately */ /* step 1: the bitmap */ SRECT r; int imageID = id; unsigned width, height; if(!strcmp(type,"jpeg")) { #ifndef HAVE_JPEGLIB warning("no jpeg support compiled in"); s_box(name, 0, 0, black, 20, 0); return; #else tag = swf_InsertTag(tag, ST_DEFINEBITSJPEG2); swf_SetU16(tag, imageID); if(swf_SetJPEGBits(tag, (char*)filename, quality) < 0) { syntaxerror("Image \"%s\" not found, or contains errors", filename); } swf_GetJPEGSize(filename, &width, &height); r.xmin = 0; r.ymin = 0; r.xmax = width*20; r.ymax = height*20; s_addimage(name, id, tag, r); incrementid(); #endif } else if(!strcmp(type,"png")) { RGBA*data = 0; swf_SetU16(tag, imageID); png_load(filename, &width, &height, (unsigned char**)&data); if(!data) { syntaxerror("Image \"%s\" not found, or contains errors", filename); } /*tag = swf_AddImage(tag, imageID, data, width, height, quality)*/ tag = swf_InsertTag(tag, ST_DEFINEBITSLOSSLESS); swf_SetU16(tag, imageID); swf_SetLosslessImage(tag, data, width, height); free(data); r.xmin = 0; r.ymin = 0; r.xmax = width*20; r.ymax = height*20; s_addimage(name, id, tag, r); incrementid(); } else { warning("image type \"%s\" not supported yet!", type); s_box(name, 0, 0, black, 20, 0); return; } /* step 2: the character */ tag = swf_InsertTag(tag, ST_DEFINESHAPE); // todo: should be defineshape2/3 once images can be transparent.(?) swf_SetU16(tag, id); swf_ShapeSetBitmapRect(tag, imageID, width, height); s_addcharacter(name, id, tag, r); incrementid(); } void s_getBitmapSize(const char*name, int*width, int*height) { character_t* image = dict_lookup(&images, name); gradient_t* gradient = dict_lookup(&gradients,name); if(image) { *width = image->size.xmax; *height = image->size.ymax; return; } if(gradient) { /* internal SWF gradient size */ if(gradient->radial) { *width = 16384; *height = 16384; } else { *width = 32768; *height = 32768; } return; } syntaxerror("No such bitmap/gradient: %s", name); } void s_texture(const char*name, const char*object, int x, int y, float scalex, float scaley, float rotate, float shear) { if(dict_lookup(&textures, name)) syntaxerror("texture %s defined twice", name); gradient_t* gradient = dict_lookup(&gradients, object); character_t* bitmap = dict_lookup(&images, object); texture_t* texture = (texture_t*)rfx_calloc(sizeof(texture_t)); parameters_t p; FILLSTYLE*fs = &texture->fs; memset(&p, 0, sizeof(parameters_t)); if(bitmap) { fs->type = FILL_TILED; fs->id_bitmap = bitmap->id; } else if(gradient) { fs->type = gradient->radial?FILL_RADIAL:FILL_LINEAR; fs->gradient = gradient->gradient; } p.x = x;p.y = y;p.scalex = scalex;p.scaley = scaley;p.rotate=rotate;p.shear=shear; makeMatrix(&fs->m, &p); if(gradient && !gradient->radial) { MATRIX m = fs->m; SPOINT p1,p2; m.tx = 0; m.ty = 0; p1.x = 16384; p1.y = 16384; p2 = swf_TurnPoint(p1, &m); fs->m.tx += p2.x; fs->m.ty += p2.y; } if(bitmap) { fs->m.sx *= 20; fs->m.sy *= 20; } dict_put(&textures, name, texture); } void s_createfont(const char*name, const char*filename, const char*glyphs, char flashtype) { if(dict_lookup(&fonts, name)) syntaxerror("font %s defined twice", name); SWFFONT* font = swf_LoadFont(filename, flashtype); if(font == 0) { warning("Couldn't open font file \"%s\"", filename); font = (SWFFONT*)malloc(sizeof(SWFFONT)); memset(font, 0, sizeof(SWFFONT)); dict_put(&fonts, name, font); return; } swf_FontPrepareForEditText(font); if(!strcmp(glyphs, "all")) { swf_FontUseAll(font); font->use->glyphs_specified = 1; } else { if(!glyphs[0]) { swf_FontInitUsage(font); } else { swf_FontUseUTF8(font, (const U8*)glyphs, 0xffff); font->use->glyphs_specified = 1; } } dict_put(&fonts, name, font); } void s_font(const char*name, const char*filename) { SWFFONT* font; font = dict_lookup(&fonts, name); font->id = id; swf_FontReduce_swfc(font); if(font->version>=3 && stack[0].swf->fileVersion < 8) { warning("flashtype not supported for flash versions 8 and below"); } tag = swf_InsertTag(tag, font->version==3?ST_DEFINEFONT3:ST_DEFINEFONT2); swf_FontSetDefine2(tag, font); if(do_exports) { tag = swf_InsertTag(tag, ST_EXPORTASSETS); swf_SetU16(tag, 1); swf_SetU16(tag, id); swf_SetString(tag, name); } incrementid(); } typedef struct _sound_t { U16 id; TAG*tag; } sound_t; void s_sound(const char*name, const char*filename) { struct WAV wav, wav2; struct MP3 mp3; sound_t* sound; U16*samples = NULL; unsigned numsamples = 1; unsigned blocksize = 1152; int is_mp3 = 0; if(dict_lookup(&sounds, name)) syntaxerror("sound %s defined twice", name); if(wav_read(&wav, filename)) { int t; wav_convert2mono(&wav, &wav2, 44100); samples = (U16*)wav2.data; numsamples = wav2.size/2; free(wav.data); #ifdef WORDS_BIGENDIAN /* swap bytes */ for(t=0;t>8)&0xff | (samples[t]<<8)&0xff00; #endif } else if(mp3_read(&mp3, filename)) { fprintf(stderr, "\"%s\" seems to work as a MP3 file...\n", filename); blocksize = 1; is_mp3 = 1; } else { warning("Couldn't read WAV/MP3 file \"%s\"", filename); samples = 0; numsamples = 0; } if(numsamples%blocksize != 0) { // apply padding, so that block is a multiple of blocksize int numblocks = (numsamples+blocksize-1)/blocksize; int numsamples2; U16* samples2; numsamples2 = numblocks * blocksize; samples2 = malloc(sizeof(U16)*numsamples2); memcpy(samples2, samples, numsamples*sizeof(U16)); memset(&samples2[numsamples], 0, sizeof(U16)*(numsamples2 - numsamples)); numsamples = numsamples2; free(samples); samples = samples2; } tag = swf_InsertTag(tag, ST_DEFINESOUND); swf_SetU16(tag, id); //id if(is_mp3) { swf_SetSoundDefineMP3( tag, mp3.data, mp3.size, mp3.SampRate, mp3.Channels, mp3.NumFrames); mp3_clear(&mp3); } else swf_SetSoundDefine(tag, samples, numsamples); if(do_exports) { tag = swf_InsertTag(tag, ST_NAMECHARACTER); swf_SetU16(tag, id); swf_SetString(tag, name); tag = swf_InsertTag(tag, ST_EXPORTASSETS); swf_SetU16(tag, 1); swf_SetU16(tag, id); swf_SetString(tag, name); } sound = (sound_t*)malloc(sizeof(sound_t)); /* mem leak */ sound->tag = tag; sound->id = id; dict_put(&sounds, name, sound); incrementid(); if(samples) free(samples); } static char* gradient_getToken(const char**p) { const char*start; char*result; while(**p && strchr(" \t\n\r", **p)) { (*p)++; } start = *p; while(**p && !strchr(" \t\n\r", **p)) { (*p)++; } result = malloc((*p)-start+1); memcpy(result,start,(*p)-start+1); result[(*p)-start] = 0; return result; } float parsePercent(const char*str); RGBA parseColor(const char*str); GRADIENT parseGradient(const char*str) { GRADIENT gradient; int lastpos = -1; const char* p = str; memset(&gradient, 0, sizeof(GRADIENT)); gradient.ratios = rfx_calloc(16*sizeof(U8)); gradient.rgba = rfx_calloc(16*sizeof(RGBA)); while(*p) { char*posstr,*colorstr; int pos; RGBA color; posstr = gradient_getToken(&p); if(!*posstr) { free(posstr); break; } pos = (int)(parsePercent(posstr)*255.0); if(pos == lastpos) pos++; if(!*p) { rfx_free(gradient.ratios); rfx_free(gradient.rgba); free(posstr); syntaxerror("Error in shape data: Color expected after %s", posstr); } colorstr = gradient_getToken(&p); color = parseColor(colorstr); if(gradient.num == 16) { warning("gradient record too big- max size is 16, rest ignored"); break; } gradient.ratios[gradient.num] = pos; gradient.rgba[gradient.num] = color; gradient.num++; free(posstr); free(colorstr); lastpos = pos; } return gradient; } FILTERLIST* parseFilters(char* list) { if(!strcmp(list, "no_filters")) return 0; FILTER* f; FILTERLIST* f_list = (FILTERLIST*)malloc(sizeof(FILTERLIST)); f_list->num = 0; char* f_start = list; char* f_end; while (f_start) { f_end = strchr(f_start, ','); if(f_end) *f_end = '\0'; f = dict_lookup(&filters, f_start); if(!f) { free(f_list); syntaxerror("unknown filter %s", f_start); } if(f_list->num == 8) { warning("too many filters in filterlist, no more than 8 please, rest ignored"); break; } f_list->filter[f_list->num] = f; f_list->num++; if(f_end) { *f_end = ','; f_start = f_end + 1; } else f_start = 0; } return f_list; } void s_gradient(const char*name, const char*text, int radial, int rotate) { gradient_t* gradient; gradient = malloc(sizeof(gradient_t)); memset(gradient, 0, sizeof(gradient_t)); gradient->gradient = parseGradient(text); gradient->radial = radial; gradient->rotate = rotate; dict_put(&gradients, name, gradient); } void s_gradientglow(const char*name, const char*gradient, float blurx, float blury, float angle, float distance, float strength, char innershadow, char knockout, char composite, char ontop, int passes) { if(dict_lookup(&filters, name)) syntaxerror("filter %s defined twice", name); gradient_t* g = dict_lookup(&gradients, gradient); if(!g) syntaxerror("unknown gradient %s", gradient); composite = 1; FILTER_GRADIENTGLOW* filter = rfx_calloc(sizeof(FILTER_GRADIENTGLOW)); filter->type = FILTERTYPE_GRADIENTGLOW; filter->gradient = &g->gradient; filter->blurx = blurx; filter->blury = blury; filter->strength = strength; filter->angle = angle; filter->distance = distance; filter->innershadow = innershadow; filter->knockout = knockout; filter->composite = composite; filter->ontop = ontop; filter->passes = passes; dict_put(&filters, name, filter); } void s_dropshadow(const char*name, RGBA color, double blurx, double blury, double angle, double distance, double strength, char innershadow, char knockout, char composite, int passes) { if(dict_lookup(&filters, name)) syntaxerror("filter %s defined twice", name); composite = 1; FILTER_DROPSHADOW* filter = rfx_calloc(sizeof(FILTER_DROPSHADOW)); filter->type = FILTERTYPE_DROPSHADOW; filter->color= color; filter->blurx = blurx; filter->blury = blury; filter->strength = strength; filter->angle = angle; filter->distance = distance; filter->innershadow = innershadow; filter->knockout = knockout; filter->composite = composite; filter->passes = passes; dict_put(&filters, name, filter); } void s_bevel(const char*name, RGBA shadow, RGBA highlight, double blurx, double blury, double angle, double distance, double strength, char innershadow, char knockout, char composite, char ontop, int passes) { if(dict_lookup(&filters, name)) syntaxerror("filter %s defined twice", name); composite = 1; FILTER_BEVEL* filter = rfx_calloc(sizeof(FILTER_BEVEL)); filter->type = FILTERTYPE_BEVEL; filter->shadow = shadow; filter->highlight = highlight; filter->blurx = blurx; filter->blury = blury; filter->strength = strength; filter->angle = angle; filter->distance = distance; filter->innershadow = innershadow; filter->knockout = knockout; filter->composite = composite; filter->ontop = ontop; filter->passes = passes; dict_put(&filters, name, filter); } void s_blur(const char*name, double blurx, double blury, int passes) { if(dict_lookup(&filters, name)) syntaxerror("filter %s defined twice", name); FILTER_BLUR* filter = rfx_calloc(sizeof(FILTER_BLUR)); filter->type = FILTERTYPE_BLUR; filter->blurx = blurx; filter->blury = blury; filter->passes = passes; dict_put(&filters, name, filter); } void s_action(const char*text) { if(stack[0].swf->fileVersion < 9) { ActionTAG* a = 0; a = swf_ActionCompile(text, stack[0].swf->fileVersion); if(!a) { swf_ActionFree(a); syntaxerror("Couldn't compile ActionScript"); } tag = swf_InsertTag(tag, ST_DOACTION); swf_ActionSet(tag, a); swf_ActionFree(a); } else { as3_parse_bytearray(stack[0].filename, text, strlen(text)); stack[0].as3 = 1; } } void s_initaction(const char*character, const char*text) { ActionTAG* a = 0; character_t*c = 0; a = swf_ActionCompile(text, stack[0].swf->fileVersion); if(!a) { swf_ActionFree(a); syntaxerror("Couldn't compile ActionScript"); } c = (character_t*)dict_lookup(&characters, character); tag = swf_InsertTag(tag, ST_DOINITACTION); swf_SetU16(tag, c->id); swf_ActionSet(tag, a); swf_ActionFree(a); } int s_swf3action(const char*name, const char*action) { ActionTAG* a = 0; instance_t* object = 0; if(name) object = (instance_t*)dict_lookup(&instances, name); if(!object && name && *name) { /* we have a name, but couldn't find it. Abort. */ return 0; } a = action_SetTarget(0, name); if(!strcmp(action, "nextframe")) a = action_NextFrame(a); else if(!strcmp(action, "previousframe")) a = action_PreviousFrame(a); else if(!strcmp(action, "stop")) a = action_Stop(a); else if(!strcmp(action, "play")) a = action_Play(a); a = action_SetTarget(a, ""); a = action_End(a); tag = swf_InsertTag(tag, ST_DOACTION); swf_ActionSet(tag, a); swf_ActionFree(a); return 1; } void s_outline(const char*name, const char*format, const char*source) { if(dict_lookup(&outlines, name)) syntaxerror("outline %s defined twice", name); outline_t* outline; drawer_t draw; SHAPE* shape; SHAPE2* shape2; SRECT bounds; //swf_Shape10DrawerInit(&draw, 0); swf_Shape11DrawerInit(&draw, 0); draw_string(&draw, source); draw.finish(&draw); shape = swf_ShapeDrawerToShape(&draw); bounds = swf_ShapeDrawerGetBBox(&draw); draw.dealloc(&draw); outline = (outline_t*)rfx_calloc(sizeof(outline_t)); outline->shape = shape; outline->bbox = bounds; dict_put(&outlines, name, outline); } int s_playsound(const char*name, int loops, int nomultiple, int stop) { sound_t* sound; SOUNDINFO info; if(!name) return 0; sound = dict_lookup(&sounds, name); if(!sound) return 0; tag = swf_InsertTag(tag, ST_STARTSOUND); swf_SetU16(tag, sound->id); //id memset(&info, 0, sizeof(info)); info.stop = stop; info.loops = loops; info.nomultiple = nomultiple; swf_SetSoundInfo(tag, &info); return 1; } void s_includeswf(const char*name, const char*filename, const char*as3name) { int f; SWF swf; TAG* ftag; SRECT r; TAG* s; int level = 0; U16 cutout[] = {ST_SETBACKGROUNDCOLOR, ST_PROTECT, ST_FREEALL, ST_REFLEX}; f = open(filename,O_RDONLY|O_BINARY); if(f<0) { warning("Couldn't open file \"%s\": %s", filename, strerror(errno)); s_box(name, 0, 0, black, 20, 0); return; } if(swf_ReadSWF(f,&swf)<0) { warning("Only SWF files supported in .shape for now. File \"%s\" wasn't SWF.", filename); s_box(name, 0, 0, black, 20, 0); return; } close(f); /* FIXME: The following sets the bounding Box for the character. It is wrong for two reasons: a) It may be too small (in case objects in the movie clip at the borders) b) it may be too big (because the poor movie never got autocropped) */ r = swf.movieSize; s = tag = swf_InsertTag(tag, ST_DEFINESPRITE); swf_SetU16(tag, id); swf_SetU16(tag, swf.frameCount); swf_Relocate(&swf, idmap); ftag = swf.firstTag; level = 1; while(ftag) { int t; for(t=0;tid) { ftag = ftag->next; continue; } if(ftag->id == ST_DEFINESPRITE && !swf_IsFolded(ftag)) level++; if(ftag->id == ST_END) level--; if(!level) break; if(ftag->id != ST_SETBACKGROUNDCOLOR) { /* We simply dump all tags right after the sprite header, relying on the fact that swf_OptimizeTagOrder() will sort things out for us later. We also rely on the fact that the imported SWF is well-formed. */ tag = swf_InsertTag(tag, ftag->id); swf_SetBlock(tag, ftag->data, ftag->len); } ftag = ftag->next; } if(!ftag) syntaxerror("Included file %s contains errors", filename); tag = swf_InsertTag(tag, ST_END); swf_FreeTags(&swf); s_addcharacter(name, id, tag, r); if(*as3name) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, id); swf_SetString(tag, as3name); } incrementid(); } SRECT s_getCharBBox(const char*name) { character_t* c = dict_lookup(&characters, name); if(!c) syntaxerror("character '%s' unknown(2)", name); return c->size; } SRECT s_getInstanceBBox(const char*name) { instance_t * i = dict_lookup(&instances, name); character_t * c; if(!i) syntaxerror("instance '%s' unknown(4)", name); c = i->character; if(!c) syntaxerror("internal error(5)"); return c->size; } void s_getParameters(const char*name, parameters_t* p) { instance_t * i = dict_lookup(&instances, name); if(!i) syntaxerror("instance '%s' unknown(10)", name); if(change_sets_all) readParameters(i->history, p, currentframe); else *p = i->parameters; } void setStartparameters(instance_t* i, parameters_t* p, TAG* tag) { history_begin(i->history, "x", currentframe, tag, p->x); history_begin(i->history, "y", currentframe, tag, p->y); history_begin(i->history, "scalex", currentframe, tag, p->scalex); history_begin(i->history, "scaley", currentframe, tag, p->scaley); history_begin(i->history, "cxform.r0", currentframe, tag, p->cxform.r0); history_begin(i->history, "cxform.g0", currentframe, tag, p->cxform.g0); history_begin(i->history, "cxform.b0", currentframe, tag, p->cxform.b0); history_begin(i->history, "cxform.a0", currentframe, tag, p->cxform.a0); history_begin(i->history, "cxform.r1", currentframe, tag, p->cxform.r1); history_begin(i->history, "cxform.g1", currentframe, tag, p->cxform.g1); history_begin(i->history, "cxform.b1", currentframe, tag, p->cxform.b1); history_begin(i->history, "cxform.a1", currentframe, tag, p->cxform.a1); history_begin(i->history, "rotate", currentframe, tag, p->rotate); history_begin(i->history, "shear", currentframe, tag, p->shear); history_begin(i->history, "pivot.x", currentframe, tag, p->pivot.x); history_begin(i->history, "pivot.y", currentframe, tag, p->pivot.y); history_begin(i->history, "pin.x", currentframe, tag, p->pin.x); history_begin(i->history, "pin.y", currentframe, tag, p->pin.y); history_begin(i->history, "blendmode", currentframe, tag, p->blendmode); history_beginFilter(i->history, currentframe, tag, p->filters); history_begin(i->history, "flags", currentframe, tag, 0); } void s_startclip(const char*instance, const char*character, parameters_t p) { character_t* c = dict_lookup(&characters, character); instance_t* i; MATRIX m; if(!c) { syntaxerror("character %s not known", character); } i = s_addinstance(instance, c, currentdepth); i->parameters = p; m = s_instancepos(i->character->size, &p); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); /* TODO: should be ObjectPlaceClip, with clipdepth backpatched */ swf_ObjectPlace(tag, c->id, currentdepth, &m, &p.cxform, instance); stack[stackpos].tag = tag; stack[stackpos].type = 2; stackpos++; setStartparameters(i, &p, tag); currentdepth++; } void s_endClip() { SWFPLACEOBJECT p; stackpos--; swf_SetTagPos(stack[stackpos].tag, 0); swf_GetPlaceObject(stack[stackpos].tag, &p); p.clipdepth = currentdepth; //p.name = 0; swf_ClearTag(stack[stackpos].tag); swf_SetPlaceObject(stack[stackpos].tag, &p); currentdepth++; } void s_put(const char*instance, const char*character, parameters_t p) { character_t* c = dict_lookup(&characters, character); instance_t* i; MATRIX m; if(!c) syntaxerror("character %s not known (in .put %s=%s)", character, instance, character); i = s_addinstance(instance, c, currentdepth); i->parameters = p; m = s_instancepos(i->character->size, &p); if(p.blendmode || p.filters) { if(stack[0].swf->fileVersion < 8) { if(p.blendmode) warning("blendmodes only supported for flash version>=8"); else warning("filters only supported for flash version>=8"); } tag = swf_InsertTag(tag, ST_PLACEOBJECT3); } else tag = swf_InsertTag(tag, ST_PLACEOBJECT2); setPlacement(tag, c->id, currentdepth, m, p.noinstancename ? NULL : instance, &p, 0); setStartparameters(i, &p, tag); currentdepth++; } void recordChanges(history_t* history, parameters_t p, int changeFunction, interpolation_t* inter) { if(p.set & SF_X) history_remember(history, "x", currentframe, changeFunction, p.x, inter); if(p.set & SF_Y) history_remember(history, "y", currentframe, changeFunction, p.y, inter); if(p.set & SF_SCALEX) history_remember(history, "scalex", currentframe, changeFunction, p.scalex, inter); if(p.set & SF_SCALEY) history_remember(history, "scaley", currentframe, changeFunction, p.scaley, inter); if(p.set & SF_CX_R) { history_remember(history, "cxform.r0", currentframe, changeFunction, p.cxform.r0, inter); history_remember(history, "cxform.r1", currentframe, changeFunction, p.cxform.r1, inter); } if(p.set & SF_CX_G) { history_remember(history, "cxform.g0", currentframe, changeFunction, p.cxform.g0, inter); history_remember(history, "cxform.g1", currentframe, changeFunction, p.cxform.g1, inter); } if(p.set & SF_CX_B) { history_remember(history, "cxform.b0", currentframe, changeFunction, p.cxform.b0, inter); history_remember(history, "cxform.b1", currentframe, changeFunction, p.cxform.b1, inter); } if(p.set & SF_CX_A) { history_remember(history, "cxform.a0", currentframe, changeFunction, p.cxform.a0, inter); history_remember(history, "cxform.a1", currentframe, changeFunction, p.cxform.a1, inter); } if(p.set & SF_ROTATE) history_remember(history, "rotate", currentframe, changeFunction, p.rotate, inter); if(p.set & SF_SHEAR) history_remember(history, "shear", currentframe, changeFunction, p.shear, inter); if(p.set & SF_PIVOT) { history_remember(history, "pivot.x", currentframe, changeFunction, p.pivot.x, inter); history_remember(history, "pivot.y", currentframe, changeFunction, p.pivot.y, inter); } if(p.set & SF_PIN) { history_remember(history, "pin.x", currentframe, changeFunction, p.pin.x, inter); history_remember(history, "pin.y", currentframe, changeFunction, p.pin.y, inter); } if(p.set & SF_BLEND) history_remember(history, "blendmode", currentframe, changeFunction, p.blendmode, inter); if(p.set & SF_FILTER) history_rememberFilter(history, currentframe, changeFunction, p.filters, inter); } void s_jump(const char* instance, parameters_t p) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); recordChanges(i->history, p, CF_JUMP, 0); } void s_change(const char*instance, parameters_t p, interpolation_t* inter) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); recordChanges(i->history, p, CF_CHANGE, inter); } void s_sweep(const char* instance, parameters_t p, float radius, int clockwise, int short_arc, interpolation_t* inter) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); history_rememberSweep(i->history, currentframe, p.x, p.y, radius, clockwise, short_arc, inter); } void s_toggle(const char* instance, U16 flagsOn, U16 flagsOff) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); U16 flags = (U16)history_value(i->history, currentframe, "flags"); flags |= flagsOn; flags &= flagsOff; history_remember(i->history, "flags", currentframe, CF_JUMP, flags, 0); } void s_delinstance(const char*instance) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); writeInstance(i); tag = swf_InsertTag(tag, ST_REMOVEOBJECT2); swf_SetU16(tag, i->depth); dict_del(&instances, instance); free(i); } void s_schange(const char*instance, parameters_t p, interpolation_t* inter) { instance_t* i = dict_lookup(&instances, instance); if(!i) syntaxerror("instance %s not known", instance); recordChanges(i->history, p, CF_SCHANGE, inter); } void s_end() { if(!stackpos) syntaxerror(".end unexpected"); switch (stack[stackpos-1].type) { case 0: s_endSWF(); break; case 1: s_endSprite(); break; case 2: s_endClip(); break; case 3: s_endButton(); break; default: syntaxerror("internal error 1"); } } // ------------------------------------------------------------------------ typedef int command_func_t(map_t*args); SRECT parseBox(const char*str) { SRECT r = {0,0,0,0}; float xmin, xmax, ymin, ymax; char*x = strchr(str, 'x'); char*d1=0,*d2=0; if(!strcmp(str, "autocrop")) { r.xmin = r.ymin = r.xmax = r.ymax = 0; return r; } if(!x) goto error; d1 = strchr(x+1, ':'); if(d1) d2 = strchr(d1+1, ':'); if(!d1) { if(sscanf(str, "%fx%f", &xmax, &ymax) < 2) goto error; xmin = ymin = 0; } else if(d1 && !d2) { if(sscanf(str, "%fx%f:%f", &xmax, &ymax, &xmin) < 3) goto error; xmax += xmin; ymin = 0; } else { if(sscanf(str, "%fx%f:%f:%f", &xmax, &ymax, &xmin, &ymin) < 4) goto error; xmax += xmin; ymax += ymin; } r.xmin = (SCOORD)(xmin*20); r.ymin = (SCOORD)(ymin*20); r.xmax = (SCOORD)(xmax*20); r.ymax = (SCOORD)(ymax*20); return r; error: syntaxerror("expression %s is not a valid bound Box.\nE.g. 1024x768 or 1024x768:30:30 would have been valid bounding Boxes.", str); return r; } float parseFloat(const char*str) { return atof(str); } int parseInt(const char*str) { int t; int l=strlen(str); int s=0; if(str[0]=='+' || str[0]=='-') s++; for(t=s;t'9') syntaxerror("Not an Integer: \"%s\"", str); return atoi(str); } static double parseRawTwip(const char*str) { char*dot; int sign=1; if(str[0]=='+' || str[0]=='-') { if(str[0]=='-') sign = -1; str++; } dot = strchr(str, '.'); if(!dot) { int l=strlen(str); int t; return sign*parseInt(str); } else { char* old = strdup(str); int l=strlen(dot+1); const char*s; *dot++ = 0; for(s=str;s'9') { free(old); syntaxerror("Not a coordinate: \"%s\"", str); } } for(s=dot;*s;s++) { if(*s<'0' || *s>'9') { free(old); syntaxerror("Not a coordinate: \"%s\"", str); } } if(l>2 || (l==2 && (dot[1]!='0' && dot[1]!='5'))) { dot[1] = ((dot[1]-0x30)/5)*5 + 0x30; dot[2] = 0; l=2; warning("precision loss: %s converted to twip: %s.%s", old, str, dot); } free(old); if(l==0) return sign*(atoi(str)); if(l==1) return sign*(atoi(str)+0.1*atoi(dot)); if(l==2) return sign*(atoi(str)+0.01*atoi(dot)); } return 0; } static dict_t defines; static int defines_initialized = 0; static mem_t define_values; static double parseNameOrTwip(const char*s) { int l = 0; double v; if(defines_initialized) { l = PTR_AS_INT(dict_lookup(&defines, s)); } if(l) { return *(int*)&define_values.buffer[l-1]; } else { return parseRawTwip(s); } } /* automatically generated by yiyiyacc, http://www.quiss.org/yiyiyacc/ */ static double parseExpression(char*s) { int chr2index[256]; memset(chr2index, -1, sizeof(chr2index)); chr2index['+'] = 0; chr2index['-'] = 1; chr2index['*'] = 2; chr2index['/'] = 3; chr2index['('] = 5; chr2index[')'] = 6; chr2index['\0'] = 7; int stackpos = 1; int stack[256]; double values[256]; stack[0]=0; values[0]=0; int accept = 18; int left[10]={11,8,8,8,8,9,9,9,10,10}; //production left side int plen[10]={1,3,2,3,1,3,3,1,1,3}; //production size int table[18][12] = { {0, 4, 0, 0, 5, 6, 0, 0, 1, 2, 3, 0}, {7, 8, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0}, {-4, -4, 9, 10, 0, 0, -4, -4, 0, 0, 0, 0}, {-7, -7, -7, -7, 0, 0, -7, -7, 0, 0, 0, 0}, {0, 0, 0, 0, 5, 6, 0, 0, 0, 11, 3, 0}, {-8, -8, -8, -8, 0, 0, -8, -8, 0, 0, 0, 0}, {0, 4, 0, 0, 5, 6, 0, 0, 12, 2, 3, 0}, {0, 0, 0, 0, 5, 6, 0, 0, 0, 13, 3, 0}, {0, 0, 0, 0, 5, 6, 0, 0, 0, 14, 3, 0}, {0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 15, 0}, {0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 16, 0}, {-2, -2, 9, 10, 0, 0, -2, -2, 0, 0, 0, 0}, {7, 8, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0}, {-1, -1, 9, 10, 0, 0, -1, -1, 0, 0, 0, 0}, {-3, -3, 9, 10, 0, 0, -3, -3, 0, 0, 0, 0}, {-5, -5, -5, -5, 0, 0, -5, -5, 0, 0, 0, 0}, {-6, -6, -6, -6, 0, 0, -6, -6, 0, 0, 0, 0}, {-9, -9, -9, -9, 0, 0, -9, -9, 0, 0, 0, 0}}; char*p = s; while(1) { char*pnext = p+1; int action; double value = 0; if(!stackpos) { fprintf(stderr, "Error in expression\n"); return 0.0; } if(chr2index[*p]<0) { action = table[stack[stackpos-1]][4]; if(action>0) { while(chr2index[*pnext]<0) pnext++; char save = *pnext; *pnext = 0; value = parseNameOrTwip(p); *pnext = save; } } else { action = table[stack[stackpos-1]][chr2index[*p]]; } if(action == accept) { return values[stack[stackpos-1]]; } else if(action>0) { // shift if(stackpos>254) { fprintf(stderr, "Stack overflow while parsing expression\n"); return 0.0; } values[stackpos]=value; stack[stackpos++]=action; p=pnext; } else if(action<0) { // reduce stackpos-=plen[-action]; stack[stackpos] = table[stack[stackpos-1]][left[-action]]; switch(-action) { case 1: values[stackpos] = values[stackpos+0] + values[stackpos+2]; break; case 2: values[stackpos] = 0 - values[stackpos+1]; break; case 3: values[stackpos] = values[stackpos+0] - values[stackpos+2]; break; case 5: values[stackpos] = values[stackpos+0] * values[stackpos+2]; break; case 6: values[stackpos] = values[stackpos+0] / values[stackpos+2]; break; case 9: values[stackpos] = values[stackpos+1]; break; } stackpos++; } else { fprintf(stderr, "Syntax error in expression\n"); return 0.0; } } } int parseTwip(const char*str) { char*str2 = (char*)str; int v = (int)(parseExpression(str2)*20); return v; } int parseArc(const char* str) { if(!strcmp(str, "short")) return 1; if(!strcmp(str, "long")) return 0; syntaxerror("invalid value for the arc parameter: %s", str); return 1; } int parseDir(const char* str) { if(!strcmp(str, "clockwise")) return 1; if(!strcmp(str, "counterclockwise")) return 0; syntaxerror("invalid value for the dir parameter: %s", str); return 1; } int isPoint(const char*str) { if(strchr(str, '(')) return 1; else return 0; } SPOINT parsePoint(const char*str) { SPOINT p; char tmp[80]; int l = strlen(str); char*comma = strchr(str, ','); if(str[0]!='(' || str[l-1]!=')' || !comma || l>70) syntaxerror("\"%s\" is not a valid point of the form (x,y)", str); strncpy(tmp, str+1, comma-(str+1));tmp[comma-(str+1)]=0; p.x = parseTwip(tmp); strncpy(tmp, comma+1, l-1-(comma+1-str));tmp[l-1-(comma+1-str)]=0; p.y = parseTwip(tmp); return p; } int parseColor2(const char*str, RGBA*color) { int l = strlen(str); int r,g,b,a; int t; struct {unsigned char r,g,b;char*name;} colors[] = {{255,250,250,"snow"},{220,220,220,"gainsboro"},{250,240,230,"linen"},{255,228,196,"bisque"}, {255,228,181,"moccasin"},{255,248,220,"cornsilk"},{255,255,240,"ivory"},{255,245,238,"seashell"}, {240,255,240,"honeydew"},{240,255,255,"azure"},{230,230,250,"lavender"},{255,255,255,"white"}, {0,0,0,"black"},{190,190,190,"gray"},{190,190,190,"grey"},{0,0,128,"navy"},{0,0,255,"blue"}, {64,224,208,"turquoise"},{0,255,255,"cyan"},{127,255,212,"aquamarine"}, {0,255,0,"green"}, {127,255,0,"chartreuse"},{240,230,140,"khaki"},{255,255,0,"yellow"}, {255,215,0,"gold"},{218,165,32,"goldenrod"},{160,82,45,"sienna"},{205,133,63,"peru"}, {222,184,135,"burlywood"},{245,245,220,"beige"},{245,222,179,"wheat"},{210,180,140,"tan"}, {210,105,30,"chocolate"},{178,34,34,"firebrick"},{165,42,42,"brown"},{250,128,114,"salmon"}, {255,165,0,"orange"},{255,127,80,"coral"},{255,99,71,"tomato"},{255,0,0,"red"}, {255,192,203,"pink"},{176,48,96,"maroon"},{255,0,255,"magenta"},{238,130,238,"violet"}, {221,160,221,"plum"},{218,112,214,"orchid"},{160,32,240,"purple"},{216,191,216,"thistle"}}; a=255;r=g=b=0; if(str[0]=='#' && (l==7 || l==9)) { if(l == 7 && !(sscanf(str, "#%02x%02x%02x", &r, &g, &b))) return 0; if(l == 9 && !(sscanf(str, "#%02x%02x%02x%02x", &r, &g, &b, &a))) return 0; color->r = r; color->g = g; color->b = b; color->a = a; return 1; } int len=strlen(str); int alpha = 255; if(strchr(str, '/')) { len = strchr(str, '/')-str; sscanf(str+len+1,"%02x", &alpha); } for(t=0;tr = r; color->g = g; color->b = b; color->a = a; return 1; } return 0; } RGBA parseColor(const char*str) { RGBA c; if(!parseColor2(str, &c)) syntaxerror("Expression '%s' is not a color", str); return c; } typedef struct _muladd { S16 mul; S16 add; } MULADD; MULADD parseMulAdd(const char*str) { float add, mul; char* str2 = (char*)malloc(strlen(str)+5); int i; MULADD m; strcpy(str2, str); strcat(str2, " 0"); add = 0; mul = 1.0; if(sscanf(str2, "%f%f %d", &mul, &add, &i)==2+1) { add/=256.0; i=1;} else if(sscanf(str2, "%f%%%f %d", &mul, &add, &i)==2+1) { mul/=100.0; add/=256.0; i=2;} else if(sscanf(str2, "%f%f%% %d", &mul, &add, &i)==2+1) { add/=100.0; i=3;} else if(sscanf(str2, "%f%%%f%% %d", &mul, &add, &i)==2+1) { mul/=100.0; add/=100.0; i=4;} else if(sscanf(str2, "+%f%% %d", &add, &i)==1+1) { mul=1.0;add/=100.0; i=5;} else if(sscanf(str2, "+%f %d", &add, &i)==1+1) { mul=1.0;add/=256.0; i=6;} else if(sscanf(str2, "-%f%% %d", &add, &i)==1+1) { mul=1.0;add/=-100.0; i=7;} else if(sscanf(str2, "-%f %d", &add, &i)==1+1) { mul=1.0;add/=-256.0; i=8;} else if(sscanf(str2, "%f%% %d", &mul, &i)==1+1) { mul/=100.0;add=0; i=9;} else if(sscanf(str2, "%f %d", &mul, &i)==1+1) { add=0; i=10;} else { syntaxerror("'%s' is not a valid color transform expression", str); } m.add = (int)(add*256); m.mul = (int)(mul*256); free(str2); return m; } MULADD mergeMulAdd(MULADD m1, MULADD m2) { int a = (int)((double)m2.add+((double)m1.add*(double)m2.mul)/256.0); double m = ((double)m1.mul*(double)m2.mul)/256.0; MULADD r; if(a<-32768) a=-32768; if(a>32767) a=32767; if(m<-32768) m=-32768; if(m>32767) m=32767; r.add = a; r.mul = (int)m; return r; } float parsePxOrPercent(const char*fontname, const char*str) { int l = strlen(str); if(strchr(str, '%')) return parsePercent(str); if(l>2 && str[l-2]=='p' && str[l-1]=='t') { float p = atof(str); return p/64.0; /*64 = FT_SUBPIXELS- see ../lib/modules/swffont.c */ } syntaxerror("Expression '%s' is neither a point size (?pt) nor a percentage (?%)", str); return 0; } float parsePercent(const char*str) { int l = strlen(str); if(!l) return 1.0; if(str[l-1]=='%') { return atof(str)/100.0; } syntaxerror("Expression '%s' is not a percentage", str); return 0; } int isPercent(const char*str) { return str[strlen(str)-1]=='%'; } int parseNewSize(const char*str, int size) { if(isPercent(str)) return parsePercent(str)*size; else return (int)(atof(str)*20); } int isColor(char*str) { RGBA c; return parseColor2(str, &c); } static const char* lu(map_t* args, char*name) { const char* value = map_lookup(args, name); if(!value) { map_dump(args, stdout, ""); syntaxerror("internal error 2: value %s should be set", name); } return value; } static int c_flash(map_t*args) { const char* filename = map_lookup(args, "filename"); const char* compressstr = lu(args, "compress"); const char* change_modestr = lu(args, "change-sets-all"); const char* exportstr = lu(args, "export"); SRECT bbox = parseBox(lu(args, "bbox")); int version = parseInt(lu(args, "version")); int fps = (int)(parseFloat(lu(args, "fps"))*256); RGBA color = parseColor(lu(args, "background")); int compress = 0; if(!filename || !*filename) { /* for compatibility */ filename = map_lookup(args, "name"); if(!filename || !*filename) { filename = 0; } else { //msg(" line %d: .flash name=... is deprecated, use .flash filename=...", line); msg(" line %d: .flash name=... is deprecated, use .flash filename=...", line); } } if(!filename || override_outputname) filename = outputname; if(!strcmp(compressstr, "default")) compress = version>=6; else if(!strcmp(compressstr, "yes") || !strcmp(compressstr, "compress")) compress = 1; else if(!strcmp(compressstr, "no")) compress = 0; else syntaxerror("value \"%s\" not supported for the compress argument", compressstr); if(!strcmp(change_modestr, "yes")) change_sets_all = 1; else if(strcmp(change_modestr, "no")) syntaxerror("value \"%s\" not supported for the change-sets-all argument", change_modestr); do_exports=atoi(exportstr); mainclass=strdup(lu(args, "mainclass")); s_swf(filename, bbox, version, fps, compress, color); return 0; } int isRelative(const char*str) { return !strncmp(str, "", 6) || !strncmp(str, "", 7); } const char* getOffset(const char*str) { if(!strncmp(str, "", 6)) return str+6; if(!strncmp(str, "", 7)) return str+7; syntaxerror("internal error (347)"); return 0; } int getSign(const char*str) { if(!strncmp(str, "", 6)) return 1; if(!strncmp(str, "", 7)) return -1; syntaxerror("internal error (348)"); return 0; } static dict_t points; static mem_t mpoints; static int points_initialized = 0; static int c_interpolation(map_t *args) { int i; const char* name = lu(args, "name"); if(dict_lookup(&interpolations, name)) syntaxerror("interpolation %s defined twice", name); interpolation_t* inter = (interpolation_t*)malloc(sizeof(interpolation_t)); const char* functionstr = lu(args, "function"); inter->function = 0; for (i = 0; i < sizeof(interpolationFunctions) / sizeof(interpolationFunctions[0]); i++) if(!strcmp(functionstr,interpolationFunctions[i])) { inter->function = i + 1; break; } if(!inter->function) syntaxerror("unknown interpolation function %s", functionstr); inter->speed = parseFloat(lu(args, "speed")); inter->amplitude = parseTwip(lu(args, "amplitude")); inter->growth = parseFloat(lu(args, "growth")); inter->bounces = parseInt(lu(args, "bounces")); inter->damping = parseFloat(lu(args, "damping")); inter->slope = parseFloat(lu(args, "slope")); dict_put(&interpolations, name, inter); return 0; } SPOINT getPoint(SRECT r, const char*name) { int l=0; if(!strcmp(name, "center")) { SPOINT p; p.x = (r.xmin + r.xmax)/2; p.y = (r.ymin + r.ymax)/2; return p; } if(!strcmp(name, "bottom-center")) { SPOINT p; p.x = (r.xmin + r.xmax)/2; p.y = r.ymax; return p; } if(!strcmp(name, "top-center")) { SPOINT p; p.x = (r.xmin + r.xmax)/2; p.y = r.ymin; return p; } if(!strcmp(name, "top-left")) { SPOINT p; p.x = r.xmin; p.y = r.ymin; return p; } if(!strcmp(name, "top-right")) { SPOINT p; p.x = r.xmax; p.y = r.ymin; return p; } if(!strcmp(name, "bottom-right")) { SPOINT p; p.x = r.xmax; p.y = r.ymax; return p; } if(!strcmp(name, "bottom-left")) { SPOINT p; p.x = r.xmin; p.y = r.ymax; return p; } if(!strcmp(name, "left-center")) { SPOINT p; p.x = r.xmin; p.y = (r.ymin + r.ymax)/2; return p; } if(!strcmp(name, "right-center")) { SPOINT p; p.x = r.xmax; p.y = (r.ymin + r.ymax)/2; return p; } if(points_initialized) l = PTR_AS_INT(dict_lookup(&points, name)); if(l==0) { syntaxerror("Invalid point: \"%s\".", name); } return *(SPOINT*)&mpoints.buffer[l-1]; } static int texture2(const char*name, const char*object, map_t*args, int errors) { SPOINT pos,size; const char*xstr = map_lookup(args, "x"); const char*ystr = map_lookup(args, "y"); const char*widthstr = map_lookup(args, "width"); const char*heightstr = map_lookup(args, "height"); const char*scalestr = map_lookup(args, "scale"); const char*scalexstr = map_lookup(args, "scalex"); const char*scaleystr = map_lookup(args, "scaley"); const char*rotatestr = map_lookup(args, "rotate"); const char* shearstr = map_lookup(args, "shear"); const char* radiusstr = map_lookup(args, "r"); float x=0,y=0; float scalex = 1.0, scaley = 1.0; float rotate=0, shear=0; float r = 0; if(!*xstr && !*ystr) { if(errors) syntaxerror("x and y must be set"); return 0; } if(*scalestr && (*scalexstr || *scaleystr)) { syntaxerror("scale and scalex/scaley can't both be set"); return 0; } if((*widthstr || *heightstr) && *radiusstr) { syntaxerror("width/height and radius can't both be set"); } if(*radiusstr) { widthstr = radiusstr; heightstr = radiusstr; } if(!*xstr) xstr="0"; if(!*ystr) ystr="0"; if(!*rotatestr) rotatestr="0"; if(!*shearstr) shearstr="0"; if(*scalestr) { scalex = scaley = parsePercent(scalestr); } else if(*scalexstr || *scaleystr) { if(scalexstr) scalex = parsePercent(scalexstr); if(scaleystr) scaley = parsePercent(scaleystr); } else if(*widthstr || *heightstr) { int width=0; int height=0; s_getBitmapSize(object, &width, &height); if(*widthstr) scalex = (float)parseTwip(widthstr)/(float)width; if(*heightstr) scaley = (float)parseTwip(heightstr)/(float)height; } x = parseTwip(xstr); y = parseTwip(ystr); rotate = parseFloat(rotatestr); shear = parseFloat(shearstr); s_texture(name, object, x,y,scalex,scaley,rotate, shear); return 0; } static int c_texture(map_t*args) { const char*name = lu(args, "instance"); const char*object = lu(args, "character"); return texture2(name, object, args, 1); } static int c_gradient(map_t*args) { const char*name = lu(args, "name"); int radial= strcmp(lu(args, "radial"), "radial")?0:1; int rotate = parseInt(lu(args, "rotate")); readToken(); if(type != RAWDATA) syntaxerror("colon (:) expected"); if(dict_lookup(&gradients, name)) syntaxerror("gradient %s defined twice", name); s_gradient(name, text, radial, rotate); /* check whether we also have placement information, which would make this a positioned gradient. If there is placement information, texture2() will add a texture, which has priority over the gradient. */ texture2(name, name, args, 0); return 0; } static const char* checkFiltername(map_t* args) { const char* name = lu(args, "name"); if(strchr(name, ',')) syntaxerror("the comma (,) is used to separate filters in filterlists. Please do not use in filternames."); return name; } static int c_blur(map_t*args) { const char*name = checkFiltername(args); const char*blurstr = lu(args, "blur"); const char*blurxstr = lu(args, "blurx"); const char*blurystr = lu(args, "blury"); float blurx=1.0, blury=1.0; if(blurstr[0]) { blurx = parseFloat(blurstr); blury = parseFloat(blurstr); } if(blurxstr[0]) blurx = parseFloat(blurxstr); if(blurystr[0]) blury = parseFloat(blurystr); int passes = parseInt(lu(args, "passes")); s_blur(name, blurx, blury, passes); return 0; } static int c_gradientglow(map_t*args) { const char*name = checkFiltername(args); const char*gradient = lu(args, "gradient"); const char*blurstr = lu(args, "blur"); const char*blurxstr = lu(args, "blurx"); const char*blurystr = lu(args, "blury"); float blurx=1.0, blury=1.0; if(blurstr[0]) { blurx = parseFloat(blurstr); blury = parseFloat(blurstr); } if(blurxstr[0]) blurx = parseFloat(blurxstr); if(blurystr[0]) blury = parseFloat(blurystr); float angle = parseFloat(lu(args, "angle")) / 180 * M_PI; float distance = parseFloat(lu(args, "distance")); float strength = parseFloat(lu(args, "strength")); char innershadow = strcmp(lu(args, "innershadow"),"innershadow")?0:1; char knockout = strcmp(lu(args, "knockout"),"knockout")?0:1; char composite = strcmp(lu(args, "composite"),"composite")?0:1; char ontop = strcmp(lu(args, "ontop"),"ontop")?0:1; int passes = parseInt(lu(args, "passes")); s_gradientglow(name, gradient, blurx, blury, angle, distance, strength, innershadow, knockout, composite, ontop, passes); return 0; } static int c_dropshadow(map_t*args) { const char*name = checkFiltername(args); RGBA color = parseColor(lu(args, "color")); const char*blurstr = lu(args, "blur"); const char*blurxstr = lu(args, "blurx"); const char*blurystr = lu(args, "blury"); float blurx=1.0, blury=1.0; if(blurstr[0]) { blurx = parseFloat(blurstr); blury = parseFloat(blurstr); } if(blurxstr[0]) blurx = parseFloat(blurxstr); if(blurystr[0]) blury = parseFloat(blurystr); float angle = parseFloat(lu(args, "angle")) / 180 * M_PI; float distance = parseFloat(lu(args, "distance")); float strength = parseFloat(lu(args, "strength")); char innershadow = strcmp(lu(args, "innershadow"),"innershadow")?0:1; char knockout = strcmp(lu(args, "knockout"),"knockout")?0:1; char composite = strcmp(lu(args, "composite"),"composite")?0:1; int passes = parseInt(lu(args, "passes")); s_dropshadow(name, color, blurx, blury, angle, distance, strength, innershadow, knockout, composite, passes); return 0; } static int c_bevel(map_t*args) { const char*name = checkFiltername(args); RGBA shadow = parseColor(lu(args, "shadow")); RGBA highlight = parseColor(lu(args, "highlight")); const char*blurstr = lu(args, "blur"); const char*blurxstr = lu(args, "blurx"); const char*blurystr = lu(args, "blury"); float blurx=1.0, blury=1.0; if(blurstr[0]) { blurx = parseFloat(blurstr); blury = parseFloat(blurstr); } if(blurxstr[0]) blurx = parseFloat(blurxstr); if(blurystr[0]) blury = parseFloat(blurystr); float angle = parseFloat(lu(args, "angle")) / 180 * M_PI; float distance = parseFloat(lu(args, "distance")); float strength = parseFloat(lu(args, "strength")); char innershadow = strcmp(lu(args, "innershadow"),"innershadow")?0:1; char knockout = strcmp(lu(args, "knockout"),"knockout")?0:1; char composite = strcmp(lu(args, "composite"),"composite")?0:1; char ontop = strcmp(lu(args, "ontop"),"ontop")?0:1; int passes = parseInt(lu(args, "passes")); s_bevel(name, shadow, highlight, blurx, blury, angle, distance, strength, innershadow, knockout, composite, ontop, passes); return 0; } static int c_define(map_t*args) { const char*name = lu(args, "name"); const char*value = lu(args, "value"); if(!defines_initialized) { dict_init(&defines, 16); mem_init(&define_values); defines_initialized = 1; } int val = parseTwip(value); int pos = mem_put(&define_values, &val, sizeof(val)); dict_put(&defines, name, INT_AS_PTR(pos + 1)); return 0; } static int c_point(map_t*args) { const char*name = lu(args, "name"); int pos; SPOINT p; if(!points_initialized) { dict_init(&points, 16); mem_init(&mpoints); points_initialized = 1; } p.x = parseTwip(lu(args, "x")); p.y = parseTwip(lu(args, "y")); pos = mem_put(&mpoints, &p, sizeof(p)); dict_put(&points, name, INT_AS_PTR(pos+1)); return 0; } static int c_play(map_t*args) { const char*name = lu(args, "name"); const char*loop = lu(args, "loop"); const char*nomultiple = lu(args, "nomultiple"); int nm = 0; if(!strcmp(nomultiple, "nomultiple")) nm = 1; else nm = parseInt(nomultiple); if(s_playsound(name, parseInt(loop), nm, 0)) { return 0; } else if(s_swf3action(name, "play")) { return 0; } return 0; } static int c_stop(map_t*args) { const char*name = map_lookup(args, "name"); if(s_playsound(name, 0,0,1)) return 0; else if(s_swf3action(name, "stop")) return 0; syntaxerror("I don't know anything about sound/movie \"%s\"", name); return 0; } static int c_nextframe(map_t*args) { const char*name = lu(args, "name"); if(s_swf3action(name, "nextframe")) { return 0; } syntaxerror("I don't know anything about movie \"%s\"", name); return 0; } static int c_previousframe(map_t*args) { const char*name = lu(args, "name"); if(s_swf3action(name, "previousframe")) { return 0; } syntaxerror("I don't know anything about movie \"%s\"", name); return 0; } static int c_movement(map_t*args, int type) { const char*instance = lu(args, "name"); const char* xstr=""; const char* ystr=""; SRECT oldbbox; parameters_t p; U16 set = 0x0000; xstr = lu(args, "x"); ystr = lu(args, "y"); s_getParameters(instance, &p); /* x,y position */ if(xstr[0]) { if(isRelative(xstr)) { if(type == PT_PUT || type == PT_STARTCLIP) syntaxerror("relative x values not allowed for initial put or startclip"); p.x += parseTwip(getOffset(xstr))*getSign(xstr); } else { p.x = parseTwip(xstr); } set = set | SF_X; } if(ystr[0]) { if(isRelative(ystr)) { if(type == PT_PUT || type == PT_STARTCLIP) syntaxerror("relative y values not allowed for initial put or startclip"); p.y += parseTwip(getOffset(ystr))*getSign(ystr); } else { p.y = parseTwip(ystr); } set = set | SF_Y; } if(change_sets_all) set = SF_ALL; p.set = set; switch (type) { case PT_MOVE: { const char* interstr = lu(args, "interpolation"); interpolation_t* inter = (interpolation_t*)dict_lookup(&interpolations, interstr); if(!inter) syntaxerror("unknown interpolation %s", interstr); s_change(instance, p, inter); } break; case PT_SMOVE: { const char* interstr = lu(args, "interpolation"); interpolation_t* inter = (interpolation_t*)dict_lookup(&interpolations, interstr); if(!inter) syntaxerror("unknown interpolation %s", interstr); s_schange(instance, p, inter); } break; case PT_SWEEP: { const char* rstr = lu(args, "r"); int radius = parseTwip(rstr); if(radius <= 0) syntaxerror("sweep not possible: radius must be greater than 0."); const char* dirstr = lu(args, "dir"); int clockwise = parseDir(dirstr); const char* arcstr = lu(args, "arc"); int short_arc = parseArc(arcstr); const char* interstr = lu(args, "interpolation"); interpolation_t* inter = (interpolation_t*)dict_lookup(&interpolations, interstr); if(!inter) syntaxerror("unknown interpolation %s", interstr); s_sweep(instance, p, radius, clockwise, short_arc, inter); } break; } return 0; } static int c_placement(map_t*args, int type) { const char*instance = lu(args, (type==PT_PUT||type==PT_STARTCLIP)?"instance":"name"); const char*character = 0; const char* luminancestr = lu(args, "luminance"); const char* scalestr = lu(args, "scale"); const char* scalexstr = lu(args, "scalex"); const char* scaleystr = lu(args, "scaley"); const char* rotatestr = lu(args, "rotate"); const char* shearstr = lu(args, "shear"); const char* xstr="", *pivotstr=""; const char* ystr="", *anglestr=""; const char*above = lu(args, "above"); /*FIXME*/ const char*below = lu(args, "below"); const char* rstr = lu(args, "red"); const char* gstr = lu(args, "green"); const char* bstr = lu(args, "blue"); const char* astr = lu(args, "alpha"); const char* pinstr = lu(args, "pin"); const char* as = map_lookup(args, "as"); const char* blendmode = lu(args, "blend"); const char* filterstr = lu(args, "filter"); const char* noinstancenamestr = ""; U8 blend; MULADD r,g,b,a; float oldwidth; float oldheight; SRECT oldbbox; MULADD luminance; parameters_t p; U16 set = 0x0000; if(type==PT_PUT) noinstancenamestr = lu(args, "noinstancename"); if(type==9) { // (?) .rotate or .arcchange pivotstr = lu(args, "pivot"); anglestr = lu(args, "angle"); } else { xstr = lu(args, "x"); ystr = lu(args, "y"); } if(luminancestr[0]) luminance = parseMulAdd(luminancestr); else { luminance.add = 0; luminance.mul = 256; } if(scalestr[0]) { if(scalexstr[0]||scaleystr[0]) syntaxerror("scalex/scaley and scale cannot both be set"); scalexstr = scaleystr = scalestr; } if(type == PT_PUT || type == PT_STARTCLIP) { // put or startclip character = lu(args, "character"); parameters_clear(&p); } else if(type == PT_BUTTON) { character = lu(args, "name"); parameters_clear(&p); // button's show } else { s_getParameters(instance, &p); } /* noinstancename */ p.noinstancename = !strcmp(noinstancenamestr, "noinstancename"); /* x,y position */ if(xstr[0]) { if(isRelative(xstr)) { if(type == PT_PUT || type == PT_STARTCLIP) syntaxerror("relative x values not allowed for initial put or startclip"); p.x += parseTwip(getOffset(xstr))*getSign(xstr); } else { p.x = parseTwip(xstr); } set = set | SF_X; } if(ystr[0]) { if(isRelative(ystr)) { if(type == PT_PUT || type == PT_STARTCLIP) syntaxerror("relative y values not allowed for initial put or startclip"); p.y += parseTwip(getOffset(ystr))*getSign(ystr); } else { p.y = parseTwip(ystr); } set = set | SF_Y; } /* scale, scalex, scaley */ if(character) oldbbox = s_getCharBBox(character); else oldbbox = s_getInstanceBBox(instance); oldwidth = oldbbox.xmax - oldbbox.xmin; oldheight = oldbbox.ymax - oldbbox.ymin; if(scalexstr[0]) { if(oldwidth==0) p.scalex = 1.0; else if(scalexstr[0]) p.scalex = (float)(parseNewSize(scalexstr, oldwidth))/oldwidth; set = set | SF_SCALEX; } if(scaleystr[0]) { if(oldheight==0) p.scaley = 1.0; else if(scaleystr[0]) p.scaley = (float)(parseNewSize(scaleystr, oldheight))/oldheight; set = set | SF_SCALEY; } /* rotation */ if(rotatestr[0]) { if(isRelative(rotatestr)) p.rotate += parseFloat(getOffset(rotatestr))*getSign(rotatestr); else p.rotate = parseFloat(rotatestr); set = set | SF_ROTATE; } /* shearing */ if(shearstr[0]) { if(isRelative(shearstr)) p.shear += parseFloat(getOffset(shearstr))*getSign(shearstr); else p.shear = parseFloat(shearstr); set = set | SF_SHEAR; } if(pivotstr[0]) { if(isPoint(pivotstr)) p.pivot = parsePoint(pivotstr); else p.pivot = getPoint(oldbbox, pivotstr); set = set | SF_PIVOT; } if(pinstr[0]) { if(isPoint(pinstr)) p.pin = parsePoint(pinstr); else p.pin = getPoint(oldbbox, pinstr); set = set | SF_PIN; } /* color transform */ if(rstr[0] || luminancestr[0]) { MULADD r; if(rstr[0]) r = parseMulAdd(rstr); else { r.add = p.cxform.r0; r.mul = p.cxform.r1; } r = mergeMulAdd(r, luminance); p.cxform.r0 = r.mul; p.cxform.r1 = r.add; set = set | SF_CX_R; } if(gstr[0] || luminancestr[0]) { MULADD g; if(gstr[0]) g = parseMulAdd(gstr); else { g.add = p.cxform.g0; g.mul = p.cxform.g1; } g = mergeMulAdd(g, luminance); p.cxform.g0 = g.mul; p.cxform.g1 = g.add; set = set | SF_CX_G; } if(bstr[0] || luminancestr[0]) { MULADD b; if(bstr[0]) b = parseMulAdd(bstr); else { b.add = p.cxform.b0; b.mul = p.cxform.b1; } b = mergeMulAdd(b, luminance); p.cxform.b0 = b.mul; p.cxform.b1 = b.add; set = set | SF_CX_B; } if(astr[0]) { MULADD a = parseMulAdd(astr); p.cxform.a0 = a.mul; p.cxform.a1 = a.add; set = set | SF_CX_A; } if(blendmode[0]) { int t; blend = 255; for(t = 0; blendModeNames[t]; t++) { if(!strcmp(blendModeNames[t], blendmode)) { blend = t; break; } } if(blend == 255) { syntaxerror("unknown blend mode: '%s'", blendmode); } p.blendmode = blend; set = set | SF_BLEND; } if(filterstr[0]) { p.filters = parseFilters((char*)filterstr); set = set | SF_FILTER; } if(type == PT_CHANGE && set & (SF_X | SF_Y)) warning("As of version 0.8.2 using the .change command to modify an \ object's position on the stage is considered deprecated. Future \ versions may consider x and y parameters for the .change command \ to be illegal; please use the .move command."); if(change_sets_all) set = SF_ALL; p.set = set; switch (type) { case PT_PUT: s_put(instance, character, p); break; case PT_CHANGE: { const char* interstr = lu(args, "interpolation"); interpolation_t* inter = (interpolation_t*)dict_lookup(&interpolations, interstr); if(!inter) syntaxerror("unknown interpolation %s", interstr); s_change(instance, p, inter); } break; case PT_SCHANGE: { const char* interstr = lu(args, "interpolation"); interpolation_t* inter = (interpolation_t*)dict_lookup(&interpolations, interstr); if(!inter) syntaxerror("unknown interpolation %s", interstr); s_schange(instance, p, inter); } break; case PT_JUMP: s_jump(instance, p); break; case PT_STARTCLIP: s_startclip(instance, character, p); break; case PT_BUTTON: if(as && as[0]) s_buttonput(character, as, p); else s_buttonput(character, "shape", p); break; // default: } return 0; } static int c_put(map_t*args) { c_placement(args, PT_PUT); return 0; } static int c_change(map_t*args) { if(currentframe == 0) warning("change commands in frame 1 will be ignored, please use the put command to set object parameters"); c_placement(args, PT_CHANGE); return 0; } static int c_schange(map_t*args) { c_placement(args, PT_SCHANGE); return 0; } static int c_move(map_t* args) { c_movement(args, PT_MOVE); return 0; } static int c_smove(map_t* args) { c_movement(args, PT_SMOVE); return 0; } static int c_sweep(map_t* args) { c_movement(args, PT_SWEEP); return 0; } static int c_arcchange(map_t*args) { c_placement(args, 0); return 0; } static int c_jump(map_t*args) { c_placement(args, PT_JUMP); return 0; } static int c_startclip(map_t*args) { c_placement(args, PT_STARTCLIP); return 0; } static int c_show(map_t*args) { c_placement(args, PT_BUTTON); return 0; } static int c_toggle(map_t* args) { const char*instance = lu(args, "name"); U16 flagsOn = 0x0000, flagsOff = 0xffff; const char* alignstr = lu(args, "fixed_alignment"); if(!strcmp(alignstr, "on")) flagsOn += IF_FIXED_ALIGNMENT; else if(!strcmp(alignstr, "off")) flagsOff -= IF_FIXED_ALIGNMENT; else syntaxerror("values for toggle must be \"on\" or \"off\". %s is not legal.", alignstr); s_toggle(instance, flagsOn, flagsOff); return 0; } static int c_del(map_t*args) { const char*instance = lu(args, "name"); s_delinstance(instance); return 0; } static int c_end(map_t*args) { s_end(); return 0; } static int c_sprite(map_t*args) { const char* name = lu(args, "name"); const char* scalinggrid = lu(args, "scalinggrid"); const char* as3name = lu(args, "as3name"); if(scalinggrid && *scalinggrid) { SRECT r = parseBox(scalinggrid); s_sprite(name, &r, as3name); } else { s_sprite(name, 0, as3name); } return 0; } static int c_frame(map_t*args) { const char*framestr = lu(args, "n"); const char*cutstr = lu(args, "cut"); const char*name = lu(args, "name"); const char*anchor = lu(args, "anchor"); char buf[40]; if(!strcmp(anchor, "anchor") && !*name) name = framestr; int frame; int cut = 0; if(strcmp(cutstr, "no")) cut = 1; if(isRelative(framestr)) { frame = s_getframe(); if(getSign(framestr)<0) syntaxerror("relative frame expressions must be positive"); frame += parseInt(getOffset(framestr)); } else { frame = parseInt(framestr); if(s_getframe() >= frame && !(frame==1 && s_getframe()==frame)) // equality is o.k. for frame 0 syntaxerror("frame expression must be >%d (is:%s)", s_getframe(), framestr); } s_frame(frame, cut, name, !strcmp(anchor, "anchor")); return 0; } static int c_primitive(map_t*args) { const char*name = lu(args, "name"); const char*command = lu(args, "commandname"); int width=0, height=0, r=0; int linewidth = parseTwip(lu(args, "line")); const char*colorstr = lu(args, "color"); RGBA color = parseColor(colorstr); const char*fillstr = lu(args, "fill"); int dofill = 1; int type=0; const char* font; const char* text; const char* outline=0; RGBA fill; if(!strcmp(command, "circle")) type = 1; else if(!strcmp(command, "filled")) type = 2; if(type==0) { width = parseTwip(lu(args, "width")); height = parseTwip(lu(args, "height")); } else if(type==1) { r = parseTwip(lu(args, "r")); } else if(type==2) { outline = lu(args, "outline"); } if(!strcmp(fillstr, "fill")) fillstr = colorstr; if(!strcmp(fillstr, "none")) fillstr = 0; if(width<0 || height<0 || linewidth<0 || r<0) syntaxerror("values width, height, line, r must be positive"); if(type == 0) s_box(name, width, height, color, linewidth, fillstr); else if(type==1) s_circle(name, r, color, linewidth, fillstr); else if(type==2) s_filled(name, outline, color, linewidth, fillstr); return 0; } static int c_textshape(map_t*args) { const char*name = lu(args, "name"); const char*text = lu(args, "text"); const char*font = lu(args, "font"); float size = parsePxOrPercent(font, lu(args, "size")); s_textshape(name, font, size, text); return 0; } static int c_swf(map_t*args) { const char*name = lu(args, "name"); const char*filename = lu(args, "filename"); const char*command = lu(args, "commandname"); const char*as3name = lu(args, "as3name"); if(!strcmp(command, "shape")) warning("Please use .swf instead of .shape"); s_includeswf(name, filename, as3name); return 0; } static int c_font(map_t*args) { const char*name = lu(args, "name"); const char*filename = lu(args, "filename"); s_font(name, filename); return 0; } static int c_sound(map_t*args) { const char*name = lu(args, "name"); const char*filename = lu(args, "filename"); s_sound(name, filename); return 0; } static int c_text(map_t*args) { const char*name = lu(args, "name"); const char*text = lu(args, "text"); const char*font = lu(args, "font"); float size = parsePxOrPercent(font, lu(args, "size")); RGBA color = parseColor(lu(args, "color")); s_text(name, font, text, (int)(size*100), color); return 0; } static int c_soundtrack(map_t*args) { return 0; } static int c_quicktime(map_t*args) { const char*name = lu(args, "name"); const char*url = lu(args, "url"); s_quicktime(name, url); return 0; } static int c_video(map_t*args) { const char*name = lu(args, "name"); int width = parseInt(lu(args, "width")); int height = parseInt(lu(args, "height")); s_video(name, width, height); return 0; } static int c_image(map_t*args) { const char*command = lu(args, "commandname"); const char*name = lu(args, "name"); const char*filename = lu(args, "filename"); if(!strcmp(command,"jpeg")) { int quality = (int)(parsePercent(lu(args, "quality"))*100); s_image(name, "jpeg", filename, quality); } else { s_image(name, "png", filename, 0); } return 0; } static int c_outline(map_t*args) { const char*name = lu(args, "name"); const char*format = lu(args, "format"); readToken(); if(type != RAWDATA) syntaxerror("colon (:) expected"); s_outline(name, format, text); return 0; } int fakechar(map_t*args) { const char*name = lu(args, "name"); s_box(name, 0, 0, black, 20, 0); return 0; } static int c_egon(map_t*args) {return fakechar(args);} static int c_button(map_t*args) { const char*name = lu(args, "name"); const char*as3name = lu(args, "as3name"); s_button(name, as3name); return 0; } static int current_button_flags = 0; static int c_on_press(map_t*args) { const char*position = lu(args, "position"); const char*action = ""; if(!strcmp(position, "inside")) { current_button_flags |= BC_OVERUP_OVERDOWN; } else if(!strcmp(position, "outside")) { //current_button_flags |= BC_IDLE_OUTDOWN; syntaxerror("IDLE_OVERDOWN not supported by SWF"); } else if(!strcmp(position, "anywhere")) { current_button_flags |= /*BC_IDLE_OUTDOWN|*/BC_OVERUP_OVERDOWN|BC_IDLE_OVERDOWN; } readToken(); if(type == RAWDATA) { action = text; s_buttonaction(current_button_flags, action); current_button_flags = 0; } else pushBack(); return 0; } static int c_on_release(map_t*args) { const char*position = lu(args, "position"); const char*action = ""; if(!strcmp(position, "inside")) { current_button_flags |= BC_OVERDOWN_OVERUP; } else if(!strcmp(position, "outside")) { current_button_flags |= BC_OUTDOWN_IDLE; } else if(!strcmp(position, "anywhere")) { current_button_flags |= BC_OVERDOWN_OVERUP|BC_OUTDOWN_IDLE|BC_OVERDOWN_IDLE; } readToken(); if(type == RAWDATA) { action = text; s_buttonaction(current_button_flags, action); current_button_flags = 0; } else pushBack(); return 0; } static int c_on_move_in(map_t*args) { const char*position = lu(args, "state"); const char*action = ""; if(!strcmp(position, "pressed")) { current_button_flags |= BC_OUTDOWN_OVERDOWN; } else if(!strcmp(position, "not_pressed")) { current_button_flags |= BC_IDLE_OVERUP; } else if(!strcmp(position, "any")) { current_button_flags |= BC_OUTDOWN_OVERDOWN|BC_IDLE_OVERUP|BC_IDLE_OVERDOWN; } readToken(); if(type == RAWDATA) { action = text; s_buttonaction(current_button_flags, action); current_button_flags = 0; } else pushBack(); return 0; } static int c_on_move_out(map_t*args) { const char*position = lu(args, "state"); const char*action = ""; if(!strcmp(position, "pressed")) { current_button_flags |= BC_OVERDOWN_OUTDOWN; } else if(!strcmp(position, "not_pressed")) { current_button_flags |= BC_OVERUP_IDLE; } else if(!strcmp(position, "any")) { current_button_flags |= BC_OVERDOWN_OUTDOWN|BC_OVERUP_IDLE|BC_OVERDOWN_IDLE; } readToken(); if(type == RAWDATA) { action = text; s_buttonaction(current_button_flags, action); current_button_flags = 0; } else pushBack(); return 0; } static int c_on_key(map_t*args) { const char*key = lu(args, "key"); const char*action = ""; if(strlen(key)==1) { /* ascii */ if(key[0]>=32) { current_button_flags |= 0x4000 + (key[0]*0x200); } else { syntaxerror("invalid character: %c"+key[0]); return 1; } } else { /* TODO: = 0x200*(x-'a') esc = = 0x3600 space = = 0x4000; */ syntaxerror("invalid key: %s",key); } readToken(); if(type == RAWDATA) { action = text; s_buttonaction(current_button_flags, action); current_button_flags = 0; } else pushBack(); return 0; } static int c_edittext(map_t*args) { //"name font size width height text="" color=black maxlength=0 variable="" @password=0 @wordwrap=0 @multiline=0 @html=0 @noselect=0 @readonly=0 @autosize=0"}, const char*name = lu(args, "name"); const char*font = lu(args, "font"); int size = (int)(1024*parsePxOrPercent(font, lu(args, "size"))); int width = parseTwip(lu(args, "width")); int height = parseTwip(lu(args, "height")); const char*text = lu(args, "text"); RGBA color = parseColor(lu(args, "color")); int maxlength = parseInt(lu(args, "maxlength")); const char*variable = lu(args, "variable"); const char*passwordstr = lu(args, "password"); const char*wordwrapstr = lu(args, "wordwrap"); const char*multilinestr = lu(args, "multiline"); const char*htmlstr = lu(args, "html"); const char*noselectstr = lu(args, "noselect"); const char*readonlystr = lu(args, "readonly"); const char*borderstr = lu(args, "border"); const char*autosizestr = lu(args, "autosize"); const char*alignstr = lu(args, "align"); int align = -1; int flags = 0; if(!strcmp(passwordstr, "password")) flags |= ET_PASSWORD; if(!strcmp(wordwrapstr, "wordwrap")) flags |= ET_WORDWRAP; if(!strcmp(multilinestr, "multiline")) flags |= ET_MULTILINE; if(!strcmp(readonlystr, "readonly")) flags |= ET_READONLY; if(!strcmp(htmlstr, "html")) flags |= ET_HTML; if(!strcmp(noselectstr, "noselect")) flags |= ET_NOSELECT; if(!strcmp(borderstr, "border")) flags |= ET_BORDER; if(!strcmp(autosizestr, "autosize")) flags |= ET_AUTOSIZE; if(!strcmp(alignstr, "left") || !*alignstr) align = ET_ALIGN_LEFT; else if(!strcmp(alignstr, "right")) align = ET_ALIGN_RIGHT; else if(!strcmp(alignstr, "center")) align = ET_ALIGN_CENTER; else if(!strcmp(alignstr, "justify")) align = ET_ALIGN_JUSTIFY; else syntaxerror("Unknown alignment: %s", alignstr); s_edittext(name, font, size, width, height, text, &color, maxlength, variable, flags, align); return 0; } static int c_morphshape(map_t*args) {return fakechar(args);} static int c_movie(map_t*args) {return fakechar(args);} static char* readfile(char*filename) { FILE*fi = fopen(filename, "rb"); int l; char*text; if(!fi) syntaxerror("Couldn't find file %s: %s", filename, strerror(errno)); fseek(fi, 0, SEEK_END); l = ftell(fi); fseek(fi, 0, SEEK_SET); text = rfx_alloc(l+1); int r = fread(text, l, 1, fi); if(r<1) syntaxerror("Couldn't read file %s: %s", filename, strerror(errno)); text[l]=0; fclose(fi); return text; } static int c_action(map_t*args) { const char* filename = map_lookup(args, "filename"); if(!filename ||!*filename) { readToken(); if(type != RAWDATA) { syntaxerror("colon (:) expected"); } s_action(text); } else { s_action(readfile((char*)filename)); } return 0; } static int c_initaction(map_t*args) { const char* character = lu(args, "name"); const char* filename = map_lookup(args, "filename"); if(!filename ||!*filename) { readToken(); if(type != RAWDATA) { syntaxerror("colon (:) expected"); } s_initaction(character, text); } else { s_initaction(character, readfile((char*)filename)); } return 0; } static struct { char*command; command_func_t* func; char*arguments; } arguments[] = {{"flash", c_flash, "bbox=autocrop background=black version=6 fps=50 name= filename= @compress=default @change-sets-all=no @export=1 @mainclass="}, {"frame", c_frame, "n=1 name= @cut=no @anchor=no"}, // "import" type stuff {"swf", c_swf, "name filename as3name="}, {"shape", c_swf, "name filename"}, {"jpeg", c_image, "name filename quality=80%"}, {"png", c_image, "name filename"}, {"movie", c_movie, "name filename"}, {"sound", c_sound, "name filename"}, {"font", c_font, "name filename glyphs= @flashtype="}, {"soundtrack", c_soundtrack, "filename"}, {"quicktime", c_quicktime, "url"}, {"video", c_video, "name width= height="}, // generators of primitives {"define", c_define, "name value=0"}, {"point", c_point, "name x=0 y=0"}, {"gradient", c_gradient, "name @radial=0 rotate=0 scale= scalex= scaley= x= y= width= height= r= shear="}, //extra parameters like .texture {"interpolation", c_interpolation, "name function=linear speed=1.3 amplitude=0 bounces=2 growth=1.5 damping=2 slope=0"}, {"outline", c_outline, "name format=simple"}, {"textshape", c_textshape, "name font size=100% text"}, // filters {"blur", c_blur, "name blur= blurx= blury= passes=1"}, {"gradientglow", c_gradientglow, "name gradient blur= blurx= blury= angle=0.0 distance=0.0 strength=1.0 @innershadow=0 @knockout=0 @composite=0 @ontop=0 passes=1"}, {"dropshadow", c_dropshadow, "name color blur= blurx= blury= angle=0.0 distance=0.0 strength=1.0 @innershadow=0 @knockout=0 @composite=0 passes=1"}, {"bevel", c_bevel, "name shadow highlight blur= blurx= blury= angle=0.0 distance=0.0 strength=1.0 @innershadow=0 @knockout=0 @composite=0 @ontop=0 passes=1"}, // character generators {"box", c_primitive, "name width height color=white line=1 @fill=none"}, {"circle", c_primitive, "name r color=white line=1 @fill=none"}, {"filled", c_primitive, "name outline color=white line=1 @fill=none"}, {"egon", c_egon, "name vertices color=white line=1 @fill=none"}, {"text", c_text, "name text font size=100% color=white"}, {"edittext", c_edittext, "name font= size=100% width height text="" color=white maxlength=0 variable="" @password=0 @wordwrap=0 @multiline=0 @html=0 @noselect=0 @readonly=0 @border=0 @autosize=0 align="}, {"morphshape", c_morphshape, "name start end"}, {"button", c_button, "name as3name="}, {"show", c_show, "name x=0 y=0 red=+0 green=+0 blue=+0 alpha=+0 luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below= as="}, {"on_press", c_on_press, "position=inside"}, {"on_release", c_on_release, "position=anywhere"}, {"on_move_in", c_on_move_in, "state=not_pressed"}, {"on_move_out", c_on_move_out, "state=not_pressed"}, {"on_key", c_on_key, "key=any"}, // control tags {"play", c_play, "name loop=0 @nomultiple=0"}, {"stop", c_stop, "name= "}, {"nextframe", c_nextframe, "name"}, {"previousframe", c_previousframe, "name"}, // object placement tags {"put", c_put, " x=0 y=0 red=+0 green=+0 blue=+0 alpha=+0 luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below= @noinstancename=0"}, {"startclip", c_startclip, " x=0 y=0 red=+0 green=+0 blue=+0 alpha=+0 luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below= @noinstancename=0"}, {"move", c_move, "name x= y= interpolation=linear"}, {"smove", c_smove, "name x= y= interpolation=linear"}, {"sweep", c_sweep, "name x= y= r= dir=counterclockwise arc=short interpolation=linear"}, {"change", c_change, "name x= y= red= green= blue= alpha= luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below= interpolation=linear"}, //{"arcchange", c_arcchange, "name pivot= angle= red= green= blue= alpha= luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below="}, {"schange", c_schange, "name red= green= blue= alpha= luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below= interpolation=linear"}, {"jump", c_jump, "name x= y= red= green= blue= alpha= luminance= scale= scalex= scaley= blend= filter= pivot= pin= shear= rotate= ratio= above= below="}, {"del", c_del, "name"}, // virtual object placement {"texture", c_texture, " x=0 y=0 width= height= scale= scalex= scaley= r= shear= rotate="}, // switching {"toggle", c_toggle, "name fixed_alignment="}, // commands which start a block //startclip (see above) {"sprite", c_sprite, "name scalinggrid= as3name="}, {"action", c_action, "filename="}, {"initaction", c_initaction, "name filename="}, {"end", c_end, ""} }; static map_t parseArguments(char*command, char*pattern) { char*x; char*d,*e; string_t name[64]; string_t value[64]; int set[64]; int isboolean[64]; int pos; int len; int t; string_t t1,t2; map_t result; map_init(&result); string_set(&t1, "commandname"); string_set(&t2, command); map_put(&result, t1, t2); if(!pattern || !*pattern) return result; x = pattern; pos = 0; if(!strncmp(" ", x, 3)) { readToken(); if(type == COMMAND || type == RAWDATA) { pushBack(); syntaxerror("character name expected"); } name[pos].str = "instance"; name[pos].len = 8; value[pos].str = text; value[pos].len = strlen(text); set[pos] = 1; pos++; if(type == ASSIGNMENT) readToken(); name[pos].str = "character"; name[pos].len = 9; value[pos].str = text; value[pos].len = strlen(text); set[pos] = 1; pos++; x+=4; } while(*x) { isboolean[pos] = (x[0] =='@'); if(isboolean[pos]) x++; d = strchr(x, ' '); e = strchr(x, '='); if(!d) d=&x[strlen(x)]; set[pos] = 0; if(!e || dtextlen?name[pos].len:textlen)) { set[pos] = 1; if(type == ASSIGNMENT) readToken(); value[pos].str = text; value[pos].len = strlen(text); /*printf("setting boolean parameter %s (to %s)\n", strdup_n(name[pos], namelen[pos]), strdup_n(value[pos], valuelen[pos]));*/ break; } } // second, search for normal arguments if(pos==len) for(pos=0;postextlen?name[pos].len:textlen)) || (type != ASSIGNMENT && !set[pos])) { if(set[pos]) { syntaxerror("value %s set twice (old value:%s)", text, strdup_n(value[pos].str, value[pos].len)); } if(type == ASSIGNMENT) readToken(); set[pos] = 1; value[pos].str = text; value[pos].len = strlen(text); #if 0//def DEBUG printf("setting parameter %s (to %s)\n", strdup_n(name[pos].str, name[pos].len), strdup_n(value[pos].str, value[pos].len)); #endif break; } } if(pos==len) { syntaxerror("Illegal argument \"%s\" to .%s", text, command); } } #if 0//def DEBUG for(t=0;t parse Command: %s (line %d)", command, line); for(t=0;t analyse Command: %s (line %d)", command, line); for(t=0;tuse && !font->use->glyphs_specified) { if(!strcmp(command, "edittext")) { swf_FontUseAll(font); font->use->glyphs_specified = 1; } else swf_FontUseUTF8(font, (U8*)lu(&args, "text"), 0xffff); } } map_clear(&args); return; } void skipParameters() { do readToken(); while (type != COMMAND); pushBack(); } void findFontUsage() { char* fontRelated = "font;text;textshape;edittext;"; while(!noMoreTokens()) { readToken(); if(type != COMMAND) syntaxerror("command expected"); if(strstr(fontRelated, text)) analyseArgumentsForCommand(text); else if(strcmp(text, "end")) skipParameters(); } } void firstPass() { pos = 0; id = 0; dict_init(&fonts, 16); cleanUp = &freeFontDictionary; findFontUsage(); } int main (int argc,char ** argv) { int t; processargs(argc, argv); initLog(0,-1,0,0,-1,verbose); if(!filename) { args_callback_usage(argv[0]); exit(1); } file = generateTokens(filename); if(!file) { fprintf(stderr, "parser returned error.\n"); return 1; } firstPass(); pos=0; t=0; while(!noMoreTokens()) { readToken(); if(type != COMMAND) syntaxerror("command expected"); parseArgumentsForCommand(text); } s_close(); freeTokens(file); return 0; } swftools_0.9.2+git20130725.orig/src/png2swf.10000644000175000017500000000357712216332640017576 0ustar gawaingawain.TH png2swf "1" "April 2012" "png2swf" "swftools" .SH NAME png2swf \- Takes a number of png files and converts them to a swf movie, one picture per frame. .SH Synopsis .B png2swf [\-X width] [\-Y height] [\-o file.swf] [\-r rate] file1.png [file2.png...] .SH DESCRIPTION This tools converts png image files into an SWF animation. It takes any number of input pictures, and converts them to SWF one\-by\-one, where every converted picture is a seperate frame in the target SWF. .PP The way the images are encoded in SWF is very similar to PNG (in that a zlib\-based, lossless compression algorithm is used). .SH OPTIONS .TP \fB\-r\fR, \fB\-\-rate\fR \fIframerate\fR Set movie framerate (frames per second) .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Explicitly specify output file. (Otherwise, output will go to stdout / output.swf) .TP \fB\-j\fR, \fB\-\-jpeg\fR \fIquality\fR Generate a lossy jpeg bitmap inside the SWF, with a given quality (1-100) .TP \fB\-z\fR, \fB\-\-zlib\fR \fIzlib\fR Use Flash MX (SWF 6) Zlib encoding for the output. The resulting SWF will be smaller, but not playable in Flash Plugins of Version 5 and below. .TP \fB\-T\fR, \fB\-\-flashversion\fR Set the flash version to generate .TP \fB\-X\fR, \fB\-\-pixel\fR \fIwidth\fR Force movie width to \fIwidth\fR (default: autodetect) .TP \fB\-Y\fR, \fB\-\-pixel\fR \fIheight\fR Force movie height to \fIheight\fR (default: autodetect) .TP \fB\-v\fR, \fB\-\-verbose\fR \fIlevel\fR Set verbose level (0=quiet, 1=default, 2=debug) .TP \fB\-q\fR, \fB\-\-quiet\fR Omit normal log messages, only log errors .TP \fB\-C\fR, \fB\-\-cgi\fR For use as CGI- prepend http header, write to stdout .TP \fB\-V\fR, \fB\-\-version\fR Print version information and exit .TP \fB\-s\fR, \fB\-\-scale\fR \fIpercent\fR Scale image to \fIpercent\fR% size. .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/png2swf.c0000644000175000017500000004503512216332640017653 0ustar gawaingawain/* png2swf.c PNG to SWF converter tool Part of the swftools package. Copyright (c) 2002,2003 Matthias Kramm 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 */ #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/log.h" #include "../lib/png.h" #define MAX_INPUT_FILES 1024 #define VERBOSE(x) (global.verbose>=x) static struct { float framerate; int max_image_width; int max_image_height; int force_width; int force_height; int nfiles; int verbose; int do_cgi; int version; char *outfile; int mkjpeg; float scale; } global; static struct { char *filename; } image[MAX_INPUT_FILES]; static int custom_move=0; static int move_x=0; static int move_y=0; static int clip_x1=0,clip_y1=0,clip_x2=0,clip_y2=0; static int custom_clip = 0; TAG *MovieStart(SWF * swf, float framerate, int dx, int dy) { TAG *t; RGBA rgb; memset(swf, 0x00, sizeof(SWF)); swf->fileVersion = global.version; swf->frameRate = (int)(256.0 * framerate); if(custom_clip) { swf->movieSize.xmin = clip_x1 * 20; swf->movieSize.ymin = clip_y1 * 20; swf->movieSize.xmax = clip_x2 * 20; swf->movieSize.ymax = clip_y2 * 20; } else { swf->movieSize.xmax = dx * 20; swf->movieSize.ymax = dy * 20; } t = swf->firstTag = swf_InsertTag(NULL, ST_SETBACKGROUNDCOLOR); rgb.r = rgb.g = rgb.b = rgb.a = 0x00; //rgb.g = 0xff; //<--- handy for testing alpha conversion swf_SetRGB(t, &rgb); return t; } int MovieFinish(SWF * swf, TAG * t, char *sname) { int f, so = fileno(stdout); t = swf_InsertTag(t, ST_END); if ((!isatty(so)) && (!sname)) f = so; else { if (!sname) sname = "output.swf"; f = open(sname,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); } if(global.do_cgi) { if FAILED(swf_WriteCGI(swf)) fprintf(stderr,"WriteCGI() failed.\n"); } else { if (swf_WriteSWF(f, swf)<0) fprintf(stderr, "Unable to write output file: %s\n", sname); if (f != so) close(f); } swf_FreeTags(swf); return 0; } int png_read_chunk(char (*head)[4], int*destlen, U8**destdata, FILE*fi) { unsigned int len; if(destlen) *destlen=0; if(destdata) *destdata=0; if(!fread(&len, 4, 1, fi)) return 0; if(!fread(head, 4, 1, fi)) return 0; len = BE_32_TO_NATIVE(len); if(destlen) *destlen = len; if(destdata) { if(len) *destdata = malloc(len); else *destdata = 0; if(!fread(*destdata, len, 1, fi)) { *destdata = 0; if(destlen) *destlen=0; return 0; } fseek(fi, 4, SEEK_CUR); } else { fseek(fi, len+4, SEEK_CUR); } return 1; } unsigned int png_get_dword(FILE*fi) { unsigned int a; fread(&a,4,1,fi); return BE_32_TO_NATIVE(a); } struct png_header { int width; int height; int bpp; int mode; }; int png_read_header(FILE*fi, struct png_header*header) { char id[4]; int len; int ok=0; U8 head[8] = {137,80,78,71,13,10,26,10}; U8 head2[8]; U8*data; fread(head2,8,1,fi); if(strncmp((char*)head,(char*)head2,4)) return 0; while(png_read_chunk(&id, &len, &data, fi)) { if(VERBOSE(2)) printf("%c%c%c%c %d\n", id[0],id[1],id[2],id[3],len); if(!strncasecmp(id, "IHDR", 4)) { char a,b,c,f,i; if(len < 8) exit(1); header->width = BE_32_TO_NATIVE(*(U32*)&data[0]); header->height = BE_32_TO_NATIVE(*(U32*)&data[4]); a = data[8]; // should be 8 b = data[9]; // should be 3(indexed), 2(rgb), 0(grayscale) or 6(truecolor+alpha) c = data[10]; // compression mode (0) f = data[11]; // filter mode (0) i = data[12]; // interlace mode (0) if(VERBOSE(2)) printf("image mode:%d\n", b); if(VERBOSE(2)) printf("bpp: %d\n", a); if(VERBOSE(2)) printf("compression: %d\n", c); if(VERBOSE(2)) printf("filter: %d\n", f); if(VERBOSE(2)) printf("interlace: %d\n", i); if(b!=0 && b!=2 && b!=3 && b!=6) { fprintf(stderr, "Image mode %d not supported!\n", b); if(b == 4) { fprintf(stderr, "(This is a grayscale image with alpha channel-\n"); fprintf(stderr, " try converting it into an RGB image with alpha channel)\n"); } exit(1); } if(a!=8 && (b==2 || b==6)) { fprintf(stderr, "Bpp %d in mode %d not supported!\n", b, a); exit(1); } if(c!=0) { fprintf(stderr, "Compression mode %d not supported!\n", c); exit(1); } if(f!=0) { fprintf(stderr, "Filter mode %d not supported!\n", f); exit(1); } if(i!=0) { fprintf(stderr, "Interlace mode %d not supported!\n", i); exit(1); } if(VERBOSE(2)) printf("%dx%d %d %d %d %d %d\n",header->width, header->height, a,b,c,f,i); header->bpp = a; header->mode = b; ok = 1; } free(data); } return ok; } typedef unsigned char byte; #define ABS(a) ((a)>0?(a):(-(a))) byte inline PaethPredictor (byte a,byte b,byte c) { // a = left, b = above, c = upper left int p = a + b - c; // initial estimate int pa = ABS(p - a); // distances to a, b, c int pb = ABS(p - b); int pc = ABS(p - c); // return nearest of a,b,c, // breaking ties in order a,b,c. if (pa <= pb && pa <= pc) return a; else if (pb <= pc) return b; else return c; } void applyfilter3(int mode, U8*src, U8*old, U8*dest, int width) { int x; unsigned char lastr=0; unsigned char lastg=0; unsigned char lastb=0; unsigned char upperlastr=0; unsigned char upperlastg=0; unsigned char upperlastb=0; if(mode==0) { for(x=0;x No jpeg support compiled in"); } #endif if(global.mkjpeg) { #ifdef HAVE_JPEGLIB RGBA*data = 0; png_load(sname, &width, &height, (unsigned char**)&data); if(!data) exit(1); if(swf_ImageHasAlpha(data, width, height)) { t = swf_InsertTag(t, ST_DEFINEBITSJPEG3); swf_SetU16(t, id); swf_SetJPEGBits3(t, width,height,data,global.mkjpeg); } else { t = swf_InsertTag(t, ST_DEFINEBITSJPEG2); swf_SetU16(t, id); swf_SetJPEGBits2(t, width,height,data,global.mkjpeg); } #endif } else { RGBA*data = 0; png_load(sname, &width, &height, (unsigned char**)&data); if(!data) exit(1); t = swf_InsertTag(t, ST_DEFINEBITSLOSSLESS); swf_SetU16(t, id); swf_SetLosslessImage(t, data,width,height); } t = swf_InsertTag(t, ST_DEFINESHAPE3); swf_ShapeNew(&s); swf_GetMatrix(NULL, &m); m.sx = (int)(20 * 0x10000); m.sy = (int)(20 * 0x10000); m.tx = 0; m.ty = 0; fs = swf_ShapeAddBitmapFillStyle(s, &m, id, 1); swf_SetU16(t, id + 1); // id r.xmin = r.ymin = 0; r.xmax = width * 20; r.ymax = height * 20; swf_SetRect(t, &r); swf_SetShapeHeader(t, s); swf_ShapeSetAll(t, s, 0, 0, 0, fs, 0); swf_ShapeSetLine(t, s, r.xmax, 0); swf_ShapeSetLine(t, s, 0, r.ymax); swf_ShapeSetLine(t, s, -r.xmax, 0); swf_ShapeSetLine(t, s, 0, -r.ymax); swf_ShapeSetEnd(t); t = swf_InsertTag(t, ST_REMOVEOBJECT2); swf_SetU16(t, 50); // depth t = swf_InsertTag(t, ST_PLACEOBJECT2); swf_GetMatrix(NULL, &m); m.sx = (int)(0x10000 * global.scale); m.sy = (int)(0x10000 * global.scale); if(custom_move) { m.tx = move_x*20; m.ty = move_y*20; } else { m.tx = (swf->movieSize.xmax - (int) (width * global.scale * 20)) / 2; m.ty = (swf->movieSize.ymax - (int) (height * global.scale * 20)) / 2; } swf_ObjectPlace(t, id + 1, 50, &m, NULL, NULL); t = swf_InsertTag(t, ST_SHOWFRAME); return t; } int CheckInputFile(char *fname, char **realname) { FILE *fi; char *s = malloc(strlen(fname) + 5); struct png_header head; if (!s) exit(2); (*realname) = s; strcpy(s, fname); // Check whether file exists (with typical extensions) if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.png", fname); if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.PNG", fname); if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.Png", fname); if ((fi = fopen(s, "rb")) == NULL) { fprintf(stderr, "Couldn't open %s!\n", fname); return -1; } } } } if(!png_read_header(fi, &head)) { fprintf(stderr, "%s is not a PNG file!\n", fname); return -1; } if (global.max_image_width < head.width) global.max_image_width = head.width; if (global.max_image_height < head.height) global.max_image_height = head.height; fclose(fi); return 0; } int args_callback_option(char *arg, char *val) { int res = 0; if (arg[1]) res = -1; else switch (arg[0]) { case 'r': if (val) global.framerate = atof(val); /* removed framerate>0 restriction in order to make Flash Communication Server compatible SWFs */ if ((global.framerate < 0) ||(global.framerate >= 256.0)) { if (VERBOSE(1)) fprintf(stderr, "Error: You must specify a valid framerate between 1/256 and 255.\n"); exit(1); } res = 1; break; case 'o': if (val) global.outfile = val; res = 1; break; case 's': global.scale = atof(val)/100; res = 1; break; case 'z': if(global.version<6) global.version = 6; res = 0; break; case 'j': global.mkjpeg = atoi(val); res = 1; break; case 'T': global.version = atoi(val); res = 1; break; case 'C': global.do_cgi = 1; break; case 'v': global.verbose++; res = 0; break; case 'q': global.verbose--; if(global.verbose<0) global.verbose = 0; res = 0; break; case 'X': if (val) global.force_width = atoi(val); res = 1; break; case 'Y': if (val) global.force_height = atoi(val); res = 1; break; case 'V': printf("png2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); case 'c': { char*s = strdup(val); char*x1 = strtok(s, ":"); char*y1 = strtok(0, ":"); char*x2 = strtok(0, ":"); char*y2 = strtok(0, ":"); if(!(x1 && y1 && x2 && y2)) { fprintf(stderr, "-m option requires four arguments, :::\n"); exit(1); } custom_clip = 1; clip_x1 = atoi(x1); clip_y1 = atoi(y1); clip_x2 = atoi(x2); clip_y2 = atoi(y2); free(s); res = 1; break; } case 'm': { char*s = val ? strdup(val) : NULL; char*c = s ? strchr(s, ':') : NULL; if(!s || !c) { fprintf(stderr, "-m option requires two arguments, :\n"); exit(1); } *c = 0; custom_move = 1; move_x = atoi(val); move_y = atoi(c+1); free(s); res = 1; break; } default: res = -1; break; } if (res < 0) { if (VERBOSE(1)) fprintf(stderr, "Unknown option: -%s\n", arg); exit(1); return 0; } return res; } static struct options_t options[] = { {"r", "rate"}, {"o", "output"}, {"j", "jpeg"}, {"z", "zlib"}, {"T", "flashversion"}, {"X", "pixel"}, {"Y", "pixel"}, {"v", "verbose"}, {"q", "quiet"}, {"C", "cgi"}, {"V", "version"}, {"s", "scale"}, {0,0} }; int args_callback_longoption(char *name, char *val) { return args_long2shortoption(options, name, val); } int args_callback_command(char *arg, char *next) // actually used as filename { char *s; if (CheckInputFile(arg, &s) < 0) { if (VERBOSE(1)) fprintf(stderr, "Error opening input file: %s\n", arg); free(s); } else { image[global.nfiles].filename = s; global.nfiles++; if (global.nfiles >= MAX_INPUT_FILES) { if (VERBOSE(1)) fprintf(stderr, "Error: Too many input files.\n"); exit(1); } } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-X width] [-Y height] [-o file.swf] [-r rate] file1.png [file2.png...]\n", name); printf("\n"); printf("-r , --rate Set movie framerate (frames per second)\n"); printf("-o , --output Set name for SWF output file.\n"); printf("-j , --jpeg Generate a lossy jpeg bitmap inside the SWF, with a given quality (1-100)\n"); printf("-z , --zlib Enable Flash 6 (MX) Zlib Compression\n"); printf("-T , --flashversion Set the flash version to generate\n"); printf("-X , --pixel Force movie width to (default: autodetect)\n"); printf("-Y , --pixel Force movie height to (default: autodetect)\n"); printf("-v , --verbose Set verbose level (0=quiet, 1=default, 2=debug)\n"); printf("-q , --quiet Omit normal log messages, only log errors\n"); printf("-C , --cgi For use as CGI- prepend http header, write to stdout\n"); printf("-V , --version Print version information and exit\n"); printf("-s , --scale Scale image to %% size.\n"); printf("\n"); } int main(int argc, char **argv) { SWF swf; TAG *t; memset(&global, 0x00, sizeof(global)); global.framerate = 1.0; global.verbose = 1; global.version = 8; global.scale = 1.0; processargs(argc, argv); if(global.nfiles<=0) { fprintf(stderr, "No png files found in arguments\n"); return 1; } if (VERBOSE(2)) fprintf(stderr, "Processing %i file(s)...\n", global.nfiles); t = MovieStart(&swf, global.framerate, global.force_width ? global.force_width : (int)(global.max_image_width*global.scale), global.force_height ? global.force_height : (int)(global.max_image_height*global.scale)); { int i; for (i = 0; i < global.nfiles; i++) { if (VERBOSE(3)) fprintf(stderr, "[%03i] %s\n", i, image[i].filename); t = MovieAddFrame(&swf, t, image[i].filename, (i * 2) + 1); free(image[i].filename); } } MovieFinish(&swf, t, global.outfile); return 0; } swftools_0.9.2+git20130725.orig/src/gif2swf.c0000644000175000017500000005270412216332640017635 0ustar gawaingawain/* -*- mode: c; tab-width: 4; -*- ---------------------------[for (x)emacs]-- $Id: gif2swf.c,v 1.7 2008/02/08 11:43:12 kramm Exp $ GIF to SWF converter tool Part of the swftools package. Copyright (c) 2005 Daichi Shinozaki 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. This file is derived from png2swf.c */ #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #define MAX_INPUT_FILES 1024 #define VERBOSE(x) (global.verbose>=x) #define AS_FIRSTFRAME "if(!n) n=0;" #define AS_LASTFRAME "if(n<%d){n=n+1;gotoAndPlay(1);}else stop();" static struct { float framerate; int max_image_width; int max_image_height; int force_width; int force_height; int nfiles; int verbose; int do_cgi; int version; char *outfile; int imagecount; int loopcount; } global; struct { char *filename; } image[MAX_INPUT_FILES]; struct gif_header { int width; int height; }; enum disposal_method { NONE, DO_NOT_DISPOSE, RESTORE_TO_BGCOLOR, RESTORE_TO_PREVIOUS }; void SetFrameAction(TAG ** t, const char *src, int ver) { ActionTAG *as; as = swf_ActionCompile(src, ver); if (!as) fprintf(stderr, "Couldn't compile ActionScript\n"); else { *t = swf_InsertTag(*t, ST_DOACTION); swf_ActionSet(*t, as); swf_ActionFree(as); } } int getGifDisposalMethod(GifFileType * gft, int framenum) { int i; ExtensionBlock *ext = gft->SavedImages[framenum].ExtensionBlocks; for (i = 0; i < gft->SavedImages[framenum].ExtensionBlockCount; i++, ext++) if (ext->Function == GRAPHICS_EXT_FUNC_CODE) return ((ext->Bytes[0] & 0x1C) >> 2); return -1; } int getGifLoopCount(GifFileType * gft) { int i, loop = -1; ExtensionBlock *ext = gft->SavedImages[0].ExtensionBlocks; for (i = 0; i < gft->SavedImages[0].ExtensionBlockCount; i++, ext++) if (ext->Function == APPLICATION_EXT_FUNC_CODE) { // info: http://semmix.pl/color/exgraf/eeg24.htm if (ext->ByteCount == 11 && (strncmp(&ext->Bytes[0], "NETSCAPE2.0", 11) == 0 || strncmp(&ext->Bytes[0], "ANIMEXTS1.0", 11) == 0)) { // check for the subblock ext++; if (ext->ByteCount != 3) ext--; else { loop = GET16(&ext->Bytes[1]); break; } } } return loop; } U16 getGifDelayTime(GifFileType * gft, int framenum) { int i; ExtensionBlock *ext = gft->SavedImages[framenum].ExtensionBlocks; for (i = 0; i < gft->SavedImages[framenum].ExtensionBlockCount; i++, ext++) if (ext->Function == GRAPHICS_EXT_FUNC_CODE) return GET16(&ext->Bytes[1]); return 0; } int getTransparentColor(GifFileType * gft, int framenum) { int i; ExtensionBlock *ext = gft->SavedImages[framenum].ExtensionBlocks; // Get transparency color from graphic extension block for (i = 0; i < gft->SavedImages[framenum].ExtensionBlockCount; i++, ext++) if ((ext->Function == GRAPHICS_EXT_FUNC_CODE) && (ext->Bytes[0] & 1)) { // there is a transparent color return ext->Bytes[3] == 0 ? 0 : // exception (U8) ext->Bytes[3]; // transparency color } return -1; } TAG *MovieStart(SWF * swf, float framerate, int dx, int dy) { TAG *t; RGBA rgb; memset(swf, 0x00, sizeof(SWF)); swf->fileVersion = global.version; swf->frameRate = (int) (256.0 * framerate); swf->movieSize.xmax = dx * 20; swf->movieSize.ymax = dy * 20; t = swf->firstTag = swf_InsertTag(NULL, ST_SETBACKGROUNDCOLOR); rgb.r = rgb.g = rgb.b = rgb.a = 0x00; //rgb.g = 0xff; //<--- handy for testing alpha conversion swf_SetRGB(t, &rgb); return t; } int MovieFinish(SWF * swf, TAG * t, char *sname) { int f, so = fileno(stdout); t = swf_InsertTag(t, ST_END); if ((!isatty(so)) && (!sname)) f = so; else { if (!sname) sname = "output.swf"; f = open(sname, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); } if (global.do_cgi) { if FAILED (swf_WriteCGI(swf)) fprintf(stderr, "WriteCGI() failed.\n"); } else { if (swf_WriteSWF(f, swf) < 0) fprintf(stderr, "Unable to write output file: %s\n", sname); if (f != so) close(f); } swf_FreeTags(swf); return 0; } TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int id, int imgidx) { SHAPE *s; SRECT r; MATRIX m; int fs; U8 *imagedata, *from, *to; GifImageDesc *img; RGBA *pal; struct gif_header header; int i, j, numcolors, alphapalette; U8 bgcolor; int bpp; // byte per pixel int swf_width, padlen; ColorMapObject *colormap; GifColorType c; int interlacedOffset[] = { 0, 4, 2, 1 }; // The way Interlaced image should int interlacedJumps[] = { 8, 8, 4, 2 }; // be read - offsets and jumps... U16 delay, depth; int disposal; char *as_lastframe; GifFileType *gft; FILE *fi; int ret; if ((fi = fopen(sname, "rb")) == NULL) { if (VERBOSE(1)) fprintf(stderr, "Read access failed: %s\n", sname); return t; } fclose(fi); #if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 gft = DGifOpenFileName(sname, NULL); #else gft = DGifOpenFileName(sname); #endif if (gft == NULL) { fprintf(stderr, "%s is not a GIF file!\n", sname); return t; } if ((ret = DGifSlurp(gft)) != GIF_OK) { #if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 fprintf(stderr, "GIF-LIB: %s\n", GifErrorString(ret)); #else PrintGifError(); #endif return t; } header.width = gft->SWidth; header.height = gft->SHeight; pal = (RGBA *) malloc(256 * sizeof(RGBA)); memset(pal, 0, 256 * sizeof(RGBA)); img = &gft->SavedImages[imgidx].ImageDesc; if(!img) { exit(1); } // Local colormap has precedence over Global colormap colormap = img->ColorMap ? img->ColorMap : gft->SColorMap; numcolors = colormap->ColorCount; alphapalette = getTransparentColor(gft, imgidx); if (VERBOSE(3)) fprintf(stderr, "transparent palette index => %d\n", alphapalette); bpp = (alphapalette >= 0 ? 4 : 3); // bgcolor is the background color to fill the bitmap if (gft->SColorMap) // There is a GlobalColorMap bgcolor = (U8) gft->SBackGroundColor; // The SBGColor is meaningful else if (alphapalette >= 0) // There is a transparency color bgcolor = alphapalette; // set the bgcolor to tranparent else bgcolor = 0; // Don't know what to do here. // If this doesn't work, we could // create a new color and set the // alpha-channel to transparent // (unless we are using all the 256 // colors, in which case either we // give up, or move to 16-bits palette if (VERBOSE(3)) fprintf(stderr, "BG palette index => %u\n", bgcolor); for (i = 0; i < numcolors; i++) { c = colormap->Colors[i]; if (i == bgcolor || i == alphapalette) pal[i].r = pal[i].g = pal[i].b = pal[i].a = 0; // Fully transparent else { pal[i].r = c.Red; pal[i].g = c.Green; pal[i].b = c.Blue; pal[i].a = 255; // Fully opaque } } t = swf_InsertTag(t, bpp == 4 ? ST_DEFINEBITSLOSSLESS2 : ST_DEFINEBITSLOSSLESS); swf_SetU16(t, id); // id // Ah! The Flash specs says scanlines must be DWORD ALIGNED! // (but image width is the correct number of pixels) swf_width = BYTES_PER_SCANLINE(header.width); if ((imagedata = (U8 *) malloc(swf_width * header.height)) == NULL) { fprintf(stderr, "Failed to allocate memory required, aborted."); exit(2); } to = imagedata; from = (U8 *) gft->SavedImages[imgidx].RasterBits; if (swf_width == header.width) { // we are all nicely aligned and don't need to move the bitmap around. // Just copy the bits into the image buffer. if (!gft->Image.Interlace) if (header.width == img->Width && header.height == img->Height) memcpy(to, from, header.width * header.height); else { //small screen for (i = 0; i < header.height; i++, to += header.width) { memset(to, bgcolor, header.width); if (i >= img->Top && i < img->Top + img->Height) { memcpy(to + img->Left, from, img->Width); from += img->Width; } } } else // Need to perform 4 passes on the interlaced images for (i = 0; i < 4; i++) for (j = interlacedOffset[i]; j < header.height; j += interlacedJumps[i], from += header.width) memcpy(to + header.width * j, from, header.width); } else { padlen = swf_width - header.width; // here we need to pad the scanline if (!gft->Image.Interlace) { if (header.width == img->Width && header.height == img->Height) { for (i = 0; i < header.height; i++, from += header.width, to += swf_width) { memcpy(to, from, header.width); memset(to + header.width, bgcolor, padlen); } } else { //small screen for (i = 0; i < header.height; i++, to += swf_width) { memset(to, bgcolor, swf_width); if (i >= img->Top && i < img->Top + img->Height) { memcpy(to + img->Left, from, img->Width); from += img->Width; } } } } else { // Need to perform 4 passes on the interlaced images for (i = 0; i < 4; i++) for (j = interlacedOffset[i]; j < header.height; j += interlacedJumps[i], from += header.width) { memcpy(to + swf_width * j, from, header.width); memset(to + swf_width * j, bgcolor, padlen); } } } swf_SetLosslessBitsIndexed(t, header.width, header.height, imagedata, pal, 256); t = swf_InsertTag(t, ST_DEFINESHAPE); swf_ShapeNew(&s); swf_GetMatrix(NULL, &m); m.sx = 20 * 0x10000; m.sy = 20 * 0x10000; fs = swf_ShapeAddBitmapFillStyle(s, &m, id, 0); swf_SetU16(t, id + 1); // id r.xmin = r.ymin = 0; r.xmax = header.width * 20; r.ymax = header.height * 20; swf_SetRect(t, &r); swf_SetShapeHeader(t, s); swf_ShapeSetAll(t, s, 0, 0, 0, fs, 0); swf_ShapeSetLine(t, s, r.xmax, 0); swf_ShapeSetLine(t, s, 0, r.ymax); swf_ShapeSetLine(t, s, -r.xmax, 0); swf_ShapeSetLine(t, s, 0, -r.ymax); swf_ShapeSetEnd(t); depth = imgidx + 1; if ((imgidx > 0) && // REMOVEOBJECT2 not needed at frame 1(imgidx==0) (global.imagecount > 1)) { // check last frame's disposal method if ((disposal = getGifDisposalMethod(gft, imgidx - 1)) >= 0) { switch (disposal) { case NONE: // [Replace one full-size, non-transparent frame with another] t = swf_InsertTag(t, ST_REMOVEOBJECT2); swf_SetU16(t, depth - 1); if (VERBOSE(3)) fprintf(stdout, " [none]\n"); break; case DO_NOT_DISPOSE: // [Any pixels not covered up by the next frame continue to display] if (VERBOSE(3)) fprintf(stdout, " [don't dispose]\n"); break; case RESTORE_TO_BGCOLOR: // [The background color or background tile -rather than a previous frame- // shows through transparent pixels] t = swf_InsertTag(t, ST_REMOVEOBJECT2); swf_SetU16(t, depth - 2); if (VERBOSE(3)) fprintf(stdout, " [restore to bg color]\n"); break; case RESTORE_TO_PREVIOUS: // [Restores to the state of a previous, undisposed frame] // ** NOT IMPLEMENTED YET (same as "restore to bgcolor") ** t = swf_InsertTag(t, ST_REMOVEOBJECT2); swf_SetU16(t, depth - 1); if (VERBOSE(3)) fprintf(stdout, " [restore to previous]\n"); break; default: break; } } } swf_SetU16(t, depth); t = swf_InsertTag(t, ST_PLACEOBJECT2); swf_GetMatrix(NULL, &m); m.tx = (swf->movieSize.xmax - (int) header.width * 20) / 2; m.ty = (swf->movieSize.ymax - (int) header.height * 20) / 2; swf_ObjectPlace(t, id + 1, depth, &m, NULL, NULL); if ((global.imagecount > 1) && (global.loopcount > 0)) { // 0 means infinite loop if (imgidx == 0) SetFrameAction(&t, AS_FIRSTFRAME, global.version); } t = swf_InsertTag(t, ST_SHOWFRAME); if (global.imagecount > 1) { // multi-frame GIF? int framecnt; delay = getGifDelayTime(gft, imgidx); // delay in 1/100 sec framecnt = (int) (global.framerate * (delay / 100.0)); if (framecnt > 1) { if (VERBOSE(2)) fprintf(stderr, "at frame %d: pad %d frames(%.3f sec)\n", imgidx + 1, framecnt, delay / 100.0); framecnt -= 1; // already inserted a frame while (framecnt--) t = swf_InsertTag(t, ST_SHOWFRAME); } if ((imgidx == global.imagecount - 1) &&global.loopcount > 0) { // last frame as_lastframe = malloc(strlen(AS_LASTFRAME) + 5); // 0-99999 sprintf(as_lastframe, AS_LASTFRAME, global.loopcount); SetFrameAction(&t, as_lastframe, global.version); if (as_lastframe) free(as_lastframe); } } free(pal); free(imagedata); DGifCloseFile(gft); return t; } int CheckInputFile(char *fname, char **realname) { FILE *fi; char *s = malloc(strlen(fname) + 5); GifFileType *gft; int ret; if (!s) exit(2); (*realname) = s; strcpy(s, fname); // Check whether file exists (with typical extensions) if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.gif", fname); if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.GIF", fname); if ((fi = fopen(s, "rb")) == NULL) { sprintf(s, "%s.Gif", fname); if ((fi = fopen(s, "rb")) == NULL) { fprintf(stderr, "Couldn't open %s!\n", fname); return -1; } } } } fclose(fi); #if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 gft = DGifOpenFileName(s, NULL); #else gft = DGifOpenFileName(s); #endif if (gft == NULL) { fprintf(stderr, "%s is not a GIF file!\n", fname); return -1; } if (global.max_image_width < gft->SWidth) global.max_image_width = gft->SWidth; if (global.max_image_height < gft->SHeight) global.max_image_height = gft->SHeight; if ((ret = DGifSlurp(gft)) != GIF_OK) { #if defined(GIFLIB_MAJOR) && GIFLIB_MAJOR >= 5 fprintf(stderr, "GIF-LIB: %s\n", GifErrorString(ret)); #else PrintGifError(); #endif return -1; } // After DGifSlurp() call, gft->ImageCount become available if ((global.imagecount = gft->ImageCount) >1) { if (global.loopcount < 0) { global.loopcount = getGifLoopCount(gft); if (VERBOSE(3)) fprintf(stderr, "Loops => %d\n", global.loopcount); } } if (VERBOSE(2)) { U8 i; fprintf(stderr, "%d x %d, %d images total\n", gft->SWidth, gft->SHeight, gft->ImageCount); for (i = 0; i < gft->ImageCount; i++) fprintf(stderr, "frame: %u, delay: %.3f sec\n", i + 1, getGifDelayTime(gft, i) / 100.0); } DGifCloseFile(gft); return 0; } int args_callback_option(char *arg, char *val) { int res = 0; if (arg[1]) res = -1; else switch (arg[0]) { case 'l': if (val) global.loopcount = atoi(val); res = 1; break; case 'r': if (val) global.framerate = atof(val); if ((global.framerate < 1.0 / 256) ||(global.framerate >= 256.0)) { if (VERBOSE(1)) fprintf(stderr, "Error: You must specify a valid framerate between 1/256 and 255.\n"); exit(1); } res = 1; break; case 'o': if (val) global.outfile = val; res = 1; break; case 'z': global.version = 6; res = 0; break; case 'C': global.do_cgi = 1; break; case 'v': if (val) global.verbose = atoi(val); res = 1; break; case 'X': if (val) global.force_width = atoi(val); res = 1; break; case 'Y': if (val) global.force_height = atoi(val); res = 1; break; case 'V': printf("gif2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); default: res = -1; break; } if (res < 0) { if (VERBOSE(1)) fprintf(stderr, "Unknown option: -%s\n", arg); exit(1); return 0; } return res; } static struct options_t options[] = { {"r", "rate"}, {"o", "output"}, {"z", "zlib"}, {"l", "loop"}, {"X", "pixel"}, {"Y", "pixel"}, {"v", "verbose"}, {"C", "cgi"}, {"V", "version"}, {0,0} }; int args_callback_longoption(char *name, char *val) { return args_long2shortoption(options, name, val); } int args_callback_command(char *arg, char *next) // actually used as filename { char *s; if (CheckInputFile(arg, &s) < 0) { if (VERBOSE(1)) fprintf(stderr, "Error opening input file: %s\n", arg); free(s); } else { image[global.nfiles].filename = s; global.nfiles++; if (global.nfiles >= MAX_INPUT_FILES) { if (VERBOSE(1)) fprintf(stderr, "Error: Too many input files.\n"); exit(1); } } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-X width] [-Y height] [-o file.swf] [-r rate] file1.gif [file2.gif ...]\n", name); printf("\n"); printf("-r , --rate Set movie framerate (frames per second)\n"); printf("-o , --output Set name for SWF output file.\n"); printf("-z , --zlib Enable Flash 6 (MX) Zlib Compression\n"); printf("-l , --loop Set loop count. (default: 0 [=infinite loop])\n"); printf("-X , --pixel Force movie width to (default: autodetect)\n"); printf("-Y , --pixel Force movie height to (default: autodetect)\n"); printf("-v , --verbose Set verbose level (0=quiet, 1=default, 2=debug)\n"); printf("-C , --cgi For use as CGI- prepend http header, write to stdout\n"); printf("-V , --version Print version information and exit\n"); printf("\n"); } int main(int argc, char **argv) { SWF swf; TAG *t; memset(&global, 0x00, sizeof(global)); global.framerate = 1.0; global.verbose = 1; global.version = 5; global.loopcount = -1; processargs(argc, argv); if (global.nfiles <= 0) { fprintf(stderr, "No gif files found in arguments\n"); return 1; } if (VERBOSE(2)) fprintf(stderr, "Processing %i file(s)...\n", global.nfiles); if (global.imagecount > 1) // multi-frame GIF? if (global.framerate == 1.0) // user not specified '-r' option? global.framerate = 10.0; t = MovieStart(&swf, global.framerate, global.force_width ? global.force_width : global.max_image_width, global.force_height ? global.force_height : global.max_image_height); { int i, j; for (i = 0; i < global.nfiles; i++) { if (VERBOSE(3)) fprintf(stderr, "[%03i] %s\n", i, image[i].filename); t = MovieAddFrame(&swf, t, image[i].filename, (i * 2) + 1, 0); for (j = 2; j <= global.imagecount; j++) t = MovieAddFrame(&swf, t, image[i].filename, (j * 2) - 1, j - 1); free(image[i].filename); } } MovieFinish(&swf, t, global.outfile); return 0; } swftools_0.9.2+git20130725.orig/src/wav2swf.10000644000175000017500000000270412216332640017576 0ustar gawaingawain.TH wav2swf "1" "April 2012" "wav2swf" "swftools" .SH NAME wav2swf \- convert a WAV file to an SWF animation. .SH Synopsis .B wav2swf [\-o filename] file.wav .SH DESCRIPTION Takes a wav file and converts it to a swf movie. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Explicitly specify output file. (Otherwise, output will go to output.swf) .TP \fB\-r\fR, \fB\-\-framerate\fR \fIfps\fR Set file framerate to \fIfps\fR frames per second. .TP \fB\-s\fR, \fB\-\-samplerate\fR \fIsps\fR Set samplerate to \fIsps\fR frames per second (default: 11025). .TP \fB\-d\fR, \fB\-\-definesound\fR Store the sound as DEFINESOUND tag, not as streaming sound. Allows for looping. .TP \fB\-l\fR, \fB\-\-loop\fR n Loop the sound n times. .TP \fB\-C\fR, \fB\-\-cgi\fR For use as CGI- prepend http header, write to stdout. .TP \fB\-S\fR, \fB\-\-stop\fR Stop the movie at frame 0, and start the sound at 1, so that the sound will not play until a "GotoFrame(1)" is issued. (For use with flashsound.js). .TP \fB\-E\fR, \fB\-\-end\fR Stop the movie at the end frame .TP \fB\-b\fR, \fB\-\-bitrate\fR \fIbps\fR Set mp3 bitrate to \fIbps\fR (default: 32) .TP \fB\-v\fR, \fB\-\-verbose\fR Be more verbose. (Use more than one -v for greater effect) .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfbbox.10000644000175000017500000000227512216332640017654 0ustar gawaingawain.TH swfbbox "1" "April 2012" "swfbbox" "swftools" .SH NAME swfbbox \- Tool for playing around with SWF bounding boxes. .SH Synopsis .B swfbbox [\-OS] file.swf .SH DESCRIPTION This tool can, among others, recalculate some bounding boxes of SWFs in order to speed them up or make them smaller. .PP It can also dump the corners of the bounding boxes of all frames of a movie. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print help and exit .TP \fB\-b\fR, \fB\-\-bbox\fR Show movie bounding box (default) .TP \fB\-B\fR, \fB\-\-newbbox\fR Show recalculated (optimized/expanded) bounding box .TP \fB\-e\fR, \fB\-\-expand\fR Write out a new file using the recalculated header bounding box .TP \fB\-O\fR, \fB\-\-optimize\fR Recalculate all object bounding boxes (except for the header) .TP \fB\-S\fR, \fB\-\-swifty\fR Print out transformed bounding boxes .TP \fB\-c\fR, \fB\-\-clip\fR Clip bounding boxes to movie size .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Set output filename to \fIfilename\fR (for -O) .TP \fB\-v\fR, \fB\-\-verbose\fR Be more verbose .TP \fB\-V\fR, \fB\-\-version\fR Print program version and exit .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/parser.yy.c0000644000175000017500000016711512216332640020225 0ustar gawaingawain#line 2 "parser.yy.c" #line 4 "parser.yy.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #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. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif 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 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE 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 getc() * 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; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* 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 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* 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 = 0; /* 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 (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst 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 = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 21 #define YY_END_OF_BUFFER 22 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[111] = { 0, 0, 0, 13, 13, 0, 0, 22, 20, 19, 19, 20, 20, 17, 17, 20, 20, 18, 20, 13, 13, 13, 13, 13, 13, 13, 13, 2, 3, 1, 0, 0, 9, 8, 0, 0, 0, 0, 0, 15, 17, 12, 15, 4, 0, 0, 0, 0, 0, 6, 13, 13, 8, 13, 13, 13, 13, 13, 13, 12, 13, 13, 13, 0, 7, 0, 10, 0, 11, 0, 15, 15, 0, 0, 10, 13, 11, 13, 13, 13, 13, 0, 15, 0, 0, 0, 13, 13, 13, 13, 15, 5, 16, 13, 15, 13, 15, 13, 15, 13, 0, 0, 0, 14, 0, 0, 12, 14, 10, 11, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, 6, 1, 7, 8, 9, 10, 11, 11, 11, 11, 10, 11, 11, 11, 11, 12, 1, 1, 13, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 14, 15, 16, 1, 9, 1, 9, 9, 17, 18, 19, 9, 9, 9, 20, 9, 9, 21, 9, 22, 9, 9, 9, 9, 9, 9, 23, 9, 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 yyconst flex_int32_t yy_meta[24] = { 0, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3, 3, 4, 3, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3 } ; static yyconst flex_int16_t yy_base[122] = { 0, 0, 230, 23, 229, 44, 45, 233, 395, 227, 395, 47, 42, 61, 83, 95, 85, 395, 228, 0, 105, 44, 120, 136, 158, 0, 54, 395, 395, 395, 227, 96, 395, 395, 225, 0, 168, 214, 180, 192, 204, 395, 216, 395, 237, 110, 144, 207, 222, 395, 0, 247, 0, 89, 0, 211, 261, 274, 0, 0, 199, 65, 92, 217, 395, 203, 395, 202, 395, 296, 192, 93, 48, 191, 0, 199, 0, 308, 0, 191, 140, 191, 141, 193, 162, 184, 187, 159, 168, 320, 150, 395, 182, 126, 170, 114, 97, 95, 187, 194, 330, 99, 342, 0, 164, 188, 74, 395, 62, 46, 395, 355, 359, 362, 365, 369, 373, 376, 380, 384, 387, 390 } ; static yyconst flex_int16_t yy_def[122] = { 0, 110, 1, 110, 3, 111, 111, 110, 110, 110, 110, 112, 110, 110, 113, 110, 114, 110, 115, 116, 117, 116, 110, 22, 116, 116, 118, 110, 110, 110, 119, 112, 110, 110, 112, 15, 110, 110, 113, 120, 113, 110, 120, 110, 110, 114, 114, 114, 115, 110, 116, 117, 116, 117, 24, 116, 23, 110, 23, 116, 57, 24, 118, 119, 110, 110, 110, 38, 110, 120, 42, 42, 44, 114, 116, 56, 116, 57, 57, 57, 24, 69, 42, 72, 83, 114, 77, 57, 24, 116, 42, 110, 114, 57, 42, 57, 42, 57, 42, 57, 121, 121, 121, 36, 121, 121, 121, 110, 121, 121, 0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static yyconst flex_int16_t yy_nxt[419] = { 0, 8, 9, 10, 11, 8, 8, 12, 13, 14, 15, 15, 16, 8, 17, 8, 8, 14, 14, 14, 14, 14, 14, 14, 19, 9, 10, 20, 19, 19, 21, 22, 23, 24, 24, 16, 19, 25, 19, 19, 23, 23, 23, 23, 23, 23, 23, 28, 28, 107, 32, 33, 35, 35, 54, 54, 48, 49, 83, 84, 29, 29, 34, 36, 36, 107, 48, 37, 38, 39, 39, 40, 40, 50, 41, 80, 80, 107, 39, 39, 39, 42, 39, 39, 39, 36, 36, 46, 46, 37, 38, 31, 110, 47, 48, 49, 41, 43, 43, 32, 33, 31, 107, 44, 48, 35, 35, 31, 32, 52, 82, 34, 46, 46, 99, 70, 98, 31, 47, 70, 53, 50, 36, 36, 50, 50, 55, 56, 57, 57, 58, 58, 97, 59, 50, 50, 50, 57, 57, 57, 60, 57, 57, 57, 58, 58, 46, 46, 50, 95, 88, 89, 47, 58, 58, 58, 58, 58, 58, 58, 43, 43, 90, 70, 91, 91, 61, 107, 54, 54, 36, 36, 70, 94, 37, 65, 50, 108, 89, 89, 93, 41, 110, 110, 110, 110, 110, 67, 96, 100, 100, 107, 70, 68, 36, 36, 100, 100, 37, 69, 50, 109, 92, 84, 110, 41, 36, 36, 87, 70, 37, 38, 50, 85, 70, 110, 68, 41, 36, 36, 64, 79, 37, 69, 74, 49, 73, 66, 110, 41, 64, 49, 30, 110, 26, 18, 110, 110, 71, 43, 43, 110, 110, 110, 110, 110, 110, 72, 72, 31, 32, 52, 110, 110, 110, 110, 110, 110, 110, 31, 110, 110, 53, 110, 110, 110, 110, 50, 75, 110, 110, 110, 110, 110, 76, 50, 36, 36, 50, 50, 55, 77, 78, 78, 78, 78, 110, 59, 50, 50, 50, 78, 78, 78, 78, 78, 78, 78, 110, 110, 110, 110, 110, 81, 110, 110, 110, 110, 110, 68, 110, 110, 110, 110, 50, 86, 110, 110, 110, 110, 110, 76, 91, 91, 110, 110, 110, 110, 110, 110, 89, 89, 102, 103, 110, 110, 104, 105, 110, 110, 110, 110, 110, 106, 102, 103, 110, 110, 104, 105, 110, 110, 110, 110, 110, 106, 27, 27, 27, 27, 31, 31, 31, 31, 40, 40, 45, 45, 45, 45, 48, 48, 48, 48, 50, 110, 50, 51, 51, 51, 51, 62, 62, 62, 62, 63, 63, 63, 63, 70, 70, 101, 101, 101, 101, 7, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static yyconst flex_int16_t yy_chk[419] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 6, 109, 11, 11, 12, 12, 21, 21, 26, 26, 72, 72, 5, 6, 11, 13, 13, 108, 26, 13, 13, 13, 13, 13, 13, 61, 13, 61, 61, 106, 13, 13, 13, 13, 13, 13, 13, 14, 14, 16, 16, 14, 14, 53, 53, 16, 62, 62, 14, 15, 15, 31, 31, 53, 101, 15, 62, 15, 15, 20, 20, 20, 71, 31, 45, 45, 97, 71, 96, 20, 45, 96, 20, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 95, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 46, 46, 80, 93, 80, 80, 46, 23, 23, 23, 23, 23, 23, 23, 24, 24, 82, 82, 84, 84, 24, 104, 24, 24, 36, 36, 90, 90, 36, 36, 88, 104, 88, 88, 87, 36, 38, 38, 92, 92, 38, 38, 94, 98, 98, 105, 94, 38, 39, 39, 99, 99, 39, 39, 86, 105, 85, 83, 81, 39, 40, 40, 79, 98, 40, 40, 75, 73, 70, 67, 65, 40, 42, 42, 63, 60, 42, 42, 55, 48, 47, 37, 34, 42, 30, 18, 9, 7, 4, 2, 0, 0, 42, 44, 44, 0, 0, 0, 0, 0, 0, 44, 44, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 51, 56, 56, 0, 0, 56, 56, 0, 0, 0, 0, 0, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 69, 69, 0, 0, 69, 69, 0, 0, 0, 0, 0, 69, 77, 77, 0, 0, 77, 77, 0, 0, 0, 0, 0, 77, 89, 89, 0, 0, 0, 0, 0, 0, 89, 89, 100, 100, 0, 0, 100, 100, 0, 0, 0, 0, 0, 100, 102, 102, 0, 0, 102, 102, 0, 0, 0, 0, 0, 102, 111, 111, 111, 111, 112, 112, 112, 112, 113, 113, 114, 114, 114, 114, 115, 115, 115, 115, 116, 0, 116, 117, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 121, 121, 121, 121, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "parser.lex" #line 2 "parser.lex" #include #include #include #include "../lib/q.h" #include "parser.h" #include "../lib/utf8.h" //RVALUE {NUMBER}|{PERCENT}|{NAME}|\"{STRING}\"|{DIM} //. {printf("%s\n", yytext);} // %x: exclusive, %s: inclusive char*type_names[] = {"twip","number","command","string","assignment","identifier","label","end"}; static int line=1; static int column=1; mem_t strings; mem_t tokens; static void count(char*text, int len, int condition) { int t; for(t=0;tstr; (p=strchr(p1, '\\')); p1 = p+1) { int nr=2; int new=1; switch(p[1]) { case '\\': p[0] = '\\'; break; case '"': p[0] = '"'; break; case 'b': p[0] = '\b'; break; case 'f': p[0] = '\f'; break; case 'n': p[0] = '\n'; break; case 'r': p[0] = '\r'; break; case 't': p[0] = '\t'; break; case 'x': case 'u': { int max=4; int num=0; char*utf8; char bracket = 0; if(p[1] == 'u') max = 6; if(p[2] == '{') { bracket = 1;nr++;max++; } while(strchr("0123456789abcdefABCDEF", p[nr]) && (bracket || nr < max)) { num <<= 4; if(p[nr]>='0' && p[nr]<='9') num |= p[nr] - '0'; if(p[nr]>='a' && p[nr]<='f') num |= p[nr] - 'a' + 10; if(p[nr]>='A' && p[nr]<='F') num |= p[nr] - 'A' + 10; nr++; } if(bracket && p[nr]=='}') { bracket = 0; nr++; } utf8 = getUTF8(num); new = strlen(utf8); memcpy(p, utf8, new); // do not copy the terminating zero break; } default: continue; } tmp->len -= (nr-new); { int t; char*to=p+new,*from=p+nr; while(*from) { *to = *from; to++; from++; } } } } static void store(enum type_t type, int line, int column, char*text, int length) { struct token_t token; string_t tmp; token.type = type; token.line = line; token.column = column; //printf("->%d(%s) %s\n", type, type_names[type], text);fflush(stdout); token.text_pos = 0; token.text = 0; switch(type) { case END: string_set2(&tmp, "", 0); token.text_pos = mem_putstring(&strings, tmp); break; case STRING: string_set2(&tmp, text+1, length-2); unescapeString(&tmp); token.text_pos = mem_putstring(&strings, tmp); break; case TWIP: case NUMBER: case IDENTIFIER: string_set2(&tmp, text, length); if(prefix) { //strcat token.text_pos = mem_put(&strings, prefix, strlen(prefix)); mem_putstring(&strings, tmp); } else { token.text_pos = mem_putstring(&strings, tmp); } prefix = 0; break; case RAWDATA: string_set2(&tmp, text+1/*:*/, length-5/*.end*/); token.text_pos = mem_putstring(&strings, tmp); break; case COMMAND: string_set2(&tmp, text+1, length-1); token.text_pos = mem_putstring(&strings, tmp); break; case ASSIGNMENT: { char*x = &text[length-1]; if(x[-1] == '-' || x[-1] == '+') x--; do{x--;} while(*x==32 || *x==10 || *x==13 || *x=='\t'); x++; //first space string_set2(&tmp, text, x-text); token.text_pos = mem_putstring(&strings, tmp); /*char*y,*x = strchr(text, '='); if(!x) exit(1); y=x; do{y--;} while(*y==32 || *y==10 || *y==13 || *y=='\t'); do{x++;} while(*x==32 || *x==10 || *x==13 || *x=='\t'); token.text1 = (char*)put(&strings, text, y-text + 1, 1); token.text2 = (char*)put(&strings, x, length-(x-text), 1);*/ } break; } mem_put(&tokens, &token, sizeof(struct token_t)); prefix = 0; } #define MAX_INCLUDE_DEPTH 16 static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; static int line_stack[MAX_INCLUDE_DEPTH]; static int column_stack[MAX_INCLUDE_DEPTH]; static int include_stack_ptr = 0; static void handleInclude(char*text, int len) { text+=9;len-=9; while(len >=1 && (text[0] == ' ' || text[0] == '\t')) { text++;len--; } while(len >= 1 && (text[len-1] == ' ' || text[len-1] == '\r' || text[len-1] == '\n')) { len--; } if(len >= 2 && text[0] == '"' && text[len-1] == '"') { text++; len-=2; } text[len] = 0; if(include_stack_ptr >= MAX_INCLUDE_DEPTH) { fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; line_stack[include_stack_ptr] = line; column_stack[include_stack_ptr] = column; include_stack_ptr++; yyin = fopen(text, "rb"); if (!yyin) { fprintf(stderr, "Couldn't open %s\n", text); exit(1); } yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE ) ); #ifdef INITIAL BEGIN(INITIAL); #else // best guess BEGIN(0); #endif } #define c() {count(yytext, yyleng, YY_START);} #define s(type) {store(type, line, column, yytext, yyleng);} #line 787 "parser.yy.c" #define INITIAL 0 #define R 1 #define BINARY 2 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (void ); int yyget_debug (void ); void yyset_debug (int debug_flag ); YY_EXTRA_TYPE yyget_extra (void ); void yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *yyget_in (void ); void yyset_in (FILE * in_str ); FILE *yyget_out (void ); void yyset_out (FILE * out_str ); int yyget_leng (void ); char *yyget_text (void ); int yyget_lineno (void ); void yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (void ); #else extern int yywrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #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 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) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #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 /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* 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_LVALUE->yy_at_bol = \ (yytext[yyleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 220 "parser.lex" #line 977 "parser.yy.c" if ( !(yy_init) ) { (yy_init) = 1; #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 ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = 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_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 111 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 110 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 222 "parser.lex" {c();BEGIN(0);} YY_BREAK case 2: YY_RULE_SETUP #line 223 "parser.lex" {c();} YY_BREAK case 3: /* rule 3 can match eol */ YY_RULE_SETUP #line 224 "parser.lex" {c();} YY_BREAK case 4: /* rule 4 can match eol */ *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 225 "parser.lex" {s(TWIP);c();BEGIN(0);} YY_BREAK case 5: /* rule 5 can match eol */ *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 226 "parser.lex" {s(NUMBER);c();BEGIN(0);} YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 227 "parser.lex" {c();} YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 228 "parser.lex" {c();} YY_BREAK case 8: YY_RULE_SETUP #line 229 "parser.lex" {s(STRING);c();BEGIN(0);} YY_BREAK case 9: *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 230 "parser.lex" {c();printf("unterminated string in line %d: %s\n", line, yytext);exit(1);yyterminate();} YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP #line 231 "parser.lex" {s(ASSIGNMENT);prefix="";c();BEGIN(R);} YY_BREAK case 11: /* rule 11 can match eol */ YY_RULE_SETUP #line 232 "parser.lex" {s(ASSIGNMENT);prefix="";c();BEGIN(R);} YY_BREAK case 12: /* rule 12 can match eol */ YY_RULE_SETUP #line 233 "parser.lex" {s(ASSIGNMENT);c();BEGIN(R);} YY_BREAK /* values which appear only on the right-hand side of assignments, like: x=50% */ case 13: YY_RULE_SETUP #line 235 "parser.lex" {s(IDENTIFIER);c();BEGIN(0);} YY_BREAK case 14: /* rule 14 can match eol */ YY_RULE_SETUP #line 237 "parser.lex" {handleInclude(yytext, yyleng);} YY_BREAK case 15: YY_RULE_SETUP #line 238 "parser.lex" {s(COMMAND);c();} YY_BREAK case 16: /* rule 16 can match eol */ YY_RULE_SETUP #line 239 "parser.lex" {s(RAWDATA);c();} YY_BREAK case 17: YY_RULE_SETUP #line 240 "parser.lex" {s(IDENTIFIER);c();} YY_BREAK case 18: YY_RULE_SETUP #line 241 "parser.lex" {c();BEGIN(BINARY);} YY_BREAK case 19: /* rule 19 can match eol */ YY_RULE_SETUP #line 242 "parser.lex" {c();} YY_BREAK case 20: YY_RULE_SETUP #line 243 "parser.lex" {char c,c1=yytext[0]; printf("Syntax error in line %d, %d: %s", line, column, yytext); while(1) { c=input(); if(c=='\n' || c==EOF) break; printf("%c", c); } if(c1>='0' && c1<='9') printf(" (identifiers must not start with a digit)"); printf("\n"); exit(1); yyterminate(); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(R): case YY_STATE_EOF(BINARY): #line 257 "parser.lex" {c(); if ( --include_stack_ptr < 0 ) { s(END); yyterminate(); } else { yy_delete_buffer(YY_CURRENT_BUFFER ); yy_switch_to_buffer(include_stack[include_stack_ptr] ); column = column_stack[include_stack_ptr]; line = line_stack[include_stack_ptr]; } } YY_BREAK case 21: YY_RULE_SETUP #line 270 "parser.lex" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 1213 "parser.yy.c" 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); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { 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_LVALUE->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 (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->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 single character, 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_LVALUE->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_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* 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. */ yyrealloc((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_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } 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_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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(); 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); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 111 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } 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 ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 111 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 110); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #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_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) 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) + offset; break; } } } 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_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); 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_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = 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; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(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 *) yyalloc(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; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } #ifndef _UNISTD_H /* assume unistd.h has isatty() for us */ #ifdef __cplusplus extern "C" { #endif #ifdef __THROW /* this is a gnuism */ extern int isatty (int ) __THROW; #else extern int isatty (int ); #endif #ifdef __cplusplus } #endif #endif /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; 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( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { 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) yyalloc(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; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_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; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (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. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param line_number * */ void yyset_lineno (int line_number ) { yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * in_str ) { yyin = in_str ; } void yyset_out (FILE * out_str ) { yyout = out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int bdebug ) { yy_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 270 "parser.lex" int yywrap() { return 1; } void freeTokens(struct token_t*file) { mem_clear(&strings); mem_clear(&tokens); } struct token_t* generateTokens(char*filename) { FILE*fi; int t; struct token_t*result; int num; if(!filename) return 0; if(!strcmp(filename,"-")) fi = stdin; else fi = fopen(filename, "rb"); if(!fi) { printf("Couldn't find file %s\n", filename); return 0; } yyin = fi; mem_init(&strings); mem_init(&tokens); mem_put(&strings, &t, 1); //hack- make all valid strings start at position >0 line=1; column=1; yylex(); #ifdef YY_CURRENT_BUFFER // some newer flex versions require it like this: yy_delete_buffer(YY_CURRENT_BUFFER); #else yy_delete_buffer(yy_current_buffer); #endif result = (struct token_t*)tokens.buffer; num = tokens.pos/sizeof(struct token_t); for(t=0;t 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 */ #include "../config.h" #include #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/log.h" static char * filename = 0; static char * outfilename = "output.swf"; static int optimize = 0; static int swifty = 0; static int verbose = 0; static int showbbox = 0; static int showorigbbox = 1; static int expand = 0; static int clip = 0; static int checkclippings = 0; static struct options_t options[] = { {"h", "help"}, {"b", "bbox"}, {"B", "newbbox"}, {"e", "expand"}, {"O", "optimize"}, {"S", "swifty"}, {"c", "clip"}, {"o", "output"}, {"v", "verbose"}, {"V", "version"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfbbox - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "b")) { showorigbbox = 2; if(showbbox == 1) showbbox = 0; return 0; } else if(!strcmp(name, "B")) { showbbox = 2; return 0; } else if(!strcmp(name, "O")) { optimize = 1; if(showorigbbox == 1) showorigbbox = 0; return 0; } else if(!strcmp(name, "S")) { swifty = 1; if(showorigbbox == 1) showorigbbox = 0; return 0; } else if(!strcmp(name, "c")) { if(showorigbbox == 1) showorigbbox = 0; clip = 1; return 0; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else if(!strcmp(name, "q")) { if(verbose) verbose --; return 0; } else if(!strcmp(name, "Q")) { /* DEPRECATED- was used for testing the bbox-clip feature of pdf2swf */ if(showorigbbox == 1) showorigbbox = 0; checkclippings = 1; return 0; } else if(!strcmp(name, "e")) { expand = 1; return 0; } else if(!strcmp(name, "o")) { outfilename = val; return 1; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-OS] file.swf\n", name); printf("\n"); printf("-h , --help Print help and exit\n"); printf("-b , --bbox Show movie bounding box (default)\n"); printf("-B , --newbbox Show recalculated (optimized/expanded) bounding box\n"); printf("-e , --expand Write out a new file using the recalculated header bounding box\n"); printf("-O , --optimize Recalculate all object bounding boxes (except for the header)\n"); printf("-S , --swifty Print out transformed bounding boxes\n"); printf("-c , --clip Clip bounding boxes to movie size\n"); printf("-o , --output Set output filename to (for -O)\n"); printf("-v , --verbose Be more verbose\n"); printf("-V , --version Print program version and exit\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } #define swf_ResetReadBits(tag) if (tag->readBit) { tag->pos++; tag->readBit = 0; } void swf_Shape2Optimize(SHAPE2*shape) { if(!shape->bbox) shape->bbox = malloc(sizeof(SRECT)); *(shape->bbox) = swf_GetShapeBoundingBox(shape); } /* {char {x1 y1 x2 y2 x3 y3 x4 y4]] */ SRECT bboxes[65536]; U16 depth2id[65536]; char*depth2name[65536]; int hasid(TAG*tag) { if(tag->id == ST_PLACEOBJECT) return 1; if(tag->id == ST_PLACEOBJECT2 && (tag->data[0] & 2)) return 1; if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 2)) return 1; return 0; } int hasname(TAG*tag) { if(tag->id == ST_PLACEOBJECT) return 0; if(tag->id == ST_PLACEOBJECT2 && (tag->data[0] & 0x20)) return 1; if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 0x20)) return 1; return 0; } char* getname(TAG*tag) { if(tag->id == ST_PLACEOBJECT) return 0; if(tag->id == ST_PLACEOBJECT2 && (tag->data[0] & 0x20)) { SWFPLACEOBJECT o; tag->pos = 0;tag->readBit = 0; swf_GetPlaceObject(tag, &o); return o.name; } if(tag->id == ST_PLACEOBJECT3 && (tag->data[0] & 0x20)) { SWFPLACEOBJECT o; tag->pos = 0;tag->readBit = 0; swf_GetPlaceObject(tag, &o); return o.name; } return 0; } MATRIX getmatrix(TAG*tag) { SWFPLACEOBJECT o; tag->pos = 0;tag->readBit = 0; swf_GetPlaceObject(tag, &o); return o.matrix; } static int fontnum = -1; static SWFFONT**fonts; static SWF*c_swf; static void fontcallback1(void*self, U16 id,U8 * name) { fontnum++; } static void fontcallback2(void*self, U16 id,U8 * name) { fonts[fontnum] = 0; swf_FontExtract(c_swf,id,&fonts[fontnum]); if(verbose) { if(fonts[fontnum]) printf("Extracting font %d (%s)\n", id, name); else printf("Extracting font %d (%s) failed\n", id, name); fflush(stdout); } fontnum++; } typedef struct _textbounds { SRECT r; MATRIX m; // character transform matrix } textbounds_t; typedef struct _placement { SWFPLACEOBJECT* po; int num; } placement_t; static placement_t* placements; static placement_t* readPlacements(SWF*swf) { placement_t* p = (placement_t*)rfx_calloc(sizeof(placement_t)*65536); TAG*tag = swf->firstTag; while(tag) { if(swf_isPlaceTag(tag)) { SWFPLACEOBJECT*po = rfx_alloc(sizeof(SWFPLACEOBJECT)); int id; swf_GetPlaceObject(tag, po); id = po->id; if(po->move) { fprintf(stderr, "MOVE tags not supported with -c"); } p[id].po = po; p[id].num++; } tag = tag->next; } return p; } static void freePlacements(placement_t*p) { int t; for(t=0;t<65536;t++) { if(p[t].po) { swf_PlaceObjectFree(p[t].po); p[t].po = 0; } } rfx_free(p); } static SRECT clipBBox(TAG*tag, SRECT mbbox, SRECT r) { int id = swf_GetDefineID(tag); MATRIX m; if(!placements[id].po) { if(verbose) printf("Id %d is never set\n", id); return r; } if(placements[id].num>1) { if(verbose) printf("Id %d is set more than once\n", id); return r; } m = placements[id].po->matrix; if(m.r0 || m.r1) { fprintf(stderr, "Rotating PLACEOBJECTS are not supported with -c\n"); return r; } if(verbose) { printf("ID %d\n", id); swf_DumpMatrix(stdout, &m); } mbbox.xmin -= m.tx; mbbox.ymin -= m.ty; mbbox.xmax -= m.tx; mbbox.ymax -= m.ty; mbbox.xmin *= 65536.0/m.sx; mbbox.xmax *= 65536.0/m.sx; mbbox.ymin *= 65536.0/m.sy; mbbox.ymax *= 65536.0/m.sy; if(verbose) { printf("border: %f/%f/%f/%f - rect: %f/%f/%f/%f\n", mbbox.xmin /20.0, mbbox.ymin /20.0, mbbox.xmax /20.0, mbbox.ymax /20.0, r.xmin /20.0, r.ymin /20.0, r.xmax /20.0, r.ymax /20.0); } if(checkclippings) { int clip = 0; if(r.xmax > mbbox.xmax) clip += r.xmax - mbbox.xmax; if(r.ymax > mbbox.ymax) clip += r.ymax - mbbox.ymax; if(r.xmax < mbbox.xmin) clip += -(r.xmax - mbbox.xmin); if(r.ymax < mbbox.ymin) clip += -(r.ymax - mbbox.ymin); if(r.xmin > mbbox.xmax) clip += r.xmin = mbbox.xmax; if(r.ymin > mbbox.ymax) clip += r.ymin = mbbox.ymax; if(r.xmin < mbbox.xmin) clip += -(r.xmin = mbbox.xmin); if(r.ymin < mbbox.ymin) clip += -(r.ymin = mbbox.ymin); if(clip > 3*20) { printf("needs clipping: [%.2f %.2f %2.f %2.f] is outside [%.2f %2.f %2.f %2.f]\n", r.xmin / 20.0, r.ymin / 20.0, r.xmax / 20.0, r.ymax / 20.0, mbbox.xmin / 20.0, mbbox.ymin / 20.0, mbbox.xmax / 20.0, mbbox.ymax / 20.0 ); } } r = swf_ClipRect(mbbox, r); if(verbose) { printf("new rect: %f/%f/%f/%f\n", r.xmin /20.0, r.ymin /20.0, r.xmax /20.0, r.ymax /20.0); } return r; } static void textcallback(void*self, int*chars, int*xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA* color) { textbounds_t * bounds = (textbounds_t*)self; SWFFONT*font = 0; int t; for(t=0;tid == fontid) { font = fonts[t]; break; } } if(!font) { fprintf(stderr, "Font %d unknown\n", fontid); exit(1); } if(!font->layout) { /* This is an expensive operation- but what should we do, we need the glyph's bounding boxes */ swf_FontCreateLayout(font); } if(verbose) printf("%d chars, font %d, size %d, at (%d,%d)\n", nr, fontid, fontsize, xstart, ystart); for(t=0;tlayout->bounds[chars[t]]; MATRIX m = bounds->m; SPOINT p; if(chars[t] < font->numchars && font->glyph2ascii) { ch = font->glyph2ascii[chars[t]]; } p.x = x; p.y = y; p = swf_TurnPoint(p, &m); m.sx = (m.sx * fontsize) / 1024; m.sy = (m.sy * fontsize) / 1024; m.r0 = (m.r0 * fontsize) / 1024; m.r1 = (m.r1 * fontsize) / 1024; m.tx += p.x; m.ty += p.y; newglyphbbox = swf_TurnRect(glyphbbox, &m); if(ch<32) ch='?'; swf_ExpandRect2(&(bounds->r), &newglyphbbox); if(verbose >= 2) { printf("%5d %c, %d %d %d %d (%d %d %d %d) -> %d %d %d %d\n", xpos[t], ch, glyphbbox.xmin, glyphbbox.ymin, glyphbbox.xmax, glyphbbox.ymax, newglyphbbox.xmin, newglyphbbox.ymin, newglyphbbox.xmax, newglyphbbox.ymax, bounds->r.xmin, bounds->r.ymin, bounds->r.xmax, bounds->r.ymax); } } } static void swf_OptimizeBoundingBoxes(SWF*swf) { TAG* tag = swf->firstTag; while (tag) { if (tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || tag->id == ST_DEFINESHAPE3 || tag->id == ST_DEFINESHAPE4) { SHAPE2 s; if(verbose) printf("%s\n", swf_TagGetName(tag)); swf_ParseDefineShape(tag, &s); if(optimize) swf_Shape2Optimize(&s); tag->len = 2; tag->pos = 0; if(!s.bbox) { fprintf(stderr, "Internal error (5)\n"); exit(1); } if(clip || checkclippings) { *s.bbox = clipBBox(tag, swf->movieSize, *s.bbox); } swf_SetShape2(tag, &s); } if (tag->id == ST_DEFINETEXT || tag->id == ST_DEFINETEXT2) { SRECT oldbox; int matrix_offset; int len; U8*data; textbounds_t bounds; if(verbose) printf("%s\n", swf_TagGetName(tag)); if(fontnum < 0) { if(verbose) printf("Extracting fonts...\n"); c_swf = swf; fontnum = 0; swf_FontEnumerate(swf,&fontcallback1,0); fonts = (SWFFONT**)malloc(fontnum*sizeof(SWFFONT*)); memset(fonts, 0, fontnum*sizeof(SWFFONT*)); fontnum = 0; swf_FontEnumerate(swf,&fontcallback2,0); } memset(&bounds, 0, sizeof(bounds)); swf_SetTagPos(tag, 0); swf_GetU16(tag); swf_GetRect(tag,&oldbox); swf_ResetReadBits(tag); matrix_offset = tag->pos; swf_GetMatrix(tag,&bounds.m); swf_ParseDefineText(tag, textcallback, &bounds); if(verbose) { printf("\n"); swf_DumpMatrix(stdout, &bounds.m); printf("old: %d %d %d %d\n", oldbox.xmin, oldbox.ymin, oldbox.xmax, oldbox.ymax); printf("new: %d %d %d %d\n", bounds.r.xmin, bounds.r.ymin, bounds.r.xmax, bounds.r.ymax); } if(!optimize) bounds.r = oldbox; //set to old bounds from the tag header if(clip || checkclippings) { bounds.r = clipBBox(tag, swf->movieSize, bounds.r); } /* now comes the tricky part: we have to fiddle the data back in thank heavens that the bbox is follow by a matrix struct, which always starts on a byte boundary. */ len = tag->len - matrix_offset; data = malloc(len); memcpy(data, &tag->data[matrix_offset], len); tag->writeBit = 0; tag->len = 2; swf_SetRect(tag, &bounds.r); swf_SetBlock(tag, data, len); free(data); tag->pos = tag->readBit = 0; } tag = tag->next; } } static void showSwiftyOutput(SWF*swf) { TAG*tag = swf->firstTag; int frame=0; printf("{\n\t{frame %d}\n", frame++); while (tag) { if (tag->id == ST_SHOWFRAME) { printf("}\n{\n\t{frame %d}\n", frame++); } if (swf_isPlaceTag(tag)) { if(hasid(tag)) { depth2id[swf_GetDepth(tag)] = swf_GetPlaceID(tag); } if(hasname(tag)) { depth2name[swf_GetDepth(tag)] = getname(tag); } } if (swf_isPlaceTag(tag)) { MATRIX m = getmatrix(tag); U16 id = depth2id[swf_GetDepth(tag)]; char*name = depth2name[swf_GetDepth(tag)]; char buf[40]; SRECT bbox = bboxes[id]; SPOINT p1,p2,p3,p4; p1.x = bbox.xmin; p1.y = bbox.ymin; p2.x = bbox.xmax; p2.y = bbox.ymin; p3.x = bbox.xmin; p3.y = bbox.ymax; p4.x = bbox.xmax; p4.y = bbox.ymax; p1 = swf_TurnPoint(p1, &m); p2 = swf_TurnPoint(p2, &m); p3 = swf_TurnPoint(p3, &m); p4 = swf_TurnPoint(p4, &m); if(!name) { sprintf(buf, "ID%d", id);name = buf; } //printf("\t#%.4f %.4f %.4f %.4f | %.4f %.4f\n", m.sx/65536.0, m.r1/65536.0, m.r0/65536.0, m.sy/65536.0, m.tx/20.0, m.ty/20.0); printf("\t{%s {%.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f}}\n", name, p1.x/20.0, p1.y/20.0, p2.x/20.0, p2.y/20.0, p3.x/20.0, p3.y/20.0, p4.x/20.0, p4.y/20.0); } tag = tag->next; } printf("}\n"); } static SRECT getMovieClipBBox(TAG*tag) { //TAG*tag = swf->firstTag; int frame=0; SRECT movieSize; U16 depth2id[65536]; memset(depth2id, 0, sizeof(depth2id)); memset(&movieSize,0,sizeof(SRECT)); while (tag && tag->id != ST_END) { if (swf_isPlaceTag(tag)) { if(hasid(tag)) { depth2id[swf_GetDepth(tag)] = swf_GetPlaceID(tag); } } if (swf_isPlaceTag(tag)) { MATRIX m = getmatrix(tag); U16 id = depth2id[swf_GetDepth(tag)]; SRECT bbox = bboxes[id]; SRECT tbbox = swf_TurnRect(bbox, &m); swf_ExpandRect2(&movieSize, &tbbox); } tag = tag->next; } return movieSize; } static SRECT getSWFBBox(SWF*swf) { SRECT movieSize = getMovieClipBBox(swf->firstTag); return movieSize; } int main (int argc,char ** argv) { TAG*tag; SWF swf; int fi; SRECT oldMovieSize; SRECT newMovieSize; memset(bboxes, 0, sizeof(bboxes)); memset(depth2name, 0, sizeof(depth2name)); processargs(argc, argv); initLog(0,0,0,0,0,verbose?LOGLEVEL_DEBUG:LOGLEVEL_WARNING); if(!filename) { fprintf(stderr, "You must supply a filename.\n"); return 1; } fi = open(filename,O_RDONLY|O_BINARY); if (fi<0) { perror("Couldn't open file: "); exit(1); } if FAILED(swf_ReadSWF(fi,&swf)) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(fi); exit(1); } close(fi); swf_OptimizeTagOrder(&swf); if(clip || checkclippings) { placements = readPlacements(&swf); } swf_FoldAll(&swf); /* Optimize bounding boxes in case -O flag was set */ if(optimize || checkclippings || clip) { swf_OptimizeBoundingBoxes(&swf); } /* Create an ID to Bounding Box table */ tag = swf.firstTag; while (tag) { if(swf_isDefiningTag(tag)) { int id = swf_GetDefineID(tag); if(tag->id != ST_DEFINESPRITE) { bboxes[id] = swf_GetDefineBBox(tag); } else { swf_UnFoldSprite(tag); bboxes[id] = getMovieClipBBox(tag); swf_FoldSprite(tag); if(verbose) { printf("sprite %d is %.2fx%.2f\n", id, (bboxes[id].xmax - bboxes[id].xmin)/20.0, (bboxes[id].ymax - bboxes[id].ymin)/20.0); } } } tag = tag->next; } /* Create an ID->Bounding Box table for all bounding boxes */ if(swifty) { showSwiftyOutput(&swf); } oldMovieSize = swf.movieSize; newMovieSize = getSWFBBox(&swf); if(optimize || expand) { if(expand) swf.movieSize = newMovieSize; fi = open(outfilename, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666); if(swf_WriteSWF(fi, &swf) < 0) { fprintf(stderr, "Error writing file %s", outfilename); close(fi); exit(1); } close(fi); } if(showbbox) { if(verbose>=0) printf("Real Movie Size (size of visible objects): "); printf("%.2f x %.2f :%.2f :%.2f\n", (newMovieSize.xmax-newMovieSize.xmin)/20.0, (newMovieSize.ymax-newMovieSize.ymin)/20.0, (newMovieSize.xmin)/20.0, (newMovieSize.ymin)/20.0 ); } if(showorigbbox) { if(verbose>=0) printf("Movie Size accordings to file header: "); printf("%.2f x %.2f :%.2f :%.2f\n", (oldMovieSize.xmax-oldMovieSize.xmin)/20.0, (oldMovieSize.ymax-oldMovieSize.ymin)/20.0, (oldMovieSize.xmin)/20.0, (oldMovieSize.ymin)/20.0 ); } swf_FreeTags(&swf); if(placements) { freePlacements(placements); } return 0; } swftools_0.9.2+git20130725.orig/src/jpeg2swf.10000644000175000017500000000374712216332640017736 0ustar gawaingawain.TH jpeg2swf "1" "April 2012" "jpeg2swf" "swftools" .SH NAME jpeg2swf \- Converts jpeg images to SWF. .SH Synopsis .B jpeg2swf [\-options [value]] imagefiles[.jpg]|[.jpeg] [...] .SH DESCRIPTION This tool converts jpeg image files into an SWF animation. It takes any number of input pictures, and converts them to SWF one\-by\-one, where every converted picture is a seperate frame in the target SWF. .SH OPTIONS .TP \fB\-o\fR, \fB\-\-output\fR \fIoutputfile\fR Explicitly specify output file. (Otherwise, output will go to stdout / output.swf) .TP \fB\-q\fR, \fB\-\-quality\fR \fIquality\fR Set compression quality (1-100, 1=worst, 100=best). This option can be set independently for each image. .TP \fB\-r\fR, \fB\-\-rate\fR \fIframerate\fR Set movie framerate (frames per second) .TP \fB\-z\fR, \fB\-\-zlib\fR \fIzlib\fR Use Flash MX (SWF 6) Zlib encoding for the output. The resulting SWF will be smaller, but not playable in Flash Plugins of Version 5 and below. .TP \fB\-M\fR, \fB\-\-mx\fR Use Flash MX H.263 compression (use for correlated images) .TP \fB\-x\fR, \fB\-\-xoffset\fR \fIoffset\fR horizontally offset images by \fIoffset\fR .TP \fB\-y\fR, \fB\-\-yoffset\fR \fIoffset\fR vertically offset images by \fIoffset\fR .TP \fB\-X\fR, \fB\-\-width\fR \fIwidth\fR Force movie width to \fIwidth\fR (default: autodetect) .TP \fB\-Y\fR, \fB\-\-height\fR \fIheight\fR Force movie height to \fIheight\fR (default: autodetect) .TP \fB\-T\fR, \fB\-\-flashversion\fR \fIversion\fR Set flash file version to \fIversion\fR .TP \fB\-v\fR, \fB\-\-verbose\fR \fIlevel\fR Set verbose level to \fIlevel\fR (0=quiet, 1=default, 2=debug) .TP \fB\-V\fR, \fB\-\-version\fR Print version information and exit .TP \fB\-f\fR, \fB\-\-fit-to-movie\fR Fit images to movie size .TP \fB\-e\fR, \fB\-\-export\fR \fIassetname\fR Make importable as asset with \fIassetname\fR .SH AUTHORS Rainer Böhme .TP Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfc-interpolation.c0000644000175000017500000002410512216332640022107 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #include #include #include #include "swfc-interpolation.h" static inline float poly(float fraction, float start, float delta, float slope, int degree) { return delta * ((1 - slope) * pow(fraction, degree) + slope * fraction) + start; } float linear(float fraction, float start, float delta) { return poly(fraction, start, delta, 0, 1); } float quadIn(float fraction, float start, float delta, float slope) { return poly(fraction, start, delta, slope, 2); } float quadOut(float fraction, float start, float delta, float slope) { return quadIn(1 - fraction, start + delta, -delta, slope); } float quadInOut(float fraction, float start, float delta, float slope) { if (fraction < 0.5) return quadIn(2 * fraction, start, delta / 2, slope); return quadOut(2 * fraction - 1, start + delta / 2, delta / 2, slope); } float cubicIn(float fraction, float start, float delta, float slope) { return poly(fraction, start, delta, slope, 3); } float cubicOut(float fraction, float start, float delta, float slope) { return cubicIn(1 - fraction, start + delta, -delta, slope); } float cubicInOut(float fraction, float start, float delta, float slope) { if (fraction < 0.5) return cubicIn(2 * fraction, start, delta / 2, slope); return cubicOut(2 * fraction - 1, start + delta / 2, delta / 2, slope); } float quartIn(float fraction, float start, float delta, float slope) { return poly(fraction, start, delta, slope, 4); } float quartOut(float fraction, float start, float delta, float slope) { return quartIn(1 - fraction, start + delta, -delta, slope); } float quartInOut(float fraction, float start, float delta, float slope) { if (fraction < 0.5) return quartIn(2 * fraction, start, delta / 2, slope); return quartOut(2 * fraction - 1, start + delta / 2, delta / 2, slope); } float quintIn(float fraction, float start, float delta, float slope) { return poly(fraction, start, delta, slope, 5); } float quintOut(float fraction, float start, float delta, float slope) { return quintIn(1 - fraction, start + delta, -delta, slope); } float quintInOut(float fraction, float start, float delta, float slope) { if (fraction < 0.5) return quintIn(2 * fraction, start, delta / 2, slope); return quintOut(2 * fraction - 1, start + delta / 2, delta / 2, slope); } float circleIn(float fraction, float start, float delta, float slope) { return delta * (1 - sqrt(1 - (1 - 2 * slope) * fraction * fraction - 2 * slope * fraction)) + start; } float circleOut(float fraction, float start, float delta, float slope) { return circleIn(1 - fraction, start + delta, -delta, slope); } float circleInOut(float fraction, float start, float delta, float slope) { if (fraction < 0.5) return circleIn(2 * fraction, start, delta / 2, slope); return circleOut(2 * fraction - 1, start + delta / 2, delta / 2, slope); } float exponentialIn(float fraction, float start, float delta) { if (fraction == 0) return start; return delta * pow(2, 10 * (fraction - 1)) + start; } float exponentialOut(float fraction, float start, float delta) { return exponentialIn(1 - fraction, start + delta, -delta); } float exponentialInOut(float fraction, float start, float delta) { if (fraction < 0.5) return exponentialIn(2 * fraction, start, delta / 2); return exponentialOut(2 * fraction - 1, start + delta / 2, delta / 2); } float sineIn(float fraction, float start, float delta) { return delta * (1 - cos(fraction * M_PI/2)) + start; } float sineOut(float fraction, float start, float delta) { return sineIn(1 - fraction, start + delta, -delta); } float sineInOut(float fraction, float start, float delta) { if (fraction < 0.5) return sineIn(2 * fraction, start, delta / 2); return sineOut(2 * fraction - 1, start + delta / 2, delta / 2); } float elasticIn(float fraction, float start, float delta, float amplitude, int bounces, float damping) { if (fraction == 0 || delta == 0) return start; if (fraction == 1) return start + delta; if (amplitude < fabs(delta)) amplitude = delta; float period = 1 / (bounces + 0.25); return amplitude * pow(2, damping * (fraction - 1)) * sin(fraction * (2 * M_PI) / period) + start; } float elasticOut(float fraction, float start, float delta, float amplitude, int bounces, float damping) { return elasticIn(1 - fraction, start + delta, -delta, amplitude, bounces, damping); } float elasticInOut(float fraction, float start, float delta, float amplitude, int bounces, float damping) { if (fraction < 0.5) return elasticIn(2 * fraction, start, delta / 2, amplitude, bounces, damping); return elasticOut(2 * fraction - 1, start + delta / 2, delta / 2, amplitude, bounces, damping); } float backIn(float fraction, float start, float delta, float speed) { return delta * fraction * fraction * ((speed + 1) * fraction - speed) + start; } float backOut(float fraction, float start, float delta, float speed) { return backIn(1 - fraction, start + delta, -delta, speed); } float backInOut(float fraction, float start, float delta, float speed) { if (fraction < 0.5) return backIn(2 * fraction, start, delta / 2, speed); return backOut(2 * fraction - 1, start + delta / 2, delta / 2, speed); } /* when applied to movement bounceIn the object 'hits the floor' bounces times * (after leaving the floor first) before gently reaching the final position at the top of the final bounce * Each bounce takes growth times a long as the previous, except for the last one which lasts only half * that time. The heights of the intermediate bounces are determined by the damping parameter. * Set damping to 0 for an undamped movement.*/ float bounceIn(float fraction, float start, float delta, int bounces, float growth, float damping) { if (fraction == 0 || delta == 0) return start; if (fraction == 1) return start + delta; float w0; if (growth == 1.0) w0 = 1 / (bounces + 0.5); else { float gN = pow(growth, bounces); w0 = 1 / ((gN - 1) / (growth - 1) + gN / 2 ); } float bounceStart = 0; int i; float w = w0; for (i = 0; i <= bounces; i++) { float bounceEnd = bounceStart + w; if (fraction >= bounceStart && fraction < bounceEnd) { float half = (bounceEnd + bounceStart) / 2; float top = delta / pow(2, damping * ((bounces - i))); fraction -= half; fraction /= (w / 2); return (1 - fraction * fraction) * top + start; } bounceStart = bounceEnd; w = w * growth; } return w; } /* bounceOut is a time-reversed bounceIn; therefore each bounce takes 1/growth times as long as * the previous, which I think fits the idea when applied to movement */ float bounceOut(float fraction, float start, float delta, int bounces, float growth, float damping) { return bounceIn(1 - fraction, start + delta, -delta, bounces, growth, damping); } /* since bounceIn and bounceOut are combined, if growth > 1 then the bounce-times will increase in * the first half and decrease in the second half */ float bounceInOut(float fraction, float start, float delta, int bounces, float growth, float damping) { if (fraction < 0.5) return bounceIn(2 * fraction, start, delta / 2, bounces, growth, damping); return bounceOut(2 * fraction - 1, start + delta / 2, delta / 2, bounces, growth, damping); } /* fastBounce(In/Out) doesn't end or start in a horizontal slope (= gentle end or start) as * bounce(In/Out) do which means fastBounceInOut doesn't have the 'delay' in the middle */ float fastBounceIn(float fraction, float start, float delta, int bounces, float growth, float damping) { if (fraction == 0 || delta == 0) return start; if (fraction == 1) return start + delta; float w0; if (growth == 1.0) w0 = 1 / (bounces + 0.25); /* in general (bounces + 1 / (2 * f)) */ else { float gN = pow(growth, bounces); w0 = 1 / ((gN - 1) / (growth - 1) + gN / 4 /* in general: gN / (2 * f) */ ); } float bounceStart = 0; int i; float w = w0; for (i = 0; i <= bounces; i++) { float bounceEnd = bounceStart + w; if (fraction >= bounceStart && fraction < bounceEnd) { float half = (bounceEnd + bounceStart) / 2; float top = delta / 0.75/* in general: (1 - (1 / f) * (1 / f)) */ / pow(2, damping * ((bounces - i))); fraction -= half; fraction /= (w / 2); return (1 - fraction * fraction) * top + start; } bounceStart = bounceEnd; w = w * growth; } return 0; } float fastBounceOut(float fraction, float start, float delta, int bounces, float growth, float damping) { return fastBounceIn(1 - fraction, start + delta, -delta, bounces, growth, damping); } float fastBounceInOut(float fraction, float start, float delta, int bounces, float growth, float damping) { if (fraction < 0.5) return fastBounceIn(2 * fraction, start, delta / 2, bounces, growth, damping); return fastBounceOut(2 * fraction - 1, start + delta / 2, delta / 2, bounces, growth, damping); } swftools_0.9.2+git20130725.orig/src/pdf2pdf.10000644000175000017500000000207512216332640017525 0ustar gawaingawain.TH pdf2pdf "1" "April 2012" "pdf2pdf" "swftools" .SH NAME pdf2pdf \- Runs a pdf through the pdf2swf conversion engine, and writes it back to a pdf. .SH Synopsis .B pdf2pdf .SH DESCRIPTION Runs a pdf through the pdf2swf conversion engine, and writes it back to a pdf. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-v\fR, \fB\-\-verbose\fR Be verbose. Use more than one -v for greater effect. .TP \fB\-p\fR, \fB\-\-pages\fR \fIpages\fR Pages to convert .TP \fB\-X\fR, \fB\-\-width\fR \fIwidth\fR Make sure the output pdf is \fIwidth\fR pixels wide .TP \fB\-Y\fR, \fB\-\-height\fR \fIheight\fR Make sure the output pdf is \fIheight\fR pixels high .TP \fB\-s\fR, \fB\-\-set\fR \fIparameter>= .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Write output to file \fIfilename\fR. (If not given, the output will go to a file with the extension .print.pdf) .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/jpeg2swf.c0000644000175000017500000003631612216332640020016 0ustar gawaingawain/* jpeg2swf.c JPEG to SWF converter tool Part of the swftools package. Copyright (c) 2001 Rainer Böhme Copyright (c) 2002,2003 Matthias Kramm 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 */ #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" // not really a header ;-) #define MAX_INPUT_FILES 1024 #define VERBOSE(x) (global.verbose>=x) static struct { int quality; float framerate; int max_image_width; int max_image_height; int force_width; int force_height; int nfiles; int verbose; char *outfile; int mx; int next_id; char *asset_name; int version; int fit_to_movie; float scale; } global; static int custom_move=0; static int move_x=0; static int move_y=0; static int clip_x1=0,clip_y1=0,clip_x2=0,clip_y2=0; static int custom_clip = 0; typedef struct _image { char *filename; int quality; int width; int height; } image_t; image_t image[MAX_INPUT_FILES]; VIDEOSTREAM stream; TAG *MovieStart(SWF * swf, float framerate, int dx, int dy) { TAG *t; RGBA rgb; memset(swf, 0x00, sizeof(SWF)); swf->fileVersion = global.version; swf->frameRate = (int)(256.0 * framerate); if(custom_clip) { swf->movieSize.xmin = clip_x1 * 20; swf->movieSize.ymin = clip_y1 * 20; swf->movieSize.xmax = clip_x2 * 20; swf->movieSize.ymax = clip_y2 * 20; } else { swf->movieSize.xmin = 0; swf->movieSize.ymin = 0; swf->movieSize.xmax = swf->movieSize.xmin + dx * 20; swf->movieSize.ymax = swf->movieSize.ymin + dy * 20; } t = swf->firstTag = swf_InsertTag(NULL, ST_SETBACKGROUNDCOLOR); rgb.r = rgb.g = rgb.b = rgb.a = 0x00; swf_SetRGB(t, &rgb); if (global.mx) { t = swf_InsertTag(t, ST_DEFINEVIDEOSTREAM); swf_SetU16(t, 0xf00d); swf_SetVideoStreamDefine(t, &stream, 65535, dx, dy); } else if (global.asset_name) { t = swf_InsertTag(t, ST_DEFINESPRITE); swf_SetU16(t, 1); swf_SetU16(t, global.next_id++); } return t; } int MovieFinish(SWF * swf, TAG * t, char *sname) { int handle, so = fileno(stdout); if (global.asset_name) { SWFPLACEOBJECT obj; t = swf_InsertTag(t, ST_END); t = swf_InsertTag(t, ST_EXPORTASSETS); swf_SetU16(t, 1); swf_SetU16(t, 1); swf_SetString(t, global.asset_name); t = swf_InsertTag(t, ST_PLACEOBJECT2); swf_GetPlaceObject(0, &obj); obj.depth = 1; obj.id = 1; swf_SetPlaceObject(t, &obj); t = swf_InsertTag(t, ST_SHOWFRAME); } t = swf_InsertTag(t, ST_END); if ((!isatty(so)) && (!sname)) handle = so; else { if (!sname) sname = "output.swf"; handle = open(sname, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666); } if(handle<0 && sname) { perror(sname); } if (swf_WriteSWF(handle, swf)<0) fprintf(stderr, "Unable to write output file: %s\n", sname); if (handle != so) close(handle); swf_FreeTags(swf); return 0; } int getJPEG(char*filename, int* width, int* height, RGBA**pic2) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; struct jpeg_source_mgr mgr; int x,y; FILE*f; RGBA*pic,*js; U8*buf; if ((f=fopen(filename,"rb"))==NULL) { fprintf(stderr, "rfxswf: file open error\n"); return 0; } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, f); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); pic = malloc(cinfo.output_width*cinfo.output_height*sizeof(RGBA)); buf = malloc(cinfo.output_width*4); memset(pic, 255, cinfo.output_width*cinfo.output_height*sizeof(RGBA)); js = pic; *width = cinfo.output_width; *height = cinfo.output_height; for (y=0;y>8); js[x].g = y - ((88*(u-128)+183*(v-128))>>8); js[x].b = y + ((455 * (u-128))>>8); } } else if(cinfo.out_color_space == JCS_CMYK) { for(x=0;x>8); js[x].g = white - ((buf[x*4+1]*white)>>8); js[x].b = white - ((buf[x*4+2]*white)>>8); } } js += cinfo.output_width; } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); free(buf); *pic2 = pic; return 1; } int frame = 0; TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int quality, int width, int height) { SHAPE *s; SRECT r; MATRIX m; int fs; int movie_width = swf->movieSize.xmax - swf->movieSize.xmin; int movie_height = swf->movieSize.ymax - swf->movieSize.ymin; if(global.mx) { int sizex, sizey; RGBA * pic2; SWFPLACEOBJECT obj; int quant=0; getJPEG(sname, &sizex, &sizey, &pic2); if(sizex != stream.owidth || sizey != stream.oheight) { fprintf(stderr, "All images must have the same dimensions if using -m!"); exit(1); } t = swf_InsertTag(t, ST_VIDEOFRAME); swf_SetU16(t, 0xf00d); quant = 1+(30-(30*quality)/100); if(!(frame%20)) { swf_SetVideoStreamIFrame(t, &stream, pic2, quant); } else { swf_SetVideoStreamPFrame(t, &stream, pic2, quant); } t = swf_InsertTag(t, ST_PLACEOBJECT2); swf_GetPlaceObject(0, &obj); if(frame==0) { obj.depth = 1; obj.id = 0xf00d; } else { obj.depth = 1; obj.move = 1; obj.ratio = frame; } swf_SetPlaceObject(t,&obj); t = swf_InsertTag(t, ST_SHOWFRAME); } else { t = swf_InsertTag(t, ST_DEFINEBITSJPEG2); swf_SetU16(t, global.next_id); // id swf_SetJPEGBits(t,sname,quality); t = swf_InsertTag(t, ST_DEFINESHAPE); swf_ShapeNew(&s); swf_GetMatrix(NULL, &m); if (global.fit_to_movie) { m.sx = 0x10000 * movie_width / width; m.sy = 0x10000 * movie_height / height; width = movie_width / 20; height = movie_height / 20; } else { m.sx = 20 * 0x10000; m.sy = 20 * 0x10000; } m.tx = 0; m.ty = 0; fs = swf_ShapeAddBitmapFillStyle(s, &m, global.next_id, 1); global.next_id++; swf_SetU16(t, global.next_id); // id r.xmin = 0; r.ymin = 0; r.xmax = r.xmin + width * 20; r.ymax = r.ymin + height * 20; swf_SetRect(t, &r); swf_SetShapeHeader(t, s); swf_ShapeSetAll(t, s, r.xmin, r.ymin, 0, fs, 0); swf_ShapeSetLine(t, s, r.xmax - r.xmin, 0); swf_ShapeSetLine(t, s, 0, r.ymax - r.ymin); swf_ShapeSetLine(t, s, -r.xmax + r.xmin, 0); swf_ShapeSetLine(t, s, 0, -r.ymax + r.ymin); swf_ShapeSetEnd(t); if(frame) { t = swf_InsertTag(t, ST_REMOVEOBJECT2); swf_SetU16(t, 1); // depth } t = swf_InsertTag(t, ST_PLACEOBJECT2); swf_GetMatrix(NULL, &m); m.sx = (int)(0x10000 * global.scale); m.sy = (int)(0x10000 * global.scale); if(custom_move) { m.tx = move_x*20; m.ty = move_y*20; } else { m.tx = (movie_width - (width * global.scale * 20)) / 2; m.ty = (movie_height - (height * global.scale * 20)) / 2; } swf_ObjectPlace(t, global.next_id, 1, &m, NULL, NULL); global.next_id++; t = swf_InsertTag(t, ST_SHOWFRAME); } frame++; return t; } int CheckInputFile(image_t* i, char *fname, char **realname) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; FILE *f; char *s = malloc(strlen(fname) + 5); int width, height; if (!s) exit(2); (*realname) = s; strcpy(s, fname); // Check whether file exists (with typical extensions) if ((f = fopen(s, "rb")) == NULL) { sprintf(s, "%s.jpg", fname); if ((f = fopen(s, "rb")) == NULL) { sprintf(s, "%s.jpeg", fname); if ((f = fopen(s, "rb")) == NULL) { sprintf(s, "%s.JPG", fname); if ((f = fopen(s, "rb")) == NULL) { sprintf(s, "%s.JPEG", fname); if ((f = fopen(s, "rb")) == NULL) return -1; } } } } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, f); jpeg_read_header(&cinfo, TRUE); width = cinfo.image_width; height = cinfo.image_height; i->width = width; i->height = height; // Get image dimensions if (global.max_image_width < width) global.max_image_width = width; if (global.max_image_height < height) global.max_image_height = height; jpeg_destroy_decompress(&cinfo); fclose(f); return 0; } int args_callback_option(char *arg, char *val) { int res = 0; if (arg[1]) res = -1; else switch (arg[0]) { case 'q': if (val) global.quality = atoi(val); if ((global.quality < 1) ||(global.quality > 100)) { if (VERBOSE(1)) fprintf(stderr, "Error: You must specify a valid quality between 1 and 100.\n"); exit(1); } res = 1; break; case 'r': if (val) global.framerate = atof(val); if ((global.framerate < 1.0/256) || (global.framerate >= 256.0)) { if (VERBOSE(1)) fprintf(stderr, "Error: You must specify a valid framerate between 1 and 10000.\n"); exit(1); } res = 1; break; case 'o': if (val) global.outfile = val; res = 1; break; case 'v': global.verbose++; res = 0; break; /* case 'q': global.verbose--; if(global.verbose<0) global.verbose = 0; res = 0; break;*/ case 'X': if (val) global.force_width = atoi(val); res = 1; break; case 'z': global.version = 6; return 0; case 'Y': if (val) global.force_height = atoi(val); res = 1; break; case 'V': printf("jpeg2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); case 'e': if (val) global.asset_name = val; res = 1; break; case 'T': global.version = atoi(val); res = 1; break; case 'f': global.fit_to_movie = 1; res = 0; break; case 'c': { char*s = strdup(val); char*x1 = strtok(s, ":"); char*y1 = strtok(0, ":"); char*x2 = strtok(0, ":"); char*y2 = strtok(0, ":"); if(!(x1 && y1 && x2 && y2)) { fprintf(stderr, "-m option requires four arguments, :::\n"); exit(1); } custom_clip = 1; clip_x1 = atoi(x1); clip_y1 = atoi(y1); clip_x2 = atoi(x2); clip_y2 = atoi(y2); free(s); res = 1; break; } case 'M': { global.mx = 1; res = 1; break; } case 'm': { char*s = strdup(val); char*c = strchr(s, ':'); if(!c) { fprintf(stderr, "-m option requires two arguments, :\n"); exit(1); } *c = 0; custom_move = 1; move_x = atoi(val); move_y = atoi(c+1); free(s); res = 1; break; } case 's': { global.scale = atof(val)/100; res = 1; break; } default: res = -1; break; } if (res < 0) { if (VERBOSE(1)) fprintf(stderr, "Unknown option: -%s\n", arg); exit(1); return 0; } return res; } static struct options_t options[] = { {"o", "output"}, {"q", "quality"}, {"r", "rate"}, {"z", "zlib"}, {"M", "mx"}, {"x", "xoffset"}, {"y", "yoffset"}, {"X", "width"}, {"Y", "height"}, {"T", "flashversion"}, {"v", "verbose"}, {"V", "version"}, {"f", "fit-to-movie"}, {"e", "export"}, {0,0} }; int args_callback_longoption(char *name, char *val) { return args_long2shortoption(options, name, val); } int args_callback_command(char *arg, char *next) // actually used as filename { char *s; image_t* i = &image[global.nfiles]; if (CheckInputFile(i, arg, &s) < 0) { if (VERBOSE(1)) fprintf(stderr, "Unable to open input file: %s\n", arg); free(s); } else { i->filename = s; i->quality = global.quality; global.nfiles++; if (global.nfiles >= MAX_INPUT_FILES) { if (VERBOSE(1)) fprintf(stderr, "Error: Too many input files.\n"); exit(1); } } return 0; } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [-options [value]] imagefiles[.jpg]|[.jpeg] [...]\n", name); printf("\n"); printf("-o , --output Explicitly specify output file. (otherwise, output.swf will be used)\n"); printf("-q , --quality Set compression quality (1-100, 1=worst, 100=best)\n"); printf("-r , --rate Set movie framerate (frames per second)\n"); printf("-z , --zlib Enable Flash 6 (MX) Zlib Compression\n"); printf("-M , --mx Use Flash MX H.263 compression (use for correlated images)\n"); printf("-x , --xoffset horizontally offset images by \n"); printf("-y , --yoffset vertically offset images by \n"); printf("-X , --width Force movie width to (default: autodetect)\n"); printf("-Y , --height Force movie height to (default: autodetect)\n"); printf("-T , --flashversion Set flash file version to \n"); printf("-v , --verbose Set verbose level to (0=quiet, 1=default, 2=debug)\n"); printf("-V , --version Print version information and exit\n"); printf("-f , --fit-to-movie Fit images to movie size\n"); printf("-e , --export Make importable as asset with \n"); printf("\n"); } int main(int argc, char **argv) { SWF swf; TAG *t; memset(&global, 0x00, sizeof(global)); global.quality = 60; global.framerate = 1.0; global.verbose = 1; global.version = 4; global.asset_name = NULL; global.next_id = 1; global.fit_to_movie = 0; global.scale = 1.0; processargs(argc, argv); if (VERBOSE(2)) fprintf(stderr, "Processing %i file(s)...\n", global.nfiles); t = MovieStart(&swf, global.framerate, global.force_width ? global.force_width : (int)(global.max_image_width*global.scale), global.force_height ? global.force_height : (int)(global.max_image_height*global.scale)); { int i; for (i = 0; i < global.nfiles; i++) { if (VERBOSE(3)) fprintf(stderr, "[%03i] %s (%i%%)\n", i, image[i].filename, image[i].quality); t = MovieAddFrame(&swf, t, image[i].filename, image[i].quality, image[i].width, image[i].height); free(image[i].filename); } } MovieFinish(&swf, t, global.outfile); return 0; } swftools_0.9.2+git20130725.orig/src/swfc-feedback.h0000644000175000017500000000211712216332640020750 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #ifndef __FEEDBACK_H #define __FEEDBACK_H char* filename; int line; int column; void (*cleanUp)(); void syntaxerror(char*format, ...); void warning(char*format, ...); #endif swftools_0.9.2+git20130725.orig/src/swfc-feedback.c0000644000175000017500000000311212216332640020737 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #include #include #include #include "swfc-feedback.h" void syntaxerror(char*format, ...) { char buf[1024]; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); fprintf(stderr, "\"%s\", line %d column %d: error- %s\n", filename, line, column, buf); if (cleanUp) cleanUp(); exit(1); } void warning(char*format, ...) { char buf[1024]; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); fprintf(stderr, "\"%s\", line %d column %d: warning- %s\n", filename, line, column, buf); } swftools_0.9.2+git20130725.orig/src/gif2swf.10000644000175000017500000000272012216332640017544 0ustar gawaingawain.TH gif2swf "1" "April 2012" "gif2swf" "swftools" .SH NAME gif2swf \- Takes a number of gif files and converts them to a swf movie, one picture per frame. .SH Synopsis .B gif2swf [\-X width] [\-Y height] [\-o file.swf] [\-r rate] file1.gif [file2.gif ...] .SH DESCRIPTION This tools converts gif image files into an SWF animation. It takes any number of input pictures, and converts them to SWF one\-by\-one, where every converted picture is a seperate frame in the target SWF. .SH OPTIONS .TP \fB\-r\fR, \fB\-\-rate\fR \fIframerate\fR Set movie framerate (frames per second) .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Explicitly specify output file. (Otherwise, output will go to stdout / output.swf) .TP \fB\-z\fR, \fB\-\-zlib\fR \fIzlib\fR Use Flash MX (SWF 6) Zlib encoding for the output. The resulting SWF will be smaller, but not playable in Flash Plugins of Version 5 and below. .TP \fB\-l\fR, \fB\-\-loop\fR \fIloop count\fR Set loop count. (default: 0 [=infinite loop]) .TP \fB\-X\fR, \fB\-\-pixel\fR \fIwidth\fR Force movie width to \fIwidth\fR (default: autodetect) .TP \fB\-Y\fR, \fB\-\-pixel\fR \fIheight\fR Force movie height to \fIheight\fR (default: autodetect) .TP \fB\-v\fR, \fB\-\-verbose\fR \fIlevel\fR Set verbose level (0=quiet, 1=default, 2=debug) .TP \fB\-C\fR, \fB\-\-cgi\fR For use as CGI- prepend http header, write to stdout .TP \fB\-V\fR, \fB\-\-version\fR Print version information and exit swftools_0.9.2+git20130725.orig/src/pdf2swf.10000644000175000017500000000552312216332640017554 0ustar gawaingawain.TH pdf2swf "1" "June 2008" "pdf2swf" "swftools" .SH NAME pdf2swf - Converts Acrobat PDF files into Flash SWF Animation files. .SH Synopsis .B pdf2swf [-options] file.pdf -o file.swf .SH DESCRIPTION Converts a PDF file to a SWF file. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-o\fR, \fB\-\-output\fR file.swf will go into a seperate file. .TP \fB\-p\fR, \fB\-\-pages\fR range 3-5,10-12 .TP \fB\-P\fR, \fB\-\-password\fR password Use password for deciphering the pdf. .TP \fB\-v\fR, \fB\-\-verbose\fR Be verbose. Use more than one -v for greater effect. .TP \fB\-z\fR, \fB\-\-zlib\fR The resulting SWF will not be playable in browsers with Flash Plugins 5 and below! .TP \fB\-i\fR, \fB\-\-ignore\fR SWF files a little bit smaller, but it may also cause the images in the pdf to look funny. .TP \fB\-j\fR, \fB\-\-jpegquality\fR quality Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85) .TP \fB\-s\fR, \fB\-\-set\fR param=value Set a SWF encoder specific parameter. See pdf2swf -s help for more information. .TP \fB\-w\fR, \fB\-\-samewindow\fR When clicked on, the page they point to will be opened in the window the SWF is displayed. .TP \fB\-t\fR, \fB\-\-stop\fR The resulting SWF file will not turn pages automatically. .TP \fB\-T\fR, \fB\-\-flashversion\fR num Set Flash Version in the SWF header to num. .TP \fB\-F\fR, \fB\-\-fontdir\fR directory Add directory to the font search path. .TP \fB\-b\fR, \fB\-\-defaultviewer\fR Therefore the swf file will be "browseable", i.e. display some buttons for turning pages. The viewer swf to be used is determined by a symlink named "default_viewer.swf" in the swftools data directory. .TP \fB\-l\fR, \fB\-\-defaultloader\fR The loader swf to be used is determined by a symlink named "default_loader.swf" in the swftools data directory. .TP \fB\-B\fR, \fB\-\-viewer\fR filename See http://www.quiss.org/swftools/pdf2swf_usage.html for information on how to create your own viewers. .TP \fB\-L\fR, \fB\-\-preloader\fR filename filename is an arbitrary swf animation. .TP \fB\-q\fR, \fB\-\-quiet\fR Suppress normal messages. Use -qq to suppress warnings, also. .TP \fB\-S\fR, \fB\-\-shapes\fR Don't use SWF Fonts, but store everything as shape. .TP \fB\-f\fR, \fB\-\-fonts\fR Store full fonts in SWF. (Don't reduce to used characters). .TP \fB\-G\fR, \fB\-\-flatten\fR This usually makes the file faster to render and also usually smaller, but will increase conversion time. .TP \fB\-I\fR, \fB\-\-info\fR Don't do actual conversion, just display a list of all pages in the PDF. .TP \fB\-Q\fR, \fB\-\-maxtime\fR n Abort conversion after n seconds. Only available on Unix. swftools_0.9.2+git20130725.orig/src/as3compile.10000644000175000017500000000453712216332640020244 0ustar gawaingawain.TH as3compile "1" "April 2012" "as3compile" "swftools" .SH NAME as3compile \- Compile .as ActionScript 3.0 files to swf. .SH Synopsis .B as3compile file.as [\-o file.swf] .SH DESCRIPTION Compiles a file written in ActionScript 3.0 to a SWF file. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-v\fR, \fB\-\-verbose\fR Increase verbosity .TP \fB\-q\fR, \fB\-\-quiet\fR Decrease verbosity .TP \fB\-C\fR, \fB\-\-cgi\fR Output to stdout (for use in CGI environments) .TP \fB\-R\fR, \fB\-\-resolve\fR This flag will cause the compiler to try filenames like "FooBar.as" for classes named "FooBar". .TP \fB\-D\fR, \fB\-\-define\fR \fInamespace::variable\fR Set a compile time variable (for doing conditional compilation) .TP \fB\-X\fR, \fB\-\-width\fR Set target SWF width .TP \fB\-Y\fR, \fB\-\-height\fR Set target SWF width .TP \fB\-r\fR, \fB\-\-rate\fR Set target SWF framerate .TP \fB\-M\fR, \fB\-\-mainclass\fR Set the name of the main class (extending flash.display.MovieClip) .TP \fB\-l\fR, \fB\-\-library\fR \fIfile\fR Include library file \fIfile\fR. can be an .abc or .swf file. .TP \fB\-I\fR, \fB\-\-include\fR \fIdir\fR Add additional include dir \fIdir\fR. .TP \fB\-N\fR, \fB\-\-local-with-network\fR Make output file "local with networking" .TP \fB\-L\fR, \fB\-\-local-with-filesystem\fR Make output file "local with filesystem" .TP \fB\-T\fR, \fB\-\-flashversion\fR \fInum\fR \fInum\fR must be >= 9. .TP \fB\-o\fR, \fB\-\-output\fR \fIfilename\fR Set output file to \fIfilename\fR. .SH EXAMPLE The following is a basic as3 file that can be compiled e.g. with \fBas3compile \-X 400 \-Y 400 smiley.as\fR // smiley.as package { import flash.display.MovieClip public class Main extends MovieClip { function Main() { this.graphics.beginFill(0xcccc00) this.graphics.drawCircle(200,200,200) this.graphics.endFill() this.graphics.beginFill(0x000000) this.graphics.drawCircle(140,150,50) this.graphics.drawCircle(260,150,50) this.graphics.drawRoundRect(140,270,120,10,20); this.graphics.endFill() } } } .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/swfc-history.c0000644000175000017500000011472512216332640020731 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #include #include #include "swfc-history.h" enum { T_BEFORE, T_AFTER, T_SYMMETRIC }; state_t* state_new(U16 frame, int function, float value, interpolation_t* inter) { state_t* newState = (state_t*)malloc(sizeof(state_t)); state_init(newState); newState->frame = frame; newState->function = function; newState->value = value; newState->interpolation = inter; return newState; } void state_free(state_t* state) { if (state->next) state_free(state->next); free(state); } void state_init(state_t* state) { memset(state, 0, sizeof(state_t)); } state_t* state_at(state_t* state, U16 frame) { while (state->next && state->next->frame < frame) state = state->next; return state; } void state_append(state_t* state, state_t* newState) { state_t* previous = 0; state_t* start = state; float p0, p1, m0, m1; int previous_frames = 0, state_frames, new_frames; while (state->next) { if (previous) previous_frames = state->frame - previous->frame; previous = state; state = state->next; } state->next = newState; new_frames = newState->frame - state->frame; if (state->function == CF_SCHANGE) { state_frames = state->frame - previous->frame; p0 = previous->value; p1 = state->value; if (previous->function == CF_SCHANGE) m0 = (3 * previous->spline.a + 2 * previous->spline.b + previous->spline.c) * state_frames / previous_frames ; else if (previous->function == CF_CHANGE || previous->function == CF_SWEEP) m0 = state_tangent(start, previous->frame, T_BEFORE) * state_frames; else m0 = (state->value - previous->value); if (newState->function == CF_SCHANGE) m1 = /*0.5 * */(newState->value - previous->value) * state_frames / (new_frames + state_frames); else if (newState->function == CF_CHANGE || newState->function == CF_SWEEP) m1 = state_tangent(previous, state->frame, T_AFTER) * state_frames; else m1 = (newState->value - state->value); state->spline.a = 2 * p0 + m0 - 2 * p1 + m1; state->spline.b = -3 * p0 - 2 * m0 + 3 * p1 - m1; state->spline.c = m0; state->spline.d = p0; // printf("p0: %f, p1: %f, m0: %f, m1: %f.\n", p0, p1, m0, m1); // printf("a: %f, b: %f, c: %f, d: %f.\n", state->spline.a, state->spline.b, state->spline.c, state->spline.d); } if (newState->function == CF_SCHANGE) { p0 = state->value; p1 = newState->value; if (state->function == CF_SCHANGE) m0 = m1; else if (state->function == CF_CHANGE || state->function == CF_SWEEP) m0 = state_tangent(start, state->frame, T_BEFORE) * new_frames; else m0 = (newState->value - state->value); m1 = (newState->value - state->value); newState->spline.a = 2 * p0 + m0 - 2 * p1 + m1; newState->spline.b = -3 * p0 - 2 * m0 + 3 * p1 - m1; newState->spline.c = m0; newState->spline.d = p0; // printf("p0: %f, p1: %f, m0: %f, m1: %f.\n", p0, p1, m0, m1); // printf("a: %f, b: %f, c: %f, d: %f.\n", newState->spline.a, newState->spline.b, newState->spline.c, newState->spline.d); } } void state_insert(state_t* state, state_t* newState) { while (state->next && state->next->frame < newState->frame) state = state->next; newState->next = state->next; state->next = newState; // if this is going to be used to insert CF_SCHANGE states it will have to be extended // as in state_append above. I know this is not necessary right now, so I'll be lazy. } float calculateSpline(state_t* modification, float fraction) { spline_t s = modification->spline; return (((s.a * fraction) + s.b) * fraction + s.c) * fraction + s.d; } float interpolateScalar(float p1, float p2, float fraction, interpolation_t* inter) { if (!inter) return linear(fraction, p1, p2 - p1); switch (inter->function) { case IF_LINEAR: return linear(fraction, p1, p2 - p1); case IF_QUAD_IN: return quadIn(fraction, p1, p2 - p1, inter->slope); case IF_QUAD_OUT: return quadOut(fraction, p1, p2 - p1, inter->slope); case IF_QUAD_IN_OUT: return quadInOut(fraction, p1, p2 - p1, inter->slope); case IF_CUBIC_IN: return cubicIn(fraction, p1, p2 - p1, inter->slope); case IF_CUBIC_OUT: return cubicOut(fraction, p1, p2 - p1, inter->slope); case IF_CUBIC_IN_OUT: return cubicInOut(fraction, p1, p2 - p1, inter->slope); case IF_QUART_IN: return quartIn(fraction, p1, p2 - p1, inter->slope); case IF_QUART_OUT: return quartOut(fraction, p1, p2 - p1, inter->slope); case IF_QUART_IN_OUT: return quartInOut(fraction, p1, p2 - p1, inter->slope); case IF_QUINT_IN: return quintIn(fraction, p1, p2 - p1, inter->slope); case IF_QUINT_OUT: return quintOut(fraction, p1, p2 - p1, inter->slope); case IF_QUINT_IN_OUT: return quintInOut(fraction, p1, p2 - p1, inter->slope); case IF_CIRCLE_IN: return circleIn(fraction, p1, p2 - p1, inter->slope); case IF_CIRCLE_OUT: return circleOut(fraction, p1, p2 - p1, inter->slope); case IF_CIRCLE_IN_OUT: return circleInOut(fraction, p1, p2 - p1, inter->slope); case IF_EXPONENTIAL_IN: return exponentialIn(fraction, p1, p2 - p1); case IF_EXPONENTIAL_OUT: return exponentialOut(fraction, p1, p2 - p1); case IF_EXPONENTIAL_IN_OUT: return exponentialInOut(fraction, p1, p2 - p1); case IF_SINE_IN: return sineIn(fraction, p1, p2 - p1); case IF_SINE_OUT: return sineOut(fraction, p1, p2 - p1); case IF_SINE_IN_OUT: return sineInOut(fraction, p1, p2 - p1); case IF_ELASTIC_IN: return elasticIn(fraction, p1, p2 - p1, inter->amplitude, inter->bounces, inter->damping); case IF_ELASTIC_OUT: return elasticOut(fraction, p1, p2 - p1, inter->amplitude, inter->bounces, inter->damping); case IF_ELASTIC_IN_OUT: return elasticInOut(fraction, p1, p2 - p1, inter->amplitude, inter->bounces, inter->damping); case IF_BACK_IN: return backIn(fraction, p1, p2 - p1, inter->speed); case IF_BACK_OUT: return backOut(fraction, p1, p2 - p1, inter->speed); case IF_BACK_IN_OUT: return backInOut(fraction, p1, p2 - p1, inter->speed); case IF_BOUNCE_IN: return bounceIn(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); case IF_BOUNCE_OUT: return bounceOut(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); case IF_BOUNCE_IN_OUT: return bounceInOut(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); case IF_FAST_BOUNCE_IN: return fastBounceIn(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); case IF_FAST_BOUNCE_OUT: return fastBounceOut(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); case IF_FAST_BOUNCE_IN_OUT: return fastBounceInOut(fraction, p1, p2 - p1, inter->bounces, inter->growth, inter->damping); default: return linear(fraction, p1, p2 - p1); } } float calculateSweep(state_t* modification, float fraction) { arc_t* a = &(modification->arc); float angle = a->angle + fraction * a->delta_angle; if (a->X) return a->cX + a->r * cos(angle); else return a->cY + a->r * sin(angle); } int state_differs(state_t* modification, U16 frame) { state_t* previous = modification; while (modification && modification->frame < frame) { previous = modification; modification = modification->next; } if (!modification) return 0; if (modification->frame == frame) return 1; return (modification->function != CF_JUMP); } float state_tangent(state_t* modification, U16 frame, int tangent) { float deltaFrame = 0.1; switch (tangent) { case T_BEFORE: return (state_value(modification, frame) - state_value(modification, frame - deltaFrame)) / deltaFrame; case T_AFTER: return (state_value(modification, frame + deltaFrame) - state_value(modification, frame)) / deltaFrame; default: return (state_value(modification, frame + deltaFrame) - state_value(modification, frame - deltaFrame)) / (2 * deltaFrame); } } float state_value(state_t* modification, float frame) { state_t* previous = modification; while (modification && modification->frame < frame) { previous = modification; modification = modification->next; } if (!modification) return previous->value; if (modification->frame == frame) { do { previous = modification; modification = modification->next; } while (modification && modification->frame == frame); return previous->value; } switch (modification->function) { case CF_PUT: return modification->value; case CF_CHANGE: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); return interpolateScalar(previous->value, modification->value, fraction, modification->interpolation); } case CF_SCHANGE: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); fraction = interpolateScalar(0, 1, fraction, modification->interpolation); return calculateSpline(modification, fraction); } case CF_SWEEP: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); fraction = interpolateScalar(0, 1, fraction, modification->interpolation); return calculateSweep(modification, fraction); } case CF_JUMP: return previous->value; default: return 0; } } filterState_t* filterState_new(U16 frame, int function, FILTERLIST* value, interpolation_t* inter) { filterState_t* newChange = (filterState_t*)malloc(sizeof(filterState_t)); filterState_init(newChange); newChange->frame = frame; newChange->function = function; newChange->value = value; newChange->interpolation = inter; return newChange; } void filterState_free(filterState_t *change) { if (change->next) filterState_free(change->next); free(change->value); free(change); } void filterState_init(filterState_t* change) { memset(change, 0, sizeof(filterState_t)); } void filterState_append(filterState_t* first, filterState_t* newChange) { while (first->next) first = first->next; if (!first->value || !newChange->value) first->next = newChange; else { int i, mergedCount = 0; int common = first->value->num < newChange->value->num ? first->value->num : newChange->value->num; for (i = 0; i < common; i++) { mergedCount++; if (newChange->value->filter[i]->type != first->value->filter[i]->type) mergedCount++; } mergedCount = mergedCount + first->value->num - common + newChange->value->num - common; if (mergedCount > 8) { char* list1; char* list2; char* newList; list1 = (char*)malloc(1); *list1 = '\0'; for (i = 0; i < first->value->num; i++) { char*filter = filtername[first->value->filter[i]->type]; newList = (char*)malloc(strlen(list1) + strlen(filter) + 2); strcpy(newList, list1); strcat(newList, "+"); strcat(newList, filtername[first->value->filter[i]->type]); free(list1); list1 = newList; } list2 = (char*)malloc(1); *list2 = '\0'; for (i = 0; i < newChange->value->num; i++) { char*filter = filtername[newChange->value->filter[i]->type]; newList = (char*)malloc(strlen(list2) + strlen(filter) + 2); strcpy(newList, list2); strcat(newList, "+"); strcat(newList, filter); free(list2); list2 = newList; } syntaxerror("filterlists %s and %s cannot be interpolated.", list1, list2); } first->next = newChange; } } RGBA interpolateColor(RGBA c1, RGBA c2, float ratio, interpolation_t* inter) { RGBA c; c.r = interpolateScalar(c1.r, c2.r, ratio, inter); c.g = interpolateScalar(c1.g, c2.g, ratio, inter); c.b = interpolateScalar(c1.b, c2.b, ratio, inter); c.a = interpolateScalar(c1.a, c2.a, ratio, inter); return c; } GRADIENT* interpolateNodes(GRADIENT* g1, GRADIENT* g2, float fraction, interpolation_t* inter) { if (g1->num != g2->num) syntaxerror("Internal error: gradients are not equal in size"); int i; GRADIENT* g = (GRADIENT*) malloc(sizeof(GRADIENT)); g->ratios = rfx_calloc(16*sizeof(U8)); g->rgba = rfx_calloc(16*sizeof(RGBA)); g->num = g1->num; for (i = 0; i < g->num; i++) { g->ratios[i] = interpolateScalar(g1->ratios[i], g2->ratios[i], fraction, inter); g->rgba[i] = interpolateColor(g1->rgba[i], g2->rgba[i], fraction, inter); } return g; } void copyGradient(GRADIENT* dest, GRADIENT* source) { dest->num = source->num; memcpy(dest->ratios, source->ratios, source->num * sizeof(U8)); memcpy(dest->rgba, source->rgba, source->num * sizeof(RGBA)); } void insertNode(GRADIENT* g, int pos) { memmove(&g->ratios[pos + 1], &g->ratios[pos], (g->num - pos) * sizeof(U8)); memmove(&g->rgba[pos + 1], &g->rgba[pos], (g->num - pos) * sizeof(RGBA)); if (pos == 0) { g->ratios[0] = g->ratios[1] / 2; g->rgba[0] = g->rgba[1]; } else if (pos == g->num) { g->ratios[pos] = (255 + g->ratios[g->num - 1]) / 2; g->rgba[pos] = g->rgba[pos - 1]; } else { g->ratios[pos] = (g->ratios[pos - 1] + g->ratios[pos + 1]) / 2; g->rgba[pos] = interpolateColor(g->rgba[pos - 1], g->rgba[pos + 1], 0.5, 0); } g->num++; } void insertOptimalNode(GRADIENT* g) { int i, next_gap; int pos = 0; int gap = g->ratios[0]; for (i = 0; i < g->num - 1; i++) { next_gap = g->ratios[i + 1] - g->ratios[i]; if (next_gap > gap) { gap = next_gap; pos = i + 1; } } next_gap = 255 - g->ratios[g->num -1]; if (next_gap > gap) pos = g->num; insertNode(g, pos); } void growGradient(GRADIENT* start, int size) { while (start->num < size) insertOptimalNode(start); } GRADIENT* interpolateGradient(GRADIENT* g1, GRADIENT* g2, float fraction, interpolation_t* inter) { int i; GRADIENT g; g.ratios = rfx_calloc(16*sizeof(U8)); g.rgba = rfx_calloc(16*sizeof(RGBA)); if (g1->num > g2->num) { copyGradient(&g, g2); growGradient(&g, g1->num); GRADIENT* result = interpolateNodes(g1, &g, fraction, inter); rfx_free(g.rgba); rfx_free(g.ratios); return result; } else if (g1->num < g2->num) { copyGradient(&g, g1); growGradient(&g, g2->num); GRADIENT* result = interpolateNodes(&g, g2, fraction, inter); rfx_free(g.rgba); rfx_free(g.ratios); return result; } else return interpolateNodes(g1, g2, fraction, inter); } FILTER* copyFilter(FILTER* original) { if (!original) return original; FILTER* copy = swf_NewFilter(original->type); switch (original->type) { case FILTERTYPE_BLUR: memcpy(copy, original, sizeof(FILTER_BLUR)); break; case FILTERTYPE_GRADIENTGLOW: { memcpy(copy, original, sizeof(FILTER_GRADIENTGLOW)); FILTER_GRADIENTGLOW* ggcopy = (FILTER_GRADIENTGLOW*)copy; ggcopy->gradient = (GRADIENT*)malloc(sizeof(GRADIENT)); ggcopy->gradient->ratios = (U8*)malloc(16 * sizeof(U8)); ggcopy->gradient->rgba = (RGBA*)malloc(16 * sizeof(RGBA)); copyGradient(ggcopy->gradient, ((FILTER_GRADIENTGLOW*)original)->gradient); } break; case FILTERTYPE_DROPSHADOW: memcpy(copy, original, sizeof(FILTER_DROPSHADOW)); break; case FILTERTYPE_BEVEL: memcpy(copy, original, sizeof(FILTER_BEVEL)); break; default: syntaxerror("Internal error: unsupported filterype, cannot copy"); } return copy; } FILTER* interpolateBlur(FILTER* filter1, FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_BLUR*f1 = (FILTER_BLUR*)filter1; FILTER_BLUR*f2 = (FILTER_BLUR*)filter2; if (!f1) f1 = noBlur; if (!f2) f2 = noBlur; if(f1->blurx == f2->blurx && f1->blury == f2->blury) return copyFilter(filter1); FILTER_BLUR*f = (FILTER_BLUR*)swf_NewFilter(FILTERTYPE_BLUR); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); return (FILTER*)f; } void matchDropshadowFlags(FILTER_DROPSHADOW* unset, FILTER_DROPSHADOW* target) { unset->innershadow = target->innershadow; unset->knockout = target->knockout; unset->composite = target->composite; } FILTER* interpolateDropshadow(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_DROPSHADOW*f1 = (FILTER_DROPSHADOW*)filter1; FILTER_DROPSHADOW*f2 = (FILTER_DROPSHADOW*)filter2; if (!f1) f1 = noDropshadow; if (!f2) f2 = noDropshadow; if(!memcmp(&f1->color,&f2->color,sizeof(RGBA)) && f1->strength == f2->strength && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->distance == f2->distance) return copyFilter(filter1); FILTER_DROPSHADOW*f = (FILTER_DROPSHADOW*)swf_NewFilter(FILTERTYPE_DROPSHADOW); memcpy(f, f1, sizeof(FILTER_DROPSHADOW)); f->color = interpolateColor(f1->color, f2->color, ratio, inter); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); if (f1 == noDropshadow) { if (f2 != noDropshadow) matchDropshadowFlags(f, f2); } else if (f2 == noDropshadow) matchDropshadowFlags(f, f1); else if (ratio > 0.5) matchDropshadowFlags(f, f2); else matchDropshadowFlags(f, f1); return (FILTER*)f; } void matchBevelFlags(FILTER_BEVEL* unset, FILTER_BEVEL* target) { unset->innershadow = target->innershadow; unset->knockout = target->knockout; unset->composite = target->composite; unset->ontop = target->ontop; } FILTER* interpolateBevel(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_BEVEL*f1 = (FILTER_BEVEL*)filter1; FILTER_BEVEL*f2 = (FILTER_BEVEL*)filter2; if (!f1) f1 = noBevel; if (!f2) f2 = noBevel; if(!memcmp(&f1->shadow,&f2->shadow,sizeof(RGBA)) && !memcmp(&f1->highlight,&f2->highlight,sizeof(RGBA)) && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->strength == f2->strength && f1->distance == f2->distance) return copyFilter(filter1); FILTER_BEVEL*f = (FILTER_BEVEL*)swf_NewFilter(FILTERTYPE_BEVEL); memcpy(f, f1, sizeof(FILTER_BEVEL)); f->shadow = interpolateColor(f1->shadow, f2->shadow, ratio, inter); f->highlight = interpolateColor(f1->highlight, f2->highlight, ratio, inter); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); if (f1 == noBevel) { if (f2 != noBevel) matchBevelFlags(f, f2); } else if (f2 == noBevel) matchBevelFlags(f, f1); else if (ratio > 0.5) matchBevelFlags(f, f2); else matchBevelFlags(f, f1); return (FILTER*)f; } void matchGradientGlowFlags(FILTER_GRADIENTGLOW* unset, FILTER_GRADIENTGLOW* target) { unset->innershadow = target->innershadow; unset->knockout = target->knockout; unset->composite = target->composite; unset->ontop = target->ontop; } FILTER* interpolateGradientGlow(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { FILTER_GRADIENTGLOW*f1 = (FILTER_GRADIENTGLOW*)filter1; FILTER_GRADIENTGLOW*f2 = (FILTER_GRADIENTGLOW*)filter2; if (!f1) f1 = noGradientGlow; if (!f2) f2 = noGradientGlow; if(f1->gradient->num == f2->gradient->num && !memcmp(&f1->gradient->ratios,&f2->gradient->ratios,f1->gradient->num * sizeof(U8)) && !memcmp(&f1->gradient->rgba,&f2->gradient->rgba,f1->gradient->num * sizeof(RGBA)) && f1->blurx == f2->blurx && f1->blury == f2->blury && f1->angle == f2->angle && f1->strength == f2->strength && f1->distance == f2->distance) return copyFilter(filter1); FILTER_GRADIENTGLOW*f = (FILTER_GRADIENTGLOW*)swf_NewFilter(FILTERTYPE_GRADIENTGLOW); memcpy(f, f1, sizeof(FILTER_GRADIENTGLOW)); f->blurx= interpolateScalar(f1->blurx, (f2->blurx), ratio, inter); f->blury= interpolateScalar(f1->blury, (f2->blury), ratio, inter); f->passes= interpolateScalar(f1->passes, (f2->passes), ratio, inter); f->angle= interpolateScalar(f1->angle, (f2->angle), ratio, inter); f->distance= interpolateScalar(f1->distance, (f2->distance), ratio, inter); f->strength= interpolateScalar(f1->strength, (f2->strength), ratio, inter); f->gradient= interpolateGradient(f1->gradient, f2->gradient, ratio, inter); if (f1 == noGradientGlow) { if (f2 != noGradientGlow) matchGradientGlowFlags(f, f2); } else if (f2 == noGradientGlow) matchGradientGlowFlags(f, f1); else if (ratio > 0.5) matchGradientGlowFlags(f, f2); else matchGradientGlowFlags(f, f1); return (FILTER*)f; } FILTER* interpolateFilter(FILTER* filter1,FILTER* filter2, float ratio, interpolation_t* inter) { if(!filter1 && !filter2) return 0; int filter_type; if (!filter1) filter_type = filter2->type; else if (!filter2) filter_type = filter1->type; else if(filter2->type != filter1->type) syntaxerror("can't interpolate between %s and %s filters yet", filtername[filter1->type], filtername[filter2->type]); else filter_type = filter1->type; switch (filter_type) { case FILTERTYPE_BLUR: return interpolateBlur(filter1, filter2, ratio, inter); case FILTERTYPE_BEVEL: return interpolateBevel(filter1, filter2, ratio, inter); case FILTERTYPE_DROPSHADOW: return interpolateDropshadow(filter1, filter2, ratio, inter); case FILTERTYPE_GRADIENTGLOW: return interpolateGradientGlow(filter1, filter2, ratio, inter); default: syntaxerror("Filtertype %s not supported yet.\n", filtername[filter1->type]); } return 0; } FILTERLIST* copyFilterList(FILTERLIST* original) { if (!original) return original; int i; FILTERLIST* copy = (FILTERLIST*)malloc(sizeof(FILTERLIST)); copy->num = original->num; for (i = 0; i < copy->num; i++) copy->filter[i] = copyFilter(original->filter[i]); return copy; } FILTER* noFilter(int type) { switch (type) { case FILTERTYPE_BLUR: return (FILTER*)noBlur; break; case FILTERTYPE_BEVEL: return (FILTER*)noBevel; break; case FILTERTYPE_DROPSHADOW: return (FILTER*)noDropshadow; break; case FILTERTYPE_GRADIENTGLOW: return (FILTER*)noGradientGlow; break; default: syntaxerror("Internal error: unsupported filtertype, cannot match filterlists"); } return 0; } FILTERLIST* interpolateFilterList(FILTERLIST* list1, FILTERLIST* list2, float ratio, interpolation_t* inter) { if (!list1 && !list2) return list1; FILTERLIST start, target, dummy; dummy.num = 0; if (!list1) list1 = &dummy; if (!list2) list2 = &dummy; int i, j = 0; int common = list1->num < list2->num ? list1->num : list2->num; for (i = 0; i < common; i++) { start.filter[j] = list1->filter[i]; if (list2->filter[i]->type == list1->filter[i]->type) { target.filter[j] = list2->filter[i]; j++; } else { target.filter[j] = noFilter(list1->filter[i]->type); j++; start.filter[j] = noFilter(list2->filter[i]->type); target.filter[j] = list2->filter[i]; j++; } } if (list1->num > common) for (i = common; i < list1->num; i++) { start.filter[j] = list1->filter[i]; target.filter[j] = noFilter(list1->filter[i]->type); j++; } if (list2->num > common) for (i = common; i < list2->num; i++) { start.filter[j] = noFilter(list2->filter[i]->type); target.filter[j] = list2->filter[i]; j++; } start.num = j; target.num = j; FILTERLIST* mixedList = (FILTERLIST*)malloc(sizeof(FILTERLIST)); mixedList->num = j; for (i = 0; i < j; i++) mixedList->filter[i] = interpolateFilter(start.filter[i], target.filter[i], ratio, inter); return mixedList; } int filterState_differs(filterState_t* modification, U16 frame) { filterState_t* previous = modification; while (modification && modification->frame < frame) { previous = modification; modification = modification->next; } if (!modification) return 0; if (modification->frame == frame) return 1; return (modification->function != CF_JUMP); } FILTERLIST* filterState_value(filterState_t* modification, U16 frame) { filterState_t* previous = modification; while (modification && modification->frame < frame) { previous = modification; modification = modification->next; } if (!modification) return copyFilterList(previous->value); if (modification->frame == frame) { do { previous = modification; modification = modification->next; } while (modification && modification->frame == frame); return copyFilterList(previous->value); } switch (modification->function) { case CF_PUT: return copyFilterList(modification->value); case CF_CHANGE: { float fraction = (frame - previous->frame) / (float)(modification->frame - previous->frame); return interpolateFilterList(previous->value, modification->value, fraction, modification->interpolation); } case CF_JUMP: return copyFilterList(previous->value); default: return 0; } } history_t* history_new() { history_t* newHistory = (history_t*)malloc(sizeof(history_t)); history_init(newHistory); return newHistory; } void history_free(history_t* past) { state_free(dict_lookup(past->states, "x")); state_free(dict_lookup(past->states, "y")); state_free(dict_lookup(past->states, "scalex")); state_free(dict_lookup(past->states, "scaley")); state_free(dict_lookup(past->states, "cxform.r0")); state_free(dict_lookup(past->states, "cxform.g0")); state_free(dict_lookup(past->states, "cxform.b0")); state_free(dict_lookup(past->states, "cxform.a0")); state_free(dict_lookup(past->states, "cxform.r1")); state_free(dict_lookup(past->states, "cxform.g1")); state_free(dict_lookup(past->states, "cxform.b1")); state_free(dict_lookup(past->states, "cxform.a1")); state_free(dict_lookup(past->states, "rotate")); state_free(dict_lookup(past->states, "shear")); state_free(dict_lookup(past->states, "pivot.x")); state_free(dict_lookup(past->states, "pivot.y")); state_free(dict_lookup(past->states, "pin.x")); state_free(dict_lookup(past->states, "pin.y")); state_free(dict_lookup(past->states, "blendmode")); state_free(dict_lookup(past->states, "flags")); filterState_free(dict_lookup(past->states, "filter")); dict_destroy(past->states); free(past); } void history_init(history_t* past) { past->states = (dict_t*)malloc(sizeof(dict_t)); dict_init(past->states, 16); } void history_begin(history_t* past, char* parameter, U16 frame, TAG* tag, float value) { state_t* first = state_new(frame, CF_PUT, value, 0); past->firstTag = tag; past->firstFrame = frame; dict_put2(past->states, parameter, first); } void history_beginFilter(history_t* past, U16 frame, TAG* tag, FILTERLIST* value) { filterState_t* first = filterState_new(frame, CF_PUT, value, 0); past->firstTag = tag; past->firstFrame = frame; dict_put2(past->states, "filter", first); } void history_remember(history_t* past, char* parameter, U16 frame, int function, float value, interpolation_t* inter) { past->lastFrame = frame; state_t* state = dict_lookup(past->states, parameter); if (state) //should always be true { state_t* next = state_new(frame, function, value, inter); state_append(state, next); } else syntaxerror("Internal error: changing parameter %s, which is unknown for the instance.", parameter); } static float getAngle(float dX, float dY) { float radius = sqrt(dX * dX + dY * dY); if (radius == 0) return 0.0; if (dX >= 0) if (dY > 0) return acos(dX / radius); else return 2 * M_PI - acos(dX / radius); else if (dY > 0) return M_PI - acos(-dX / radius); else return M_PI + acos(-dX / radius); } static float getDeltaAngle(float angle1, float angle2, int clockwise) { if (!clockwise) { if (angle1 > angle2) return angle2 - angle1; else return angle2 - angle1 - 2 * M_PI; } else { if (angle1 > angle2) return 2 * M_PI - angle1 + angle2; else return angle2 - angle1; } } void history_rememberSweep(history_t* past, U16 frame, float x, float y, float r, int clockwise, int short_arc, interpolation_t* inter) { float lastX, lastY, dX, dY; U16 lastFrame; past->lastFrame = frame; state_t* change = dict_lookup(past->states, "x"); if (change) //should always be true { while (change->next) change = change->next; lastFrame = change->frame; lastX = change->value; change = dict_lookup(past->states, "y"); if (change) //should always be true { while (change->next) change = change->next; lastY = change->value; dX = x - lastX; dY = y - lastY; if (dX == 0 && dY == 0) syntaxerror("sweep not possible: startpoint and endpoint must not be equal"); if ((dX) * (dX) + (dY) * (dY) > 4 * r * r) syntaxerror("sweep not possible: radius is to small"); if (change->frame > lastFrame) { lastFrame = change->frame; history_remember(past, "x", lastFrame, CF_JUMP, lastX, 0); } else if (change->frame < lastFrame) history_remember(past, "y", lastFrame, CF_JUMP, lastY, 0); float c1X, c1Y, c2X, c2Y; if (dX == 0) //vertical { c1Y = c2Y = (lastY + y) / 2; c1X = x + sqrt(r * r - (c1Y - y) * (c1Y - y)); c2X = 2 * x -c1X; } else if (dY == 0) //horizontal { c1X = c2X = (lastX + x) / 2; c1Y = y +sqrt(r * r - (c1X - x) * (c1X - x)); c2Y = 2 * y -c1Y; } else { c1X = sqrt((r * r - (dX * dX + dY * dY) / 4) / (1 + dX * dX / dY / dY)); c2X = -c1X; c1Y = -dX / dY * c1X; c2Y = -c1Y; c1X += (x + lastX) / 2; c2X += (x + lastX) / 2; c1Y += (y + lastY) / 2; c2Y += (y + lastY) / 2; } float angle1, angle2, delta_angle, centerX, centerY; angle1 = getAngle(lastX - c1X, lastY - c1Y); angle2 = getAngle(x - c1X, y - c1Y); delta_angle = getDeltaAngle(angle1, angle2, clockwise); if ((short_arc && fabs(delta_angle) <= M_PI) || (! short_arc && fabs(delta_angle) >= M_PI)) { centerX = c1X; centerY = c1Y; } else { angle1 = getAngle(lastX - c2X, lastY - c2Y); angle2 = getAngle(x - c2X, y - c2Y); delta_angle = getDeltaAngle(angle1, angle2, clockwise); centerX = c2X; centerY = c2Y; } change = dict_lookup(past->states, "x"); state_t* nextX = state_new(frame, CF_SWEEP, x, inter); nextX->arc.r = r; nextX->arc.angle = angle1; nextX->arc.delta_angle = delta_angle; nextX->arc.cX = centerX; nextX->arc.cY = centerY; nextX->arc.X = 1; state_append(change, nextX); change = dict_lookup(past->states, "y"); state_t* nextY = state_new(frame, CF_SWEEP, y, inter); nextY->arc.r = r; nextY->arc.angle = angle1; nextY->arc.delta_angle = delta_angle; nextY->arc.cX = centerX; nextY->arc.cY = centerY; nextY->arc.X = 0; state_append(change, nextY); } else syntaxerror("Internal error: changing parameter y in sweep, which is unknown for the instance."); } else syntaxerror("Internal error: changing parameter x in sweep, which is unknown for the instance."); } void history_rememberFilter(history_t* past, U16 frame, int function, FILTERLIST* value, interpolation_t* inter) { past->lastFrame = frame; filterState_t* first = dict_lookup(past->states, "filter"); if (first) //should always be true { filterState_t* next = filterState_new(frame, function, value, inter); filterState_append(first, next); } else syntaxerror("Internal error: changing a filter not set for the instance."); } void history_processFlags(history_t* past) // to be called after completely recording this history, before calculating any values. { state_t* flagState = dict_lookup(past->states, "flags"); state_t* nextState; U16 nextFlags, toggledFlags, currentFlags = (U16)flagState->value; while (flagState->next) { nextState = flagState->next; nextFlags = (U16)nextState->value; toggledFlags = currentFlags ^ nextFlags; if (toggledFlags & IF_FIXED_ALIGNMENT) { // the IF_FIXED_ALIGNMENT bit will change in the next state if (nextFlags & IF_FIXED_ALIGNMENT) { // the IF_FIXED_ALIGNMENT bit will be set int onFrame = nextState->frame; state_t* rotations = dict_lookup(past->states, "rotate"); nextState->params.instanceAngle = state_value(rotations, onFrame); state_t* resetRotate = state_new(onFrame, CF_JUMP, 0, 0); state_insert(rotations, resetRotate); if (onFrame == past->firstFrame) onFrame++; state_t *x, *y; float dx, dy; do { x = dict_lookup(past->states, "x"); dx = state_tangent(x, onFrame, T_SYMMETRIC); y = dict_lookup(past->states, "y"); dy = state_tangent(y, onFrame, T_SYMMETRIC); onFrame++; } while (dx == 0 && dy == 0 && onFrame < past->lastFrame); if (onFrame == past->lastFrame) nextState->params.pathAngle = 0; else nextState->params.pathAngle = getAngle(dx, dy) / M_PI * 180; } else // the IF_FIXED_ALIGNMENT bit will be reset { int offFrame = nextState->frame; state_t* rotations = dict_lookup(past->states, "rotate"); state_t* setRotate = state_new(offFrame, CF_JUMP, flagState->params.instanceAngle + state_value(rotations, offFrame), 0); state_insert(rotations, setRotate); } } else // the IF_FIXED_ALIGNMENT bit will not change but some processing may be // required just the same { if (nextFlags & IF_FIXED_ALIGNMENT) { nextState->params.instanceAngle = flagState->params.instanceAngle; nextState->params.pathAngle = flagState->params.pathAngle; } } // and so on for all the other bits. flagState = nextState; currentFlags = nextFlags; } } int history_change(history_t* past, U16 frame, char* parameter) { state_t* first = dict_lookup(past->states, parameter); if (first) //should always be true. return state_differs(first, frame); syntaxerror("no history found to predict changes for parameter %s.\n", parameter); return 0; } float history_value(history_t* past, U16 frame, char* parameter) { state_t* state = dict_lookup(past->states, parameter); if (state) //should always be true. return state_value(state, frame); syntaxerror("no history found to get a value for parameter %s.\n", parameter); return 0; } float history_rotateValue(history_t* past, U16 frame) { state_t* rotations = dict_lookup(past->states, "rotate"); if (rotations) //should always be true. { float angle = state_value(rotations, frame); state_t* flags = dict_lookup(past->states, "flags"); U16 currentflags = state_value(flags, frame); if (currentflags & IF_FIXED_ALIGNMENT) { flags = state_at(flags, frame); if (frame == past->firstFrame) frame++; state_t *x, *y; float dx, dy, pathAngle; do { x = dict_lookup(past->states, "x"); dx = state_value(x, frame) - state_value(x, frame - 1); y = dict_lookup(past->states, "y"); dy = state_value(y, frame) - state_value(y, frame - 1); frame--; } while (dx == 0 && dy == 0 && frame > past->firstFrame); if (frame == past->firstFrame) pathAngle = 0; else pathAngle = getAngle(dx, dy) / M_PI * 180; return angle + flags->params.instanceAngle + pathAngle - flags->params.pathAngle; } else return angle; } syntaxerror("no history found to get a value for parameter rotate.\n"); return 0; } int history_changeFilter(history_t* past, U16 frame) { filterState_t* first = dict_lookup(past->states, "filter"); if (first) //should always be true. return filterState_differs(first, frame); syntaxerror("no history found to predict changes for parameter filter.\n"); return 0; } FILTERLIST* history_filterValue(history_t* past, U16 frame) { filterState_t* first = dict_lookup(past->states, "filter"); if (first) //should always be true. return filterState_value(first, frame); syntaxerror("no history found to get a value for parameter filter.\n"); return 0; } swftools_0.9.2+git20130725.orig/src/swfrender.10000644000175000017500000000000012216332640020161 0ustar gawaingawainswftools_0.9.2+git20130725.orig/src/as3compile.c0000644000175000017500000001672612216332640020331 0ustar gawaingawain/* as3compile.c Compiles ActionScript 3.0 (.as) files into .swf files. Part of the swftools package. Copyright (c) 2008/2009 Matthias Kramm 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 */ #include #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/q.h" #include "../lib/os.h" static char * filename = 0; static char * outputname = 0; static int override_outputname = 0; static int do_cgi = 0; static double framerate = 25.0; static double width = 400; static double height = 300; static int flashversion = 9; static int verbose = 1; static char local_with_networking = 0; static char local_with_filesystem = 0; static char*mainclass = 0; static struct options_t options[] = { {"h", "help"}, {"V", "version"}, {"v", "verbose"}, {"q", "quiet"}, {"C", "cgi"}, {"R", "resolve"}, {"D", "define"}, {"X", "width"}, {"Y", "height"}, {"r", "rate"}, {"M", "mainclass"}, {"l", "library"}, {"I", "include"}, {"N", "local-with-network"}, {"L", "local-with-filesystem"}, {"T", "flashversion"}, {"o", "output"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfc - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { outputname = val; override_outputname = 1; return 1; } else if(!strcmp(name, "r")) { framerate = atof(val); return 1; } else if(!strcmp(name, "M")) { mainclass = val; return 1; } else if(!strcmp(name, "v")) { verbose++; return 0; } else if(!strcmp(name, "q")) { verbose--; return 0; } else if(!strcmp(name, "X")) { width = atof(val); return 1; } else if(!strcmp(name, "Y")) { height = atof(val); return 1; } else if(!strcmp(name, "T")) { flashversion = atoi(val); return 1; } else if(!strcmp(name, "C")) { do_cgi = 1; return 0; } else if(!strcmp(name, "l")) { as3_import_file(val); return 1; } else if(!strcmp(name, "I")) { as3_add_include_dir(val); return 1; } else if(!strcmp(name, "R")) { as3_set_option("recurse","1"); return 0; } else if(!strcmp(name, "D")) { if(!strstr(val, "::")) { fprintf(stderr, "Error: compile definition must contain \"::\"\n"); exit(1); } as3_set_define(val); return 1; } else if (!strcmp(name, "N")) { local_with_networking = 1; return 0; } else if (!strcmp(name, "L")) { local_with_filesystem = 1; return 0; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s file.as [-o file.swf] \n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); printf("-v , --verbose Increase verbosity\n"); printf("-q , --quiet Decrease verbosity\n"); printf("-C , --cgi Output to stdout (for use in CGI environments)\n"); printf("-R , --resolve Try to resolve undefined classes automatically.\n"); printf("-D , --define Set a compile time variable (for doing conditional compilation)\n"); printf("-X , --width Set target SWF width\n"); printf("-Y , --height Set target SWF width\n"); printf("-r , --rate Set target SWF framerate\n"); printf("-M , --mainclass Set the name of the main class (extending flash.display.MovieClip)\n"); printf("-l , --library Include library file . can be an .abc or .swf file.\n"); printf("-I , --include Add additional include dir .\n"); printf("-N , --local-with-network Make output file \"local with networking\"\n"); printf("-L , --local-with-filesystem Make output file \"local with filesystem\"\n"); printf("-T , --flashversion Set target SWF flash version to .\n"); printf("-o , --output Set output file to .\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } void writeSWF(SWF*swf) { int fi = -1; if(do_cgi || !strcmp(filename, "-")) fi = fileno(stdout); else fi = open(outputname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if(fi<0) { fprintf(stderr, "couldn't create output file %s\n", filename); exit(1); } if(do_cgi) { if(swf_WriteCGI(swf)<0) { fprintf(stderr, "WriteCGI failed.\n"); exit(1); } } else { if(swf_WriteSWF(fi, swf)<0) { fprintf(stderr, "WriteSWF() failed.\n"); exit(1); } } } int main (int argc,char ** argv) { char buf[512]; char*currentdir = getcwd(buf, 512); if(!currentdir) { as3_warning("Could not determine the current directory"); } else { as3_add_include_dir(currentdir); } int t; processargs(argc, argv); as3_setverbosity(verbose); if(!filename) { args_callback_usage(argv[0]); exit(1); } if(!outputname) { outputname = stripFilename(filename, ".swf"); //as3_warning("output name not given, writing to %s", outputname); } if(!strcmp(filename, ".")) { as3_parse_directory("."); } else { as3_parse_file(filename); } void*code = as3_getcode(); SWF swf; memset(&swf, 0, sizeof(swf)); swf.fileVersion = flashversion; swf.frameRate = framerate*0x100; swf.movieSize.xmin = 0; swf.movieSize.ymin = 0; swf.movieSize.xmax = width*20; swf.movieSize.ymax = height*20; TAG*tag = swf.firstTag = swf_InsertTag(0, ST_DOABC); swf_WriteABC(tag, code); if(!mainclass) mainclass = as3_getglobalclass(); if(mainclass) { tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, 0); swf_SetString(tag, mainclass); } else { as3_warning("no global public MovieClip subclass"); } as3_destroy(); tag = swf_InsertTag(tag, ST_SHOWFRAME); tag = swf_InsertTag(tag, ST_END); swf_FreeABC(code); if(local_with_filesystem) swf.fileAttributes &= ~FILEATTRIBUTE_USENETWORK; if(local_with_networking) swf.fileAttributes |= FILEATTRIBUTE_USENETWORK; writeSWF(&swf); swf_FreeTags(&swf); return 0; } swftools_0.9.2+git20130725.orig/src/ttftool.c0000644000175000017500000000512012216332640017747 0ustar gawaingawain/* ttftool.c Truetype utility. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include #include #include "../lib/args.h" #include "../lib/ttf.h" static char * filename = 0; static char * output = 0; static int showname = 0; static int verbose = 0; static struct options_t options[] = { {"n", "name"}, {"o", "output"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("ttftool - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "n")) { showname = 1; return 0; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else if(!strcmp(name, "o")) { output = strdup(val); return 1; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s \n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect.\n"); printf("-o , --output Write output to file .\n"); printf("-V , --version Print version info and exit\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Please specify only one font\n"); exit(1); } filename = name; return 0; } int main(int argc, char ** argv) { processargs(argc, argv); ttf_t* font = ttf_open(filename); if(showname && font->full_name) { printf("%s\n", font->full_name); } if(output) { ttf_save(font, output); } return 0; } swftools_0.9.2+git20130725.orig/src/swfc-history.h0000644000175000017500000001014312216332640020723 0ustar gawaingawain/* swfc- Compiles swf code (.sc) files into .swf files. Part of the swftools package. Copyright (c) 2007 Huub Schaeks Copyright (c) 2007 Matthias Kramm 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 */ #ifndef __HISTORY_H #define __HISTORY_Y #include "../lib/types.h" #include "../lib/rfxswf.h" #include "../lib/q.h" #include "swfc-feedback.h" #include "swfc-interpolation.h" enum { CF_PUT = 1, CF_CHANGE = 2, CF_SCHANGE = 3, CF_SWEEP = 4, CF_JUMP = 5 }; #define SF_X 0x0001 #define SF_Y 0x0002 #define SF_SCALEX 0x0004 #define SF_SCALEY 0x0008 #define SF_CX_R 0x0010 #define SF_CX_G 0x0020 #define SF_CX_B 0x0040 #define SF_CX_A 0x0080 #define SF_ROTATE 0x0100 #define SF_SHEAR 0x0200 #define SF_PIVOT 0x0400 #define SF_PIN 0x0800 #define SF_BLEND 0x1000 #define SF_FILTER 0x2000 #define SF_ALL 0x3fff #define IF_FIXED_ALIGNMENT 0x0001 FILTER* noFilters; FILTER_BLUR* noBlur; FILTER_BEVEL* noBevel; FILTER_DROPSHADOW* noDropshadow; FILTER_GRADIENTGLOW* noGradientGlow; typedef struct _spline { float a, b, c, d; } spline_t; typedef struct _arc { float r, angle, delta_angle, cX, cY; int X; // boolean: 1 if this is for x; 0 if this is for y; } arc_t; typedef struct _flagparms { float pathAngle, instanceAngle; } flagparams_t; typedef struct _state { U16 frame; float value; int function; interpolation_t* interpolation; spline_t spline; arc_t arc; flagparams_t params; struct _state* next; } state_t; state_t* state_new(U16 frame, int function, float value, interpolation_t* inter); void state_free(state_t* state); void state_init(state_t* state); state_t* state_at(state_t* state, U16 frame); void state_append(state_t* state, state_t* newState); void state_insert(state_t* state, state_t* newState); float state_value(state_t* first, float frame); float state_tangent(state_t* modification, U16 frame, int tangent); typedef struct _filterState { U16 frame; FILTERLIST* value; int function; interpolation_t* interpolation; struct _filterState* next; } filterState_t; filterState_t* filterState_new(U16 frame, int function, FILTERLIST* value, interpolation_t* inter); void filterState_free(filterState_t* change); void filterState_init(filterState_t* change); void filterState_append(filterState_t* first, filterState_t* newChange); FILTERLIST* filterState_value(filterState_t* first, U16 frame); typedef struct _history { U16 firstFrame, lastFrame; TAG* firstTag; dict_t* states; } history_t; history_t* history_new(); void history_free(history_t* past); void history_init(history_t* past); void history_begin(history_t* past, char* parameter, U16 frame, TAG* tag, float value); void history_beginFilter(history_t* past, U16 frame, TAG* tag, FILTERLIST* value); void history_remember(history_t* past, char* parameter, U16 frame, int function, float value, interpolation_t* inter); void history_rememberSweep(history_t* past, U16 frame, float x, float y, float r, int clockwise, int short_arc, interpolation_t* inter); void history_rememberFilter(history_t* past, U16 frame, int function, FILTERLIST* value, interpolation_t* inter); void history_processFlags(history_t* past); int history_change(history_t* past, U16 frame, char* parameter); float history_value(history_t* past, U16 frame, char* parameter); float history_rotateValue(history_t* past, U16 frame); int history_changeFilter(history_t* past, U16 frame); FILTERLIST* history_filterValue(history_t* past, U16 frame); #endif swftools_0.9.2+git20130725.orig/src/swfrender.c0000644000175000017500000001714412216332640020264 0ustar gawaingawain#include "../config.h" #include #include #include #include #include #include "../lib/rfxswf.h" #include "../lib/png.h" #include "../lib/args.h" #include "../lib/gfxsource.h" #include "../lib/readers/swf.h" #include "../lib/devices/render.h" #include "../lib/devices/rescale.h" static struct options_t options[] = { {"h", "help"}, {"o", "output"}, {"p", "pages"}, {"r", "resolution"}, {"l", "legacy"}, {"V", "version"}, {"X", "width"}, {"Y", "height"}, {0,0} }; static int ng = 1; static char*filename = 0; static char*outputname = "output.png"; static int quantize = 0; static char*pagerange = 0; static int width = 0; static int height = 0; static int resolution = 0; typedef struct _parameter { const char*name; const char*value; struct _parameter*next; } parameter_t; parameter_t*params = 0; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfrender - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { if(!val) { fprintf(stderr, "use \"-o \"\n"); exit(1); } outputname = strdup(val); return 1; } else if(!strcmp(name, "l")) { ng = 0; return 0; } else if(!strcmp(name, "q")) { quantize = 1; return 0; } else if(!strcmp(name, "p")) { pagerange = val; return 1; } else if(!strcmp(name, "r")) { resolution = atoi(val); return 1; } else if(!strcmp(name, "s")) { char*s = strdup(val); char*c = strchr(s, '='); parameter_t*p = malloc(sizeof(parameter_t)); p->next = params; params = p; if(c && *c && c[1]) { *c = 0; c++; p->name = s; p->value = c; } else { p->name = s; p->value = "1"; } return 1; } else if(!strcmp(name, "X")) { width = atoi(val); return 1; } else if(!strcmp(name, "Y")) { height = atoi(val); return 1; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s file.swf [-options]\n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-l , --legacy Use old rendering framework\n"); printf("-o , --output Output file, suffixed for multiple pages (default: output.png)\n"); printf("-p , --pages range Render pages in specified range e.g. 9 or 1-20 or 1,4-6,9-11 (default: all pages)\n"); printf("-r , --resolution dpi Scale width and height to a specific DPI resolution, assuming input is 1px per pt (default: 72)\n"); printf("-X , --width width Scale output to specific width (proportional unless height specified)\n"); printf("-Y , --height height Scale output to specific height (proportional unless width specified)\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } int main(int argn, char*argv[]) { SWF swf; int fi; processargs(argn, argv); if(!filename) { fprintf(stderr, "You must supply a filename.\n"); return 1; } if (resolution && (width || height)) { fprintf(stderr, "Height/width cannot be specified with resolution.\n"); return 1; } if(!ng) { fi = open(filename, O_RDONLY|O_BINARY); if (fi<=0) { fprintf(stderr,"Couldn't open %s\n", filename); perror(filename); exit(1); } if(swf_ReadSWF(fi,&swf)<0) { fprintf(stderr,"%s is not a valid SWF file or contains errors.\n",argv[1]); close(fi); } assert(swf.movieSize.xmax > swf.movieSize.xmin && swf.movieSize.ymax > swf.movieSize.ymin); RENDERBUF buf; swf_Render_Init(&buf, 0,0, (swf.movieSize.xmax - swf.movieSize.xmin) / 20, (swf.movieSize.ymax - swf.movieSize.ymin) / 20, 2, 1); swf_RenderSWF(&buf, &swf); RGBA* img = swf_Render(&buf); if(quantize) png_write_palette_based_2(outputname, (unsigned char*)img, buf.width, buf.height); else png_write(outputname, (unsigned char*)img, buf.width, buf.height); swf_Render_Delete(&buf); } else { parameter_t*p; gfxsource_t*src = gfxsource_swf_create(); for(p=params;p;p=p->next) { src->setparameter(src, p->name, p->value); } gfxdocument_t*doc = src->open(src, filename); for(p=params;p;p=p->next) { doc->setparameter(doc, p->name, p->value); } if(!doc) { fprintf(stderr,"Couldn't open %s\n", filename); exit(1); } int t; int count = 0; char to_output[doc->num_pages]; for(t=1;t<=doc->num_pages;t++) { to_output[t-1] = 0; if(is_in_range(t, pagerange)) { to_output[t-1] = 1; count++; } } if (count == 0) { fprintf(stderr,"No pages selected for output. Available pages are 1..%d\n", doc->num_pages); exit(1); } for(t=1;t<=sizeof(to_output);t++) { if (to_output[t-1]) { gfxdevice_t dev2,*dev=&dev2; gfxdevice_render_init(dev); dev->setparameter(dev, "antialise", "4"); if(quantize) { dev->setparameter(dev, "palette", "1"); } if(width || height || resolution) { double scale = 0.0; if (resolution) { /* Assume input is generated by pdf2swf at 72dpi (1px == 1pt) */ scale = resolution / 72.0; } dev = gfxdevice_rescale_new(dev, width, height, scale); } for(p=params;p;p=p->next) { dev->setparameter(dev, p->name, p->value); } gfxpage_t* page = doc->getpage(doc, t); dev->startpage(dev, page->width, page->height); page->render(page, dev); dev->endpage(dev); page->destroy(page); gfxresult_t* result = dev->finish(dev); if(result) { char* effective_outputname = outputname; char* suffixed_outputname = malloc(strlen(outputname) + 128); if (count > 1) { effective_outputname = suffixed_outputname; char* ext = strrchr(outputname, '.'); if (ext) { strncpy(suffixed_outputname, outputname, (ext - outputname)); sprintf(suffixed_outputname + (ext-outputname), "-%d.%s", t, (ext+1)); } else { sprintf(suffixed_outputname, "%s-%d", outputname, t); } } if(result->save(result, effective_outputname) < 0) { fprintf(stderr,"Error writing page %d to %s\n", t, outputname); exit(1); } free(suffixed_outputname); result->destroy(result); } } } doc->destroy(doc); } return 0; } swftools_0.9.2+git20130725.orig/src/swfdump.10000644000175000017500000000352012216332640017661 0ustar gawaingawain.TH swfdump "1" "April 2012" "swfdump" "swftools" .SH NAME swfdump \- Display an SWF file's content. .SH Synopsis .B swfdump [\-atpdu] file.swf .SH DESCRIPTION A tool for displaying information about flash files .PP swfdump shows ids, names and depths of objects defined in the SWF file. It can furthermore also disassemble Actionscript, extract texts, and display placement information about objects. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Print short help message and exit .TP \fB\-D\fR, \fB\-\-full\fR Show everything. Same as -atp .TP \fB\-V\fR, \fB\-\-version\fR Print version info and exit .TP \fB\-e\fR, \fB\-\-html\fR Print out html code for embedding the file .TP \fB\-E\fR, \fB\-\-xhtml\fR Print out xhtml code for embedding the file .TP \fB\-a\fR, \fB\-\-action\fR Disassemble action tags .TP \fB\-t\fR, \fB\-\-text\fR Show text fields (like swfstrings). .TP \fB\-s\fR, \fB\-\-shapes\fR Show shape coordinates/styles .TP \fB\-F\fR, \fB\-\-fonts\fR Show font information .TP \fB\-p\fR, \fB\-\-placements\fR Show placement information .TP \fB\-B\fR, \fB\-\-buttons\fR Show button information .TP \fB\-b\fR, \fB\-\-bbox\fR Print tag's bounding boxes .TP \fB\-X\fR, \fB\-\-width\fR Print out the horizontal dimension of the movie, in a string of the form "-X width" .TP \fB\-Y\fR, \fB\-\-height\fR Print out the vertical dimension of the movie, in a string of the form "-Y height" .TP \fB\-r\fR, \fB\-\-rate\fR Print out the frame rate of the movie, in a string of the form "-r rate". .TP \fB\-f\fR, \fB\-\-frames\fR Print out the number of frames in the movie, in a string of the form "-f frames" .TP \fB\-d\fR, \fB\-\-hex\fR Print hex output of tag data, too. .TP \fB\-u\fR, \fB\-\-used\fR Show referred IDs for each Tag. .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/parser.h0000644000175000017500000000225512216332640017563 0ustar gawaingawain/* parser.h Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __parser_h__ #define __parser_h__ enum type_t { TWIP=0, NUMBER=1, COMMAND=2, STRING=3, ASSIGNMENT=4, IDENTIFIER=5, RAWDATA=6, END=7 }; extern char*type_names[]; struct token_t { enum type_t type; int text_pos; char* text; int line; int column; }; extern struct token_t* generateTokens(char*filename); extern void freeTokens(struct token_t*); #endif swftools_0.9.2+git20130725.orig/src/font2swf.c0000644000175000017500000000636312216332640020036 0ustar gawaingawain/* font2swf.c Utility for converting TrueType and Type 1 fonts to SWF. Part of the swftools package. Copyright (c) 2004 Matthias Kramm 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 */ #include #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" static char * filename = 0; static char * destfilename = "output.swf"; static int all=0; static int verbose=0; static char * fontname = 0; static char config_flashtype = 0; static struct options_t options[] = { {"h", "help"}, {"v", "verbose"}, {"o", "output"}, {"V", "version"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("font2swf - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "o")) { destfilename = val; return 1; } else if(!strcmp(name, "v")) { verbose ++; return 0; } else if(!strcmp(name, "T")) { config_flashtype=1; return 0; } else if(!strcmp(name, "n")) { fontname = val; return 1; } else if(!strcmp(name, "a")) { all = 1; return 0; } else { printf("Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s \n", name); printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect.\n"); printf("-o , --output Write output to file .\n"); printf("-V , --version Print version info and exit\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Please specify only one font\n"); exit(1); } filename = name; return 0; } static void convertFont(char*infile, char*outfile) { SWFFONT * font; font = swf_LoadFont(infile, config_flashtype); if(!font) exit(1); swf_FontCreateAlignZones(font); if(fontname) font->name = strdup(fontname); swf_WriteFont(font, outfile); swf_FontFree(font); } int main(int argc, char ** argv) { char cwd[128]; getcwd(cwd, 128); processargs(argc, argv); if(!all && !filename) { fprintf(stderr, "You must supply a filename.\n"); exit(1); } if(!all) { convertFont(filename, destfilename); return 0; } /* TODO */ printf("--all not implemented yet.\n"); return 0; } swftools_0.9.2+git20130725.orig/src/swfstrings.c0000644000175000017500000001366112216332640020476 0ustar gawaingawain/* swfstrings.c Scans a swf file for strings Part of the swftools package. Copyright (c) 2000,2001 Rainer Böhme 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 */ #include #include #include "../lib/rfxswf.h" #include "../lib/args.h" #include "../lib/utf8.h" static char * filename = 0; static char showfonts = 0; static int x=0,y=0,w=0,h=0; static struct options_t options[] = { {"f", "fonts"}, {"x", "xpos"}, {"y", "ypos"}, {"W", "width"}, {"H", "height"}, {"V", "version"}, {0,0} }; int args_callback_option(char*name,char*val) { if(!strcmp(name, "V")) { printf("swfstrings - part of %s %s\n", PACKAGE, VERSION); exit(0); } else if(!strcmp(name, "x")) { x = atoi(val); return 1; } else if(!strcmp(name, "y")) { y = atoi(val); return 1; } else if(!strcmp(name, "W")) { w = atoi(val); return 1; } else if(!strcmp(name, "H")) { h = atoi(val); return 1; } else if(!strcmp(name, "f")) { showfonts = 1; return 0; } else if(!strcmp(name, "V")) { printf("swfstrings - part of %s %s\n", PACKAGE, VERSION); exit(0); } else { fprintf(stderr, "Unknown option: -%s\n", name); exit(1); } return 0; } int args_callback_longoption(char*name,char*val) { return args_long2shortoption(options, name, val); } void args_callback_usage(char *name) { printf("\n"); printf("Usage: %s [options] file.swf\n", name); printf("\n"); printf("-f , --fonts Print out font information for each text block\n"); printf("-x , --xpos Set bounding box x coordinate\n"); printf("-y , --ypos Set bounding box y coordinate\n"); printf("-W , --width Set bounding box width\n"); printf("-H , --height Set bounding box height\n"); printf("-V , --version Print version information and exit\n"); printf("\n"); } int args_callback_command(char*name,char*val) { if(filename) { fprintf(stderr, "Only one file allowed. You supplied at least two. (%s and %s)\n", filename, name); } filename = name; return 0; } static SWF swf; static int fontnum = 0; static SWFFONT**fonts = 0; void fontcallback1(void*self, U16 id,U8 * name) { fontnum++; } void fontcallback2(void*self, U16 id,U8 * name) { swf_FontExtract(&swf,id,&fonts[fontnum]); fontnum++; } void textcallback(void*self, int*glyphs, int*advance, int nr, int fontid, int fontsize, int startx, int starty, RGBA*color) { SWFFONT*font = 0; int t; for(t=0;tid == fontid) { font = fonts[t]; break; } } if(showfonts) { if(font) printf("#\n", fontid, font->name, swf_FontIsBold(font)?" bold":"",swf_FontIsItalic(font)?" italic":""); printf("#\n", color->r, color->g, color->b, color->a); printf("#\n", fontsize); } for(t=0;t x+w || yy > y+h) { /* outside of bounding box */ ///printf("(%d+%d,%d) -> (%d,%d)\n", startx, advance[t]/20, starty, xx, yy); if(t==nr-1) return; else continue; } } unsigned int a; int advance = 0; if(font) { if(glyphs[t]<0 || glyphs[t] >= font->numchars /*glyph is not in range*/ || !font->glyph2ascii /* font has ascii<->glyph mapping */ ) a = glyphs[t]; else { if(font->glyph2ascii[glyphs[t]]) a = font->glyph2ascii[glyphs[t]]; else a = glyphs[t]; } } else { a = glyphs[t]; } if(a>=32) { char* utf8 = getUTF8(a); printf("%s", utf8); } else { printf("\\x%x", (int)a); } } printf("\n"); } void fontcallback(void*self,U16 id,U8 * name) { SWFFONT* font; TAG* t; swf_FontExtract(&swf,id,&font); t = swf.firstTag; swf_FontFree(font); } TAG**id2tag = 0; int main (int argc,char ** argv) { int f; processargs(argc, argv); if(!filename) exit(0); f = open(filename,O_RDONLY|O_BINARY); if (f<0 || swf_ReadSWF(f,&swf)<0) { fprintf(stderr,"%s is not a valid SWF file or contains errors.\n",filename); if(f>=0) close(f); exit(-1); } close(f); if(x|y|w|h) { if(!w) w = (swf.movieSize.xmax - swf.movieSize.xmin) / 20; if(!h) h = (swf.movieSize.ymax - swf.movieSize.ymin) / 20; } id2tag = rfx_calloc(sizeof(TAG)*65536); fontnum = 0; swf_FontEnumerate(&swf,&fontcallback1, 0); fonts = (SWFFONT**)malloc(fontnum*sizeof(SWFFONT*)); fontnum = 0; swf_FontEnumerate(&swf,&fontcallback2, 0); TAG*tag = swf.firstTag; while (tag) { if(swf_isTextTag(tag)) { id2tag[swf_GetDefineID(tag)] = tag; } else if(swf_isPlaceTag(tag)) { SWFPLACEOBJECT po; swf_SetTagPos(tag, 0); swf_GetPlaceObject(tag, &po); if(!po.move && id2tag[po.id]) { TAG*text = id2tag[po.id]; swf_SetTagPos(text, 0); swf_GetU16(text); swf_GetRect(text, NULL); swf_ResetReadBits(text); MATRIX m,tm; swf_GetMatrix(text, &tm); swf_MatrixJoin(&m, &po.matrix, &tm); swf_ParseDefineText(text, textcallback, &m); } } tag = tag->next; } swf_FreeTags(&swf); return 0; } swftools_0.9.2+git20130725.orig/src/swfcombine.10000644000175000017500000001234112216332640020331 0ustar gawaingawain.TH swfcombine "1" "April 2012" "swfcombine" "swftools" .SH NAME swfcombine \- a tool for combining swf (flash) files .SH Synopsis .B swfcombine [\-rXYomlcv] [\-f] masterfile [\-xysf] [(name1|#id1)=]slavefile1 .. [\-xysf] [(nameN|#idN)=]slavefileN .PP .B swfcombine [\-rXYomv] \--stack[1] [\-xysf] [(name1|#id1)=]slavefile1 .. [\-xysf] [(nameN|#idN)=]slavefileN .PP .B swfcombine [\-rXYov] \--cat [\-xysf] [(name1|#id1)=]slavefile1 .. [\-xysf] [(nameN|#idN)=]slavefileN .PP .B swfcombine [\-rXYomlcv] \--dummy [\-xys] [file] .SH DESCRIPTION Take two or more SWF files, and combine them into a new SWF. SWFs can either be stacked (no masterfile is present) or inserted (into the masterfile). .PP SWF files are animation files which can be displayed in Web Browsers using the Flash Plugin. .LP For template mechanisms, it's often convenient to separate the processes of generating small animation fragments and merging them into a big movie. swfcombine can be used to perform the latter. .SH OPTIONS .TP \fB\-o\fR, \fB\-\-output\fR \fIoutputfile\fR explicitly specify output file. (otherwise, output.swf will be used) .TP \fB\-t\fR, \fB\-\-stack\fR Don't assume the first file is a master file. Instead, store each file in a seperate frame. .TP \fB\-T\fR, \fB\-\-stack1\fR place each slave in the first frame (no master movie) .TP \fB\-m\fR, \fB\-\-merge\fR Do not store the slave files in a sprite/MovieClip. Instead, merge the files frame by frame. .TP \fB\-a\fR, \fB\-\-cat\fR concatenate all slave files (no master movie) .TP \fB\-l\fR, \fB\-\-overlay\fR Don't remove any master objects, only overlay new objects .TP \fB\-c\fR, \fB\-\-clip\fR Clip the slave objects by the corresponding master objects .TP \fB\-v\fR, \fB\-\-verbose\fR Be verbose. Use more than one -v for greater effect .TP \fB\-F\fR, \fB\-\-flashversion\fR Set the flash version of the output file. .TP \fB\-d\fR, \fB\-\-dummy\fR Don't require the presence of slave objects. Usually used together with \fB\-X\fR, \fB\-Y\fR or \fB\-r\fR. .TP \fB\-f\fR, \fB\-\-frame\fR The next slave replaces a frame, not an object. Therefore the slave identifier is a frame number (#frame=) or frame label (framelabel=). .TP \fB\-x\fR, \fB\-\-movex\fR \fIxpos\fR x Adjust position of slave by \fIxpos\fR pixels .TP \fB\-y\fR, \fB\-\-movey\fR \fIypos\fR y Adjust position of slave by \fIypos\fR pixels .TP \fB\-s\fR, \fB\-\-scale\fR \fIscale\fR Adjust size of slave by \fIscale\fR percent (e.g. 100% = original size) .TP \fB\-r\fR, \fB\-\-rate\fR \fIfps\fR Force the output to have the framerate \fIfps\fR. (Otherwise, the framerate of the master file will be used) .TP \fB\-X\fR, \fB\-\-width\fR \fIwidth\fR Force movie bbox width to \fIwidth\fR (default: use master width (not with -t)) .TP \fB\-Y\fR, \fB\-\-height\fR \fIheight\fR Force movie bbox height to \fIheight\fR (default: use master height (not with -t)) .TP \fB\-N\fR, \fB\-\-local-with-networking\fR Make output file "local-with-networking" .TP \fB\-G\fR, \fB\-\-hardware-gpu\fR Set the "use hardware gpu" bit in the output file .TP \fB\-B\fR, \fB\-\-accelerated-blit\fR Set the "use accelerated blit" bit in the output file .TP \fB\-L\fR, \fB\-\-local-with-filesystem\fR Make output file "local-with-filesystem" .TP \fB\-z\fR, \fB\-\-zlib\fR \fIzlib\fR Use Flash MX (SWF 6) Zlib encoding for the output. The resulting SWF will be smaller, but not playable in Flash Plugins of Version 5 and below. .PP .SH Combining two or more .swf files using a master file Of the flash files to be combined, all except one will be packed into a sprite structure (Movieclip) which will then be inserted into the master .swf file. This means that, in terms of trees, when combining several flash files, one will form the root of the tree, while the others will be appended to the root as a subnode. The user has to specify which of the files will become the root of the tree ("master") and which will be the appended nodes ("slaves"). The slave files must all have a name, which is then used to determine their exact position inside the master file. The slave files will then be converted into sprites, inserted into the master file, and all PlaceObject tags in the master file which match the name of the slave file will be updated to correctly display the slave sprite. The slave name may also be the object id, preceded by '#', in which case the object to be replaced is referenced by id and not by instance name. .SH Combining (stacking) one or more .swf files without a master The flash files will be inserted in seperate frames. They will still be packed into Movieclips, therefore the outputfile will have exactly as many frames as there were inputfiles. Also, the files don't need to have names. If you want to access the Movieclips, their names are frameXX, where XX is the decimal number of the file, starting by zero (00). .SH EXAMPLES Create two flash movies. Insert some rectangle into one of them, and give it a name. (E.g. "foo") Now call swfcombine \-o combined.swf master.swf foo=slave.swf As a result, the slave movie should be visible inside the master movie at the position where the rectangle used to be. .SH AUTHOR Matthias Kramm swftools_0.9.2+git20130725.orig/src/parser.lex0000644000175000017500000001773712216332640020137 0ustar gawaingawain%{ #include #include #include #include "../lib/q.h" #include "parser.h" #include "../lib/utf8.h" //RVALUE {NUMBER}|{PERCENT}|{NAME}|\"{STRING}\"|{DIM} //. {printf("%s\n", yytext);} // %x: exclusive, %s: inclusive char*type_names[] = {"twip","number","command","string","assignment","identifier","label","end"}; static int line=1; static int column=1; mem_t strings; mem_t tokens; static void count(char*text, int len, int condition) { int t; for(t=0;tstr; (p=strchr(p1, '\\')); p1 = p+1) { int nr=2; int new=1; switch(p[1]) { case '\\': p[0] = '\\'; break; case '"': p[0] = '"'; break; case 'b': p[0] = '\b'; break; case 'f': p[0] = '\f'; break; case 'n': p[0] = '\n'; break; case 'r': p[0] = '\r'; break; case 't': p[0] = '\t'; break; case 'x': case 'u': { int max=4; int num=0; char*utf8; char bracket = 0; if(p[1] == 'u') max = 6; if(p[2] == '{') { bracket = 1;nr++;max++; } while(strchr("0123456789abcdefABCDEF", p[nr]) && (bracket || nr < max)) { num <<= 4; if(p[nr]>='0' && p[nr]<='9') num |= p[nr] - '0'; if(p[nr]>='a' && p[nr]<='f') num |= p[nr] - 'a' + 10; if(p[nr]>='A' && p[nr]<='F') num |= p[nr] - 'A' + 10; nr++; } if(bracket && p[nr]=='}') { bracket = 0; nr++; } utf8 = getUTF8(num); new = strlen(utf8); memcpy(p, utf8, new); // do not copy the terminating zero break; } default: continue; } tmp->len -= (nr-new); { int t; char*to=p+new,*from=p+nr; while(*from) { *to = *from; to++; from++; } } } } static void store(enum type_t type, int line, int column, char*text, int length) { struct token_t token; string_t tmp; token.type = type; token.line = line; token.column = column; //printf("->%d(%s) %s\n", type, type_names[type], text);fflush(stdout); token.text_pos = 0; token.text = 0; switch(type) { case END: string_set2(&tmp, "", 0); token.text_pos = mem_putstring(&strings, tmp); break; case STRING: string_set2(&tmp, text+1, length-2); unescapeString(&tmp); token.text_pos = mem_putstring(&strings, tmp); break; case TWIP: case NUMBER: case IDENTIFIER: string_set2(&tmp, text, length); if(prefix) { //strcat token.text_pos = mem_put(&strings, prefix, strlen(prefix)); mem_putstring(&strings, tmp); } else { token.text_pos = mem_putstring(&strings, tmp); } prefix = 0; break; case RAWDATA: string_set2(&tmp, text+1/*:*/, length-5/*.end*/); token.text_pos = mem_putstring(&strings, tmp); break; case COMMAND: string_set2(&tmp, text+1, length-1); token.text_pos = mem_putstring(&strings, tmp); break; case ASSIGNMENT: { char*x = &text[length-1]; if(x[-1] == '-' || x[-1] == '+') x--; do{x--;} while(*x==32 || *x==10 || *x==13 || *x=='\t'); x++; //first space string_set2(&tmp, text, x-text); token.text_pos = mem_putstring(&strings, tmp); /*char*y,*x = strchr(text, '='); if(!x) exit(1); y=x; do{y--;} while(*y==32 || *y==10 || *y==13 || *y=='\t'); do{x++;} while(*x==32 || *x==10 || *x==13 || *x=='\t'); token.text1 = (char*)put(&strings, text, y-text + 1, 1); token.text2 = (char*)put(&strings, x, length-(x-text), 1);*/ } break; } mem_put(&tokens, &token, sizeof(struct token_t)); prefix = 0; } #define MAX_INCLUDE_DEPTH 16 static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; static int line_stack[MAX_INCLUDE_DEPTH]; static int column_stack[MAX_INCLUDE_DEPTH]; static int include_stack_ptr = 0; static void handleInclude(char*text, int len) { text+=9;len-=9; while(len >=1 && (text[0] == ' ' || text[0] == '\t')) { text++;len--; } while(len >= 1 && (text[len-1] == ' ' || text[len-1] == '\r' || text[len-1] == '\n')) { len--; } if(len >= 2 && text[0] == '"' && text[len-1] == '"') { text++; len-=2; } text[len] = 0; if(include_stack_ptr >= MAX_INCLUDE_DEPTH) { fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } include_stack[include_stack_ptr] = YY_CURRENT_BUFFER; line_stack[include_stack_ptr] = line; column_stack[include_stack_ptr] = column; include_stack_ptr++; yyin = fopen(text, "rb"); if (!yyin) { fprintf(stderr, "Couldn't open %s\n", text); exit(1); } yy_switch_to_buffer(yy_create_buffer( yyin, YY_BUF_SIZE ) ); #ifdef INITIAL BEGIN(INITIAL); #else // best guess BEGIN(0); #endif } #define c() {count(yytext, yyleng, YY_START);} #define s(type) {store(type, line, column, yytext, yyleng);} %} %s R %x BINARY NAME [a-zA-Z_./](-*[a-zA-Z0-9_./])* TWIP (-?[0-9]+(\.([0-9]([05])?)?)?) NUMBER -?[0-9]+(\.[0-9]*)? PERCENT {NUMBER}% STRING (\\.|[^\\"\n])* S [ \n\r\t] RVALUE \"{STRING}\"|([^ \n\r\t]+) %% \] {c();BEGIN(0);} . {c();} \n {c();} {TWIP}/[ \n\r\t] {s(TWIP);c();BEGIN(0);} {NUMBER}/[ \n\r\t] {s(NUMBER);c();BEGIN(0);} ^#[^\n]*\n {c();} [ \t\r]#[^\n]*\n {c();} \"{STRING}\" {s(STRING);c();BEGIN(0);} \"{STRING}$ {c();printf("unterminated string in line %d: %s\n", line, yytext);exit(1);yyterminate();} {NAME}{S}*\+= {s(ASSIGNMENT);prefix="";c();BEGIN(R);} {NAME}{S}*-= {s(ASSIGNMENT);prefix="";c();BEGIN(R);} {NAME}{S}*= {s(ASSIGNMENT);c();BEGIN(R);} { /* values which appear only on the right-hand side of assignments, like: x=50% */ [^ :\n\t\r]* {s(IDENTIFIER);c();BEGIN(0);} } \.include{S}.*\n {handleInclude(yytext, yyleng);} \.{NAME} {s(COMMAND);c();} :([^.]|\.[^e]|\.e[^n]|\.en[^d]|\.end[^ \n\r\t]|[ \n\r\t])*\.end {s(RAWDATA);c();} {NAME} {s(IDENTIFIER);c();} "[" {c();BEGIN(BINARY);} {S} {c();} . {char c,c1=yytext[0]; printf("Syntax error in line %d, %d: %s", line, column, yytext); while(1) { c=input(); if(c=='\n' || c==EOF) break; printf("%c", c); } if(c1>='0' && c1<='9') printf(" (identifiers must not start with a digit)"); printf("\n"); exit(1); yyterminate(); } <> {c(); if ( --include_stack_ptr < 0 ) { s(END); yyterminate(); } else { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); column = column_stack[include_stack_ptr]; line = line_stack[include_stack_ptr]; } } %% int yywrap() { return 1; } void freeTokens(struct token_t*file) { mem_clear(&strings); mem_clear(&tokens); } struct token_t* generateTokens(char*filename) { FILE*fi; int t; struct token_t*result; int num; if(!filename) return 0; if(!strcmp(filename,"-")) fi = stdin; else fi = fopen(filename, "rb"); if(!fi) { printf("Couldn't find file %s\n", filename); return 0; } yyin = fi; mem_init(&strings); mem_init(&tokens); mem_put(&strings, &t, 1); //hack- make all valid strings start at position >0 line=1; column=1; yylex(); #ifdef YY_CURRENT_BUFFER // some newer flex versions require it like this: yy_delete_buffer(YY_CURRENT_BUFFER); #else yy_delete_buffer(yy_current_buffer); #endif result = (struct token_t*)tokens.buffer; num = tokens.pos/sizeof(struct token_t); for(t=0;t\n") fi.write("#include \n") for i in self.includefiles: fi.write("#include <%s>\n" % i) for d in self.defines: fi.write("%s;\n" % d) fi.write(head) fi.write("\nint main()\n") fi.write("{\n") fi.write(body) fi.write("\n}\n") fi.close() #fi = open("setup_test.c", "rb") #print fi.read() #fi.close() quiet = 1 if quiet: try: # redirect stderr sys.stderr.flush() err = open('/dev/null', 'a+', 0) olderr = open('/dev/null', 'a+', 0) os.dup2(2, olderr.fileno()) os.dup2(err.fileno(), 2) except: pass error = 0 try: cc.compile(["setup_test.c"], include_dirs=cc.include_dirs) except CompileError: error = 1 if quiet: try: # unredirect stderr sys.stderr.flush() err = open('/dev/null', 'a+', 0) os.dup2(olderr.fileno(), 2) olderr.close() err.close() except: pass self.unlink("setup_test.o") self.unlink("setup_test.obj") self.unlink("setup_test.c") if error: return None else: return 1 def system_has_property(self,name): if name.startswith("STD"): return 1 elif name.startswith("INTERNAL"): return 1 elif name == "PACKAGE": return "\"swftools\"" elif name == "VERSION": fi = open("configure.in", "rb") for line in fi.readlines(): if line.startswith("VERSION="): return '"'+line[8:].strip()+'"' return "unknown" elif "POPPLER" in name: return None elif name.startswith("HAVE_") and name.endswith("_H"): header = name[5:].lower() c = header.rfind("_") if c>=0: header = header[0:c]+"."+header[c+1] header = header.replace("_","/") ok = 0 for dir in cc.include_dirs: if os.path.isfile(os.path.join(dir,header)): ok = 1 break if ok and self.test_code("#include <"+header+">", ""): if header.startswith("sys"): self.includefiles += [header] return 1 elif name.startswith("HAVE_LIB") \ or name.startswith("HAVE_FONTCONFIG") \ or name.startswith("HAVE_FREETYPE"): if name.startswith("HAVE_LIB"): libname = name[8:].lower() else: libname = name[5:].lower() if cc.find_library_file(cc.library_dirs, libname): update_list(self.libraries, [libname]) return 1 elif name.startswith("HAVE_LAME"): return None elif name.startswith("HAVE_FFTW3"): return None elif name.startswith("O_BINARY"): if sys.platform.startswith("win"): return None else: return 0 elif name == "boolean": if self.test_code("", "boolean b;"): return None else: self.defines += ["typedef int boolean"] return "int" elif name.startswith("SIZEOF_"): t = name[7:].lower().replace("_", " ") if t == "voidp": t = "void*" for i in [1,2,4,8]: s = "static int test_array [%d+1-sizeof(%s)*2];\ntest_array [0] = 0;" % (i*2,t) if self.test_code("", s): return i return None elif name.startswith("USE_FREEETYPE"): # TODO: run a test here? return 1 elif name.startswith("HAVE_"): function = name[5:].lower() params="" if function=="bcopy": params = "0,0,0" elif function=="bzero": params = "0,0" return self.test_code("", "%s(%s);" % (function,params), stdh=0) return None def create_config(self): print "Creating config.h..." fi = open("config.h.in", "rb") fo = open("config.h", "wb") for line in fi.readlines(): if line.startswith("#undef "): line = line.strip() name = line[7:] if " " in name: name = name.split(" ")[0] value = self.system_has_property(name) if value is None: fo.write("// %s is not set\n" % (name)) else: fo.write("#define %s %s\n" % (name, value)) else: fo.write(line) fo.write("// python:lib "+(" ".join(self.libraries))+"\n") fo.close() fi.close() def load(self): if not os.path.isfile("config.h"): return 0 fi = open("config.h", "rb") for line in fi.readlines(): if line.startswith("// python: lib "): self.libraries = line[15:].split(" ") fi.close() return config = ConfigScript() # if either setup.py or config.h.in were modfied, rebuild config.h if not config.load() or \ os.stat("setup.py")[stat.ST_MTIME] > os.stat("config.h")[stat.ST_MTIME] or \ os.stat("config.h.in")[stat.ST_MTIME] > os.stat("config.h")[stat.ST_MTIME]: config.create_config() #print dir(cc) #sys.exit(0) if "jpeg" not in config.libraries: print "Error: Couldn't find jpeg library on your system" sys.exit(1) if "freetype" not in config.libraries: print "Error: Couldn't find freetype library on your system" sys.exit(1) base_sources = [ "lib/q.c", "lib/utf8.c", "lib/png.c", "lib/jpeg.c", "lib/wav.c", "lib/mp3.c", "lib/os.c", "lib/bitio.c", "lib/log.c", "lib/mem.c", "lib/ttf.c", "lib/kdtree.c", "lib/xml.c" ] rfxswf_sources = [ "lib/modules/swfaction.c", "lib/modules/swfbits.c", "lib/modules/swfbutton.c", "lib/modules/swfcgi.c", "lib/modules/swfalignzones.c", "lib/modules/swfdraw.c", "lib/modules/swfdump.c", "lib/modules/swffilter.c", "lib/modules/swffont.c", "lib/modules/swfobject.c", "lib/modules/swfrender.c", "lib/modules/swfshape.c", "lib/modules/swfsound.c", "lib/modules/swftext.c", "lib/modules/swftools.c", "lib/rfxswf.c", "lib/drawer.c", "lib/h.263/dct.c", "lib/h.263/h263tables.c", "lib/h.263/swfvideo.c", "lib/action/assembler.c", "lib/action/compile.c", "lib/action/lex.swf4.c", "lib/action/lex.swf5.c", "lib/action/libming.c", "lib/action/swf4compiler.tab.c", "lib/action/swf5compiler.tab.c", "lib/action/actioncompiler.c", "lib/as3/assets.c", "lib/as3/abc.c", "lib/as3/state.c", "lib/as3/code.c", "lib/as3/pool.c", "lib/as3/files.c", "lib/as3/opcodes.c", "lib/as3/scripts.c", "lib/as3/common.c", "lib/as3/builtin.c", "lib/as3/compiler.c", "lib/as3/expr.c", "lib/as3/import.c", "lib/as3/initcode.c", "lib/as3/parser.tab.c", "lib/as3/parser_help.c", "lib/as3/registry.c", "lib/as3/tokenizer.yy.c", ] libpdf_sources = [ "lib/pdf/VectorGraphicOutputDev.cc", "lib/pdf/CharOutputDev.cc", "lib/pdf/InfoOutputDev.cc", "lib/pdf/BitmapOutputDev.cc", "lib/pdf/FullBitmapOutputDev.cc", "lib/pdf/CommonOutputDev.cc", "lib/pdf/bbox.c", "lib/pdf/pdf.cc", "lib/pdf/fonts.c", "lib/pdf/xpdf/GHash.cc", "lib/pdf/xpdf/GList.cc", "lib/pdf/xpdf/GString.cc", "lib/pdf/xpdf/gmem.cc", "lib/pdf/xpdf/gfile.cc", "lib/pdf/xpdf/FoFiTrueType.cc", "lib/pdf/xpdf/FoFiType1.cc", "lib/pdf/xpdf/FoFiType1C.cc", "lib/pdf/xpdf/FoFiBase.cc", "lib/pdf/xpdf/FoFiEncodings.cc", "lib/pdf/xpdf/OutputDev.cc", "lib/pdf/xpdf/PDFDoc.cc", "lib/pdf/xpdf/Error.cc", "lib/pdf/xpdf/Stream.cc", "lib/pdf/xpdf/Object.cc", "lib/pdf/xpdf/Decrypt.cc", "lib/pdf/xpdf/Array.cc", "lib/pdf/xpdf/XRef.cc", "lib/pdf/xpdf/Dict.cc", "lib/pdf/xpdf/Parser.cc", "lib/pdf/xpdf/Lexer.cc", "lib/pdf/xpdf/Outline.cc", "lib/pdf/xpdf/PDFDocEncoding.cc", "lib/pdf/xpdf/Catalog.cc", "lib/pdf/xpdf/Link.cc", "lib/pdf/xpdf/GlobalParams.cc", "lib/pdf/xpdf/JBIG2Stream.cc", "lib/pdf/xpdf/Page.cc", "lib/pdf/xpdf/JPXStream.cc", "lib/pdf/xpdf/JArithmeticDecoder.cc", "lib/pdf/xpdf/Gfx.cc", "lib/pdf/xpdf/GfxFont.cc", "lib/pdf/xpdf/CMap.cc", "lib/pdf/xpdf/CharCodeToUnicode.cc", "lib/pdf/xpdf/PSTokenizer.cc", "lib/pdf/xpdf/FontEncodingTables.cc", "lib/pdf/xpdf/BuiltinFont.cc", "lib/pdf/xpdf/BuiltinFontTables.cc", "lib/pdf/xpdf/GfxState.cc", "lib/pdf/xpdf/Function.cc", "lib/pdf/xpdf/Annot.cc", "lib/pdf/xpdf/NameToCharCode.cc", "lib/pdf/xpdf/UnicodeMap.cc", "lib/pdf/xpdf/SecurityHandler.cc", "lib/pdf/xpdf/SplashOutputDev.cc", "lib/pdf/xpdf/SplashFont.cc", "lib/pdf/xpdf/SplashState.cc", "lib/pdf/xpdf/Splash.cc", "lib/pdf/xpdf/SplashBitmap.cc", "lib/pdf/xpdf/SplashClip.cc", "lib/pdf/xpdf/SplashPattern.cc", "lib/pdf/xpdf/SplashFontEngine.cc", "lib/pdf/xpdf/SplashFontFile.cc", "lib/pdf/xpdf/SplashFontFileID.cc", "lib/pdf/xpdf/SplashScreen.cc", "lib/pdf/xpdf/SplashPath.cc", "lib/pdf/xpdf/SplashXPath.cc", "lib/pdf/xpdf/SplashXPathScanner.cc", "lib/pdf/xpdf/SplashFTFontEngine.cc", "lib/pdf/xpdf/SplashFTFontFile.cc", "lib/pdf/xpdf/SplashFTFont.cc"] libgfx_sources = [ "lib/gfxtools.c", "lib/gfxfont.c", "lib/gfximage.c", "lib/gfxpoly/active.c", "lib/gfxpoly/convert.c", "lib/gfxpoly/moments.c", "lib/gfxpoly/poly.c", "lib/gfxpoly/renderpoly.c", "lib/gfxpoly/stroke.c", "lib/gfxpoly/wind.c", "lib/gfxpoly/xrow.c", "lib/devices/dummy.c", "lib/devices/file.c", "lib/devices/render.c", "lib/devices/text.c", "lib/devices/record.c", "lib/devices/ops.c", "lib/devices/polyops.c", "lib/devices/bbox.c", "lib/devices/rescale.c", "lib/art/art_affine.c", "lib/art/art_alphagamma.c", "lib/art/art_bpath.c", "lib/art/art_gray_svp.c", "lib/art/art_misc.c", "lib/art/art_pixbuf.c", "lib/art/art_rect.c", "lib/art/art_rect_svp.c", "lib/art/art_rect_uta.c", "lib/art/art_render.c", "lib/art/art_render_gradient.c", "lib/art/art_render_mask.c", "lib/art/art_render_svp.c", "lib/art/art_rgb.c", "lib/art/art_rgb_a_affine.c", "lib/art/art_rgb_affine.c", "lib/art/art_rgb_affine_private.c", "lib/art/art_rgb_bitmap_affine.c", "lib/art/art_rgb_pixbuf_affine.c", "lib/art/art_rgb_rgba_affine.c", "lib/art/art_rgb_svp.c", "lib/art/art_rgba.c", "lib/art/art_svp.c", "lib/art/art_svp_intersect.c", "lib/art/art_svp_ops.c", "lib/art/art_svp_point.c", "lib/art/art_svp_render_aa.c", "lib/art/art_svp_vpath.c", "lib/art/art_svp_vpath_stroke.c", "lib/art/art_svp_wind.c", "lib/art/art_uta.c", "lib/art/art_uta_ops.c", "lib/art/art_uta_rect.c", "lib/art/art_uta_svp.c", "lib/art/art_uta_vpath.c", "lib/art/art_vpath.c", "lib/art/art_vpath_bpath.c", "lib/art/art_vpath_dash.c", "lib/art/art_vpath_svp.c" ] gfxswf_sources = ["lib/devices/swf.c", "lib/readers/swf.c", "lib/readers/image.c"] swf_module = Extension( name='SWF', include_dirs=cc.include_dirs+INCLUDE, sources=['lib/python/SWF.c', 'lib/python/taglist.c', 'lib/python/tag.c', 'lib/python/image.c', 'lib/python/tags.c', 'lib/python/tagmap.c', 'lib/python/action.c', 'lib/python/primitives.c', 'lib/python/pyutils.c'] + base_sources + rfxswf_sources, library_dirs=cc.library_dirs, libraries=config.libraries, extra_objects=['%s/lib/python%s/site-packages/PIL/_imaging.so' % (sys.prefix, sys.version[:3])], extra_compile_args=COMPILER_OPTIONS, ) gfx_module = Extension( name='gfx', sources=['lib/python/gfx.c'] + base_sources + libgfx_sources + rfxswf_sources + libpdf_sources + gfxswf_sources, include_dirs=cc.include_dirs+INCLUDE, library_dirs=cc.library_dirs, libraries=config.libraries + ["stdc++"], extra_objects=[], extra_compile_args=COMPILER_OPTIONS, ) setup(name='SWFTools', version='0.9dev', description='Python wrapper for SWFTools', author='Matthias Kramm', author_email='kramm@quiss.org', url='http://www.swftools.org/', ext_modules=[swf_module, gfx_module], ) swftools_0.9.2+git20130725.orig/configure.in0000644000175000017500000003750612216332640017647 0ustar gawaingawaindnl Process this file with autoconf to produce a configure script. dnl old autoconf AC_INIT(src/) dnl new autoconf dnl AC_INIT dnl AC_CONFIG_SRCDIR([src/]) # ------------------- option parsing ------------------------------- DEBUG= CHECKMEM= PROFILING= ENABLE_WARNINGS= OPTIMIZE= USE_POPPLER= DISABLE_LAME= AC_ARG_ENABLE(checkmem, [ --enable-checkmem turn on ccmalloc debugging], CHECKMEM=true) AC_ARG_ENABLE(debug, [ --enable-debug turn on debugging], DEBUG=true) AC_ARG_ENABLE(profiling, [ --enable-profiling turn on profiling], PROFILING=true) AC_ARG_ENABLE(warnings, [ --enable-warnings turn on compiler warnings], ENABLE_WARNINGS=true) AC_ARG_ENABLE(optimizations, [ --enable-optimizations turn on compiler optimizations (recommended for avi2swf)], OPTIMIZE=true) AC_ARG_ENABLE(poppler, [ --enable-poppler link againist libpoppler], USE_POPPLER=true) AC_ARG_ENABLE(lame, [ --disable-lame "don't compile any L.A.M.E. mp3 encoding code in"], if test "x$enable_lame" = "xno";then DISABLE_LAME=yes fi,DISABLE_LAME=) PACKAGE=swftools VERSION=0.9.2+git20130725 # ------------------------------------------------------------------ if test "x${srcdir}" != "x."; then echo "--srcdir is not supported" exit 1 fi WARNINGS="-Wimplicit -Wreturn-type -Wno-write-strings -Wformat" if test "x$ENABLE_WARNINGS" '!=' "x";then WARNINGS="-Wall -Wno-unused -Wno-format -Wno-redundant-decls -Wno-write-strings -D_FORTIFY_SOURCE=2 " fi if test "x$CHECKMEM" '!=' "x";then DEBUG=yes fi if test "x$PROFILING" '!=' "x";then DEBUG=yes fi if test "x$DEBUG" '!=' "x";then if test "x$PROFILING" = "x";then CFLAGS="$WARNINGS -O2 -g $CFLAGS" CXXFLAGS="$WARNINGS -O2 -g $CXXFLAGS" LDFLAGS="-g $LDFLAGS" else CFLAGS="$WARNINGS -O2 -g -pg $CFLAGS" CXXFLAGS="$WARNINGS -O2 -g -pg $CXXFLAGS" LDFLAGS="-g -pg $LDFLAGS" fi else if test "x$OPTIMIZE" '!=' "x"; then CFLAGS="$WARNINGS -O3 -fomit-frame-pointer -Winline $CFLAGS" CXXFLAGS="$WARNINGS -O3 -fomit-frame-pointer -Winline $CXXFLAGS" else CFLAGS="$WARNINGS -O -fomit-frame-pointer $CFLAGS" CXXFLAGS="$WARNINGS -O -fomit-frame-pointer $CXXFLAGS" fi fi CFLAGS="-fPIC $CFLAGS" CXXFLAGS="-fPIC $CFLAGS" #OLDGCC=1 #if test "x$OLDGCC" '!=' "x";then # #CFLAGS="$CFLAGS --std=c89 -ansi -pendantic" # #CXXFLAGS="$CXXFLAGS --std=c89 -ansi -pendantic" # CFLAGS="$CFLAGS -ansi -pendantic" # CXXFLAGS="$CXXFLAGS -ansi -pendantic" #fi export PACKAGE VERSION CFLAGS CXXFLAGS dnl Checks for programs. AC_CANONICAL_HOST SLEXT="so" SHARED="-shared" MACOSX= case $host_os in *darwin* ) MACOSX=yes CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS -fno-rtti" SHARED="-bundle" SLEXT="bundle" if test -d /opt/local/include && test -d /opt/local/lib; then CPPFLAGS="${CPPFLAGS} -I/opt/local/include" LDFLAGS="${LDFLAGS} -L/opt/local/lib" fi # Use fink packages if available. #if test -d /sw/include && test -d /sw/lib; then # CPPFLAGS="${CPPFLAGS} -I/sw/include" # LDFLAGS="${LDFLAGS} -L/sw/lib" #fi ;; esac AC_SUBST(SHARED) dnl Checks for programs. AC_PROG_CC AC_PROG_CXX RFX_CHECK_OLDGCC if test "x$GCC_IS_OK" '=' "x";then echo "***************************************************" echo "* Your gcc is too old to compile this!" echo "* " echo "* The last version compileable by this compiler is " echo "* swftools 0.7.0, which you can download from " echo "* http://www.swftools.org/swftools-0.7.0.tar.gz " echo "* ." echo "* Newer versions require at least gcc 3.0.0 " echo "***************************************************" exit 1 fi if test "x$CHECKMEM" '!=' "x";then CC="ccmalloc $CC" CXX="ccmalloc $CXX" #echo running again #unset ac_cv_prog_CC #unset ac_cv_prog_CXX #AC_PROG_CC #AC_PROG_CXX fi AC_PROG_CPP AC_PROG_RANLIB AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_LN_S AC_CHECK_PROGS(UNCOMPRESS, gzip uncompress compress, ) dnl PKG_PROG_PKG_CONFIG dnl Checks for system services OBJEXT="o" AREXT=".a" CXXLIBS="-lstdc++" AC_EXEEXT if test "x$EXEEXT" = "x.exe";then OBJEXT="obj" AREXT=".lib" CXXLIBS="" fi AC_SUBST(OBJEXT) AC_SUBST(AREXT) RFX_CHECK_MING if test "x${MINGW}" != "xyes"; then # no mingW AC_DEFINE([O_BINARY], [0], [Not defined on mingw]) else # mingW SLEXT="dll" CXXLIBS="" fi export SLEXT AC_SUBST(SLEXT) AC_SUBST(CXXLIBS) # The following tries to make use of includes and libraries in # /usr/local, too. Notice: A -I/usr/local/include might break # things (MingW, cross-compiling etc.) in the same way as -I/usr/include, # especially on systems which link /usr/local to /usr, so it has yet # to be seen how useful this is. if test -d /usr/local/lib; then LDFLAGS="$LDFLAGS -L/usr/local/lib" fi if test -d /usr/local/include; then # Leave that alone. It's causing trouble e.g. with gcc 3.2 on gentoo. # CPPFLAGS="$CPPFLAGS -I/usr/local/include" echo > /dev/null fi if test "$prefix" != "NONE" -a "$prefix" != "/usr/local" -a "$prefix" != "/usr/local/"; then # if the user has a special prefix (like /opt), there might also be $prefix/lib # and $prefix/include, which should be included in our search paths for libraries # and includes. LDFLAGS="$LDFLAGS -L${libdir}" CPPFLAGS="$CPPFLAGS -I${includedir}" # TODO- test whether gcc still works after this fi #Mac OS: #LDFLAGS "-L/sw/lib" ; CPPFLAGS "-I/sw/include -I/sw/include/lame" # this must be done after (I believe) AC_PROG_MAKE_SET if test "x$DEBUG" '!=' "x" -o "x$STRIP" = "x";then if test "$MACOSX";then STRIP=dsymutil else STRIP="@echo debug enabled, not stripping " fi export STRIP AC_SUBST(STRIP) fi dnl Checks for libraries. AC_CHECK_LIB(m, sin,, echo "Error: Math library not found."; exit; ) AC_CHECK_LIB(z, deflate,, ZLIBMISSING=true) if test "x$ZLIBMISSING" = "xtrue";then echo echo "ERROR:" echo "You need zlib to compile swftools" echo exit fi AC_CHECK_LIB(pdf, PDF_open_file,, PDFLIBMISSING=true) AC_CHECK_LIB(jpeg, jpeg_write_raw_data,, JPEGLIBMISSING=true) AC_CHECK_LIB(ungif, DGifOpen,, UNGIFMISSING=true) if test "$UNGIFMISSING";then UNGIFMISSING= AC_CHECK_LIB(gif, DGifOpen,, UNGIFMISSING=true) fi AC_CHECK_LIB(zzip, zzip_file_open,, ZZIPMISSING=true) RFX_CHECK_BYTEORDER AC_SUBST(WORDS_BIGENDIAN) RFX_CHECK_SYSTEM_BACKTICKS AC_SUBST(SYSTEM_BACKTICKS) AC_ARG_PROGRAM dnl Checks for header files. AC_CONFIG_HEADER(config.h) AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS(zlib.h gif_lib.h io.h jpeglib.h assert.h signal.h pthread.h sys/stat.h sys/mman.h sys/types.h dirent.h sys/bsdtypes.h sys/ndir.h sys/dir.h ndir.h time.h sys/time.h sys/resource.h pdflib.h zzip/lib.h) AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package]) AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_SUBST(HAVE_UNISTD_H) AC_SUBST(EXEEXT) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_STRUCT_TM AC_CHECK_TYPE(boolean,int) #needed for jpeglib AC_CHECK_FUNCS(popen mkstemp stat mmap lrand48 rand srand48 srand bcopy bzero time getrusage mallinfo open64 calloc) AC_CHECK_SIZEOF([signed char]) AC_CHECK_SIZEOF([signed short]) AC_CHECK_SIZEOF([signed]) AC_CHECK_SIZEOF([signed long long]) AC_CHECK_SIZEOF([void*]) RFX_CHECK_FREETYPE RFX_CHECK_FONTCONFIG RFX_CHECK_FFTW # RFX_CHECK_OPENGL # if test "$HAVE_OPENGL";then # DEVICE_OPENGL='devices/opengl.$(O)' # AC_SUBST(DEVICE_OPENGL) # fi AC_SUBST(DEVICE_OPENGL) lame_in_source= lame_makefile= if test "x${DISABLE_LAME}" = "xtrue"; then echo "*" Disabling lame support... else # old lame code at lib/lame if test -f lib/lame/Makefile.in; then lame_in_source='$(lame_objects)' lame_makefile="lib/lame/Makefile" CPPFLAGS="$CPPFLAGS -Ilame -Ilib/lame" AC_DEFINE([HAVE_LAME], [1], [have/use internal l.a.m.e. mp3 library]) else if test -d /usr/include/lame; then CPPFLAGS="$CPPFLAGS -I /usr/include/lame" else if test -d /usr/local/include/lame; then CPPFLAGS="$CPPFLAGS -I /usr/local/include/lame" fi fi AC_CHECK_LIB(mp3lame, lame_init,, NO_LIBMP3LAME=1) HASLAMEHEADER= AC_CHECK_HEADERS(lame.h,HASLAMEHEADER=1) if test "x$NO_LIBMP3LAME" "!=" "x1" -a "x$HASLAMEHEADER" '!=' "x";then AC_DEFINE([HAVE_LAME], [1]) fi fi fi AC_SUBST(lame_in_source) xpdf_in_source= splash_in_source= xpdf_include= if test "x$USE_POPPLER" = "xtrue"; then AC_DEFINE([HAVE_POPPLER],[1],[use poppler]) #PKG_CHECK_MODULES([POPPLER],[poppler poppler-splash],,[poppler_pkgconfig=no]) if test "x$poppler_pkgconfig" = "xno"; then AC_LANG_PUSH([C++]) AC_CHECK_HEADERS([OutputDev.h],[ AC_CHECK_LIB([poppler],[main],,[]) ],[AC_MSG_ERROR([No poppler library found. This library is required.])]) AC_LANG_POP else CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS" LIBS="$LIBS $POPPLER_LIBS" AC_DEFINE([HAVE_POPPLER], [1]) fi else splash_in_source='$(splash_objects)' xpdf_in_source='$(xpdf_objects)' xpdf_include=' -I xpdf ' fi AC_SUBST([xpdf_in_source]) AC_SUBST([splash_in_source]) AC_SUBST([xpdf_include]) # ------------------------------------------------------------------ RFX_CHECK_LOWERCASE_UPPERCASE RFX_CHECK_AVI2SWF if test "x${AVIFILE}" = "xtrue"; then VIDEO_LIBS="$VIDEO_LIBS $AVIFILE_LIBS" VIDEO_CFLAGS="$VIDEO_CFLAGS $AVIFILE_CFLAGS" AC_DEFINE([HAVE_AVIFILE], [1], [Define if avifile is present]) fi if test "x${WIN32}" != "x"; then #AC_CHECK_LIB(avifil32, AVIFileInit,AVIFIL32=true) #if test "x${AVIFIL32}" != "x"; then # VIDEO_LIBS="$VIDEO_LIBS -lavifil32" #fi VIDEO_LIBS="$VIDEO_LIBS -lavifil32" AVIFIL32=true fi AC_SUBST(VIDEO_LIBS) AC_SUBST(VIDEO_CFLAGS) # ------------------------------------------------------------------ if test "x${UNCOMPRESS}" = "xgzip"; then AC_DEFINE([USE_GZIP], [1], [Define if gzip is present]) fi AC_SUBST(USE_GZIP) # ------------------------------------------------------------------ RFX_CHECK_RUBY if test "x$RUBY_OK" '!=' "xyes";then if test -d "lib/ruby/";then echo all install uninstall clean: > lib/ruby/Makefile fi # fail silently- the most users won't have any need for the # ruby interface anyway else if test -f "lib/ruby/Makefile.in";then rubygfx="lib/ruby/Makefile" fi fi # ------------------------------------------------------------------ AC_MSG_CHECKING([for missing libraries]) if test "x$ZLIBMISSING" = "xtrue";then MISSINGLIBS="${MISSINGLIBS} zlib" DISABLEPNG2SWF=true PARTIAL=true fi if test "x$JPEGLIBMISSING" = "xtrue";then MISSINGLIBS="${MISSINGLIBS} jpeglib" DISABLEPDF2SWF=true DISABLEJPEG2SWF=true PARTIAL=true fi if test "x$PDFLIBMISSING" = "xtrue";then DISABLEPDF2PDF=true; fi #if test "x$T1LIBMISSING" = "xtrue";then # MISSINGLIBS="${MISSINGLIBS} t1lib" #fi if test "x$UNGIFMISSING" = "xtrue";then DISABLEGIF2SWF=true MISSINGLIBS="${MISSINGLIBS} ungif" PARTIAL=true fi if test "x${ac_cv_header_pdflib_h}" '!=' "xyes";then DISABLEPDF2PDF=true; fi if test "x${ac_cv_header_jpeglib_h}" '!=' "xyes"; then DISABLEPDF2SWF=true; DISABLEJPEG2SWF=true; MISSINGLIBS="${MISSINGLIBS} jpeglib.h" PARTIAL=true fi if test "x$HAVE_FREETYPE" '!=' "x1"; then DISABLEPDF2SWF=true; MISSINGLIBS="${MISSINGLIBS} freetype" PARTIAL=true fi #if test "x${ac_cv_header_t1lib_h}" '!=' "xyes"; then # MISSINGLIBS="${MISSINGLIBS} t1lib.h" #fi if test "x${ac_cv_header_gif_lib_h}" '!=' "xyes"; then DISABLEGIF2SWF=true MISSINGLIBS="${MISSINGLIBS} gif_lib.h" PARTIAL=true fi if test "x${ac_cv_header_zlib_h}" '!=' "xyes"; then DISABLEPNG2SWF=true; MISSINGLIBS="${MISSINGLIBS} zlib.h" PARTIAL=true fi #if test "x${AVIFILE}" '!=' "xtrue" -a "x${AVIFIL32}" '!=' "xtrue"; then # MISSINGLIBS="${MISSINGLIBS} avifile" #fi AC_MSG_RESULT(${MISSINGLIBS}) # ------------------------------------------------------------------ RFX_CHECK_PYTHON if test "x$PYTHON_OK" '!=' "xyes" -o "$DISABLEPDF2SWF";then echo all install uninstall clean: > lib/python/Makefile # fail silently- the most users won't have any need for the # python interface anyway else pythongfx="lib/python/Makefile" fi # ------------------------------------------------------------------ if test "x${MISSINGLIBS}" '!=' "x"; then echo "***************************************************" echo "* The following headers/libraries are missing: " ${MISSINGLIBS} fi avi2swf="avi2swf/Makefile" if test "x${AVIFILE}" '!=' "xtrue" -a "x${AVIFIL32}" '!=' "xtrue"; then #don't whine, avi2swf is outdated anyway #echo "* Disabling avi2swf tool..." echo all install uninstall clean: > avi2swf/Makefile avi2swf= fi pdf2swf_makefile="lib/pdf/Makefile" PDF2SWF='pdf2swf$(E)' LIBPDF='libpdf$(A)' if test "x${DISABLEPDF2SWF}" = "xtrue"; then echo "* Disabling pdf2swf tool..." rm -f lib/pdf/Makefile echo all install uninstall clean libpdf libgfxpdf: > lib/pdf/Makefile pdf2swf_makefile="" PDF2SWF= LIBPDF= fi AC_SUBST(PDF2SWF) AC_SUBST(LIBPDF) PDF2PDF='pdf2pdf$(E)' DEVICE_PDF='devices/pdf.$(O)' if test "x${DISABLEPDF2PDF}" = "xtrue"; then #echo "* Disabling pdf2pdf tool..." PDF2PDF= DEVICE_PDF= fi AC_SUBST(DEVICE_PDF) AC_SUBST(PDF2PDF) if test "x${ZLIBMISSING}" = "xtrue"; then echo echo "* Warning! Without zlib, you will not be able to read" echo "* or write compressed Flash MX files!" fi JPEG2SWF='jpeg2swf$(E)' if test "x${DISABLEJPEG2SWF}" = "xtrue"; then echo "* Disabling jpeg2swf tool..." JPEG2SWF= fi export JPEG2SWF AC_SUBST(JPEG2SWF) GIF2SWF='gif2swf$(E)' if test "x${DISABLEGIF2SWF}" = "xtrue"; then echo "* Disabling gif2swf tool..." GIF2SWF= fi export GIF2SWF AC_SUBST(GIF2SWF) PNG2SWF='png2swf$(E)' if test "x${DISABLEPNG2SWF}" = "xtrue"; then echo "* Disabling png2swf tool..." PNG2SWF= fi export PNG2SWF AC_SUBST(PNG2SWF) if test "x${MISSINGLIBS}" '!=' "x"; then if test "x${PARTIAL}" '=' "x"; then echo "* (never mind)" fi echo "***************************************************" fi # ------------------------------------------------------------------ AH_TOP([ #ifndef __config_h__ #define __config_h__ ]) AH_BOTTOM([ #ifdef HAVE_ZLIB_H #ifdef HAVE_LIBZ #define HAVE_ZLIB #endif #endif #ifdef HAVE_JPEGLIB_H #ifdef HAVE_LIBJPEG #define HAVE_JPEGLIB #endif #endif #ifdef HAVE_FT2BUILD_H #define HAVE_FREETYPE_H 1 #endif #ifdef HAVE_GL_GL_H #ifdef HAVE_GL_GLUT_H #ifdef HAVE_OPENGL #define USE_OPENGL #endif #endif #endif #ifdef HAVE_POPPLER #define GString GooString #define GHash GooHash #define GHashIter GooHashIter #endif #ifdef HAVE_ZZIP_LIB_H #ifdef HAVE_LIBZZIP #define HAVE_ZZIP 1 #endif #endif // supply a substitute calloc function if necessary #ifndef HAVE_CALLOC #define calloc rfx_calloc_replacement #endif #endif // __config_h__ ]) if test -f "release.in"; then release_in="./release"; fi if test -f "Makefile.new.in"; then mk_in="./Makefile.new"; fi FILES="$release_in $mk_in Makefile.common ${avi2swf} Makefile lib/Makefile lib/action/Makefile src/Makefile ${pdf2swf_makefile} swfs/Makefile ${pythongfx} ${rubygfx} ${lame_makefile} lib/readers/Makefile" AC_OUTPUT(${FILES}) dnl new autoconf dnl AC_CONFIG_FILES([${FILES}]) dnl AC_OUTPUT # # On development trees, create snapshots of config.status # if test -f snapshot -a "x$CHECKMEM" = "x" -a "x$PROFILING" = "x";then if test "x${MINGW}" = "xyes"; then echo cp config.status config.status.win32 cp config.status config.status.win32 else if test "x$DEBUG" '=' "x" -a "x$OPTIMIZE" '=' "x";then echo cp config.status config.status.linux cp config.status config.status.linux fi if test "x$DEBUG" '!=' "x" -a "x$OPTIMIZE" '=' "x";then echo cp config.status config.status.debug cp config.status config.status.debug fi if test "x$DEBUG" = "x" -a "x$OPTIMIZE" '!=' "x"; then echo cp config.status config.status.optimize cp config.status config.status.optimize fi fi fi swftools_0.9.2+git20130725.orig/mkinstalldirs0000755000175000017500000000123312216332640020130 0ustar gawaingawain#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here swftools_0.9.2+git20130725.orig/lib/0002755000175000017500000000000012216332657016103 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/png.h0000644000175000017500000000324112216332640017026 0ustar gawaingawain/* png.h Copyright (c) 2003/2004/2005 Matthias Kramm 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 */ #ifndef __png_h__ #define __png_h__ #ifdef __cplusplus extern "C" { #endif int png_apply_filter_32(unsigned char*dest, unsigned char*src, unsigned width, int y); void png_inverse_filter_32(int mode, unsigned char*src, unsigned char*old, unsigned char*dest, unsigned width); int png_load(const char*sname, unsigned*destwidth, unsigned*destheight, unsigned char**destdata); int png_getdimensions(const char*sname, unsigned*destwidth, unsigned*destheight); void png_write_palette_based(const char*filename, unsigned char*data, unsigned width, unsigned height, int numcolors); void png_write(const char*filename, unsigned char*data, unsigned width, unsigned height); void png_write_quick(const char*filename, unsigned char*data, unsigned width, unsigned height); void png_write_palette_based_2(const char*filename, unsigned char*data, unsigned width, unsigned height); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/utf8.h0000644000175000017500000000031112216332640017123 0ustar gawaingawain#ifndef __utf8_h__ #define __utf8_h__ #ifdef __cplusplus extern "C" { #endif int writeUTF8(unsigned int charnum, char*dest); char* getUTF8(unsigned int charnum); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/h.263/0002755000175000017500000000000012216332657016643 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/h.263/dct.h0000644000175000017500000000173712216332640017564 0ustar gawaingawain/* dct.h Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __dct_h__ #define __dct_h__ void dct(int*src); void idct(int*src); void preparequant(int quant); void dct2(int*src, int*dest); extern int zigzagtable[64]; void zigzag(int*src); #endif //__dct_h__ swftools_0.9.2+git20130725.orig/lib/h.263/dct.c0000644000175000017500000001234312216332640017552 0ustar gawaingawain/* dct.c DCT implementations and test routines. Copyright (c) 2003 Matthias Kramm 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 */ #include int zigzagtable[64] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63}; static double table[8][8] = { {0.707106781186548,0.707106781186548,0.707106781186548,0.707106781186548,0.707106781186548,0.707106781186548,0.707106781186548,0.707106781186548}, {0.980785280403230,0.831469612302545,0.555570233019602,0.195090322016128,-0.195090322016128,-0.555570233019602,-0.831469612302545,-0.980785280403230}, {0.923879532511287,0.382683432365090,-0.382683432365090,-0.923879532511287,-0.923879532511287,-0.382683432365090,0.382683432365090,0.923879532511287}, {0.831469612302545,-0.195090322016128,-0.980785280403230,-0.555570233019602,0.555570233019602,0.980785280403230,0.195090322016129,-0.831469612302545}, {0.707106781186548,-0.707106781186547,-0.707106781186548,0.707106781186547,0.707106781186548,-0.707106781186547,-0.707106781186547,0.707106781186547}, {0.555570233019602,-0.980785280403230,0.195090322016128,0.831469612302545,-0.831469612302545,-0.195090322016128,0.980785280403231,-0.555570233019602}, {0.382683432365090,-0.923879532511287,0.923879532511287,-0.382683432365090,-0.382683432365091,0.923879532511287,-0.923879532511286,0.382683432365090}, {0.195090322016128,-0.555570233019602,0.831469612302545,-0.980785280403231,0.980785280403230,-0.831469612302545,0.555570233019602,-0.195090322016129} }; void dct(int*src) { double tmp[64]; int x,y,u,v,t; for(v=0;v<8;v++) for(u=0;u<8;u++) { double c = 0; for(x=0;x<8;x++) { c+=table[u][x]*src[v*8+x]; } tmp[v*8+u] = c; } for(u=0;u<8;u++) for(v=0;v<8;v++) { double c = 0; for(y=0;y<8;y++) { c+=table[v][y]*tmp[y*8+u]; } src[v*8+u] = (int)(c*0.25+0.5); } } void idct(int*src) { double tmp[64]; int x,y,u,v; for(y=0;y<8;y++) for(x=0;x<8;x++) { double c = 0; for(u=0;u<8;u++) { c+=table[u][x]*src[y*8+u]; } tmp[y*8+x] = c; } for(y=0;y<8;y++) for(x=0;x<8;x++) { double c = 0; for(v=0;v<8;v++) { c+=table[v][y]*tmp[v*8+x]; } src[y*8+x] = (int)(c*0.25+0.5); } } static double c[8] = {1.0, 0.980785280403230, // cos(Pi*1/16), sin(Pi*7/16) 0.923879532511287, // cos(Pi*2/16), sin(Pi*6/16) 0.831469612302545, // cos(Pi*3/16), sin(Pi*5/16) 0.707106781186548, // cos(Pi*4/16), sin(Pi*4/16), 1/sqrt(2) 0.555570233019602, // cos(Pi*5/16), sin(Pi*3/16) 0.382683432365090, // cos(Pi*6/16), sin(Pi*2/16) 0.195090322016128 // cos(Pi*7/16), sin(Pi*1/16) }; static double cc[8]; static int ccquant = -1; void preparequant(int quant) { if(ccquant == quant) return; cc[0] = c[0]/(quant*2*4); cc[1] = c[1]/(quant*2*4); cc[2] = c[2]/(quant*2*4); cc[3] = c[3]/(quant*2*4); cc[4] = c[4]/(quant*2*4); cc[5] = c[5]/(quant*2*4); cc[6] = c[6]/(quant*2*4); cc[7] = c[7]/(quant*2*4); ccquant = quant; } inline static void innerdct(const double*a,double*b, const double*c) { // c1*c7*2 = c6 // c2*c6*2 = c4 // c3*c5*2 = c2 // c4*c4*2 = 1 //{ 1, 3, 5, 7, -7, -5, -3, -1}, //{ 3, -7, -1, -5, 5, 1, 7, -3}, //{ 5, -1, 7, 3, -3, -7, 1, -5}, //{ 7, -5, 3, -1, 1, -3, 5, -7} double b0,b1,b2,b3,b4,b5; b2 = (a[0]+a[7]); b3 = (a[1]+a[6]); b4 = (a[2]+a[5]); b5 = (a[3]+a[4]); b0 = (b2+b5)*c[4]; b1 = (b3+b4)*c[4]; b[0*8] = b0 + b1; b[4*8] = b0 - b1; b[2*8] = (b2-b5)*c[2] + (b3-b4)*c[6]; b[6*8] = (b2-b5)*c[6] + (b4-b3)*c[2]; b0 = (a[0]-a[7]); b1 = (a[1]-a[6]); b2 = (a[2]-a[5]); b3 = (a[3]-a[4]); b[1*8] = b0*c[1] + b1*c[3] + b2*c[5] + b3*c[7]; b[3*8] = b0*c[3] - b1*c[7] - b2*c[1] - b3*c[5]; b[5*8] = b0*c[5] - b1*c[1] + b2*c[7] + b3*c[3]; b[7*8] = b0*c[7] - b1*c[5] + b2*c[3] - b3*c[1]; } void dct2(int*src, int*dest) { double tmp[64], tmp2[64]; double*p; int u,x,v,t; for(t=0;t<64;t++) tmp2[t] = src[t]; for(v=0;v<8;v++) { double* a=&tmp2[v*8]; double* b=&tmp[v]; innerdct(a,b,c); } for(v=0;v<8;v++) { double* a=&tmp[v*8]; double* b=&tmp2[v]; innerdct(a,b,cc); } for(t=0;t<64;t++) { int v = (int)(tmp2[t]); dest[zigzagtable[t]] = v; } } void zigzag(int*src) { int tmp[64]; int t; for(t=0;t<64;t++) { tmp[zigzagtable[t]] = src[t]; } memcpy(src, tmp, sizeof(int)*64); } swftools_0.9.2+git20130725.orig/lib/h.263/h263tables.c0000644000175000017500000001751112216332640020657 0ustar gawaingawain/* h263tables.c Huffman Tables for h.263 encoding. Copyright (c) 2003 Matthias Kramm 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 */ #include "h263tables.h" struct huffcode mcbpc_intra[] = { {"1",1, 0}, /*cbpc-00 mb type 3*/ {"001",3, 1}, /*cbpc-01 mb type 3*/ {"010",3, 2}, /*cbpc-10 mb type 3*/ {"011",3, 3}, /*cbpc-11 mb type 3*/ {"0001",4, 4}, /*cbpc-00 mb type 4*/ {"000001",6, 5}, /*cbpc-01 mb type 4*/ {"000010",6, 6}, /*cbpc-10 mb type 4*/ {"000011",6, 7}, /*cbpc-11 mb type 4*/ {"000000001",9, 8}, /* stuffing */ {0,0,0}, }; struct mcbpc_intra_params mcbpc_intra_params[] = {{0, 3, 0}, //00 {1, 3, 1}, //01 {2, 3, 2}, //10 {3, 3, 3}, //11 {4, 4, 0}, //00 {5, 4, 1}, //01 {6, 4, 2}, //10 {7, 4, 3}, //11 {8 -1, -1} }; struct huffcode mcbpc_inter[] = { {"1", 1, 0}, {"0011", 4, 1}, {"0010", 4 ,2}, {"000101", 6, 3}, {"011", 3, 4}, {"0000111", 7, 5}, {"0000110", 7, 6}, {"000000101", 9, 7}, {"010", 3, 8}, {"0000101", 7, 9}, {"0000100", 7, 10}, {"00000101", 8, 11}, {"00011", 5, 12}, {"00000100", 8, 13}, {"00000011", 8, 14}, {"0000011", 7, 15}, {"000100", 6, 16}, {"000000100", 9, 17}, {"000000011", 9, 18}, {"000000010", 9, 19}, {"000000001", 9, 20}, /*stuffing*/ /* h.263+ only {"00000000010", 11, 21}, {"0000000001100", 13, 22}, {"0000000001110", 13, 23}, {"0000000001111", 13, 24}, */ {0,0,0} }; struct mcbpc_inter_params mcbpc_inter_params[] = { {0, 0, 0}, {1, 0, 1}, {2, 0, 2}, {3, 0, 3}, {4, 1, 0}, {5, 1, 1}, {6, 1, 2}, {7, 1, 3}, {8, 2, 0}, {9, 2, 1}, {10, 2, 2}, {11, 2, 3}, {12, 3, 0}, {13, 3, 1}, {14, 3, 2}, {15, 3, 3}, {16, 4, 0}, {17, 4, 1}, {18, 4, 2}, {19, 4, 3}, {20, -1, -1}, //stuffing //{21, 5, 0}, {22, 5, 1}, {23, 5, 2}, {24, 5, 3}, //h.263+ only }; struct huffcode cbpy[] = { {"0011", 4, 0}, {"00101", 5, 1}, {"00100", 5, 2}, {"1001", 4, 3}, {"00011", 5, 4}, {"0111", 4, 5}, {"000010", 6, 6}, {"1011", 4, 7}, {"00010", 5, 8}, {"000011", 6, 9}, {"0101", 4, 10}, {"1010", 4, 11}, {"0100", 4, 12}, {"1000", 4, 13}, {"0110", 4, 14}, {"11", 2, 15}, {0,0,0} }; struct huffcode mvd[] = { {"0000000000101", 13, 0}, {"0000000000111", 13, 1}, {"000000000101", 12, 2}, {"000000000111", 12, 3}, {"000000001001", 12, 4}, {"000000001011", 12, 5}, {"000000001101", 12, 6}, {"000000001111", 12, 7}, {"00000001001", 11, 8}, {"00000001011", 11, 9}, {"00000001101", 11, 10}, {"00000001111", 11, 11}, {"00000010001", 11, 12}, {"00000010011", 11, 13}, {"00000010101", 11, 14}, {"00000010111", 11, 15}, {"00000011001", 11, 16}, {"00000011011", 11, 17}, {"00000011101", 11, 18}, {"00000011111", 11, 19}, {"00000100001", 11, 20}, {"00000100011", 11, 21}, {"0000010011", 10, 22}, {"0000010101", 10, 23}, {"0000010111", 10, 24}, {"00000111", 8, 25}, {"00001001", 8, 26}, {"00001011", 8, 27}, {"0000111", 7, 28}, {"00011", 5, 29}, {"0011", 4, 30}, {"011", 3, 31}, {"1", 1, 32}, {"010", 3, 33}, {"0010", 4, 34}, {"00010", 5, 35}, {"0000110", 7, 36}, {"00001010", 8, 37}, {"00001000", 8, 38}, {"00000110", 8, 39}, {"0000010110", 10, 40}, {"0000010100", 10, 41}, {"0000010010", 10, 42}, {"00000100010", 11, 43}, {"00000100000", 11, 44}, {"00000011110", 11, 45}, {"00000011100", 11, 46}, {"00000011010", 11, 47}, {"00000011000", 11, 48}, {"00000010110", 11, 49}, {"00000010100", 11, 50}, {"00000010010", 11, 51}, {"00000010000", 11, 52}, {"00000001110", 11, 53}, {"00000001100", 11, 54}, {"00000001010", 11, 55}, {"00000001000", 11, 56}, {"000000001110", 12, 57}, {"000000001100", 12, 58}, {"000000001010", 12, 59}, {"000000001000", 12, 60}, {"000000000110", 12, 61}, {"000000000100", 12, 62}, {"0000000000110", 13, 63}, {0,0,0}}; struct huffcode rle[] = { {"10", 2, 0}, {"1111", 4, 1}, {"010101", 6, 2}, {"0010111", 7, 3}, {"00011111", 8, 4}, {"000100101", 9, 5}, {"000100100", 9, 6}, {"0000100001", 10, 7}, {"0000100000", 10, 8}, {"00000000111", 11, 9}, {"00000000110", 11, 10}, {"00000100000", 11, 11}, {"110", 3, 12}, {"010100", 6, 13}, {"00011110", 8, 14}, {"0000001111", 10, 15}, {"00000100001", 11, 16}, {"000001010000", 12, 17}, {"1110", 4, 18}, {"00011101", 8, 19}, {"0000001110", 10, 20}, {"000001010001", 12, 21}, {"01101", 5, 22}, {"000100011", 9, 23}, {"0000001101", 10, 24}, {"01100", 5, 25}, {"000100010", 9, 26}, {"000001010010", 12, 27}, {"01011", 5, 28}, {"0000001100", 10, 29}, {"000001010011", 12, 30}, {"010011", 6, 31}, {"0000001011", 10, 32}, {"000001010100", 12, 33}, {"010010", 6, 34}, {"0000001010", 10, 35}, {"010001", 6, 36}, {"0000001001", 10, 37}, {"010000", 6, 38}, {"0000001000", 10, 39}, {"0010110", 7, 40}, {"000001010101", 12, 41}, {"0010101", 7, 42}, {"0010100", 7, 43}, {"00011100", 8, 44}, {"00011011", 8, 45}, {"000100001", 9, 46}, {"000100000", 9, 47}, {"000011111", 9, 48}, {"000011110", 9, 49}, {"000011101", 9, 50}, {"000011100", 9, 51}, {"000011011", 9, 52}, {"000011010", 9, 53}, {"00000100010", 11, 54}, {"00000100011", 11, 55}, {"000001010110", 12, 56}, {"000001010111", 12, 57}, {"0111", 4, 58}, {"000011001", 9, 59}, {"00000000101", 11, 60}, {"001111", 6, 61}, {"00000000100", 11, 62}, {"001110", 6, 63}, {"001101", 6, 64}, /* ?? */ {"001100", 6, 65}, {"0010011", 7, 66}, {"0010010", 7, 67}, {"0010001", 7, 68}, {"0010000", 7, 69}, {"00011010", 8, 70}, {"00011001", 8, 71}, {"00011000", 8, 72}, {"00010111", 8, 73}, {"00010110", 8, 74}, {"00010101", 8, 75}, {"00010100", 8, 76}, {"00010011", 8, 77}, {"000011000", 9, 78}, {"000010111", 9, 79}, {"000010110", 9, 80}, {"000010101", 9, 81}, {"000010100", 9, 82}, {"000010011", 9, 83}, {"000010010", 9, 84}, {"000010001", 9, 85}, {"0000000111", 10, 86}, {"0000000110", 10, 87}, {"0000000101", 10, 88}, {"0000000100", 10, 89}, {"00000100100", 11, 90}, {"00000100101", 11, 91}, {"00000100110", 11, 92}, {"00000100111", 11, 93}, {"000001011000", 12, 94}, {"000001011001", 12, 95}, {"000001011010", 12, 96}, {"000001011011", 12, 97}, {"000001011100", 12, 98}, {"000001011101", 12, 99}, {"000001011110", 12, 100}, {"000001011111", 12, 101}, {"0000011", 7, 102}, /*ESCAPE*/ {0,0,0} }; struct rle_params rle_params[] = {{0,0,0,1}, {1,0,0,2}, {2,0,0,3}, {3,0,0,4}, {4,0,0,5}, {5,0,0,6}, {6,0,0,7}, {7,0,0,8}, {8,0,0,9}, {9,0,0,10}, {10,0,0,11}, {11,0,0,12}, {12,0,1,1}, {13,0,1,2}, {14,0,1,3}, {15,0,1,4}, {16,0,1,5}, {17,0,1,6}, {18,0,2,1}, {19,0,2,2}, {20,0,2,3}, {21,0,2,4}, {22,0,3,1}, {23,0,3,2}, {24,0,3,3}, {25,0,4,1}, {26,0,4,2}, {27,0,4,3}, {28,0,5,1}, {29,0,5,2}, {30,0,5,3}, {31,0,6,1}, {32,0,6,2}, {33,0,6,3}, {34,0,7,1}, {35,0,7,2}, {36,0,8,1}, {37,0,8,2}, {38,0,9,1}, {39,0,9,2}, {40,0,10,1}, {41,0,10,2}, {42,0,11,1}, {43,0,12,1}, {44,0,13,1}, {45,0,14,1}, {46,0,15,1}, {47,0,16,1}, {48,0,17,1}, {49,0,18,1}, {50,0,19,1}, {51,0,20,1}, {52,0,21,1}, {53,0,22,1}, {54,0,23,1}, {55,0,24,1}, {56,0,25,1}, {57,0,26,1}, {58,1,0,1}, {59,1,0,2}, {60,1,0,3}, {61,1,1,1}, {62,1,1,2}, {63,1,2,1}, {64,1,3,1}, {65, 1,4,1}, {66,1,5,1}, {67,1,6,1}, {68,1,7,1}, {69,1,8,1}, {70,1,9,1}, {71,1,10,1}, {72,1,11,1}, {73,1,12,1}, {74,1,13,1}, {75,1,14,1}, {76,1,15,1}, {77,1,16,1}, {78,1,17,1}, {79,1,18,1}, {80,1,19,1}, {81,1,20,1}, {82,1,21,1}, {83,1,22,1}, {84,1,23,1}, {85,1,24,1}, {86,1,25,1}, {87,1,26,1}, {88,1,27,1}, {89,1,28,1}, {90,1,29,1}, {91,1,30,1}, {92,1,31,1}, {93,1,32,1}, {94,1,33,1}, {95,1,34,1}, {96,1,35,1}, {97,1,36,1}, {98,1,37,1}, {99,1,38,1}, {100,1,39,1}, {101,1,40,1}, {102,-1, -1, -1} }; swftools_0.9.2+git20130725.orig/lib/h.263/swfvideo.c0000644000175000017500000012124112216332640020624 0ustar gawaingawain/* swfvideo.c Routines for handling h.263 video tags Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #include #include #include #include "../rfxswf.h" #include "h263tables.h" #include "dct.h" /* TODO: - use prepare* / write* in encode_IFrame_block - check whether mvd steps of 2 lead to (much) smaller results */ #ifdef MAIN U16 totalframes = 0; #endif void swf_SetVideoStreamDefine(TAG*tag, VIDEOSTREAM*stream, U16 frames, U16 width, U16 height) { #ifdef MAIN totalframes = frames; #endif memset(stream, 0, sizeof(VIDEOSTREAM)); stream->olinex = width; stream->owidth = width; stream->oheight = height; width+=15;width&=~15; height+=15;height&=~15; stream->linex = width; stream->width = width; stream->height = height; stream->bbx = width/16; stream->bby = height/16; stream->current = (YUV*)rfx_calloc(width*height*sizeof(YUV)); stream->oldpic = (YUV*)rfx_calloc(width*height*sizeof(YUV)); stream->mvdx = (int*)rfx_alloc(stream->bbx*stream->bby*sizeof(int)); stream->mvdy = (int*)rfx_alloc(stream->bbx*stream->bby*sizeof(int)); stream->do_motion = 0; assert((stream->width&15) == 0); assert((stream->height&15) == 0); assert((stream->bbx*16) == stream->width); assert((stream->bby*16) == stream->height); swf_SetU16(tag, frames); swf_SetU16(tag, width); swf_SetU16(tag, height); //swf_SetU8(tag, 1); /* smoothing on */ swf_SetU8(tag, 0); /* smoothing off */ swf_SetU8(tag, 2); /* codec = h.263 sorenson spark */ } void swf_VideoStreamClear(VIDEOSTREAM*stream) { rfx_free(stream->oldpic);stream->oldpic = 0; rfx_free(stream->current);stream->current = 0; rfx_free(stream->mvdx);stream->mvdx=0; rfx_free(stream->mvdy);stream->mvdy=0; } typedef struct _block_t { int y1[64]; int y2[64]; int y3[64]; int y4[64]; int u[64]; int v[64]; } block_t; static inline int truncate256(int a) { if(a>255) return 255; if(a<0) return 0; return a; } static void getregion(block_t* bb, YUV*pic, int posx, int posy, int linex) { YUV*p1; YUV*p2; int i=0; int x,y; posx*=16; posy*=16; p1 = &pic[posy*linex+posx]; p2 = p1; for(y=0;y<8;y++) { for(x=0;x<8;x++) { bb->u[i] = (p2[x*2].u + p2[x*2+1].u + p2[linex+x*2].u + p2[linex+x*2+1].u)/4; bb->v[i] = (p2[x*2].v + p2[x*2+1].v + p2[linex+x*2].v + p2[linex+x*2+1].v)/4; bb->y1[i] = p1[x].y; bb->y2[i] = p1[x+8].y; bb->y3[i] = p1[linex*8+x].y; bb->y4[i] = p1[linex*8+x+8].y; i++; } p1+=linex; p2+=linex*2; } } /* This function is pretty complex. Let's hope it works correctly */ static void getmvdregion(block_t* bb, YUV*pic, int posx, int posy, int mvdx, int mvdy, int linex) { YUV*p1; YUV*p2; int yy=0,uv=0; int x,y; int yhp = 0, uvhp=0; int uvposx, uvposy; posx = posx*16 + ((mvdx&~1)/2); //works also for negative mvdx (unlike mvdx/2) posy = posy*16 + ((mvdy&~1)/2); p1 = &pic[posy*linex+posx]; p2 = &pic[(posy&~1)*linex+(posx&~1)]; uvhp = ((mvdx&1)|((mvdx>>1)&1))|((mvdy&2)|((mvdy&1)<<1)); yhp = ((mvdy&1)<<1|(mvdx&1)); /* y */ if(yhp==0 || yhp==2) { for(y=0;y<8;y++) { for(x=0;x<8;x++) { bb->y1[yy] = p1[x].y; bb->y2[yy] = p1[x+8].y; bb->y3[yy] = p1[linex*8+x].y; bb->y4[yy] = p1[linex*8+x+8].y; yy++; } p1+=linex; if(yhp==2) { yy-=8; for(x=0;x<8;x++) { bb->y1[yy] += p1[x].y; bb->y1[yy] /= 2; bb->y2[yy] += p1[x+8].y; bb->y2[yy] /= 2; bb->y3[yy] += p1[linex*8+x].y; bb->y3[yy] /= 2; bb->y4[yy] += p1[linex*8+x+8].y; bb->y4[yy] /= 2; yy++; } } } } else if(yhp==1 || yhp==3) { for(y=0;y<8;y++) { for(x=0;x<8;x++) { bb->y1[yy] = (p1[x].y + p1[x+1].y); bb->y2[yy] = (p1[x+8].y + p1[x+8+1].y); bb->y3[yy] = (p1[linex*8+x].y + p1[linex*8+x+1].y); bb->y4[yy] = (p1[linex*8+x+8].y + p1[linex*8+x+8+1].y); yy++; } yy-=8; p1+=linex; if(yhp==3) { for(x=0;x<8;x++) { bb->y1[yy] += (p1[x].y + p1[x+1].y); bb->y1[yy]/=4; bb->y2[yy] += (p1[x+8].y + p1[x+8+1].y); bb->y2[yy]/=4; bb->y3[yy] += (p1[linex*8+x].y + p1[linex*8+x+1].y); bb->y3[yy]/=4; bb->y4[yy] += (p1[linex*8+x+8].y + p1[linex*8+x+8+1].y); bb->y4[yy]/=4; yy++; } } else { for(x=0;x<8;x++) { bb->y1[yy]/=2; bb->y2[yy]/=2; bb->y3[yy]/=2; bb->y4[yy]/=2; yy++; } } } } /* u,v */ if(uvhp==0 || uvhp==2) { for(y=0;y<8;y++) { for(x=0;x<8;x++) { bb->u[uv] = (p2[x*2].u + p2[x*2+1].u + p2[linex+x*2].u + p2[linex+x*2+1].u)/4; bb->v[uv] = (p2[x*2].v + p2[x*2+1].v + p2[linex+x*2].v + p2[linex+x*2+1].v)/4; uv++; } p2+=linex*2; if(uvhp==2) { uv-=8; for(x=0;x<8;x++) { bb->u[uv] += (p2[x*2].u + p2[x*2+1].u + p2[linex+x*2].u + p2[linex+x*2+1].u)/4; bb->v[uv] += (p2[x*2].v + p2[x*2+1].v + p2[linex+x*2].v + p2[linex+x*2+1].v)/4; bb->u[uv] /= 2; bb->v[uv] /= 2; uv++; } } } } else /* uvhp==1 || uvhp==3 */ { for(y=0;y<8;y++) { for(x=0;x<8;x++) { bb->u[uv] = ((p2[x*2].u + p2[x*2+1].u + p2[linex+x*2].u + p2[linex+x*2+1].u)/4+ (p2[x*2+2].u + p2[x*2+1+2].u + p2[linex+x*2+2].u + p2[linex+x*2+1+2].u)/4); bb->v[uv] = ((p2[x*2].v + p2[x*2+1].v + p2[linex+x*2].v + p2[linex+x*2+1].v)/4+ (p2[x*2+2].v + p2[x*2+1+2].v + p2[linex+x*2+2].v + p2[linex+x*2+1+2].v)/4); uv++; } uv-=8; p2+=linex*2; if(uvhp==3) { for(x=0;x<8;x++) { bb->u[uv] += ((p2[x*2].u + p2[x*2+1].u + p2[linex+x*2].u + p2[linex+x*2+1].u)/4+ (p2[x*2+2].u + p2[x*2+1+2].u + p2[linex+x*2+2].u + p2[linex+x*2+1+2].u)/4); bb->v[uv] += ((p2[x*2].v + p2[x*2+1].v + p2[linex+x*2].v + p2[linex+x*2+1].v)/4+ (p2[x*2+2].v + p2[x*2+1+2].v + p2[linex+x*2+2].v + p2[linex+x*2+1+2].v)/4); bb->u[uv] /= 4; bb->v[uv] /= 4; uv++; } } else { for(x=0;x<8;x++) { bb->u[uv] /= 2; bb->v[uv] /= 2; uv++; } } } } } static void rgb2yuv(YUV*dest, RGBA*src, int dlinex, int slinex, int width, int height) { int x,y; for(y=0;y>8; dest[y*dlinex+x].y = (r*((int)( 0.299*256)) + g*((int)( 0.587*256)) + b*((int)( 0.114 *256)))>>8; dest[y*dlinex+x].u = (r*((int)(-0.169*256)) + g*((int)(-0.332*256)) + b*((int)( 0.500 *256))+ 128*256)>>8; dest[y*dlinex+x].v = (r*((int)( 0.500*256)) + g*((int)(-0.419*256)) + b*((int)(-0.0813*256))+ 128*256)>>8; } } } static void copyregion(VIDEOSTREAM*s, YUV*dest, YUV*src, int bx, int by) { YUV*p1 = &dest[by*s->linex*16+bx*16]; YUV*p2 = &src[by*s->linex*16+bx*16]; int y; for(y=0;y<16;y++) { memcpy(p1, p2, 16*sizeof(YUV)); p1+=s->linex;p2+=s->linex; } } static void yuv2rgb(RGBA*dest, YUV*src, int linex, int width, int height) { int x,y; for(y=0;y>8)); dest[y*linex+x].g = truncate256(yy - ((88*(u-128)+183*(v-128))>>8)); dest[y*linex+x].b = truncate256(yy + ((455 * (u-128))>>8)); } } } static void copy_block_pic(VIDEOSTREAM*s, YUV*dest, block_t*b, int bx, int by) { YUV*p1 = &dest[(by*16)*s->linex+bx*16]; YUV*p2 = &dest[(by*16+8)*s->linex+bx*16]; int x,y; for(y=0;y<8;y++) { for(x=0;x<8;x++) { int u,v,yy; p1[x+0].u = b->u[(y/2)*8+(x/2)]; p1[x+0].v = b->v[(y/2)*8+(x/2)]; p1[x+0].y = b->y1[y*8+x]; p1[x+8].u = b->u[(y/2)*8+(x/2)+4]; p1[x+8].v = b->v[(y/2)*8+(x/2)+4]; p1[x+8].y = b->y2[y*8+x]; p2[x+0].u = b->u[(y/2+4)*8+(x/2)]; p2[x+0].v = b->v[(y/2+4)*8+(x/2)]; p2[x+0].y = b->y3[y*8+x]; p2[x+8].u = b->u[(y/2+4)*8+(x/2)+4]; p2[x+8].v = b->v[(y/2+4)*8+(x/2)+4]; p2[x+8].y = b->y4[y*8+x]; } p1+=s->linex; p2+=s->linex; } } static int compare_pic_pic(VIDEOSTREAM*s, YUV*pp1, YUV*pp2, int bx, int by) { int linex = s->width; YUV*p1 = &pp1[by*linex*16+bx*16]; YUV*p2 = &pp2[by*linex*16+bx*16]; int diffy=0, diffuv = 0; int x,y; for(y=0;y<16;y++) { for(x=0;x<16;x++) { YUV*m = &p1[x]; YUV*n = &p2[x]; int y = m->y - n->y; int u = m->u - n->u; int v = m->v - n->v; diffy += abs(y); diffuv += abs(u)+abs(v); } p1+=linex; p2+=linex; } return diffy + diffuv/4; } static int compare_pic_block(VIDEOSTREAM*s, block_t* b, YUV*pic, int bx, int by) { int linex = s->width; YUV*y1 = &pic[(by*2)*linex*8+bx*16]; YUV*y2 = &pic[(by*2)*linex*8+bx*16+8]; YUV*y3 = &pic[(by*2+1)*linex*8+bx*16]; YUV*y4 = &pic[(by*2+1)*linex*8+bx*16+8]; YUV*uv1 = y1; YUV*uv2 = &y1[linex]; int diffy=0, diffuv = 0; int x,y; for(y=0;y<8;y++) { for(x=0;x<8;x++) { int yy,u1,v1,u2,v2,u3,v3,u4,v4; int y8x = y*8+x; yy = y1[x].y - b->y1[y8x]; diffy += abs(yy); yy = y2[x].y - b->y2[y8x]; diffy += abs(yy); yy = y3[x].y - b->y3[y8x]; diffy += abs(yy); yy = y4[x].y - b->y4[y8x]; diffy += abs(yy); u1 = uv1[x*2].u - b->u[y8x]; v1 = uv1[x*2].v - b->v[y8x]; u2 = uv1[x*2+1].u - b->u[y8x]; v2 = uv1[x*2+1].v - b->v[y8x]; u3 = uv2[x*2].u - b->u[y8x]; v3 = uv2[x*2].v - b->v[y8x]; u4 = uv2[x*2+1].u - b->u[y8x]; v4 = uv2[x*2+1].v - b->v[y8x]; diffuv += (abs(u1)+abs(v1)); diffuv += (abs(u2)+abs(v2)); diffuv += (abs(u3)+abs(v3)); diffuv += (abs(u4)+abs(v4)); } y1+=linex; y2+=linex; y3+=linex; y4+=linex; uv1+=linex*2; uv2+=linex*2; } return diffy + diffuv/4; } static inline int valtodc(int val) { assert(val>=0); /* table 12/h.263 */ //val+=4; //round val/=8; /* TODO: what to do for zero values? skip the block? */ if(val==0) return 1; if(val==128) return 255; if(val>254) return 254; return val; } static int dctoval(int dc) { int val; assert(dc>0); assert(dc!=128); assert(dc<256); /* table 12/h.263 */ val = dc*8; if(val == 255*8) val = 128*8; return val; } /* TODO: we could also just let the caller pass only the string table[index] here */ static int codehuffman(TAG*tag, struct huffcode*table, int index) { /* TODO: !optimize! */ int i=0; while(table[index].code[i]) { if(table[index].code[i]=='0') swf_SetBits(tag, 0, 1); else swf_SetBits(tag, 1, 1); i++; } return i; } static void quantize8x8(int*src, int*dest, int has_dc, int quant) { int t,pos=0; double q = 1.0/(quant*2); if(has_dc) { dest[0] = valtodc((int)src[0]); /*DC*/ pos++; } for(t=pos;t<64;t++) { //dest[t] = (int)src[t]; /* exact: if(quant&1){dest[t] = (dest[t]/quant - 1)/2;}else{dest[t] = ((dest[t]+1)/quant - 1)/2;} */ //if(quant&1){dest[t] = (dest[t]/quant - 1)/2;}else{dest[t] = ((dest[t]+1)/quant - 1)/2;} //dest[t] = dest[t]/(quant*2); dest[t] = (int)(src[t]*q); /* TODO: warn if this happens- the video will be buggy */ if(dest[t]>127) dest[t]=127; if(dest[t]<-127) dest[t]=-127; } } static void dequantize8x8(int*b, int has_dc, int quant) { int t,pos=0; if(has_dc) { b[0] = dctoval(b[0]); //DC pos++; } for(t=pos;t<64;t++) { if(b[t]) { int sign = 0; if(b[t]<0) { b[t] = -b[t]; sign = 1; } if(quant&1) { b[t] = quant*(2*b[t]+1); //-7,8,24,40 } else { b[t] = quant*(2*b[t]+1)-1; //-8,7,23,39 } if(sign) b[t] = -b[t]; } /* paragraph 6.2.2, "clipping of reconstruction levels": */ if(b[t]>2047) b[t]=2047; if(b[t]<-2048) b[t]=-2048; } } static int hascoef(int*b, int has_dc) { int t; int pos=0; if(has_dc) pos++; for(t=pos;t<64;t++) { if(b[t]) return 1; } return 0; } static int coefbits8x8(int*bb, int has_dc) { int t; int pos=0; int bits=0; int last; if(has_dc) { bits+=8; pos++; } for(last=63;last>=pos;last--) { if(bb[last]) break; } if(last < pos) return bits; while(1) { int run=0, level=0, islast=0,t; while(!bb[pos] && pos=pos;last--) { /* TODO: we could leave out small coefficients after a certain point (32?) */ if(bb[last]) break; } /* blocks without coefficients should not be included in the cbpy/cbpc patterns: */ assert(bb[last]); while(1) { int run=0; int level=0; int islast=0; int sign=0; int t; while(!bb[pos] && pos127) { fprintf(stderr, "Warning: Overflow- Level %d at pos %d\n", level, pos); if(level<-127) level=-127; if(level>127) level=127; } assert(level); assert(level>=-127); assert(level<=127); //TODO: known to fail for pos=0 (with custom frames?) swf_SetBits(tag, islast, 1); swf_SetBits(tag, run, 6); swf_SetBits(tag, level, 8); //FIXME: fixme?? bits += 1 + 6 + 8; } if(islast) break; pos++; } } return bits; } static void quantize(block_t*fb, block_t*b, int has_dc, int quant) { quantize8x8(fb->y1, b->y1, has_dc, quant); quantize8x8(fb->y2, b->y2, has_dc, quant); quantize8x8(fb->y3, b->y3, has_dc, quant); quantize8x8(fb->y4, b->y4, has_dc, quant); quantize8x8(fb->u, b->u, has_dc, quant); quantize8x8(fb->v, b->v, has_dc, quant); } static void dodct(block_t*fb) { dct(fb->y1); dct(fb->y2); dct(fb->y3); dct(fb->y4); dct(fb->u); dct(fb->v); zigzag(fb->y1); zigzag(fb->y2); zigzag(fb->y3); zigzag(fb->y4); zigzag(fb->u); zigzag(fb->v); } static void dodctandquant(block_t*fb, block_t*b, int has_dc, int quant) { int t; if(has_dc) { dodct(fb); quantize(fb,b,has_dc,quant); return; } preparequant(quant); dct2(fb->y1,b->y1); dct2(fb->y2,b->y2); dct2(fb->y3,b->y3); dct2(fb->y4,b->y4); dct2(fb->u,b->u); dct2(fb->v,b->v); for(t=0;t<64;t++) { /* prepare for encoding (only values in (-127..-1,1..127) are allowed as non-zero, non-dc values */ if(b->y1[t]<-127) b->y1[t]=-127; if(b->y2[t]<-127) b->y2[t]=-127; if(b->y3[t]<-127) b->y3[t]=-127; if(b->y4[t]<-127) b->y4[t]=-127; if(b->u[t]<-127) b->u[t]=-127; if(b->v[t]<-127) b->v[t]=-127; if(b->y1[t]>127) b->y1[t]=127; if(b->y2[t]>127) b->y2[t]=127; if(b->y3[t]>127) b->y3[t]=127; if(b->y4[t]>127) b->y4[t]=127; if(b->u[t]>127) b->u[t]=127; if(b->v[t]>127) b->v[t]=127; } } static void doidct(block_t*b) { block_t fb; int t; for(t=0;t<64;t++) { fb.y1[t] = b->y1[zigzagtable[t]]; fb.y2[t] = b->y2[zigzagtable[t]]; fb.y3[t] = b->y3[zigzagtable[t]]; fb.y4[t] = b->y4[zigzagtable[t]]; fb.u[t] = b->u[zigzagtable[t]]; fb.v[t] = b->v[zigzagtable[t]]; } idct(fb.y1); idct(fb.y2); idct(fb.y3); idct(fb.y4); idct(fb.u); idct(fb.v); memcpy(b, &fb, sizeof(block_t)); } static void truncateblock(block_t*b) { int t; for(t=0;t<64;t++) { b->y1[t] = truncate256(b->y1[t]); b->y2[t] = truncate256(b->y2[t]); b->y3[t] = truncate256(b->y3[t]); b->y4[t] = truncate256(b->y4[t]); b->u[t] = truncate256(b->u[t]); b->v[t] = truncate256(b->v[t]); } } static void dequantize(block_t*b, int has_dc, int quant) { dequantize8x8(b->y1, has_dc, quant); dequantize8x8(b->y2, has_dc, quant); dequantize8x8(b->y3, has_dc, quant); dequantize8x8(b->y4, has_dc, quant); dequantize8x8(b->u, has_dc, quant); dequantize8x8(b->v, has_dc, quant); } static void getblockpatterns(block_t*b, int*cbpybits,int*cbpcbits, int has_dc) { *cbpybits = 0; *cbpcbits = 0; *cbpybits|=hascoef(b->y1, has_dc)*8; *cbpybits|=hascoef(b->y2, has_dc)*4; *cbpybits|=hascoef(b->y3, has_dc)*2; *cbpybits|=hascoef(b->y4, has_dc)*1; *cbpcbits|=hascoef(b->u, has_dc)*2; *cbpcbits|=hascoef(b->v, has_dc)*1; } static void setQuant(TAG*tag, int dquant) { int code = 0; /* 00 01 10 11 -1 -2 +1 +2 */ if(dquant == -1) { swf_SetBits(tag, 0x0, 2); } else if(dquant == -2) { swf_SetBits(tag, 0x1, 2); } else if(dquant == +1) { swf_SetBits(tag, 0x2, 2); } else if(dquant == +2) { swf_SetBits(tag, 0x3, 2); } else { assert(0*strlen("invalid dquant")); } } static void change_quant(int quant, int*dquant) { /* TODO */ *dquant = 0; } static void yuvdiff(block_t*a, block_t*b) { int t; for(t=0;t<64;t++) { a->y1[t] = (a->y1[t] - b->y1[t]); a->y2[t] = (a->y2[t] - b->y2[t]); a->y3[t] = (a->y3[t] - b->y3[t]); a->y4[t] = (a->y4[t] - b->y4[t]); a->u[t] = (a->u[t] - b->u[t]); a->v[t] = (a->v[t] - b->v[t]); } } static void predictmvd(VIDEOSTREAM*s, int bx, int by, int*px, int*py) { int i1,i2; int x1,y1,x2,y2,x3,y3; int x4,y4,p; if(bx) {x1=s->mvdx[by*s->bbx+bx-1]; y1=s->mvdy[by*s->bbx+bx-1]; } else {x1=y1=0;} if(by) {x2=s->mvdx[(by-1)*s->bbx+bx]; y2=s->mvdy[(by-1)*s->bbx+bx]; if(bxbbx-1) { x3=s->mvdx[(by-1)*s->bbx+bx+1]; y3=s->mvdy[(by-1)*s->bbx+bx+1]; } else { x3=y3=0; } } else {x2=x3=x1;y2=y3=y1;} if((x1 <= x2 && x2 <= x3) || (x3 <= x2 && x2 <= x1)) { x4=x2; } else if((x2 <= x1 && x1 <= x3) || (x3 <= x1 && x1 <= x2)) { x4=x1; } else if((x1 <= x3 && x3 <= x2) || (x2 <= x3 && x3 <= x1)) { x4=x3; } else { x4=0; assert(x4); } if((y1 <= y2 && y2 <= y3) || (y3 <= y2 && y2 <= y1)) { y4=y2; } else if((y2 <= y1 && y1 <= y3) || (y3 <= y1 && y1 <= y2)) { y4=y1; } else if((y1 <= y3 && y3 <= y2) || (y2 <= y3 && y3 <= y1)) { y4=y3; } else { y4=0; assert(y4); } *px = x4; *py = y4; assert((x4>=-32 && x4<=31) && (y4>=-32 && y4<=31)); } static inline int mvd2index(int px, int py, int x, int y, int xy) { if((x<-32 && x>31) || (y<-32 && y>31)) fprintf(stderr, "(%d,%d)\n", x,y); assert((x>=-32 && x<=31) && (y>=-32 && y<=31)); //assert((x&1)==0 && (y&1)==0);//for now //assert((x&2)==0 && (y&2)==0);//for now(2) x-=px; y-=py; if(xy) x=y; x+=32; /* (x&63) */ if(x>63) x-=64; if(x<0) x+=64; assert(x>=0 && x<64); return x; } typedef struct _iblockdata_t { block_t b; //transformed quantized coefficients block_t reconstruction; int bits; int bx,by; struct huffcode*ctable; //table to use for chrominance encoding (different for i-frames) int iframe; // 1 if this is part of an iframe } iblockdata_t; typedef struct _mvdblockdata_t { block_t b; block_t fbold; block_t reconstruction; int xindex; int yindex; int movex; int movey; int bits; int bx,by; } mvdblockdata_t; void prepareIBlock(VIDEOSTREAM*s, iblockdata_t*data, int bx, int by, block_t* fb, int*bits, int iframe) { /* consider I-block */ block_t fb_i; block_t b; int y,c; struct huffcode*ctable; data->bx = bx; data->by = by; data->iframe = iframe; if(!iframe) { data->ctable = &mcbpc_inter[3*4]; } else { data->ctable = &mcbpc_intra[0]; } memcpy(&fb_i, fb, sizeof(block_t)); dodctandquant(&fb_i, &data->b, 1, s->quant); getblockpatterns(&data->b, &y, &c, 1); *bits = 0; if(!data->iframe) { *bits += 1; //cod } *bits += data->ctable[c].len; *bits += cbpy[y].len; *bits += coefbits8x8(data->b.y1, 1); *bits += coefbits8x8(data->b.y2, 1); *bits += coefbits8x8(data->b.y3, 1); *bits += coefbits8x8(data->b.y4, 1); *bits += coefbits8x8(data->b.u, 1); *bits += coefbits8x8(data->b.v, 1); data->bits = *bits; /* -- reconstruction -- */ memcpy(&data->reconstruction,&data->b,sizeof(block_t)); dequantize(&data->reconstruction, 1, s->quant); doidct(&data->reconstruction); truncateblock(&data->reconstruction); } int writeIBlock(VIDEOSTREAM*s, TAG*tag, iblockdata_t*data) { int c = 0, y = 0; int has_dc=1; int bits = 0; block_t b; getblockpatterns(&data->b, &y, &c, has_dc); if(!data->iframe) { swf_SetBits(tag,0,1); bits += 1; // COD } bits += codehuffman(tag, data->ctable, c); bits += codehuffman(tag, cbpy, y); /* luminance */ bits += encode8x8(tag, data->b.y1, has_dc, y&8); bits += encode8x8(tag, data->b.y2, has_dc, y&4); bits += encode8x8(tag, data->b.y3, has_dc, y&2); bits += encode8x8(tag, data->b.y4, has_dc, y&1); /* chrominance */ bits += encode8x8(tag, data->b.u, has_dc, c&2); bits += encode8x8(tag, data->b.v, has_dc, c&1); copy_block_pic(s, s->current, &data->reconstruction, data->bx, data->by); assert(data->bits == bits); return bits; } int getmvdbits(VIDEOSTREAM*s,block_t*fb, int bx,int by,int hx,int hy) { block_t b; block_t fbold; block_t fbdiff; int bits = 0; memcpy(&fbdiff, fb, sizeof(block_t)); getmvdregion(&fbold, s->oldpic, bx, by, hx, hy, s->linex); yuvdiff(&fbdiff, &fbold); dodctandquant(&fbdiff, &b, 0, s->quant); bits += coefbits8x8(b.y1, 0); bits += coefbits8x8(b.y2, 0); bits += coefbits8x8(b.y3, 0); bits += coefbits8x8(b.y4, 0); bits += coefbits8x8(b.u, 0); bits += coefbits8x8(b.v, 0); return bits; } void prepareMVDBlock(VIDEOSTREAM*s, mvdblockdata_t*data, int bx, int by, block_t* fb, int*bits) { /* consider mvd(x,y)-block */ int t; int y,c; block_t fbdiff; int predictmvdx; int predictmvdy; data->bx = bx; data->by = by; predictmvd(s,bx,by,&predictmvdx,&predictmvdy); data->bits = 65535; data->movex=0; data->movey=0; if(s->do_motion) { int hx,hy; int bestx=0,besty=0,bestbits=65536; int startx=-32,endx=31; int starty=-32,endy=31; if(!bx) startx=0; if(!by) starty=0; if(bx==s->bbx-1) endx=0; if(by==s->bby-1) endy=0; for(hx=startx;hx<=endx;hx+=4) for(hy=starty;hy<=endy;hy+=4) { int bits = 0; bits = getmvdbits(s,fb,bx,by,hx,hy); if(bits startx) startx = bestx-3; if(besty-3 > starty) starty = besty-3; if(bestx+3 < endx) endx = bestx+3; if(besty+3 < endy) endy = besty+3; for(hx=startx;hx<=endx;hx++) for(hy=starty;hy<=endy;hy++) { int bits = 0; bits = getmvdbits(s,fb,bx,by,hx,hy); if(bitsmovex = bestx; data->movey = besty; } memcpy(&fbdiff, fb, sizeof(block_t)); getmvdregion(&data->fbold, s->oldpic, bx, by, data->movex, data->movey, s->linex); yuvdiff(&fbdiff, &data->fbold); dodctandquant(&fbdiff, &data->b, 0, s->quant); getblockpatterns(&data->b, &y, &c, 0); data->xindex = mvd2index(predictmvdx, predictmvdy, data->movex, data->movey, 0); data->yindex = mvd2index(predictmvdx, predictmvdy, data->movex, data->movey, 1); *bits = 1; //cod *bits += mcbpc_inter[0*4+c].len; *bits += cbpy[y^15].len; *bits += mvd[data->xindex].len; // (0,0) *bits += mvd[data->yindex].len; *bits += coefbits8x8(data->b.y1, 0); *bits += coefbits8x8(data->b.y2, 0); *bits += coefbits8x8(data->b.y3, 0); *bits += coefbits8x8(data->b.y4, 0); *bits += coefbits8x8(data->b.u, 0); *bits += coefbits8x8(data->b.v, 0); data->bits = *bits; /* -- reconstruction -- */ memcpy(&data->reconstruction, &data->b, sizeof(block_t)); dequantize(&data->reconstruction, 0, s->quant); doidct(&data->reconstruction); for(t=0;t<64;t++) { data->reconstruction.y1[t] = truncate256(data->reconstruction.y1[t] + (int)data->fbold.y1[t]); data->reconstruction.y2[t] = truncate256(data->reconstruction.y2[t] + (int)data->fbold.y2[t]); data->reconstruction.y3[t] = truncate256(data->reconstruction.y3[t] + (int)data->fbold.y3[t]); data->reconstruction.y4[t] = truncate256(data->reconstruction.y4[t] + (int)data->fbold.y4[t]); data->reconstruction.u[t] = truncate256(data->reconstruction.u[t] + (int)data->fbold.u[t]); data->reconstruction.v[t] = truncate256(data->reconstruction.v[t] + (int)data->fbold.v[t]); } } int writeMVDBlock(VIDEOSTREAM*s, TAG*tag, mvdblockdata_t*data) { int c = 0, y = 0; int t; int has_dc=0; // mvd w/o mvd24 /* mvd (0,0) block (mode=0) */ int mode = 0; int bx = data->bx; int by = data->by; int bits = 0; getblockpatterns(&data->b, &y, &c, has_dc); swf_SetBits(tag,0,1); bits += 1; // COD bits += codehuffman(tag, mcbpc_inter, mode*4+c); bits += codehuffman(tag, cbpy, y^15); /* vector */ bits += codehuffman(tag, mvd, data->xindex); bits += codehuffman(tag, mvd, data->yindex); /* luminance */ bits += encode8x8(tag, data->b.y1, has_dc, y&8); bits += encode8x8(tag, data->b.y2, has_dc, y&4); bits += encode8x8(tag, data->b.y3, has_dc, y&2); bits += encode8x8(tag, data->b.y4, has_dc, y&1); /* chrominance */ bits += encode8x8(tag, data->b.u, has_dc, c&2); bits += encode8x8(tag, data->b.v, has_dc, c&1); s->mvdx[by*s->bbx+bx] = data->movex; s->mvdy[by*s->bbx+bx] = data->movey; copy_block_pic(s, s->current, &data->reconstruction, data->bx, data->by); assert(data->bits == bits); return bits; } static int encode_PFrame_block(TAG*tag, VIDEOSTREAM*s, int bx, int by) { block_t fb; int diff1,diff2; int bits_i; int bits_vxy; iblockdata_t iblock; mvdblockdata_t mvdblock; getregion(&fb, s->current, bx, by, s->linex); prepareIBlock(s, &iblock, bx, by, &fb, &bits_i, 0); /* encoded last frame <=> original current block: */ diff1 = compare_pic_pic(s, s->current, s->oldpic, bx, by); /* encoded current frame <=> original current block: */ diff2 = compare_pic_block(s, &iblock.reconstruction, s->current, bx, by); if(diff1 <= diff2) { swf_SetBits(tag, 1,1); /* cod=1, block skipped */ /* copy the region from the last frame so that we have a complete reconstruction */ copyregion(s, s->current, s->oldpic, bx, by); return 1; } prepareMVDBlock(s, &mvdblock, bx, by, &fb, &bits_vxy); if(bits_i > bits_vxy) { return writeMVDBlock(s, tag, &mvdblock); } else { return writeIBlock(s, tag, &iblock); } } /* should be called encode_IFrameBlock */ static void encode_IFrame_block(TAG*tag, VIDEOSTREAM*s, int bx, int by) { block_t fb; iblockdata_t data; int bits; getregion(&fb, s->current, bx, by, s->width); prepareIBlock(s, &data, bx, by, &fb, &bits, 1); writeIBlock(s, tag, &data); } #ifdef MAIN static int bmid = 0; void setdbgpic(TAG*tag, RGBA*pic, int width, int height) { MATRIX m; tag = tag->prev; tag = swf_InsertTag(tag,ST_REMOVEOBJECT2); swf_SetU16(tag, 133); tag = swf_InsertTag(tag, ST_DEFINEBITSLOSSLESS); swf_SetU16(tag, 1000+bmid); swf_SetLosslessBits(tag, width, height, (void*)pic, BMF_32BIT); tag = swf_InsertTag(tag, ST_DEFINESHAPE); swf_SetU16(tag, 2000+bmid); swf_ShapeSetBitmapRect(tag, 1000+bmid, width, height); tag = swf_InsertTag(tag,ST_PLACEOBJECT2); swf_GetMatrix(0,&m); m.tx = width*20; swf_ObjectPlace(tag, 2000+bmid, 133, &m, 0, 0); bmid++; } #endif #define TYPE_IFRAME 0 #define TYPE_PFRAME 1 static void writeHeader(TAG*tag, int width, int height, int frame, int quant, int type) { U32 i32; swf_SetU16(tag, frame); swf_SetBits(tag, 1, 17); /* picture start code*/ swf_SetBits(tag, 0, 5); /* version=0, version 1 would optimize rle behaviour*/ swf_SetBits(tag, frame, 8); /* time reference */ /* write dimensions, taking advantage of some predefined sizes if the opportunity presents itself */ i32 = width<<16|height; switch(i32) { case 352<<16|288: swf_SetBits(tag, 2, 3);break; case 176<<16|144: swf_SetBits(tag, 3, 3);break; case 128<<16|96: swf_SetBits(tag, 4, 3);break; case 320<<16|240: swf_SetBits(tag, 5, 3);break; case 160<<16|120: swf_SetBits(tag, 6, 3);break; default: if(width>255 || height>255) { swf_SetBits(tag, 1, 3); swf_SetBits(tag, width, 16); swf_SetBits(tag, height, 16); } else { swf_SetBits(tag, 0, 3); swf_SetBits(tag, width, 8); swf_SetBits(tag, height, 8); } } swf_SetBits(tag, type, 2); /* I-Frame or P-Frame */ swf_SetBits(tag, 0, 1); /* No deblock filter */ assert(quant>0); assert(quant<32); swf_SetBits(tag, quant, 5); /* quantizer (1-31), may be updated later on*/ swf_SetBits(tag, 0, 1); /* No extra info */ } void swf_SetVideoStreamIFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant) { int bx, by; if(quant<1) quant=1; if(quant>31) quant=31; s->quant = quant; writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_IFRAME); /* fixme: should fill with 0,128,128, not 0,0,0 */ memset(s->current, 0, s->linex*s->height*sizeof(YUV)); rgb2yuv(s->current, pic, s->linex, s->olinex, s->owidth, s->oheight); for(by=0;bybby;by++) { for(bx=0;bxbbx;bx++) { encode_IFrame_block(tag, s, bx, by); } } s->frame++; memcpy(s->oldpic, s->current, s->width*s->height*sizeof(YUV)); } void swf_SetVideoStreamBlackFrame(TAG*tag, VIDEOSTREAM*s) { int bx, by; int quant = 31; int x,y; s->quant = quant; writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_IFRAME); for(y=0;yheight;y++) for(x=0;xwidth;x++) { s->current[y*s->width+x].y = 0; s->current[y*s->width+x].u = 128; s->current[y*s->width+x].v = 128; } for(x=0;x<16;x++) for(y=0;y<16;y++) { s->current[y*s->width+x].y = 64; s->current[y*s->width+x].u = 128; s->current[y*s->width+x].v = 128; } for(by=0;bybby;by++) { for(bx=0;bxbbx;bx++) { encode_IFrame_block(tag, s, bx, by); } } s->frame++; memcpy(s->oldpic, s->current, s->width*s->height*sizeof(YUV)); } void swf_SetVideoStreamPFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant) { int bx, by; if(quant<1) quant=1; if(quant>31) quant=31; s->quant = quant; writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_PFRAME); /* fixme: should fill with 0,128,128, not 0,0,0 */ memset(s->current, 0, s->linex*s->height*sizeof(YUV)); rgb2yuv(s->current, pic, s->linex, s->olinex, s->owidth, s->oheight); memset(s->mvdx, 0, s->bbx*s->bby*sizeof(int)); memset(s->mvdy, 0, s->bbx*s->bby*sizeof(int)); for(by=0;bybby;by++) { for(bx=0;bxbbx;bx++) { encode_PFrame_block(tag, s, bx, by); } } s->frame++; memcpy(s->oldpic, s->current, s->width*s->height*sizeof(YUV)); #ifdef MAIN #ifdef PNG yuv2rgb(pic, s->current, s->linex, s->width, s->height); setdbgpic(tag, pic, s->width, s->height); #endif #endif } void swf_SetVideoStreamMover(TAG*tag, VIDEOSTREAM*s, signed char* movex, signed char* movey, void**pictures, int quant) { int bx, by; YUV pic[16*16]; if(quant<1) quant=1; if(quant>31) quant=31; s->quant = quant; writeHeader(tag, s->width, s->height, s->frame, quant, TYPE_PFRAME); memset(s->mvdx, 0, s->bbx*s->bby*sizeof(int)); memset(s->mvdy, 0, s->bbx*s->bby*sizeof(int)); for(by=0;bybby;by++) { for(bx=0;bxbbx;bx++) { int predictmvdx=0, predictmvdy=0; int mvx=movex[by*s->bbx+bx]; int mvy=movey[by*s->bbx+bx]; void*picture = pictures?pictures[by*s->bbx+bx]:0; if(mvx<-32) mvx=-32; if(mvx>31) mvx=31; if(mvy<-32) mvy=-32; if(mvy>31) mvy=31; if(mvx == 0 && mvy == 0 && picture == 0) { swf_SetBits(tag,1,1); // COD skip } else { int mode = 0; int has_dc=0; int y=0,c=0; block_t b; block_t b2; swf_SetBits(tag,0,1); // COD if(mvx==0 && mvy==0 && picture) { // only picture mode = 3; has_dc = 1; } if(picture) { RGBA* picblock = (RGBA*)picture; rgb2yuv(pic, picblock,16,16,16,16); /* TODO: if has_dc!=1, subtract 128 from rgb values */ getregion(&b, pic, 0,0,16); dodctandquant(&b, &b2, 1, s->quant); getblockpatterns(&b2, &y, &c, 1); } else { y=0;c=0; } codehuffman(tag, mcbpc_inter, mode*4+c); codehuffman(tag, cbpy, mode==3?y:y^15); if(mode < 3) { /* has motion vector */ predictmvd(s,bx,by,&predictmvdx,&predictmvdy); codehuffman(tag, mvd, mvd2index(predictmvdx, predictmvdy, mvx, mvy, 0)); codehuffman(tag, mvd, mvd2index(predictmvdx, predictmvdy, mvx, mvy, 1)); s->mvdx[by*s->bbx+bx] = mvx; s->mvdy[by*s->bbx+bx] = mvy; } if(has_dc||y||c) { encode8x8(tag, b2.y1, has_dc, y&8); encode8x8(tag, b2.y2, has_dc, y&4); encode8x8(tag, b2.y3, has_dc, y&2); encode8x8(tag, b2.y4, has_dc, y&1); encode8x8(tag, b2.u, has_dc, c&2); encode8x8(tag, b2.v, has_dc, c&1); } } } } s->frame++; } #define TESTS #ifdef TESTS void test_copy_diff() { VIDEOSTREAM stream; VIDEOSTREAM* s = &stream; TAG*tag; RGBA*pic = (RGBA*)rfx_alloc(256*256*sizeof(RGBA)); block_t fb; int x,y; int bx,by; for(x=0;x<256;x++) for(y=0;y<256;y++) { pic[y*256+x].r = x*y; pic[y*256+x].g = x+y; pic[y*256+x].b = (x+1)%(y+1); } tag = swf_InsertTag(0, ST_DEFINEVIDEOSTREAM); swf_SetU16(tag, 33); swf_SetVideoStreamDefine(tag, s, 10, 256, 256); rgb2yuv(s->current, pic, s->linex, s->olinex, s->owidth, s->oheight); for(by=0;by<16;by++) for(bx=0;bx<16;bx++) { int diff1,diff2; /* test1: does compare pic pic return zero for identical blocks? */ diff1 = compare_pic_pic(s, s->current, s->current, bx, by); assert(!diff1); /* test2: do blocks which are copied back return zero diff? */ getregion(&fb, s->current, bx, by, s->linex); copy_block_pic(s, s->oldpic, &fb, bx, by); diff1 = compare_pic_block(s, &fb, s->oldpic, bx, by); assert(!diff1); /* test3: does compare_pic_block return the same result as compare_pic_pic? */ getregion(&fb, s->current, 15-bx, 15-by, s->linex); copy_block_pic(s, s->oldpic, &fb, bx, by); diff1 = compare_pic_block(s, &fb, s->current, bx, by); diff2 = compare_pic_pic(s, s->current, s->oldpic, bx, by); assert(diff1 == diff2); } } #endif #ifdef MAIN #include "png.h" int compileSWFActionCode(const char *script, int version, void**data, int*len) {return 0;} void mkblack() { SWF swf; SWFPLACEOBJECT obj; int frames = 88; int width = 160; int height = 112; int x,y; TAG*tag = 0; RGBA rgb; RGBA* pic = 0; VIDEOSTREAM stream; pic = rfx_calloc(width*height*4); memset(&swf,0,sizeof(SWF)); memset(&obj,0,sizeof(obj)); swf.fileVersion = 6; swf.frameRate = 15*256; swf.movieSize.xmax = 20*width; swf.movieSize.ymax = 20*height; swf.firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); tag = swf.firstTag; rgb.r = 0x00;rgb.g = 0x30;rgb.b = 0xff; swf_SetRGB(tag,&rgb); tag = swf_InsertTag(tag, ST_DEFINEVIDEOSTREAM); swf_SetU16(tag, 1); swf_SetVideoStreamDefine(tag, &stream, frames, width, height); stream.do_motion = 0; for(y=0;y 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 */ struct huffcode { char*code; int len; int index; }; struct mcbpc_intra_params { int index; int mb_type; int cbpc; }; struct mcbpc_inter_params { int index; int mb_type; int cbpc; }; struct rle_params { int index; int last; int run; int level; }; #define MCBPC_INTRA_STUFFING 8 #define MCBPC_INTER_STUFFING 20 #define RLE_ESCAPE 102 extern struct huffcode mcbpc_intra[]; extern struct mcbpc_intra_params mcbpc_intra_params[]; extern struct mcbpc_inter_params mcbpc_inter_params[]; extern struct rle_params rle_params[]; extern struct huffcode mcbpc_inter[]; extern struct huffcode cbpy[]; extern struct huffcode mvd[]; extern struct huffcode rle[]; swftools_0.9.2+git20130725.orig/lib/gfxfont.c0000644000175000017500000005352412216332640017721 0ustar gawaingawain/* swffont.c Functions for loading external fonts. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2003, 2004, 2005 Matthias Kramm 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 */ #include #include #include #include "../config.h" #include "gfxdevice.h" #include "gfxtools.h" #include "gfxfont.h" #include "ttf.h" #include "mem.h" #include "log.h" static int loadfont_scale = 64; static int full_unicode = 1; static void glyph_clear(gfxglyph_t*g) { gfxline_t*line; if(g->name) { free((void*)g->name); g->name = 0; } gfxline_free(g->line);g->line = 0; } #ifdef HAVE_FREETYPE #ifdef HAVE_FT2BUILD_H #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_SIZES_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_OUTLINE_H #else #include #include #include #include #include #include #endif /* Setting subpixels to 64 also means that the "point size" of the font outlines will be 64. So the font, when rendered at original size (i.e., the swf fontsize is 1024) will have the same size as if it was rendered at 64pt */ #define FT_SCALE 1 #define FT_SUBPIXELS 64 typedef struct _gfxdrawinfo_t { gfxdrawer_t* draw; double quality; } gfxdrawinfo_t; static int ft_move_to(const FT_Vector* _to, void* user) { gfxdrawinfo_t* info = (gfxdrawinfo_t*)user; gfxdrawer_t* draw = info->draw; double x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; double y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; draw->moveTo(draw, x,y); return 0; } static int ft_line_to(const FT_Vector* _to, void* user) { gfxdrawinfo_t* info = (gfxdrawinfo_t*)user; gfxdrawer_t* draw = info->draw; double x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; double y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; draw->lineTo(draw, x,y); return 0; } static int ft_cubic_to(const FT_Vector* _c1, const FT_Vector* _c2, const FT_Vector* _to, void* user) { gfxdrawinfo_t* info = (gfxdrawinfo_t*)user; gfxdrawer_t* draw = info->draw; double tox = _to->x*FT_SCALE/(float)FT_SUBPIXELS; double toy = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; double c1x = _c1->x*FT_SCALE/(float)FT_SUBPIXELS; double c1y = -_c1->y*FT_SCALE/(float)FT_SUBPIXELS; double c2x = _c2->x*FT_SCALE/(float)FT_SUBPIXELS; double c2y = -_c2->y*FT_SCALE/(float)FT_SUBPIXELS; gfxdraw_cubicTo(draw, c1x, c1y, c2x, c2y, tox, toy, info->quality); return 0; } static int ft_conic_to(const FT_Vector* _c, const FT_Vector* _to, void* user) { gfxdrawinfo_t* info = (gfxdrawinfo_t*)user; gfxdrawer_t* draw = info->draw; double tox = _to->x*FT_SCALE/(float)FT_SUBPIXELS; double toy = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; double cx = _c->x*FT_SCALE/(float)FT_SUBPIXELS; double cy = -_c->y*FT_SCALE/(float)FT_SUBPIXELS; gfxdraw_conicTo(draw, cx,cy, tox,toy, info->quality); return 0; } static FT_Outline_Funcs outline_functions = { ft_move_to, ft_line_to, ft_conic_to, ft_cubic_to, 0,0 }; static FT_Library ftlibrary = 0; static gfxglyph_t cloneGlyph(gfxglyph_t*src) { gfxglyph_t dest; memset(&dest, 0, sizeof(dest)); if(src->name) dest.name = strdup(src->name); dest.advance = src->advance; dest.unicode = src->unicode; dest.line = gfxline_clone(src->line); return dest; } static int errorno = 0; //#define DEBUG 1 gfxfont_t* gfxfont_load(const char*id, const char*filename, unsigned int flags, double quality) { FT_Face face; FT_Error error; const char* fontname = 0; FT_ULong charcode; FT_UInt gindex; gfxfont_t* font; int t; int*glyph2glyph = 0; int*glyph2unicode = 0; int max_unicode = 0; int charmap = -1; int isunicode = 1; int has_had_errors = 0; int num_names = 0; if(ftlibrary == 0) { if(FT_Init_FreeType(&ftlibrary)) { fprintf(stderr, "Couldn't init freetype library!\n"); exit(1); } } error = FT_New_Face(ftlibrary, filename, 0, &face); FT_Set_Pixel_Sizes (face, 16*loadfont_scale, 16*loadfont_scale); #ifdef DEBUG printf("gfxfont_load(%s, %s, %f)\n", id, filename, quality); #endif if(error) { fprintf(stderr, "Couldn't load file %s- not a TTF file? (error=%02x)\n", filename, error); return 0; } if(face->num_glyphs <= 0) { fprintf(stderr, "File %s contains %d glyphs\n", filename, (int)face->num_glyphs); return 0; } font = (gfxfont_t*)rfx_calloc(sizeof(gfxfont_t)); //font->style = ((face->style_flags&FT_STYLE_FLAG_ITALIC)?FONT_STYLE_ITALIC:0) |((face->style_flags&FT_STYLE_FLAG_BOLD)?FONT_STYLE_BOLD:0); //font->ascent = abs(face->ascender)*FT_SCALE*loadfont_scale*20/FT_SUBPIXELS/2; //face->bbox.xMin; //font->descent = abs(face->descender)*FT_SCALE*loadfont_scale*20/FT_SUBPIXELS/2; //face->bbox.xMax; //font->leading = font->layout->ascent + font->layout->descent; //font->encoding = FONT_ENCODING_UNICODE; font->max_unicode = 0; font->id = strdup(id); font->glyphs = (gfxglyph_t*)rfx_calloc(face->num_glyphs*sizeof(gfxglyph_t)); glyph2unicode = (int*)rfx_calloc(face->num_glyphs*sizeof(int)); glyph2glyph = (int*)rfx_calloc(face->num_glyphs*sizeof(int)); if(FT_HAS_GLYPH_NAMES(face)) { //font->glyphnames = rfx_calloc(face->num_glyphs*sizeof(char*)); } fontname = FT_Get_Postscript_Name(face); #ifdef DEBUG for(t=0;tnum_charmaps;t++) { printf("possible encoding: %c%c%c%c (%d of %d)\n", (face->charmaps[t]->encoding >> 24)&255, (face->charmaps[t]->encoding >> 16)&255, (face->charmaps[t]->encoding >> 8)&255, (face->charmaps[t]->encoding >> 0)&255, t+1, face->num_charmaps ); } #endif while(1) { charcode = FT_Get_First_Char(face, &gindex); while(gindex != 0) { if(gindex >= 0 && gindexnum_glyphs) { if(!glyph2unicode[gindex]) { glyph2unicode[gindex] = charcode; if(charcode + 1 > font->max_unicode) { font->max_unicode = charcode + 1; } } } charcode = FT_Get_Next_Char(face, charcode, &gindex); } #ifdef DEBUG if(face->charmap) { printf("ENCODING: %c%c%c%c (%d of %d) max_unicode=%d\n", (face->charmap->encoding >> 24)&255, (face->charmap->encoding >> 16)&255, (face->charmap->encoding >> 8)&255, (face->charmap->encoding >> 0)&255, charmap, face->num_charmaps, font->max_unicode ); } else { printf("ENCODING: NONE (%d of %d) max_unicode=%d\n", charmap, face->num_charmaps, font->max_unicode ); } #endif /* if we didn't find a single encoding character, try the font's charmaps instead. That usually means that the encoding is no longer unicode. TODO: find a way to convert the encoding to unicode */ if(font->max_unicode == 0 && charmap < face->num_charmaps-1 && face->charmaps[charmap+1]->encoding != 0x41444243 /* adbc, custom */ && face->charmaps[charmap+1]->encoding != 0x61726d6e /* armn */ ) { charmap++; FT_Set_Charmap(face, face->charmaps[charmap]); isunicode = 0; } else break; } /* TODO: if isunicode is 1, we now need to permutate the character order so that each character is at it's encoding position */ if(full_unicode) font->max_unicode = 65535; font->unicode2glyph = (int*)rfx_calloc(font->max_unicode*sizeof(int)); for(t=0;tmax_unicode;t++) { int g = FT_Get_Char_Index(face, t); if(!g || g>=face->num_glyphs) g = -1; font->unicode2glyph[t] = g; if(g>=0) { #ifdef DEBUG printf("u%d ->%d\n", t, g); #endif max_unicode = t+1; if(!glyph2unicode[g]) { glyph2unicode[g] = t; } } } font->max_unicode = max_unicode; font->num_glyphs = 0; for(t=0; t < face->num_glyphs; t++) { if(FT_HAS_GLYPH_NAMES(face)) { char name[128]; error = FT_Get_Glyph_Name(face, t, name, 127); if(!error && name[0] && !strstr(name, "notdef")) { num_names++; } } } for(t=0; t < face->num_glyphs; t++) { FT_Glyph glyph; char name[128]; gfxdrawer_t draw; gfxdrawinfo_t info; char hasname = 0; int omit = 0; name[0]=0; font->glyphs[font->num_glyphs].advance = 0; font->glyphs[font->num_glyphs].line = 0; font->glyphs[font->num_glyphs].unicode = glyph2unicode[t]; font->glyphs[font->num_glyphs].name = 0; if(FT_HAS_GLYPH_NAMES(face) && (num_names >= face->num_glyphs/10 || num_names > 2)) { name[0] = 0; error = FT_Get_Glyph_Name(face, t, name, 127); if(!error && name[0] && !strstr(name, "notdef")) { font->glyphs[font->num_glyphs].name = strdup(name); hasname = 1; } } #if 0 // some cantonese pdfs fail to work if this is activated if(has_had_errors && (isunicode && !glyph2unicode[t]) && !hasname && t>=256) { /* some freetype versions crash or corrupt memory if we try to load characters (without unicode index or name) above 256 for some fonts. So skip those characters once the first error occured */ omit = 1; } #endif if(!omit) { error = FT_Load_Glyph(face, t, FT_LOAD_NO_BITMAP); if(error) { if(hasname) fprintf(stderr, "Warning: glyph %d/%d (unicode %d, name %s) has return code %d\n", t, (int)face->num_glyphs, glyph2unicode[t], name, error); else fprintf(stderr, "Warning: glyph %d/%d (unicode %d) has return code %d\n", t, (int)face->num_glyphs, glyph2unicode[t], error); omit = 2; #if 0 if(!has_had_errors) { char buf[256]; if(fontname && *fontname) { fprintf(stderr, "font has been copied to %s.ttf\n", fontname); sprintf(buf, "cp %s %s.ttf", filename, fontname); } else { fprintf(stderr, "font has been copied to badfont%d.ttf\n", errorno); sprintf(buf, "cp %s badfont%d.ttf", filename, errorno); errorno++; } system(buf); } #endif has_had_errors = 1; } } if(!omit) { error = FT_Get_Glyph(face->glyph, &glyph); if(error) { fprintf(stderr, "Couldn't get glyph %d/%d, error:%d\n", t, (int)face->num_glyphs, error); omit = 3; } } if(!omit) { gfxline_t*l; int ok=0; gfxdrawer_target_gfxline(&draw); info.draw = &draw; info.quality = quality; //error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &info); error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &info); if(error) { fprintf(stderr, "Couldn't decompose glyph %d\n", t); gfxline_free((gfxline_t*)draw.result(&draw)); FT_Done_Glyph(glyph); omit = 4; } else { font->glyphs[font->num_glyphs].advance = glyph->advance.x/65536; font->glyphs[font->num_glyphs].line = (gfxline_t*)draw.result(&draw); } l = font->glyphs[font->num_glyphs].line; while(l) { if(l->type != gfx_moveTo) { ok = 1; } l = l->next; } if(!ok && !hasname) { gfxline_free(font->glyphs[font->num_glyphs].line); font->glyphs[font->num_glyphs].line = 0; font->glyphs[font->num_glyphs].advance = 0; /* Some PDFs created e.g. by InDesign tend to create fonts with reduced (empty) characters, which still have unicode indices attached to them. Remove that information, in order to not confuse any converter applications. */ font->glyphs[font->num_glyphs].unicode = 0; if(font->glyphs[font->num_glyphs].name) { free((void*)font->glyphs[font->num_glyphs].name); font->glyphs[font->num_glyphs].name = 0; } FT_Done_Glyph(glyph); omit = 5; } } if(!omit) { FT_Done_Glyph(glyph); font->glyphs[font->num_glyphs].unicode = glyph2unicode[t]; } glyph2glyph[t] = font->num_glyphs; font->num_glyphs++; } /* notice: if skip_unused is true, font->glyph2unicode, font->glyphnames and font->layout->bounds will have more memory allocated than just font->num_glyphs, but only the first font->numchars are used/valid */ for(t=0;tmax_unicode;t++) { if(font->unicode2glyph[t]>=0) { font->unicode2glyph[t] = glyph2glyph[font->unicode2glyph[t]]; } } rfx_free(glyph2glyph); rfx_free(glyph2unicode); FT_Done_Face(face); FT_Done_FreeType(ftlibrary);ftlibrary=0; if(!isunicode && font->num_glyphs>0 && font->max_unicode) { /* if the encoding isn't unicode, remap the font so that the encoding equals the char position, and remove the unicode table */ int t; gfxglyph_t*newglyphs = (gfxglyph_t*)rfx_calloc(font->max_unicode*sizeof(gfxglyph_t)); for(t=0;tunicode2glyph[t]; if(c>=font->num_glyphs || c<0) c = 0; newglyphs[t] = cloneGlyph(&font->glyphs[c]); newglyphs[t].unicode = -1; } for(t=0;tnum_glyphs;t++) { glyph_clear(&font->glyphs[t]); } free(font->glyphs); font->glyphs = newglyphs; font->num_glyphs = font->max_unicode; free(font->unicode2glyph);font->unicode2glyph = 0; font->max_unicode = 0; } if(font->unicode2glyph) { int t; int bad = 0; /* check whether the Unicode indices look o.k. If they don't, disable the unicode lookup by setting the unicode map to -1 everywhere */ for(t=0;tnum_glyphs;t++) { int c = font->glyphs[t].unicode; gfxline_t* line = font->glyphs[t].line; if(c && c < 32 && (line && line->next && line->next->next)) { // the character maps into the unicode control character range // between 0001-001f. Yet it is not empty. Treat the one // mapping as broken, and look how many of those we find. bad ++; } } if(bad>5) { free(font->unicode2glyph);font->unicode2glyph = 0; font->max_unicode = 0; for(t=0;tnum_glyphs;t++) { font->glyphs[t].unicode = -1; } } } return font; } #else gfxfont_t* gfxfont_load(const char*id, const char*filename, unsigned int flags, double quality) { fprintf(stderr, "No freetype support compiled in! Not able to load %s\n", filename); return 0; } #endif void gfxfont_free(gfxfont_t*font) { int t; for(t=0;tnum_glyphs;t++) { glyph_clear(&font->glyphs[t]); } if(font->glyphs) { free(font->glyphs);font->glyphs = 0; } font->num_glyphs = 0; if(font->unicode2glyph) { free(font->unicode2glyph);font->unicode2glyph = 0; } if(font->id) { free((void*)font->id);font->id=0; } free(font); } static inline int invalid_unicode(int u) { return (u<32 || (u>=0xd800 && u<0xf900)); } void gfxfont_fix_unicode(gfxfont_t*font, char remove_duplicates) { int t; /* find the current maximum unicode2glyph */ int max = 0; for(t=0;tnum_glyphs;t++) { int u = font->glyphs[t].unicode; if(u > max) max = u; } char*used = rfx_calloc(max+1); /* now, remap all duplicates (and invalid characters) and calculate the new maximum */ int remap_pos=0; max = 0; for(t=0;tnum_glyphs;t++) { int u = font->glyphs[t].unicode; if(u>=0) { if(remove_duplicates && used[u]) { u = font->glyphs[t].unicode = 0xe000 + remap_pos++; } if(invalid_unicode(u)) { u = font->glyphs[t].unicode = 0xe000 + remap_pos++; } else { used[u] = 1; } } if(u > max) max = u; } free(used); if(font->unicode2glyph) { free(font->unicode2glyph); } font->unicode2glyph = 0; font->max_unicode = 0; } void gfxfont_add_unicode2glyph(gfxfont_t*font) { int t; int max = 0; for(t=0;tnum_glyphs;t++) { int u = font->glyphs[t].unicode; if(u > max) max = u; } if(!font->unicode2glyph) { /* (re)generate unicode2glyph-to-glyph mapping table by reverse mapping the glyph unicode2glyph's indexes into the mapping table. For collisions, we prefer the smaller unicode2glyph value.*/ font->max_unicode = max+1; font->unicode2glyph = malloc(sizeof(font->unicode2glyph[0])*(font->max_unicode)); memset(font->unicode2glyph, -1, sizeof(font->unicode2glyph[0])*(font->max_unicode)); for(t=0;tnum_glyphs;t++) { int u = font->glyphs[t].unicode; if(u>=0 && font->unicode2glyph[u]<0) { assert(umax_unicode); font->unicode2glyph[u] = t; } } } else { /* add the new glyph indexes (most probably, that's only the remapped values at 0xe000) to the unicode2glyph table. Notice: Unlike glyph2unicode, we don't care about collisions in the unicode2glyph table */ int new_max_unicode = max+1; if(font->max_unicode < new_max_unicode) { font->unicode2glyph = rfx_realloc(font->unicode2glyph, sizeof(font->unicode2glyph[0])*(font->max_unicode)); memset(font->unicode2glyph+font->max_unicode, -1, sizeof(font->unicode2glyph[0])*(new_max_unicode - font->max_unicode)); } for(t=0;tnum_glyphs;t++) { int u = font->glyphs[t].unicode; if(u>=0 && font->unicode2glyph[u]<0) { font->unicode2glyph[u] = t; } } font->max_unicode = new_max_unicode; } } ttf_t* gfxfont_to_ttf(gfxfont_t*font, char eot) { ttf_t*ttf = ttf_new(); int num_glyphs = font->num_glyphs; int offset = 0; int t; char has_nondef_glyph = font->num_glyphs && font->glyphs[0].unicode==-1 && (!font->glyphs[0].line || !font->glyphs[0].line->next); if(!has_nondef_glyph) { /* insert a new .nondef glyph at the start of the font */ offset++; num_glyphs++; } ttf->num_glyphs = num_glyphs; ttf->glyphs = rfx_calloc(num_glyphs*sizeof(ttfglyph_t)); double scale = 1.0; int max_unicode = font->max_unicode; int remap_pos=0; for(t=0;tnum_glyphs;t++) { gfxglyph_t*src = &font->glyphs[t]; ttfglyph_t*dest = &ttf->glyphs[t+offset]; gfxline_t*line = src->line; int count = 0; while(line) { count++; if(line->type == gfx_splineTo) count++; line=line->next; } dest->num_points = count; dest->points = rfx_calloc(count*sizeof(ttfpoint_t)); count = 0; line = src->line; while(line) { if(line->type == gfx_splineTo) { dest->points[count].x = line->sx*scale; dest->points[count].y = line->sy*scale; count++; } dest->points[count].x = line->x*scale; dest->points[count].y = line->y*scale; dest->points[count].flags |= GLYPH_ON_CURVE; if(line->type == gfx_moveTo) { dest->points[count].flags |= GLYPH_CONTOUR_START; if(count) dest->points[count-1].flags |= GLYPH_CONTOUR_END; } count++; line=line->next; } if(count) dest->points[count-1].flags |= GLYPH_CONTOUR_END; /* compute bounding box */ int s; if(count) { dest->xmin = dest->xmax = dest->points[0].x; dest->ymin = dest->ymax = dest->points[0].y; for(s=1;spoints[s].x < dest->xmin) dest->xmin = dest->points[s].x; if(dest->points[s].y < dest->ymin) dest->ymin = dest->points[s].y; if(dest->points[s].x > dest->xmax) dest->xmax = dest->points[s].x; if(dest->points[s].y > dest->ymax) dest->ymax = dest->points[s].y; } } if(eot) { dest->bearing = dest->xmin; /* for windows font rendering, make sure coordinates are always to the right of the origin (and use bearing to shift them "back".) Don't do this for non-windows platforms though because e.g. OS X ignores bearing. */ int xshift=0; if(dest->xmin < 0) { xshift = -dest->xmin; for(s=0;spoints[s].x += xshift; } dest->xmin += xshift; dest->xmax += xshift; } } dest->advance = src->advance*scale; //dest->xmin=0; //TODO: might be necessary for some font engines? dest->advance = src->advance*scale; int u = font->glyphs[t].unicode; if(u > max_unicode) max_unicode = u; } ttf->unicode_size = max_unicode+1; ttf->unicode = rfx_calloc(sizeof(unicode_t)*ttf->unicode_size); if(!font->unicode2glyph) { for(t=0;tnum_glyphs;t++) { gfxglyph_t*src = &font->glyphs[t]; int u = font->glyphs[t].unicode; if(u<=0) continue; if(u<32) { msg(" gfxfont_to_ttf: glyph %d has an invalid unicode (%d)", t, u); continue; } else if(ttf->unicode[u]) { msg(" gfxfont_to_ttf: glyph %d has a duplicate unicode (%d)", t, u); continue; } if(uunicode_size) ttf->unicode[u] = t+offset; } } else { int u; for(u=1;umax_unicode;u++) { int g = font->unicode2glyph[u]; if(g>=0 && u<32) { msg(" gfxfont_to_ttf: Font contains an invalid unicode (%d)", u); continue; } if(g>=0 && gnum_glyphs && !ttf->unicode[u]) { ttf->unicode[u] = g+offset; } } } ttf->ascent = font->ascent; ttf->descent = -font->descent; ttf->lineGap = 0; ttf->full_name = strdup(font->id); ttf->family_name = strdup(font->id); ttf->subfamily_name = strdup(font->id); ttf->postscript_name = strdup(font->id); ttf->version_string = strdup("Version 1.0"); ttf->font_uid = strdup(font->id); ttf_create_truetype_tables(ttf); return ttf; } void gfxfont_save(gfxfont_t*font, const char*filename) { ttf_t*ttf = gfxfont_to_ttf(font, 0); ttf_save(ttf, filename); ttf_destroy(ttf); } void gfxfont_save_eot(gfxfont_t*font, const char*filename) { ttf_t*ttf = gfxfont_to_ttf(font, 1); ttf_save_eot(ttf, filename); ttf_destroy(ttf); } swftools_0.9.2+git20130725.orig/lib/mp3.h0000644000175000017500000000067612216332640016752 0ustar gawaingawain/* mp3.h Header file for mp3.c Part of the swftools package. Copyright (c) 2005 Joel Yliluoma This file is distributed under the GPL, see file COPYING for details */ struct MP3 { unsigned short SampRate; unsigned char Channels; unsigned int NumFrames; unsigned char* data; unsigned long size; }; int mp3_read(struct MP3*mp3, const char* filename); void mp3_clear(struct MP3*mp3); swftools_0.9.2+git20130725.orig/lib/drawer.c0000644000175000017500000002415312216332640017526 0ustar gawaingawain/* drawer.c part of swftools A generic structure for providing vector drawing. (Helper routines, spline approximation, simple text drawers) Copyright (C) 2003 Matthias Kramm 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 */ #include #include #include #include #include #include #include "drawer.h" static char* getToken(const char**p) { const char*start; char*result; while(**p && strchr(" ,()\t\n\r", **p)) { (*p)++; } start = *p; /* SVF pathdata can exclude whitespace after L and M commands. Ref: http://www.w3.org/TR/SVG11/paths.html#PathDataGeneralInformation This allows us to use svg files output from gnuplot. Also checks for relative MoveTo and LineTo (m and l). 051106 Magnus Lundin, lundin@mlu.mine.nu */ if (strchr("LMlm", **p) && (isdigit(*(*p+1))||strchr("+-", *(*p+1)))) { (*p)++; } else while(**p && !strchr(" ,()\t\n\r", **p)) { (*p)++; } result = (char*)malloc((*p)-start+1); memcpy(result,start,(*p)-start+1); result[(*p)-start] = 0; return result; } void draw_conicTo(drawer_t*draw, FPOINT* c, FPOINT* to) { FPOINT* pos = &draw->pos; FPOINT c1,c2; c1.x = (pos->x + 2 * c->x) / 3; c1.y = (pos->y + 2 * c->y) / 3; c2.x = (2 * c->x + to->x) / 3; c2.y = (2 * c->y + to->y) / 3; draw_cubicTo(draw, &c1,&c2,to); draw->pos = *to; } /* convenience routine */ static void draw_conicTo2(drawer_t*draw, double x1, double y1, double x2, double y2) { FPOINT c1,c2; c1.x = x1; c1.y = y1; c2.x = x2; c2.y = y2; draw_conicTo(draw, &c1, &c2); } /* convenience routine */ static void draw_moveTo2(drawer_t*draw, double x, double y) { FPOINT c; c.x = x; c.y = y; draw->moveTo(draw, &c); } /* convenience routine */ static void draw_lineTo2(drawer_t*draw, double x, double y) { FPOINT c; c.x = x; c.y = y; draw->lineTo(draw, &c); } static float getFloat(const char** p) { char* token = getToken(p); float result = atof(token); free(token); return result; } void draw_string(drawer_t*draw, const char*string) { const char*p = string; while(*p) { char*token = getToken(&p); if(!token) break; if (!*token) { free(token); break; } if(!strncmp(token, "moveTo", 6) || !strncmp(token, "M", 1) //svg ) { FPOINT to; to.x = getFloat(&p); to.y = getFloat(&p); draw->moveTo(draw, &to); } else if(!strncmp(token, "lineTo", 6) || !strncmp(token, "L", 1) //svg ) { FPOINT to; to.x = getFloat(&p); to.y = getFloat(&p); draw->lineTo(draw, &to); } else if(!strncmp(token, "curveTo", 7) || !strncmp(token, "splineTo", 8)) { FPOINT mid,to; mid.x = getFloat(&p); mid.y = getFloat(&p); to.x = getFloat(&p); to.y = getFloat(&p); draw->splineTo(draw, &mid, &to); } else if(!strncmp(token, "conicTo", 5)) { FPOINT mid,to; mid.x = getFloat(&p); mid.y = getFloat(&p); to.x = getFloat(&p); to.y = getFloat(&p); draw_conicTo(draw, &mid, &to); } else if(!strncmp(token, "circle", 6)) { int mx,my,r; double r2; mx = getFloat(&p); my = getFloat(&p); r = getFloat(&p); r2 = 0.70710678118654757*r; draw_moveTo2(draw, mx, my-r); draw_conicTo2(draw, mx+r2, my-r2, mx+r, my); draw_conicTo2(draw, mx+r2, my+r2, mx, my+r); draw_conicTo2(draw, mx-r2, my+r2, mx-r, my); draw_conicTo2(draw, mx-r2, my-r2, mx, my-r); } else if(!strncmp(token, "box", 3)) { int x1,y1,x2,y2; x1 = getFloat(&p); y1 = getFloat(&p); x2 = getFloat(&p); y2 = getFloat(&p); draw_moveTo2(draw, x1, y1); draw_lineTo2(draw, x1, y2); draw_lineTo2(draw, x2, y2); draw_lineTo2(draw, x2, y1); draw_lineTo2(draw, x1, y1); } else if(!strncmp(token, "cubicTo", 5) || !strncmp(token, "C", 1) //svg ) { FPOINT mid1,mid2,to; mid1.x = getFloat(&p); mid1.y = getFloat(&p); mid2.x = getFloat(&p); mid2.y = getFloat(&p); to.x = getFloat(&p); to.y = getFloat(&p); draw_cubicTo(draw, &mid1, &mid2, &to); } else if(!strncmp(token, "z", 1) //svg ) { // ignore } else fprintf(stderr, "drawer: Warning: unknown primitive '%s'\n", token); free(token); } } struct SPLINEPOINT { double x,y; }; struct qspline { struct SPLINEPOINT start; struct SPLINEPOINT control; struct SPLINEPOINT end; }; struct cspline { struct SPLINEPOINT start; struct SPLINEPOINT control1; struct SPLINEPOINT control2; struct SPLINEPOINT end; }; static inline struct SPLINEPOINT cspline_getpoint(const struct cspline*s, double t) { struct SPLINEPOINT p; double tt = t*t; double ttt = tt*t; double mt = (1-t); double mtmt = mt*(1-t); double mtmtmt = mtmt*(1-t); p.x= s->end.x*ttt + 3*s->control2.x*tt*mt + 3*s->control1.x*t*mtmt + s->start.x*mtmtmt; p.y= s->end.y*ttt + 3*s->control2.y*tt*mt + 3*s->control1.y*t*mtmt + s->start.y*mtmtmt; return p; } static struct SPLINEPOINT qspline_getpoint(const struct qspline*s, double t) { struct SPLINEPOINT p; p.x= s->end.x*t*t + 2*s->control.x*t*(1-t) + s->start.x*(1-t)*(1-t); p.y= s->end.y*t*t + 2*s->control.y*t*(1-t) + s->start.y*(1-t)*(1-t); return p; } static int approximate3(const struct cspline*s, struct qspline*q, int size, double quality2) { unsigned int gran = 0; unsigned int istep = 0x80000000; unsigned int istart = 0; int num = 0; int level = 0; while(istart<0x80000000) { unsigned int iend = istart + istep; double start = istart/(double)0x80000000; double end = iend/(double)0x80000000; struct qspline test; double pos,qpos; char left = 0,recurse=0; int t; int probes = 15; /* create simple approximation: a qspline which run's through the qspline point at 0.5 */ test.start = cspline_getpoint(s, start); test.control = cspline_getpoint(s, (start+end)/2); test.end = cspline_getpoint(s, end); /* fix the control point: move it so that the new spline does runs through it */ test.control.x = -(test.end.x + test.start.x)/2 + 2*(test.control.x); test.control.y = -(test.end.y + test.start.y)/2 + 2*(test.control.y); /* depending on where we are in the spline, we either try to match the left or right tangent */ if(start<0.5) left=1; /* get derivative */ pos = left?start:end; qpos = pos*pos; test.control.x = s->end.x*(3*qpos) + 3*s->control2.x*(2*pos-3*qpos) + 3*s->control1.x*(1-4*pos+3*qpos) + s->start.x*(-3+6*pos-3*qpos); test.control.y = s->end.y*(3*qpos) + 3*s->control2.y*(2*pos-3*qpos) + 3*s->control1.y*(1-4*pos+3*qpos) + s->start.y*(-3+6*pos-3*qpos); if(left) { test.control.x *= (end-start)/2; test.control.y *= (end-start)/2; test.control.x += test.start.x; test.control.y += test.start.y; } else { test.control.x *= -(end-start)/2; test.control.y *= -(end-start)/2; test.control.x += test.end.x; test.control.y += test.end.y; } #define PROBES #ifdef PROBES /* measure the spline's accurancy, by taking a number of probes */ for(t=0;tquality2) { recurse=1;break; } qr2 = qspline_getpoint(&test, (1-pos)); cr2 = cspline_getpoint(s, start+(1-pos)*(end-start)); dx = qr2.x - cr2.x; dy = qr2.y - cr2.y; dist2 = dx*dx+dy*dy; if(dist2>quality2) { recurse=1;break; } } #else // quadratic error: *much* faster! /* convert control point representation to d*x^3 + c*x^2 + b*x + a */ double dx,dy; dx= s->end.x - s->control2.x*3 + s->control1.x*3 - s->start.x; dy= s->end.y - s->control2.y*3 + s->control1.y*3 - s->start.y; /* we need to do this for the subspline between [start,end], not [0,1] as a transformation of t->a*t+b does nothing to highest coefficient of the spline except multiply it with a^3, we just need to modify d here. */ {double m = end-start; dx*=m*m*m; dy*=m*m*m; } /* use the integral over (f(x)-g(x))^2 between 0 and 1 to measure the approximation quality. (it boils down to const*d^2) */ recurse = (dx*dx + dy*dy > quality2); #endif if(recurse && istep>1 && size-level > num) { istep >>= 1; level++; } else { *q++ = test; num++; istart += istep; while(!(istart & istep)) { level--; istep <<= 1; } } } return num; } void draw_cubicTo(drawer_t*draw, FPOINT* control1, FPOINT* control2, FPOINT* to) { struct qspline q[128]; struct cspline c; //double quality = 80; double maxerror = 1;//(500-(quality*5)>1?500-(quality*5):1)/20.0; int t,num; c.start.x = draw->pos.x; c.start.y = draw->pos.y; c.control1.x = control1->x; c.control1.y = control1->y; c.control2.x = control2->x; c.control2.y = control2->y; c.end.x = to->x; c.end.y = to->y; num = approximate3(&c, q, 128, maxerror*maxerror); for(t=0;tsplineTo(draw, &mid, &to); } } swftools_0.9.2+git20130725.orig/lib/old_rfxswf.h0000644000175000017500000000266112216332640020424 0ustar gawaingawain/* old_rfxswf.h File which defines macros and typedefs for old versions of the rfxswf lib functions and datatypes. (For routines which still use them) Part of the swftools package. Copyright (c) 2000, 2001 Rainer Böhme 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 */ #include "rfxswf.h" /* #define DataPos dataReadPos #define DataSize dataWritePos #define bitcount bitWritePos #define bitmask bitWritePos */ #define GetDataSize GetTagLen #define GetDataSizePtr GetTagLenPtr #define RFXSWF_ReadTag(a,b) swf_ReadTag(a,b) #define RFXSWF_WriteTag(a,b) swf_WriteTag(a,b) #define RFXSWF_UpdateFrame(a,b) swf_UpdateFrame(a,b) #define RFXSWF_WriteTag(a,b) swf_WriteTag(a,b) #define RFXSWF_DefineSprite_GetRealSize(a) swf_DefineSprite_GetRealSize(a) swftools_0.9.2+git20130725.orig/lib/rfxswf.h0000644000175000017500000011452612216332640017572 0ustar gawaingawain/* rfxswf.h Headers for rfxswf.c and modules Part of the swftools package. Copyright (c) 2000, 2001 Rainer Böhme 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 */ #ifndef __RFX_SWF_INCLUDED__ #define __RFX_SWF_INCLUDED__ #include #include #include #include #ifndef WIN32 #include #endif #include #include #include "../config.h" #include "./bitio.h" #include "./drawer.h" #include "./mem.h" #include "./types.h" #ifdef __cplusplus extern "C" { #endif #define DEBUG_RFXSWF #ifdef RFXSWF_DISABLESOUND #define NO_MP3 #endif typedef signed SFIXED; typedef signed SCOORD; #define SCOORD_MAX 0x7fffffffl #define SCOORD_MIN -0x80000000l // Basic Structures typedef struct _SPOINT { SCOORD x; SCOORD y; } SPOINT; typedef struct _RGBA { U8 a; U8 r; U8 g; U8 b; } RGBA; typedef struct _YUV { U8 y,u,v; } YUV; typedef struct _SRECT { SCOORD xmin; SCOORD ymin; SCOORD xmax; SCOORD ymax; } SRECT; typedef struct _MATRIX { SFIXED sx,r1, tx; SFIXED r0,sy, ty; } MATRIX; typedef struct _CXFORM { S16 a0, a1; /* mult, add */ S16 r0, r1; S16 g0, g1; S16 b0, b1; } CXFORM; #define GRADIENT_LINEAR 0x10 #define GRADIENT_RADIAL 0x12 typedef struct _GRADIENT { int num; U8* ratios; RGBA* rgba; } GRADIENT; typedef struct _FILTER { U8 type; } FILTER; typedef struct _FILTERLIST { int num; FILTER*filter[8]; } FILTERLIST; typedef struct _TAG // NEVER access a Tag-Struct directly ! { U16 id; U8 * data; U32 memsize; // to minimize realloc() calls U32 len; // for Set-Access U32 pos; // for Get-Access struct _TAG * next; struct _TAG * prev; U8 readBit; // for Bit-Manipulating Functions [read] U8 writeBit; // [write] } TAG; #define swf_ResetReadBits(tag) if (tag->readBit) { tag->pos++; tag->readBit = 0; } #define swf_ResetWriteBits(tag) if (tag->writeBit) { tag->writeBit = 0; } typedef struct _SOUNDINFO { U8 stop; U8 nomultiple; //continue playing if already started U32 inpoint; U32 outpoint; U16 loops; U8 envelopes; //envelope: U32* pos; U32* left; U32* right; } SOUNDINFO; #define FILEATTRIBUTE_USENETWORK 1 #define FILEATTRIBUTE_AS3 8 #define FILEATTRIBUTE_SYMBOLCLASS 16 #define FILEATTRIBUTE_USEACCELERATEDBLIT 32 #define FILEATTRIBUTE_USEHARDWAREGPU 64 typedef struct _SWF { U8 fileVersion; U8 compressed; // SWF or SWC? U32 fileSize; // valid after load and save SRECT movieSize; U16 frameRate; U16 frameCount; // valid after load and save TAG * firstTag; U32 fileAttributes; // for SWFs >= Flash9 } SWF; // Basic Functions SWF* swf_OpenSWF(char*filename); int swf_ReadSWF2(reader_t*reader, SWF * swf); // Reads SWF via callback int swf_ReadSWF(int handle,SWF * swf); // Reads SWF to memory (malloc'ed), returns length or <0 if fails int swf_WriteSWF2(writer_t*writer, SWF * swf); // Writes SWF via callback, returns length or <0 if fails int swf_WriteSWF(int handle,SWF * swf); // Writes SWF to file, returns length or <0 if fails int swf_SaveSWF(SWF * swf, char*filename); int swf_WriteCGI(SWF * swf); // Outputs SWF with valid CGI header to stdout void swf_FreeTags(SWF * swf); // Frees all malloc'ed memory for swf SWF* swf_CopySWF(SWF*swf); void swf_ReadABCfile(char*filename, SWF*swf); // for streaming: int swf_WriteHeader(int handle,SWF * swf); // Writes Header of swf to file int swf_WriteHeader2(writer_t*writer,SWF * swf); // Writes Header of swf to file int swf_WriteTag(int handle,TAG * tag); // Writes TAG to file int swf_WriteTag2(writer_t*writer, TAG * t); //Write TAG via callback int swf_ReadHeader(reader_t*reader, SWF * swf); // Reads SWF Header via callback // folding/unfolding: void swf_FoldAll(SWF*swf); void swf_UnFoldAll(SWF*swf); void swf_FoldSprite(TAG*tag); void swf_UnFoldSprite(TAG*tag); int swf_IsFolded(TAG*tag); // tag reordering: void swf_OptimizeTagOrder(SWF*swf); // basic routines: TAG * swf_InsertTag(TAG * after,U16 id); // updates frames, if necessary TAG * swf_InsertTagBefore(SWF*swf, TAG * before,U16 id); // like InsertTag, but insert tag before argument TAG * swf_DeleteTag(SWF*swf, TAG * t); void swf_ClearTag(TAG * t); //frees tag data void swf_ResetTag(TAG*tag, U16 id); //set's tag position and length to 0, without freeing it TAG* swf_CopyTag(TAG*tag, TAG*to_copy); //stores a copy of another tag into this taglist void swf_SetTagPos(TAG * t,U32 pos); // resets Bitcount U32 swf_GetTagPos(TAG * t); TAG * swf_NextTag(TAG * t); TAG * swf_PrevTag(TAG * t); U16 swf_GetTagID(TAG * t); // ... TagGetID U32 swf_GetTagLen(TAG * t); // ... TagGetTagLen U8* swf_GetTagLenPtr(TAG * t); U32 swf_GetBits(TAG * t,int nbits); S32 swf_GetSBits(TAG * t,int nbits); int swf_SetBits(TAG * t,U32 v,int nbits); int swf_CountUBits(U32 v,int nbits); int swf_CountBits(U32 v,int nbits); int swf_GetBlock(TAG * t,U8 * b,int l); // resets Bitcount int swf_SetBlock(TAG * t,const U8 * b,int l); U8 swf_GetU8(TAG * t); // resets Bitcount U16 swf_GetU16(TAG * t); #define swf_GetS16(tag) ((S16)swf_GetU16(tag)) U32 swf_GetU32(TAG * t); float swf_GetF16(TAG * t); void swf_GetRGB(TAG * t, RGBA * col); void swf_GetRGBA(TAG * t, RGBA * col); void swf_GetGradient(TAG * t, GRADIENT * gradient, char alpha); void swf_SetGradient(TAG * tag, GRADIENT * gradient, char alpha); void swf_FreeGradient(GRADIENT* gradient); char* swf_GetString(TAG*t); int swf_SetU8(TAG * t,U8 v); // resets Bitcount int swf_SetU16(TAG * t,U16 v); void swf_SetS16(TAG * t,int v); int swf_SetU32(TAG * t,U32 v); void swf_SetF16(TAG * t,float f); void swf_SetString(TAG*t,const char*s); float floatToF16(float f); float F16toFloat(U16 x); float swf_GetFloat(TAG *tag); void swf_SetFloat(TAG *tag, float v); /* abc datatypes */ U32 swf_GetU30(TAG*tag); int swf_SetU30(TAG*tag, U32 u); void swf_SetABCU32(TAG*tag, U32 u); U32 swf_GetABCU32(TAG*tag); void swf_SetABCS32(TAG*tag, S32 v); S32 swf_GetABCS32(TAG*tag); int swf_SetU30String(TAG*tag, const char*str, int len); double swf_GetD64(TAG*tag); int swf_SetD64(TAG*tag, double v); int swf_GetU24(TAG*tag); int swf_GetS24(TAG*tag); int swf_SetU24(TAG*tag, U32 v); int swf_SetS24(TAG*tag, U32 v); //int swf_GetPoint(TAG * t,SPOINT * p); // resets Bitcount int swf_GetRect(TAG * t,SRECT * r); int swf_GetMatrix(TAG * t,MATRIX * m); int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha); double swf_GetFixed(TAG * t); void swf_SetFixed(TAG * t, double f); float swf_GetFixed8(TAG * t); void swf_SetFixed8(TAG * t, float f); //int swf_SetPoint(TAG * t,SPOINT * p); // resets Bitcount int swf_SetRect(TAG * t,SRECT * r); int swf_SetMatrix(TAG * t,MATRIX * m); int swf_SetCXForm(TAG * t,CXFORM * cx,U8 alpha); int swf_SetRGB(TAG * t,RGBA * col); int swf_SetRGBA(TAG * t,RGBA * col); void swf_SetPassword(TAG * t, const char * password); int swf_VerifyPassword(TAG * t, const char * password); // helper functions: SRECT swf_ClipRect(SRECT border, SRECT r); void swf_ExpandRect(SRECT*src, SPOINT add); void swf_ExpandRect2(SRECT*src, SRECT*add); void swf_ExpandRect3(SRECT*src, SPOINT center, int radius); SPOINT swf_TurnPoint(SPOINT p, MATRIX* m); SRECT swf_TurnRect(SRECT r, MATRIX* m); #ifndef FAILED #define FAILED(b) ((b)<0) #endif // Tag IDs (adopted from J. C. Kessels' Form2Flash) #define ST_END 0 #define ST_SHOWFRAME 1 #define ST_DEFINESHAPE 2 #define ST_FREECHARACTER 3 #define ST_PLACEOBJECT 4 #define ST_REMOVEOBJECT 5 #define ST_DEFINEBITS 6 #define ST_DEFINEBITSJPEG 6 #define ST_DEFINEBUTTON 7 #define ST_JPEGTABLES 8 #define ST_SETBACKGROUNDCOLOR 9 #define ST_DEFINEFONT 10 #define ST_DEFINETEXT 11 #define ST_DOACTION 12 #define ST_DEFINEFONTINFO 13 #define ST_DEFINESOUND 14 /* Event sound tags. */ #define ST_STARTSOUND 15 #define ST_DEFINEBUTTONSOUND 17 #define ST_SOUNDSTREAMHEAD 18 #define ST_SOUNDSTREAMBLOCK 19 #define ST_DEFINEBITSLOSSLESS 20 /* A bitmap using lossless zlib compression. */ #define ST_DEFINEBITSJPEG2 21 /* A bitmap using an internal JPEG compression table. */ #define ST_DEFINESHAPE2 22 #define ST_DEFINEBUTTONCXFORM 23 #define ST_PROTECT 24 /* This file should not be importable for editing. */ #define ST_PLACEOBJECT2 26 /* The new style place w/ alpha color transform and name. */ #define ST_REMOVEOBJECT2 28 /* A more compact remove object that omits the character tag (just depth). */ #define ST_FREEALL 31 /* ? */ #define ST_DEFINESHAPE3 32 /* A shape V3 includes alpha values. */ #define ST_DEFINETEXT2 33 /* A text V2 includes alpha values. */ #define ST_DEFINEBUTTON2 34 /* A button V2 includes color transform, alpha and multiple actions */ #define ST_DEFINEBITSJPEG3 35 /* A JPEG bitmap with alpha info. */ #define ST_DEFINEBITSLOSSLESS2 36 /* A lossless bitmap with alpha info. */ #define ST_DEFINEEDITTEXT 37 #define ST_DEFINEMOVIE 38 #define ST_DEFINESPRITE 39 /* Define a sequence of tags that describe the behavior of a sprite. */ #define ST_NAMECHARACTER 40 /* Name a character definition, character id and a string, (used for buttons, bitmaps, sprites and sounds). */ #define ST_SERIALNUMBER 41 #define ST_GENERATORTEXT 42 /* contains an id */ #define ST_FRAMELABEL 43 /* A string label for the current frame. */ #define ST_SOUNDSTREAMHEAD2 45 /* For lossless streaming sound, should not have needed this... */ #define ST_DEFINEMORPHSHAPE 46 /* A morph shape definition */ #define ST_DEFINEFONT2 48 #define ST_TEMPLATECOMMAND 49 #define ST_GENERATOR3 51 #define ST_EXTERNALFONT 52 #define ST_EXPORTASSETS 56 #define ST_IMPORTASSETS 57 #define ST_ENABLEDEBUGGER 58 #define ST_DOINITACTION 59 #define ST_DEFINEVIDEOSTREAM 60 #define ST_VIDEOFRAME 61 #define ST_DEFINEFONTINFO2 62 #define ST_MX4 63 /*(?) */ #define ST_ENABLEDEBUGGER2 64 /* version 8 */ #define ST_SCRIPTLIMITS 65 /* version 7- u16 maxrecursedepth, u16 scripttimeoutseconds */ #define ST_SETTABINDEX 66 /* version 7- u16 depth(!), u16 tab order value */ #define ST_FILEATTRIBUTES 69 /* version 8 (required)- */ #define ST_PLACEOBJECT3 70 /* version 8 */ #define ST_IMPORTASSETS2 71 /* version 8 */ #define ST_RAWABC 72 /* version 9, used by flex */ #define ST_DEFINEFONTALIGNZONES 73 /* version 8 */ #define ST_CSMTEXTSETTINGS 74 /* version 8 */ #define ST_DEFINEFONT3 75 /* version 8 */ #define ST_SYMBOLCLASS 76 /* version 9 */ #define ST_METADATA 77 /* version 8 */ #define ST_DEFINESCALINGGRID 78 /* version 8 */ #define ST_DOABC 82 /* version 9 */ #define ST_DEFINESHAPE4 83 /* version 8 */ #define ST_DEFINEMORPHSHAPE2 84 /* version 8 */ #define ST_SCENEDESCRIPTION 86 /* version 9 */ #define ST_DEFINEBINARY 87 /* version 9 */ #define ST_DEFINEFONTNAME 88 /* version 9 */ /* custom tags- only valid for swftools */ #define ST_REFLEX 777 /* to identify generator software */ #define ST_GLYPHNAMES 778 // Advanced Funtions // swfshape.c typedef struct _LINESTYLE { U16 width; RGBA color; } LINESTYLE; #define FILL_SOLID 0x00 #define FILL_LINEAR 0x10 // Gradient #define FILL_RADIAL 0x12 #define FILL_TILED 0x40 // Bitmap #define FILL_CLIPPED 0x41 typedef struct _FILLSTYLE { U8 type; RGBA color; MATRIX m; U16 id_bitmap; GRADIENT gradient; } FILLSTYLE; typedef struct _SHAPE // NEVER access a Shape-Struct directly ! { struct { LINESTYLE * data; U16 n; } linestyle; struct { FILLSTYLE * data; U16 n; } fillstyle; struct { U16 fill; U16 line; } bits; // used by Get/SetSimpleShape and glyph handling U8 * data; U32 bitlen; // length of data in bits } SHAPE; /* SHAPE can be converted into SHAPE2: */ struct _SHAPELINE; typedef struct _SHAPE2 { LINESTYLE * linestyles; int numlinestyles; FILLSTYLE* fillstyles; int numfillstyles; struct _SHAPELINE * lines; SRECT* bbox; // may be NULL } SHAPE2; enum SHAPELINETYPE {moveTo, lineTo, splineTo}; typedef struct _SHAPELINE { enum SHAPELINETYPE type; SCOORD x,y; SCOORD sx,sy; //only if type==splineTo int fillstyle0; int fillstyle1; int linestyle; struct _SHAPELINE * next; } SHAPELINE; // Shapes int swf_ShapeNew(SHAPE ** s); void swf_ShapeFree(SHAPE * s); char swf_ShapeIsEmpty(SHAPE*s); int swf_GetSimpleShape(TAG * t,SHAPE ** s); // without Linestyle/Fillstyle Record int swf_SetSimpleShape(TAG * t,SHAPE * s); // without Linestyle/Fillstyle Record int swf_ShapeAddLineStyle(SHAPE * s,U16 width,RGBA * color); int swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color); int swf_ShapeAddBitmapFillStyle(SHAPE * s,MATRIX * m,U16 id_bitmap,int clip); int swf_ShapeAddGradientFillStyle(SHAPE * s,MATRIX * m,GRADIENT* gradient,int radial); int swf_ShapeAddFillStyle2(SHAPE * s,FILLSTYLE*fs); int swf_SetShapeStyles(TAG * t,SHAPE * s); int swf_ShapeCountBits(SHAPE * s,U8 * fbits,U8 * lbits); int swf_SetShapeBits(TAG * t,SHAPE * s); int swf_SetShapeHeader(TAG * t,SHAPE * s); // one call for upper three functions int swf_ShapeSetMove(TAG * t,SHAPE * s,S32 x,S32 y); int swf_ShapeSetStyle(TAG * t,SHAPE * s,int line,int fill0,int fill1); #define UNDEFINED_COORD 0x7fffffff int swf_ShapeSetAll(TAG * t,SHAPE * s,S32 x,S32 y,int line,int fill0,int fill1); int swf_ShapeSetLine(TAG * t,SHAPE * s,S32 x,S32 y); int swf_ShapeSetCurve(TAG * t,SHAPE * s,S32 x,S32 y,S32 ax,S32 ay); int swf_ShapeSetCircle(TAG * t,SHAPE * s,S32 x,S32 y,S32 rx,S32 ry); int swf_ShapeSetEnd(TAG * t); int swf_SetShapeStyleCount(TAG * t,U16 n); int swf_SetFillStyle(TAG * t,FILLSTYLE * f); int swf_SetLineStyle(TAG * t,LINESTYLE * l); void swf_ShapeSetRectangle(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba); void swf_ShapeSetRectangleWithBorder(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba, int linewidth, RGBA*linecolor); void swf_ShapeSetBitmapRect(TAG * t, U16 gfxid, int width, int height); //SHAPELINE* swf_ParseShapeData(U8*data, int bits, int fillbits, int linebits); SHAPE2* swf_ShapeToShape2(SHAPE*shape); void swf_Shape2ToShape(SHAPE2*shape2, SHAPE*shape); SRECT swf_GetShapeBoundingBox(SHAPE2*shape); void swf_SetShape2(TAG*tag, SHAPE2*shape); SHAPE2* swf_Shape2Clone(SHAPE2 * s); void swf_Shape2Free(SHAPE2 * s); void swf_DumpShape(SHAPE2*shape2); void swf_ParseDefineShape(TAG*tag, SHAPE2*shape); void swf_SetShape2(TAG*tag, SHAPE2*shape2); void swf_RecodeShapeData(U8*data, int bitlen, int in_bits_fill, int in_bits_line, U8**destdata, U32*destbitlen, int out_bits_fill, int out_bits_line); // swfdraw.c void swf_Shape10DrawerInit(drawer_t*draw, TAG*tag); void swf_Shape01DrawerInit(drawer_t*draw, TAG*tag); void swf_Shape11DrawerInit(drawer_t*draw, TAG*tag); SHAPE* swf_ShapeDrawerToShape(drawer_t*draw); SRECT swf_ShapeDrawerGetBBox(drawer_t*draw); void swf_DrawString(drawer_t*draw, const char*source); // swftext.c typedef struct _KERNING { U16 char1; U16 char2; U16 adjustment; } SWFKERNING; typedef struct _SWFLAYOUT { U16 ascent; U16 descent; U16 leading; SRECT * bounds; U16 kerningcount; SWFKERNING * kerning; } SWFLAYOUT; typedef struct { S16 advance; SHAPE * shape; } SWFGLYPH; typedef struct _SWFGLYPHPAIR { U16 char1; U16 char2; int num; } SWFGLYPHPAIR; typedef struct _FONTUSAGE { int* chars; char is_reduced; int used_glyphs; int glyphs_specified; U16 smallest_size; SWFGLYPHPAIR* neighbors; int num_neighbors; int neighbors_size; int* neighbors_hash; int neighbors_hash_size; } FONTUSAGE; #define FONT_STYLE_BOLD 1 #define FONT_STYLE_ITALIC 2 #define FONT_ENCODING_UNICODE 1 #define FONT_ENCODING_ANSI 2 #define FONT_ENCODING_SHIFTJIS 4 #define FONTALIGN_THIN 0 #define FONTALIGN_MEDIUM 1 #define FONTALIGN_THICK 2 typedef struct _ALIGNZONE { U16 x,y; U16 dx,dy; } ALIGNZONE; typedef struct _SWFFONT { int id; // -1 = not set U8 version; // 0 = not set, 1 = definefont, 2 = definefont2, 3 = definefont3 U8 * name; SWFLAYOUT * layout; int numchars; int maxascii; // highest mapped ascii/unicode value U8 style; U8 encoding; U16 * glyph2ascii; int * ascii2glyph; int * glyph2glyph; // only if the font is resorted SWFGLYPH * glyph; ALIGNZONE * alignzones; U8 alignzone_flags; U8 language; char ** glyphnames; FONTUSAGE * use; } SWFFONT; #define ET_HASTEXT 32768 #define ET_WORDWRAP 16384 #define ET_MULTILINE 8192 #define ET_PASSWORD 4096 #define ET_READONLY 2048 #define ET_HASTEXTCOLOR 1024 #define ET_HASMAXLENGTH 512 #define ET_HASFONT 256 #define ET_X3 128 #define ET_AUTOSIZE 64 /* MX */ #define ET_HASLAYOUT 32 #define ET_NOSELECT 16 #define ET_BORDER 8 #define ET_X1 4 #define ET_HTML 2 /* MX? */ #define ET_USEOUTLINES 1 #define ET_ALIGN_LEFT 0 #define ET_ALIGN_RIGHT 1 #define ET_ALIGN_CENTER 2 #define ET_ALIGN_JUSTIFY 3 typedef struct _EditTextLayout { U8 align; // 0=left, 1=right, 2=center, 3=justify U16 leftmargin; U16 rightmargin; U16 indent; U16 leading; } EditTextLayout; int swf_FontEnumerate(SWF * swf,void (*FontCallback) (void*,U16,U8*), void*self); // -> void fontcallback(U16 id,U8 * name); returns number of defined fonts int swf_FontExtract(SWF * swf,int id,SWFFONT ** f); // Fetches all available information from DefineFont, DefineFontInfo, DefineText, ... // id = FontID, id=0 -> Extract first Font int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag); int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t); int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t); int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag); int swf_FontExtract_DefineFontAlignZones(int id, SWFFONT * font, TAG * tag); int swf_FontIsItalic(SWFFONT * f); int swf_FontIsBold(SWFFONT * f); int swf_FontSetID(SWFFONT * f,U16 id); int swf_FontReduce(SWFFONT * f); int swf_FontReduce_swfc(SWFFONT * f); int swf_FontInitUsage(SWFFONT * f); int swf_FontUseGlyph(SWFFONT * f, int glyph, U16 size); void swf_FontUsePair(SWFFONT * f, int char1, int char2); int swf_FontUseGetPair(SWFFONT * f, int char1, int char2); int swf_FontUseAll(SWFFONT* f); int swf_FontUseUTF8(SWFFONT * f, const U8 * s, U16 size); int swf_FontUse(SWFFONT* f,U8 * s); void swf_FontSort(SWFFONT * font); int swf_FontSetDefine(TAG * t,SWFFONT * f); int swf_FontSetDefine2(TAG * t,SWFFONT * f); int swf_FontSetInfo(TAG * t,SWFFONT * f); void swf_FontSetAlignZones(TAG*t, SWFFONT *f); void swf_FontCreateLayout(SWFFONT*f); void swf_FontCreateAlignZones(SWFFONT * f); void swf_FontAddLayout(SWFFONT * f, int ascent, int descent, int leading); void swf_FontPostprocess(SWF*swf); int swf_ParseDefineText(TAG * t, void(*callback)(void*self, int*chars, int*xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA* color), void*self); void swf_WriteFont(SWFFONT* font, char* filename); SWFFONT* swf_ReadFont(const char* filename); void swf_FontFree(SWFFONT * f); U32 swf_TextGetWidth(SWFFONT * font,U8 * s,int scale); int swf_TextCountBits(SWFFONT * font,U8 * s,int scale,U8 * gbits,U8 * abits); #define SET_TO_ZERO 0x80000000 int swf_TextSetInfoRecord(TAG * t,SWFFONT * font,U16 size,RGBA * color,int dx,int dy); int swf_TextSetCharRecord(TAG * t,SWFFONT * font,U8 * s,int scale,U8 gbits,U8 abits); int swf_TextPrintDefineText(TAG * t,SWFFONT * f); // Prints text defined in tag t with font f to stdout void swf_FontPrepareForEditText(SWFFONT * f); /* notice: if you set the fontid, make sure you call swf_FontPrepareForEditText() for the font first */ void swf_SetEditText(TAG*tag, U16 flags, SRECT r, const char*text, RGBA*color, int maxlength, U16 font, U16 height, EditTextLayout*layout, const char*variable); SRECT swf_SetDefineText(TAG*tag, SWFFONT*font, RGBA*rgb, const char*text, int scale); void swf_DrawText(drawer_t*draw, SWFFONT*font, int size, const char*text); // swffont.c SWFFONT* swf_LoadTrueTypeFont(const char*filename, char flashtype); SWFFONT* swf_LoadT1Font(const char*filename); SWFFONT* swf_LoadFont(const char*filename, char flashtype); void swf_SetLoadFontParameters(int scale, int skip_unused, int full_unicode); // swfdump.c void swf_DumpHeader(FILE * f,SWF * swf); void swf_DumpMatrix(FILE * f,MATRIX * m); void swf_DumpTag(FILE * f,TAG * t); void swf_DumpSWF(FILE * f,SWF*swf); void swf_DumpGradient(FILE* f, GRADIENT*gradient); char* swf_TagGetName(TAG*tag); void swf_DumpFont(SWFFONT * font); // swfbits.c int swf_ImageHasAlpha(RGBA*img, int width, int height); int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette); typedef int JPEGBITS; JPEGBITS * swf_SetJPEGBitsStart(TAG * t,int width,int height,int quality); // deprecated int swf_SetJPEGBitsLines(JPEGBITS * jpegbits,U8 ** data,int n); // deprecated int swf_SetJPEGBitsLine(JPEGBITS * jpegbits,U8 * data); // deprecated int swf_SetJPEGBitsFinish(JPEGBITS * jpegbits); // deprecated void swf_GetJPEGSize(const char * fname, int*width, int*height); int swf_SetJPEGBits(TAG * t,const char * fname,int quality); void swf_SetJPEGBits2(TAG * t,U16 width,U16 height,RGBA * bitmap,int quality); int swf_SetJPEGBits3(TAG * tag,U16 width,U16 height,RGBA* bitmap, int quality); RGBA* swf_JPEG2TagToImage(TAG*tag, int*width, int*height); void swf_RemoveJPEGTables(SWF*swf); void swf_SaveJPEG(char*filename, RGBA*pixels, int width, int height, int quality); #define BYTES_PER_SCANLINE(width) ((width+3)&0xfffffffc) #define BMF_8BIT 3 // Bitmap formats #define BMF_16BIT 4 #define BMF_32BIT 5 int swf_SetLosslessBits(TAG * t,U16 width,U16 height,void * bitmap,U8 bitmap_flags); int swf_SetLosslessBitsIndexed(TAG * t,U16 width,U16 height,U8 * bitmap,RGBA * palette,U16 ncolors); int swf_SetLosslessBitsGrayscale(TAG * t,U16 width,U16 height,U8 * bitmap); void swf_SetLosslessImage(TAG*tag, RGBA*data, int width, int height); //WARNING: will change tag->id RGBA* swf_DefineLosslessBitsTagToImage(TAG*tag, int*width, int*height); RGBA* swf_ExtractImage(TAG*tag, int*dwidth, int*dheight); TAG* swf_AddImage(TAG*tag, int bitid, RGBA*mem, int width, int height, int quality); // swfsound.c void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples); void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first); /* expects 2304 samples */ void swf_SetSoundDefine(TAG*tag, S16*samples, int num); void swf_SetSoundDefineMP3(TAG*tag, U8* data, unsigned length, unsigned SampRate, unsigned Channels, unsigned NumFrames); void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info); // swftools.c void swf_Optimize(SWF*swf); U8 swf_isDefiningTag(TAG * t); U8 swf_isPseudoDefiningTag(TAG * t); U8 swf_isAllowedSpriteTag(TAG * t); U8 swf_isImageTag(TAG*tag); U8 swf_isShapeTag(TAG*tag); U8 swf_isTextTag(TAG*tag); U8 swf_isFontTag(TAG*tag); U8 swf_isPlaceTag(TAG*tag); U16 swf_GetDefineID(TAG * t); SRECT swf_GetDefineBBox(TAG * t); void swf_SetDefineBBox(TAG * t, SRECT r); void swf_SetDefineID(TAG * t, U16 newid); U16 swf_GetPlaceID(TAG * t); //PLACEOBJECT, PLACEOBJECT2 (sometimes), REMOVEOBJECT int swf_GetDepth(TAG * t); //PLACEOBJECT,PLACEOBJECT2,REMOVEOBJECT,REMOVEOBJECT2,SETTABINDEX char* swf_GetName(TAG * t); //PLACEOBJECT2, FRAMELABEL MATRIX * swf_MatrixJoin(MATRIX * d,MATRIX * s1,MATRIX * s2); MATRIX * swf_MatrixMapTriangle(MATRIX * m,int dx,int dy, int x0,int y0,int x1,int y1,int x2,int y2); int swf_GetNumUsedIDs(TAG * t); void swf_GetUsedIDs(TAG * t, int * positions); char swf_Relocate(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free void swf_RelocateDepth(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[d]==0 means depth d is free TAG* swf_Concatenate (TAG*list1,TAG*list2); // warning: both list1 and list2 are invalid after this call. RGBA swf_GetSWFBackgroundColor(SWF*swf); // swfcgi.c void swf_uncgi(); // same behaviour as Steven Grimm's uncgi-library // as3/abc.c void*swf_ReadABC(TAG*tag); void*swf_DumpABC(FILE*fo, void*code, char*prefix); void swf_WriteABC(TAG*tag, void*code); void swf_FreeABC(void*code); void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events); TAG*swf_AddAS3FontDefine(TAG*tag, U16 id, char*fontname); #include "as3/compiler.h" #include "as3/import.h" // swfaction.c typedef struct _ActionTAG { U8 op; U16 len; U8 * data; struct _ActionTAG * next; struct _ActionTAG * prev; struct _ActionTAG * parent; U8 tmp[8]; // store small operands here. } ActionTAG; typedef struct _ActionMarker { ActionTAG* atag; } ActionMarker; ActionTAG* swf_ActionGet(TAG*tag); void swf_ActionFree(ActionTAG*tag); void swf_ActionSet(TAG*tag, ActionTAG*actions); void swf_DumpActions(ActionTAG*atag, char*prefix); void swf_ActionEnumerateURLs(ActionTAG*atag, char*(*callback)(char*)); void swf_ActionEnumerateTargets(ActionTAG*atag, char*(*callback)(char*)); void swf_ActionEnumerateStrings(ActionTAG*atag, char*(*callback)(char*)); // using action/actioncompiler.h: ActionTAG* swf_ActionCompile(const char* source, int version); #define ACTION__GOTOFRAME 0x81 #define ACTION__GETURL 0x83 ActionTAG* action_End(ActionTAG*atag); ActionTAG* action_NextFrame(ActionTAG*atag); ActionTAG* action_PreviousFrame(ActionTAG*atag); ActionTAG* action_Play(ActionTAG*atag); ActionTAG* action_Stop(ActionTAG*atag); ActionTAG* action_ToggleQuality(ActionTAG*atag); ActionTAG* action_StopSounds(ActionTAG*atag); ActionTAG* action_Add(ActionTAG*atag); ActionTAG* action_Subtract(ActionTAG*atag); ActionTAG* action_Multiply(ActionTAG*atag); ActionTAG* action_Divide(ActionTAG*atag); ActionTAG* action_Equals(ActionTAG*atag); ActionTAG* action_Less(ActionTAG*atag); ActionTAG* action_And(ActionTAG*atag); ActionTAG* action_Or(ActionTAG*atag); ActionTAG* action_Not(ActionTAG*atag); ActionTAG* action_StringEquals(ActionTAG*atag); ActionTAG* action_StringLength(ActionTAG*atag); ActionTAG* action_StringExtract(ActionTAG*atag); ActionTAG* action_Pop(ActionTAG*atag); ActionTAG* action_ToInteger(ActionTAG*atag); ActionTAG* action_GetVariable(ActionTAG*atag); ActionTAG* action_SetVariable(ActionTAG*atag); ActionTAG* action_SetTarget2(ActionTAG*atag); ActionTAG* action_StringAdd(ActionTAG*atag); ActionTAG* action_GetProperty(ActionTAG*atag); ActionTAG* action_SetProperty(ActionTAG*atag); ActionTAG* action_CloneSprite(ActionTAG*atag); ActionTAG* action_RemoveSprite(ActionTAG*atag); ActionTAG* action_Trace(ActionTAG*atag); ActionTAG* action_StartDrag(ActionTAG*atag); ActionTAG* action_EndDrag(ActionTAG*atag); ActionTAG* action_StringLess(ActionTAG*atag); ActionTAG* action_RandomNumber(ActionTAG*atag); ActionTAG* action_MBStringLength(ActionTAG*atag); ActionTAG* action_CharToAscii(ActionTAG*atag); ActionTAG* action_AsciiToChar(ActionTAG*atag); ActionTAG* action_GetTime(ActionTAG*atag); ActionTAG* action_MBStringExtract(ActionTAG*atag); ActionTAG* action_MBCharToAscii(ActionTAG*atag); ActionTAG* action_MBAsciiToChar(ActionTAG*atag); ActionTAG* action_Delete(ActionTAG*atag); ActionTAG* action_Delete2(ActionTAG*atag); ActionTAG* action_DefineLocal(ActionTAG*atag); ActionTAG* action_CallFunction(ActionTAG*atag); ActionTAG* action_Return(ActionTAG*atag); ActionTAG* action_Modulo(ActionTAG*atag); ActionTAG* action_NewObject(ActionTAG*atag); ActionTAG* action_DefineLocal2(ActionTAG*atag); ActionTAG* action_InitArray(ActionTAG*atag); ActionTAG* action_Makehash(ActionTAG*atag); ActionTAG* action_TypeOf(ActionTAG*atag); ActionTAG* action_TargetPath(ActionTAG*atag); ActionTAG* action_Enumerate(ActionTAG*atag); ActionTAG* action_Add2(ActionTAG*atag); ActionTAG* action_Less2(ActionTAG*atag); ActionTAG* action_Equals2(ActionTAG*atag); ActionTAG* action_ToNumber(ActionTAG*atag); ActionTAG* action_ToString(ActionTAG*atag); ActionTAG* action_PushDuplicate(ActionTAG*atag); ActionTAG* action_StackSwap(ActionTAG*atag); ActionTAG* action_GetMember(ActionTAG*atag); ActionTAG* action_SetMember(ActionTAG*atag); ActionTAG* action_Increment(ActionTAG*atag); ActionTAG* action_Decrement(ActionTAG*atag); ActionTAG* action_CallMethod(ActionTAG*atag); ActionTAG* action_NewMethod(ActionTAG*atag); ActionTAG* action_BitAnd(ActionTAG*atag); ActionTAG* action_BitOr(ActionTAG*atag); ActionTAG* action_BitXor(ActionTAG*atag); ActionTAG* action_BitLShift(ActionTAG*atag); ActionTAG* action_BitRShift(ActionTAG*atag); ActionTAG* action_BitURShift(ActionTAG*atag); ActionTAG* action_GotoFrame(ActionTAG*atag, U16 frame); ActionTAG* action_GetUrl(ActionTAG*atag, const char* url, char* label); ActionTAG* action_StoreRegister(ActionTAG*atag, U8 reg); ActionTAG* action_Constantpool(ActionTAG*atag, char* constantpool); ActionTAG* action_WaitForFrame(ActionTAG*atag, U16 frame, U8 skip); ActionTAG* action_SetTarget(ActionTAG*atag, const char* target); ActionTAG* action_GotoLabel(ActionTAG*atag, char* label); ActionTAG* action_WaitForFrame2(ActionTAG*atag, U8 skip); ActionTAG* action_With(ActionTAG*atag, char*object); ActionTAG* action_PushString(ActionTAG*atag, const char*str); ActionTAG* action_PushFloat(ActionTAG*atag, float f); ActionTAG* action_PushNULL(ActionTAG*atag); ActionTAG* action_PushRegister(ActionTAG*atag, U8 reg); ActionTAG* action_PushBoolean(ActionTAG*atag, char c); ActionTAG* action_PushDouble(ActionTAG*atag, double d); ActionTAG* action_PushInt(ActionTAG*atag, int i); ActionTAG* action_PushLookup(ActionTAG*atag, U8 index); ActionTAG* action_Jump(ActionTAG*atag, U16 branch); ActionTAG* action_GetUrl2(ActionTAG*atag, U8 method); ActionTAG* action_DefineFunction(ActionTAG*atag, U8*data, int len); ActionTAG* action_If(ActionTAG*atag, U16 branch); ActionTAG* action_Call(ActionTAG*atag); ActionTAG* action_GotoFrame2(ActionTAG*atag, U8 method); ActionMarker action_setMarker(ActionTAG*atag); void action_fixjump(ActionMarker m1, ActionMarker m2); // swfobject.c // The following 3 routines only use placeobject2: extern char*blendModeNames[]; int swf_ObjectPlace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name); int swf_ObjectPlaceClip(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name, U16 clipaction); int swf_ObjectPlaceBlend(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char* name, U8 blendmode); int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx); #define PF_MOVE 0x01 #define PF_CHAR 0x02 #define PF_MATRIX 0x04 #define PF_CXFORM 0x08 #define PF_RATIO 0x10 #define PF_NAME 0x20 #define PF_CLIPDEPTH 0x40 #define PF_ACTIONEVENT 0x80 #define PF2_FILTERS 0x01 #define PF2_BLENDMODE 0x02 #define PF2_ASBITMAP 0x04 //... #define BLENDMODE_NORMAL 0 #define BLENDMODE_NORMAL2 1 #define BLENDMODE_LAYER 2 #define BLENDMODE_MULTIPLY 3 #define BLENDMODE_SCREEN 4 #define BLENDMODE_LIGHTEN 5 #define BLENDMODE_DARKEN 6 #define BLENDMODE_ADD 7 #define BLENDMODE_SUBSTRACT 8 #define BLENDMODE_DIFFERENCE 9 #define BLENDMODE_INVERT 10 #define BLENDMODE_ALPHA 11 #define BLENDMODE_ERASE 12 #define BLENDMODE_OVERLAY 13 #define BLENDMODE_HARDLIGHT 14 typedef struct _SWFPLACEOBJECT { U8 flags; U16 depth; U16 id; // may be 0 char move; //true: move/replace character, false: set character MATRIX matrix; CXFORM cxform; U16 ratio; char*name; U16 clipdepth; ActionTAG* actions; U8 blendmode; FILTERLIST*filters; } SWFPLACEOBJECT; void swf_SetPlaceObject(TAG * t,SWFPLACEOBJECT* obj); void swf_GetPlaceObject(TAG * t,SWFPLACEOBJECT* obj); void swf_PlaceObjectFree(SWFPLACEOBJECT* obj); // swfvideo.c typedef struct _VIDEOSTREAM { int width; int height; int linex; int owidth; int oheight; int olinex; int frame; YUV*oldpic; YUV*current; int bbx; int bby; int*mvdx; int*mvdy; int quant; /* modifyable: */ int do_motion; //enable motion compensation (slow!) } VIDEOSTREAM; void swf_SetVideoStreamDefine(TAG*tag, VIDEOSTREAM*stream, U16 frames, U16 width, U16 height); void swf_SetVideoStreamIFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant/* 1-31, 1=best quality, 31=best compression*/); void swf_SetVideoStreamBlackFrame(TAG*tag, VIDEOSTREAM*s); void swf_SetVideoStreamPFrame(TAG*tag, VIDEOSTREAM*s, RGBA*pic, int quant/* 1-31, 1=best quality, 31=best compression*/); void swf_SetVideoStreamMover(TAG*tag, VIDEOSTREAM*s, signed char* movex, signed char* movey, void** image, int quant); void swf_VideoStreamClear(VIDEOSTREAM*stream); // swfbutton.c // Button States #define BS_HIT 0x08 #define BS_DOWN 0x04 #define BS_OVER 0x02 #define BS_UP 0x01 // Button Conditions /* missing: IDLE_OUTDOWN OUTDOWN_OVERUP OVERUP_OUTDOWN */ #define BC_OVERDOWN_IDLE 0x0100 #define BC_IDLE_OVERDOWN 0x0080 #define BC_OUTDOWN_IDLE 0x0040 #define BC_OUTDOWN_OVERDOWN 0x0020 #define BC_OVERDOWN_OUTDOWN 0x0010 #define BC_OVERDOWN_OVERUP 0x0008 #define BC_OVERUP_OVERDOWN 0x0004 #define BC_OVERUP_IDLE 0x0002 #define BC_IDLE_OVERUP 0x0001 #define BC_KEY(c) (c<<9) #define BC_CURSORLEFT 0x0200 #define BC_CURSORRIGHT 0x0400 #define BC_POS1 0x0600 #define BC_END 0x0800 #define BC_INSERT 0x0a00 #define BC_DELETE 0x0c00 #define BC_CLEAR 0x0e00 #define BC_BACKSPACE 0x1000 #define BC_ENTER 0x1a00 #define BC_CURSORUP 0x1c00 #define BC_CURSORDOWN 0x1e00 #define BC_PAGEUP 0x2000 #define BC_PAGEDOWN 0x2200 #define BC_TAB 0x2400 #define BC_ESCAPE 0x3600 #define BC_SPACE 0x4000 /* these are probably only valid with linux: Ctrl-A 0x0200 Ctrl-X 0x3000 Ctrl-Y 0x3200 Ctrl-Z 0x3400 Escape/Ctrl-[ 0x3600 Ctrl-\ 0x3800 Ctrl-] 0x3a00 Ctrl-^ 0x3c00 Ctrl-/ 0x3e00 */ /* everything above 0x4000 is standard ascii: 0x4000 ' ' 0x4200 '!' 0x4600 '#' 0x4800 '$' 0x4a00 '%' 0x4c00 '&' ... 0x6000 '0' ... 0x7200 '9' 0x8000 '@' 0x8200 'A' ... 0xb400 'Z' ... 0xfc00 '~' */ // Button Flag #define BF_TRACKMENU 0x01 int swf_ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx); int swf_ButtonSetCondition(TAG * t,U16 condition); // for DefineButton2 int swf_ButtonSetFlags(TAG * t,U8 flags); // necessary for DefineButton2 int swf_ButtonPostProcess(TAG * t,int anz_action); // Set all offsets in DefineButton2-Tags (how many conditions to process) ActionTAG* swf_ButtonGetAction(TAG*t); // swfrender.c typedef struct RENDERBUF { int width; int height; int posx,posy; void*internal; } RENDERBUF; void swf_Render_Init(RENDERBUF*buf, int posx, int posy, int width, int height, int antialize, int multiply); void swf_Render_SetBackground(RENDERBUF*buf, RGBA*img, int width, int height); void swf_Render_SetBackgroundColor(RENDERBUF*buf, RGBA color); RGBA* swf_Render(RENDERBUF*dest); void swf_RenderShape(RENDERBUF*dest, SHAPE2*shape, MATRIX*m, CXFORM*c, U16 depth,U16 clipdepth); void swf_RenderSWF(RENDERBUF*buf, SWF*swf); void swf_Render_AddImage(RENDERBUF*buf, U16 id, RGBA*img, int width, int height); /* img is non-premultiplied */ void swf_Render_ClearCanvas(RENDERBUF*dest); void swf_Render_Delete(RENDERBUF*dest); // swffilter.c #define FILTERTYPE_DROPSHADOW 0 #define FILTERTYPE_BLUR 1 #define FILTERTYPE_GLOW 2 #define FILTERTYPE_BEVEL 3 #define FILTERTYPE_GRADIENTGLOW 4 #define FILTERTYPE_CONVOLUTION 5 #define FILTERTYPE_COLORMATRIX 6 #define FILTERTYPE_GRADIENTBEVEL 7 extern char*filtername[]; typedef struct _FILTER_GRADIENTGLOW { U8 type; GRADIENT*gradient; double blurx; double blury; double angle; double distance; float strength; char innershadow; char knockout; char composite; char ontop; int passes; } FILTER_GRADIENTGLOW; typedef struct _FILTER_DROPSHADOW { U8 type; RGBA color; double blurx; double blury; double angle; double distance; float strength; char innershadow; char knockout; char composite; int passes; } FILTER_DROPSHADOW; typedef struct _FILTER_BEVEL { U8 type; RGBA shadow; RGBA highlight; double blurx; double blury; double angle; double distance; float strength; char innershadow; char knockout; char composite; char ontop; int passes; } FILTER_BEVEL; typedef struct _FILTER_BLUR { U8 type; double blurx; double blury; int passes; } FILTER_BLUR; typedef struct _FILTER_GLOW { U8 type; RGBA rgba; double blurx; double blury; double strength; int passes; char innerglow; char knockout; char composite; } FILTER_GLOW; typedef struct _FILTER_GRADIENTBEVEL { U8 type; GRADIENT*gradient; double blurx; double blury; double angle; double distance; float strength; char innershadow; char knockout; char composite; char ontop; int passes; } FILTER_GRADIENTBEVEL; typedef struct _FILTER_CONVOLUTION { U8 type; U8 matrixx; U8 matrixy; float divisor; float bias; float *matrix; RGBA defaultcolor; char clampmode; char preservealpha; } FILTER_CONVOLUTION; typedef struct _FILTER_COLORMATRIX { U8 type; float matrix[20]; } FILTER_COLORMATRIX; void swf_SetFilter(TAG*tag, FILTER*f); FILTER*swf_GetFilter(TAG*tag); FILTER*swf_NewFilter(U8 type); void swf_DeleteFilter(FILTER*f); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/0002755000175000017500000000000012216332657017573 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/gfxpoly/convert.c0000644000175000017500000003613312216332640021413 0ustar gawaingawain#include #include #include #include "../gfxdevice.h" #include "../mem.h" #include "poly.h" #include "convert.h" #include "wind.h" /* factor that determines into how many line fragments a spline is converted */ #define SUBFRACTION (2.4) static inline int32_t convert_coord(double x, double z) { /* we clamp to 26 bit because: a) we use a (x1-x2) shortcut when comparing coordinates b) we need to be able to multiply two coordinates and store them in a double w/o loss of precision */ x *= z; if(x < -0x2000000) x = -0x2000000; if(x > 0x1ffffff) x = 0x1ffffff; return ceil(x); } static void convert_gfxline(gfxline_t*line, polywriter_t*w, double gridsize) { assert(!line || line[0].type == gfx_moveTo); double lastx=0,lasty=0; double z = 1.0 / gridsize; while(line) { if(line->type == gfx_moveTo) { if(line->next && line->next->type != gfx_moveTo && (line->x!=lastx || line->y!=lasty)) { w->moveto(w, convert_coord(line->x,z), convert_coord(line->y,z)); } } else if(line->type == gfx_lineTo) { w->lineto(w, convert_coord(line->x,z), convert_coord(line->y,z)); } else if(line->type == gfx_splineTo) { int parts = (int)(sqrt(fabs(line->x-2*line->sx+lastx) + fabs(line->y-2*line->sy+lasty))*SUBFRACTION); if(!parts) parts = 1; double stepsize = 1.0/parts; int i; for(i=0;ix*t*t + 2*line->sx*t*(1-t) + lastx*(1-t)*(1-t)); double sy = (line->y*t*t + 2*line->sy*t*(1-t) + lasty*(1-t)*(1-t)); w->lineto(w, convert_coord(sx,z), convert_coord(sy,z)); } w->lineto(w, convert_coord(line->x,z), convert_coord(line->y,z)); } lastx = line->x; lasty = line->y; line = line->next; } } static char* readline(FILE*fi) { char c; while(1) { int l = fread(&c, 1, 1, fi); if(!l) return 0; if(c!=10 || c!=13) break; } char line[256]; int pos = 0; while(1) { line[pos++] = c; line[pos] = 0; int l = fread(&c, 1, 1, fi); if(!l || c==10 || c==13) { return strdup(line); } } } static void convert_file(const char*filename, polywriter_t*w, double gridsize) { FILE*fi = fopen(filename, "rb"); if(!fi) { perror(filename); } double z = 1.0 / gridsize; int count = 0; double g = 0; double lastx=0,lasty=0; while(1) { char*line = readline(fi); if(!line) break; double x,y; char s[256]; if(sscanf(line, "%lf %lf %s", &x, &y, (char*)&s) == 3) { if(!strcmp(s,"moveto")) { w->moveto(w, convert_coord(x,z), convert_coord(y,z)); count++; } else if(!strcmp(s,"lineto")) { w->lineto(w, convert_coord(x,z), convert_coord(y,z)); count++; } else { fprintf(stderr, "invalid command: %s\n", s); } } else if(sscanf(line, "%% gridsize %lf", &g) == 1) { gridsize = g; z = 1.0 / gridsize; w->setgridsize(w, g); } free(line); } fclose(fi); if(g) { fprintf(stderr, "loaded %d points from %s (gridsize %f)\n", count, filename, g); } else { fprintf(stderr, "loaded %d points from %s\n", count, filename); } } typedef struct _compactpoly { gfxpoly_t*poly; point_t last; point_t*points; int num_points; int points_size; segment_dir_t dir; char new; } compactpoly_t; void finish_segment(compactpoly_t*data) { if(data->num_points <= 1) return; point_t*p = malloc(sizeof(point_t)*data->num_points); gfxpolystroke_t*s = rfx_calloc(sizeof(gfxpolystroke_t)); s->fs = &edgestyle_default; s->next = data->poly->strokes; data->poly->strokes = s; s->num_points = s->points_size = data->num_points; s->dir = data->dir; s->points = p; assert(data->dir != DIR_UNKNOWN); if(data->dir == DIR_UP) { int t; int s = data->num_points; for(t=0;tnum_points;t++) { p[--s] = data->points[t]; } } else { memcpy(p, data->points, sizeof(point_t)*data->num_points); } #ifdef CHECKS int t; for(t=0;tnum_points-1;t++) { assert(p[t].y<=p[t+1].y); } #endif } static void compactmoveto(polywriter_t*w, int32_t x, int32_t y) { compactpoly_t*data = (compactpoly_t*)w->internal; point_t p; p.x = x; p.y = y; if(p.x != data->last.x || p.y != data->last.y) { data->new = 1; } data->last = p; } static inline int direction(point_t p1, point_t p2) { int diff = p1.y - p2.y; if(diff) return diff; return p1.x - p2.x; } static void compactlineto(polywriter_t*w, int32_t x, int32_t y) { compactpoly_t*data = (compactpoly_t*)w->internal; point_t p; p.x = x; p.y = y; int diff = direction(p, data->last); if(!diff) return; segment_dir_t dir = diff<0?DIR_UP:DIR_DOWN; if(dir!=data->dir || data->new) { finish_segment(data); data->dir = dir; data->points[0] = data->last; data->num_points = 1; } data->new = 0; if(data->points_size == data->num_points) { data->points_size <<= 1; assert(data->points_size > data->num_points); data->points = rfx_realloc(data->points, sizeof(point_t)*data->points_size); } data->points[data->num_points++] = p; data->last = p; } static void compactsetgridsize(polywriter_t*w, double gridsize) { compactpoly_t*d = (compactpoly_t*)w->internal; d->poly->gridsize = gridsize; } /*static int compare_stroke(const void*_s1, const void*_s2) { gfxpolystroke_t*s1 = (gfxpolystroke_t*)_s1; gfxpolystroke_t*s2 = (gfxpolystroke_t*)_s2; return s1->points[0].y - s2->points[0].y; }*/ static void*compactfinish(polywriter_t*w) { compactpoly_t*data = (compactpoly_t*)w->internal; finish_segment(data); //qsort(data->poly->strokes, data->poly->num_strokes, sizeof(gfxpolystroke_t), compare_stroke); free(data->points); gfxpoly_t*poly = data->poly; free(w->internal);w->internal = 0; return (void*)poly; } void gfxpolywriter_init(polywriter_t*w) { w->moveto = compactmoveto; w->lineto = compactlineto; w->setgridsize = compactsetgridsize; w->finish = compactfinish; compactpoly_t*data = w->internal = rfx_calloc(sizeof(compactpoly_t)); data->poly = rfx_calloc(sizeof(gfxpoly_t)); data->poly->gridsize = 1.0; data->last.x = data->last.y = 0; data->num_points = 0; data->points_size = 16; data->new = 1; data->dir = DIR_UNKNOWN; data->points = (point_t*)rfx_alloc(sizeof(point_t)*data->points_size); data->poly->strokes = 0; } gfxpoly_t* gfxpoly_from_fill(gfxline_t*line, double gridsize) { polywriter_t writer; gfxpolywriter_init(&writer); writer.setgridsize(&writer, gridsize); convert_gfxline(line, &writer, gridsize); return (gfxpoly_t*)writer.finish(&writer); } gfxpoly_t* gfxpoly_from_file(const char*filename, double gridsize) { polywriter_t writer; gfxpolywriter_init(&writer); writer.setgridsize(&writer, gridsize); convert_file(filename, &writer, gridsize); return (gfxpoly_t*)writer.finish(&writer); } void gfxpoly_destroy(gfxpoly_t*poly) { int t; gfxpolystroke_t*stroke = poly->strokes; while(stroke) { gfxpolystroke_t*next = stroke->next; free(stroke->points); free(stroke); stroke = next; } free(poly); } typedef struct _polydraw_internal { double lx, ly; int32_t lastx, lasty; int32_t x0, y0; double z; char last; polywriter_t writer; } polydraw_internal_t; static void polydraw_moveTo(gfxdrawer_t*d, gfxcoord_t _x, gfxcoord_t _y) { polydraw_internal_t*i = (polydraw_internal_t*)d->internal; int32_t x = convert_coord(_x, i->z); int32_t y = convert_coord(_y, i->z); if(i->lastx != x || i->lasty != y) { i->writer.moveto(&i->writer, x, y); } i->lx = _x; i->ly = _y; i->x0 = x; i->y0 = y; i->lastx = x; i->lasty = y; i->last = 1; } static void polydraw_lineTo(gfxdrawer_t*d, gfxcoord_t _x, gfxcoord_t _y) { polydraw_internal_t*i = (polydraw_internal_t*)d->internal; if(!i->last) { polydraw_moveTo(d, _x, _y); return; } int32_t x = convert_coord(_x, i->z); int32_t y = convert_coord(_y, i->z); if(i->lastx != x || i->lasty != y) { i->writer.lineto(&i->writer, x, y); } i->lx = _x; i->ly = _y; i->lastx = x; i->lasty = y; i->last = 1; } static void polydraw_splineTo(gfxdrawer_t*d, gfxcoord_t sx, gfxcoord_t sy, gfxcoord_t x, gfxcoord_t y) { polydraw_internal_t*i = (polydraw_internal_t*)d->internal; if(!i->last) { polydraw_moveTo(d, x, y); return; } double c = fabs(x-2*sx+i->lx) + fabs(y-2*sy+i->ly); int parts = (int)(sqrt(c)*SUBFRACTION); if(!parts) parts = 1; int t; int32_t nx,ny; for(t=0;tlx)/(double)(parts*parts), i->z); ny = convert_coord((double)(t*t*y + 2*t*(parts-t)*sy + (parts-t)*(parts-t)*i->ly)/(double)(parts*parts), i->z); if(nx != i->lastx || ny != i->lasty) { i->writer.lineto(&i->writer, nx, ny); i->lastx = nx; i->lasty = ny; } } nx = convert_coord(x,i->z); ny = convert_coord(y,i->z); if(nx != i->lastx || ny != i->lasty) { i->writer.lineto(&i->writer, nx, ny); } i->lx = x; i->ly = y; i->lastx = nx; i->lasty = ny; i->last = 1; } static void polydraw_close(gfxdrawer_t*d) { polydraw_internal_t*i = (polydraw_internal_t*)d->internal; assert(!(i->last && (i->x0 == INVALID_COORD || i->y0 == INVALID_COORD))); if(!i->last) return; if(i->lastx != i->x0 || i->lasty != i->y0) { i->writer.lineto(&i->writer, i->x0, i->y0); i->lastx = i->x0; i->lasty = i->y0; } i->last = 0; i->x0 = INVALID_COORD; i->y0 = INVALID_COORD; } static void* polydraw_result(gfxdrawer_t*d) { polydraw_internal_t*i = (polydraw_internal_t*)d->internal; void*result = i->writer.finish(&i->writer); rfx_free(i); memset(d, 0, sizeof(gfxdrawer_t)); return result; } void gfxdrawer_target_poly(gfxdrawer_t*d, double gridsize) { polydraw_internal_t*i = (polydraw_internal_t*)rfx_calloc(sizeof(polydraw_internal_t)); d->internal = i; i->lastx = INVALID_COORD; // convert_coord can never return this value i->lasty = INVALID_COORD; i->x0 = INVALID_COORD; i->y0 = INVALID_COORD; d->moveTo = polydraw_moveTo; d->lineTo = polydraw_lineTo; d->splineTo = polydraw_splineTo; d->close = polydraw_close; d->result = polydraw_result; gfxpolywriter_init(&i->writer); i->writer.setgridsize(&i->writer, gridsize); i->z = 1.0 / gridsize; } #if 0 gfxline_t*gfxline_from_gfxpoly(gfxpoly_t*poly) { gfxpolystroke_t*stroke; int count = 0; for(stroke=poly->strokes;stroke;stroke=stroke->next) { assert(stroke->num_points); count += stroke->num_points; } if(!count) return 0; gfxline_t*l = malloc(sizeof(gfxline_t)*count); count = 0; /* TODO: it might make sense to concatenate strokes */ for(stroke=poly->strokes;stroke;stroke=stroke->next) { int t; for(t=0;tnum_points;t++) { l[count+t].x = stroke->points[t].x * poly->gridsize; l[count+t].y = stroke->points[t].y * poly->gridsize; l[count+t].type = gfx_lineTo; l[count+t].next = &l[count+t+1]; } l[count].type = gfx_moveTo; count+=stroke->num_points; } l[count-1].next = 0; return l; } #endif static gfxline_t*mkgfxline(gfxpoly_t*poly, char preserve_direction) { gfxpolystroke_t*stroke; int count = 0; if(!poly->strokes) return 0; dict_t*d = dict_new2(&point_type); dict_t*todo = dict_new2(&ptr_type); gfxpolystroke_t*stroke_min= poly->strokes; int32_t x_min=stroke_min->points[0].x; int32_t y_min=stroke_min->points[0].y; for(stroke=poly->strokes;stroke;stroke=stroke->next) { dict_put(todo, stroke, stroke); assert(stroke->num_points>1); count += stroke->num_points; if(stroke->dir == DIR_UP) { dict_put(d, &stroke->points[stroke->num_points-1], stroke); if(!preserve_direction) dict_put(d, &stroke->points[0], stroke); } else { dict_put(d, &stroke->points[0], stroke); if(!preserve_direction) dict_put(d, &stroke->points[stroke->num_points-1], stroke); } if(stroke->points[0].y < y_min || (stroke->points[0].y == y_min && stroke->points[0].x < x_min)) { y_min = stroke->points[0].y; stroke_min = stroke; } } gfxpolystroke_t*next_todo = poly->strokes; gfxline_t*l = malloc(sizeof(gfxline_t)*count); count = 0; stroke = stroke_min; point_t last = {INVALID_COORD, INVALID_COORD}; char should_connect = 0; while(stroke) { if(stroke && !preserve_direction) { char del1 = dict_del2(d, &stroke->points[0], stroke); char del2 = dict_del2(d, &stroke->points[stroke->num_points-1], stroke); assert(del1 && del2); } assert(dict_contains(todo, stroke)); int t; int pos = 0; int incr = 1; if(preserve_direction) { if(stroke->dir == DIR_UP) { pos = stroke->num_points-1; incr = -1; } } else { // try to find matching point on either end. // Prefer downward. if(last.x == stroke->points[stroke->num_points-1].x && last.y == stroke->points[stroke->num_points-1].y) { pos = stroke->num_points-1; incr = -1; } } if(last.x != stroke->points[pos].x || last.y != stroke->points[pos].y) { l[count].x = stroke->points[pos].x * poly->gridsize; l[count].y = stroke->points[pos].y * poly->gridsize; l[count].type = gfx_moveTo; l[count].next = &l[count+1]; count++; assert(!should_connect); } pos += incr; for(t=1;tnum_points;t++) { l[count].x = stroke->points[pos].x * poly->gridsize; l[count].y = stroke->points[pos].y * poly->gridsize; l[count].type = gfx_lineTo; l[count].next = &l[count+1]; count++; pos += incr; } last = stroke->points[pos-incr]; char del = dict_del(todo, stroke); assert(del); assert(!dict_contains(todo, stroke)); /* try to find a poly which starts at the point we drew last */ stroke = dict_lookup(d, &last); should_connect = 1; while(!dict_contains(todo, stroke)) { should_connect = 0; stroke = next_todo; if(!next_todo) { stroke = 0; break; } next_todo = next_todo->next; } } l[count-1].next = 0; dict_destroy(todo); dict_destroy(d); return l; } gfxline_t*gfxline_from_gfxpoly(gfxpoly_t*poly) { return mkgfxline(poly, 0); } gfxline_t*gfxline_from_gfxpoly_with_direction(gfxpoly_t*poly) { return mkgfxline(poly, 1); } static windcontext_t onepolygon = {1}; gfxline_t* gfxpoly_circular_to_evenodd(gfxline_t*line, double gridsize) { gfxpoly_t*poly = gfxpoly_from_fill(line, gridsize); gfxpoly_t*poly2 = gfxpoly_process(poly, 0, &windrule_circular, &onepolygon, 0); gfxline_t*line2 = gfxline_from_gfxpoly(poly2); gfxpoly_destroy(poly); gfxpoly_destroy(poly2); return line2; } gfxpoly_t* gfxpoly_createbox(double x1, double y1,double x2, double y2, double gridsize) { gfxline_t* line = gfxline_makerectangle(x1, y1, x2, y2); gfxpoly_t* poly = gfxpoly_from_fill(line, gridsize); gfxline_free(line); return poly; } swftools_0.9.2+git20130725.orig/lib/gfxpoly/stroke.c0000644000175000017500000001524012216332640021236 0ustar gawaingawain#include #include #include #include "../gfxdevice.h" #include "../gfxtools.h" #include "poly.h" #include "wind.h" #include "convert.h" /* notice: left/right for a coordinate system where y goes up, not down */ typedef enum {LEFT=0, RIGHT=1} leftright_t; /* factor that determines into how many line fragments a spline is converted */ #define SUBFRACTION (2.4) // spline equation: // s(t) = t*t*x2 + 2*t*(1-t)*cx + (1-t)*(1-t)*x1 // // s(0.5) = 0.25*x2 + 0.5*cx + 0.25*x1 // ds(t)/dt = 2*t*x2 + (2-2t)*cx + (2t-2)*x1 // ds(0) = 2*(cx-x1) static void draw_arc(gfxdrawer_t*draw, double x, double y, double a1, double a2, double r) { if(a2lineTo(draw, x+cos(a1)*r,y+sin(a1)*r); for(t=1;t<=steps;t++) { double a = a1 + t*step; double c = cos(a)*r; double s = sin(a)*r; double xx = c + x; double yy = s + y; double dx = x + cos(a-step/2)*r2; double dy = y + sin(a-step/2)*r2; draw->splineTo(draw, dx, dy, xx, yy); lastx = xx; lasty = yy; } } static void draw_single_stroke(gfxpoint_t*p, int num, gfxdrawer_t*draw, double width, gfx_capType cap, gfx_joinType join, double limit) { width/=2; if(width<=0) width = 0.05; /* remove duplicate points */ int s=1,t; gfxpoint_t last = p[0]; for(t=1;t2 && p[0].x == p[num-1].x && p[0].y == p[num-1].y); int start = 0; int end = num-1; int incr = 1; int pos = 0; double lastw=0; /* iterate through the points two times: first forward, then backward, adding a stroke outline to the right side and line caps after each pass */ int pass; for(pass=0;pass<2;pass++) { if(closed) { double dx = p[end].x - p[end-incr].x; double dy = p[end].y - p[end-incr].y; lastw = atan2(dy,dx); if(lastw<0) lastw+=M_PI*2; } int pos; for(pos=start;pos!=end;pos+=incr) { //printf("%d) %.2f %.2f\n", pos, p[pos].x, p[pos].y); double dx = p[pos+incr].x - p[pos].x; double dy = p[pos+incr].y - p[pos].y; double w = atan2(dy,dx); if(w<0) w+=M_PI*2; if(closed || pos!=start) { double d = w-lastw; leftright_t turn; if(d>=0 && d-M_PI) turn=RIGHT; else if(d>=M_PI) {turn=RIGHT;} else if(d<=-M_PI) {turn=LEFT;d+=M_PI*2;} else {assert(0);} if(turn!=LEFT || join==gfx_joinBevel) { // nothing to do. bevel joins are easy } else if(join==gfx_joinRound) { draw_arc(draw, p[pos].x, p[pos].y, lastw-M_PI/2, w-M_PI/2, width); } else if(join==gfx_joinMiter) { double xw = M_PI/2 - d/2; if(xw>0) { double r2 = 1.0 / sin(M_PI/2-d/2); if(r2 < limit) { r2 *= width; double addx = cos(lastw-M_PI/2+d/2)*r2; double addy = sin(lastw-M_PI/2+d/2)*r2; draw->lineTo(draw, p[pos].x+addx, p[pos].y+addy); } } } } double addx = cos(w-M_PI/2)*width; double addy = sin(w-M_PI/2)*width; draw->lineTo(draw, p[pos].x+addx, p[pos].y+addy); double px2 = p[pos+incr].x + addx; double py2 = p[pos+incr].y + addy; draw->lineTo(draw, p[pos+incr].x+addx, p[pos+incr].y+addy); lastw = w; } if(closed) { draw->close(draw); } else { /* draw stroke ends. We draw duplicates of some points here. The drawer implementation should be smart enough to remove them. */ double c = cos(lastw-M_PI/2)*width; double s = sin(lastw-M_PI/2)*width; if(cap == gfx_capButt) { draw->lineTo(draw, p[pos].x+c, p[pos].y+s); draw->lineTo(draw, p[pos].x-c, p[pos].y-s); } else if(cap == gfx_capRound) { draw_arc(draw, p[pos].x, p[pos].y, lastw-M_PI/2, lastw+M_PI/2, width); } else if(cap == gfx_capSquare) { double c = cos(lastw-M_PI/2)*width; double s = sin(lastw-M_PI/2)*width; draw->lineTo(draw, p[pos].x+c, p[pos].y+s); draw->lineTo(draw, p[pos].x+c-s, p[pos].y+s+c); draw->lineTo(draw, p[pos].x-c-s, p[pos].y-s+c); draw->lineTo(draw, p[pos].x-c, p[pos].y-s); } lastw += M_PI; // for dots } start=num-1; end=0; incr=-1; } if(!closed) draw->close(draw); } void draw_stroke(gfxline_t*start, gfxdrawer_t*draw, double width, gfx_capType cap, gfx_joinType join, double miterLimit) { if(!start) return; assert(start->type == gfx_moveTo); gfxline_t*line = start; // measure array size int size = 0; int pos = 0; double lastx,lasty; while(line) { if(line->type == gfx_moveTo) { if(pos>size) size = pos; pos++; } else if(line->type == gfx_lineTo) { pos++; } else if(line->type == gfx_splineTo) { int parts = (int)(sqrt(fabs(line->x-2*line->sx+lastx) + fabs(line->y-2*line->sy+lasty))*SUBFRACTION); if(!parts) parts = 1; pos+=parts+1; } lastx = line->x; lasty = line->y; line = line->next; } if(pos>size) size = pos; if(!size) return; gfxpoint_t* points = malloc(sizeof(gfxpoint_t)*size); line = start; pos = 0; while(line) { if(line->type == gfx_moveTo) { if(pos) draw_single_stroke(points, pos, draw, width, cap, join, miterLimit); pos = 0; } else if(line->type == gfx_splineTo) { int parts = (int)(sqrt(fabs(line->x-2*line->sx+lastx) + fabs(line->y-2*line->sy+lasty))*SUBFRACTION); if(!parts) parts = 1; double stepsize = 1.0/parts; int i; for(i=0;ix*t*t + 2*line->sx*t*(1-t) + lastx*(1-t)*(1-t)); points[pos].y = (line->y*t*t + 2*line->sy*t*(1-t) + lasty*(1-t)*(1-t)); pos++; } } lastx = points[pos].x = line->x; lasty = points[pos].y = line->y; pos++; line = line->next; } if(pos) draw_single_stroke(points, pos, draw, width, cap, join, miterLimit); free(points); } static windcontext_t onepolygon = {1}; gfxpoly_t* gfxpoly_from_stroke(gfxline_t*line, gfxcoord_t width, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, double gridsize) { gfxdrawer_t d; gfxdrawer_target_poly(&d, gridsize); draw_stroke(line, &d, width, cap_style, joint_style, miterLimit); gfxpoly_t*poly = (gfxpoly_t*)d.result(&d); assert(gfxpoly_check(poly, 1)); gfxpoly_t*poly2 = gfxpoly_process(poly, 0, &windrule_circular, &onepolygon, 0); gfxpoly_destroy(poly); return poly2; } swftools_0.9.2+git20130725.orig/lib/gfxpoly/heap.h0000644000175000017500000001075312216332640020655 0ustar gawaingawain/* heap.h An inline heap implementation Copyright (c) 2009 Matthias Kramm 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 */ #define HEAP_DEFINE(name,t,lt) \ typedef struct { \ t**elements; \ int size; \ int max_size; \ } name##_t; \ static void name##_put(name##_t*h, t*e) \ { \ int parent = h->size++; \ if(h->size>=h->max_size) { \ h->max_size = h->max_size<15?15:(h->max_size+1)*2-1; \ h->elements = (t**)realloc(h->elements, \ h->max_size*sizeof(t*)); \ } \ int node; \ do { \ node = parent; \ if(!node) break; \ parent = (node-1)/2; \ h->elements[node] = h->elements[parent]; \ } while(lt(e, h->elements[parent])); \ h->elements[node] = e; \ } \ static t* name##_get(name##_t*h) \ { \ if(!h->size) return 0; \ t*r = h->elements[0]; \ int node,child = 0; \ t*node_p = h->elements[--h->size]; \ h->elements[0] = node_p; /* for the size==1 case */ \ do { \ node = child; \ child = node<<1|1; \ if(child >= h->size) { \ break; \ } \ if(child+1 < h->size && lt(h->elements[child+1], \ h->elements[child])) \ child++; \ h->elements[node] = h->elements[child]; \ } while(lt(h->elements[child],node_p)); \ h->elements[node] = node_p; \ return r; \ } \ static void name##_init(name##_t*h) \ { \ memset(h, 0, sizeof(*h)); \ h->max_size = 15; \ h->elements = malloc(h->max_size*sizeof(t*)); \ } \ static void name##_destroy(name##_t*h) \ { \ free((h)->elements); \ } swftools_0.9.2+git20130725.orig/lib/gfxpoly/wind.c0000644000175000017500000000600612216332640020670 0ustar gawaingawain#include "poly.h" edgestyle_t edgestyle_default; windstate_t windstate_nonfilled = { is_filled: 0, wind_nr: 0, }; // -------------------- even/odd ---------------------- windstate_t evenodd_start(windcontext_t*context) { return windstate_nonfilled; } windstate_t evenodd_add(windcontext_t*context, windstate_t left, edgestyle_t*edge, segment_dir_t dir, int master) { assert(edge); left.is_filled ^= 1; return left; } edgestyle_t* evenodd_diff(windstate_t*left, windstate_t*right) { if(left->is_filled==right->is_filled) return 0; else return &edgestyle_default; } windrule_t windrule_evenodd = { start: evenodd_start, add: evenodd_add, diff: evenodd_diff, }; // -------------------- circular ---------------------- windstate_t circular_start(windcontext_t*context) { return windstate_nonfilled; } windstate_t circular_add(windcontext_t*context, windstate_t left, edgestyle_t*edge, segment_dir_t dir, int master) { assert(edge); /* which one is + and which one - doesn't actually make any difference */ if(dir == DIR_DOWN) left.wind_nr++; else left.wind_nr--; left.is_filled = left.wind_nr != 0; return left; } edgestyle_t* circular_diff(windstate_t*left, windstate_t*right) { if(left->is_filled==right->is_filled) return 0; else return &edgestyle_default; } windrule_t windrule_circular = { start: circular_start, add: circular_add, diff: circular_diff, }; // -------------------- intersect ---------------------- windstate_t intersect_start(windcontext_t*context) { return windstate_nonfilled; } windstate_t intersect_add(windcontext_t*context, windstate_t left, edgestyle_t*edge, segment_dir_t dir, int master) { assert(master < context->num_polygons); left.wind_nr ^= 1<num_polygons)-1); return left; } edgestyle_t* intersect_diff(windstate_t*left, windstate_t*right) { if(left->is_filled==right->is_filled) return 0; else return &edgestyle_default; } windrule_t windrule_intersect = { start: intersect_start, add: intersect_add, diff: intersect_diff, }; // -------------------- union ---------------------- windstate_t union_start(windcontext_t*context) { return windstate_nonfilled; } windstate_t union_add(windcontext_t*context, windstate_t left, edgestyle_t*edge, segment_dir_t dir, int master) { assert(masteris_filled==right->is_filled) return 0; else return &edgestyle_default; } windrule_t windrule_union = { start: union_start, add: union_add, diff: union_diff, }; /* } else if (rule == WIND_NONZERO) { fill = wind!=0; } else if (rule == WIND_ODDEVEN) { fill = wind&1; } else { // rule == WIND_POSITIVE fill = wind>=1; } */ swftools_0.9.2+git20130725.orig/lib/gfxpoly/active.c0000644000175000017500000004132012216332640021200 0ustar gawaingawain#include #include #include #include "../../config.h" #include "../q.h" #include "../types.h" #include "active.h" actlist_t* actlist_new() { NEW(actlist_t, a); return a; } void actlist_destroy(actlist_t*a) { free(a); } void actlist_dump(actlist_t*a, int32_t y, double gridsize) { segment_t*s = a->list; double lastx; char bad = 0; if(!s) fprintf(stderr, "(empty)\n"); while(s) { if(y) { double x = ((double)s->delta.x*(y-s->a.y)/s->delta.y)+s->a.x; if(s!=a->list) { if(lastx>x) fprintf(stderr, "?%.2f<->%.2f? ", lastx * gridsize, x * gridsize); } lastx = x; } fprintf(stderr, "[%d]", (int)s->nr); s = s->right; if(s) fprintf(stderr, " "); else fprintf(stderr, " y=%.2f\n", y * gridsize); } } void actlist_verify(actlist_t*a, int32_t y) { segment_t*s = a->list; assert(!s || !s->left); segment_t*l = 0; while(s) { if(y) { if(l) { /* we need to re-evaluate the x of the previous segment. if we try to store it, it might end up being converted to a double, which will make it non-equal to (and possibly larger than) the "long double" the FPU has in its register. This only happens when compiler optimizations are turned on. */ assert((XPOS(s, y) - XPOS(l, y)) >= 0); assert(XDIFF(s,l,y) >= 0); } l = s; } assert(!s->left || s->left->right == s); assert(!s->right || s->right->left == s); s = s->right; } } static inline double single_cmp(segment_t*s, point_t p1) { return LINE_EQ(p1, s); } static inline double cmp(segment_t*s, point_t p1, point_t p2) { double d = LINE_EQ(p1, s); if(d==0) { d = LINE_EQ(p2, s); if(d==0) { /* We default to always inserting the new segment to the right of the old segment. We do this so that we don't place new segments into the middle of already overlapping lines which may have intersections scheduled. */ //fprintf(stderr, "Notice: actlist_find: both points (%d,%d) and (%d,%d) exactly on segment [%d]\n", p1.x, p1.y, p2.x, p2.y, s->nr); } } return d; } #ifdef SPLAY static void actlist_splay_dump(actlist_t*a); segment_t* actlist_find(actlist_t*a, point_t p1, point_t p2) { #ifdef CHECKS segment_t*t = a->list; char to_the_left = 0; char fail = 0; while(t) { /* this check doesn't work out with cmp() because during horizontal processing, both segments ending as well as segments starting will be active in this scanline */ //double d = cmp(t, p1, p2); double d = single_cmp(t, p1); if(d>=0 && to_the_left) { actlist_dump(a, p1.y, 1); segment_t*s = a->list; while(s) { fprintf(stderr, "[%d] %f/%f (%d,%d) -> (%d,%d)\n", SEGNR(s), single_cmp(s,p1), cmp(s,p1,p2), s->a.x, s->a.y, s->b.x, s->b.y); s = s->right; } } assert(!(d>=0 && to_the_left)); if(d<0) to_the_left=1; t = t->right; } #if 0 if(a->size > 100) { static actlist_t*last = 0; if(last != a) { last = a; actlist_splay_dump(a); } } #endif #endif segment_t*last=0, *s = a->root; if(!s) return 0; double d=0; int depth = 0; while(s) { last = s; depth++; d = single_cmp(s, p1); if(d<=0) { s = s->leftchild; } else { s = s->rightchild; } } //#ifdef DEBUG #if 0 if(a->size > 1) { /* 80% hit, average cost per miss ~ 4 nodes */ int expected_depth = (int)((double)log2((double)a->size+1))+1; static int hits = 0; static int misses = 0; static int miss_cost = 0; if(depth <= expected_depth) hits++; else {misses++; miss_cost += depth - expected_depth; } if(hits && misses) fprintf(stderr, "%02.2f%% %f\n", hits / (double)(hits+misses), miss_cost / (double)misses); } #endif /* this can be optimized for (is not needed in) normal mode (as opposed to horizontal postprocess mode) */ segment_t*out = last; if(d<0 || (d==0 && LINE_EQ(p2,last)<0)) { last = last->left; if(!last) { assert(cmp(a->list, p1, p2)<0); return 0; } } else { while(last->right && cmp(last->right, p1, p2)>=0) { last = last->right; } } #ifdef CHECKS segment_t*l=0; s = a->list; while(s) { if(cmp(s, p1, p2)<0) break; l = s;s = s->right; } if(l!=last) { printf("[%d]!=[%d]\n", SEGNR(l), SEGNR(last)); printf("after tree: [%d]\n", SEGNR(out)); actlist_splay_dump(a); s = a->list; while(s) { double d1 = single_cmp(s,p1); double d2 = cmp(s,p1,p2); int x1 = d1<0?-1:(d1>0?1:0); int x2 = d2<0?-1:(d2>0?1:0); printf("[%d](%d,%d) ", SEGNR(s), x1, x2); s = s->right; } printf("\n"); } assert(l == last); #endif return last; } #else segment_t* actlist_find(actlist_t*a, point_t p1, point_t p2) { segment_t*last=0, *s = a->list; if(!s) return last; while(s) { double d = cmp(s, p1, p2); if(d<0) break; last = s; s = s->right; } return last; } #endif #ifdef SPLAY #define LINK(node,side,child) (node)->side = (child);if(child) {(child)->parent = (node);} //;fprintf(stderr, "[%d]->%s now [%d]\n", SEGNR(node), __STRING(side), SEGNR(child)); // rotates segment's left node to the top static inline segment_t*rotate_right(actlist_t*a, segment_t*s) { /* s n / \ n -> s \ / l l */ assert(s->leftchild); segment_t*p = s->parent; segment_t*n = s->leftchild; segment_t*l = n->rightchild; LINK(n,rightchild,s); LINK(s,leftchild,l); n->parent = p; if(p) { if(p->leftchild == s) p->leftchild = n; else if(p->rightchild == s) p->rightchild = n; } else { a->root = n; } return n; } // rotates segment's right node to the top static inline segment_t*rotate_left(actlist_t*a, segment_t*s) { /* s n \ / n -> s / \ r r */ assert(s->rightchild); segment_t*p = s->parent; segment_t*n = s->rightchild; segment_t*r = n->leftchild; LINK(n,leftchild,s); LINK(s,rightchild,r); n->parent = p; if(p) { if(p->leftchild == s) p->leftchild = n; else if(p->rightchild == s) p->rightchild = n; } else { a->root = n; } return n; } static int actlist_splay_walk(actlist_t*a, segment_t*s, segment_t**ss, segment_t*parent) { if(!s) return 1; if(parent != s->parent) { fprintf(stderr, "Parent mismatch in [%d]: [%d] != [%d]\n", SEGNR(s), SEGNR(parent), SEGNR(s->parent)); return 0; } if(!actlist_splay_walk(a, s->leftchild, ss, s)) return 0; if(s != *ss) { fprintf(stderr, "[%d] != [%d]\n", SEGNR(s), SEGNR(*ss)); return 0; } (*ss) = (*ss)->right; if(!actlist_splay_walk(a, s->rightchild, ss, s)) return 0; return 1; } static int actlist_splay_verify(actlist_t*a) { segment_t*c = a->list; if(!actlist_splay_walk(a, a->root, &c, 0)) return 0; if(c) return 0; return 1; } static void actlist_splay_dump2(actlist_t*a, segment_t*s, char*mid, char*up, char*down) { if(!s) return; if(s->leftchild || s->rightchild) { int t; if(s->leftchild) { char*o3 = malloc(strlen(up)+3); strcpy(o3, up);strcat(o3, "+-"); char*newup = malloc(strlen(up)+3); strcpy(newup, up);strcat(newup, "| "); char*newup2 = malloc(strlen(up)+3); strcpy(newup2, up);strcat(newup2, " "); actlist_splay_dump2(a, s->leftchild, o3, newup2, newup); fprintf(stderr, "%s| \n", up); free(newup); free(newup2); free(o3); } fprintf(stderr, "%s[%d]\n", mid, SEGNR(s)); if(s->rightchild) { char*o3 = malloc(strlen(down)+3); strcpy(o3, down);strcat(o3, "+-"); char*newdown = malloc(strlen(down)+3); strcpy(newdown, down);strcat(newdown, "| "); char*newdown2 = malloc(strlen(down)+3); strcpy(newdown2, down);strcat(newdown2, " "); fprintf(stderr, "%s| \n", down); actlist_splay_dump2(a, s->rightchild, o3, newdown, newdown2); free(newdown); free(newdown2); free(o3); } } else { fprintf(stderr, "%s[%d]\n", mid, SEGNR(s)); } } static void actlist_splay_dump(actlist_t*a) { actlist_splay_dump2(a, a->root, "", "", ""); } static void move_to_root(actlist_t*a, segment_t*s) { if(!s) return; /* this is a textbook implementation of the three splay operations zig, zig-zig and zig-zag */ int nr=0; while(a->root != s) { assert(s->parent); segment_t*p = s->parent; if(p == a->root) { // zig if(a->root->leftchild == s) { rotate_right(a, a->root); } else { rotate_left(a, a->root); } assert(a->root == s); } else { segment_t*pp = p->parent; if(p->leftchild == s && pp->leftchild == p) { // zig-zig (left) rotate_right(a, pp); rotate_right(a, s->parent); } else if(p->rightchild == s && pp->rightchild == p) { // zig-zig (right) rotate_left(a, pp); rotate_left(a, s->parent); } else if(p->leftchild == s && pp->rightchild == p) { // zig-zag (left) rotate_right(a, p); rotate_left(a, s->parent); } else if(p->rightchild == s && pp->leftchild == p) { // zig-zag (right) rotate_left(a, p); rotate_right(a, s->parent); } else { assert(0); } } } } static void actlist_splay(actlist_t*a, point_t p1, point_t p2) { if(!a->list) return; segment_t tmp; memset(&tmp, 0, sizeof(tmp)); segment_t*left=&tmp,*right=&tmp; int c = 0; while(1) { if(cmp(a->root,p1,p2)<0) { /* we're to the left of the root */ if(!a->root->leftchild) { c = -1;break; } if(cmp(a->root->leftchild,p1,p2)<0) { /* we're also to the left of the root's left child -> rotate right, so that the left child is root */ segment_t*s = a->root->leftchild; LINK(a->root, leftchild, s->rightchild); LINK(s, rightchild, a->root); a->root = s; if(!a->root->leftchild) { c = -1;break; } } LINK(right, leftchild, a->root); right = a->root; a->root = a->root->leftchild; } else /* cmp(a->root,p1,p2)>=0 */ { /* we're to the right of the root */ if(!a->root->rightchild) { c = 1;break; } if(cmp(a->root->rightchild,p1,p2)>=0) { /* we're also to the right of the root's right child -> rotate left, so that the right child is root */ segment_t*s = a->root->rightchild; LINK(a->root, rightchild, s->leftchild); LINK(s, leftchild, a->root); a->root = s; if(!a->root->rightchild) c = 1;break; } LINK(left, rightchild, a->root); left = a->root; a->root = a->root->rightchild; } } LINK(left, rightchild, a->root->leftchild); LINK(right, leftchild, a->root->rightchild); LINK(a->root, leftchild, tmp.rightchild); LINK(a->root, rightchild, tmp.leftchild); a->root->parent = 0; } #endif static void actlist_insert_after(actlist_t*a, segment_t*left, segment_t*s) { #ifdef SPLAY //fprintf(stderr, "insert [%d] after [%d]\n", SEGNR(s), SEGNR(left)); //actlist_splay_dump(a); //actlist_dump(a, s->a.y); #endif s->left = left; if(left) { s->right = left->right; } else { s->right = a->list; a->list = s; } if(s->left) s->left->right = s; if(s->right) s->right->left = s; #ifdef SPLAY // we insert nodes not trees assert(!s->leftchild); assert(!s->rightchild); if(a->root) { move_to_root(a, left); if(left) { LINK(s,leftchild,a->root); // steal right child from (previous) root LINK(s,rightchild,a->root->rightchild); a->root->rightchild = 0; } else { LINK(s,rightchild,a->root); } } a->root = s; a->root->parent = 0; assert(actlist_splay_verify(a)); #endif a->size++; } void actlist_delete(actlist_t*a, segment_t*s) { #ifdef SPLAY assert(actlist_splay_verify(a)); move_to_root(a, s); assert(actlist_splay_verify(a)); #endif if(s->left) { s->left->right = s->right; } else { a->list = s->right; } if(s->right) { s->right->left = s->left; } s->left = s->right = 0; a->size--; #ifdef SPLAY assert(a->root == s); // delete root node if(!a->root->leftchild) { a->root = a->root->rightchild; } else if(!a->root->rightchild) { a->root = a->root->leftchild; } else { #ifdef HAVE_LRAND48 if(lrand48()&1) { #else if(((ptroff_t)s)&16) { #endif // free up root->left->right segment_t*t = a->root->leftchild; while(t->rightchild) { segment_t*r = t->rightchild; segment_t*l = r->leftchild; LINK(r, leftchild, t); LINK(t, rightchild, l); t = r; } LINK(a->root,leftchild,t); assert(!a->root->leftchild->rightchild); LINK(a->root->leftchild,rightchild,a->root->rightchild); a->root = a->root->leftchild; } else { // free up root->right->left segment_t*t = a->root->rightchild; while(t->leftchild) { segment_t*l = t->leftchild; segment_t*r = l->rightchild; LINK(l, rightchild, t); LINK(t, leftchild, r); t = l; } LINK(a->root,rightchild,t); assert(!a->root->rightchild->leftchild); LINK(a->root->rightchild,leftchild,a->root->leftchild); a->root = a->root->rightchild; } } if(a->root) a->root->parent = 0; s->leftchild = s->rightchild = s->parent = 0; assert(actlist_splay_verify(a)); #endif } int actlist_size(actlist_t*a) { return a->size; } segment_t* actlist_leftmost(actlist_t*a) { return a->list; } segment_t* actlist_rightmost(actlist_t*a) { /* this is only used in checks, so it doesn't matter that it's slow */ #ifndef CHECKS fprintf(stderr, "Warning: actlist_rightmost should not be used\n"); #endif segment_t*s = a->list; segment_t*last = 0; while(s) { last = s; s = s->right; } return last; } void actlist_insert(actlist_t*a, point_t p1, point_t p2, segment_t*s) { segment_t*left = actlist_find(a, p1, p2); actlist_insert_after(a, left, s); } void actlist_swap(actlist_t*a, segment_t*s1, segment_t*s2) { #ifdef SPLAY assert(actlist_splay_verify(a)); #endif #ifdef CHECKS /* test that s1 is to the left of s2- our swap code depends on that */ segment_t*s = s1; while(s && s!=s2) s = s->right; assert(s==s2); #endif /*#ifndef SPLAY actlist_delete(a, s1); actlist_insert_after(a, s2, s1); #else*/ segment_t*s1l = s1->left; segment_t*s1r = s1->right; segment_t*s2l = s2->left; segment_t*s2r = s2->right; if(s1l) s1l->right = s2; else a->list = s2; s2->left = s1l; if(s2r) s2r->left = s1; s1->right = s2r; if(s2l!=s1) s1->left = s2l; else s1->left = s2; if(s1r!=s2) s2->right = s1r; else s2->right = s1; #ifdef SPLAY if(s2->parent==s1) { /* s1 s2 / -> / s2 s1 */ segment_t*l = s2->leftchild; segment_t*r = s2->rightchild; assert(s1->rightchild == s2); // because s1 < s2 segment_t*l1 = s1->leftchild; segment_t*p = s1->parent; s1->parent = s2; s2->parent = p; if(p) { if(p->leftchild == s1) p->leftchild=s2; else {assert(p->rightchild == s1);p->rightchild=s2;} } else { a->root = s2; } s2->leftchild = l1; s2->rightchild = s1; s1->leftchild = l; s1->rightchild = r; } else if(s1->parent==s2) { /* s2 s1 / -> / s1 s2 */ segment_t*l = s1->leftchild; segment_t*r = s1->rightchild; segment_t*r2 = s2->rightchild; assert(s2->leftchild == s1); // because s1 < s2 segment_t*p = s2->parent; s2->parent = s1; s1->parent = p; if(p) { if(p->leftchild == s2) p->leftchild=s1; else {assert(p->rightchild == s2);p->rightchild=s1;} } else { a->root = s1; } s1->leftchild = s2; s1->rightchild = r2; s2->leftchild = l; s2->rightchild = r; } else { segment_t*s1p = s1->parent; segment_t*s1l = s1->leftchild; segment_t*s1r = s1->rightchild; segment_t*s2p = s2->parent; segment_t*s2l = s2->leftchild; segment_t*s2r = s2->rightchild; s2->parent = s1p; s2->leftchild = s1l; s2->rightchild = s1r; s1->parent = s2p; s1->leftchild = s2l; s1->rightchild = s2r; assert(s1p || s2p); if(s1p) { if(s1p->leftchild == s1) s1p->leftchild=s2; else {assert(s1p->rightchild == s1);s1p->rightchild=s2;} } else { a->root = s2; } if(s2p) { if(s2p->leftchild == s2) s2p->leftchild=s1; else {assert(s2p->rightchild == s2);s2p->rightchild=s1;} } else { a->root = s1; } } if(s1->leftchild) s1->leftchild->parent = s1; if(s2->leftchild) s2->leftchild->parent = s2; if(s1->rightchild) s1->rightchild->parent = s1; if(s2->rightchild) s2->rightchild->parent = s2; assert(actlist_splay_verify(a)); #endif //#endif } swftools_0.9.2+git20130725.orig/lib/gfxpoly/xrow.h0000644000175000017500000000071312216332640020732 0ustar gawaingawain#ifndef __xrow_h__ #define __xrow_h__ #include #include "poly.h" typedef struct _xrow { int32_t*x; int num; int size; int32_t lastx; } xrow_t; xrow_t* xrow_new(); void xrow_add(xrow_t*xrow, int32_t x); void xrow_sort(xrow_t*xrow); int xrow_find(xrow_t*r, int32_t x); char xrow_contains(xrow_t*xrow, int32_t x); void xrow_dump(xrow_t*xrow, double gridsize); void xrow_reset(xrow_t*xrow); void xrow_destroy(xrow_t*xrow); #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/moments.h0000644000175000017500000000035212216332640021414 0ustar gawaingawain#ifndef __moments_h__ #define __moments_h__ #include "poly.h" #include "active.h" void moments_update(moments_t*moments, actlist_t*actlist, int32_t y1, int32_t y2); void moments_normalize(moments_t*moments, double gridsize); #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/convert.h0000644000175000017500000000175712216332640021424 0ustar gawaingawain#ifndef __poly_convert_h__ #define __poly_convert_h__ #include "../gfxdevice.h" #include "../gfxtools.h" #include "poly.h" typedef struct _polywriter { void(*moveto)(struct _polywriter*, int32_t x, int32_t y); void(*lineto)(struct _polywriter*, int32_t x, int32_t y); void(*setgridsize)(struct _polywriter*, double g); void*(*finish)(struct _polywriter*); void*internal; } polywriter_t; void gfxdrawer_target_poly(gfxdrawer_t*d, double gridsize); void gfxpolywriter_init(polywriter_t*w); gfxpoly_t* gfxpoly_from_fill(gfxline_t*line, double gridsize); gfxpoly_t* gfxpoly_from_file(const char*filename, double gridsize); void gfxpoly_destroy(gfxpoly_t*poly); gfxline_t*gfxline_from_gfxpoly(gfxpoly_t*poly); gfxline_t*gfxline_from_gfxpoly_with_direction(gfxpoly_t*poly); // preserves up/down gfxline_t* gfxpoly_circular_to_evenodd(gfxline_t*line, double gridsize); gfxpoly_t* gfxpoly_createbox(double x1, double y1,double x2, double y2, double gridsize); #endif //__poly_convert_h__ swftools_0.9.2+git20130725.orig/lib/gfxpoly/renderpoly.c0000644000175000017500000002472612216332640022123 0ustar gawaingawain#include #include #include #include "renderpoly.h" typedef struct _renderpoint { double x; segment_dir_t dir; edgestyle_t*fs; int polygon_nr; } renderpoint_t; typedef struct _renderline { renderpoint_t*points; int size; int num; } renderline_t; typedef struct _renderbuf { intbbox_t bbox; int width; int height; double zoom; renderline_t*lines; } renderbuf_t; static inline void add_pixel(renderbuf_t*buf, double x, int y, segment_dir_t dir, edgestyle_t*fs, int polygon_nr) { renderpoint_t p; p.x = x; p.dir = dir; p.fs = fs; p.polygon_nr = polygon_nr; if(y >= buf->bbox.ymax || y < buf->bbox.ymin) return; renderline_t*l = &buf->lines[y-buf->bbox.ymin]; if(l->num == l->size) { l->size += 32; l->points = (renderpoint_t*)rfx_realloc(l->points, l->size * sizeof(renderpoint_t)); } l->points[l->num] = p; l->num++; } #define CUT 0.5 static void add_line(renderbuf_t*buf, double x1, double y1, double x2, double y2, edgestyle_t*fs, segment_dir_t dir, int polygon_nr) { x1 *= buf->zoom; y1 *= buf->zoom; x2 *= buf->zoom; y2 *= buf->zoom; double diffx, diffy; double ny1, ny2, stepx; if(y2 < y1) { dir ^= DIR_UP^DIR_DOWN; double x,y; x = x1;x1 = x2;x2=x; y = y1;y1 = y2;y2=y; } diffx = x2 - x1; diffy = y2 - y1; ny1 = floor(y1)+CUT; ny2 = floor(y2)+CUT; if(ny1 < y1) { ny1 = floor(y1) + 1.0 + CUT; } if(ny2 >= y2) { ny2 = floor(y2) - 1.0 + CUT; } if(ny1 > ny2) return; stepx = diffx/diffy; x1 = x1 + (ny1-y1)*stepx; x2 = x2 + (ny2-y2)*stepx; int posy=floor(ny1); int endy=floor(ny2); double posx=0; double startx = x1; //printf("line %d from %f to %f dir=%s\n", polygon_nr, y1, y2, dir==DIR_UP?"up":"down"); while(posy<=endy) { double xx = startx + posx; add_pixel(buf, xx, posy, dir, fs, polygon_nr); posx+=stepx; posy++; } } static int compare_renderpoints(const void * _a, const void * _b) { renderpoint_t*a = (renderpoint_t*)_a; renderpoint_t*b = (renderpoint_t*)_b; if(a->x < b->x) return -1; if(a->x > b->x) return 1; return 0; } static void fill_bitwise(unsigned char*line, int x1, int x2) { int p1 = x1>>3; int p2 = x2>>3; int b1 = 0xff >> (x1&7); int b2 = 0xff << (1+7-(x2&7)); if(p1==p2) { line[p1] |= b1&b2; } else { line[p1] |= b1; memset(&line[p1+1], 255, p2-(p1+1)); line[p2] = b2; } } unsigned char* render_polygon(gfxpoly_t*polygon, intbbox_t*bbox, double zoom, windrule_t*rule, windcontext_t*context) { renderbuf_t _buf, *buf=&_buf; buf->width = (bbox->xmax - bbox->xmin); buf->height = (bbox->ymax - bbox->ymin); buf->bbox = *bbox; buf->zoom = zoom * polygon->gridsize; int width8 = (buf->width+7) >> 3; char bleeding = 0; unsigned char* image = (unsigned char*)malloc(width8*buf->height); memset(image, 0, width8*buf->height); buf->lines = (renderline_t*)rfx_alloc(buf->height*sizeof(renderline_t)); int y; for(y=0;yheight;y++) { memset(&buf->lines[y], 0, sizeof(renderline_t)); buf->lines[y].points = 0; buf->lines[y].num = 0; } int polygon_nr = 0; int s,t; gfxpolystroke_t*stroke = polygon->strokes; for(;stroke;stroke=stroke->next) { for(t=0;tnum_points-1;t++) { point_t a = stroke->points[t]; point_t b = stroke->points[t+1]; add_line(buf, a.x, a.y, b.x, b.y, stroke->fs, stroke->dir, polygon_nr); } } for(y=0;yheight;y++) { renderpoint_t*points = buf->lines[y].points; unsigned char*line = &image[width8*y]; int n; int num = buf->lines[y].num; qsort(points, num, sizeof(renderpoint_t), compare_renderpoints); int lastx = 0; windstate_t fill = rule->start(context); for(n=0;nx - bbox->xmin); if(x < lastx) x = lastx; if(x > buf->width) x = buf->width; if(fill.is_filled && lastxadd(context, fill, p->fs, p->dir, p->polygon_nr); lastx = x; } if(fill.is_filled && lastx!=buf->width) { /* we're bleeding, fill over padding, too. */ fprintf(stderr, "Polygon %p is bleeding in line %d\n", polygon, y); fill_bitwise(line, lastx, width8*8); assert(line[width8-1]&0x01); bleeding = 1; exit(1); } } for(y=0;yheight;y++) { if(buf->lines[y].points) { free(buf->lines[y].points); } memset(&buf->lines[y], 0, sizeof(renderline_t)); } if(bleeding) { assert(!bitmap_ok(bbox, image)); } free(buf->lines);buf->lines=0; return image; } #define MAX_WIDTH 8192 #define MAX_HEIGHT 4096 static inline double max(double a, double b) {return a>b?a:b;} static inline double min(double a, double b) {return agridsize; if(polygon->strokes && polygon->strokes->num_points) { b.xmin = polygon->strokes->points[0].x*g; b.ymin = polygon->strokes->points[0].y*g; b.xmax = polygon->strokes->points[0].x*g; b.ymax = polygon->strokes->points[0].y*g; } int s,t; gfxpolystroke_t*stroke = polygon->strokes; for(;stroke;stroke=stroke->next) { for(t=0;tnum_points;t++) { point_t p = stroke->points[t]; int x1 = floor(p.x); int y1 = floor(p.y); int x2 = ceil(p.x); int y2 = ceil(p.y); if(x1 < b.xmin) b.xmin = x1; if(y1 < b.ymin) b.ymin = y1; if(x2 > b.xmax) b.xmax = x2; if(y2 > b.ymax) b.ymax = y2; } } if(b.xmax > (int)(MAX_WIDTH*zoom)) b.xmax = (int)(MAX_WIDTH*zoom); if(b.ymax > (int)(MAX_HEIGHT*zoom)) b.ymax = (int)(MAX_HEIGHT*zoom); if(b.xmin < -(int)(MAX_WIDTH*zoom)) b.xmin = -(int)(MAX_WIDTH*zoom); if(b.ymin < -(int)(MAX_HEIGHT*zoom)) b.ymin = -(int)(MAX_HEIGHT*zoom); if(b.xmin > b.xmax) b.xmin = b.xmax; if(b.ymin > b.ymax) b.ymin = b.ymax; b.xmax = adjust_x(b.xmin, b.xmax); b.width = b.xmax - b.xmin; b.height = b.ymax - b.ymin; return b; } #define B11111000 0xf8 #define B01111100 0x7c #define B00111110 0x3e #define B00011111 0x1f #define B11100000 0xe0 #define B01110000 0x70 #define B00111000 0x38 #define B00011100 0x1c #define B00001110 0x0e #define B00000111 0x07 #define B10000000 0x80 #define B01000000 0x40 #define B00100000 0x20 #define B00010000 0x10 #define B00001000 0x08 #define B00000100 0x04 #define B00000010 0x02 #define B00000001 0x01 int bitmap_ok(intbbox_t*bbox, unsigned char*data) { int y; int width8 = (bbox->width+7) >> 3; for(y=0;yheight;y++) { if(data[width8-1]&0x01) return 0; //bleeding data += width8; } return 1; } int compare_bitmaps(intbbox_t*bbox, unsigned char*data1, unsigned char*data2) { if(!data1 || !data2) return 0; int x,y; int height = bbox->height; int width = bbox->width; int width8 = (width+7) >> 3; unsigned char*l1 = &data1[width8*2]; unsigned char*l2 = &data2[width8*2]; for(y=2;ywidth+7) >> 3; unsigned char*data = malloc(b->width*b->height*4*4); unsigned char*p = data; int x,y; unsigned char*b1 = data1; unsigned char*b2 = data2; compare_bitmaps(b, data1, data2); //# define MARK ((abs(x-badx)<3 && abs(y-bady)<3)*255) #define MARK 0 for(y=0;yheight;y++) { for(x=0;xwidth;x++) { unsigned char c1 = (b1[x>>3]&(0x80>>(x&7)))?255:0; unsigned char c2 = (b2[x>>3]&(0x80>>(x&7)))?255:0; *p++ = 255; *p++ = c1^c2; *p++ = c1^c2; *p++ = MARK; } for(x=0;xwidth;x++) { unsigned char c = (b2[x>>3]&(0x80>>(x&7)))?255:0; *p++ = 255; *p++ = c; *p++ = c; *p++ = MARK; } b1 += width8; b2 += width8; } b1 = data1; for(y=0;yheight;y++) { for(x=0;xwidth;x++) { unsigned char c = (b1[x>>3]&(0x80>>(x&7)))?255:0; *p++ = 255; *p++ = c; *p++ = c; *p++ = MARK; } for(x=0;xwidth;x++) { *p++ = 255; *p++ = 0; *p++ = 0; *p++ = 0; } b1 += width8; } png_write(filename, data, b->width*2, b->height*2); free(data); } swftools_0.9.2+git20130725.orig/lib/gfxpoly/wind.h0000644000175000017500000000204712216332640020676 0ustar gawaingawain#ifndef __wind_h__ #define __wind_h__ /* Every segment has an original direction, which is the direction the segment had in the input data. as our scanline moves from minimum y to maximum y, "DOWN" means the the (original) segment's y2 is larger than its y1 */ typedef enum {DIR_UP, DIR_DOWN, DIR_UNKNOWN} segment_dir_t; #define DIR_INVERT(d) ((d)^(DIR_UP^DIR_DOWN)) typedef struct _edgestyle { void*internal; } edgestyle_t; extern edgestyle_t edgestyle_default; typedef struct _windstate { char is_filled; int wind_nr; } windstate_t; typedef struct _windcontext { int num_polygons; } windcontext_t; typedef struct _windrule { windstate_t (*start)(windcontext_t* num_polygons); windstate_t (*add)(windcontext_t*context, windstate_t left, edgestyle_t*edge, segment_dir_t dir, int polygon_nr); edgestyle_t* (*diff)(windstate_t*left, windstate_t*right); } windrule_t; extern windrule_t windrule_evenodd; extern windrule_t windrule_circular; extern windrule_t windrule_intersect; extern windrule_t windrule_union; #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/stroke.h0000644000175000017500000000056212216332640021244 0ustar gawaingawain#ifndef __stroke_h__ #define __stroke_h__ #include "../gfxdevice.h" #include "poly.h" gfxpoly_t* gfxpoly_from_stroke(gfxline_t*line, gfxcoord_t width, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, double gridsize); void draw_stroke(gfxline_t*start, gfxdrawer_t*draw, double width, gfx_capType cap, gfx_joinType join, double miterLimit); #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/poly.h0000644000175000017500000000602412216332640020717 0ustar gawaingawain#ifndef __poly_h__ #define __poly_h__ #include #include "../q.h" #include "../types.h" #include "wind.h" /* features */ #define SPLAY #define DONT_REMEMBER_CROSSINGS typedef enum {EVENT_CROSS, EVENT_END, EVENT_START, EVENT_HORIZONTAL} eventtype_t; typedef enum {SLOPE_POSITIVE, SLOPE_NEGATIVE} slope_t; #define INVALID_COORD (0x7fffffff) typedef struct _point { int32_t x; int32_t y; } point_t; type_t point_type; #define SEGNR(s) ((int)((s)?(s)->nr:-1)) typedef struct _gfxpolystroke { segment_dir_t dir; edgestyle_t*fs; int points_size; int num_points; point_t*points; struct _gfxpolystroke*next; } gfxpolystroke_t; typedef struct _gfxpoly { double gridsize; gfxpolystroke_t*strokes; } gfxpoly_t; typedef struct _segment { point_t a; point_t b; point_t delta; double k; //k = a.x*b.y-a.y*b.x = delta.y*a.x - delta.x*a.y (=0 for points on the segment) int32_t minx, maxx; segment_dir_t dir; edgestyle_t*fs; edgestyle_t*fs_out; #ifdef CHECKS char fs_out_ok; #endif int polygon_nr; windstate_t wind; ptroff_t nr; #ifdef SPLAY struct _segment*parent; struct _segment*leftchild; struct _segment*rightchild; #endif struct _segment*left; struct _segment*right; char changed; point_t pos; gfxpolystroke_t*stroke; int stroke_pos; #ifndef DONT_REMEMBER_CROSSINGS dict_t scheduled_crossings; #endif } segment_t; typedef struct _moments { double area; double m[3][3]; } moments_t; #define LINE_EQ(p,s) ((double)(s)->delta.y*(p).x - (double)(s)->delta.x*(p).y - (s)->k) /* x1 + ((x2-x1)*(y-y1)) / dy = (x1*(y2-y1) + (x2-x1)*(y-y1)) / dy = (x1*(y2-y) + x2 *(y-y1)) / dy = (x1*y2 - x2*y1 + x2*y - y*x1) / dy = (k + x2*y - x1*y) / dy (k + dx*y) / dy */ //#define XPOS(s,ypos) ((s)->a.x + ((s)->delta.x * (double)((ypos) - (s)->a.y)) / (s)->delta.y) #define XPOS(s,ypos) (((s)->k + (double)(s)->delta.x*ypos) / (s)->delta.y) #define XPOS_INT(s,ypos) ((int)ceil(XPOS((s),ypos))) #define XDIFF(s1,s2,ypos) (((s1)->k + (double)(s1)->delta.x*ypos)*(s2)->delta.y - \ ((s2)->k + (double)(s2)->delta.x*ypos)*(s1)->delta.y) void gfxpoly_fail(char*expr, char*file, int line, const char*function); char gfxpoly_check(gfxpoly_t*poly, char updown); int gfxpoly_num_segments(gfxpoly_t*poly); int gfxpoly_size(gfxpoly_t*poly); void gfxpoly_dump(gfxpoly_t*poly); void gfxpoly_save(gfxpoly_t*poly, const char*filename); void gfxpoly_save_arrows(gfxpoly_t*poly, const char*filename); gfxpoly_t* gfxpoly_process(gfxpoly_t*poly1, gfxpoly_t*poly2, windrule_t*windrule, windcontext_t*context, moments_t*moments); gfxpoly_t* gfxpoly_intersect(gfxpoly_t*p1, gfxpoly_t*p2); gfxpoly_t* gfxpoly_union(gfxpoly_t*p1, gfxpoly_t*p2); double gfxpoly_area(gfxpoly_t*p); double gfxpoly_intersection_area(gfxpoly_t*p1, gfxpoly_t*p2); #ifndef CHECKS #ifdef assert #undef assert #endif #define assert(x) #else #define assert(x) ((x)?0:gfxpoly_fail(__STRING(x), __FILE__, __LINE__, __PRETTY_FUNCTION__)) #endif #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/active.h0000644000175000017500000000154512216332640021212 0ustar gawaingawain#ifndef __active_h__ #define __active_h__ #include "poly.h" typedef struct _actlist { segment_t*list; int size; #ifdef SPLAY segment_t*root; #endif } actlist_t; #define actlist_left(a,s) ((s)->left) #define actlist_right(a,s) ((s)?(s)->right:(a)->list) actlist_t* actlist_new(); void actlist_destroy(actlist_t*a); int actlist_size(actlist_t*a); void actlist_verify(actlist_t*a, int32_t y); void actlist_dump(actlist_t*a, int32_t y, double gridsize); segment_t* actlist_find(actlist_t*a, point_t p1, point_t p2); // finds segment immediately to the left of p1 (breaking ties w/ p2) void actlist_insert(actlist_t*a, point_t p1, point_t p2, segment_t*s); void actlist_delete(actlist_t*a, segment_t*s); void actlist_swap(actlist_t*a, segment_t*s1, segment_t*s2); segment_t* actlist_leftmost(actlist_t*a); segment_t* actlist_rightmost(actlist_t*a); #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/moments.c0000644000175000017500000000372512216332640021416 0ustar gawaingawain#include "moments.h" #define MOMENTS void moments_update(moments_t*moments, actlist_t*actlist, int32_t y1, int32_t y2) { segment_t* s = actlist_leftmost(actlist); segment_t* l = 0; /* the actual coordinate of grid points is at the bottom right, hence we have to add 1.0 to both coordinates (or just 1.0 to the sum) */ double mid = (y1+y2)/2.0 + 1.0; double area = 0.0; while(s) { if(l && l->wind.is_filled) { area += (XPOS(s,mid) - XPOS(l,mid)); #ifdef MOMENTS double dx1 = (l->b.x - l->a.x) / (double)(l->b.y - l->a.y); double o1 = l->a.x - l->a.y*dx1; double dx2 = (s->b.x - s->a.x) / (double)(s->b.y - s->a.y); double o2 = s->b.x - s->b.y*dx2; #ifdef DEBUG printf("y=%f-%f\n\tl1=([%f,%f,%f,%f] dx=%f o=%f)\n\tl2=([%f,%f,%f,%f] dx=%f o=%f)\n", y1*0.05, y2*0.05, l->a.x*0.05, l->a.y*0.05, l->b.x*0.05, l->b.y*0.05, dx1*0.05, o1*0.05, s->a.x*0.05, s->a.y*0.05, s->b.x*0.05, s->b.y*0.05, dx2*0.05, o2*0.05); #endif #define S1(y) 0.5*(1/3.0*(dx2*dx2-dx1*dx1)*(y)*(y)*(y)+1/2.0*(2*dx2*o2-2*dx1*o1)*(y)*(y)+(o2*o2-o1*o1)*(y)) double m1x = S1(y2)-S1(y1); #define S2(y) (1/3.0)*(1/4.0*(dx2*dx2*dx2-dx1*dx1*dx1)*(y)*(y)*(y)*(y)+1/3.0*(3*dx2*dx2*o2-3*dx1*dx1*o1)*(y)*(y)*(y)+1/2.0*(3*dx2*o2*o2-3*dx1*o1*o1)*(y)*(y)+(o2*o2*o2-o1*o1*o1)*(y)) double m2x = S2(y2)-S2(y1); moments->m[0][0] += (XPOS(s,mid) - XPOS(l,mid))*(y2-y1); moments->m[1][0] += m1x; moments->m[2][0] += m2x; #endif } l = s; s = s->right; } area *= (y2-y1); moments->area += area; } void moments_normalize(moments_t*moments, double gridsize) { moments->area *= gridsize*gridsize; moments->m[0][0] *= gridsize*gridsize; moments->m[1][0] *= gridsize*gridsize*gridsize*gridsize; moments->m[2][0] *= gridsize*gridsize*gridsize*gridsize*gridsize*gridsize; } swftools_0.9.2+git20130725.orig/lib/gfxpoly/xrow.c0000644000175000017500000000341212216332640020724 0ustar gawaingawain#include #include #include #include "../mem.h" #include "xrow.h" #include "poly.h" xrow_t* xrow_new() { xrow_t*r = rfx_calloc(sizeof(xrow_t)); r->size = 16; r->x = rfx_alloc(sizeof(r->x[0])*r->size); return r; } void xrow_add(xrow_t*r, int32_t x) { if(r->num && r->lastx==x) return; r->lastx = x; if(r->num >= r->size) { r->size *= 2; r->x = rfx_realloc(r->x, sizeof(r->x[0])*r->size); } r->x[r->num++]=x; } int compare_int32(const void*_i1,const void*_i2) { int32_t*i1 = (int32_t*)_i1; int32_t*i2 = (int32_t*)_i2; return *i1-*i2; } void xrow_sort(xrow_t*r) { if(!r->num) return; qsort(r->x, r->num, sizeof(r->x[0]), compare_int32); int t; int pos = 1; int32_t lastx=r->x[0]; for(t=1;tnum;t++) { if(r->x[t]!=lastx) { r->x[pos++] = lastx = r->x[t]; } } r->num = pos; } int xrow_find(xrow_t*r, int32_t x) { int min, max, i, l; for(min=0, max=r->num, i=r->num/2, l=r->num; i != l; l=i, i=(min+max)/2) { if(x < r->x[i]) max=i; else min=i; } #ifdef CHECKS int t; for(t=0;tnum;t++) { if(x < r->x[t]) break; } assert(max == t); #endif return max; } char xrow_contains(xrow_t*r, int32_t x) { int pos = xrow_find(r,x) - 1; return (pos>=0 && r->x[pos]==x); } void xrow_reset(xrow_t*r) { r->num = 0; } void xrow_dump(xrow_t*xrow, double gridsize) { fprintf(stderr, "x: "); int t; for(t=0;tnum;t++) { if(t) fprintf(stderr, ", "); fprintf(stderr, "%.2f", xrow->x[t] * gridsize); } fprintf(stderr, "\n"); } void xrow_destroy(xrow_t*r) { if(r->x) { free(r->x);r->x = 0; } free(r); } swftools_0.9.2+git20130725.orig/lib/gfxpoly/renderpoly.h0000644000175000017500000000111012216332640022106 0ustar gawaingawain#ifndef __renderpoly_h__ #define __renderpoly_h__ #include "poly.h" #include "wind.h" typedef struct { int xmin; int ymin; int xmax; int ymax; int width; int height; } intbbox_t; unsigned char* render_polygon(gfxpoly_t*polygon, intbbox_t*bbox, double zoom, windrule_t*rule, windcontext_t*context); intbbox_t intbbox_new(int x1, int y1, int x2, int y2); intbbox_t intbbox_from_polygon(gfxpoly_t*polygon, double zoom); int bitmap_ok(intbbox_t*bbox, unsigned char*data); int compare_bitmaps(intbbox_t*bbox, unsigned char*data1, unsigned char*data2); #endif swftools_0.9.2+git20130725.orig/lib/gfxpoly/poly.c0000644000175000017500000014362712216332640020725 0ustar gawaingawain#include #include #include #include #include #include "../mem.h" #include "../types.h" #include "poly.h" #include "active.h" #include "xrow.h" #include "wind.h" #include "convert.h" #include "heap.h" #include "moments.h" #ifdef HAVE_MD5 #include "MD5.h" #endif static gfxpoly_t*current_polygon = 0; void gfxpoly_fail(char*expr, char*file, int line, const char*function) { if(!current_polygon) { fprintf(stderr, "assert(%s) failed in %s in line %d: %s\n", expr, file, line, function); exit(1); } char filename[32+4+1]; #ifdef HAVE_MD5 void*md5 = initialize_md5(); int s,t; gfxpolystroke_t*stroke = current_polygon->strokes; for(;stroke;stroke=stroke->next) { for(t=0;tnum_points;t++) { update_md5(md5, (unsigned char*)&stroke->points[t].x, sizeof(stroke->points[t].x)); update_md5(md5, (unsigned char*)&stroke->points[t].y, sizeof(stroke->points[t].y)); } } unsigned char h[16]; finish_md5(md5, h); sprintf(filename, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x.ps", h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],h[9],h[10],h[11],h[12],h[13],h[14],h[15]); #else sprintf(filename, "%d", (int)time(0)); #endif fprintf(stderr, "assert(%s) failed in %s in line %d: %s\n", expr, file, line, function); fprintf(stderr, "I'm saving a debug file \"%s\" to the current directory.\n", filename); gfxpoly_save(current_polygon, filename); exit(1); } static char point_equals(const void*o1, const void*o2) { const point_t*p1 = o1; const point_t*p2 = o2; return p1->x == p2->x && p1->y == p2->y; } static unsigned int point_hash(const void*o) { const point_t*p = o; return p->x^p->y; } static void* point_dup(const void*o) { const point_t*p = o; point_t*n = malloc(sizeof(point_t)); n->x = p->x; n->y = p->y; return n; } static void point_free(void*o) { point_t*p = o; p->x = 0; p->y = 0; free(p); } type_t point_type = { equals: point_equals, hash: point_hash, dup: point_dup, free: point_free, }; typedef struct _event { eventtype_t type; point_t p; segment_t*s1; segment_t*s2; } event_t; /* compare_events_simple differs from compare_events in that it schedules events from left to right regardless of type. It's only used in horizontal processing, in order to get an x-wise sorting of the current scanline */ static inline int compare_events_simple(const void*_a,const void*_b) { event_t* a = (event_t*)_a; event_t* b = (event_t*)_b; int d = b->p.y - a->p.y; if(d) return d; d = b->p.x - a->p.x; if(d) return d; return 0; } static inline int compare_events(const void*_a,const void*_b) { event_t* a = (event_t*)_a; event_t* b = (event_t*)_b; int d = b->p.y - a->p.y; if(d) return d; /* we need to schedule end after intersect (so that a segment about to end has a chance to tear up a few other segs first) and start events after end (in order not to confuse the intersection check, which assumes there's an actual y overlap between active segments, and because ending segments in the active list make it difficult to insert starting segments at the right position)). Horizontal lines come last, because the only purpose they have is to create snapping coordinates for the segments (still) existing in this scanline. */ d = b->type - a->type; if(d) return d; return 0; /* I don't see any reason why we would need to order by x- at least as long as we do horizontal lines in a seperate pass */ //d = b->p.x - a->p.x; //return d; } #define COMPARE_EVENTS(x,y) (compare_events(x,y)>0) #define COMPARE_EVENTS_SIMPLE(x,y) (compare_events_simple(x,y)>0) HEAP_DEFINE(queue,event_t,COMPARE_EVENTS); HEAP_DEFINE(hqueue,event_t,COMPARE_EVENTS_SIMPLE); typedef struct _horizontal { int32_t y; int32_t x1, x2; edgestyle_t*fs; segment_dir_t dir; int polygon_nr; int xpos; int pos; } horizontal_t; typedef struct _horizdata { horizontal_t*data; int num; int size; } horizdata_t; typedef struct _status { int32_t y; double gridsize; actlist_t*actlist; queue_t queue; xrow_t*xrow; windrule_t*windrule; windcontext_t*context; segment_t*ending_segments; horizdata_t horiz; gfxpolystroke_t*strokes; #ifdef CHECKS dict_t*seen_crossings; //list of crossing we saw so far dict_t*intersecting_segs; //list of segments intersecting in this scanline dict_t*segs_with_point; //lists of segments that received a point in this scanline #endif } status_t; int gfxpoly_num_segments(gfxpoly_t*poly) { gfxpolystroke_t*stroke = poly->strokes; int count = 0; for(;stroke;stroke=stroke->next) { count++; } return count; } int gfxpoly_size(gfxpoly_t*poly) { int s,t; int edges = 0; gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { edges += stroke->num_points-1; } return edges; } char gfxpoly_check(gfxpoly_t*poly, char updown) { dict_t*d1 = dict_new2(&point_type); dict_t*d2 = dict_new2(&point_type); int s,t; gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { /* In order to not confuse the fill/wind logic, existing segments must have a non-zero edge style */ assert(stroke->fs); /* put all the segments into dictionaries so that we can check that the endpoint multiplicity is two */ for(s=0;snum_points;s++) { point_t p = stroke->points[s]; int num_xor = (s>=1 && snum_points-1)?2:1; // mid points are two points (start+end) int num_circ = (s>=1 && snum_points-1)?0:(s==0?1:-1); if(stroke->dir==DIR_UP) num_circ=-num_circ; if(!dict_contains(d1, &p)) { dict_put(d1, &p, (void*)(ptroff_t)num_xor); if(updown) { assert(!dict_contains(d2, &p)); dict_put(d2, &p, (void*)(ptroff_t)num_circ); } } else { int count = (ptroff_t)dict_lookup(d1, &p); dict_del(d1, &p); count+=num_xor; dict_put(d1, &p, (void*)(ptroff_t)count); if(updown) { assert(dict_contains(d2, &p)); count = (ptroff_t)dict_lookup(d2, &p); dict_del(d2, &p); count+=num_circ; dict_put(d2, &p, (void*)(ptroff_t)count); } } } } DICT_ITERATE_ITEMS(d1, point_t*, p1, void*, c1) { int count = (ptroff_t)c1; if(count&1) { fprintf(stderr, "Error: Point (%.2f,%.2f) occurs %d times\n", p1->x * poly->gridsize, p1->y * poly->gridsize, count); dict_destroy(d1); dict_destroy(d2); return 0; } } if(updown) { DICT_ITERATE_ITEMS(d2, point_t*, p2, void*, c2) { int count = (ptroff_t)c2; assert(dict_contains(d1, p2)); int ocount = (ptroff_t)dict_lookup(d1, p2); if(count!=0) { if(count>0) fprintf(stderr, "Error: Point (%.2f,%.2f) has %d more incoming than outgoing segments (%d incoming, %d outgoing)\n", p2->x * poly->gridsize, p2->y * poly->gridsize, count, (ocount+count)/2, (ocount-count)/2); if(count<0) fprintf(stderr, "Error: Point (%.2f,%.2f) has %d more outgoing than incoming segments (%d incoming, %d outgoing)\n", p2->x * poly->gridsize, p2->y * poly->gridsize, -count, (ocount+count)/2, (ocount-count)/2); gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { for(s=0;snum_points-1;s++) { point_t a = stroke->points[s]; point_t b = stroke->points[s+1]; if(a.x == p2->x && a.y == p2->y || b.x == p2->x && b.y == p2->y) { fprintf(stderr, "%.2f,%.2f -> %.2f,%.2f\n", a.x * poly->gridsize, a.y * poly->gridsize, b.x * poly->gridsize, b.y * poly->gridsize); } } } dict_destroy(d2); return 0; } } } dict_destroy(d1); dict_destroy(d2); return 1; } void gfxpoly_dump(gfxpoly_t*poly) { int s,t; double g = poly->gridsize; fprintf(stderr, "polyon %p (gridsize: %.2f)\n", poly, poly->gridsize); gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { fprintf(stderr, "%11p", stroke); if(stroke->dir==DIR_UP) { for(s=stroke->num_points-1;s>=1;s--) { point_t a = stroke->points[s]; point_t b = stroke->points[s-1]; fprintf(stderr, "%s (%.2f,%.2f) -> (%.2f,%.2f)%s%s\n", s!=stroke->num_points-1?" ":"", a.x*g, a.y*g, b.x*g, b.y*g, s==1?"]":"", a.y==b.y?"H":""); } } else { for(s=0;snum_points-1;s++) { point_t a = stroke->points[s]; point_t b = stroke->points[s+1]; fprintf(stderr, "%s (%.2f,%.2f) -> (%.2f,%.2f)%s%s\n", s?" ":"", a.x*g, a.y*g, b.x*g, b.y*g, s==stroke->num_points-2?"]":"", a.y==b.y?"H":""); } } } } void gfxpoly_save(gfxpoly_t*poly, const char*filename) { FILE*fi = fopen(filename, "wb"); fprintf(fi, "%% gridsize %f\n", poly->gridsize); fprintf(fi, "%% begin\n"); int s,t; gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { fprintf(fi, "%g setgray\n", stroke->dir==DIR_UP ? 0.7 : 0); point_t p = stroke->points[0]; fprintf(fi, "%d %d moveto\n", p.x, p.y); for(s=1;snum_points;s++) { p = stroke->points[s]; fprintf(fi, "%d %d lineto\n", p.x, p.y); } fprintf(fi, "stroke\n"); } fprintf(fi, "showpage\n"); fclose(fi); } void gfxpoly_save_arrows(gfxpoly_t*poly, const char*filename) { FILE*fi = fopen(filename, "wb"); fprintf(fi, "%% gridsize %f\n", poly->gridsize); fprintf(fi, "%% begin\n"); int t; double l = 5.0 / poly->gridsize; double g = poly->gridsize; gfxpolystroke_t*stroke = poly->strokes; for(;stroke;stroke=stroke->next) { fprintf(fi, "0 setgray\n"); int s = stroke->dir==DIR_UP?stroke->num_points-1:0; int end = stroke->dir==DIR_UP?-1:stroke->num_points; int dir = stroke->dir==DIR_UP?-1:1; point_t p = stroke->points[s]; s+=dir; point_t o = p; fprintf(fi, "%f %f moveto\n", p.x * g, p.y * g); for(;s!=end;s+=dir) { p = stroke->points[s]; int lx = p.x - o.x; int ly = p.y - o.y; double d = sqrt(lx*lx+ly*ly); if(!d) d=1; else d = l / d; double d2 = d*1.5; fprintf(fi, "%f %f lineto\n", (p.x - lx*d2) * g, (p.y - ly*d2) * g); fprintf(fi, "%f %f lineto\n", (p.x - lx*d2 + (ly*d))*g, (p.y - ly*d2 - (lx*d))*g); fprintf(fi, "%f %f lineto\n", p.x * g, p.y * g); fprintf(fi, "%f %f lineto\n", (p.x - lx*d2 - (ly*d))*g, (p.y - ly*d2 + (lx*d))*g); fprintf(fi, "%f %f lineto\n", (p.x - lx*d2) * g, (p.y - ly*d2) * g); fprintf(fi, "%f %f moveto\n", p.x * g, p.y * g); o = p; } fprintf(fi, "stroke\n"); } fprintf(fi, "showpage\n"); fclose(fi); } inline static event_t* event_new() { event_t*e = rfx_calloc(sizeof(event_t)); return e; } inline static void event_free(event_t*e) { free(e); } static void event_dump(status_t*status, event_t*e) { if(e->type == EVENT_HORIZONTAL) { fprintf(stderr, "Horizontal [%d] (%.2f,%.2f) -> (%.2f,%.2f)\n", (int)e->s1->nr, e->s1->a.x * status->gridsize, e->s1->a.y * status->gridsize, e->s1->b.x * status->gridsize, e->s1->b.y * status->gridsize); } else if(e->type == EVENT_START) { fprintf(stderr, "event: segment [%d] starts at (%.2f,%.2f)\n", (int)e->s1->nr, e->p.x * status->gridsize, e->p.y * status->gridsize); } else if(e->type == EVENT_END) { fprintf(stderr, "event: segment [%d] ends at (%.2f,%.2f)\n", (int)e->s1->nr, e->p.x * status->gridsize, e->p.y * status->gridsize); } else if(e->type == EVENT_CROSS) { fprintf(stderr, "event: segment [%d] and [%d] intersect at (%.2f,%.2f)\n", (int)e->s1->nr, (int)e->s2->nr, e->p.x * status->gridsize, e->p.y * status->gridsize); } else { assert(0); } } static inline int32_t max32(int32_t v1, int32_t v2) {return v1>v2?v1:v2;} static inline int32_t min32(int32_t v1, int32_t v2) {return v1(%d,%d) ", (int)s->nr, s->a.x, s->a.y, s->b.x, s->b.y); fprintf(stderr, " dx:%d dy:%d k:%f dx/dy=%f fs=%p\n", s->delta.x, s->delta.y, s->k, (double)s->delta.x / s->delta.y, s->fs); } static void segment_init(segment_t*s, int32_t x1, int32_t y1, int32_t x2, int32_t y2, int polygon_nr, segment_dir_t dir) { static int segment_count=0; s->nr = segment_count++; s->dir = dir; if(y1!=y2) { assert(y1x2) { s->dir = DIR_INVERT(s->dir); int32_t x = x1;x1=x2;x2=x; int32_t y = y1;y1=y2;y2=y; } #ifdef DEBUG fprintf(stderr, "Scheduling horizontal segment [%d] (%.2f,%.2f) -> (%.2f,%.2f) %s\n", segment_count, x1 * 0.05, y1 * 0.05, x2 * 0.05, y2 * 0.05, s->dir==DIR_UP?"up":"down"); #endif } s->a.x = x1; s->a.y = y1; s->b.x = x2; s->b.y = y2; s->k = (double)x1*y2-(double)x2*y1; s->left = s->right = 0; s->delta.x = x2-x1; s->delta.y = y2-y1; s->minx = min32(x1,x2); s->maxx = max32(x1,x2); s->pos = s->a; s->polygon_nr = polygon_nr; #ifdef CHECKS /* notice: on some systems (with some compilers), for the line (1073741823,-1073741824)->(1073741823,1073741823) we get LINE_EQ(s->a, s) == 1. That's why we now clamp to 26 bit. */ assert(LINE_EQ(s->a, s) == 0); assert(LINE_EQ(s->b, s) == 0); /* check that all signs are in order: a a |\ /| | \ / | minx-b b--maxx < 0 > 0 */ point_t p = s->b; p.x = min32(s->a.x, s->b.x); assert(LINE_EQ(p, s) <= 0); p.x = max32(s->a.x, s->b.x); assert(LINE_EQ(p, s) >= 0); #endif #ifndef DONT_REMEMBER_CROSSINGS dict_init2(&s->scheduled_crossings, &ptr_type, 0); #endif } static segment_t* segment_new(point_t a, point_t b, int polygon_nr, segment_dir_t dir) { segment_t*s = (segment_t*)rfx_calloc(sizeof(segment_t)); segment_init(s, a.x, a.y, b.x, b.y, polygon_nr, dir); return s; } static void segment_clear(segment_t*s) { #ifndef DONT_REMEMBER_CROSSINGS dict_clear(&s->scheduled_crossings); #endif } static void segment_destroy(segment_t*s) { segment_clear(s); free(s); } static void advance_stroke(queue_t*queue, hqueue_t*hqueue, gfxpolystroke_t*stroke, int polygon_nr, int pos, double gridsize) { if(!stroke) return; segment_t*s = 0; /* we need to queue multiple segments at once because we need to process start events before horizontal events */ while(pos < stroke->num_points-1) { assert(stroke->points[pos].y <= stroke->points[pos+1].y); s = segment_new(stroke->points[pos], stroke->points[pos+1], polygon_nr, stroke->dir); s->fs = stroke->fs; pos++; s->stroke = 0; s->stroke_pos = 0; #ifdef DEBUG /*if(l->tmp) s->nr = l->tmp;*/ fprintf(stderr, "[%d] (%.2f,%.2f) -> (%.2f,%.2f) %s (stroke %p, %d more to come)\n", s->nr, s->a.x * gridsize, s->a.y * gridsize, s->b.x * gridsize, s->b.y * gridsize, s->dir==DIR_UP?"up":"down", stroke, stroke->num_points - 1 - pos); #endif event_t* e = event_new(); e->type = s->delta.y ? EVENT_START : EVENT_HORIZONTAL; e->p = s->a; e->s1 = s; e->s2 = 0; if(queue) queue_put(queue, e); else hqueue_put(hqueue, e); if(e->type != EVENT_HORIZONTAL) { break; } } if(s) { s->stroke = stroke; s->stroke_pos = pos; } } static void gfxpoly_enqueue(gfxpoly_t*p, queue_t*queue, hqueue_t*hqueue, int polygon_nr) { int t; gfxpolystroke_t*stroke = p->strokes; for(;stroke;stroke=stroke->next) { assert(stroke->num_points > 1); #ifdef CHECKS int s; for(s=0;snum_points-1;s++) { assert(stroke->points[s].y <= stroke->points[s+1].y); } #endif advance_stroke(queue, hqueue, stroke, polygon_nr, 0, p->gridsize); } } static void schedule_endpoint(status_t*status, segment_t*s) { // schedule end point of segment assert(s->b.y > status->y); event_t*e = event_new(); e->type = EVENT_END; e->p = s->b; e->s1 = s; e->s2 = 0; queue_put(&status->queue, e); } static void schedule_crossing(status_t*status, segment_t*s1, segment_t*s2) { /* the code that's required (and the checks you can perform) before it can be said with 100% certainty that we indeed have a valid crossing amazes me every time. -mk */ #ifdef CHECKS assert(s1!=s2); assert(s1->right == s2); assert(s2->left == s1); int32_t miny1 = min32(s1->a.y,s1->b.y); int32_t maxy1 = max32(s1->a.y,s1->b.y); int32_t miny2 = min32(s2->a.y,s2->b.y); int32_t maxy2 = max32(s2->a.y,s2->b.y); int32_t minx1 = min32(s1->a.x,s1->b.x); int32_t minx2 = min32(s2->a.x,s2->b.x); int32_t maxx1 = max32(s1->a.x,s1->b.x); int32_t maxx2 = max32(s2->a.x,s2->b.x); /* check that precomputation is sane */ assert(minx1 == s1->minx && minx2 == s2->minx); assert(maxx1 == s1->maxx && maxx2 == s2->maxx); /* both segments are active, so this can't happen */ assert(!(maxy1 <= miny2 || maxy2 <= miny1)); /* we know that right now, s2 is to the right of s1, so there's no way the complete bounding box of s1 is to the right of s1 */ assert(!(s1->minx > s2->maxx)); assert(s1->minx != s2->maxx || (!s1->delta.x && !s2->delta.x)); #endif if(s1->maxx <= s2->minx) { #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: bounding boxes don't intersect\n", s1->nr, s2->nr); #endif /* bounding boxes don't intersect */ return; } #ifndef DONT_REMEMBER_CROSSINGS if(dict_contains(&s1->scheduled_crossings, (void*)(ptroff_t)s2->nr)) { /* FIXME: this whole segment hashing thing is really slow */ #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: we already scheduled this intersection\n", s1->nr, s2->nr); // DICT_ITERATE_KEY(&s1->scheduled_crossings, void*, x) { // fprintf(stderr, "[%d]<->[%d]\n", s1->nr, (int)(ptroff_t)x); // } #endif return; // we already know about this one } #endif double det = (double)s1->delta.x*s2->delta.y - (double)s1->delta.y*s2->delta.x; if(!det) { if(s1->k == s2->k) { // lines are exactly on top of each other (ignored) #ifdef DEBUG fprintf(stderr, "Notice: segments [%d] and [%d] are exactly on top of each other\n", s1->nr, s2->nr); #endif return; } else { #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: they are parallel to each other\n", s1->nr, s2->nr); #endif /* lines are parallel */ return; } } double asign2 = LINE_EQ(s1->a, s2); if(asign2==0) { // segment1 touches segment2 in a single point (ignored) #ifdef DEBUG fprintf(stderr, "Notice: segment [%d]'s start point touches segment [%d]\n", s1->nr, s2->nr); #endif return; } double bsign2 = LINE_EQ(s1->b, s2); if(bsign2==0) { // segment1 touches segment2 in a single point (ignored) #ifdef DEBUG fprintf(stderr, "Notice: segment [%d]'s end point touches segment [%d]\n", s1->nr, s2->nr); #endif return; } if(asign2<0 && bsign2<0) { // segment1 is completely to the left of segment2 #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: [%d] is completely to the left of [%d]\n", s1->nr, s2->nr, s1->nr, s2->nr); #endif return; } if(asign2>0 && bsign2>0) { // segment1 is completely to the right of segment2 #ifndef DONT_REMEMBER_CROSSINGS assert(0); #endif #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: [%d] is completely to the left of [%d]\n", s1->nr, s2->nr, s2->nr, s1->nr); #endif return; } double asign1 = LINE_EQ(s2->a, s1); if(asign1==0) { // segment2 touches segment1 in a single point (ignored) #ifdef DEBUG fprintf(stderr, "Notice: segment [%d]'s start point touches segment [%d]\n", s2->nr, s1->nr); #endif return; } double bsign1 = LINE_EQ(s2->b, s1); if(asign2==0) { // segment2 touches segment1 in a single point (ignored) #ifdef DEBUG fprintf(stderr, "Notice: segment [%d]'s end point touches segment [%d]\n", s2->nr, s1->nr); #endif return; } if(asign1<0 && bsign1<0) { // segment2 is completely to the left of segment1 #ifndef DONT_REMEMBER_CROSSINGS assert(0); #endif #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: [%d] is completely to the left of [%d]\n", s1->nr, s2->nr, s1->nr, s2->nr); #endif return; } if(asign1>0 && bsign1>0) { // segment2 is completely to the right of segment1 #ifdef DEBUG fprintf(stderr, "[%d] doesn't intersect with [%d] because: [%d] is completely to the left of [%d]\n", s1->nr, s2->nr, s2->nr, s1->nr); #endif return; } #ifdef DONT_REMEMBER_CROSSINGS /* s2 crosses s1 from *left* to *right*. This is a crossing we already processed- there's not way s2 would be to the left of s1 otherwise */ if(asign1<0 && bsign1>0) return; if(asign2>0 && bsign2<0) return; #endif assert(!(asign1<0 && bsign1>0)); assert(!(asign2>0 && bsign2<0)); /* TODO: should we precompute these? */ double la = (double)s1->a.x*(double)s1->b.y - (double)s1->a.y*(double)s1->b.x; double lb = (double)s2->a.x*(double)s2->b.y - (double)s2->a.y*(double)s2->b.x; point_t p; p.x = (int32_t)ceil((-la*s2->delta.x + lb*s1->delta.x) / det); p.y = (int32_t)ceil((+lb*s1->delta.y - la*s2->delta.y) / det); assert(p.y >= status->y); #ifdef CHECKS assert(p.x >= s1->minx && p.x <= s1->maxx); assert(p.x >= s2->minx && p.x <= s2->maxx); point_t pair; pair.x = s1->nr; pair.y = s2->nr; #ifndef DONT_REMEMBER_CROSSINGS assert(!dict_contains(status->seen_crossings, &pair)); dict_put(status->seen_crossings, &pair, 0); #endif #endif #ifdef DEBUG fprintf(stderr, "schedule crossing between [%d] and [%d] at (%d,%d)\n", s1->nr, s2->nr, p.x, p.y); #endif #ifndef DONT_REMEMBER_CROSSINGS /* we insert into each other's intersection history because these segments might switch places and we still want to look them up quickly after they did */ dict_put(&s1->scheduled_crossings, (void*)(ptroff_t)(s2->nr), 0); dict_put(&s2->scheduled_crossings, (void*)(ptroff_t)(s1->nr), 0); #endif event_t* e = event_new(); e->type = EVENT_CROSS; e->p = p; e->s1 = s1; e->s2 = s2; queue_put(&status->queue, e); return; } static void exchange_two(status_t*status, event_t*e) { //exchange two segments in list segment_t*s1 = e->s1; segment_t*s2 = e->s2; #ifdef CHECKS if(!dict_contains(status->intersecting_segs, s1)) dict_put(status->intersecting_segs, s1, 0); if(!dict_contains(status->intersecting_segs, s2)) dict_put(status->intersecting_segs, s2, 0); #endif assert(s2->left == s1); assert(s1->right == s2); actlist_swap(status->actlist, s1, s2); assert(s2->right == s1); assert(s1->left == s2); segment_t*left = s2->left; segment_t*right = s1->right; if(left) schedule_crossing(status, left, s2); if(right) schedule_crossing(status, s1, right); } typedef struct _box { point_t left1, left2, right1, right2; } box_t; static inline box_t box_new(int32_t x, int32_t y) { box_t box; box.right1.x = box.right2.x = x; box.left1.x = box.left2.x = x-1; box.left1.y = box.right1.y = y-1; box.left2.y = box.right2.y = y; return box; } static void store_horizontal(status_t*status, point_t p1, point_t p2, edgestyle_t*fs, segment_dir_t dir, int polygon_nr); static void append_stroke(status_t*status, point_t a, point_t b, segment_dir_t dir, edgestyle_t*fs) { gfxpolystroke_t*stroke = status->strokes; /* find a stoke to attach this segment to. It has to have an endpoint matching our start point, and a matching edgestyle */ while(stroke) { point_t p = stroke->points[stroke->num_points-1]; if(p.x == a.x && p.y == a.y && stroke->fs == fs && stroke->dir == dir) break; stroke = stroke->next; } if(!stroke) { stroke = rfx_calloc(sizeof(gfxpolystroke_t)); stroke->dir = dir; stroke->fs = fs; stroke->next = status->strokes; status->strokes = stroke; stroke->points_size = 2; stroke->points = rfx_calloc(sizeof(point_t)*stroke->points_size); stroke->points[0] = a; stroke->num_points = 1; } else if(stroke->num_points == stroke->points_size) { assert(stroke->fs); stroke->points_size *= 2; stroke->points = rfx_realloc(stroke->points, sizeof(point_t)*stroke->points_size); } stroke->points[stroke->num_points++] = b; } static void insert_point_into_segment(status_t*status, segment_t*s, point_t p) { assert(s->pos.x != p.x || s->pos.y != p.y); #ifdef CHECKS if(!dict_contains(status->segs_with_point, s)) dict_put(status->segs_with_point, s, 0); assert(s->fs_out_ok); #endif if(s->pos.y != p.y) { /* non horizontal line- copy to output */ if(s->fs_out) { segment_dir_t dir = s->wind.is_filled?DIR_DOWN:DIR_UP; #ifdef DEBUG fprintf(stderr, "[%d] receives next point (%.2f,%.2f)->(%.2f,%.2f) (drawing (%s))\n", s->nr, s->pos.x * status->gridsize, s->pos.y * status->gridsize, p.x * status->gridsize, p.y * status->gridsize, dir==DIR_UP?"up":"down" ); #endif assert(s->pos.y != p.y); append_stroke(status, s->pos, p, dir, s->fs_out); } else { #ifdef DEBUG fprintf(stderr, "[%d] receives next point (%.2f,%.2f) (omitting)\n", s->nr, p.x * status->gridsize, p.y * status->gridsize); #endif } } else { /* horizontal line. we need to look at this more closely at the end of this scanline */ store_horizontal(status, s->pos, p, s->fs, s->dir, s->polygon_nr); } s->pos = p; } typedef struct _segrange { double xmin; segment_t*segmin; double xmax; segment_t*segmax; } segrange_t; static void segrange_adjust_endpoints(segrange_t*range, int32_t y) { #define XPOS_EQ(s1,s2,ypos) (XPOS((s1),(ypos))==XPOS((s2),(ypos))) segment_t*min = range->segmin; segment_t*max = range->segmax; /* we need this because if two segments intersect exactly on the scanline, segrange_test_segment_{min,max} can't tell which one is smaller/larger */ if(min) while(min->left && XPOS_EQ(min, min->left, y)) { min = min->left; } if(max) while(max->right && XPOS_EQ(max, max->right, y)) { max = max->right; } range->segmin = min; range->segmax = max; } static void segrange_test_segment_min(segrange_t*range, segment_t*seg, int32_t y) { if(!seg) return; /* we need to calculate the xpos anew (and can't use start coordinate or intersection coordinate), because we need the xpos exactly at the end of this scanline. */ double x = XPOS(seg, y); if(!range->segmin || xxmin) { range->segmin = seg; range->xmin = x; } } static void segrange_test_segment_max(segrange_t*range, segment_t*seg, int32_t y) { if(!seg) return; double x = XPOS(seg, y); if(!range->segmax || x>range->xmax) { range->segmax = seg; range->xmax = x; } } /* SLOPE_POSITIVE: \+ \ + ------ I \I -I\---- I I \ --I\--- I \ I \ ------- + \ + \ */ static void add_points_to_positively_sloped_segments(status_t*status, int32_t y, segrange_t*range) { segment_t*first=0, *last = 0; int t; for(t=0;txrow->num;t++) { box_t box = box_new(status->xrow->x[t], y); segment_t*seg = actlist_find(status->actlist, box.left2, box.left2); seg = actlist_right(status->actlist, seg); while(seg) { if(seg->a.y == y) { // this segment started in this scanline, ignore it seg->changed = 1;last = seg;if(!first) {first=seg;} } else if(seg->delta.x <= 0) { // ignore segment w/ negative slope } else { last = seg;if(!first) {first=seg;} double d1 = LINE_EQ(box.right1, seg); double d2 = LINE_EQ(box.right2, seg); if(d1>0 || d2>=0) { seg->changed = 1; insert_point_into_segment(status, seg, box.right2); } else { /* we unfortunately can't break here- the active list is sorted according to the *bottom* of the scanline. hence pretty much everything that's still coming might reach into our box */ //break; } } seg = seg->right; } } segrange_test_segment_min(range, first, y); segrange_test_segment_max(range, last, y); } /* SLOPE_NEGATIVE: | + /| + / / | I / | I / / | I / | I/ / | I/ | I / | I | /I / | /+ |/ + / */ static void add_points_to_negatively_sloped_segments(status_t*status, int32_t y, segrange_t*range) { segment_t*first=0, *last = 0; int t; for(t=status->xrow->num-1;t>=0;t--) { box_t box = box_new(status->xrow->x[t], y); segment_t*seg = actlist_find(status->actlist, box.right2, box.right2); while(seg) { if(seg->a.y == y) { // this segment started in this scanline, ignore it seg->changed = 1;last = seg;if(!first) {first=seg;} } else if(seg->delta.x > 0) { // ignore segment w/ positive slope } else { last = seg;if(!first) {first=seg;} double d1 = LINE_EQ(box.left1, seg); double d2 = LINE_EQ(box.left2, seg); if(d1<0 || d2<0) { seg->changed = 1; insert_point_into_segment(status, seg, box.right2); } else { //break; } } seg = seg->left; } } segrange_test_segment_min(range, last, y); segrange_test_segment_max(range, first, y); } /* segments ending in the current scanline need xrow treatment like everything else. (consider an intersection taking place just above a nearly horizontal segment ending on the current scanline- the intersection would snap down *below* the ending segment if we don't add the intersection point to the latter right away) we need to treat ending segments seperately, however. we have to delete them from the active list right away to make room for intersect operations (which might still be in the current scanline- consider two 45° polygons and a vertical polygon intersecting on an integer coordinate). but once they're no longer in the active list, we can't use the add_points_to_*_sloped_segments() functions anymore, and re-adding them to the active list just for point snapping would be overkill. (One other option to consider, however, would be to create a new active list only for ending segments) */ static void add_points_to_ending_segments(status_t*status, int32_t y) { segment_t*seg = status->ending_segments; while(seg) { segment_t*next = seg->right;seg->right=0; assert(seg->b.y == status->y); if(status->xrow->num == 1) { // shortcut assert(seg->b.x == status->xrow->x[0]); point_t p = {status->xrow->x[0], y}; insert_point_into_segment(status, seg, p); } else { int t; int start=0,end=status->xrow->num,dir=1; if(seg->delta.x < 0) { start = status->xrow->num-1; end = dir = -1; } #ifdef CHECKS char ok = 0; #endif for(t=start;t!=end;t+=dir) { box_t box = box_new(status->xrow->x[t], y); double d0 = LINE_EQ(box.left1, seg); double d1 = LINE_EQ(box.left2, seg); double d2 = LINE_EQ(box.right1, seg); double d3 = LINE_EQ(box.right2, seg); if(!(d0>=0 && d1>=0 && d2>=0 && d3>0 || d0<=0 && d1<=0 && d2<=0 && d3<0)) { insert_point_into_segment(status, seg, box.right2); //break; #ifdef CHECKS ok = 1; #endif } } #ifdef CHECKS /* we *need* to find a point to insert. the segment's own end point is in that list, for Pete's sake. */ assert(ok); #endif } // now that this is done, too, we can also finally free this segment segment_destroy(seg); seg = next; } status->ending_segments = 0; } static void recalculate_windings(status_t*status, segrange_t*range) { #ifdef DEBUG fprintf(stderr, "range: [%d]..[%d]\n", SEGNR(range->segmin), SEGNR(range->segmax)); #endif segrange_adjust_endpoints(range, status->y); segment_t*s = range->segmin; segment_t*end = range->segmax; segment_t*last = 0; #ifdef DEBUG s = actlist_leftmost(status->actlist); while(s) { fprintf(stderr, "[%d]%d%s ", s->nr, s->changed, s == range->segmin?"S":( s == range->segmax?"E":"")); s = s->right; } fprintf(stderr, "\n"); s = range->segmin; #endif #ifdef CHECKS /* test sanity: verify that we don't have changed segments outside of the given range */ s = actlist_leftmost(status->actlist); while(s && s!=range->segmin) { assert(!s->changed); s = s->right; } s = actlist_rightmost(status->actlist); while(s && s!=range->segmax) { assert(!s->changed); s = s->left; } /* in check mode, go through the whole interval so we can test that all polygons where the edgestyle changed also have seg->changed=1 */ s = actlist_leftmost(status->actlist); end = 0; #endif if(end) end = end->right; while(s!=end) { #ifndef CHECKS if(s->changed) #endif { segment_t* left = actlist_left(status->actlist, s); windstate_t wind = left?left->wind:status->windrule->start(status->context); s->wind = status->windrule->add(status->context, wind, s->fs, s->dir, s->polygon_nr); edgestyle_t*fs_old = s->fs_out; s->fs_out = status->windrule->diff(&wind, &s->wind); #ifdef DEBUG fprintf(stderr, "[%d] dir=%s wind=%d wind.filled=%s fs_old/new=%s/%s %s\n", s->nr, s->dir==DIR_UP?"up":"down", s->wind.wind_nr, s->wind.is_filled?"fill":"nofill", fs_old?"draw":"omit", s->fs_out?"draw":"omit", fs_old!=s->fs_out?"CHANGED":""); #endif assert(!(!s->changed && fs_old!=s->fs_out)); s->changed = 0; #ifdef CHECKS s->fs_out_ok = 1; #endif } s = s->right; } } /* we need to handle horizontal lines in order to add points to segments we otherwise would miss during the windrule re-evaluation */ static void intersect_with_horizontal(status_t*status, segment_t*h) { segment_t* left = actlist_find(status->actlist, h->a, h->a); segment_t* right = actlist_find(status->actlist, h->b, h->b); /* h->a.x is not strictly necessary, as it's also done by the event */ xrow_add(status->xrow, h->a.x); xrow_add(status->xrow, h->b.x); if(!right) { assert(!left); return; } left = actlist_right(status->actlist, left); //first seg to the right of h->a right = right->right; //first seg to the right of h->b segment_t* s = left; point_t o = h->a; while(s!=right) { assert(s); int32_t x = XPOS_INT(s, status->y); point_t p = {x, status->y}; #ifdef DEBUG fprintf(stderr, "...intersecting with [%d] (%.2f,%.2f) -> (%.2f,%.2f) at (%.2f,%.2f)\n", s->nr, s->a.x * status->gridsize, s->a.y * status->gridsize, s->b.x * status->gridsize, s->b.y * status->gridsize, x * status->gridsize, status->y * status->gridsize ); #endif assert(x >= h->a.x); assert(x <= h->b.x); assert(s->delta.x > 0 && x >= s->a.x || s->delta.x <= 0 && x <= s->a.x); assert(s->delta.x > 0 && x <= s->b.x || s->delta.x <= 0 && x >= s->b.x); xrow_add(status->xrow, x); o = p; s = s->right; } } /* while, for a scanline, we need both starting as well as ending segments in order to *reconstruct* horizontal lines, we only need one or the other to *process* horizontal lines from the input data. So horizontal lines are processed twice: first they create hotpixels by intersecting all segments on the scanline (EVENT_HORIZTONAL). Secondly, they are processed for their actual content. The second also happens for all segments that received more than one point in this scanline. */ void horiz_reset(horizdata_t*horiz) { horiz->num = 0; } void horiz_destroy(horizdata_t*horiz) { if(horiz->data) rfx_free(horiz->data); horiz->data = 0; } static windstate_t get_horizontal_first_windstate(status_t*status, int x1, int x2) { point_t p1 = {x1,status->y}; point_t p2 = {x2,status->y}; segment_t*left = actlist_find(status->actlist, p1, p2); segment_t*a = actlist_right(status->actlist, left); while(a) { if(a->pos.y == status->y) { /* we need to iterate through all segments that received a point in this scanline, as actlist_find above will miss (positively sloped) segments that are to the right of (x1,y) only as long as we don't take the hotpixel re-routing into account TODO: this is inefficient, we should probably be iterating through the hotpixels on this scanline. */ if(a->pos.x == x1) left = a; if(a->pos.x > x1) break; } a = a->right; } assert(!left || left->fs_out_ok); #ifdef DEBUG fprintf(stderr, " fragment %.2f..%.2f\n", x1 * status->gridsize, x2 * status->gridsize); if(left) { fprintf(stderr, " segment [%d] (%.2f,%.2f -> %.2f,%2f, at %.2f,%.2f) is to the left\n", SEGNR(left), left->a.x * status->gridsize, left->a.y * status->gridsize, left->b.x * status->gridsize, left->b.y * status->gridsize, left->pos.x * status->gridsize, left->pos.y * status->gridsize ); /* this segment might be a distance away from the left point of the horizontal line if the horizontal line belongs to a stroke with segments that just ended (so this horizontal line appears to be "floating in space" from our current point of view) assert(left->pos.y == h->y && left->pos.x == h->x1); */ } #endif return left?left->wind:status->windrule->start(status->context); } static windstate_t process_horizontal_fragment(status_t*status, horizontal_t*h, int x1, int x2, windstate_t below) { windstate_t above = status->windrule->add(status->context, below, h->fs, h->dir, h->polygon_nr); edgestyle_t*fs = status->windrule->diff(&above, &below); segment_dir_t dir = above.is_filled?DIR_DOWN:DIR_UP; point_t p1 = {x1,h->y}; point_t p2 = {x2,h->y}; if(fs) { //append_stroke(status, p1, p2, DIR_INVERT(h->dir), fs); append_stroke(status, p1, p2, dir, fs); } #ifdef DEBUG fprintf(stderr, " ...%s (below: (wind_nr=%d, filled=%d), above: (wind_nr=%d, filled=%d) %s %d-%d\n", fs?"storing":"ignoring", below.wind_nr, below.is_filled, above.wind_nr, above.is_filled, dir==DIR_UP?"up":"down", x1, x2); #endif return above; } typedef enum {hevent_hotpixel,hevent_end,hevent_start} horizontal_event_type_t; typedef struct _hevent { int32_t x; horizontal_t*h; horizontal_event_type_t type; } hevent_t; typedef struct _hevents { hevent_t*events; int num; } hevents_t; static int compare_hevents(const void *_e1, const void *_e2) { hevent_t*e1 = (hevent_t*)_e1; hevent_t*e2 = (hevent_t*)_e2; int diff = e1->x - e2->x; if(diff) return diff; return e1->type - e2->type; //schedule hotpixel before hend } static hevents_t hevents_fill(status_t*status) { horizdata_t*horiz = &status->horiz; xrow_t*xrow = status->xrow; hevents_t e; e.events = malloc(sizeof(hevent_t)*(horiz->num*2 + xrow->num)); e.num = 0; int t; for(t=0;tnum;t++) { assert(horiz->data[t].x1 != horiz->data[t].x2); e.events[e.num].x = horiz->data[t].x1; e.events[e.num].h = &horiz->data[t]; e.events[e.num].type = hevent_start; e.num++; e.events[e.num].x = horiz->data[t].x2; e.events[e.num].h = &horiz->data[t]; e.events[e.num].type = hevent_end; e.num++; } for(t=0;tnum;t++) { e.events[e.num].x = status->xrow->x[t]; e.events[e.num].h = 0; e.events[e.num].type = hevent_hotpixel; e.num++; } qsort(e.events, e.num, sizeof(hevent_t), compare_hevents); return e; } static void process_horizontals(status_t*status) { horizdata_t*horiz = &status->horiz; if(!horiz->num) return; hevents_t events = hevents_fill(status); int num_open = 0; horizontal_t**open = malloc(sizeof(horizontal_t*)*horiz->num); int s,t; for(t=0;ttype) { case hevent_start: e->h->pos = num_open; open[num_open++] = e->h; #ifdef DEBUG fprintf(stderr, "horizontal (y=%.2f): %.2f -> %.2f dir=%s fs=%p\n", e->h->y * status->gridsize, e->h->x1 * status->gridsize, e->h->x2 * status->gridsize, e->h->dir==DIR_UP?"up":"down", e->h->fs); #endif assert(e->h->y == status->y); assert(xrow_contains(status->xrow, e->h->x1)); assert(xrow_contains(status->xrow, e->h->x2)); break; case hevent_end: num_open--; if(num_open) { open[num_open]->pos = e->h->pos; open[e->h->pos] = open[num_open]; } break; case hevent_hotpixel: { windstate_t below; for(s=0;sxpos; int x2 = e->x; assert(status->y == open[s]->y); if(!s) below = get_horizontal_first_windstate(status, x1, x2); open[s]->xpos = e->x; assert(x1 < x2); below = process_horizontal_fragment(status, open[s], x1, x2, below); } } break; } } free(open); free(events.events); } static void store_horizontal(status_t*status, point_t p1, point_t p2, edgestyle_t*fs, segment_dir_t dir, int polygon_nr) { assert(p1.y == p2.y); assert(p1.x != p2.x); // TODO: can this happen? if(p1.x > p2.x) { dir = DIR_INVERT(dir); point_t p_1 = p1; point_t p_2 = p2; p1 = p_2; p2 = p_1; } /* TODO: convert this into a linked list */ if(status->horiz.size == status->horiz.num) { if(!status->horiz.size) status->horiz.size = 16; status->horiz.size *= 2; status->horiz.data = rfx_realloc(status->horiz.data, sizeof(status->horiz.data[0])*status->horiz.size); } horizontal_t*h = &status->horiz.data[status->horiz.num++]; h->y = p1.y; h->xpos = p1.x; h->x1 = p1.x; h->x2 = p2.x; h->fs = fs; h->dir = dir; h->polygon_nr = polygon_nr; } static void event_apply(status_t*status, event_t*e) { #ifdef DEBUG event_dump(status, e); #endif switch(e->type) { case EVENT_HORIZONTAL: { segment_t*s = e->s1; intersect_with_horizontal(status, s); store_horizontal(status, s->a, s->b, s->fs, s->dir, s->polygon_nr); advance_stroke(&status->queue, 0, s->stroke, s->polygon_nr, s->stroke_pos, status->gridsize); segment_destroy(s);e->s1=0; break; } case EVENT_END: { //delete segment from list segment_t*s = e->s1; #ifdef CHECKS dict_del(status->intersecting_segs, s); dict_del(status->segs_with_point, s); assert(!dict_contains(status->intersecting_segs, s)); assert(!dict_contains(status->segs_with_point, s)); #endif segment_t*left = s->left; segment_t*right = s->right; actlist_delete(status->actlist, s); if(left && right) schedule_crossing(status, left, right); /* schedule segment for xrow handling */ s->left = 0; s->right = status->ending_segments; status->ending_segments = s; advance_stroke(&status->queue, 0, s->stroke, s->polygon_nr, s->stroke_pos, status->gridsize); break; } case EVENT_START: { //insert segment into list segment_t*s = e->s1; assert(e->p.x == s->a.x && e->p.y == s->a.y); actlist_insert(status->actlist, s->a, s->b, s); segment_t*left = s->left; segment_t*right = s->right; if(left) schedule_crossing(status, left, s); if(right) schedule_crossing(status, s, right); schedule_endpoint(status, s); break; } case EVENT_CROSS: { // exchange two segments if(e->s1->right == e->s2) { assert(e->s2->left == e->s1); exchange_two(status, e); } else { assert(e->s2->left != e->s1); #ifdef DEBUG fprintf(stderr, "Ignore this crossing ([%d] not next to [%d])\n", e->s1->nr, e->s2->nr); #endif #ifndef DONT_REMEMBER_CROSSINGS /* ignore this crossing for now (there are some line segments in between). it'll get rescheduled as soon as the "obstacles" are gone */ char del1 = dict_del(&e->s1->scheduled_crossings, (void*)(ptroff_t)e->s2->nr); char del2 = dict_del(&e->s2->scheduled_crossings, (void*)(ptroff_t)e->s1->nr); assert(del1 && del2); #endif #ifdef CHECKS point_t pair; pair.x = e->s1->nr; pair.y = e->s2->nr; #ifndef DONT_REMEMBER_CROSSINGS assert(dict_contains(status->seen_crossings, &pair)); dict_del(status->seen_crossings, &pair); #endif #endif } } } } #ifdef CHECKS static void check_status(status_t*status) { DICT_ITERATE_KEY(status->intersecting_segs, segment_t*, s) { if((s->pos.x != s->b.x || s->pos.y != s->b.y) && !dict_contains(status->segs_with_point, s)) { fprintf(stderr, "Error: segment [%d] (%sslope) intersects in scanline %d, but it didn't receive a point\n", SEGNR(s), s->delta.x<0?"-":"+", status->y); assert(0); } } } #endif gfxpoly_t* gfxpoly_process(gfxpoly_t*poly1, gfxpoly_t*poly2, windrule_t*windrule, windcontext_t*context, moments_t*moments) { current_polygon = poly1; status_t status; memset(&status, 0, sizeof(status_t)); status.gridsize = poly1->gridsize; status.windrule = windrule; status.context = context; status.actlist = actlist_new(); queue_init(&status.queue); gfxpoly_enqueue(poly1, &status.queue, 0, /*polygon nr*/0); if(poly2) { assert(poly1->gridsize == poly2->gridsize); gfxpoly_enqueue(poly2, &status.queue, 0, /*polygon nr*/1); } #ifdef CHECKS status.seen_crossings = dict_new2(&point_type); #endif int32_t lasty = INT_MIN; if(moments) { memset(moments, 0, sizeof(moments_t)); } status.xrow = xrow_new(); event_t*e = queue_get(&status.queue); while(e) { assert(e->s1->fs); status.y = e->p.y; #ifdef CHECKS assert(status.y > lasty); status.intersecting_segs = dict_new2(&ptr_type); status.segs_with_point = dict_new2(&ptr_type); #endif #ifdef DEBUG fprintf(stderr, "----------------------------------- %.2f\n", status.y * status.gridsize); actlist_dump(status.actlist, status.y-1, status.gridsize); #endif #ifdef CHECKS actlist_verify(status.actlist, status.y-1); #endif if(moments && lasty > INT_MIN) { moments_update(moments, status.actlist, lasty, status.y); } xrow_reset(status.xrow); horiz_reset(&status.horiz); do { xrow_add(status.xrow, e->p.x); event_apply(&status, e); event_free(e); e = queue_get(&status.queue); } while(e && status.y == e->p.y); xrow_sort(status.xrow); segrange_t range; memset(&range, 0, sizeof(range)); #ifdef DEBUG actlist_dump(status.actlist, status.y, status.gridsize); xrow_dump(status.xrow, status.gridsize); #endif add_points_to_positively_sloped_segments(&status, status.y, &range); add_points_to_negatively_sloped_segments(&status, status.y, &range); add_points_to_ending_segments(&status, status.y); recalculate_windings(&status, &range); actlist_verify(status.actlist, status.y); process_horizontals(&status); #ifdef CHECKS check_status(&status); dict_destroy(status.intersecting_segs); dict_destroy(status.segs_with_point); #endif lasty = status.y; } #ifdef CHECKS dict_destroy(status.seen_crossings); #endif actlist_destroy(status.actlist); queue_destroy(&status.queue); horiz_destroy(&status.horiz); xrow_destroy(status.xrow); gfxpoly_t*p = (gfxpoly_t*)malloc(sizeof(gfxpoly_t)); p->gridsize = poly1->gridsize; p->strokes = status.strokes; #ifdef CHECKS /* we only add segments with non-empty edgestyles to strokes in recalculate_windings, but better safe than sorry */ gfxpolystroke_t*stroke = p->strokes; while(stroke) { assert(stroke->fs); stroke = stroke->next; } #endif return p; } static windcontext_t onepolygon = {1}; static windcontext_t twopolygons = {2}; gfxpoly_t* gfxpoly_intersect(gfxpoly_t*p1, gfxpoly_t*p2) { return gfxpoly_process(p1, p2, &windrule_intersect, &twopolygons, 0); } gfxpoly_t* gfxpoly_union(gfxpoly_t*p1, gfxpoly_t*p2) { return gfxpoly_process(p1, p2, &windrule_union, &twopolygons, 0); } double gfxpoly_area(gfxpoly_t*p) { moments_t moments; gfxpoly_t*p2 = gfxpoly_process(p, 0, &windrule_evenodd, &onepolygon, &moments); gfxpoly_destroy(p2); moments_normalize(&moments, p->gridsize); return moments.area; } double gfxpoly_intersection_area(gfxpoly_t*p1, gfxpoly_t*p2) { moments_t moments; gfxpoly_t*p3 = gfxpoly_process(p1, p2, &windrule_intersect, &twopolygons, &moments); gfxpoly_destroy(p3); moments_normalize(&moments, p1->gridsize); return moments.area; } swftools_0.9.2+git20130725.orig/lib/png.c0000644000175000017500000012377712216332640017042 0ustar gawaingawain/* png.c Copyright (c) 2003/2004/2005 Matthias Kramm 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 */ #include #include #include #include #include #include #include #include #ifdef EXPORT #undef EXPORT #endif #ifdef PNG_INLINE_EXPORTS #define EXPORT static #else #define EXPORT #include "png.h" #endif typedef unsigned u32; typedef struct _COL { unsigned char a,r,g,b; } COL; static int png_read_chunk(char (*head)[4], int*destlen, unsigned char**destdata, FILE*fi) { unsigned int len; unsigned char blen[4]; if(destlen) *destlen=0; if(destdata) *destdata=0; if(!fread(&blen, 4, 1, fi)) { return 0; } if(!fread(head, 4, 1, fi)) { return 0; } len = blen[0]<<24|blen[1]<<16|blen[2]<<8|blen[3]; if(destlen) *destlen = len; if(destdata) { if(!len) { *destdata = 0; } else { *destdata = (unsigned char*)malloc(len); if(!fread(*destdata, len, 1, fi)) { *destdata = 0; if(destlen) *destlen=0; return 0; } } fseek(fi, 4, SEEK_CUR); } else { fseek(fi, len+4, SEEK_CUR); } return 1; } static unsigned int png_get_dword(FILE*fi) { unsigned int a; unsigned char b[4]; fread(&b,4,1,fi); return b[0]<<24|b[1]<<16|b[2]<<8|b[3]; } struct png_header { unsigned width; unsigned height; int bpp; int mode; }; static int png_read_header(FILE*fi, struct png_header*header) { char id[4]; int len; int ok=0; unsigned char head[8] = {137,80,78,71,13,10,26,10}; unsigned char head2[8]; unsigned char*data; fread(head2,8,1,fi); if(strncmp((const char*)head,(const char*)head2,4)) return 0; // not a png file while(png_read_chunk(&id, &len, &data, fi)) { //printf("Chunk: %c%c%c%c (len:%d)\n", id[0],id[1],id[2],id[3], len); if(!strncmp(id, "IHDR", 4)) { char a,b,c,f,i; if(len < 8) exit(1); header->width = data[0]<<24|data[1]<<16|data[2]<<8|data[3]; header->height = data[4]<<24|data[5]<<16|data[6]<<8|data[7]; a = data[8]; // should be 8 b = data[9]; // should be 3(indexed) or 2(rgb) c = data[10]; // compression mode (0) f = data[11]; // filter mode (0) i = data[12]; // interlace mode (0) if(b!=0 && b!=4 && b!=2 && b!=3 && b!=6) { fprintf(stderr, "Image mode %d not supported!\n", b); return 0; } if(a!=8 && (b==2 || b==6)) { printf("Bpp %d in mode %d not supported!\n", b, a); return 0; } if(c!=0) { printf("Compression mode %d not supported!\n", c); return 0; } if(f!=0) { printf("Filter mode %d not supported!\n", f); return 0; } if(i!=0) { printf("Interlace mode %d not supported!\n", i); return 0; } //printf("%dx%d bpp:%d mode:%d comp:%d filter:%d interlace:%d\n",header->width, header->height, a,b,c,f,i); header->bpp = a; header->mode = b; ok = 1; } free(data); } return ok; } typedef unsigned char byte; #define ABS(a) ((a)>0?(a):(-(a))) static inline byte PaethPredictor (byte a,byte b,byte c) { // a = left, b = above, c = upper left int p = a + b - c; // initial estimate int pa = ABS(p - a); // distances to a, b, c int pb = ABS(p - b); int pc = ABS(p - c); // return nearest of a,b,c, // breaking ties in order a,b,c. if (pa <= pb && pa <= pc) return a; else if (pb <= pc) return b; else return c; } static void applyfilter1(int mode, unsigned char*src, unsigned char*old, unsigned char*dest, unsigned width) { int x; unsigned char last=0; unsigned char upperlast=0; if(mode==0) { for(x=0;x 0xffffffff) return 0; unsigned long imagedatalen = (unsigned long)imagedatalen_64; imagedata = (unsigned char*)malloc(imagedatalen); fseek(fi,8,SEEK_SET); while(!feof(fi)) { if(!png_read_chunk(&tagid, &len, &data, fi)) break; if(!strncmp(tagid, "IEND", 4)) { break; } if(!strncmp(tagid, "PLTE", 4)) { palette = data; palettelen = len/3; data = 0; //don't free data //printf("%d colors in palette\n", palettelen); } if(!strncmp(tagid, "tRNS", 4)) { if(header.mode == 3) { alphapalette = data; alphapalettelen = len; data = 0; //don't free data //printf("found %d alpha colors\n", alphapalettelen); } else if(header.mode == 0 || header.mode == 2) { int t; if(header.mode == 2) { alphacolor[0] = data[1]; alphacolor[1] = data[3]; alphacolor[2] = data[5]; } else { alphacolor[0] = alphacolor[1] = alphacolor[2] = data[1]; } hasalphacolor = 1; } } if(!strncmp(tagid, "IDAT", 4)) { if(!zimagedata) { zimagedatalen = len; zimagedata = (unsigned char*)malloc(len); memcpy(zimagedata,data,len); } else { zimagedata = (unsigned char*)realloc(zimagedata, zimagedatalen+len); memcpy(&zimagedata[zimagedatalen], data, len); zimagedatalen += len; } } if(!strncmp(tagid, "tEXt", 4)) { /*int t; printf("Image Text: "); for(t=0;t=32 && data[t]<128) printf("%c", data[t]); else printf("?"); } printf("\n");*/ } if(data) { free(data); data=0; } } fclose(fi); if(!zimagedata || uncompress(imagedata, &imagedatalen, zimagedata, zimagedatalen) != Z_OK) { printf("Couldn't uncompress %s!\n", sname); if(zimagedata) free(zimagedata); return 0; } free(zimagedata); *destwidth = header.width; *destheight = header.height; data2 = (unsigned char*)malloc(header.width*header.height*4); if(header.mode == 4) { int i,s=0; int x,y; int pos=0; unsigned char* old= (unsigned char*)malloc(header.width*2); memset(old, 0, header.width*2); *destdata = data2; for(y=0;y=0;x--) { unsigned char gray = dest[x*2+0]; unsigned char alpha = dest[x*2+1]; dest[x*4+0] = alpha; dest[x*4+1] = gray; dest[x*4+2] = gray; dest[x*4+3] = gray; } } free(old); free(imagedata); } else if(header.mode == 6 || header.mode == 2) { int i,s=0; int x,y; int pos=0; *destdata = data2; unsigned char* firstline = malloc(header.width*4); memset(firstline,0,header.width*4); for(y=0;y>header.bpp); palettelen = 1<32 bit conversion */ for(i=0;i>(16-header.bpp-(s&7)))&v; s+=header.bpp; } src = tmpline; pos+=(header.width*header.bpp+7)/8; } if(!y) { memset(destline,0,header.width); old = &destline[y*header.width]; } else { old = tmpline; } applyfilter1(mode, src, old, destline, header.width); memcpy(tmpline,destline,header.width); for(x=0;xnum - c1->num; } static colornum_t* getColors(COL*image, int size, int*num) { unsigned char*colexists = malloc((256*256*256)/8); memset(colexists, 0, (256*256*256)/8); int t; int count=0; /* find all different colors in the image */ for(t=0;t= col) max=i; else min=i+1; } assert(colors[i].color==col); colors[i].num++; } free(colexists); *num = count; return colors; } static void getOptimalPalette(COL*image, int size, int palettesize, COL*palette) { int num; memset(palette, 0, sizeof(COL)*256); colornum_t*colors = getColors(image, size, &num); assert(palettesize<=256); qsort(colors, num, sizeof(colornum_t), compare_colors); if(num<=palettesize) { /* if there are not more than palettesize different colors in the image anyway, we are done */ int t; for(t=0;t>8; palette[t].b = colors[t].color>>16; palette[t].a = 255; } return; } if(num>2048) { /* if there are too many different colors, pick the ones that occur most often */ num = 2048; } colornum_t*centers = malloc(sizeof(colornum_t)*palettesize); int t; for(t=0;t= (palettesize+num)*2) { fprintf(stderr, "Warning: didn't find optimal palette\n"); break; } change = 0; int s,t; for(s=0;s>0&0xff) - (colors[t].color>>0&0xff)); distance += abs((centers[s].color>>8&0xff) - (colors[t].color>>8&0xff)); distance += abs((centers[s].color>>16&0xff) - (colors[t].color>>16&0xff)); distance *= colors[t].num; if(distance>0)&0xff)*colors[t].num; g += ((colors[t].color>>8)&0xff)*colors[t].num; b += ((colors[t].color>>16)&0xff)*colors[t].num; count+=colors[t].num; } } if(!count) { int random = rand()%num; centers[s].color = colors[random].color; centers[s].num = 0; change = 1; } else { r /= count; g /= count; b /= count; centers[s].color = r|g<<8|b<<16; centers[s].num = count; } } } free(belongsto); free(colors); for(t=0;t>8; palette[t].b = centers[t].color>>16; palette[t].a = 255; } free(centers); } static int sqr(const int x) {return x*x;} static void png_quantize_image(unsigned char*_image, int size, int numcolors, unsigned char**newimage, COL*palette) { COL*image = (COL*)_image; getOptimalPalette(image, size, numcolors, palette); *newimage = (unsigned char*)malloc(size); int t; for(t=0;t> 1); } crc32_table[t] = c; } } static inline void png_write_byte(FILE*fi, unsigned char byte) { fwrite(&byte,1,1,fi); mycrc32 = crc32_table[(mycrc32 ^ byte) & 0xff] ^ (mycrc32 >> 8); } static long png_start_chunk(FILE*fi, char*type, int len) { unsigned char mytype[4]={0,0,0,0}; unsigned char mylen[4]; long filepos; mylen[0] = len>>24; mylen[1] = len>>16; mylen[2] = len>>8; mylen[3] = len; memcpy(mytype,type,strlen(type)); filepos = ftell(fi); fwrite(&mylen, 4, 1, fi); mycrc32=0xffffffff; png_write_byte(fi,mytype[0]); png_write_byte(fi,mytype[1]); png_write_byte(fi,mytype[2]); png_write_byte(fi,mytype[3]); return filepos; } static void png_patch_len(FILE*fi, int pos, int len) { unsigned char mylen[4]; long filepos; mylen[0] = len>>24; mylen[1] = len>>16; mylen[2] = len>>8; mylen[3] = len; fseek(fi, pos, SEEK_SET); fwrite(&mylen, 4, 1, fi); fseek(fi, 0, SEEK_END); } static void png_write_bytes(FILE*fi, unsigned char*bytes, int len) { int t; for(t=0;t>24); png_write_byte(fi,dword>>16); png_write_byte(fi,dword>>8); png_write_byte(fi,dword); } static void png_end_chunk(FILE*fi) { u32 tmp = mycrc32^0xffffffff; unsigned char tmp2[4]; tmp2[0] = tmp>>24; tmp2[1] = tmp>>16; tmp2[2] = tmp>>8; tmp2[3] = tmp; fwrite(&tmp2,4,1,fi); } #define ZLIB_BUFFER_SIZE 16384 static long compress_line(z_stream*zs, Bytef*line, int len, FILE*fi) { long size = 0; zs->next_in = line; zs->avail_in = len; while(1) { int ret = deflate(zs, Z_NO_FLUSH); if (ret != Z_OK) { fprintf(stderr, "error in deflate(): %s", zs->msg?zs->msg:"unknown"); return 0; } if(zs->avail_out != ZLIB_BUFFER_SIZE) { int consumed = ZLIB_BUFFER_SIZE - zs->avail_out; size += consumed; png_write_bytes(fi, zs->next_out - consumed , consumed); zs->next_out = zs->next_out - consumed; zs->avail_out = ZLIB_BUFFER_SIZE; } if(!zs->avail_in) { break; } } return size; } static int test_line(z_stream*zs_orig, Bytef*line, int linelen) { z_stream zs; int ret = deflateCopy(&zs, zs_orig); if(ret != Z_OK) { fprintf(stderr, "Couldn't copy stream\n"); return 0; } zs.next_in = line; zs.avail_in = linelen; long size = 0; int mode = Z_SYNC_FLUSH; while(1) { int ret = deflate(&zs, mode); if (ret != Z_OK && ret != Z_STREAM_END) { fprintf(stderr, "error in deflate(): %s (mode %s, %d bytes remaining)\n", zs.msg?zs.msg:"unknown", mode==Z_SYNC_FLUSH?"Z_SYNC_FLUSH":"Z_FINISH", zs.avail_in); return 0; } if(zs.avail_out != ZLIB_BUFFER_SIZE) { int consumed = ZLIB_BUFFER_SIZE - zs.avail_out; size += consumed; zs.next_out = zs.next_out - consumed; zs.avail_out = ZLIB_BUFFER_SIZE; } if (ret == Z_STREAM_END) { break; } if(!zs.avail_in) { mode = Z_FINISH; } } ret = deflateEnd(&zs); if (ret != Z_OK) { fprintf(stderr, "error in deflateEnd(): %s\n", zs.msg?zs.msg:"unknown"); return 0; } return size; } static int finishzlib(z_stream*zs, FILE*fi) { int size = 0; int ret; while(1) { ret = deflate(zs, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) { fprintf(stderr, "error in deflate(finish): %s\n", zs->msg?zs->msg:"unknown"); return 0; } if(zs->avail_out != ZLIB_BUFFER_SIZE) { int consumed = ZLIB_BUFFER_SIZE - zs->avail_out; size += consumed; png_write_bytes(fi, zs->next_out - consumed , consumed); zs->next_out = zs->next_out - consumed; zs->avail_out = ZLIB_BUFFER_SIZE; } if (ret == Z_STREAM_END) { break; } } ret = deflateEnd(zs); if (ret != Z_OK) { fprintf(stderr, "error in deflateEnd(): %s\n", zs->msg?zs->msg:"unknown"); return 0; } return size; } static inline u32 color_hash(COL*col) { u32 col32 = *(u32*)col; u32 hash = (col32 >> 17) ^ col32; hash ^= ((hash>>8) + 1) ^ hash; return hash; } static int png_get_number_of_palette_entries(COL*img, unsigned width, unsigned height, COL*palette, char*has_alpha) { int len = width*height; int t; int palsize = 0; int size[256]; int palette_overflow = 0; u32 lastcol32 = 0; memset(size, 0, sizeof(size)); u32*pal = (u32*)malloc(65536*sizeof(u32)); int*count = (int*)malloc(65536*sizeof(int)); assert(sizeof(COL)==sizeof(u32)); assert(width && height); lastcol32 = (*(u32*)&img[0])^0xffffffff; // don't match for(t=0;t0?5:2; //don't apply y-direction filter in first line int bytes_per_pixel = bpp>>3; int w = width*bytes_per_pixel; int back_x = bytes_per_pixel; int back_y = y?width*bytes_per_pixel:0; unsigned char*pairs[5]; pairs[0] = calloc(1, 8192); pairs[1] = calloc(1, 8192); pairs[2] = calloc(1, 8192); pairs[3] = calloc(1, 8192); pairs[4] = calloc(1, 8192); unsigned char old[5]; int l = bytes_per_pixel - 1; old[0] = src[l]; old[1] = src[l]; old[2] = src[l] - src[l-back_y]; old[3] = src[l] - src[l-back_y]; old[4] = src[l] - PaethPredictor(0, src[l-back_y], 0); int different_pairs[5] = {0,0,0,0,0}; int x; for(x=bytes_per_pixel;x>3; int b = 1<<(v&7); if(!pairs[i][p]&b) { pairs[i][p]|=b; different_pairs[i]++; } } memcpy(old, dest, sizeof(old)); } int f; int best_nr = 0; int best_energy = INT_MAX; for(f=0;f0?5:2; //don't apply y-direction filter in first line int f; int best_energy = INT_MAX; int w = width*(bpp/8); unsigned char* pairs = malloc(8192); assert(bpp==8 || bpp==32); for(f=0;f>3; int b = 1<<(v&7); if(!pairs[p]&b) { pairs[p]|=b; different_pairs ++; } } int energy = different_pairs; if(energy256) { bpp = 32; cols = 0; format = 5; } else if(!numcolors) { int num = png_get_number_of_palette_entries((COL*)data, width, height, palette, &has_alpha); if(num<=255) { //printf("image has %d different colors (alpha=%d)\n", num, has_alpha); data2 = malloc(width*height); png_map_to_palette((COL*)data, data2, width*height, palette, num); data = data2; bpp = 8; cols = num; format = 3; } else { bpp = 32; cols = 0; format = 5; } } else { bpp = 8; cols = numcolors; format = 3; png_quantize_image(data, width*height, numcolors, &data, palette); } fi = fopen(filename, "wb"); if(!fi) { perror("open"); return; } fwrite(head,sizeof(head),1,fi); png_start_chunk(fi, "IHDR", 13); png_write_dword(fi,width); png_write_dword(fi,height); png_write_byte(fi,8); if(format == 3) png_write_byte(fi,3); //indexed else if(format == 5 && alpha==0) png_write_byte(fi,2); //rgb else if(format == 5 && alpha==1) png_write_byte(fi,6); //rgba else return; png_write_byte(fi,0); //compression mode png_write_byte(fi,0); //filter mode png_write_byte(fi,0); //interlace mode png_end_chunk(fi); if(format == 3) { png_start_chunk(fi, "PLTE", cols*3); for(t=0;t=2) continue; // don't do y direction filters in the first row line[0]=filtermode; //filter type if(bpp==8) png_apply_specific_filter_8(filtermode, line+1, &data[y*srcwidth], width); else png_apply_specific_filter_32(filtermode, line+1, &data[y*srcwidth], width); int size = test_line(&zs, line, linelen); if(size < bestsize) { memcpy(bestline, line, linelen); bestsize = size; } } idatsize += compress_line(&zs, bestline, linelen, fi); } free(bestline); #else for(y=0;y #include #include #include #include "mem.h" // memory allocation void rfx_free(void*ptr) { if(!ptr) return; free(ptr); } void start_debugger() { //*(int*)0=0; } void* rfx_alloc(int size) { void*ptr; if(size == 0) { //*(int*)0 = 0xdead; //fprintf(stderr, "Warning: Zero alloc\n"); return 0; } ptr = malloc(size); if(!ptr) { fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size); start_debugger(); exit(1); } return ptr; } void* rfx_realloc(void*data, int size) { void*ptr; if(size == 0) { //*(int*)0 = 0xdead; //fprintf(stderr, "Warning: Zero realloc\n"); rfx_free(data); return 0; } if(!data) { ptr = malloc(size); } else { ptr = realloc(data, size); } if(!ptr) { fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size); start_debugger(); exit(1); } return ptr; } void* rfx_calloc(int size) { void*ptr; if(size == 0) { //*(int*)0 = 0xdead; //fprintf(stderr, "Warning: Zero alloc\n"); return 0; } #ifdef HAVE_CALLOC ptr = calloc(1, size); #else ptr = malloc(size); #endif if(!ptr) { fprintf(stderr, "FATAL: Out of memory (while trying to claim %d bytes)\n", size); start_debugger(); exit(1); } #ifndef HAVE_CALLOC memset(ptr, 0, size); #endif return ptr; } #ifndef HAVE_CALLOC void* rfx_calloc_replacement(int nmemb, int size) { rfx_calloc(nmemb*size); } #endif #ifdef MEMORY_INFO long rfx_memory_used() { } char* rfx_memory_used_str() { } #endif swftools_0.9.2+git20130725.orig/lib/jpeg.h0000644000175000017500000000161012216332640017165 0ustar gawaingawain#ifndef __jpeg_h__ #define __jpeg_h__ #include #ifdef __cplusplus extern "C" { #endif int jpeg_save(unsigned char*data, unsigned int width, unsigned int height, int quality, const char*filename); int jpeg_save_gray(unsigned char*data, unsigned int width, unsigned int height, int quality, const char*filename); int jpeg_save_to_file(unsigned char*data, unsigned int width, unsigned int height, int quality, FILE*fi); int jpeg_save_to_mem(unsigned char*data, unsigned width, unsigned height, int quality, unsigned char*_dest, int _destlen, int components); int jpeg_load(const char*filename, unsigned char**dest, unsigned int*width, unsigned int*height); int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char**dest, unsigned int*width, unsigned int*height); void jpeg_get_size(const char *fname, unsigned int *width, unsigned int *height); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/modules/0002755000175000017500000000000012216332657017553 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/modules/swftools.c0000644000175000017500000010260512216332640021571 0ustar gawaingawain/* swftools.c Math and matrix functions, misc tools Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2000, 2001 Rainer Böhme 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 */ // Matrix & Math tools for SWF files #include "../rfxswf.h" #define S64 long long SFIXED RFXSWF_SP(SFIXED a1,SFIXED a2,SFIXED b1,SFIXED b2) { S64 a = ((S64)a1*(S64)b1+(S64)a2*(S64)b2)>>16; SFIXED result = (SFIXED)(a); if(a!=result) fprintf(stderr, "Warning: overflow in matrix multiplication\n"); return result; } SFIXED RFXSWF_QFIX(int zaehler,int nenner) // bildet Quotient von zwei INTs in SFIXED { S64 z = zaehler<<16; S64 a = z/(S64)nenner; return (SFIXED)a; } #undef S64 MATRIX * swf_MatrixJoin(MATRIX * d,MATRIX * s1,MATRIX * s2) { if (!d) return NULL; if (!s1) return (s2)?(MATRIX *)memcpy(d,s2,sizeof(MATRIX)):NULL; if (!s2) return (MATRIX *)memcpy(d,s1,sizeof(MATRIX)); d->tx = s1->tx + RFXSWF_SP(s1->sx,s1->r1,s2->tx,s2->ty); d->ty = s1->ty + RFXSWF_SP(s1->r0,s1->sy,s2->tx,s2->ty); d->sx = RFXSWF_SP(s1->sx,s1->r1,s2->sx,s2->r0); d->r0 = RFXSWF_SP(s1->r0,s1->sy,s2->sx,s2->r0); d->r1 = RFXSWF_SP(s1->sx,s1->r1,s2->r1,s2->sy); d->sy = RFXSWF_SP(s1->r0,s1->sy,s2->r1,s2->sy); //DumpMatrix(NULL,d); return d; } MATRIX * swf_MatrixMapTriangle(MATRIX * m,int dx,int dy,int x0,int y0, int x1,int y1,int x2,int y2) { int dx1 = x1 - x0; int dy1 = y1 - y0; int dx2 = x2 - x0; int dy2 = y2 - y0; if (!m) return NULL; if ((!dx)||(!dy)) return NULL; // check DIV by zero m->tx = x0; m->ty = y0; m->sx = RFXSWF_QFIX(dx1,dx); m->sy = RFXSWF_QFIX(dy2,dy); m->r0 = RFXSWF_QFIX(dy1,dx); m->r1 = RFXSWF_QFIX(dx2,dy); return m; } void swf_SetDefineID(TAG * tag, U16 newid) { int oldlen = tag->len; tag->len = 0; swf_SetU16(tag, newid); /* set defining ID */ tag->len = oldlen; } U16 swf_GetDefineID(TAG * t) // up to SWF 4.0 { U32 oldTagPos; U16 id = 0; oldTagPos = swf_GetTagPos(t); swf_SetTagPos(t,0); switch (swf_GetTagID(t)) { case ST_DEFINESHAPE: case ST_DEFINESHAPE2: case ST_DEFINESHAPE3: case ST_DEFINESHAPE4: case ST_DEFINEMORPHSHAPE: case ST_DEFINEMORPHSHAPE2: case ST_DEFINEEDITTEXT: case ST_DEFINEBITS: case ST_DEFINEBITSJPEG2: case ST_DEFINEBITSJPEG3: case ST_DEFINEBITSLOSSLESS: case ST_DEFINEBITSLOSSLESS2: case ST_DEFINESCALINGGRID: //pseudodefine case ST_DEFINEBUTTON: case ST_DEFINEBUTTON2: case ST_DEFINEBUTTONCXFORM: //pseudodefine case ST_DEFINEBUTTONSOUND: //pseudodefine case ST_CSMTEXTSETTINGS: //pseudodefine case ST_DEFINEFONT: case ST_DEFINEFONT2: case ST_DEFINEFONT3: case ST_DEFINEFONTINFO: //pseudodefine case ST_DEFINEFONTINFO2: //pseudodefine case ST_DEFINEFONTALIGNZONES: //pseudodefine case ST_DEFINEFONTNAME: //pseudodefine case ST_DEFINETEXT: case ST_DEFINEBINARY: case ST_DEFINETEXT2: case ST_DEFINESOUND: case ST_DEFINESPRITE: case ST_DEFINEMOVIE: case ST_DEFINEVIDEOSTREAM: case ST_GLYPHNAMES: //pseudodefine case ST_VIDEOFRAME: //pseudodefine case ST_NAMECHARACTER: //pseudodefine case ST_DOINITACTION: //pseudodefine id = swf_GetU16(t); break; default: fprintf(stderr, "rfxswf: Error: tag %d (%s) has no id\n", t->id, swf_TagGetName(t)); } swf_SetTagPos(t,oldTagPos); return id; } SRECT swf_GetDefineBBox(TAG * t) { U32 oldTagPos; U16 id = 0; SRECT b1,b2; memset(&b1, 0, sizeof(b1)); oldTagPos = swf_GetTagPos(t); swf_SetTagPos(t,0); swf_GetRect(0, &b1); switch (swf_GetTagID(t)) { case ST_DEFINESHAPE: case ST_DEFINESHAPE2: case ST_DEFINESHAPE3: case ST_DEFINESHAPE4: case ST_DEFINEEDITTEXT: case ST_DEFINETEXT: case ST_DEFINETEXT2: case ST_DEFINEVIDEOSTREAM: id = swf_GetU16(t); swf_GetRect(t, &b1); break; case ST_DEFINEMORPHSHAPE: id = swf_GetU16(t); swf_GetRect(t, &b1); swf_GetRect(t, &b2); swf_ExpandRect2(&b1, &b2); break; case ST_DEFINEBITSLOSSLESS: case ST_DEFINEBITSLOSSLESS2: case ST_DEFINEBITS: case ST_DEFINEBITSJPEG2: case ST_DEFINEBITSJPEG3: // FIXME break; } swf_SetTagPos(t,oldTagPos); return b1; } U16 swf_GetPlaceID(TAG * t) // up to SWF 4.0 { U32 oldTagPos; U16 id = 0; oldTagPos = swf_GetTagPos(t); swf_SetTagPos(t,0); switch (swf_GetTagID(t)) { case ST_PLACEOBJECT: case ST_REMOVEOBJECT: case ST_FREECHARACTER: case ST_STARTSOUND: id = swf_GetU16(t); break; case ST_PLACEOBJECT2: { U8 flags = swf_GetU8(t); U16 d = swf_GetU16(t); id = (flags&PF_CHAR)?swf_GetU16(t):id; } break; case ST_PLACEOBJECT3: { U8 flags = swf_GetU8(t); U8 flags2 = swf_GetU8(t); U16 d = swf_GetU16(t); id = (flags&PF_CHAR)?swf_GetU16(t):id; } break; } swf_SetTagPos(t,oldTagPos); return id; } static int swf_definingtagids[] = {ST_DEFINESHAPE, ST_DEFINESHAPE2, ST_DEFINESHAPE3, ST_DEFINESHAPE4, ST_DEFINEMORPHSHAPE, ST_DEFINEMORPHSHAPE2, ST_DEFINEFONT, ST_DEFINEFONT2, ST_DEFINEFONT3, ST_DEFINETEXT, ST_DEFINETEXT2, ST_DEFINEEDITTEXT, ST_DEFINEBITS, ST_DEFINEBITSJPEG2, ST_DEFINEBITSJPEG3, ST_DEFINEBITSLOSSLESS, ST_DEFINEBITSLOSSLESS2, ST_DEFINEMOVIE, ST_DEFINESPRITE, ST_DEFINEBUTTON, ST_DEFINEBUTTON2, ST_DEFINESOUND, ST_DEFINEVIDEOSTREAM, ST_DEFINEBINARY, -1 }; // tags which may be used inside a sprite definition static int swf_spritetagids[] = {ST_SHOWFRAME, ST_PLACEOBJECT, ST_PLACEOBJECT2, ST_PLACEOBJECT3, ST_REMOVEOBJECT, ST_REMOVEOBJECT2, ST_DOACTION, ST_DOABC, ST_STARTSOUND, ST_FRAMELABEL, ST_SOUNDSTREAMHEAD, ST_SOUNDSTREAMHEAD2, ST_SOUNDSTREAMBLOCK, ST_END, -1 }; /* tags which add content or information to a character with a given ID */ static int swf_pseudodefiningtagids[] = { ST_DEFINEFONTINFO, ST_DEFINEFONTINFO2, ST_DEFINEFONTALIGNZONES, ST_DEFINEFONTNAME, ST_DEFINEBUTTONCXFORM, ST_DEFINEBUTTONSOUND, ST_DEFINESCALINGGRID, ST_CSMTEXTSETTINGS, ST_NAMECHARACTER, ST_DOINITACTION, ST_VIDEOFRAME, ST_GLYPHNAMES, -1 }; U8 swf_isAllowedSpriteTag(TAG * tag) { int id = tag->id; int t=0; while(swf_spritetagids[t]>=0) { if(swf_spritetagids[t] == id) return 1; t++; } return 0; } U8 swf_isDefiningTag(TAG * tag) { int id = tag->id; int t=0; while(swf_definingtagids[t]>=0) { if(swf_definingtagids[t] == id) return 1; t++; } return 0; } U8 swf_isPseudoDefiningTag(TAG * tag) { int id = tag->id; int t=0; while(swf_pseudodefiningtagids[t]>=0) { if(swf_pseudodefiningtagids[t] == id) return 1; t++; } return 0; } int swf_GetDepth(TAG * t) { int depth = -1; U32 oldTagPos; oldTagPos = swf_GetTagPos(t); swf_SetTagPos(t,0); switch (swf_GetTagID(t)) { case ST_PLACEOBJECT: case ST_REMOVEOBJECT: swf_GetU16(t); //id depth = swf_GetU16(t); break; case ST_REMOVEOBJECT2: depth = swf_GetU16(t); break; case ST_PLACEOBJECT2: { U8 flags = swf_GetU8(t); depth = swf_GetU16(t); } break; case ST_PLACEOBJECT3: { U8 flags = swf_GetU8(t); U8 flags2 = swf_GetU8(t); depth = swf_GetU16(t); } break; case ST_SETTABINDEX: { depth = swf_GetU16(t); } } swf_SetTagPos(t,oldTagPos); return depth; } void swf_SetDepth(TAG * t, U16 depth) { switch (swf_GetTagID(t)) { case ST_PLACEOBJECT: case ST_REMOVEOBJECT: PUT16(t->data, depth); break; case ST_REMOVEOBJECT2: PUT16(t->data, depth); break; case ST_PLACEOBJECT2: PUT16(&t->data[1], depth); break; case ST_SETTABINDEX: PUT16(t->data, depth); break; default: fprintf(stderr, "rfxswf: Error: tag %d has no depth\n", t->id); } } char* swf_GetName(TAG * t) { char* name = 0; U32 oldTagPos; MATRIX m; CXFORM c; oldTagPos = swf_GetTagPos(t); swf_SetTagPos(t,0); switch(swf_GetTagID(t)) { case ST_FRAMELABEL: name = (char*)&t->data[swf_GetTagPos(t)]; break; case ST_PLACEOBJECT3: case ST_PLACEOBJECT2: { U8 flags = swf_GetU8(t); if(t->id == ST_PLACEOBJECT3) swf_GetU8(t); swf_GetU16(t); //depth; if(flags&PF_CHAR) swf_GetU16(t); //id if(flags&PF_MATRIX) swf_GetMatrix(t, &m); if(flags&PF_CXFORM) swf_GetCXForm(t, &c, 1); if(flags&PF_RATIO) swf_GetU16(t); if(flags&PF_CLIPDEPTH) swf_GetU16(t); if(flags&PF_NAME) { swf_ResetReadBits(t); name = (char*)&t->data[swf_GetTagPos(t)]; } } break; } swf_SetTagPos(t,oldTagPos); return name; } /* used in enumerateUsedIDs */ void swf_GetMorphGradient(TAG * tag, GRADIENT * gradient1, GRADIENT * gradient2) { int t; int num = swf_GetU8(tag) & 15; if(gradient1) gradient1->num = num; if(gradient2) gradient2->num = num; if(gradient1) { gradient1->num = num; gradient1->rgba = (RGBA*)rfx_calloc(sizeof(RGBA)*gradient1->num); gradient1->ratios = (U8*)rfx_calloc(sizeof(gradient1->ratios[0])*gradient1->num); } if(gradient2) { gradient2->num = num; gradient2->rgba = (RGBA*)rfx_calloc(sizeof(RGBA)*gradient2->num); gradient2->ratios = (U8*)rfx_calloc(sizeof(gradient2->ratios[0])*gradient2->num); } for(t=0;tratios[t] = ratio; gradient1->rgba[t] = color; } ratio = swf_GetU8(tag); swf_GetRGBA(tag, &color); if(gradient2) { gradient2->ratios[t] = ratio; gradient2->rgba[t] = color; } } } #define DEBUG_ENUMERATE if(0) //#define DEBUG_ENUMERATE void enumerateUsedIDs_fillstyle(TAG * tag, int t, void (*callback)(TAG*, int, void*), void*callback_data, int num, int morph) { int type; type = swf_GetU8(tag); //type DEBUG_ENUMERATE printf("fill style %d) type=%02x (tagpos=%d)\n", t, type, tag->pos); if(type == 0) { RGBA color; if(num >= 3) {swf_GetRGBA(tag, &color);if(morph) swf_GetRGBA(tag, NULL);} else {swf_GetRGB(tag, &color);if(morph) swf_GetRGB(tag, NULL);} DEBUG_ENUMERATE printf(" %02x%02x%02x%02x\n", color.r,color.g,color.b,color.a); } else if(type == 0x10 || type == 0x12 || type == 0x13) { swf_ResetReadBits(tag); MATRIX m; swf_GetMatrix(tag, &m); DEBUG_ENUMERATE swf_DumpMatrix(stdout, &m); if(morph) { swf_GetMatrix(tag, &m); DEBUG_ENUMERATE swf_DumpMatrix(stdout, &m); } swf_ResetReadBits(tag); if(morph) { swf_GetMorphGradient(tag, NULL, NULL); if(type == 0x13) { swf_GetU16(tag); swf_GetU16(tag); } } else { GRADIENT g; swf_GetGradient(tag, &g, /*alpha*/ num>=3?1:0); DEBUG_ENUMERATE swf_DumpGradient(stdout, &g); if(type == 0x13) swf_GetU16(tag); } } else if(type == 0x40 || type == 0x41 || type == 0x42 || type == 0x43) { swf_ResetReadBits(tag); if(tag->data[tag->pos] != 0xff || tag->data[tag->pos+1] != 0xff) (callback)(tag, tag->pos, callback_data); swf_GetU16(tag); swf_ResetReadBits(tag); swf_GetMatrix(tag, NULL); if(morph) swf_GetMatrix(tag, NULL); } else { fprintf(stderr, "rfxswf:swftools.c Unknown fillstyle:0x%02x in tag %02d\n",type, tag->id); } } void enumerateUsedIDs_linestyle(TAG * tag, int t, void (*callback)(TAG*, int, void*), void*callback_data, int num, int morph) { U16 width; RGBA color; width = swf_GetU16(tag); char fill=0; if(morph) swf_GetU16(tag); if(num >= 4) { U16 flags = swf_GetU16(tag); DEBUG_ENUMERATE printf("line style %d) flags: %08x\n", t, flags); if((flags & 0x30) == 0x20) { U16 miter = swf_GetU16(tag); // miter limit DEBUG_ENUMERATE printf("line style %d) miter join: %08x\n", t, miter); } if(flags & 0x08) { fill = 1; } } if(!fill) { if(num >= 3) {swf_GetRGBA(tag, &color);if(morph) swf_GetRGBA(tag, NULL);} else {swf_GetRGB(tag, &color);if(morph) swf_GetRGB(tag, NULL);} } else { enumerateUsedIDs_fillstyle(tag, t, callback, callback_data, num, morph); } DEBUG_ENUMERATE printf("line style %d) width=%.2f color=%02x%02x%02x%02x \n", t, width/20.0, color.r,color.g,color.b,color.a); } void enumerateUsedIDs_styles(TAG * tag, void (*callback)(TAG*, int, void*), void*callback_data, int num, int morph) { U16 count; int t; count = swf_GetU8(tag); if(count == 0xff && num>1) // defineshape2,3,4 only count = swf_GetU16(tag); DEBUG_ENUMERATE printf("%d fill styles\n", count); for(t=0;tpos = 0; switch(tag->id) { case ST_DEFINEBUTTONSOUND: { int t; callback(tag, tag->pos + base, callback_data); swf_GetU16(tag); //button id for(t=0;t<4;t++) { int flags; callback(tag, tag->pos + base, callback_data); U16 sound_id = swf_GetU16(tag); //sound id if(!sound_id) continue; flags = swf_GetU8(tag); if(flags&1) swf_GetU32(tag); // in point if(flags&2) swf_GetU32(tag); // out points if(flags&4) swf_GetU16(tag); // loop count if(flags&8) { int npoints = swf_GetU8(tag); int s; for(s=0;spos + base, callback_data); //button id break; case ST_SYMBOLCLASS: case ST_EXPORTASSETS: { int num = swf_GetU16(tag); int t; for(t=0;tpos + base, callback_data); //button id swf_GetU16(tag); //id while(swf_GetU8(tag)); //name } } break; case ST_IMPORTASSETS: case ST_IMPORTASSETS2: { swf_GetString(tag); //count swf_GetU8(tag); //reserved swf_GetU8(tag); //reserved int num = swf_GetU16(tag); //url int t; for(t=0;tpos + base, callback_data); //button id swf_GetU16(tag); //id while(swf_GetU8(tag)); //name } } break; case ST_DOABC: case ST_RAWABC: break; case ST_FREECHARACTER: /* unusual tags, which all start with an ID */ case ST_NAMECHARACTER: case ST_DEFINEFONTNAME: case ST_GENERATORTEXT: callback(tag, tag->pos + base, callback_data); break; case ST_PLACEOBJECT: callback(tag, tag->pos + base, callback_data); break; case ST_PLACEOBJECT2: // only if placeflaghascharacter if(!(tag->data[0]&2)) break; callback(tag, 3 + base, callback_data); break; case ST_PLACEOBJECT3: // only if placeflaghascharacter if(!(tag->data[0]&2)) break; callback(tag, 4 + base, callback_data); break; case ST_REMOVEOBJECT: callback(tag, tag->pos + base, callback_data); break; case ST_STARTSOUND: callback(tag, tag->pos + base, callback_data); break; case ST_DEFINESPRITE: { if(tag->len <= 4) break; // sprite is expanded swf_GetU16(tag); // id swf_GetU16(tag); // framenum while(1) { U16 flags = swf_GetU16(tag); U32 len; U16 id = flags>>6; TAG *tag2 = swf_InsertTag(NULL, id); len = flags&0x3f; if(len == 63) len = swf_GetU32(tag); if(id == ST_END) break; tag2->len = tag2->memsize = len; tag2->data = (U8*)rfx_alloc(len); memcpy(tag2->data, &tag->data[tag->pos], len); /* I never saw recursive sprites, but they are (theoretically) possible, so better add base here again */ enumerateUsedIDs(tag2, tag->pos + base, callback, callback_data); swf_DeleteTag(0, tag2); swf_GetBlock(tag, NULL, len); } } break; case ST_DEFINEBUTTON2: // has some font ids in the button records num++; //fallthrough case ST_DEFINEBUTTON: { swf_GetU16(tag); //button id if(num>1) { int offset; swf_GetU8(tag); //flag offset = swf_GetU16(tag); //offset } while(1) { U8 flags = swf_GetU8(tag); if(!flags) //flags break; callback(tag, tag->pos + base, callback_data); swf_GetU16(tag); //char swf_GetU16(tag); //layer swf_ResetReadBits(tag); swf_GetMatrix(tag, NULL); if(num>1) { swf_ResetReadBits(tag); swf_GetCXForm(tag, NULL, 1); } if(flags&0x10) { U8 num = swf_GetU8(tag); int t; for(t=0;tpos + base, callback_data); } break; case ST_DEFINETEXT2: num ++; case ST_DEFINETEXT: { int glyphbits, advancebits; int id; id = swf_GetU16(tag); //id swf_GetRect(tag, NULL); //bounding box swf_ResetReadBits(tag); swf_GetMatrix(tag, NULL); //matrix swf_ResetReadBits(tag); glyphbits = swf_GetU8(tag); //glyphbits advancebits = swf_GetU8(tag); //advancebits while(1) { U16 flags; int t; swf_ResetReadBits(tag); flags = swf_GetBits(tag, 8); if(!flags) break; swf_ResetReadBits(tag); if(flags & 8) { // hasfont callback(tag, tag->pos + base, callback_data); id = swf_GetU16(tag); } if(flags & 4) { // hascolor if(num==1) swf_GetRGB(tag, NULL); else swf_GetRGBA(tag, NULL); } if(flags & 2) { //has x offset swf_ResetReadBits(tag); swf_GetU16(tag); } if(flags & 1) { //has y offset swf_ResetReadBits(tag); swf_GetU16(tag); } if(flags & 8) { //has height swf_ResetReadBits(tag); swf_GetU16(tag); } flags = swf_GetBits(tag, 8); if(!flags) break; swf_ResetReadBits(tag); for(t=0;tpos + base, callback_data); break; case ST_DEFINEVIDEOSTREAM: break; case ST_DOINITACTION: callback(tag, tag->pos + base, callback_data); break; case ST_DEFINEMORPHSHAPE2: case ST_DEFINESHAPE4: num++; case ST_DEFINEMORPHSHAPE: case ST_DEFINESHAPE3: num++; //fallthrough case ST_DEFINESHAPE2: num++; //fallthrough case ST_DEFINESHAPE: { int fillbits; int linebits; int id; int numshapes = 1; int morph = 0; if(tag->id == ST_DEFINEMORPHSHAPE || tag->id==ST_DEFINEMORPHSHAPE2) { numshapes = 2; morph = 1; } id = swf_GetU16(tag); // id; SRECT r={0,0,0,0},r2={0,0,0,0}; swf_GetRect(tag, &r); // shape bounds if(morph) { swf_ResetReadBits(tag); swf_GetRect(tag, NULL); // shape bounds2 if(num>=4) { swf_ResetReadBits(tag); swf_GetRect(tag, NULL); // edge bounds1 } } if(num>=4) { swf_ResetReadBits(tag); swf_GetRect(tag, &r2); // edge bounds U8 flags = swf_GetU8(tag); // flags, &1: contains scaling stroke, &2: contains non-scaling stroke DEBUG_ENUMERATE printf("flags: %02x (1=scaling strokes, 2=non-scaling strokes)\n", flags); } if(morph) { swf_GetU32(tag); //offset to endedges } DEBUG_ENUMERATE printf("Tag:%d Name:%s ID:%d\n", tag->id, swf_TagGetName(tag), id); DEBUG_ENUMERATE printf("BBox %.2f %.2f %.2f %.2f\n", r.xmin/20.0,r.ymin/20.0,r.xmax/20.0,r.ymax/20.0); DEBUG_ENUMERATE printf("BBox %.2f %.2f %.2f %.2f\n", r2.xmin/20.0,r2.ymin/20.0,r2.xmax/20.0,r2.ymax/20.0); DEBUG_ENUMERATE printf("style tag pos: %d\n", tag->pos); enumerateUsedIDs_styles(tag, callback, callback_data, num, morph); DEBUG_ENUMERATE printf("-------\n"); swf_ResetReadBits(tag); while(--numshapes>=0) /* morph shapes define two shapes */ { DEBUG_ENUMERATE printf("shape:%d\n", numshapes); fillbits = swf_GetBits(tag, 4); linebits = swf_GetBits(tag, 4); DEBUG_ENUMERATE printf("fillbits=%d linebits=%d\n", fillbits, linebits); swf_ResetReadBits(tag); int x=0,y=0; while(1) { int flags; flags = swf_GetBits(tag, 1); if(!flags) { //style change flags = swf_GetBits(tag, 5); if(!flags) break; if(flags&1) { //move int n = swf_GetBits(tag, 5); x = swf_GetBits(tag, n); //x y = swf_GetBits(tag, n); //y DEBUG_ENUMERATE printf("moveTo %.2f %.2f\n",x/20.0,y/20.0); } if(flags&2) { //fill0 int fill0; fill0 = swf_GetBits(tag, fillbits); DEBUG_ENUMERATE printf("fill0 %d\n", fill0); } if(flags&4) { //fill1 int fill1; fill1 = swf_GetBits(tag, fillbits); DEBUG_ENUMERATE printf("fill1 %d\n", fill1); } if(flags&8) { //linestyle int line; line = swf_GetBits(tag, linebits); DEBUG_ENUMERATE printf("linestyle %d\n",line); } if(flags&16) { DEBUG_ENUMERATE printf("more fillstyles\n"); enumerateUsedIDs_styles(tag, callback, callback_data, num, 0); fillbits = swf_GetBits(tag, 4); linebits = swf_GetBits(tag, 4); } } else { flags = swf_GetBits(tag, 1); if(flags) { //straight edge int n = swf_GetBits(tag, 4) + 2; if(swf_GetBits(tag, 1)) { //line flag x += swf_GetSBits(tag, n); //delta x y += swf_GetSBits(tag, n); //delta y DEBUG_ENUMERATE printf("lineTo %.2f %.2f\n",x/20.0,y/20.0); } else { int v=swf_GetBits(tag, 1); int d; d = swf_GetSBits(tag, n); //vert/horz if(!v) x += d; else y += d; DEBUG_ENUMERATE printf("lineTo %.2f %.2f (%s)\n",x/20.0,y/20.0, v?"vertical":"horizontal"); } } else { //curved edge int n = swf_GetBits(tag, 4) + 2; int x1,y1,x2,y2; x1 = swf_GetSBits(tag, n); y1 = swf_GetSBits(tag, n); x2 = swf_GetSBits(tag, n); y2 = swf_GetSBits(tag, n); DEBUG_ENUMERATE printf("splineTo %.2f %.2f %.2f %.2f\n", x1/20.0, y1/20.0, x2/20.0, y2/20.0); } } } } } break; default: break; } } void callbackCount(TAG * t,int pos, void*ptr) { (*(int*)ptr)++; DEBUG_ENUMERATE printf("callback(%d) %d\n", pos, *(U16*)&t->data[pos]); } void callbackFillin(TAG * t,int pos, void*ptr) { **(int**)ptr = pos; (*(int**)ptr)++; DEBUG_ENUMERATE printf("callback(%d) %d\n", pos, *(U16*)&t->data[pos]); } int swf_GetNumUsedIDs(TAG * t) { int num = 0; enumerateUsedIDs(t, 0, callbackCount, &num); return num; } void swf_GetUsedIDs(TAG * t, int * positions) { int * ptr = positions; enumerateUsedIDs(t, 0, callbackFillin, &ptr); } char swf_Relocate (SWF*swf, char*bitmap) { TAG*tag; int slaveids[65536]; memset(slaveids, -1, sizeof(slaveids)); tag = swf->firstTag; char ok = 1; int current_id=0; #define NEW_ID(n) \ for(current_id++;current_id<65536;current_id++) { \ if(!bitmap[current_id]) { \ n = current_id; \ break; \ } \ } \ if(current_id==65536) { \ fprintf(stderr, "swf_Relocate: Couldn't relocate: Out of IDs\n"); \ return 0; \ } while(tag) { int num; int *ptr; if(swf_isDefiningTag(tag)) { int newid; int id; id = swf_GetDefineID(tag); //own id if(!bitmap[id]) { //free newid = id; } else if(slaveids[id]>0) { newid = slaveids[id]; } else { NEW_ID(newid); } bitmap[newid] = 1; slaveids[id] = newid; swf_SetDefineID(tag, newid); } num = swf_GetNumUsedIDs(tag); if(num) { ptr = (int*)rfx_alloc(sizeof(int)*num); swf_GetUsedIDs(tag, ptr); int t; for(t=0;tdata[ptr[t]]); if(slaveids[id]<0) { if(!id && bitmap[id]) { /* id 0 is only used in SWF versions >=9. It's the ID of the main timeline. It's used in e.g. SYMBOLTAG tags, but never defined, so if we're asked to reallocate it, we have to allocate an ID for it on the fly. */ int newid; NEW_ID(newid); bitmap[newid] = 1; slaveids[id] = newid; id = newid; } else if(!bitmap[id]) { /* well- we don't know this id, but it's not reserved anyway, so just leave it alone */ } else { /* this actually happens with files created with Flash CS4 and never. Apparently e.g. DefineButton tags are able to use forward declarations of objects. */ fprintf(stderr, "warning: Mapping id (%d) never encountered before in %s\n", id, swf_TagGetName(tag)); int newid; NEW_ID(newid); id = slaveids[id] = newid; ok = 0; } } else { id = slaveids[id]; } PUT16(&tag->data[ptr[t]], id); } free(ptr); } tag=tag->next; } return ok; } /* untested */ void swf_Relocate2(SWF*swf, int*id2id) { TAG*tag; tag = swf->firstTag; while(tag) { if(swf_isDefiningTag(tag)) { int id = swf_GetDefineID(tag); id = id2id[id]; if(id>=0) { swf_SetDefineID(tag, id); } } int num = swf_GetNumUsedIDs(tag); if(num) { int *ptr; int t; ptr = (int*)rfx_alloc(sizeof(int)*num); swf_GetUsedIDs(tag, ptr); for(t=0;tdata[ptr[t]]); id = id2id[id]; if(id>=0) { PUT16(&tag->data[ptr[t]], id); } } free(ptr); } } } void swf_RelocateDepth(SWF*swf, char*bitmap) { TAG*tag; int nr; tag = swf->firstTag; for(nr=65535;nr>=0;nr--) { if(bitmap[nr] != 0) break; } // now nr is the highest used depth. So we start // assigning depths at nr+1 nr++; while(tag) { int depth; /* TODO * clip depths * sprites */ if(tag->id == ST_PLACEOBJECT2) { SWFPLACEOBJECT obj; swf_GetPlaceObject(tag, &obj); if(obj.clipdepth) { int newdepth = obj.clipdepth+nr; if(newdepth>65535) { fprintf(stderr, "Couldn't relocate depths: too large values\n"); newdepth = 65535; } obj.clipdepth = newdepth; swf_ResetTag(tag, ST_PLACEOBJECT2); swf_SetPlaceObject(tag, &obj); } swf_PlaceObjectFree(&obj); } depth = swf_GetDepth(tag); if(depth>=0) { int newdepth = depth+nr; if(newdepth>65535) { fprintf(stderr, "Couldn't relocate depths: too large values\n"); newdepth = 65535; } swf_SetDepth(tag, newdepth); } tag=tag->next; } } U8 swf_isShapeTag(TAG*tag) { if(tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || tag->id == ST_DEFINESHAPE3 || tag->id == ST_DEFINESHAPE4) return 1; return 0; } U8 swf_isPlaceTag(TAG*tag) { if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2 || tag->id == ST_PLACEOBJECT3) return 1; return 0; } U8 swf_isTextTag(TAG*tag) { if(tag->id == ST_DEFINETEXT || tag->id == ST_DEFINETEXT2) return 1; return 0; } U8 swf_isFontTag(TAG*tag) { if(tag->id == ST_DEFINEFONT || tag->id == ST_DEFINEFONT2 || tag->id == ST_DEFINEFONT3 || tag->id == ST_DEFINEFONTINFO) return 1; return 0; } U8 swf_isImageTag(TAG*tag) { if(tag->id == ST_DEFINEBITSJPEG || tag->id == ST_DEFINEBITSJPEG2 || tag->id == ST_DEFINEBITSJPEG3 || tag->id == ST_DEFINEBITSLOSSLESS || tag->id == ST_DEFINEBITSLOSSLESS2) return 1; return 0; } TAG* swf_Concatenate (TAG*list1,TAG*list2) { TAG*tag=0,*lasttag=0; char bitmap[65536]; char depthmap[65536]; SWF swf1,swf2; memset(bitmap, 0, sizeof(bitmap)); memset(depthmap, 0, sizeof(depthmap)); memset(&swf1, 0, sizeof(swf1)); memset(&swf2, 0, sizeof(swf2)); swf1.firstTag = list1; swf_FoldAll(&swf1); swf2.firstTag = list2; swf_FoldAll(&swf2); tag = list1; while(tag) { if(!swf_isDefiningTag(tag)) { int id = swf_GetDefineID(tag); bitmap[id] = 1; } if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { int depth = swf_GetDepth(tag); depthmap[depth] = 1; } if(tag->id == ST_REMOVEOBJECT || tag->id == ST_REMOVEOBJECT2) { int depth = swf_GetDepth(tag); depthmap[depth] = 0; } tag = tag->next; lasttag = tag; } swf_Relocate(&swf2, bitmap); swf_RelocateDepth(&swf2, depthmap); lasttag->next = swf2.firstTag; swf2.firstTag->prev = lasttag; return swf1.firstTag; } static int tagHash(TAG*tag) { int t, h=0; unsigned int a = 0x6b973e5a; /* start at pos 2, as 0 and 1 are the id */ for(t=2;tlen;t++) { unsigned int b = a; a >>= 8; a += tag->data[t]*0xefbc35a5*b*(t+1); } return a&0x7fffffff; //always return positive number } void swf_Optimize(SWF*swf) { const int hash_size = 131072; char* dontremap = (char*)rfx_calloc(sizeof(char)*65536); U16* remap = (U16*)rfx_alloc(sizeof(U16)*65536); TAG* id2tag = (TAG*)rfx_calloc(sizeof(TAG*)*65536); TAG** hashmap = (TAG**)rfx_calloc(sizeof(TAG*)*hash_size); TAG* tag; int t; for(t=0;t<65536;t++) { remap[t] = t; } swf_FoldAll(swf); tag = swf->firstTag; while(tag) { /* make sure we don't remap to this tag, as it might have different "helper tags" FIXME: a better way would be to compare the helper tags, too. */ if(swf_isPseudoDefiningTag(tag) && tag->id != ST_NAMECHARACTER) { dontremap[swf_GetDefineID(tag)] = 1; } tag=tag->next; } tag = swf->firstTag; while(tag) { TAG*next = tag->next; /* remap the tag */ int num = swf_GetNumUsedIDs(tag); int*positions = (int*)rfx_alloc(sizeof(int)*num); int t; swf_GetUsedIDs(tag, positions); for(t=0;tdata[positions[t]]); id = remap[id]; PUT16(&tag->data[positions[t]], id); } rfx_free(positions); /* now look for previous tags with the same content */ if(swf_isDefiningTag(tag)) { TAG*tag2; int id = swf_GetDefineID(tag); int hash = tagHash(tag); int match=0; if(!dontremap[id]) while((tag2 = hashmap[hash%hash_size])) { if(tag2 != (TAG*)0 && tag->len == tag2->len) { if(memcmp(&tag->data[2],&tag2->data[2],tag->len-2) == 0) { match = 1; break; } } hash++; } if(!match) { while(hashmap[hash%hash_size]) hash++; hashmap[hash%hash_size] = tag; } else { /* we found two identical tags- remap one of them */ remap[id] = swf_GetDefineID(tag2); swf_DeleteTag(swf, tag); } } else if(swf_isPseudoDefiningTag(tag)) { int id = swf_GetDefineID(tag); if(remap[id]!=id) { /* if this tag was remapped, we don't need the helper tag anymore. Discard it. */ swf_DeleteTag(swf, tag); } } tag = next; } rfx_free(dontremap); rfx_free(remap); rfx_free(id2tag); rfx_free(hashmap); } void swf_SetDefineBBox(TAG * tag, SRECT newbbox) { U16 id = 0; SRECT b1; swf_SetTagPos(tag,0); switch (swf_GetTagID(tag)) { case ST_DEFINESHAPE: case ST_DEFINESHAPE2: case ST_DEFINESHAPE3: case ST_DEFINEEDITTEXT: case ST_DEFINETEXT: case ST_DEFINETEXT2: case ST_DEFINEVIDEOSTREAM: { U32 after_bbox_offset = 0, len; U8*data; id = swf_GetU16(tag); swf_GetRect(tag, &b1); swf_ResetReadBits(tag); after_bbox_offset = tag->pos; len = tag->len - after_bbox_offset; data = (U8*)malloc(len); memcpy(data, &tag->data[after_bbox_offset], len); tag->writeBit = 0; tag->len = 2; swf_SetRect(tag, &newbbox); swf_SetBlock(tag, data, len); free(data); tag->pos = tag->readBit = 0; } break; default: fprintf(stderr, "rfxswf: Tag %d (%s) has no bbox\n", tag->id, swf_TagGetName(tag)); } } RGBA swf_GetSWFBackgroundColor(SWF*swf) { TAG*t=swf->firstTag; RGBA color; color.r = color.b = color.g = 0; color.a = 255; while(t) { if(t->id == ST_SETBACKGROUNDCOLOR) { swf_SetTagPos(t, 0); color.r = swf_GetU8(t); color.g = swf_GetU8(t); color.b = swf_GetU8(t); break; } t=t->next; } return color; } swftools_0.9.2+git20130725.orig/lib/modules/swfdump.c0000644000175000017500000002136612216332640021402 0ustar gawaingawain/* swfdump.c Dump / debug functions Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Rainer Böhme 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 */ #include #include #include "../rfxswf.h" void swf_DumpHeader(FILE * f,SWF * swf) { if (!f) f = stderr; fprintf(f,"File size\t%u\n",swf->fileSize); fprintf(f,"Movie width\t%u\n",(swf->movieSize.xmax - swf->movieSize.xmin)/20); fprintf(f,"Movie height\t%u\n",(swf->movieSize.ymax - swf->movieSize.ymin)/20); fprintf(f,"Frame rate\t%u.%u\n",swf->frameRate>>8,swf->frameRate&0xff); fprintf(f,"Frame count\t%u\n",swf->frameCount); } void swf_DumpMatrix(FILE * f,MATRIX * m) { if (!f) f = stderr; /*fprintf(f,"[%08x][%08x]\n",m->sx,m->r1); fprintf(f,"[%08x][%08x]\n",m->r0,m->sy); fprintf(f," %08x, %08x\n",m->tx,m->ty);*/ fprintf(f,"[%08x][%08x] %5.2f %5.2f %5.2f\n",m->sx,m->r1, m->sx/65536.0,m->r1/65536.0, m->tx/20.0); fprintf(f,"[%08x][%08x] %5.2f %5.2f %5.2f\n",m->r0,m->sy, m->r0/65536.0,m->sy/65536.0, m->ty/20.0 ); fprintf(f," %08x, %08x \n",m->tx,m->ty); } void swf_DumpGradient(FILE * f,GRADIENT * g) { if (!f) f = stderr; fprintf(f, "%d gradient steps\n", g->num); int t; for(t=0;tnum;t++) { RGBA c = g->rgba[t]; fprintf(f, "%d) %02x%02x%02x%02x at %d\n", t, c.r,c.g,c.b,c.a, g->ratios[t]); } } void swf_DumpTag(FILE * f,TAG * t) { int i; if (!f) f = stderr; for (i=0;ilen;i++) { if (!(i&15)) fprintf(f,"\n"); fprintf(f,"%02x ",t->data[i]); } fprintf(f,"\n"); } void swf_DumpSWF(FILE * f, SWF*swf) { TAG* tag = swf->firstTag; fprintf(f, "vvvvvvvvvvvvvvvvvvvvv\n"); while(tag) { printf("%8d %s\n", tag->len, swf_TagGetName(tag)); tag = tag->next; } fprintf(f, "^^^^^^^^^^^^^^^^^^^^^\n"); } void swf_DumpFont(SWFFONT * font) { printf("ID: %d\n", font->id); printf("Version: %d\n", font->version); printf("name: %s\n", font->name); printf("characters: %d\n", font->numchars); printf("biggest mapped ascii value: %d\n", font->maxascii); printf("layout: %s\n", font->layout?"yes":"no"); if(font->layout) { printf(" ascent:%d\n", font->layout->ascent); printf(" descent:%d\n", font->layout->descent); printf(" leading:%d\n", font->layout->leading); printf(" bounds: (not shown)\n"); printf(" kerning records:%d\n", font->layout->kerningcount); printf(" kerning records: (not shown)\n"); } printf("style: %d\n", font->style); printf("encoding: %d\n", font->encoding); printf("language: %d\n", font->language); } void swf_DumpShape(SHAPE2*shape2) { SHAPELINE*l = shape2->lines; while(l) { if(l->type == moveTo) { //printf("fill %d/%d line %d\n", l->fillstyle0, l->fillstyle1, l->linestyle); printf("moveTo %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle); } if(l->type == lineTo) { //printf("fill %d/%d line %d\n", l->fillstyle0, l->fillstyle1, l->linestyle); printf("lineTo %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle); } if(l->type == splineTo) { //printf("fill %d/%d line %d\n", l->fillstyle0, l->fillstyle1, l->linestyle); printf("splineTo %.2f,%.2f %.2f,%.2f (fill0:%d fill1:%d line:%d)\n", l->sx/20.0, l->sy/20.0, l->x/20.0, l->y/20.0, l->fillstyle0, l->fillstyle1, l->linestyle); } l = l->next; } } char* swf_TagGetName(TAG*tag) { switch(tag->id) { case ST_END: return "END"; case ST_SHOWFRAME: return "SHOWFRAME"; case ST_DEFINESHAPE: return "DEFINESHAPE"; case ST_FREECHARACTER: return "FREECHARACTER"; case ST_PLACEOBJECT: return "PLACEOBJECT"; case ST_REMOVEOBJECT: return "REMOVEOBJECT"; case ST_DEFINEBITSJPEG: return "DEFINEBITSJPEG"; case ST_DEFINEBUTTON: return "DEFINEBUTTON"; case ST_JPEGTABLES: return "JPEGTABLES"; case ST_SETBACKGROUNDCOLOR: return "SETBACKGROUNDCOLOR"; case ST_DEFINEFONT: return "DEFINEFONT"; case ST_DEFINETEXT: return "DEFINETEXT"; case ST_DEFINEEDITTEXT: return "DEFINEEDITTEXT"; case ST_DOACTION: return "DOACTION"; case ST_DOABC: return "DOABC"; case ST_RAWABC: return "RAWABC"; case ST_DEFINEFONTINFO: return "DEFINEFONTINFO"; case ST_DEFINESOUND: return "DEFINESOUND"; case ST_STARTSOUND: return "STARTSOUND"; case ST_DEFINEBUTTONSOUND: return "DEFINEBUTTONSOUND"; case ST_SOUNDSTREAMHEAD: return "SOUNDSTREAMHEAD"; case ST_SOUNDSTREAMBLOCK: return "SOUNDSTREAMBLOCK"; case ST_DEFINEBITSLOSSLESS: return "DEFINEBITSLOSSLESS"; case ST_DEFINEBITSJPEG2: return "DEFINEBITSJPEG2"; case ST_DEFINESHAPE2: return "DEFINESHAPE2"; case ST_DEFINEBUTTONCXFORM: return "DEFINEBUTTONCXFORM"; case ST_PROTECT: return "PROTECT"; case ST_PLACEOBJECT2: return "PLACEOBJECT2"; case ST_REMOVEOBJECT2: return "REMOVEOBJECT2"; case ST_DEFINESHAPE3: return "DEFINESHAPE3"; case ST_DEFINETEXT2: return "DEFINETEXT2"; case ST_DEFINEBUTTON2: return "DEFINEBUTTON2"; case ST_DEFINEBITSJPEG3: return "DEFINEBITSJPEG3"; case ST_DEFINEBITSLOSSLESS2: return "DEFINEBITSLOSSLESS2"; case ST_DEFINESPRITE: return "DEFINESPRITE"; case ST_NAMECHARACTER: return "NAMECHARACTER"; case ST_SERIALNUMBER: return "SERIALNUMBER"; case ST_GENERATORTEXT: return "GENERATORTEXT"; case ST_FRAMELABEL: return "FRAMELABEL"; case ST_SOUNDSTREAMHEAD2: return "SOUNDSTREAMHEAD2"; case ST_DEFINEMORPHSHAPE: return "DEFINEMORPHSHAPE"; case ST_DEFINEMORPHSHAPE2: return "DEFINEMORPHSHAPE2"; case ST_DEFINEFONT2: return "DEFINEFONT2"; case ST_TEMPLATECOMMAND: return "TEMPLATECOMMAND"; case ST_GENERATOR3: return "GENERATOR3"; case ST_EXTERNALFONT: return "EXTERNALFONT"; case ST_EXPORTASSETS: return "EXPORTASSETS"; case ST_SYMBOLCLASS: return "SYMBOLCLASS"; case ST_DEFINEBINARY: return "DEFINEBINARY"; case ST_IMPORTASSETS: return "IMPORTASSETS"; case ST_ENABLEDEBUGGER: return "ENABLEDEBUGGER"; case ST_DOINITACTION: return "DOINITACTION"; case ST_DEFINEMOVIE: return "DEFINEMOVIE"; case ST_DEFINEVIDEOSTREAM: return "DEFINEVIDEOSTREAM"; case ST_VIDEOFRAME: return "VIDEOFRAME"; case ST_DEFINEFONTINFO2: return "DEFINEFONTINFO2"; case ST_FILEATTRIBUTES: return "FILEATTRIBUTES"; case ST_IMPORTASSETS2: return "IMPORTASSETS2"; case ST_DEFINESCALINGGRID: return "DEFINESCALINGGRID"; case ST_DEFINESHAPE4: return "DEFINESHAPE4"; case ST_DEFINEFONT3: return "DEFINEFONT3"; case ST_DEFINEFONTALIGNZONES: return "DEFINEFONTALIGNZONES"; case ST_DEFINEFONTNAME: return "DEFINEFONTNAME"; case ST_CSMTEXTSETTINGS: return "CSMTEXTSETTINGS"; case ST_FREEALL: return "FREEALL"; case ST_MX4: return "MX4"; case ST_SCRIPTLIMITS: return "SCRIPTLIMITS"; case ST_SETTABINDEX: return "SETTABINDEX"; case ST_ENABLEDEBUGGER2: return "ENABLEDEBUGGER2"; case ST_PLACEOBJECT3: return "PLACEOBJECT3"; case ST_METADATA: return "METADATA"; case ST_SCENEDESCRIPTION: return "SCENEDESCRIPTION"; case ST_REFLEX: return "REFLEX"; case ST_GLYPHNAMES: return "GLYPHNAMES"; } return 0; } swftools_0.9.2+git20130725.orig/lib/modules/swfbits.c0000644000175000017500000007613612216332640021403 0ustar gawaingawain/* swfbits.c Bitmap functions (needs libjpeg) Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2000, 2001 Rainer Böhme 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 */ #include #include #include #include "../../config.h" #ifdef HAVE_ZLIB #include #include #endif #include #include #ifdef HAVE_JPEGLIB #define HAVE_BOOLEAN #ifdef __cplusplus extern "C" { #endif #include #ifdef __cplusplus } #endif #endif // HAVE_JPEGLIB #include "../rfxswf.h" #define OUTBUFFER_SIZE 0x8000 int swf_ImageHasAlpha(RGBA*img, int width, int height) { int len = width*height; int t; int hasalpha=0; for(t=0;t= 4 && img[t].a < 0xfc) return 2; if(img[t].a < 4) hasalpha=1; } return hasalpha; } /*int swf_ImageGetNumberOfPaletteEntries(RGBA*img, int width, int height, RGBA*palette) { int len = width*height; int t; int palsize = 0; RGBA pal[512]; U32*pal32=(U32*)pal; int palette_overflow = 0; U32 lastcol32 = 0; if(sizeof(RGBA)!=sizeof(U32)) fprintf(stderr, "rfxswf: sizeof(RGBA)!=sizeof(U32))"); lastcol32 = pal32[palsize++] = *(U32*)&img[0]; for(t=1;t> 17) ^ col32; hash ^= ((hash>>8) + 1) ^ hash; hash &= 255; csize = size[hash]; cpal = &pal[hash*256]; for(i=0;idest; dmgr->buffer = (JOCTET *) rfx_alloc(OUTBUFFER_SIZE); dmgr->mgr.next_output_byte = dmgr->buffer; dmgr->mgr.free_in_buffer = OUTBUFFER_SIZE; } static boolean RFXSWF_empty_output_buffer(j_compress_ptr cinfo) { JPEGDESTMGR *dmgr = (JPEGDESTMGR *) cinfo->dest; swf_SetBlock(dmgr->t, (U8 *) dmgr->buffer, OUTBUFFER_SIZE); dmgr->mgr.next_output_byte = dmgr->buffer; dmgr->mgr.free_in_buffer = OUTBUFFER_SIZE; return TRUE; } static void RFXSWF_term_destination(j_compress_ptr cinfo) { JPEGDESTMGR *dmgr = (JPEGDESTMGR *) cinfo->dest; swf_SetBlock(dmgr->t, (U8 *) dmgr->buffer, OUTBUFFER_SIZE - dmgr->mgr.free_in_buffer); rfx_free(dmgr->buffer); dmgr->mgr.free_in_buffer = 0; } JPEGBITS *swf_SetJPEGBitsStart(TAG * t, int width, int height, int quality) { JPEGDESTMGR *jpeg; // redirect compression lib output to local SWF Tag structure jpeg = (JPEGDESTMGR *) rfx_calloc(sizeof(JPEGDESTMGR)); jpeg->cinfo.err = jpeg_std_error(&jpeg->jerr); jpeg_create_compress(&jpeg->cinfo); jpeg->mgr.init_destination = RFXSWF_init_destination; jpeg->mgr.empty_output_buffer = RFXSWF_empty_output_buffer; jpeg->mgr.term_destination = RFXSWF_term_destination; jpeg->t = t; jpeg->cinfo.dest = (struct jpeg_destination_mgr *) jpeg; // init compression jpeg->cinfo.image_width = width; jpeg->cinfo.image_height = height; jpeg->cinfo.input_components = 3; jpeg->cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&jpeg->cinfo); jpeg_set_quality(&jpeg->cinfo, quality, TRUE); // write tables to SWF jpeg_write_tables(&jpeg->cinfo); // compess image to SWF jpeg_suppress_tables(&jpeg->cinfo, TRUE); jpeg_start_compress(&jpeg->cinfo, FALSE); return (JPEGBITS *) jpeg; } int swf_SetJPEGBitsLines(JPEGBITS * jpegbits, U8 ** data, int n) { JPEGDESTMGR *jpeg = (JPEGDESTMGR *) jpegbits; if (!jpeg) return -1; jpeg_write_scanlines(&jpeg->cinfo, data, n); return 0; } int swf_SetJPEGBitsLine(JPEGBITS * jpegbits, U8 * data) { return swf_SetJPEGBitsLines(jpegbits, &data, 1); } int swf_SetJPEGBitsFinish(JPEGBITS * jpegbits) { JPEGDESTMGR *jpeg = (JPEGDESTMGR *) jpegbits; if (!jpeg) return -1; jpeg_finish_compress(&jpeg->cinfo); jpeg_destroy_compress(&jpeg->cinfo); rfx_free(jpeg); return 0; } #if defined(HAVE_JPEGLIB) void swf_SetJPEGBits2(TAG * tag, U16 width, U16 height, RGBA * bitmap, int quality) { JPEGBITS *jpeg; int y; jpeg = swf_SetJPEGBitsStart(tag, width, height, quality); U8 *scanline = (U8*)rfx_alloc(3 * width); for (y = 0; y < height; y++) { int x, p = 0; for (x = 0; x < width; x++) { scanline[p++] = bitmap[width * y + x].r; scanline[p++] = bitmap[width * y + x].g; scanline[p++] = bitmap[width * y + x].b; } swf_SetJPEGBitsLine(jpeg, scanline); } rfx_free(scanline); swf_SetJPEGBitsFinish(jpeg); } #else void swf_SetJPEGBits2(TAG * tag, U16 width, U16 height, RGBA * bitmap, int quality) { fprintf(stderr, "Error: swftools compiled without jpeglib\n"); return -1; } #endif void swf_GetJPEGSize(const char *fname, int *width, int *height) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; FILE *fi; *width = 0; *height = 0; cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); if ((fi = fopen(fname, "rb")) == NULL) { fprintf(stderr, "rfxswf: file open error\n"); return; } jpeg_stdio_src(&cinfo, fi); jpeg_read_header(&cinfo, TRUE); *width = cinfo.image_width; *height = cinfo.image_height; jpeg_destroy_decompress(&cinfo); fclose(fi); } int swf_SetJPEGBits(TAG * t, const char *fname, int quality) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; JPEGBITS *out; FILE *f; U8 *scanline; cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); if ((f = fopen(fname, "rb")) == NULL) { fprintf(stderr, "rfxswf: file open error\n"); return -1; } jpeg_stdio_src(&cinfo, f); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); out = swf_SetJPEGBitsStart(t, cinfo.output_width, cinfo.output_height, quality); scanline = (U8 *) rfx_alloc(4 * cinfo.output_width); if (scanline) { int y; U8 *js = scanline; if (cinfo.out_color_space == JCS_GRAYSCALE) { for (y = 0; y < cinfo.output_height; y++) { int x; jpeg_read_scanlines(&cinfo, &js, 1); for (x = cinfo.output_width - 1; x >= 0; x--) { js[x * 3] = js[x * 3 + 1] = js[x * 3 + 2] = js[x]; } swf_SetJPEGBitsLines(out, (U8 **) & js, 1); } } else if (cinfo.out_color_space == JCS_RGB) { for (y = 0; y < cinfo.output_height; y++) { jpeg_read_scanlines(&cinfo, &js, 1); swf_SetJPEGBitsLines(out, (U8 **) & js, 1); } } else if (cinfo.out_color_space == JCS_YCCK) { //FIXME fprintf(stderr, "Error: Can't convert YCCK to RGB.\n"); return -1; } else if (cinfo.out_color_space == JCS_YCbCr) { for (y = 0; y < cinfo.output_height; y++) { int x; for (x = 0; x < cinfo.output_width; x++) { int y = js[x * 3 + 0]; int u = js[x * 3 + 1]; int v = js[x * 3 + 1]; js[x * 3 + 0] = y + ((360 * (v - 128)) >> 8); js[x * 3 + 1] = y - ((88 * (u - 128) + 183 * (v - 128)) >> 8); js[x * 3 + 2] = y + ((455 * (u - 128)) >> 8); } } } else if (cinfo.out_color_space == JCS_CMYK) { for (y = 0; y < cinfo.output_height; y++) { int x; jpeg_read_scanlines(&cinfo, &js, 1); /* This routine seems to work for now- It's a mixture of 3 different CMYK->RGB conversion routines I found in the web. (which all produced garbage) I'm happily accepting suggestions. (mk) */ for (x = 0; x < cinfo.output_width; x++) { int white = 255 - js[x * 4 + 3]; js[x * 3 + 0] = white - ((js[x * 4] * white) >> 8); js[x * 3 + 1] = white - ((js[x * 4 + 1] * white) >> 8); js[x * 3 + 2] = white - ((js[x * 4 + 2] * white) >> 8); } swf_SetJPEGBitsLines(out, (U8 **) & js, 1); } } } rfx_free(scanline); swf_SetJPEGBitsFinish(out); jpeg_finish_decompress(&cinfo); fclose(f); return 0; } typedef struct _JPEGFILEMGR { struct jpeg_destination_mgr mgr; JOCTET *buffer; struct jpeg_compress_struct* cinfo; struct jpeg_error_mgr* jerr; FILE*fi; } JPEGFILEMGR; static void file_init_destination(j_compress_ptr cinfo) { JPEGFILEMGR*fmgr = (JPEGFILEMGR*)(cinfo->dest); struct jpeg_destination_mgr*dmgr = &fmgr->mgr; fmgr->buffer = (JOCTET*)rfx_alloc(OUTBUFFER_SIZE); if(!fmgr->buffer) { perror("malloc"); fprintf(stderr, "Out of memory!\n"); exit(1); } dmgr->next_output_byte = fmgr->buffer; dmgr->free_in_buffer = OUTBUFFER_SIZE; } static boolean file_empty_output_buffer(j_compress_ptr cinfo) { JPEGFILEMGR*fmgr = (JPEGFILEMGR*)(cinfo->dest); struct jpeg_destination_mgr*dmgr = &fmgr->mgr; if(fmgr->fi) fwrite(fmgr->buffer, OUTBUFFER_SIZE, 1, fmgr->fi); dmgr->next_output_byte = fmgr->buffer; dmgr->free_in_buffer = OUTBUFFER_SIZE; return 1; } static void file_term_destination(j_compress_ptr cinfo) { JPEGFILEMGR*fmgr = (JPEGFILEMGR*)(cinfo->dest); struct jpeg_destination_mgr*dmgr = &fmgr->mgr; if(fmgr->fi) fwrite(fmgr->buffer, OUTBUFFER_SIZE-dmgr->free_in_buffer, 1, fmgr->fi); rfx_free(fmgr->buffer); fmgr->buffer = 0; dmgr->free_in_buffer = 0; dmgr->next_output_byte = 0; } void swf_SaveJPEG(char*filename, RGBA*pixels, int width, int height, int quality) { JPEGFILEMGR fmgr; struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; unsigned char*data2 = 0; int y; FILE*fi = fopen(filename, "wb"); if(!fi) { char buf[256]; sprintf(buf, "rfxswf: Couldn't create %s", filename); perror(buf); return; } data2 = (unsigned char *)rfx_calloc(width*3); memset(&cinfo, 0, sizeof(cinfo)); memset(&jerr, 0, sizeof(jerr)); memset(&fmgr, 0, sizeof(fmgr)); cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); fmgr.mgr.init_destination = file_init_destination; fmgr.mgr.empty_output_buffer = file_empty_output_buffer; fmgr.mgr.term_destination = file_term_destination; fmgr.fi = fi; fmgr.cinfo = &cinfo; fmgr.jerr = &jerr; cinfo.dest = (struct jpeg_destination_mgr*)&fmgr; // init compression cinfo.image_width = width; cinfo.image_height = height; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); cinfo.dct_method = JDCT_IFAST; jpeg_set_quality(&cinfo,quality,TRUE); //jpeg_write_tables(&cinfo); //jpeg_suppress_tables(&cinfo, TRUE); jpeg_start_compress(&cinfo, FALSE); for(y=0;yclient_data; if (tag->id == ST_DEFINEBITSJPEG3) { swf_SetTagPos(tag, 6); } else { swf_SetTagPos(tag, 2); } cinfo->src->bytes_in_buffer = 0; } static boolean tag_fill_input_buffer(struct jpeg_decompress_struct *cinfo) { TAG *tag = (TAG *) cinfo->client_data; if (tag->pos + 4 <= tag->len && tag->data[tag->pos + 0] == 0xff && tag->data[tag->pos + 1] == 0xd9 && tag->data[tag->pos + 2] == 0xff && tag->data[tag->pos + 3] == 0xd8) { tag->pos += 4; } if (tag->pos >= tag->len) { cinfo->src->next_input_byte = 0; cinfo->src->bytes_in_buffer = 0; return 0; } cinfo->src->next_input_byte = &tag->data[tag->pos]; cinfo->src->bytes_in_buffer = 1; //tag->len - tag->pos; tag->pos += 1; return 1; } static void tag_skip_input_data(struct jpeg_decompress_struct *cinfo, long count) { TAG *tag = (TAG *) cinfo->client_data; cinfo->src->next_input_byte = 0; cinfo->src->bytes_in_buffer = 0; tag->pos += count; } static boolean tag_resync_to_restart(struct jpeg_decompress_struct *cinfo, int desired) { return jpeg_resync_to_restart(cinfo, desired); } static void tag_term_source(struct jpeg_decompress_struct *cinfo) { TAG *tag = (TAG *) cinfo->client_data; } RGBA *swf_JPEG2TagToImage(TAG * tag, int *width, int *height) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; struct jpeg_source_mgr mgr; RGBA *dest; int y; int offset = 0; int oldtaglen = 0; *width = 0; *height = 0; if (tag->id == ST_DEFINEBITSJPEG) { fprintf(stderr, "rfxswf: extracting from definebitsjpeg not yet supported\n"); return 0; } if (tag->id == ST_DEFINEBITSJPEG3) { #ifdef HAVE_ZLIB offset = swf_GetU32(tag); oldtaglen = tag->len; tag->len = offset+6; #else fprintf(stderr, "rfxswf: extracting from definebitsjpeg3 not possible: no zlib\n"); return 0; #endif } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); cinfo.client_data = (void *) tag; cinfo.src = &mgr; cinfo.src->init_source = tag_init_source; cinfo.src->fill_input_buffer = tag_fill_input_buffer; cinfo.src->skip_input_data = tag_skip_input_data; cinfo.src->resync_to_restart = jpeg_resync_to_restart; cinfo.src->term_source = tag_term_source; cinfo.out_color_space = JCS_RGB; jpeg_read_header(&cinfo, TRUE); *width = cinfo.image_width; *height = cinfo.image_height; dest = (RGBA*) rfx_alloc(sizeof(RGBA) * cinfo.image_width * cinfo.image_height); jpeg_start_decompress(&cinfo); for (y = 0; y < cinfo.output_height; y++) { RGBA *line = &dest[y * cinfo.image_width]; U8 *to = (U8 *) line; int x; jpeg_read_scanlines(&cinfo, &to, 1); for (x = cinfo.output_width - 1; x >= 0; --x) { int r = to[x * 3 + 0]; int g = to[x * 3 + 1]; int b = to[x * 3 + 2]; line[x].r = r; line[x].g = g; line[x].b = b; line[x].a = 255; } } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); #ifdef HAVE_ZLIB if(offset) { uLongf datalen = cinfo.output_width*cinfo.output_height; U8* alphadata = (U8*)rfx_alloc(datalen); int error; tag->len = oldtaglen; swf_SetTagPos(tag, 6+offset); error = uncompress(alphadata, &datalen, &tag->data[tag->pos], tag->len - tag->pos); if (error != Z_OK) { fprintf(stderr, "rfxswf: Zlib error %d while extracting definejpeg3\n", error); return 0; } for(y=0;ynext_out = data; zs->avail_out = OUTBUFFER_SIZE; while (1) { int status = deflate(zs, Z_NO_FLUSH); if (status != Z_OK) { fprintf(stderr, "rfxswf: zlib compression error (%i)\n", status); rfx_free(data); return status; } if (zs->next_out != data) { swf_SetBlock(t, data, zs->next_out - data); zs->next_out = data; zs->avail_out = OUTBUFFER_SIZE; } if (zs->avail_in == 0) break; } if (!finish) { rfx_free(data); return 0; } while (1) { int status = deflate(zs, Z_FINISH); if (status != Z_OK && status != Z_STREAM_END) { fprintf(stderr, "rfxswf: zlib compression error (%i)\n", status); rfx_free(data); return status; } if (zs->next_out != data) { swf_SetBlock(t, data, zs->next_out - data); zs->next_out = data; zs->avail_out = OUTBUFFER_SIZE; } if (status == Z_STREAM_END) break; } rfx_free(data); return 0; } int swf_SetLosslessBits(TAG * t, U16 width, U16 height, void *bitmap, U8 bitmap_flags) { int res = 0; int bps; switch (bitmap_flags) { case BMF_8BIT: return swf_SetLosslessBitsIndexed(t, width, height, (U8*)bitmap, NULL, 256); case BMF_16BIT: bps = BYTES_PER_SCANLINE(sizeof(U16) * width); break; case BMF_32BIT: bps = width * 4; break; default: fprintf(stderr, "rfxswf: unknown bitmap type %d\n", bitmap_flags); return -1; } swf_SetU8(t, bitmap_flags); swf_SetU16(t, width); swf_SetU16(t, height); { z_stream zs; memset(&zs, 0x00, sizeof(z_stream)); zs.zalloc = Z_NULL; zs.zfree = Z_NULL; if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) == Z_OK) { zs.avail_in = bps * height; zs.next_in = (Bytef *)bitmap; if (RFXSWF_deflate_wraper(t, &zs, TRUE) < 0) res = -3; deflateEnd(&zs); } else res = -3; // zlib error } return res; } int swf_SetLosslessBitsIndexed(TAG * t, U16 width, U16 height, U8 * bitmap, RGBA * palette, U16 ncolors) { RGBA *pal = palette; int bps = BYTES_PER_SCANLINE(width); int res = 0; if (!pal) // create default palette for grayscale images { int i; pal = (RGBA*)rfx_alloc(256 * sizeof(RGBA)); for (i = 0; i < 256; i++) { pal[i].r = pal[i].g = pal[i].b = i; pal[i].a = 0xff; } ncolors = 256; } if ((ncolors < 2) || (ncolors > 256) || (!t)) { fprintf(stderr, "rfxswf: unsupported number of colors: %d\n", ncolors); return -1; // parameter error } swf_SetU8(t, BMF_8BIT); swf_SetU16(t, width); swf_SetU16(t, height); swf_SetU8(t, ncolors - 1); // number of pal entries { z_stream zs; memset(&zs, 0x00, sizeof(z_stream)); zs.zalloc = Z_NULL; zs.zfree = Z_NULL; if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) == Z_OK) { U8 *zpal; // compress palette if ((zpal = (U8*)rfx_alloc(ncolors * 4))) { U8 *pp = zpal; int i; /* be careful with ST_DEFINEBITSLOSSLESS2, because the Flash player produces great bugs if you use too many alpha colors in your palette. The only sensible result that can be archeived is setting one color to r=0,b=0,g=0,a=0 to make transparent parts in sprites. That's the cause why alpha handling is implemented in lossless routines of rfxswf. Indeed: I haven't understood yet how flash player handles alpha values different from 0 and 0xff in lossless bitmaps... */ if (swf_GetTagID(t) == ST_DEFINEBITSLOSSLESS2) // have alpha channel? { for (i = 0; i < ncolors; i++) { pp[0] = pal[i].r; pp[1] = pal[i].g; pp[2] = pal[i].b; pp[3] = pal[i].a; pp += 4; } zs.avail_in = 4 * ncolors; } else { for (i = 0; i < ncolors; i++) // pack RGBA structures to RGB { pp[0] = pal[i].r; pp[1] = pal[i].g; pp[2] = pal[i].b; pp += 3; } zs.avail_in = 3 * ncolors; } zs.next_in = zpal; if (RFXSWF_deflate_wraper(t, &zs, FALSE) < 0) res = -3; // compress bitmap zs.next_in = bitmap; zs.avail_in = (bps * height * sizeof(U8)); if (RFXSWF_deflate_wraper(t, &zs, TRUE) < 0) res = -3; deflateEnd(&zs); rfx_free(zpal); } else res = -2; // memory error } else res = -3; // zlib error } if (!palette) rfx_free(pal); return res; } int swf_SetLosslessBitsGrayscale(TAG * t, U16 width, U16 height, U8 * bitmap) { return swf_SetLosslessBitsIndexed(t, width, height, bitmap, NULL, 256); } void swf_PreMultiplyAlpha(RGBA*data, int width, int height) { int num = width*height; int t; for(t=0;tid = ST_DEFINEBITSLOSSLESS; } else { tag->id = ST_DEFINEBITSLOSSLESS2; /* FIXME: we're destroying the callers data here */ swf_PreMultiplyAlpha(data, width, height); } num = swf_ImageGetNumberOfPaletteEntries(data, width, height, 0); if(num>1 && num<=256) { RGBA*palette = (RGBA*)malloc(sizeof(RGBA)*num); int width2 = BYTES_PER_SCANLINE(width); U8*data2 = (U8*)malloc(width2*height); int len = width*height; int x,y; int r; swf_ImageGetNumberOfPaletteEntries(data, width, height, palette); for(y=0;yid == ST_DEFINEBITSLOSSLESS2; int t, x, y; RGBA *palette = 0; U8 *data, *data2; RGBA *dest; if (tag->id != ST_DEFINEBITSLOSSLESS && tag->id != ST_DEFINEBITSLOSSLESS2) { fprintf(stderr, "rfxswf: Object %d is not a PNG picture!\n", GET16(tag->data)); return 0; } swf_SetTagPos(tag, 0); id = swf_GetU16(tag); format = swf_GetU8(tag); if (format == 3) bpp = 8; if (format == 4) bpp = 16; if (format == 5) bpp = 32; if (format != 3 && format != 5) { if (format == 4) fprintf(stderr, "rfxswf: Can't handle 16-bit palette images yet (image %d)\n", id); else fprintf(stderr, "rfxswf: Unknown image type %d in image %d\n", format, id); return 0; } *dwidth = width = swf_GetU16(tag); *dheight = height = swf_GetU16(tag); dest = (RGBA*)rfx_alloc(sizeof(RGBA) * width * height); if (format == 3) cols = swf_GetU8(tag) + 1; else cols = 0; data = 0; datalen = (width * height * bpp / 8 + cols * 8); do { if (data) rfx_free(data); datalen += 4096; data = (U8*)rfx_alloc(datalen); error = uncompress(data, &datalen, &tag->data[tag->pos], tag->len - tag->pos); } while (error == Z_BUF_ERROR); if (error != Z_OK) { fprintf(stderr, "rfxswf: Zlib error %d (image %d)\n", error, id); return 0; } pos = 0; if (cols) { palette = (RGBA *) rfx_alloc(cols * sizeof(RGBA)); for (t = 0; t < cols; t++) { palette[t].r = data[pos++]; palette[t].g = data[pos++]; palette[t].b = data[pos++]; if (alpha) { palette[t].a = data[pos++]; } else { palette[t].a = 255; } } } for (y = 0; y < height; y++) { int srcwidth = width * (bpp / 8); if (bpp == 32) { if (!alpha) { // 32 bit to 24 bit "conversion" for (x = 0; x < width; x++) { dest[pos2].r = data[pos + 1]; dest[pos2].g = data[pos + 2]; dest[pos2].b = data[pos + 3]; dest[pos2].a = 255; pos2++; pos += 4; //ignore padding byte } } else { for (x = 0; x < width; x++) { /* remove premultiplication */ int alpha = data[pos+0]; if(alpha) alpha = 0xff0000/alpha; dest[pos2].r = (data[pos + 1]*alpha)>>16; dest[pos2].g = (data[pos + 2]*alpha)>>16; dest[pos2].b = (data[pos + 3]*alpha)>>16; dest[pos2].a = data[pos + 0]; //alpha pos2++; pos += 4; } } } else { for (x = 0; x < srcwidth; x++) { dest[pos2] = palette[data[pos++]]; pos2++; } } pos += ((srcwidth + 3) & ~3) - srcwidth; //align } if (palette) rfx_free(palette); rfx_free(data); return dest; } #endif // HAVE_ZLIB #if defined(HAVE_ZLIB) && defined(HAVE_JPEGLIB) /* expects bitmap to be non-premultiplied */ int swf_SetJPEGBits3(TAG * tag, U16 width, U16 height, RGBA * bitmap, int quality) { JPEGBITS *jpeg; int y; int pos; int res = 0; U8 *data; z_stream zs; pos = tag->len; swf_SetU32(tag, 0); //placeholder jpeg = swf_SetJPEGBitsStart(tag, width, height, quality); U8 *scanline = (U8*)rfx_alloc(3 * width); for (y = 0; y < height; y++) { int x, p = 0; for (x = 0; x < width; x++) { //int ia = bitmap[width*y+x].a; //if(ia) { // /* remove premultiplication */ // ia = 0xff0000/ia; //} //scanline[p++] = (bitmap[width * y + x].r*ia)>>16; //scanline[p++] = (bitmap[width * y + x].g*ia)>>16; //scanline[p++] = (bitmap[width * y + x].b*ia)>>16; scanline[p++] = bitmap[width * y + x].r; scanline[p++] = bitmap[width * y + x].g; scanline[p++] = bitmap[width * y + x].b; } swf_SetJPEGBitsLine(jpeg, scanline); } rfx_free(scanline); swf_SetJPEGBitsFinish(jpeg); PUT32(&tag->data[pos], tag->len - pos - 4); data = (U8*)rfx_alloc(OUTBUFFER_SIZE); memset(&zs, 0x00, sizeof(z_stream)); if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) != Z_OK) { fprintf(stderr, "rfxswf: zlib compression failed"); return -3; } zs.next_out = data; zs.avail_out = OUTBUFFER_SIZE; scanline = (U8*)rfx_alloc(width); for (y = 0; y < height; y++) { int x, p = 0; for (x = 0; x < width; x++) { scanline[p++] = bitmap[width * y + x].a; } zs.avail_in = width; zs.next_in = scanline; while (1) { if (deflate(&zs, Z_NO_FLUSH) != Z_OK) { fprintf(stderr, "rfxswf: zlib compression failed"); return -4; } if (zs.next_out != data) { swf_SetBlock(tag, data, zs.next_out - data); zs.next_out = data; zs.avail_out = OUTBUFFER_SIZE; } if (!zs.avail_in) { break; } } } rfx_free(scanline); while (1) { int ret = deflate(&zs, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) { fprintf(stderr, "rfxswf: zlib compression failed"); return -5; } if (zs.next_out != data) { swf_SetBlock(tag, data, zs.next_out - data); zs.next_out = data; zs.avail_out = OUTBUFFER_SIZE; } if (ret == Z_STREAM_END) { break; } } deflateEnd(&zs); rfx_free(data); return 0; } #else int swf_SetJPEGBits3(TAG * tag, U16 width, U16 height, RGBA * bitmap, int quality) { fprintf(stderr, "Error: swftools compiled without jpeglib\n"); return -1; } #endif /* expects mem to be non-premultiplied */ TAG* swf_AddImage(TAG*tag, int bitid, RGBA*mem, int width, int height, int quality) { TAG *tag1 = 0, *tag2 = 0; int has_alpha = swf_ImageHasAlpha(mem,width,height); /* try lossless image */ #ifdef NO_LOSSLESS tag1 = swf_InsertTag(0, /*ST_DEFINEBITSLOSSLESS1/2*/0); tag1->len = 0x7fffffff; #else tag1 = swf_InsertTag(0, /*ST_DEFINEBITSLOSSLESS1/2*/0); swf_SetU16(tag1, bitid); swf_SetLosslessImage(tag1, mem, width, height); #endif #if defined(HAVE_JPEGLIB) /* try jpeg image. Notice that if (and only if) we tried the lossless compression above, the data will now be premultiplied with alpha. */ if(has_alpha) { tag2 = swf_InsertTag(0, ST_DEFINEBITSJPEG3); swf_SetU16(tag2, bitid); swf_SetJPEGBits3(tag2, width, height, mem, quality); } else { tag2 = swf_InsertTag(0, ST_DEFINEBITSJPEG2); swf_SetU16(tag2, bitid); swf_SetJPEGBits2(tag2, width, height, mem, quality); } #endif if(quality>100 || !tag2 || (tag1 && tag1->len < tag2->len)) { /* use the zlib version- it's smaller */ tag1->prev = tag; if(tag) tag->next = tag1; tag = tag1; swf_DeleteTag(0, tag2); } else { /* use the jpeg version- it's smaller */ tag2->prev = tag; if(tag) tag->next = tag2; tag = tag2; swf_DeleteTag(0, tag1); } return tag; } RGBA *swf_ExtractImage(TAG * tag, int *dwidth, int *dheight) { RGBA *img; swf_SetTagPos(tag, 2); // id is 2 bytes if (tag->id == ST_DEFINEBITSJPEG || tag->id == ST_DEFINEBITSJPEG2 || tag->id == ST_DEFINEBITSJPEG3) { #ifdef HAVE_JPEGLIB return swf_JPEG2TagToImage(tag, dwidth, dheight); #else fprintf(stderr, "rfxswf: Error: No JPEG library compiled in"); return 0; #endif } if (tag->id == ST_DEFINEBITSLOSSLESS || tag->id == ST_DEFINEBITSLOSSLESS2) { #ifdef HAVE_ZLIB return swf_DefineLosslessBitsTagToImage(tag, dwidth, dheight); #else fprintf(stderr, "rfxswf: Error: No JPEG library compiled in"); return 0; #endif } fprintf(stderr, "rfxswf: Error: Invalid tag (%d, %s)", tag->id, swf_TagGetName(tag)); return 0; } #undef OUTBUFFER_SIZE void swf_RemoveJPEGTables(SWF * swf) { TAG *tag = swf->firstTag; TAG *tables_tag = 0; while (tag) { if (tag->id == ST_JPEGTABLES) { tables_tag = tag; } tag = tag->next; } if (!tables_tag) return; tag = swf->firstTag; while (tag) { if (tag->id == ST_DEFINEBITSJPEG) { int len = tag->len; void *data = rfx_alloc(len); swf_GetBlock(tag, (U8*)data, tag->len); swf_ResetTag(tag, ST_DEFINEBITSJPEG2); swf_SetBlock(tag, &((U8*)data)[0], 2); //id swf_SetBlock(tag, tables_tag->data, tables_tag->len); swf_SetBlock(tag, &((U8*)data)[2], len-2); free(data); } tag = tag->next; } if (swf->firstTag == tables_tag) swf->firstTag = tables_tag->next; swf_DeleteTag(swf, tables_tag); } swftools_0.9.2+git20130725.orig/lib/modules/swffont.c0000644000175000017500000003744212216332640021405 0ustar gawaingawain/* swffont.c Functions for loading external fonts. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2003, 2004 Matthias Kramm 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 */ #include #include #include "../rfxswf.h" static int loadfont_scale = 4; static int skip_unused = 1; static int full_unicode = 0; void swf_SetLoadFontParameters(int _scale, int _skip_unused, int _full_unicode) { if(_scale) loadfont_scale = _scale; skip_unused = _skip_unused; full_unicode = _full_unicode; } #ifdef HAVE_FREETYPE #ifdef HAVE_FT2BUILD_H #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_SIZES_H #include FT_SFNT_NAMES_H #include FT_TRUETYPE_IDS_H #include FT_OUTLINE_H #else #include #include #include #include #include #include #endif /* Setting subpixels to 64 also means that the "point size" of the font outlines will be 64. So the font, when rendered at original size (i.e., the swf fontsize is 1024) will have the same size as if it was rendered at 64pt */ #define FT_SCALE 1 #define FT_SUBPIXELS 64 static int ft_move_to(const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; draw->moveTo(draw, &to); return 0; } static int ft_line_to(const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; draw->lineTo(draw, &to); return 0; } static int ft_conic_to(const FT_Vector* _c, const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT c,to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; c.x = _c->x*FT_SCALE/(float)FT_SUBPIXELS; c.y = -_c->y*FT_SCALE/(float)FT_SUBPIXELS; draw_conicTo(draw, &c, &to); return 0; } static int ft_cubic_to(const FT_Vector* _c1, const FT_Vector* _c2, const FT_Vector* _to, void* user) { drawer_t* draw = (drawer_t*)user; FPOINT c1,c2,to; to.x = _to->x*FT_SCALE/(float)FT_SUBPIXELS; to.y = -_to->y*FT_SCALE/(float)FT_SUBPIXELS; c1.x = _c1->x*FT_SCALE/(float)FT_SUBPIXELS; c1.y = -_c1->y*FT_SCALE/(float)FT_SUBPIXELS; c2.x = _c2->x*FT_SCALE/(float)FT_SUBPIXELS; c2.y = -_c2->y*FT_SCALE/(float)FT_SUBPIXELS; draw_cubicTo(draw, &c1, &c2, &to); return 0; } static FT_Outline_Funcs outline_functions = { ft_move_to, ft_line_to, ft_conic_to, ft_cubic_to, 0,0 }; static FT_Library ftlibrary = 0; SWFFONT* swf_LoadTrueTypeFont(const char*filename, char flashtype) { FT_Face face; FT_Error error; const char* name = 0; FT_ULong charcode; FT_UInt gindex; SWFFONT* font; int t; int*glyph2glyph; int max_unicode = 0; int charmap = -1; if(ftlibrary == 0) { if(FT_Init_FreeType(&ftlibrary)) { fprintf(stderr, "Couldn't init freetype library!\n"); exit(1); } } error = FT_New_Face(ftlibrary, filename, 0, &face); if(error || !face) { fprintf(stderr, "Couldn't load file %s- not a TTF file?\n", filename); return 0; } int scale = flashtype?20:1; FT_Set_Pixel_Sizes (face, 16*loadfont_scale*scale, 16*loadfont_scale*scale); if(face->num_glyphs <= 0) { fprintf(stderr, "File %s contains %d glyphs\n", filename, (int)face->num_glyphs); return 0; } font = (SWFFONT*)rfx_calloc(sizeof(SWFFONT)); font->id = -1; font->version = flashtype?3:2; font->layout = (SWFLAYOUT*)rfx_calloc(sizeof(SWFLAYOUT)); font->layout->bounds = (SRECT*)rfx_calloc(face->num_glyphs*sizeof(SRECT)); font->style = ((face->style_flags&FT_STYLE_FLAG_ITALIC)?FONT_STYLE_ITALIC:0) |((face->style_flags&FT_STYLE_FLAG_BOLD)?FONT_STYLE_BOLD:0); font->encoding = FONT_ENCODING_UNICODE; font->glyph2ascii = (U16*)rfx_calloc(face->num_glyphs*sizeof(U16)); font->maxascii = 0; font->glyph = (SWFGLYPH*)rfx_calloc(face->num_glyphs*sizeof(SWFGLYPH)); if(FT_HAS_GLYPH_NAMES(face)) { font->glyphnames = (char**)rfx_calloc(face->num_glyphs*sizeof(char*)); } font->layout->kerningcount = 0; name = face->family_name; if(!(name && *name)) name = FT_Get_Postscript_Name(face); if(name && *name) font->name = (U8*)strdup(name); while(1) { /* // Map Glyphs to Unicode, version 1 (quick and dirty): int t; for(t=0;t<65536;t++) { int index = FT_Get_Char_Index(face, t); if(index>=0 && indexnum_glyphs) { if(font->glyph2ascii[index]<0) font->glyph2ascii[index] = t; } }*/ // Map Glyphs to Unicode, version 2 (much nicer): // (The third way would be the AGL algorithm, as proposed // by Werner Lemberg on freetype@freetype.org) charcode = FT_Get_First_Char(face, &gindex); while(gindex != 0) { if(gindex >= 0 && gindexnum_glyphs) { if(!font->glyph2ascii[gindex]) { font->glyph2ascii[gindex] = charcode; if(charcode + 1 > font->maxascii) { font->maxascii = charcode + 1; } } } charcode = FT_Get_Next_Char(face, charcode, &gindex); } /* if we didn't find a single encoding character, try the font's charmaps instead. That usually means that the encoding is no longer unicode. TODO: find a way to convert the encoding to unicode */ if(font->maxascii == 0 && charmap < face->num_charmaps - 1) { charmap++; FT_Set_Charmap(face, face->charmaps[charmap]); font->encoding = 0;//anything but unicode FIXME } else break; } if(full_unicode) font->maxascii = 65535; font->ascii2glyph = (int*)rfx_calloc(font->maxascii*sizeof(int)); for(t=0;tmaxascii;t++) { int g = FT_Get_Char_Index(face, t); if(!g || g>=face->num_glyphs) g = -1; font->ascii2glyph[t] = g; if(g>=0) { max_unicode = t+1; if(!font->glyph2ascii[g]) { font->glyph2ascii[g] = t; } } } font->maxascii = max_unicode; font->numchars = 0; glyph2glyph = (int*)rfx_calloc(face->num_glyphs*sizeof(int)); SRECT fontbbox = {0,0,0,0}; for(t=0; t < face->num_glyphs; t++) { FT_Glyph glyph; FT_BBox bbox; char name[128]; drawer_t draw; char hasname = 0; name[0]=0; if(FT_HAS_GLYPH_NAMES(face)) { error = FT_Get_Glyph_Name(face, t, name, 127); if(!error && name[0] && !strstr(name, "notdef")) { font->glyphnames[font->numchars] = strdup(name); hasname = 1; } } if(!font->glyph2ascii[t] && !hasname && skip_unused) { continue; } error = FT_Load_Glyph(face, t, FT_LOAD_NO_BITMAP); if(error) { //tends to happen with some pdfs fprintf(stderr, "Warning: Glyph %d has return code %d\n", t, error); glyph=0; if(skip_unused) continue; } else { error = FT_Get_Glyph(face->glyph, &glyph); if(error) { fprintf(stderr, "Couldn't get glyph %d, error:%d\n", t, error); glyph=0; if(skip_unused) continue; } } if(glyph) FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); else memset(&bbox, 0, sizeof(bbox)); bbox.yMin = -bbox.yMin; bbox.yMax = -bbox.yMax; if(bbox.xMax < bbox.xMin) { // swap bbox.xMax ^= bbox.xMin; bbox.xMin ^= bbox.xMax; bbox.xMax ^= bbox.xMin; } if(bbox.yMax < bbox.yMin) { // swap bbox.yMax ^= bbox.yMin; bbox.yMin ^= bbox.yMax; bbox.yMax ^= bbox.yMin; } swf_Shape01DrawerInit(&draw, 0); //error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &draw); if(glyph) error = FT_Outline_Decompose(&face->glyph->outline, &outline_functions, &draw); else error = 0; draw.finish(&draw); if(error) { fprintf(stderr, "Couldn't decompose glyph %d\n", t); draw.dealloc(&draw); continue; } #if 0 if(bbox.xMin > 0) { font->glyph[font->numchars].advance = (bbox.xMax*20*FT_SCALE)/FT_SUBPIXELS; } else { font->glyph[font->numchars].advance = ((bbox.xMax - bbox.xMin)*20*FT_SCALE)/FT_SUBPIXELS; } #else if(glyph) font->glyph[font->numchars].advance = glyph->advance.x*20/65536; else font->glyph[font->numchars].advance = 0; #endif SRECT b = swf_ShapeDrawerGetBBox(&draw); //font->layout->bounds[font->numchars].xmin = (bbox.xMin*FT_SCALE*20)/FT_SUBPIXELS; //font->layout->bounds[font->numchars].ymin = (bbox.yMin*FT_SCALE*20)/FT_SUBPIXELS; //font->layout->bounds[font->numchars].xmax = (bbox.xMax*FT_SCALE*20)/FT_SUBPIXELS; //font->layout->bounds[font->numchars].ymax = (bbox.yMax*FT_SCALE*20)/FT_SUBPIXELS; font->layout->bounds[font->numchars] = b; font->glyph[font->numchars].shape = swf_ShapeDrawerToShape(&draw); swf_ExpandRect2(&fontbbox, &font->layout->bounds[font->numchars]); draw.dealloc(&draw); if(glyph) FT_Done_Glyph(glyph); font->glyph2ascii[font->numchars] = font->glyph2ascii[t]; glyph2glyph[t] = font->numchars; font->numchars++; } //font->layout->ascent = abs(face->ascender)*FT_SCALE*loadfont_scale*20/FT_SUBPIXELS/2; //face->bbox.xMin; //font->layout->descent = abs(face->descender)*FT_SCALE*loadfont_scale*20/FT_SUBPIXELS/2; //face->bbox.xMax; //font->layout->leading = font->layout->ascent + font->layout->descent; if(-fontbbox.ymin < 0) font->layout->ascent = 0; else font->layout->ascent = -fontbbox.ymin; if(fontbbox.ymax < 0) font->layout->descent = 0; else font->layout->descent = fontbbox.ymax; int leading = fontbbox.ymax - fontbbox.ymin; font->layout->leading = leading>0x7fff?0x7fff:leading; /* notice: if skip_unused is true, font->glyph2ascii, font->glyphnames and font->layout->bounds will have more memory allocated than just font->numchars, but only the first font->numchars are used/valid */ for(t=0;tmaxascii;t++) { if(font->ascii2glyph[t]>=0) { font->ascii2glyph[t] = glyph2glyph[font->ascii2glyph[t]]; } } rfx_free(glyph2glyph); FT_Done_Face(face); FT_Done_FreeType(ftlibrary);ftlibrary=0; return font; } #else //HAVE_FREETYPE SWFFONT* swf_LoadTrueTypeFont(const char*filename, char flashtype) { fprintf(stderr, "Warning: no freetype library- not able to load %s\n", filename); return 0; } #endif #ifdef HAVE_T1LIB #include static int t1lib_initialized = 0; static int counter = 0; SWFFONT* swf_LoadT1Font(const char*filename) { SWFFONT * font; int nr; float angle,underline; char*fontname,*fullname,*familyname; BBox bbox; int s,num; char**charnames; char**charname; char*encoding[256]; int c; int t; if(!t1lib_initialized) { T1_SetBitmapPad(16); if ((T1_InitLib(NO_LOGFILE)==NULL)){ fprintf(stderr, "Initialization of t1lib failed\n"); return 0; } t1lib_initialized = 1; } nr = T1_AddFont(filename); T1_LoadFont(nr); charnames = T1_GetAllCharNames(nr); if(!charnames) { fprintf(stderr, "No Charnames record- not a Type1 Font?\n"); return 0; } angle = T1_GetItalicAngle(nr); fontname = T1_GetFontName(nr); fullname = T1_GetFullName(nr); familyname = T1_GetFamilyName(nr); underline = T1_GetUnderlinePosition(nr); bbox = T1_GetFontBBox(nr); font = (SWFFONT*)rfx_calloc(sizeof(SWFFONT)); font->version = 2; if(fontname) font->name = (U8*)strdup(fontname); else font->name = 0; font->layout = (SWFLAYOUT*)rfx_calloc(sizeof(SWFLAYOUT)); num = 0; charname = charnames; while(*charname) { charname++; if(num<256) { if(*charname) encoding[num] = strdup(*charname); else encoding[num] = strdup(".notdef"); } num++; } for(t=num;t<256;t++) encoding[t] = strdup(".notdef"); //T1_ReencodeFont(nr, encoding); font->maxascii = num; font->numchars = num; font->style = (/*bold*/0?FONT_STYLE_BOLD:0) + (angle>0.05?FONT_STYLE_ITALIC:0); font->glyph = (SWFGLYPH*)rfx_calloc(num*sizeof(SWFGLYPH)); font->glyph2ascii = (U16*)rfx_calloc(num*sizeof(U16)); font->ascii2glyph = (int*)rfx_calloc(font->maxascii*sizeof(int)); font->layout->ascent = (U16)(underline - bbox.lly); font->layout->descent = (U16)(bbox.ury - underline); font->layout->leading = (U16)(font->layout->ascent - font->layout->descent - (bbox.lly - bbox.ury)); font->layout->bounds = (SRECT*)rfx_calloc(sizeof(SRECT)*num); font->layout->kerningcount = 0; font->layout->kerning = 0; font->glyphnames = rfx_calloc(num*sizeof(char*)); num = 0; charname = charnames; for(c=0;cnumchars;c++) { drawer_t draw; SRECT bbox; T1_OUTLINE * outline; FPOINT pos,last; int firstx; outline = T1_GetCharOutline(nr, c, 100.0, 0); firstx = outline->dest.x/0xffff; pos.x = 0; pos.y = 0; last = pos; font->glyphnames[c] = strdup(*charname); if(cmaxascii) font->ascii2glyph[c] = c; font->glyph2ascii[c] = c; swf_Shape01DrawerInit(&draw, 0); while(outline) { pos.x += (outline->dest.x/(float)0xffff); pos.y += (outline->dest.y/(float)0xffff); if(outline->type == T1_PATHTYPE_MOVE) { draw.moveTo(&draw,&pos); } else if(outline->type == T1_PATHTYPE_LINE) { draw.lineTo(&draw,&pos); } else if(outline->type == T1_PATHTYPE_BEZIER) { T1_BEZIERSEGMENT*o2 = (T1_BEZIERSEGMENT*)outline; FPOINT b,c; b.x = o2->B.x/(float)0xffff+last.x; b.y = o2->B.y/(float)0xffff+last.y; c.x = o2->C.x/(float)0xffff+last.x; c.y = o2->C.y/(float)0xffff+last.y; draw_cubicTo(&draw,&b,&c,&pos); } else { fprintf(stderr, "loadT1Font: unknown outline type:%d\n", outline->type); } last = pos; outline = outline->link; } draw.finish(&draw); font->glyph[c].shape = swf_ShapeDrawerToShape(&draw); bbox = swf_ShapeDrawerGetBBox(&draw); draw.dealloc(&draw); font->layout->bounds[c] = bbox; font->glyph[c].advance = bbox.xmax; if(!font->glyph[c].advance) { font->glyph[c].advance = firstx; } charname++; } T1_DeleteFont(nr); for(t=0;t<256;t++) rfx_free(encoding[t]); return font; } #else SWFFONT* swf_LoadT1Font(const char*filename) { fprintf(stderr, "Warning: no t1lib- not able to load %s\n", filename); return 0; } #endif SWFFONT* swf_DummyFont() { SWFFONT*font = (SWFFONT*)rfx_calloc(sizeof(SWFFONT)); return font; } static int isSWF(const char*filename) { FILE*fi = fopen(filename, "rb"); char a[8]; if(!fi) { perror(filename); return -1; } memset(a, 0, sizeof(a)); fread(a, 4, 1, fi); fclose(fi); if(!strncmp(a, "FWS", 3) || !strncmp(a, "CWS", 3)) { return 1; } return 0; } SWFFONT* swf_LoadFont(const char*filename, char flashtype) { int is_swf; if(filename == 0) return swf_DummyFont(); is_swf = isSWF(filename); if(is_swf<0) return 0; if(is_swf) { SWFFONT*font = swf_ReadFont(filename); if(flashtype && font->version==2) fprintf(stderr, "Warning: Can't load font v2 file as flashtype (%s)\n", filename); return font; } #if defined(HAVE_FREETYPE) return swf_LoadTrueTypeFont(filename, flashtype); #elif defined(HAVE_T1LIB) return swf_LoadT1Font(filename); #else fprintf(stderr, "Error: Neither T1lib nor FreeType support compiled in. Could not load %s\n", filename); return 0; #endif } swftools_0.9.2+git20130725.orig/lib/modules/swfsound.c0000644000175000017500000002364412216332640021566 0ustar gawaingawain/* swfaction.c SWF Sound handling routines Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001, 2002 Matthias Kramm 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 */ #ifndef NO_MP3 #include "../rfxswf.h" #ifdef BLADEENC #define HAVE_SOUND CodecInitOut * init = 0; void swf_SetSoundStreamHead(TAG*tag, U16 avgnumsamples) { U8 playbackrate = 3; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 playbacksize = 1; // 0 = 8 bit, 1 = 16 bit U8 playbacktype = 0; // 0 = mono, 1 = stereo U8 compression = 2; // 0 = raw, 1 = ADPCM, 2 = mp3, 3 = raw le, 6 = nellymoser U8 rate = 3; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 size = 1; // 0 = 8 bit, 1 = 16 bit U8 type = 0; // 0 = mono, 1 = stereo CodecInitIn params; memset(¶ms, 0, sizeof(params)); params.frequency = 44100; //48000, 44100 or 32000 params.mode = 3; //0 = Stereo, 2 = Dual Channel, 3 = Mono params.emphasis = 0; //0 = None, 1 = 50/15 microsec, 3 = CCITT J.17 params.bitrate = 128; //default is 128 (64 for mono) init = codecInit(¶ms); swf_SetU8(tag,(playbackrate<<2)|(playbacksize<<1)|playbacktype); swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); swf_SetU16(tag,avgnumsamples); printf("numSamples:%d\n",init->nSamples); printf("bufferSize:%d\n",init->bufferSize); } void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int numsamples, char first) { char*buf; int len = 0; buf = rfx_alloc(init->bufferSize); if(!buf) return; len = codecEncodeChunk (numsamples, samples, buf); len += codecFlush (&buf[len]); len += codecExit (&buf[len]); if(first) { swf_SetU16(tag, numsamples); // number of samples swf_SetU16(tag, 0); // seek } swf_SetBlock(tag, buf, len); rfx_free(buf); } #endif void swf_SetSoundDefineRaw(TAG*tag, S16*samples, int numsamples) { swf_SetU8(tag,(/*compression*/0<<4)|(/*rate*/3<<2)|(/*size*/1<<1)|/*mono*/0); swf_SetU32(tag, numsamples); // 44100 -> 11025 swf_SetBlock(tag, (U8*)samples, numsamples*2); } /* TODO: find a better way to set these from the outside */ int swf_mp3_in_samplerate = 44100; int swf_mp3_out_samplerate = 11025; int swf_mp3_channels = 1; int swf_mp3_bitrate = 32; #ifdef HAVE_LAME #define HAVE_SOUND #include #include static lame_global_flags*lame_flags; void null_errorf(const char *format, va_list ap) { } static void initlame() { unsigned char buf[4096]; int bufsize = 1152*2; lame_flags = lame_init(); lame_set_in_samplerate(lame_flags, swf_mp3_in_samplerate); lame_set_num_channels(lame_flags, swf_mp3_channels); lame_set_scale(lame_flags, 0); // MPEG1 32, 44.1, 48khz // MPEG2 16, 22.05, 24 // MPEG2.5 8, 11.025, 12 lame_set_out_samplerate(lame_flags, swf_mp3_out_samplerate); lame_set_quality(lame_flags, 0); lame_set_mode(lame_flags, MONO/*3*/); lame_set_brate(lame_flags, swf_mp3_bitrate); //lame_set_compression_ratio(lame_flags, 11.025); lame_set_bWriteVbrTag(lame_flags, 0); lame_init_params(lame_flags); lame_init_bitstream(lame_flags); lame_set_errorf(lame_flags, null_errorf); /* The first two flush calls to lame always fail, for some reason. Do them here where they cause no damage. */ lame_encode_flush_nogap(lame_flags, buf, bufsize); //printf("init:flush_nogap():%d\n", len); lame_encode_flush(lame_flags, buf, bufsize); //printf("init:flush():%d\n", len); lame_set_errorf(lame_flags, 0); } void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples) { int len; U8 playbackrate = 1; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 playbacksize = 1; // 0 = 8 bit, 1 = 16 bit U8 playbacktype = 0; // 0 = mono, 1 = stereo U8 compression = 2; // 0 = raw, 1 = ADPCM, 2 = mp3, 3 = raw le, 6 = nellymoser U8 rate = 1; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 size = 1; // 0 = 8 bit, 1 = 16 bit U8 type = 0; // 0 = mono, 1 = stereo if(swf_mp3_out_samplerate == 5512) playbackrate = rate = 0; // lame doesn't support this else if(swf_mp3_out_samplerate == 11025) playbackrate = rate = 1; else if(swf_mp3_out_samplerate == 22050) playbackrate = rate = 2; else if(swf_mp3_out_samplerate == 44100) playbackrate = rate = 3; else fprintf(stderr, "Invalid samplerate: %d\n", swf_mp3_out_samplerate); initlame(); swf_SetU8(tag,(playbackrate<<2)|(playbacksize<<1)|playbacktype); swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); swf_SetU16(tag,avgnumsamples); } void swf_SetSoundStreamBlock(TAG*tag, S16*samples, int seek, char first) { char*buf; int len = 0; int bufsize = 16384; int numsamples = (int)(((swf_mp3_out_samplerate > 22050) ? 1152 : 576) * ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)); int fs = 0; buf = rfx_alloc(bufsize); if(!buf) return; if(first) { fs = lame_get_framesize(lame_flags); swf_SetU16(tag, fs * first); // samples per mp3 frame swf_SetU16(tag, seek); // seek } len += lame_encode_buffer(lame_flags, samples, samples, numsamples, &buf[len], bufsize-len); len += lame_encode_flush_nogap(lame_flags, &buf[len], bufsize-len); swf_SetBlock(tag, buf, len); if(len == 0) { fprintf(stderr, "error: mp3 empty block, %d samples, first:%d, framesize:%d\n", numsamples, first, fs); }/* else { fprintf(stderr, "ok: mp3 nonempty block, %d samples, first:%d, framesize:%d\n", numsamples, first, fs); }*/ rfx_free(buf); } void swf_SetSoundStreamEnd(TAG*tag) { lame_close (lame_flags); } void swf_SetSoundDefine(TAG*tag, S16*samples, int num) { char*buf; int oldlen=0,len = 0; int bufsize = 16384; int blocksize = (int)(((swf_mp3_out_samplerate > 22050) ? 1152 : 576) * ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)); int t; int blocks; U8 compression = 2; // 0 = raw, 1 = ADPCM, 2 = mp3, 3 = raw le, 6 = nellymoser U8 rate = 1; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 size = 1; // 0 = 8 bit, 1 = 16 bit U8 type = 0; // 0 = mono, 1 = stereo if(swf_mp3_out_samplerate == 5512) rate = 0; else if(swf_mp3_out_samplerate == 11025) rate = 1; else if(swf_mp3_out_samplerate == 22050) rate = 2; else if(swf_mp3_out_samplerate == 44100) rate = 3; else fprintf(stderr, "Invalid samplerate: %d\n", swf_mp3_out_samplerate); blocks = num / (blocksize); swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); swf_SetU32(tag, (int)(tag,blocks*blocksize / ((double)swf_mp3_in_samplerate/swf_mp3_out_samplerate)) // account for resampling ); buf = rfx_alloc(bufsize); if(!buf) return; initlame(); swf_SetU16(tag, 0); //delayseek for(t=0;tstop?SOUNDINFO_STOP:0) |(info->nomultiple?SOUNDINFO_NOMULTIPLE:0) |(info->envelopes?SOUNDINFO_HASENVELOPE:0) |(info->loops?SOUNDINFO_HASLOOPS:0) |(info->outpoint?SOUNDINFO_HASOUTPOINT:0) |(info->inpoint?SOUNDINFO_HASINPOINT:0); swf_SetU8(tag, flags); if(flags&SOUNDINFO_HASINPOINT) swf_SetU32(tag, info->inpoint); if(flags&SOUNDINFO_HASOUTPOINT) swf_SetU32(tag, info->outpoint); if(flags&SOUNDINFO_HASLOOPS) swf_SetU16(tag, info->loops); if(flags&SOUNDINFO_HASENVELOPE) { int t; swf_SetU8(tag, info->envelopes); for(t=0;tenvelopes;t++) { swf_SetU32(tag, info->pos[t]); swf_SetU16(tag, info->left[t]); swf_SetU16(tag, info->right[t]); } } } void swf_SetSoundDefineMP3(TAG*tag, U8* data, unsigned length, unsigned SampRate, unsigned Channels, unsigned NumFrames) { U8 compression = 2; // 0 = raw, 1 = ADPCM, 2 = mp3, 3 = raw le, 6 = nellymoser U8 rate; // 0 = 5.5 Khz, 1 = 11 Khz, 2 = 22 Khz, 3 = 44 Khz U8 size = 1; // 0 = 8 bit, 1 = 16 bit U8 type = Channels==2; // 0=mono, 1=stereo rate = (SampRate >= 40000) ? 3 : (SampRate >= 19000) ? 2 : (SampRate >= 8000) ? 1 : 0; swf_SetU8(tag,(compression<<4)|(rate<<2)|(size<<1)|type); swf_SetU32(tag, NumFrames * 576); swf_SetU16(tag, 0); //delayseek swf_SetBlock(tag, data, length); } swftools_0.9.2+git20130725.orig/lib/modules/swfdraw.c0000644000175000017500000001543112216332640021366 0ustar gawaingawain// swfdraw.c #include "../rfxswf.h" typedef struct _SWFSHAPEDRAWER { SHAPE*shape; TAG*tag; int tagfree; SCOORD firstx; SCOORD firsty; SCOORD lastx; SCOORD lasty; SRECT bbox; char isfinished; } SWFSHAPEDRAWER; static void swf_ShapeDrawerSetLineStyle(drawer_t*draw, void*style); static void swf_ShapeDrawerSetFillStyle(drawer_t*draw, void*style); static void swf_ShapeDrawerMoveTo(drawer_t*draw, FPOINT * to); static void swf_ShapeDrawerLineTo(drawer_t*draw, FPOINT * to); static void swf_ShapeDrawerSplineTo(drawer_t*draw, FPOINT * c1, FPOINT* to); static void swf_ShapeDrawerFinish(drawer_t*draw); static void swf_ShapeDrawerClear(drawer_t*draw); static void swf_ShapeDrawerInit(drawer_t*draw, TAG*tag, int fillstylebits, int linestylebits) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)rfx_calloc(sizeof(SWFSHAPEDRAWER)); draw->internal = sdraw; draw->setLineStyle = swf_ShapeDrawerSetLineStyle; draw->setFillStyle = swf_ShapeDrawerSetFillStyle; draw->moveTo = swf_ShapeDrawerMoveTo; draw->lineTo = swf_ShapeDrawerLineTo; draw->splineTo = swf_ShapeDrawerSplineTo; draw->finish = swf_ShapeDrawerFinish; draw->dealloc = swf_ShapeDrawerClear; sdraw->tagfree = 0; if(tag == 0) { tag = swf_InsertTag(0, ST_DEFINESHAPE); sdraw->tagfree = 1; } sdraw->tag = tag; swf_ShapeNew(&sdraw->shape); draw->pos.x = 0; draw->pos.y = 0; swf_SetU8(sdraw->tag,0); sdraw->shape->bits.fill = fillstylebits; sdraw->shape->bits.line = linestylebits; sdraw->bbox.xmin = sdraw->bbox.ymin = SCOORD_MAX; sdraw->bbox.xmax = sdraw->bbox.ymax = SCOORD_MIN; sdraw->isfinished = 0; swf_ShapeSetStyle(sdraw->tag,sdraw->shape,linestylebits?1:0,fillstylebits?1:0,0/*?*/); } void swf_Shape10DrawerInit(drawer_t*draw, TAG*tag) { swf_ShapeDrawerInit(draw, tag, 0, 1); } void swf_Shape01DrawerInit(drawer_t*draw, TAG*tag) { swf_ShapeDrawerInit(draw, tag, 1, 0); } void swf_Shape11DrawerInit(drawer_t*draw, TAG*tag) { swf_ShapeDrawerInit(draw, tag, 1, 1); } static void swf_ShapeDrawerSetLineStyle(drawer_t*draw, void*style) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; } static void swf_ShapeDrawerSetFillStyle(drawer_t*draw, void*style) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; } static void fixEndPoint(drawer_t*draw) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; if( sdraw->firstx != sdraw->lastx || sdraw->firsty != sdraw->lasty) { /* fix non-closing shapes */ FPOINT to; to.x = sdraw->firstx/20.0; to.y = sdraw->firsty/20.0; if(sdraw->shape->bits.fill) // do this only if the shape is filled draw->lineTo(draw, &to); } } static void swf_ShapeDrawerMoveTo(drawer_t*draw, FPOINT * to) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; int x = floor(to->x*20); int y = floor(to->y*20); /* Flash will ignore a moveto (0,0) in glyphs. Hence, we map all (0,0)s to (0.05,0)s in moveto,lineto and splineto. */ if(!x&&!y) x++; /* we need to write moveto always- it might be that it signals the end of a polygon, otherwise we would end up connecting two polygons which should be seperate TODO: check if the last operation was a moveTo- if yes we *can* skip it. */ //if(sdraw->lastx != x || sdraw->lasty != y) { fixEndPoint(draw); swf_ShapeSetMove(sdraw->tag,sdraw->shape,x,y); sdraw->firstx = sdraw->lastx = x; sdraw->firsty = sdraw->lasty = y; draw->pos = *to; //} } static void swf_ShapeDrawerLineTo(drawer_t*draw, FPOINT * to) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; int x = floor(to->x*20); int y = floor(to->y*20); if(!x&&!y) x++; if(sdraw->lastx < sdraw->bbox.xmin) sdraw->bbox.xmin = sdraw->lastx; if(sdraw->lasty < sdraw->bbox.ymin) sdraw->bbox.ymin = sdraw->lasty; if(sdraw->lastx > sdraw->bbox.xmax) sdraw->bbox.xmax = sdraw->lastx; if(sdraw->lasty > sdraw->bbox.ymax) sdraw->bbox.ymax = sdraw->lasty; if(x < sdraw->bbox.xmin) sdraw->bbox.xmin = x; if(y < sdraw->bbox.ymin) sdraw->bbox.ymin = y; if(x > sdraw->bbox.xmax) sdraw->bbox.xmax = x; if(y > sdraw->bbox.ymax) sdraw->bbox.ymax = y; swf_ShapeSetLine(sdraw->tag,sdraw->shape,x-sdraw->lastx,y-sdraw->lasty); sdraw->lastx = x; sdraw->lasty = y; draw->pos = *to; } static void swf_ShapeDrawerSplineTo(drawer_t*draw, FPOINT * c1, FPOINT* to) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; int tx = floor(c1->x*20); int ty = floor(c1->y*20); int x = floor(to->x*20); int y = floor(to->y*20); if(!x&&!y) x++; if(sdraw->lastx < sdraw->bbox.xmin) sdraw->bbox.xmin = sdraw->lastx; if(sdraw->lasty < sdraw->bbox.ymin) sdraw->bbox.ymin = sdraw->lasty; if(sdraw->lastx > sdraw->bbox.xmax) sdraw->bbox.xmax = sdraw->lastx; if(sdraw->lasty > sdraw->bbox.ymax) sdraw->bbox.ymax = sdraw->lasty; if(x < sdraw->bbox.xmin) sdraw->bbox.xmin = x; if(y < sdraw->bbox.ymin) sdraw->bbox.ymin = y; if(x > sdraw->bbox.xmax) sdraw->bbox.xmax = x; if(y > sdraw->bbox.ymax) sdraw->bbox.ymax = y; if(tx < sdraw->bbox.xmin) sdraw->bbox.xmin = tx; if(ty < sdraw->bbox.ymin) sdraw->bbox.ymin = ty; if(tx > sdraw->bbox.xmax) sdraw->bbox.xmax = tx; if(ty > sdraw->bbox.ymax) sdraw->bbox.ymax = ty; swf_ShapeSetCurve(sdraw->tag,sdraw->shape, tx-sdraw->lastx,ty-sdraw->lasty, x-tx,y-ty); sdraw->lastx = x; sdraw->lasty = y; draw->pos = *to; } static void swf_ShapeDrawerFinish(drawer_t*draw) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; if(sdraw->isfinished) return; fixEndPoint(draw); if(sdraw->bbox.xmin == SCOORD_MAX) { /* no points at all -> empty bounding box */ sdraw->bbox.xmin = sdraw->bbox.ymin = sdraw->bbox.xmax = sdraw->bbox.ymax = 0; } sdraw->isfinished = 1; swf_ShapeSetEnd(sdraw->tag); } static void swf_ShapeDrawerClear(drawer_t*draw) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; if(sdraw->tagfree) { swf_DeleteTag(0, sdraw->tag); sdraw->tag = 0; } swf_ShapeFree(sdraw->shape); sdraw->shape = 0; rfx_free(draw->internal); draw->internal = 0; } SRECT swf_ShapeDrawerGetBBox(drawer_t*draw) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; return sdraw->bbox; } SHAPE* swf_ShapeDrawerToShape(drawer_t*draw) { SWFSHAPEDRAWER*sdraw = (SWFSHAPEDRAWER*)draw->internal; SHAPE* shape = (SHAPE*)rfx_alloc(sizeof(SHAPE)); if(!sdraw->isfinished) { fprintf(stderr, "Warning: you should Finish() your drawer before calling DrawerToShape"); swf_ShapeDrawerFinish(draw); } memcpy(shape, sdraw->shape, sizeof(SHAPE)); shape->bitlen = (sdraw->tag->len-1)*8; shape->data = (U8*)rfx_alloc(sdraw->tag->len-1); memcpy(shape->data, &sdraw->tag->data[1], sdraw->tag->len-1); return shape; } swftools_0.9.2+git20130725.orig/lib/modules/swfcgi.c0000644000175000017500000001062312216332640021171 0ustar gawaingawain/* swfcgi.c Parse CGI parameters Partly adopted from Steven Grimm's uncgi tool and library. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Rainer Böhme 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 */ #include #include #include "../rfxswf.h" #define ishex(x) (((x) >= '0' && (x) <= '9') || ((x) >= 'a' && (x) <= 'f') || ((x) >= 'A' && (x) <= 'F')) #define PREFIX "WWW_" static int swf_htoi(unsigned char * s) { int value; char c; c = s[0]; if (isupper(c)) c = tolower(c); value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; c = s[1]; if (isupper(c)) c = tolower(c); value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; return (value); } static void swf_url_unescape(unsigned char * s) { unsigned char *dest = s; while (s[0]) { if (s[0] == '+') dest[0] = ' '; else { if (s[0] == '%' && ishex(s[1]) && ishex(s[2])) { dest[0] = (unsigned char) swf_htoi(s + 1); s += 2; } else dest[0] = s[0]; } s++;dest++; } dest[0] = 0; } static void swf_cgienv(unsigned char * var) { unsigned char *buf, *c, *s, *t, *oldval = NULL, *newval; int despace = 0, got_cr = 0; // fprintf(stderr,"%s\n",var); swf_url_unescape(var); // fprintf(stderr,"%s\n",var); buf = (unsigned char*)rfx_alloc(strlen((const char*)var) + sizeof(PREFIX) + 2); if (!buf) return; strcpy((char*)buf, (const char*)PREFIX); if (var[0] == '_') { strcpy((char*)&buf[sizeof(PREFIX)-1], (const char*)&var[1]); despace = 1; } else strcpy((char*)&buf[sizeof(PREFIX)-1], (const char*)var); for (c = buf; c[0] ; c++) { if (c[0] == '.') c[0] = '_'; if (c[0] == '=') break; } if (!c[0]) c[1] = 0; c[0] = 0; if (despace && c[1]) { for (s = c+1; s[0] && isspace(s[0]); s++); t = c + 1; while (s[0]) { if (s[0] == '\r') { got_cr = 1; s++; continue; } if (got_cr) { if (s[0] != '\n') *t++ = '\n'; got_cr = 0; } *t++ = *s++; } while (t > c && isspace(*--t)); t[1] = 0; } if ((oldval = (unsigned char*)getenv((const char*)buf))) { newval = (unsigned char*)rfx_alloc(strlen((const char*)oldval) + strlen((const char *)buf) + strlen((const char*)&c[1]) + 3); if (!newval) return; c[0] = '='; sprintf((char*)newval, "%s#%s", buf, oldval); c[0] = 0; oldval -= strlen((const char*)buf) + 1; // skip past VAR= } else { c[0] = '='; newval = buf; } putenv((char *)newval); if (oldval) { rfx_free(oldval); rfx_free(buf); } } static void swf_scanquery(char * q) { char *next = q; if (!q) return; while (next) { next = strchr(q, '&'); if (next) next[0] = 0; swf_cgienv((unsigned char*)q); if (next) { next[0] = '&'; q = next+1; } } } char * swf_postread() { char * buf = NULL; int size = 0, sofar = 0, got; buf = getenv("CONTENT_TYPE"); if ((!buf) || strcmp(buf, "application/x-www-form-urlencoded")) return NULL; buf = getenv("CONTENT_LENGTH"); if (!buf) return NULL; size = atoi(buf); buf = (char*)rfx_alloc(size + 1); if (buf) { do { got = fread(buf + sofar, 1, size - sofar, stdin); sofar += got; } while (got && sofar < size); buf[sofar] = 0; } return buf; } void swf_uncgi() { char *query, *dupquery, *method; query = getenv("QUERY_STRING"); if ((query) && strlen(query)) { dupquery = strdup(query); swf_scanquery(dupquery); rfx_free(dupquery); } method = getenv("REQUEST_METHOD"); if ((method) && ! strcmp(method, "POST")) { query = swf_postread(); if ((query)&&(query[0]!=0)) swf_scanquery(query); rfx_free(query); } } #undef ishex #undef PREFIX swftools_0.9.2+git20130725.orig/lib/modules/swfobject.c0000644000175000017500000001575012216332640021703 0ustar gawaingawain/* swfobject.c Object place and move routines Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Rainer Böhme 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 */ #include "../rfxswf.h" char*blendModeNames[] = {"normal","normal2","layer","multiply", "screen","lighten", "darken","add", "substract","difference","invert","alpha", "erase","overlay","hardlight",0}; int isUnitMatrix(MATRIX* m) { /* a matrix with all zeros is also considered "unit matrix", as a zeroed out MATRIX structure usually means that the caller doesn't want to set the matrix */ if(( (m->sx == 0x10000 && m->sy == 0x10000) || (m->sx == 0 && m->sy == 0)) && ((m->r0|m->r1|m->tx|m->ty) == 0) ) return 1; return 0; } int isUnitCXForm(CXFORM* cx) { if((cx->a0==256 && cx->r0==256 && cx->g0==256 && cx->b0==256) && (cx->a1==0 && cx->r1==0 && cx->g1==0 && cx->b1==0)) return 1; /* A CXForm of all zeros is, unfortunately, not as unlikely as a matrix of all zeros. However, we still treat it as non-existent/uniform transform */ if((cx->a0==0 && cx->r0==0 && cx->g0==0 && cx->b0==0) && (cx->a1==0 && cx->r1==0 && cx->g1==0 && cx->b1==0)) return 1; return 0; } static int objectplace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char * name, U16 clipaction, U8 blendmode, FILTERLIST*filters) { U8 flags,flags2; if (!t) return -1; if(cx && id && cx->r1==0 && cx->g1==0 && cx->b1==0 && cx->a1==0 && cx->r0==256 && cx->g0==256 && cx->b0==256 && cx->a0==256) cx = 0; if(m && id && isUnitMatrix(m)) m = 0; flags = (id?PF_CHAR:0)|(m?PF_MATRIX:0)|(cx?PF_CXFORM:0)|(name?PF_NAME:0)|((m||cx)&&(!id)?PF_MOVE:0)|(clipaction?PF_CLIPDEPTH:0); flags2 = (0?PF2_ASBITMAP:0)|(blendmode?PF2_BLENDMODE:0)|(filters?PF2_FILTERS:0); swf_SetU8(t,flags); if(t->id == ST_PLACEOBJECT3) swf_SetU8(t, flags2); swf_SetU16(t,depth); if (flags&PF_CHAR) swf_SetU16(t,id); if (flags&PF_MATRIX) swf_SetMatrix(t,m); if (flags&PF_CXFORM) swf_SetCXForm(t,cx,1); if (flags&PF_RATIO) swf_SetU16(t,0); /* ??? The spec states that name comes first? */ if (flags&PF_CLIPDEPTH) swf_SetU16(t, clipaction); if (flags&PF_NAME) swf_SetString(t,name); if (flags2&PF2_BLENDMODE) swf_SetU8(t,blendmode); return 0; } int swf_ObjectPlace(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char * name) { return objectplace(t,id,depth,m,cx,name,0,0,0); } int swf_ObjectPlaceClip(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char * name, U16 clipaction) { return objectplace(t,id,depth,m,cx,name,clipaction,0,0); } int swf_ObjectPlaceBlend(TAG * t,U16 id,U16 depth,MATRIX * m,CXFORM * cx,const char * name, U8 blend) { if(t->id != ST_PLACEOBJECT3) fprintf(stderr, "wrong tag- ignoring blend mode\n"); return objectplace(t,id,depth,m,cx,name,0,blend,0); } int swf_ObjectMove(TAG * t,U16 depth,MATRIX * m,CXFORM * cx) { return objectplace(t,0,depth,m,cx,0,0,0,0); } void swf_SetPlaceObject(TAG * t,SWFPLACEOBJECT* obj) { if (!t) return ; if(t->id == ST_PLACEOBJECT) { swf_SetU16(t, obj->id); swf_SetU16(t, obj->depth); swf_SetMatrix(t, &obj->matrix); swf_SetCXForm(t, &obj->cxform, 0); } else { U8 flags,flags2; int m = !isUnitMatrix(&obj->matrix); int cx = !isUnitCXForm(&obj->cxform); flags = (obj->id?PF_CHAR:0)|(m?PF_MATRIX:0)|(cx?PF_CXFORM:0)|(obj->ratio?PF_RATIO:0)| (obj->name?PF_NAME:0)|(obj->move?PF_MOVE:0)| (obj->clipdepth?PF_CLIPDEPTH:0); flags2 = (0?PF2_ASBITMAP:0)|(obj->blendmode?PF2_BLENDMODE:0)|(obj->filters?PF2_FILTERS:0); swf_SetU8(t,flags); if(t->id == ST_PLACEOBJECT3) swf_SetU8(t,flags2); swf_SetU16(t,obj->depth); if (flags&PF_CHAR) swf_SetU16(t,obj->id); if (flags&PF_MATRIX) swf_SetMatrix(t,&obj->matrix); if (flags&PF_CXFORM) swf_SetCXForm(t,&obj->cxform,1); if (flags&PF_RATIO) swf_SetU16(t,obj->ratio); /* ??? The spec states that name comes first? */ if (flags&PF_CLIPDEPTH) swf_SetU16(t,obj->clipdepth); if (flags&PF_NAME) swf_SetString(t,obj->name); if (flags2&PF2_FILTERS) { swf_SetU8(t,obj->filters->num); int s; for(s=0;sfilters->num;s++) swf_SetFilter(t,obj->filters->filter[s]); } if (flags2&PF2_BLENDMODE) swf_SetU8(t,obj->blendmode); if (flags&PF_ACTIONEVENT) { // ... } } } void swf_GetPlaceObject(TAG * tag,SWFPLACEOBJECT* obj) { if(obj) memset(obj, 0, sizeof(SWFPLACEOBJECT)); if(!tag) { swf_GetMatrix(0, &obj->matrix); swf_GetCXForm(0, &obj->cxform, 1); //obj->internal = PF_CHAR|PF_MATRIX|PF_CXFORM; return; } swf_SetTagPos(tag, 0); if(tag->id == ST_PLACEOBJECT) { obj->id = swf_GetU16(tag); obj->depth = swf_GetU16(tag); swf_GetMatrix(tag, &obj->matrix); swf_GetCXForm(tag, &obj->cxform, 0); //obj->internal = PF_CHAR|PF_MATRIX|PF_CXFORM; } else if(tag->id == ST_PLACEOBJECT2 || tag->id == ST_PLACEOBJECT3) { U8 flags,flags2=0; flags = swf_GetU8(tag); if(tag->id == ST_PLACEOBJECT3) flags2 = swf_GetU8(tag); memset(obj,0,sizeof(SWFPLACEOBJECT)); swf_GetMatrix(0,&obj->matrix); swf_GetCXForm(0,&obj->cxform,1); obj->flags = flags; obj->depth = swf_GetU16(tag); //obj->internal = flags; if(flags&PF_MOVE) obj->move = 1; if(flags&PF_CHAR) obj->id = swf_GetU16(tag); if(flags&PF_MATRIX) swf_GetMatrix(tag, &obj->matrix); if(flags&PF_CXFORM) swf_GetCXForm(tag, &obj->cxform,1); if(flags&PF_RATIO) obj->ratio = swf_GetU16(tag); /* if you modify the order of these operations, also modify it in ../src/swfcombine.c */ if(flags&PF_CLIPDEPTH) obj->clipdepth = swf_GetU16(tag); //clip if(flags&PF_NAME) { int l,t; U8*data; swf_ResetReadBits(tag); l = strlen((const char *)&tag->data[tag->pos]); t = 0; data = (U8*)rfx_alloc(l+1); obj->name = (char*)data; while((data[t++] = swf_GetU8(tag))); } if(flags2&PF2_BLENDMODE) { obj->blendmode = swf_GetU8(tag); } /* Actionscript ignored (for now) */ obj->actions = 0; } else { fprintf(stderr, "rfxswf: Bad Tag: %d not a placeobject\n", tag->id); } } void swf_PlaceObjectFree(SWFPLACEOBJECT* obj) { if(obj->name) rfx_free(obj->name); } swftools_0.9.2+git20130725.orig/lib/modules/swfaction.c0000644000175000017500000010245712216332640021713 0ustar gawaingawain/* swfaction.c Actionscript generation and parsing routines Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include "../rfxswf.h" #define MAX_LOOKUP 1024 // make cross references in dumps struct Action { int version; char*name; U8 op; char*flags; } static actions[] = { /* f: frame (word) u: url (string) t: target (string) l: label (string) C: constant pool header (word) c: constant pool entry (string) s: skip (byte) (number of actions) m: method (byte) swf_GetUrl2:(0=none, 1=get, 2=post)/GotoFrame2:(1=play) b: branch (word) (number of bytes) p (push): type(byte), type=0:string, type=1:double {: define function (name (string), num (word), params (num strings), codesize (word) o: codesize (word) object (string) r: register (byte) */ {3,"End", 0x00, ""}, {3,"GotoFrame", 0x81, "f"}, {4,"GotoFrame2", 0x9f, "m"}, // -1 (/Movieclip:3) {3,"GetUrl", 0x83, "ul"}, {4,"GetUrl2", 0x9a, "m"}, //-2 {3,"NextFrame", 0x04, ""}, {3,"PreviousFrame", 0x05, ""}, {3,"Play", 0x06, ""}, {3,"Stop", 0x07, ""}, {3,"ToggleQuality", 0x08, ""}, {3,"StopSounds", 0x09, ""}, {3,"WaitForFrame", 0x8a, "fs"}, {4,"WaitForFrame2", 0x8d, "s"}, // -1 {3,"SetTarget", 0x8b, "t"}, {4,"SetTarget2", 0x20, ""}, //-1 {3,"GotoLabel", 0x8c, "l"}, {4,"Add", 0x0a, ""}, // -2, +1 {4,"Multiply", 0x0c, ""}, // -2, +1 {4,"Divide", 0x0d, ""}, // -2, +1 {4,"Subtract", 0x0b, ""}, // -2, +1 {4,"Less", 0x0f, ""}, // -2, +1 {4,"Equals", 0x0e, ""}, // -2, +1 {4,"And", 0x10, ""}, // -2, +1 {4,"Or", 0x11, ""}, // -2, +1 {4,"Not", 0x12, ""}, // -1, +1 {4,"StringAdd", 0x21, ""}, // -2,+1 {4,"StringLength", 0x14, ""}, // -1, +1 {4,"MBStringLength", 0x31, ""}, // -1, +1 {4,"StringEquals", 0x13, ""}, // -2, +1 {4,"StringLess", 0x29, ""}, //-2, +1 {4,"StringExtract", 0x15, ""}, // -3, +1 {4,"MBStringExtract", 0x35, ""}, //-3 +1 {4,"Push", 0x96, "p"}, // +1 {4,"Pop", 0x17, ""}, // -1 {4,"ToInteger", 0x18, ""}, // -1, +1 {4,"CharToAscii", 0x32, ""}, // -1, +1 {4,"AsciiToChar", 0x33, ""}, // -1, +1 {4,"MBCharToAscii", 0x36, ""}, // -1, +1 {4,"MBAsciiToChar", 0x37, ""}, // -1, +1 {4,"Jump", 0x99, "b"}, {4,"If", 0x9d, "b"}, // -1 {4,"Call", 0x9e, ""}, //-1 (frame label/number) (high bit is wrong.) {4,"GetVariable", 0x1c,""}, // -1, +1 {4,"SetVariable", 0x1d,""}, // -2 {4,"GetProperty", 0x22,""}, //-2, +1 {4,"SetProperty", 0x23, ""}, // -3 {4,"RemoveSprite", 0x25, ""}, //-1 {4,"StartDrag", 0x27, ""}, // -2, -1, (-4) {4,"EndDrag", 0x28, ""}, {4,"CloneSprite", 0x24, ""}, // -3 {4,"Trace", 0x26, ""}, //-1 {4,"GetTime", 0x34, ""}, //+1 {4,"RandomNumber", 0x30, ""}, //-1,+1 {5,"Modulo", 0x3f,""}, {5,"BitAnd", 0x60,""}, {5,"BitLShift", 0x63,""}, {5,"BitOr", 0x61,""}, {5,"BitRShift", 0x64,""}, {5,"BitURShift", 0x65,""}, {5,"BitXor", 0x62,""},//66? {5,"Decrement", 0x51,""}, {5,"Increment", 0x50,""}, {5,"PushDuplicate", 0x4c,""}, {5,"StackSwap", 0x4d,""}, //? {5,"StoreRegister", 0x87,"r"}, {5,"CallFunction", 0x3d,""}, {5,"DefineFunction", 0x9b, "{"}, {5,"Return", 0x3e,""}, {5,"GetMember", 0x4e,""}, {5,"SetMember", 0x4f,""}, {5,"CallMethod", 0x52,""}, {5,"Constantpool", 0x88, "Cc"}, {5,"DefineLocal", 0x3c,""}, {5,"DefineLocal2", 0x41,""}, {5,"Makehash", 0x43, ""}, //?? {5,"Delete", 0x3a,""}, //? {5,"Delete2", 0x3b,""}, {5,"Enumerate", 0x46,""}, {5,"Equals2", 0x49,""}, {5,"InitArray", 0x42,""}, // InitObject? {5,"NewMethod", 0x53,""}, //? {5,"NewObject", 0x40,""}, {5,"TargetPath", 0x45,""}, //? {5,"With", 0x94, "o"}, {5,"ToNumber", 0x4a,""}, //? {5,"ToString", 0x4b,""}, //? {5,"TypeOf", 0x44,""}, {5,"Add2", 0x47,""}, {5,"Less2", 0x48,""}, {6,"Greater", 0x67,""}, {6,"StringGreater", 0x68,""}, {6,"Enumerate2", 0x55,""}, {6,"InstanceOf", 0x54,""}, {6,"StrictEquals", 0x66,""} }; static int definedactions = sizeof(actions)/sizeof(struct Action); ActionTAG* swf_ActionGet(TAG*tag) { U8 op = 1; int length; ActionTAG tmp; ActionTAG*action = &tmp; U8*data; while(op) { action->next = (ActionTAG*)rfx_calloc(sizeof(ActionTAG)); action->next->prev = action; action->next->next = 0; action->next->parent = tmp.next; action = action->next; op = swf_GetU8(tag); if(op<0x80) length = 0; else length = swf_GetU16(tag); if(length) { data = (U8*)rfx_alloc(length); swf_GetBlock(tag, data, length); } else { data = 0; } action->op = op; action->len = length; action->data = data; } return tmp.next; } void swf_ActionFree(ActionTAG*action) { if(!action) { return; } action = action->parent; if(!action) { fprintf(stderr, "Warning: freeing zero action (no parent)"); return; } while(action) { ActionTAG*tmp; if(action->data && action->data != action->tmp) { rfx_free(action->data); action->data = 0; } action->len = 0; tmp = action; action=action->next; rfx_free(tmp); } } void swf_ActionSet(TAG*tag, ActionTAG*action) { if(!action) { return; } action=action->parent; while(action) { swf_SetU8(tag, action->op); if(action->op & 128) swf_SetU16(tag, action->len); swf_SetBlock(tag, action->data, action->len); action = action->next; } } int OpAdvance(char c, U8*data) { switch (c) { case 'f': return 2; case 'u': return strlen((const char*)data)+1; case 't': return strlen((const char*)data)+1; case 'l': return strlen((const char*)data)+1; case 'c': return strlen((const char*)data)+1; case 'C': return 2; case 's': return 1; case 'm': return 1; case 'b': return 2; case 'r': return 1; case 'p': { U8 type = *data++; if(type == 0) { return 1+strlen((const char*)data)+1; //string } else if (type == 1) { return 1+4; //float } else if (type == 2) { return 1+0; //NULL } else if (type == 3) { return 1+0; //Undefined } else if (type == 4) { return 1+1; //register } else if (type == 5) { return 1+1; //bool } else if (type == 6) { return 1+8; //double } else if (type == 7) { return 1+4; //int } else if (type == 8) { return 1+1; //lookup } else if (type == 9) { return 1+2; //lookup 16 } else return 1; break; } case 'o': { return 2; } case '{': { U16 num; U16 codesize; U8* odata = data; int t; while(*data++); //name num = (*data++); //num num += (*data++)*256; for(t=0;tlen + 1 + ((atag)->op&0x80?2:0)) #define MAX_LEVELS 16 /* TODO: * this should be in swfdump.c */ void swf_DumpActions(ActionTAG*atag, char*prefix) { int t; U8*data; char* cp; int entry = 0; char spaces[MAX_LEVELS*4+1]; struct { char*text; int count; } counter[MAX_LEVELS]; int countpos = 0; #ifdef MAX_LOOKUP char * lookup[MAX_LOOKUP]; memset(lookup,0x00,sizeof(lookup)); #endif memset(spaces, 32, sizeof(spaces)); spaces[sizeof(spaces)-1] = 0; if (!prefix) prefix=""; while(atag) { char*indent = &spaces[sizeof(spaces)-1-countpos*4]; U16 poollen = 0; for(t=0;top) break; if(t==definedactions) { printf("%s (%5d bytes) action:%s unknown[%02x]", prefix, atag->len, indent, atag->op); } else { printf("%s (%5d bytes) action:%s %s", prefix, atag->len, indent, actions[t].name); } data = atag->data; if(atag->len && t!=definedactions) //TODO: check for consistency: should we have a length? { cp = actions[t].flags; while(*cp) { switch(*cp) { case 'f': { //frame printf(" %d", data[0]+256*data[1]); } break; case 'u': { printf(" URL:\"%s\"", data); } break; case 't': { printf(" Target:\"%s\"", data); } break; case 'l': { printf(" Label:\"%s\"", data); } break; case 'c': { printf(" String:\"%s\"", data); #ifdef MAX_LOOKUP if (entry=15) { printf("Error: nested too deep\n"); continue; } counter[countpos].text = "}"; counter[countpos].count = codesize + ATAG_FULLLENGTH(atag); countpos++; } break; case 'o': { int t; U16 codesize = data[0]+256*data[1]; printf(" codesize:%d ", codesize); /* the following tries to find the "string" the flash documentation speaks of- I've never actually seen one yet. -mk */ for(t=2;tlen;t++) printf("[%02x]", atag->data[t]); printf("\n%s %s{", prefix, indent); if(countpos>=15) { printf("Error: nested too deep\n"); continue; } counter[countpos].text = "}"; counter[countpos].count = codesize + ATAG_FULLLENGTH(atag); countpos++; } break; case 'b': { printf(" %d", data[0]+256*(signed char)data[1]); } break; case 'r': { printf(" %d", data[0]); } break; case 'p': { U8 type = *data; unsigned char*value = data+1; if(type == 0) { printf(" String:\"%s\"", value); } else if (type == 1) { U32 f = value[0]+(value[1]<<8)+ (value[2]<<16)+(value[3]<<24); printf(" Float:%f", *(float*)&f); } else if (type == 2) { printf(" NULL"); } else if (type == 3) { printf(" Undefined"); } else if (type == 4) { printf(" register:%d", *value); } else if (type == 5) { printf(" bool:%s", *value?"true":"false"); } else if (type == 6) { U8 a[8]; memcpy(&a[4],value,4); memcpy(a,&value[4],4); #ifdef WORDS_BIGENDIAN int t; for(t=0;t<4;t++) { U8 tmp = a[t]; a[t]=a[7-t]; a[7-t] = tmp; } #endif printf(" double:%f", *(double*)a); } else if (type == 7) { printf(" int:%d", value[0]+(value[1]<<8)+ (value[2]<<16)+(value[3]<<24)); } else if (type == 8) { printf(" Lookup:%d", *value); #ifdef MAX_LOOKUP if (lookup[*value]) printf(" (\"%s\")",lookup[*value]); #endif } else if (type == 9) { U32 offset = value[0]+(value[1]<<8); printf(" Lookup16:%d", offset); #ifdef MAX_LOOKUP if (lookup[offset]) printf(" (\"%s\")",lookup[offset]); #endif } else { printf(" UNKNOWN[%02x]",type); } } break; } data += OpAdvance(*cp, data); if((*cp!='c' || !poollen) && (*cp!='p' || !(data<&atag->data[atag->len]))) cp++; if(poollen) poollen--; } } if(data < atag->data + atag->len) { int nl = ((atag->data+atag->len)-data); int t; printf(" (remainder of %d bytes:\"", nl); for(t=0;tnext; } #ifdef MAX_LOOKUP for (t=0;top) break; if(t==definedactions) { // unknown actiontag atag = atag->next; count++; continue; } cp = actions[t].flags; data = atag->data; if(atag->len) { while(*cp) { U8 * replacepos = 0; int replacelen = 0; U8 * replacement = 0; switch(*cp) { case 'u': { if(type&TYPE_URL) { replacelen = strlen((const char*)data); replacepos = data; replacement = (U8*)callback((char*)data); // may be null } } break; case 't': { if(type&TYPE_TARGET) { replacelen = strlen((const char*)data); replacepos = data; replacement = (U8*)callback((char*)data); // may be null } } break; case 'c': { if(type&TYPE_STRING) { replacelen = strlen((const char*)data); replacepos = data; replacement = (U8*)callback((char*)data); // may be null } } break; case 'C': { poollen = (data[0]+256*data[1]); } break; case 'o': { } break; case 'p': { U8 datatype = *data; char*value = (char*)&data[1]; if(datatype == 0) { //string if(type&TYPE_STRING) { replacelen = strlen(value); replacepos = (U8*)value; replacement = (U8*)callback(value); // may be null } } else if (datatype == 8) { //lookup } } break; } data += OpAdvance(*cp, data); if(*cp!='c' || !poollen) cp++; if(poollen) poollen--; if(replacement) { int newlen = strlen((const char *)replacement); char * newdata = (char*)rfx_alloc(atag->len - replacelen + newlen); int rpos = replacepos - atag->data; memcpy(newdata, atag->data, rpos); memcpy(&newdata[rpos], replacement, newlen); memcpy(&newdata[rpos+newlen], &replacepos[replacelen], &data[atag->len] - &replacepos[replacelen]); rfx_free(atag->data); atag->data = (U8*)newdata; data = &atag->data[rpos+newlen+1]; } } } atag = atag->next; count ++; } return count; } void swf_ActionEnumerateTargets(ActionTAG*atag, char*(*callback)(char*)) { swf_ActionEnumerate(atag, callback, TYPE_TARGET); } void swf_ActionEnumerateStrings(ActionTAG*atag, char*(*callback)(char*)) { swf_ActionEnumerate(atag, callback, TYPE_STRING); } void swf_ActionEnumerateURLs(ActionTAG*atag, char*(*callback)(char*)) { swf_ActionEnumerate(atag, callback, TYPE_URL); } /*static ActionTAG* swf_ActionStart() { ActionTAG*atag; atag = (ActionTAG*)rfx_alloc(sizeof(ActionTAG)); atag->prev = 0; atag->next = 0; atag->parent = 0; atag->data = 0; atag->len = 0; return atag; } void swf_ActionEnd(ActionTAG* atag) { ActionTAG*last; while(atag) { last = atag; atag=atag->next; } last->prev->next = 0; rfx_free(last); }*/ static ActionTAG*lastATAG(ActionTAG*atag) { ActionTAG*last = 0; while(atag) { last = atag; atag=atag->next; } return last; } ActionTAG* swf_AddActionTAG(ActionTAG*atag, U8 op, U8*data, U16 len) { ActionTAG*tmp; tmp = (ActionTAG*)rfx_alloc(sizeof(ActionTAG)); tmp->next = 0; if(atag) { tmp->prev = atag; atag->next = tmp; tmp->parent = atag->parent; } else { tmp->prev = 0; tmp->parent = tmp; } if(data || !len) { tmp->data = data; } else { tmp->data = tmp->tmp; } tmp->len = len; tmp->op = op; return tmp; } ActionMarker action_setMarker(ActionTAG*atag) { ActionMarker m; m.atag = atag; return m; } int inline ActionTagSize(ActionTAG*atag) { return (atag->op&0x80)?3+(atag->len):1+0; } #define ACTION_END 0x00 #define ACTION_NEXTFRAME 0x04 #define ACTION_PREVIOUSFRAME 0x05 #define ACTION_PLAY 0x06 #define ACTION_STOP 0x07 #define ACTION_TOGGLEQUALITY 0x08 #define ACTION_STOPSOUNDS 0x09 #define ACTION_ADD 0x0a #define ACTION_SUBTRACT 0x0b #define ACTION_MULTIPLY 0x0c #define ACTION_DIVIDE 0x0d #define ACTION_EQUALS 0x0e #define ACTION_LESS 0x0f #define ACTION_AND 0x10 #define ACTION_OR 0x11 #define ACTION_NOT 0x12 #define ACTION_STRINGEQUALS 0x13 #define ACTION_STRINGLENGTH 0x14 #define ACTION_STRINGEXTRACT 0x15 #define ACTION_POP 0x17 #define ACTION_TOINTEGER 0x18 #define ACTION_GETVARIABLE 0x1c #define ACTION_SETVARIABLE 0x1d #define ACTION_SETTARGET2 0x20 #define ACTION_STRINGADD 0x21 #define ACTION_GETPROPERTY 0x22 #define ACTION_SETPROPERTY 0x23 #define ACTION_CLONESPRITE 0x24 #define ACTION_REMOVESPRITE 0x25 #define ACTION_TRACE 0x26 #define ACTION_STARTDRAG 0x27 #define ACTION_ENDDRAG 0x28 #define ACTION_STRINGLESS 0x29 #define ACTION_RANDOMNUMBER 0x30 #define ACTION_MBSTRINGLENGTH 0x31 #define ACTION_CHARTOASCII 0x32 #define ACTION_ASCIITOCHAR 0x33 #define ACTION_GETTIME 0x34 #define ACTION_MBSTRINGEXTRACT 0x35 #define ACTION_MBCHARTOASCII 0x36 #define ACTION_MBASCIITOCHAR 0x37 #define ACTION_DELETE 0x3a #define ACTION_DELETE2 0x3b #define ACTION_DEFINELOCAL 0x3c #define ACTION_CALLFUNCTION 0x3d #define ACTION_RETURN 0x3e #define ACTION_MODULO 0x3f #define ACTION_NEWOBJECT 0x40 #define ACTION_DEFINELOCAL2 0x41 #define ACTION_INITARRAY 0x42 #define ACTION_MAKEHASH 0x43 #define ACTION_TYPEOF 0x44 #define ACTION_TARGETPATH 0x45 #define ACTION_ENUMERATE 0x46 #define ACTION_ADD2 0x47 #define ACTION_LESS2 0x48 #define ACTION_EQUALS2 0x49 #define ACTION_TONUMBER 0x4a #define ACTION_TOSTRING 0x4b #define ACTION_PUSHDUPLICATE 0x4c #define ACTION_STACKSWAP 0x4d #define ACTION_GETMEMBER 0x4e #define ACTION_SETMEMBER 0x4f #define ACTION_INCREMENT 0x50 #define ACTION_DECREMENT 0x51 #define ACTION_CALLMETHOD 0x52 #define ACTION_NEWMETHOD 0x53 #define ACTION_BITAND 0x60 #define ACTION_BITOR 0x61 #define ACTION_BITXOR 0x62 #define ACTION_BITLSHIFT 0x63 #define ACTION_BITRSHIFT 0x64 #define ACTION_BITURSHIFT 0x65 #define ACTION_GOTOFRAME 0x81 #define ACTION_GETURL 0x83 #define ACTION_STOREREGISTER 0x87 #define ACTION_CONSTANTPOOL 0x88 #define ACTION_WAITFORFRAME 0x8a #define ACTION_SETTARGET 0x8b #define ACTION_GOTOLABEL 0x8c #define ACTION_WAITFORFRAME2 0x8d #define ACTION_WITH 0x94 #define ACTION_PUSH 0x96 #define ACTION_JUMP 0x99 #define ACTION_GETURL2 0x9a #define ACTION_DEFINEFUNCTION 0x9b #define ACTION_IF 0x9d #define ACTION_CALL 0x9e #define ACTION_GOTOFRAME2 0x9f void action_fixjump(ActionMarker m1, ActionMarker m2) { ActionTAG* a1 = m1.atag; ActionTAG* a2 = m2.atag; ActionTAG* a; int len = 0; int oplen = 0; a = a1; a = a->next; //first one is free while(a && a!=a2) { len += ActionTagSize(a); oplen ++; a = a->next; } if(!a) { len = 0; oplen = 0; a = a2; while(a && a!=a1) { len -= ActionTagSize(a); oplen --; a = a->next; } if(!a) { fprintf(stderr, "action_fixjump: couldn't find second tag\n"); return; } len -= ActionTagSize(a); oplen --; } if (a1->op == ACTION_IF || a1->op == ACTION_JUMP) { *(U16*)(a1->data) = LE_16_TO_NATIVE(len); } else if(a1->op == ACTION_WAITFORFRAME) { ((U8*)(a1->data))[2] = oplen; } else if(a1->op == ACTION_WAITFORFRAME2) { ((U8*)(a1->data))[0] = oplen; } } ActionTAG* action_NextFrame(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_NEXTFRAME, 0, 0);} ActionTAG* action_PreviousFrame(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_PREVIOUSFRAME, 0, 0);} ActionTAG* action_Play(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_PLAY, 0, 0);} ActionTAG* action_Stop(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STOP, 0, 0);} ActionTAG* action_ToggleQuality(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TOGGLEQUALITY, 0, 0);} ActionTAG* action_StopSounds(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STOPSOUNDS, 0, 0);} ActionTAG* action_Add(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_ADD, 0, 0);} ActionTAG* action_Subtract(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_SUBTRACT, 0, 0);} ActionTAG* action_Multiply(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MULTIPLY, 0, 0);} ActionTAG* action_Divide(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DIVIDE, 0, 0);} ActionTAG* action_Equals(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_EQUALS, 0, 0);} ActionTAG* action_Less(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_LESS, 0, 0);} ActionTAG* action_And(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_AND, 0, 0);} ActionTAG* action_Or(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_OR, 0, 0);} ActionTAG* action_Not(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_NOT, 0, 0);} ActionTAG* action_StringEquals(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STRINGEQUALS, 0, 0);} ActionTAG* action_StringLength(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STRINGLENGTH, 0, 0);} ActionTAG* action_StringExtract(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STRINGEXTRACT, 0, 0);} ActionTAG* action_Pop(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_POP, 0, 0);} ActionTAG* action_ToInteger(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TOINTEGER, 0, 0);} ActionTAG* action_GetVariable(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_GETVARIABLE, 0, 0);} ActionTAG* action_SetVariable(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_SETVARIABLE, 0, 0);} ActionTAG* action_SetTarget2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_SETTARGET2, 0, 0);} ActionTAG* action_StringAdd(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STRINGADD, 0, 0);} ActionTAG* action_GetProperty(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_GETPROPERTY, 0, 0);} ActionTAG* action_SetProperty(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_SETPROPERTY, 0, 0);} ActionTAG* action_CloneSprite(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_CLONESPRITE, 0, 0);} ActionTAG* action_RemoveSprite(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_REMOVESPRITE, 0, 0);} ActionTAG* action_Trace(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TRACE, 0, 0);} ActionTAG* action_StartDrag(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STARTDRAG, 0, 0);} ActionTAG* action_EndDrag(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_ENDDRAG, 0, 0);} ActionTAG* action_StringLess(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STRINGLESS, 0, 0);} ActionTAG* action_RandomNumber(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_RANDOMNUMBER, 0, 0);} ActionTAG* action_MBStringLength(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MBSTRINGLENGTH, 0, 0);} ActionTAG* action_CharToAscii(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_CHARTOASCII, 0, 0);} ActionTAG* action_AsciiToChar(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_ASCIITOCHAR, 0, 0);} ActionTAG* action_GetTime(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_GETTIME, 0, 0);} ActionTAG* action_MBStringExtract(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MBSTRINGEXTRACT, 0, 0);} ActionTAG* action_MBCharToAscii(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MBCHARTOASCII, 0, 0);} ActionTAG* action_MBAsciiToChar(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MBASCIITOCHAR, 0, 0);} ActionTAG* action_Delete(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DELETE, 0, 0);} ActionTAG* action_Delete2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DELETE2, 0, 0);} ActionTAG* action_DefineLocal(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DEFINELOCAL, 0, 0);} ActionTAG* action_CallFunction(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_CALLFUNCTION, 0, 0);} ActionTAG* action_Return(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_RETURN, 0, 0);} ActionTAG* action_Modulo(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MODULO, 0, 0);} ActionTAG* action_NewObject(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_NEWOBJECT, 0, 0);} ActionTAG* action_DefineLocal2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DEFINELOCAL2, 0, 0);} ActionTAG* action_InitArray(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_INITARRAY, 0, 0);} ActionTAG* action_Makehash(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_MAKEHASH, 0, 0);} ActionTAG* action_TypeOf(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TYPEOF, 0, 0);} ActionTAG* action_TargetPath(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TARGETPATH, 0, 0);} ActionTAG* action_Enumerate(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_ENUMERATE, 0, 0);} ActionTAG* action_Add2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_ADD2, 0, 0);} ActionTAG* action_Less2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_LESS2, 0, 0);} ActionTAG* action_Equals2(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_EQUALS2, 0, 0);} ActionTAG* action_ToNumber(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TONUMBER, 0, 0);} ActionTAG* action_ToString(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_TOSTRING, 0, 0);} ActionTAG* action_PushDuplicate(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_PUSHDUPLICATE, 0, 0);} ActionTAG* action_StackSwap(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_STACKSWAP, 0, 0);} ActionTAG* action_GetMember(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_GETMEMBER, 0, 0);} ActionTAG* action_SetMember(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_SETMEMBER, 0, 0);} ActionTAG* action_Increment(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_INCREMENT, 0, 0);} ActionTAG* action_Decrement(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_DECREMENT, 0, 0);} ActionTAG* action_CallMethod(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_CALLMETHOD, 0, 0);} ActionTAG* action_NewMethod(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_NEWMETHOD, 0, 0);} ActionTAG* action_BitAnd(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITAND, 0, 0);} ActionTAG* action_BitOr(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITOR, 0, 0);} ActionTAG* action_BitXor(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITXOR, 0, 0);} ActionTAG* action_BitLShift(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITLSHIFT, 0, 0);} ActionTAG* action_BitRShift(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITRSHIFT, 0, 0);} ActionTAG* action_BitURShift(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_BITURSHIFT, 0, 0);} ActionTAG* action_Call(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_CALL, 0, 0);} ActionTAG* action_End(ActionTAG*atag) {return swf_AddActionTAG(atag, ACTION_END, 0, 0);} ActionTAG* action_GotoFrame(ActionTAG*atag, U16 frame) { atag = swf_AddActionTAG(atag, ACTION_GOTOFRAME, 0, 2); *(U16*)atag->tmp = LE_16_TO_NATIVE(frame); return atag; } ActionTAG* action_Jump(ActionTAG*atag, U16 branch) { atag = swf_AddActionTAG(atag, ACTION_JUMP, 0, 2); *(U16*)atag->tmp = LE_16_TO_NATIVE(branch); return atag; } ActionTAG* action_If(ActionTAG*atag, U16 branch) { atag = swf_AddActionTAG(atag, ACTION_IF, 0, 2); *(U16*)atag->tmp = LE_16_TO_NATIVE(branch); return atag; } ActionTAG* action_StoreRegister(ActionTAG*atag, U8 reg) { atag = swf_AddActionTAG(atag, ACTION_STOREREGISTER, 0, 1); *(U8*)atag->tmp = reg; return atag; } ActionTAG* action_GotoFrame2(ActionTAG*atag, U8 method) { atag = swf_AddActionTAG(atag, ACTION_GOTOFRAME2, 0, 1); *(U8*)atag->tmp = method; return atag; } ActionTAG* action_GetUrl2(ActionTAG*atag, U8 method) { atag = swf_AddActionTAG(atag, ACTION_GETURL2, 0, 1); *(U8*)atag->tmp = method; return atag; } ActionTAG* action_WaitForFrame2(ActionTAG*atag, U8 skip) { atag = swf_AddActionTAG(atag, ACTION_WAITFORFRAME2, 0, 1); *(U8*)atag->tmp = skip; return atag; } ActionTAG* action_WaitForFrame(ActionTAG*atag, U16 frame, U8 skip) { atag = swf_AddActionTAG(atag, ACTION_WAITFORFRAME, 0, 3); *(U16*)atag->tmp = LE_16_TO_NATIVE(frame); *(U8*)&atag->tmp[2] = skip; return atag; } ActionTAG* action_SetTarget(ActionTAG*atag, const char* target) { char*ptr = strdup(target); return swf_AddActionTAG(atag, ACTION_SETTARGET, (U8*)ptr, strlen(ptr)+1); } ActionTAG* action_PushNULL(ActionTAG*atag) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 1); *(U8*)atag->tmp = 2; //NULL return atag; } ActionTAG* action_PushUndefined(ActionTAG*atag) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 1); *(U8*)atag->tmp = 3; //Undefined return atag; } ActionTAG* action_PushBoolean(ActionTAG*atag, char c) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 2); *(U8*)atag->tmp = 5; //bool *(U8*)&atag->tmp[1] = c; return atag; } ActionTAG* action_PushRegister(ActionTAG*atag, U8 reg) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 2); *(U8*)atag->tmp = 4; //register *(U8*)&atag->tmp[1] = reg; return atag; } ActionTAG* action_PushLookup(ActionTAG*atag, U8 index) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 2); *(U8*)atag->tmp = 8; //lookup *(U8*)&atag->tmp[1] = index; return atag; } ActionTAG* action_PushLookup16(ActionTAG*atag, U16 index) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 3); *(U8*)atag->tmp = 9; //lookup *(U8*)&atag->tmp[1] = (U8)index; *(U8*)&atag->tmp[2] = index>>8; return atag; } ActionTAG* action_PushString(ActionTAG*atag, const char*str) { int l = strlen(str); char*ptr = (char*)rfx_alloc(l+2); ptr[0] = 0; // string strcpy(&ptr[1], str); return swf_AddActionTAG(atag, ACTION_PUSH, (U8*)ptr, l+2); } ActionTAG* action_PushFloat(ActionTAG*atag, float f) { char*ptr = (char*)rfx_alloc(5); U32 fd = *(U32*)&f; ptr[0] = 1; //float ptr[1] = fd; ptr[2] = fd>>8; ptr[3] = fd>>16; ptr[4] = fd>>24; return swf_AddActionTAG(atag, ACTION_PUSH, (U8*)ptr, 5); } ActionTAG* action_PushDouble(ActionTAG*atag, double d) { char*ptr = (char*)rfx_alloc(9); U8*dd = (U8*)&d; ptr[0] = 6; //double #ifdef WORDS_BIGENDIAN ptr[1] = dd[7];ptr[2] = dd[6]; ptr[3] = dd[5];ptr[4] = dd[4]; ptr[5] = dd[3];ptr[6] = dd[2]; ptr[7] = dd[1];ptr[8] = dd[0]; #else ptr[1] = dd[0];ptr[2] = dd[1]; ptr[3] = dd[2];ptr[4] = dd[3]; ptr[5] = dd[4];ptr[6] = dd[5]; ptr[7] = dd[6];ptr[8] = dd[7]; #endif return swf_AddActionTAG(atag, ACTION_PUSH, (U8*)ptr, 9); } ActionTAG* action_PushInt(ActionTAG*atag, int i) { atag = swf_AddActionTAG(atag, ACTION_PUSH, 0, 5); atag->tmp[0] = 7; //int atag->tmp[1] = i; atag->tmp[2] = i>>8; atag->tmp[3] = i>>16; atag->tmp[4] = i>>24; return atag; } ActionTAG* action_GotoLabel(ActionTAG*atag, char* label) { char*ptr = strdup(label); return swf_AddActionTAG(atag, ACTION_GOTOLABEL, (U8*)ptr, strlen(ptr)); } ActionTAG* action_GetUrl(ActionTAG*atag, const char* url, char* label) { int l1= strlen(url); int l2= strlen(label); char*ptr = (char*)rfx_alloc(l1+l2+2); strcpy(ptr, url); strcpy(&ptr[l1+1], label); return swf_AddActionTAG(atag, ACTION_GETURL, (U8*)ptr, l1+l2+2); } //TODO: ActionTAG* action_DefineFunction(ActionTAG*atag, U8*data, int len) {return atag;} ActionTAG* action_Constantpool(ActionTAG*atag, char* constantpool) {return atag;} ActionTAG* action_With(ActionTAG*atag, char*object) {return atag;} #include "../action/actioncompiler.h" ActionTAG* swf_ActionCompile(const char* source, int version) { TAG* tag; ActionTAG* a = 0; void*buffer = 0; int len = 0; int ret; tag = swf_InsertTag(NULL, ST_DOACTION); ret = compileSWFActionCode(source, version, &buffer, &len); if(!ret || buffer==0 || len == 0) return 0; swf_SetBlock(tag, (U8*)buffer, len); swf_SetU8(tag, 0); rfx_free(buffer); a = swf_ActionGet(tag); swf_DeleteTag(0, tag); return a; } /* Properties: _X 0 _Y 1 _xscale 2 _yscale 3 _currentframe 4 _totalframes 5 _alpha 6 _visible 7 _width 8 _height 9 _rotation 10 _target 11 _framesloaded 12 _name 13 _droptarget 14 _url 15 _highquality 16 _focusrect 17 _soundbuftime 18 _quality* 19 _xmouse* 20 _ymouse* 21 */ swftools_0.9.2+git20130725.orig/lib/modules/swfbutton.c0000644000175000017500000000752112216332640021745 0ustar gawaingawain/* swfbutton.c Button functions Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2000, 2001 Rainer Böhme 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 */ #include "../rfxswf.h" int swf_ButtonSetRecord(TAG * t,U8 state,U16 id,U16 layer,MATRIX * m,CXFORM * cx) { swf_SetU8(t,state); swf_SetU16(t,id); swf_SetU16(t,layer); swf_SetMatrix(t,m); if (swf_GetTagID(t)==ST_DEFINEBUTTON2) swf_SetCXForm(t,cx,1); return 0; } int swf_ButtonSetCondition(TAG * t,U16 condition) { swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess swf_SetU16(t,condition); return 0; } int swf_ButtonSetFlags(TAG * t,U8 flags) { if (swf_GetTagID(t)==ST_DEFINEBUTTON2) { swf_SetU8(t,flags); swf_SetU16(t,0); // dummy for Action Offset -> later set by ButtonPostProcess } return 0; } void swf_SetButtonOffset(TAG * t,U32 offsetpos) { U32 now = swf_GetTagPos(t); U16 diff = now-offsetpos; swf_SetTagPos(t,offsetpos); t->data[t->pos++] = (U8)(diff&0xff); t->data[t->pos++] = (U8)(diff>>8); swf_SetTagPos(t,now); } int swf_ButtonPostProcess(TAG * t,int anz_action) { if (swf_GetTagID(t)==ST_DEFINEBUTTON2) { U32 oldTagPos; U32 offsetpos; oldTagPos = swf_GetTagPos(t); // scan DefineButton2 Record swf_GetU16(t); // Character ID swf_GetU8(t); // Flags; offsetpos = swf_GetTagPos(t); // first offset swf_GetU16(t); while (swf_GetU8(t)) // state -> parse ButtonRecord { swf_GetU16(t); // id swf_GetU16(t); // layer swf_GetMatrix(t,NULL); // matrix swf_GetCXForm(t,NULL,1);// CXForm } swf_SetButtonOffset(t,offsetpos); while(anz_action) { U8 a; offsetpos = swf_GetTagPos(t); // offset swf_GetU16(t); swf_GetU16(t); // condition while ((a=swf_GetU8(t))) // skip action records { if (a&0x80) { U16 l = swf_GetU16(t); swf_GetBlock(t,NULL,l); } } if (--anz_action) swf_SetButtonOffset(t,offsetpos); } swf_SetTagPos(t,oldTagPos); } return 0; } ActionTAG* swf_Button1GetAction(TAG*tag) { swf_GetU16(tag); //button id while(1) { U8 flags = swf_GetU8(tag); if(!flags) break; swf_GetU16(tag); //char swf_GetU16(tag); //layer swf_ResetReadBits(tag); swf_GetMatrix(tag, NULL); } return swf_ActionGet(tag); } ActionTAG* swf_Button2GetAction(TAG*tag) { swf_GetU16(tag); //button id swf_GetU8(tag); //flag U16 offset = swf_GetU16(tag); //offset swf_SetTagPos(tag, offset); swf_GetU16(tag); // next offset swf_GetU16(tag); // condition /* notice: this only returns the *first* action block. For the current appliances, this is enough. */ return swf_ActionGet(tag); } ActionTAG* swf_ButtonGetAction(TAG*t) { if(t->id == ST_DEFINEBUTTON) { return swf_Button1GetAction(t); } else if(t->id == ST_DEFINEBUTTON2) { return swf_Button2GetAction(t); } else { fprintf(stderr, "error in buttongetaction: not a button tag\n"); return 0; } } swftools_0.9.2+git20130725.orig/lib/modules/swfshape.c0000644000175000017500000007170712216332640021541 0ustar gawaingawain/* swfshape.c shape functions Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Rainer Böhme 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 */ #include "../rfxswf.h" #define SF_MOVETO 0x01 #define SF_FILL0 0x02 #define SF_FILL1 0x04 #define SF_LINE 0x08 #define SF_NEWSTYLE 0x10 void swf_ShapeFree(SHAPE * s) { if(!s) return; if (s->linestyle.data) rfx_free(s->linestyle.data); s->linestyle.data = NULL; s->linestyle.n = 0; if (s->fillstyle.data) rfx_free(s->fillstyle.data); s->fillstyle.data = NULL; s->fillstyle.n = 0; if (s->data) rfx_free(s->data); s->data = NULL; rfx_free(s); } int swf_ShapeNew(SHAPE * * s) { SHAPE * sh; if (!s) return -1; sh = (SHAPE *)rfx_calloc(sizeof(SHAPE)); *s = sh; return 0; } int swf_GetSimpleShape(TAG * t,SHAPE * * s) // without Linestyle/Fillstyle Record { SHAPE * sh; int bitl, len; int end; U32 pos; if (FAILED(swf_ShapeNew(s))) return -1; sh = s[0]; swf_ResetReadBits(t); sh->bits.fill = (U16)swf_GetBits(t,4); sh->bits.line = (U16)swf_GetBits(t,4); bitl = 0; end = 0; pos = swf_GetTagPos(t); while (!end) { int edge = swf_GetBits(t,1); bitl+=1; if (edge) { bitl+=1; if (swf_GetBits(t,1)) // Line { U16 nbits = swf_GetBits(t,4)+2; bitl+=5; if (swf_GetBits(t,1)) // x/y Line { swf_GetBits(t,nbits); swf_GetBits(t,nbits); bitl+=nbits*2; } else // hline/vline { swf_GetBits(t,nbits+1); bitl+=nbits+1; } } else // Curve { U16 nbits = swf_GetBits(t,4)+2; bitl+=4; swf_GetBits(t,nbits); swf_GetBits(t,nbits); swf_GetBits(t,nbits); swf_GetBits(t,nbits); bitl+=4*nbits; } } else { U16 flags = swf_GetBits(t,5); bitl+=5; if (flags) { if (flags&SF_MOVETO) { U16 nbits = swf_GetBits(t,5); bitl+=5; swf_GetBits(t,nbits); swf_GetBits(t,nbits); bitl+=2*nbits; } if (flags&SF_FILL0) { swf_GetBits(t,sh->bits.fill); bitl+=sh->bits.fill; } if (flags&SF_FILL1) { swf_GetBits(t,sh->bits.fill); bitl+=sh->bits.fill; } if (flags&SF_LINE) { swf_GetBits(t,sh->bits.line); bitl+=sh->bits.line; } if (flags&SF_NEWSTYLE) { fprintf(stderr,"RFXSWF: Can't process extended styles in shape.\n"); } } else end = 1; } } swf_SetTagPos(t,pos); len = (bitl+7)/8; if (sh->data) rfx_free(sh->data); sh->data = (U8*)rfx_alloc(len); if (sh->data) { sh->bitlen = bitl; swf_GetBlock(t,sh->data,len); } else return -1; return len; } int swf_SetSimpleShape(TAG * t,SHAPE * s) // without Linestyle/Fillstyle Record { int l; if (!s) return -1; l = (s->bitlen+7)/8; if (t) { swf_ResetWriteBits(t); swf_SetBits(t,s->bits.fill,4); swf_SetBits(t,s->bits.line,4); swf_SetBlock(t,s->data,l); swf_ResetWriteBits(t); } return l+1; } int swf_SetFillStyle(TAG * t,FILLSTYLE * f) { if ((!t)||(!f)) return -1; swf_SetU8(t,f->type); switch (f->type) { case FILL_SOLID: if (swf_GetTagID(t)!=ST_DEFINESHAPE3) swf_SetRGB(t,&f->color); else swf_SetRGBA(t,&f->color); break; case FILL_TILED: case FILL_CLIPPED: swf_SetU16(t,f->id_bitmap); swf_SetMatrix(t,&f->m); break; case FILL_LINEAR: case FILL_RADIAL: swf_SetMatrix(t,&f->m); swf_SetGradient(t,&f->gradient,/*alpha?*/t->id==ST_DEFINESHAPE3?1:0); break; } return 0; } int swf_SetLineStyle(TAG * t,LINESTYLE * l) { if ((!l)||(!t)) return -1; swf_SetU16(t,l->width); if (swf_GetTagID(t)!=ST_DEFINESHAPE3) swf_SetRGB(t,&l->color); else swf_SetRGBA(t,&l->color); return 0; } int swf_SetShapeStyleCount(TAG * t,U16 n) { if (n>254) { swf_SetU8(t,0xff); swf_SetU16(t,n); return 3; } else { swf_SetU8(t,(U8)n); return 1; } } int swf_SetShapeStyles(TAG * t,SHAPE * s) { int i,l; if (!s) return -1; l = 0; l += swf_SetShapeStyleCount(t,s->fillstyle.n); for (i=0;ifillstyle.n;i++) l+=swf_SetFillStyle(t,&s->fillstyle.data[i]); l += swf_SetShapeStyleCount(t,s->linestyle.n); for (i=0;ilinestyle.n;i++) l+=swf_SetLineStyle(t,&s->linestyle.data[i]); return l; } int swf_ShapeCountBits(SHAPE * s,U8 * fbits,U8 * lbits) { if (!s) return -1; s->bits.fill = swf_CountUBits(s->fillstyle.n, 0); s->bits.line = swf_CountUBits(s->linestyle.n, 0); if (fbits) fbits[0] = s->bits.fill; if (lbits) lbits[0] = s->bits.line; return 0; } int swf_SetShapeBits(TAG * t,SHAPE * s) { if ((!t)||(!s)) return -1; swf_ResetWriteBits(t); swf_SetBits(t,s->bits.fill,4); swf_SetBits(t,s->bits.line,4); return 0; } int swf_SetShapeHeader(TAG * t,SHAPE * s) { int res; res = swf_SetShapeStyles(t,s); if (res>=0) res = swf_ShapeCountBits(s,NULL,NULL); if (res>=0) res = swf_SetShapeBits(t,s); return res; } int swf_ShapeAddFillStyle(SHAPE * s,U8 type,MATRIX * m,RGBA * color,U16 id_bitmap, GRADIENT*gradient) { RGBA def_c; MATRIX def_m; GRADIENT def_g; // handle defaults if (!s) return -1; if (!color) { color = &def_c; def_c.a = 0xff; def_c.r = def_c.g = def_c.b = 0; } if (!m) { m = &def_m; swf_GetMatrix(NULL,m); } if(!gradient) { gradient = &def_g; swf_GetGradient(NULL, gradient, 1); } // handle memory if (s->fillstyle.data) { FILLSTYLE * xnew = (FILLSTYLE *)rfx_realloc(s->fillstyle.data,(s->fillstyle.n+1)*sizeof(FILLSTYLE)); if (!xnew) return -1; s->fillstyle.data = xnew; } else { s->fillstyle.data = (FILLSTYLE *)rfx_alloc(sizeof(FILLSTYLE)); s->fillstyle.n = 0; if (!s->fillstyle.data) return -1; } // set fillstyle s->fillstyle.data[s->fillstyle.n].type = type; s->fillstyle.data[s->fillstyle.n].id_bitmap = id_bitmap; memcpy(&s->fillstyle.data[s->fillstyle.n].m,m,sizeof(MATRIX)); memcpy(&s->fillstyle.data[s->fillstyle.n].color,color,sizeof(RGBA)); memcpy(&s->fillstyle.data[s->fillstyle.n].gradient,gradient,sizeof(GRADIENT)); return (++s->fillstyle.n); } int swf_ShapeAddFillStyle2(SHAPE * s,FILLSTYLE*fs) { return swf_ShapeAddFillStyle(s, fs->type, &fs->m, &fs->color, fs->id_bitmap, &fs->gradient); } int swf_ShapeAddSolidFillStyle(SHAPE * s,RGBA * color) { return swf_ShapeAddFillStyle(s,FILL_SOLID,NULL,color,0,0); } int swf_ShapeAddBitmapFillStyle(SHAPE * s,MATRIX * m,U16 id_bitmap,int clip) { return swf_ShapeAddFillStyle(s,clip?FILL_CLIPPED:FILL_TILED,m,NULL,id_bitmap,0); } int swf_ShapeAddGradientFillStyle(SHAPE * s,MATRIX * m,GRADIENT* gradient,int radial) { return swf_ShapeAddFillStyle(s,radial?FILL_RADIAL:FILL_LINEAR,m,NULL,0,gradient); } int swf_ShapeAddLineStyle(SHAPE * s,U16 width,RGBA * color) { RGBA def; if (!s) return -1; if (!color) { color = &def; def.a = 0xff; def.r = def.g = def.b = 0; } if (s->linestyle.data) { LINESTYLE * xnew = (LINESTYLE *)rfx_realloc(s->linestyle.data,(s->linestyle.n+1)*sizeof(LINESTYLE)); if (!xnew) return -1; s->linestyle.data = xnew; } else { s->linestyle.data = (LINESTYLE *)rfx_alloc(sizeof(LINESTYLE)); s->linestyle.n = 0; if (!s->linestyle.data) return -1; } s->linestyle.data[s->linestyle.n].width = width; memcpy(&s->linestyle.data[s->linestyle.n].color,color,sizeof(RGBA)); return (++s->linestyle.n); } int swf_ShapeSetMove(TAG * t,SHAPE * s,S32 x,S32 y) { U8 b; if (!t) return -1; swf_SetBits(t,0,1); swf_SetBits(t,SF_MOVETO,5); b = swf_CountBits(x,0); b = swf_CountBits(y,b); if(b>31) { fprintf(stderr, "Warning: bad moveTo (%f,%f)\n", x/20.0, y/20.0); b=31; } swf_SetBits(t,b,5); swf_SetBits(t,x,b); swf_SetBits(t,y,b); return 0; } int swf_ShapeSetStyle(TAG * t,SHAPE * s,int line,int fill0,int fill1) { if ((!t)||(!s)) return -1; swf_SetBits(t,0,1); swf_SetBits(t,(line?SF_LINE:0)|(fill0?SF_FILL0:0)|(fill1?SF_FILL1:0),5); if (fill0) swf_SetBits(t,fill0,s->bits.fill); if (fill1) swf_SetBits(t,fill1,s->bits.fill); if (line) swf_SetBits(t,line ,s->bits.line); return 0; } /* TODO: sometimes we want to set fillstyle 0, as that's the empty fill used for line drawings. At the moment, we can't, as 0 fill be considered nonexistent and therefore not set. these defines are a workaround (they also reduce the maximal number of fill styles to 32768) */ #define UNDEFINED_COORD 0x7fffffff int swf_ShapeSetAll(TAG * t,SHAPE * s,S32 x,S32 y,int line,int fill0,int fill1) { U8 b; U8 hasmove = 0; if ((!t)||(!s)) return -1; if(x!=UNDEFINED_COORD || y!=UNDEFINED_COORD) hasmove=1; swf_SetBits(t,0,1); swf_SetBits(t,(hasmove?SF_MOVETO:0)|(line?SF_LINE:0)|(fill0?SF_FILL0:0)|(fill1?SF_FILL1:0),5); if(hasmove) { b = swf_CountBits(x,0); b = swf_CountBits(y,b); swf_SetBits(t,b,5); swf_SetBits(t,x,b); swf_SetBits(t,y,b); } if (fill0) swf_SetBits(t,fill0,s->bits.fill); if (fill1) swf_SetBits(t,fill1,s->bits.fill); if (line) swf_SetBits(t,line ,s->bits.line); return 0; } int swf_ShapeSetEnd(TAG * t) { if (!t) return -1; swf_SetBits(t,0,6); swf_ResetWriteBits(t); return 0; } int swf_ShapeSetLine(TAG * t,SHAPE * s,S32 x,S32 y) { U8 b; if (!t) return -1; b = swf_CountBits(x,2); b = swf_CountBits(y,b); if (b<2) b=2; if(b >= 18) { if(b > 18 + 6) { /* do not split into more than 64 segments. If the line is *that* long, something's broken */ fprintf(stderr, "Warning: Line to %.2f,%.2f is too long (%d bits)\n", (double)x,(double)y, b); return -1; } else { /* split line */ int x1,y1,x2,y2; if(x>=0) { x1 = x/2;x2 = (x+1)/2;} else { x1 = x/2;x2 = (x-1)/2;} if(y>=0) { y1 = y/2;y2 = (y+1)/2;} else { y1 = y/2;y2 = (y-1)/2;} swf_ShapeSetLine(t, s, x1,y1); swf_ShapeSetLine(t, s, x2,y2); return 0; } } if(x!=0 && y!=0) { //(!s)||((x!=0)&&(y!=0))) swf_SetBits(t,3,2); // Straight Edge swf_SetBits(t, b-2, 4); //Number of Bits in x/y swf_SetBits(t,1,1); // Diagonal swf_SetBits(t,x,b); swf_SetBits(t,y,b); } else if (x==0) { swf_SetBits(t,3,2); // Straight Edge swf_SetBits(t, b-2, 4); //Number of Bits in y swf_SetBits(t,1,2); // Vertical swf_SetBits(t,y,b); } else { swf_SetBits(t,3,2); // Straight Edge swf_SetBits(t, b-2, 4); //Number of Bits in x swf_SetBits(t,0,2); // Horizontal swf_SetBits(t,x,b); } return 0; } int swf_ShapeSetCurve(TAG * t,SHAPE * s,S32 x,S32 y,S32 ax,S32 ay) { U8 b; if (!t) return -1; b = swf_CountBits(ax,2); b = swf_CountBits(ay,b); b = swf_CountBits(x,b); b = swf_CountBits(y,b); if(b >= 18) { fprintf(stderr, "Bit overflow in swf_ShapeSetCurve- %d (%d,%d,%d,%d)\n", b, ax,ay,x,y); return swf_ShapeSetLine(t, s, x+ax, y+ay); } swf_SetBits(t,2,2); swf_SetBits(t,b-2,4); swf_SetBits(t,x,b); swf_SetBits(t,y,b); swf_SetBits(t,ax,b); swf_SetBits(t,ay,b); return 0; } int swf_ShapeSetCircle(TAG * t,SHAPE * s,S32 x,S32 y,S32 rx,S32 ry) { double C1 = 0.2930; double C2 = 0.4140; double begin = 0.7070; if (!t) return -1; swf_ShapeSetMove(t,s,x+begin*rx,y+begin*ry); swf_ShapeSetCurve(t,s, -C1*rx, C1*ry, -C2*rx, 0); swf_ShapeSetCurve(t,s, -C2*rx, 0, -C1*rx, -C1*ry); swf_ShapeSetCurve(t,s, -C1*rx, -C1*ry, 0, -C2*ry); swf_ShapeSetCurve(t,s, 0, -C2*ry, C1*rx, -C1*ry); swf_ShapeSetCurve(t,s, C1*rx, -C1*ry, C2*rx, 0); swf_ShapeSetCurve(t,s, C2*rx, 0, C1*rx, C1*ry); swf_ShapeSetCurve(t,s, C1*rx, C1*ry, 0, C2*ry); swf_ShapeSetCurve(t,s, 0, C2*ry, -C1*rx, C1*ry); return 0; } void dummycallback1(TAG*tag, int x, void*y) { } // from swftools.c: void enumerateUsedIDs_styles(TAG * tag, void (*callback)(TAG*, int, void*), void*callback_data, int num, int morph); static void parseFillStyle(FILLSTYLE*dest, TAG*tag, int num) { int type = swf_GetU8(tag); //type dest->type = type; if(type == 0) { /* plain color */ if(num >= 3) swf_GetRGBA(tag, &dest->color); else swf_GetRGB(tag, &dest->color); } else if(type == 0x10 || type == 0x11 || type == 0x12 || type == 0x13) { /* linear/radial gradient fill */ swf_ResetReadBits(tag); swf_GetMatrix(tag, &dest->m); swf_ResetReadBits(tag); swf_GetGradient(tag, &dest->gradient, num>=3?1:0); if(type == 0x13) swf_GetU16(tag); } else if(type == 0x40 || type == 0x41 || type == 0x42 || type == 0x43) { /* bitmap fill */ swf_ResetReadBits(tag); dest->id_bitmap = swf_GetU16(tag); //id swf_ResetReadBits(tag); //? swf_GetMatrix(tag, &dest->m); } else { fprintf(stderr, "rfxswf:swfshape.c Unknown fillstyle:0x%02x in tag %02d\n",type, tag->id); } } static int parseFillStyleArray(TAG*tag, SHAPE2*shape) { U16 count; int t; int num=0; int fillstylestart = shape->numfillstyles; int linestylestart = shape->numlinestyles; if(tag->id == ST_DEFINESHAPE) num = 1; else if(tag->id == ST_DEFINESHAPE2) num = 2; else if(tag->id == ST_DEFINESHAPE3) num = 3; else if(tag->id == ST_DEFINESHAPE4) num = 4; count = swf_GetU8(tag); if(count == 0xff && num>1) // defineshape2,3 only count = swf_GetU16(tag); shape->numfillstyles += count; if(shape->numfillstyles) { shape->fillstyles = (FILLSTYLE*)rfx_realloc(shape->fillstyles, sizeof(FILLSTYLE)*shape->numfillstyles); for(t=fillstylestart;tnumfillstyles;t++) { parseFillStyle(&shape->fillstyles[t], tag, num); } } swf_ResetReadBits(tag); count = swf_GetU8(tag); // line style array if(count == 0xff) count = swf_GetU16(tag); shape->numlinestyles += count; if(count) { shape->linestyles = (LINESTYLE*)rfx_realloc(shape->linestyles, sizeof(LINESTYLE)*shape->numlinestyles); /* TODO: should we start with 1 and insert a correct definition of the "built in" linestyle 0? */ for(t=linestylestart;tnumlinestyles;t++) { char fill = 0; shape->linestyles[t].width = swf_GetU16(tag); if(num >= 4) { U16 flags = swf_GetU16(tag); if((flags & 0x30) == 0x20) swf_GetU16(tag); // miter limit if(flags & 0x08) { fprintf(stderr, "Warning: Filled strokes parsing not yet fully supported\n"); fill = 1; } } if(fill) { FILLSTYLE f; parseFillStyle(&f, tag, num); shape->linestyles[t].color = f.color; } else { if(num >= 3) swf_GetRGBA(tag, &shape->linestyles[t].color); else swf_GetRGB(tag, &shape->linestyles[t].color); } } } return 1; } char swf_ShapeIsEmpty(SHAPE*s) { if(!s || !s->data) return 1; TAG _tag; TAG* tag = &_tag; memset(tag, 0, sizeof(TAG)); tag->data = s->data; tag->len = tag->memsize = (s->bitlen+7)/8; tag->pos = 0; while(1) { if(!swf_GetBits(tag, 1)) { U16 flags = swf_GetBits(tag, 5); if(!flags) break; if(flags&1) { //move int n = swf_GetBits(tag, 5); swf_GetSBits(tag, n); //x swf_GetSBits(tag, n); //y } if(flags&2) swf_GetBits(tag, s->bits.fill); if(flags&4) swf_GetBits(tag, s->bits.fill); if(flags&8) swf_GetBits(tag, s->bits.line); if(flags&16) {return 0;} } else { return 0; } } return 1; } /* todo: merge this with swf_GetSimpleShape */ static SHAPELINE* swf_ParseShapeData(U8*data, int bits, int fillbits, int linebits, int version, SHAPE2*shape2) { SHAPELINE _lines; SHAPELINE*lines = &_lines; TAG _tag; TAG* tag = &_tag; int fill0 = 0; int fill1 = 0; int line = 0; int x=0,y=0; int linestyleadd=0; int fillstyleadd=0; memset(tag, 0, sizeof(TAG)); tag->data = data; tag->len = tag->memsize = (bits+7)/8; tag->pos = 0; tag->id = version==1?ST_DEFINESHAPE:(version==2?ST_DEFINESHAPE2:(version==3?ST_DEFINESHAPE3:ST_DEFINESHAPE4)); lines->next = 0; while(1) { int flags; flags = swf_GetBits(tag, 1); if(!flags) { //style change flags = swf_GetBits(tag, 5); if(!flags) break; if(flags&1) { //move int n = swf_GetBits(tag, 5); x = swf_GetSBits(tag, n); //x y = swf_GetSBits(tag, n); //y } if(flags&2) fill0 = swf_GetBits(tag, fillbits) + fillstyleadd; if(flags&4) fill1 = swf_GetBits(tag, fillbits) + fillstyleadd; if(flags&8) line = swf_GetBits(tag, linebits) + linestyleadd; if(flags&16) { if(!shape2) { fprintf(stderr, "rfxswf: Error: Additional fillstyles not supported\n");fflush(stderr); enumerateUsedIDs_styles(tag, dummycallback1, 0, version, 0); } else { linestyleadd = shape2->numlinestyles; fillstyleadd = shape2->numfillstyles; if(!parseFillStyleArray(tag, shape2)) return 0; } fillbits = swf_GetBits(tag, 4); linebits = swf_GetBits(tag, 4); } if(flags&1) { //move lines->next = (SHAPELINE*)rfx_alloc(sizeof(SHAPELINE)); lines = lines->next; lines->type = moveTo; lines->x = x; lines->y = y; lines->sx = lines->sy = 0; lines->fillstyle0 = fill0; lines->fillstyle1 = fill1; lines->linestyle = line; lines->next = 0; } } else { flags = swf_GetBits(tag, 1); if(flags) { //straight edge int n = swf_GetBits(tag, 4) + 2; if(swf_GetBits(tag, 1)) { //line flag x += swf_GetSBits(tag, n); //delta x y += swf_GetSBits(tag, n); //delta y } else { int v=swf_GetBits(tag, 1); int d; d = swf_GetSBits(tag, n); //vert/horz if(v) y += d; else x += d; } lines->next = (SHAPELINE*)rfx_alloc(sizeof(SHAPELINE)); lines = lines->next; lines->type = lineTo; lines->x = x; lines->y = y; lines->sx = lines->sy = 0; lines->fillstyle0 = fill0; lines->fillstyle1 = fill1; lines->linestyle = line; lines->next = 0; } else { //curved edge int n = swf_GetBits(tag, 4) + 2; int x1,y1; x += swf_GetSBits(tag, n); y += swf_GetSBits(tag, n); x1 = x; y1 = y; x += swf_GetSBits(tag, n); y += swf_GetSBits(tag, n); lines->next = (SHAPELINE*)rfx_alloc(sizeof(SHAPELINE)); lines = lines->next; lines->type = splineTo; lines->sx = x1; lines->sy = y1; lines->x = x; lines->y = y; lines->fillstyle0 = fill0; lines->fillstyle1 = fill1; lines->linestyle = line; lines->next = 0; } } } return _lines.next; } SRECT swf_GetShapeBoundingBox(SHAPE2*shape2) { SRECT r; SHAPELINE*l = shape2->lines; int lastx=0,lasty=0; int valid = 0; r.xmin = r.ymin = SCOORD_MAX; r.xmax = r.ymax = SCOORD_MIN; while(l) { int t1; if(l->linestyle>0) { t1 = shape2->linestyles[l->linestyle - 1].width*3/2; } else { t1 = 0; } if(l->type == lineTo || l->type == splineTo) { valid = 1; if(lastx - t1 < r.xmin) r.xmin = lastx - t1; if(lasty - t1 < r.ymin) r.ymin = lasty - t1; if(lastx + t1 > r.xmax) r.xmax = lastx + t1; if(lasty + t1 > r.ymax) r.ymax = lasty + t1; if(l->x - t1 < r.xmin) r.xmin = l->x - t1; if(l->y - t1 < r.ymin) r.ymin = l->y - t1; if(l->x + t1 > r.xmax) r.xmax = l->x + t1; if(l->y + t1 > r.ymax) r.ymax = l->y + t1; if(l->type == splineTo) { if(l->sx - t1 < r.xmin) r.xmin = l->sx - t1; if(l->sy - t1 < r.ymin) r.ymin = l->sy - t1; if(l->sx + t1 > r.xmax) r.xmax = l->sx + t1; if(l->sy + t1 > r.ymax) r.ymax = l->sy + t1; } } lastx = l->x; lasty = l->y; l = l->next; } if(!valid) memset(&r, 0, sizeof(SRECT)); return r; } void swf_Shape2Free(SHAPE2 * s) { SHAPELINE*line = s->lines; s->lines = 0; while(line) { SHAPELINE*next = line->next; line->next = 0; rfx_free(line); line = next; } if(s->linestyles) { rfx_free(s->linestyles); s->linestyles = 0; } if(s->fillstyles) { rfx_free(s->fillstyles); s->fillstyles = 0; } if(s->bbox) { rfx_free(s->bbox); s->bbox = 0; } } SHAPE2* swf_Shape2Clone(SHAPE2 * s) { SHAPELINE*line = s->lines; SHAPELINE*prev = 0; SHAPE2*s2 = (SHAPE2*)rfx_alloc(sizeof(SHAPE2)); memcpy(s2,s,sizeof(SHAPE2)); s2->linestyles = (LINESTYLE*)rfx_alloc(sizeof(LINESTYLE)*s->numlinestyles); memcpy(s2->linestyles, s->linestyles, sizeof(LINESTYLE)*s->numlinestyles); s2->fillstyles = (FILLSTYLE*)rfx_alloc(sizeof(FILLSTYLE)*s->numfillstyles); memcpy(s2->fillstyles, s->fillstyles, sizeof(FILLSTYLE)*s->numfillstyles); while(line) { SHAPELINE*line2 = (SHAPELINE*)rfx_alloc(sizeof(SHAPELINE)); memcpy(line2, line, sizeof(SHAPELINE)); line2->next = 0; if(prev) prev->next = line2; else s2->lines = line2; prev = line2; line = line->next; } if(s->bbox) { s2->bbox = (SRECT*)rfx_alloc(sizeof(SRECT)); memcpy(s2->bbox, s->bbox, sizeof(SRECT)); } return s2; } SHAPE2* swf_ShapeToShape2(SHAPE*shape) { SHAPE2*shape2 = (SHAPE2*)rfx_calloc(sizeof(SHAPE2)); shape2->numlinestyles = shape->linestyle.n; if(shape2->numlinestyles) { shape2->linestyles = (LINESTYLE*)rfx_alloc(sizeof(LINESTYLE)*shape->linestyle.n); memcpy(shape2->linestyles, shape->linestyle.data, sizeof(LINESTYLE)*shape->linestyle.n); } shape2->numfillstyles = shape->fillstyle.n; if(shape2->numfillstyles) { shape2->fillstyles = (FILLSTYLE*)rfx_alloc(sizeof(FILLSTYLE)*shape->fillstyle.n); memcpy(shape2->fillstyles, shape->fillstyle.data, sizeof(FILLSTYLE)*shape->fillstyle.n); } shape2->lines = swf_ParseShapeData(shape->data, shape->bitlen, shape->bits.fill, shape->bits.line, 1, 0); shape2->bbox = 0; return shape2; }; void swf_ShapeSetBitmapRect(TAG*tag, U16 gfxid, int width, int height) { SHAPE*shape; MATRIX m; RGBA rgb; SRECT r; int lines = 0; int ls=0,fs; swf_ShapeNew(&shape); rgb.b = rgb.g = rgb.r = 0xff; if(lines) ls = swf_ShapeAddLineStyle(shape,20,&rgb); swf_GetMatrix(NULL,&m); m.sx = 20*65536; m.sy = 20*65536; fs = swf_ShapeAddBitmapFillStyle(shape,&m,gfxid,0); r.xmin = 0; r.ymin = 0; r.xmax = width*20; r.ymax = height*20; swf_SetRect(tag,&r); swf_SetShapeStyles(tag,shape); swf_ShapeCountBits(shape,NULL,NULL); swf_SetShapeBits(tag,shape); swf_ShapeSetAll(tag,shape,0,0,lines?ls:0,fs,0); swf_ShapeSetLine(tag,shape,width*20,0); swf_ShapeSetLine(tag,shape,0,height*20); swf_ShapeSetLine(tag,shape,-width*20,0); swf_ShapeSetLine(tag,shape,0,-height*20); swf_ShapeSetEnd(tag); swf_ShapeFree(shape); } void swf_ShapeSetRectangle(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba) { RGBA white={255,255,255,255}; if(!rgba) { rgba = &white; } SHAPE* s; swf_ShapeNew(&s); int fs = swf_ShapeAddSolidFillStyle(s, rgba); swf_SetU16(tag,shapeid); SRECT r; r.xmin = 0; r.xmax = 0; r.ymin = width; r.ymax = height; swf_SetRect(tag,&r); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,0,fs,0); swf_ShapeSetLine(tag,s,width,0); swf_ShapeSetLine(tag,s,0,height); swf_ShapeSetLine(tag,s,-width,0); swf_ShapeSetLine(tag,s,0,-height); swf_ShapeSetEnd(tag); swf_ShapeFree(s); } void swf_ShapeSetRectangleWithBorder(TAG*tag, U16 shapeid, int width, int height, RGBA*rgba, int linewidth, RGBA*linecolor) { RGBA white={255,255,255,255}; if(!rgba) { rgba = &white; } SHAPE* s; swf_ShapeNew(&s); int fs = swf_ShapeAddSolidFillStyle(s, rgba); int ls = swf_ShapeAddLineStyle(s, linewidth, linecolor); swf_SetU16(tag,shapeid); SRECT r; r.xmin = 0; r.xmax = 0; r.ymin = width; r.ymax = height; swf_SetRect(tag,&r); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,ls,fs,0); swf_ShapeSetLine(tag,s,width,0); swf_ShapeSetLine(tag,s,0,height); swf_ShapeSetLine(tag,s,-width,0); swf_ShapeSetLine(tag,s,0,-height); swf_ShapeSetEnd(tag); swf_ShapeFree(s); } void swf_Shape2ToShape(SHAPE2*shape2, SHAPE*shape) { TAG*tag = swf_InsertTag(0,0); SHAPELINE*l; int newx=0,newy=0,lastx=0,lasty=0,oldls=0,oldfs0=0,oldfs1=0; memset(shape, 0, sizeof(SHAPE)); shape->linestyle.n = shape2->numlinestyles; shape->linestyle.data = (LINESTYLE*)rfx_alloc(sizeof(LINESTYLE)*shape->linestyle.n); memcpy(shape->linestyle.data, shape2->linestyles, sizeof(LINESTYLE)*shape->linestyle.n); shape->fillstyle.n = shape2->numfillstyles; shape->fillstyle.data = (FILLSTYLE*)rfx_alloc(sizeof(FILLSTYLE)*shape->fillstyle.n); memcpy(shape->fillstyle.data, shape2->fillstyles, sizeof(FILLSTYLE)*shape->fillstyle.n); swf_ShapeCountBits(shape,NULL,NULL); l = shape2->lines; while(l) { int ls=0,fs0=0,fs1=0; if(l->type != moveTo) { if(oldls != l->linestyle) {oldls = ls = l->linestyle;if(!ls) ls=0x8000;} if(oldfs0 != l->fillstyle0) {oldfs0 = fs0 = l->fillstyle0;if(!fs0) fs0=0x8000;} if(oldfs1 != l->fillstyle1) {oldfs1 = fs1 = l->fillstyle1;if(!fs1) fs1=0x8000;} if(ls || fs0 || fs1 || newx!=0x7fffffff || newy!=0x7fffffff) { swf_ShapeSetAll(tag,shape,newx,newy,ls,fs0,fs1); newx = 0x7fffffff; newy = 0x7fffffff; } } if(l->type == lineTo) { swf_ShapeSetLine(tag,shape,l->x-lastx,l->y-lasty); } else if(l->type == splineTo) { swf_ShapeSetCurve(tag,shape, l->sx-lastx,l->sy-lasty, l->x-l->sx,l->y-l->sy); } if(l->type == moveTo) { newx = l->x; newy = l->y; } lastx = l->x; lasty = l->y; l = l->next; } swf_ShapeSetEnd(tag); shape->data = tag->data; shape->bitlen = tag->len*8; free(tag); } void swf_SetShape2(TAG*tag, SHAPE2*shape2) { SHAPE shape; swf_Shape2ToShape(shape2, &shape); swf_SetRect(tag,shape2->bbox); swf_SetShapeStyles(tag, &shape); //swf_ShapeCountBits(&shape,NULL,NULL); // done in swf_Shape2ToShape() swf_SetShapeBits(tag,&shape); swf_SetBlock(tag, shape.data, (shape.bitlen+7)/8); } void swf_ParseDefineShape(TAG*tag, SHAPE2*shape) { int num = 0, id; U16 fill,line; SHAPELINE*l; if(tag->id == ST_DEFINESHAPE) num = 1; else if(tag->id == ST_DEFINESHAPE2) num = 2; else if(tag->id == ST_DEFINESHAPE3) num = 3; else if(tag->id == ST_DEFINESHAPE4) num = 4; else { fprintf(stderr, "parseDefineShape must be called with a shape tag"); } swf_SetTagPos(tag, 0); id = swf_GetU16(tag); //id memset(shape, 0, sizeof(SHAPE2)); shape->bbox = (SRECT*)rfx_alloc(sizeof(SRECT)); swf_GetRect(tag, shape->bbox); if(num>=4) { SRECT r2; swf_ResetReadBits(tag); swf_GetRect(tag, &r2); // edge bounds U8 flags = swf_GetU8(tag); // flags, &1: contains scaling stroke, &2: contains non-scaling stroke } if(!parseFillStyleArray(tag, shape)) { return; } swf_ResetReadBits(tag); fill = (U16)swf_GetBits(tag,4); line = (U16)swf_GetBits(tag,4); if(!fill && !line) { fprintf(stderr, "fill/line bits are both zero\n"); } shape->lines = swf_ParseShapeData(&tag->data[tag->pos], (tag->len - tag->pos)*8, fill, line, num, shape); l = shape->lines; } static void free_lines(SHAPELINE* lines) { if (lines->next) free_lines(lines->next); free(lines); } void swf_RecodeShapeData(U8*data, int bitlen, int in_bits_fill, int in_bits_line, U8**destdata, U32*destbitlen, int out_bits_fill, int out_bits_line) { SHAPE2 s2; SHAPE s; SHAPELINE*line; memset(&s2, 0, sizeof(s2)); s2.lines = swf_ParseShapeData(data, bitlen, in_bits_fill, in_bits_line, 1, 0); s2.numfillstyles = out_bits_fill?1<<(out_bits_fill-1):0; s2.numlinestyles = out_bits_line?1<<(out_bits_line-1):0; s2.fillstyles = (FILLSTYLE*)rfx_calloc(sizeof(FILLSTYLE)*s2.numfillstyles); s2.linestyles = (LINESTYLE*)rfx_calloc(sizeof(LINESTYLE)*s2.numlinestyles); line = s2.lines; while(line) { if(line->fillstyle0 > s2.numfillstyles) line->fillstyle0 = 0; if(line->fillstyle1 > s2.numfillstyles) line->fillstyle1 = 0; if(line->linestyle > s2.numlinestyles) line->linestyle = 0; line = line->next; } swf_Shape2ToShape(&s2,&s); free_lines(s2.lines); free(s2.fillstyles); free(s2.linestyles); free(s.fillstyle.data); free(s.linestyle.data); *destdata = s.data; *destbitlen = s.bitlen; } swftools_0.9.2+git20130725.orig/lib/modules/swfrender.c0000644000175000017500000011061612216332640021711 0ustar gawaingawain/* swfrender.c functions for rendering swf content Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2004 Mederra Oy Copyright (c) 2004 Matthias Kramm 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 */ #include #include #include #include "../rfxswf.h" /* one bit flag: */ #define clip_type 0 #define fill_type 1 typedef struct _renderpoint { float x; U32 depth; SHAPELINE*shapeline; SHAPE2*s; } renderpoint_t; /* enum {clip_type, solidfill_type, texturefill_type, gradientfill_type} type; float fx; int x; U32 depth; U32 clipdepth; // solidfill; RGBA color; // texturefill bitmap_t* bitmap; // gradientfill gradient_t* gradient; // texture- & gradientfill; U32 x,y; U32 dx,dy; */ typedef struct _renderline { TAG*points; //incremented in 128 byte steps int num; U32 pending_clipdepth; } renderline_t; typedef struct _bitmap { int width; int height; RGBA*data; int id; struct _bitmap*next; } bitmap_t; typedef struct _renderbuf_internal { renderline_t*lines; bitmap_t*bitmaps; int antialize; int multiply; int width2,height2; int shapes; int ymin, ymax; RGBA* img; int* zbuf; } renderbuf_internal; #define DEBUG 0 static inline void add_pixel(RENDERBUF*dest, float x, int y, renderpoint_t*p) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; if(x >= i->width2 || y >= i->height2 || y<0) return; p->x = x; if(yymin) i->ymin = y; if(y>i->ymax) i->ymax = y; i->lines[y].num++; swf_SetBlock(i->lines[y].points, (U8*)p, sizeof(renderpoint_t)); } /* set this to 0.777777 or something if the "both fillstyles set while not inside shape" problem appears to often */ #define CUT 0.77887789 #define INT(x) ((int)((x)+16)-16) static void add_line(RENDERBUF*buf, double x1, double y1, double x2, double y2, renderpoint_t*p) { renderbuf_internal*i = (renderbuf_internal*)buf->internal; double diffx, diffy; double ny1, ny2, stepx; /* if(DEBUG&4) { int l = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)); printf(" l[%d - %.2f/%.2f -> %.2f/%.2f]\n", l, x1/20.0, y1/20.0, x2/20.0, y2/20.0); }*/ assert(p->shapeline); y1=y1*i->multiply; y2=y2*i->multiply; x1=x1*i->multiply; x2=x2*i->multiply; y1 = y1/20.0; y2 = y2/20.0; x1 = x1/20.0; x2 = x2/20.0; if(y2 < y1) { double x; double y; x = x1;x1 = x2;x2=x; y = y1;y1 = y2;y2=y; } diffx = x2 - x1; diffy = y2 - y1; ny1 = INT(y1)+CUT; ny2 = INT(y2)+CUT; if(ny1 < y1) { ny1 = INT(y1) + 1.0 + CUT; } if(ny2 >= y2) { ny2 = INT(y2) - 1.0 + CUT; } if(ny1 > ny2) return; stepx = diffx/diffy; x1 = x1 + (ny1-y1)*stepx; x2 = x2 + (ny2-y2)*stepx; { int posy=INT(ny1); int endy=INT(ny2); double posx=0; double startx = x1; while(posy<=endy) { float xx = (float)(startx + posx); add_pixel(buf, xx ,posy, p); posx+=stepx; posy++; } } } #define PI 3.14159265358979 static void add_solidline(RENDERBUF*buf, double x1, double y1, double x2, double y2, double width, renderpoint_t*p) { renderbuf_internal*i = (renderbuf_internal*)buf->internal; double dx = x2-x1; double dy = y2-y1; double sd; double d; int t; int segments; double lastx,lasty; double vx,vy; double xx,yy; /* Make sure the line is always at least one pixel wide */ #ifdef LINEMODE1 /* That's what Macromedia's Player does at least at zoom level >= 1. */ width += 20; #else /* That's what Macromedia's Player seems to do at zoom level 0. */ /* TODO: needs testing */ /* TODO: how does this interact with scaling? */ if(width * i->multiply < 20) width = 20 / i->multiply; #endif sd = (double)dx*(double)dx+(double)dy*(double)dy; d = sqrt(sd); if(!dx && !dy) { vx = 1; vy = 0; } else { vx = ( dy/d); vy = (-dx/d); } segments = (int)(width/2); if(segments < 2) segments = 2; segments = 8; vx=vx*width*0.5; vy=vy*width*0.5; xx = x2+vx; yy = y2+vy; add_line(buf, x1+vx, y1+vy, xx, yy, p); lastx = xx; lasty = yy; for(t=1;tx < b->x) return -1; if(a->x > b->x) return 1; return 0; } void swf_Render_Init(RENDERBUF*buf, int posx, int posy, int width, int height, int antialize, int multiply) { renderbuf_internal*i; int y; memset(buf, 0, sizeof(RENDERBUF)); buf->width = width*multiply; buf->height = height*multiply; buf->posx = posx; buf->posy = posy; buf->internal = (renderbuf_internal*)rfx_calloc(sizeof(renderbuf_internal)); i = (renderbuf_internal*)buf->internal; if(antialize < 1) antialize = 1; i->antialize = antialize; i->multiply = multiply*antialize; i->height2 = antialize*buf->height; i->width2 = antialize*buf->width; i->lines = (renderline_t*)rfx_alloc(i->height2*sizeof(renderline_t)); for(y=0;yheight2;y++) { memset(&i->lines[y], 0, sizeof(renderline_t)); i->lines[y].points = swf_InsertTag(0, 0); i->lines[y].num = 0; } i->zbuf = (int*)rfx_calloc(sizeof(int)*i->width2*i->height2); i->img = (RGBA*)rfx_calloc(sizeof(RGBA)*i->width2*i->height2); i->shapes = 0; i->ymin = 0x7fffffff; i->ymax = -0x80000000; } void swf_Render_SetBackground(RENDERBUF*buf, RGBA*img, int width, int height) { renderbuf_internal*i = (renderbuf_internal*)buf->internal; int x,xx,y,yy; int xstep=width*65536/i->width2; int ystep=height*65536/i->height2; if(i->shapes) { fprintf(stderr, "rfxswf: Warning: swf_Render_SetBackground() called after drawing shapes\n"); } for(y=0,yy=0;yheight2;y++,yy+=ystep) { RGBA*src = &img[(yy>>16) * width]; RGBA*line = &i->img[y * i->width2]; for(x=0,xx=0;xwidth2;x++,xx+=xstep) { line[x] = src[xx>>16]; } } } void swf_Render_SetBackgroundColor(RENDERBUF*buf, RGBA color) { swf_Render_SetBackground(buf, &color, 1, 1); } void swf_Render_AddImage(RENDERBUF*buf, U16 id, RGBA*img, int width, int height) { renderbuf_internal*i = (renderbuf_internal*)buf->internal; bitmap_t*bm = (bitmap_t*)rfx_calloc(sizeof(bitmap_t)); bm->id = id; bm->width = width; bm->height = height; bm->data = (RGBA*)rfx_alloc(width*height*4); memcpy(bm->data, img, width*height*4); bm->next = i->bitmaps; i->bitmaps = bm; } void swf_Render_ClearCanvas(RENDERBUF*dest) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; int y; for(y=0;yheight2;y++) { swf_ClearTag(i->lines[y].points); } memset(i->zbuf, 0, sizeof(int)*i->width2*i->height2); memset(i->img, 0, sizeof(RGBA)*i->width2*i->height2); } void swf_Render_Delete(RENDERBUF*dest) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; int y; bitmap_t*b = i->bitmaps; /* delete canvas */ rfx_free(i->zbuf); rfx_free(i->img); /* delete line buffers */ for(y=0;yheight2;y++) { swf_DeleteTag(0, i->lines[y].points); i->lines[y].points = 0; } /* delete bitmaps */ while(b) { bitmap_t*next = b->next; free(b->data);b->data=0; rfx_free(b); b = next; } rfx_free(i->lines); i->lines = 0; rfx_free(dest->internal); dest->internal = 0; } static SHAPE2* linestyle2fillstyle(SHAPE2*shape) { SHAPE2*s = (SHAPE2*)rfx_calloc(sizeof(SHAPE2)); int t; s->numfillstyles = shape->numlinestyles; s->fillstyles = (FILLSTYLE*)rfx_calloc(sizeof(FILLSTYLE)*shape->numlinestyles); s->lines = (SHAPELINE*)rfx_calloc(sizeof(SHAPELINE)*shape->numlinestyles); for(t=0;tnumlinestyles;t++) { s->lines[t].fillstyle0 = t+1; s->fillstyles[t].type = FILL_SOLID; s->fillstyles[t].color = shape->linestyles[t].color; } return s; } void swf_Process(RENDERBUF*dest, U32 clipdepth); double matrixsize(MATRIX*m) { double l1 = sqrt((m->sx /65536.0) * (m->sx /65536.0) + (m->r0 /65536.0) * (m->r0/65536.0) ); double l2 = sqrt((m->r1 /65536.0) * (m->r1 /65536.0) + (m->sy /65536.0) * (m->sy/65536.0) ); return sqrt(l1*l2); } void swf_RenderShape(RENDERBUF*dest, SHAPE2*shape, MATRIX*m, CXFORM*c, U16 _depth,U16 _clipdepth) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; SHAPELINE*line; int x=0,y=0; MATRIX mat = *m; SHAPE2* s2 = 0; SHAPE2* lshape = 0; renderpoint_t p, lp; U32 clipdepth; double widthmultiply = matrixsize(m); memset(&p, 0, sizeof(renderpoint_t)); memset(&lp, 0, sizeof(renderpoint_t)); clipdepth = _clipdepth? _clipdepth << 16 | 0xffff : 0; p.depth = _depth << 16; mat.tx -= dest->posx*20; mat.ty -= dest->posy*20; s2 = swf_Shape2Clone(shape); line = s2->lines; if(shape->numfillstyles) { int t; p.s = s2; /* multiply fillstyles matrices with placement matrix- important for texture and gradient fill */ for(t=0;tnumfillstyles;t++) { MATRIX nm; swf_MatrixJoin(&nm, &mat, &s2->fillstyles[t].m); /*nm.sx *= i->multiply; nm.sy *= i->multiply; nm.r0 *= i->multiply; nm.r1 *= i->multiply; nm.tx *= i->multiply; nm.ty *= i->multiply;*/ s2->fillstyles[t].m = nm; } } if(shape->numlinestyles) { lshape = linestyle2fillstyle(shape); lp.s = lshape; lp.depth = (_depth << 16)+1; } while(line) { int x1,y1,x2,y2,x3,y3; if(line->type == moveTo) { } else if(line->type == lineTo) { transform_point(&mat, x, y, &x1, &y1); transform_point(&mat, line->x, line->y, &x3, &y3); if(line->linestyle && ! clipdepth) { lp.shapeline = &lshape->lines[line->linestyle-1]; add_solidline(dest, x1, y1, x3, y3, shape->linestyles[line->linestyle-1].width * widthmultiply, &lp); lp.depth++; } if(line->fillstyle0 || line->fillstyle1) { assert(shape->numfillstyles); p.shapeline = line; add_line(dest, x1, y1, x3, y3, &p); } } else if(line->type == splineTo) { int c,t,parts,qparts; double xx,yy; transform_point(&mat, x, y, &x1, &y1); transform_point(&mat, line->sx, line->sy, &x2, &y2); transform_point(&mat, line->x, line->y, &x3, &y3); c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); xx=x1; yy=y1; parts = (int)(sqrt((float)c)/3); if(!parts) parts = 1; for(t=1;t<=parts;t++) { double nx = (double)(t*t*x3 + 2*t*(parts-t)*x2 + (parts-t)*(parts-t)*x1)/(double)(parts*parts); double ny = (double)(t*t*y3 + 2*t*(parts-t)*y2 + (parts-t)*(parts-t)*y1)/(double)(parts*parts); if(line->linestyle && ! clipdepth) { lp.shapeline = &lshape->lines[line->linestyle-1]; add_solidline(dest, xx, yy, nx, ny, shape->linestyles[line->linestyle-1].width * widthmultiply, &lp); lp.depth++; } if(line->fillstyle0 || line->fillstyle1) { assert(shape->numfillstyles); p.shapeline = line; add_line(dest, xx, yy, nx, ny, &p); } xx = nx; yy = ny; } } x = line->x; y = line->y; line = line->next; } swf_Process(dest, clipdepth); if(s2) { swf_Shape2Free(s2);rfx_free(s2);s2=0; } if(lshape) { swf_Shape2Free(lshape);rfx_free(lshape);lshape=0; } } static RGBA color_red = {255,255,0,0}; static RGBA color_white = {255,255,255,255}; static RGBA color_black = {255,0,0,0}; static void fill_clip(RGBA*line, int*z, int y, int x1, int x2, U32 depth) { int x = x1; if(x1>=x2) return; do { if(depth > z[x]) { z[x] = depth; } } while(++x>8; col.g = (col.g*col.a)>>8; col.b = (col.b*col.a)>>8; col.a = 255; do { if(depth >= z[x]) { line[x].r = ((line[x].r*ainv)>>8)+col.r; line[x].g = ((line[x].g*ainv)>>8)+col.g; line[x].b = ((line[x].b*ainv)>>8)+col.b; line[x].a = 255; z[x] = depth; } } while(++x= z[x]) { line[x] = col; z[x] = depth; } } while(++x255) return 255; else return v; } static void fill_bitmap(RGBA*line, int*z, int y, int x1, int x2, MATRIX*m, bitmap_t*b, int clipbitmap, U32 depth, double fmultiply) { int x = x1; double m11= m->sx*fmultiply/65536.0, m21= m->r1*fmultiply/65536.0; double m12= m->r0*fmultiply/65536.0, m22= m->sy*fmultiply/65536.0; double rx = m->tx*fmultiply/20.0; double ry = m->ty*fmultiply/20.0; double det = m11*m22 - m12*m21; if(fabs(det) < 0.0005) { /* x direction equals y direction- the image is invisible */ return; } det = 20.0/det; if(!b->width || !b->height) { fill_solid(line, z, y, x1, x2, color_red, depth); return; } do { if(depth >= z[x]) { RGBA col; int xx = (int)(( (x - rx) * m22 - (y - ry) * m21)*det); int yy = (int)((- (x - rx) * m12 + (y - ry) * m11)*det); int ainv; if(clipbitmap) { if(xx<0) xx=0; if(xx>=b->width) xx = b->width-1; if(yy<0) yy=0; if(yy>=b->height) yy = b->height-1; } else { xx %= b->width; yy %= b->height; if(xx<0) xx += b->width; if(yy<0) yy += b->height; } col = b->data[yy*b->width+xx]; ainv = 255-col.a; line[x].r = clamp(((line[x].r*ainv)>>8)+col.r); line[x].g = clamp(((line[x].g*ainv)>>8)+col.g); line[x].b = clamp(((line[x].b*ainv)>>8)+col.b); line[x].a = 255; z[x] = depth; } } while(++xsx*fmultiply/80, m21= m->r1*fmultiply/80; double m12= m->r0*fmultiply/80, m22= m->sy*fmultiply/80; double rx = m->tx*fmultiply/20.0; double ry = m->ty*fmultiply/20.0; double det = m11*m22 - m12*m21; if(fabs(det) < 0.0005) { /* x direction equals y direction- the image is invisible */ return; } det = 1.0/det; RGBA palette[512]; RGBA oldcol = g->rgba[0]; int r0 = g->ratios[0]*2; int t; for(t=0;tnum;t++) { int r1 = g->ratios[t]*2; RGBA newcol = g->rgba[t]; if(r0 == r1) continue; //printf("%d %d->%d %02x%02x%02x%02x->%02x%02x%02x%02x\n", // t, r0, r1, oldcol.r,oldcol.g,oldcol.b,oldcol.a, // newcol.r,newcol.g,newcol.b,newcol.a); double f = 1.0 / (r1-r0); double p0 = 1; double p1 = 0; int s; for(;r0<=r1;r0++) { palette[r0].r = oldcol.r*p0 + newcol.r*p1; palette[r0].g = oldcol.g*p0 + newcol.g*p1; palette[r0].b = oldcol.b*p0 + newcol.b*p1; palette[r0].a = oldcol.a*p0 + newcol.a*p1; p0 -= f; p1 += f; } oldcol = newcol; } for(t=r0;t<512;t++) palette[t] = oldcol; do { if(depth >= z[x]) { RGBA col; double xx = ( (x - rx) * m22 - (y - ry) * m21)*det; double yy = (- (x - rx) * m12 + (y - ry) * m11)*det; if(type == FILL_LINEAR) { int xr = xx*256; if(xr<-256) xr = -256; if(xr>255) xr = 255; col = palette[xr+256]; } else { int xr = sqrt(xx*xx+yy*yy)*511; if(xr<0) xr = 0; if(xr>511) xr = 511; col = palette[xr]; } int ainv; ainv = 255-col.a; line[x].r = clamp(((line[x].r*ainv)>>8)+col.r); line[x].g = clamp(((line[x].g*ainv)>>8)+col.g); line[x].b = clamp(((line[x].b*ainv)>>8)+col.b); line[x].a = 255; z[x] = depth; } } while(++xinternal; int clip=1; layer_t*l = fillstate->layers; if(x1>=x2) //zero width? nothing to do. return; while(l) { if(l->fillid == 0) { /* not filled. TODO: we should never add those in the first place */ if(DEBUG&2) printf("(not filled)"); } else if(l->fillid > l->p->s->numfillstyles) { fprintf(stderr, "Fill style out of bounds (%d>%d)", l->fillid, l->p->s->numlinestyles); } else if(clipdepth) { /* filled region- not used for clipping */ clip = 0; } else { FILLSTYLE*f; if(DEBUG&2) printf("(%d -> %d style %d)", x1, x2, l->fillid); f = &l->p->s->fillstyles[l->fillid-1]; if(f->type == FILL_SOLID) { /* plain color fill */ fill_solid(line, zline, y, x1, x2, f->color, l->p->depth); } else if(f->type == FILL_TILED || f->type == FILL_CLIPPED || f->type == (FILL_TILED|2) || f->type == (FILL_CLIPPED|2)) { /* TODO: optimize (do this in add_pixel()?) */ bitmap_t* b = i->bitmaps; while(b && b->id != f->id_bitmap) { b = b->next; } if(!b) { fprintf(stderr, "Shape references unknown bitmap %d\n", f->id_bitmap); fill_solid(line, zline, y, x1, x2, color_red, l->p->depth); } else { fill_bitmap(line, zline, y, x1, x2, &f->m, b, /*clipped?*/f->type&1, l->p->depth, i->multiply); } } else if(f->type == FILL_LINEAR || f->type == FILL_RADIAL) { fill_gradient(line, zline, y, x1, x2, &f->m, &f->gradient, f->type, l->p->depth, i->multiply); } else { fprintf(stderr, "Undefined fillmode: %02x\n", f->type); } } l = l->next; } if(clip && clipdepth) { fill_clip(line, zline, y, x1, x2, clipdepth); } } static void search_layer(state_t*state, int depth, layer_t**before, layer_t**self, layer_t**after) { layer_t*last=0,*l = state->layers; while(l && l->p->depth < depth) { last = l; l = l->next; } *before = last; if(l && l->p->depth == depth) *self = l; else *after = l; } static void delete_layer(state_t*state, layer_t*todel) { layer_t*before=todel->prev; layer_t*next = todel->next; rfx_free(todel); if(!before) { state->layers = next; if(next) next->prev = 0; } else { before->next = next; if(before->next) before->next->prev = before; } } static void add_layer(state_t*state, layer_t*before, layer_t*toadd) { if(!before) { toadd->next = state->layers; toadd->prev = 0; state->layers=toadd; } else { toadd->next = before->next; toadd->prev = before; before->next = toadd; } if(toadd->next) toadd->next->prev = toadd; } static void free_layers(state_t* state) { layer_t*l = state->layers; while(l) { layer_t*next = l->next; rfx_free(l); l = next; } } static void change_state(int y, state_t* state, renderpoint_t*p) { layer_t*before=0, *self=0, *after=0; if(DEBUG&2) { printf("[(%f,%d)/%d/%d-%d]", p->x, y, p->depth, p->shapeline->fillstyle0, p->shapeline->fillstyle1); } search_layer(state, p->depth, &before, &self, &after); if(self) { /* shape update */ if(self->fillid<0/*??*/ || !p->shapeline->fillstyle0 || !p->shapeline->fillstyle1) { /* filling ends */ if(DEBUG&2) printf(""); delete_layer(state, self); } else { /*both fill0 and fill1 are set- exchange the two, updating the layer */ if(self->fillid == p->shapeline->fillstyle0) { self->fillid = p->shapeline->fillstyle1; self->p = p; if(DEBUG&2) printf(""); } else if(self->fillid == p->shapeline->fillstyle1) { self->fillid = p->shapeline->fillstyle0; self->p = p; if(DEBUG&2) printf(""); } else { /* buggy shape. keep everything as-is. */ if(DEBUG&2) printf(""); //fprintf(stderr, "\n", y); } } return; } else { layer_t* n = 0; if(p->shapeline && p->shapeline->fillstyle0 && p->shapeline->fillstyle1) { /* this is a hack- a better way would be to make sure that we always get (0,32), (32, 33), (33, 0) in the right order if they happen to fall on the same pixel. (not: (0,32), (33, 0), (32, 33)) Notice: Weird fill styles appear if linestyles are involved, too. */ fprintf(stderr, "\n", y); return; } n = (layer_t*)rfx_calloc(sizeof(layer_t)); if(DEBUG&2) printf("<+>"); n->fillid = p->shapeline->fillstyle0 ? p->shapeline->fillstyle0 : p->shapeline->fillstyle1; n->p = p; add_layer(state, before, n); } } void swf_Process(RENDERBUF*dest, U32 clipdepth) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; int y; if(i->ymax < i->ymin) { /* shape is empty. return. only, if it's a clipshape, remember the clipdepth */ if(clipdepth) { for(y=0;yheight2;y++) { if(clipdepth > i->lines[y].pending_clipdepth) i->lines[y].pending_clipdepth = clipdepth; } } return; //nothing (else) to do } if(clipdepth) { /* lines outside the clip shape are not filled immediately, only the highest clipdepth so far is stored there. They will be clipfilled once there's actually something about to happen in that line */ for(y=0;yymin;y++) { if(clipdepth > i->lines[y].pending_clipdepth) i->lines[y].pending_clipdepth = clipdepth; } for(y=i->ymax+1;yheight2;y++) { if(clipdepth > i->lines[y].pending_clipdepth) i->lines[y].pending_clipdepth = clipdepth; } } for(y=i->ymin;y<=i->ymax;y++) { int n; TAG*tag = i->lines[y].points; int num = i->lines[y].num; renderpoint_t*points = (renderpoint_t*)tag->data; RGBA*line = &i->img[i->width2*y]; int*zline = &i->zbuf[i->width2*y]; int lastx = 0; state_t fillstate; memset(&fillstate, 0, sizeof(state_t)); qsort(points, num, sizeof(renderpoint_t), compare_renderpoints); /* resort points */ /*if(y==884) { for(n=0;nfillstyle0, points[n].shapeline->fillstyle1, points[n].shapeline->linestyle); } }*/ if(i->lines[y].pending_clipdepth && !clipdepth) { fill_clip(line, zline, y, 0, i->width2, i->lines[y].pending_clipdepth); i->lines[y].pending_clipdepth=0; } for(n=0;nx; int endx = (int)(next?next->x:i->width2); if(endx > i->width2) endx = i->width2; if(startx < 0) startx = 0; if(endx < 0) endx = 0; if(clipdepth) { /* for clipping, the inverse is filled TODO: lastx!=startx only at the start of the loop, so this might be moved up */ fill_clip(line, zline, y, lastx, startx, clipdepth); } change_state(y, &fillstate, p); fill(dest, line, zline, y, startx, endx, &fillstate, clipdepth); /* if(y == 0 && startx == 232 && endx == 418) { printf("ymin=%d ymax=%d\n", i->ymin, i->ymax); for(n=0;nx, p->depth); } }*/ lastx = endx; if(endx == i->width2) break; } if(clipdepth) { /* TODO: is lastx *ever* != i->width2 here? */ fill_clip(line, zline, y, lastx, i->width2, clipdepth); } free_layers(&fillstate); i->lines[y].num = 0; swf_ClearTag(i->lines[y].points); } i->ymin = 0x7fffffff; i->ymax = -0x80000000; } RGBA* swf_Render(RENDERBUF*dest) { renderbuf_internal*i = (renderbuf_internal*)dest->internal; RGBA* img = (RGBA*)rfx_alloc(sizeof(RGBA)*dest->width*dest->height); int y; int antialize = i->antialize; if(antialize <= 1) /* no antializing */ { for(y=0;yheight2;y++) { RGBA*line = &i->img[y*i->width2]; memcpy(&img[y*dest->width], line, sizeof(RGBA)*dest->width); } } else { RGBA**lines = (RGBA**)rfx_calloc(sizeof(RGBA*)*antialize); int q = antialize*antialize; int ypos = 0; for(y=0;yheight2;y++) { int n; ypos = y % antialize; lines[ypos] = &i->img[y*i->width2]; if(ypos == antialize-1) { RGBA*out = &img[(y / antialize)*dest->width]; int x; int r,g,b,a; for(x=0;xwidth;x++) { int xpos = x*antialize; int yp; U32 r=0,g=0,b=0,a=0; for(yp=0;ypr; g += p->g; b += p->b; a += p->a; } } out[x].r = r / q; out[x].g = g / q; out[x].b = b / q; out[x].a = a / q; } } } rfx_free(lines); } return img; } typedef struct { int numchars; SHAPE2**glyphs; } font_t; enum CHARACTER_TYPE {none_type, shape_type, image_type, text_type, edittext_type, font_type, sprite_type}; typedef struct { TAG*tag; SRECT*bbox; enum CHARACTER_TYPE type; union { SHAPE2*shape; font_t*font; } obj; } character_t; int compare_placements(const void *v1, const void *v2) { SWFPLACEOBJECT*p1 = (SWFPLACEOBJECT*)v1; SWFPLACEOBJECT*p2 = (SWFPLACEOBJECT*)v2; if(p1->depth != p2->depth) return (int)p1->depth - (int)p2->depth; else if(p2->clipdepth) return 1; // do the clip first else return -1; /* if(!p1->clipdepth) { if(!p2->clipdepth) { // !p1->clipdepth && !p2->clipdepth return (int)p1->depth - (int)p2->depth; } else { // !p1->clipdepth && p2->clipdepth if(p1->depth != p2->clipdepth) return (int)p1->depth - (int)p2->clipdepth; else return 1; // do the clip first } } else { if(!p2->clipdepth) { // p1->clipdepth && !p2->clipdepth if(p1->clipdepth != p2->depth) return (int)p1->clipdepth - (int)p2->depth; else return -1;// do the clip first } else { if(p1->clipdepth != p2->clipdepth) return (int)p1->clipdepth - (int)p2->clipdepth; else return (int)p1->depth - (int)p2->depth; } }*/ } typedef struct textcallbackblock { character_t*idtable; U16 depth; U16 clipdepth; CXFORM* cxform; MATRIX m; RENDERBUF*buf; } textcallbackblock_t; static void textcallback(void*self, int*chars, int*xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA* color) { textcallbackblock_t * info = (textcallbackblock_t*)self; font_t*font = 0; int t; if(info->idtable[fontid].type != font_type) { fprintf(stderr, "ID %d is not a font\n", fontid); return; } else if(!info->idtable[fontid].obj.font) { fprintf(stderr, "Font %d unknown\n", fontid); return; } else { font = info->idtable[fontid].obj.font; } for(t=0;tm; SPOINT p; p.x = x; p.y = y; p = swf_TurnPoint(p, &m); m.sx = (m.sx * fontsize) / 1024; m.sy = (m.sy * fontsize) / 1024; m.r0 = (m.r0 * fontsize) / 1024; m.r1 = (m.r1 * fontsize) / 1024; m.tx = p.x; m.ty = p.y; if(chars[t]<0 || chars[t]>= font->numchars) { fprintf(stderr, "Character out of range: %d\n", chars[t]); } else { SHAPE2*shape = font->glyphs[chars[t]]; shape->fillstyles[0].color = *color; //q&d /*printf("Rendering char %d (size %d, x:%d, y:%d) color:%02x%02x%02x%02x\n", chars[t], fontsize, x, y, color->a, color->r, color->g, color->b); swf_DumpMatrix(stdout, &m); swf_DumpShape(shape);*/ swf_RenderShape(info->buf, shape, &m, info->cxform, info->depth, info->clipdepth); } } } static void renderFromTag(RENDERBUF*buf, character_t*idtable, TAG*firstTag, MATRIX*m) { TAG*tag = 0; int numplacements = 0; SWFPLACEOBJECT* placements; tag = firstTag; numplacements = 0; while(tag) { if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { numplacements++; } if(tag->id == ST_SHOWFRAME || tag->id == ST_END) break; tag = tag->next; } placements = (SWFPLACEOBJECT*)rfx_calloc(sizeof(SWFPLACEOBJECT)*numplacements); numplacements = 0; tag = firstTag; while(tag) { if(swf_isPlaceTag(tag)) { SWFPLACEOBJECT p; swf_GetPlaceObject(tag, &p); /* TODO: add move and deletion */ placements[numplacements++] = p; swf_PlaceObjectFree(&p); //dirty! but it only frees fields we don't use } if(tag->id == ST_SHOWFRAME || tag->id == ST_END) break; tag = tag->next; } qsort(placements, numplacements, sizeof(SWFPLACEOBJECT), compare_placements); int t; for(t=0;tid; MATRIX m2; swf_MatrixJoin(&m2, m, &p->matrix); if(!idtable[id].tag) { fprintf(stderr, "rfxswf: Id %d is unknown\n", id); continue; } if(idtable[id].type == shape_type) { //SRECT sbbox = swf_TurnRect(*idtable[id].bbox, &p->matrix); swf_RenderShape(buf, idtable[id].obj.shape, &m2, &p->cxform, p->depth, p->clipdepth); } else if(idtable[id].type == sprite_type) { swf_UnFoldSprite(idtable[id].tag); renderFromTag(buf, idtable, idtable[id].tag->next, &m2); swf_FoldSprite(idtable[id].tag); } else if(idtable[id].type == text_type) { TAG* tag = idtable[id].tag; textcallbackblock_t info; MATRIX mt; swf_SetTagPos(tag, 0); swf_GetU16(tag); swf_GetRect(tag,0); swf_GetMatrix(tag,&mt); swf_MatrixJoin(&info.m, &m2, &mt); /*printf("Text matrix:\n"); swf_DumpMatrix(stdout, &m); printf("Placement matrix:\n"); swf_DumpMatrix(stdout, &p->matrix); printf("Final matrix:\n"); swf_DumpMatrix(stdout, &info.m);*/ info.idtable = idtable; info.depth = p->depth; info.cxform = &p->cxform; info.clipdepth = p->clipdepth; info.buf = buf; swf_ParseDefineText(tag, textcallback, &info); } else if(idtable[id].type == edittext_type) { TAG* tag = idtable[id].tag; U16 flags = swf_GetBits(tag, 16); if(flags & ET_HASTEXT) { fprintf(stderr, "edittext not supported yet (id %d)\n", id); } } else { fprintf(stderr, "Unknown/Unsupported Object Type for id %d: %s\n", id, swf_TagGetName(idtable[id].tag)); } } free(placements); } void swf_RenderSWF(RENDERBUF*buf, SWF*swf) { TAG*tag; int t; RGBA color; swf_OptimizeTagOrder(swf); swf_FoldAll(swf); character_t* idtable = (character_t*)rfx_calloc(sizeof(character_t)*65536); // id to character mapping /* set background color */ color = swf_GetSWFBackgroundColor(swf); swf_Render_SetBackgroundColor(buf, color); /* parse definitions */ tag = swf->firstTag; while(tag) { if(swf_isDefiningTag(tag)) { int id = swf_GetDefineID(tag); idtable[id].tag = tag; idtable[id].bbox = (SRECT*)rfx_alloc(sizeof(SRECT)); *idtable[id].bbox = swf_GetDefineBBox(tag); if(swf_isShapeTag(tag)) { SHAPE2* shape = (SHAPE2*)rfx_calloc(sizeof(SHAPE2)); swf_ParseDefineShape(tag, shape); idtable[id].type = shape_type; idtable[id].obj.shape = shape; } else if(swf_isImageTag(tag)) { int width,height; RGBA*data = swf_ExtractImage(tag, &width, &height); idtable[id].type = image_type; swf_Render_AddImage(buf, id, data, width, height); free(data); } else if(tag->id == ST_DEFINEFONT || tag->id == ST_DEFINEFONT2) { int t; SWFFONT*swffont; font_t*font = (font_t*)rfx_calloc(sizeof(font_t)); idtable[id].obj.font = font; swf_FontExtract(swf,id,&swffont); font->numchars = swffont->numchars; font->glyphs = (SHAPE2**)rfx_calloc(sizeof(SHAPE2*)*font->numchars); for(t=0;tnumchars;t++) { if(!swffont->glyph[t].shape->fillstyle.n) { /* the actual fill color will be overwritten while rendering */ swf_ShapeAddSolidFillStyle(swffont->glyph[t].shape, &color_white); } font->glyphs[t] = swf_ShapeToShape2(swffont->glyph[t].shape); } swf_FontFree(swffont); idtable[id].type = font_type; } else if(tag->id == ST_DEFINEFONTINFO || tag->id == ST_DEFINEFONTINFO2) { idtable[id].type = font_type; } else if(tag->id == ST_DEFINETEXT || tag->id == ST_DEFINETEXT2) { idtable[id].type = text_type; } else if(tag->id == ST_DEFINESPRITE) { idtable[id].type = sprite_type; } else if(tag->id == ST_DEFINEEDITTEXT) { idtable[id].type = edittext_type; } } tag = tag->next; } MATRIX m; swf_GetMatrix(0, &m); renderFromTag(buf, idtable, swf->firstTag, &m); /* free id and depth tables again */ for(t=0;t<65536;t++) { if(idtable[t].bbox) { free(idtable[t].bbox); idtable[t].bbox=0; } if(idtable[t].type == shape_type) { SHAPE2* shape = idtable[t].obj.shape; if(shape) { swf_Shape2Free(shape); // FIXME free(idtable[t].obj.shape);idtable[t].obj.shape = 0; } } else if(idtable[t].type == font_type) { font_t* font = idtable[t].obj.font; if(font) { if(font->glyphs) { int t; for(t=0;tnumchars;t++) { swf_Shape2Free(font->glyphs[t]); free(font->glyphs[t]); font->glyphs[t] = 0; } free(font->glyphs); font->glyphs = 0; } free(idtable[t].obj.font); idtable[t].obj.font = 0; font = 0; } } } free(idtable); } swftools_0.9.2+git20130725.orig/lib/modules/swfalignzones.c0000644000175000017500000002237112216332640022603 0ustar gawaingawain#include "../rfxswf.h" #include "../graphcut.c" #include "../log.h" static inline double sqr(double x) {return x*x;} static void draw_line(float*row, float x1, float x2, float y1, float y2, int min, int max, double weight) { if(x2max) { fprintf(stderr, "error: glyph x stroke out of bounds\n"); return; } x1 -= min; x2 -= min; double d = sqrt(sqr(y2-y1)+sqr(x2-x1)); if(floor(x1)==floor(x2)) { row[(int)floor(x1)] += d*weight; } else { double i = d/(x2-x1); int x; int xx1 = ceil(x1); int xx2 = floor(x2); row[xx1] += i*(xx1-x1)*weight; row[xx2] += i*(x2-xx2)*weight; for(x=xx1;xxmin, area->xmax, weight); draw_line(column, y1, y2, x1, x2, area->ymin, area->ymax, weight); } static void find_best(float*_row, int width, int*_x1, int*_x2, int min_size, int from, int to, int num, char debug) { int x1=-1, x2=-1; float max1=-1e20,max2=-1e20; int t; if(from==to) { *_x1 = from; return; } float*row = malloc(sizeof(float)*(width+1)); int filter_size = 25; float* filter = malloc(sizeof(float)*(filter_size*2+1)); double var = filter_size/3; double sum = 0; for(t=-filter_size;t<=filter_size;t++) { double v = t/var; float r = v*v/2; filter[filter_size+t] = exp(-r); sum += filter[filter_size+t]; } for(t=-filter_size;t<=filter_size;t++) { filter[filter_size+t]/=sum; } //filter[0]=1;filter_size=0; for(t=0;t<=width;t++) { int s; double sum = 0; for(s=-filter_size;s<=filter_size;s++) { if(t+s<0) continue; if(t+s>width) continue; sum += _row[t+s]*filter[s+filter_size]; } row[t] = sum; } free(filter); for(t=from;t<=to;t++) { if(row[t]>max1) { max1 = row[t]; x1 = t; } } if(num<=1) { *_x1=x1; } else { /* this code is slightly wrong, in that it assumes that the glyph distortion problem gets worse when the font sizes get smaller. it doesn't. in fact, the smaller the font size, the more of the scaling bugs disappear (http://www.quiss.org/files/scaletest.swf) A better way would probably to use the font size you need for the two alignzones to come to lie in different pixels, which what I think is what makes the problems appear/disappear. */ double scale = min_size/1024.0; for(t=from;t<=to;t++) { if(t==x1) { row[t]=-1e20; continue; } double r1 = (t=1 || add2>=1) { row[t]=-1e20; } } for(t=from;t<=to;t++) { if(row[t]>max2) { max2 = row[t]; x2 = t; } } if(x1>=0 && x2>=0 && x1>x2) {int x=x1;x1=x2;x2=x;} *_x1=x1; *_x2=x2; } free(row); } static void negate_y(SRECT* b) { // negate y int by1=b->ymin,by2=b->ymax; b->ymin = -by2; b->ymax = -by1; } static void draw_char(SWFFONT * f, int nr, float*row, float*column, SRECT b, double weight) { SWFGLYPH*g = &f->glyph[nr]; SHAPE2*s = swf_ShapeToShape2(g->shape); SHAPELINE*l = s->lines; int x=0,y=0; while(l) { if(l->type == lineTo) { draw_line_xy(row,column,x,-y,l->x,-l->y,&b,weight); } else if(l->type == splineTo) { double x1=x,x2=l->sx,x3=l->x; double y1=y,y2=l->sy,y3=l->y; double c = fabs(x3-2*x2+x1) + fabs(y3-2*y2+y1); int parts = ((int)(sqrt(c)/6))*2+1; float xx=x1,yy=y1; int t; for(t=1;t<=parts;t++) { float nx = ((t*t*x3 + 2*t*(parts-t)*x2 + (parts-t)*(parts-t)*x1)/(double)(parts*parts)); float ny = ((t*t*y3 + 2*t*(parts-t)*y2 + (parts-t)*(parts-t)*y1)/(double)(parts*parts)); draw_line_xy(row,column,xx,-yy,nx,-ny,&b,weight); xx = nx; yy = ny; } } x = l->x; y = l->y; l = l->next; } swf_Shape2Free(s); free(s); } static ALIGNZONE detect_for_char(SWFFONT * f, float*row, float*column, SRECT font_bbox, SRECT char_bbox) { ALIGNZONE a = {0xffff,0xffff,0xffff,0xffff}; int width = font_bbox.xmax - font_bbox.xmin; int height = font_bbox.ymax - font_bbox.ymin; if(!width || !height) return a; /* find two best x values */ int x1=-1,y1=-1,x2=-1,y2=-1; int nr_x = 0; find_best(row, width, &x1, &x2, f->use->smallest_size, char_bbox.xmin - font_bbox.xmin, char_bbox.xmax - font_bbox.xmin, nr_x, 0); if(nr_x>0 && x1>=0) a.x = floatToF16((x1+font_bbox.xmin) / 20480.0); if(nr_x>1 && x2>=0) a.dx = floatToF16((x2-x1) / 20480.0); find_best(column, height, &y1, &y2, f->use->smallest_size, char_bbox.ymin - font_bbox.ymin, char_bbox.ymax - font_bbox.ymin, 2, 0); if(y1>=0) a.y = floatToF16((y1+font_bbox.ymin) / 20480.0); if(y2>=0) a.dy = floatToF16((y2-y1) / 20480.0); return a; } static graph_t*make_graph(SWFFONT*f) { FONTUSAGE*use = f->use; graph_t*g = graph_new(f->numchars); int s,t; for(s=1;snumchars;s++) { for(t=0;tglyph2ascii) { int c1 = f->glyph2ascii[s]; int c2 = f->glyph2ascii[t]; if((c1<'a' && c2>='a' && c2<='z') || (c2<'a' && c1>='a' && c1<='z')) { /* never connect lowercase with any uppercase or punctuation */ continue; } } int pos1 = swf_FontUseGetPair(f, s, t); int pos2 = swf_FontUseGetPair(f, t, s); if(pos1 || pos2) { int weight1 = pos1?use->neighbors[pos1-1].num:0; int weight2 = pos2?use->neighbors[pos2-1].num:0; int weight = weight1+weight2; /*printf("font %d: pair %c and %c\n", f->id, f->glyph2ascii[t], f->glyph2ascii[s]);*/ graph_add_edge(&g->nodes[s], &g->nodes[t], weight, weight); } } } return g; } void swf_FontCreateAlignZones(SWFFONT * f) { if(f->alignzones) return; if(!f->layout) { fprintf(stderr, "Error: font needs a layout for alignzones to be detected."); return; } f->alignzones = (ALIGNZONE*)rfx_calloc(sizeof(ALIGNZONE)*f->numchars); f->alignzone_flags = FONTALIGN_MEDIUM; if(!f->layout || !f->use) { int t; for(t=0;tnumchars;t++) { // just align the baseline f->alignzones[t].x = 0xffff; f->alignzones[t].y = 0; f->alignzones[t].dx = 0xffff; f->alignzones[t].dy = 0xffff;//floatToF16(460.80 / 1024.0); } } else { graph_t*g = make_graph(f); int num_components = graph_find_components(g); msg(" Building font alignzone information for font %d (%d characters, %d components, %d pairs)\n", f->id, f->numchars, num_components, f->use->num_neighbors); SRECT bounds = {0,0,0,0}; int t; for(t=0;tnumchars;t++) { SRECT b = f->layout->bounds[t]; negate_y(&b); swf_ExpandRect2(&bounds, &b); } int width = bounds.xmax - bounds.xmin; int height = bounds.ymax - bounds.ymin; float*row = rfx_calloc(sizeof(float)*(width+1)); float*global_column = rfx_calloc(sizeof(float)*(height+1)); float*column = rfx_calloc(sizeof(float)*(height+1)); const double SELF_WEIGHT = 0.00; // ignore own char int c; for(c=0;cnumchars;t++) { if(g->nodes[t].tmp == c) { draw_char(f, t, row, global_column, bounds, 1.0-SELF_WEIGHT); SRECT b = f->layout->bounds[t]; negate_y(&b); swf_ExpandRect2(&local_bounds, &b); drawn++; } } for(t=0;t<=height;t++) { global_column[t] /= drawn; } memcpy(column, global_column, sizeof(float)*(height+1)); memset(row, 0, sizeof(float)*(width+1)); ALIGNZONE a = detect_for_char(f, row, column, bounds, local_bounds); for(t=0;tnumchars;t++) { if(g->nodes[t].tmp == c) { f->alignzones[t] = a; } } } free(row); free(column); free(global_column); graph_delete(g); } } void swf_FontPostprocess(SWF*swf) { TAG*tag = swf->firstTag; while(tag) { TAG*next = tag->next; if(tag->id == ST_DEFINEFONT3) { U16 id = swf_GetDefineID(tag); SWFFONT*font = 0; swf_FontExtract(swf, id, &font); if(!font->alignzones) { swf_FontCreateAlignZones(font); tag = swf_InsertTag(tag, ST_DEFINEFONTALIGNZONES); swf_FontSetAlignZones(tag, font); } swf_FontFree(font); } tag = next; } } void swf_FontSetAlignZones(TAG*t, SWFFONT *f) { swf_SetU16(t, f->id); swf_SetU8(t, f->alignzone_flags); int i; for(i=0;inumchars;i++) { ALIGNZONE*a = &f->alignzones[i]; U8 flags = 0; if((a->x & a->dx)!=0xffff) flags |= 1; if((a->y & a->dy)!=0xffff) flags |= 2; int num = 1; if(a->dx != 0xffff || a->dy != 0xffff) num++; swf_SetU8(t, num); if(flags&1) swf_SetU16(t, a->x); else swf_SetU16(t, 0); if(flags&2) swf_SetU16(t, a->y); else swf_SetU16(t, 0); if(num==2) { if((flags&1) && a->dx!=0xffff) swf_SetU16(t, a->dx); else swf_SetU16(t, 0); if((flags&2) && a->dy!=0xffff) swf_SetU16(t, a->dy); else swf_SetU16(t, 0); } swf_SetU8(t, flags); } } swftools_0.9.2+git20130725.orig/lib/modules/swftext.c0000644000175000017500000015152312216332640021420 0ustar gawaingawain/* swftext.c Text and font routines Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2001 Rainer Böhme Copyright (c) 2003,2004,2005,2006,2007,2008,2009 Matthias Kramm 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 */ #include "../rfxswf.h" U32 readUTF8char(U8 ** text) { U32 c = 0; if (!(*(*text) & 0x80)) return *((*text)++); /* 0000 0080-0000 07FF 110xxxxx 10xxxxxx */ if (((*text)[0] & 0xe0) == 0xc0 && (*text)[1]) { c = ((*text)[0] & 0x1f) << 6 | ((*text)[1] & 0x3f); (*text) += 2; return c; } /* 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx */ if (((*text)[0] & 0xf0) == 0xe0 && (*text)[1] && (*text)[2]) { c = ((*text)[0] & 0x0f) << 12 | ((*text)[1] & 0x3f) << 6 | ((*text)[2] & 0x3f); (*text) += 3; return c; } /* 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ if (((*text)[0] & 0xf8) == 0xf0 && (*text)[1] && (*text)[2] && (*text)[3]) { c = ((*text)[0] & 0x07) << 18 | ((*text)[1] & 0x3f) << 12 | ((*text)[2] & 0x3f) << 6 | ((*text)[3] & 0x3f); (*text) += 4; return c; } /* 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ if (((*text)[0] & 0xfc) == 0xf8 && (*text)[1] && (*text)[2] && (*text)[3] && (*text)[4]) { c = ((*text)[0] & 0x03) << 24 | ((*text)[1] & 0x3f) << 18 | ((*text)[2] & 0x3f) << 12 | ((*text)[3] & 0x3f) << 6 | ((*text)[4] & 0x3f); (*text) += 5; return c; } /* 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx */ if (((*text)[0] & 0xfe) == 0xfc && (*text)[1] && (*text)[2] && (*text)[3] && (*text)[4] && (*text)[5]) { c = ((*text)[0] & 0x01) << 30 | ((*text)[1] & 0x3f) << 24 | ((*text)[2] & 0x3f) << 18 | ((*text)[3] & 0x3f) << 12 | ((*text)[4] & 0x3f) << 6 | ((*text)[5] & 0x3f) << 6; (*text) += 6; return c; } return *((*text)++); } #define TF_TEXTCONTROL 0x80 #define TF_HASFONT 0x08 #define TF_HASCOLOR 0x04 #define TF_HASYOFFSET 0x02 #define TF_HASXOFFSET 0x01 #define FF_WIDECODES 0x01 #define FF_BOLD 0x02 #define FF_ITALIC 0x04 #define FF_ANSI 0x08 #define FF_SHIFTJIS 0x10 #define FF_UNICODE 0x20 #define FF2_BOLD 0x01 #define FF2_ITALIC 0x02 #define FF2_WIDECODES 0x04 #define FF2_WIDEOFFSETS 0x08 #define FF2_ANSI 0x10 #define FF2_UNICODE 0x20 #define FF2_SHIFTJIS 0x40 #define FF2_LAYOUT 0x80 int swf_FontIsItalic(SWFFONT * f) { return f->style & FONT_STYLE_ITALIC; } int swf_FontIsBold(SWFFONT * f) { return f->style & FONT_STYLE_BOLD; } static const int WRITEFONTID = 0x4e46; // font id for WriteFont and ReadFont int swf_FontEnumerate(SWF * swf, void (*FontCallback) (void*, U16, U8 *), void*self) { int n; TAG *t; if (!swf) return -1; t = swf->firstTag; n = 0; while (t) { if (swf_isFontTag(t)) { n++; if (FontCallback) { U16 id; int l; U8 s[257]; s[0] = 0; swf_SetTagPos(t, 0); id = swf_GetU16(t); if (swf_GetTagID(t) == ST_DEFINEFONT2 || swf_GetTagID(t) == ST_DEFINEFONTINFO || swf_GetTagID(t) == ST_DEFINEFONTINFO2) { swf_GetU16(t); l = swf_GetU8(t); swf_GetBlock(t, s, l); s[l] = 0; } (FontCallback) (self, id, s); } } t = swf_NextTag(t); } return n; } int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t) { U16 fid; swf_SetTagPos(t, 0); fid = swf_GetU16(t); if ((!id) || (id == fid)) { U16 of; int n, i; id = fid; f->version = 1; f->id = fid; of = swf_GetU16(t); n = of / 2; f->numchars = n; f->glyph = (SWFGLYPH*)rfx_calloc(sizeof(SWFGLYPH) * n); for (i = 1; i < n; i++) swf_GetU16(t); for (i = 0; i < n; i++) swf_GetSimpleShape(t, &f->glyph[i].shape); } return id; } int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t) { U16 fid; U16 maxcode; U8 flags; swf_SetTagPos(t, 0); fid = swf_GetU16(t); if (fid == id) { U8 l = swf_GetU8(t); int i; if (f->version > 1) { /* Especially with Flash MX, DefineFont2 may have FontInfo fields, too. However, they only add little information to what's already inside the DefineFont2 tag */ return id; } if (f->name) rfx_free(f->name); f->name = (U8 *) rfx_alloc(l + 1); swf_GetBlock(t, f->name, l); f->name[l] = 0; flags = swf_GetU8(t); if (flags & 2) f->style |= FONT_STYLE_BOLD; if (flags & 4) f->style |= FONT_STYLE_ITALIC; if (flags & 8) f->encoding |= FONT_ENCODING_ANSI; if (flags & 16) f->encoding |= FONT_ENCODING_SHIFTJIS; if (flags & 32) f->encoding |= FONT_ENCODING_UNICODE; if (t->id == ST_DEFINEFONTINFO2) { f->language = swf_GetU8(t); } f->glyph2ascii = (U16 *) rfx_alloc(sizeof(U16) * f->numchars); maxcode = 0; for (i = 0; i < f->numchars; i++) { f->glyph2ascii[i] = ((flags & FF_WIDECODES) ? swf_GetU16(t) : swf_GetU8(t)); if (f->glyph2ascii[i] > maxcode) maxcode = f->glyph2ascii[i]; } maxcode++; if (maxcode < 256) maxcode = 256; f->maxascii = maxcode; f->ascii2glyph = (int *) rfx_alloc(sizeof(int) * maxcode); memset(f->ascii2glyph, -1, sizeof(int) * maxcode); for (i = 0; i < f->numchars; i++) f->ascii2glyph[f->glyph2ascii[i]] = i; } return id; } int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag) { U16 fid; swf_SetTagPos(tag, 0); fid = swf_GetU16(tag); if (fid == id) { int num = swf_GetU16(tag); int t; f->glyphnames = (char**)rfx_alloc(sizeof(char *) * num); for (t = 0; t < num; t++) { f->glyphnames[t] = strdup(swf_GetString(tag)); } } return id; } int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag) { int t, glyphcount; int maxcode; int fid; U32 offset_start; U32 *offset; U8 flags1, langcode, namelen; swf_SetTagPos(tag, 0); font->version = tag->id==ST_DEFINEFONT3?3:2; fid = swf_GetU16(tag); if (id && id != fid) return id; font->id = fid; flags1 = swf_GetU8(tag); langcode = swf_GetU8(tag); //reserved flags if (flags1 & 1) font->style |= FONT_STYLE_BOLD; if (flags1 & 2) font->style |= FONT_STYLE_ITALIC; if (flags1 & 16) font->encoding |= FONT_ENCODING_ANSI; if (flags1 & 32) font->encoding |= FONT_ENCODING_UNICODE; if (flags1 & 64) font->encoding |= FONT_ENCODING_SHIFTJIS; namelen = swf_GetU8(tag); font->name = (U8 *) rfx_alloc(namelen + 1); font->name[namelen] = 0; swf_GetBlock(tag, font->name, namelen); glyphcount = swf_GetU16(tag); font->numchars = glyphcount; font->glyph = (SWFGLYPH *) rfx_calloc(sizeof(SWFGLYPH) * glyphcount); font->glyph2ascii = (U16 *) rfx_calloc(sizeof(U16) * glyphcount); offset = (U32*)rfx_calloc(sizeof(U32)*(glyphcount+1)); offset_start = tag->pos; if (flags1 & 8) { // wide offsets for (t = 0; t < glyphcount; t++) offset[t] = swf_GetU32(tag); //offset[t] if (glyphcount) /* this _if_ is not in the specs */ offset[glyphcount] = swf_GetU32(tag); // fontcodeoffset else offset[glyphcount] = tag->pos; } else { for (t = 0; t < glyphcount; t++) offset[t] = swf_GetU16(tag); //offset[t] if (glyphcount) /* this _if_ is not in the specs */ offset[glyphcount] = swf_GetU16(tag); // fontcodeoffset else offset[glyphcount] = tag->pos; } for (t = 0; t < glyphcount; t++) { swf_SetTagPos(tag, offset[t]+offset_start); swf_GetSimpleShape(tag, &(font->glyph[t].shape)); } if(glyphcount) swf_SetTagPos(tag, offset[glyphcount]+offset_start); free(offset); maxcode = 0; for (t = 0; t < glyphcount; t++) { int code; if (flags1 & 4) // wide codes (always on for definefont3) code = swf_GetU16(tag); else code = swf_GetU8(tag); font->glyph2ascii[t] = code; if (code > maxcode) maxcode = code; } maxcode++; if (maxcode < 256) maxcode = 256; font->maxascii = maxcode; font->ascii2glyph = (int *) rfx_alloc(sizeof(int) * maxcode); memset(font->ascii2glyph, -1, sizeof(int) * maxcode); for (t = 0; t < glyphcount; t++) { font->ascii2glyph[font->glyph2ascii[t]] = t; } if (flags1 & 128) { // has layout U16 kerningcount; font->layout = (SWFLAYOUT *) rfx_alloc(sizeof(SWFLAYOUT)); font->layout->ascent = swf_GetU16(tag); font->layout->descent = swf_GetU16(tag); font->layout->leading = swf_GetU16(tag); for (t = 0; t < glyphcount; t++) { S16 advance = swf_GetS16(tag); font->glyph[t].advance = advance; } font->layout->bounds = (SRECT*)rfx_alloc(glyphcount * sizeof(SRECT)); for (t = 0; t < glyphcount; t++) { swf_ResetReadBits(tag); swf_GetRect(tag, &font->layout->bounds[t]); SRECT b = font->layout->bounds[t]; if((b.xmin|b.xmax|b.ymin|b.ymax) == 0) { // recalculate bounding box SHAPE2 *shape2 = swf_ShapeToShape2(font->glyph[t].shape); font->layout->bounds[t] = swf_GetShapeBoundingBox(shape2); swf_Shape2Free(shape2);free(shape2); } } kerningcount = swf_GetU16(tag); font->layout->kerningcount = kerningcount; font->layout->kerning = (SWFKERNING *) rfx_alloc(sizeof(SWFKERNING) * kerningcount); if (kerningcount) { font->layout->kerning = (SWFKERNING*)rfx_alloc(sizeof(*font->layout->kerning) * kerningcount); for (t = 0; t < kerningcount; t++) { if (flags1 & 4) { // wide codes font->layout->kerning[t].char1 = swf_GetU16(tag); font->layout->kerning[t].char2 = swf_GetU16(tag); } else { font->layout->kerning[t].char1 = swf_GetU8(tag); font->layout->kerning[t].char2 = swf_GetU8(tag); } font->layout->kerning[t].adjustment = swf_GetS16(tag); } } } return font->id; } int swf_FontExtract_DefineFontAlignZones(int id, SWFFONT * font, TAG * tag) { U16 fid; swf_SetTagPos(tag, 0); fid = swf_GetU16(tag); if (fid == id) { font->alignzone_flags = swf_GetU8(tag); font->alignzones = rfx_calloc(sizeof(ALIGNZONE)*font->numchars); int i=0; while(tag->pos < tag->len) { if(i>=font->numchars) break; int nr = swf_GetU8(tag); // should be 2 if(nr!=1 && nr!=2) { fprintf(stderr, "rfxswf: Can't parse alignzone tags with %d zones", nr); break; } U16 x = swf_GetU16(tag); U16 y = swf_GetU16(tag); U16 dx = (nr==2)?swf_GetU16(tag):0xffff; U16 dy = (nr==2)?swf_GetU16(tag):0xffff; U8 xy = swf_GetU8(tag); #ifdef DEBUG_RFXSWF if((!(xy&1) && (x!=0 || (dx!=0 && dx!=0xffff))) || (!(xy&2) && (y!=0 || (dy!=0 && dy!=0xffff)))) { fprintf(stderr, "Warning: weird combination of alignzone bits and values (%d x:%04x-%04x y:%04x-%04x)\n", xy, x,dx,y,dy); } #endif if(!(xy&1)) { x = 0xffff; dx = 0xffff; } else if(!(xy&2)) { y = 0xffff; dy = 0xffff; } font->alignzones[i].x = x; font->alignzones[i].y = y; font->alignzones[i].dx = dx; font->alignzones[i].dy = dy; i++; } } return id; } #define FEDTJ_PRINT 0x01 #define FEDTJ_MODIFY 0x02 #define FEDTJ_CALLBACK 0x04 static int swf_FontExtract_DefineTextCallback(int id, SWFFONT * f, TAG * t, int jobs, void (*callback) (void *self, int *chars, int *xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA * color), void *self) { U16 cid; SRECT r; MATRIX m; U8 gbits, abits; int fid = -1; RGBA color; int x = 0, y = 0; int fontsize = 0; memset(&color, 0, sizeof(color)); swf_SetTagPos(t, 0); cid = swf_GetU16(t); swf_GetRect(t, &r); swf_GetMatrix(t, &m); gbits = swf_GetU8(t); abits = swf_GetU8(t); while (1) { int flags, num; flags = swf_GetU8(t); if (!flags) break; if (flags & TF_TEXTCONTROL) { if (flags & TF_HASFONT) fid = swf_GetU16(t); if (flags & TF_HASCOLOR) { color.r = swf_GetU8(t); // rgb color.g = swf_GetU8(t); color.b = swf_GetU8(t); if (swf_GetTagID(t) == ST_DEFINETEXT2) color.a = swf_GetU8(t); else color.a = 255; } if (flags & TF_HASXOFFSET) x = swf_GetS16(t); if (flags & TF_HASYOFFSET) y = swf_GetS16(t); if (flags & TF_HASFONT) fontsize = swf_GetU16(t); } num = swf_GetU8(t); if (!num) break; { int i; int buf[256]; int advance[256]; int xpos = 0; for (i = 0; i < num; i++) { int glyph; int adv = 0; advance[i] = xpos; glyph = swf_GetBits(t, gbits); adv = swf_GetBits(t, abits); xpos += adv; if (id == fid) { if (jobs & FEDTJ_PRINT) { int code = f->glyph2ascii[glyph]; printf("%lc", code); } if (jobs & FEDTJ_MODIFY) f->glyph[glyph].advance = adv * 20; //? } buf[i] = glyph; } if ((id == fid) && (jobs & FEDTJ_PRINT)) printf("\n"); if (jobs & FEDTJ_CALLBACK) callback(self, buf, advance, num, fid, fontsize, x, y, &color); x += xpos; } } return id; } int swf_ParseDefineText(TAG * tag, void (*callback) (void *self, int *chars, int *xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA * color), void *self) { return swf_FontExtract_DefineTextCallback(-1, 0, tag, FEDTJ_CALLBACK, callback, self); } int swf_FontExtract_DefineText(int id, SWFFONT * f, TAG * t, int jobs) { return swf_FontExtract_DefineTextCallback(id, f, t, jobs, 0, 0); } typedef struct _usagetmp { SWFFONT*font; int lastx,lasty; int last; } usagetmp_t; static void updateusage(void *self, int *chars, int *xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA * color) { usagetmp_t*u = (usagetmp_t*)self; if(!u->font->use) { swf_FontInitUsage(u->font); } if(fontid!=u->font->id) return; int t; for(t=0;tu->font->numchars) continue; swf_FontUseGlyph(u->font, c, fontsize); if(u->lasty == y && x>=u->lastx-200 && abs(u->lastx-x)<200 && u->last!=c && !swf_ShapeIsEmpty(u->font->glyph[u->last].shape) && !swf_ShapeIsEmpty(u->font->glyph[c].shape)) { swf_FontUsePair(u->font, u->last, c); } u->lasty = y; /* FIXME: do we still need to divide advance by 20 for definefont3? */ u->lastx = x + (u->font->glyph[c].advance*fontsize/20480); u->last = c; } } void swf_FontUpdateUsage(SWFFONT*f, TAG* tag) { usagetmp_t u; u.font = f; u.lastx = -0x80000000; u.lasty = -0x80000000; u.last = 0; swf_ParseDefineText(tag, updateusage, &u); } int swf_FontExtract(SWF * swf, int id, SWFFONT * *font) { TAG *t; SWFFONT *f; if ((!swf) || (!font)) return -1; f = (SWFFONT *) rfx_calloc(sizeof(SWFFONT)); t = swf->firstTag; while (t) { int nid = 0; switch (swf_GetTagID(t)) { case ST_DEFINEFONT: nid = swf_FontExtract_DefineFont(id, f, t); break; case ST_DEFINEFONT2: case ST_DEFINEFONT3: nid = swf_FontExtract_DefineFont2(id, f, t); break; case ST_DEFINEFONTALIGNZONES: nid = swf_FontExtract_DefineFontAlignZones(id, f, t); break; case ST_DEFINEFONTINFO: case ST_DEFINEFONTINFO2: nid = swf_FontExtract_DefineFontInfo(id, f, t); break; case ST_DEFINETEXT: case ST_DEFINETEXT2: if(!f->layout) { nid = swf_FontExtract_DefineText(id, f, t, FEDTJ_MODIFY); } if(f->version>=3 && f->layout) swf_FontUpdateUsage(f, t); break; case ST_GLYPHNAMES: nid = swf_FontExtract_GlyphNames(id, f, t); break; } if (nid > 0) id = nid; t = swf_NextTag(t); } if (f->id != id) { rfx_free(f); f = 0; } font[0] = f; return 0; } int swf_FontSetID(SWFFONT * f, U16 id) { if (!f) return -1; f->id = id; return 0; } void swf_LayoutFree(SWFLAYOUT * l) { if (l) { if (l->kerning) rfx_free(l->kerning); l->kerning = NULL; if (l->bounds) rfx_free(l->bounds); l->bounds = NULL; } rfx_free(l); } static void font_freeglyphnames(SWFFONT*f) { if (f->glyphnames) { int t; for (t = 0; t < f->numchars; t++) { if (f->glyphnames[t]) { rfx_free(f->glyphnames[t]); f->glyphnames[t] = 0; } } rfx_free(f->glyphnames); f->glyphnames = 0; } } static void font_freeusage(SWFFONT*f) { if (f->use) { if(f->use->chars) { rfx_free(f->use->chars);f->use->chars = 0; } if(f->use->neighbors) { rfx_free(f->use->neighbors);f->use->neighbors = 0; } if(f->use->neighbors_hash) { rfx_free(f->use->neighbors_hash);f->use->neighbors_hash = 0; } rfx_free(f->use); f->use = 0; } } static void font_freelayout(SWFFONT*f) { if (f->layout) { swf_LayoutFree(f->layout); f->layout = 0; } } static void font_freename(SWFFONT*f) { if (f->name) { rfx_free(f->name); f->name = 0; } } int swf_FontReduce_old(SWFFONT * f) { int i, j; int max_unicode = 0; if ((!f) || (!f->use) || f->use->is_reduced) return -1; j = 0; for (i = 0; i < f->numchars; i++) { if (f->glyph[i].shape && f->use->chars[i]) { f->glyph2ascii[j] = f->glyph2ascii[i]; f->glyph[j] = f->glyph[i]; f->use->chars[i] = j; j++; } else { f->glyph2ascii[i] = 0; if(f->glyph[i].shape) { swf_ShapeFree(f->glyph[i].shape); f->glyph[i].shape = 0; f->glyph[i].advance = 0; } f->use->chars[i] = -1; j++; //TODO: remove } } for (i = 0; i < f->maxascii; i++) { if(f->use->chars[f->ascii2glyph[i]]<0) { f->ascii2glyph[i] = -1; } else { f->ascii2glyph[i] = f->use->chars[f->ascii2glyph[i]]; max_unicode = i; } } f->maxascii = max_unicode; f->use->is_reduced = 1; f->numchars = j; font_freelayout(f); font_freeglyphnames(f); font_freename(f); return j; } int swf_FontReduce_swfc(SWFFONT * f) { int i, j; int max_unicode = 0; if ((!f) || (!f->use) || f->use->is_reduced) return -1; font_freeglyphnames(f); j = 0; for (i = 0; i < f->numchars; i++) { if (f->glyph[i].shape && f->use->chars[i]) { f->glyph2ascii[j] = f->glyph2ascii[i]; if (f->layout) f->layout->bounds[j] = f->layout->bounds[i]; f->glyph[j] = f->glyph[i]; f->use->chars[i] = j; j++; } else { f->glyph2ascii[i] = 0; if(f->glyph[i].shape) { swf_ShapeFree(f->glyph[i].shape); f->glyph[i].shape = 0; f->glyph[i].advance = 0; } f->use->chars[i] = -1; } } f->use->used_glyphs = j; for (i = 0; i < f->maxascii; i++) { if(f->ascii2glyph[i] > -1) { if (f->use->chars[f->ascii2glyph[i]]<0) { f->use->chars[f->ascii2glyph[i]] = 0; f->ascii2glyph[i] = -1; } else { f->ascii2glyph[i] = f->use->chars[f->ascii2glyph[i]]; f->use->chars[f->ascii2glyph[i]] = 1; max_unicode = i + 1; } } } f->maxascii = max_unicode; f->use->is_reduced = 1; f->numchars = j; font_freename(f); return j; } int swf_FontReduce(SWFFONT * f) { int i; int max_unicode = 0; int max_glyph = 0; if ((!f) || (!f->use) || f->use->is_reduced) return -1; font_freelayout(f); font_freeglyphnames(f); f->use->used_glyphs= 0; for (i = 0; i < f->numchars; i++) { if(!f->use->chars[i]) { if(f->glyph2ascii) { f->glyph2ascii[i] = 0; } if(f->glyph[i].shape) { swf_ShapeFree(f->glyph[i].shape); f->glyph[i].shape = 0; f->glyph[i].advance = 0; } // f->use->used_glyphs++; } else { f->use->used_glyphs++; max_glyph = i+1; } } for (i = 0; i < f->maxascii; i++) { if(f->ascii2glyph[i] > -1 && !f->use->chars[f->ascii2glyph[i]]) { if(f->ascii2glyph) { f->ascii2glyph[i] = -1; } } else { max_unicode = i+1; } } f->maxascii = max_unicode; f->numchars = max_glyph; font_freename(f); return 0; } static SWFFONT* font_to_sort; int cmp_chars(const void*a, const void*b) { int x = *(const int*)a; int y = *(const int*)b; return 0; } void swf_FontSort(SWFFONT * font) { int i, j; int *newplace; int *newpos; if (!font) return; newplace = (int*)rfx_alloc(sizeof(int) * font->numchars); for (i = 0; i < font->numchars; i++) { newplace[i] = i; } //qsort(newplace, sizeof(newplace[0]), font->numchars, cmp_chars); for (i = 0; i < font->numchars; i++) for (j = 0; j < i; j++) { if (font->glyph2ascii[i] < font->glyph2ascii[j]) { int n1, n2; char *c1, *c2; SWFGLYPH g1, g2; SRECT r1, r2; n1 = newplace[i]; n2 = newplace[j]; newplace[j] = n1; newplace[i] = n2; n1 = font->glyph2ascii[i]; n2 = font->glyph2ascii[j]; font->glyph2ascii[j] = n1; font->glyph2ascii[i] = n2; g1 = font->glyph[i]; g2 = font->glyph[j]; font->glyph[j] = g1; font->glyph[i] = g2; if (font->glyphnames) { c1 = font->glyphnames[i]; c2 = font->glyphnames[j]; font->glyphnames[j] = c1; font->glyphnames[i] = c2; } if (font->layout) { r1 = font->layout->bounds[i]; r2 = font->layout->bounds[j]; font->layout->bounds[j] = r1; font->layout->bounds[i] = r2; } } } newpos = (int*)rfx_alloc(sizeof(int) * font->numchars); for (i = 0; i < font->numchars; i++) { newpos[newplace[i]] = i; } for (i = 0; i < font->maxascii; i++) { if (font->ascii2glyph[i] >= 0) font->ascii2glyph[i] = newpos[font->ascii2glyph[i]]; } rfx_free(newplace); font->glyph2glyph = newpos; } void swf_FontPrepareForEditText(SWFFONT * font) { if (!font->layout) swf_FontCreateLayout(font); swf_FontSort(font); } int swf_FontInitUsage(SWFFONT * f) { if (!f) return -1; if(f->use) { fprintf(stderr, "Usage initialized twice"); return -1; } f->use = (FONTUSAGE*)rfx_calloc(sizeof(FONTUSAGE)); f->use->smallest_size = 0xffff; f->use->chars = (int*)rfx_calloc(sizeof(f->use->chars[0]) * f->numchars); return 0; } void swf_FontClearUsage(SWFFONT * f) { if (!f || !f->use) return; rfx_free(f->use->chars); f->use->chars = 0; rfx_free(f->use); f->use = 0; } int swf_FontUse(SWFFONT * f, U8 * s) { if( (!s)) return -1; while (*s) { if(*s < f->maxascii && f->ascii2glyph[*s]>=0) swf_FontUseGlyph(f, f->ascii2glyph[*s], /*FIXME*/0xffff); s++; } return 0; } int swf_FontUseUTF8(SWFFONT * f, const U8 * s, U16 size) { if( (!s)) return -1; int ascii; while (*s) { ascii = readUTF8char((U8**)&s); if(ascii < f->maxascii && f->ascii2glyph[ascii]>=0) swf_FontUseGlyph(f, f->ascii2glyph[ascii], size); } return 0; } int swf_FontUseAll(SWFFONT* f) { int i; if (!f->use) swf_FontInitUsage(f); for (i = 0; i < f->numchars; i++) f->use->chars[i] = 1; f->use->used_glyphs = f->numchars; return 0; } static unsigned hash2(int char1, int char2) { unsigned hash = char1^(char2<<8); hash += (hash << 3); hash ^= (hash >> 11); hash += (hash << 15); return hash; } static void hashadd(FONTUSAGE*u, int char1, int char2, int nr) { unsigned hash = hash2(char1, char2); while(1) { hash = hash%u->neighbors_hash_size; if(!u->neighbors_hash[hash]) { u->neighbors_hash[hash] = nr+1; return; } hash++; } } int swf_FontUseGetPair(SWFFONT * f, int char1, int char2) { FONTUSAGE*u = f->use; if(!u || !u->neighbors_hash_size) return 0; unsigned hash = hash2(char1, char2); while(1) { hash = hash%u->neighbors_hash_size; int pos = u->neighbors_hash[hash]; if(!pos) return 0; if(pos && u->neighbors[pos-1].char1 == char1 && u->neighbors[pos-1].char2 == char2) { return pos; } hash++; } } void swf_FontUsePair(SWFFONT * f, int char1, int char2) { if (!f->use) swf_FontInitUsage(f); FONTUSAGE*u = f->use; if(u->num_neighbors*3 >= u->neighbors_hash_size*2) { if(u->neighbors_hash) { free(u->neighbors_hash); } u->neighbors_hash_size = u->neighbors_hash_size?u->neighbors_hash_size*2:1024; u->neighbors_hash = rfx_calloc(u->neighbors_hash_size*sizeof(int)); int t; for(t=0;tnum_neighbors;t++) { hashadd(u, u->neighbors[t].char1, u->neighbors[t].char2, t); } } int nr = swf_FontUseGetPair(f, char1, char2); if(!nr) { if(u->num_neighbors == u->neighbors_size) { u->neighbors_size += 4096; u->neighbors = rfx_realloc(u->neighbors, sizeof(SWFGLYPHPAIR)*u->neighbors_size); } u->neighbors[u->num_neighbors].char1 = char1; u->neighbors[u->num_neighbors].char2 = char2; u->neighbors[u->num_neighbors].num = 1; hashadd(u, char1, char2, u->num_neighbors); u->num_neighbors++; } else { u->neighbors[nr-1].num++; } } int swf_FontUseGlyph(SWFFONT * f, int glyph, U16 size) { if (!f->use) swf_FontInitUsage(f); if(glyph < 0 || glyph >= f->numchars) return -1; if(!f->use->chars[glyph]) f->use->used_glyphs++; f->use->chars[glyph] = 1; if(size && size < f->use->smallest_size) f->use->smallest_size = size; return 0; } int swf_FontSetDefine(TAG * t, SWFFONT * f) { U16 *ofs = (U16 *) rfx_alloc(f->numchars * 2); int p, i, j; if ((!t) || (!f)) return -1; swf_ResetWriteBits(t); swf_SetU16(t, f->id); p = 0; j = 0; for (i = 0; i < f->numchars; i++) if (f->glyph[i].shape) { ofs[j++] = p; p += swf_SetSimpleShape(NULL, f->glyph[i].shape); } for (i = 0; i < j; i++) swf_SetU16(t, ofs[i] + j * 2); if (!j) { fprintf(stderr, "rfxswf: warning: Font is empty\n"); swf_SetU16(t, 0); } for (i = 0; i < f->numchars; i++) if (f->glyph[i].shape) swf_SetSimpleShape(t, f->glyph[i].shape); swf_ResetWriteBits(t); rfx_free(ofs); return 0; } static inline int fontSize(SWFFONT * font) { int t; int size = 0; for (t = 0; t < font->numchars; t++) { int l = 0; if(font->glyph[t].shape) l = (font->glyph[t].shape->bitlen + 7) / 8; else l = 8; size += l + 1; } return size + (font->numchars + 1) * 2; } int swf_FontSetDefine2(TAG * tag, SWFFONT * f) { U8 flags = 0; int t; int pos; swf_SetU16(tag, f->id); if (f->layout) flags |= 128; // haslayout if (f->numchars > 256) flags |= 4; // widecodes if (f->style & FONT_STYLE_BOLD) flags |= 1; // bold if (f->style & FONT_STYLE_ITALIC) flags |= 2; // italic if (f->maxascii >= 256) flags |= 4; //wide codecs if (fontSize(f) > 65535) flags |= 8; //wide offsets flags |= 8 | 4; //FIXME: the above check doesn't work if (f->encoding & FONT_ENCODING_ANSI) flags |= 16; // ansi if (f->encoding & FONT_ENCODING_UNICODE) flags |= 32; // unicode if (f->encoding & FONT_ENCODING_SHIFTJIS) flags |= 64; // shiftjis swf_SetU8(tag, flags); swf_SetU8(tag, 0); //reserved flags if (f->name) { /* font name */ swf_SetU8(tag, strlen((const char*)f->name)+1); swf_SetBlock(tag, f->name, strlen((const char*)f->name)+1); } else { /* font name (="") */ swf_SetU8(tag, 1); swf_SetU8(tag, 0); } /* number of glyphs */ swf_SetU16(tag, f->numchars); /* font offset table */ pos = tag->len; for (t = 0; t <= f->numchars; t++) { if (flags & 8) swf_SetU32(tag, /* fontoffset */ 0); /*placeholder */ else swf_SetU16(tag, /* fontoffset */ 0); /*placeholder */ } for (t = 0; t <= f->numchars; t++) { if (flags & 8) { tag->data[pos + t * 4] = (tag->len - pos); tag->data[pos + t * 4 + 1] = (tag->len - pos) >> 8; tag->data[pos + t * 4 + 2] = (tag->len - pos) >> 16; tag->data[pos + t * 4 + 3] = (tag->len - pos) >> 24; } else { if (tag->len - pos > 65535) { fprintf(stderr, "Internal error: Font too big and WideOffsets flag not set\n"); exit(1); } tag->data[pos + t * 2] = (tag->len - pos); tag->data[pos + t * 2 + 1] = (tag->len - pos) >> 8; } if (t < f->numchars) { if(f->glyph[t].shape) { swf_SetSimpleShape(tag, f->glyph[t].shape); } else { swf_SetU8(tag, 0); //non-edge(1) + edge flags(5) } } } /* font code table */ for (t = 0; t < f->numchars; t++) { if (flags & 4) { /* wide codes */ if(f->glyph2ascii[t]) { swf_SetU16(tag, f->glyph2ascii[t]); } else { swf_SetU16(tag, 0); } } else { if(f->glyph2ascii[t]) { swf_SetU8(tag, f->glyph2ascii[t]); } else { swf_SetU8(tag, 0); } } } if (f->layout) { swf_SetU16(tag, f->layout->ascent); swf_SetU16(tag, f->layout->descent); swf_SetU16(tag, 0); // flash ignores leading for (t = 0; t < f->numchars; t++) swf_SetU16(tag, f->glyph[t].advance); for (t = 0; t < f->numchars; t++) { swf_ResetWriteBits(tag); /* not used by flash, so leave this empty */ SRECT b = {0,0,0,0}; swf_SetRect(tag, &b); } swf_SetU16(tag, f->layout->kerningcount); for (t = 0; t < f->layout->kerningcount; t++) { if (flags & 4) { /* wide codes */ swf_SetU16(tag, f->layout->kerning[t].char1); swf_SetU16(tag, f->layout->kerning[t].char2); } else { swf_SetU8(tag, f->layout->kerning[t].char1); swf_SetU8(tag, f->layout->kerning[t].char2); } swf_SetU16(tag, f->layout->kerning[t].adjustment); } } return 0; } void swf_FontAddLayout(SWFFONT * f, int ascent, int descent, int leading) { f->layout = (SWFLAYOUT *) rfx_alloc(sizeof(SWFLAYOUT)); f->layout->ascent = ascent; f->layout->descent = descent; f->layout->leading = leading; f->layout->kerningcount = 0; f->layout->kerning = 0; f->layout->bounds = (SRECT *) rfx_calloc(sizeof(SRECT) * f->numchars); } int swf_FontSetInfo(TAG * t, SWFFONT * f) { int l, i; U8 wide = 0; U8 flags = 0; if ((!t) || (!f)) return -1; swf_ResetWriteBits(t); swf_SetU16(t, f->id); l = f->name ? strlen((const char *)f->name) : 0; if (l > 255) l = 255; swf_SetU8(t, l); if (l) swf_SetBlock(t, f->name, l); if (f->numchars >= 256) wide = 1; if (f->style & FONT_STYLE_BOLD) flags |= 2; if (f->style & FONT_STYLE_ITALIC) flags |= 4; if (f->style & FONT_ENCODING_ANSI) flags |= 8; if (f->style & FONT_ENCODING_SHIFTJIS) flags |= 16; if (f->style & FONT_ENCODING_UNICODE) flags |= 32; swf_SetU8(t, (flags & 0xfe) | wide); for (i = 0; i < f->numchars; i++) { if (f->glyph[i].shape) { int g2a = f->glyph2ascii?f->glyph2ascii[i]:0; wide ? swf_SetU16(t, g2a) : swf_SetU8(t, g2a); } } return 0; } int swf_TextPrintDefineText(TAG * t, SWFFONT * f) { int id = swf_GetTagID(t); if ((id == ST_DEFINETEXT) || (id == ST_DEFINETEXT2)) swf_FontExtract_DefineText(f->id, f, t, FEDTJ_PRINT); else return -1; return 0; } static void font_freealignzones(SWFFONT * f) { if(f->alignzones) free(f->alignzones); f->alignzones = 0; } void swf_FontFree(SWFFONT * f) { int i; if (!f) return; if (f->glyph) { for (i = 0; i < f->numchars; i++) if (f->glyph[i].shape) { swf_ShapeFree(f->glyph[i].shape); f->glyph[i].shape = NULL; } rfx_free(f->glyph); f->glyph = NULL; } if (f->ascii2glyph) { rfx_free(f->ascii2glyph); f->ascii2glyph = NULL; } if (f->glyph2ascii) { rfx_free(f->glyph2ascii); f->glyph2ascii = NULL; } if (f->glyph2glyph) { rfx_free(f->glyph2glyph); f->glyph2glyph = NULL; } font_freename(f); font_freelayout(f); font_freeglyphnames(f); font_freeusage(f); font_freealignzones(f); rfx_free(f); } int swf_TextSetInfoRecord(TAG * t, SWFFONT * font, U16 size, RGBA * color, int x, int y) { U8 flags; if (!t) return -1; flags = TF_TEXTCONTROL | (font ? TF_HASFONT : 0) | (color ? TF_HASCOLOR : 0) | (x ? TF_HASXOFFSET : 0) | (y ? TF_HASYOFFSET : 0); swf_SetU8(t, flags); if (font) swf_SetU16(t, font->id); if (color) { if (swf_GetTagID(t) == ST_DEFINETEXT2) swf_SetRGBA(t, color); else swf_SetRGB(t, color); } if (x) { if(x != SET_TO_ZERO) { if(x>32767 || x<-32768) fprintf(stderr, "Warning: Horizontal char position overflow: %d\n", x); swf_SetS16(t, x); } else { swf_SetS16(t, 0); } } if (y) { if(y != SET_TO_ZERO) { if(y>32767 || y<-32768) fprintf(stderr, "Warning: Vertical char position overflow: %d\n", y); swf_SetS16(t, y); } else { swf_SetS16(t, 0); } } if (font) swf_SetU16(t, size); return 0; } static int swf_TextCountBits2(SWFFONT * font, U8 * s, int scale, U8 * gbits, U8 * abits, char *encoding) { U16 g, a; char utf8 = 0; if ((!s) || (!font) || ((!gbits) && (!abits)) || (!font->ascii2glyph)) return -1; g = a = 0; if (!strcmp(encoding, "UTF8")) utf8 = 1; else if (!strcmp(encoding, "iso-8859-1")) utf8 = 0; else fprintf(stderr, "Unknown encoding: %s", encoding); while (*s) { int glyph = -1, c; if (!utf8) c = *s++; else c = readUTF8char(&s); if (c < font->maxascii) glyph = font->ascii2glyph[c]; if (glyph >= 0) { g = swf_CountUBits(glyph, g); a = swf_CountBits(((((U32) font->glyph[glyph].advance) * scale) / 20) / 100, a); } } if (gbits) gbits[0] = (U8) g; if (abits) abits[0] = (U8) a; return 0; } static int swf_TextSetCharRecord2(TAG * t, SWFFONT * font, U8 * s, int scale, U8 gbits, U8 abits, char *encoding) { int l = 0, pos; char utf8 = 0; if ((!t) || (!font) || (!s) || (!font->ascii2glyph)) return -1; if (!strcmp(encoding, "UTF8")) utf8 = 1; else if (!strcmp(encoding, "iso-8859-1")) utf8 = 0; else fprintf(stderr, "Unknown encoding: %s", encoding); pos = t->len; swf_SetU8(t, l); //placeholder while (*s) { int g = -1, c; if (!utf8) c = *s++; else c = readUTF8char(&s); if (c < font->maxascii) g = font->ascii2glyph[c]; if (g >= 0) { swf_SetBits(t, g, gbits); swf_SetBits(t, ((((U32) font->glyph[g].advance) * scale) / 20) / 100, abits); l++; /* We split into 127 characters per text field. We could do 255, by the (formerly wrong) flash specification, but some SWF parsing code out there still assumes that char blocks are at max 127 characters, and it would save only a few bits. */ if (l == 0x7f) break; } } PUT8(&t->data[pos], l); swf_ResetWriteBits(t); return 0; } int swf_TextCountBits(SWFFONT * font, U8 * s, int scale, U8 * gbits, U8 * abits) { return swf_TextCountBits2(font, s, scale, gbits, abits, "iso-8859-1"); } int swf_TextSetCharRecord(TAG * t, SWFFONT * font, U8 * s, int scale, U8 gbits, U8 abits) { return swf_TextSetCharRecord2(t, font, s, scale, gbits, abits, "iso-8859-1"); } int swf_TextCountBitsUTF8(SWFFONT * font, U8 * s, int scale, U8 * gbits, U8 * abits) { return swf_TextCountBits2(font, s, scale, gbits, abits, "UTF8"); } int swf_TextSetCharRecordUTF8(TAG * t, SWFFONT * font, U8 * s, int scale, U8 gbits, U8 abits) { return swf_TextSetCharRecord2(t, font, s, scale, gbits, abits, "UTF8"); } U32 swf_TextGetWidth(SWFFONT * font, U8 * s, int scale) { U32 res = 0; if (font && s) { while (s[0]) { int g = -1; if (*s < font->maxascii) g = font->ascii2glyph[*s]; if (g >= 0) res += font->glyph[g].advance / 20; s++; } if (scale) res = (res * scale) / 100; } return res; } SRECT swf_TextCalculateBBoxUTF8(SWFFONT * font, U8 * s, int scale) { int xpos = 0; int ypos = 0; SRECT r; swf_GetRect(0, &r); while (*s) { int c = readUTF8char(&s); if(c==13 || c==10) { if(s[0] == 10) { s++; } xpos=0; ypos+=font->layout->leading; continue; } if (c < font->maxascii) { int g = font->ascii2glyph[c]; if (g >= 0) { SRECT rn = font->layout->bounds[g]; rn.xmin = (rn.xmin * scale) / 20 / 100 + xpos; rn.xmax = (rn.xmax * scale) / 20 / 100 + xpos; rn.ymin = (rn.ymin * scale) / 20 / 100 + ypos; rn.ymax = (rn.ymax * scale) / 20 / 100 + ypos; swf_ExpandRect2(&r, &rn); xpos += (font->glyph[g].advance * scale) / 20 / 100; } } } return r; } SWFFONT *swf_ReadFont(const char *filename) { int f; SWF swf; if (!filename) return 0; f = open(filename, O_RDONLY|O_BINARY); if (f < 0 || swf_ReadSWF(f, &swf) < 0) { fprintf(stderr, "%s is not a valid SWF font file or contains errors.\n", filename); close(f); return 0; } else { SWFFONT *font; close(f); if (swf_FontExtract(&swf, WRITEFONTID, &font) < 0) return 0; swf_FreeTags(&swf); return font; } } void swf_SetEditText(TAG * tag, U16 flags, SRECT r, const char *text, RGBA * color, int maxlength, U16 font, U16 height, EditTextLayout * layout, const char *variable) { swf_SetRect(tag, &r); swf_ResetWriteBits(tag); flags &= ~(ET_HASTEXT | ET_HASTEXTCOLOR | ET_HASMAXLENGTH | ET_HASFONT | ET_HASLAYOUT); if (text) flags |= ET_HASTEXT; if (color) flags |= ET_HASTEXTCOLOR; if (maxlength) flags |= ET_HASMAXLENGTH; if (font) flags |= ET_HASFONT; if (layout) flags |= ET_HASLAYOUT; swf_SetBits(tag, flags, 16); if (flags & ET_HASFONT) { swf_SetU16(tag, font); //font swf_SetU16(tag, height); //fontheight } if (flags & ET_HASTEXTCOLOR) { swf_SetRGBA(tag, color); } if (flags & ET_HASMAXLENGTH) { swf_SetU16(tag, maxlength); //maxlength } if (flags & ET_HASLAYOUT) { swf_SetU8(tag, layout->align); //align swf_SetU16(tag, layout->leftmargin); //left margin swf_SetU16(tag, layout->rightmargin); //right margin swf_SetU16(tag, layout->indent); //indent swf_SetU16(tag, layout->leading); //leading } swf_SetString(tag, variable); if (flags & ET_HASTEXT) swf_SetString(tag, text); } SRECT swf_SetDefineText(TAG * tag, SWFFONT * font, RGBA * rgb, const char *text, int scale) { SRECT r; U8 gbits, abits; U8 *utext = (U8 *) strdup(text); U8 *upos = utext; int x = 0, y = 0; int pos = 0; int ystep = 0; if (font->layout) { r = swf_TextCalculateBBoxUTF8(font, (U8*)text, scale * 20); ystep = font->layout->leading; } else { fprintf(stderr, "No layout information- can't compute text bbox accurately"); /* Hm, without layout information, we can't compute a bounding box. We could call swf_FontCreateLayout to create a layout, but the caller probably doesn't want us to mess up his font structure. */ r.xmin = r.ymin = 0; r.xmax = r.ymax = 1024 * 20; ystep = 100; } swf_SetRect(tag, &r); /* The text matrix is pretty boring, as it doesn't apply to individual characters, but rather whole text objects (or at least whole char records- haven't tested). So it can't do anything which we can't already do with the placeobject tag we use for placing the text on the scene. */ swf_SetMatrix(tag, 0); swf_TextCountBitsUTF8(font, (U8*)text, scale * 20, &gbits, &abits); swf_SetU8(tag, gbits); swf_SetU8(tag, abits); while(*upos) { U8*next = upos; int count = 0; swf_TextSetInfoRecord(tag, font, (scale * 1024) / 100, rgb, x, y); //scale x = 0; while(*next && *next!=13 && *next!=10 && count<127) { readUTF8char(&next); count++; } if(next[0] == 13 || next[0] == 10) { x = SET_TO_ZERO; y += ystep; } if(next[0] == 13 && next[1] == 10) next++; if(next[0] == 13 || next[0] == 10) { *next = 0; next++; } /* now set the text params- notice that a font size of 1024 (or 1024*20 for definefont3) means that the glyphs will be displayed exactly as they would be in/with a defineshape. This is not documented in the specs. */ /* set the actual text- notice that we just pass our scale parameter over, as TextSetCharRecord calculates with percent, too */ swf_TextSetCharRecordUTF8(tag, font, upos, scale * 20, gbits, abits); upos= next; } free(utext); swf_SetU8(tag, 0); return r; } void swf_FontCreateLayout(SWFFONT * f) { S16 leading = 0; int t; if (f->layout) return; if (!f->numchars) return; f->layout = (SWFLAYOUT *) rfx_calloc(sizeof(SWFLAYOUT)); f->layout->bounds = (SRECT *) rfx_alloc(f->numchars * sizeof(SRECT)); f->layout->ascent = 0; f->layout->descent = 0; for (t = 0; t < f->numchars; t++) { SHAPE2 *shape2; SRECT bbox; int width; shape2 = swf_ShapeToShape2(f->glyph[t].shape); if (!shape2) { fprintf(stderr, "Shape parse error\n"); exit(1); } bbox = swf_GetShapeBoundingBox(shape2); swf_Shape2Free(shape2); f->layout->bounds[t] = bbox; width = (bbox.xmax); /* The following is a heuristic- it may be that extractfont_DefineText has already found out some widths for individual characters (from the way they are used)- we now have to guess whether that width might be possible, which is the case if it isn't either much too big or much too small */ if (width > f->glyph[t].advance * 3 / 2 || width < f->glyph[t].advance / 2) f->glyph[t].advance = width; if (-bbox.ymin > f->layout->ascent) f->layout->ascent = -bbox.ymin; if (bbox.ymax > f->layout->descent) f->layout->descent = bbox.ymax; } } void swf_DrawText(drawer_t * draw, SWFFONT * font, int size, const char *text) { U8 *s = (U8 *) text; int advance = 0; while (*s) { SHAPE *shape; SHAPE2 *shape2; SHAPELINE *l; U32 c = readUTF8char(&s); int g = font->ascii2glyph[c]; shape = font->glyph[g].shape; if (((int) g) < 0) { fprintf(stderr, "No char %d in font %s\n", c, font->name ? (char *) font->name : "?"); continue; } shape2 = swf_ShapeToShape2(shape); l = shape2->lines; while (l) { if (l->type == moveTo) { FPOINT to; to.x = l->x * size / 100.0 / 20.0 + advance; to.y = l->y * size / 100.0 / 20.0; draw->moveTo(draw, &to); } else if (l->type == lineTo) { FPOINT to; to.x = l->x * size / 100.0 / 20.0 + advance; to.y = l->y * size / 100.0 / 20.0; draw->lineTo(draw, &to); } else if (l->type == splineTo) { FPOINT mid, to; mid.x = l->sx * size / 100.0 / 20.0 + advance; mid.y = l->sy * size / 100.0 / 20.0; to.x = l->x * size / 100.0 / 20.0 + advance; to.y = l->y * size / 100.0 / 20.0; draw->splineTo(draw, &mid, &to); } l = l->next; } swf_Shape2Free(shape2); advance += font->glyph[g].advance * size / 100.0 / 20.0; } } void swf_WriteFont_AS3(SWFFONT * font, char *filename) { if(!font->layout) swf_FontCreateLayout(font); SWF swf; memset(&swf, 0, sizeof(SWF)); swf.fileVersion = 9; swf.frameRate = 0x4000; swf.movieSize.xmax = 200; swf.movieSize.ymax = 200; if(!font->id) font->id=1; TAG *tag; swf.firstTag = tag = swf_InsertTag(tag, ST_DEFINEFONT3); swf_FontSetDefine2(tag, font); char*name = font->name?(char*)font->name:"font"; tag = swf_InsertTag(tag, ST_NAMECHARACTER); swf_SetU16(tag, font->id); swf_SetString(tag, name); tag = swf_InsertTag(tag, ST_EXPORTASSETS); swf_SetU16(tag, 1); swf_SetU16(tag, font->id); swf_SetString(tag, name); tag = swf_AddAS3FontDefine(tag, font->id, (char*)font->name); tag = swf_InsertTag(tag, ST_END); swf_SaveSWF(&swf, filename); swf_FreeTags(&swf); } void swf_WriteFont(SWFFONT * font, char *filename) { if(!font->layout) swf_FontCreateLayout(font); char viewer = 1; U16 id = 1; U16 depth = 1; font->id = id++; SWF swf; memset(&swf, 0, sizeof(SWF)); swf.fileVersion = 8; swf.frameRate = 0x4000; swf.movieSize.xmax = 1024*20; swf.movieSize.ymax = 768*20; TAG *tag; swf.firstTag = tag = swf_InsertTag(NULL, ST_SETBACKGROUNDCOLOR); swf_SetU8(tag, 0xe0);swf_SetU8(tag, 0xe0);swf_SetU8(tag, 0xff); tag = swf_InsertTag(tag, ST_DEFINEFONT3); swf_FontSetDefine2(tag, font); if(font->glyphnames) { int c; tag = swf_InsertTag(tag, ST_GLYPHNAMES); swf_SetU16(tag, font->id); swf_SetU16(tag, font->numchars); for (c = 0; c < font->numchars; c++) { if (font->glyphnames[c]) swf_SetString(tag, font->glyphnames[c]); else swf_SetString(tag, ""); } } if(viewer) { RGBA white = {255,255,255,255}; RGBA black = {255,0,0,0}; RGBA gray50 = {255,128,128,128}; RGBA green = {255,0,255,0}; int t; SCOORD miny = SCOORD_MAX; SCOORD maxy = SCOORD_MIN; double width = 0; U16 max_advance = 0; char*flags = rfx_calloc(font->numchars); double*xmin = rfx_calloc(sizeof(double)*(font->numchars+1)); double*xmax = rfx_calloc(sizeof(double)*(font->numchars+1)); int*xpos = rfx_calloc(sizeof(int)*(font->numchars+1)); for(t=0;tnumchars;t++) { SHAPE*s = font->glyph[t].shape; SHAPE2*s2 = swf_ShapeToShape2(s); SRECT r = swf_GetShapeBoundingBox(s2); // inside a definefont3, everything is 20x the resolution: double rx1 = r.xmin / 20.0; double ry1 = r.ymin / 20.0; double rx2 = r.xmax / 20.0; double ry2 = r.ymax / 20.0; xmin[t]= rx1; xmax[t]= rx2; if(ry1maxy) {maxy=ry2;} swf_Shape2Free(s2);free(s2); width += font->glyph[t].advance; if(font->glyph[t].advance>max_advance) max_advance = font->glyph[t].advance; } if(miny==SCOORD_MAX) miny=maxy=0; if(miny==maxy) maxy=miny+1; /* scale the font so that it's 256 pixels high */ double scale = (int)((256.0*1024.0/(maxy-miny))*20.0); double overlarge_factor; int fontsize; if(scale > 32767) { fontsize = 32767; overlarge_factor = scale / 32767.0; } else { fontsize = scale; overlarge_factor = 1.0; } int textid = id++; int spriteid = id++; SRECT r; r.xmin = 0; r.ymin = miny*fontsize/1024; r.xmax = width*fontsize/20480; r.ymax = maxy*fontsize/1024; tag = swf_InsertTag(tag, ST_DEFINETEXT); swf_SetU16(tag, textid); swf_SetRect(tag, &r); swf_SetMatrix(tag, NULL); U8 abits = 15; U8 gbits = swf_CountBits(font->numchars, 0); swf_SetU8(tag, gbits); swf_SetU8(tag, abits); RGBA rgb = {255,0,0,0}; swf_TextSetInfoRecord(tag, font, fontsize, &rgb, SET_TO_ZERO, SET_TO_ZERO); ActionTAG*array = 0; double x=0; array = action_PushString(array, "xpos"); for(t=0;tnumchars;t++) { swf_SetU8(tag, 1); int width = abs((xmax[t] - xmin[t+1])*fontsize/1024) + 60; array = action_PushInt(array, x/20 +(xmin[t]*scale/1024)/20); x += width * overlarge_factor; swf_SetBits(tag, t, gbits); swf_SetBits(tag, width, abits); swf_SetU8(tag, 128); } array = action_PushInt(array, x/20); array = action_PushInt(array, font->numchars+1); array = action_InitArray(array); array = action_SetVariable(array); swf_SetU8(tag, 0); if(font->layout) { tag = swf_InsertTag(tag, ST_DEFINESHAPE2); SHAPE* s; swf_ShapeNew(&s); int ls = swf_ShapeAddLineStyle(s,20,&white); int shapeid = id++; swf_SetU16(tag,shapeid); SRECT r; r.xmin = 0; r.xmax = 1024*20; r.ymin = 0; r.ymax = 256*20; swf_SetRect(tag,&r); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,ls,0,0); /* Ç and  are good chars to test ascent/descent extend */ int y1 = (-font->layout->ascent-miny*20.0)*256.0/(maxy-miny); int y2 = (font->layout->descent-miny*20.0)*256.0/(maxy-miny); swf_ShapeSetMove(tag,s,0,y1); swf_ShapeSetLine(tag,s,width,0); swf_ShapeSetMove(tag,s,0,y2); swf_ShapeSetLine(tag,s,width,0); swf_ShapeSetEnd(tag); swf_ShapeFree(s); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, shapeid, depth++, NULL, NULL, NULL); } /* shapes */ for(t=0;tnumchars;t++) { tag = swf_InsertTag(tag, ST_DEFINESHAPE2); SHAPE* s; swf_ShapeNew(&s); int ls = swf_ShapeAddLineStyle(s,20*2,&black); int ls2 = swf_ShapeAddLineStyle(s,20*2,&green); int fs = swf_ShapeAddSolidFillStyle(s, &gray50); int shapeid = id++; swf_SetU16(tag,shapeid); SRECT r; r.xmin = 0; r.xmax = 1024*20; r.ymin = 0; r.ymax = 512*20; swf_SetRect(tag,&r); swf_SetShapeHeader(tag,s); swf_ShapeSetAll(tag,s,0,0,ls,fs,0); SHAPE2*s2 = swf_ShapeToShape2(font->glyph[t].shape); SHAPELINE*l = s2->lines; int lastx=0,lasty=0; double x1 = (1024*20 - (xmax[t] - xmin[t])*20*2*scale/20480.0)/2; double y1 = -miny*20*scale*2/20480.0; double scalex = scale*2/20480.0; double scaley = scale*2/20480.0; while(l) { int lx = (l->x)*scalex+x1; int ly = (l->y)*scaley+y1; int sx = (l->sx)*scalex+x1; int sy = (l->sy)*scaley+y1; if(l->type == moveTo) { swf_ShapeSetMove(tag,s,lx,ly); } else if(l->type == lineTo) { swf_ShapeSetLine(tag,s,lx-lastx,ly-lasty); } else if(l->type == splineTo) { swf_ShapeSetCurve(tag,s,sx-lastx,sy-lasty,lx-sx,ly-sy); } lastx = lx; lasty = ly; l = l->next; } if(font->alignzones) { ALIGNZONE*zone = &font->alignzones[t]; swf_ShapeSetAll(tag,s,0,0,ls2,SET_TO_ZERO,SET_TO_ZERO); if((zone->x&zone->dx)!=0xffff) { double x = F16toFloat(zone->x)*20480.0*scalex+x1; double dx = (F16toFloat(zone->x)+F16toFloat(zone->dx))*20480.0*scalex+x1; swf_ShapeSetMove(tag,s,x,0); swf_ShapeSetLine(tag,s,0,1024*20); swf_ShapeSetMove(tag,s,dx,0); swf_ShapeSetLine(tag,s,0,1024*20); } if((zone->y&zone->dy)!=0xffff) { double y = -F16toFloat(zone->y)*20480.0*scaley+y1; double dy = -(F16toFloat(zone->y)+F16toFloat(zone->dy))*20480.0*scaley+y1; swf_ShapeSetMove(tag,s,0,y); swf_ShapeSetLine(tag,s,1024*20,0); swf_ShapeSetMove(tag,s,0,dy); swf_ShapeSetLine(tag,s,1024*20,0); } } swf_ShapeSetEnd(tag); swf_ShapeFree(s); tag = swf_InsertTag(tag, ST_DEFINESPRITE); U16 spriteid=id++; swf_SetU16(tag, spriteid); swf_SetU16(tag, 1); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, shapeid, 1, NULL, NULL, NULL); tag = swf_InsertTag(tag, ST_END); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); MATRIX m; swf_GetMatrix(0, &m); m.ty = 20000; char txt[80]; sprintf(txt, "char%d", font->numchars-t); swf_ObjectPlace(tag, spriteid, depth++, &m, NULL, txt); } /* marker */ tag = swf_InsertTag(tag, ST_DEFINESHAPE2); int shapeid=id++; RGBA blue = {0xff,0xc0,0xc0,0xff}; swf_ShapeSetRectangle(tag, shapeid, 20, 20, &blue); tag = swf_InsertTag(tag, ST_DEFINESPRITE); U16 spriteid2=id++; swf_SetU16(tag, spriteid2); swf_SetU16(tag, 1); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, shapeid, 1, NULL, NULL, NULL); tag = swf_InsertTag(tag, ST_END); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, spriteid2, depth++, NULL, NULL, "marker"); /* textbar */ tag = swf_InsertTag(tag, ST_DEFINESPRITE); swf_SetU16(tag, spriteid); swf_SetU16(tag, 1); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); MATRIX m; swf_GetMatrix(0, &m); m.sx = 65536 * overlarge_factor; m.sy = 65536 * overlarge_factor; m.tx = 0; m.ty = -miny*256*20/(maxy-miny); swf_ObjectPlace(tag, textid, 1, &m, NULL, NULL); tag = swf_InsertTag(tag, ST_END); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, spriteid, depth++, NULL, NULL, "textbar"); /* marker2 */ RGBA blue2 = {0x80,0x80,0xff,0x80}; tag = swf_InsertTag(tag, ST_DEFINESHAPE3); int shapeid2=id++; swf_ShapeSetRectangleWithBorder(tag, shapeid2, 20, 20, &blue2, 0, &white); tag = swf_InsertTag(tag, ST_DEFINESPRITE); U16 spriteid3=id++; swf_SetU16(tag, spriteid3); swf_SetU16(tag, 1); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, shapeid2, 1, NULL, NULL, NULL); tag = swf_InsertTag(tag, ST_END); tag = swf_InsertTag(tag, ST_PLACEOBJECT2); swf_ObjectPlace(tag, spriteid3, depth++, NULL, NULL, "marker2"); char*data = " var mouseListener = new Object();" " var speed = 0;" " var myx = 0;" " var currentMouseOver, currentChar;" " mouseListener.onMouseDown = function() { " " eval(\"_root.char\"+currentChar)._y = 20000;" " currentChar = currentMouseOver;" " var i = currentMouseOver;" " eval(\"_root.char\"+i)._y = 256;" " _root.marker2._yscale=256*100;" " _root.marker2._xscale=(xpos[i-1]-xpos[i])*100;" " _root.marker2._x=xpos[i]+myx;" " };" " mouseListener.onMouseMove = function() { " " if(_ymouse<256) {" " speed = Math.abs(_xmouse-512)>256?(512-_xmouse)/8:0;" " } else {" " speed = 0;" " }; " " }; " " setInterval( function(){ " " if(_ymouse<256) {" " var i, x=_xmouse-_root.textbar._x;" " for(i=xpos.length-1;i>0;i--) {" " if(x0) {" " speed=0;" " } else if(myx+speed<-xpos[0]+1024) {" " speed=0;" " }" " myx+=speed;" " _root.textbar._x = myx;" " _root.marker._x += speed;" " _root.marker2._x += speed;" " }, 20);" " Mouse.addListener(mouseListener);" ; ActionTAG* atag = swf_ActionCompile(data, 6); tag = swf_InsertTag(tag, ST_DOACTION); swf_ActionSet(tag, array); swf_ActionSet(tag, atag); swf_SetU8(tag, 0); swf_ActionFree(atag); tag = swf_InsertTag(tag, ST_SHOWFRAME); free(flags); free(xmin); free(xmax); } tag = swf_InsertTag(tag, ST_END); swf.compressed = -1; swf_SaveSWF(&swf, filename); swf_FreeTags(&swf); } swftools_0.9.2+git20130725.orig/lib/modules/swffilter.c0000644000175000017500000002452112216332640021716 0ustar gawaingawain#include #include #include "../rfxswf.h" char *filtername[] = { "dropshadow", "blur", "glow", "bevel", "gradientglow", "convolution", "colormatrix", "gradientbevel", 0 }; void swf_SetFilter(TAG *tag, FILTER *filter) { swf_SetU8(tag, filter->type); if (filter->type == FILTERTYPE_BLUR) { FILTER_BLUR *f = (FILTER_BLUR *)filter; swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); U8 flags = f->passes << 3; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_GLOW) { FILTER_GLOW *f = (FILTER_GLOW *)filter; swf_SetRGBA(tag, &f->rgba); swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); swf_SetFixed8(tag, f->strength); U8 flags = f->innerglow << 7 | f->knockout << 6 | f->composite << 5 | f->passes; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_DROPSHADOW) { FILTER_DROPSHADOW *f = (FILTER_DROPSHADOW *)filter; swf_SetRGBA(tag, &f->color); swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); swf_SetFixed(tag, f->angle); swf_SetFixed(tag, f->distance); swf_SetFixed8(tag, f->strength); U8 flags = f->innershadow << 7 | f->knockout << 6 | f->composite << 5 | f->passes; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_GRADIENTGLOW) { FILTER_GRADIENTGLOW *f = (FILTER_GRADIENTGLOW *)filter; swf_SetU8(tag, f->gradient->num); int s; for (s = 0; s < f->gradient->num; s++) swf_SetRGBA(tag, &f->gradient->rgba[s]); for (s = 0; s < f->gradient->num; s++) swf_SetU8(tag, f->gradient->ratios[s]); swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); swf_SetFixed(tag, f->angle); swf_SetFixed(tag, f->distance); swf_SetFixed8(tag, f->strength); U8 flags = f->innershadow << 7 | f->knockout << 6 | f->composite << 5 | f->ontop << 4 | f->passes; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_BEVEL) { FILTER_BEVEL *f = (FILTER_BEVEL *)filter; swf_SetRGBA(tag, &f->shadow); swf_SetRGBA(tag, &f->highlight); swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); swf_SetFixed(tag, f->angle); swf_SetFixed(tag, f->distance); swf_SetFixed8(tag, f->strength); U8 flags = f->innershadow << 7 | f->knockout << 6 | f->composite << 5 | f->ontop << 4 | f->passes; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_GRADIENTBEVEL) { FILTER_GRADIENTBEVEL *f = (FILTER_GRADIENTBEVEL *)filter; swf_SetU8(tag, f->gradient->num); int s; for (s = 0; s < f->gradient->num; s++) swf_SetRGBA(tag, &f->gradient->rgba[s]); for (s = 0; s < f->gradient->num; s++) swf_SetU8(tag, f->gradient->ratios[s]); swf_SetFixed(tag, f->blurx); swf_SetFixed(tag, f->blury); swf_SetFixed(tag, f->angle); swf_SetFixed(tag, f->distance); swf_SetFixed8(tag, f->strength); U8 flags = f->innershadow << 7 | f->knockout << 6 | f->composite << 5 | f->ontop << 4 | f->passes; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_CONVOLUTION) { FILTER_CONVOLUTION *f = (FILTER_CONVOLUTION *)filter; swf_SetU8(tag, f->matrixx); swf_SetU8(tag, f->matrixy); swf_SetFloat(tag, f->divisor); swf_SetFloat(tag, f->bias); int s; for (s = 0; s < f->matrixx * f->matrixy; s++) swf_SetFloat(tag, f->matrix[s]); swf_SetRGBA(tag, &f->defaultcolor); U8 flags = f->clampmode << 1 | f->preservealpha; swf_SetU8(tag, flags); } else if (filter->type == FILTERTYPE_COLORMATRIX) { FILTER_COLORMATRIX *f = (FILTER_COLORMATRIX *)filter; int s; for (s = 0; s < 20; s++) swf_SetFloat(tag, f->matrix[s]); } else { fprintf(stderr, "Writing of filter type %02x not supported yet\n", filter->type); } } FILTER *swf_GetFilter(TAG *tag) { U8 type = swf_GetU8(tag); FILTER *filter; if (type == FILTERTYPE_BLUR) { FILTER_BLUR *f = (FILTER_BLUR *)rfx_calloc(sizeof (FILTER_BLUR)); f->type = type; f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); U8 flags = swf_GetU8(tag); f->passes = (flags & 0xFF) >> 3; return (FILTER *)f; } else if (type == FILTERTYPE_GLOW) { FILTER_GLOW *f = (FILTER_GLOW *)rfx_calloc(sizeof (FILTER_GLOW)); f->type = type; swf_GetRGBA(tag, &f->rgba); f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); f->strength = swf_GetFixed8(tag); U8 flags = swf_GetU8(tag); f->passes = flags & 0x1F; f->innerglow = (flags >> 7) & 1; f->knockout = (flags >> 6) & 1; f->composite = (flags >> 5) & 1; return (FILTER *)f; } else if (type == FILTERTYPE_DROPSHADOW) { FILTER_DROPSHADOW *f = (FILTER_DROPSHADOW *)rfx_calloc(sizeof (FILTER_DROPSHADOW)); f->type = type; swf_GetRGBA(tag, &f->color); f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); f->angle = swf_GetFixed(tag); f->distance = swf_GetFixed(tag); f->strength = swf_GetFixed8(tag); U8 flags = swf_GetU8(tag); f->passes = flags & 0x1F; f->innershadow = (flags >> 7) & 1; f->knockout = (flags >> 6) & 1; f->composite = (flags >> 5) & 1; return (FILTER *)f; } else if (type == FILTERTYPE_GRADIENTGLOW) { FILTER_GRADIENTGLOW *f = (FILTER_GRADIENTGLOW *)rfx_calloc(sizeof (FILTER_GRADIENTGLOW)); f->type = type; f->gradient = (GRADIENT *)rfx_calloc(sizeof (GRADIENT)); f->gradient->num = swf_GetU8(tag); f->gradient->rgba = (RGBA *)rfx_calloc(sizeof (RGBA) * f->gradient->num); f->gradient->ratios = (U8 *)rfx_calloc(sizeof (U8) * f->gradient->num); int s; for (s = 0; s < f->gradient->num; s++) swf_GetRGBA(tag, &f->gradient->rgba[s]); for (s = 0; s < f->gradient->num; s++) f->gradient->ratios[s] = swf_GetU8(tag); f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); f->angle = swf_GetFixed(tag); f->distance = swf_GetFixed(tag); f->strength = swf_GetFixed8(tag); U8 flags = swf_GetU8(tag); f->passes = flags & 0x0F; f->innershadow = (flags >> 7) & 1; f->knockout = (flags >> 6) & 1; f->composite = (flags >> 5) & 1; f->ontop = (flags >> 4) & 1; return (FILTER *)f; } else if (type == FILTERTYPE_BEVEL) { FILTER_BEVEL *f = (FILTER_BEVEL *)rfx_calloc(sizeof (FILTER_BEVEL)); f->type = type; swf_GetRGBA(tag, &f->shadow); swf_GetRGBA(tag, &f->highlight); f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); f->angle = swf_GetFixed(tag); f->distance = swf_GetFixed(tag); f->strength = swf_GetFixed8(tag); U8 flags = swf_GetU8(tag); f->passes = flags & 0x0F; f->innershadow = (flags >> 7) & 1; f->knockout = (flags >> 6) & 1; f->composite = (flags >> 5) & 1; f->ontop = (flags >> 4) & 1; return (FILTER *)f; } else if (type == FILTERTYPE_GRADIENTBEVEL) { FILTER_GRADIENTBEVEL *f = (FILTER_GRADIENTBEVEL *)rfx_calloc(sizeof (FILTER_GRADIENTBEVEL)); f->type = type; f->gradient = (GRADIENT *)rfx_calloc(sizeof (GRADIENT)); f->gradient->num = swf_GetU8(tag); f->gradient->rgba = (RGBA *)rfx_calloc(sizeof (RGBA) * f->gradient->num); f->gradient->ratios = (U8 *)rfx_calloc(sizeof (U8) * f->gradient->num); int s; for (s = 0; s < f->gradient->num; s++) swf_GetRGBA(tag, &f->gradient->rgba[s]); for (s = 0; s < f->gradient->num; s++) f->gradient->ratios[s] = swf_GetU8(tag); f->blurx = swf_GetFixed(tag); f->blury = swf_GetFixed(tag); f->angle = swf_GetFixed(tag); f->distance = swf_GetFixed(tag); f->strength = swf_GetFixed8(tag); U8 flags = swf_GetU8(tag); f->passes = flags & 0x0F; f->innershadow = (flags >> 7) & 1; f->knockout = (flags >> 6) & 1; f->composite = (flags >> 5) & 1; f->ontop = (flags >> 4) & 1; return (FILTER *)f; } else if (type == FILTERTYPE_CONVOLUTION) { FILTER_CONVOLUTION *f = (FILTER_CONVOLUTION *)rfx_calloc(sizeof (FILTER_CONVOLUTION)); f->type = type; f->matrixx = swf_GetU8(tag); f->matrixy = swf_GetU8(tag); f->divisor = swf_GetFloat(tag); f->bias = swf_GetFloat(tag); f->matrix = (float *)rfx_calloc(f->matrixx * f->matrixy * sizeof (float)); int s; for (s = 0; s < f->matrixx * f->matrixy; s++) f->matrix[s] = swf_GetFloat(tag); swf_GetRGBA(tag, &f->defaultcolor); U8 flags = swf_GetU8(tag); f->clampmode = (flags >> 1) & 1; f->preservealpha = flags & 1; return (FILTER *)f; } else if (type == FILTERTYPE_COLORMATRIX) { FILTER_COLORMATRIX *f = (FILTER_COLORMATRIX *)rfx_calloc(sizeof (FILTER_COLORMATRIX)); f->type = type; int s; for (s = 0; s < 20; s++) f->matrix[s] = swf_GetFloat(tag); return (FILTER *)f; } else { fprintf(stderr, "Reading of filter type %02x not supported yet\n", type); } return NULL; } FILTER *swf_NewFilter(U8 type) { FILTER *f = 0; if (type == FILTERTYPE_BLUR) { f = (FILTER *)rfx_calloc(sizeof (FILTER_BLUR)); memset(f, 0, sizeof (FILTER_BLUR)); } else if (type == FILTERTYPE_GLOW) { f = (FILTER *)rfx_calloc(sizeof (FILTER_GLOW)); memset(f, 0, sizeof (FILTER_GLOW)); } else if (type == FILTERTYPE_DROPSHADOW) { f = (FILTER *)rfx_calloc(sizeof (FILTER_DROPSHADOW)); memset(f, 0, sizeof (FILTER_DROPSHADOW)); } else if (type == FILTERTYPE_GRADIENTGLOW) { f = (FILTER *)rfx_calloc(sizeof (FILTER_GRADIENTGLOW)); memset(f, 0, sizeof (FILTER_GRADIENTGLOW)); } else if (type == FILTERTYPE_BEVEL) { f = (FILTER *)rfx_calloc(sizeof (FILTER_BEVEL)); memset(f, 0, sizeof (FILTER_BEVEL)); } else if (type == FILTERTYPE_GRADIENTBEVEL) { f = (FILTER *)rfx_calloc(sizeof (FILTER_GRADIENTBEVEL)); memset(f, 0, sizeof (FILTER_GRADIENTBEVEL)); } else if (type == FILTERTYPE_CONVOLUTION) { f = (FILTER *)rfx_calloc(sizeof (FILTER_CONVOLUTION)); memset(f, 0, sizeof (FILTER_CONVOLUTION)); } else if (type == FILTERTYPE_COLORMATRIX) { f = (FILTER *)rfx_calloc(sizeof (FILTER_COLORMATRIX)); memset(f, 0, sizeof (FILTER_COLORMATRIX)); } else { fprintf(stderr, "Creation of filter type %02x not supported yet\n", type); } if (f) f->type = type; return f; } void swf_DeleteFilter(FILTER *f) { if (f->type == FILTERTYPE_GRADIENTGLOW && ((FILTER_GRADIENTGLOW *)f)->gradient) { if (((FILTER_GRADIENTGLOW *)f)->gradient->rgba) free(((FILTER_GRADIENTGLOW *)f)->gradient->rgba); if (((FILTER_GRADIENTGLOW *)f)->gradient->ratios) free(((FILTER_GRADIENTGLOW *)f)->gradient->ratios); free(((FILTER_GRADIENTGLOW *)f)->gradient); } if (f->type == FILTERTYPE_GRADIENTBEVEL && ((FILTER_GRADIENTBEVEL *)f)->gradient) { if (((FILTER_GRADIENTBEVEL *)f)->gradient->rgba) free(((FILTER_GRADIENTBEVEL *)f)->gradient->rgba); if (((FILTER_GRADIENTBEVEL *)f)->gradient->ratios) free(((FILTER_GRADIENTBEVEL *)f)->gradient->ratios); free(((FILTER_GRADIENTBEVEL *)f)->gradient); } if (f->type == FILTERTYPE_CONVOLUTION && ((FILTER_CONVOLUTION *)f)->matrix) free(((FILTER_CONVOLUTION *)f)->matrix); free(f); } swftools_0.9.2+git20130725.orig/lib/gfximage.c0000644000175000017500000003074612216332640020036 0ustar gawaingawain#include #include #include #include #include #include "../config.h" #include "jpeg.h" #include "png.h" #include "mem.h" #include "gfximage.h" #include "types.h" #ifdef HAVE_FFTW3 #include #endif #define MOD(x,d) (((x)+(d))%(d)) gfximage_t*gfximage_new(int width, int height) { gfximage_t*i = rfx_calloc(sizeof(gfximage_t)); i->data = rfx_calloc(width*height*4); i->width = width; i->height = height; return i; } void gfximage_save_jpeg(gfximage_t*img, const char*filename, int quality) { int x,y; int l = img->width*img->height; unsigned char*data = (unsigned char*)rfx_alloc(img->width*img->height*3); int s,t; for(t=0,s=0;tdata[t].r; data[s+1] = img->data[t].g; data[s+2] = img->data[t].b; } jpeg_save(data, img->width, img->height, quality, filename); free(data); } void gfximage_save_png(gfximage_t*image, const char*filename) { png_write(filename, (void*)image->data, image->width, image->height); } void gfximage_save_png_quick(gfximage_t*image, const char*filename) { png_write_quick(filename, (void*)image->data, image->width, image->height); } typedef struct scale_lookup { int pos; unsigned int weight; } scale_lookup_t; typedef struct rgba_int { unsigned int r,g,b,a; } rgba_int_t; static int bicubic = 0; static scale_lookup_t**make_scale_lookup(int width, int newwidth) { scale_lookup_t*lookupx = (scale_lookup_t*)rfx_alloc((width>newwidth?width:newwidth)*2*sizeof(scale_lookup_t)); scale_lookup_t**lblockx = (scale_lookup_t**)rfx_alloc((newwidth+1)*sizeof(scale_lookup_t**)); double fx = ((double)width)/((double)newwidth); double px = 0; int x; scale_lookup_t*p_x = lookupx; if(newwidth<=width) { for(x=0;x=width) tox = width-1; for(xx=fromx;xx<=tox;xx++) { if(xx==fromx && xx==tox) p_x->weight = 256; else if(xx==fromx) p_x->weight = xweight; else if(xx==tox) p_x->weight = 256-w; else p_x->weight = i; w+=p_x->weight; p_x->pos = xx; p_x++; } px = ex; } } else { for(x=0;x=width) ix2=width-1; lblockx[x] = p_x; if(bicubic) r = -2*r*r*r+3*r*r; p_x[0].weight = (int)(256*(1-r)); p_x[0].pos = ix1; p_x[1].weight = 256-p_x[0].weight; p_x[1].pos = ix2; p_x+=2; px += fx; } } lblockx[newwidth] = p_x; return lblockx; } static void encodeMonochromeImage(gfxcolor_t*data, int width, int height, gfxcolor_t*colors) { int t; int len = width*height; U32* img = (U32*)data; U32 color1 = img[0]; U32 color2 = 0; for(t=1;t> 8; data[t].g = (colors[0].g * (255-m) + colors[1].g * m) >> 8; data[t].b = (colors[0].b * (255-m) + colors[1].b * m) >> 8; data[t].a = (colors[0].a * (255-m) + colors[1].a * m) >> 8; } } void blurImage(gfxcolor_t*src, int width, int height, int r) __attribute__ ((noinline)); void blurImage(gfxcolor_t*src, int width, int height, int r) { int e = 2; // r times e is the sampling interval double*gauss = (double*)rfx_alloc(r*e*sizeof(double)); double sum=0; int x; for(x=0;x> 16; d[x].g = g >> 16; d[x].b = b >> 16; d[x].a = a >> 16; } for(;x> 16; d[yy].g = g >> 16; d[yy].b = b >> 16; d[yy].a = a >> 16; yy += width; } for(;ywidth; int height = img->height; int size = width*height; int t; U32* data = (U32*)img->data; U32 color1 = data[0]; U32 color2 = 0; for(t=1;twidth; int height = image->height; gfxcolor_t*data = image->data; if(gfximage_getNumberOfPaletteEntries(image) == 2) { monochrome=1; encodeMonochromeImage(data, width, height, monochrome_colors); int r1 = width / newwidth; int r2 = height / newheight; int r = r14) { /* high-resolution monochrome images are usually dithered, so low-pass filter them first to get rid of any moire patterns */ blurImage(data, width, height, r+1); } } tmpline = (rgba_int_t*)rfx_alloc(width*sizeof(rgba_int_t)); newdata = (gfxcolor_t*)rfx_alloc(newwidth*newheight*sizeof(gfxcolor_t)); lblockx = make_scale_lookup(width, newwidth); lblocky = make_scale_lookup(height, newheight); for(p=lblocky[0];ppos*=width; for(y=0;ypos]; scale_lookup_t*p_x; int weight = p_y->weight; for(x=0;xpos]; unsigned int weight = p_x->weight; r += col->r*weight; g += col->g*weight; b += col->b*weight; a += col->a*weight; p_x++; } while (p_xr = r >> 16; destline->g = g >> 16; destline->b = b >> 16; destline->a = a >> 16; destline++; } } if(monochrome) decodeMonochromeImage(newdata, newwidth, newheight, monochrome_colors); rfx_free(tmpline); rfx_free(*lblockx); rfx_free(lblockx); rfx_free(*lblocky); rfx_free(lblocky); gfximage_t*image2 = (gfximage_t*)malloc(sizeof(gfximage_t)); image2->data = newdata; image2->width = newwidth; image2->height = newheight; return image2; } #ifdef HAVE_FFTW3 gfximage_t* gfximage_rescale_fft(gfximage_t*image, int newwidth, int newheight) { int channel; int oldwidth = image->width; int oldheight = image->height; unsigned char*rgba = (unsigned char*)image->data; bool has_alpha = gfximage_has_alpha(image); bool monochrome = 0; gfxcolor_t monochrome_colors[2]; if(gfximage_getNumberOfPaletteEntries(image) == 2) { monochrome=1; encodeMonochromeImage(image->data, image->width, image->height, monochrome_colors); } float*data = fftwf_malloc(sizeof(float)*oldwidth*oldheight); int osize = oldwidth*oldheight; int nsize = newwidth*newheight; assert(newwidth <= oldwidth && newheight <= oldheight); gfxcolor_t*rgba_new = malloc(newwidth*newheight*sizeof(gfxcolor_t)); unsigned char*rgba_new_asbytes = (unsigned char*)rgba_new; int oxwidth = oldwidth/2+1; int oxsize = oxwidth*oldheight; fftwf_complex* fft = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*oxwidth*oldheight); fftwf_complex* fft2 = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*newwidth*newheight); fftwf_complex* data2 = fftwf_malloc(sizeof(fftwf_complex)*newwidth*newheight); fftwf_plan plan1 = fftwf_plan_dft_r2c_2d(oldheight, oldwidth, data, fft, FFTW_ESTIMATE); fftwf_plan plan2 = fftwf_plan_dft_2d(newheight, newwidth, fft2, data2, FFTW_BACKWARD, FFTW_ESTIMATE); double ff = 1.0/osize; for(channel=0;channel<4;channel++) { if(channel==0 && !has_alpha) continue; if(channel>=1 && monochrome) continue; int t; for(t=0;t> 2; for(y=0;y255?255:f); } } fftwf_destroy_plan(plan1); fftwf_destroy_plan(plan2); free(fft); free(fft2); if(!has_alpha) { int t; for(t=0;tdata = rgba_new; image2->width = newwidth; image2->height = newheight; return image2; } #endif #ifdef HAVE_FFTW3 gfximage_t* gfximage_rescale(gfximage_t*image, int newwidth, int newheight) { //return gfximage_rescale_fft(image, newwidth, newheight); return gfximage_rescale_old(image, newwidth, newheight); } #else gfximage_t* gfximage_rescale(gfximage_t*image, int newwidth, int newheight) { return gfximage_rescale_old(image, newwidth, newheight); } #endif bool gfximage_has_alpha(gfximage_t*img) { int size = img->width*img->height; gfxcolor_t*data = img->data; int t; for(t=0;tdata); b->data = 0; free(b); } swftools_0.9.2+git20130725.orig/lib/Makefile.in0000644000175000017500000002210312216332640020134 0ustar gawaingawaintop_builddir = .. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ../Makefile.common all: librfxswf$(A) libgfxpdf$(A) libbase$(A) libgfx$(A) libgfxswf$(A) lame_objects = lame/psymodel.$(O) lame/fft.$(O) lame/newmdct.$(O) lame/quantize.$(O) lame/takehiro.$(O) lame/reservoir.$(O) lame/quantize_pvt.$(O) lame/vbrquantize.$(O) lame/encoder.$(O) lame/id3tag.$(O) lame/version.$(O) lame/tables.$(O) lame/util.$(O) lame/bitstream.$(O) lame/set_get.$(O) lame/VbrTag.$(O) lame/lame.$(O) lame_in_source = @lame_in_source@ h263_objects = h.263/dct.$(O) h.263/h263tables.$(O) h.263/swfvideo.$(O) as12compiler_objects = action/assembler.$(O) action/compile.$(O) action/lex.swf4.$(O) action/lex.swf5.$(O) action/libming.$(O) action/swf4compiler.tab.$(O) action/swf5compiler.tab.$(O) action/actioncompiler.$(O) as12compiler_in_source = $(as12compiler_objects) as3compiler_objects = as3/abc.$(O) as3/pool.$(O) as3/files.$(O) as3/opcodes.$(O) as3/code.$(O) as3/registry.$(O) as3/builtin.$(O) as3/tokenizer.yy.$(O) as3/parser.tab.$(O) as3/scripts.$(O) as3/compiler.$(O) as3/import.$(O) as3/expr.$(O) as3/parser_help.$(O) as3/state.$(O) as3/common.$(O) as3/initcode.$(O) as3/assets.$(O) gfxpoly_objects = gfxpoly/active.$(O) gfxpoly/convert.$(O) gfxpoly/poly.$(O) gfxpoly/renderpoly.$(O) gfxpoly/stroke.$(O) gfxpoly/wind.$(O) gfxpoly/xrow.$(O) gfxpoly/moments.$(O) rfxswf_modules = modules/swfbits.c modules/swfaction.c modules/swfdump.c modules/swfcgi.c modules/swfbutton.c modules/swftext.c modules/swffont.c modules/swftools.c modules/swfsound.c modules/swfshape.c modules/swfobject.c modules/swfdraw.c modules/swffilter.c modules/swfrender.c h.263/swfvideo.c modules/swfalignzones.c base_objects=q.$(O) base64.$(O) utf8.$(O) png.$(O) jpeg.$(O) wav.$(O) mp3.$(O) os.$(O) bitio.$(O) log.$(O) mem.$(O) xml.$(O) ttf.$(O) kdtree.$(O) graphcut.$(O) devices=devices/dummy.$(O) devices/file.$(O) devices/render.$(O) devices/text.$(O) devices/record.$(O) devices/ops.$(O) devices/polyops.$(O) devices/bbox.$(O) devices/rescale.$(O) @DEVICE_OPENGL@ @DEVICE_PDF@ filters=filters/alpha.$(O) filters/remove_font_transforms.$(O) filters/one_big_font.$(O) filters/vectors_to_glyphs.$(O) filters/remove_invisible_characters.$(O) filters/flatten.$(O) filters/rescale_images.$(O) gfx_objects=gfximage.$(O) gfxtools.$(O) gfxfont.$(O) gfxfilter.$(O) $(devices) $(filters) rfxswf_objects=modules/swfaction.$(O) modules/swfbits.$(O) modules/swfbutton.$(O) modules/swfcgi.$(O) modules/swfdraw.$(O) modules/swfdump.$(O) modules/swffilter.$(O) modules/swffont.$(O) modules/swfobject.$(O) modules/swfrender.$(O) modules/swfshape.$(O) modules/swfsound.$(O) modules/swftext.$(O) modules/swftools.$(O) modules/swfalignzones.$(O) %.$(O): %.c $(C) $< -o $@ lame/%.$(O): lame/%.c $(C) $< -o $@ action/%.$(O): action/%.c $(C) $< -o $@ as3/%.$(O): as3/%.c $(C) $< -o $@ gfxpoly/%.$(O): gfxpoly/%.c $(C) $< -o $@ bitio.$(O): bitio.c bitio.h $(C) bitio.c -o $@ drawer.$(O): drawer.c drawer.h $(C) drawer.c -o $@ q.$(O): q.c q.h $(top_builddir)/config.h $(C) q.c -o $@ utf8.$(O): utf8.c utf8.h $(top_builddir)/config.h $(C) utf8.c -o $@ mem.$(O): mem.c mem.h $(top_builddir)/config.h $(C) mem.c -o $@ png.$(O): png.c png.h $(top_builddir)/config.h $(C) png.c -o $@ jpeg.$(O): jpeg.c jpeg.h $(top_builddir)/config.h $(C) jpeg.c -o $@ mp3.$(O): mp3.c mp3.h $(top_builddir)/config.h $(C) mp3.c -o $@ wav.$(O): wav.c wav.h $(top_builddir)/config.h $(C) wav.c -o $@ xml.$(O): xml.c xml.h bitio.h $(C) xml.c -o $@ graphcut.$(O): graphcut.c graphcut.h $(C) graphcut.c -o $@ ttf.$(O): ttf.c ttf.h $(C) ttf.c -o $@ os.$(O): os.c os.h $(top_builddir)/config.h $(C) -DSWFTOOLS_DATADIR=\"$(pkgdatadir)\" os.c -o $@ modules/swfaction.$(O): modules/swfaction.c rfxswf.h $(C) modules/swfaction.c -o $@ modules/swfbits.$(O): modules/swfbits.c rfxswf.h $(C) modules/swfbits.c -o $@ modules/swfbutton.$(O): modules/swfbutton.c rfxswf.h $(C) modules/swfbutton.c -o $@ modules/swfcgi.$(O): modules/swfcgi.c rfxswf.h $(C) modules/swfcgi.c -o $@ modules/swfdraw.$(O): modules/swfdraw.c rfxswf.h $(C) modules/swfdraw.c -o $@ modules/swfdump.$(O): modules/swfdump.c rfxswf.h $(C) modules/swfdump.c -o $@ modules/swffilter.$(O): modules/swffilter.c rfxswf.h $(C) modules/swffilter.c -o $@ modules/swfalignzones.$(O): modules/swfalignzones.c rfxswf.h $(C) modules/swfalignzones.c -o $@ modules/swffont.$(O): modules/swffont.c rfxswf.h $(C) modules/swffont.c -o $@ modules/swfobject.$(O): modules/swfobject.c rfxswf.h $(C) modules/swfobject.c -o $@ modules/swfrender.$(O): modules/swfrender.c rfxswf.h $(C) modules/swfrender.c -o $@ modules/swfshape.$(O): modules/swfshape.c rfxswf.h $(C) modules/swfshape.c -o $@ modules/swfsound.$(O): modules/swfsound.c rfxswf.h $(C) modules/swfsound.c -o $@ modules/swftext.$(O): modules/swftext.c rfxswf.h $(C) modules/swftext.c -o $@ modules/swftools.$(O): modules/swftools.c rfxswf.h $(C) modules/swftools.c -o $@ gfximage.$(O): gfximage.c gfximage.h gfxdevice.h $(top_builddir)/config.h $(C) gfximage.c -o $@ gfxtools.$(O): gfxtools.c gfxtools.h $(top_builddir)/config.h $(C) gfxtools.c -o $@ gfxfont.$(O): gfxfont.c gfxfont.h ttf.h $(top_builddir)/config.h $(C) gfxfont.c -o $@ gfxfilter.$(O): gfxfilter.c gfxfilter.h ttf.h $(top_builddir)/config.h $(C) gfxfilter.c -o $@ gfxwindow.$(O): gfxwindow_win32.c gfxwindow_unix.c gfxwindow.c gfxwindow.h $(C) gfxwindow.c -o $@ log.$(O): log.c log.h $(C) log.c -o $@ rfxswf.$(O): rfxswf.c rfxswf.h drawer.h bitio.h log.h $(top_builddir)/config.h $(C) rfxswf.c -o $@ #$(as12compiler_objects): # cd action;$(MAKE) all;cd .. h.263/dct.$(O): h.263/dct.c h.263/dct.h $(C) h.263/dct.c -o h.263/dct.$(O) h.263/h263tables.$(O): h.263/h263tables.c h.263/h263tables.h $(C) h.263/h263tables.c -o h.263/h263tables.$(O) h.263/swfvideo.$(O): h.263/swfvideo.c h.263/h263tables.h h.263/dct.h $(C) h.263/swfvideo.c -o h.263/swfvideo.$(O) devices/swf.$(O): devices/swf.c devices/swf.h $(C) devices/swf.c -o devices/swf.$(O) devices/file.$(O): devices/file.c devices/file.h $(C) devices/file.c -o devices/file.$(O) devices/dummy.$(O): devices/dummy.c devices/dummy.h $(C) devices/dummy.c -o devices/dummy.$(O) devices/render.$(O): devices/render.c devices/render.h $(C) devices/render.c -o devices/render.$(O) devices/opengl.$(O): devices/opengl.c devices/opengl.h $(C) devices/opengl.c -o devices/opengl.$(O) devices/polyops.$(O): devices/polyops.c devices/polyops.h gfxpoly.h $(C) devices/polyops.c -o devices/polyops.$(O) devices/record.$(O): devices/record.c devices/record.h $(C) devices/record.c -o devices/record.$(O) devices/text.$(O): devices/text.c devices/text.h $(C) devices/text.c -o devices/text.$(O) devices/ops.$(O): devices/ops.c devices/ops.h $(C) devices/ops.c -o devices/ops.$(O) devices/rescale.$(O): devices/rescale.c devices/rescale.h $(C) devices/rescale.c -o devices/rescale.$(O) devices/bbox.$(O): devices/bbox.c devices/bbox.h $(C) devices/bbox.c -o devices/bbox.$(O) devices/lrf.$(O): devices/lrf.c devices/lrf.h $(C) devices/lrf.c -o devices/lrf.$(O) filters/alpha.$(O): filters/alpha.c gfxfilter.h $(C) filters/alpha.c -o filters/alpha.$(O) filters/flatten.$(O): filters/flatten.c gfxfilter.h $(C) filters/flatten.c -o filters/flatten.$(O) filters/remove_font_transform.$(O): filters/remove_font_transform.c gfxfilter.h $(C) filters/remove_font_transform.c -o filters/remove_font_transform.$(O) filters/remove_invisible_characters.$(O): filters/remove_invisible_characters.c gfxfilter.h $(C) filters/remove_invisible_characters.c -o filters/remove_invisible_characters.$(O) filters/rescale_images.$(O): filters/rescale_images.c gfxfilter.h $(C) filters/rescale_images.c -o filters/rescale_images.$(O) readers/swf2.$(O): readers/swf.c readers/swf.h $(C) readers/swf.c -o readers/swf2.$(O) readers/image.$(O): readers/image.c readers/image.h $(C) readers/image.c -o readers/image.$(O) libbase$(A): $(base_objects) Makefile rm -f libbase$(A) $(AR) r libbase$(A) $(base_objects) $(RANLIB) libbase$(A) libgfxswf$(A): devices/swf.$(O) readers/swf2.$(O) readers/image.$(O) rm -f libgfxswf$(A) $(AR) r libgfxswf$(A) devices/swf.$(O) readers/swf2.$(O) readers/image.$(O) $(RANLIB) libgfxswf$(A) libgfx$(A): $(gfx_objects) $(gfxpoly_objects) Makefile rm -f libgfx$(A) $(AR) r libgfx$(A) $(gfx_objects) $(gfxpoly_objects) $(RANLIB) libgfx$(A) librfxswf$(A): Makefile $(rfxswf_objects) rfxswf.$(O) drawer.$(O) $(lame_in_source) $(h263_objects) $(as12compiler_in_source) $(as3compiler_objects) Makefile rm -f librfxswf$(A) $(AR) r librfxswf$(A) $(rfxswf_objects) rfxswf.$(O) drawer.$(O) $(lame_in_source) $(h263_objects) $(as12compiler_in_source) $(as3compiler_objects) $(RANLIB) librfxswf$(A) libgfxpdf$(A): pdf/VectorGraphicOutputDev.cc pdf/VectorGraphicOutputDev.h pdf/pdf.cc pdf/pdf.h cd pdf;$(MAKE) libgfxpdf tests: png.test.c $(L) png.test.c -o png.test $(LIBS) install: uninstall: clean: rm -f *.o *.obj *.lo *.a *.lib *.la gmon.out for dir in modules filters devices swf as3 readers art h.263 gfxpoly;do rm -f $$dir/*.o $$dir/*.obj $$dir/*.lo $$dir/*.a $$dir/*.lib $$dir/*.la $$dir/gmon.out;done cd lame && $(MAKE) clean && cd .. || true cd action && $(MAKE) clean && cd .. cd python && $(MAKE) clean && cd .. cd pdf && $(MAKE) clean && cd .. swftools_0.9.2+git20130725.orig/lib/drawer.h0000644000175000017500000000321012216332640017522 0ustar gawaingawain/* drawer.h part of swftools A generic structure for providing vector drawing. Copyright (C) 2003 Matthias Kramm 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 */ #ifndef __drawer_h__ #define __drawer_h__ typedef struct _FPOINT { float x,y; } FPOINT; typedef struct _drawer_t { void*internal; FPOINT pos; //last "to" void (*setLineStyle)(struct _drawer_t*draw, void*linestyle); void (*setFillStyle)(struct _drawer_t*draw, void*fillstyle); void (*moveTo)(struct _drawer_t*draw, FPOINT * to); void (*lineTo)(struct _drawer_t*draw, FPOINT * to); void (*splineTo)(struct _drawer_t*draw, FPOINT*c, FPOINT * to); void (*finish)(struct _drawer_t*draw); void (*dealloc)(struct _drawer_t*draw); } drawer_t; void draw_cubicTo(drawer_t*drawer, FPOINT* control1, FPOINT* control2, FPOINT* to); void draw_conicTo(drawer_t*drawer, FPOINT* control, FPOINT* to); void draw_string(drawer_t*drawer, const char*code); #endif swftools_0.9.2+git20130725.orig/lib/graphcut.c0000644000175000017500000004164612216332640020065 0ustar gawaingawain/* graphcut- a graphcut implementation based on the Boykov Kolmogorov algorithm Part of the swftools package. Copyright (c) 2007,2008,2009 Matthias Kramm This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include #include "graphcut.h" #include "mem.h" //#define DEBUG //#define CHECKS #ifdef DEBUG #define DBG #include #else #define DBG if(0) #define assert(x) (x) #endif #define ACTIVE 0x10 #define IN_TREE 0x20 #define TWOTREES typedef struct _posqueue_entry { node_t*pos; struct _posqueue_entry*next; } posqueue_entry_t; typedef struct _posqueue { posqueue_entry_t*list; } posqueue_t; typedef struct _graphcut_workspace { unsigned char*flags1; unsigned char*flags2; halfedge_t**back; graph_t*graph; node_t*pos1; node_t*pos2; posqueue_t*queue1; posqueue_t*queue2; posqueue_t*tmpqueue; } graphcut_workspace_t; static posqueue_t*posqueue_new() { posqueue_t*m = (posqueue_t*)malloc(sizeof(posqueue_t)); memset(m, 0, sizeof(posqueue_t)); return m; } static void posqueue_delete(posqueue_t*q) { posqueue_entry_t*l = q->list; while(l) { posqueue_entry_t*next = l->next; free(l); l = next; } free(q); } static inline void posqueue_addpos(posqueue_t*queue, node_t*pos) { posqueue_entry_t*old = queue->list; queue->list = malloc(sizeof(posqueue_entry_t)); queue->list->pos = pos; queue->list->next = old; } static inline node_t* posqueue_extract(posqueue_t*queue) { posqueue_entry_t*item = queue->list; node_t*pos; if(!item) return 0; pos = item->pos; queue->list = queue->list->next; free(item); return pos; } static inline int posqueue_notempty(posqueue_t*queue) { return (int)queue->list; } #define NR(p) ((p)->nr) static void posqueue_print(graphcut_workspace_t*w, posqueue_t*queue) { posqueue_entry_t*e = queue->list; while(e) { halfedge_t*back = w->back[NR(e->pos)]; printf("%d(%d) ", NR(e->pos), back?NR(back->fwd->node):-1); e = e->next; } printf("\n"); } static void posqueue_purge(posqueue_t*queue) { posqueue_entry_t*e = queue->list; while(e) { posqueue_entry_t*next = e->next; e->next = 0;free(e); e = next; } queue->list = 0; } graph_t* graph_new(int num_nodes) { graph_t*graph = rfx_calloc(sizeof(graph_t)); graph->num_nodes = num_nodes; graph->nodes = rfx_calloc(sizeof(node_t)*num_nodes); int t; for(t=0;tnodes[t].nr = t; } return graph; } void graph_delete(graph_t*graph) { int t; for(t=0;tnum_nodes;t++) { halfedge_t*e = graph->nodes[t].edges; while(e) { halfedge_t*next = e->next; free(e); e = next; } } free(graph->nodes);graph->nodes=0; free(graph); } static graphcut_workspace_t*graphcut_workspace_new(graph_t*graph, node_t*pos1, node_t*pos2) { graphcut_workspace_t*workspace = malloc(sizeof(graphcut_workspace_t)); workspace->flags1 = rfx_calloc(graph->num_nodes); workspace->flags2 = rfx_calloc(graph->num_nodes); workspace->back = rfx_calloc(graph->num_nodes*sizeof(halfedge_t*)); workspace->pos1 = pos1; workspace->pos2 = pos2; workspace->graph = graph; workspace->queue1 = posqueue_new(); workspace->queue2 = posqueue_new(); workspace->tmpqueue = posqueue_new(); return workspace; } static void graphcut_workspace_delete(graphcut_workspace_t*w) { posqueue_delete(w->queue1);w->queue1=0; posqueue_delete(w->queue2);w->queue2=0; posqueue_delete(w->tmpqueue);w->tmpqueue=0; if(w->flags1) free(w->flags1);w->flags1=0; if(w->flags2) free(w->flags2);w->flags2=0; if(w->back) free(w->back);w->back=0; free(w); } typedef struct _path { node_t**pos; halfedge_t**dir; unsigned char*firsthalf; int length; } path_t; static path_t*path_new(int len) { path_t*p = malloc(sizeof(path_t)); p->pos = malloc(sizeof(node_t*)*len); p->dir = malloc(sizeof(halfedge_t*)*len); p->firsthalf = malloc(sizeof(unsigned char)*len); p->length = len; return p; } static void path_delete(path_t*path) { free(path->pos);path->pos = 0; free(path->dir);path->dir = 0; free(path->firsthalf);path->firsthalf = 0; free(path); } static path_t*extract_path(graphcut_workspace_t*work, unsigned char*mytree, unsigned char*othertree, node_t*pos, node_t*newpos, halfedge_t*dir) { int t; node_t*p = pos; node_t*nodes = work->graph->nodes; int len1 = 0; /* walk up tree1 */ DBG printf("walk back up (1) to %d\n", NR(work->pos1)); while(p != work->pos1) { halfedge_t*back = work->back[NR(p)]; DBG printf("walk backward (1): %d %d\n", NR(p), back?NR(back->fwd->node):-1); node_t*old = p; p = work->back[NR(p)]->fwd->node; assert(p!=old); len1++; } p = newpos; int len2 = 0; DBG printf("walk back up (2) to %d\n", NR(work->pos2)); /* walk up tree2 */ while(p != work->pos2) { DBG printf("walk backward (2): %d\n", NR(p)); p = work->back[NR(p)]->fwd->node; len2++; } path_t*path = path_new(len1+len2+2); t = len1; path->pos[t] = p = pos; path->dir[t] = dir; path->firsthalf[t] = 1; while(p != work->pos1) { assert(mytree[NR(p)]&IN_TREE); halfedge_t*dir = work->back[NR(p)]; assert(dir->node == p); p = dir->fwd->node; t--; path->pos[t] = p; path->dir[t] = dir->fwd; path->firsthalf[t] = 1; } assert(!t); t = len1+1; p = newpos; while(p != work->pos2) { assert(othertree[NR(p)]&IN_TREE); halfedge_t*dir = work->back[NR(p)]; path->pos[t] = p; path->dir[t] = dir; path->firsthalf[t] = 0; p = dir->fwd->node; t++; } /* terminator */ path->pos[t] = p; path->dir[t] = 0; // last node path->firsthalf[t] = 0; assert(t == len1+len2+1); return path; } static void path_print(path_t*path) { int t; for(t=0;tlength;t++) { node_t*n = path->pos[t]; printf("%d (firsthalf: %d)", NR(n), path->firsthalf[t]); if(tlength-1) { printf(" -(%d/%d)-> \n", path->dir[t]->used, path->dir[t]->fwd->used); } else { printf("\n"); } } for(t=0;tlength-1;t++) { if(path->firsthalf[t]==path->firsthalf[t+1]) { assert(( path->firsthalf[t] && path->dir[t]->used) || (!path->firsthalf[t] && path->dir[t]->fwd->used)); } } printf("\n"); } static void workspace_print(graphcut_workspace_t*w) { printf("queue1: ");posqueue_print(w, w->queue1); printf("queue2: ");posqueue_print(w, w->queue2); } static void myassert(graphcut_workspace_t*w, char assertion, const char*file, int line, const char*func) { if(!assertion) { printf("Assertion %s:%d (%s) failed:\n", file, line, func); workspace_print(w); exit(0); } } #define ASSERT(w,c) {myassert(w,c,__FILE__,__LINE__,__func__);} static path_t* expand_pos(graphcut_workspace_t*w, posqueue_t*queue, node_t*pos, char reverse, unsigned char*mytree, unsigned char*othertree) { graph_t*graph = w->graph; int dir; if((mytree[NR(pos)]&(IN_TREE|ACTIVE)) != (IN_TREE|ACTIVE)) { /* this node got deleted or marked inactive in the meantime. ignore it */ DBG printf("node %d is deleted or inactive\n", NR(pos)); return 0; } halfedge_t*e = pos->edges; for(;e;e=e->next) { node_t*newpos = e->fwd->node; weight_t weight = reverse?e->fwd->weight:e->weight; if(mytree[NR(newpos)]) continue; // already known if(weight) { if(othertree[NR(newpos)]) { DBG printf("found connection: %d connects to %d\n", NR(pos), NR(newpos)); posqueue_addpos(queue, pos); mytree[NR(pos)] |= ACTIVE; // re-add, this vertex might have other connections path_t*path; if(reverse) { path = extract_path(w, othertree, mytree, newpos, pos, e->fwd); } else { path = extract_path(w, mytree, othertree, pos, newpos, e); } return path; } else { DBG printf("advance from %d to new pos %d\n", NR(pos), NR(newpos)); w->back[NR(newpos)] = e->fwd; e->used = 1; posqueue_addpos(queue, newpos); mytree[NR(newpos)] |= ACTIVE|IN_TREE; // add } } } /* if we can't expand this node anymore, it's now an inactive node */ mytree[NR(pos)] &= ~ACTIVE; return 0; } static int node_count_edges(node_t*node) { halfedge_t*e = node->edges; int num = 0; while(e) { num++; e = e->next; } return num; } static void bool_op(graphcut_workspace_t*w, unsigned char*flags, node_t*pos, unsigned char and, unsigned char or) { posqueue_t*q = w->tmpqueue; posqueue_purge(q); posqueue_addpos(q, pos); while(posqueue_notempty(q)) { node_t*p = posqueue_extract(q); flags[NR(p)] = (flags[NR(p)]&and)|or; halfedge_t*e = p->edges; while(e) { if(e->used) { posqueue_addpos(q, e->fwd->node); } e = e->next; } } } static weight_t decrease_weights(graph_t*map, path_t*path) { int t; assert(path->length); weight_t min = path->dir[0]->weight; for(t=0;tlength-1;t++) { int w = path->dir[t]->weight; DBG printf("%d->%d (%d)\n", NR(path->dir[t]->node), NR(path->dir[t]->fwd->node), w); if(t==0 || w < min) min = w; } assert(min); if(min<=0) return 0; for(t=0;tlength-1;t++) { path->dir[t]->weight-=min; path->dir[t]->fwd->weight+=min; } return min; } static int reconnect(graphcut_workspace_t*w, unsigned char*flags, node_t*pos, char reverse) { graph_t*graph = w->graph; halfedge_t*e = pos->edges; for(;e;e=e->next) { node_t*newpos = e->fwd->node; int weight; if(!reverse) { weight = e->fwd->weight; } else { weight = e->weight; } if(weight && (flags[NR(newpos)]&IN_TREE)) { DBG printf("successfully reconnected node %d to %d (%d->%d) (reverse:%d)\n", NR(pos), NR(newpos), NR(e->node), NR(e->fwd->node), reverse); w->back[NR(pos)] = e; e->fwd->used = 1; return 1; } } return 0; } static void clear_node(graphcut_workspace_t*w, node_t*n) { w->flags1[NR(n)] = 0; w->flags2[NR(n)] = 0; w->back[NR(n)] = 0; halfedge_t*e = n->edges; while(e) {e->used = 0;e=e->next;} } static void destroy_subtree(graphcut_workspace_t*w, unsigned char*flags, node_t*pos, posqueue_t*posqueue) { DBG printf("destroying subtree starting with %d\n", NR(pos)); posqueue_t*q = w->tmpqueue; posqueue_purge(q); posqueue_addpos(q, pos); while(posqueue_notempty(q)) { node_t*p = posqueue_extract(q); halfedge_t*e = p->edges; while(e) { node_t*newpos = e->fwd->node; if(e->used) { posqueue_addpos(q, newpos); } else if((flags[NR(newpos)]&(ACTIVE|IN_TREE)) == IN_TREE) { // re-activate all nodes that surround our subtree. // TODO: we should check the weight of the edge from that other // node to our node. if it's zero, we don't need to activate that node. posqueue_addpos(posqueue, newpos); flags[NR(newpos)]|=ACTIVE; } e = e->next; } clear_node(w, p); DBG printf("removed pos %d\n", NR(p)); } } static void combust_tree(graphcut_workspace_t*w, posqueue_t*q1, posqueue_t*q2, path_t*path) { graph_t*graph = w->graph; int t; for(t=0;tlength-1 && path->firsthalf[t+1];t++) { node_t*pos = path->pos[t]; halfedge_t*dir = path->dir[t]; node_t*newpos = dir->fwd->node; if(!dir->weight) { /* disconnect node */ DBG printf("remove link %d -> %d from tree 1\n", NR(pos), NR(newpos)); dir->used = 0; w->flags1[NR(newpos)] &= ACTIVE; bool_op(w, w->flags1, newpos, ~IN_TREE, 0); /* try to reconnect the path to some other tree part */ if(reconnect(w, w->flags1, newpos, 0)) { bool_op(w, w->flags1, newpos, ~0, IN_TREE); } else { destroy_subtree(w, w->flags1, newpos, q1); break; } } } for(t=path->length-1;t>0 && !path->firsthalf[t-1];t--) { node_t*pos = path->pos[t]; node_t*newpos = path->pos[t-1]; halfedge_t*dir = path->dir[t-1]->fwd; node_t*newpos2 = dir->fwd->node; assert(newpos == newpos2); if(!dir->fwd->weight) { /* disconnect node */ DBG printf("remove link %d->%d from tree 2\n", NR(pos), NR(newpos)); dir->used = 0; w->flags2[NR(newpos)] &= ACTIVE; bool_op(w, w->flags2, newpos, ~IN_TREE, 0); /* try to reconnect the path to some other tree part */ if(reconnect(w, w->flags2, newpos, 1)) { bool_op(w, w->flags2, newpos, ~0, IN_TREE); } else { destroy_subtree(w, w->flags2, newpos, q2); break; } } } } static void check_graph(graph_t*g) { int t; for(t=0;tnum_nodes;t++) { assert(g->nodes[t].nr==t); halfedge_t*e = g->nodes[t].edges; while(e) { assert(!e->used || !e->fwd->used); e = e->next; } } } void graph_reset(graph_t*g) { int t; for(t=0;tnum_nodes;t++) { g->nodes[t].nr = t; assert(g->nodes[t].nr==t); halfedge_t*e = g->nodes[t].edges; while(e) { e->used = 0; e->weight = e->init_weight; e = e->next; } } } weight_t graph_maxflow(graph_t*graph, node_t*pos1, node_t*pos2) { int max_flow = 0; graphcut_workspace_t* w = graphcut_workspace_new(graph, pos1, pos2); graph_reset(graph); DBG check_graph(graph); posqueue_addpos(w->queue1, pos1); w->flags1[pos1->nr] |= ACTIVE|IN_TREE; posqueue_addpos(w->queue2, pos2); w->flags2[pos2->nr] |= ACTIVE|IN_TREE; DBG workspace_print(w); while(1) { path_t*path; while(1) { char done1=0,done2=0; node_t* p1 = posqueue_extract(w->queue1); if(!p1) { graphcut_workspace_delete(w); return max_flow; } DBG printf("extend 1 from %d (%d edges)\n", NR(p1), node_count_edges(p1)); path = expand_pos(w, w->queue1, p1, 0, w->flags1, w->flags2); if(path) break; DBG workspace_print(w); #ifdef TWOTREES node_t* p2 = posqueue_extract(w->queue2); if(!p2) { graphcut_workspace_delete(w); return max_flow; } DBG printf("extend 2 from %d (%d edges)\n", NR(p2), node_count_edges(p2)); path = expand_pos(w, w->queue2, p2, 1, w->flags2, w->flags1); if(path) break; DBG workspace_print(w); #endif } DBG printf("found connection between tree1 and tree2\n"); DBG path_print(path); DBG printf("decreasing weights\n"); max_flow += decrease_weights(graph, path); DBG workspace_print(w); DBG printf("destroying trees\n"); combust_tree(w, w->queue1, w->queue2, path); DBG workspace_print(w); DBG check_graph(w->graph); path_delete(path); } graphcut_workspace_delete(w); return max_flow; } halfedge_t*graph_add_edge(node_t*from, node_t*to, weight_t forward_weight, weight_t backward_weight) { halfedge_t*e1 = (halfedge_t*)rfx_calloc(sizeof(halfedge_t)); halfedge_t*e2 = (halfedge_t*)rfx_calloc(sizeof(halfedge_t)); e1->fwd = e2; e2->fwd = e1; e1->node = from; e2->node = to; e1->init_weight = forward_weight; e2->init_weight = backward_weight; e1->weight = forward_weight; e2->weight = backward_weight; e1->next = from->edges; from->edges = e1; e2->next = to->edges; to->edges = e2; return e1; } static void do_dfs(node_t*n, int color) { int t; n->tmp = color; halfedge_t*e = n->edges; while(e) { if(e->fwd->node->tmp<0) do_dfs(e->fwd->node, color); e = e->next; } } int graph_find_components(graph_t*g) { int t; int count = 0; for(t=0;tnum_nodes;t++) { g->nodes[t].tmp = -1; } for(t=0;tnum_nodes;t++) { if(g->nodes[t].tmp<0) { do_dfs(&g->nodes[t], count++); } } return count; } #ifdef MAIN int main() { int t; int s; for(s=0;s<10;s++) { int width = (lrand48()%8)+1; graph_t*g = graph_new(width*width); for(t=0;t0) graph_add_edge(&g->nodes[t], &g->nodes[t-1], R, R); if(xnodes[t], &g->nodes[t+1], R, R); if(y>0) graph_add_edge(&g->nodes[t], &g->nodes[t-width], R, R); if(ynodes[t], &g->nodes[t+width], R, R); } int x = graph_maxflow(g, &g->nodes[0], &g->nodes[width*width-1]); printf("max flow: %d\n", x); graph_delete(g); } } #endif swftools_0.9.2+git20130725.orig/lib/gfxfilter.c0000644000175000017500000003540212216332640020233 0ustar gawaingawain/* gfxfilter.c Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include #include "mem.h" #include "gfxfilter.h" #include "devices/record.h" #include "q.h" typedef struct _internal { gfxfilter_t*filter; gfxdevice_t*out; /* for two pass filters: */ gfxdevice_t*final_out; int pass; int num_passes; gfxdevice_t record; gfxtwopassfilter_t*twopass; } internal_t; static int filter_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; return i->filter->setparameter(i->filter, key, value, i->out); } static void filter_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; i->filter->startpage(i->filter, width, height, i->out); } static void filter_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; i->filter->startclip(i->filter, line, i->out); } static void filter_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->filter->endclip(i->filter, i->out); } static void filter_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; i->filter->stroke(i->filter, line, width, color, cap_style, joint_style, miterLimit, i->out); } static void filter_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; i->filter->fill(i->filter, line, color, i->out); } static void filter_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; i->filter->fillbitmap(i->filter, line, img, matrix, cxform, i->out); } static void filter_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; i->filter->fillgradient(i->filter, line, gradient, type, matrix, i->out); } static void filter_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; i->filter->addfont(i->filter, font, i->out); } static void filter_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; i->filter->drawchar(i->filter, font, glyphnr, color, matrix, i->out); } static void filter_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; i->filter->drawlink(i->filter, line, action, text, i->out); } static void filter_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->filter->endpage(i->filter, i->out); } static gfxresult_t* filter_finish(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; gfxresult_t*r; if(i->filter->finish) { r = i->filter->finish(i->filter, i->out); } else { r = i->out->finish(i->out); } if(i->filter->internal) { free(i->filter->internal); i->filter->internal = 0; } free(i->filter);i->filter=0; free(dev->internal);dev->internal=0;free(dev); return r; } static int passthrough_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; return i->out->setparameter(i->out, key, value); } static void passthrough_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; i->out->startpage(i->out, width, height); } static void passthrough_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; i->out->startclip(i->out, line); } static void passthrough_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endclip(i->out); } static void passthrough_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; i->out->stroke(i->out, line, width, color, cap_style, joint_style, miterLimit); } static void passthrough_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; i->out->fill(i->out, line, color); } static void passthrough_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; i->out->fillbitmap(i->out, line, img, matrix, cxform); } static void passthrough_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; i->out->fillgradient(i->out, line, gradient, type, matrix); } static void passthrough_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; i->out->addfont(i->out, font); } static void passthrough_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; i->out->drawchar(i->out, font, glyphnr, color, matrix); } static void passthrough_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; i->out->drawlink(i->out, line, action, text); } static void passthrough_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endpage(i->out); } int discard_setparameter(gfxdevice_t*dev, const char*key, const char*value) { return 0; } static void discard_startpage(gfxdevice_t*dev, int width, int height) { } static void discard_startclip(gfxdevice_t*dev, gfxline_t*line) { } static void discard_endclip(gfxdevice_t*dev) { } static void discard_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { } static void discard_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { } static void discard_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { } static void discard_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { } static void discard_addfont(gfxdevice_t*dev, gfxfont_t*font) { } static void discard_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { } static void discard_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { } static void discard_endpage(gfxdevice_t*dev) { } static gfxresult_t* discard_finish(gfxdevice_t*dev) { return 0; } gfxdevice_t*gfxfilter_apply(gfxfilter_t*_filter, gfxdevice_t*out) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); gfxdevice_t*dev = (gfxdevice_t*)rfx_calloc(sizeof(gfxdevice_t)); gfxfilter_t*filter = (gfxfilter_t*)rfx_alloc(sizeof(gfxfilter_t)); memcpy(filter, _filter, sizeof(gfxfilter_t)); i->out = out; i->filter = filter; i->pass = 1; dev->internal = i; dev->name = filter->name?filter->name:"filter"; dev->setparameter = filter->setparameter?filter_setparameter:passthrough_setparameter; dev->startpage = filter->startpage?filter_startpage:passthrough_startpage; dev->startclip = filter->startclip?filter_startclip:passthrough_startclip; dev->endclip = filter->endclip?filter_endclip:passthrough_endclip; dev->stroke = filter->stroke?filter_stroke:passthrough_stroke; dev->fill = filter->fill?filter_fill:passthrough_fill; dev->fillbitmap = filter->fillbitmap?filter_fillbitmap:passthrough_fillbitmap; dev->fillgradient = filter->fillgradient?filter_fillgradient:passthrough_fillgradient; dev->addfont = filter->addfont?filter_addfont:passthrough_addfont; dev->drawchar = filter->drawchar?filter_drawchar:passthrough_drawchar; dev->drawlink = filter->drawlink?filter_drawlink:passthrough_drawlink; dev->endpage = filter->endpage?filter_endpage:passthrough_endpage; dev->finish = filter_finish; return dev; } static void setup_twopass(gfxdevice_t*dev, gfxfilter_t*filter) { dev->name = filter->name?filter->name:"filter"; dev->setparameter = filter->setparameter?filter_setparameter:passthrough_setparameter; dev->startpage = filter->startpage?filter_startpage:passthrough_startpage; dev->startclip = filter->startclip?filter_startclip:passthrough_startclip; dev->endclip = filter->endclip?filter_endclip:passthrough_endclip; dev->stroke = filter->stroke?filter_stroke:passthrough_stroke; dev->fill = filter->fill?filter_fill:passthrough_fill; dev->fillbitmap = filter->fillbitmap?filter_fillbitmap:passthrough_fillbitmap; dev->fillgradient = filter->fillgradient?filter_fillgradient:passthrough_fillgradient; dev->addfont = filter->addfont?filter_addfont:passthrough_addfont; dev->drawchar = filter->drawchar?filter_drawchar:passthrough_drawchar; dev->drawlink = filter->drawlink?filter_drawlink:passthrough_drawlink; dev->endpage = filter->endpage?filter_endpage:passthrough_endpage; } static gfxresult_t* twopass_finish(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; gfxresult_t*r; if(i->filter->finish) { r = i->filter->finish(i->filter, i->out); } else { r = i->out->finish(i->out); } if(i->pass == i->num_passes) { free(i->twopass); i->twopass = 0; i->filter = 0; free(i); dev->internal=0; free(dev); return r; } /* switch to next pass filter */ i->filter = &i->twopass->pass2; setup_twopass(dev, i->filter); dev->finish = twopass_finish; if(i->pass == i->num_passes-1) { /* we don't record in the final pass- we just stream out to the next output device */ i->out = i->final_out; } else { // switch to a new tempfile- this only happens for 3 passes or more assert(i->num_passes>2); gfxdevice_record_init(&i->record, /*use tempfile*/1); i->out = &i->record; } i->pass++; gfxresult_record_replay(r, dev, 0); r->destroy(r); return twopass_finish(dev); } gfxdevice_t*gfxtwopassfilter_apply(gfxtwopassfilter_t*_twopass, gfxdevice_t*out) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); gfxdevice_t*dev = (gfxdevice_t*)rfx_calloc(sizeof(gfxdevice_t)); gfxtwopassfilter_t*twopass = (gfxtwopassfilter_t*)rfx_alloc(sizeof(gfxtwopassfilter_t)); memcpy(twopass, _twopass, sizeof(gfxtwopassfilter_t)); gfxdevice_record_init(&i->record, /*use tempfile*/1); i->out = &i->record; i->final_out = out; i->twopass = twopass; i->pass = 1; i->num_passes = 2; dev->internal = i; i->filter = &twopass->pass1; setup_twopass(dev, i->filter); dev->finish = twopass_finish; return dev; } static void add_to_chain(char*cmd, dict_t*params, gfxfilterchain_t**chain, gfxfilterchain_t**next) { gfxfilterbase_t*f = 0; if(!strcmp(cmd, "maketransparent")) { char*alphastr = dict_lookup(params, "alpha"); int alpha = 255; if(alphastr) alpha=atoi(alphastr); f = malloc(sizeof(gfxfilter_t)); gfxfilter_maketransparent_init((gfxfilter_t*)f, alpha); } else if(!strcmp(cmd, "flatten")) { f = malloc(sizeof(gfxfilter_t)); gfxfilter_flatten_init((gfxfilter_t*)f); } else if(!strcmp(cmd, "rescale_images")) { f = malloc(sizeof(gfxfilter_t)); gfxfilter_rescale_images_init((gfxfilter_t*)f); } else if(!strcmp(cmd, "remove_font_transforms")) { f = malloc(sizeof(gfxtwopassfilter_t)); gfxtwopassfilter_remove_font_transforms_init((gfxtwopassfilter_t*)f); } else if(!strcmp(cmd, "remove_invisible_characters")) { f = malloc(sizeof(gfxtwopassfilter_t)); gfxtwopassfilter_remove_invisible_characters_init((gfxtwopassfilter_t*)f); } else if(!strcmp(cmd, "vectors_to_glyphs")) { f = malloc(sizeof(gfxtwopassfilter_t)); gfxtwopassfilter_vectors_to_glyphs_init((gfxtwopassfilter_t*)f); } else if(!strcmp(cmd, "one_big_font")) { f = malloc(sizeof(gfxtwopassfilter_t)); gfxtwopassfilter_one_big_font_init((gfxtwopassfilter_t*)f); } else { fprintf(stderr, "Unknown filter: %s\n", cmd); } dict_clear(params); gfxfilterchain_t*n = rfx_calloc(sizeof(gfxfilterchain_t)); if(!(*chain)) { (*chain) = (*next) = n; } else { (*next)->next = n; (*next) = n; } n->filter = f; } gfxfilterchain_t* gfxfilterchain_parse(const char*_filterexpr) { char*filterexpr = strdup(_filterexpr); char*f = filterexpr; char*end = filterexpr+strlen(filterexpr); dict_t* params = dict_new2(&charptr_type); char*cmd = 0; gfxfilterchain_t*chain = 0; gfxfilterchain_t*next = 0; while(*f) { char* eq = strchr(f, '='); char* colon = strchr(f, ':'); if(!colon) { colon = end; } *colon = 0; if(eq && eq < colon) { // parameter *eq = 0; if(!cmd) { fprintf(stderr, "Error: need a filter before specifying parameters (%s=%s)\n", f, eq+1); return 0; } dict_put(params, f, strdup(eq+1)); } else { if(cmd) { add_to_chain(cmd, params, &chain, &next); cmd = 0; } cmd = f; } if(colon == end) break; f = colon+1; } if(cmd) { add_to_chain(cmd, params, &chain, &next); } free(filterexpr); dict_destroy(params); return chain; } gfxdevice_t* gfxfilterchain_apply(gfxfilterchain_t*chain, gfxdevice_t*dev) { while(chain) { if(chain->filter->type == gfxfilter_onepass) { dev = gfxfilter_apply((gfxfilter_t*)chain->filter, dev); } else if(chain->filter->type == gfxfilter_twopass) { dev = gfxtwopassfilter_apply((gfxtwopassfilter_t*)chain->filter, dev); } else { fprintf(stderr, "Internal error in gfxfilterchain_apply- unknown filter type %d\n", chain->filter->type); } chain = chain->next; } return dev; } void gfxfilterchain_destroy(gfxfilterchain_t*chain) { while(chain) { gfxfilterchain_t*next = chain->next; free(chain); chain = next; } } swftools_0.9.2+git20130725.orig/lib/as3/0002755000175000017500000000000012216332657016571 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/as3/assets.c0000644000175000017500000001241312216332640020226 0ustar gawaingawain#include #include "../types.h" #include "../rfxswf.h" #include "assets.h" static void add_dependencies(asset_resolver_t*assets, abc_asset_t*asset, asset_tag_t*atag) { TAG*tag = atag->tag; atag->num_deps = swf_GetNumUsedIDs(tag); int*positions = malloc(sizeof(int)*atag->num_deps); atag->deps = malloc(atag->num_deps*sizeof(atag->deps[0])); swf_GetUsedIDs(tag, positions); int t; for(t=0;tnum_deps;t++) { asset_dependency_t*d = &atag->deps[t]; d->patch_pos = positions[t]; U16 id = GET16(&tag->data[positions[t]]); d->asset = assets->id2asset[id]; if(!d->asset) { fprintf(stderr, "Error: ID %d referenced, but not defined\n", id); } } free(positions); } asset_resolver_t* swf_ParseAssets(SWF*swf) { NEW(asset_resolver_t,assets); assets->name2asset = dict_new2(&charptr_type); assets->id2asset = rfx_calloc(sizeof(abc_asset_t*)*65536); TAG*tag = swf->firstTag; while(tag) { if(swf_isDefiningTag(tag)) { NEW(abc_asset_t, asset); assets->id2asset[swf_GetDefineID(tag)] = asset; } tag = tag->next; } tag = swf->firstTag; while(tag) { if(swf_isDefiningTag(tag)) { abc_asset_t*asset = assets->id2asset[swf_GetDefineID(tag)]; assert(asset); if(asset) { NEW(asset_tag_t,t); t->tag = tag; list_append(asset->tags, t); add_dependencies(assets, asset, t); } } else if(swf_isPseudoDefiningTag(tag)) { abc_asset_t*asset = assets->id2asset[swf_GetDefineID(tag)]; if(asset) { NEW(asset_tag_t,t); t->tag = tag; list_append(asset->tags, t); add_dependencies(assets, asset, t); } } else if(tag->id == ST_SYMBOLCLASS) { int t, num = swf_GetU16(tag); for(t=0;tmainclass_id = id; } else { abc_asset_t*asset = assets->id2asset[id]; if(!asset) { fprintf(stderr, "Error: ID %d referenced, but not defined.\n", id); } else { char*name = swf_GetString(tag); dict_put(assets->name2asset, name, asset); } } } } tag = tag->next; } return assets; } void swf_ResolveAssets(asset_resolver_t*assets, abc_file_t*file) { int num = assets->name2asset->num; int resolved = 0; int t; for(t=0;tclasses->num;t++) { abc_class_t*cls = (abc_class_t*)array_getvalue(file->classes, t); char*fullname = abc_class_fullname(cls); abc_asset_t*a = (abc_asset_t*)dict_lookup(assets->name2asset, fullname); if(a) { resolved++; cls->asset = a; } free(fullname); } } static void dump_asset(FILE*fo, abc_asset_t*a, const char*prefix) { asset_tag_list_t*t = a->tags; while(t) { TAG*tag = t->asset_tag->tag; fprintf(fo, "%s[tag] %s defines ID %d\n", prefix, swf_TagGetName(tag), swf_GetDefineID(tag)); char*prefix2 = allocprintf("%s ", prefix); int i; for(i=0;iasset_tag->num_deps;i++) { asset_dependency_t*d = &t->asset_tag->deps[i]; dump_asset(fo, d->asset, prefix2); } free(prefix2); t = t->next; } } void swf_DumpAsset(FILE*fo, abc_asset_t*asset, const char*prefix) { dump_asset(fo, asset, prefix); } static TAG* write_tag(TAG*prev, TAG*tag) { if(prev) { prev->next = tag; } tag->prev = prev; tag->next = 0; prev = tag; return prev; } static TAG*write_asset(TAG*tag, abc_asset_t*a, dict_t*written, U16*currentid) { if(!dict_contains(written, a)) { dict_put(written, a, 0); a->id = (*currentid)++; asset_tag_list_t*tags = a->tags; while(tags) { asset_tag_t*t = tags->asset_tag; int i; for(i=0;inum_deps;i++) { asset_dependency_t*dep = &t->deps[i]; tag = write_asset(tag, dep->asset, written, currentid); PUT16(&t->tag->data[dep->patch_pos], dep->asset->id); } swf_SetDefineID(t->tag, a->id); tag = write_tag(tag, t->tag); tags = tags->next; } } return tag; } void swf_WriteABCSymbols(TAG*tag, abc_file_t*file) { int num = 0; int t; for(t=0;tclasses->num;t++) { abc_class_t*cls = (abc_class_t*)array_getvalue(file->classes, t); abc_asset_t*a = cls->asset; if(a && a->tags) { num++; } } swf_SetU16(tag, num); for(t=0;tclasses->num;t++) { abc_class_t*cls = (abc_class_t*)array_getvalue(file->classes, t); abc_asset_t*a = cls->asset; if(a && a->tags) { U16 id = swf_GetDefineID(a->tags->asset_tag->tag); char*fullname = abc_class_fullname(cls); swf_SetU16(tag, id); swf_SetString(tag, fullname); } } } TAG*swf_AssetsToTags(TAG*itag, asset_bundle_list_t*assets) { U16 currentid = 1; asset_bundle_list_t*l = assets; dict_t*written = dict_new2(&ptr_type); while(l) { if(l->asset_bundle->used) { abc_file_t*file = l->asset_bundle->file; int t; TAG* tag = 0; for(t=0;tclasses->num;t++) { abc_asset_t*a = ((abc_class_t*)array_getvalue(file->classes, t))->asset; if(a) { tag = write_asset(tag, a, written, ¤tid); } } tag = swf_InsertTag(tag, ST_DOABC); swf_WriteABC(tag, file); tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_WriteABCSymbols(tag, file); TAG*first = tag; while(first && first->prev) first=first->prev; if(!itag) { itag = first; } else { itag->next = first; first->prev = itag; itag = tag; } } l = l->next; } dict_destroy(written); return itag; } swftools_0.9.2+git20130725.orig/lib/as3/scripts.h0000644000175000017500000000211312216332640020414 0ustar gawaingawain/* scripts.h Some hardcoded abc scripts (header file) Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #ifdef __abc_scripts_h__ #define __abc_scripts_h__ void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events); TAG*swf_AddAS3FontDefine(TAG*tag, U16 id, char*fontname); #endif swftools_0.9.2+git20130725.orig/lib/as3/parser_help.h0000644000175000017500000001154012216332640021235 0ustar gawaingawain#ifndef __parse_help__ #define __parse_help__ #include "state.h" #include "expr.h" #include "tokenizer.h" #include "common.h" typedef struct _global { abc_file_t*file; parsedclass_list_t*classes; abc_script_t*classinit; abc_script_t*init; //package-level code dict_t*token2info; dict_t*file2token2info; } global_t; extern global_t*global; typedef struct _variable { int index; classinfo_t*type; char init; char kill; char is_parameter; methodstate_t*is_inner_method; } variable_t; void initialize_file(char*filename); void finish_file(); void initialize_parser(); void* finish_parser(); #define FLAG_PUBLIC 256 #define FLAG_PROTECTED 512 #define FLAG_PRIVATE 1024 #define FLAG_PACKAGEINTERNAL 2048 #define FLAG_NAMESPACE 4096 slotinfo_t* find_class(const char*name); char is_break_or_jump(code_t*c); code_t* insert_finally(code_t*c, code_t*finally, int tempvar); typedcode_t push_class(slotinfo_t*a); slotinfo_t* find_class(const char*name); namespace_list_t*get_current_imports(); const char* get_package_from_name(const char*name); char is_pushundefined(code_t*c); code_t* coerce_to_type(code_t*c, classinfo_t*t); code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to); void continuejumpsto(code_t*c, char*name, code_t*jump); void breakjumpsto(code_t*c, char*name, code_t*jump); void insert_unresolved(methodstate_t*m, dict_t*xvars, dict_t*allvars); void startfunction(modifiers_t*mod, enum yytokentype getset, char*name, params_t*params, classinfo_t*return_type); void function_initvars(methodstate_t*m, char has_params, params_t*params, int flags, char var0); abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*name, params_t*params, classinfo_t*return_type, code_t*body); void innerfunction(char*name, params_t*params, classinfo_t*return_type); methodinfo_t*registerfunction(enum yytokentype getset, modifiers_t*mod, char*name, params_t*params, classinfo_t*return_type, int slot); void check_override(memberinfo_t*m, int flags); void check_constant_against_type(classinfo_t*t, constant_t*c); void check_code_for_break(code_t*c); void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, classinfo_list_t*implements); void endclass(); void innerfunctions2vars(methodstate_t*m); memberinfo_t* findmember_nsset(classinfo_t*cls, const char*name, char recurse, char is_static); namespace_t modifiers2access(modifiers_t*mod); const char* lookup_namespace(const char*name); void startpackage(char*name); void endpackage(); code_t* wrap_function(code_t*c,code_t*header, code_t*body); code_t* method_header(methodstate_t*m); code_t* add_scope_code(code_t*c, methodstate_t*m, char init); void unknown_variable(char*name); code_t* var_block(code_t*body, dict_t*vars); int gettempvar(); int new_variable(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot); variable_t* new_variable2(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot); int alloc_local(); code_t*defaultvalue(code_t*c, classinfo_t*type); char variable_exists(char*name); variable_t* find_variable_safe(state_t*s, char*name); variable_t* find_variable(state_t*s, const char*name); variable_t* find_slot(methodstate_t*m, const char*name); code_t* method_header(methodstate_t*m); code_t* wrap_function(code_t*c,code_t*header, code_t*body); void function_initvars(methodstate_t*m, char has_params, params_t*params, int flags, char var0); void state_destroy(state_t*state); void as3_set_define(const char*c); /* protected handling here is a big hack: we just assume the protectedns is package:class. the correct approach would be to add the proper namespace to all protected members in the registry, even though that would slow down searching */ #define MEMBER_MULTINAME(m,f,n) \ multiname_t m;\ namespace_t m##_ns;\ if(f) { \ m##_ns.access = ((slotinfo_t*)(f))->access; \ if(m##_ns.access == ACCESS_NAMESPACE) \ m##_ns.name = ((slotinfo_t*)(f))->package; \ else if(m##_ns.access == ACCESS_PROTECTED && (f)->parent) \ m##_ns.name = concat3((f)->parent->package,":",(f)->parent->name); \ else \ m##_ns.name = ""; \ m.type = QNAME; \ m.ns = &m##_ns; \ m.namespace_set = 0; \ m.name = ((slotinfo_t*)(f))->name; \ } else { \ m.type = MULTINAME; \ m.ns =0; \ m.namespace_set = &nopackage_namespace_set; \ m.name = n; \ } /* warning: list length of namespace set is undefined */ #define MULTINAME_LATE(m, access, package) \ namespace_t m##_ns = {access, package}; \ namespace_set_t m##_nsset; \ namespace_list_t m##_l;m##_l.next = 0; \ m##_nsset.namespaces = &m##_l; \ m##_nsset = m##_nsset; \ m##_l.namespace = &m##_ns; \ multiname_t m = {MULTINAMEL, 0, &m##_nsset, 0}; extern namespace_t stdns; extern namespace_set_t nopackage_namespace_set; #endif swftools_0.9.2+git20130725.orig/lib/as3/opcodes.c0000644000175000017500000005621012216332640020363 0ustar gawaingawain#include "opcodes.h" code_t* abc_add(code_t*prev) { code_t*self = add_opcode(prev, 0xa0); return self; } code_t* abc_add_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc5); return self; } code_t* abc_astype(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x86); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_astype2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x86); self->data[0] = multiname_clone(name); return self; } code_t* abc_astypelate(code_t*prev) { code_t*self = add_opcode(prev, 0x87); return self; } code_t* abc_bitand(code_t*prev) { code_t*self = add_opcode(prev, 0xA8); return self; } code_t* abc_bitnot(code_t*prev) { code_t*self = add_opcode(prev, 0x97); return self; } code_t* abc_bitor(code_t*prev) { code_t*self = add_opcode(prev, 0xa9); return self; } code_t* abc_bitxor(code_t*prev) { code_t*self = add_opcode(prev, 0xaa); return self; } code_t* abc_call(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x41); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_callmethod(code_t*prev, abc_method_t* m, int v) { code_t*self = add_opcode(prev, 0x43); self->data[0] = m; self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callproplex(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x4c); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callproplex2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x4c); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callproperty(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x46); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callproperty2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x46); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callpropvoid(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x4f); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callpropvoid2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x4f); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callstatic(code_t*prev, abc_method_body_t* m, int v) { code_t*self = add_opcode(prev, 0x44); self->data[0] = m; self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callsuper(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x45); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callsuper2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x45); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callsupervoid(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x4e); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_callsupervoid2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x4e); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_checkfilter(code_t*prev) { code_t*self = add_opcode(prev, 0x78); return self; } code_t* abc_coerce(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x80); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_coerce2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x80); self->data[0] = multiname_clone(name); return self; } code_t* abc_coerce_a(code_t*prev) { code_t*self = add_opcode(prev, 0x82); return self; } code_t* abc_coerce_s(code_t*prev) { code_t*self = add_opcode(prev, 0x85); return self; } code_t* abc_construct(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x42); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_constructprop(code_t*prev, char* name, int v) { code_t*self = add_opcode(prev, 0x4a); self->data[0] = multiname_fromstring(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_constructprop2(code_t*prev, multiname_t* name, int v) { code_t*self = add_opcode(prev, 0x4a); self->data[0] = multiname_clone(name); self->data[1] = (void*)(ptroff_t)v; return self; } code_t* abc_constructsuper(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x49); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_convert_b(code_t*prev) { code_t*self = add_opcode(prev, 0x76); return self; } code_t* abc_convert_i(code_t*prev) { code_t*self = add_opcode(prev, 0x73); return self; } code_t* abc_convert_d(code_t*prev) { code_t*self = add_opcode(prev, 0x75); return self; } code_t* abc_convert_o(code_t*prev) { code_t*self = add_opcode(prev, 0x77); return self; } code_t* abc_convert_u(code_t*prev) { code_t*self = add_opcode(prev, 0x74); return self; } code_t* abc_convert_s(code_t*prev) { code_t*self = add_opcode(prev, 0x70); return self; } code_t* abc_debug(code_t*prev, void* debuginfo) { code_t*self = add_opcode(prev, 0xef); /* FIXME: write debuginfo debuginfo */ return self; } code_t* abc_debugfile(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xf1); self->data[0] = string_new4(name); return self; } code_t* abc_debugfile2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0xf1); self->data[0] = string_dup3(s); return self; } code_t* abc_debugline(code_t*prev, int v) { code_t*self = add_opcode(prev, 0xf0); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_declocal(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0x94); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_declocal_i(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0xc3); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_decrement(code_t*prev) { code_t*self = add_opcode(prev, 0x93); return self; } code_t* abc_decrement_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc1); return self; } code_t* abc_deleteproperty(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x6a); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_deleteproperty2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x6a); self->data[0] = multiname_clone(name); return self; } code_t* abc_divide(code_t*prev) { code_t*self = add_opcode(prev, 0xa3); return self; } code_t* abc_dup(code_t*prev) { code_t*self = add_opcode(prev, 0x2a); return self; } code_t* abc_dxns(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x06); self->data[0] = string_new4(name); return self; } code_t* abc_dxns2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0x06); self->data[0] = string_dup3(s); return self; } code_t* abc_dxnslate(code_t*prev) { code_t*self = add_opcode(prev, 0x07); return self; } code_t* abc_equals(code_t*prev) { code_t*self = add_opcode(prev, 0xab); return self; } code_t* abc_esc_xattr(code_t*prev) { code_t*self = add_opcode(prev, 0x72); return self; } code_t* abc_esc_xelem(code_t*prev) { code_t*self = add_opcode(prev, 0x71); return self; } code_t* abc_findproperty(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x5e); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_findproperty2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x5e); self->data[0] = multiname_clone(name); return self; } code_t* abc_findpropstrict(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x5d); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_findpropstrict2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x5d); self->data[0] = multiname_clone(name); return self; } code_t* abc_getdescendants(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x59); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_getdescendants2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x59); self->data[0] = multiname_clone(name); return self; } code_t* abc_getglobalscope(code_t*prev) { code_t*self = add_opcode(prev, 0x64); return self; } code_t* abc_getglobalslot(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x6e); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_getlex(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x60); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_getlex2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x60); self->data[0] = multiname_clone(name); return self; } code_t* abc_getlocal(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0x62); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_getlocal_0(code_t*prev) { code_t*self = add_opcode(prev, 0xd0); return self; } code_t* abc_getlocal_1(code_t*prev) { code_t*self = add_opcode(prev, 0xd1); return self; } code_t* abc_getlocal_2(code_t*prev) { code_t*self = add_opcode(prev, 0xd2); return self; } code_t* abc_getlocal_3(code_t*prev) { code_t*self = add_opcode(prev, 0xd3); return self; } code_t* abc_getproperty(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x66); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_getproperty2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x66); self->data[0] = multiname_clone(name); return self; } code_t* abc_getscopeobject(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x65); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_getslot(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x6c); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_getsuper(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x04); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_getsuper2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x04); self->data[0] = multiname_clone(name); return self; } code_t* abc_greaterthan(code_t*prev) { code_t*self = add_opcode(prev, 0xaf); return self; } code_t* abc_greaterequals(code_t*prev) { code_t*self = add_opcode(prev, 0xb0); return self; } code_t* abc_hasnext(code_t*prev) { code_t*self = add_opcode(prev, 0x1f); return self; } code_t* abc_hasnext2(code_t*prev, int reg, int reg2) { code_t*self = add_opcode(prev, 0x32); self->data[0] = (void*)(ptroff_t)reg; self->data[1] = (void*)(ptroff_t)reg2; return self; } code_t* abc_ifeq(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x13); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_iffalse(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x12); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifge(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x18); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifgt(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x17); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifle(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x16); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_iflt(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x15); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifnge(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x0f); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifngt(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x0e); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifnle(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x0d); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifnlt(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x0c); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifne(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x14); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifstricteq(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x19); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_ifstrictne(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x1a); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_iftrue(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x11); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_in(code_t*prev) { code_t*self = add_opcode(prev, 0xb4); return self; } code_t* abc_inclocal(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0x92); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_inclocal_i(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0xc2); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_increment(code_t*prev) { code_t*self = add_opcode(prev, 0x91); return self; } code_t* abc_increment_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc0); return self; } code_t* abc_initproperty(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x68); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_initproperty2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x68); self->data[0] = multiname_clone(name); return self; } code_t* abc_instanceof(code_t*prev) { code_t*self = add_opcode(prev, 0xb1); return self; } code_t* abc_istype(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xb2); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_istype2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0xb2); self->data[0] = multiname_clone(name); return self; } code_t* abc_istypelate(code_t*prev) { code_t*self = add_opcode(prev, 0xb3); return self; } code_t* abc_jump(code_t*prev, code_t* label) { code_t*self = add_opcode(prev, 0x10); self->data[0] = 0; //placeholder self->branch = label; return self; } code_t* abc_kill(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0x08); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_label(code_t*prev) { code_t*self = add_opcode(prev, 0x09); return self; } code_t* abc_lessequals(code_t*prev) { code_t*self = add_opcode(prev, 0xae); return self; } code_t* abc_lessthan(code_t*prev) { code_t*self = add_opcode(prev, 0xad); return self; } code_t* abc_lookupswitch(code_t*prev, lookupswitch_t* l) { code_t*self = add_opcode(prev, 0x1b); self->data[0] = l; return self; } code_t* abc_lshift(code_t*prev) { code_t*self = add_opcode(prev, 0xa5); return self; } code_t* abc_modulo(code_t*prev) { code_t*self = add_opcode(prev, 0xa4); return self; } code_t* abc_multiply(code_t*prev) { code_t*self = add_opcode(prev, 0xa2); return self; } code_t* abc_multiply_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc7); return self; } code_t* abc_negate(code_t*prev) { code_t*self = add_opcode(prev, 0x90); return self; } code_t* abc_negate_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc4); return self; } code_t* abc_newactivation(code_t*prev) { code_t*self = add_opcode(prev, 0x57); return self; } code_t* abc_newarray(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x56); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_newcatch(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x5a); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_newclass(code_t*prev, abc_class_t* m) { code_t*self = add_opcode(prev, 0x58); self->data[0] = m; return self; } code_t* abc_newfunction(code_t*prev, abc_method_t* m) { code_t*self = add_opcode(prev, 0x40); self->data[0] = m; return self; } code_t* abc_newobject(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x55); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_nextname(code_t*prev) { code_t*self = add_opcode(prev, 0x1e); return self; } code_t* abc_nextvalue(code_t*prev) { code_t*self = add_opcode(prev, 0x23); return self; } code_t* abc_nop(code_t*prev) { code_t*self = add_opcode(prev, 0x02); return self; } code_t* abc_not(code_t*prev) { code_t*self = add_opcode(prev, 0x96); return self; } code_t* abc_pop(code_t*prev) { code_t*self = add_opcode(prev, 0x29); return self; } code_t* abc_popscope(code_t*prev) { code_t*self = add_opcode(prev, 0x1d); return self; } code_t* abc_pushbyte(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x24); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_pushdouble(code_t*prev, double f) { code_t*self = add_opcode(prev, 0x2f); double*fp = malloc(sizeof(double)); *fp = f; self->data[0] = fp; return self; } code_t* abc_pushfalse(code_t*prev) { code_t*self = add_opcode(prev, 0x27); return self; } code_t* abc_pushint(code_t*prev, int i) { code_t*self = add_opcode(prev, 0x2d); self->data[0] = (void*)(ptroff_t)i; return self; } code_t* abc_pushnamespace(code_t*prev, namespace_t* ns) { code_t*self = add_opcode(prev, 0x31); self->data[0] = namespace_clone(ns); return self; } code_t* abc_pushnan(code_t*prev) { code_t*self = add_opcode(prev, 0x28); return self; } code_t* abc_pushnull(code_t*prev) { code_t*self = add_opcode(prev, 0x20); return self; } code_t* abc_pushscope(code_t*prev) { code_t*self = add_opcode(prev, 0x30); return self; } code_t* abc_pushshort(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x25); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_pushstring(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x2c); self->data[0] = string_new4(name); return self; } code_t* abc_pushstring2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0x2c); self->data[0] = string_dup3(s); return self; } code_t* abc_pushtrue(code_t*prev) { code_t*self = add_opcode(prev, 0x26); return self; } code_t* abc_pushuint(code_t*prev, unsigned int u) { code_t*self = add_opcode(prev, 0x2e); self->data[0] = (void*)(ptroff_t)u; return self; } code_t* abc_pushundefined(code_t*prev) { code_t*self = add_opcode(prev, 0x21); return self; } code_t* abc_pushwith(code_t*prev) { code_t*self = add_opcode(prev, 0x1c); return self; } code_t* abc_returnvalue(code_t*prev) { code_t*self = add_opcode(prev, 0x48); return self; } code_t* abc_returnvoid(code_t*prev) { code_t*self = add_opcode(prev, 0x47); return self; } code_t* abc_rshift(code_t*prev) { code_t*self = add_opcode(prev, 0xa6); return self; } code_t* abc_setlocal(code_t*prev, int reg) { code_t*self = add_opcode(prev, 0x63); self->data[0] = (void*)(ptroff_t)reg; return self; } code_t* abc_setlocal_0(code_t*prev) { code_t*self = add_opcode(prev, 0xd4); return self; } code_t* abc_setlocal_1(code_t*prev) { code_t*self = add_opcode(prev, 0xd5); return self; } code_t* abc_setlocal_2(code_t*prev) { code_t*self = add_opcode(prev, 0xd6); return self; } code_t* abc_setlocal_3(code_t*prev) { code_t*self = add_opcode(prev, 0xd7); return self; } code_t* abc_setglobalslot(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x6f); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_setproperty(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x61); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_setproperty2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x61); self->data[0] = multiname_clone(name); return self; } code_t* abc_setslot(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x6d); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc_setsuper(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0x05); self->data[0] = multiname_fromstring(name); return self; } code_t* abc_setsuper2(code_t*prev, multiname_t* name) { code_t*self = add_opcode(prev, 0x05); self->data[0] = multiname_clone(name); return self; } code_t* abc_strictequals(code_t*prev) { code_t*self = add_opcode(prev, 0xac); return self; } code_t* abc_subtract(code_t*prev) { code_t*self = add_opcode(prev, 0xa1); return self; } code_t* abc_subtract_i(code_t*prev) { code_t*self = add_opcode(prev, 0xc6); return self; } code_t* abc_swap(code_t*prev) { code_t*self = add_opcode(prev, 0x2b); return self; } code_t* abc_throw(code_t*prev) { code_t*self = add_opcode(prev, 0x03); return self; } code_t* abc_typeof(code_t*prev) { code_t*self = add_opcode(prev, 0x95); return self; } code_t* abc_urshift(code_t*prev) { code_t*self = add_opcode(prev, 0xa7); return self; } code_t* abc_applytype(code_t*prev, int v) { code_t*self = add_opcode(prev, 0x53); self->data[0] = (void*)(ptroff_t)v; return self; } code_t* abc___pushpackage__(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xfb); self->data[0] = string_new4(name); return self; } code_t* abc___pushpackage__2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0xfb); self->data[0] = string_dup3(s); return self; } code_t* abc___rethrow__(code_t*prev) { code_t*self = add_opcode(prev, 0xfc); return self; } code_t* abc___fallthrough__(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xfd); self->data[0] = string_new4(name); return self; } code_t* abc___fallthrough__2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0xfd); self->data[0] = string_dup3(s); return self; } code_t* abc___continue__(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xfe); self->data[0] = string_new4(name); return self; } code_t* abc___continue__2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0xfe); self->data[0] = string_dup3(s); return self; } code_t* abc___break__(code_t*prev, char* name) { code_t*self = add_opcode(prev, 0xff); self->data[0] = string_new4(name); return self; } code_t* abc___break__2(code_t*prev, string_t* s) { code_t*self = add_opcode(prev, 0xff); self->data[0] = string_dup3(s); return self; } swftools_0.9.2+git20130725.orig/lib/as3/pool.h0000644000175000017500000001434412216332640017707 0ustar gawaingawain/* pool.h Routines for handling Flash2 AVM2 ABC contantpool entries. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __pool_h__ #define __pool_h__ #include "../q.h" #include "../rfxswf.h" DECLARE(pool); DECLARE(constant); DECLARE_LIST(constant); DECLARE(multiname); DECLARE(namespace); DECLARE(namespace_set); DECLARE_LIST(multiname); DECLARE_LIST(namespace); DECLARE_LIST(trait); /* abc file constant pool */ struct _pool { array_t*x_ints; array_t*x_uints; array_t*x_floats; array_t*x_strings; array_t*x_namespaces; array_t*x_namespace_sets; array_t*x_multinames; }; typedef enum access_type {ACCESS_STANDARD=0x16, ACCESS_PACKAGE=0x16, ACCESS_PUBLIC=0x16, ACCESS_PACKAGEINTERNAL=0x17, ACCESS_PROTECTED=0x18, ACCESS_EXPLICIT=0x19, ACCESS_STATICPROTECTED=0x1a, ACCESS_PRIVATE=0x05, ACCESS_NAMESPACE=0x08 } access_type_t; typedef enum constant_type { CONSTANT_STRING=0x01, CONSTANT_INT=0x03, CONSTANT_UINT=0x04, CONSTANT_FLOAT=0x06, CONSTANT_TRUE=0x0B, CONSTANT_FALSE=0x0A, CONSTANT_NULL=0x0C, CONSTANT_UNDEFINED=0x00, CONSTANT_NAMESPACE=0x08, CONSTANT_NAMESPACE_PACKAGE=0x16, CONSTANT_NAMESPACE_PACKAGEINTERNAL=0x17, CONSTANT_NAMESPACE_PROTECTED=0x18, CONSTANT_NAMESPACE_EXPLICIT=0x19, CONSTANT_NAMESPACE_STATICPROTECTED=0x1A, CONSTANT_NAMESPACE_PRIVATE=0x05, CONSTANT_UNKNOWN=0x55, /*used internally */ } contant_type_t; #define NS_TYPE(x) ((x) == 0x08 || (x) == 0x16 || (x) == 0x17 || (x) == 0x18 || (x) == 0x19 || (x) == 0x1a || (x) == 0x05) struct _constant { int type; union { string_t* s; namespace_t*ns; double f; int i; unsigned int u; }; }; constant_t* constant_clone(); constant_t* constant_new_int(int x); constant_t* constant_new_uint(unsigned int x); constant_t* constant_new_float(double x); constant_t* constant_new_string(const char*s); constant_t* constant_new_string2(const char*s, int len); constant_t* constant_new_namespace(namespace_t*ns); constant_t* constant_new_true(); constant_t* constant_new_false(); constant_t* constant_new_null(); constant_t* constant_new_undefined(); char constant_has_index(constant_t*c); constant_t* constant_fromindex(pool_t*pool, int index, int type); char* constant_tostring(constant_t*c); int constant_get_index(pool_t*pool, constant_t*c); void constant_free(constant_t*c); typedef enum multiname_type {QNAME=0x07, RTQNAME=0x0F, RTQNAMEL=0x11, MULTINAME=0x09, MULTINAMEL=0x1B, QNAMEA=0x0D, RTQNAMEA=0x10, RTQNAMELA=0x12, MULTINAMEA=0x0E, MULTINAMELA=0x1C, POSTFIXTYPE=0x1D, ZERONAMESPACE=0 } multiname_type_t; char* access2str(int type); struct _namespace { U8 access; const char*name; }; struct _namespace_set { namespace_list_t*namespaces; }; extern type_t multiname_type; struct _multiname { multiname_type_t type; namespace_t*ns; namespace_set_t*namespace_set; const char*name; }; /* object -> string */ char* namespace_set_tostring(namespace_set_t*set); char* multiname_tostring(multiname_t*m); char* namespace_tostring(namespace_t*ns); /* integer -> object */ int pool_lookup_int(pool_t*pool, int i); unsigned int pool_lookup_uint(pool_t*pool, int i); double pool_lookup_float(pool_t*pool, int i); const char*pool_lookup_string(pool_t*pool, int i); string_t pool_lookup_string2(pool_t*pool, int i); namespace_t*pool_lookup_namespace(pool_t*pool, int i); namespace_set_t*pool_lookup_namespace_set(pool_t*pool, int i); multiname_t*pool_lookup_multiname(pool_t*pool, int i); /* object -> integer (lookup) */ int pool_find_int(pool_t*pool, int x); int pool_find_uint(pool_t*pool, unsigned int x); int pool_find_double(pool_t*pool, double x); int pool_find_namespace(pool_t*pool, namespace_t*ns); int pool_find_namespace_set(pool_t*pool, namespace_set_t*set); int pool_find_string(pool_t*pool, const char*s); int pool_find_multiname(pool_t*pool, multiname_t*name); /* object -> integer (lookup/creation) */ int pool_register_int(pool_t*p, int i); int pool_register_uint(pool_t*p, unsigned int i); int pool_register_float(pool_t*p, double d); int pool_register_string(pool_t*pool, const char*s); int pool_register_string2(pool_t*pool, string_t*s); int pool_register_namespace(pool_t*pool, namespace_t*ns); int pool_register_namespace_set(pool_t*pool, namespace_set_t*set); int pool_register_multiname(pool_t*pool, multiname_t*n); int pool_register_multiname2(pool_t*pool, char*name); /* creation */ namespace_t* namespace_new(U8 access, const char*name); namespace_t* namespace_new_namespace(const char*name); namespace_t* namespace_new_package(const char*name); namespace_t* namespace_new_packageinternal(const char*name); namespace_t* namespace_new_protected(const char*name); namespace_t* namespace_new_explicit(const char*name); namespace_t* namespace_new_staticprotected(const char*name); namespace_t* namespace_new_private(const char*name); namespace_t* namespace_clone(namespace_t*ns); namespace_t* namespace_fromstring(const char*name); multiname_t* multiname_fromstring(const char*name); multiname_t* multiname_new(namespace_t*ns, const char*name); multiname_t* multiname_clone(multiname_t*other); /* accessors etc. */ char multiname_late_namespace(multiname_t*m); char multiname_late_name(multiname_t*m); /* freeing */ void multiname_destroy(multiname_t*m); void namespace_destroy(namespace_t*n); /* pool constructors/destructors */ pool_t*pool_new(); void pool_optimize(); void pool_read(pool_t*pool, TAG*tag); void pool_write(pool_t*pool, TAG*tag); void pool_destroy(pool_t*pool); void pool_dump(pool_t*pool, FILE*fo, char flags); #endif swftools_0.9.2+git20130725.orig/lib/as3/registry.c0000644000175000017500000004113712216332640020601 0ustar gawaingawain/* registry.c Routines for compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include "pool.h" #include "registry.h" #include "builtin.h" dict_t*registry_classes=0; asset_bundle_list_t*assets=0; // ----------------------- class signature ------------------------------ char slotinfo_equals(slotinfo_t*c1, slotinfo_t*c2) { if(!!c1 != !!c2) return 0; /* notice: access right is *not* respected */ if(!strcmp(c1->name, c2->name) && !strcmp(c1->package, c2->package)) { return 1; } return 0; } static unsigned int slotinfo_hash(slotinfo_t*c) { unsigned int hash = 0; hash = crc32_add_string(hash, c->package); hash = crc32_add_string(hash, c->name); return hash; } static unsigned int memberinfo_hash(slotinfo_t*c) { unsigned int hash = 0; hash = crc32_add_string(hash, c->name); return hash; } static void* dummy_clone(void*other) {return other;} static void dummy_destroy(slotinfo_t*c) {} type_t slotinfo_type = { hash: (hash_func)slotinfo_hash, equals: (equals_func)slotinfo_equals, dup: (dup_func)dummy_clone, // all signatures are static free: (free_func)dummy_destroy, }; type_t memberinfo_type = { hash: (hash_func)memberinfo_hash, equals: (equals_func)slotinfo_equals, dup: (dup_func)dummy_clone, // all signatures are static free: (free_func)dummy_destroy, }; // ----------------------- assets ------------------------------------- static void use_asset(asset_bundle_t*a) { a->used = 1; asset_bundle_list_t*l = a->dependencies; while(l) { if(!l->asset_bundle->used) { use_asset(l->asset_bundle); } l = l->next; } } void registry_use(slotinfo_t*s) { if(!s) return; if(!(s->flags&FLAG_USED)) { s->flags |= FLAG_USED; if(s->kind == INFOTYPE_CLASS) { classinfo_t*c=(classinfo_t*)s; if(c->assets) { use_asset(c->assets); } int t=0; while(c->interfaces[t]) { registry_use((slotinfo_t*)c->interfaces[t]); t++; } while(c->superclass) { c = c->superclass; registry_use((slotinfo_t*)c); } } else if(s->kind == INFOTYPE_METHOD) { methodinfo_t*m=(methodinfo_t*)s; if(m->parent) { registry_use((slotinfo_t*)m->parent); } } else if(s->kind == INFOTYPE_VAR) { varinfo_t*v=(varinfo_t*)s; if(v->parent) { registry_use((slotinfo_t*)v->parent); } } } } void registry_add_asset(asset_bundle_t*bundle) { list_append(assets, bundle); } asset_bundle_list_t*registry_getassets() { return assets; } // ----------------------- resolving ---------------------------------- slotinfo_t* registry_resolve(slotinfo_t*_s) { if(!_s || _s->kind != INFOTYPE_UNRESOLVED) return _s; unresolvedinfo_t*s = (unresolvedinfo_t*)_s; if(s->package) return registry_find(s->package, s->name); namespace_list_t*l = s->nsset; while(l) { slotinfo_t* n = registry_find(l->namespace->name, s->name); if(n) return n; l = l->next; } return 0; } static slotinfo_list_t*unresolved = 0; static void schedule_for_resolve(slotinfo_t*s) { list_append(unresolved, s); } static void resolve_on_slot(slotinfo_t*_member) { if(_member->kind == INFOTYPE_VAR) { varinfo_t*member = (varinfo_t*)_member; member->type = (classinfo_t*)registry_resolve((slotinfo_t*)member->type); } else if(_member->kind == INFOTYPE_METHOD) { methodinfo_t*member = (methodinfo_t*)_member; member->return_type = (classinfo_t*)registry_resolve((slotinfo_t*)member->return_type); classinfo_list_t*l = member->params; while(l) { l->classinfo = (classinfo_t*)registry_resolve((slotinfo_t*)l->classinfo); l = l->next; } } else fprintf(stderr, "Internal Error: bad slot %s", _member->name); } static void resolve_on_class(slotinfo_t*_cls) { classinfo_t*cls = (classinfo_t*)_cls; cls->superclass = (classinfo_t*)registry_resolve((slotinfo_t*)cls->superclass); DICT_ITERATE_DATA(&cls->members,slotinfo_t*,m) { resolve_on_slot(m); } DICT_ITERATE_DATA(&cls->static_members,slotinfo_t*,m2) { resolve_on_slot(m2); } int t=0; while(cls->interfaces[t]) { cls->interfaces[t] = (classinfo_t*)registry_resolve((slotinfo_t*)cls->interfaces[t]); t++; } } void registry_resolve_all() { while(unresolved) { slotinfo_t*_s = unresolved->slotinfo; if(_s->kind == INFOTYPE_CLASS) { resolve_on_class(_s); } else if(_s->kind == INFOTYPE_METHOD || _s->kind == INFOTYPE_VAR) { resolve_on_slot(_s); } else { fprintf(stderr, "Internal Error: object %s.%s has bad type\n", _s->package, _s->name); } slotinfo_list_t*tofree = unresolved; unresolved = unresolved->next; free(tofree); } } // ------------------------- constructors -------------------------------- #define AVERAGE_NUMBER_OF_MEMBERS 8 classinfo_t* classinfo_register(int access, const char*package, const char*name, int num_interfaces) { classinfo_t*c = rfx_calloc(sizeof(classinfo_t)+(sizeof(classinfo_t*)*(num_interfaces+1))); c->interfaces[0] = 0; c->kind = INFOTYPE_CLASS; c->access = access; c->package = package; c->name = name; dict_put(registry_classes, c, c); dict_init2(&c->members, &memberinfo_type, AVERAGE_NUMBER_OF_MEMBERS); dict_init2(&c->static_members, &memberinfo_type, AVERAGE_NUMBER_OF_MEMBERS); schedule_for_resolve((slotinfo_t*)c); return c; } methodinfo_t* methodinfo_register_onclass(classinfo_t*cls, U8 access, const char*ns, const char*name, char is_static) { NEW(methodinfo_t,m); m->kind = INFOTYPE_METHOD; m->access = access; m->name = name; m->package = ns; m->parent = cls; if(!is_static) dict_put(&cls->members, m, m); else dict_put(&cls->static_members, m, m); return m; } varinfo_t* varinfo_register_onclass(classinfo_t*cls, U8 access, const char*ns, const char*name, char is_static) { NEW(varinfo_t,m); m->kind = INFOTYPE_VAR; m->access = access; m->name = name; m->package = ns; m->parent = cls; if(!is_static) dict_put(&cls->members, m, m); else dict_put(&cls->static_members, m, m); return m; } methodinfo_t* methodinfo_register_global(U8 access, const char*package, const char*name) { NEW(methodinfo_t, m); m->kind = INFOTYPE_METHOD; m->flags = FLAG_STATIC; m->access = access; m->package = package; m->name = name; m->parent = 0; dict_put(registry_classes, m, m); schedule_for_resolve((slotinfo_t*)m); return m; } varinfo_t* varinfo_register_global(U8 access, const char*package, const char*name) { NEW(varinfo_t, m); m->kind = INFOTYPE_VAR; m->flags = FLAG_STATIC; m->access = access; m->package = package; m->name = name; m->parent = 0; dict_put(registry_classes, m, m); schedule_for_resolve((slotinfo_t*)m); return m; } // --------------- builtin classes (from builtin.c) ---------------------- void registry_init() { if(!registry_classes) registry_classes = builtin_getclasses(); } slotinfo_t* registry_find(const char*package, const char*name) { assert(registry_classes); slotinfo_t tmp; tmp.package = package; tmp.name = name; slotinfo_t* c = (slotinfo_t*)dict_lookup(registry_classes, &tmp); /*if(c) printf("%s.%s->%08x (%s.%s)\n", package, name, c, c->package, c->name);*/ return c; } slotinfo_t* registry_safefind(const char*package, const char*name) { slotinfo_t*c = registry_find(package, name); if(!c) { printf("%s.%s\n", package, name); } assert(c); return c; } void registry_dump() { int t; for(t=0;thashsize;t++) { dictentry_t*e = registry_classes->slots[t]; while(e) { slotinfo_t*i = (slotinfo_t*)e->key; printf("[%s] %s.%s\n", access2str(i->access), i->package, i->name); e = e->next; } } } memberinfo_t* registry_findmember(classinfo_t*cls, const char*ns, const char*name, char recursive, char is_static) { memberinfo_t tmp; tmp.name = name; tmp.package = ns?ns:""; if(!recursive) { if(!is_static) return (memberinfo_t*)dict_lookup(&cls->members, &tmp); else return (memberinfo_t*)dict_lookup(&cls->static_members, &tmp); } /* look at classes directly extended by this class */ slotinfo_t*m = 0; classinfo_t*s = cls; if(recursive>1) // check *only* superclasses s = s->superclass; while(s) { if(s->kind == INFOTYPE_UNRESOLVED) break; if(!is_static) { m = (slotinfo_t*)dict_lookup(&s->members, &tmp); if(m) return (memberinfo_t*)m; } m = (slotinfo_t*)dict_lookup(&s->static_members, &tmp); if(m) return (memberinfo_t*)m; s = s->superclass; } /* look at interfaces, and parent interfaces */ int t=0; while(cls->interfaces[t]) { classinfo_t*s = cls->interfaces[t]; if(s->kind != INFOTYPE_UNRESOLVED) { while(s) { if(!is_static) { m = (slotinfo_t*)dict_lookup(&s->members, &tmp); if(m) return (memberinfo_t*)m; } m = (slotinfo_t*)dict_lookup(&s->static_members, &tmp); if(m) return (memberinfo_t*)m; s = s->superclass; } } t++; } return 0; } memberinfo_t* registry_findmember_nsset(classinfo_t*cls, namespace_list_t*ns, const char*name, char superclasses, char is_static) { memberinfo_t*m = 0; while(ns) { m = registry_findmember(cls, ns->namespace->name, name, superclasses, is_static); if(m) return m; ns = ns->next; } m = registry_findmember(cls, "", name, superclasses, is_static); if(m) return m; /* TODO: it maybe would be faster to just store the builtin namespace as "" in builtins.c (update: some members (e.g. XML.length) are present both for "" and "http:...builtin") */ m = registry_findmember(cls, "http://adobe.com/AS3/2006/builtin", name, superclasses, is_static); if(m) return m; return 0; } void registry_fill_multiname(multiname_t*m, namespace_t*n, slotinfo_t*c) { m->type = QNAME; m->ns = n; m->ns->access = c->access; m->ns->name = (char*)c->package; m->name = c->name; m->namespace_set = 0; } multiname_t* classinfo_to_multiname(slotinfo_t*cls) { if(!cls) return 0; multiname_t*m=0; namespace_t ns = {cls->access, (char*)cls->package}; return multiname_new(&ns,cls->name); } // ----------------------- memberinfo methods ------------------------------ /* hacky code to wrap a variable or function into a "type" object, but keep a pointer to the "value" */ static dict_t* functionobjects = 0; classinfo_t* slotinfo_asclass(slotinfo_t*f) { if(!functionobjects) { functionobjects = dict_new2(&ptr_type); } else { classinfo_t*c = dict_lookup(functionobjects, f); if(c) return c; } classinfo_t*c = rfx_calloc(sizeof(classinfo_t)+sizeof(classinfo_t*)); c->access = ACCESS_PUBLIC; c->package = ""; if(f->kind == INFOTYPE_METHOD) { c->name = "Function"; c->superclass = registry_getobjectclass(); } else if(f->kind == INFOTYPE_CLASS) { c->name = "Class"; c->superclass = registry_getobjectclass(); } else if(f->kind == INFOTYPE_VAR) { c->name = "Object"; } else { c->name = "undefined"; } dict_init2(&c->members, &memberinfo_type, 1); dict_init2(&c->static_members, &memberinfo_type, 1); c->data = f; dict_put(functionobjects, f, c); return c; } classinfo_t* slotinfo_gettype(slotinfo_t*f) { if(f) { if(f->kind == INFOTYPE_METHOD) { return slotinfo_asclass(f); } else if(f->kind == INFOTYPE_VAR) { varinfo_t*v = (varinfo_t*)f; return v->type; } else return 0; } else { return TYPE_ANY; } } // ----------------------- package handling --------------------------- char registry_ispackage(const char*package) { /* crude approximation of "the real thing", but sufficient for now */ return !strncmp(package, "flash", 5); } // ----------------------- builtin types ------------------------------ char registry_isfunctionclass(classinfo_t*c) { return (c && c->package && c->name && !strcmp(c->package, "") && !strcmp(c->name, "Function")); } char registry_isclassclass(classinfo_t*c) { return (c && c->package && c->name && !strcmp(c->package, "") && !strcmp(c->name, "Class")); } classinfo_t* registry_getobjectclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Object"); return c; } classinfo_t* registry_getstringclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "String"); return c; } classinfo_t* registry_getarrayclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Array"); return c; } classinfo_t* registry_getintclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "int"); return c; } classinfo_t* registry_getuintclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "uint"); return c; } classinfo_t* registry_getbooleanclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Boolean"); return c; } classinfo_t* registry_getnumberclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Number"); return c; } classinfo_t* registry_getregexpclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "RegExp"); return c; } classinfo_t* registry_getdateclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Date"); return c; } classinfo_t* registry_getxmlclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "XML"); return c; } classinfo_t* registry_getxmllistclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "XMLList"); return c; } classinfo_t* registry_getnamespaceclass() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("", "Namespace"); return c; } classinfo_t* registry_getMovieClip() { static classinfo_t*c = 0; if(!c) c = (classinfo_t*)registry_safefind("flash.display", "MovieClip"); return c; } // ----------------------- builtin dummy types ------------------------- classinfo_t nullclass = { INFOTYPE_CLASS,0,0,ACCESS_PACKAGE, "", "null", 0,0,0,0,0,0,0,0,0,0,0,0,0, }; classinfo_t* registry_getnullclass() { return &nullclass; } classinfo_t voidclass = { INFOTYPE_CLASS,0,0,ACCESS_PACKAGE, "", "void", 0,0,0,0,0,0,0,0,0,0,0,0,0, }; classinfo_t* registry_getvoidclass() { return &voidclass; } namespace_t access2namespace(U8 access, char*package) { namespace_t ns; ns.access = access; ns.name = package; return ns; } char* infotypename(slotinfo_t*s) { if(!s) return "(unknown)"; if(s->kind == INFOTYPE_CLASS) return "class"; else if(s->kind == INFOTYPE_VAR) return "var"; else if(s->kind == INFOTYPE_METHOD) return "function"; else return "object"; } void slotinfo_dump(slotinfo_t*s) { if(s->package[0]) { printf("%s %s.%s", infotypename(s), s->package, s->name); } else { printf("%s %s", infotypename(s), s->name); } if(s->kind == INFOTYPE_CLASS) { classinfo_t*c = (classinfo_t*)s; } else if(s->kind == INFOTYPE_VAR) { varinfo_t*v = (varinfo_t*)s; printf(":%s", v->type?v->type->name:"*"); if(v->value) printf("=%s", constant_tostring(v->value)); if(v->slot) printf(" (slot:%d)", v->slot); } else if(s->kind == INFOTYPE_METHOD) { methodinfo_t*m = (methodinfo_t*)s; } else { } printf("\n"); } swftools_0.9.2+git20130725.orig/lib/as3/parser_help.c0000644000175000017500000013453512216332640021242 0ustar gawaingawain#include "parser_help.h" global_t*global = 0; static namespace_t ns1 = {ACCESS_PRIVATE, ""}; static namespace_t ns2 = {ACCESS_PROTECTED, ""}; static namespace_t ns3 = {ACCESS_PACKAGEINTERNAL, ""}; namespace_t stdns = {ACCESS_PACKAGE, ""}; static namespace_list_t nl4 = {&stdns,0}; static namespace_list_t nl3 = {&ns3,&nl4}; static namespace_list_t nl2 = {&ns2,&nl3}; static namespace_list_t nl1 = {&ns1,&nl2}; namespace_set_t nopackage_namespace_set = {&nl1}; static char* internal_filename_package = 0; void initialize_file(char*filename) { if(state) { syntaxerror("invalid call to initialize_file during parsing of another file"); } new_state(); state->package = internal_filename_package = strdup(filename); global->token2info = dict_lookup(global->file2token2info, current_filename // use long version ); if(!global->token2info) { global->token2info = dict_new2(&ptr_type); dict_put(global->file2token2info, current_filename, global->token2info); } if(as3_pass==1) { state->method = rfx_calloc(sizeof(methodstate_t)); dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method); state->method->late_binding = 1; // init scripts use getglobalscope, so we need a getlocal0/pushscope state->method->allvars = dict_new(); } else { state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount); state->method->variable_count = 0; if(!state->method) syntaxerror("internal error: skewed tokencount"); function_initvars(state->method, 0, 0, 0, 1); global->init = 0; } } void finish_file() { if(!state || state->level!=1) { syntaxerror("unexpected end of file in pass %d", as3_pass); } if(as3_pass==2) { dict_del(global->file2token2info, current_filename); code_t*header = method_header(state->method); //if(global->init->method->body->code || global->init->traits) { if(global->init) { code_t*c = wrap_function(header, 0, global->init->method->body->code); global->init->method->body->code = abc_returnvoid(c); free(state->method);state->method=0; } } //free(state->package);state->package=0; // used in registry state_destroy(state);state=0; } void initialize_parser() { global = rfx_calloc(sizeof(global_t)); global->file = abc_file_new(); global->file->flags &= ~ABCFILE_LAZY; global->file2token2info = dict_new(); global->token2info = 0; global->classinit = abc_initscript(global->file); } void* finish_parser() { dict_free_all(global->file2token2info, 1, (void*)dict_destroy); global->token2info=0; initcode_add_classlist(global->classinit, global->classes); return global->file; } variable_t* find_variable(state_t*s, const char*name) { if(s->method->no_variable_scoping) { return dict_lookup(s->method->allvars, name); } else { state_t*top = s; while(s) { variable_t*v = 0; v = dict_lookup(s->vars, name); if(v) return v; if(s->new_vars) break; s = s->old; } return 0; } } variable_t* find_slot(methodstate_t*m, const char*name) { if(m && m->slots) return dict_lookup(m->slots, name); return 0; } variable_t* find_variable_safe(state_t*s, char*name) { variable_t* v = find_variable(s, name); if(!v) syntaxerror("undefined variable: %s", name); return v; } char variable_exists(char*name) { return dict_contains(state->vars, name); } code_t*defaultvalue(code_t*c, classinfo_t*type) { as3_assert(!type || type->kind!=INFOTYPE_UNRESOLVED); if(TYPE_IS_INT(type)) { c = abc_pushbyte(c, 0); } else if(TYPE_IS_UINT(type)) { c = abc_pushuint(c, 0); } else if(TYPE_IS_FLOAT(type)) { c = abc_pushnan(c); } else if(TYPE_IS_BOOLEAN(type)) { c = abc_pushfalse(c); } else if(TYPE_IS_STRING(type)) { c = abc_pushnull(c); c = abc_coerce_s(c); } else if(!type) { //c = abc_pushundefined(c); syntaxerror("internal error: can't generate default value for * type"); } else { c = abc_pushnull(c); MULTINAME(m, type); c = abc_coerce2(c, &m); } return c; } int alloc_local() { return state->method->variable_count++; } variable_t* new_variable2(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot) { if(maybeslot) { variable_t*v = find_slot(method, name); if(v) { alloc_local(); return v; } } NEW(variable_t, v); v->type = type; v->init = v->kill = init; if(name) { if(!method->no_variable_scoping) { if(dict_contains(state->vars, name)) { syntaxerror("variable %s already defined", name); } v->index = alloc_local(); dict_put(state->vars, name, v); } else { if(as3_pass==2 && dict_contains(state->method->allvars, name)) { variable_t*v = dict_lookup(state->method->allvars, name); if(v->type != type && (!v->type || v->type->kind!=INFOTYPE_UNRESOLVED)) { syntaxerror("variable %s already defined.", name); } return v; } v->index = alloc_local(); } dict_put(state->method->allvars, name, v); } else { v->index = alloc_local(); } return v; } int new_variable(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot) { return new_variable2(method, name, type, init, maybeslot)->index; } #define TEMPVARNAME "__as3_temp__" int gettempvar() { variable_t*v = find_variable(state, TEMPVARNAME); int i; if(v) i = v->index; else i = new_variable(state->method, TEMPVARNAME, 0, 0, 0); as3_assert(i); return i; } code_t* var_block(code_t*body, dict_t*vars) { code_t*c = 0; code_t*k = 0; int t; DICT_ITERATE_DATA(vars, variable_t*, v) { if(v->type && v->init) { c = defaultvalue(c, v->type); c = abc_setlocal(c, v->index); } if(v->type && v->kill) { k = abc_kill(k, v->index); } } if(k) { code_t*x = body; while(x) { if(x->opcode== OPCODE___BREAK__ || x->opcode== OPCODE___CONTINUE__) { /* link kill code before break/continue */ code_t*e = code_dup(k); code_t*s = code_start(e); s->prev = x->prev; if(x->prev) { x->prev->next = s; } e->next = x; x->prev = e; } x = x->prev; } } c = code_append(c, body); c = code_append(c, k); return c; } void unknown_variable(char*name) { if(!state->method->unresolved_variables) state->method->unresolved_variables = dict_new(); if(!dict_contains(state->method->unresolved_variables, name)) dict_put(state->method->unresolved_variables, name, 0); } code_t* add_scope_code(code_t*c, methodstate_t*m, char init) { if(m->uses_slots || m->innerfunctions || (m->late_binding && !m->inner)) { c = abc_getlocal_0(c); c = abc_pushscope(c); } if(m->uses_slots) { /* FIXME: this alloc_local() causes variable indexes to be different in pass2 than in pass1 */ if(!m->activation_var) { m->activation_var = alloc_local(); } if(init) { c = abc_newactivation(c); c = abc_dup(c); c = abc_pushscope(c); c = abc_setlocal(c, m->activation_var); } else { c = abc_getlocal(c, m->activation_var); c = abc_pushscope(c); } } return c; } code_t* method_header(methodstate_t*m) { code_t*c = 0; c = add_scope_code(c, m, 1); methodstate_list_t*l = m->innerfunctions; while(l) { as3_assert(l->methodstate->abc); if(m->uses_slots && l->methodstate->is_a_slot) { c = abc_getscopeobject(c, 1); c = abc_newfunction(c, l->methodstate->abc); c = abc_dup(c); c = abc_setlocal(c, l->methodstate->var_index); c = abc_setslot(c, l->methodstate->slot_index); } else { c = abc_newfunction(c, l->methodstate->abc); c = abc_setlocal(c, l->methodstate->var_index); } free(l->methodstate);l->methodstate=0; l = l->next; } if(m->header) { c = code_append(c, m->header); m->header = 0; } if(m->is_constructor && !m->has_super) { // call default constructor c = abc_getlocal_0(c); c = abc_constructsuper(c, 0); } if(m->slots) { /* all parameters that are used by inner functions need to be copied from local to slot */ as3_assert(m->activation_var); DICT_ITERATE_ITEMS(m->slots,char*,name,variable_t*,v) { if(v->is_parameter) { c = abc_getlocal(c, m->activation_var); c = abc_getlocal(c, v->index); c = abc_setslot(c, v->index); } } } list_free(m->innerfunctions); m->innerfunctions = 0; return c; } code_t* wrap_function(code_t*c,code_t*header, code_t*body) { c = code_append(c, header); c = code_append(c, var_block(body, state->method->no_variable_scoping?state->method->allvars:state->vars)); /* append return if necessary */ if(!c || (c->opcode != OPCODE_RETURNVOID && c->opcode != OPCODE_RETURNVALUE)) { c = abc_returnvoid(c); } return c; } void startpackage(char*name) { new_state(); state->package = strdup(name); } void endpackage() { //used e.g. in classinfo_register: //free(state->package);state->package=0; old_state(); } const char* lookup_namespace(const char*name) { state_t*s = state; while(s) { const char*url = dict_lookup(s->namespaces, name); if(url) return url; s = s->old; } varinfo_t*a; registry_find(state->package, name); if(( a = (varinfo_t*)find_class(name) )) { if(a->kind == INFOTYPE_VAR) { if(!a->value || !NS_TYPE(a->value->type)) syntaxerror("%s.%s is not a namespace", a->package, a->name); return a->value->ns->name; } } return 0; } namespace_t modifiers2access(modifiers_t*mod) { namespace_t ns; ns.access = 0; ns.name = ""; if(mod->flags&FLAG_NAMESPACE) { if(mod->flags&(FLAG_PRIVATE|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL)) syntaxerror("invalid combination of access levels and namespaces"); ns.access = ACCESS_NAMESPACE; const char*url = lookup_namespace(mod->ns); if(!url) { if(as3_pass>1) { syntaxerror("unknown namespace: %s (pass %d)", mod->ns, as3_pass); } else { url = mod->ns; } } ns.name = url; } else if(mod->flags&FLAG_PUBLIC) { if(mod->flags&(FLAG_PRIVATE|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL)) syntaxerror("invalid combination of access levels"); ns.access = ACCESS_PACKAGE; } else if(mod->flags&FLAG_PRIVATE) { if(mod->flags&(FLAG_PUBLIC|FLAG_PROTECTED|FLAG_PACKAGEINTERNAL)) syntaxerror("invalid combination of access levels"); ns.access = ACCESS_PRIVATE; } else if(mod->flags&FLAG_PROTECTED) { if(mod->flags&(FLAG_PUBLIC|FLAG_PRIVATE|FLAG_PACKAGEINTERNAL)) syntaxerror("invalid combination of access levels"); ns.access = ACCESS_PROTECTED; } else { ns.access = ACCESS_PACKAGEINTERNAL; } return ns; } memberinfo_t* findmember_nsset(classinfo_t*cls, const char*name, char recurse, char is_static) { return registry_findmember_nsset(cls, state->active_namespace_urls, name, recurse, is_static); } void innerfunctions2vars(methodstate_t*m) { methodstate_list_t*l = m->innerfunctions; while(l) { methodstate_t*m = l->methodstate; variable_t* v = new_variable2(state->method, m->info->name, TYPE_FUNCTION(m->info), 0, 0); m->var_index = v->index; if(m->is_a_slot) m->slot_index = m->is_a_slot; v->is_inner_method = m; l = l->next; } } void function_initvars(methodstate_t*m, char has_params, params_t*params, int flags, char var0) { if(var0) { int index = -1; if(m->inner) index = new_variable(m, "this", 0, 0, 0); else if(!m->is_global) index = new_variable(m, (flags&FLAG_STATIC)?"class":"this", state->cls?state->cls->info:0, 0, 0); else index = new_variable(m, "globalscope", 0, 0, 0); if(index) { DICT_ITERATE_ITEMS(state->vars, char*, name, variable_t*, v) { printf("%s %d\n", name, v->index); } } as3_assert(!index); } if(has_params) { param_list_t*p=0; for(p=params->list;p;p=p->next) { variable_t*v = new_variable2(m, p->param->name, p->param->type, 0, 1); v->is_parameter = 1; } if(as3_pass==2 && m->need_arguments) { /* arguments can never be used by an innerfunction (the inner functions have their own arguments var), so it's ok to not initialize this until pass 2. (We don't know whether we need it before, anyway) */ variable_t*v = new_variable2(m, "arguments", TYPE_ARRAY, 0, 0); m->need_arguments = v->index; } } innerfunctions2vars(m); if(as3_pass==2) { m->scope_code = add_scope_code(m->scope_code, m, 0); if(m->slots) { /* exchange unresolved identifiers with the actual objects */ DICT_ITERATE_ITEMS(m->slots, char*, name, variable_t*, v1) { if(v1->type && v1->type->kind == INFOTYPE_UNRESOLVED) { classinfo_t*type = (classinfo_t*)registry_resolve((slotinfo_t*)v1->type); if(!type || type->kind != INFOTYPE_CLASS) { syntaxerror("Couldn't find class %s::%s (%s)", v1->type->package, v1->type->name, name); } v1->type = type; } } } if(m->allvars) { DICT_ITERATE_ITEMS(m->allvars, char*, name2, variable_t*, v2) { if(v2->type && v2->type->kind == INFOTYPE_UNRESOLVED) { classinfo_t*type = (classinfo_t*)registry_resolve((slotinfo_t*)v2->type); if(!type || type->kind != INFOTYPE_CLASS) { syntaxerror("Couldn't find class %s::%s (%s)", v2->type->package, v2->type->name, name2); } v2->type = type; } } } } } char*as3_globalclass=0; void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, classinfo_list_t*implements) { if(state->cls) { syntaxerror("inner classes now allowed"); } new_state(); token_list_t*t=0; classinfo_list_t*mlist=0; if(mod->flags&~(FLAG_PACKAGEINTERNAL|FLAG_PUBLIC|FLAG_FINAL|FLAG_DYNAMIC|FLAG_INTERFACE)) syntaxerror("invalid modifier(s)"); if((mod->flags&(FLAG_PUBLIC|FLAG_PACKAGEINTERNAL)) == (FLAG_PUBLIC|FLAG_PACKAGEINTERNAL)) syntaxerror("public and internal not supported at the same time."); if((mod->flags&(FLAG_PROTECTED|FLAG_STATIC)) == (FLAG_PROTECTED|FLAG_STATIC)) syntaxerror("protected and static not supported at the same time."); //if(!(mod->flags&FLAG_INTERFACE) && !extends) { if(!(mod->flags&FLAG_INTERFACE) && !extends) { // all classes extend object extends = registry_getobjectclass(); } /* create the class name, together with the proper attributes */ int access=0; char*package=0; if(!(mod->flags&FLAG_PUBLIC) && state->package==internal_filename_package) { access = ACCESS_PRIVATE; package = internal_filename_package; } else if(!(mod->flags&FLAG_PUBLIC) && state->package!=internal_filename_package) { access = ACCESS_PACKAGEINTERNAL; package = state->package; } else if(state->package!=internal_filename_package) { access = ACCESS_PACKAGE; package = state->package; } else { syntaxerror("public classes only allowed inside a package"); } if(as3_pass==1) { state->cls = rfx_calloc(sizeof(classstate_t)); state->cls->init = methodstate_new(); state->cls->static_init = methodstate_new(); state->cls->static_init->is_static=FLAG_STATIC; /* notice: we make no effort to initialize the top variable (local0) here, even though it has special meaning. We just rely on the fact that pass 1 won't do anything with variables */ dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->cls); /* set current method to constructor- all code within the class-level (except static variable initializations) will be executed during construction time */ state->method = state->cls->init; if(registry_find(package, classname)) { syntaxerror("Package \"%s\" already contains a class called \"%s\"", package, classname); } /* build info struct */ int num_interfaces = (list_length(implements)); state->cls->info = classinfo_register(access, package, classname, num_interfaces); state->cls->info->flags |= mod->flags & (FLAG_DYNAMIC|FLAG_INTERFACE|FLAG_FINAL); state->cls->info->superclass = extends; int pos = 0; classinfo_list_t*l = implements; for(l=implements;l;l=l->next) { state->cls->info->interfaces[pos++] = l->classinfo; } } if(as3_pass == 2) { state->cls = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount); as3_assert(state->cls && state->cls->info); state->method = state->cls->static_init; function_initvars(state->cls->init, 0, 0, 0, 1); state->cls->static_init->variable_count=1; function_initvars(state->cls->static_init, 0, 0, 0, 0); if(extends && (extends->flags & FLAG_FINAL)) syntaxerror("Can't extend final class '%s'", extends->name); int pos = 0; while(state->cls->info->interfaces[pos]) { if(!(state->cls->info->interfaces[pos]->flags & FLAG_INTERFACE)) syntaxerror("'%s' is not an interface", state->cls->info->interfaces[pos]->name); pos++; } /* generate the abc code for this class */ MULTINAME(classname2,state->cls->info); multiname_t*extends2 = sig2mname(extends); /* don't add the class to the class index just yet- that will be done later by initscript */ state->cls->abc = abc_class_new(0, &classname2, extends2); state->cls->abc->file = global->file; multiname_destroy(extends2); if(state->cls->info->flags&FLAG_FINAL) abc_class_final(state->cls->abc); if(!(state->cls->info->flags&FLAG_DYNAMIC)) abc_class_sealed(state->cls->abc); if(state->cls->info->flags&FLAG_INTERFACE) { abc_class_interface(state->cls->abc); } for(mlist=implements;mlist;mlist=mlist->next) { MULTINAME(m, mlist->classinfo); abc_class_add_interface(state->cls->abc, &m); } state->cls->dependencies = parsedclass_new(state->cls->info, state->cls->abc); list_append(global->classes, state->cls->dependencies); /* flash.display.MovieClip handling */ if(!as3_globalclass && (mod->flags&FLAG_PUBLIC) && slotinfo_equals((slotinfo_t*)registry_getMovieClip(),(slotinfo_t*)extends)) { if(state->package && state->package[0]) { as3_globalclass = concat3(state->package, ".", classname); } else { as3_globalclass = strdup(classname); } } } } void endclass() { if(as3_pass == 2) { if(!state->cls->has_constructor && !(state->cls->info->flags&FLAG_INTERFACE)) { code_t*c = 0; c = abc_getlocal_0(c); c = abc_constructsuper(c, 0); state->cls->init->header = code_append(state->cls->init->header, c); state->cls->has_constructor=1; } if(state->cls->init) { if(state->cls->info->flags&FLAG_INTERFACE) { if(state->cls->init->header) syntaxerror("interface can not have class-level code"); } else { abc_method_t*m = abc_class_getconstructor(state->cls->abc, 0); code_t*c = method_header(state->cls->init); m->body->code = wrap_function(c, 0, m->body->code); } } if(state->cls->static_init) { abc_method_t*m = abc_class_getstaticconstructor(state->cls->abc, 0); code_t*c = method_header(state->cls->static_init); m->body->code = wrap_function(c, 0, m->body->code); } trait_list_t*trait = state->cls->abc->traits; /* switch all protected members to the protected ns of this class */ while(trait) { trait_t*t = trait->trait; if(t->name->ns->access == ACCESS_PROTECTED) { if(!state->cls->abc->protectedNS) { char*n = concat3(state->cls->info->package, ":", state->cls->info->name); state->cls->abc->protectedNS = namespace_new_protected(n); state->cls->abc->flags |= CLASS_PROTECTED_NS; } t->name->ns->name = strdup(state->cls->abc->protectedNS->name); } trait = trait->next; } } old_state(); } void check_code_for_break(code_t*c) { while(c) { if(c->opcode == OPCODE___BREAK__) { char*name = string_cstr(c->data[0]); syntaxerror("Unresolved \"break %s\"", name); } if(c->opcode == OPCODE___CONTINUE__) { char*name = string_cstr(c->data[0]); syntaxerror("Unresolved \"continue %s\"", name); } if(c->opcode == OPCODE___RETHROW__) { syntaxerror("Unresolved \"rethrow\""); } if(c->opcode == OPCODE___FALLTHROUGH__) { syntaxerror("Unresolved \"fallthrough\""); } if(c->opcode == OPCODE___PUSHPACKAGE__) { char*name = string_cstr(c->data[0]); syntaxerror("Can't reference a package (%s) as such", name); } c=c->prev; } } void check_constant_against_type(classinfo_t*t, constant_t*c) { #define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name) if(TYPE_IS_NUMBER(t)) { xassert(c->type == CONSTANT_FLOAT || c->type == CONSTANT_INT || c->type == CONSTANT_UINT); } else if(TYPE_IS_UINT(t)) { xassert(c->type == CONSTANT_UINT || (c->type == CONSTANT_INT && c->i>=0)); } else if(TYPE_IS_INT(t)) { xassert(c->type == CONSTANT_INT); } else if(TYPE_IS_BOOLEAN(t)) { xassert(c->type == CONSTANT_TRUE || c->type == CONSTANT_FALSE); } } void check_override(memberinfo_t*m, int flags) { if(!m) return; if(m->parent == state->cls->info && !((flags^m->flags)&FLAG_STATIC)) syntaxerror("class '%s' already contains a method/slot '%s'", m->parent->name, m->name); if(!m->parent) syntaxerror("internal error: overriding method %s, which doesn't have parent", m->name); if(m->access==ACCESS_PRIVATE) return; if(m->flags & FLAG_FINAL) syntaxerror("can't override final member %s", m->name); /* allow this. it's no issue. if((m->flags & FLAG_STATIC) && !(flags&FLAG_STATIC)) syntaxerror("can't override static member %s", m->name);*/ if(!(m->flags & FLAG_STATIC) && (flags&FLAG_STATIC)) syntaxerror("can't override non-static member %s with static declaration", m->name); if(!(flags&FLAG_OVERRIDE) && !(flags&FLAG_STATIC) && !(m->flags&FLAG_STATIC)) { if(m->parent && !(m->parent->flags&FLAG_INTERFACE)) { if(m->kind == INFOTYPE_METHOD) syntaxerror("can't override without explicit 'override' declaration"); else syntaxerror("can't override '%s'", m->name); } } } methodinfo_t*registerfunction(enum yytokentype getset, modifiers_t*mod, char*name, params_t*params, classinfo_t*return_type, int slot) { methodinfo_t*minfo = 0; namespace_t ns = modifiers2access(mod); if(!state->cls) { //package method minfo = methodinfo_register_global(ns.access, state->package, name); minfo->return_type = return_type; } else if(getset != KW_GET && getset != KW_SET) { //class method memberinfo_t* m = registry_findmember(state->cls->info, ns.name, name, 0, mod->flags&FLAG_STATIC); if(m) { syntaxerror("class already contains a %s '%s'", infotypename((slotinfo_t*)m), m->name); } minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name, mod->flags&FLAG_STATIC); minfo->return_type = return_type; // getslot on a member slot only returns "undefined", so no need // to actually store these //state->minfo->slot = state->method->abc->method->trait->slot_id; } else { //class getter/setter int gs = getset==KW_GET?SUBTYPE_GET:SUBTYPE_SET; classinfo_t*type=0; if(getset == KW_GET) { type = return_type; } else if(params->list && params->list->param && !params->list->next) { type = params->list->param->type; } else syntaxerror("setter function needs to take exactly one argument"); // not sure wether to look into superclasses here, too minfo = (methodinfo_t*)registry_findmember(state->cls->info, ns.name, name, 1, mod->flags&FLAG_STATIC); if(minfo) { if(minfo->kind!=INFOTYPE_VAR) syntaxerror("class already contains a method called '%s'", name); if(!(minfo->subtype & (SUBTYPE_GETSET))) syntaxerror("class already contains a field called '%s'", name); if(minfo->subtype & gs) syntaxerror("getter/setter for '%s' already defined", name); /* make a setter or getter into a getset */ minfo->subtype |= gs; /* FIXME: this check needs to be done in pass 2 if((!minfo->return_type != !type) || (minfo->return_type && type && !strcmp(minfo->return_type->name, type->name))) { syntaxerror("different type in getter and setter: %s and %s", minfo->return_type?minfo->return_type->name:"*", type?type->name:"*"); }*/ } else { minfo = methodinfo_register_onclass(state->cls->info, ns.access, ns.name, name, mod->flags&FLAG_STATIC); minfo->kind = INFOTYPE_VAR; //hack minfo->subtype = gs; minfo->return_type = type; } /* can't assign a slot as getter and setter might have different slots */ //minfo->slot = slot; } if(mod->flags&FLAG_FINAL) minfo->flags |= FLAG_FINAL; if(mod->flags&FLAG_STATIC) minfo->flags |= FLAG_STATIC; if(mod->flags&FLAG_OVERRIDE) minfo->flags |= FLAG_OVERRIDE; return minfo; } void innerfunction(char*name, params_t*params, classinfo_t*return_type) { //as3_assert(state->method && state->method->info); methodstate_t*parent_method = state->method; variable_t*v = 0; if(as3_pass==1) { return_type = 0; // not valid in pass 1 if(name) { v = new_variable2(parent_method, name, 0, 0, 0); } } new_state(); state->new_vars = 1; if(as3_pass == 1) { state->method = methodstate_new(); state->method->inner = 1; state->method->is_static = parent_method->is_static; state->method->variable_count = 0; state->method->abc = rfx_calloc(sizeof(abc_method_t)); if(v) { v->is_inner_method = state->method; } NEW(methodinfo_t,minfo); minfo->kind = INFOTYPE_METHOD; minfo->access = ACCESS_PACKAGEINTERNAL; minfo->name = name; state->method->info = minfo; if(parent_method) list_append(parent_method->innerfunctions, state->method); dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method); function_initvars(state->method, 1, params, 0, 1); } if(as3_pass == 2) { state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount); state->method->variable_count = 0; as3_assert(state->method); state->method->info->return_type = return_type; function_initvars(state->method, 1, params, 0, 1); } } void startfunction(modifiers_t*mod, enum yytokentype getset, char*name, params_t*params, classinfo_t*return_type) { if(state->method && state->method->info) { syntaxerror("not able to start another method scope"); } new_state(); state->new_vars = 1; if(as3_pass == 1) { state->method = methodstate_new(); state->method->has_super = 0; state->method->is_static = mod->flags&FLAG_STATIC; if(state->cls) { state->method->is_constructor = !strcmp(state->cls->info->name,name); } else { state->method->is_global = 1; state->method->late_binding = 1; // for global methods, always push local_0 on the scope stack } if(state->method->is_constructor) name = "__as3_constructor__"; state->method->info = registerfunction(getset, mod, name, params, return_type, 0); function_initvars(state->method, 1, params, mod->flags, 1); dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, state->method); } if(as3_pass == 2) { state->method = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount); if(!state->method->no_variable_scoping) state->method->variable_count = 0; as3_assert(state->method); if(state->cls) { memberinfo_t*m = registry_findmember(state->cls->info, mod->ns, name, 2, mod->flags&FLAG_STATIC); check_override(m, mod->flags); } if(state->cls) { state->cls->has_constructor |= state->method->is_constructor; } function_initvars(state->method, 1, params, mod->flags, 1); } } void insert_unresolved(methodstate_t*m, dict_t*xvars, dict_t*allvars) { as3_assert(m->inner); if(m->unresolved_variables) { dict_t*d = m->unresolved_variables; int t; DICT_ITERATE_KEY(d, char*, id) { /* check parent method's variables */ variable_t*v; if(dict_contains(allvars, id)) { m->uses_parent_function = 1; state->method->uses_slots = 1; dict_put(xvars, id, 0); } } } methodstate_list_t*ml = m->innerfunctions; while(ml) { insert_unresolved(ml->methodstate, xvars, allvars); ml = ml->next; } } abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*name, params_t*params, classinfo_t*return_type, code_t*body) { if(as3_pass==1) { dict_t*xvars = dict_new(); if(state->method->unresolved_variables) { DICT_ITERATE_KEY(state->method->unresolved_variables, char*, vname) { if(!state->method->no_variable_scoping && dict_contains(state->method->allvars, vname)) { variable_t*v = dict_lookup(state->method->allvars, vname); if(!v->is_inner_method) { state->method->no_variable_scoping = 1; as3_warning("function %s uses forward or outer block variable references (%s): switching into compatibility mode", name, vname); } } } } methodstate_list_t*ml = state->method->innerfunctions; while(ml) { insert_unresolved(ml->methodstate, xvars, state->method->allvars); ml = ml->next; } if(state->method->uses_slots) { state->method->slots = dict_new(); int i = 1; DICT_ITERATE_ITEMS(state->method->allvars, char*, name, variable_t*, v) { if(!name) syntaxerror("internal error"); if(v->index && dict_contains(xvars, name)) { v->init = v->kill = 0; v->index = i; if(v->is_inner_method) { v->is_inner_method->is_a_slot = i; } i++; dict_put(state->method->slots, name, v); } } state->method->uses_slots = i; dict_destroy(state->vars);state->vars = 0; as3_assert(state->new_vars); } old_state(); return 0; } if(as3_pass==2) { /*if(state->method->uses_parent_function){ syntaxerror("accessing variables of parent function from inner functions not supported yet"); }*/ abc_method_t*f = 0; multiname_t*type2 = sig2mname(return_type); int slot = 0; if(state->method->inner) { f = state->method->abc; abc_method_init(f, global->file, type2, 1); } else if(state->method->is_constructor) { f = abc_class_getconstructor(state->cls->abc, type2); } else if(!state->method->is_global) { namespace_t ns = modifiers2access(mod); multiname_t mname = {QNAME, &ns, 0, name}; if(mod->flags&FLAG_STATIC) f = abc_class_staticmethod(state->cls->abc, type2, &mname); else f = abc_class_method(state->cls->abc, type2, &mname); slot = f->trait->slot_id; } else { namespace_t mname_ns = {state->method->info->access, state->package}; multiname_t mname = {QNAME, &mname_ns, 0, name}; f = abc_method_new(global->file, type2, 1); if(!global->init) global->init = abc_initscript(global->file); trait_t*t = trait_new_method(&global->init->traits, multiname_clone(&mname), f); //abc_code_t*c = global->init->method->body->code; } //flash doesn't seem to allow us to access function slots //state->method->info->slot = slot; if(mod && mod->flags&FLAG_OVERRIDE) f->trait->attributes |= TRAIT_ATTR_OVERRIDE; if(getset == KW_GET) f->trait->kind = TRAIT_GETTER; if(getset == KW_SET) f->trait->kind = TRAIT_SETTER; if(params->varargs) f->flags |= METHOD_NEED_REST; if(state->method->need_arguments) f->flags |= METHOD_NEED_ARGUMENTS; char opt=0; param_list_t*p=0; for(p=params->list;p;p=p->next) { if(params->varargs && !p->next) { break; //varargs: omit last parameter in function signature } multiname_t*m = sig2mname(p->param->type); list_append(f->parameters, m); if(p->param->value) { check_constant_against_type(p->param->type, p->param->value); opt=1;list_append(f->optional_parameters, p->param->value); } else if(opt) { syntaxerror("function %s: non-optional parameter not allowed after optional parameters", name); } } if(state->method->slots) { DICT_ITERATE_ITEMS(state->method->slots, char*, name, variable_t*, v) { if(v->index) { multiname_t*mname = multiname_new(namespace_new(ACCESS_PACKAGE, ""), name); multiname_t*type = sig2mname(v->type); trait_t*t = trait_new_member(&f->body->traits, type, mname, 0); t->slot_id = v->index; } } } check_code_for_break(body); /* Seems this works now. if(state->method->exceptions && state->method->uses_slots) { as3_warning("try/catch and activation not supported yet within the same method"); }*/ if(f->body) { f->body->code = body; f->body->exceptions = state->method->exceptions; } else { //interface if(body) syntaxerror("interface methods can't have a method body"); } old_state(); return f; } return 0; } void breakjumpsto(code_t*c, char*name, code_t*jump) { while(c) { if(c->opcode == OPCODE___BREAK__) { string_t*name2 = c->data[0]; if(!name2->len || !strncmp(name2->str, name, name2->len)) { c->opcode = OPCODE_JUMP; c->branch = jump; } } c=c->prev; } } void continuejumpsto(code_t*c, char*name, code_t*jump) { while(c) { if(c->opcode == OPCODE___CONTINUE__) { string_t*name2 = c->data[0]; if(!name2->len || !strncmp(name2->str, name, name2->len)) { c->opcode = OPCODE_JUMP; c->branch = jump; } } c = c->prev; } } code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to) { if(from==to) return c; if(!to) { return abc_coerce_a(c); } MULTINAME(m, to); if(!from) { // cast an "any" type to a specific type. subject to // runtime exceptions return abc_coerce2(c, &m); } if((TYPE_IS_NUMBER(from) || TYPE_IS_UINT(from) || TYPE_IS_INT(from)) && (TYPE_IS_NUMBER(to) || TYPE_IS_UINT(to) || TYPE_IS_INT(to))) { // allow conversion between number types if(TYPE_IS_UINT(to)) return abc_convert_u(c); else if(TYPE_IS_INT(to)) return abc_convert_i(c); else if(TYPE_IS_NUMBER(to)) return abc_convert_d(c); return abc_coerce2(c, &m); } /* allow conversion from string to number */ if(TYPE_IS_STRING(from) && TYPE_IS_NUMBER(to)) { return abc_convert_d(c); } if(TYPE_IS_XMLLIST(to) && TYPE_IS_XML(from)) return c; if(TYPE_IS_BOOLEAN(to)) return abc_convert_b(c); if(TYPE_IS_STRING(to)) return abc_convert_s(c); if(TYPE_IS_OBJECT(to)) return abc_coerce2(c, &m); if(TYPE_IS_OBJECT(from) && TYPE_IS_XMLLIST(to)) return abc_coerce2(c, &m); if(TYPE_IS_OBJECT(from) && TYPE_IS_ARRAY(to)) return abc_coerce2(c, &m); classinfo_t*supertype = from; while(supertype) { if(supertype == to) { /* target type is one of from's superclasses. (not sure we need this coerce - as far as the verifier is concerned, object==object (i think) */ return abc_coerce2(c, &m); } int t=0; while(supertype->interfaces[t]) { if(supertype->interfaces[t]==to) { // target type is one of from's interfaces return abc_coerce2(c, &m); } t++; } supertype = supertype->superclass; } if(TYPE_IS_FUNCTION(from) && TYPE_IS_FUNCTION(to)) return c; if(TYPE_IS_CLASS(from) && TYPE_IS_CLASS(to)) return c; if(TYPE_IS_NULL(from) && !IS_NUMBER_OR_INT(to)) return c; as3_error("can't convert type %s%s%s to %s%s%s", from->package, from->package[0]?".":"", from->name, to->package, to->package[0]?".":"", to->name); return c; } code_t* coerce_to_type(code_t*c, classinfo_t*t) { if(!t) { return abc_coerce_a(c); } else if(TYPE_IS_STRING(t)) { return abc_coerce_s(c); } else { MULTINAME(m, t); return abc_coerce2(c, &m); } } char is_pushundefined(code_t*c) { return (c && !c->prev && !c->next && c->opcode == OPCODE_PUSHUNDEFINED); } const char* get_package_from_name(const char*name) { /* try explicit imports */ dictentry_t* e = dict_get_slot(state->imports, name); while(e) { if(!strcmp(e->key, name)) { slotinfo_t*c = (slotinfo_t*)e->data; if(c) return c->package; } e = e->next; } return 0; } namespace_list_t*get_current_imports() { namespace_list_t*searchlist = 0; list_append(searchlist, namespace_new_package(state->package)); import_list_t*l = state->wildcard_imports; while(l) { namespace_t*ns = namespace_new_package(l->import->package); list_append(searchlist, ns); l = l->next; } list_append(searchlist, namespace_new_package("")); list_append(searchlist, namespace_new_package(internal_filename_package)); return searchlist; } slotinfo_t* find_class(const char*name) { slotinfo_t*c=0; c = registry_find(state->package, name); if(c) return c; /* try explicit imports */ dictentry_t* e = dict_get_slot(state->imports, name); if(c) return c; while(e) { if(!strcmp(e->key, name)) { c = (slotinfo_t*)e->data; if(c) return c; } e = e->next; } /* try package.* imports */ import_list_t*l = state->wildcard_imports; while(l) { //printf("does package %s contain a class %s?\n", l->import->package, name); c = registry_find(l->import->package, name); if(c) return c; l = l->next; } /* try global package */ c = registry_find("", name); if(c) return c; /* try local "filename" package */ c = registry_find(internal_filename_package, name); if(c) return c; return 0; } typedcode_t push_class(slotinfo_t*a) { typedcode_t x; x.c = 0; x.t = 0; if(a->access == ACCESS_PACKAGEINTERNAL && strcmp(a->package, state->package) && strcmp(a->package, internal_filename_package) ) { syntaxerror("Can't access internal %s %s in package '%s' from package '%s'", infotypename(a), a->name, a->package, state->package); } if(a->kind != INFOTYPE_CLASS) { MULTINAME(m, a); x.c = abc_findpropstrict2(x.c, &m); x.c = abc_getproperty2(x.c, &m); if(a->kind == INFOTYPE_METHOD) { methodinfo_t*f = (methodinfo_t*)a; x.t = TYPE_FUNCTION(f); } else { varinfo_t*v = (varinfo_t*)a; x.t = v->type; } return x; } else { if(state->cls && state->method == state->cls->static_init) { /* we're in the static initializer. record the fact that we're using this class here */ parsedclass_add_dependency(state->cls->dependencies, (classinfo_t*)a); } classinfo_t*c = (classinfo_t*)a; //if(c->slot) { if(0) { //Error #1026: Slot 1 exceeds slotCount=0 of global x.c = abc_getglobalscope(x.c); x.c = abc_getslot(x.c, c->slot); } else { MULTINAME(m, c); x.c = abc_getlex2(x.c, &m); } x.t = TYPE_CLASS(c); } return x; } char is_break_or_jump(code_t*c) { if(!c) return 0; if(c->opcode == OPCODE_JUMP || c->opcode == OPCODE___BREAK__ || c->opcode == OPCODE___CONTINUE__ || c->opcode == OPCODE_THROW || c->opcode == OPCODE_RETURNVOID || c->opcode == OPCODE_RETURNVALUE) { return 1; } return 0; } #define IS_FINALLY_TARGET(op) \ ((op) == OPCODE___CONTINUE__ || \ (op) == OPCODE___BREAK__ || \ (op) == OPCODE_RETURNVOID || \ (op) == OPCODE_RETURNVALUE || \ (op) == OPCODE___RETHROW__) static code_t* insert_finally_lookup(code_t*c, code_t*finally, int tempvar) { #define NEED_EXTRA_STACK_ARG code_t*finally_label = abc_nop(0); NEW(lookupswitch_t, l); //_lookupswitch code_t*i = c; int count=0; while(i) { code_t*prev = i->prev; if(IS_FINALLY_TARGET(i->opcode)) { code_t*p = prev; char needvalue=0; if(i->opcode == OPCODE___RETHROW__ || i->opcode == OPCODE_RETURNVALUE) { if(i->opcode == OPCODE___RETHROW__) i->opcode = OPCODE_THROW; needvalue=1; p = abc_coerce_a(p); p = abc_setlocal(p, tempvar); } p = abc_pushbyte(p, count++); p = abc_jump(p, finally_label); code_t*target = p = abc_label(p); #ifdef NEED_EXTRA_STACK_ARG p = abc_pop(p); #endif if(needvalue) { p = abc_getlocal(p, tempvar); } p->next = i;i->prev = p; list_append(l->targets, target); } i = prev; } code_t*j,*f; c = abc_pushbyte(c, -1); c = code_append(c, finally_label); c = code_append(c, finally); #ifdef NEED_EXTRA_STACK_ARG c = abc_dup(c); #endif c = abc_lookupswitch(c, l); c = l->def = abc_label(c); #ifdef NEED_EXTRA_STACK_ARG c = abc_pop(c); #endif return c; } static code_t* insert_finally_simple(code_t*c, code_t*finally, int tempvar) { code_t*i = c; while(i) { code_t*prev = i->prev; if(IS_FINALLY_TARGET(i->opcode)) { if(i->opcode == OPCODE___RETHROW__) i->opcode = OPCODE_THROW; code_t*end = code_dup(finally); code_t*start = code_start(end); if(prev) prev->next = start; start->prev = prev; i->prev = end; end->next = i; } i = prev; } return code_append(c, finally); } code_t* insert_finally(code_t*c, code_t*finally, int tempvar) { if(!finally) return c; code_t*i = c; char cantdup=0; int num_insertion_points=0; while(i) { if(IS_FINALLY_TARGET(i->opcode)) num_insertion_points++; i = i->prev; } i = finally; int code_size=0; while(i) { code_size++; if(i->branch || i->opcode == OPCODE_LOOKUPSWITCH) { cantdup=1; } i = i->prev; } int simple_version_cost = (1+num_insertion_points)*code_size; int lookup_version_cost = 4*num_insertion_points + 5; if(cantdup || simple_version_cost > lookup_version_cost) { //printf("(use lookup) simple=%d > lookup=%d\n", simple_version_cost, lookup_version_cost); return insert_finally_lookup(c, finally, tempvar); } else { //printf("(use simple) simple=%d < lookup=%d\n", simple_version_cost, lookup_version_cost); return insert_finally_simple(c, finally, tempvar); } } swftools_0.9.2+git20130725.orig/lib/as3/code.h0000644000175000017500000000504212216332640017643 0ustar gawaingawain/* code.h Routines for handling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __abc_code_h__ #define __abc_code_h__ #include "../q.h" DECLARE(code); DECLARE_LIST(code); DECLARE(codestats); DECLARE(codelookup); DECLARE(lookupswitch); #include "abc.h" typedef struct _opcode { unsigned char opcode; char*name; char*params; int stack_minus; int stack_plus; int scope_stack_plus; int flags; } opcode_t; struct _code { void*data[2]; code_t*next; code_t*prev; code_t*branch; int pos; //used during code path evaluation U8 opcode; }; struct _lookupswitch { code_t*def; code_list_t*targets; }; #define FLAGS_ACTIVATION 0x02 #define FLAGS_SET_DXNS 0x40 struct _codestats { int max_stack; int local_count; int max_scope_depth; int flags; }; struct _codelookup { code_t**bytepos; int len; }; code_t*code_dup(code_t*c); code_t*add_opcode(code_t*atag, U8 op); code_t*code_parse(TAG*tag, int len, abc_file_t*file, pool_t*pool, codelookup_t**codelookup); int code_dump(code_t*c); int code_dump2(code_t*c, abc_exception_list_t*exceptions, abc_file_t*file, char*prefix, FILE*fo); void code_write(TAG*tag, code_t*code, pool_t*pool, abc_file_t*file); void code_free(code_t*c); code_t* code_atposition(codelookup_t*l, int pos); void codelookup_free(codelookup_t*codelookup); code_t*code_cutlast(code_t*c); codestats_t* code_get_statistics(code_t*code, abc_exception_list_t*exceptions); void codestats_print(codestats_t*s); void codestats_free(codestats_t*s); code_t* code_start(code_t*c); code_t* code_append(code_t*code, code_t*toappend); code_t* cut_last_push(code_t*_c); char is_getlocal(code_t*c); #define code_new() (0) #endif swftools_0.9.2+git20130725.orig/lib/as3/initcode.c0000644000175000017500000001762412216332640020533 0ustar gawaingawain/* initcode.c Routines for handling/compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #include #include "../q.h" #include "abc.h" #include "code.h" #include "common.h" #include "registry.h" #include "initcode.h" int compare_parsedclass(const void *_v1, const void *_v2) { parsedclass_t*p1 = *(parsedclass_t**)_v1; parsedclass_t*p2 = *(parsedclass_t**)_v2; if((p1->cls->flags^p2->cls->flags)&FLAG_INTERFACE) { return (int)(p2->cls->flags&FLAG_INTERFACE) - (int)(p1->cls->flags&FLAG_INTERFACE); } classinfo_t*c2 = dict_lookup(&p1->parents, p2); classinfo_t*c1 = dict_lookup(&p2->parents, p1); assert(!c1 || !c2); // otherwise we would have a loop assert(!c1 || c1==p1->cls); assert(!c2 || c2==p2->cls); if(c1) { return -1; } if(c2) { return 1; } c2 = dict_lookup(&p1->usedclasses_deep, p2); c1 = dict_lookup(&p2->usedclasses_deep, p1); assert(!c1 || !c2); assert(!c1 || c1==p1->cls); assert(!c2 || c2==p2->cls); if(c1) { return -1; } if(c2) { return 1; } return 0; } static void add_parent(parsedclass_t*p, classinfo_t*c, dict_t*s2p, char soft) { dict_t*parents = soft?(&p->usedclasses_deep):(&p->parents); int t; if(dict_contains(parents, p)) { if(soft) { as3_warning("circular reference: class %s references self (through static code)", p->cls->name); return; } else { syntaxerror("circular reference: class %s references self", p->cls->name); } } if(c) { parsedclass_t*n = dict_lookup(s2p, c); if(n && !dict_contains(parents, n)) { assert(n->cls == c); dict_put(parents, n, c); } } else { c = p->cls; } if(soft && dict_contains(s2p, c)) { parsedclass_t*pp = dict_lookup(s2p, c); DICT_ITERATE_KEY(&pp->usedclasses, classinfo_t*, cc) { add_parent(p, cc, s2p, soft); } } if(c->superclass) { add_parent(p, c->superclass, s2p, soft); } for(t=0;c->interfaces[t];t++) { add_parent(p, c->interfaces[t], s2p, soft); } } parsedclass_t* parsedclass_new(classinfo_t*cls, abc_class_t*abc) { NEW(parsedclass_t,p); p->cls = cls; p->abc = abc; dict_init2(&p->parents, &ptr_type, 1); dict_init2(&p->usedclasses, &ptr_type, 1); dict_init2(&p->usedclasses_deep, &ptr_type, 1); return p; } /* sort classes so that (a) interfaces appear before classes (b) base classes always appear before their subclasses (c) classes appear after the classes they use in static code */ parsedclass_t** initcode_sort_classlist(parsedclass_list_t*classes) { dict_t* s2p = dict_new2(&ptr_type); /* create hash tables */ int count = 0; parsedclass_list_t*l; for(l=classes;l;l=l->next) { dict_put(s2p, l->parsedclass->cls, l->parsedclass); count++; } for(l=classes;l;l=l->next) { add_parent(l->parsedclass, 0, s2p, 0); DICT_ITERATE_KEY(&l->parsedclass->usedclasses, classinfo_t*, c) { add_parent(l->parsedclass, c, s2p, 1); } } parsedclass_t**list = malloc(sizeof(parsedclass_t*)*count); /* build an array for each class */ int i = 0; for(l=classes;l;l=l->next) { list[i++] = l->parsedclass; } /* sort and flatten. We unfortunately need to do insertion sort O(n^2) as our dependencies are only partially ordered */ int j; for(i=0;i0) { parsedclass_t*p1 = list[i]; parsedclass_t*p2 = list[j]; list[i] = p2; list[j] = p1; } } } parsedclass_t**list2 = malloc(sizeof(parsedclass_t*)*(count+1)); for(i=0;icls->name); if(p->cls->superclass) printf(" extends %s\n", p->cls->superclass->name); int t; for(t=0;p->cls->interfaces[t];t++) printf(" interface %s\n", p->cls->interfaces[t]->name); DICT_ITERATE_KEY(&p->usedclasses, classinfo_t*, c) { printf(" uses %s\n", c->name); } DICT_ITERATE_KEY(&p->parents, parsedclass_t*, pp) { printf(" depends on (deep) %s\n", pp->cls->name); } DICT_ITERATE_KEY(&p->usedclasses_deep, parsedclass_t*, px) { printf(" uses (deep) %s\n", px->cls->name); } printf("\n"); #endif } list2[count]=0; free(list); dict_destroy(s2p); return list2; } void parsedclass_add_dependency(parsedclass_t*p, classinfo_t*c) { if(!dict_contains(&p->usedclasses, c)) { dict_put(&p->usedclasses, c, c); } } void initcode_add_classlist(abc_script_t*init, parsedclass_list_t*_classes) { code_t*c = 0; c = abc_getlocal_0(c); c = abc_pushscope(c); parsedclass_t**classes = initcode_sort_classlist(_classes); int t; for(t=0;classes[t];t++) { abc_class_t*abc = classes[t]->abc; classinfo_t*cls = classes[t]->cls; array_append(init->file->classes, "", abc); /* write the construction code for this class to the global init function */ MULTINAME(classname2,cls); trait_t*trait = abc_initscript_addClassTrait(init, &classname2, abc); c = abc_getglobalscope(c); classinfo_t*s = cls->superclass; int count=0; while(s) { //TODO: take a look at the current scope stack, maybe // we can re-use something s = s->superclass; if(!s) break; multiname_t*s2 = sig2mname(s); c = abc_getlex2(c, s2); multiname_destroy(s2); c = abc_pushscope(c); count++; c = c->prev->prev; // invert } /* continue appending after last op end */ while(c && c->next) c = c->next; multiname_t*extends2 = sig2mname(cls->superclass); /* TODO: if this is one of *our* classes, we can also do a getglobalscope/getslot (which references the init function's slots) */ if(extends2) { c = abc_getlex2(c, extends2); c = abc_dup(c); /* notice: we get a Verify Error #1107 if the top elemnt on the scope stack is not the superclass */ c = abc_pushscope(c);count++; } else { c = abc_pushnull(c); /* notice: we get a verify error #1107 if the top element on the scope stack is not the global object */ c = abc_getlocal_0(c); c = abc_pushscope(c);count++; } c = abc_newclass(c,abc); while(count--) { c = abc_popscope(c); } c = abc_setslot(c, trait->slot_id); multiname_destroy(extends2); } c = abc_returnvoid(c); free(classes); init->method->body->code = c; } swftools_0.9.2+git20130725.orig/lib/as3/pool.c0000644000175000017500000011744512216332640017710 0ustar gawaingawain/* pool.c Routines for handling Flash2 AVM2 ABC contantpool entries. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include "pool.h" // ----------------------------- float ---------------------------------- void* float_clone(const void*_v) { if(_v==0) return 0; const double*v1=_v; double*v2 = malloc(sizeof(double)); *v2 = *v1; return v2; } unsigned int float_hash(const void*_v) { if(!_v) return 0; const unsigned char*b=_v; unsigned int h=0; int t; for(t=0;t<8;t++) h = crc32_add_byte(h, b[t]); return h; } void float_destroy(void*_v) { double*v = (double*)_v; if(v) free(v); } char float_equals(const void*_v1, const void*_v2) { const double*v1=_v1; const double*v2=_v2; if(!v1 || !v2) return v1==v2; if(*v1==*v2) return 1; if(*v1!=*v1 && *v2!=*v2) return 1; //both values are NaN return 0; } type_t float_type = { dup: float_clone, hash: float_hash, free: float_destroy, equals: float_equals }; // ----------------------------- uint ---------------------------------- unsigned int undefined_uint = 0; void*uint_clone(const void*_v) { if(!_v) return 0; const unsigned int*v1=_v; unsigned int*v2 = malloc(sizeof(unsigned int)); *v2 = *v1; return v2; } unsigned int uint_hash(const void*_v) { if(!_v) return 0; const unsigned int*v=_v; return *v; } void uint_destroy(void*_v) { unsigned int*v = (unsigned int*)_v; if(v) free(v); } char uint_equals(const void*_v1, const void*_v2) { const unsigned int*v1=_v1; const unsigned int*v2=_v2; if(!v1 || !v2) return v1==v2; return *v1==*v2; } type_t uint_type = { dup: (dup_func)uint_clone, hash: (hash_func)uint_hash, free: (free_func)uint_destroy, equals: (equals_func)uint_equals }; // ----------------------------- namespace ---------------------------------- unsigned int namespace_hash(namespace_t*n) { if(!n) return 0; unsigned int hash = 0; hash = crc32_add_byte(hash, n->access); hash = crc32_add_string(hash, n->name); return hash; } unsigned char namespace_equals(const namespace_t*n1, const namespace_t*n2) { if(!n1 || !n2) return n1==n2; if(n1->access != n2->access) return 0; if(!(n1->name) != !(n2->name)) return 0; if(n1->name && n2->name && strcmp(n1->name, n2->name)) return 0; return 1; } char*escape_string(const char*str) { if(!str) return strdup("NULL"); int len=0; unsigned const char*s=(unsigned const char*)str; while(*s) { if(*s<10) { len+=2; // \d } else if(*s<32) { len+=3; // \dd } else if(*s<127) { len++; } else { len+=4; // \xhh } s++; } char*newstr = malloc(len+1); char*dest = newstr; s=(unsigned const char*)str; while(*s) { if(*s<9) { dest+=sprintf(dest, "\\%d", *s); } else if(*s<32) { if(*s==13) dest+=sprintf(dest, "\\r"); else if(*s==10) dest+=sprintf(dest, "\\n"); else if(*s==9) dest+=sprintf(dest, "\\t"); else dest+=sprintf(dest, "\\%2o", *s); } else if(*s<127) { *dest++=*s; } else { dest+=sprintf(dest, "\\x%02x", *s); } s++; } *dest = 0; return newstr; } char* namespace_tostring(namespace_t*ns) { if(!ns) return strdup("NULL"); char*access = 0; U8 type = ns->access; access = access2str(type); char*s = escape_string(ns->name); char*string = (char*)malloc(strlen(access)+strlen(s)+7); if(!s) sprintf(string, "[%s]NULL", access); else if(!*s) sprintf(string, "[%s]\"\"", access); else sprintf(string, "[%s]%s", access, s); free(s); return string; } namespace_t* namespace_clone(namespace_t*other) { if(!other) return 0; NEW(namespace_t,n); n->access = other->access; n->name = other->name?strdup(other->name):0; return n; } namespace_t* namespace_fromstring(const char*name) { namespace_t*ns = malloc(sizeof(namespace_t)); memset(ns, 0, sizeof(namespace_t)); if(name[0] == '[') { U8 access = 0; char*n = strdup(name); char*bracket = strchr(n, ']'); if(bracket) { *bracket = 0; char*a = n+1; name += (bracket-n)+1; if(!strcmp(a, "")) access=0x16; else if(!strcmp(a, "undefined")) access=0x08; // public?? else if(!strcmp(a, "package")) access=0x16; else if(!strcmp(a, "public")) access=0x16; else if(!strcmp(a, "packageinternal")) access=0x17; else if(!strcmp(a, "protected")) access=0x18; else if(!strcmp(a, "explicit")) access=0x19; else if(!strcmp(a, "staticprotected")) access=0x1a; else if(!strcmp(a, "private")) access=0x05; else { fprintf(stderr, "Undefined access level: [%s]\n", a); free(n); return 0; } } ns->access = access; ns->name = strdup(name); free(n); return ns; } else { ns->access = 0x16; ns->name = strdup(name); return ns; } } namespace_t* namespace_new(U8 access, const char*name) { namespace_t*ns = malloc(sizeof(namespace_t)); ns->access = access; /* not sure what namespaces with empty strings are good for, but they *do* exist */ ns->name = name?strdup(name):0; return ns; } namespace_t* namespace_new_namespace(const char*name) { return namespace_new(0x08, name); // public? } namespace_t* namespace_new_package(const char*name) { return namespace_new(0x16 , name); } namespace_t* namespace_new_packageinternal(const char*name) { return namespace_new(0x17, name); } namespace_t* namespace_new_protected(const char*name) { return namespace_new(0x18, name); } namespace_t* namespace_new_explicit(const char*name) { return namespace_new(0x19, name); } namespace_t* namespace_new_staticprotected(const char*name) { return namespace_new(0x1a, name); } namespace_t* namespace_new_private(const char*name) { return namespace_new(0x05, name); } void namespace_destroy(namespace_t*n) { if(n) { free((char*)n->name);n->name=0; n->access=0x00; free(n); } } type_t namespace_type = { dup: (dup_func)namespace_clone, hash: (hash_func)namespace_hash, free: (free_func)namespace_destroy, equals: (equals_func)namespace_equals }; // ---------------------------namespace sets -------------------------------- unsigned int namespace_set_hash(namespace_set_t*set) { if(!set) return 0; namespace_list_t*l = set->namespaces; unsigned int hash = 0; while(l) { hash = crc32_add_byte(hash, l->namespace->access); hash = crc32_add_string(hash, l->namespace->name); l = l->next; } return hash; } int namespace_set_equals(namespace_set_t*m1, namespace_set_t*m2) { if(!m1 || !m2) return m1==m2; namespace_list_t*l1 = m1->namespaces; namespace_list_t*l2 = m2->namespaces; while(l1 && l2) { if(l1->namespace->access != l2->namespace->access) return 0; if(!(l1->namespace->name) != !(l2->namespace->name)) return 0; if(l1->namespace->name && l2->namespace->name && strcmp(l1->namespace->name, l2->namespace->name)) return 0; l1 = l1->next; l2 = l2->next; } if(l1||l2) return 0; return 1; } namespace_set_t* namespace_set_clone(namespace_set_t*other) { if(!other) return 0; NEW(namespace_set_t,set); set->namespaces = list_new(); namespace_list_t*l = other->namespaces; while(l) { list_append(set->namespaces, namespace_clone(l->namespace)); l = l->next; } return set; } namespace_set_t* namespace_set_new() { NEW(namespace_set_t,set); set->namespaces = list_new(); return set; } char* namespace_set_tostring(namespace_set_t*set) { if(!set) return strdup("NULL"); /* TODO: is the order of the namespaces important (does it change the lookup order?). E.g. flex freely shuffles namespaces around. If the order is not important, we can optimize constant pools by sorting the namespaces. */ int l = 0; namespace_list_t*lns = set->namespaces; while(lns) { char*s = namespace_tostring(lns->namespace); l += strlen(s)+1; free(s); lns = lns->next; } char*desc = malloc(l+16); strcpy(desc, "{"); lns = set->namespaces; while(lns) { char*s = namespace_tostring(lns->namespace); strcat(desc, s); free(s); lns = lns->next; if(lns) strcat(desc, ","); } strcat(desc, "}"); return desc; } void namespace_set_destroy(namespace_set_t*set) { if(set) { namespace_list_t*l = set->namespaces; while(l) { namespace_destroy(l->namespace);l->namespace=0; l = l->next; } list_free(set->namespaces); free(set); } } type_t namespace_set_type = { dup: (dup_func)namespace_set_clone, hash: (hash_func)namespace_set_hash, free: (free_func)namespace_set_destroy, equals: (equals_func)namespace_set_equals }; // ----------------------------- multiname ---------------------------------- unsigned int multiname_hash(multiname_t*m) { if(!m) return 0; unsigned int hash = crc32_add_byte(0, m->type); if(m->name) { hash = crc32_add_string(hash, m->name); } if(m->ns) { hash = crc32_add_byte(hash, m->ns->access); hash = crc32_add_string(hash, m->ns->name); } if(m->namespace_set) { namespace_list_t*l = m->namespace_set->namespaces; while(l) { hash = crc32_add_byte(hash, l->namespace->access); hash = crc32_add_string(hash, l->namespace->name); l = l->next; } } return hash; } int multiname_equals(multiname_t*m1, multiname_t*m2) { if(!m1 || !m2) return m1==m2; if(m1->type!=m2->type) return 0; if((!m1->name) != (!m2->name)) return 0; if((!m1->ns) != (!m2->ns)) return 0; if((!m1->namespace_set) != (!m2->namespace_set)) return 0; if(m1->name && m2->name && strcmp(m1->name,m2->name)) return 0; if(m1->ns && m2->ns) { if(!namespace_equals(m1->ns, m2->ns)) return 0; } if(m1->namespace_set && m2->namespace_set) { if(!namespace_set_equals(m1->namespace_set, m2->namespace_set)) return 0; } return 1; } multiname_t* multiname_new(namespace_t*ns, const char*name) { NEW(multiname_t,m); m->type = QNAME; if(!ns) { m->ns = namespace_new_packageinternal(""); } else { m->ns = namespace_clone(ns); } m->name = strdup(name); return m; } multiname_t* multiname_clone(multiname_t*other) { if(!other) return 0; NEW(multiname_t,m); m->type = other->type; if(other->ns) m->ns = namespace_clone(other->ns); if(other->namespace_set) m->namespace_set = namespace_set_clone(other->namespace_set); if(other->name) m->name = strdup(other->name); return m; } char* access2str(int type) { if(type==0x08) return "namespace"; else if(type==0x16) return "public"; else if(type==0x17) return "packageinternal"; else if(type==0x18) return "protected"; else if(type==0x19) return "explicit"; else if(type==0x1A) return "staticprotected"; else if(type==0x05) return "private"; else if(type==0x00) return "any"; else { fprintf(stderr, "Undefined access type %02x\n", type); return "undefined"; } } char multiname_late_namespace(multiname_t*m) { if(!m) return 0; return (m->type==RTQNAME || m->type==RTQNAMEA || m->type==RTQNAMEL || m->type==RTQNAMELA); } char multiname_late_name(multiname_t*m) { if(!m) return 0; return m->type==RTQNAMEL || m->type==RTQNAMELA || m->type==MULTINAMEL || m->type==MULTINAMELA; } char* multiname_tostring(multiname_t*m) { char*mname = 0; if(!m) return strdup("NULL"); if(m->type==0xff) return strdup("----"); char*name = m->name?escape_string(m->name):strdup("*"); int namelen = strlen(name); if(m->type==QNAME || m->type==QNAMEA || m->type==POSTFIXTYPE) { char*nsname = m->ns?escape_string(m->ns->name):strdup("NULL"); mname = malloc(strlen(nsname)+namelen+32); strcpy(mname, "type == QNAMEA) strcat(mname, ",attr"); strcat(mname, ">"); if(m->ns) { strcat(mname,"["); strcat(mname,access2str(m->ns->access)); strcat(mname, "]"); } strcat(mname, nsname); free(nsname); strcat(mname, "::"); strcat(mname, name); } else if(m->type==RTQNAME || m->type==RTQNAMEA) { mname = malloc(namelen+32); strcpy(mname, "type == RTQNAMEA) strcat(mname, ",attr"); strcat(mname, ">"); strcat(mname, name); } else if(m->type==RTQNAMEL) { mname = strdup(""); } else if(m->type==RTQNAMELA) { mname = strdup(""); } else if(m->type==MULTINAME || m->type==MULTINAMEA) { char*s = namespace_set_tostring(m->namespace_set); mname = malloc(strlen(s)+namelen+16); if(m->type == MULTINAME) strcpy(mname,""); else //MULTINAMEA strcpy(mname,""); strcat(mname, s); strcat(mname, "::"); strcat(mname, name); free(s); } else if(m->type==MULTINAMEL || m->type==MULTINAMELA) { char*s = namespace_set_tostring(m->namespace_set); mname = malloc(strlen(s)+16); if(m->type == MULTINAMEL) strcpy(mname,""); else //MULTINAMELA strcpy(mname,""); strcat(mname,s); free(s); } else { return strdup(""); } free(name); return mname; } multiname_t* multiname_fromstring(const char*name2) { if(!name2) return 0; char*n = strdup(name2); char*p = strstr(n, "::"); char*namespace=0,*name=0; if(!p) { if(strchr(n, ':')) { fprintf(stderr, "Error: single ':' in name\n"); } namespace = ""; name = n; } else { *p = 0; namespace = n; name = p+2; if(strchr(namespace, ':')) { fprintf(stderr, "Error: single ':' in namespace\n"); } if(strchr(name, ':')) { fprintf(stderr, "Error: single ':' in qualified name\n"); } } multiname_t*m = malloc(sizeof(multiname_t)); memset(m, 0, sizeof(multiname_t)); m->type = QNAME; m->namespace_set = 0; m->ns = namespace_fromstring(namespace); m->name = name?strdup(name):0; free(n); return m; } void multiname_destroy(multiname_t*m) { if(m) { if(m->name) { free((void*)m->name);m->name = 0; } if(m->ns) { namespace_destroy(m->ns);m->ns = 0; } if(m->namespace_set) { namespace_set_destroy(m->namespace_set);m->namespace_set = 0; } m->type=0; free(m); } } type_t multiname_type = { dup: (dup_func)multiname_clone, hash: (hash_func)multiname_hash, free: (free_func)multiname_destroy, equals: (equals_func)multiname_equals }; // ------------------------------- constants ------------------------------------- #define UNIQUE_CONSTANT(x) ((x) == CONSTANT_TRUE || (x) == CONSTANT_FALSE || (x) == CONSTANT_NULL || (x) == CONSTANT_UNDEFINED) constant_t* constant_new_int(int i) { NEW(constant_t,c); c->i = i; c->type = CONSTANT_INT; return c; } constant_t* constant_new_uint(unsigned int u) { NEW(constant_t,c); c->u = u; c->type = CONSTANT_UINT; return c; } constant_t* constant_new_float(double f) { NEW(constant_t,c); c->f = f; c->type = CONSTANT_FLOAT; return c; } constant_t* constant_new_string(const char*s) { NEW(constant_t,c); c->s = string_new4(s); c->type = CONSTANT_STRING; return c; } constant_t* constant_new_string2(const char*s, int len) { NEW(constant_t,c); c->s = string_new3(s, len); c->type = CONSTANT_STRING; return c; } constant_t* constant_new_namespace(namespace_t*ns) { NEW(constant_t,c); c->ns = namespace_clone(ns); c->type = ns->access; assert(NS_TYPE(c->type)); return c; } constant_t* constant_new_true() { NEW(constant_t,c); c->type = CONSTANT_TRUE; return c; } constant_t* constant_new_false() { NEW(constant_t,c); c->type = CONSTANT_FALSE; return c; } constant_t* constant_new_null() { NEW(constant_t,c); c->type = CONSTANT_NULL; return c; } constant_t* constant_new_undefined() { NEW(constant_t,c); c->type = CONSTANT_UNDEFINED; return c; } constant_t* constant_clone(constant_t*other) { if(!other) return 0; constant_t*c = malloc(sizeof(constant_t)); memcpy(c, other, sizeof(constant_t)); if(NS_TYPE(c->type)) { c->ns = namespace_clone(other->ns); } else if(c->type == CONSTANT_STRING) { c->s = string_dup3(other->s); } return c; } constant_t* constant_fromindex(pool_t*pool, int index, int type) { if(!index) { /* even for nonvalued constants (like TRUE/FALSE etc.), a nonzero index is present to indicate that a type is coming */ return 0; } NEW(constant_t,c); c->type = type; if(NS_TYPE(c->type)) { c->ns = namespace_clone(pool_lookup_namespace(pool, index)); } else if(c->type == CONSTANT_INT) { c->i = pool_lookup_int(pool, index); } else if(c->type == CONSTANT_UINT) { c->u = pool_lookup_uint(pool, index); } else if(c->type == CONSTANT_FLOAT) { c->f = pool_lookup_float(pool, index); } else if(c->type == CONSTANT_STRING) { string_t s = pool_lookup_string2(pool, index); c->s = string_dup3(&s); } else if(UNIQUE_CONSTANT(c->type)) { // ok } else { fprintf(stderr, "invalid constant type %02x\n", c->type); } return c; } char* constant_tostring(constant_t*c) { if(!c) return strdup("NULL"); char buf[32]; if(NS_TYPE(c->type)) { return namespace_tostring(c->ns); } else if(c->type == CONSTANT_INT) { sprintf(buf, "%d", c->i); return strdup(buf); } else if(c->type == CONSTANT_UINT) { sprintf(buf, "%u", c->u); return strdup(buf); } else if(c->type == CONSTANT_FLOAT) { char buf[1024]; sprintf(buf, "%f", c->f); return strdup(buf); } else if(c->type == CONSTANT_STRING) { /* should we escape the string? \0 bytes won't be printed */ return strdup_n(c->s->str,c->s->len); } else if(c->type == CONSTANT_TRUE) { return strdup("true"); } else if(c->type == CONSTANT_FALSE) { return strdup("false"); } else if(c->type == CONSTANT_NULL) { return strdup("null"); } else if(c->type == CONSTANT_UNDEFINED) { return strdup("undefined"); } else { fprintf(stderr, "invalid constant type %02x\n", c->type); return 0; } } char constant_has_index(constant_t*c) { if(!c) return 0; return !UNIQUE_CONSTANT(c->type); } int constant_get_index(pool_t*pool, constant_t*c) { if(!c) return 0; if(NS_TYPE(c->type)) { assert(c->ns); /*if(c->type!=c->ns->access) { printf("%02x<->%02x\n", c->type, c->ns->access); }*/ assert(c->type == c->ns->access); return pool_register_namespace(pool, c->ns); } else if(c->type == CONSTANT_INT) { return pool_register_int(pool, c->i); } else if(c->type == CONSTANT_UINT) { return pool_register_uint(pool, c->u); } else if(c->type == CONSTANT_FLOAT) { return pool_register_float(pool, c->f); } else if(c->type == CONSTANT_STRING) { return pool_register_string2(pool, c->s); } else if(c->type == CONSTANT_UNDEFINED) { /* write undefined with index 0 (and no type). Otherwise, the FlashPlayer seems to throw an "attempt to read out of bounds" exception */ return 0; } else if(!constant_has_index(c)) { return 1; } else { fprintf(stderr, "invalid constant type %02x\n", c->type); return 0; } } void constant_free(constant_t*c) { if(!c) return; if(c->type == CONSTANT_STRING) { string_free(c->s); } else if (NS_TYPE(c->type)) { namespace_destroy(c->ns);c->ns=0; } free(c); } // --------------------------- optimizing ----------------------------------- static int array_append_or_increase(array_t*array, void*key) { int pos = array_find(array, key); if(pos>=0) { array->d[pos].data++; return pos; } else { return array_append(array, key, 0); } } static int compare_arrayentry(const void*_c1, const void*_c2) { const array_entry_t*c1 = _c1; const array_entry_t*c2 = _c2; return c2->data - c1->data; } static void* nodup(const void*o) {return (void*)o;} static void reshuffle_array(array_t*array) { qsort(array->d+1, array->num-1, sizeof(array->d[0]), compare_arrayentry); type_t* old_type = array->entry2pos->key_type; type_t old_type_nodup = *old_type; old_type_nodup.dup = nodup; dict_t*d = dict_new2(&old_type_nodup); dict_destroy_shallow(array->entry2pos); array->entry2pos = d; int t; for(t=0;tnum;t++) { dict_put(array->entry2pos, array->d[t].name, (void*)(ptroff_t)(t+1)); } d->key_type = old_type; } // ------------------------------- pool ------------------------------------- int pool_register_uint(pool_t*p, unsigned int i) { int pos = array_append_or_increase(p->x_uints, &i); assert(pos!=0); return pos; } int pool_register_int(pool_t*p, int i) { int pos = array_append_or_increase(p->x_ints, &i); assert(pos!=0); return pos; } int pool_register_float(pool_t*p, double d) { int pos = array_append_or_increase(p->x_floats, &d); fprintf(stderr, "putting %f at %d\n", d, pos);fflush(stderr); assert(pos!=0); return pos; } int pool_register_string(pool_t*pool, const char*str) { if(!str) return 0; string_t s = string_new2(str); int pos = array_append_or_increase(pool->x_strings, &s); assert(pos!=0); return pos; } int pool_register_string2(pool_t*pool, string_t*s) { if(!s || !s->str) return 0; int pos = array_append_or_increase(pool->x_strings, s); assert(pos!=0); return pos; } int pool_register_namespace(pool_t*pool, namespace_t*ns) { if(!ns) return 0; int pos = array_append_or_increase(pool->x_namespaces, ns); assert(pos!=0 || ns->access==ZERONAMESPACE); return pos; } int pool_register_namespace_set(pool_t*pool, namespace_set_t*set) { if(!set) return 0; int pos = array_append_or_increase(pool->x_namespace_sets, set); assert(pos!=0); return pos; } int pool_register_multiname(pool_t*pool, multiname_t*n) { if(!n) return 0; int pos = array_append_or_increase(pool->x_multinames, n); assert(pos!=0); return pos; } int pool_register_multiname2(pool_t*pool, char*name) { if(!name) return 0; multiname_t*n = multiname_fromstring(name); int pos = array_append_or_increase(pool->x_multinames, n); multiname_destroy(n); assert(pos!=0); return pos; } int pool_find_uint(pool_t*pool, unsigned int x) { int i = array_find(pool->x_uints, &x); if(i<=0) { fprintf(stderr, "Couldn't find uint \"%d\" in constant pool\n", x); return 0; } return i; } int pool_find_int(pool_t*pool, int x) { int i = array_find(pool->x_ints, &x); if(i<=0) { fprintf(stderr, "Couldn't find int \"%d\" in constant pool\n", x); return 0; } return i; } int pool_find_float(pool_t*pool, double x) { int i = array_find(pool->x_ints, &x); if(i<=0) { fprintf(stderr, "Couldn't find int \"%f\" in constant pool\n", x); return 0; } return i; } int pool_find_namespace(pool_t*pool, namespace_t*ns) { if(!ns) return 0; int i = array_find(pool->x_namespaces, ns); if(i<0) { char*s = namespace_tostring(ns); fprintf(stderr, "Couldn't find namespace \"%s\" %p in constant pool\n", s, (int)ns); free(s); return 0; } return i; } int pool_find_namespace_set(pool_t*pool, namespace_set_t*set) { if(!set) return 0; int i = array_find(pool->x_namespace_sets, set); if(i<=0) { char*s = namespace_set_tostring(set); fprintf(stderr, "Couldn't find namespace_set \"%s\" in constant pool\n", s); free(s); return 0; } return i; } int pool_find_string(pool_t*pool, const char*str) { if(!str) return 0; string_t s = string_new2(str); int i = array_find(pool->x_strings, &s); if(i<=0) { fprintf(stderr, "Couldn't find string \"%s\" in constant pool\n", str); return 0; } return i; } int pool_find_multiname(pool_t*pool, multiname_t*name) { if(!name) return 0; int i = array_find(pool->x_multinames, name); if(i<=0) { char*s = multiname_tostring(name); fprintf(stderr, "Couldn't find multiname \"%s\" in constant pool\n", s); free(s); return 0; } return i; } int pool_lookup_int(pool_t*pool, int i) { if(!i) return 0; int*ptr = (int*)array_getkey(pool->x_ints, i); if(!ptr) return 0; return *ptr; } unsigned int pool_lookup_uint(pool_t*pool, int i) { if(!i) return 0; return *(unsigned int*)array_getkey(pool->x_uints, i); } double pool_lookup_float(pool_t*pool, int i) { if(!i) return __builtin_nan(""); double*ptr = (double*)array_getkey(pool->x_floats, i); if(!ptr) return __builtin_nan(""); return *ptr; } const char*pool_lookup_string(pool_t*pool, int i) { string_t*s = array_getkey(pool->x_strings, i); if(!s) return 0; return s->str; } string_t pool_lookup_string2(pool_t*pool, int i) { string_t*s = array_getkey(pool->x_strings, i); return *s; } namespace_t*pool_lookup_namespace(pool_t*pool, int i) { return (namespace_t*)array_getkey(pool->x_namespaces, i); } namespace_set_t*pool_lookup_namespace_set(pool_t*pool, int i) { return (namespace_set_t*)array_getkey(pool->x_namespace_sets, i); } multiname_t*pool_lookup_multiname(pool_t*pool, int i) { return (multiname_t*)array_getkey(pool->x_multinames, i); } static namespace_t zeronamespace={ZERONAMESPACE,"*"}; pool_t*pool_new() { NEW(pool_t, p); p->x_ints = array_new2(&uint_type); p->x_uints = array_new2(&uint_type); p->x_floats = array_new2(&float_type); p->x_strings = array_new2(&stringstruct_type); p->x_namespaces = array_new2(&namespace_type); p->x_namespace_sets = array_new2(&namespace_set_type); p->x_multinames = array_new2(&multiname_type); /* add a zero-index entry in each list */ array_append(p->x_ints, 0, 0); array_append(p->x_uints, 0, 0); array_append(p->x_floats, 0, 0); array_append(p->x_strings, 0, 0); array_append(p->x_namespaces, &zeronamespace, 0); array_append(p->x_namespace_sets, 0, 0); array_append(p->x_multinames, 0, 0); return p; } void pool_optimize(pool_t*p) { reshuffle_array(p->x_ints); reshuffle_array(p->x_uints); reshuffle_array(p->x_floats); reshuffle_array(p->x_strings); reshuffle_array(p->x_namespaces); reshuffle_array(p->x_namespace_sets); reshuffle_array(p->x_multinames); } #define DEBUG if(0) //#define DEBUG void pool_read(pool_t*pool, TAG*tag) { int num_ints = swf_GetU30(tag); DEBUG printf("%d ints\n", num_ints); int t; for(t=1;tx_ints, &v, 0); } int num_uints = swf_GetU30(tag); DEBUG printf("%d uints\n", num_uints); for(t=1;tx_uints, &v, 0); } int num_floats = swf_GetU30(tag); DEBUG printf("%d floats\n", num_floats); for(t=1;tx_floats, &d, 0); } int num_strings = swf_GetU30(tag); DEBUG printf("%d strings\n", num_strings); for(t=1;tdata[tag->pos], len); swf_GetBlock(tag, 0, len); array_append(pool->x_strings, &s, 0); DEBUG printf("%d) \"%s\"\n", t, ((string_t*)array_getkey(pool->x_strings, t))->str); } int num_namespaces = swf_GetU30(tag); DEBUG printf("%d namespaces\n", num_namespaces); for(t=1;tx_namespaces, ns, 0); DEBUG printf("%d) %02x \"%s\"\n", t, type, namespace_tostring(ns)); namespace_destroy(ns); } int num_sets = swf_GetU30(tag); DEBUG printf("%d namespace sets\n", num_sets); for(t=1;tx_namespaces, nsnr); list_append(nsset->namespaces, namespace_clone(ns)); } array_append(pool->x_namespace_sets, nsset, 0); DEBUG printf("set %d) %s\n", t, namespace_set_tostring(nsset)); namespace_set_destroy(nsset); } int num_multinames = swf_GetU30(tag); DEBUG printf("%d multinames\n", num_multinames); for(t=1;tdata[tag->pos+s]); printf("\n");*/ m.type = swf_GetU8(tag); if(m.type==0x07 || m.type==0x0d) { int namespace_index = swf_GetU30(tag); m.ns = (namespace_t*)array_getkey(pool->x_namespaces, namespace_index); if(!m.ns) { fprintf(stderr, "Error: Illegal reference to namespace #%d in constant pool.\n", namespace_index); } int name_index = swf_GetU30(tag); if(name_index) // 0 = '*' (any) m.name = pool_lookup_string(pool, name_index); } else if(m.type==0x0f || m.type==0x10) { int name_index = swf_GetU30(tag); if(name_index) // 0 = '*' (any name) m.name = pool_lookup_string(pool, name_index); } else if(m.type==0x11 || m.type==0x12) { } else if(m.type==0x09 || m.type==0x0e) { int name_index = swf_GetU30(tag); int namespace_set_index = swf_GetU30(tag); if(name_index) m.name = pool_lookup_string(pool, name_index); m.namespace_set = (namespace_set_t*)array_getkey(pool->x_namespace_sets, namespace_set_index); } else if(m.type==0x1b || m.type==0x1c) { int namespace_set_index = swf_GetU30(tag); m.namespace_set = (namespace_set_t*)array_getkey(pool->x_namespace_sets, namespace_set_index); } else if(m.type==0x1d) { int v1 = swf_GetU30(tag); //multiname int v2 = swf_GetU30(tag); //counter? int v3 = swf_GetU30(tag); //multiname // e.g. Vector ... we only store the parent object m = *(multiname_t*)array_getkey(pool->x_multinames, v1); } else { printf("can't parse type %d multinames yet\n", m.type); } DEBUG printf("multiname %d) %s\n", t, multiname_tostring(&m)); array_append(pool->x_multinames, &m, 0); } } void pool_dump(pool_t*pool, FILE*fo, char flags) { int t; fprintf(fo, "%d integers\n", pool->x_ints->num); for(t=1;tx_ints->num;t++) { S32 val = *(int*)array_getkey(pool->x_ints, t); int freq = (int)(ptroff_t)array_getvalue(pool->x_ints, t); if(flags&1) fprintf(fo, "%5d %d) %d\n", freq, t, val); } fprintf(fo, "%d unsigned integers\n", pool->x_uints->num); for(t=1;tx_uints->num;t++) { U32 val = *(unsigned int*)array_getkey(pool->x_uints, t); int freq = (int)(ptroff_t)array_getvalue(pool->x_uints, t); if(flags&1) fprintf(fo, "%5d %d) %d\n", freq, t, val); } fprintf(fo, "%d floats\n", pool->x_floats->num); for(t=1;tx_floats->num;t++) { double d = pool_lookup_float(pool, t); int freq = (int)(ptroff_t)array_getvalue(pool->x_floats, t); if(flags&2) fprintf(fo, "%5d %d) %f\n", freq, t, d); } fprintf(fo, "%d strings\n", pool->x_strings->num); for(t=1;tx_strings->num;t++) { string_t str = pool_lookup_string2(pool, t); int freq = (int)(ptroff_t)array_getvalue(pool->x_strings, t); if(flags&1) fprintf(fo, "%5d %d) ", freq, t); if(flags&1) fwrite(str.str, str.len, 1, fo); if(flags&1) fprintf(fo, "\n"); } fprintf(fo, "%d namespaces\n", pool->x_namespaces->num); for(t=1;tx_namespaces->num;t++) { namespace_t*ns= (namespace_t*)array_getkey(pool->x_namespaces, t); char*s = namespace_tostring(ns); int freq = (int)(ptroff_t)array_getvalue(pool->x_namespaces, t); if(flags&1) fprintf(fo, "%5d %d) %s\n", freq, t, s); free(s); } fprintf(fo, "%d namespace sets\n", pool->x_namespace_sets->num); for(t=1;tx_namespace_sets->num;t++) { namespace_set_t*set = (namespace_set_t*)array_getkey(pool->x_namespace_sets, t); char*s = namespace_set_tostring(set); int freq = (int)(ptroff_t)array_getvalue(pool->x_namespace_sets, t); if(flags&1) fprintf(fo, "%5d %d) %s\n", freq, t, s); free(s); } fprintf(fo, "%d multinames\n", pool->x_multinames->num); for(t=1;tx_multinames->num;t++) { multiname_t*m = (multiname_t*)array_getkey(pool->x_multinames, t); char*s = multiname_tostring(m); int freq = (int)(ptroff_t)array_getvalue(pool->x_multinames, t); if(flags&1) fprintf(fo, "%5d %d) %s\n", freq, t, s); free(s); } } void pool_write(pool_t*pool, TAG*tag) { int t; /* make sure that all namespaces used by multinames / namespace sets and all strings used by namespaces exist */ for(t=1;tx_multinames->num;t++) { multiname_t*m = (multiname_t*)array_getkey(pool->x_multinames, t); if(m->ns) { pool_register_namespace(pool, m->ns); } if(m->namespace_set) { pool_register_namespace_set(pool, m->namespace_set); } if(m->name) { pool_register_string(pool, m->name); } } for(t=1;tx_namespace_sets->num;t++) { namespace_set_t*set = (namespace_set_t*)array_getkey(pool->x_namespace_sets, t); namespace_list_t*i = set->namespaces; while(i) { pool_register_namespace(pool, i->namespace); i = i->next; } } for(t=1;tx_namespaces->num;t++) { namespace_t*ns= (namespace_t*)array_getkey(pool->x_namespaces, t); /* The spec says (page 22): "a value of zero denotes an empty string". However when actually using zero strings as empty namespaces, the flash player breaks.*/ //if(ns->name && ns->name[0]) pool_register_string(pool, ns->name); } //pool_register_int(pool, 15); //pool_register_int(pool, 1); //pool_register_int(pool, 0); /* write data */ swf_SetU30(tag, pool->x_ints->num>1?pool->x_ints->num:0); for(t=1;tx_ints->num;t++) { S32 val = *(int*)array_getkey(pool->x_ints, t); swf_SetABCS32(tag, val); } swf_SetU30(tag, pool->x_uints->num>1?pool->x_uints->num:0); for(t=1;tx_uints->num;t++) { swf_SetABCU32(tag, *(unsigned int*)array_getkey(pool->x_uints, t)); } swf_SetU30(tag, pool->x_floats->num>1?pool->x_floats->num:0); for(t=1;tx_floats->num;t++) { double d = pool_lookup_float(pool, t); swf_SetD64(tag, d); } swf_SetU30(tag, pool->x_strings->num>1?pool->x_strings->num:0); for(t=1;tx_strings->num;t++) { string_t str = pool_lookup_string2(pool, t); swf_SetU30String(tag, str.str, str.len); } swf_SetU30(tag, pool->x_namespaces->num>1?pool->x_namespaces->num:0); for(t=1;tx_namespaces->num;t++) { namespace_t*ns= (namespace_t*)array_getkey(pool->x_namespaces, t); swf_SetU8(tag, ns->access); const char*name = ns->name; int i = 0; //if(name && name[0]) i = pool_find_string(pool, name); swf_SetU30(tag, i); } swf_SetU30(tag, pool->x_namespace_sets->num>1?pool->x_namespace_sets->num:0); for(t=1;tx_namespace_sets->num;t++) { namespace_set_t*set = (namespace_set_t*)array_getkey(pool->x_namespace_sets, t); namespace_list_t*i = set->namespaces; int len = list_length(i); swf_SetU30(tag, len); while(i) { int index = pool_find_namespace(pool, i->namespace); swf_SetU30(tag, index); i = i->next; } } swf_SetU30(tag, pool->x_multinames->num>1?pool->x_multinames->num:0); for(t=1;tx_multinames->num;t++) { multiname_t*m = (multiname_t*)array_getkey(pool->x_multinames, t); swf_SetU8(tag, m->type); if(m->ns) { assert(m->type==0x07 || m->type==0x0d); int i = pool_find_namespace(pool, m->ns); if(i<0) fprintf(stderr, "internal error: unregistered namespace %02x %s %s\n", m->ns->access, access2str(m->ns->access), m->ns->name); swf_SetU30(tag, i); } else { assert(m->type!=0x07 && m->type!=0x0d); } if(m->name) { assert(m->type==0x09 || m->type==0x0e || m->type==0x07 || m->type==0x0d || m->type==0x0f || m->type==0x10); int i = pool_find_string(pool, m->name); if(i<0) fprintf(stderr, "internal error: unregistered name\n"); swf_SetU30(tag, i); } else { if(m->type == 0x09) { swf_SetU30(tag, 0); } assert(m->type!=0x0e && m->type!=0x07 && m->type!=0x0d && m->type!=0x0f && m->type!=0x10); } if(m->namespace_set) { assert(m->type==0x09 || m->type==0x0e || m->type==0x1c || m->type==0x1b); int i = pool_find_namespace_set(pool, m->namespace_set); if(i<0) fprintf(stderr, "internal error: unregistered namespace set\n"); swf_SetU30(tag, i); } else { assert(m->type!=0x09 && m->type!=0x0e && m->type!=0x1c && m->type!=0x1b); } } } void pool_destroy(pool_t*pool) { int t; array_free(pool->x_ints); array_free(pool->x_uints); array_free(pool->x_floats); array_free(pool->x_strings); array_free(pool->x_namespaces); array_free(pool->x_namespace_sets); array_free(pool->x_multinames); free(pool); } swftools_0.9.2+git20130725.orig/lib/as3/code.c0000644000175000017500000012465012216332640017645 0ustar gawaingawain/* code.c Routines for handling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include "code.h" #include "pool.h" #define OP_REGISTER 1 #define OP_STACK_ARGS 2 #define OP_STACK_NS 4 #define OP_SET_DXNS 8 #define OP_RETURN 16 #define OP_THROW 32 #define OP_BRANCH 64 #define OP_JUMP 128 #define OP_LABEL 256 #define OP_LOOKUPSWITCH 512 #define OP_NEED_ACTIVATION 1024 #define OP_STACK_ARGS2 2048 #define OP_INTERNAL 32768 /* 2 = u30 index into multiname m = u30 index into method n = u30 number of params i = u30 index into method info b = byte c = u30 index into class N = u30 index into namespaces s = string (u30 index into strings) S = switch u = u30 r = register */ opcode_t opcodes[]={ {0xa0, "add", "", -2, 1, 0, 0}, {0xc5, "add_i", "", -2, 1, 0, 0}, {0x86, "astype", "2", -1, 1, 0, 0}, {0x87, "astypelate", "", -2, 1, 0, 0}, {0xA8, "bitand", "", -2, 1, 0, 0}, {0x97, "bitnot", "", -1, 1, 0, 0}, {0xa9, "bitor", "", -2, 1, 0, 0}, {0xaa, "bitxor", "", -2, 1, 0, 0}, {0x41, "call", "n", -2, 1, 0, OP_STACK_ARGS}, {0x43, "callmethod", "mn", -1, 1, 0, OP_STACK_ARGS}, {0x4c, "callproplex", "2n", -1, 1, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x46, "callproperty", "2n", -1, 1, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x4f, "callpropvoid", "2n", -1, 0, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x44, "callstatic", "mn", -1, 1, 0, OP_STACK_ARGS}, {0x45, "callsuper", "2n", -1, 1, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x4e, "callsupervoid", "2n", -1, 0, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x78, "checkfilter", "", -1, 1, 0, 0}, {0x80, "coerce", "2", -1, 1, 0, 0}, {0x82, "coerce_a", "", -1, 1, 0, 0}, {0x85, "coerce_s", "", -1, 1, 0, 0}, {0x42, "construct", "n", -1, 1, 0, OP_STACK_ARGS}, {0x4a, "constructprop", "2n", -1, 1, 0, OP_STACK_ARGS|OP_STACK_NS}, {0x49, "constructsuper", "n", -1, 0, 0, OP_STACK_ARGS}, {0x76, "convert_b", "", -1, 1, 0, 0}, {0x73, "convert_i", "", -1, 1, 0, 0}, {0x75, "convert_d", "", -1, 1, 0, 0}, {0x77, "convert_o", "", -1, 1, 0, 0}, {0x74, "convert_u", "", -1, 1, 0, 0}, {0x70, "convert_s", "", -1, 1, 0, 0}, {0xef, "debug", "D", 0, 0, 0, 0}, {0xf1, "debugfile", "s", 0, 0, 0, 0}, {0xf0, "debugline", "u", 0, 0, 0, 0}, {0x94, "declocal", "r", 0, 0, 0, OP_REGISTER}, {0xc3, "declocal_i", "r", 0, 0, 0, OP_REGISTER}, {0x93, "decrement", "", -1, 1, 0, 0}, {0xc1, "decrement_i", "", -1, 1, 0, 0}, {0x6a, "deleteproperty", "2", -1, 1, 0, OP_STACK_NS}, {0xa3, "divide", "", -2, 1, 0, 0}, {0x2a, "dup", "", -1, 2, 0, 0}, {0x06, "dxns", "s", 0, 0, 0, OP_SET_DXNS}, {0x07, "dxnslate", "", -1, 0, 0, OP_SET_DXNS}, {0xab, "equals", "", -2, 1, 0, 0}, {0x72, "esc_xattr", "", -1, 1, 0, 0}, {0x71, "esc_xelem", "", -1, 1, 0, 0}, {0x5e, "findproperty", "2", 0, 1, 0, OP_STACK_NS}, {0x5d, "findpropstrict", "2", 0, 1, 0, OP_STACK_NS}, {0x59, "getdescendants", "2", -1, 1, 0, OP_STACK_NS}, {0x64, "getglobalscope", "", 0, 1, 0, 0}, {0x6e, "getglobalslot", "u", 0, 1, 0, 0}, {0x60, "getlex", "2", 0, 1, 0, 0}, //multiname may not be runtime {0x62, "getlocal", "r", 0, 1, 0, OP_REGISTER}, {0xd0, "getlocal_0", "", 0, 1, 0, OP_REGISTER}, {0xd1, "getlocal_1", "", 0, 1, 0, OP_REGISTER}, {0xd2, "getlocal_2", "", 0, 1, 0, OP_REGISTER}, {0xd3, "getlocal_3", "", 0, 1, 0, OP_REGISTER}, {0x66, "getproperty", "2", -1, 1, 0, OP_STACK_NS}, {0x65, "getscopeobject", "u", 0, 1, 0, 0}, // u = index into scope stack {0x6c, "getslot", "u", -1, 1, 0, 0}, {0x04, "getsuper", "2", -1, 1, 0, OP_STACK_NS}, {0xaf, "greaterthan", "", -2, 1, 0, 0}, {0xb0, "greaterequals", "", -2, 1, 0, 0}, {0x1f, "hasnext", "", -2, 1, 0, 0}, {0x32, "hasnext2", "rr", 0, 1, 0, OP_REGISTER}, {0x13, "ifeq", "j", -2, 0, 0, OP_BRANCH}, {0x12, "iffalse", "j", -1, 0, 0, OP_BRANCH}, {0x18, "ifge", "j", -2, 0, 0, OP_BRANCH}, {0x17, "ifgt", "j", -2, 0, 0, OP_BRANCH}, {0x16, "ifle", "j", -2, 0, 0, OP_BRANCH}, {0x15, "iflt", "j", -2, 0, 0, OP_BRANCH}, {0x0f, "ifnge", "j", -2, 0, 0, OP_BRANCH}, {0x0e, "ifngt", "j", -2, 0, 0, OP_BRANCH}, {0x0d, "ifnle", "j", -2, 0, 0, OP_BRANCH}, {0x0c, "ifnlt", "j", -2, 0, 0, OP_BRANCH}, {0x14, "ifne", "j", -2, 0, 0, OP_BRANCH}, {0x19, "ifstricteq", "j", -2, 0, 0, OP_BRANCH}, {0x1a, "ifstrictne", "j", -2, 0, 0, OP_BRANCH}, {0x11, "iftrue", "j", -1, 0, 0, OP_BRANCH}, {0xb4, "in", "", -2, 1, 0, 0}, {0x92, "inclocal", "r", 0, 0, 0, OP_REGISTER}, {0xc2, "inclocal_i", "r", 0, 0, 0, OP_REGISTER}, {0x91, "increment", "", -1, 1, 0, 0}, {0xc0, "increment_i", "", -1, 1, 0, 0}, {0x68, "initproperty", "2", -2, 0, 0, OP_STACK_NS}, {0xb1, "instanceof", "", -2, 1, 0, 0}, {0xb2, "istype", "2", -1, 1, 0, 0}, // may not be a runtime multiname {0xb3, "istypelate", "", -2, 1, 0, 0}, {0x10, "jump", "j", 0, 0, 0, OP_JUMP}, {0x08, "kill", "r", 0, 0, 0, OP_REGISTER}, {0x09, "label", "", 0, 0, 0, OP_LABEL}, {0xae, "lessequals", "", -2, 1, 0, 0}, {0xad, "lessthan", "", -2, 1, 0, 0}, {0x1b, "lookupswitch", "S", -1, 0, 0, OP_LOOKUPSWITCH}, {0xa5, "lshift", "", -2, 1, 0, 0}, {0xa4, "modulo", "", -2, 1, 0, 0}, {0xa2, "multiply", "", -2, 1, 0, 0}, {0xc7, "multiply_i", "", -2, 1, 0, 0}, {0x90, "negate", "", -1, 1, 0, 0}, {0xc4, "negate_i", "", -1, 1, 0, 0}, {0x57, "newactivation", "", 0, 1, 0, OP_NEED_ACTIVATION}, {0x56, "newarray", "n", 0, 1, 0, OP_STACK_ARGS}, {0x5a, "newcatch", "u", 0, 1, 0, 0}, //u = index into exception_info {0x58, "newclass", "c", -1, 1, 0, 0}, //c = index into class_info {0x40, "newfunction", "m", 0, 1, 0, 0}, //i = index into method_info {0x55, "newobject", "n", 0, 1, 0, OP_STACK_ARGS2}, {0x1e, "nextname", "", -2, 1, 0, 0}, {0x23, "nextvalue", "", -2, 1, 0, 0}, {0x02, "nop", "", 0, 0, 0, 0}, {0x96, "not", "", -1, 1, 0 ,0}, {0x29, "pop", "", -1, 0, 0, 0}, {0x1d, "popscope", "", 0, 0,-1, 0}, {0x24, "pushbyte", "b", 0, 1, 0, 0}, {0x2f, "pushdouble", "f", 0, 1, 0, 0}, //index into floats {0x27, "pushfalse", "", 0, 1, 0, 0}, {0x2d, "pushint", "I", 0, 1, 0, 0}, //index into ints {0x31, "pushnamespace", "N", 0, 1, 0, 0}, //index into namespace {0x28, "pushnan", "", 0, 1, 0, 0}, {0x20, "pushnull", "", 0, 1, 0, 0}, {0x30, "pushscope", "", -1, 0, 1, 0}, {0x25, "pushshort", "u", 0, 1, 0, 0}, {0x2c, "pushstring", "s", 0, 1, 0, 0}, {0x26, "pushtrue", "", 0, 1, 0, 0}, {0x2e, "pushuint", "U", 0, 1, 0, 0}, //index into uints {0x21, "pushundefined", "", 0, 1, 0, 0}, {0x1c, "pushwith", "", -1, 0, 1, 0}, {0x48, "returnvalue", "", -1, 0, 0, OP_RETURN}, {0x47, "returnvoid", "", 0, 0, 0, OP_RETURN}, {0xa6, "rshift", "", -2, 1, 0, 0}, {0x63, "setlocal", "r", -1, 0, 0, OP_REGISTER}, {0xd4, "setlocal_0", "", -1, 0, 0, OP_REGISTER}, {0xd5, "setlocal_1", "", -1, 0, 0, OP_REGISTER}, {0xd6, "setlocal_2", "", -1, 0, 0, OP_REGISTER}, {0xd7, "setlocal_3", "", -1, 0, 0, OP_REGISTER}, {0x6f, "setglobalslot", "u", -1, 0, 0, 0}, {0x61, "setproperty", "2", -2, 0, 0, OP_STACK_NS}, {0x6d, "setslot", "u", -2, 0, 0, 0}, {0x05, "setsuper", "2", -2, 0, 0, OP_STACK_NS}, {0xac, "strictequals", "", -2, 1, 0, 0}, {0xa1, "subtract", "", -2, 1, 0, 0}, {0xc6, "subtract_i", "", -2, 1, 0, 0}, {0x2b, "swap", "", -2, 2, 0, 0}, {0x03, "throw", "", -1, 0, 0, OP_THROW}, {0x95, "typeof", "", -1, 1, 0, 0}, {0xa7, "urshift", "", -2, 1, 0, 0}, /* Alchemy opcodes */ {0x3a, "si8", "", -2, 0, 0, 0}, {0x3b, "si16", "", -2, 0, 0, 0}, {0x3c, "si32", "", -2, 0, 0, 0}, {0x3d, "sf32", "", -2, 0, 0, 0}, {0x3e, "sf64", "", -2, 0, 0, 0}, {0x35, "li8", "", -1, 1, 0, 0}, {0x36, "li16", "", -1, 1, 0, 0}, {0x37, "li32", "", -1, 1, 0, 0}, {0x38, "lf32", "", -1, 1, 0, 0}, {0x39, "lf64", "", -1, 1, 0, 0}, {0x50, "sxi1", "", -1, 1, 0, 0}, {0x51, "sxi8", "", -1, 1, 0, 0}, {0x52, "sxi16", "", -1, 1, 0, 0}, /* opcodes not documented, but seen in the wild */ {0x53, "applytype", "n", -1, 1, 0, OP_STACK_ARGS}, //seen in builtin.abc /* dummy instructions. Warning: these are not actually supported by flash */ {0xfb, "__pushpackage__", "s", 0, 1, 0, OP_INTERNAL}, {0xfc, "__rethrow__", "", 0, 0, 0, OP_THROW|OP_INTERNAL}, {0xfd, "__fallthrough__", "s", 0, 0, 0, OP_INTERNAL}, {0xfe, "__continue__", "s", 0, 0, 0, OP_RETURN|OP_INTERNAL}, {0xff, "__break__", "s", 0, 0, 0, OP_RETURN|OP_INTERNAL}, }; static opcode_t* op2op[256] = {0,0,0}; static inline opcode_t* opcode_get(U8 op) { int t; if(!op2op[0x02]) { memset(op2op, 0, sizeof(op2op)); for(t=0;tpos; } if(pos < 0 || pos > len || (pos!=len && !bytepos[pos])) { /* flex likes to generate these. yuck. */ if(c) { opcode_t*op = opcode_get(c->opcode); fprintf(stderr, "Warning: Invalid jump instruction \"%s\" from %d to %d (%d)\n", op->name, c->pos, pos, len); } else { fprintf(stderr, "Warning: Invalid jump to %d (%d)\n", pos, len); } return 0; } else { if(pos==len) { //opcode_t*op = opcode_get(c->opcode); //fprintf(stderr, "Warning: jump beyond end of code in instruction %s at position %d\n", op->name, c->pos); return 0; } else { return bytepos[pos]; } } } code_t* code_atposition(codelookup_t*l, int pos) { return pos2code(l->bytepos, 0, pos, l->len); } void lookupswitch_print(lookupswitch_t*l) { printf("default: %p\n", l->def); code_list_t*t = l->targets; while(t) { printf("target: %p\n", t->code); t = t->next; } } code_t*code_parse(TAG*tag, int len, abc_file_t*file, pool_t*pool, codelookup_t**codelookup) { code_t*head=0; code_t*code=0; int start=tag->pos; int end=tag->pos+len; //printf("-->\n");fflush(stdout); code_t**bytepos = rfx_calloc(sizeof(code_t*)*len); while(tag->pospos-start; U8 opcode = swf_GetU8(tag); opcode_t*op = opcode_get(opcode); if(!op) { fprintf(stderr, "Can't parse opcode %02x\n", opcode); continue; } //printf("%s\n", op->name);fflush(stdout); NEW(code_t,c); c->pos = codepos; bytepos[codepos] = c; if(!head) { head = code = c; } else { code->next = c; c->prev = code; code = c; } c->opcode = opcode; char*p = op->params; int pos = 0; while(*p) { void*data = 0; if(*p == 'n') { // number data = (void*)(ptroff_t)swf_GetU30(tag); } else if(*p == '2') { //multiname data = multiname_clone(pool_lookup_multiname(pool, swf_GetU30(tag))); } else if(*p == 'N') { //namespace data = namespace_clone(pool_lookup_namespace(pool, swf_GetU30(tag))); } else if(*p == 'U') { //uint data = (void*)(ptroff_t)pool_lookup_uint(pool, swf_GetU30(tag)); } else if(*p == 'I') { //int data = (void*)(ptroff_t)pool_lookup_int(pool, swf_GetU30(tag)); } else if(*p == 'f') { //int double*fp = malloc(sizeof(double)); *fp = pool_lookup_float(pool, swf_GetU30(tag)); data = fp; } else if(*p == 'm') { //method data = array_getvalue(file->methods, swf_GetU30(tag)); } else if(*p == 'c') { //classinfo data = array_getvalue(file->classes, swf_GetU30(tag)); } else if(*p == 'i') { data = array_getvalue(file->method_bodies, swf_GetU30(tag)); } else if(*p == 'u') { // generic integer data = (void*)(ptroff_t)swf_GetU30(tag); } else if(*p == 'r') { // local register data = (void*)(ptroff_t)swf_GetU30(tag); } else if(*p == 'b') { // byte data = (void*)(ptroff_t)swf_GetU8(tag); } else if(*p == 'j') { // jump int j = swf_GetS24(tag); data = (void*)(ptroff_t)j; } else if(*p == 's') { // string string_t s = pool_lookup_string2(pool, swf_GetU30(tag)); data = string_dup3(&s); } else if(*p == 'D') { // debug /*type, usually 1*/ U8 type = swf_GetU8(tag); if(type!=1) fprintf(stderr, "Unknown debug type: %02x\n", type); /*register name*/ code->data[0] = strdup((char*)pool_lookup_string(pool, swf_GetU30(tag))); /*register index*/ code->data[1] = (void*)(ptroff_t)swf_GetU8(tag); /*unused*/ swf_GetU30(tag); } else if(*p == 'S') { // switch statement lookupswitch_t*l = malloc(sizeof(lookupswitch_t)); l->def = (code_t*)(ptroff_t)swf_GetS24(tag); l->targets = list_new(); int num = swf_GetU30(tag)+1; int t; for(t=0;ttargets, (code_t*)(ptroff_t)swf_GetS24(tag)); data = l; } else { printf("Can't parse opcode param type \"%c\" (for op %02x %s).\n", *p, code->opcode, op->name); return 0; } code->data[pos++] = data; p++; } } //#define DEBUG_BYTES #ifdef DEBUG_BYTES int t; for(t=0;topcode); if(op->flags & (OP_JUMP|OP_BRANCH)) { printf("%50d) %02x %s %d\n", t, tag->data[start+t], op->name, c->data[0]); } else { printf("%50d) %02x %s\n", t, tag->data[start+t], op->name); } } else { printf("%50d) %02x\n", t, tag->data[start+t]); } } //printf("%05d) %02x\n", t, tag->data[start+t]); #endif code_t*c = head; while(c) { opcode_t*op = opcode_get(c->opcode); if(op->flags & (OP_JUMP|OP_BRANCH)) { int j = ((int)(ptroff_t)c->data[0]); c->branch = pos2code(bytepos,c,j+4,len); } else if(op->flags & (OP_LOOKUPSWITCH)) { lookupswitch_t*l = (lookupswitch_t*)c->data[0]; int offset = 0; l->def = pos2code(bytepos,c,(ptroff_t)l->def+offset,len); code_list_t*t=l->targets; while(t) { t->code = pos2code(bytepos,c,(ptroff_t)t->code+offset,len); t = t->next; } } c = c->next; } if(codelookup) { (*codelookup) = malloc(sizeof(codelookup_t)); (*codelookup)->bytepos = bytepos; (*codelookup)->len = len; } else { free(bytepos); } return head; } void codelookup_free(codelookup_t*codelookup) { free(codelookup->bytepos);codelookup->bytepos=0; free(codelookup); } void code_free(code_t*c) { c = code_start(c); while(c) { code_t*next = c->next; opcode_t*op = opcode_get(c->opcode); char*p = op?op->params:""; int pos=0; while(*p) { void*data = c->data[pos]; if(*p == '2') { //multiname multiname_destroy(data); } else if(*p == 'N') { //namespace namespace_destroy(data); } else if(strchr("sDf", *p)) { free(data); } else if(strchr("S", *p)) { lookupswitch_t*l = (lookupswitch_t*)data; list_free(l->targets);l->targets=0; free(l); } c->data[pos]=0; p++;pos++; } memset(c, 0, sizeof(c)); free(c); c = next; } } static int opcode_write(TAG*tag, code_t*c, pool_t*pool, abc_file_t*file, int length) { opcode_t*op = opcode_get(c->opcode); char*p = op->params; int pos = 0; int len = 0; if(tag) swf_SetU8(tag, c->opcode); len++; if(op->flags & OP_INTERNAL) { if(c->opcode == OPCODE___BREAK__ || c->opcode == OPCODE___CONTINUE__) { fprintf(stderr, "Unresolved %s\n", op->name); } else { fprintf(stderr, "Error: writing undefined internal opcode %s\n", op->name); } } while(*p) { void*data = c->data[pos++]; assert(pos<=2); switch(*p) { case 'n': { // number len += swf_SetU30(tag, (ptroff_t)data); break; } case '2': { //multiname multiname_t*m = (multiname_t*)data; len += swf_SetU30(tag, pool_register_multiname(pool, m)); break; } case 'N': { //namespace namespace_t*ns = (namespace_t*)data; len += swf_SetU30(tag, pool_register_namespace(pool, ns)); break; } case 'm': { //method abc_method_t*m = (abc_method_t*)data; len += swf_SetU30(tag, m->index); break; } case 'c': { //classinfo abc_class_t*cls = (abc_class_t*)data; len += swf_SetU30(tag, cls->index); break; } case 'i': { //methodbody abc_method_body_t*m = (abc_method_body_t*)data; len += swf_SetU30(tag, m->index); break; } case 'I': { // int len += swf_SetU30(tag, pool_register_int(pool, (ptroff_t)data)); break; } case 'U': { // uint len += swf_SetU30(tag, pool_register_uint(pool, (ptroff_t)data)); break; } case 'f': { // float len += swf_SetU30(tag, pool_register_float(pool, *(double*)data)); break; } case 'u': { // integer len += swf_SetU30(tag, (ptroff_t)data); break; } case 'r': { // integer len += swf_SetU30(tag, (ptroff_t)data); break; } case 'b': { // byte if(tag) swf_SetU8(tag, (ptroff_t)data); len++; break; } case 'j': { // jump int skip = length-c->pos-4; if(c->branch) skip = (c->branch->pos) - c->pos - 4; len += swf_SetS24(tag, skip); break; } case 's': { // string int index = pool_register_string2(pool, (string_t*)data); len += swf_SetU30(tag, index); break; } case 'D': { // debug statement if(tag) swf_SetU8(tag, 1); len++; len+=swf_SetU30(tag, pool_register_string(pool,c->data[0])); if(tag) swf_SetU8(tag, (ptroff_t)c->data[1]); len++; len+=swf_SetU30(tag, 0); break; } case 'S': { // switch statement lookupswitch_t*l = (lookupswitch_t*)data; int offset = 0; len+=swf_SetS24(tag, l->def->pos-c->pos+offset); //default code_list_t*t = l->targets; if(list_length(t)) { len+=swf_SetU30(tag, list_length(t)-1); //nr-1 code_list_t*t = l->targets; while(t) { len+=swf_SetS24(tag, t->code->pos - c->pos+offset); t = t->next; } } else { len+=swf_SetU30(tag, 0); //nr-1 len+=swf_SetS24(tag, l->def->pos-c->pos+offset); } break; } default: printf("Can't parse opcode param type \"%c\"\n", *p); } p++; } return len; } void code_write(TAG*tag, code_t*code, pool_t*pool, abc_file_t*file) { code = code_start(code); int pos = 0; int length = 0; code_t*c = code; while(c) { c->pos = pos; pos += opcode_write(0, c, pool, file, 0); c = c->next; } length = pos; swf_SetU30(tag, pos); int start = tag->len; c = code; pos = 0; while(c) { opcode_t*op = opcode_get(code->opcode); if(op->flags&(OP_BRANCH|OP_JUMP)) { int skip = 0; } pos += opcode_write(tag, c, pool, file, length); c = c->next; } assert(tag->len - start == pos); } typedef struct { int stackpos; int scopepos; code_t*code; char flags; char error; } stackpos_t; typedef struct { stackpos_t*stack; int num; int maxlocal; int maxstack; int maxscope; int flags; } currentstats_t; static int stack_minus(code_t*c) { opcode_t*op = opcode_get(c->opcode); if(op->stack_minus>0) { fprintf(stderr, "Invalid opcode entry %02x %s\n", c->opcode, op->name); } int stack = op->stack_minus; if(op->flags&OP_STACK_NS) { multiname_t*m = (multiname_t*)c->data[0]; if(multiname_late_namespace(m)) stack--; if(multiname_late_name(m)) stack--; } if(op->flags&OP_STACK_ARGS || op->flags&OP_STACK_ARGS2) { assert(strchr(op->params, 'n')); int nr = (ptroff_t)(op->params[0]=='n'?c->data[0]:c->data[1]); stack-=nr; if(op->flags&OP_STACK_ARGS2) stack-=nr; } return stack; } static void handleregister(currentstats_t*stats, int reg) { if(reg+1 > stats->maxlocal) stats->maxlocal = reg+1; } #define FLAG_SEEN 1 #define FLAG_ERROR 2 static void dumpstack(currentstats_t*stats) { int t; for(t=0;tnum;t++) { code_t*c = stats->stack[t].code; opcode_t*op = opcode_get(c->opcode); printf("%05d) %c %d:%d %s", t, (stats->stack[t].flags&FLAG_SEEN)?'x':'|', stats->stack[t].stackpos, stats->stack[t].scopepos, op->name); if(op->flags&(OP_BRANCH|OP_JUMP)) { if(c->branch) printf(" ->%d\n", c->branch->pos); else printf(" 00000000\n"); } if(op->params[0]=='2') { printf(" %s", multiname_tostring(c->data[0])); } else if(op->params[0]=='N') { printf(" %s", namespace_tostring(c->data[0])); } printf("\n"); } } static char callcode(currentstats_t*stats, int pos, int stack, int scope) { while(posnum) { if(stats->stack[pos].flags&FLAG_SEEN) { if(stats->stack[pos].stackpos != stack || stats->stack[pos].scopepos != scope) { //dumpstack(stats); stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "Stack mismatch at pos %d\n", pos); fprintf(stderr, "Should be: %d:%d, is: %d:%d\n", stack, scope, stats->stack[pos].stackpos, stats->stack[pos].scopepos); /* return error here if we do verification */ //return 0; } return 1; } stats->stack[pos].flags |= FLAG_SEEN; stats->stack[pos].stackpos = stack; stats->stack[pos].scopepos = scope; code_t*c = stats->stack[pos].code; opcode_t*op = opcode_get(c->opcode); //printf("Walking %s at position %d, stack=%d, scope=%d\n", op->name, pos, stack, scope); stack += stack_minus(c); if(stack<0) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "error: stack underflow at %d (%s)\n", pos, op->name); /* if we would do true verification (if we would be a vm), this is where we would return the error return 0; */ } stack += op->stack_plus; scope += op->scope_stack_plus; if(stack > stats->maxstack) stats->maxstack = stack; if(scope > stats->maxscope) stats->maxscope = scope; if(op->flags & OP_SET_DXNS) stats->flags |= FLAGS_SET_DXNS; if(op->flags & OP_NEED_ACTIVATION) stats->flags |= FLAGS_ACTIVATION; if(c->opcode == OPCODE_NEWCLASS) { abc_class_t*cls = (abc_class_t*)(c->data[0]); if(scope > cls->init_scope_depth) cls->init_scope_depth = scope; } if(c->opcode == OPCODE_NEWFUNCTION) { abc_method_t*m = (abc_method_t*)(c->data[0]); if(m->body && scope > m->body->init_scope_depth) m->body->init_scope_depth = scope; } if(op->flags & OP_REGISTER) { char*p = op->params; int pos = 0; char ok=0; while(*p) { if(*p=='r') { handleregister(stats, (ptroff_t)c->data[pos]); ok = 1; } p++; } if(!ok) { handleregister(stats, c->opcode&3); } } if(op->flags&OP_RETURN) { if(OP_RETURN==0x48/*returnvalue*/) { if(stack!=1) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "return(value) with stackposition %d\n", stack); } } else if(OP_RETURN==0x47) { if(stack!=0) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "return(void) with stackposition %d\n", stack); } } } if(op->flags & (OP_THROW|OP_RETURN)) return 1; if(op->flags & OP_JUMP) { if(!c->branch) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "Error: Invalid jump target in instruction %s at position %d.\n", op->name, pos); return 0; } c = c->branch; pos = c->pos; continue; } if(op->flags & OP_BRANCH) { if(!c->branch) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "Error: Invalid jump target in instruction %s at position %d\n", op->name, pos); return 0; } int newpos = c->branch->pos; if(!callcode(stats, newpos, stack, scope)) return 0; } if(op->flags & OP_LOOKUPSWITCH) { lookupswitch_t*l = c->data[0]; if(!l->def) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "Error: Invalid jump target in instruction %s at position %d\n", op->name, pos); return 0; } if(!callcode(stats, l->def->pos, stack, scope)) return 0; code_list_t*t = l->targets; while(t) { if(!t->code) { stats->stack[pos].flags |= FLAG_ERROR; fprintf(stderr, "Error: Invalid jump target in instruction %s at position %d\n", op->name, pos); return 0; } if(!callcode(stats, t->code->pos, stack, scope)) return 0; t = t->next; } } pos++; if(posnum) { assert(c->next == stats->stack[pos].code); } } return 1; } static currentstats_t* code_get_stats(code_t*code, abc_exception_list_t*exceptions) { code = code_start(code); int num = 0; code_t*c = code; while(c) { num++; c = c->next; } currentstats_t* current = malloc(sizeof(currentstats_t)); current->stack = rfx_calloc(sizeof(stackpos_t)*num); current->maxlocal = 0; current->maxstack = 0; current->maxscope = 0; current->num = num; current->flags = 0; //#define DEBUG_BYTES #ifdef DEBUG_BYTES int t; c = code; for(t=0;topcode); if(op->flags & (OP_JUMP|OP_BRANCH)) { printf("%05d) %s %p\n", t, op->name, c->branch); } else if(op->params[0]=='2') { printf("%05d) %s %s\n", t, op->name, multiname_tostring(c->data[0])); } else if(op->params[0]=='N') { printf("%05d) %s %s\n", t, op->name, namespace_tostring(c->data[0])); } else { printf("%05d) %s\n", t, op->name); } c = c->next; } //printf("%05d) %02x\n", t, tag->data[start+t]); #endif num = 0; c = code; while(c) { //crosslink current->stack[num].code = c; c->pos = num; num++; c = c->next; } if(!callcode(current, 0, 0, 0)) { free(current); return 0; } abc_exception_list_t*e = exceptions; while(e) { if(e->abc_exception->target) callcode(current, e->abc_exception->target->pos, 1, 0); e = e->next; } return current; } void stats_free(currentstats_t*stats) { if(stats) { free(stats->stack);stats->stack=0; free(stats); } } int code_dump(code_t*c) { code_t*cc = code_start(c); while(cc) { assert(!cc->next || cc->next->prev == cc); cc = cc->next; } return code_dump2(c, 0, 0, "", stdout); } int code_dump2(code_t*c, abc_exception_list_t*exceptions, abc_file_t*file, char*prefix, FILE*fo) { abc_exception_list_t*e = exceptions; c = code_start(c); currentstats_t*stats = code_get_stats(c, exceptions); int pos = 0; while(c) { U8 opcode = c->opcode; char found = 0; opcode_t*op = opcode_get(opcode); e = exceptions; while(e) { if(c==e->abc_exception->from) fprintf(fo, "%s TRY {\n", prefix); if(c==e->abc_exception->target) { char*s1 = multiname_tostring(e->abc_exception->exc_type); char*s2 = multiname_tostring(e->abc_exception->var_name); fprintf(fo, "%s CATCH(%s %s)\n", prefix, s1, s2); free(s1); free(s2); } e = e->next; } if(!op) { fprintf(stderr, "Can't parse opcode %02x.\n", opcode); return 0; } else { char*p = op->params; char first = 1; int i=0; if(stats) { int f = stats->stack[c->pos].flags; fprintf(fo, "%s%05d) %c %d:%d %s ", prefix, c->pos, (f&FLAG_ERROR)?'E':((f&FLAG_SEEN)?'+':'|'), stats->stack[c->pos].stackpos, stats->stack[c->pos].scopepos, op->name); } else { fprintf(fo, "%s%05d) ? ?:? %s ", prefix, c->pos, op->name); } while(*p) { void*data = c->data[i]; if(i>0) printf(", "); if(*p == 'n') { int n = (ptroff_t)data; fprintf(fo, "%d params", n); } else if(*p == '2') { multiname_t*n = (multiname_t*)data; char* m = multiname_tostring(n); fprintf(fo, "%s", m); free(m); } else if(*p == 'N') { namespace_t*ns = (namespace_t*)data; char* m = namespace_tostring(ns); fprintf(fo, "%s", m); free(m); } else if(*p == 'm') { abc_method_t*m = (abc_method_t*)data; fprintf(fo, "[method %08x %s]", m->index, m->name); } else if(*p == 'c') { abc_class_t*cls = (abc_class_t*)data; char*classname = multiname_tostring(cls->classname); fprintf(fo, "[classinfo %08x %s]", cls->index, classname); free(classname); } else if(*p == 'i') { abc_method_body_t*b = (abc_method_body_t*)data; fprintf(fo, "[methodbody]"); } else if(*p == 'u' || *p == 'I' || *p == 'U') { int n = (ptroff_t)data; fprintf(fo, "%d", n); } else if(*p == 'f') { double f = *(double*)data; fprintf(fo, "%f", f); } else if(*p == 'r') { int n = (ptroff_t)data; fprintf(fo, "r%d", n); } else if(*p == 'b') { int b = (signed char)(ptroff_t)data; fprintf(fo, "%d", b); } else if(*p == 'j') { if(c->branch) fprintf(fo, "->%d", c->branch->pos); else fprintf(fo, "%p", c->branch); } else if(*p == 's') { char*s = string_escape((string_t*)data); fprintf(fo, "\"%s\"", s); free(s); } else if(*p == 'D') { fprintf(fo, "[register %02x=%s]", (int)(ptroff_t)c->data[1], (char*)c->data[0]); } else if(*p == 'S') { lookupswitch_t*l = c->data[0]; fprintf(fo, "["); if(l->def) fprintf(fo, "default->%d", l->def->pos); else fprintf(fo, "default->00000000"); code_list_t*t = l->targets; while(t) { if(t->code) fprintf(fo, ",->%d", t->code->pos); else fprintf(fo, ",->00000000"); t = t->next; } fprintf(fo, "]"); } else { fprintf(stderr, "Can't parse opcode param type \"%c\"\n", *p); return 0; } p++; i++; first = 0; } fprintf(fo, "\n"); } e = exceptions; while(e) { if(c==e->abc_exception->to) { if(e->abc_exception->target) fprintf(fo, "%s } // END TRY (HANDLER: %d)\n", prefix, e->abc_exception->target->pos); else fprintf(fo, "%s } // END TRY (HANDLER: 00000000)\n", prefix); } e = e->next; } pos++; c = c->next; } stats_free(stats); return 1; } codestats_t* code_get_statistics(code_t*code, abc_exception_list_t*exceptions) { currentstats_t*current = code_get_stats(code, exceptions); if(!current) return 0; codestats_t*stats = rfx_calloc(sizeof(codestats_t)); stats->local_count = current->maxlocal; stats->max_stack = current->maxstack; stats->max_scope_depth = current->maxscope; stats->flags = current->flags; stats_free(current);current=0; return stats; } void codestats_free(codestats_t*s) { free(s); } code_t* add_opcode(code_t*atag, U8 op) { code_t*tmp = (code_t*)rfx_calloc(sizeof(code_t)); tmp->opcode = op; if(atag) { tmp->prev = atag; tmp->next = atag->next; if(tmp->next) tmp->next->prev = tmp; atag->next = tmp; } else { tmp->prev = 0; tmp->next = 0; } return tmp; } void codestats_print(codestats_t*stats) { printf("max_stack: %d\n", stats->max_stack); printf("local_count: %d\n", stats->local_count); printf("scope_depth: %d\n", stats->max_scope_depth); } code_t* code_end(code_t*code) { if(!code) return 0; while(code->next) code = code->next; return code; } code_t* code_start(code_t*code) { if(!code) return 0; while(code->prev) code = code->prev; return code; } code_t* code_append(code_t*code, code_t*toappend) { if(!code) return code_end(toappend); if(!toappend) return code_end(code); //find end of first list while(code->next) { code = code->next; } code_t*start=toappend; //and start of second list while(start->prev) { start = start->prev; } code->next = start; start->prev = code; return code_end(toappend); } lookupswitch_t*lookupswitch_dup(lookupswitch_t*l) { lookupswitch_t*n = malloc(sizeof(lookupswitch_t)); fprintf(stderr, "Error: lookupswitch dupping not supported yet\n"); n->targets = list_clone(l->targets); return 0; } code_t*code_dup(code_t*c) { if(!c) return 0; dict_t*pos2pos = dict_new2(&ptr_type); code_t*last = 0; c = code_start(c); code_t*start = 0; char does_branch = 0; while(c) { NEW(code_t, n); memcpy(n, c, sizeof(code_t)); if(!start) start=n; if(c->opcode == OPCODE_LABEL || c->opcode == OPCODE_NOP) { dict_put(pos2pos, c, n); } if(c->branch) { does_branch = 1; } opcode_t*op = opcode_get(c->opcode); char*p = op?op->params:""; int pos=0; while(*p) { if(*p == '2') { //multiname c->data[pos] = multiname_clone(c->data[pos]); } else if(*p == 'N') { //multiname c->data[pos] = namespace_clone(c->data[pos]); } else if(*p == 's') { c->data[pos] = string_dup3(c->data[pos]); } else if(*p == 'D') { c->data[pos] = strdup(c->data[pos]); } else if(*p == 'f') { double old = *(double*)c->data[pos]; c->data[pos] = malloc(sizeof(double)); *(double*)c->data[pos] = old; } else if(strchr("S", *p)) { c->data[pos] = lookupswitch_dup(c->data[pos]); } p++;pos++; } n->prev = last; if(last) { last->next = n; } last = n; c = c->next; } if(does_branch) { c = start; while(c) { if(c->branch) { code_t*target = dict_lookup(pos2pos, c->branch); if(!target) { fprintf(stderr, "Error: Can't find branch target in code_dup\n"); return 0; } c->branch = target; } c = c->next; } } dict_destroy(pos2pos); return last; } code_t*code_cut(code_t*c) { if(!c) return c; code_t*prev = c->prev; code_t*next = c->next; c->prev = 0; c->next = 0; if(prev) prev->next=next; if(next) next->prev=prev; code_free(c); if(next) return code_end(next); else return prev; } code_t*code_cutlast(code_t*c) { if(!c) return c; assert(!c->next); return code_cut(c); } char is_getlocal(code_t*c) { if(!c) return 0; if(c->opcode == OPCODE_GETLOCAL || c->opcode == OPCODE_GETLOCAL_0 || c->opcode == OPCODE_GETLOCAL_1 || c->opcode == OPCODE_GETLOCAL_2 || c->opcode == OPCODE_GETLOCAL_3) { return 1; } return 0; } code_t* cut_last_push(code_t*c) { assert(!c->next); while(c) { if(!c) break; opcode_t*op = opcode_get(c->opcode); /* cut conversion type operations */ if(op->stack_minus == -1 && op->stack_plus == 1 && !(op->flags)) { c = code_cutlast(c); continue; } /* cut any type of push */ else if(op->stack_minus == 0 && op->stack_plus == 1 && !(op->flags)) { return code_cutlast(c); } /* cut register lookups */ else if(c->opcode == OPCODE_GETLOCAL || c->opcode == OPCODE_GETLOCAL_0 || c->opcode == OPCODE_GETLOCAL_1 || c->opcode == OPCODE_GETLOCAL_2 || c->opcode == OPCODE_GETLOCAL_3) { return code_cutlast(c); } /* discard function call values */ else if(c->opcode == OPCODE_CALLPROPERTY) { c->opcode = OPCODE_CALLPROPVOID; return c; } else if(c->opcode == OPCODE_CALLSUPER) { c->opcode = OPCODE_CALLSUPERVOID; return c; } else if((c->opcode == OPCODE_NEWOBJECT || c->opcode == OPCODE_NEWARRAY) && !c->data[0]) { // we can discard these if they're not eating up stack parameters return code_cutlast(c); } else if(op->stack_minus ==0 && op->stack_plus == 0 && !(op->flags&~(OP_REGISTER|OP_SET_DXNS)) && c->prev) { // trim code *before* the kill, inclocal, declocal, dxns code_t*p = c->prev; p->next = 0; c->prev = 0; return code_append(cut_last_push(p), c); } else break; } c = abc_pop(c); return c; } swftools_0.9.2+git20130725.orig/lib/as3/builtin.h0000644000175000017500000000204112216332640020373 0ustar gawaingawain/* builtin.h Flash AVM2 ABC Actionscript standard library Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __builtin_h__ #define __builtin_h__ #include "../q.h" #include "../types.h" #include "registry.h" dict_t* builtin_getclasses(); #endif swftools_0.9.2+git20130725.orig/lib/as3/state.c0000644000175000017500000000426512216332640020052 0ustar gawaingawain#include "state.h" #include "common.h" state_t* state = 0; void new_state() { NEW(state_t, s); state_t*oldstate = state; if(state) memcpy(s, state, sizeof(state_t)); //shallow copy if(!s->imports) { s->imports = dict_new(); } if(!s->import_toplevel_packages) { s->import_toplevel_packages = dict_new(); } state = s; state->level++; state->has_own_imports = 0; state->vars = dict_new(); state->old = oldstate; state->new_vars = 0; state->namespaces = dict_new(); if(oldstate) state->active_namespace_urls = list_clone(oldstate->active_namespace_urls); } void state_destroy(state_t*state) { if(state->has_own_imports) { list_free(state->wildcard_imports); dict_destroy(state->imports);state->imports=0; } if(state->imports && (!state->old || state->old->imports!=state->imports)) { dict_destroy(state->imports);state->imports=0; } if(state->vars) { dict_destroy(state->vars);state->vars=0; } list_free(state->active_namespace_urls) state->active_namespace_urls = 0; free(state); } void old_state() { if(!state || !state->old) syntaxerror("invalid nesting"); state_t*leaving = state; state = state->old; if(as3_pass>1 && leaving->method && leaving->method != state->method && !leaving->method->inner) { methodstate_destroy(leaving->method);leaving->method=0; } if(as3_pass>1 && leaving->cls && leaving->cls != state->cls) { free(leaving->cls); leaving->cls=0; } state_destroy(leaving); } methodstate_t*methodstate_new() { NEW(methodstate_t,m); m->allvars = dict_new(); return m; } void methodstate_destroy(methodstate_t*m) { dict_destroy(m->unresolved_variables); m->unresolved_variables = 0; list_free(m->innerfunctions);m->innerfunctions=0; if(m->allvars) { DICT_ITERATE_DATA(m->allvars, void*, data) {free(data);} m->allvars = 0; } } dict_t*definitions=0; void as3_set_define(const char*c) { if(!definitions) definitions = dict_new(); if(!dict_contains(definitions,c)) dict_put(definitions,c,0); } swftools_0.9.2+git20130725.orig/lib/as3/tokenizer.yy.c0000644000175000017500000043042512216332640021405 0ustar gawaingawain#line 2 "tokenizer.yy.c" #line 4 "tokenizer.yy.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer as3__create_buffer #define yy_delete_buffer as3__delete_buffer #define yy_flex_debug as3__flex_debug #define yy_init_buffer as3__init_buffer #define yy_flush_buffer as3__flush_buffer #define yy_load_buffer_state as3__load_buffer_state #define yy_switch_to_buffer as3__switch_to_buffer #define yyin as3_in #define yyleng as3_leng #define yylex as3_lex #define yylineno as3_lineno #define yyout as3_out #define yyrestart as3_restart #define yytext as3_text #define yywrap as3_wrap #define yyalloc as3_alloc #define yyrealloc as3_realloc #define yyfree as3_free #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #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 as3_restart(as3_in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern yy_size_t as3_leng; extern FILE *as3_in, *as3_out; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up as3_text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up as3_text again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE 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. */ yy_size_t 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 getc() * 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; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* 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 as3_restart()), so that the user can continue scanning by * just pointing as3_in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when as3_text is formed. */ static char yy_hold_char; static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ yy_size_t as3_leng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow as3_wrap()'s to do buffer switches * instead of setting up a fresh as3_in. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void as3_restart (FILE *input_file ); void as3__switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE as3__create_buffer (FILE *file,int size ); void as3__delete_buffer (YY_BUFFER_STATE b ); void as3__flush_buffer (YY_BUFFER_STATE b ); void as3_push_buffer_state (YY_BUFFER_STATE new_buffer ); void as3_pop_buffer_state (void ); static void as3_ensure_buffer_stack (void ); static void as3__load_buffer_state (void ); static void as3__init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER as3__flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE as3__scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE as3__scan_string (yyconst char *yy_str ); YY_BUFFER_STATE as3__scan_bytes (yyconst char *bytes,yy_size_t len ); void *as3_alloc (yy_size_t ); void *as3_realloc (void *,yy_size_t ); void as3_free (void * ); #define yy_new_buffer as3__create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ as3_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ as3__create_buffer(as3_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ as3_ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ as3__create_buffer(as3_in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *as3_in = (FILE *) 0, *as3_out = (FILE *) 0; typedef int yy_state_type; extern int as3_lineno; int as3_lineno = 1; extern char *as3_text; #define yytext_ptr as3_text static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up as3_text. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ as3_leng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 130 #define YY_END_OF_BUFFER 131 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[705] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 130, 31, 127, 130, 127, 127, 127, 130, 127, 128, 126, 127, 127, 73, 127, 130, 130, 130, 75, 127, 127, 127, 125, 125, 126, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 29, 127, 126, 31, 130, 130, 125, 129, 31, 127, 129, 127, 127, 127, 129, 127, 128, 126, 127, 127, 73, 127, 129, 129, 129, 75, 127, 127, 127, 125, 125, 126, 127, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 28, 127, 126, 31, 129, 129, 125, 29, 127, 127, 73, 127, 129, 129, 129, 17, 17, 19, 20, 18, 16, 16, 129, 12, 15, 11, 14, 13, 10, 15, 15, 49, 0, 6, 0, 125, 0, 0, 61, 47, 64, 0, 0, 62, 56, 57, 55, 59, 72, 0, 3, 0, 60, 34, 34, 0, 0, 0, 0, 74, 0, 68, 54, 52, 53, 70, 0, 125, 0, 125, 125, 125, 58, 125, 124, 125, 125, 125, 125, 125, 44, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 125, 122, 121, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 63, 48, 125, 31, 0, 122, 0, 0, 0, 0, 0, 3, 23, 60, 0, 26, 26, 0, 0, 0, 0, 17, 0, 0, 9, 15, 0, 15, 50, 125, 0, 71, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 66, 51, 65, 69, 0, 0, 0, 0, 0, 0, 0, 125, 36, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 43, 125, 117, 125, 125, 125, 125, 125, 116, 125, 125, 125, 125, 125, 125, 125, 118, 125, 125, 125, 125, 125, 120, 125, 125, 115, 119, 125, 125, 125, 30, 125, 0, 26, 26, 0, 0, 27, 23, 0, 0, 0, 23, 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 2, 0, 33, 0, 32, 32, 0, 0, 67, 0, 0, 0, 0, 125, 125, 113, 125, 125, 125, 125, 125, 125, 125, 108, 112, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 111, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 110, 125, 125, 109, 125, 114, 125, 27, 0, 0, 0, 0, 23, 0, 23, 0, 0, 2, 0, 23, 23, 25, 0, 24, 24, 0, 0, 0, 0, 2, 37, 0, 39, 0, 0, 0, 125, 106, 103, 101, 102, 125, 125, 125, 125, 125, 105, 104, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 107, 125, 100, 125, 125, 45, 125, 25, 0, 24, 24, 0, 0, 2, 0, 23, 23, 0, 0, 0, 0, 0, 0, 38, 0, 0, 125, 125, 125, 93, 125, 125, 125, 125, 125, 98, 125, 125, 125, 125, 96, 125, 125, 125, 125, 95, 94, 97, 46, 99, 125, 125, 23, 0, 0, 0, 0, 0, 0, 125, 125, 88, 91, 92, 87, 125, 125, 125, 125, 125, 125, 125, 89, 90, 125, 125, 125, 23, 8, 21, 0, 0, 0, 40, 125, 83, 0, 125, 125, 86, 125, 125, 125, 85, 125, 84, 125, 125, 0, 125, 125, 0, 0, 41, 82, 0, 125, 125, 125, 125, 78, 80, 79, 81, 0, 0, 0, 0, 0, 125, 125, 125, 0, 0, 0, 0, 125, 77, 76, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 125, 0, 125, 125, 125, 0, 0, 0, 42, 42, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 0, 7, 0, 0, 0, 39, 5, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 22, 0, 7, 0, 38, 5, 38, 38, 0, 0, 0, 5, 0, 22, 0, 0, 0, 0, 40, 5, 40, 40, 41, 5, 41, 41, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 13, 17, 18, 19, 20, 21, 21, 22, 21, 21, 21, 21, 21, 21, 23, 13, 24, 25, 26, 13, 13, 27, 28, 29, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, 31, 28, 28, 28, 28, 28, 32, 28, 28, 28, 28, 28, 28, 33, 34, 35, 36, 37, 8, 38, 39, 40, 41, 42, 43, 44, 45, 46, 28, 47, 48, 49, 50, 51, 52, 28, 53, 54, 55, 56, 57, 58, 59, 60, 28, 61, 62, 63, 13, 8, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 64, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 65, 37, 37, 37, 66, 37, 37, 67, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 68, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 } ; static yyconst flex_int32_t yy_meta[69] = { 0, 1, 2, 3, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 6, 6, 6, 7, 8, 4, 8, 9, 9, 9, 9, 9, 9, 4, 10, 4, 4, 11, 9, 9, 9, 9, 12, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 13, 9, 8, 4, 4, 11, 11, 11, 11, 11 } ; static yyconst flex_int16_t yy_base[749] = { 0, 0, 1980, 68, 1979, 1963, 91, 122, 129, 150, 153, 214, 0, 2022, 3900, 3900, 1996, 147, 90, 1995, 144, 148, 3900, 3900, 1993, 143, 145, 143, 169, 265, 270, 275, 1994, 161, 1990, 146, 296, 300, 3900, 1944, 328, 138, 149, 153, 268, 299, 156, 293, 316, 256, 303, 272, 320, 326, 334, 345, 348, 3900, 286, 3900, 286, 1903, 1896, 354, 3900, 3900, 1931, 159, 298, 1903, 283, 356, 3900, 3900, 1896, 393, 399, 405, 413, 413, 419, 424, 1887, 424, 1878, 380, 397, 405, 3900, 1875, 0, 399, 416, 420, 437, 441, 446, 455, 464, 403, 469, 459, 473, 479, 484, 492, 495, 3900, 360, 3900, 428, 1818, 1814, 501, 3900, 164, 451, 538, 538, 146, 1811, 0, 0, 0, 1827, 3900, 3900, 3900, 3900, 1806, 3900, 1753, 3900, 3900, 3900, 3900, 1717, 297, 1712, 429, 3900, 1659, 0, 544, 547, 3900, 3900, 3900, 477, 1646, 3900, 3900, 3900, 3900, 3900, 1618, 550, 572, 532, 3900, 3900, 562, 1542, 568, 1572, 1526, 3900, 1510, 1502, 3900, 1455, 3900, 536, 591, 526, 595, 532, 549, 570, 3900, 562, 556, 565, 567, 573, 575, 587, 578, 589, 593, 591, 597, 612, 614, 603, 619, 621, 617, 625, 627, 630, 636, 634, 645, 652, 655, 650, 658, 660, 663, 669, 667, 678, 672, 674, 683, 688, 691, 685, 694, 697, 699, 3900, 3900, 702, 3900, 1411, 706, 742, 747, 752, 755, 629, 780, 812, 752, 759, 3900, 770, 1388, 780, 1421, 179, 0, 486, 1409, 3900, 1388, 0, 1381, 3900, 0, 783, 3900, 3900, 806, 821, 872, 1377, 754, 3900, 806, 857, 899, 962, 1370, 1325, 3900, 3900, 3900, 1311, 1244, 987, 1209, 1206, 1138, 1144, 1104, 726, 734, 776, 780, 793, 840, 766, 828, 946, 842, 955, 844, 952, 959, 784, 964, 832, 967, 929, 978, 961, 980, 985, 950, 957, 989, 982, 993, 995, 1002, 1005, 1007, 1011, 1013, 1020, 1016, 1024, 1030, 1026, 1034, 1039, 1032, 1036, 1041, 1043, 1053, 3900, 1051, 1080, 3900, 1088, 1091, 1142, 3900, 0, 1113, 1122, 1142, 1123, 1147, 0, 1163, 1098, 1113, 1223, 1286, 1114, 1112, 1092, 0, 495, 1168, 1312, 1084, 1322, 3900, 0, 3900, 0, 997, 1014, 3900, 0, 966, 890, 887, 1105, 1120, 1085, 1132, 1099, 1110, 1134, 1264, 1145, 1279, 1125, 1253, 1285, 1292, 1302, 1289, 1298, 1276, 1315, 1304, 1306, 1308, 1310, 1313, 1332, 1334, 1329, 1327, 1321, 1338, 1323, 1349, 1340, 1325, 1346, 1352, 1354, 1359, 1356, 1361, 3900, 1398, 1401, 1443, 1506, 0, 1525, 1569, 1532, 1559, 873, 1629, 1663, 0, 3900, 0, 3900, 0, 873, 871, 815, 1423, 3900, 3900, 804, 3900, 0, 758, 750, 1484, 1375, 1377, 1379, 1381, 1495, 1502, 1504, 1529, 1511, 1383, 1532, 1535, 1538, 1549, 1584, 1592, 1587, 1552, 1597, 1603, 1599, 1692, 1694, 1605, 1696, 1500, 1688, 1523, 1700, 1698, 1607, 1714, 3900, 0, 3900, 0, 1755, 1760, 0, 1780, 0, 0, 779, 318, 768, 374, 739, 717, 3900, 670, 660, 1685, 1724, 1718, 1712, 1747, 1732, 1737, 1751, 1754, 1739, 1758, 1765, 1768, 1771, 1762, 1776, 1778, 1781, 1773, 1783, 1785, 1787, 1789, 1791, 1796, 1805, 681, 467, 1110, 654, 627, 592, 0, 1798, 1812, 1858, 1802, 1814, 1816, 1821, 1823, 1830, 1838, 1832, 1841, 1845, 1835, 1843, 1848, 1851, 1904, 598, 3900, 3900, 578, 544, 0, 3900, 1860, 1862, 1915, 1870, 1873, 1877, 1879, 1888, 1893, 1890, 1898, 1895, 1909, 1912, 1973, 2040, 1906, 519, 512, 3900, 1901, 493, 1934, 1936, 1919, 1938, 1940, 1944, 1946, 1948, 2107, 627, 2112, 2123, 2116, 2189, 457, 0, 481, 451, 430, 381, 1955, 1951, 1953, 2256, 2260, 2264, 2268, 2272, 1977, 2276, 409, 1776, 2280, 2285, 2299, 2291, 2304, 2371, 2357, 2375, 2382, 2386, 2390, 2404, 2399, 2456, 2471, 2477, 2482, 2486, 0, 2493, 0, 346, 2560, 354, 342, 1149, 3900, 1959, 285, 2627, 2631, 2635, 254, 312, 1952, 2639, 2643, 2647, 2651, 2655, 2667, 225, 2734, 2659, 2725, 2759, 2770, 2776, 2813, 2782, 2805, 2849, 2827, 2853, 220, 2860, 0, 0, 0, 144, 1734, 3900, 1822, 137, 2871, 2884, 2893, 2897, 2901, 2968, 2941, 2950, 3007, 3016, 3031, 3038, 3023, 3050, 3074, 3044, 0, 3900, 1910, 143, 1984, 3056, 3089, 3122, 3126, 3130, 3140, 2122, 3144, 3157, 138, 1988, 3164, 3231, 3294, 3196, 3210, 3214, 3267, 3280, 3284, 3319, 3333, 3900, 3400, 3413, 3418, 3431, 3444, 3456, 3464, 3477, 3490, 3503, 3516, 3524, 3532, 3545, 3557, 3570, 3579, 3592, 3605, 3617, 3626, 3634, 3647, 3660, 3668, 3673, 3686, 3699, 3712, 3720, 3733, 3746, 3759, 3767, 3775, 3783, 3796, 3808, 3821, 3834, 3847, 3860, 3873, 3886 } ; static yyconst flex_int16_t yy_def[749] = { 0, 704, 1, 704, 3, 3, 3, 3, 3, 705, 705, 704, 11, 704, 704, 704, 704, 706, 707, 704, 704, 708, 704, 704, 704, 704, 704, 704, 704, 709, 709, 709, 704, 704, 704, 704, 710, 710, 704, 704, 710, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 704, 704, 40, 711, 711, 40, 704, 704, 704, 706, 707, 704, 704, 708, 704, 704, 704, 704, 704, 704, 712, 713, 713, 713, 704, 704, 704, 704, 40, 40, 704, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 704, 704, 40, 711, 711, 40, 704, 704, 704, 704, 704, 31, 31, 31, 714, 714, 704, 704, 704, 704, 704, 715, 704, 716, 704, 704, 704, 704, 716, 716, 704, 706, 704, 706, 717, 707, 707, 704, 704, 704, 708, 708, 704, 704, 704, 704, 704, 704, 718, 719, 720, 704, 704, 718, 31, 704, 721, 704, 704, 704, 704, 704, 704, 704, 704, 704, 40, 704, 40, 40, 40, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 704, 40, 704, 711, 40, 704, 722, 722, 723, 712, 724, 720, 712, 712, 704, 723, 81, 704, 725, 704, 714, 704, 715, 704, 716, 726, 716, 704, 717, 707, 704, 704, 719, 719, 727, 704, 720, 704, 718, 718, 704, 721, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 40, 728, 704, 728, 704, 729, 704, 730, 724, 724, 731, 730, 724, 234, 712, 723, 723, 704, 725, 704, 704, 704, 726, 732, 719, 727, 704, 719, 704, 263, 704, 263, 704, 704, 704, 733, 704, 704, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 728, 728, 704, 729, 730, 734, 719, 724, 731, 730, 724, 704, 339, 704, 342, 704, 342, 735, 736, 704, 719, 704, 704, 704, 704, 737, 704, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 704, 407, 704, 407, 724, 724, 730, 724, 411, 416, 735, 735, 736, 736, 704, 704, 704, 704, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 339, 735, 736, 704, 704, 704, 738, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 411, 704, 704, 704, 704, 739, 704, 40, 40, 704, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 740, 704, 40, 704, 741, 704, 40, 704, 40, 40, 40, 40, 40, 40, 40, 40, 742, 743, 744, 742, 742, 704, 578, 558, 745, 741, 741, 704, 40, 40, 40, 704, 704, 742, 742, 742, 743, 704, 743, 746, 746, 744, 744, 742, 744, 744, 704, 704, 742, 742, 742, 742, 742, 742, 747, 704, 704, 742, 578, 742, 578, 578, 704, 745, 745, 741, 704, 40, 704, 742, 704, 704, 704, 746, 746, 704, 704, 742, 742, 746, 744, 704, 742, 742, 742, 742, 742, 740, 740, 742, 748, 744, 742, 742, 704, 742, 578, 578, 619, 578, 745, 704, 741, 704, 742, 704, 704, 742, 742, 639, 742, 742, 742, 743, 748, 748, 748, 748, 747, 742, 619, 704, 745, 741, 741, 704, 704, 742, 742, 742, 742, 743, 743, 748, 745, 745, 742, 639, 639, 704, 704, 742, 742, 704, 704, 742, 742, 0, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704 } ; static yyconst flex_int16_t yy_nxt[3969] = { 0, 14, 15, 15, 15, 15, 16, 17, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 36, 36, 37, 36, 22, 14, 38, 39, 36, 40, 41, 42, 43, 44, 45, 46, 36, 47, 36, 36, 36, 48, 49, 50, 51, 52, 53, 54, 55, 56, 36, 36, 57, 58, 59, 60, 36, 36, 61, 62, 64, 65, 15, 65, 65, 66, 67, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 86, 86, 86, 87, 86, 72, 64, 88, 89, 86, 90, 91, 92, 93, 94, 95, 96, 86, 97, 86, 86, 86, 98, 99, 100, 101, 102, 103, 104, 105, 106, 86, 86, 107, 108, 109, 110, 86, 86, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 115, 116, 117, 118, 119, 120, 121, 114, 123, 140, 146, 123, 143, 144, 151, 140, 155, 153, 156, 156, 156, 140, 167, 152, 147, 154, 171, 172, 621, 124, 113, 125, 124, 583, 125, 151, 141, 149, 114, 157, 168, 169, 183, 158, 152, 114, 182, 174, 141, 159, 186, 344, 184, 196, 704, 185, 632, 174, 174, 187, 164, 174, 174, 677, 174, 174, 126, 266, 188, 126, 64, 127, 128, 127, 127, 64, 129, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 130, 131, 131, 131, 64, 132, 133, 134, 131, 131, 131, 131, 131, 131, 64, 64, 64, 64, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 135, 64, 64, 136, 131, 131, 137, 131, 161, 612, 162, 162, 162, 161, 603, 162, 162, 162, 161, 146, 162, 162, 162, 173, 173, 173, 173, 173, 173, 173, 173, 189, 163, 147, 174, 174, 222, 163, 204, 208, 596, 190, 163, 627, 175, 248, 174, 174, 175, 164, 174, 174, 191, 165, 704, 173, 173, 173, 173, 704, 512, 197, 192, 178, 174, 174, 205, 198, 199, 704, 193, 174, 200, 223, 588, 194, 175, 174, 174, 201, 195, 206, 174, 202, 207, 176, 249, 209, 177, 176, 143, 144, 177, 140, 174, 174, 213, 203, 174, 174, 210, 211, 657, 212, 214, 174, 180, 181, 218, 216, 222, 215, 174, 217, 621, 149, 513, 176, 220, 221, 177, 219, 197, 174, 174, 704, 174, 174, 198, 227, 171, 172, 174, 200, 151, 653, 228, 593, 229, 230, 230, 153, 228, 152, 229, 230, 230, 223, 155, 154, 231, 231, 231, 233, 623, 242, 238, 234, 239, 239, 239, 140, 238, 235, 239, 239, 239, 238, 178, 239, 239, 239, 236, 168, 169, 174, 174, 182, 174, 183, 240, 174, 174, 174, 174, 204, 240, 186, 141, 184, 622, 240, 185, 153, 174, 174, 187, 241, 174, 174, 189, 154, 165, 704, 192, 188, 174, 174, 704, 512, 190, 583, 193, 196, 140, 174, 174, 194, 537, 174, 174, 191, 195, 197, 174, 174, 208, 201, 345, 198, 199, 202, 205, 174, 200, 425, 149, 174, 174, 426, 209, 621, 174, 174, 346, 203, 619, 206, 174, 213, 207, 174, 174, 210, 211, 218, 212, 214, 174, 216, 260, 260, 174, 217, 215, 220, 221, 584, 219, 197, 174, 174, 583, 174, 174, 198, 227, 581, 157, 174, 200, 155, 158, 156, 156, 156, 269, 270, 159, 142, 142, 142, 142, 142, 142, 156, 156, 156, 255, 255, 255, 255, 561, 142, 174, 174, 142, 261, 261, 261, 174, 174, 257, 262, 262, 262, 258, 163, 173, 173, 173, 173, 272, 272, 272, 272, 279, 174, 174, 163, 560, 280, 281, 704, 174, 174, 284, 252, 278, 175, 174, 174, 258, 174, 174, 174, 282, 283, 174, 174, 285, 174, 174, 174, 174, 286, 174, 174, 289, 594, 287, 273, 541, 274, 288, 174, 174, 174, 174, 174, 290, 174, 174, 332, 275, 174, 174, 291, 276, 540, 173, 294, 174, 271, 272, 292, 595, 277, 236, 293, 174, 174, 174, 174, 295, 174, 174, 174, 174, 174, 174, 296, 297, 174, 174, 174, 298, 299, 174, 174, 300, 539, 174, 174, 174, 174, 301, 302, 303, 304, 305, 306, 308, 174, 174, 536, 307, 517, 174, 174, 174, 174, 311, 174, 174, 516, 174, 174, 174, 174, 309, 174, 174, 310, 312, 174, 174, 174, 174, 313, 314, 174, 174, 174, 318, 315, 174, 174, 319, 316, 317, 174, 174, 320, 174, 321, 174, 174, 322, 174, 174, 325, 174, 174, 515, 174, 174, 174, 174, 323, 174, 174, 260, 260, 174, 298, 299, 326, 326, 326, 328, 514, 230, 230, 230, 328, 332, 230, 230, 230, 231, 231, 231, 339, 174, 174, 333, 333, 255, 333, 479, 236, 174, 174, 329, 340, 340, 340, 236, 329, 335, 477, 240, 484, 336, 341, 341, 341, 142, 142, 142, 330, 255, 255, 255, 255, 704, 240, 483, 337, 260, 260, 142, 365, 174, 368, 348, 255, 255, 255, 255, 261, 261, 261, 174, 174, 481, 364, 174, 174, 366, 348, 174, 377, 338, 338, 338, 338, 338, 338, 480, 174, 174, 163, 704, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 349, 349, 349, 349, 262, 262, 262, 367, 174, 369, 370, 372, 174, 174, 350, 479, 374, 477, 351, 352, 174, 174, 174, 174, 174, 174, 704, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, 354, 354, 354, 353, 353, 353, 353, 354, 354, 354, 354, 354, 354, 353, 432, 353, 353, 431, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 353, 353, 353, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 356, 355, 174, 174, 371, 355, 355, 355, 355, 272, 272, 272, 272, 373, 375, 355, 385, 355, 355, 174, 174, 376, 378, 174, 174, 174, 174, 379, 174, 174, 174, 174, 174, 174, 174, 174, 382, 174, 174, 430, 174, 174, 383, 355, 355, 355, 380, 384, 273, 381, 274, 174, 174, 174, 174, 387, 174, 386, 174, 174, 388, 275, 174, 174, 428, 276, 174, 174, 174, 174, 427, 272, 389, 391, 277, 174, 174, 390, 174, 174, 174, 174, 394, 392, 174, 174, 174, 174, 393, 174, 174, 395, 397, 174, 174, 396, 398, 174, 174, 174, 174, 399, 400, 174, 174, 174, 174, 174, 174, 174, 174, 401, 174, 174, 174, 174, 174, 174, 402, 403, 326, 326, 326, 352, 174, 174, 174, 174, 405, 405, 405, 406, 406, 406, 333, 333, 255, 333, 340, 340, 340, 424, 329, 333, 333, 255, 333, 513, 410, 423, 329, 422, 411, 341, 341, 341, 538, 410, 174, 174, 240, 411, 352, 412, 412, 349, 412, 337, 333, 333, 255, 333, 174, 436, 433, 704, 337, 413, 174, 174, 407, 414, 410, 174, 174, 437, 416, 434, 272, 255, 255, 255, 255, 174, 174, 658, 415, 435, 174, 174, 438, 337, 332, 348, 659, 174, 174, 174, 174, 363, 417, 417, 417, 417, 417, 417, 362, 236, 174, 174, 440, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 419, 419, 419, 418, 418, 418, 418, 419, 419, 419, 419, 419, 419, 418, 361, 418, 418, 360, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, 418, 418, 418, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 421, 420, 174, 174, 173, 420, 420, 420, 420, 349, 349, 349, 349, 174, 174, 420, 439, 420, 420, 255, 255, 255, 255, 350, 441, 447, 174, 351, 174, 174, 443, 442, 359, 348, 174, 174, 446, 258, 174, 174, 445, 174, 174, 420, 420, 420, 444, 174, 174, 448, 358, 174, 174, 449, 174, 174, 450, 174, 174, 174, 174, 451, 452, 174, 174, 174, 453, 455, 454, 456, 457, 174, 459, 174, 174, 174, 174, 174, 174, 174, 458, 174, 174, 174, 174, 460, 357, 174, 174, 174, 174, 463, 352, 462, 461, 174, 174, 464, 174, 174, 248, 174, 174, 174, 174, 174, 174, 248, 174, 174, 174, 174, 246, 465, 405, 405, 405, 406, 406, 406, 255, 255, 255, 255, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 348, 342, 329, 704, 351, 704, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 467, 467, 467, 466, 466, 466, 466, 467, 467, 467, 467, 467, 467, 466, 324, 466, 466, 268, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 466, 466, 466, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 469, 468, 485, 267, 352, 468, 468, 468, 468, 333, 333, 255, 333, 174, 174, 468, 471, 468, 468, 266, 472, 486, 488, 410, 174, 174, 487, 411, 490, 174, 174, 174, 174, 174, 174, 473, 412, 412, 349, 412, 174, 174, 337, 468, 468, 468, 255, 255, 255, 255, 413, 489, 174, 174, 414, 265, 491, 492, 174, 174, 348, 174, 174, 493, 174, 174, 263, 174, 174, 415, 499, 704, 474, 474, 474, 474, 474, 474, 174, 174, 494, 174, 174, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 333, 333, 255, 333, 495, 496, 253, 174, 174, 498, 174, 174, 497, 500, 410, 174, 174, 501, 416, 148, 174, 174, 174, 174, 502, 505, 174, 174, 174, 174, 174, 174, 139, 337, 333, 333, 255, 333, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 410, 334, 334, 334, 411, 334, 334, 334, 334, 334, 334, 334, 475, 475, 475, 475, 475, 475, 334, 337, 334, 334, 334, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 334, 334, 334, 334, 334, 334, 334, 334, 503, 507, 504, 518, 506, 250, 174, 174, 248, 174, 174, 508, 509, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 510, 333, 333, 255, 333, 678, 333, 333, 255, 333, 174, 174, 174, 174, 679, 410, 174, 174, 520, 336, 410, 248, 174, 174, 414, 519, 333, 333, 255, 333, 174, 522, 521, 594, 337, 174, 174, 174, 174, 337, 410, 525, 523, 526, 511, 174, 174, 524, 527, 174, 174, 528, 174, 174, 529, 630, 174, 174, 246, 337, 174, 174, 530, 174, 174, 531, 174, 174, 532, 174, 174, 174, 174, 533, 174, 174, 174, 174, 244, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 534, 535, 680, 174, 174, 174, 174, 543, 544, 174, 174, 681, 174, 174, 545, 545, 545, 545, 704, 174, 174, 174, 174, 174, 174, 548, 550, 549, 174, 174, 174, 174, 551, 226, 552, 553, 225, 174, 174, 174, 174, 554, 174, 174, 555, 174, 174, 556, 174, 174, 174, 174, 174, 174, 179, 174, 174, 170, 174, 174, 557, 557, 557, 557, 166, 174, 174, 174, 563, 174, 174, 173, 173, 173, 173, 150, 546, 174, 174, 547, 174, 174, 145, 565, 174, 174, 174, 174, 567, 569, 691, 566, 175, 568, 570, 174, 174, 174, 174, 692, 174, 174, 174, 174, 571, 174, 174, 572, 174, 174, 138, 174, 174, 174, 174, 226, 174, 174, 594, 174, 174, 225, 558, 179, 580, 559, 174, 586, 564, 557, 557, 557, 557, 173, 574, 587, 271, 585, 594, 575, 630, 174, 174, 174, 174, 174, 174, 174, 174, 565, 576, 174, 174, 174, 174, 174, 174, 624, 174, 174, 174, 174, 174, 174, 680, 595, 174, 174, 691, 170, 597, 166, 150, 622, 145, 138, 704, 657, 114, 113, 63, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 557, 704, 704, 577, 573, 557, 557, 557, 557, 573, 574, 573, 573, 573, 573, 575, 573, 573, 573, 573, 573, 573, 573, 578, 578, 578, 576, 573, 573, 573, 578, 578, 578, 578, 578, 578, 573, 578, 573, 573, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 573, 573, 573, 558, 578, 578, 579, 578, 588, 589, 588, 590, 596, 597, 589, 597, 598, 588, 589, 588, 590, 704, 704, 600, 603, 604, 603, 605, 594, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 601, 704, 704, 704, 704, 704, 704, 704, 704, 704, 595, 704, 704, 704, 704, 704, 704, 704, 606, 704, 607, 704, 704, 704, 704, 590, 704, 704, 592, 704, 598, 608, 704, 602, 611, 609, 704, 592, 704, 704, 670, 605, 704, 704, 610, 612, 613, 612, 614, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 615, 615, 615, 616, 591, 591, 591, 615, 615, 615, 615, 615, 615, 591, 615, 591, 591, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 591, 591, 591, 617, 615, 615, 618, 615, 588, 589, 588, 588, 588, 589, 588, 588, 588, 589, 588, 590, 588, 589, 588, 590, 588, 589, 588, 590, 627, 628, 627, 627, 597, 589, 597, 597, 596, 597, 589, 597, 598, 704, 594, 632, 633, 632, 634, 600, 704, 704, 596, 597, 589, 597, 598, 596, 597, 636, 597, 598, 704, 600, 704, 704, 630, 704, 704, 704, 704, 601, 588, 704, 704, 625, 588, 704, 704, 625, 590, 704, 704, 592, 590, 601, 704, 592, 626, 704, 704, 592, 627, 704, 704, 629, 597, 704, 704, 631, 704, 598, 704, 704, 602, 704, 704, 634, 704, 704, 635, 603, 604, 603, 603, 598, 704, 704, 602, 704, 598, 704, 704, 602, 596, 597, 589, 597, 598, 603, 604, 603, 603, 704, 704, 600, 603, 604, 603, 605, 588, 589, 588, 590, 588, 589, 588, 590, 704, 704, 273, 704, 274, 588, 589, 588, 590, 601, 588, 589, 588, 590, 704, 275, 704, 704, 704, 276, 273, 704, 274, 704, 704, 603, 704, 606, 638, 607, 704, 704, 704, 275, 704, 704, 704, 276, 704, 637, 608, 639, 602, 603, 609, 640, 638, 704, 642, 704, 605, 704, 704, 610, 590, 704, 704, 592, 590, 704, 704, 592, 588, 589, 588, 590, 641, 590, 704, 704, 592, 704, 590, 704, 704, 592, 573, 644, 645, 644, 611, 704, 647, 612, 613, 612, 612, 648, 612, 613, 612, 612, 612, 613, 612, 614, 704, 704, 649, 603, 604, 603, 605, 704, 175, 704, 704, 704, 704, 175, 704, 704, 704, 616, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 643, 704, 704, 592, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 606, 611, 607, 704, 650, 704, 704, 612, 704, 704, 651, 704, 612, 608, 704, 651, 614, 609, 704, 652, 704, 704, 704, 605, 704, 704, 610, 573, 644, 645, 644, 611, 646, 647, 646, 646, 646, 646, 648, 646, 646, 646, 646, 646, 646, 646, 654, 654, 654, 649, 646, 646, 646, 654, 654, 654, 654, 654, 654, 646, 654, 646, 646, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 646, 646, 646, 655, 654, 654, 656, 654, 588, 589, 588, 590, 627, 628, 627, 627, 627, 628, 627, 627, 632, 633, 632, 632, 632, 633, 632, 632, 632, 633, 632, 634, 588, 589, 588, 590, 597, 589, 597, 597, 588, 589, 588, 590, 704, 704, 594, 596, 597, 589, 597, 598, 704, 704, 704, 704, 704, 704, 600, 704, 704, 704, 704, 704, 704, 704, 704, 704, 630, 704, 590, 704, 704, 592, 627, 704, 704, 629, 627, 704, 601, 629, 632, 704, 704, 660, 632, 704, 704, 660, 634, 666, 704, 635, 661, 704, 704, 592, 597, 704, 704, 631, 590, 704, 704, 592, 588, 589, 588, 590, 598, 704, 704, 602, 429, 662, 663, 662, 664, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 704, 704, 704, 665, 665, 665, 665, 588, 589, 588, 590, 704, 704, 665, 704, 665, 665, 667, 603, 604, 603, 605, 704, 704, 644, 645, 644, 644, 704, 574, 588, 589, 588, 590, 575, 590, 704, 704, 592, 704, 704, 665, 665, 665, 590, 576, 704, 592, 704, 704, 704, 668, 593, 670, 589, 670, 671, 606, 600, 607, 704, 644, 645, 644, 644, 704, 574, 704, 704, 590, 608, 575, 592, 704, 609, 603, 604, 603, 605, 704, 605, 704, 576, 610, 704, 673, 644, 704, 704, 669, 704, 704, 590, 704, 704, 592, 596, 597, 589, 597, 598, 588, 589, 588, 590, 704, 704, 600, 588, 589, 588, 590, 704, 704, 606, 671, 607, 704, 674, 632, 633, 632, 634, 644, 704, 704, 669, 608, 704, 601, 704, 609, 588, 589, 588, 588, 704, 605, 704, 704, 610, 588, 589, 588, 588, 588, 589, 588, 590, 588, 589, 588, 590, 704, 704, 704, 704, 704, 704, 598, 704, 704, 602, 675, 704, 704, 592, 704, 704, 704, 676, 704, 704, 592, 704, 704, 704, 704, 704, 704, 704, 634, 704, 704, 635, 704, 704, 704, 704, 588, 589, 588, 590, 704, 588, 704, 704, 625, 588, 589, 588, 590, 704, 588, 704, 704, 625, 590, 704, 704, 592, 590, 704, 704, 592, 482, 682, 683, 682, 684, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 704, 704, 704, 685, 685, 685, 685, 704, 686, 704, 687, 704, 704, 685, 704, 685, 685, 590, 704, 704, 592, 588, 589, 588, 590, 704, 590, 704, 704, 592, 670, 589, 670, 670, 704, 594, 593, 670, 689, 670, 671, 685, 685, 685, 593, 670, 589, 670, 671, 704, 600, 593, 670, 589, 670, 671, 704, 600, 612, 613, 612, 614, 595, 593, 670, 589, 670, 671, 704, 600, 588, 589, 588, 588, 704, 704, 704, 673, 704, 616, 704, 704, 704, 675, 673, 704, 592, 573, 644, 645, 644, 611, 670, 647, 704, 688, 673, 704, 648, 671, 704, 704, 674, 588, 589, 588, 588, 671, 704, 649, 674, 704, 704, 704, 671, 704, 704, 674, 704, 704, 614, 704, 704, 652, 704, 704, 690, 704, 704, 674, 704, 704, 588, 704, 704, 625, 588, 589, 588, 590, 588, 589, 588, 590, 588, 589, 588, 590, 704, 704, 611, 704, 704, 650, 588, 589, 588, 590, 670, 589, 670, 670, 704, 594, 704, 588, 704, 704, 625, 704, 593, 670, 589, 670, 671, 704, 600, 704, 588, 589, 588, 590, 693, 704, 704, 704, 704, 704, 704, 704, 595, 704, 704, 704, 694, 704, 704, 704, 590, 704, 704, 592, 590, 673, 704, 592, 590, 704, 704, 592, 588, 589, 588, 588, 704, 704, 590, 704, 704, 592, 670, 695, 704, 688, 588, 589, 588, 588, 588, 589, 588, 590, 704, 671, 704, 704, 674, 704, 704, 704, 590, 704, 704, 592, 542, 696, 697, 696, 698, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 704, 704, 704, 699, 699, 699, 699, 704, 704, 588, 704, 704, 625, 699, 704, 699, 699, 704, 588, 589, 588, 590, 704, 588, 704, 704, 625, 590, 704, 704, 592, 588, 589, 588, 588, 588, 589, 588, 588, 704, 704, 699, 699, 699, 562, 700, 701, 700, 702, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 704, 704, 704, 703, 703, 703, 703, 588, 589, 588, 590, 704, 704, 703, 704, 703, 703, 590, 704, 704, 592, 588, 589, 588, 590, 704, 704, 704, 704, 704, 588, 704, 704, 625, 588, 704, 704, 625, 704, 704, 704, 703, 703, 703, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 590, 704, 704, 592, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 590, 704, 704, 592, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 139, 139, 704, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 142, 704, 142, 142, 142, 148, 148, 704, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 160, 160, 160, 160, 160, 160, 160, 160, 704, 704, 704, 160, 160, 174, 174, 704, 704, 174, 174, 704, 174, 174, 174, 174, 174, 224, 704, 704, 224, 224, 224, 224, 224, 232, 232, 704, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 237, 237, 237, 237, 237, 237, 237, 237, 704, 704, 704, 237, 237, 243, 243, 243, 243, 243, 243, 243, 704, 243, 243, 243, 243, 243, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 247, 247, 704, 247, 704, 247, 247, 247, 251, 704, 704, 251, 251, 251, 251, 251, 254, 254, 254, 254, 254, 254, 254, 254, 704, 704, 704, 254, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 264, 264, 704, 704, 264, 704, 704, 264, 264, 327, 327, 327, 327, 327, 327, 327, 327, 704, 704, 704, 327, 327, 331, 331, 331, 331, 331, 331, 331, 331, 704, 704, 704, 331, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 343, 343, 704, 704, 343, 704, 704, 343, 343, 347, 704, 704, 347, 704, 347, 347, 347, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 404, 404, 404, 404, 404, 404, 404, 404, 704, 704, 704, 404, 408, 408, 704, 704, 408, 704, 704, 408, 408, 409, 704, 704, 409, 409, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 429, 429, 429, 429, 429, 704, 429, 429, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 482, 482, 482, 482, 482, 704, 482, 482, 542, 542, 542, 542, 542, 704, 542, 542, 562, 562, 562, 562, 562, 704, 562, 562, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 593, 593, 704, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 596, 596, 704, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 13, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704 } ; static yyconst flex_int16_t yy_chk[3969] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 6, 9, 17, 20, 10, 18, 18, 25, 21, 27, 26, 27, 27, 27, 67, 33, 25, 20, 26, 35, 35, 691, 9, 8, 9, 10, 680, 10, 115, 17, 21, 7, 28, 33, 33, 42, 28, 115, 8, 41, 41, 67, 28, 43, 242, 42, 46, 119, 42, 660, 42, 42, 43, 119, 43, 43, 656, 46, 46, 9, 242, 43, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 29, 651, 29, 29, 29, 30, 638, 30, 30, 30, 31, 70, 31, 31, 31, 36, 36, 36, 36, 37, 37, 37, 37, 44, 29, 70, 49, 49, 58, 30, 49, 51, 630, 44, 31, 629, 36, 137, 44, 44, 37, 29, 51, 51, 44, 31, 30, 40, 40, 40, 40, 31, 477, 47, 45, 37, 60, 60, 50, 47, 47, 477, 45, 47, 47, 58, 625, 45, 40, 45, 45, 48, 45, 50, 50, 48, 50, 36, 137, 52, 36, 37, 68, 68, 37, 71, 48, 48, 53, 48, 52, 52, 52, 52, 621, 52, 53, 53, 40, 40, 55, 54, 108, 53, 54, 54, 620, 71, 479, 40, 56, 56, 40, 55, 63, 55, 55, 479, 56, 56, 63, 63, 85, 85, 63, 63, 75, 618, 75, 595, 75, 75, 75, 76, 76, 75, 76, 76, 76, 108, 77, 76, 77, 77, 77, 78, 584, 83, 79, 78, 79, 79, 79, 139, 80, 78, 80, 80, 80, 81, 87, 81, 81, 81, 78, 83, 83, 86, 86, 91, 91, 92, 79, 99, 99, 87, 87, 99, 80, 93, 139, 92, 583, 81, 92, 116, 92, 92, 93, 79, 93, 93, 94, 116, 81, 80, 95, 93, 110, 110, 81, 512, 94, 582, 95, 96, 148, 94, 94, 95, 512, 95, 95, 94, 95, 97, 96, 96, 101, 98, 244, 97, 97, 98, 100, 97, 97, 348, 148, 101, 101, 348, 102, 581, 98, 98, 244, 98, 579, 100, 100, 103, 100, 102, 102, 102, 102, 105, 102, 103, 103, 104, 158, 158, 104, 104, 103, 106, 106, 564, 105, 113, 105, 105, 561, 106, 106, 113, 113, 560, 118, 113, 113, 117, 118, 117, 117, 117, 172, 172, 118, 143, 143, 143, 144, 144, 144, 156, 156, 156, 157, 157, 157, 157, 540, 143, 174, 174, 144, 161, 161, 161, 176, 176, 157, 163, 163, 163, 157, 156, 173, 173, 173, 173, 175, 175, 175, 175, 178, 177, 177, 161, 539, 180, 182, 143, 181, 181, 184, 144, 177, 173, 180, 180, 536, 182, 182, 183, 183, 183, 178, 178, 185, 184, 184, 185, 185, 186, 187, 187, 189, 574, 186, 175, 516, 175, 188, 186, 186, 188, 188, 190, 190, 189, 189, 232, 175, 191, 191, 191, 175, 515, 173, 194, 194, 173, 175, 192, 574, 175, 232, 193, 192, 192, 193, 193, 195, 197, 197, 195, 195, 196, 196, 196, 198, 198, 198, 199, 199, 199, 200, 200, 201, 514, 202, 202, 201, 201, 201, 202, 203, 204, 205, 206, 207, 203, 203, 511, 206, 484, 206, 206, 204, 204, 210, 205, 205, 483, 207, 207, 208, 208, 208, 209, 209, 209, 211, 211, 211, 210, 210, 212, 213, 213, 214, 214, 216, 214, 212, 212, 217, 214, 215, 215, 215, 218, 218, 219, 216, 216, 220, 217, 217, 227, 219, 219, 481, 220, 220, 221, 221, 221, 224, 224, 259, 259, 227, 227, 227, 228, 228, 228, 229, 480, 229, 229, 229, 230, 235, 230, 230, 230, 231, 231, 231, 236, 278, 278, 233, 233, 233, 233, 478, 235, 279, 279, 229, 238, 238, 238, 236, 230, 233, 476, 231, 432, 233, 240, 240, 240, 252, 252, 252, 229, 255, 255, 255, 255, 230, 238, 431, 233, 234, 234, 252, 281, 284, 284, 255, 256, 256, 256, 256, 261, 261, 261, 280, 280, 428, 280, 281, 281, 282, 256, 292, 292, 234, 234, 234, 234, 234, 234, 424, 282, 282, 261, 252, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 257, 257, 257, 257, 262, 262, 262, 283, 285, 285, 285, 287, 294, 294, 257, 423, 289, 422, 257, 414, 283, 283, 287, 287, 289, 289, 262, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 363, 263, 263, 362, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 296, 296, 286, 264, 264, 264, 264, 272, 272, 272, 272, 288, 290, 264, 301, 264, 264, 286, 286, 291, 293, 301, 301, 290, 290, 295, 288, 288, 302, 302, 291, 291, 298, 298, 298, 293, 293, 361, 295, 295, 299, 264, 264, 264, 297, 300, 272, 297, 272, 297, 297, 299, 299, 304, 304, 303, 300, 300, 305, 272, 303, 303, 358, 272, 305, 305, 306, 306, 357, 272, 306, 308, 272, 307, 307, 307, 308, 308, 309, 309, 312, 309, 310, 310, 311, 311, 311, 313, 313, 313, 315, 312, 312, 314, 317, 314, 314, 316, 316, 318, 321, 315, 315, 319, 319, 317, 317, 320, 320, 322, 318, 318, 321, 321, 322, 322, 323, 325, 326, 326, 326, 351, 325, 325, 323, 323, 328, 328, 328, 329, 329, 329, 333, 333, 333, 333, 340, 340, 340, 346, 326, 334, 334, 334, 334, 513, 333, 345, 328, 344, 333, 341, 341, 341, 513, 334, 366, 366, 340, 334, 336, 335, 335, 335, 335, 333, 337, 337, 337, 337, 368, 368, 364, 341, 334, 335, 364, 364, 330, 335, 337, 369, 369, 369, 337, 365, 277, 349, 349, 349, 349, 365, 365, 622, 335, 367, 374, 374, 370, 337, 339, 349, 622, 367, 367, 370, 370, 276, 339, 339, 339, 339, 339, 339, 275, 339, 372, 372, 372, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 274, 342, 342, 273, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 375, 375, 271, 343, 343, 343, 343, 350, 350, 350, 350, 371, 371, 343, 371, 343, 343, 352, 352, 352, 352, 350, 373, 381, 381, 350, 373, 373, 377, 376, 270, 352, 376, 376, 380, 352, 379, 379, 379, 377, 377, 343, 343, 343, 378, 380, 380, 382, 266, 378, 378, 383, 383, 384, 384, 385, 385, 386, 386, 385, 387, 387, 382, 382, 388, 390, 389, 391, 392, 392, 394, 394, 397, 397, 391, 391, 390, 390, 393, 388, 388, 389, 389, 395, 265, 393, 393, 396, 396, 399, 258, 398, 396, 398, 398, 401, 395, 395, 249, 399, 399, 400, 400, 402, 402, 247, 401, 401, 403, 403, 245, 403, 405, 405, 405, 406, 406, 406, 425, 425, 425, 425, 434, 434, 435, 435, 436, 436, 437, 437, 443, 443, 425, 241, 405, 239, 425, 406, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 226, 407, 407, 170, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 407, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, 433, 168, 410, 408, 408, 408, 408, 412, 412, 412, 412, 433, 433, 408, 410, 408, 408, 167, 410, 438, 440, 412, 438, 438, 439, 412, 442, 459, 459, 439, 439, 440, 440, 410, 413, 413, 413, 413, 442, 442, 412, 408, 408, 408, 411, 411, 411, 411, 413, 441, 461, 461, 413, 165, 444, 445, 441, 441, 411, 444, 444, 446, 445, 445, 164, 446, 446, 413, 451, 162, 411, 411, 411, 411, 411, 411, 447, 447, 447, 451, 451, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, 415, 415, 415, 415, 448, 449, 155, 448, 448, 450, 450, 450, 449, 452, 415, 449, 449, 453, 415, 149, 452, 452, 454, 454, 454, 457, 453, 453, 457, 457, 464, 464, 141, 415, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 455, 460, 456, 485, 458, 138, 485, 485, 136, 460, 460, 462, 463, 455, 455, 456, 456, 458, 458, 463, 463, 462, 462, 465, 470, 470, 470, 470, 657, 471, 471, 471, 471, 488, 488, 465, 465, 657, 470, 487, 487, 487, 470, 471, 131, 486, 486, 471, 486, 473, 473, 473, 473, 490, 490, 489, 596, 470, 491, 491, 494, 494, 471, 473, 493, 491, 495, 473, 489, 489, 492, 496, 492, 492, 497, 493, 493, 498, 596, 495, 495, 129, 473, 499, 499, 500, 496, 496, 501, 497, 497, 502, 498, 498, 503, 503, 503, 500, 500, 501, 501, 124, 502, 502, 504, 504, 505, 505, 506, 506, 507, 507, 508, 508, 509, 510, 659, 509, 509, 518, 518, 518, 519, 521, 521, 659, 510, 510, 520, 520, 520, 520, 120, 519, 519, 522, 522, 523, 523, 524, 526, 525, 524, 524, 525, 525, 527, 112, 528, 529, 111, 526, 526, 528, 528, 530, 531, 531, 533, 527, 527, 534, 529, 529, 532, 532, 530, 530, 89, 533, 533, 84, 534, 534, 535, 535, 535, 535, 82, 520, 520, 543, 543, 544, 544, 545, 545, 545, 545, 74, 520, 546, 546, 520, 547, 547, 69, 546, 548, 548, 549, 549, 549, 551, 679, 547, 545, 550, 553, 550, 550, 552, 552, 679, 551, 551, 554, 554, 555, 553, 553, 556, 563, 563, 66, 535, 535, 559, 559, 62, 555, 555, 631, 556, 556, 61, 535, 39, 559, 535, 567, 567, 545, 557, 557, 557, 557, 545, 557, 568, 545, 565, 593, 557, 631, 565, 565, 566, 566, 568, 568, 569, 569, 566, 557, 570, 570, 571, 571, 572, 572, 585, 586, 586, 587, 587, 585, 585, 681, 593, 624, 624, 692, 34, 631, 32, 24, 681, 19, 16, 13, 692, 5, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, 0, 0, 557, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 573, 573, 573, 573, 575, 575, 575, 575, 575, 577, 577, 577, 577, 0, 0, 575, 576, 576, 576, 576, 688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, 0, 0, 0, 0, 576, 0, 576, 0, 0, 0, 0, 573, 0, 0, 573, 0, 575, 576, 0, 575, 577, 576, 0, 577, 0, 0, 688, 576, 0, 0, 576, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 588, 588, 588, 588, 589, 589, 589, 589, 590, 590, 590, 590, 591, 591, 591, 591, 592, 592, 592, 592, 594, 594, 594, 594, 597, 597, 597, 597, 598, 598, 598, 598, 598, 0, 597, 600, 600, 600, 600, 598, 0, 0, 599, 599, 599, 599, 599, 601, 601, 601, 601, 601, 0, 599, 0, 0, 597, 0, 0, 0, 0, 598, 588, 0, 0, 588, 589, 0, 0, 589, 590, 0, 0, 590, 591, 599, 0, 591, 592, 0, 0, 592, 594, 0, 0, 594, 597, 0, 0, 597, 0, 598, 0, 0, 598, 0, 0, 600, 0, 0, 600, 603, 603, 603, 603, 599, 0, 0, 599, 0, 601, 0, 0, 601, 602, 602, 602, 602, 602, 604, 604, 604, 604, 0, 0, 602, 605, 605, 605, 605, 606, 606, 606, 606, 607, 607, 607, 607, 0, 0, 603, 0, 603, 609, 609, 609, 609, 602, 608, 608, 608, 608, 0, 603, 0, 0, 0, 603, 604, 0, 604, 0, 0, 603, 0, 605, 603, 605, 0, 0, 0, 604, 0, 0, 0, 604, 0, 602, 605, 606, 602, 604, 605, 607, 604, 0, 609, 0, 605, 0, 0, 605, 606, 0, 0, 606, 607, 0, 0, 607, 610, 610, 610, 610, 608, 609, 0, 0, 609, 0, 608, 0, 0, 608, 611, 611, 611, 611, 611, 0, 611, 612, 612, 612, 612, 611, 613, 613, 613, 613, 614, 614, 614, 614, 0, 0, 611, 616, 616, 616, 616, 0, 612, 0, 0, 0, 0, 613, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 611, 616, 0, 611, 0, 0, 612, 0, 0, 612, 0, 613, 616, 0, 613, 614, 616, 0, 614, 0, 0, 0, 616, 0, 0, 616, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 626, 626, 626, 626, 627, 627, 627, 627, 628, 628, 628, 628, 632, 632, 632, 632, 633, 633, 633, 633, 634, 634, 634, 634, 635, 635, 635, 635, 636, 636, 636, 636, 640, 640, 640, 640, 0, 0, 636, 637, 637, 637, 637, 637, 0, 0, 0, 0, 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 626, 0, 0, 626, 627, 0, 0, 627, 628, 0, 637, 628, 632, 0, 0, 632, 633, 0, 0, 633, 634, 640, 0, 634, 635, 0, 0, 635, 636, 0, 0, 636, 640, 0, 0, 640, 641, 641, 641, 641, 637, 0, 0, 637, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 0, 0, 0, 639, 639, 639, 639, 642, 642, 642, 642, 0, 0, 639, 0, 639, 639, 641, 643, 643, 643, 643, 0, 0, 644, 644, 644, 644, 0, 644, 646, 646, 646, 646, 644, 641, 0, 0, 641, 0, 0, 639, 639, 639, 639, 644, 0, 639, 0, 0, 0, 642, 647, 647, 647, 647, 647, 643, 647, 643, 0, 645, 645, 645, 645, 0, 645, 0, 0, 642, 643, 645, 642, 0, 643, 649, 649, 649, 649, 0, 643, 0, 645, 643, 0, 647, 644, 0, 0, 644, 0, 0, 646, 0, 0, 646, 648, 648, 648, 648, 648, 650, 650, 650, 650, 0, 0, 648, 652, 652, 652, 652, 0, 0, 649, 647, 649, 0, 647, 661, 661, 661, 661, 645, 0, 0, 645, 649, 0, 648, 0, 649, 662, 662, 662, 662, 0, 649, 0, 0, 649, 663, 663, 663, 663, 664, 664, 664, 664, 665, 665, 665, 665, 0, 0, 0, 0, 0, 0, 648, 0, 0, 648, 650, 0, 0, 650, 0, 0, 0, 652, 0, 0, 652, 0, 0, 0, 0, 0, 0, 0, 661, 0, 0, 661, 0, 0, 0, 0, 667, 667, 667, 667, 0, 662, 0, 0, 662, 668, 668, 668, 668, 0, 663, 0, 0, 663, 664, 0, 0, 664, 665, 0, 0, 665, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 0, 0, 0, 666, 666, 666, 666, 0, 667, 0, 668, 0, 0, 666, 0, 666, 666, 667, 0, 0, 667, 669, 669, 669, 669, 0, 668, 0, 0, 668, 670, 670, 670, 670, 0, 670, 673, 673, 673, 673, 673, 666, 666, 666, 671, 671, 671, 671, 671, 0, 671, 672, 672, 672, 672, 672, 0, 672, 676, 676, 676, 676, 670, 674, 674, 674, 674, 674, 0, 674, 682, 682, 682, 682, 0, 0, 0, 671, 0, 676, 0, 0, 0, 669, 672, 0, 669, 675, 675, 675, 675, 675, 670, 675, 0, 670, 674, 0, 675, 673, 0, 0, 673, 683, 683, 683, 683, 671, 0, 675, 671, 0, 0, 0, 672, 0, 0, 672, 0, 0, 676, 0, 0, 676, 0, 0, 674, 0, 0, 674, 0, 0, 682, 0, 0, 682, 684, 684, 684, 684, 685, 685, 685, 685, 686, 686, 686, 686, 0, 0, 675, 0, 0, 675, 687, 687, 687, 687, 689, 689, 689, 689, 0, 689, 0, 683, 0, 0, 683, 0, 690, 690, 690, 690, 690, 0, 690, 0, 693, 693, 693, 693, 686, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 687, 0, 0, 0, 684, 0, 0, 684, 685, 690, 0, 685, 686, 0, 0, 686, 696, 696, 696, 696, 0, 0, 687, 0, 0, 687, 689, 693, 0, 689, 697, 697, 697, 697, 698, 698, 698, 698, 0, 690, 0, 0, 690, 0, 0, 0, 693, 0, 0, 693, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 0, 0, 0, 694, 694, 694, 694, 0, 0, 696, 0, 0, 696, 694, 0, 694, 694, 0, 699, 699, 699, 699, 0, 697, 0, 0, 697, 698, 0, 0, 698, 700, 700, 700, 700, 701, 701, 701, 701, 0, 0, 694, 694, 694, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 0, 0, 0, 695, 695, 695, 695, 702, 702, 702, 702, 0, 0, 695, 0, 695, 695, 699, 0, 0, 699, 703, 703, 703, 703, 0, 0, 0, 0, 0, 700, 0, 0, 700, 701, 0, 0, 701, 0, 0, 0, 695, 695, 695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 0, 0, 702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, 0, 0, 703, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 706, 706, 0, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 707, 0, 707, 707, 707, 708, 708, 0, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 709, 709, 709, 709, 709, 709, 709, 709, 0, 0, 0, 709, 709, 710, 710, 0, 0, 710, 710, 0, 710, 710, 710, 710, 710, 711, 0, 0, 711, 711, 711, 711, 711, 712, 712, 0, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 713, 713, 713, 713, 713, 713, 713, 713, 0, 0, 0, 713, 713, 714, 714, 714, 714, 714, 714, 714, 0, 714, 714, 714, 714, 714, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 716, 716, 0, 716, 0, 716, 716, 716, 717, 0, 0, 717, 717, 717, 717, 717, 718, 718, 718, 718, 718, 718, 718, 718, 0, 0, 0, 718, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 721, 721, 0, 0, 721, 0, 0, 721, 721, 722, 722, 722, 722, 722, 722, 722, 722, 0, 0, 0, 722, 722, 723, 723, 723, 723, 723, 723, 723, 723, 0, 0, 0, 723, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 725, 725, 0, 0, 725, 0, 0, 725, 725, 726, 0, 0, 726, 0, 726, 726, 726, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 728, 728, 728, 728, 728, 728, 728, 728, 0, 0, 0, 728, 729, 729, 0, 0, 729, 0, 0, 729, 729, 730, 0, 0, 730, 730, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 733, 733, 733, 733, 733, 0, 733, 733, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 737, 737, 737, 737, 737, 0, 737, 737, 738, 738, 738, 738, 738, 0, 738, 738, 739, 739, 739, 739, 739, 0, 739, 739, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 743, 743, 0, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 746, 746, 0, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int as3__flex_debug; int as3__flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *as3_text; #line 1 "tokenizer.lex" /* tokenizer.lex Routines for compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #line 24 "tokenizer.lex" #include #include #include #include #include "../utf8.h" #include "common.h" #include "tokenizer.h" #include "files.h" unsigned int as3_tokencount = 0; static void dbg(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(as3_verbosity<3) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(tokenizer) "); printf("%s\n", buf); fflush(stdout); } #ifndef YY_CURRENT_BUFFER #define YY_CURRENT_BUFFER yy_current_buffer #endif static void*as3_buffer=0; static int as3_buffer_pos=0; static int as3_buffer_len=0; void as3_file_input(FILE*fi) { as3_in = fi; as3_buffer = 0; } void as3_buffer_input(void*buffer, int len) { if(!buffer) syntaxerror("trying to parse zero bytearray"); as3_buffer = buffer; as3_buffer_len = len; as3_buffer_pos = 0; as3_in = 0; } //#undef BEGIN //#define BEGIN(x) {(yy_start) = 1 + 2 *x;dbg("entering state %d", x);} #define YY_INPUT(buf,result,max_size) { \ if(!as3_buffer) { \ errno=0; \ while((result = fread(buf, 1, max_size, as3_in))==0 && ferror(as3_in)) \ { if(errno != EINTR) {YY_FATAL_ERROR("input in flex scanner failed"); break;} \ errno=0; clearerr(as3_in); \ } \ } else { \ int to_read = max_size; \ if(to_read + as3_buffer_pos > as3_buffer_len) \ to_read = as3_buffer_len - as3_buffer_pos; \ memcpy(buf, as3_buffer+as3_buffer_pos, to_read); \ as3_buffer_pos += to_read; \ result=to_read; \ } \ } void handleInclude(char*text, int len, char quotes) { char*filename = 0; if(quotes) { char*p1 = strchr(text, '"'); char*p2 = strrchr(text, '"'); if(!p1 || !p2 || p1==p2) { syntaxerror("Invalid include in line %d\n", current_line); } *p2 = 0; filename = strdup(p1+1); } else { int i1=0,i2=len; // find start while(!strchr(" \n\r\t\xa0", text[i1])) i1++; // strip while(strchr(" \n\r\t\xa0", text[i1])) i1++; while(strchr(" \n\r\t\xa0", text[i2-1])) i2--; if(i2!=len) text[i2]=0; filename = strdup(&text[i1]); } char*fullfilename = find_file(filename, 1); enter_file2(filename, fullfilename, YY_CURRENT_BUFFER); as3_in = fopen(fullfilename, "rb"); if (!as3_in) { syntaxerror("Couldn't open include file \"%s\"\n", fullfilename); } as3__switch_to_buffer(as3__create_buffer(as3_in,YY_BUF_SIZE ) ); //BEGIN(DEFAULT); keep context } static int do_unescape(const char*s, const char*end, char*n) { char*o = n; int len=0; while(s256) syntaxerror("octal number out of range (0-255): %d", num); if(o) o[len] = num;len++; continue; } case 'x': case 'u': { int max=2; char bracket = 0; char unicode = 0; if(*s == 'u') { max = 6; unicode = 1; } s++; if(s==end) syntaxerror("invalid \\u or \\x at end of string"); if(*s == '{') { s++; if(s==end) syntaxerror("invalid \\u{ at end of string"); bracket=1; } unsigned int num=0; int nr = 0; while(strchr("0123456789abcdefABCDEF", *s) && (bracket || nr < max) && s='0' && *s<='9') num |= *s - '0'; if(*s>='a' && *s<='f') num |= *s - 'a' + 10; if(*s>='A' && *s<='F') num |= *s - 'A' + 10; nr++; s++; } if(bracket) { if(*s=='}' && s256) syntaxerror("byte out of range (0-255): %d", num); if(o) o[len] = num;len++; } break; } default: { if(o) { o[len+0] = '\\'; o[len+1] = *s; } s++; len+=2; break; } } } if(o) o[len]=0; return len; } static string_t string_unescape(const char*in, int l) { const char*s = in; const char*end = &in[l]; int len = do_unescape(s, end, 0); char*n = (char*)malloc(len+1); do_unescape(s, end, n); string_t out = string_new(n, len); return out; } static void handleCData(char*s, int len) { a3_lval.str.str = s+9; // a3_lval.str.str = strdup_n(a3_lval.str.str, a3_lval.str.len); } static void handleRaw(char*s, int len) { a3_lval.str.len = len; a3_lval.str.str = strdup_n(s, a3_lval.str.len); } static void handleString(char*s, int len) { if(s[0]=='"') { if(s[len-1]!='"') syntaxerror("String doesn't end with '\"'"); s++;len-=2; } else if(s[0]=='\'') { if(s[len-1]!='\'') syntaxerror("String doesn't end with '\"'"); s++;len-=2; } else syntaxerror("String incorrectly terminated"); a3_lval.str = string_unescape(s, len); } char start_of_expression; static inline int m(int type) { a3_lval.token = type; return type; } static char numberbuf[64]; static char*nrbuf() { if(as3_leng>sizeof(numberbuf)-1) syntaxerror("decimal number overflow"); char*s = numberbuf; memcpy(s, as3_text, as3_leng); s[as3_leng]=0; return s; } static inline int setint(int v) { a3_lval.number_int = v; return T_INT; } static inline int setfloat(double v) { a3_lval.number_float = v; return T_FLOAT; } static inline int handlefloat() { char*s = nrbuf(); a3_lval.number_float = atof(s); return T_FLOAT; } static inline int handleint() { char*s = nrbuf(); char l = (as3_text[0]=='-'); //char*max = l?"1073741824":"2147483647"; char*max = l?"2147483648":"2147483647"; if(as3_leng-l>10) { as3_softwarning("integer overflow: %s (converted to Number)", s); return handlefloat(); } if(as3_leng-l==10) { int t; for(t=0;tmax[t]) { as3_softwarning("integer overflow: %s (converted to Number)", s); return handlefloat(); } else if(as3_text[l+t]='0' && c<='9') d+=(c&15)*base; else if((c>='a' && c<='f') || (c>='A' && c<='F')) d+=((c&0x0f)+9)*base; } return setfloat(d); } static inline int handlehex() { char l = (as3_text[0]=='-')+2; int len = as3_leng; if(len-l>8) { char*s = nrbuf(); syntaxerror("integer overflow %s", s); } int t; unsigned int v = 0; for(t=l;t='0' && c<='9') v|=(c&15); else if((c>='a' && c<='f') || (c>='A' && c<='F')) v|=(c&0x0f)+9; } if(l && v>=0x80000000) { char*s = nrbuf(); as3_softwarning("integer overflow: %s (converted to Number)", s); return setfloat(v); } if(!l && v>0x7fffffff) { char*s = nrbuf(); as3_softwarning("integer overflow: %s (converted to Number)", s); return setfloat(v); } if(l==3) { return setint(-(int)v); } else { return setint(v); } } void handleLabel(char*text, int len) { int t; for(t=len-1;t>=0;--t) { if(text[t]!=' ' && text[t]!=':') break; } char*s = malloc(t+1); memcpy(s, as3_text, t); s[t]=0; a3_lval.id = s; } static int handleregexp() { char*s = malloc(as3_leng); int len=as3_leng-1; memcpy(s, as3_text+1, len); s[len] = 0; int t; for(t=len;t>=0;--t) { if(s[t]=='/') { s[t] = 0; break; } } a3_lval.regexp.pattern = s; if(t==len) { a3_lval.regexp.options = 0; } else { a3_lval.regexp.options = s+t+1; } return T_REGEXP; } void initialize_scanner(); #define YY_USER_INIT initialize_scanner(); /* count the number of lines+columns consumed by this token */ static inline void l() { int t; for(t=0;t]|(-/[^-])|(--/[^>]))*--> //{XMLCOMMENT} #line 2080 "tokenizer.yy.c" #define INITIAL 0 #define REGEXPOK 1 #define BEGINNING 2 #define DEFAULT 3 #define XMLTEXT 4 #define XML 5 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int as3_lex_destroy (void ); int as3_get_debug (void ); void as3_set_debug (int debug_flag ); YY_EXTRA_TYPE as3_get_extra (void ); void as3_set_extra (YY_EXTRA_TYPE user_defined ); FILE *as3_get_in (void ); void as3_set_in (FILE * in_str ); FILE *as3_get_out (void ); void as3_set_out (FILE * out_str ); yy_size_t as3_get_leng (void ); char *as3_get_text (void ); int as3_get_lineno (void ); void as3_set_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int as3_wrap (void ); #else extern int as3_wrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #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 fwrite( as3_text, as3_leng, 1, as3_out ) #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) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( as3_in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( as3_in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, as3_in))==0 && ferror(as3_in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(as3_in); \ } \ }\ \ #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 /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int as3_lex (void); #define YY_DECL int as3_lex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after as3_text and as3_leng * 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 ( as3_leng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (as3_text[as3_leng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 536 "tokenizer.lex" #line 2274 "tokenizer.yy.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! as3_in ) as3_in = stdin; if ( ! as3_out ) as3_out = stdout; if ( ! YY_CURRENT_BUFFER ) { as3_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = as3__create_buffer(as3_in,YY_BUF_SIZE ); } as3__load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of as3_text. */ *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_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 705 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_current_state != 704 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_find_action: yy_act = yy_accept[yy_current_state]; YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 539 "tokenizer.lex" {l(); /* single line comment */} YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 540 "tokenizer.lex" {l(); /* multi line comment */} YY_BREAK case 3: YY_RULE_SETUP #line 541 "tokenizer.lex" {syntaxerror("syntax error: unterminated comment", as3_text);} YY_BREAK case 4: /* rule 4 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 543 "tokenizer.lex" {l();handleInclude(as3_text, as3_leng, 1);} YY_BREAK case 5: /* rule 5 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 544 "tokenizer.lex" {l();handleInclude(as3_text, as3_leng, 0);} YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP #line 545 "tokenizer.lex" {l(); BEGIN(DEFAULT);handleString(as3_text, as3_leng);return T_STRING;} YY_BREAK case 7: /* rule 7 can match eol */ YY_RULE_SETUP #line 546 "tokenizer.lex" {l(); BEGIN(DEFAULT);handleCData(as3_text, as3_leng);return T_STRING;} YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP #line 549 "tokenizer.lex" {l(); BEGIN(DEFAULT);handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP #line 553 "tokenizer.lex" {l(); handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case 10: YY_RULE_SETUP #line 554 "tokenizer.lex" {c(); BEGIN(REGEXPOK);return m('{');} YY_BREAK case 11: YY_RULE_SETUP #line 555 "tokenizer.lex" {c(); return m('<');} YY_BREAK case 12: YY_RULE_SETUP #line 556 "tokenizer.lex" {c(); return m('/');} YY_BREAK case 13: YY_RULE_SETUP #line 557 "tokenizer.lex" {c(); return m('>');} YY_BREAK case 14: YY_RULE_SETUP #line 558 "tokenizer.lex" {c(); return m('=');} YY_BREAK case 15: YY_RULE_SETUP #line 559 "tokenizer.lex" {c(); handleRaw(as3_text, as3_leng);return T_IDENTIFIER;} YY_BREAK case 16: /* rule 16 can match eol */ YY_RULE_SETUP #line 560 "tokenizer.lex" {l(); handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case YY_STATE_EOF(XML): #line 561 "tokenizer.lex" {syntaxerror("unexpected end of file");} YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP #line 565 "tokenizer.lex" {l(); handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case 18: YY_RULE_SETUP #line 566 "tokenizer.lex" {c(); BEGIN(REGEXPOK);return m('{');} YY_BREAK case 19: YY_RULE_SETUP #line 567 "tokenizer.lex" {c(); BEGIN(XML);return m('<');} YY_BREAK case 20: YY_RULE_SETUP #line 568 "tokenizer.lex" {c(); return m('>');} YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 569 "tokenizer.lex" {l(); handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case 22: /* rule 22 can match eol */ YY_RULE_SETUP #line 570 "tokenizer.lex" {l(); handleRaw(as3_text, as3_leng);return T_STRING;} YY_BREAK case YY_STATE_EOF(XMLTEXT): #line 571 "tokenizer.lex" {syntaxerror("unexpected end of file");} YY_BREAK case 23: YY_RULE_SETUP #line 575 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handleregexp();} YY_BREAK case 24: /* rule 24 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 576 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlehex();} YY_BREAK case 25: /* rule 25 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 577 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlehexfloat();} YY_BREAK case 26: /* rule 26 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 578 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handleint();} YY_BREAK case 27: /* rule 27 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 579 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlefloat();} YY_BREAK case 28: YY_RULE_SETUP #line 582 "tokenizer.lex" {c(); BEGIN(REGEXPOK);return m(T_DICTSTART);} YY_BREAK case 29: YY_RULE_SETUP #line 583 "tokenizer.lex" {c(); BEGIN(DEFAULT); return m('{');} YY_BREAK case 30: YY_RULE_SETUP #line 585 "tokenizer.lex" {/* utf 8 bom (0xfeff) */} YY_BREAK case 31: /* rule 31 can match eol */ YY_RULE_SETUP #line 586 "tokenizer.lex" {l();} YY_BREAK case 32: /* rule 32 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 588 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlehex();} YY_BREAK case 33: /* rule 33 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 589 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlehexfloat();} YY_BREAK case 34: /* rule 34 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 590 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handleint();} YY_BREAK case 35: /* rule 35 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 591 "tokenizer.lex" {c(); BEGIN(DEFAULT);return handlefloat();} YY_BREAK case 36: YY_RULE_SETUP #line 592 "tokenizer.lex" {c(); BEGIN(DEFAULT);return m(KW_NAN);} YY_BREAK case 37: YY_RULE_SETUP #line 594 "tokenizer.lex" {/* for debugging: generates a tokenizer-level error */ syntaxerror("3rr0r");} YY_BREAK case 38: /* rule 38 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 597 "tokenizer.lex" {l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-3);return T_FOR;} YY_BREAK case 39: /* rule 39 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 598 "tokenizer.lex" {l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-2);return T_DO;} YY_BREAK case 40: /* rule 40 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 599 "tokenizer.lex" {l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-5);return T_WHILE;} YY_BREAK case 41: /* rule 41 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up as3_text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up as3_text again */ YY_RULE_SETUP #line 600 "tokenizer.lex" {l();BEGIN(DEFAULT);handleLabel(as3_text, as3_leng-6);return T_SWITCH;} YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP #line 601 "tokenizer.lex" {l();BEGIN(DEFAULT);return m(KW_DEFAULT_XML);} YY_BREAK case 43: YY_RULE_SETUP #line 602 "tokenizer.lex" {c();BEGIN(DEFAULT);a3_lval.id="";return T_FOR;} YY_BREAK case 44: YY_RULE_SETUP #line 603 "tokenizer.lex" {c();BEGIN(DEFAULT);a3_lval.id="";return T_DO;} YY_BREAK case 45: YY_RULE_SETUP #line 604 "tokenizer.lex" {c();BEGIN(DEFAULT);a3_lval.id="";return T_WHILE;} YY_BREAK case 46: YY_RULE_SETUP #line 605 "tokenizer.lex" {c();BEGIN(DEFAULT);a3_lval.id="";return T_SWITCH;} YY_BREAK case 47: YY_RULE_SETUP #line 607 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_ANDAND);} YY_BREAK case 48: YY_RULE_SETUP #line 608 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_OROR);} YY_BREAK case 49: YY_RULE_SETUP #line 609 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_NE);} YY_BREAK case 50: YY_RULE_SETUP #line 610 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_NEE);} YY_BREAK case 51: YY_RULE_SETUP #line 611 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_EQEQEQ);} YY_BREAK case 52: YY_RULE_SETUP #line 612 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_EQEQ);} YY_BREAK case 53: YY_RULE_SETUP #line 613 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_GE);} YY_BREAK case 54: YY_RULE_SETUP #line 614 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_LE);} YY_BREAK case 55: YY_RULE_SETUP #line 615 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(T_MINUSMINUS);} YY_BREAK case 56: YY_RULE_SETUP #line 616 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(T_PLUSPLUS);} YY_BREAK case 57: YY_RULE_SETUP #line 617 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_PLUSBY);} YY_BREAK case 58: YY_RULE_SETUP #line 618 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_XORBY);} YY_BREAK case 59: YY_RULE_SETUP #line 619 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_MINUSBY);} YY_BREAK case 60: YY_RULE_SETUP #line 620 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_DIVBY);} YY_BREAK case 61: YY_RULE_SETUP #line 621 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_MODBY);} YY_BREAK case 62: YY_RULE_SETUP #line 622 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_MULBY);} YY_BREAK case 63: YY_RULE_SETUP #line 623 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_ORBY);} YY_BREAK case 64: YY_RULE_SETUP #line 624 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_ANDBY);} YY_BREAK case 65: YY_RULE_SETUP #line 625 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_SHRBY);} YY_BREAK case 66: YY_RULE_SETUP #line 626 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_SHLBY);} YY_BREAK case 67: YY_RULE_SETUP #line 627 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_USHRBY);} YY_BREAK case 68: YY_RULE_SETUP #line 628 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_SHL);} YY_BREAK case 69: YY_RULE_SETUP #line 629 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_USHR);} YY_BREAK case 70: YY_RULE_SETUP #line 630 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_SHR);} YY_BREAK case 71: YY_RULE_SETUP #line 631 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_DOTDOTDOT);} YY_BREAK case 72: YY_RULE_SETUP #line 632 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_DOTDOT);} YY_BREAK case 73: YY_RULE_SETUP #line 633 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m('.');} YY_BREAK case 74: YY_RULE_SETUP #line 634 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(T_COLONCOLON);} YY_BREAK case 75: YY_RULE_SETUP #line 635 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(':');} YY_BREAK case 76: YY_RULE_SETUP #line 636 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);} YY_BREAK case 77: YY_RULE_SETUP #line 637 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);} YY_BREAK case 78: YY_RULE_SETUP #line 638 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_INTERFACE);} YY_BREAK case 79: YY_RULE_SETUP #line 639 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_PROTECTED);} YY_BREAK case 80: YY_RULE_SETUP #line 640 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_NAMESPACE);} YY_BREAK case 81: YY_RULE_SETUP #line 641 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_UNDEFINED);} YY_BREAK case 82: YY_RULE_SETUP #line 642 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_ARGUMENTS);} YY_BREAK case 83: YY_RULE_SETUP #line 643 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_CONTINUE);} YY_BREAK case 84: YY_RULE_SETUP #line 644 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_OVERRIDE);} YY_BREAK case 85: YY_RULE_SETUP #line 645 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_INTERNAL);} YY_BREAK case 86: YY_RULE_SETUP #line 646 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_FUNCTION);} YY_BREAK case 87: YY_RULE_SETUP #line 647 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_FINALLY);} YY_BREAK case 88: YY_RULE_SETUP #line 648 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_DEFAULT);} YY_BREAK case 89: YY_RULE_SETUP #line 649 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_PACKAGE);} YY_BREAK case 90: YY_RULE_SETUP #line 650 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_PRIVATE);} YY_BREAK case 91: YY_RULE_SETUP #line 651 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_DYNAMIC);} YY_BREAK case 92: YY_RULE_SETUP #line 652 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_EXTENDS);} YY_BREAK case 93: YY_RULE_SETUP #line 653 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_DELETE);} YY_BREAK case 94: YY_RULE_SETUP #line 654 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_RETURN);} YY_BREAK case 95: YY_RULE_SETUP #line 655 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_PUBLIC);} YY_BREAK case 96: YY_RULE_SETUP #line 656 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_NATIVE);} YY_BREAK case 97: YY_RULE_SETUP #line 657 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_STATIC);} YY_BREAK case 98: YY_RULE_SETUP #line 658 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_IMPORT);} YY_BREAK case 99: YY_RULE_SETUP #line 659 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_TYPEOF);} YY_BREAK case 100: YY_RULE_SETUP #line 660 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_THROW);} YY_BREAK case 101: YY_RULE_SETUP #line 661 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_CLASS);} YY_BREAK case 102: YY_RULE_SETUP #line 662 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_CONST);} YY_BREAK case 103: YY_RULE_SETUP #line 663 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_CATCH);} YY_BREAK case 104: YY_RULE_SETUP #line 664 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_FINAL);} YY_BREAK case 105: YY_RULE_SETUP #line 665 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_FALSE);} YY_BREAK case 106: YY_RULE_SETUP #line 666 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_BREAK);} YY_BREAK case 107: YY_RULE_SETUP #line 667 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_SUPER);} YY_BREAK case 108: YY_RULE_SETUP #line 668 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_EACH);} YY_BREAK case 109: YY_RULE_SETUP #line 669 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_VOID);} YY_BREAK case 110: YY_RULE_SETUP #line 670 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_TRUE);} YY_BREAK case 111: YY_RULE_SETUP #line 671 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_NULL);} YY_BREAK case 112: YY_RULE_SETUP #line 672 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_ELSE);} YY_BREAK case 113: YY_RULE_SETUP #line 673 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_CASE);} YY_BREAK case 114: YY_RULE_SETUP #line 674 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_WITH);} YY_BREAK case 115: YY_RULE_SETUP #line 675 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_USE);} YY_BREAK case 116: YY_RULE_SETUP #line 676 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_NEW);} YY_BREAK case 117: YY_RULE_SETUP #line 677 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_GET);} YY_BREAK case 118: YY_RULE_SETUP #line 678 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_SET);} YY_BREAK case 119: YY_RULE_SETUP #line 679 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_VAR);} YY_BREAK case 120: YY_RULE_SETUP #line 680 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_TRY);} YY_BREAK case 121: YY_RULE_SETUP #line 681 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_IS) ;} YY_BREAK case 122: YY_RULE_SETUP #line 682 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_IN) ;} YY_BREAK case 123: YY_RULE_SETUP #line 683 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(KW_IF) ;} YY_BREAK case 124: YY_RULE_SETUP #line 684 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(KW_AS);} YY_BREAK case 125: YY_RULE_SETUP #line 685 "tokenizer.lex" {c();BEGIN(DEFAULT);return handleIdentifier();} YY_BREAK case 126: YY_RULE_SETUP #line 687 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(as3_text[0]);} YY_BREAK case 127: YY_RULE_SETUP #line 688 "tokenizer.lex" {c();BEGIN(REGEXPOK);return m(as3_text[0]);} YY_BREAK case 128: YY_RULE_SETUP #line 689 "tokenizer.lex" {c();BEGIN(DEFAULT);return m(as3_text[0]);} YY_BREAK case 129: YY_RULE_SETUP #line 692 "tokenizer.lex" {tokenerror();} YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(REGEXPOK): case YY_STATE_EOF(BEGINNING): case YY_STATE_EOF(DEFAULT): #line 694 "tokenizer.lex" {l(); void*b = leave_file(); if (!b) { yyterminate(); as3__delete_buffer(YY_CURRENT_BUFFER); return m(T_EOF); } else { as3__delete_buffer(YY_CURRENT_BUFFER); as3__switch_to_buffer(b); } } YY_BREAK case 130: YY_RULE_SETUP #line 706 "tokenizer.lex" ECHO; YY_BREAK #line 3108 "tokenizer.yy.c" 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); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->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 as3_in at a new source and called * as3_lex(). 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_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = as3_in; YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( as3_wrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * as3_text, 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_LVALUE->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 as3_lex */ /* 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 (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->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 single character, 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_LVALUE->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_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* 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 ) { yy_size_t 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. */ as3_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_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; as3_restart(as3_in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) as3_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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(); 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); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 705 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } 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 ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 705 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 704); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up as3_text */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #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_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ as3_restart(as3_in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( as3_wrap( ) ) return 0; 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) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve as3_text */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void as3_restart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ as3_ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = as3__create_buffer(as3_in,YY_BUF_SIZE ); } as3__init_buffer(YY_CURRENT_BUFFER,input_file ); as3__load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void as3__switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * as3_pop_buffer_state(); * as3_push_buffer_state(new_buffer); */ as3_ensure_buffer_stack (); 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_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; as3__load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (as3_wrap()) processing, but the only time this flag * is looked at is after as3_wrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void as3__load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; as3_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE as3__create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) as3_alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in as3__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 *) as3_alloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in as3__create_buffer()" ); b->yy_is_our_buffer = 1; as3__init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with as3__create_buffer() * */ void as3__delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) as3_free((void *) b->yy_ch_buf ); as3_free((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a as3_restart() or at EOF. */ static void as3__init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; as3__flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then as3__init_buffer was _probably_ * called from as3_restart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void as3__flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; 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 ) as3__load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void as3_push_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; as3_ensure_buffer_stack(); /* This block is copied from as3__switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from as3__switch_to_buffer. */ as3__load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void as3_pop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; as3__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { as3__load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void as3_ensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)as3_alloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in as3_ensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)as3_realloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in as3_ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE as3__scan_buffer (char * base, yy_size_t size ) { 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) as3_alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in as3__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; as3__switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to as3_lex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * as3__scan_bytes() instead. */ YY_BUFFER_STATE as3__scan_string (yyconst char * yystr ) { return as3__scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to as3_lex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE as3__scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) as3_alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in as3__scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = as3__scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in as3__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; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (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 as3_text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ as3_text[as3_leng] = (yy_hold_char); \ (yy_c_buf_p) = as3_text + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ as3_leng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int as3_get_lineno (void) { return as3_lineno; } /** Get the input stream. * */ FILE *as3_get_in (void) { return as3_in; } /** Get the output stream. * */ FILE *as3_get_out (void) { return as3_out; } /** Get the length of the current token. * */ yy_size_t as3_get_leng (void) { return as3_leng; } /** Get the current token. * */ char *as3_get_text (void) { return as3_text; } /** Set the current line number. * @param line_number * */ void as3_set_lineno (int line_number ) { as3_lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see as3__switch_to_buffer */ void as3_set_in (FILE * in_str ) { as3_in = in_str ; } void as3_set_out (FILE * out_str ) { as3_out = out_str ; } int as3_get_debug (void) { return as3__flex_debug; } void as3_set_debug (int bdebug ) { as3__flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from as3_lex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT as3_in = stdin; as3_out = stdout; #else as3_in = (FILE *) 0; as3_out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * as3_lex_init() */ return 0; } /* as3_lex_destroy is for both reentrant and non-reentrant scanners. */ int as3_lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ as3__delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; as3_pop_buffer_state(); } /* Destroy the stack itself. */ as3_free((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * as3_lex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *as3_alloc (yy_size_t size ) { return (void *) malloc( size ); } void *as3_realloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void as3_free (void * ptr ) { free( (char *) ptr ); /* see as3_realloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 706 "tokenizer.lex" int as3_wrap() { return 1; } static int tokenerror() { char c1=as3_text[0]; char buf[128]; buf[0] = as3_text[0]; int t; for(t=1;t<128;t++) { char c = buf[t]=input(); if(c=='\n' || c==EOF) { buf[t] = 0; break; } } if(c1>='0' && c1<='9') syntaxerror("syntax error: %s (identifiers must not start with a digit)"); else syntaxerror("syntax error [state=%d]: %s", (yy_start-1)/2, buf); printf("\n"); exit(1); yyterminate(); } static char mbuf[256]; char*token2string(enum yytokentype nr, YYSTYPE v) { if(nr==T_STRING) { char*s = malloc(v.str.len+10); strcpy(s, ""); memcpy(s+8, v.str.str, v.str.len); sprintf(s+8+v.str.len, " (%d bytes)", v.str.len); return s; } else if(nr==T_REGEXP) { char*s = malloc(strlen(v.regexp.pattern)+10); sprintf(s, "%s", v.regexp.pattern); return s; } else if(nr==T_IDENTIFIER) { char*s = malloc(strlen(v.id)+10); sprintf(s, "%s", v.id); return s; } else if(nr==T_INT) return ""; else if(nr==T_UINT) return ""; else if(nr==T_FLOAT) return ""; else if(nr==T_EOF) return "***END***"; else if(nr==T_GE) return ">="; else if(nr==T_LE) return "<="; else if(nr==T_MINUSMINUS) return "--"; else if(nr==T_PLUSPLUS) return "++"; else if(nr==KW_IMPLEMENTS) return "implements"; else if(nr==KW_INTERFACE) return "interface"; else if(nr==KW_NAMESPACE) return "namespace"; else if(nr==KW_PROTECTED) return "protected"; else if(nr==KW_OVERRIDE) return "override"; else if(nr==KW_INTERNAL) return "internal"; else if(nr==KW_FUNCTION) return "function"; else if(nr==KW_PACKAGE) return "package"; else if(nr==KW_PRIVATE) return "private"; else if(nr==KW_BOOLEAN) return "Boolean"; else if(nr==KW_DYNAMIC) return "dynamic"; else if(nr==KW_EXTENDS) return "extends"; else if(nr==KW_PUBLIC) return "public"; else if(nr==KW_NATIVE) return "native"; else if(nr==KW_STATIC) return "static"; else if(nr==KW_IMPORT) return "import"; else if(nr==KW_NUMBER) return "number"; else if(nr==KW_CLASS) return "class"; else if(nr==KW_CONST) return "const"; else if(nr==KW_FINAL) return "final"; else if(nr==KW_FALSE) return "False"; else if(nr==KW_TRUE) return "True"; else if(nr==KW_UINT) return "uint"; else if(nr==KW_NULL) return "null"; else if(nr==KW_ELSE) return "else"; else if(nr==KW_USE) return "use"; else if(nr==KW_INT) return "int"; else if(nr==KW_NEW) return "new"; else if(nr==KW_GET) return "get"; else if(nr==KW_SET) return "set"; else if(nr==KW_VAR) return "var"; else if(nr==KW_IS) return "is"; else if(nr==KW_AS) return "as"; else { sprintf(mbuf, "%d", nr); return mbuf; } } void tokenizer_begin_xml() { dbg("begin reading xml"); BEGIN(XML); } void tokenizer_begin_xmltext() { dbg("begin reading xml text"); BEGIN(XMLTEXT); } void tokenizer_end_xmltext() { dbg("end reading xml text"); BEGIN(XML); } void tokenizer_end_xml() { dbg("end reading xml"); BEGIN(DEFAULT); } void initialize_scanner() { BEGIN(BEGINNING); } swftools_0.9.2+git20130725.orig/lib/as3/common.h0000644000175000017500000000260312216332640020221 0ustar gawaingawain/* common.h Routines for handling/compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #ifndef __as3_common_h__ #define __as3_common_h__ extern int as3_lex(); extern int as3_verbosity; extern int as3_pass; #define syntaxerror as3_error int a3_error(char*s); void as3_error(const char*format, ...) __attribute__ ((__noreturn__)); void as3_warning(const char*format, ...); void as3_softwarning(const char*format, ...); void internal_error(const char*file, int line, const char*f); #define as3_assert(b) {if(!(b)) internal_error(__FILE__, __LINE__,__func__);} #endif swftools_0.9.2+git20130725.orig/lib/as3/state.h0000644000175000017500000000403712216332640020054 0ustar gawaingawain#ifndef __state_h__ #define __state_h__ #include "../q.h" #include "abc.h" #include "registry.h" #include "initcode.h" DECLARE(state); DECLARE_LIST(state); DECLARE(import); DECLARE_LIST(import); DECLARE(methodstate); DECLARE_LIST(methodstate); DECLARE(classstate); struct _state { struct _state*old; int level; char*package; import_list_t*wildcard_imports; dict_t*import_toplevel_packages; dict_t*imports; dict_t*namespaces; namespace_list_t*active_namespace_urls; char has_own_imports; char new_vars; // e.g. transition between two functions char xmlfilter; // are we inside a xmlobj..() filter? classstate_t*cls; methodstate_t*method; char*exception_name; int switch_var; dict_t*vars; }; extern state_t* state; struct _import { char*package; }; struct _classstate { /* class data */ classinfo_t*info; abc_class_t*abc; methodstate_t*init; methodstate_t*static_init; //code_t*init; //code_t*static_init; parsedclass_t*dependencies; char has_constructor; }; struct _methodstate { /* method data */ methodinfo_t*info; char has_exceptions; char late_binding; char is_constructor; char has_super; char is_global; char is_static; int variable_count; dict_t*unresolved_variables; dict_t*allvars; // all variables (in all sublevels, but not for inner functions) char inner; char uses_parent_function; char no_variable_scoping; int uses_slots; dict_t*slots; int activation_var; int need_arguments; abc_method_t*abc; int var_index; // for inner methods int slot_index; // for inner methods char is_a_slot; // for inner methods code_t*header; code_t*scope_code; abc_exception_list_t*exceptions; methodstate_list_t*innerfunctions; }; void new_state(); void old_state(); methodstate_t*methodstate_new(); void methodstate_destroy(methodstate_t*m); extern dict_t*definitions; void as3_set_define(const char*c); #endif //__state_h__ swftools_0.9.2+git20130725.orig/lib/as3/import.c0000644000175000017500000003402412216332640020240 0ustar gawaingawain/* import.c Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #include "import.h" #include "abc.h" #include "registry.h" #include "common.h" #include "tokenizer.h" #include "assets.h" #include "../os.h" #include "../xml.h" #ifdef HAVE_ZZIP #include "zzip/lib.h" #endif static void import_code(void*_abc, char*filename, int pass, asset_bundle_t*a); void as3_import_abc(char*filename) { TAG*tag = swf_InsertTag(0, ST_RAWABC); memfile_t*file = memfile_open(filename); tag->data = file->data; tag->len = file->len; abc_file_t*abc = swf_ReadABC(tag); import_code(abc, filename, 0, 0); import_code(abc, filename, 1, 0); swf_FreeABC(abc); memfile_close(file); free(tag); } typedef struct _deps { const char*name; struct _deps*next; } deps_t; void as3_import_swf2(reader_t*r, char*filename, dict_t*deps) { SWF _swf,*swf=&_swf; if(swf_ReadSWF2(r, &_swf)<0) return; swf_FoldAll(swf); TAG*tag = swf->firstTag; asset_resolver_t* assets = swf_ParseAssets(swf); asset_bundle_list_t* asset_bundles = list_new(); dict_t*name2bundle = dict_new(); /* pass 1 */ while(tag) { if(tag->id == ST_DOABC || tag->id == ST_RAWABC) { abc_file_t*abc = swf_ReadABC(tag); import_code(abc, filename, 0, 0); NEW(asset_bundle_t, a); a->file = abc; if(abc->name) { dict_put(name2bundle, abc->name, a); } list_append(asset_bundles, a); } tag = tag->next; } tag = swf->firstTag; asset_bundle_list_t*b = asset_bundles; /* pass 2 */ while(tag) { if(tag->id == ST_DOABC || tag->id == ST_RAWABC) { asset_bundle_t*a = b->asset_bundle; abc_file_t*abc = a->file; swf_ResolveAssets(assets, abc); if(deps && abc->name) { deps_t*d = dict_lookup(deps, abc->name); while(d) { if(d->name) { asset_bundle_t*other = dict_lookup(name2bundle, d->name); list_append(a->dependencies, other); } d = d->next; } } registry_add_asset(a); import_code(abc, filename, 1, a); b=b->next; } tag = tag->next; } dict_destroy(name2bundle); list_free(asset_bundles); //swf_FreeTags(swf); // FIXME: mem leak } void as3_import_swf(char*filename) { reader_t reader; reader_init_filereader2(&reader, filename); as3_import_swf2(&reader, filename, 0); reader.dealloc(&reader); } #ifdef HAVE_ZZIP typedef struct _catalog_state { char*xml_filename; char in_libraries; char*library; char*script; dict_t*deps; deps_t*current_deps; dict_t*name2deps; dict_t*id2script; ZZIP_DIR*dir; } catalog_state_t; const char* fa(catalog_state_t*state, xmlattribute_t*attr, const char*name) { while(attr) { if(!strcmp(attr->name, name)) return attr->value; attr = attr->next; } syntaxerror("error parsing %s: attribute %s missing", state->xml_filename, name); } void catalog_start_tag(xmlconsumer_t*c, char*name, xmlattribute_t*attr) { catalog_state_t*state = (catalog_state_t*)c->internal; if(!strcmp(name, "libraries")) { state->in_libraries = 1; } else if(!strcmp(name, "library")) { state->library = strdup(fa(state, attr, "path")); } else if(!strcmp(name, "script")) { state->script = strdup(fa(state, attr, "name")); } else if(!strcmp(name, "def")) { dict_put(state->id2script, strdup(fa(state, attr, "id")), strdup(state->script)); } else if(!strcmp(name, "dep")) { NEW(deps_t,d); d->name = strdup(fa(state, attr, "id")); d->next = state->current_deps; state->current_deps = d; } } void catalog_data(xmlconsumer_t*c, char*data, int len) { catalog_state_t*state = (catalog_state_t*)c->internal; } void catalog_end_tag(xmlconsumer_t*c, char*name) { catalog_state_t*state = (catalog_state_t*)c->internal; if(!strcmp(name, "libraries")) { state->in_libraries = 0; } else if(!strcmp(name, "library")) { ZZIP_FILE*file = zzip_file_open(state->dir, state->library, 0); DICT_ITERATE_DATA(state->deps,deps_t*,deps) { while(deps) { char*script = dict_lookup(state->id2script, deps->name); if(!script) { //as3_warning("when importing %s: depencency %s referenced in catalog.xml, but not found.", state->xml_filename, deps->name); } deps->name = script; deps = deps->next; } } if(!file) { as3_warning("when importing %s: %s referenced in catalog.xml, but not found.", state->xml_filename, state->library); } else { reader_t r; reader_init_zzipreader(&r, file); as3_import_swf2(&r, state->library, state->deps); r.dealloc(&r); zzip_file_close(file); } dict_destroy(state->deps); state->deps = 0; free(state->library); state->library = 0; } else if(!strcmp(name, "script")) { dict_put(state->deps, state->script, state->current_deps); free(state->script); state->current_deps = 0; state->script = 0; } } void as3_import_zipfile(char*filename) { ZZIP_DIR*dir = zzip_opendir(filename); if(!dir) as3_error("Error reading %s\n", filename); ZZIP_FILE*file = zzip_file_open(dir, "catalog.xml", 0); reader_t r; reader_init_zzipreader(&r, file); xmlconsumer_t c; catalog_state_t state; memset(&state, 0, sizeof(state)); state.dir = dir; state.xml_filename = filename; state.name2deps = dict_new(); state.id2script = dict_new(); state.deps = dict_new(); c.start_tag = catalog_start_tag; c.data= catalog_data; c.end_tag = catalog_end_tag; c.internal = &state; xml_parse(&r, &c); r.dealloc(&r); } #else void as3_import_zipfile(char*filename) { as3_warning("No zipfile support compiled in- can't import %s\n", filename); } #endif void as3_import_file(char*filename) { FILE*fi = fopen(filename, "rb"); if(!fi) return; char head[3]; fread(head, 3, 1, fi); fclose(fi); if(!strncmp(head, "FWS", 3) || !strncmp(head, "CWS", 3)) { as3_import_swf(filename); } else if(!strncmp(head, "PK", 2)) { as3_import_zipfile(filename); } else { as3_import_abc(filename); } } static int compare_traits(const void*v1, const void*v2) { trait_t* x1 = *(trait_t**)v1; trait_t* x2 = *(trait_t**)v2; int i = strcmp(x1->name->ns->name, x2->name->ns->name); if(i) return i; return strcmp(x1->name->name, x2->name->name); } static classinfo_t*resolve_class(char*filename, char*what, multiname_t*n) { if(!n) return 0; if(!n->name[0]) return 0; if(!strcmp(n->name, "void")) return &voidclass; classinfo_t*c = 0; if(n->ns && n->ns->name) { c = (classinfo_t*)registry_find(n->ns->name, n->name); } else if(n->namespace_set) { namespace_list_t*s = n->namespace_set->namespaces; while(s) { c = (classinfo_t*)registry_find(s->namespace->name, n->name); if(c) break; s = s->next; } } if(!c) { as3_warning("import %s: couldn't resolve %s %s.%s", filename, what, n->ns->name, n->name); return 0; } if(c->kind != INFOTYPE_CLASS) as3_warning("import %s: %s %s resolves to something that's not a class", filename, what, n->name); return c; } static void import_code(void*_abc, char*filename, int pass, asset_bundle_t*asset_bundle) { abc_file_t*abc = _abc; int t; if(pass==0) { for(t=0;tclasses->num;t++) { abc_class_t*cls = array_getvalue(abc->classes, t); U8 access = cls->classname->ns->access; if(access==ACCESS_PRIVATE || access==ACCESS_PACKAGEINTERNAL) continue; //if(!strncmp(cls->classname->ns->name, "__AS3", 5)) // continue; const char*package = strdup(cls->classname->ns->name); const char*name = strdup(cls->classname->name); multiname_list_t*i=cls->interfaces; classinfo_t*c = classinfo_register(access, package, name, list_length(i)); c->flags|=FLAG_BUILTIN; if(cls->flags & CLASS_FINAL) c->flags |= FLAG_FINAL; if(cls->flags & CLASS_INTERFACE) c->flags |= FLAG_INTERFACE; if(!(cls->flags & CLASS_SEALED)) c->flags |= FLAG_DYNAMIC; } return; } for(t=0;tclasses->num;t++) { abc_class_t*cls = array_getvalue(abc->classes, t); const char*package = strdup(cls->classname->ns->name); const char*name = strdup(cls->classname->name); classinfo_t*c = (classinfo_t*)registry_find(package, name); if(!c) continue; c->assets = asset_bundle; int nr = 0; multiname_list_t*i = cls->interfaces; while(i) { c->interfaces[nr++] = resolve_class(filename, "interface", i->multiname); i = i->next; } c->superclass = resolve_class(filename, "superclass", cls->superclass); trait_list_t*l=0; char is_static = 0; l = cls->traits; if(!l) { l = cls->static_traits; is_static = 1; } dict_t*names = dict_new(); while(l) { trait_t*trait = l->trait; U8 access = trait->name->ns->access; if(access==ACCESS_PRIVATE) goto cont; const char*name = trait->name->name; char* ns = access==ACCESS_NAMESPACE?strdup(trait->name->ns->name):""; if(registry_findmember(c, ns, name, 0, is_static)) goto cont; name = strdup(name); memberinfo_t*s = 0; if(trait->kind == TRAIT_METHOD) { s = (memberinfo_t*)methodinfo_register_onclass(c, access, ns, name, is_static); s->return_type = resolve_class(filename, "return type", trait->method->return_type); dict_put(names, name, 0); } else if(trait->kind == TRAIT_SLOT) { s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); s->type = resolve_class(filename, "type", trait->type_name); dict_put(names, name, 0); } else if(trait->kind == TRAIT_GETTER) { s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); s->type = resolve_class(filename, "type", trait->method->return_type); dict_put(names, name, 0); } else if(trait->kind == TRAIT_CONST) { /* some variables (e.g. XML.length) are apparently both a method and a slot. needs split of static/non-static first */ if(!dict_contains(names, name)) { varinfo_t*v = (varinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); v->type = resolve_class(filename, "type", trait->type_name); v->flags |= FLAG_CONST; /* leave this alone for now- it blows up the file too much v->value = constant_clone(trait->value);*/ s = (memberinfo_t*)v; dict_put(names, name, 0); } else goto cont; } else { goto cont; } s->flags = is_static?FLAG_STATIC:0; s->flags |= FLAG_BUILTIN; s->parent = c; cont: l = l->next; if(!l && !is_static) { l = cls->static_traits; is_static = 1; } } dict_destroy(names); } # define IS_PUBLIC_MEMBER(trait) ((trait)->kind != TRAIT_CLASS && (trait)->name->ns->access != ACCESS_PRIVATE) /* count public functions */ int num_methods=0; for(t=0;tscripts->num;t++) { trait_list_t*l = ((abc_script_t*)array_getvalue(abc->scripts, t))->traits; for(;l;l=l->next) { num_methods += IS_PUBLIC_MEMBER(l->trait); } } trait_t**traits = (trait_t**)malloc(num_methods*sizeof(trait_t*)); num_methods=0; for(t=0;tscripts->num;t++) { trait_list_t*l = ((abc_script_t*)array_getvalue(abc->scripts, t))->traits; for(;l;l=l->next) { if(IS_PUBLIC_MEMBER(l->trait)) { traits[num_methods++] = l->trait; } } } qsort(traits, num_methods, sizeof(trait_t*), compare_traits); for(t=0;tname->ns->access; const char*package = strdup(trait->name->ns->name); const char*name = strdup(trait->name->name); char np = 0; memberinfo_t*m = 0; if(trait->kind == TRAIT_METHOD) { m = (memberinfo_t*)methodinfo_register_global(access, package, name); m->return_type = resolve_class(filename, "return type", trait->method->return_type); } else { varinfo_t*v = varinfo_register_global(access, package, name); v->type = resolve_class(filename, "type", trait->type_name); v->value = constant_clone(trait->value); v->flags |= trait->kind==TRAIT_CONST?FLAG_CONST:0; m = (memberinfo_t*)v; } m->flags |= FLAG_BUILTIN; m->parent = 0; } } } void as3_import_code(void*_abc) { import_code(_abc, "", 0, 0); import_code(_abc, "", 1, 0); } swftools_0.9.2+git20130725.orig/lib/as3/registry.h0000644000175000017500000001772012216332640020607 0ustar gawaingawain/* registry.h Routines for compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __abc_registry_h__ #define __abc_registry_h__ #include "abc.h" DECLARE(asset_bundle); DECLARE_LIST(asset_bundle); DECLARE(slotinfo); DECLARE(classinfo); DECLARE(memberinfo); DECLARE(methodinfo); DECLARE(unresolvedinfo); DECLARE(varinfo); DECLARE_LIST(classinfo); DECLARE_LIST(slotinfo); /* member/class flags */ #define FLAG_FINAL 1 #define FLAG_BUILTIN 128 #define FLAG_USED 64 /* member flags */ #define FLAG_STATIC 2 #define FLAG_OVERRIDE 8 #define FLAG_NATIVE 16 #define FLAG_CONST 32 /* class flags */ #define FLAG_DYNAMIC 8 #define FLAG_INTERFACE 16 #define INFOTYPE_VAR 1 #define INFOTYPE_METHOD 2 #define INFOTYPE_CLASS 3 #define INFOTYPE_UNRESOLVED 4 #define SUBTYPE_GET 1 #define SUBTYPE_SET 2 #define SUBTYPE_GETSET 3 #define SLOTINFO_HEAD \ U8 kind,subtype,flags,access; \ const char*package; \ const char*name; \ int slot; struct _slotinfo { SLOTINFO_HEAD; }; struct _unresolvedinfo { SLOTINFO_HEAD; namespace_list_t*nsset; }; struct _classinfo { SLOTINFO_HEAD; classinfo_t*superclass; dict_t members; dict_t static_members; void*data; //TODO: get rid of this- parser.y should pass type/value/code triples around asset_bundle_t*assets; classinfo_t*interfaces[]; }; struct _memberinfo { SLOTINFO_HEAD; union { classinfo_t*return_type; classinfo_t*type; }; classinfo_t*parent; }; struct _methodinfo /*extends memberinfo*/ { SLOTINFO_HEAD; classinfo_t*return_type; classinfo_t*parent; classinfo_list_t*params; }; struct _varinfo /*extends memberinfo*/ { SLOTINFO_HEAD; classinfo_t*type; classinfo_t*parent; constant_t*value; }; struct _asset_bundle { abc_file_t*file; asset_bundle_list_t*dependencies; char used; }; extern type_t memberinfo_type; extern type_t slotinfo_type; char slotinfo_equals(slotinfo_t*c1, slotinfo_t*c2); void registry_init(); classinfo_t* classinfo_register(int access, const char*package, const char*name, int num_interfaces); methodinfo_t* methodinfo_register_onclass(classinfo_t*cls, U8 access, const char*ns, const char*name, char is_static); methodinfo_t* methodinfo_register_global(U8 access, const char*package, const char*name); varinfo_t* varinfo_register_onclass(classinfo_t*cls, U8 access, const char*ns, const char*name, char is_static); varinfo_t* varinfo_register_global(U8 access, const char*package, const char*name); slotinfo_t* registry_resolve(slotinfo_t*s); void registry_resolve_all(); slotinfo_t* registry_find(const char*package, const char*name); void registry_dump(); memberinfo_t* registry_findmember(classinfo_t*cls, const char*ns, const char*name, char superclasses, char is_static); memberinfo_t* registry_findmember_nsset(classinfo_t*cls, namespace_list_t*ns, const char*name, char superclasses, char is_static); void registry_fill_multiname(multiname_t*m, namespace_t*n, slotinfo_t*c); #define MULTINAME(m,x) \ multiname_t m;\ namespace_t m##_ns;\ (x)->package; \ registry_fill_multiname(&m, &m##_ns, (slotinfo_t*)(x)); multiname_t* classinfo_to_multiname(slotinfo_t*cls); char registry_isfunctionclass(); char registry_isclassclass(); classinfo_t* slotinfo_asclass(slotinfo_t*f); classinfo_t* slotinfo_gettype(slotinfo_t*); namespace_t access2namespace(U8 access, char*package); char registry_ispackage(const char*package); void registry_add_asset(asset_bundle_t*bundle); void registry_use(slotinfo_t*s); asset_bundle_list_t*registry_getassets(); // static multinames classinfo_t voidclass; classinfo_t* registry_getanytype(); classinfo_t* registry_getarrayclass(); classinfo_t* registry_getobjectclass(); classinfo_t* registry_getnumberclass(); classinfo_t* registry_getstringclass(); classinfo_t* registry_getdateclass(); classinfo_t* registry_getintclass(); classinfo_t* registry_getuintclass(); classinfo_t* registry_getnullclass(); classinfo_t* registry_getvoidclass(); classinfo_t* registry_getarrayclass(); classinfo_t* registry_getregexpclass(); classinfo_t* registry_getxmlclass(); classinfo_t* registry_getxmllistclass(); classinfo_t* registry_getbooleanclass(); classinfo_t* registry_getMovieClip(); classinfo_t* registry_getclassclass(classinfo_t*a); classinfo_t* registry_getnamespaceclass(); extern classinfo_t voidclass; char* infotypename(slotinfo_t*s); void slotinfo_dump(slotinfo_t*s); /* convenience functions */ #define sig2mname(x) (x->superclass,classinfo_to_multiname((slotinfo_t*)(x))) #define TYPE_ANY (0) #define TYPE_IS_ANY(t) ((t) == 0) #define TYPE_INT registry_getintclass() #define TYPE_IS_INT(t) ((t) == registry_getintclass()) #define TYPE_UINT registry_getuintclass() #define TYPE_IS_UINT(t) ((t) == registry_getuintclass()) #define TYPE_NUMBER registry_getnumberclass() #define TYPE_IS_NUMBER(t) ((t) == registry_getnumberclass()) #define TYPE_FLOAT registry_getnumberclass() #define TYPE_IS_FLOAT(t) ((t) == registry_getnumberclass()) #define TYPE_BOOLEAN registry_getbooleanclass() #define TYPE_IS_BOOLEAN(t) ((t) == registry_getbooleanclass()) #define TYPE_STRING registry_getstringclass() #define TYPE_IS_STRING(t) ((t) == registry_getstringclass()) #define TYPE_DATE registry_getdateclass() #define TYPE_IS_DATE(t) ((t) == registry_getdateclass()) #define TYPE_OBJECT registry_getobjectclass() #define TYPE_IS_OBJECT(t) ((t) == registry_getobjectclass()) #define TYPE_REGEXP registry_getregexpclass() #define TYPE_IS_REGEXP(t) ((t) == registry_getregexpclass()) #define TYPE_VOID registry_getvoidclass() #define TYPE_IS_VOID(t) ((t) == registry_getvoidclass()) #define TYPE_ARRAY registry_getarrayclass() #define TYPE_IS_ARRAY(t) ((t) == registry_getarrayclass()) #define TYPE_NAMESPACE registry_getnamespaceclass() #define TYPE_IS_NAMESPACE(t) ((t) == registry_getnamespaceclass()) #define TYPE_FUNCTION(f) ((f)->return_type,slotinfo_asclass((slotinfo_t*)(f))) #define TYPE_IS_FUNCTION(t) registry_isfunctionclass(t) #define TYPE_CLASS(f) ((f)->superclass,slotinfo_asclass((slotinfo_t*)(f))) #define TYPE_IS_CLASS(t) registry_isclassclass(t) #define TYPE_NULL registry_getnullclass() #define TYPE_IS_NULL(t) ((t) == registry_getnullclass()) #define TYPE_VOID registry_getvoidclass() #define TYPE_IS_VOID(t) ((t) == registry_getvoidclass()) #define TYPE_XML registry_getxmlclass() #define TYPE_IS_XML(t) ((t) == registry_getxmlclass()) #define TYPE_XMLLIST registry_getxmllistclass() #define TYPE_IS_XMLLIST(t) ((t) == registry_getxmllistclass()) #define TYPE_IS_BUILTIN_SIMPLE(type) (TYPE_IS_INT(type) || \ TYPE_IS_UINT(type) || \ TYPE_IS_FLOAT(type) || \ TYPE_IS_BOOLEAN(type) || \ TYPE_IS_STRING(type)) #define IS_NUMBER_OR_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a)) || TYPE_IS_NUMBER((a))) #endif swftools_0.9.2+git20130725.orig/lib/as3/compiler.h0000644000175000017500000000327012216332640020544 0ustar gawaingawain/* compiler.h Routines for handling/compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #ifndef __as3_compiler_h__ #define __as3_compiler_h__ void registry_init(); void as3_setverbosity(int level); void as3_add_include_dir(char*dir); void as3_set_define(const char*c); void as3_set_option(const char*key, const char*value); void as3_parse_file(const char*filename); void as3_parse_bytearray(const char*name, const void*mem, int length); void as3_parse_directory(const char*dir); char as3_schedule_directory(const char*dir); void as3_schedule_package(const char*package); void as3_schedule_class(const char*package, const char*cls); void as3_schedule_class_noerror(const char*package, const char*cls); void as3_warning(const char*format, ...); char* as3_getglobalclass(); void* as3_getcode(); void* as3_getassets(void*); void as3_destroy(); #endif //__as3_compiler_h__ swftools_0.9.2+git20130725.orig/lib/as3/common.c0000644000175000017500000000456312216332640020223 0ustar gawaingawain/* common.c Routines for handling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #include #include #include #include "files.h" #include "common.h" int as3_pass = 0; int as3_verbosity = 1; void as3_error(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(as3_verbosity<0) exit(1); va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); fprintf(stderr, "%s:%d:%d: error: %s\n", current_filename, current_line, current_column, buf); fprintf(stderr, "%s\n", current_filename_long); fflush(stderr); exit(1); } void as3_warning(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(as3_verbosity<1) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); fprintf(stdout, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf); fflush(stdout); } void as3_softwarning(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(as3_verbosity<2) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf); fflush(stderr); } void internal_error(const char*file, int line, const char*f) { syntaxerror("internal error in %s, %s:%d", f, file, line); } int a3_error(char*s) { syntaxerror("%s", s); return 0; //make gcc happy } swftools_0.9.2+git20130725.orig/lib/as3/abc.h0000644000175000017500000001341712216332640017463 0ustar gawaingawain/* abc.h Routines for handling Flash2 AVM2 ABC Actionscript (header file) Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __swfabc_h__ #define __swfabc_h__ #include "../q.h" #include "pool.h" DECLARE(abc_file); DECLARE(abc_method); DECLARE(abc_method_body); DECLARE(abc_interface); DECLARE(abc_class); DECLARE(abc_exception); DECLARE(abc_asset); DECLARE(asset_dependency); DECLARE(asset_tag); DECLARE_LIST(abc_asset); DECLARE_LIST(asset_dependency); DECLARE_LIST(asset_tag); DECLARE_LIST(abc_exception); DECLARE_LIST(TAG); #include "code.h" #include "opcodes.h" DECLARE(trait); #define METHOD_NEED_ARGUMENTS 1 #define METHOD_NEED_ACTIVATION 2 #define METHOD_NEED_REST 4 #define METHOD_HAS_OPTIONAL 8 #define METHOD_SET_DXNS 0x40 #define METHOD_HAS_PARAM_NAMES 0x80 struct _abc_method { multiname_t*return_type; multiname_list_t*parameters; constant_list_t*optional_parameters; const char*name; U8 flags; abc_method_body_t*body; trait_t*trait; int index; //filled in during writing }; #define ABCFILE_LAZY 1 struct _abc_file { // abc_file const char*name; U32 flags; array_t*metadata; array_t*methods; array_t*classes; array_t*scripts; array_t*method_bodies; }; abc_file_t*abc_file_new(); #define TRAIT_SLOT 0 #define TRAIT_METHOD 1 #define TRAIT_GETTER 2 #define TRAIT_SETTER 3 #define TRAIT_CLASS 4 #define TRAIT_FUNCTION 5 #define TRAIT_CONST 6 #define TRAIT_ATTR_FINAL 0x10 #define TRAIT_ATTR_OVERRIDE 0x20 #define TRAIT_ATTR_METADATA 0x40 struct _trait { unsigned char kind; unsigned char attributes; multiname_t*name; union { int disp_id; int slot_id; int data1; }; union { abc_method_t*method; abc_class_t*cls; multiname_t*type_name; int data2; }; constant_t*value; }; trait_t*trait_new_method(trait_list_t**traits, multiname_t*name, abc_method_t*m); trait_t*trait_new_member(trait_list_t**traits, multiname_t*type, multiname_t*name, constant_t*v); #define CLASS_SEALED 1 #define CLASS_FINAL 2 #define CLASS_INTERFACE 4 #define CLASS_PROTECTED_NS 8 struct _abc_class { abc_file_t*file; multiname_t*classname; multiname_t*superclass; namespace_t*protectedNS; multiname_list_t*interfaces; abc_method_t*constructor; trait_list_t*traits; abc_method_t*static_constructor; trait_list_t*static_traits; U8 flags; abc_asset_t*asset; // swf tags needed for this class int init_scope_depth; // volatile, might be increased during code verification int index; //filled in during writing }; void abc_method_init(abc_method_t*m, abc_file_t*file, multiname_t*returntype, char body); abc_method_t* abc_method_new(abc_file_t*file, multiname_t*returntype, char body); abc_class_t* abc_class_new(abc_file_t*file, multiname_t*classname, multiname_t*superclass); abc_class_t* abc_class_new2(abc_file_t*file, char*classname, char*superclass); void abc_class_sealed(abc_class_t*c); void abc_class_final(abc_class_t*c); void abc_class_interface(abc_class_t*c); void abc_class_protectedNS(abc_class_t*c, char*namespace); void abc_class_add_interface(abc_class_t*c, multiname_t*interface); char*abc_class_fullname(abc_class_t*cls); trait_t* traits_find_slotid(trait_list_t*traits, int slotid); abc_method_t* abc_class_getconstructor(abc_class_t*cls, multiname_t*returntype); abc_method_t* abc_class_getstaticconstructor(abc_class_t*cls, multiname_t*returntype); abc_method_t* abc_class_method(abc_class_t*cls, multiname_t*returntype, multiname_t*name); abc_method_t* abc_class_staticmethod(abc_class_t*cls, multiname_t*returntype, multiname_t*name); trait_t* abc_class_slot(abc_class_t*cls, multiname_t*name, multiname_t*type); trait_t* abc_class_staticslot(abc_class_t*cls, multiname_t*name, multiname_t*type); struct _abc_exception { code_t*from; code_t*to; code_t*target; multiname_t*exc_type; multiname_t*var_name; }; struct _abc_method_body { abc_file_t*file; //abc_class_t*cls; abc_method_t*method; code_t*code; struct { //for dumping: filled in during parsing int max_stack; int local_count; int max_scope_depth; int init_scope_depth; } old; int init_scope_depth; // volatile, might be increased during code verification abc_exception_list_t* exceptions; trait_list_t*traits; int index; // filled in during writing codestats_t*stats; //filled in during writing }; typedef struct _abc_script { abc_method_t*method; abc_file_t*file; trait_list_t*traits; } abc_script_t; struct _asset_dependency { abc_asset_t*asset; int patch_pos; }; struct _asset_tag { TAG*tag; asset_dependency_t*deps; int num_deps; }; struct _abc_asset { asset_tag_list_t*tags; U16 id; }; abc_method_t* abc_nullmethod(abc_file_t*file); abc_script_t* abc_initscript(abc_file_t*file); trait_t*abc_initscript_addClassTrait(abc_script_t*script, multiname_t*multiname, abc_class_t*cls); #define __ #endif swftools_0.9.2+git20130725.orig/lib/as3/expr.c0000644000175000017500000020723212216332640017707 0ustar gawaingawain/* expr.c Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #include "expr.h" #include "common.h" #include "tokenizer.h" #define IS_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a))) #define BOTH_INT(a,b) (IS_INT(a) && IS_INT(b)) #define READ_HEADER_LEFTRIGHT \ typedcode_t left = n->child[0]->type->read(n->child[0]);\ typedcode_t right = n->child[1]->type->read(n->child[1]);\ code_t*c=0;\ classinfo_t*t=0; #define READ_HEADER_ONE \ typedcode_t x = n->child[0]->type->read(n->child[0]);\ code_t*c=0;\ classinfo_t*t=0; #define EXEC_HEADER_ONE \ code_t* x = n->child[0]->type->exec(n->child[0]);\ code_t*c=0;\ classinfo_t*t=0; #define EXEC_HEADER_LEFTRIGHT \ code_t* left = n->child[0]->type->exec(n->child[0]);\ code_t* right = n->child[1]->type->exec(n->child[1]);\ code_t*c=0;\ classinfo_t*t=0; #define EVAL_HEADER_LEFTRIGHT \ constant_t left = n->child[0]->type->eval(n->child[0]);\ constant_t right = n->child[1]->type->eval(n->child[1]);\ constant_t r; \ if(left.type==CONSTANT_UNKNOWN || right.type==CONSTANT_UNKNOWN) {\ r.type = CONSTANT_UNKNOWN;return r; \ } #define RET \ typedcode_t r; \ r.c = c; \ r.t = t; \ return r; static classinfo_t*join_types(classinfo_t*type1, classinfo_t*type2, nodetype_t*t) { if(t == &node_plus) { if((TYPE_IS_XMLLIST(type1) || TYPE_IS_XML(type1)) && (TYPE_IS_XMLLIST(type2) || TYPE_IS_XML(type2))) return TYPE_OBJECT; if(BOTH_INT(type1, type2)) return TYPE_INT; if(IS_NUMBER_OR_INT(type1) && IS_NUMBER_OR_INT(type2)) return TYPE_NUMBER; if(TYPE_IS_DATE(type1) || TYPE_IS_DATE(type2)) return TYPE_OBJECT; if(TYPE_IS_STRING(type1) || TYPE_IS_STRING(type2)) { /* depending on where the strings come from, the result type of an "add" might be an object or a string, depending on the verifier's mood. So basically we just don't know the type. */ return TYPE_VOID; } if(TYPE_IS_ANY(type1) || TYPE_IS_ANY(type2)) return TYPE_ANY; return TYPE_OBJECT; // e.g. array+array = object } if(type1 == type2) return type1; return TYPE_ANY; } static int getlocalnr(code_t*c) { if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];} else if(c->opcode == OPCODE_GETLOCAL_0) {return 0;} else if(c->opcode == OPCODE_GETLOCAL_1) {return 1;} else if(c->opcode == OPCODE_GETLOCAL_2) {return 2;} else if(c->opcode == OPCODE_GETLOCAL_3) {return 3;} else syntaxerror("Internal error: opcode %02x is not a getlocal call", c->opcode); return 0; } int gettempvar(); /* FIXME: we should use a function pointer here */ static code_t* toreadwrite(code_t*in, code_t*middlepart, char justassign, char readbefore, char pushvalue) { /* converts this: [prefix code] [read instruction] to this: [prefix code] ([dup]) [read instruction] [middlepart] [setvar] [write instruction] [getvar] */ if(in && in->opcode == OPCODE_COERCE_A) { in = code_cutlast(in); } if(in->next) syntaxerror("internal error"); /* chop off read instruction */ code_t*prefix = in; code_t*r = in; if(r->prev) { prefix = r->prev;r->prev = 0; prefix->next=0; } else { prefix = 0; } char use_temp_var = readbefore; /* generate the write instruction, and maybe append a dup to the prefix code */ code_t* write = abc_nop(0); if(r->opcode == OPCODE_GETPROPERTY) { write->opcode = OPCODE_SETPROPERTY; multiname_t*m = (multiname_t*)r->data[0]; write->data[0] = multiname_clone(m); if(m->type == QNAME || m->type == MULTINAME || m->type == QNAMEA || m->type == MULTINAMEA) { if(!justassign) { prefix = abc_dup(prefix); // we need the object, too } use_temp_var = 1; } else if(m->type == MULTINAMEL || m->type == MULTINAMELA || m->type == RTQNAME || m->type == RTQNAMEA) { if(!justassign) { /* dupping two values on the stack requires 5 operations and one register- couldn't adobe just have given us a dup2? */ int temp = gettempvar(); prefix = abc_setlocal(prefix, temp); prefix = abc_dup(prefix); prefix = abc_getlocal(prefix, temp); prefix = abc_swap(prefix); prefix = abc_getlocal(prefix, temp); if(!use_temp_var); prefix = abc_kill(prefix, temp); } use_temp_var = 1; } else { syntaxerror("illegal lvalue: can't assign a value to this expression (not a qname/multiname)"); } } else if(r->opcode == OPCODE_GETSLOT) { write->opcode = OPCODE_SETSLOT; write->data[0] = r->data[0]; if(!justassign) { prefix = abc_dup(prefix); // we need the object, too } use_temp_var = 1; } else if(r->opcode == OPCODE_GETLOCAL) { write->opcode = OPCODE_SETLOCAL; write->data[0] = r->data[0]; } else if(r->opcode == OPCODE_GETLOCAL_0) { write->opcode = OPCODE_SETLOCAL_0; } else if(r->opcode == OPCODE_GETLOCAL_1) { write->opcode = OPCODE_SETLOCAL_1; } else if(r->opcode == OPCODE_GETLOCAL_2) { write->opcode = OPCODE_SETLOCAL_2; } else if(r->opcode == OPCODE_GETLOCAL_3) { write->opcode = OPCODE_SETLOCAL_3; } else if(r->opcode == OPCODE_GETSUPER) { write->opcode = OPCODE_SETSUPER; multiname_t*m = (multiname_t*)r->data[0]; write->data[0] = multiname_clone(m); } else { code_dump(r); syntaxerror("illegal lvalue: can't assign a value to this expression"); } code_t* c = 0; int temp = -1; if(!justassign) { if(use_temp_var) { /* with getproperty/getslot, we have to be extra careful not to execute the read code twice, as it might have side-effects (e.g. if the property is in fact a setter/getter combination) So read the value, modify it, and write it again, using prefix only once and making sure (by using a temporary register) that the return value is what we just wrote */ temp = gettempvar(); c = code_append(c, prefix); c = code_append(c, r); if(pushvalue && readbefore) { c = abc_dup(c); c = abc_setlocal(c, temp); } c = code_append(c, middlepart); if(pushvalue && !readbefore) { c = abc_dup(c); c = abc_setlocal(c, temp); } c = code_append(c, write); if(pushvalue) { c = abc_getlocal(c, temp); c = abc_kill(c, temp); } } else { /* if we're allowed to execute the read code twice *and* the middlepart doesn't modify the code, things are easier. */ //c = code_append(c, prefix); if(prefix) syntaxerror("internal error (prefix)"); code_t* r2 = 0; if(pushvalue) { r2 = code_dup(r); } c = code_append(c, r); c = code_append(c, middlepart); c = code_append(c, write); if(pushvalue) { c = code_append(c, r2); } } } else { /* even smaller version: overwrite the value without reading it out first */ if(!use_temp_var) { if(prefix) { c = code_append(c, prefix); c = abc_dup(c); } c = code_append(c, middlepart); c = code_append(c, write); if(pushvalue) { c = code_append(c, r); } } else { code_free(r);r=0; temp = gettempvar(); if(prefix) { c = code_append(c, prefix); } c = code_append(c, middlepart); if(pushvalue) { c = abc_dup(c); c = abc_setlocal(c, temp); } c = code_append(c, write); if(pushvalue) { c = abc_getlocal(c, temp); c = abc_kill(c, temp); } } } return c; } typedcode_t push_constant(constant_t*v) { typedcode_t t; switch(v->type) { case CONSTANT_INT: t.c = abc_pushint(0, v->i);t.t = TYPE_INT;break; case CONSTANT_UINT: t.c = abc_pushuint(0, v->u);t.t = TYPE_UINT;break; case CONSTANT_FLOAT: t.c = abc_pushdouble(0, v->f);t.t = TYPE_FLOAT;break; case CONSTANT_TRUE: t.c = abc_pushtrue(0);t.t = TYPE_BOOLEAN;break; case CONSTANT_FALSE: t.c = abc_pushfalse(0);t.t = TYPE_BOOLEAN;break; case CONSTANT_STRING: t.c = abc_pushstring2(0, v->s);t.t = TYPE_STRING;break; case CONSTANT_NULL: t.c = abc_pushnull(0);t.t = TYPE_NULL;break; case CONSTANT_UNDEFINED: t.c = abc_pushundefined(0);t.t = TYPE_ANY;break; case CONSTANT_NAMESPACE: case CONSTANT_NAMESPACE_PACKAGE: case CONSTANT_NAMESPACE_PACKAGEINTERNAL: case CONSTANT_NAMESPACE_PROTECTED: case CONSTANT_NAMESPACE_EXPLICIT: case CONSTANT_NAMESPACE_STATICPROTECTED: case CONSTANT_NAMESPACE_PRIVATE: t.c = abc_pushnamespace(0, v->ns);t.t = TYPE_NAMESPACE;break; default: syntaxerror("internal error: bad constant"); } return t; } code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to); int constant_to_int(constant_t*c) { switch(c->type) { case CONSTANT_INT: return c->i; case CONSTANT_UINT: return (int)c->u; case CONSTANT_FLOAT: return c->f; case CONSTANT_TRUE: return 1; case CONSTANT_FALSE: return 0; case CONSTANT_STRING: return atoi(c->s->str); default: syntaxerror("can't convert this constant to an integer"); } } double constant_to_float(constant_t*c) { switch(c->type) { case CONSTANT_INT: return (double)c->i; case CONSTANT_UINT: return (double)c->u; case CONSTANT_FLOAT: return c->f; case CONSTANT_TRUE: return (double)1; case CONSTANT_FALSE: return (double)0; case CONSTANT_STRING: return atof(c->s->str); default: syntaxerror("can't convert this constant to a float"); } } // -------------------------- x + y ----------------------------------- typedcode_t node_plus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_plus_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); if(BOTH_INT(left.t, right.t)) { c = abc_add_i(c); t = TYPE_INT; } else { c = abc_add(c); t = join_types(left.t,right.t,n->type); } RET; } code_t* node_plus_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_plus_eval(node_t*n) { EVAL_HEADER_LEFTRIGHT; char left_int = left.type == CONSTANT_INT || left.type == CONSTANT_UINT; if(left_int && (right.type == CONSTANT_INT || right.type == CONSTANT_UINT)) { int i = constant_to_int(&left) + constant_to_int(&right); r.type = CONSTANT_INT; r.i = i; } else if(left_int && right.type == CONSTANT_FLOAT) { double f = constant_to_int(&left) + constant_to_float(&right); r.type = CONSTANT_FLOAT; r.f = f; } else if(left.type == CONSTANT_STRING) { char*add = constant_tostring(&right); int l1 = left.s->len; int l2 = strlen(add); char*s = malloc(l1+l2+1); memcpy(s, left.s->str, l1); memcpy(s+l1, add, l2); s[l1+l2]=0; r.type = CONSTANT_STRING; r.s = malloc(sizeof(string_t)); r.s->str = s; r.s->len = l1+l2; free(add); } else { r.type = CONSTANT_UNKNOWN; } return r; } nodetype_t node_plus = { name:"plus", flags:NODE_HAS_CHILDREN, eval:node_plus_eval, write:node_plus_write, read:node_plus_read, exec:node_plus_exec, }; // -------------------------- x - y ----------------------------------- typedcode_t node_minus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_minus_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); if(BOTH_INT(left.t,right.t)) { c = abc_subtract_i(c); t = TYPE_INT; } else { c = abc_subtract(c); t = TYPE_NUMBER; } RET; } code_t* node_minus_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_minus_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_minus = { name:"minus", flags:NODE_HAS_CHILDREN, eval: node_minus_eval, write: node_minus_write, read: node_minus_read, exec: node_minus_exec }; // ---------------------------- ++x ----------------------------------- typedcode_t node_lplusplus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_lplusplus_read(node_t*n) { READ_HEADER_ONE; t = x.t; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_inclocal_i(c, nr); c = abc_getlocal(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_inclocal(c, nr); c = abc_getlocal(c, nr); } else syntaxerror("internal error"); } else { if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_increment_i(c); t = TYPE_INT; } else { c = abc_increment(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); c = toreadwrite(x.c, c, 0, 0, 1); t = x.t; } RET } code_t* node_lplusplus_exec(node_t*n) { typedcode_t x = n->child[0]->type->read(n->child[0]); code_t*c=0; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_inclocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_inclocal(c, nr); } else syntaxerror("internal error"); } else { classinfo_t*t; if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_increment_i(c); t = TYPE_INT; } else { c = abc_increment(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); //convert back to original type c = toreadwrite(x.c, c, 0, 0, 0); t = x.t; } return c; } constant_t node_lplusplus_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_lplusplus = { name: "lplusplus", flags:NODE_HAS_CHILDREN, eval: node_lplusplus_eval, write: node_lplusplus_write, read: node_lplusplus_read, exec: node_lplusplus_exec }; // ---------------------------- --x ----------------------------------- typedcode_t node_lminusminus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_lminusminus_read(node_t*n) { READ_HEADER_ONE; t = x.t; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_declocal_i(c, nr); c = abc_getlocal(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_declocal(c, nr); c = abc_getlocal(c, nr); } else syntaxerror("internal error"); } else { if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_decrement_i(c); t = TYPE_INT; } else { c = abc_decrement(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); c = toreadwrite(x.c, c, 0, 0, 1); t = x.t; } RET } code_t* node_lminusminus_exec(node_t*n) { typedcode_t x = n->child[0]->type->read(n->child[0]); code_t*c=0; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_declocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_declocal(c, nr); } else syntaxerror("internal error"); } else { classinfo_t*t; if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_decrement_i(c); t = TYPE_INT; } else { c = abc_decrement(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); //convert back to original type c = toreadwrite(x.c, c, 0, 0, 0); t = x.t; } return c; } constant_t node_lminusminus_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_lminusminus = { name: "lminusminus", flags:NODE_HAS_CHILDREN, eval: node_lminusminus_eval, write: node_lminusminus_write, read: node_lminusminus_read, exec: node_lminusminus_exec }; // ---------------------------- x++ ----------------------------------- typedcode_t node_rplusplus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_rplusplus_read(node_t*n) { READ_HEADER_ONE; t = x.t; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_getlocal(0, nr); c = abc_inclocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_getlocal(0, nr); c = abc_inclocal(c, nr); } else syntaxerror("internal error"); } else { if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_increment_i(c); t = TYPE_INT; } else { c = abc_increment(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); c = toreadwrite(x.c, c, 0, 1, 1); t = x.t; } RET } code_t* node_rplusplus_exec(node_t*n) { typedcode_t x = n->child[0]->type->read(n->child[0]); code_t*c=0; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_inclocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_inclocal(c, nr); } else syntaxerror("internal error"); } else { classinfo_t*t; if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_increment_i(c); t = TYPE_INT; } else { c = abc_increment(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); //convert back to original type c = toreadwrite(x.c, c, 0, 1, 0); t = x.t; } return c; } constant_t node_rplusplus_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_rplusplus = { name: "rplusplus", flags:NODE_HAS_CHILDREN, eval: node_rplusplus_eval, write: node_rplusplus_write, read: node_rplusplus_read, exec: node_rplusplus_exec }; // ---------------------------- x-- ----------------------------------- typedcode_t node_rminusminus_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_rminusminus_read(node_t*n) { READ_HEADER_ONE; t = x.t; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_getlocal(0, nr); c = abc_declocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_getlocal(0, nr); c = abc_declocal(c, nr); } else syntaxerror("internal error"); } else { if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_decrement_i(c); t = TYPE_INT; } else { c = abc_decrement(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); c = toreadwrite(x.c, c, 0, 1, 1); t = x.t; } RET } code_t* node_rminusminus_exec(node_t*n) { typedcode_t x = n->child[0]->type->read(n->child[0]); code_t*c=0; if(is_getlocal(x.c) && (TYPE_IS_INT(x.t) || TYPE_IS_NUMBER(x.t))) { int nr = getlocalnr(x.c); code_free(x.c);x.c=0; if(TYPE_IS_INT(x.t)) { c = abc_declocal_i(c, nr); } else if(TYPE_IS_NUMBER(x.t)) { c = abc_declocal(c, nr); } else syntaxerror("internal error"); } else { classinfo_t*t; if(TYPE_IS_INT(x.t) || TYPE_IS_UINT(x.t)) { c = abc_decrement_i(c); t = TYPE_INT; } else { c = abc_decrement(c); t = TYPE_NUMBER; } c = converttype(c, t, x.t); //convert back to original type c = toreadwrite(x.c, c, 0, 1, 0); t = x.t; } return c; } constant_t node_rminusminus_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_rminusminus = { name: "rminusminus", flags:NODE_HAS_CHILDREN, eval: node_rminusminus_eval, write: node_rminusminus_write, read: node_rminusminus_read, exec: node_rminusminus_exec }; // ---------------------------- x*y ----------------------------------- typedcode_t node_multiply_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_multiply_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); if(BOTH_INT(left.t,right.t)) { c = abc_multiply_i(c); t = TYPE_INT; } else { c = abc_multiply(c); t = TYPE_NUMBER; } RET } code_t* node_multiply_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_multiply_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_multiply = { name: "multiply", flags:NODE_HAS_CHILDREN, eval: node_multiply_eval, write: node_multiply_write, read: node_multiply_read, exec: node_multiply_exec }; // ---------------------------- x/y ----------------------------------- typedcode_t node_div_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_div_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); c = abc_divide(c); t = TYPE_NUMBER; RET } code_t* node_div_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_div_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_div = { name: "div", flags:NODE_HAS_CHILDREN, eval: node_div_eval, write: node_div_write, read: node_div_read, exec: node_div_exec }; // ---------------------------- x%y ----------------------------------- typedcode_t node_mod_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_mod_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); c = abc_modulo(c); t = TYPE_NUMBER; RET } code_t* node_mod_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_mod_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_mod = { name: "mod", flags:NODE_HAS_CHILDREN, eval: node_mod_eval, write: node_mod_write, read: node_mod_read, exec: node_mod_exec }; // ---------------------------- xy ----------------------------------- typedcode_t node_gt_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_gt_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_greaterthan(c); t = TYPE_BOOLEAN; RET; } code_t* node_gt_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_gt_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_gt = { name: "gt", flags:NODE_HAS_CHILDREN, eval: node_gt_eval, write: node_gt_write, read: node_gt_read, exec: node_gt_exec }; // ---------------------------- x<=y ---------------------------------- typedcode_t node_le_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_le_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_lessequals(c); t = TYPE_BOOLEAN; RET; } code_t* node_le_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_le_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_le = //<= { name: "le", flags:NODE_HAS_CHILDREN, eval: node_le_eval, write: node_le_write, read: node_le_read, exec: node_le_exec }; // ---------------------------- x>=y ---------------------------------- typedcode_t node_ge_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_ge_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_greaterequals(c); t = TYPE_BOOLEAN; RET; } code_t* node_ge_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_ge_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_ge = //>= { name: "ge", flags:NODE_HAS_CHILDREN, eval: node_ge_eval, write: node_ge_write, read: node_ge_read, exec: node_ge_exec }; // ---------------------------- x==y ---------------------------------- typedcode_t node_eqeq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_eqeq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_equals(c); t = TYPE_BOOLEAN; RET; } code_t* node_eqeq_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_eqeq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_eqeq = //== { name: "eqeq", flags:NODE_HAS_CHILDREN, eval: node_eqeq_eval, write: node_eqeq_write, read: node_eqeq_read, exec: node_eqeq_exec }; // --------------------------- x===y ---------------------------------- typedcode_t node_eqeqeq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_eqeqeq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_strictequals(c); t = TYPE_BOOLEAN; RET; } code_t* node_eqeqeq_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_eqeqeq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_eqeqeq = //=== { name: "eqeqeq", flags:NODE_HAS_CHILDREN, eval: node_eqeqeq_eval, write: node_eqeqeq_write, read: node_eqeqeq_read, exec: node_eqeqeq_exec }; // --------------------------- x!==y ---------------------------------- typedcode_t node_noteqeq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_noteqeq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_strictequals(c); c = abc_not(c); t = TYPE_BOOLEAN; RET; } code_t* node_noteqeq_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_noteqeq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_noteqeq = //!== { name: "noteqeq", flags:NODE_HAS_CHILDREN, eval: node_noteqeq_eval, write: node_noteqeq_write, read: node_noteqeq_read, exec: node_noteqeq_exec }; // --------------------------- x!=y ---------------------------------- typedcode_t node_noteq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_noteq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_equals(c); c = abc_not(c); t = TYPE_BOOLEAN; RET; } code_t* node_noteq_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_noteq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_noteq = //!= { name: "noteq", flags:NODE_HAS_CHILDREN, eval: node_noteq_eval, write: node_noteq_write, read: node_noteq_read, exec: node_noteq_exec }; // --------------------------- x||y ---------------------------------- typedcode_t node_oror_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_oror_read(node_t*n) { READ_HEADER_LEFTRIGHT; t = join_types(left.t, right.t, n->type); c = left.c; c = converttype(c, left.t, t); c = abc_dup(c); code_t*jmp = c = abc_iftrue(c, 0); c = cut_last_push(c); c = code_append(c, right.c); c = converttype(c, right.t, t); code_t*label = c = abc_label(c); jmp->branch = label; RET; } code_t* node_oror_exec(node_t*n) { typedcode_t left = n->child[0]->type->read(n->child[0]); code_t* right = n->child[1]->type->exec(n->child[1]); code_t*c = left.c; code_t*jmp = c = abc_iftrue(c, 0); c = code_append(c, right); code_t*label = c = abc_label(c); jmp->branch = label; return c; } constant_t node_oror_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_oror = //|| { name: "oror", flags:NODE_HAS_CHILDREN, eval: node_oror_eval, write: node_oror_write, read: node_oror_read, exec: node_oror_exec }; // --------------------------- x&&y ---------------------------------- typedcode_t node_andand_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_andand_read(node_t*n) { READ_HEADER_LEFTRIGHT; t = join_types(left.t, right.t, &node_andand); c = left.c; c = converttype(c, left.t, t); c = abc_dup(c); code_t*jmp = c = abc_iffalse(c, 0); c = cut_last_push(c); c = code_append(c,right.c); c = converttype(c, right.t, t); code_t*label = c = abc_label(c); jmp->branch = label; RET; } code_t* node_andand_exec(node_t*n) { typedcode_t left = n->child[0]->type->read(n->child[0]);\ code_t* right = n->child[1]->type->exec(n->child[1]);\ code_t*c = left.c; code_t*jmp = c = abc_iffalse(c, 0); c = code_append(c, right); code_t*label = c = abc_label(c); jmp->branch = label; return c; } constant_t node_andand_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_andand = //&& { name: "andand", flags:NODE_HAS_CHILDREN, eval: node_andand_eval, write: node_andand_write, read: node_andand_read, exec: node_andand_exec }; // ----------------------------- !x ----------------------------------- typedcode_t node_not_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_not_read(node_t*n) { READ_HEADER_ONE; c = x.c; c = abc_not(c); t = TYPE_BOOLEAN; RET; } code_t* node_not_exec(node_t*n) { EXEC_HEADER_ONE; return x; } constant_t node_not_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_not = { name: "not", flags:NODE_HAS_CHILDREN, eval: node_not_eval, write: node_not_write, read: node_not_read, exec: node_not_exec }; // ----------------------------- ~x ----------------------------------- typedcode_t node_bitnot_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitnot_read(node_t*n) { READ_HEADER_ONE; c = x.c; c = abc_bitnot(c); t = TYPE_INT; RET; } code_t* node_bitnot_exec(node_t*n) { EXEC_HEADER_ONE; return x; } constant_t node_bitnot_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitnot = { name: "bitnot", flags:NODE_HAS_CHILDREN, eval: node_bitnot_eval, write: node_bitnot_write, read: node_bitnot_read, exec: node_bitnot_exec }; // ----------------------------- x&y ----------------------------------- typedcode_t node_bitand_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitand_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_bitand(c); t = TYPE_INT; RET; } code_t* node_bitand_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_bitand_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitand = { name: "bitand", flags:NODE_HAS_CHILDREN, eval: node_bitand_eval, write: node_bitand_write, read: node_bitand_read, exec: node_bitand_exec }; // ----------------------------- x^y ----------------------------------- typedcode_t node_bitxor_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitxor_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_bitxor(c); t = TYPE_INT; RET; } code_t* node_bitxor_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_bitxor_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitxor = { name: "bitxor", flags:NODE_HAS_CHILDREN, eval: node_bitxor_eval, write: node_bitxor_write, read: node_bitxor_read, exec: node_bitxor_exec }; // ----------------------------- x|y ----------------------------------- typedcode_t node_bitor_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitor_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_bitor(c); t = TYPE_INT; RET; } code_t* node_bitor_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_bitor_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitor = { name: "bitor", flags:NODE_HAS_CHILDREN, eval: node_bitor_eval, write: node_bitor_write, read: node_bitor_read, exec: node_bitor_exec }; // ---------------------------- x>>y ----------------------------------- typedcode_t node_shr_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_shr_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_rshift(c); t = TYPE_INT; RET; } code_t* node_shr_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_shr_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_shr = //>> { name: "shr", flags:NODE_HAS_CHILDREN, eval: node_shr_eval, write: node_shr_write, read: node_shr_read, exec: node_shr_exec }; // ---------------------------- x<>>y ----------------------------------- typedcode_t node_ushr_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_ushr_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_urshift(c); t = TYPE_INT; RET; } code_t* node_ushr_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_ushr_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_ushr = //>>> { name: "ushr", flags:NODE_HAS_CHILDREN, eval: node_ushr_eval, write: node_ushr_write, read: node_ushr_read, exec: node_ushr_exec }; // ---------------------------- x in y ---------------------------------- typedcode_t node_in_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_in_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c,right.c); c = abc_in(c); t = TYPE_BOOLEAN; RET; } code_t* node_in_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_in_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_in = //in { name: "in", flags:NODE_HAS_CHILDREN, eval: node_in_eval, write: node_in_write, read: node_in_read, exec: node_in_exec }; // ---------------------------- x as y ---------------------------------- typedcode_t node_as_write(node_t*n) { /* ? */ syntaxerror("can't assign to this expression"); } typedcode_t node_as_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); c = abc_astypelate(c); if(TYPE_IS_CLASS(right.t) && right.t->data) { t = (classinfo_t*)right.t->data; } else { t = TYPE_ANY; } RET; } code_t* node_as_exec(node_t*n) { /* we assume here that "as" doesn't have side-effects (like early run time type checking) */ EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_as_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_as = //as { name: "as", flags:NODE_HAS_CHILDREN, eval: node_as_eval, write: node_as_write, read: node_as_read, exec: node_as_exec }; // ------------------------- x instanceof y ----------------------------- typedcode_t node_instanceof_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_instanceof_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); c = abc_instanceof(c); t = TYPE_BOOLEAN; RET; } code_t* node_instanceof_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_instanceof_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_instanceof = //instanceof { name: "instanceof", flags:NODE_HAS_CHILDREN, eval: node_instanceof_eval, write: node_instanceof_write, read: node_instanceof_read, exec: node_instanceof_exec }; // ------------------------- x is y -------------------------------------- typedcode_t node_is_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_is_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); c = abc_istypelate(c); t = TYPE_BOOLEAN; RET; } code_t* node_is_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_is_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_is = //is { name: "is", flags:NODE_HAS_CHILDREN, eval: node_is_eval, write: node_is_write, read: node_is_read, exec: node_is_exec }; // ------------------------- x[y] -------------------------------------- typedcode_t node_arraylookup_write(node_t*n) { syntaxerror("not implemented yet"); } typedcode_t node_arraylookup_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = code_append(left.c, right.c); /* XXX not sure whether this access logic is correct */ namespace_t ns = {left.t?left.t->access:ACCESS_PACKAGE, ""}; namespace_set_t nsset; namespace_list_t l;l.next = 0; nsset.namespaces = &l; l.namespace = &ns; multiname_t m = {MULTINAMEL, 0, &nsset, 0}; c = abc_getproperty2(c, &m); t = 0; // array elements have unknown type RET; } code_t* node_arraylookup_exec(node_t*n) { EXEC_HEADER_LEFTRIGHT; return code_append(left, right); } constant_t node_arraylookup_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_arraylookup = { name: "arraylookup", flags:NODE_HAS_CHILDREN, eval: node_arraylookup_eval, write: node_arraylookup_write, read: node_arraylookup_read, exec: node_arraylookup_exec }; // ------------------------- typeof(x) ------------------------------------ typedcode_t node_typeof_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_typeof_read(node_t*n) { READ_HEADER_ONE; c = x.c; c = abc_typeof(c); t = TYPE_BOOLEAN; RET; } code_t* node_typeof_exec(node_t*n) { EXEC_HEADER_ONE; return x; } constant_t node_typeof_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_typeof = //typeof { name: "typeof", flags:NODE_HAS_CHILDREN, eval: node_typeof_eval, write: node_typeof_write, read: node_typeof_read, exec: node_typeof_exec }; // ------------------------- (void)(x) ------------------------------------ typedcode_t node_void_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_void_read(node_t*n) { code_t*c = n->type->exec(n); c = abc_pushundefined(c); classinfo_t*t = TYPE_ANY; RET; } code_t* node_void_exec(node_t*n) { EXEC_HEADER_ONE; return x; } constant_t node_void_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_void = //void { name: "void", flags:NODE_HAS_CHILDREN, eval: node_void_eval, write: node_void_write, read: node_void_read, exec: node_void_exec }; // ---------------------------- -x ---------------------------------------- typedcode_t node_neg_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_neg_read(node_t*n) { READ_HEADER_ONE; c = x.c; if(IS_INT(x.t)) { c = abc_negate_i(c); t = TYPE_INT; } else { c = abc_negate(c); t = TYPE_NUMBER; } RET; } code_t* node_neg_exec(node_t*n) { EXEC_HEADER_ONE; return x; } constant_t node_neg_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_neg = //- { name: "neg", flags:NODE_HAS_CHILDREN, eval: node_neg_eval, write: node_neg_write, read: node_neg_read, exec: node_neg_exec }; // ---------------------------- x*=y ---------------------------------------- typedcode_t node_muleq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_muleq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; classinfo_t*f = 0; if(BOTH_INT(left.t,right.t)) { c=abc_multiply_i(c); f = TYPE_INT; } else { c=abc_multiply(c); f = TYPE_NUMBER; } c=converttype(c, f, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_muleq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; classinfo_t*f = 0; if(BOTH_INT(left.t,right.t)) { c=abc_multiply_i(c); f = TYPE_INT; } else { c=abc_multiply(c); f = TYPE_NUMBER; } c = converttype(c, f, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_muleq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_muleq = { name: "muleq", flags:NODE_HAS_CHILDREN, eval: node_muleq_eval, write: node_muleq_write, read: node_muleq_read, exec: node_muleq_exec }; // ---------------------------- x%=y ---------------------------------------- typedcode_t node_modeq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_modeq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_modulo(right.c); c = converttype(c, TYPE_NUMBER, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_modeq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_modulo(right.c); c = converttype(c, TYPE_NUMBER, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_modeq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_modeq = //%= { name: "modeq", flags:NODE_HAS_CHILDREN, eval: node_modeq_eval, write: node_modeq_write, read: node_modeq_read, exec: node_modeq_exec }; // ---------------------------- x<<=y ---------------------------------------- typedcode_t node_shleq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_shleq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_lshift(right.c); c = converttype(c, TYPE_INT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_shleq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_lshift(right.c); c = converttype(c, TYPE_INT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_shleq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_shleq = //<<= { name: "shleq", flags:NODE_HAS_CHILDREN, eval: node_shleq_eval, write: node_shleq_write, read: node_shleq_read, exec: node_shleq_exec }; // ---------------------------- x>>=y ---------------------------------------- typedcode_t node_shreq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_shreq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_rshift(right.c); c = converttype(c, TYPE_INT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_shreq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_rshift(right.c); c = converttype(c, TYPE_INT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_shreq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_shreq = //>>= { name: "shreq", flags:NODE_HAS_CHILDREN, eval: node_shreq_eval, write: node_shreq_write, read: node_shreq_read, exec: node_shreq_exec }; // --------------------------- x>>>=y ---------------------------------------- typedcode_t node_ushreq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_ushreq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_urshift(right.c); c = converttype(c, TYPE_UINT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_ushreq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_urshift(right.c); c = converttype(c, TYPE_UINT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_ushreq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_ushreq = //>>>= { name: "ushreq", flags:NODE_HAS_CHILDREN, eval: node_ushreq_eval, write: node_ushreq_write, read: node_ushreq_read, exec: node_ushreq_exec }; // --------------------------- x/=y ---------------------------------------- typedcode_t node_diveq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_diveq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_divide(right.c); c = converttype(c, TYPE_NUMBER, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_diveq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_divide(right.c); c = converttype(c, TYPE_NUMBER, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_diveq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_diveq = { name: "diveq", flags:NODE_HAS_CHILDREN, eval: node_diveq_eval, write: node_diveq_write, read: node_diveq_read, exec: node_diveq_exec }; // --------------------------- x|=y ---------------------------------------- typedcode_t node_bitoreq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitoreq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitor(right.c); c = converttype(c, TYPE_INT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_bitoreq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitor(right.c); c = converttype(c, TYPE_INT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_bitoreq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitoreq = //|= { name: "bitoreq", flags:NODE_HAS_CHILDREN, eval: node_bitoreq_eval, write: node_bitoreq_write, read: node_bitoreq_read, exec: node_bitoreq_exec }; // --------------------------- x^=y ---------------------------------------- typedcode_t node_bitxoreq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitxoreq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitxor(right.c); c = converttype(c, TYPE_INT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_bitxoreq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitxor(right.c); c = converttype(c, TYPE_INT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_bitxoreq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitxoreq = //^= { name: "bitxoreq", flags:NODE_HAS_CHILDREN, eval: node_bitxoreq_eval, write: node_bitxoreq_write, read: node_bitxoreq_read, exec: node_bitxoreq_exec }; // --------------------------- x&=y ---------------------------------------- typedcode_t node_bitandeq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_bitandeq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitand(right.c); c = converttype(c, TYPE_INT, left.t); c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_bitandeq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = abc_bitand(right.c); c = converttype(c, TYPE_INT, left.t); return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_bitandeq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_bitandeq = //^= { name: "bitandeq", flags:NODE_HAS_CHILDREN, eval: node_bitandeq_eval, write: node_bitandeq_write, read: node_bitandeq_read, exec: node_bitandeq_exec }; // --------------------------- x+=y ---------------------------------------- typedcode_t node_pluseq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_pluseq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; if(TYPE_IS_INT(left.t)) { c = abc_add_i(c); } else { c = abc_add(c); c = converttype(c, join_types(left.t,right.t,&node_plus), left.t); } c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_pluseq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; if(TYPE_IS_INT(left.t)) { c = abc_add_i(c); } else { c = abc_add(c); c = converttype(c, join_types(left.t,right.t,&node_plus), left.t); } return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_pluseq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_pluseq = //+= { name: "pluseq", flags:NODE_HAS_CHILDREN, eval: node_pluseq_eval, write: node_pluseq_write, read: node_pluseq_read, exec: node_pluseq_exec }; // --------------------------- x-=y ---------------------------------------- typedcode_t node_minuseq_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_minuseq_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; if(TYPE_IS_INT(left.t)) { c = abc_subtract_i(c); } else { c = abc_subtract(c); c = converttype(c, TYPE_NUMBER, left.t); } c = toreadwrite(left.c, c, 0, 0, 1); t = left.t; RET; } code_t* node_minuseq_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; if(TYPE_IS_INT(left.t)) { c = abc_subtract_i(c); } else { c = abc_subtract(c); c = converttype(c, TYPE_NUMBER, left.t); } return toreadwrite(left.c, c, 0, 0, 0); } constant_t node_minuseq_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_minuseq = //-= { name: "minuseq", flags:NODE_HAS_CHILDREN, eval: node_minuseq_eval, write: node_minuseq_write, read: node_minuseq_read, exec: node_minuseq_exec }; // --------------------------- x=y ----------------------------------------- typedcode_t node_assign_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_assign_read(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; c = converttype(c, right.t, left.t); c = toreadwrite(left.c, c, 1, 0, 1); t = left.t; RET; } code_t* node_assign_exec(node_t*n) { READ_HEADER_LEFTRIGHT; c = right.c; c = converttype(c, right.t, left.t); return toreadwrite(left.c, c, 1, 0, 0); } constant_t node_assign_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_assign = { name: "assign", flags:NODE_HAS_CHILDREN, eval: node_assign_eval, write: node_assign_write, read: node_assign_read, exec: node_assign_exec }; // --------------------------- x?y1:y2 -------------------------------------- typedcode_t node_tenary_write(node_t*n) { /* TODO: this might actually be kinda useful. (global?global.x:this.x) = 3; */ syntaxerror("can't assign to this expression"); } typedcode_t node_tenary_read(node_t*n) { typedcode_t cond = n->child[0]->type->read(n->child[0]); typedcode_t left = n->child[1]->type->read(n->child[1]); typedcode_t right = n->child[2]->type->read(n->child[2]); classinfo_t*t = join_types(left.t,right.t,&node_tenary); code_t* c = cond.c; code_t*j1 = c = abc_iffalse(c, 0); c = code_append(c, left.c); c = converttype(c, left.t, t); code_t*j2 = c = abc_jump(c, 0); c = j1->branch = abc_label(c); c = code_append(c, right.c); c = converttype(c, right.t, t); c = j2->branch = abc_label(c); RET; } code_t* node_tenary_exec(node_t*n) { typedcode_t cond = n->child[0]->type->read(n->child[0]); code_t* left = n->child[1]->type->exec(n->child[1]); code_t* right = n->child[2]->type->exec(n->child[2]); code_t* c = cond.c; code_t*j1 = c = abc_iffalse(c, 0); c = code_append(c, left); code_t*j2 = c = abc_jump(c, 0); c = j1->branch = abc_label(c); c = code_append(c, right); c = j2->branch = abc_label(c); return c; } constant_t node_tenary_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_tenary = { name: "tenary", flags:NODE_HAS_CHILDREN, eval: node_tenary_eval, write: node_tenary_write, read: node_tenary_read, exec: node_tenary_exec }; // ---------------------------- comma ---------------------------------------- typedcode_t node_comma_write(node_t*n) { syntaxerror("can't assign to this expression"); } typedcode_t node_comma_read(node_t*n) { code_t*c = 0; classinfo_t*t = 0; int i; for(i=0;inum_children-1;i++) { c = code_append(c, n->child[i]->type->exec(n->child[i])); } typedcode_t o = n->child[i]->type->read(n->child[i]); c = code_append(c, o.c); t = o.t; RET; } code_t* node_comma_exec(node_t*n) { int t; code_t*c = 0; for(t=0;tnum_children;t++) { c = code_append(c, n->child[t]->type->exec(n->child[t])); } return c; } constant_t node_comma_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_comma = { name: "expr", flags: NODE_HAS_CHILDREN, eval: node_comma_eval, write: node_comma_write, read: node_comma_read, exec: node_comma_exec }; #if 0 // -------------------------- new x ----------------------------------- typedcode_t node_new_write(node_t*n) { } typedcode_t node_new_read(node_t*n) { } code_t* node_new_exec(node_t*n) { } constant_t node_new_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_new = //new { write: node_new_write, read: node_new_read, eval: node_new_eval, exec: node_new_exec }; // ------------------------ delete x ---------------------------------- typedcode_t node_delete_write(node_t*n) { } typedcode_t node_delete_read(node_t*n) { } code_t* node_delete_exec(node_t*n) { } constant_t node_delete_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_delete = //delete { write: node_delete_write, read: node_delete_read, eval: node_delete_eval, exec: node_delete_exec }; // ---------------------------- x.y ----------------------------------- typedcode_t node_dot_write(node_t*n) { } typedcode_t node_dot_read(node_t*n) { } code_t* node_dot_exec(node_t*n) { } constant_t node_dot_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dot = { write: node_dot_write, read: node_dot_read, eval: node_dot_eval, exec: node_dot_exec }; // --------------------------- x..y ----------------------------------- typedcode_t node_dotdot_write(node_t*n) { } typedcode_t node_dotdot_read(node_t*n) { } code_t* node_dotdot_exec(node_t*n) { } constant_t node_dotdot_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dotdot = //.. { write: node_dotdot_write, read: node_dotdot_read, eval: node_dotdot_eval, exec: node_dotdot_exec }; // --------------------------- x.@y ----------------------------------- typedcode_t node_dotat_write(node_t*n) { } typedcode_t node_dotat_read(node_t*n) { } code_t* node_dotat_exec(node_t*n) { } constant_t node_dotat_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dotat = //.@ { write: node_dotat_write, read: node_dotat_read, eval: node_dotat_eval, exec: node_dotat_exec }; // --------------------------- x.*y ----------------------------------- typedcode_t node_dotstar_write(node_t*n) { } typedcode_t node_dotstar_read(node_t*n) { } code_t* node_dotstar_exec(node_t*n) { } constant_t node_dotstar_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dotstar = //.* { write: node_dotstar_write, read: node_dotstar_read, eval: node_dotstar_eval, exec: node_dotstar_exec }; // -------------------------- x.(y) ----------------------------------- typedcode_t node_filter_write(node_t*n) { } typedcode_t node_filter_read(node_t*n) { } code_t* node_filter_exec(node_t*n) { } constant_t node_filter_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_filter = //.( { write: node_filter_write, read: node_filter_read, eval: node_filter_eval, exec: node_filter_exec }; // ------------------------ x(y1,...,yn) ------------------------------ typedcode_t node_call_write(node_t*n) { } typedcode_t node_call_read(node_t*n) { } code_t* node_call_exec(node_t*n) { } constant_t node_call_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_call = //functioncall { write: node_call_write, read: node_call_read, eval: node_call_eval, exec: node_call_exec }; // ------------------------------ @x ---------------------------------------- typedcode_t node_at_write(node_t*n) { } typedcode_t node_at_read(node_t*n) { } code_t* node_at_exec(node_t*n) { } constant_t node_at_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_at = //@ { write: node_at_write, read: node_at_read, eval: node_at_eval, exec: node_at_exec }; // ---------------------------- x.ns::y ---------------------------------------- typedcode_t node_dotns_write(node_t*n) { } typedcode_t node_dotns_read(node_t*n) { } code_t* node_dotns_exec(node_t*n) { } constant_t node_dotns_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dotns = //.:: { write: node_dotns_write, read: node_dotns_read, eval: node_dotns_eval, exec: node_dotns_exec }; #endif // ------------------------ constant ------------------------------ typedcode_t node_const_write(node_t*n) { syntaxerror("can't assign a value to a constant"); } typedcode_t node_const_read(node_t*n) { constant_t*v = n->value; code_t*c=0; classinfo_t*t=0; switch(v->type) { case CONSTANT_INT: if(v->i>-128 && v->i<128) { c = abc_pushbyte(0,v->i); } else if(v->i>=-32768 && v->i<32768) { c = abc_pushshort(0,v->i); } else { c = abc_pushint(0,v->i); } t = TYPE_INT; break; case CONSTANT_UINT: c = abc_pushuint(0,v->u); if(v->u<128) { c = abc_pushbyte(0,v->u); } else if(v->u<32768) { c = abc_pushshort(0,v->u); } else { c = abc_pushint(0,v->u); } t = TYPE_UINT; break; case CONSTANT_FLOAT: c = abc_pushdouble(0,v->f); t = TYPE_FLOAT; break; case CONSTANT_TRUE: c = abc_pushtrue(0); t = TYPE_BOOLEAN; break; case CONSTANT_FALSE: c = abc_pushfalse(0); t = TYPE_BOOLEAN; break; case CONSTANT_NULL: c = abc_pushnull(0); t = TYPE_NULL; break; case CONSTANT_STRING: c = abc_pushstring2(0,v->s); t = TYPE_STRING; break; case CONSTANT_UNDEFINED: c = abc_pushundefined(0); t = 0; break; case CONSTANT_NAMESPACE: case CONSTANT_NAMESPACE_PACKAGE: case CONSTANT_NAMESPACE_PACKAGEINTERNAL: case CONSTANT_NAMESPACE_PROTECTED: case CONSTANT_NAMESPACE_EXPLICIT: case CONSTANT_NAMESPACE_STATICPROTECTED: case CONSTANT_NAMESPACE_PRIVATE: c = abc_pushnamespace(0, v->ns); break; case CONSTANT_UNKNOWN: syntaxerror("internal error: invalid constant"); default: syntaxerror("invalid constant (%d)", v->type); } RET; } code_t* node_const_exec(node_t*n) { return 0; } constant_t node_const_eval(node_t*n) { constant_t*c = constant_clone(n->value); constant_t r = *c; free(c); //shallow free return r; } nodetype_t node_const = { name: "const", flags:0, eval: node_const_eval, write: node_const_write, read: node_const_read, exec: node_const_exec }; // ------------------------ code node ------------------------------ typedcode_t node_code_write(node_t*n) { typedcode_t t; t.c = 0; int tmp = gettempvar(); t.c = abc_setlocal(t.c, tmp); code_t*w = toreadwrite(n->code.c, abc_getlocal(0,tmp), 1, 0, 0); t.c = code_append(t.c, w); t.c = abc_kill(t.c, tmp); n->code.c=0; t.t = n->code.t; return t; } typedcode_t node_code_read(node_t*n) { typedcode_t t; t.c = n->code.c; n->code.c=0; t.t = n->code.t; return t; } code_t* node_code_exec(node_t*n) { code_t*c = code_dup(n->code.c); c = cut_last_push(c); return c; } constant_t node_code_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_code = { name: "code", flags:0, eval: node_code_eval, write: node_code_write, read: node_code_read, exec: node_code_exec }; // ------------------------ dummy node ------------------------------ typedcode_t node_dummy_write(node_t*n) { syntaxerror("not implemented yet"); } typedcode_t node_dummy_read(node_t*n) { typedcode_t t; t.c = abc_pushundefined(0); t.t = TYPE_ANY; return t; } code_t* node_dummy_exec(node_t*n) { return 0; } constant_t node_dummy_eval(node_t*n) { constant_t r;r.type=CONSTANT_UNKNOWN;return r; } nodetype_t node_dummy = { name: "dummy", flags:0, eval: node_dummy_eval, write: node_dummy_write, read: node_dummy_read, exec: node_dummy_exec }; // ======================== node handling ============================== node_t* mkdummynode() { node_t*n = (node_t*)rfx_calloc(sizeof(node_t)); n->type = &node_dummy; return n; } node_t* mkconstnode(constant_t*c) { node_t*n = (node_t*)malloc(sizeof(node_t)); n->type = &node_const; n->parent = 0; n->value = c; return n; } node_t* mkcodenode(typedcode_t c) { node_t*n = (node_t*)malloc(sizeof(node_t)); n->type = &node_code; n->parent = 0; n->code = c; return n; } node_t* mkmultinode(nodetype_t*t, node_t*one) { node_t*n = (node_t*)malloc(sizeof(node_t)); n->type = t; n->parent = 0; n->child = (node_t**)malloc(sizeof(node_t*)*1); n->child[0] = one; n->num_children = 1; return n; } node_t* mkstringnode(const char*s) { return mkconstnode(constant_new_string(s)); } node_t* mkaddnode(node_t*n1, node_t*n2) { return mknode2(&node_plus, n1, n2); } node_t* multinode_extend(node_t*n, node_t*add) { n->child = realloc(n->child, (n->num_children+1)*sizeof(node_t*)); n->child[n->num_children] = add; n->num_children++; return n; } node_t* mknode1(nodetype_t*t, node_t*node) { node_t*n = (node_t*)malloc(sizeof(node_t)+sizeof(node_t*)*2); node_t**x = (node_t**)&n[1]; n->type = t; n->parent = 0; n->child = x; n->num_children = 1; x[0] = node; x[1] = 0; return n; }; node_t* mknode2(nodetype_t*t, node_t*left, node_t*right) { node_t*n = (node_t*)malloc(sizeof(node_t)+sizeof(node_t*)*3); node_t**x = (node_t**)&n[1]; n->type = t; n->parent = 0; n->child = x; n->num_children = 2; x[0] = left; x[1] = right; x[2] = 0; return n; } node_t* mknode3(nodetype_t*t, node_t*one, node_t*two, node_t*three) { node_t*n = (node_t*)malloc(sizeof(node_t)+sizeof(node_t*)*4); node_t**x = (node_t**)&n[1]; n->type = t; n->parent = 0; n->child = x; n->num_children = 3; x[0] = one; x[1] = two; x[2] = three; x[3] = 0; return n; } void node_free(node_t*n) { int t; if(n->type == &node_code) { if(n->code.c) { code_free(n->code.c);n->code.c = 0; } } else if(n->type == &node_const) { /* keep, this is not our reference */ } else for(t=0;tnum_children;t++) { node_free(n->child[t]);n->child[t] = 0; } free(n); } typedcode_t node_read(node_t*n) { constant_t c = n->type->eval(n); if(c.type == CONSTANT_UNKNOWN) { typedcode_t t = n->type->read(n); node_free(n); return t; } else { typedcode_t t = push_constant(&c); node_free(n); return t; } } typedcode_t node_write(node_t*n) { typedcode_t t = n->type->write(n); node_free(n); return t; } code_t* node_exec(node_t*n) { code_t*c = n->type->exec(n); node_free(n); return c; } constant_t node_eval(node_t*n) { constant_t c = n->type->eval(n); node_free(n); return c; } /* | +-add | | | +-code | | | +-code | | | + | +-div */ void node_dump2(node_t*n, const char*p1, const char*p2, FILE*fi) { if(n->type->flags&NODE_HAS_CHILDREN) { fprintf(fi, "%s%s\n", p1, n->type->name); int t; char*o2 = malloc(strlen(p2)+3); strcpy(o2, p2);strcat(o2, "| "); char*o3 = malloc(strlen(p2)+3); strcpy(o3, p2);strcat(o3, "+-"); char*o4 = malloc(strlen(p2)+3); strcpy(o4, p2);strcat(o4, " "); for(t=0;tnum_children;t++) { fprintf(fi, "%s\n", o2); node_dump2(n->child[t], o3, tnum_children-1?o2:o4, fi); } free(o2); free(o3); free(o4); } else if(n->type == &node_const) { char*s = constant_tostring(n->value); fprintf(fi, "%s%s (%s)\n", p1, n->type->name, s); free(s); } else if(n->type == &node_code) { fprintf(fi, "%s%s (%s)\n", p1, n->type->name, n->code.t?n->code.t->name:"*"); code_dump2(n->code.c, 0, 0, (char*)p2, fi); } else { fprintf(fi, "%s%s\n", p1, n->type->name); } } void node_dump(node_t*n) { printf("------------VVVV---------------\n"); node_dump2(n,"","",stdout); printf("-------------------------------\n"); } swftools_0.9.2+git20130725.orig/lib/as3/scripts.c0000644000175000017500000002510712216332640020417 0ustar gawaingawain/* scripts.c Some hardcoded abc scripts. Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #include #include "abc.h" void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events) { int num_frames = 0; int has_buttons = 0; TAG*tag=swf->firstTag; unsigned int checksum = 0; while(tag) { if(tag->id == ST_SHOWFRAME) num_frames++; if(tag->id == ST_DEFINEBUTTON || tag->id == ST_DEFINEBUTTON2) has_buttons = 1; crc32_add_bytes(checksum, tag->data, tag->len); tag = tag->next; } int t = time(0); checksum = crc32_add_bytes(checksum, &t, sizeof(t)); unsigned char h[16]; unsigned char file_signature[33]; sprintf((char*)file_signature, "%x", checksum); char scenename1[80], scenename2[80]; sprintf(scenename1, "rfx.MainTimeline_%s", file_signature); sprintf(scenename2, "rfx::MainTimeline_%s", file_signature); abc_file_t*file = abc_file_new(); abc_method_body_t*c = 0; abc_class_t*cls = abc_class_new2(file, scenename2, "flash.display::MovieClip"); TAG*abctag = swf_InsertTagBefore(swf, swf->firstTag, ST_DOABC); tag = swf_InsertTag(abctag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, 0); swf_SetString(tag, scenename1); c = abc_class_getstaticconstructor(cls, 0)->body; c->old.max_stack = 1; c->old.local_count = 1; c->old.init_scope_depth = 9; c->old.max_scope_depth = 10; __ getlocal_0(c); __ pushscope(c); __ returnvoid(c); c = abc_class_getconstructor(cls, 0)->body; c->old.max_stack = 3; c->old.local_count = 1; c->old.init_scope_depth = 10; c->old.max_scope_depth = 11; debugfile(c, "constructor.as"); __ getlocal_0(c); __ pushscope(c); __ getlocal_0(c); __ constructsuper(c,0); __ getlex(c, "[package]flash.system::Security"); __ pushstring(c, "*"); __ callpropvoid(c, "[package]::allowDomain", 1); if(stop_each_frame || has_buttons) { int frame = 0; tag = swf->firstTag; abc_method_body_t*f = 0; //frame script while(tag && tag->id!=ST_END) { char framename[80]; char needs_framescript=0; char buttonname[80]; char functionname[80]; sprintf(framename, "[packageinternal]rfx::frame%d_%s", frame, file_signature); if(!f && (tag->id == ST_DEFINEBUTTON || tag->id == ST_DEFINEBUTTON2 || stop_each_frame)) { /* make the contructor add a frame script */ __ findpropstrict(c,"[package]::addFrameScript"); __ pushuint(c,frame); __ getlex(c,framename); __ callpropvoid(c,"[package]::addFrameScript",2); f = abc_class_method(cls, 0, multiname_fromstring(framename))->body; f->old.max_stack = 3; f->old.local_count = 1; f->old.init_scope_depth = 10; f->old.max_scope_depth = 11; __ debugfile(f, "framescript.as"); __ debugline(f, 1); __ getlocal_0(f); __ pushscope(f); if(stop_each_frame) { __ findpropstrict(f, "[package]::stop"); __ callpropvoid(f, "[package]::stop", 0); } } if(tag->id == ST_DEFINEBUTTON || tag->id == ST_DEFINEBUTTON2) { U16 id = swf_GetDefineID(tag); sprintf(buttonname, "::button%d", swf_GetDefineID(tag)); __ getlex(f,buttonname); __ getlex(f,"flash.events::MouseEvent"); __ getproperty(f, "::CLICK"); sprintf(functionname, "::clickbutton%d_%s", swf_GetDefineID(tag), file_signature); __ getlex(f,functionname); __ callpropvoid(f, "::addEventListener" ,2); needs_framescript = 1; abc_method_body_t*h = abc_class_method(cls, 0, multiname_fromstring(functionname))->body; list_append(h->method->parameters, multiname_fromstring("flash.events::MouseEvent")); h->old.max_stack = 6; h->old.local_count = 2; h->old.init_scope_depth = 10; h->old.max_scope_depth = 11; __ getlocal_0(h); __ pushscope(h); ActionTAG*oldaction = swf_ButtonGetAction(tag); if(oldaction && oldaction->op == ACTION__GOTOFRAME) { int framenr = GET16(oldaction->data); if(!events) { __ findpropstrict(h,"[package]::gotoAndStop"); __ pushuint(h,framenr+1); __ callpropvoid(h,"[package]::gotoAndStop", 1); } else { char framename[80]; sprintf(framename, "frame%d_%s", framenr, file_signature); __ getlocal_0(h); //this __ findpropstrict(h, "[package]flash.events::TextEvent"); __ pushstring(h, "link"); __ pushtrue(h); __ pushtrue(h); __ pushstring(h, framename); __ constructprop(h,"[package]flash.events::TextEvent", 4); __ callpropvoid(h,"[package]::dispatchEvent", 1); } } else if(oldaction && oldaction->op == ACTION__GETURL) { if(!events) { __ findpropstrict(h,"flash.net::navigateToURL"); __ findpropstrict(h,"flash.net::URLRequest"); // TODO: target _blank __ pushstring(h,(char*)oldaction->data); //url __ constructprop(h,"flash.net::URLRequest", 1); __ callpropvoid(h,"flash.net::navigateToURL", 1); } else { __ getlocal_0(h); //this __ findpropstrict(h, "[package]flash.events::TextEvent"); __ pushstring(h, "link"); __ pushtrue(h); __ pushtrue(h); __ pushstring(h,(char*)oldaction->data); //url __ constructprop(h,"[package]flash.events::TextEvent", 4); __ callpropvoid(h,"[package]::dispatchEvent", 1); } } else if(oldaction) { fprintf(stderr, "Warning: Couldn't translate button code of button %d to flash 9 abc action\n", id); } __ returnvoid(h); swf_ActionFree(oldaction); } if(tag->id == ST_SHOWFRAME) { if(f) { __ returnvoid(f); f = 0; } frame++; } tag = tag->next; } if(f) { __ returnvoid(f); } } __ returnvoid(c); tag = swf->firstTag; while(tag) { if(tag->id == ST_DEFINEBUTTON || tag->id == ST_DEFINEBUTTON2) { char buttonname[80]; sprintf(buttonname, "::button%d", swf_GetDefineID(tag)); multiname_t*s = multiname_fromstring(buttonname); //abc_class_slot(cls, multiname_fromstring(buttonname), s); abc_class_slot(cls, multiname_fromstring(buttonname), multiname_fromstring("flash.display::SimpleButton")); } tag = tag->next; } abc_script_t*s = abc_initscript(file); c = s->method->body; c->old.max_stack = 2; c->old.local_count = 1; c->old.init_scope_depth = 1; c->old.max_scope_depth = 9; __ getlocal_0(c); __ pushscope(c); __ getscopeobject(c, 0); __ getlex(c,"::Object"); __ pushscope(c); __ getlex(c,"flash.events::EventDispatcher"); __ pushscope(c); __ getlex(c,"flash.display::DisplayObject"); __ pushscope(c); __ getlex(c,"flash.display::InteractiveObject"); __ pushscope(c); __ getlex(c,"flash.display::DisplayObjectContainer"); __ pushscope(c); __ getlex(c,"flash.display::Sprite"); __ pushscope(c); __ getlex(c,"flash.display::MovieClip"); __ pushscope(c); __ getlex(c,"flash.display::MovieClip"); __ newclass(c,cls); __ popscope(c); __ popscope(c); __ popscope(c); __ popscope(c); __ popscope(c); __ popscope(c); __ popscope(c); __ initproperty(c,scenename2); __ returnvoid(c); //abc_method_body_addClassTrait(c, "rfx:MainTimeline", 1, cls); multiname_t*classname = multiname_fromstring(scenename2); abc_initscript_addClassTrait(s, classname, cls); multiname_destroy(classname); swf_WriteABC(abctag, file); } TAG*swf_AddAS3FontDefine(TAG*tag, U16 id, char*fontname) { tag = swf_InsertTag(tag, ST_DOABC); abc_file_t*file = abc_file_new(); //abc_class_t*cls = abc_class_new2(file, fontname, "flash.display::MovieClip"); //abc_class_slot(cls, multiname_fromstring(fontname), multiname_fromstring("flash.text::Font")); abc_class_t*cls = abc_class_new2(file, fontname, "flash.text::Font"); abc_script_t*s = abc_initscript(file); code_t*c = s->method->body->code; c = abc_getlocal_0(c); c = abc_pushscope(c); c = abc_getscopeobject(c, 0); c = abc_getlex(c,"flash.text::Font"); c = abc_pushscope(c); c = abc_getlex(c,"flash.text::Font"); c = abc_newclass(c,cls); c = abc_popscope(c); c = abc_initproperty(c, fontname); c = abc_returnvoid(c); s->method->body->code = c; abc_initscript_addClassTrait(s, multiname_fromstring(fontname), cls); swf_WriteABC(tag, file); tag = swf_InsertTag(tag, ST_SYMBOLCLASS); swf_SetU16(tag, 1); swf_SetU16(tag, id); swf_SetString(tag, fontname); return tag; } swftools_0.9.2+git20130725.orig/lib/as3/compiler.c0000644000175000017500000002133712216332640020543 0ustar gawaingawain/* compiler.h Compiler for parsing Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008/2009 Matthias Kramm 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 */ #include "common.h" #include "tokenizer.h" #include "files.h" #include "parser.h" #include "parser.tab.h" #include "compiler.h" #include "registry.h" #include "assets.h" #include "../os.h" #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_DIRENT_H #include #endif /* flex/bison definitions */ extern int a3_parse(); extern int as3_lex(); extern int as3_lex_destroy(); static char config_recurse = 0; void as3_setverbosity(int level) { as3_verbosity=level; } void as3_add_include_dir(char*dir) { add_include_dir(dir); } void as3_set_option(const char*key, const char*value) { if(!strcmp(key, "recurse")) { config_recurse=atoi(value); } } static char registry_initialized = 0; static char parser_initialized = 0; //#define STORE_TOKENS //#define DEBUG #define DEBUG if(0) int a3_lex() { as3_tokencount++; return as3_lex(); } typedef struct _compile_list { const char*name; const char*filename; struct _compile_list*next; } compile_list_t; static compile_list_t*compile_list=0; static void as3_parse_file_or_array(const char*name, const char*filename, const void*mem, int length) { if(!registry_initialized) { registry_initialized = 1; registry_init(); } if(!parser_initialized) { parser_initialized = 1; initialize_parser(); } FILE*fi = 0; if(filename) { if(as3_pass==1 && !mem) { // record the fact that we compiled this file compile_list_t*c = rfx_calloc(sizeof(compile_list_t)); c->next = compile_list; c->name = strdup(name); c->filename = strdup(filename); compile_list = c; } DEBUG printf("[pass %d] parse file %s %s\n", as3_pass, name, filename); fi = enter_file2(name, filename, 0); as3_file_input(fi); } else { DEBUG printf("[pass %d] parse bytearray %s (%d bytes)\n", as3_pass, name, length); enter_file(name, name, 0); as3_buffer_input((void*)mem, length); } as3_tokencount=0; initialize_file(name, filename); a3_parse(); as3_lex_destroy(); finish_file(); if(fi) fclose(fi); } typedef struct _scheduled_file { char*name; char*filename; struct _scheduled_file*next; } scheduled_file_t; static scheduled_file_t*scheduled=0; dict_t*scheduled_dict=0; void as3_parse_scheduled() { DEBUG printf("[pass %d] parse scheduled\n", as3_pass); while(scheduled) { scheduled_file_t*s = scheduled; scheduled = 0; while(s) { scheduled_file_t*old = s; as3_parse_file_or_array(s->name, s->filename, 0,0); s = s->next; free(old->filename); free(old->name); old->filename = old->name = 0; free(old); } } if(scheduled_dict) { dict_destroy(scheduled_dict); scheduled_dict=0; } } void as3_schedule_file(const char*name, const char*filename) { if(!scheduled_dict) { scheduled_dict = dict_new(); } filename = normalize_path(filename); if(dict_contains(scheduled_dict, filename)) { return; //already processed } else { dict_put(scheduled_dict, filename, 0); } DEBUG printf("[pass %d] schedule %s %s\n", as3_pass, name, filename); NEW(scheduled_file_t, f); f->name = strdup(name); f->filename = strdup(filename); f->next = scheduled; // dfs scheduled = f; } void as3_parse_list() { while(compile_list) { as3_parse_file_or_array(compile_list->name, compile_list->filename, 0,0); compile_list = compile_list->next; } } void as3_parse_bytearray(const char*name, const void*mem, int length) { as3_pass = 1; as3_parse_file_or_array(name, 0, mem, length); as3_parse_scheduled(); registry_resolve_all(); as3_pass = 2; as3_parse_file_or_array(name, 0, mem, length); as3_parse_list(); } void as3_parse_file(const char*filename) { char*fullfilename = find_file(filename, 1); if(!fullfilename) return; // not found compile_list = 0; as3_pass = 1; as3_schedule_file(filename, fullfilename); as3_parse_scheduled(); registry_resolve_all(); as3_pass = 2; as3_parse_list(); free(fullfilename); } void as3_parse_directory(const char*dir) { compile_list = 0; as3_pass = 1; as3_schedule_directory(dir); if(!scheduled) as3_warning("Directory %s doesn't contain any ActionScript files", dir); as3_parse_scheduled(); registry_resolve_all(); as3_pass = 2; as3_parse_list(); } char as3_schedule_directory(const char*dirname) { DEBUG printf("[pass %d] schedule directory %s\n", as3_pass, dirname); char ok=0; #ifdef HAVE_DIRENT_H include_dir_t*i = current_include_dirs; while(i) { char*fulldirname = concat_paths(i->path, dirname); DEBUG printf("[pass %d] ... %s\n", as3_pass, fulldirname); DIR*dir = opendir(fulldirname); if(dir) { ok = 1; struct dirent*ent; while(1) { ent = readdir(dir); if (!ent) break; char*name = ent->d_name; char type = 0; if(!name) continue; int l=strlen(name); if(l<4) continue; if(strncasecmp(&name[l-3], ".as", 3)) continue; char*fullfilename = concatPaths(fulldirname, name); as3_schedule_file(name, fullfilename); free(fullfilename); } } free(fulldirname); i = i->next; } #endif return ok; } void as3_schedule_package(const char*package) { DEBUG printf("[pass %d] schedule package %s\n", as3_pass, package); char*dirname = strdup(package); int s=0; while(dirname[s]) { if(dirname[s]=='.') dirname[s] = path_seperator; s++; }; if(!as3_schedule_directory(dirname)) as3_softwarning("Could not find package %s in file system", package); } static void schedule_class(const char*package, const char*cls, char error) { if(error) { DEBUG printf("[pass %d] schedule class %s.%s\n", as3_pass, package, cls); } if(!cls) { as3_schedule_package(package); return; } int l1 = package?strlen(package):0; int l2 = cls?strlen(cls):0; char*filename = malloc(l1+l2+5); int s=0,t=0; while(package[s]) { if(package[s]=='.') filename[t++]='/'; else filename[t++] = package[s]; s++; } if(t) filename[t++] = '/'; strcpy(filename+t, cls); strcpy(filename+t+l2, ".as"); char*f=find_file(filename, error); if(!f) { int i; filename = filename_to_lowercase(filename); f=find_file(filename, error); } if(!f) { if(error) { strcpy(filename+t, cls); strcpy(filename+t+l2, ".as"); as3_warning("Could not open file %s", filename); } return; } as3_schedule_file(filename, f); } void as3_schedule_class(const char*package, const char*cls) { schedule_class(package, cls, 1); } void as3_schedule_class_noerror(const char*package, const char*cls) { if(config_recurse) { schedule_class(package, cls, 0); } } static void*as3code = 0; void* as3_getcode() { if(parser_initialized) { parser_initialized = 0; as3code = finish_parser(); } return as3code; } void* as3_getassets(void*t) { return swf_AssetsToTags((TAG*)t, registry_getassets()); } char* as3_getglobalclass() { return as3_globalclass; } void as3_destroy() { if(parser_initialized) { parser_initialized = 0; swf_FreeABC(finish_parser()); #ifdef STORE_TOKENS mem_clear(&tokens); #endif } if(as3_globalclass) { free(as3_globalclass);as3_globalclass=0; } } swftools_0.9.2+git20130725.orig/lib/as3/builtin.c0000644000175000017500000317361712216332640020413 0ustar gawaingawain#include "builtin.h" static classinfo_t flash_text_TextFormat; static varinfo_t flash_text_TextFormat_leading; static varinfo_t flash_text_TextFormat_bold; static varinfo_t flash_text_TextFormat_underline; static varinfo_t flash_text_TextFormat_color; static varinfo_t flash_text_TextFormat_letterSpacing; static varinfo_t flash_text_TextFormat_kerning; static varinfo_t flash_text_TextFormat_target; static varinfo_t flash_text_TextFormat_italic; static varinfo_t flash_text_TextFormat_rightMargin; static varinfo_t flash_text_TextFormat_bullet; static varinfo_t flash_text_TextFormat_url; static varinfo_t flash_text_TextFormat_size; static varinfo_t flash_text_TextFormat_indent; static varinfo_t flash_text_TextFormat_leftMargin; static varinfo_t flash_text_TextFormat_display; static varinfo_t flash_text_TextFormat_align; static varinfo_t flash_text_TextFormat_tabStops; static varinfo_t flash_text_TextFormat_blockIndent; static varinfo_t flash_text_TextFormat_font; static varinfo_t flash_text_TextFormat_leading; static varinfo_t flash_text_TextFormat_bold; static varinfo_t flash_text_TextFormat_underline; static varinfo_t flash_text_TextFormat_color; static varinfo_t flash_text_TextFormat_letterSpacing; static varinfo_t flash_text_TextFormat_kerning; static varinfo_t flash_text_TextFormat_target; static varinfo_t flash_text_TextFormat_italic; static varinfo_t flash_text_TextFormat_rightMargin; static varinfo_t flash_text_TextFormat_bullet; static varinfo_t flash_text_TextFormat_url; static varinfo_t flash_text_TextFormat_size; static varinfo_t flash_text_TextFormat_indent; static varinfo_t flash_text_TextFormat_leftMargin; static varinfo_t flash_text_TextFormat_display; static varinfo_t flash_text_TextFormat_align; static varinfo_t flash_text_TextFormat_tabStops; static varinfo_t flash_text_TextFormat_blockIndent; static varinfo_t flash_text_TextFormat_font; static classinfo_t flash_filters_BitmapFilter; static methodinfo_t flash_filters_BitmapFilter_clone; static methodinfo_t flash_filters_BitmapFilter_clone; static classinfo_t flash_filters_DropShadowFilter; static varinfo_t flash_filters_DropShadowFilter_alpha; static varinfo_t flash_filters_DropShadowFilter_strength; static varinfo_t flash_filters_DropShadowFilter_quality; static varinfo_t flash_filters_DropShadowFilter_angle; static varinfo_t flash_filters_DropShadowFilter_knockout; static varinfo_t flash_filters_DropShadowFilter_color; static varinfo_t flash_filters_DropShadowFilter_hideObject; static varinfo_t flash_filters_DropShadowFilter_inner; static varinfo_t flash_filters_DropShadowFilter_blurX; static varinfo_t flash_filters_DropShadowFilter_blurY; static varinfo_t flash_filters_DropShadowFilter_distance; static methodinfo_t flash_filters_DropShadowFilter_clone; static varinfo_t flash_filters_DropShadowFilter_alpha; static varinfo_t flash_filters_DropShadowFilter_strength; static varinfo_t flash_filters_DropShadowFilter_quality; static varinfo_t flash_filters_DropShadowFilter_angle; static varinfo_t flash_filters_DropShadowFilter_knockout; static varinfo_t flash_filters_DropShadowFilter_color; static varinfo_t flash_filters_DropShadowFilter_hideObject; static varinfo_t flash_filters_DropShadowFilter_inner; static varinfo_t flash_filters_DropShadowFilter_blurX; static varinfo_t flash_filters_DropShadowFilter_blurY; static varinfo_t flash_filters_DropShadowFilter_distance; static methodinfo_t flash_filters_DropShadowFilter_clone; static classinfo_t adobe_utils_CustomActions; static classinfo_t flash_text_engine_TextLineValidity; static classinfo_t flash_display_LineScaleMode; static classinfo_t flash_geom_Transform; static varinfo_t flash_geom_Transform_matrix; static varinfo_t flash_geom_Transform_perspectiveProjection; static varinfo_t flash_geom_Transform_concatenatedMatrix; static varinfo_t flash_geom_Transform_colorTransform; static methodinfo_t flash_geom_Transform_getRelativeMatrix3D; static varinfo_t flash_geom_Transform_pixelBounds; static varinfo_t flash_geom_Transform_matrix3D; static varinfo_t flash_geom_Transform_concatenatedColorTransform; static varinfo_t flash_geom_Transform_matrix; static varinfo_t flash_geom_Transform_perspectiveProjection; static varinfo_t flash_geom_Transform_concatenatedMatrix; static varinfo_t flash_geom_Transform_colorTransform; static methodinfo_t flash_geom_Transform_getRelativeMatrix3D; static varinfo_t flash_geom_Transform_pixelBounds; static varinfo_t flash_geom_Transform_matrix3D; static varinfo_t flash_geom_Transform_concatenatedColorTransform; static classinfo_t flash_ui_KeyLocation; static classinfo_t flash_events_MouseEvent; static varinfo_t flash_events_MouseEvent_localY; static methodinfo_t flash_events_MouseEvent_updateAfterEvent; static varinfo_t flash_events_MouseEvent_delta; static varinfo_t flash_events_MouseEvent_stageX; static methodinfo_t flash_events_MouseEvent_toString; static varinfo_t flash_events_MouseEvent_relatedObject; static varinfo_t flash_events_MouseEvent_isRelatedObjectInaccessible; static varinfo_t flash_events_MouseEvent_shiftKey; static varinfo_t flash_events_MouseEvent_stageY; static varinfo_t flash_events_MouseEvent_altKey; static methodinfo_t flash_events_MouseEvent_clone; static varinfo_t flash_events_MouseEvent_ctrlKey; static varinfo_t flash_events_MouseEvent_localX; static varinfo_t flash_events_MouseEvent_buttonDown; static varinfo_t flash_events_MouseEvent_localY; static methodinfo_t flash_events_MouseEvent_updateAfterEvent; static varinfo_t flash_events_MouseEvent_delta; static varinfo_t flash_events_MouseEvent_stageX; static methodinfo_t flash_events_MouseEvent_toString; static varinfo_t flash_events_MouseEvent_relatedObject; static varinfo_t flash_events_MouseEvent_isRelatedObjectInaccessible; static varinfo_t flash_events_MouseEvent_shiftKey; static varinfo_t flash_events_MouseEvent_stageY; static varinfo_t flash_events_MouseEvent_altKey; static methodinfo_t flash_events_MouseEvent_clone; static varinfo_t flash_events_MouseEvent_ctrlKey; static varinfo_t flash_events_MouseEvent_localX; static varinfo_t flash_events_MouseEvent_buttonDown; static classinfo_t flash_text_engine_LineJustification; static classinfo_t flash_media_Camera; static varinfo_t flash_media_Camera_fps; static methodinfo_t flash_media_Camera_setMode; static varinfo_t flash_media_Camera_keyFrameInterval; static varinfo_t flash_media_Camera_motionTimeout; static varinfo_t flash_media_Camera_width; static methodinfo_t flash_media_Camera_setCursor; static methodinfo_t flash_media_Camera_setLoopback; static varinfo_t flash_media_Camera_height; static varinfo_t flash_media_Camera_index; static varinfo_t flash_media_Camera_name; static varinfo_t flash_media_Camera_currentFPS; static methodinfo_t flash_media_Camera_setKeyFrameInterval; static varinfo_t flash_media_Camera_quality; static varinfo_t flash_media_Camera_motionLevel; static varinfo_t flash_media_Camera_bandwidth; static varinfo_t flash_media_Camera_muted; static varinfo_t flash_media_Camera_activityLevel; static varinfo_t flash_media_Camera_loopback; static methodinfo_t flash_media_Camera_setQuality; static methodinfo_t flash_media_Camera_setMotionLevel; static varinfo_t flash_media_Camera_fps; static methodinfo_t flash_media_Camera_setMode; static varinfo_t flash_media_Camera_keyFrameInterval; static varinfo_t flash_media_Camera_motionTimeout; static varinfo_t flash_media_Camera_width; static methodinfo_t flash_media_Camera_setCursor; static methodinfo_t flash_media_Camera_setLoopback; static varinfo_t flash_media_Camera_height; static varinfo_t flash_media_Camera_index; static varinfo_t flash_media_Camera_name; static varinfo_t flash_media_Camera_currentFPS; static methodinfo_t flash_media_Camera_setKeyFrameInterval; static varinfo_t flash_media_Camera_quality; static varinfo_t flash_media_Camera_motionLevel; static varinfo_t flash_media_Camera_bandwidth; static varinfo_t flash_media_Camera_muted; static varinfo_t flash_media_Camera_activityLevel; static varinfo_t flash_media_Camera_loopback; static methodinfo_t flash_media_Camera_setQuality; static methodinfo_t flash_media_Camera_setMotionLevel; static methodinfo_t flash_net_registerClassAlias; static classinfo_t flash_accessibility_AccessibilityImplementation; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accState; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accName; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accSelection; static methodinfo_t flash_accessibility_AccessibilityImplementation_accDoDefaultAction; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accFocus; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accDefaultAction; static methodinfo_t flash_accessibility_AccessibilityImplementation_accSelect; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accValue; static varinfo_t flash_accessibility_AccessibilityImplementation_stub; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accRole; static varinfo_t flash_accessibility_AccessibilityImplementation_errno; static methodinfo_t flash_accessibility_AccessibilityImplementation_isLabeledBy; static methodinfo_t flash_accessibility_AccessibilityImplementation_accLocation; static methodinfo_t flash_accessibility_AccessibilityImplementation_getChildIDArray; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accState; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accName; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accSelection; static methodinfo_t flash_accessibility_AccessibilityImplementation_accDoDefaultAction; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accFocus; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accDefaultAction; static methodinfo_t flash_accessibility_AccessibilityImplementation_accSelect; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accValue; static varinfo_t flash_accessibility_AccessibilityImplementation_stub; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accRole; static varinfo_t flash_accessibility_AccessibilityImplementation_errno; static methodinfo_t flash_accessibility_AccessibilityImplementation_isLabeledBy; static methodinfo_t flash_accessibility_AccessibilityImplementation_accLocation; static methodinfo_t flash_accessibility_AccessibilityImplementation_getChildIDArray; static classinfo_t flash_utils_ByteArray; static methodinfo_t flash_utils_ByteArray_writeBoolean; static methodinfo_t flash_utils_ByteArray_readDouble; static methodinfo_t flash_utils_ByteArray_toString; static methodinfo_t flash_utils_ByteArray_writeByte; static methodinfo_t flash_utils_ByteArray_writeObject; static methodinfo_t flash_utils_ByteArray_readUTFBytes; static methodinfo_t flash_utils_ByteArray_writeMultiByte; static methodinfo_t flash_utils_ByteArray_uncompress; static methodinfo_t flash_utils_ByteArray_readUnsignedByte; static methodinfo_t flash_utils_ByteArray_writeInt; static methodinfo_t flash_utils_ByteArray_deflate; static methodinfo_t flash_utils_ByteArray_readMultiByte; static methodinfo_t flash_utils_ByteArray_readBytes; static methodinfo_t flash_utils_ByteArray_writeShort; static varinfo_t flash_utils_ByteArray_position; static methodinfo_t flash_utils_ByteArray_readShort; static methodinfo_t flash_utils_ByteArray_writeUTF; static methodinfo_t flash_utils_ByteArray_writeBytes; static varinfo_t flash_utils_ByteArray_objectEncoding; static methodinfo_t flash_utils_ByteArray_readObject; static varinfo_t flash_utils_ByteArray_length; static methodinfo_t flash_utils_ByteArray_writeUnsignedInt; static methodinfo_t flash_utils_ByteArray_writeDouble; static methodinfo_t flash_utils_ByteArray_writeFloat; static methodinfo_t flash_utils_ByteArray_readInt; static methodinfo_t flash_utils_ByteArray_readByte; static varinfo_t flash_utils_ByteArray_bytesAvailable; static methodinfo_t flash_utils_ByteArray_clear; static varinfo_t flash_utils_ByteArray_endian; static methodinfo_t flash_utils_ByteArray_readUnsignedShort; static methodinfo_t flash_utils_ByteArray_readUnsignedInt; static methodinfo_t flash_utils_ByteArray_readFloat; static methodinfo_t flash_utils_ByteArray_compress; static methodinfo_t flash_utils_ByteArray_writeUTFBytes; static methodinfo_t flash_utils_ByteArray_readBoolean; static methodinfo_t flash_utils_ByteArray_inflate; static methodinfo_t flash_utils_ByteArray_readUTF; static methodinfo_t flash_utils_ByteArray_writeBoolean; static methodinfo_t flash_utils_ByteArray_readDouble; static methodinfo_t flash_utils_ByteArray_toString; static methodinfo_t flash_utils_ByteArray_writeByte; static methodinfo_t flash_utils_ByteArray_writeObject; static methodinfo_t flash_utils_ByteArray_readUTFBytes; static methodinfo_t flash_utils_ByteArray_writeMultiByte; static methodinfo_t flash_utils_ByteArray_uncompress; static methodinfo_t flash_utils_ByteArray_readUnsignedByte; static methodinfo_t flash_utils_ByteArray_writeInt; static methodinfo_t flash_utils_ByteArray_deflate; static methodinfo_t flash_utils_ByteArray_readMultiByte; static methodinfo_t flash_utils_ByteArray_readBytes; static methodinfo_t flash_utils_ByteArray_writeShort; static varinfo_t flash_utils_ByteArray_position; static methodinfo_t flash_utils_ByteArray_readShort; static methodinfo_t flash_utils_ByteArray_writeUTF; static methodinfo_t flash_utils_ByteArray_writeBytes; static varinfo_t flash_utils_ByteArray_objectEncoding; static methodinfo_t flash_utils_ByteArray_readObject; static varinfo_t flash_utils_ByteArray_length; static methodinfo_t flash_utils_ByteArray_writeUnsignedInt; static methodinfo_t flash_utils_ByteArray_writeDouble; static methodinfo_t flash_utils_ByteArray_writeFloat; static methodinfo_t flash_utils_ByteArray_readInt; static methodinfo_t flash_utils_ByteArray_readByte; static varinfo_t flash_utils_ByteArray_bytesAvailable; static methodinfo_t flash_utils_ByteArray_clear; static varinfo_t flash_utils_ByteArray_endian; static methodinfo_t flash_utils_ByteArray_readUnsignedShort; static methodinfo_t flash_utils_ByteArray_readUnsignedInt; static methodinfo_t flash_utils_ByteArray_readFloat; static methodinfo_t flash_utils_ByteArray_compress; static methodinfo_t flash_utils_ByteArray_writeUTFBytes; static methodinfo_t flash_utils_ByteArray_readBoolean; static methodinfo_t flash_utils_ByteArray_inflate; static methodinfo_t flash_utils_ByteArray_readUTF; static methodinfo_t flash_sampler_stopSampling; static classinfo_t flash_events_SyncEvent; static methodinfo_t flash_events_SyncEvent_toString; static methodinfo_t flash_events_SyncEvent_clone; static varinfo_t flash_events_SyncEvent_changeList; static methodinfo_t flash_events_SyncEvent_toString; static methodinfo_t flash_events_SyncEvent_clone; static varinfo_t flash_events_SyncEvent_changeList; static methodinfo_t _encodeURIComponent; static classinfo_t flash_net_Socket; static methodinfo_t flash_net_Socket_writeBoolean; static methodinfo_t flash_net_Socket_connect; static methodinfo_t flash_net_Socket_readDouble; static methodinfo_t flash_net_Socket_writeByte; static methodinfo_t flash_net_Socket_writeObject; static methodinfo_t flash_net_Socket_readUTFBytes; static methodinfo_t flash_net_Socket_close; static methodinfo_t flash_net_Socket_writeMultiByte; static methodinfo_t flash_net_Socket_readUnsignedByte; static methodinfo_t flash_net_Socket_writeInt; static methodinfo_t flash_net_Socket_readMultiByte; static methodinfo_t flash_net_Socket_readBytes; static methodinfo_t flash_net_Socket_writeShort; static methodinfo_t flash_net_Socket_readShort; static methodinfo_t flash_net_Socket_writeUTF; static varinfo_t flash_net_Socket_timeout; static methodinfo_t flash_net_Socket_writeBytes; static varinfo_t flash_net_Socket_connected; static methodinfo_t flash_net_Socket_readObject; static varinfo_t flash_net_Socket_objectEncoding; static methodinfo_t flash_net_Socket_flush; static methodinfo_t flash_net_Socket_writeUnsignedInt; static methodinfo_t flash_net_Socket_writeDouble; static methodinfo_t flash_net_Socket_writeFloat; static methodinfo_t flash_net_Socket_readInt; static methodinfo_t flash_net_Socket_readByte; static varinfo_t flash_net_Socket_bytesAvailable; static varinfo_t flash_net_Socket_endian; static methodinfo_t flash_net_Socket_readUnsignedShort; static methodinfo_t flash_net_Socket_readUnsignedInt; static methodinfo_t flash_net_Socket_readFloat; static methodinfo_t flash_net_Socket_writeUTFBytes; static methodinfo_t flash_net_Socket_readBoolean; static methodinfo_t flash_net_Socket_readUTF; static methodinfo_t flash_net_Socket_writeBoolean; static methodinfo_t flash_net_Socket_connect; static methodinfo_t flash_net_Socket_readDouble; static methodinfo_t flash_net_Socket_writeByte; static methodinfo_t flash_net_Socket_writeObject; static methodinfo_t flash_net_Socket_readUTFBytes; static methodinfo_t flash_net_Socket_close; static methodinfo_t flash_net_Socket_writeMultiByte; static methodinfo_t flash_net_Socket_readUnsignedByte; static methodinfo_t flash_net_Socket_writeInt; static methodinfo_t flash_net_Socket_readMultiByte; static methodinfo_t flash_net_Socket_readBytes; static methodinfo_t flash_net_Socket_writeShort; static methodinfo_t flash_net_Socket_readShort; static methodinfo_t flash_net_Socket_writeUTF; static varinfo_t flash_net_Socket_timeout; static methodinfo_t flash_net_Socket_writeBytes; static varinfo_t flash_net_Socket_connected; static methodinfo_t flash_net_Socket_readObject; static varinfo_t flash_net_Socket_objectEncoding; static methodinfo_t flash_net_Socket_flush; static methodinfo_t flash_net_Socket_writeUnsignedInt; static methodinfo_t flash_net_Socket_writeDouble; static methodinfo_t flash_net_Socket_writeFloat; static methodinfo_t flash_net_Socket_readInt; static methodinfo_t flash_net_Socket_readByte; static varinfo_t flash_net_Socket_bytesAvailable; static varinfo_t flash_net_Socket_endian; static methodinfo_t flash_net_Socket_readUnsignedShort; static methodinfo_t flash_net_Socket_readUnsignedInt; static methodinfo_t flash_net_Socket_readFloat; static methodinfo_t flash_net_Socket_writeUTFBytes; static methodinfo_t flash_net_Socket_readBoolean; static methodinfo_t flash_net_Socket_readUTF; static methodinfo_t _unescape; static classinfo_t flash_utils_Timer; static methodinfo_t flash_utils_Timer_reset; static varinfo_t flash_utils_Timer_running; static varinfo_t flash_utils_Timer_repeatCount; static methodinfo_t flash_utils_Timer_stop; static methodinfo_t flash_utils_Timer_start; static varinfo_t flash_utils_Timer_currentCount; static varinfo_t flash_utils_Timer_delay; static methodinfo_t flash_utils_Timer_reset; static varinfo_t flash_utils_Timer_running; static varinfo_t flash_utils_Timer_repeatCount; static methodinfo_t flash_utils_Timer_stop; static methodinfo_t flash_utils_Timer_start; static varinfo_t flash_utils_Timer_currentCount; static varinfo_t flash_utils_Timer_delay; static classinfo_t _Array; static methodinfo_t _Array_forEach; static methodinfo_t _Array_sortOn; static methodinfo_t _Array_indexOf; static methodinfo_t _Array_splice; static methodinfo_t _Array_lastIndexOf; static methodinfo_t _Array_map; static methodinfo_t _Array_concat; static methodinfo_t _Array_shift; static methodinfo_t _Array_unshift; static methodinfo_t _Array_some; static methodinfo_t _Array_filter; static methodinfo_t _Array_join; static methodinfo_t _Array_slice; static methodinfo_t _Array_every; static methodinfo_t _Array_pop; static methodinfo_t _Array_sort; static methodinfo_t _Array_reverse; static methodinfo_t _Array_push; static varinfo_t _Array_length; static methodinfo_t _Array_forEach; static methodinfo_t _Array_sortOn; static methodinfo_t _Array_indexOf; static methodinfo_t _Array_splice; static methodinfo_t _Array_lastIndexOf; static methodinfo_t _Array_map; static methodinfo_t _Array_concat; static methodinfo_t _Array_shift; static methodinfo_t _Array_unshift; static methodinfo_t _Array_some; static methodinfo_t _Array_filter; static methodinfo_t _Array_join; static methodinfo_t _Array_slice; static methodinfo_t _Array_every; static methodinfo_t _Array_pop; static methodinfo_t _Array_sort; static methodinfo_t _Array_reverse; static methodinfo_t _Array_push; static varinfo_t _Array_length; static classinfo_t flash_geom_ColorTransform; static varinfo_t flash_geom_ColorTransform_blueOffset; static varinfo_t flash_geom_ColorTransform_greenOffset; static varinfo_t flash_geom_ColorTransform_greenMultiplier; static varinfo_t flash_geom_ColorTransform_redMultiplier; static varinfo_t flash_geom_ColorTransform_color; static methodinfo_t flash_geom_ColorTransform_concat; static varinfo_t flash_geom_ColorTransform_alphaOffset; static varinfo_t flash_geom_ColorTransform_blueMultiplier; static methodinfo_t flash_geom_ColorTransform_toString; static varinfo_t flash_geom_ColorTransform_alphaMultiplier; static varinfo_t flash_geom_ColorTransform_redOffset; static varinfo_t flash_geom_ColorTransform_blueOffset; static varinfo_t flash_geom_ColorTransform_greenOffset; static varinfo_t flash_geom_ColorTransform_greenMultiplier; static varinfo_t flash_geom_ColorTransform_redMultiplier; static varinfo_t flash_geom_ColorTransform_color; static methodinfo_t flash_geom_ColorTransform_concat; static varinfo_t flash_geom_ColorTransform_alphaOffset; static varinfo_t flash_geom_ColorTransform_blueMultiplier; static methodinfo_t flash_geom_ColorTransform_toString; static varinfo_t flash_geom_ColorTransform_alphaMultiplier; static varinfo_t flash_geom_ColorTransform_redOffset; static classinfo_t flash_text_GridFitType; static classinfo_t flash_filters_DisplacementMapFilterMode; static classinfo_t flash_text_TextFieldType; static classinfo_t flash_display_IGraphicsStroke; static classinfo_t flash_media_SoundLoaderContext; static varinfo_t flash_media_SoundLoaderContext_checkPolicyFile; static varinfo_t flash_media_SoundLoaderContext_bufferTime; static varinfo_t flash_media_SoundLoaderContext_checkPolicyFile; static varinfo_t flash_media_SoundLoaderContext_bufferTime; static classinfo_t flash_net_IDynamicPropertyOutput; static methodinfo_t flash_net_IDynamicPropertyOutput_writeDynamicProperty; static methodinfo_t flash_net_IDynamicPropertyOutput_writeDynamicProperty; static classinfo_t flash_display_IGraphicsData; static methodinfo_t flash_utils_getDefinitionByName; static classinfo_t _Function; static varinfo_t _Function_length; static methodinfo_t _Function_apply; static methodinfo_t _Function_call; static varinfo_t _Function_prototype; static varinfo_t _Function_length; static methodinfo_t _Function_apply; static methodinfo_t _Function_call; static varinfo_t _Function_prototype; static classinfo_t flash_geom_PerspectiveProjection; static varinfo_t flash_geom_PerspectiveProjection_fieldOfView; static varinfo_t flash_geom_PerspectiveProjection_projectionCenter; static methodinfo_t flash_geom_PerspectiveProjection_toMatrix3D; static varinfo_t flash_geom_PerspectiveProjection_focalLength; static varinfo_t flash_geom_PerspectiveProjection_fieldOfView; static varinfo_t flash_geom_PerspectiveProjection_projectionCenter; static methodinfo_t flash_geom_PerspectiveProjection_toMatrix3D; static varinfo_t flash_geom_PerspectiveProjection_focalLength; static classinfo_t flash_text_engine_BreakOpportunity; static methodinfo_t flash_sampler__getInvocationCount; static methodinfo_t _parseFloat; static classinfo_t flash_events_NetStatusEvent; static methodinfo_t flash_events_NetStatusEvent_toString; static varinfo_t flash_events_NetStatusEvent_info; static methodinfo_t flash_events_NetStatusEvent_clone; static methodinfo_t flash_events_NetStatusEvent_toString; static varinfo_t flash_events_NetStatusEvent_info; static methodinfo_t flash_events_NetStatusEvent_clone; static classinfo_t flash_display_ShaderJob; static methodinfo_t flash_display_ShaderJob_cancel; static varinfo_t flash_display_ShaderJob_width; static methodinfo_t flash_display_ShaderJob_start; static varinfo_t flash_display_ShaderJob_shader; static varinfo_t flash_display_ShaderJob_height; static varinfo_t flash_display_ShaderJob_target; static varinfo_t flash_display_ShaderJob_progress; static methodinfo_t flash_display_ShaderJob_cancel; static varinfo_t flash_display_ShaderJob_width; static methodinfo_t flash_display_ShaderJob_start; static varinfo_t flash_display_ShaderJob_shader; static varinfo_t flash_display_ShaderJob_height; static varinfo_t flash_display_ShaderJob_target; static varinfo_t flash_display_ShaderJob_progress; static classinfo_t _VerifyError; static classinfo_t flash_events_AsyncErrorEvent; static methodinfo_t flash_events_AsyncErrorEvent_toString; static varinfo_t flash_events_AsyncErrorEvent_error; static methodinfo_t flash_events_AsyncErrorEvent_clone; static methodinfo_t flash_events_AsyncErrorEvent_toString; static varinfo_t flash_events_AsyncErrorEvent_error; static methodinfo_t flash_events_AsyncErrorEvent_clone; static classinfo_t flash_net_SharedObject; static varinfo_t flash_net_SharedObject_objectEncoding; static varinfo_t flash_net_SharedObject_client; static methodinfo_t flash_net_SharedObject_setProperty; static methodinfo_t flash_net_SharedObject_clear; static methodinfo_t flash_net_SharedObject_flush; static methodinfo_t flash_net_SharedObject_connect; static varinfo_t flash_net_SharedObject_size; static methodinfo_t flash_net_SharedObject_setDirty; static methodinfo_t flash_net_SharedObject_send; static methodinfo_t flash_net_SharedObject_close; static varinfo_t flash_net_SharedObject_data; static varinfo_t flash_net_SharedObject_objectEncoding; static varinfo_t flash_net_SharedObject_client; static methodinfo_t flash_net_SharedObject_setProperty; static methodinfo_t flash_net_SharedObject_clear; static methodinfo_t flash_net_SharedObject_flush; static methodinfo_t flash_net_SharedObject_connect; static varinfo_t flash_net_SharedObject_size; static methodinfo_t flash_net_SharedObject_setDirty; static methodinfo_t flash_net_SharedObject_send; static methodinfo_t flash_net_SharedObject_close; static varinfo_t flash_net_SharedObject_data; static classinfo_t _Namespace; static methodinfo_t _Namespace_valueOf; static methodinfo_t _Namespace_toString; static varinfo_t _Namespace_uri; static varinfo_t _Namespace_prefix; static methodinfo_t _Namespace_valueOf; static methodinfo_t _Namespace_toString; static varinfo_t _Namespace_uri; static varinfo_t _Namespace_prefix; static methodinfo_t flash_utils_setTimeout; static classinfo_t flash_geom_Matrix3D; static methodinfo_t flash_geom_Matrix3D_decompose; static methodinfo_t flash_geom_Matrix3D_pointAt; static methodinfo_t flash_geom_Matrix3D_identity; static methodinfo_t flash_geom_Matrix3D_transformVector; static methodinfo_t flash_geom_Matrix3D_appendRotation; static varinfo_t flash_geom_Matrix3D_determinant; static methodinfo_t flash_geom_Matrix3D_prependRotation; static varinfo_t flash_geom_Matrix3D_position; static methodinfo_t flash_geom_Matrix3D_interpolateTo; static methodinfo_t flash_geom_Matrix3D_appendScale; static methodinfo_t flash_geom_Matrix3D_prepend; static methodinfo_t flash_geom_Matrix3D_recompose; static methodinfo_t flash_geom_Matrix3D_appendTranslation; static methodinfo_t flash_geom_Matrix3D_invert; static varinfo_t flash_geom_Matrix3D_rawData; static methodinfo_t flash_geom_Matrix3D_prependTranslation; static methodinfo_t flash_geom_Matrix3D_append; static methodinfo_t flash_geom_Matrix3D_clone; static methodinfo_t flash_geom_Matrix3D_prependScale; static methodinfo_t flash_geom_Matrix3D_deltaTransformVector; static methodinfo_t flash_geom_Matrix3D_transformVectors; static methodinfo_t flash_geom_Matrix3D_transpose; static methodinfo_t flash_geom_Matrix3D_decompose; static methodinfo_t flash_geom_Matrix3D_pointAt; static methodinfo_t flash_geom_Matrix3D_identity; static methodinfo_t flash_geom_Matrix3D_transformVector; static methodinfo_t flash_geom_Matrix3D_appendRotation; static varinfo_t flash_geom_Matrix3D_determinant; static methodinfo_t flash_geom_Matrix3D_prependRotation; static varinfo_t flash_geom_Matrix3D_position; static methodinfo_t flash_geom_Matrix3D_interpolateTo; static methodinfo_t flash_geom_Matrix3D_appendScale; static methodinfo_t flash_geom_Matrix3D_prepend; static methodinfo_t flash_geom_Matrix3D_recompose; static methodinfo_t flash_geom_Matrix3D_appendTranslation; static methodinfo_t flash_geom_Matrix3D_invert; static varinfo_t flash_geom_Matrix3D_rawData; static methodinfo_t flash_geom_Matrix3D_prependTranslation; static methodinfo_t flash_geom_Matrix3D_append; static methodinfo_t flash_geom_Matrix3D_clone; static methodinfo_t flash_geom_Matrix3D_prependScale; static methodinfo_t flash_geom_Matrix3D_deltaTransformVector; static methodinfo_t flash_geom_Matrix3D_transformVectors; static methodinfo_t flash_geom_Matrix3D_transpose; static methodinfo_t flash_sampler_pauseSampling; static classinfo_t flash_system_Capabilities; static methodinfo_t flash_sampler_getSetterInvocationCount; static methodinfo_t flash_sampler_getGetterInvocationCount; static classinfo_t flash_filters_BlurFilter; static varinfo_t flash_filters_BlurFilter_blurY; static methodinfo_t flash_filters_BlurFilter_clone; static varinfo_t flash_filters_BlurFilter_quality; static varinfo_t flash_filters_BlurFilter_blurX; static varinfo_t flash_filters_BlurFilter_blurY; static methodinfo_t flash_filters_BlurFilter_clone; static varinfo_t flash_filters_BlurFilter_quality; static varinfo_t flash_filters_BlurFilter_blurX; static methodinfo_t _isFinite; static classinfo_t flash_media_Video; static methodinfo_t flash_media_Video_attachCamera; static varinfo_t flash_media_Video_videoWidth; static methodinfo_t flash_media_Video_clear; static varinfo_t flash_media_Video_deblocking; static varinfo_t flash_media_Video_videoHeight; static methodinfo_t flash_media_Video_attachNetStream; static varinfo_t flash_media_Video_smoothing; static methodinfo_t flash_media_Video_attachCamera; static varinfo_t flash_media_Video_videoWidth; static methodinfo_t flash_media_Video_clear; static varinfo_t flash_media_Video_deblocking; static varinfo_t flash_media_Video_videoHeight; static methodinfo_t flash_media_Video_attachNetStream; static varinfo_t flash_media_Video_smoothing; static classinfo_t flash_text_engine_TextLineCreationResult; static classinfo_t _Error; static varinfo_t _Error_message; static varinfo_t _Error_errorID; static methodinfo_t _Error_getStackTrace; static varinfo_t _Error_name; static varinfo_t _Error_message; static varinfo_t _Error_errorID; static methodinfo_t _Error_getStackTrace; static varinfo_t _Error_name; static classinfo_t flash_xml_XMLNode; static varinfo_t flash_xml_XMLNode_childNodes; static methodinfo_t flash_xml_XMLNode_appendChild; static varinfo_t flash_xml_XMLNode_nextSibling; static varinfo_t flash_xml_XMLNode_nodeType; static varinfo_t flash_xml_XMLNode_attributes; static varinfo_t flash_xml_XMLNode_firstChild; static varinfo_t flash_xml_XMLNode_parentNode; static methodinfo_t flash_xml_XMLNode_toString; static varinfo_t flash_xml_XMLNode_prefix; static varinfo_t flash_xml_XMLNode_localName; static varinfo_t flash_xml_XMLNode_nodeName; static methodinfo_t flash_xml_XMLNode_getNamespaceForPrefix; static methodinfo_t flash_xml_XMLNode_insertBefore; static varinfo_t flash_xml_XMLNode_lastChild; static methodinfo_t flash_xml_XMLNode_cloneNode; static methodinfo_t flash_xml_XMLNode_removeNode; static varinfo_t flash_xml_XMLNode_namespaceURI; static varinfo_t flash_xml_XMLNode_previousSibling; static methodinfo_t flash_xml_XMLNode_hasChildNodes; static methodinfo_t flash_xml_XMLNode_getPrefixForNamespace; static varinfo_t flash_xml_XMLNode_nodeValue; static varinfo_t flash_xml_XMLNode_childNodes; static methodinfo_t flash_xml_XMLNode_appendChild; static varinfo_t flash_xml_XMLNode_nextSibling; static varinfo_t flash_xml_XMLNode_nodeType; static varinfo_t flash_xml_XMLNode_attributes; static varinfo_t flash_xml_XMLNode_firstChild; static varinfo_t flash_xml_XMLNode_parentNode; static methodinfo_t flash_xml_XMLNode_toString; static varinfo_t flash_xml_XMLNode_prefix; static varinfo_t flash_xml_XMLNode_localName; static varinfo_t flash_xml_XMLNode_nodeName; static methodinfo_t flash_xml_XMLNode_getNamespaceForPrefix; static methodinfo_t flash_xml_XMLNode_insertBefore; static varinfo_t flash_xml_XMLNode_lastChild; static methodinfo_t flash_xml_XMLNode_cloneNode; static methodinfo_t flash_xml_XMLNode_removeNode; static varinfo_t flash_xml_XMLNode_namespaceURI; static varinfo_t flash_xml_XMLNode_previousSibling; static methodinfo_t flash_xml_XMLNode_hasChildNodes; static methodinfo_t flash_xml_XMLNode_getPrefixForNamespace; static varinfo_t flash_xml_XMLNode_nodeValue; static classinfo_t flash_net_URLVariables; static methodinfo_t flash_net_URLVariables_toString; static methodinfo_t flash_net_URLVariables_decode; static methodinfo_t flash_net_URLVariables_toString; static methodinfo_t flash_net_URLVariables_decode; static classinfo_t flash_display_LoaderInfo; static varinfo_t flash_display_LoaderInfo_actionScriptVersion; static varinfo_t flash_display_LoaderInfo_contentType; static varinfo_t flash_display_LoaderInfo_sameDomain; static varinfo_t flash_display_LoaderInfo_bytesTotal; static varinfo_t flash_display_LoaderInfo_loaderURL; static varinfo_t flash_display_LoaderInfo_width; static methodinfo_t flash_display_LoaderInfo_dispatchEvent; static varinfo_t flash_display_LoaderInfo_height; static varinfo_t flash_display_LoaderInfo_frameRate; static varinfo_t flash_display_LoaderInfo_parameters; static varinfo_t flash_display_LoaderInfo_bytesLoaded; static varinfo_t flash_display_LoaderInfo_url; static varinfo_t flash_display_LoaderInfo_content; static varinfo_t flash_display_LoaderInfo_swfVersion; static varinfo_t flash_display_LoaderInfo_bytes; static varinfo_t flash_display_LoaderInfo_loader; static varinfo_t flash_display_LoaderInfo_applicationDomain; static varinfo_t flash_display_LoaderInfo_parentAllowsChild; static varinfo_t flash_display_LoaderInfo_childAllowsParent; static varinfo_t flash_display_LoaderInfo_sharedEvents; static varinfo_t flash_display_LoaderInfo_actionScriptVersion; static varinfo_t flash_display_LoaderInfo_contentType; static varinfo_t flash_display_LoaderInfo_sameDomain; static varinfo_t flash_display_LoaderInfo_bytesTotal; static varinfo_t flash_display_LoaderInfo_loaderURL; static varinfo_t flash_display_LoaderInfo_width; static methodinfo_t flash_display_LoaderInfo_dispatchEvent; static varinfo_t flash_display_LoaderInfo_height; static varinfo_t flash_display_LoaderInfo_frameRate; static varinfo_t flash_display_LoaderInfo_parameters; static varinfo_t flash_display_LoaderInfo_bytesLoaded; static varinfo_t flash_display_LoaderInfo_url; static varinfo_t flash_display_LoaderInfo_content; static varinfo_t flash_display_LoaderInfo_swfVersion; static varinfo_t flash_display_LoaderInfo_bytes; static varinfo_t flash_display_LoaderInfo_loader; static varinfo_t flash_display_LoaderInfo_applicationDomain; static varinfo_t flash_display_LoaderInfo_parentAllowsChild; static varinfo_t flash_display_LoaderInfo_childAllowsParent; static varinfo_t flash_display_LoaderInfo_sharedEvents; static classinfo_t flash_sampler_Sample; static varinfo_t flash_sampler_Sample_time; static varinfo_t flash_sampler_Sample_stack; static varinfo_t flash_sampler_Sample_time; static varinfo_t flash_sampler_Sample_stack; static classinfo_t flash_text_engine_DigitWidth; static classinfo_t flash_net_URLRequestMethod; static methodinfo_t adobe_utils_MMExecute; static classinfo_t flash_system_System; static classinfo_t flash_filters_BitmapFilterQuality; static classinfo_t flash_display_DisplayObjectContainer; static methodinfo_t flash_display_DisplayObjectContainer_addChild; static methodinfo_t flash_display_DisplayObjectContainer_getObjectsUnderPoint; static methodinfo_t flash_display_DisplayObjectContainer_removeChildAt; static methodinfo_t flash_display_DisplayObjectContainer_swapChildren; static methodinfo_t flash_display_DisplayObjectContainer_areInaccessibleObjectsUnderPoint; static methodinfo_t flash_display_DisplayObjectContainer_setChildIndex; static varinfo_t flash_display_DisplayObjectContainer_numChildren; static methodinfo_t flash_display_DisplayObjectContainer_getChildIndex; static methodinfo_t flash_display_DisplayObjectContainer_getChildAt; static methodinfo_t flash_display_DisplayObjectContainer_removeChild; static methodinfo_t flash_display_DisplayObjectContainer_addChildAt; static methodinfo_t flash_display_DisplayObjectContainer_contains; static methodinfo_t flash_display_DisplayObjectContainer_getChildByName; static methodinfo_t flash_display_DisplayObjectContainer_swapChildrenAt; static varinfo_t flash_display_DisplayObjectContainer_mouseChildren; static varinfo_t flash_display_DisplayObjectContainer_tabChildren; static varinfo_t flash_display_DisplayObjectContainer_textSnapshot; static methodinfo_t flash_display_DisplayObjectContainer_addChild; static methodinfo_t flash_display_DisplayObjectContainer_getObjectsUnderPoint; static methodinfo_t flash_display_DisplayObjectContainer_removeChildAt; static methodinfo_t flash_display_DisplayObjectContainer_swapChildren; static methodinfo_t flash_display_DisplayObjectContainer_areInaccessibleObjectsUnderPoint; static methodinfo_t flash_display_DisplayObjectContainer_setChildIndex; static varinfo_t flash_display_DisplayObjectContainer_numChildren; static methodinfo_t flash_display_DisplayObjectContainer_getChildIndex; static methodinfo_t flash_display_DisplayObjectContainer_getChildAt; static methodinfo_t flash_display_DisplayObjectContainer_removeChild; static methodinfo_t flash_display_DisplayObjectContainer_addChildAt; static methodinfo_t flash_display_DisplayObjectContainer_contains; static methodinfo_t flash_display_DisplayObjectContainer_getChildByName; static methodinfo_t flash_display_DisplayObjectContainer_swapChildrenAt; static varinfo_t flash_display_DisplayObjectContainer_mouseChildren; static varinfo_t flash_display_DisplayObjectContainer_tabChildren; static varinfo_t flash_display_DisplayObjectContainer_textSnapshot; static classinfo_t flash_system_LoaderContext; static varinfo_t flash_system_LoaderContext_checkPolicyFile; static varinfo_t flash_system_LoaderContext_securityDomain; static varinfo_t flash_system_LoaderContext_applicationDomain; static varinfo_t flash_system_LoaderContext_checkPolicyFile; static varinfo_t flash_system_LoaderContext_securityDomain; static varinfo_t flash_system_LoaderContext_applicationDomain; static methodinfo_t flash_utils_clearTimeout; static methodinfo_t _isXMLName; static classinfo_t flash_xml_XMLNodeType; static classinfo_t flash_events_ErrorEvent; static methodinfo_t flash_events_ErrorEvent_toString; static methodinfo_t flash_events_ErrorEvent_clone; static methodinfo_t flash_events_ErrorEvent_toString; static methodinfo_t flash_events_ErrorEvent_clone; static classinfo_t flash_utils_IDataOutput; static methodinfo_t flash_utils_IDataOutput_writeUnsignedInt; static methodinfo_t flash_utils_IDataOutput_writeInt; static varinfo_t flash_utils_IDataOutput_objectEncoding; static methodinfo_t flash_utils_IDataOutput_writeUTFBytes; static methodinfo_t flash_utils_IDataOutput_writeObject; static methodinfo_t flash_utils_IDataOutput_writeMultiByte; static methodinfo_t flash_utils_IDataOutput_writeShort; static methodinfo_t flash_utils_IDataOutput_writeFloat; static methodinfo_t flash_utils_IDataOutput_writeUTF; static methodinfo_t flash_utils_IDataOutput_writeByte; static methodinfo_t flash_utils_IDataOutput_writeBoolean; static methodinfo_t flash_utils_IDataOutput_writeDouble; static methodinfo_t flash_utils_IDataOutput_writeBytes; static varinfo_t flash_utils_IDataOutput_endian; static methodinfo_t flash_utils_IDataOutput_writeUnsignedInt; static methodinfo_t flash_utils_IDataOutput_writeInt; static varinfo_t flash_utils_IDataOutput_objectEncoding; static methodinfo_t flash_utils_IDataOutput_writeUTFBytes; static methodinfo_t flash_utils_IDataOutput_writeObject; static methodinfo_t flash_utils_IDataOutput_writeMultiByte; static methodinfo_t flash_utils_IDataOutput_writeShort; static methodinfo_t flash_utils_IDataOutput_writeFloat; static methodinfo_t flash_utils_IDataOutput_writeUTF; static methodinfo_t flash_utils_IDataOutput_writeByte; static methodinfo_t flash_utils_IDataOutput_writeBoolean; static methodinfo_t flash_utils_IDataOutput_writeDouble; static methodinfo_t flash_utils_IDataOutput_writeBytes; static varinfo_t flash_utils_IDataOutput_endian; static classinfo_t flash_geom_Utils3D; static classinfo_t flash_events_TextEvent; static methodinfo_t flash_events_TextEvent_toString; static varinfo_t flash_events_TextEvent_text; static methodinfo_t flash_events_TextEvent_clone; static methodinfo_t flash_events_TextEvent_toString; static varinfo_t flash_events_TextEvent_text; static methodinfo_t flash_events_TextEvent_clone; static classinfo_t flash_utils_Proxy; static methodinfo_t flash_utils_Proxy_callProperty; static methodinfo_t flash_utils_Proxy_setProperty; static methodinfo_t flash_utils_Proxy_getProperty; static methodinfo_t flash_utils_Proxy_nextName; static methodinfo_t flash_utils_Proxy_nextNameIndex; static methodinfo_t flash_utils_Proxy_hasProperty; static methodinfo_t flash_utils_Proxy_deleteProperty; static methodinfo_t flash_utils_Proxy_getDescendants; static methodinfo_t flash_utils_Proxy_isAttribute; static methodinfo_t flash_utils_Proxy_nextValue; static methodinfo_t flash_utils_Proxy_callProperty; static methodinfo_t flash_utils_Proxy_setProperty; static methodinfo_t flash_utils_Proxy_getProperty; static methodinfo_t flash_utils_Proxy_nextName; static methodinfo_t flash_utils_Proxy_nextNameIndex; static methodinfo_t flash_utils_Proxy_hasProperty; static methodinfo_t flash_utils_Proxy_deleteProperty; static methodinfo_t flash_utils_Proxy_getDescendants; static methodinfo_t flash_utils_Proxy_isAttribute; static methodinfo_t flash_utils_Proxy_nextValue; static classinfo_t flash_text_engine_FontPosture; static classinfo_t flash_xml_XMLDocument; static varinfo_t flash_xml_XMLDocument_docTypeDecl; static varinfo_t flash_xml_XMLDocument_idMap; static methodinfo_t flash_xml_XMLDocument_toString; static varinfo_t flash_xml_XMLDocument_xmlDecl; static methodinfo_t flash_xml_XMLDocument_createElement; static varinfo_t flash_xml_XMLDocument_ignoreWhite; static methodinfo_t flash_xml_XMLDocument_createTextNode; static methodinfo_t flash_xml_XMLDocument_parseXML; static varinfo_t flash_xml_XMLDocument_docTypeDecl; static varinfo_t flash_xml_XMLDocument_idMap; static methodinfo_t flash_xml_XMLDocument_toString; static varinfo_t flash_xml_XMLDocument_xmlDecl; static methodinfo_t flash_xml_XMLDocument_createElement; static varinfo_t flash_xml_XMLDocument_ignoreWhite; static methodinfo_t flash_xml_XMLDocument_createTextNode; static methodinfo_t flash_xml_XMLDocument_parseXML; static classinfo_t flash_display_ShaderInput; static varinfo_t flash_display_ShaderInput_width; static varinfo_t flash_display_ShaderInput_input; static varinfo_t flash_display_ShaderInput_height; static varinfo_t flash_display_ShaderInput_index; static varinfo_t flash_display_ShaderInput_channels; static varinfo_t flash_display_ShaderInput_width; static varinfo_t flash_display_ShaderInput_input; static varinfo_t flash_display_ShaderInput_height; static varinfo_t flash_display_ShaderInput_index; static varinfo_t flash_display_ShaderInput_channels; static classinfo_t flash_text_engine_TextBlock; static methodinfo_t flash_text_engine_TextBlock_createTextLine; static varinfo_t flash_text_engine_TextBlock_bidiLevel; static methodinfo_t flash_text_engine_TextBlock_getTextLineAtCharIndex; static varinfo_t flash_text_engine_TextBlock_lastLine; static methodinfo_t flash_text_engine_TextBlock_findPreviousWordBoundary; static methodinfo_t flash_text_engine_TextBlock_findPreviousAtomBoundary; static varinfo_t flash_text_engine_TextBlock_baselineZero; static varinfo_t flash_text_engine_TextBlock_applyNonLinearFontScaling; static varinfo_t flash_text_engine_TextBlock_firstLine; static varinfo_t flash_text_engine_TextBlock_textJustifier; static methodinfo_t flash_text_engine_TextBlock_releaseLines; static varinfo_t flash_text_engine_TextBlock_firstInvalidLine; static varinfo_t flash_text_engine_TextBlock_baselineFontSize; static varinfo_t flash_text_engine_TextBlock_lineRotation; static varinfo_t flash_text_engine_TextBlock_userData; static varinfo_t flash_text_engine_TextBlock_content; static varinfo_t flash_text_engine_TextBlock_textLineCreationResult; static varinfo_t flash_text_engine_TextBlock_baselineFontDescription; static methodinfo_t flash_text_engine_TextBlock_findNextAtomBoundary; static methodinfo_t flash_text_engine_TextBlock_findNextWordBoundary; static varinfo_t flash_text_engine_TextBlock_tabStops; static methodinfo_t flash_text_engine_TextBlock_dump; static methodinfo_t flash_text_engine_TextBlock_createTextLine; static varinfo_t flash_text_engine_TextBlock_bidiLevel; static methodinfo_t flash_text_engine_TextBlock_getTextLineAtCharIndex; static varinfo_t flash_text_engine_TextBlock_lastLine; static methodinfo_t flash_text_engine_TextBlock_findPreviousWordBoundary; static methodinfo_t flash_text_engine_TextBlock_findPreviousAtomBoundary; static varinfo_t flash_text_engine_TextBlock_baselineZero; static varinfo_t flash_text_engine_TextBlock_applyNonLinearFontScaling; static varinfo_t flash_text_engine_TextBlock_firstLine; static varinfo_t flash_text_engine_TextBlock_textJustifier; static methodinfo_t flash_text_engine_TextBlock_releaseLines; static varinfo_t flash_text_engine_TextBlock_firstInvalidLine; static varinfo_t flash_text_engine_TextBlock_baselineFontSize; static varinfo_t flash_text_engine_TextBlock_lineRotation; static varinfo_t flash_text_engine_TextBlock_userData; static varinfo_t flash_text_engine_TextBlock_content; static varinfo_t flash_text_engine_TextBlock_textLineCreationResult; static varinfo_t flash_text_engine_TextBlock_baselineFontDescription; static methodinfo_t flash_text_engine_TextBlock_findNextAtomBoundary; static methodinfo_t flash_text_engine_TextBlock_findNextWordBoundary; static varinfo_t flash_text_engine_TextBlock_tabStops; static methodinfo_t flash_text_engine_TextBlock_dump; static classinfo_t flash_ui_MouseCursor; static varinfo_t flash_utils_flash_proxy; static classinfo_t flash_display_MorphShape; static classinfo_t flash_text_TextDisplayMode; static classinfo_t flash_net_URLLoaderDataFormat; static classinfo_t flash_display_StageQuality; static classinfo_t flash_display_Sprite; static methodinfo_t flash_display_Sprite_stopDrag; static varinfo_t flash_display_Sprite_buttonMode; static varinfo_t flash_display_Sprite_soundTransform; static varinfo_t flash_display_Sprite_hitArea; static varinfo_t flash_display_Sprite_useHandCursor; static varinfo_t flash_display_Sprite_graphics; static methodinfo_t flash_display_Sprite_startDrag; static varinfo_t flash_display_Sprite_dropTarget; static methodinfo_t flash_display_Sprite_stopDrag; static varinfo_t flash_display_Sprite_buttonMode; static varinfo_t flash_display_Sprite_soundTransform; static varinfo_t flash_display_Sprite_hitArea; static varinfo_t flash_display_Sprite_useHandCursor; static varinfo_t flash_display_Sprite_graphics; static methodinfo_t flash_display_Sprite_startDrag; static varinfo_t flash_display_Sprite_dropTarget; static classinfo_t flash_ui_Keyboard; static classinfo_t flash_filters_DisplacementMapFilter; static varinfo_t flash_filters_DisplacementMapFilter_scaleY; static varinfo_t flash_filters_DisplacementMapFilter_mapPoint; static varinfo_t flash_filters_DisplacementMapFilter_scaleX; static varinfo_t flash_filters_DisplacementMapFilter_mapBitmap; static varinfo_t flash_filters_DisplacementMapFilter_mode; static varinfo_t flash_filters_DisplacementMapFilter_color; static varinfo_t flash_filters_DisplacementMapFilter_componentX; static methodinfo_t flash_filters_DisplacementMapFilter_clone; static varinfo_t flash_filters_DisplacementMapFilter_alpha; static varinfo_t flash_filters_DisplacementMapFilter_componentY; static varinfo_t flash_filters_DisplacementMapFilter_scaleY; static varinfo_t flash_filters_DisplacementMapFilter_mapPoint; static varinfo_t flash_filters_DisplacementMapFilter_scaleX; static varinfo_t flash_filters_DisplacementMapFilter_mapBitmap; static varinfo_t flash_filters_DisplacementMapFilter_mode; static varinfo_t flash_filters_DisplacementMapFilter_color; static varinfo_t flash_filters_DisplacementMapFilter_componentX; static methodinfo_t flash_filters_DisplacementMapFilter_clone; static varinfo_t flash_filters_DisplacementMapFilter_alpha; static varinfo_t flash_filters_DisplacementMapFilter_componentY; static methodinfo_t flash_utils_escapeMultiByte; static methodinfo_t adobe_utils_MMEndCommand; static classinfo_t flash_display_GradientType; static classinfo_t flash_media_ID3Info; static varinfo_t flash_media_ID3Info_comment; static varinfo_t flash_media_ID3Info_year; static varinfo_t flash_media_ID3Info_track; static varinfo_t flash_media_ID3Info_artist; static varinfo_t flash_media_ID3Info_songName; static varinfo_t flash_media_ID3Info_genre; static varinfo_t flash_media_ID3Info_album; static varinfo_t flash_media_ID3Info_comment; static varinfo_t flash_media_ID3Info_year; static varinfo_t flash_media_ID3Info_track; static varinfo_t flash_media_ID3Info_artist; static varinfo_t flash_media_ID3Info_songName; static varinfo_t flash_media_ID3Info_genre; static varinfo_t flash_media_ID3Info_album; static classinfo_t flash_display_GraphicsSolidFill; static varinfo_t flash_display_GraphicsSolidFill_color; static varinfo_t flash_display_GraphicsSolidFill_alpha; static varinfo_t flash_display_GraphicsSolidFill_color; static varinfo_t flash_display_GraphicsSolidFill_alpha; static classinfo_t flash_filters_ColorMatrixFilter; static varinfo_t flash_filters_ColorMatrixFilter_matrix; static methodinfo_t flash_filters_ColorMatrixFilter_clone; static varinfo_t flash_filters_ColorMatrixFilter_matrix; static methodinfo_t flash_filters_ColorMatrixFilter_clone; static classinfo_t flash_net_NetStreamPlayTransitions; static classinfo_t flash_media_SoundCodec; static classinfo_t flash_net_ObjectEncoding; static classinfo_t flash_text_engine_GroupElement; static methodinfo_t flash_text_engine_GroupElement_groupElements; static methodinfo_t flash_text_engine_GroupElement_splitTextElement; static methodinfo_t flash_text_engine_GroupElement_mergeTextElements; static methodinfo_t flash_text_engine_GroupElement_getElementAtCharIndex; static varinfo_t flash_text_engine_GroupElement_elementCount; static methodinfo_t flash_text_engine_GroupElement_setElements; static methodinfo_t flash_text_engine_GroupElement_getElementAt; static methodinfo_t flash_text_engine_GroupElement_ungroupElements; static methodinfo_t flash_text_engine_GroupElement_replaceElements; static methodinfo_t flash_text_engine_GroupElement_getElementIndex; static methodinfo_t flash_text_engine_GroupElement_groupElements; static methodinfo_t flash_text_engine_GroupElement_splitTextElement; static methodinfo_t flash_text_engine_GroupElement_mergeTextElements; static methodinfo_t flash_text_engine_GroupElement_getElementAtCharIndex; static varinfo_t flash_text_engine_GroupElement_elementCount; static methodinfo_t flash_text_engine_GroupElement_setElements; static methodinfo_t flash_text_engine_GroupElement_getElementAt; static methodinfo_t flash_text_engine_GroupElement_ungroupElements; static methodinfo_t flash_text_engine_GroupElement_replaceElements; static methodinfo_t flash_text_engine_GroupElement_getElementIndex; static methodinfo_t _parseInt; static classinfo_t _QName; static varinfo_t _QName_localName; static methodinfo_t _QName_valueOf; static methodinfo_t _QName_toString; static varinfo_t _QName_uri; static varinfo_t _QName_localName; static methodinfo_t _QName_valueOf; static methodinfo_t _QName_toString; static varinfo_t _QName_uri; static classinfo_t _UninitializedError; static classinfo_t _Date; static methodinfo_t _Date_getTimezoneOffset; static methodinfo_t _Date_getTime; static methodinfo_t _Date_setUTCMilliseconds; static varinfo_t _Date_month; static methodinfo_t _Date_toString; static methodinfo_t _Date_getHours; static varinfo_t _Date_date; static varinfo_t _Date_milliseconds; static methodinfo_t _Date_setSeconds; static methodinfo_t _Date_getDate; static varinfo_t _Date_hoursUTC; static methodinfo_t _Date_getUTCDate; static varinfo_t _Date_timezoneOffset; static methodinfo_t _Date_setTime; static varinfo_t _Date_millisecondsUTC; static varinfo_t _Date_minutes; static methodinfo_t _Date_setUTCHours; static varinfo_t _Date_minutesUTC; static methodinfo_t _Date_toLocaleTimeString; static varinfo_t _Date_fullYearUTC; static varinfo_t _Date_time; static varinfo_t _Date_monthUTC; static methodinfo_t _Date_getUTCMilliseconds; static methodinfo_t _Date_toDateString; static methodinfo_t _Date_getMonth; static methodinfo_t _Date_setMinutes; static methodinfo_t _Date_toLocaleDateString; static varinfo_t _Date_fullYear; static methodinfo_t _Date_getUTCFullYear; static methodinfo_t _Date_getSeconds; static varinfo_t _Date_dateUTC; static methodinfo_t _Date_getMilliseconds; static methodinfo_t _Date_setUTCMinutes; static varinfo_t _Date_day; static methodinfo_t _Date_setUTCSeconds; static methodinfo_t _Date_setUTCDate; static methodinfo_t _Date_getUTCMonth; static methodinfo_t _Date_valueOf; static varinfo_t _Date_seconds; static methodinfo_t _Date_getUTCMinutes; static methodinfo_t _Date_setDate; static methodinfo_t _Date_getFullYear; static methodinfo_t _Date_setFullYear; static methodinfo_t _Date_setHours; static methodinfo_t _Date_setMonth; static methodinfo_t _Date_getUTCSeconds; static methodinfo_t _Date_getMinutes; static methodinfo_t _Date_toLocaleString; static methodinfo_t _Date_toUTCString; static varinfo_t _Date_dayUTC; static methodinfo_t _Date_getDay; static methodinfo_t _Date_setUTCMonth; static varinfo_t _Date_hours; static methodinfo_t _Date_getUTCDay; static methodinfo_t _Date_setUTCFullYear; static varinfo_t _Date_secondsUTC; static methodinfo_t _Date_toTimeString; static methodinfo_t _Date_setMilliseconds; static methodinfo_t _Date_getUTCHours; static methodinfo_t _Date_getTimezoneOffset; static methodinfo_t _Date_getTime; static methodinfo_t _Date_setUTCMilliseconds; static varinfo_t _Date_month; static methodinfo_t _Date_toString; static methodinfo_t _Date_getHours; static varinfo_t _Date_date; static varinfo_t _Date_milliseconds; static methodinfo_t _Date_setSeconds; static methodinfo_t _Date_getDate; static varinfo_t _Date_hoursUTC; static methodinfo_t _Date_getUTCDate; static varinfo_t _Date_timezoneOffset; static methodinfo_t _Date_setTime; static varinfo_t _Date_millisecondsUTC; static varinfo_t _Date_minutes; static methodinfo_t _Date_setUTCHours; static varinfo_t _Date_minutesUTC; static methodinfo_t _Date_toLocaleTimeString; static varinfo_t _Date_fullYearUTC; static varinfo_t _Date_time; static varinfo_t _Date_monthUTC; static methodinfo_t _Date_getUTCMilliseconds; static methodinfo_t _Date_toDateString; static methodinfo_t _Date_getMonth; static methodinfo_t _Date_setMinutes; static methodinfo_t _Date_toLocaleDateString; static varinfo_t _Date_fullYear; static methodinfo_t _Date_getUTCFullYear; static methodinfo_t _Date_getSeconds; static varinfo_t _Date_dateUTC; static methodinfo_t _Date_getMilliseconds; static methodinfo_t _Date_setUTCMinutes; static varinfo_t _Date_day; static methodinfo_t _Date_setUTCSeconds; static methodinfo_t _Date_setUTCDate; static methodinfo_t _Date_getUTCMonth; static methodinfo_t _Date_valueOf; static varinfo_t _Date_seconds; static methodinfo_t _Date_getUTCMinutes; static methodinfo_t _Date_setDate; static methodinfo_t _Date_getFullYear; static methodinfo_t _Date_setFullYear; static methodinfo_t _Date_setHours; static methodinfo_t _Date_setMonth; static methodinfo_t _Date_getUTCSeconds; static methodinfo_t _Date_getMinutes; static methodinfo_t _Date_toLocaleString; static methodinfo_t _Date_toUTCString; static varinfo_t _Date_dayUTC; static methodinfo_t _Date_getDay; static methodinfo_t _Date_setUTCMonth; static varinfo_t _Date_hours; static methodinfo_t _Date_getUTCDay; static methodinfo_t _Date_setUTCFullYear; static varinfo_t _Date_secondsUTC; static methodinfo_t _Date_toTimeString; static methodinfo_t _Date_setMilliseconds; static methodinfo_t _Date_getUTCHours; static classinfo_t flash_text_StyleSheet; static varinfo_t flash_text_StyleSheet_styleNames; static methodinfo_t flash_text_StyleSheet_clear; static methodinfo_t flash_text_StyleSheet_transform; static methodinfo_t flash_text_StyleSheet_getStyle; static methodinfo_t flash_text_StyleSheet_parseCSS; static methodinfo_t flash_text_StyleSheet_setStyle; static varinfo_t flash_text_StyleSheet_styleNames; static methodinfo_t flash_text_StyleSheet_clear; static methodinfo_t flash_text_StyleSheet_transform; static methodinfo_t flash_text_StyleSheet_getStyle; static methodinfo_t flash_text_StyleSheet_parseCSS; static methodinfo_t flash_text_StyleSheet_setStyle; static classinfo_t flash_display_ActionScriptVersion; static classinfo_t flash_text_engine_EastAsianJustifier; static varinfo_t flash_text_engine_EastAsianJustifier_justificationStyle; static methodinfo_t flash_text_engine_EastAsianJustifier_clone; static varinfo_t flash_text_engine_EastAsianJustifier_justificationStyle; static methodinfo_t flash_text_engine_EastAsianJustifier_clone; static classinfo_t _String; static methodinfo_t _String_indexOf; static methodinfo_t _String_replace; static methodinfo_t _String_lastIndexOf; static methodinfo_t _String_valueOf; static methodinfo_t _String_concat; static methodinfo_t _String_substr; static methodinfo_t _String_slice; static methodinfo_t _String_search; static methodinfo_t _String_toLocaleUpperCase; static methodinfo_t _String_toString; static methodinfo_t _String_toUpperCase; static methodinfo_t _String_charAt; static methodinfo_t _String_match; static methodinfo_t _String_charCodeAt; static methodinfo_t _String_substring; static methodinfo_t _String_localeCompare; static methodinfo_t _String_split; static methodinfo_t _String_toLocaleLowerCase; static varinfo_t _String_length; static methodinfo_t _String_toLowerCase; static methodinfo_t _String_indexOf; static methodinfo_t _String_replace; static methodinfo_t _String_lastIndexOf; static methodinfo_t _String_valueOf; static methodinfo_t _String_concat; static methodinfo_t _String_substr; static methodinfo_t _String_slice; static methodinfo_t _String_search; static methodinfo_t _String_toLocaleUpperCase; static methodinfo_t _String_toString; static methodinfo_t _String_toUpperCase; static methodinfo_t _String_charAt; static methodinfo_t _String_match; static methodinfo_t _String_charCodeAt; static methodinfo_t _String_substring; static methodinfo_t _String_localeCompare; static methodinfo_t _String_split; static methodinfo_t _String_toLocaleLowerCase; static varinfo_t _String_length; static methodinfo_t _String_toLowerCase; static classinfo_t flash_media_SoundChannel; static varinfo_t flash_media_SoundChannel_leftPeak; static methodinfo_t flash_media_SoundChannel_stop; static varinfo_t flash_media_SoundChannel_position; static varinfo_t flash_media_SoundChannel_soundTransform; static varinfo_t flash_media_SoundChannel_rightPeak; static varinfo_t flash_media_SoundChannel_leftPeak; static methodinfo_t flash_media_SoundChannel_stop; static varinfo_t flash_media_SoundChannel_position; static varinfo_t flash_media_SoundChannel_soundTransform; static varinfo_t flash_media_SoundChannel_rightPeak; static classinfo_t flash_desktop_Clipboard; static methodinfo_t flash_desktop_Clipboard_setDataHandler; static methodinfo_t flash_desktop_Clipboard_setData; static varinfo_t flash_desktop_Clipboard_formats; static methodinfo_t flash_desktop_Clipboard_clear; static methodinfo_t flash_desktop_Clipboard_getData; static methodinfo_t flash_desktop_Clipboard_hasFormat; static methodinfo_t flash_desktop_Clipboard_clearData; static methodinfo_t flash_desktop_Clipboard_setDataHandler; static methodinfo_t flash_desktop_Clipboard_setData; static varinfo_t flash_desktop_Clipboard_formats; static methodinfo_t flash_desktop_Clipboard_clear; static methodinfo_t flash_desktop_Clipboard_getData; static methodinfo_t flash_desktop_Clipboard_hasFormat; static methodinfo_t flash_desktop_Clipboard_clearData; static classinfo_t flash_display_IBitmapDrawable; static classinfo_t _TypeError; static classinfo_t _int; static methodinfo_t _int_valueOf; static methodinfo_t _int_toString; static methodinfo_t _int_toExponential; static methodinfo_t _int_toFixed; static methodinfo_t _int_toPrecision; static methodinfo_t _int_valueOf; static methodinfo_t _int_toString; static methodinfo_t _int_toExponential; static methodinfo_t _int_toFixed; static methodinfo_t _int_toPrecision; static classinfo_t flash_display_Scene; static varinfo_t flash_display_Scene_numFrames; static varinfo_t flash_display_Scene_labels; static varinfo_t flash_display_Scene_name; static varinfo_t flash_display_Scene_numFrames; static varinfo_t flash_display_Scene_labels; static varinfo_t flash_display_Scene_name; static classinfo_t flash_text_engine_FontMetrics; static varinfo_t flash_text_engine_FontMetrics_superscriptOffset; static varinfo_t flash_text_engine_FontMetrics_underlineThickness; static varinfo_t flash_text_engine_FontMetrics_subscriptScale; static varinfo_t flash_text_engine_FontMetrics_strikethroughOffset; static varinfo_t flash_text_engine_FontMetrics_emBox; static varinfo_t flash_text_engine_FontMetrics_strikethroughThickness; static varinfo_t flash_text_engine_FontMetrics_superscriptScale; static varinfo_t flash_text_engine_FontMetrics_subscriptOffset; static varinfo_t flash_text_engine_FontMetrics_underlineOffset; static varinfo_t flash_text_engine_FontMetrics_superscriptOffset; static varinfo_t flash_text_engine_FontMetrics_underlineThickness; static varinfo_t flash_text_engine_FontMetrics_subscriptScale; static varinfo_t flash_text_engine_FontMetrics_strikethroughOffset; static varinfo_t flash_text_engine_FontMetrics_emBox; static varinfo_t flash_text_engine_FontMetrics_strikethroughThickness; static varinfo_t flash_text_engine_FontMetrics_superscriptScale; static varinfo_t flash_text_engine_FontMetrics_subscriptOffset; static varinfo_t flash_text_engine_FontMetrics_underlineOffset; static classinfo_t flash_utils_IExternalizable; static methodinfo_t flash_utils_IExternalizable_readExternal; static methodinfo_t flash_utils_IExternalizable_writeExternal; static methodinfo_t flash_utils_IExternalizable_readExternal; static methodinfo_t flash_utils_IExternalizable_writeExternal; static classinfo_t __AS3___vec_Vector; static classinfo_t flash_filters_GradientBevelFilter; static varinfo_t flash_filters_GradientBevelFilter_strength; static varinfo_t flash_filters_GradientBevelFilter_quality; static varinfo_t flash_filters_GradientBevelFilter_angle; static varinfo_t flash_filters_GradientBevelFilter_knockout; static varinfo_t flash_filters_GradientBevelFilter_alphas; static varinfo_t flash_filters_GradientBevelFilter_type; static varinfo_t flash_filters_GradientBevelFilter_ratios; static varinfo_t flash_filters_GradientBevelFilter_colors; static varinfo_t flash_filters_GradientBevelFilter_blurX; static varinfo_t flash_filters_GradientBevelFilter_blurY; static varinfo_t flash_filters_GradientBevelFilter_distance; static methodinfo_t flash_filters_GradientBevelFilter_clone; static varinfo_t flash_filters_GradientBevelFilter_strength; static varinfo_t flash_filters_GradientBevelFilter_quality; static varinfo_t flash_filters_GradientBevelFilter_angle; static varinfo_t flash_filters_GradientBevelFilter_knockout; static varinfo_t flash_filters_GradientBevelFilter_alphas; static varinfo_t flash_filters_GradientBevelFilter_type; static varinfo_t flash_filters_GradientBevelFilter_ratios; static varinfo_t flash_filters_GradientBevelFilter_colors; static varinfo_t flash_filters_GradientBevelFilter_blurX; static varinfo_t flash_filters_GradientBevelFilter_blurY; static varinfo_t flash_filters_GradientBevelFilter_distance; static methodinfo_t flash_filters_GradientBevelFilter_clone; static classinfo_t flash_text_TextRun; static varinfo_t flash_text_TextRun_beginIndex; static varinfo_t flash_text_TextRun_endIndex; static varinfo_t flash_text_TextRun_textFormat; static varinfo_t flash_text_TextRun_beginIndex; static varinfo_t flash_text_TextRun_endIndex; static varinfo_t flash_text_TextRun_textFormat; static classinfo_t flash_text_TextColorType; static methodinfo_t flash_sampler_getSampleCount; static classinfo_t flash_net_URLRequestHeader; static varinfo_t flash_net_URLRequestHeader_value; static varinfo_t flash_net_URLRequestHeader_name; static varinfo_t flash_net_URLRequestHeader_value; static varinfo_t flash_net_URLRequestHeader_name; static methodinfo_t flash_profiler_showRedrawRegions; static classinfo_t flash_display_ShaderData; static classinfo_t flash_text_engine_TextLine; static varinfo_t flash_text_engine_TextLine_previousLine; static varinfo_t flash_text_engine_TextLine_validity; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockBeginIndex; static methodinfo_t flash_text_engine_TextLine_getAtomWordBoundaryOnLeft; static methodinfo_t flash_text_engine_TextLine_getAtomTextRotation; static varinfo_t flash_text_engine_TextLine_textHeight; static methodinfo_t flash_text_engine_TextLine_getAtomCenter; static methodinfo_t flash_text_engine_TextLine_getAtomBounds; static varinfo_t flash_text_engine_TextLine_mirrorRegions; static varinfo_t flash_text_engine_TextLine_rawTextLength; static varinfo_t flash_text_engine_TextLine_userData; static varinfo_t flash_text_engine_TextLine_textWidth; static varinfo_t flash_text_engine_TextLine_textBlock; static varinfo_t flash_text_engine_TextLine_textBlockBeginIndex; static varinfo_t flash_text_engine_TextLine_unjustifiedTextWidth; static varinfo_t flash_text_engine_TextLine_ascent; static methodinfo_t flash_text_engine_TextLine_getBaselinePosition; static varinfo_t flash_text_engine_TextLine_specifiedWidth; static methodinfo_t flash_text_engine_TextLine_getMirrorRegion; static methodinfo_t flash_text_engine_TextLine_getAtomGraphic; static varinfo_t flash_text_engine_TextLine_hasGraphicElement; static methodinfo_t flash_text_engine_TextLine_flushAtomData; static methodinfo_t flash_text_engine_TextLine_dump; static varinfo_t flash_text_engine_TextLine_nextLine; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtCharIndex; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockEndIndex; static varinfo_t flash_text_engine_TextLine_atomCount; static varinfo_t flash_text_engine_TextLine_descent; static methodinfo_t flash_text_engine_TextLine_getAtomBidiLevel; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtPoint; static varinfo_t flash_text_engine_TextLine_previousLine; static varinfo_t flash_text_engine_TextLine_validity; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockBeginIndex; static methodinfo_t flash_text_engine_TextLine_getAtomWordBoundaryOnLeft; static methodinfo_t flash_text_engine_TextLine_getAtomTextRotation; static varinfo_t flash_text_engine_TextLine_textHeight; static methodinfo_t flash_text_engine_TextLine_getAtomCenter; static methodinfo_t flash_text_engine_TextLine_getAtomBounds; static varinfo_t flash_text_engine_TextLine_mirrorRegions; static varinfo_t flash_text_engine_TextLine_rawTextLength; static varinfo_t flash_text_engine_TextLine_userData; static varinfo_t flash_text_engine_TextLine_textWidth; static varinfo_t flash_text_engine_TextLine_textBlock; static varinfo_t flash_text_engine_TextLine_textBlockBeginIndex; static varinfo_t flash_text_engine_TextLine_unjustifiedTextWidth; static varinfo_t flash_text_engine_TextLine_ascent; static methodinfo_t flash_text_engine_TextLine_getBaselinePosition; static varinfo_t flash_text_engine_TextLine_specifiedWidth; static methodinfo_t flash_text_engine_TextLine_getMirrorRegion; static methodinfo_t flash_text_engine_TextLine_getAtomGraphic; static varinfo_t flash_text_engine_TextLine_hasGraphicElement; static methodinfo_t flash_text_engine_TextLine_flushAtomData; static methodinfo_t flash_text_engine_TextLine_dump; static varinfo_t flash_text_engine_TextLine_nextLine; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtCharIndex; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockEndIndex; static varinfo_t flash_text_engine_TextLine_atomCount; static varinfo_t flash_text_engine_TextLine_descent; static methodinfo_t flash_text_engine_TextLine_getAtomBidiLevel; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtPoint; static methodinfo_t flash_sampler_getSamples; static classinfo_t flash_net_URLRequest; static varinfo_t flash_net_URLRequest_contentType; static varinfo_t flash_net_URLRequest_url; static varinfo_t flash_net_URLRequest_requestHeaders; static varinfo_t flash_net_URLRequest_method; static varinfo_t flash_net_URLRequest_digest; static varinfo_t flash_net_URLRequest_data; static varinfo_t flash_net_URLRequest_contentType; static varinfo_t flash_net_URLRequest_url; static varinfo_t flash_net_URLRequest_requestHeaders; static varinfo_t flash_net_URLRequest_method; static varinfo_t flash_net_URLRequest_digest; static varinfo_t flash_net_URLRequest_data; static classinfo_t _URIError; static methodinfo_t flash_net_getClassByAlias; static classinfo_t flash_display_ShaderParameter; static varinfo_t flash_display_ShaderParameter_value; static varinfo_t flash_display_ShaderParameter_index; static varinfo_t flash_display_ShaderParameter_type; static varinfo_t flash_display_ShaderParameter_value; static varinfo_t flash_display_ShaderParameter_index; static varinfo_t flash_display_ShaderParameter_type; static classinfo_t flash_filters_BitmapFilterType; static classinfo_t _SecurityError; static classinfo_t flash_utils_IDataInput; static methodinfo_t flash_utils_IDataInput_readUTF; static methodinfo_t flash_utils_IDataInput_readByte; static methodinfo_t flash_utils_IDataInput_readUTFBytes; static methodinfo_t flash_utils_IDataInput_readShort; static varinfo_t flash_utils_IDataInput_objectEncoding; static methodinfo_t flash_utils_IDataInput_readUnsignedInt; static methodinfo_t flash_utils_IDataInput_readDouble; static methodinfo_t flash_utils_IDataInput_readBytes; static methodinfo_t flash_utils_IDataInput_readUnsignedByte; static methodinfo_t flash_utils_IDataInput_readMultiByte; static methodinfo_t flash_utils_IDataInput_readInt; static varinfo_t flash_utils_IDataInput_bytesAvailable; static methodinfo_t flash_utils_IDataInput_readUnsignedShort; static methodinfo_t flash_utils_IDataInput_readObject; static methodinfo_t flash_utils_IDataInput_readFloat; static varinfo_t flash_utils_IDataInput_endian; static methodinfo_t flash_utils_IDataInput_readBoolean; static methodinfo_t flash_utils_IDataInput_readUTF; static methodinfo_t flash_utils_IDataInput_readByte; static methodinfo_t flash_utils_IDataInput_readUTFBytes; static methodinfo_t flash_utils_IDataInput_readShort; static varinfo_t flash_utils_IDataInput_objectEncoding; static methodinfo_t flash_utils_IDataInput_readUnsignedInt; static methodinfo_t flash_utils_IDataInput_readDouble; static methodinfo_t flash_utils_IDataInput_readBytes; static methodinfo_t flash_utils_IDataInput_readUnsignedByte; static methodinfo_t flash_utils_IDataInput_readMultiByte; static methodinfo_t flash_utils_IDataInput_readInt; static varinfo_t flash_utils_IDataInput_bytesAvailable; static methodinfo_t flash_utils_IDataInput_readUnsignedShort; static methodinfo_t flash_utils_IDataInput_readObject; static methodinfo_t flash_utils_IDataInput_readFloat; static varinfo_t flash_utils_IDataInput_endian; static methodinfo_t flash_utils_IDataInput_readBoolean; static classinfo_t flash_events_IEventDispatcher; static methodinfo_t flash_events_IEventDispatcher_willTrigger; static methodinfo_t flash_events_IEventDispatcher_removeEventListener; static methodinfo_t flash_events_IEventDispatcher_hasEventListener; static methodinfo_t flash_events_IEventDispatcher_addEventListener; static methodinfo_t flash_events_IEventDispatcher_dispatchEvent; static methodinfo_t flash_events_IEventDispatcher_willTrigger; static methodinfo_t flash_events_IEventDispatcher_removeEventListener; static methodinfo_t flash_events_IEventDispatcher_hasEventListener; static methodinfo_t flash_events_IEventDispatcher_addEventListener; static methodinfo_t flash_events_IEventDispatcher_dispatchEvent; static classinfo_t _Class; static varinfo_t _Class_prototype; static varinfo_t _Class_prototype; static classinfo_t flash_geom_Rectangle; static varinfo_t flash_geom_Rectangle_top; static methodinfo_t flash_geom_Rectangle_intersection; static methodinfo_t flash_geom_Rectangle_intersects; static methodinfo_t flash_geom_Rectangle_containsPoint; static methodinfo_t flash_geom_Rectangle_setEmpty; static varinfo_t flash_geom_Rectangle_topLeft; static varinfo_t flash_geom_Rectangle_width; static methodinfo_t flash_geom_Rectangle_containsRect; static methodinfo_t flash_geom_Rectangle_isEmpty; static methodinfo_t flash_geom_Rectangle_equals; static varinfo_t flash_geom_Rectangle_height; static varinfo_t flash_geom_Rectangle_left; static methodinfo_t flash_geom_Rectangle_inflate; static methodinfo_t flash_geom_Rectangle_inflatePoint; static methodinfo_t flash_geom_Rectangle_toString; static methodinfo_t flash_geom_Rectangle_offsetPoint; static varinfo_t flash_geom_Rectangle_x; static varinfo_t flash_geom_Rectangle_size; static varinfo_t flash_geom_Rectangle_bottomRight; static varinfo_t flash_geom_Rectangle_right; static methodinfo_t flash_geom_Rectangle_contains; static methodinfo_t flash_geom_Rectangle_union; static varinfo_t flash_geom_Rectangle_bottom; static methodinfo_t flash_geom_Rectangle_clone; static varinfo_t flash_geom_Rectangle_y; static methodinfo_t flash_geom_Rectangle_offset; static varinfo_t flash_geom_Rectangle_top; static methodinfo_t flash_geom_Rectangle_intersection; static methodinfo_t flash_geom_Rectangle_intersects; static methodinfo_t flash_geom_Rectangle_containsPoint; static methodinfo_t flash_geom_Rectangle_setEmpty; static varinfo_t flash_geom_Rectangle_topLeft; static varinfo_t flash_geom_Rectangle_width; static methodinfo_t flash_geom_Rectangle_containsRect; static methodinfo_t flash_geom_Rectangle_isEmpty; static methodinfo_t flash_geom_Rectangle_equals; static varinfo_t flash_geom_Rectangle_height; static varinfo_t flash_geom_Rectangle_left; static methodinfo_t flash_geom_Rectangle_inflate; static methodinfo_t flash_geom_Rectangle_inflatePoint; static methodinfo_t flash_geom_Rectangle_toString; static methodinfo_t flash_geom_Rectangle_offsetPoint; static varinfo_t flash_geom_Rectangle_x; static varinfo_t flash_geom_Rectangle_size; static varinfo_t flash_geom_Rectangle_bottomRight; static varinfo_t flash_geom_Rectangle_right; static methodinfo_t flash_geom_Rectangle_contains; static methodinfo_t flash_geom_Rectangle_union; static varinfo_t flash_geom_Rectangle_bottom; static methodinfo_t flash_geom_Rectangle_clone; static varinfo_t flash_geom_Rectangle_y; static methodinfo_t flash_geom_Rectangle_offset; static classinfo_t flash_events_SecurityErrorEvent; static methodinfo_t flash_events_SecurityErrorEvent_toString; static methodinfo_t flash_events_SecurityErrorEvent_clone; static methodinfo_t flash_events_SecurityErrorEvent_toString; static methodinfo_t flash_events_SecurityErrorEvent_clone; static classinfo_t flash_net_IDynamicPropertyWriter; static methodinfo_t flash_net_IDynamicPropertyWriter_writeDynamicProperties; static methodinfo_t flash_net_IDynamicPropertyWriter_writeDynamicProperties; static classinfo_t flash_display_InterpolationMethod; static classinfo_t _Object; static methodinfo_t _Object_propertyIsEnumerable; static methodinfo_t _Object_isPrototypeOf; static methodinfo_t _Object_hasOwnProperty; static methodinfo_t _Object_propertyIsEnumerable; static methodinfo_t _Object_isPrototypeOf; static methodinfo_t _Object_hasOwnProperty; static classinfo_t flash_errors_EOFError; static classinfo_t flash_net_NetStream; static varinfo_t flash_net_NetStream_videoCodec; static varinfo_t flash_net_NetStream_info; static methodinfo_t flash_net_NetStream_attachCamera; static varinfo_t flash_net_NetStream_farNonce; static methodinfo_t flash_net_NetStream_close; static methodinfo_t flash_net_NetStream_pause; static methodinfo_t flash_net_NetStream_onPeerConnect; static varinfo_t flash_net_NetStream_client; static methodinfo_t flash_net_NetStream_resume; static varinfo_t flash_net_NetStream_liveDelay; static varinfo_t flash_net_NetStream_peerStreams; static varinfo_t flash_net_NetStream_objectEncoding; static varinfo_t flash_net_NetStream_bytesLoaded; static methodinfo_t flash_net_NetStream_receiveVideo; static varinfo_t flash_net_NetStream_maxPauseBufferTime; static methodinfo_t flash_net_NetStream_play2; static varinfo_t flash_net_NetStream_audioCodec; static methodinfo_t flash_net_NetStream_receiveVideoFPS; static varinfo_t flash_net_NetStream_bytesTotal; static varinfo_t flash_net_NetStream_farID; static methodinfo_t flash_net_NetStream_receiveAudio; static varinfo_t flash_net_NetStream_bufferLength; static methodinfo_t flash_net_NetStream_seek; static methodinfo_t flash_net_NetStream_attachAudio; static varinfo_t flash_net_NetStream_bufferTime; static methodinfo_t flash_net_NetStream_play; static methodinfo_t flash_net_NetStream_publish; static methodinfo_t flash_net_NetStream_togglePause; static varinfo_t flash_net_NetStream_checkPolicyFile; static varinfo_t flash_net_NetStream_nearNonce; static varinfo_t flash_net_NetStream_decodedFrames; static methodinfo_t flash_net_NetStream_send; static varinfo_t flash_net_NetStream_currentFPS; static varinfo_t flash_net_NetStream_time; static varinfo_t flash_net_NetStream_soundTransform; static varinfo_t flash_net_NetStream_videoCodec; static varinfo_t flash_net_NetStream_info; static methodinfo_t flash_net_NetStream_attachCamera; static varinfo_t flash_net_NetStream_farNonce; static methodinfo_t flash_net_NetStream_close; static methodinfo_t flash_net_NetStream_pause; static methodinfo_t flash_net_NetStream_onPeerConnect; static varinfo_t flash_net_NetStream_client; static methodinfo_t flash_net_NetStream_resume; static varinfo_t flash_net_NetStream_liveDelay; static varinfo_t flash_net_NetStream_peerStreams; static varinfo_t flash_net_NetStream_objectEncoding; static varinfo_t flash_net_NetStream_bytesLoaded; static methodinfo_t flash_net_NetStream_receiveVideo; static varinfo_t flash_net_NetStream_maxPauseBufferTime; static methodinfo_t flash_net_NetStream_play2; static varinfo_t flash_net_NetStream_audioCodec; static methodinfo_t flash_net_NetStream_receiveVideoFPS; static varinfo_t flash_net_NetStream_bytesTotal; static varinfo_t flash_net_NetStream_farID; static methodinfo_t flash_net_NetStream_receiveAudio; static varinfo_t flash_net_NetStream_bufferLength; static methodinfo_t flash_net_NetStream_seek; static methodinfo_t flash_net_NetStream_attachAudio; static varinfo_t flash_net_NetStream_bufferTime; static methodinfo_t flash_net_NetStream_play; static methodinfo_t flash_net_NetStream_publish; static methodinfo_t flash_net_NetStream_togglePause; static varinfo_t flash_net_NetStream_checkPolicyFile; static varinfo_t flash_net_NetStream_nearNonce; static varinfo_t flash_net_NetStream_decodedFrames; static methodinfo_t flash_net_NetStream_send; static varinfo_t flash_net_NetStream_currentFPS; static varinfo_t flash_net_NetStream_time; static varinfo_t flash_net_NetStream_soundTransform; static classinfo_t _ArgumentError; static classinfo_t _XMLList; static methodinfo_t _XMLList_normalize; static methodinfo_t _XMLList_removeNamespace; static methodinfo_t _XMLList_prependChild; static methodinfo_t _XMLList_toXMLString; static methodinfo_t _XMLList_nodeKind; static methodinfo_t _XMLList_copy; static methodinfo_t _XMLList_text; static methodinfo_t _XMLList_toString; static methodinfo_t _XMLList_childIndex; static methodinfo_t _XMLList_setName; static methodinfo_t _XMLList_setLocalName; static methodinfo_t _XMLList_namespace; static methodinfo_t _XMLList_insertChildBefore; static methodinfo_t _XMLList_addNamespace; static methodinfo_t _XMLList_propertyIsEnumerable; static methodinfo_t _XMLList_comments; static methodinfo_t _XMLList_attributes; static methodinfo_t _XMLList_descendants; static methodinfo_t _XMLList_replace; static methodinfo_t _XMLList_children; static methodinfo_t _XMLList_contains; static methodinfo_t _XMLList_hasSimpleContent; static methodinfo_t _XMLList_elements; static methodinfo_t _XMLList_hasComplexContent; static methodinfo_t _XMLList_insertChildAfter; static methodinfo_t _XMLList_parent; static methodinfo_t _XMLList_length; static methodinfo_t _XMLList_processingInstructions; static methodinfo_t _XMLList_child; static methodinfo_t _XMLList_appendChild; static methodinfo_t _XMLList_valueOf; static methodinfo_t _XMLList_localName; static methodinfo_t _XMLList_inScopeNamespaces; static methodinfo_t _XMLList_hasOwnProperty; static methodinfo_t _XMLList_setNamespace; static methodinfo_t _XMLList_namespaceDeclarations; static methodinfo_t _XMLList_name; static methodinfo_t _XMLList_setChildren; static methodinfo_t _XMLList_attribute; static methodinfo_t _XMLList_normalize; static methodinfo_t _XMLList_removeNamespace; static methodinfo_t _XMLList_prependChild; static methodinfo_t _XMLList_toXMLString; static methodinfo_t _XMLList_nodeKind; static methodinfo_t _XMLList_copy; static methodinfo_t _XMLList_text; static methodinfo_t _XMLList_toString; static methodinfo_t _XMLList_childIndex; static methodinfo_t _XMLList_setName; static methodinfo_t _XMLList_setLocalName; static methodinfo_t _XMLList_namespace; static methodinfo_t _XMLList_insertChildBefore; static methodinfo_t _XMLList_addNamespace; static methodinfo_t _XMLList_propertyIsEnumerable; static methodinfo_t _XMLList_comments; static methodinfo_t _XMLList_attributes; static methodinfo_t _XMLList_descendants; static methodinfo_t _XMLList_replace; static methodinfo_t _XMLList_children; static methodinfo_t _XMLList_contains; static methodinfo_t _XMLList_hasSimpleContent; static methodinfo_t _XMLList_elements; static methodinfo_t _XMLList_hasComplexContent; static methodinfo_t _XMLList_insertChildAfter; static methodinfo_t _XMLList_parent; static methodinfo_t _XMLList_length; static methodinfo_t _XMLList_processingInstructions; static methodinfo_t _XMLList_child; static methodinfo_t _XMLList_appendChild; static methodinfo_t _XMLList_valueOf; static methodinfo_t _XMLList_localName; static methodinfo_t _XMLList_inScopeNamespaces; static methodinfo_t _XMLList_hasOwnProperty; static methodinfo_t _XMLList_setNamespace; static methodinfo_t _XMLList_namespaceDeclarations; static methodinfo_t _XMLList_name; static methodinfo_t _XMLList_setChildren; static methodinfo_t _XMLList_attribute; static classinfo_t flash_geom_Point; static methodinfo_t flash_geom_Point_equals; static methodinfo_t flash_geom_Point_normalize; static varinfo_t flash_geom_Point_x; static methodinfo_t flash_geom_Point_offset; static methodinfo_t flash_geom_Point_subtract; static varinfo_t flash_geom_Point_y; static varinfo_t flash_geom_Point_length; static methodinfo_t flash_geom_Point_add; static methodinfo_t flash_geom_Point_toString; static methodinfo_t flash_geom_Point_clone; static methodinfo_t flash_geom_Point_equals; static methodinfo_t flash_geom_Point_normalize; static varinfo_t flash_geom_Point_x; static methodinfo_t flash_geom_Point_offset; static methodinfo_t flash_geom_Point_subtract; static varinfo_t flash_geom_Point_y; static varinfo_t flash_geom_Point_length; static methodinfo_t flash_geom_Point_add; static methodinfo_t flash_geom_Point_toString; static methodinfo_t flash_geom_Point_clone; static classinfo_t flash_printing_PrintJobOptions; static varinfo_t flash_printing_PrintJobOptions_printAsBitmap; static varinfo_t flash_printing_PrintJobOptions_printAsBitmap; static classinfo_t flash_display_DisplayObject; static varinfo_t flash_display_DisplayObject_rotation; static varinfo_t flash_display_DisplayObject_filters; static varinfo_t flash_display_DisplayObject_rotationZ; static varinfo_t flash_display_DisplayObject_accessibilityProperties; static varinfo_t flash_display_DisplayObject_mouseX; static varinfo_t flash_display_DisplayObject_root; static varinfo_t flash_display_DisplayObject_stage; static varinfo_t flash_display_DisplayObject_rotationY; static varinfo_t flash_display_DisplayObject_scaleZ; static methodinfo_t flash_display_DisplayObject_local3DToGlobal; static varinfo_t flash_display_DisplayObject_loaderInfo; static varinfo_t flash_display_DisplayObject_cacheAsBitmap; static varinfo_t flash_display_DisplayObject_transform; static varinfo_t flash_display_DisplayObject_scaleY; static varinfo_t flash_display_DisplayObject_height; static varinfo_t flash_display_DisplayObject_rotationX; static varinfo_t flash_display_DisplayObject_scrollRect; static varinfo_t flash_display_DisplayObject_width; static varinfo_t flash_display_DisplayObject_scale9Grid; static varinfo_t flash_display_DisplayObject_parent; static methodinfo_t flash_display_DisplayObject_hitTestObject; static methodinfo_t flash_display_DisplayObject_hitTestPoint; static varinfo_t flash_display_DisplayObject_alpha; static methodinfo_t flash_display_DisplayObject_getRect; static varinfo_t flash_display_DisplayObject_opaqueBackground; static methodinfo_t flash_display_DisplayObject_globalToLocal3D; static varinfo_t flash_display_DisplayObject_visible; static varinfo_t flash_display_DisplayObject_blendMode; static varinfo_t flash_display_DisplayObject_scaleX; static methodinfo_t flash_display_DisplayObject_globalToLocal; static methodinfo_t flash_display_DisplayObject_localToGlobal; static varinfo_t flash_display_DisplayObject_z; static varinfo_t flash_display_DisplayObject_name; static methodinfo_t flash_display_DisplayObject_getBounds; static varinfo_t flash_display_DisplayObject_mask; static varinfo_t flash_display_DisplayObject_mouseY; static varinfo_t flash_display_DisplayObject_x; static varinfo_t flash_display_DisplayObject_y; static varinfo_t flash_display_DisplayObject_rotation; static varinfo_t flash_display_DisplayObject_filters; static varinfo_t flash_display_DisplayObject_rotationZ; static varinfo_t flash_display_DisplayObject_accessibilityProperties; static varinfo_t flash_display_DisplayObject_mouseX; static varinfo_t flash_display_DisplayObject_root; static varinfo_t flash_display_DisplayObject_stage; static varinfo_t flash_display_DisplayObject_rotationY; static varinfo_t flash_display_DisplayObject_scaleZ; static methodinfo_t flash_display_DisplayObject_local3DToGlobal; static varinfo_t flash_display_DisplayObject_loaderInfo; static varinfo_t flash_display_DisplayObject_cacheAsBitmap; static varinfo_t flash_display_DisplayObject_transform; static varinfo_t flash_display_DisplayObject_scaleY; static varinfo_t flash_display_DisplayObject_height; static varinfo_t flash_display_DisplayObject_rotationX; static varinfo_t flash_display_DisplayObject_scrollRect; static varinfo_t flash_display_DisplayObject_width; static varinfo_t flash_display_DisplayObject_scale9Grid; static varinfo_t flash_display_DisplayObject_parent; static methodinfo_t flash_display_DisplayObject_hitTestObject; static methodinfo_t flash_display_DisplayObject_hitTestPoint; static varinfo_t flash_display_DisplayObject_alpha; static methodinfo_t flash_display_DisplayObject_getRect; static varinfo_t flash_display_DisplayObject_opaqueBackground; static methodinfo_t flash_display_DisplayObject_globalToLocal3D; static varinfo_t flash_display_DisplayObject_visible; static varinfo_t flash_display_DisplayObject_blendMode; static varinfo_t flash_display_DisplayObject_scaleX; static methodinfo_t flash_display_DisplayObject_globalToLocal; static methodinfo_t flash_display_DisplayObject_localToGlobal; static varinfo_t flash_display_DisplayObject_z; static varinfo_t flash_display_DisplayObject_name; static methodinfo_t flash_display_DisplayObject_getBounds; static varinfo_t flash_display_DisplayObject_mask; static varinfo_t flash_display_DisplayObject_mouseY; static varinfo_t flash_display_DisplayObject_x; static varinfo_t flash_display_DisplayObject_y; static classinfo_t flash_sampler_DeleteObjectSample; static varinfo_t flash_sampler_DeleteObjectSample_size; static varinfo_t flash_sampler_DeleteObjectSample_id; static varinfo_t flash_sampler_DeleteObjectSample_size; static varinfo_t flash_sampler_DeleteObjectSample_id; static methodinfo_t flash_system_fscommand; static methodinfo_t flash_utils_unescapeMultiByte; static classinfo_t flash_sampler_StackFrame; static varinfo_t flash_sampler_StackFrame_name; static varinfo_t flash_sampler_StackFrame_line; static methodinfo_t flash_sampler_StackFrame_toString; static varinfo_t flash_sampler_StackFrame_file; static varinfo_t flash_sampler_StackFrame_name; static varinfo_t flash_sampler_StackFrame_line; static methodinfo_t flash_sampler_StackFrame_toString; static varinfo_t flash_sampler_StackFrame_file; static classinfo_t flash_system_JPEGLoaderContext; static varinfo_t flash_system_JPEGLoaderContext_deblockingFilter; static varinfo_t flash_system_JPEGLoaderContext_deblockingFilter; static classinfo_t flash_system_IME; static methodinfo_t _isNaN; static classinfo_t flash_system_Security; static classinfo_t flash_display_Bitmap; static varinfo_t flash_display_Bitmap_pixelSnapping; static varinfo_t flash_display_Bitmap_bitmapData; static varinfo_t flash_display_Bitmap_smoothing; static varinfo_t flash_display_Bitmap_pixelSnapping; static varinfo_t flash_display_Bitmap_bitmapData; static varinfo_t flash_display_Bitmap_smoothing; static classinfo_t flash_printing_PrintJob; static varinfo_t flash_printing_PrintJob_paperWidth; static methodinfo_t flash_printing_PrintJob_addPage; static varinfo_t flash_printing_PrintJob_pageHeight; static methodinfo_t flash_printing_PrintJob_start; static varinfo_t flash_printing_PrintJob_pageWidth; static methodinfo_t flash_printing_PrintJob_send; static varinfo_t flash_printing_PrintJob_paperHeight; static varinfo_t flash_printing_PrintJob_orientation; static varinfo_t flash_printing_PrintJob_paperWidth; static methodinfo_t flash_printing_PrintJob_addPage; static varinfo_t flash_printing_PrintJob_pageHeight; static methodinfo_t flash_printing_PrintJob_start; static varinfo_t flash_printing_PrintJob_pageWidth; static methodinfo_t flash_printing_PrintJob_send; static varinfo_t flash_printing_PrintJob_paperHeight; static varinfo_t flash_printing_PrintJob_orientation; static classinfo_t flash_text_StaticText; static varinfo_t flash_text_StaticText_text; static varinfo_t flash_text_StaticText_text; static classinfo_t flash_text_engine_SpaceJustifier; static methodinfo_t flash_text_engine_SpaceJustifier_clone; static varinfo_t flash_text_engine_SpaceJustifier_letterSpacing; static methodinfo_t flash_text_engine_SpaceJustifier_clone; static varinfo_t flash_text_engine_SpaceJustifier_letterSpacing; static classinfo_t flash_events_DataEvent; static methodinfo_t flash_events_DataEvent_toString; static methodinfo_t flash_events_DataEvent_clone; static varinfo_t flash_events_DataEvent_data; static methodinfo_t flash_events_DataEvent_toString; static methodinfo_t flash_events_DataEvent_clone; static varinfo_t flash_events_DataEvent_data; static classinfo_t flash_events_ActivityEvent; static methodinfo_t flash_events_ActivityEvent_toString; static varinfo_t flash_events_ActivityEvent_activating; static methodinfo_t flash_events_ActivityEvent_clone; static methodinfo_t flash_events_ActivityEvent_toString; static varinfo_t flash_events_ActivityEvent_activating; static methodinfo_t flash_events_ActivityEvent_clone; static classinfo_t flash_display_GraphicsEndFill; static classinfo_t flash_display_ColorCorrection; static classinfo_t flash_events_IOErrorEvent; static methodinfo_t flash_events_IOErrorEvent_toString; static methodinfo_t flash_events_IOErrorEvent_clone; static methodinfo_t flash_events_IOErrorEvent_toString; static methodinfo_t flash_events_IOErrorEvent_clone; static classinfo_t flash_display_GraphicsStroke; static varinfo_t flash_display_GraphicsStroke_scaleMode; static varinfo_t flash_display_GraphicsStroke_miterLimit; static varinfo_t flash_display_GraphicsStroke_pixelHinting; static varinfo_t flash_display_GraphicsStroke_fill; static varinfo_t flash_display_GraphicsStroke_thickness; static varinfo_t flash_display_GraphicsStroke_joints; static varinfo_t flash_display_GraphicsStroke_caps; static varinfo_t flash_display_GraphicsStroke_scaleMode; static varinfo_t flash_display_GraphicsStroke_miterLimit; static varinfo_t flash_display_GraphicsStroke_pixelHinting; static varinfo_t flash_display_GraphicsStroke_fill; static varinfo_t flash_display_GraphicsStroke_thickness; static varinfo_t flash_display_GraphicsStroke_joints; static varinfo_t flash_display_GraphicsStroke_caps; static classinfo_t _Boolean; static methodinfo_t _Boolean_valueOf; static methodinfo_t _Boolean_toString; static methodinfo_t _Boolean_valueOf; static methodinfo_t _Boolean_toString; static methodinfo_t flash_sampler_getMemberNames; static methodinfo_t flash_utils_getQualifiedClassName; static classinfo_t flash_text_engine_GraphicElement; static varinfo_t flash_text_engine_GraphicElement_graphic; static varinfo_t flash_text_engine_GraphicElement_elementWidth; static varinfo_t flash_text_engine_GraphicElement_elementHeight; static varinfo_t flash_text_engine_GraphicElement_graphic; static varinfo_t flash_text_engine_GraphicElement_elementWidth; static varinfo_t flash_text_engine_GraphicElement_elementHeight; static classinfo_t flash_media_Microphone; static varinfo_t flash_media_Microphone_codec; static varinfo_t flash_media_Microphone_gain; static varinfo_t flash_media_Microphone_index; static methodinfo_t flash_media_Microphone_setLoopBack; static methodinfo_t flash_media_Microphone_setSilenceLevel; static varinfo_t flash_media_Microphone_name; static methodinfo_t flash_media_Microphone_setUseEchoSuppression; static varinfo_t flash_media_Microphone_framesPerPacket; static varinfo_t flash_media_Microphone_muted; static varinfo_t flash_media_Microphone_soundTransform; static varinfo_t flash_media_Microphone_encodeQuality; static varinfo_t flash_media_Microphone_useEchoSuppression; static varinfo_t flash_media_Microphone_silenceLevel; static varinfo_t flash_media_Microphone_silenceTimeout; static varinfo_t flash_media_Microphone_rate; static varinfo_t flash_media_Microphone_activityLevel; static varinfo_t flash_media_Microphone_codec; static varinfo_t flash_media_Microphone_gain; static varinfo_t flash_media_Microphone_index; static methodinfo_t flash_media_Microphone_setLoopBack; static methodinfo_t flash_media_Microphone_setSilenceLevel; static varinfo_t flash_media_Microphone_name; static methodinfo_t flash_media_Microphone_setUseEchoSuppression; static varinfo_t flash_media_Microphone_framesPerPacket; static varinfo_t flash_media_Microphone_muted; static varinfo_t flash_media_Microphone_soundTransform; static varinfo_t flash_media_Microphone_encodeQuality; static varinfo_t flash_media_Microphone_useEchoSuppression; static varinfo_t flash_media_Microphone_silenceLevel; static varinfo_t flash_media_Microphone_silenceTimeout; static varinfo_t flash_media_Microphone_rate; static varinfo_t flash_media_Microphone_activityLevel; static classinfo_t flash_ui_ContextMenuClipboardItems; static varinfo_t flash_ui_ContextMenuClipboardItems_clear; static methodinfo_t flash_ui_ContextMenuClipboardItems_clone; static varinfo_t flash_ui_ContextMenuClipboardItems_paste; static varinfo_t flash_ui_ContextMenuClipboardItems_selectAll; static varinfo_t flash_ui_ContextMenuClipboardItems_copy; static varinfo_t flash_ui_ContextMenuClipboardItems_cut; static varinfo_t flash_ui_ContextMenuClipboardItems_clear; static methodinfo_t flash_ui_ContextMenuClipboardItems_clone; static varinfo_t flash_ui_ContextMenuClipboardItems_paste; static varinfo_t flash_ui_ContextMenuClipboardItems_selectAll; static varinfo_t flash_ui_ContextMenuClipboardItems_copy; static varinfo_t flash_ui_ContextMenuClipboardItems_cut; static classinfo_t flash_display_GraphicsShaderFill; static varinfo_t flash_display_GraphicsShaderFill_shader; static varinfo_t flash_display_GraphicsShaderFill_matrix; static varinfo_t flash_display_GraphicsShaderFill_shader; static varinfo_t flash_display_GraphicsShaderFill_matrix; static classinfo_t flash_errors_IllegalOperationError; static classinfo_t flash_filters_GradientGlowFilter; static varinfo_t flash_filters_GradientGlowFilter_strength; static varinfo_t flash_filters_GradientGlowFilter_quality; static varinfo_t flash_filters_GradientGlowFilter_angle; static varinfo_t flash_filters_GradientGlowFilter_knockout; static varinfo_t flash_filters_GradientGlowFilter_type; static varinfo_t flash_filters_GradientGlowFilter_alphas; static varinfo_t flash_filters_GradientGlowFilter_ratios; static varinfo_t flash_filters_GradientGlowFilter_colors; static varinfo_t flash_filters_GradientGlowFilter_blurX; static varinfo_t flash_filters_GradientGlowFilter_blurY; static varinfo_t flash_filters_GradientGlowFilter_distance; static methodinfo_t flash_filters_GradientGlowFilter_clone; static varinfo_t flash_filters_GradientGlowFilter_strength; static varinfo_t flash_filters_GradientGlowFilter_quality; static varinfo_t flash_filters_GradientGlowFilter_angle; static varinfo_t flash_filters_GradientGlowFilter_knockout; static varinfo_t flash_filters_GradientGlowFilter_type; static varinfo_t flash_filters_GradientGlowFilter_alphas; static varinfo_t flash_filters_GradientGlowFilter_ratios; static varinfo_t flash_filters_GradientGlowFilter_colors; static varinfo_t flash_filters_GradientGlowFilter_blurX; static varinfo_t flash_filters_GradientGlowFilter_blurY; static varinfo_t flash_filters_GradientGlowFilter_distance; static methodinfo_t flash_filters_GradientGlowFilter_clone; static classinfo_t flash_display_CapsStyle; static classinfo_t flash_text_TextSnapshot; static methodinfo_t flash_text_TextSnapshot_setSelectColor; static methodinfo_t flash_text_TextSnapshot_setSelected; static methodinfo_t flash_text_TextSnapshot_getSelectedText; static methodinfo_t flash_text_TextSnapshot_getTextRunInfo; static varinfo_t flash_text_TextSnapshot_charCount; static methodinfo_t flash_text_TextSnapshot_findText; static methodinfo_t flash_text_TextSnapshot_getSelected; static methodinfo_t flash_text_TextSnapshot_hitTestTextNearPos; static methodinfo_t flash_text_TextSnapshot_getText; static methodinfo_t flash_text_TextSnapshot_setSelectColor; static methodinfo_t flash_text_TextSnapshot_setSelected; static methodinfo_t flash_text_TextSnapshot_getSelectedText; static methodinfo_t flash_text_TextSnapshot_getTextRunInfo; static varinfo_t flash_text_TextSnapshot_charCount; static methodinfo_t flash_text_TextSnapshot_findText; static methodinfo_t flash_text_TextSnapshot_getSelected; static methodinfo_t flash_text_TextSnapshot_hitTestTextNearPos; static methodinfo_t flash_text_TextSnapshot_getText; static classinfo_t flash_text_engine_FontLookup; static classinfo_t flash_display_InteractiveObject; static varinfo_t flash_display_InteractiveObject_tabIndex; static varinfo_t flash_display_InteractiveObject_doubleClickEnabled; static varinfo_t flash_display_InteractiveObject_tabEnabled; static varinfo_t flash_display_InteractiveObject_mouseEnabled; static varinfo_t flash_display_InteractiveObject_contextMenu; static varinfo_t flash_display_InteractiveObject_focusRect; static varinfo_t flash_display_InteractiveObject_accessibilityImplementation; static varinfo_t flash_display_InteractiveObject_tabIndex; static varinfo_t flash_display_InteractiveObject_doubleClickEnabled; static varinfo_t flash_display_InteractiveObject_tabEnabled; static varinfo_t flash_display_InteractiveObject_mouseEnabled; static varinfo_t flash_display_InteractiveObject_contextMenu; static varinfo_t flash_display_InteractiveObject_focusRect; static varinfo_t flash_display_InteractiveObject_accessibilityImplementation; static classinfo_t flash_text_TextField; static methodinfo_t flash_text_TextField_getTextFormat; static varinfo_t flash_text_TextField_border; static varinfo_t flash_text_TextField_selectedText; static methodinfo_t flash_text_TextField_pasteRichText; static varinfo_t flash_text_TextField_bottomScrollV; static methodinfo_t flash_text_TextField_getLineIndexOfChar; static methodinfo_t flash_text_TextField_replaceText; static varinfo_t flash_text_TextField_defaultTextFormat; static varinfo_t flash_text_TextField_restrict; static varinfo_t flash_text_TextField_htmlText; static methodinfo_t flash_text_TextField_copyRichText; static methodinfo_t flash_text_TextField_getLineText; static methodinfo_t flash_text_TextField_getFirstCharInParagraph; static methodinfo_t flash_text_TextField_setSelection; static varinfo_t flash_text_TextField_length; static varinfo_t flash_text_TextField_wordWrap; static methodinfo_t flash_text_TextField_appendText; static varinfo_t flash_text_TextField_caretIndex; static varinfo_t flash_text_TextField_mouseWheelEnabled; static varinfo_t flash_text_TextField_selectionBeginIndex; static varinfo_t flash_text_TextField_sharpness; static varinfo_t flash_text_TextField_type; static methodinfo_t flash_text_TextField_getLineIndexAtPoint; static methodinfo_t flash_text_TextField_getCharIndexAtPoint; static methodinfo_t flash_text_TextField_getXMLText; static methodinfo_t flash_text_TextField_getParagraphLength; static methodinfo_t flash_text_TextField_getRawText; static varinfo_t flash_text_TextField_gridFitType; static methodinfo_t flash_text_TextField_getLineOffset; static varinfo_t flash_text_TextField_backgroundColor; static varinfo_t flash_text_TextField_multiline; static varinfo_t flash_text_TextField_numLines; static methodinfo_t flash_text_TextField_getImageReference; static varinfo_t flash_text_TextField_displayAsPassword; static varinfo_t flash_text_TextField_textWidth; static varinfo_t flash_text_TextField_autoSize; static varinfo_t flash_text_TextField_selectable; static methodinfo_t flash_text_TextField_getCharBoundaries; static varinfo_t flash_text_TextField_alwaysShowSelection; static varinfo_t flash_text_TextField_thickness; static varinfo_t flash_text_TextField_useRichTextClipboard; static varinfo_t flash_text_TextField_scrollV; static methodinfo_t flash_text_TextField_getTextRuns; static methodinfo_t flash_text_TextField_setTextFormat; static varinfo_t flash_text_TextField_textColor; static varinfo_t flash_text_TextField_maxScrollV; static varinfo_t flash_text_TextField_embedFonts; static varinfo_t flash_text_TextField_scrollH; static varinfo_t flash_text_TextField_text; static methodinfo_t flash_text_TextField_getLineLength; static varinfo_t flash_text_TextField_textHeight; static varinfo_t flash_text_TextField_antiAliasType; static varinfo_t flash_text_TextField_styleSheet; static varinfo_t flash_text_TextField_background; static methodinfo_t flash_text_TextField_replaceSelectedText; static varinfo_t flash_text_TextField_borderColor; static varinfo_t flash_text_TextField_maxScrollH; static varinfo_t flash_text_TextField_maxChars; static methodinfo_t flash_text_TextField_getLineMetrics; static varinfo_t flash_text_TextField_selectionEndIndex; static methodinfo_t flash_text_TextField_insertXMLText; static varinfo_t flash_text_TextField_condenseWhite; static methodinfo_t flash_text_TextField_getTextFormat; static varinfo_t flash_text_TextField_border; static varinfo_t flash_text_TextField_selectedText; static methodinfo_t flash_text_TextField_pasteRichText; static varinfo_t flash_text_TextField_bottomScrollV; static methodinfo_t flash_text_TextField_getLineIndexOfChar; static methodinfo_t flash_text_TextField_replaceText; static varinfo_t flash_text_TextField_defaultTextFormat; static varinfo_t flash_text_TextField_restrict; static varinfo_t flash_text_TextField_htmlText; static methodinfo_t flash_text_TextField_copyRichText; static methodinfo_t flash_text_TextField_getLineText; static methodinfo_t flash_text_TextField_getFirstCharInParagraph; static methodinfo_t flash_text_TextField_setSelection; static varinfo_t flash_text_TextField_length; static varinfo_t flash_text_TextField_wordWrap; static methodinfo_t flash_text_TextField_appendText; static varinfo_t flash_text_TextField_caretIndex; static varinfo_t flash_text_TextField_mouseWheelEnabled; static varinfo_t flash_text_TextField_selectionBeginIndex; static varinfo_t flash_text_TextField_sharpness; static varinfo_t flash_text_TextField_type; static methodinfo_t flash_text_TextField_getLineIndexAtPoint; static methodinfo_t flash_text_TextField_getCharIndexAtPoint; static methodinfo_t flash_text_TextField_getXMLText; static methodinfo_t flash_text_TextField_getParagraphLength; static methodinfo_t flash_text_TextField_getRawText; static varinfo_t flash_text_TextField_gridFitType; static methodinfo_t flash_text_TextField_getLineOffset; static varinfo_t flash_text_TextField_backgroundColor; static varinfo_t flash_text_TextField_multiline; static varinfo_t flash_text_TextField_numLines; static methodinfo_t flash_text_TextField_getImageReference; static varinfo_t flash_text_TextField_displayAsPassword; static varinfo_t flash_text_TextField_textWidth; static varinfo_t flash_text_TextField_autoSize; static varinfo_t flash_text_TextField_selectable; static methodinfo_t flash_text_TextField_getCharBoundaries; static varinfo_t flash_text_TextField_alwaysShowSelection; static varinfo_t flash_text_TextField_thickness; static varinfo_t flash_text_TextField_useRichTextClipboard; static varinfo_t flash_text_TextField_scrollV; static methodinfo_t flash_text_TextField_getTextRuns; static methodinfo_t flash_text_TextField_setTextFormat; static varinfo_t flash_text_TextField_textColor; static varinfo_t flash_text_TextField_maxScrollV; static varinfo_t flash_text_TextField_embedFonts; static varinfo_t flash_text_TextField_scrollH; static varinfo_t flash_text_TextField_text; static methodinfo_t flash_text_TextField_getLineLength; static varinfo_t flash_text_TextField_textHeight; static varinfo_t flash_text_TextField_antiAliasType; static varinfo_t flash_text_TextField_styleSheet; static varinfo_t flash_text_TextField_background; static methodinfo_t flash_text_TextField_replaceSelectedText; static varinfo_t flash_text_TextField_borderColor; static varinfo_t flash_text_TextField_maxScrollH; static varinfo_t flash_text_TextField_maxChars; static methodinfo_t flash_text_TextField_getLineMetrics; static varinfo_t flash_text_TextField_selectionEndIndex; static methodinfo_t flash_text_TextField_insertXMLText; static varinfo_t flash_text_TextField_condenseWhite; static classinfo_t flash_printing_PrintJobOrientation; static classinfo_t flash_text_TextRenderer; static classinfo_t flash_net_NetConnection; static varinfo_t flash_net_NetConnection_nearID; static varinfo_t flash_net_NetConnection_client; static varinfo_t flash_net_NetConnection_farNonce; static varinfo_t flash_net_NetConnection_objectEncoding; static varinfo_t flash_net_NetConnection_farID; static varinfo_t flash_net_NetConnection_connected; static methodinfo_t flash_net_NetConnection_call; static varinfo_t flash_net_NetConnection_usingTLS; static varinfo_t flash_net_NetConnection_proxyType; static methodinfo_t flash_net_NetConnection_addHeader; static varinfo_t flash_net_NetConnection_protocol; static methodinfo_t flash_net_NetConnection_close; static varinfo_t flash_net_NetConnection_nearNonce; static methodinfo_t flash_net_NetConnection_connect; static varinfo_t flash_net_NetConnection_unconnectedPeerStreams; static varinfo_t flash_net_NetConnection_maxPeerConnections; static varinfo_t flash_net_NetConnection_connectedProxyType; static varinfo_t flash_net_NetConnection_uri; static varinfo_t flash_net_NetConnection_nearID; static varinfo_t flash_net_NetConnection_client; static varinfo_t flash_net_NetConnection_farNonce; static varinfo_t flash_net_NetConnection_objectEncoding; static varinfo_t flash_net_NetConnection_farID; static varinfo_t flash_net_NetConnection_connected; static methodinfo_t flash_net_NetConnection_call; static varinfo_t flash_net_NetConnection_usingTLS; static varinfo_t flash_net_NetConnection_proxyType; static methodinfo_t flash_net_NetConnection_addHeader; static varinfo_t flash_net_NetConnection_protocol; static methodinfo_t flash_net_NetConnection_close; static varinfo_t flash_net_NetConnection_nearNonce; static methodinfo_t flash_net_NetConnection_connect; static varinfo_t flash_net_NetConnection_unconnectedPeerStreams; static varinfo_t flash_net_NetConnection_maxPeerConnections; static varinfo_t flash_net_NetConnection_connectedProxyType; static varinfo_t flash_net_NetConnection_uri; static methodinfo_t _decodeURIComponent; static methodinfo_t flash_sampler_isGetterSetter; static methodinfo_t flash_utils_getQualifiedSuperclassName; static classinfo_t flash_display_GraphicsPathWinding; static classinfo_t flash_text_engine_TabStop; static varinfo_t flash_text_engine_TabStop_alignment; static varinfo_t flash_text_engine_TabStop_position; static varinfo_t flash_text_engine_TabStop_decimalAlignmentToken; static varinfo_t flash_text_engine_TabStop_alignment; static varinfo_t flash_text_engine_TabStop_position; static varinfo_t flash_text_engine_TabStop_decimalAlignmentToken; static classinfo_t flash_text_engine_JustificationStyle; static methodinfo_t flash_sampler_startSampling; static classinfo_t flash_text_engine_TextRotation; static methodinfo_t flash_sampler_clearSamples; static classinfo_t flash_system_IMEConversionMode; static classinfo_t flash_display_StageScaleMode; static methodinfo_t flash_sampler_getSize; static classinfo_t flash_net_URLStream; static methodinfo_t flash_net_URLStream_readUTF; static methodinfo_t flash_net_URLStream_readByte; static methodinfo_t flash_net_URLStream_readUTFBytes; static methodinfo_t flash_net_URLStream_readShort; static varinfo_t flash_net_URLStream_objectEncoding; static varinfo_t flash_net_URLStream_connected; static methodinfo_t flash_net_URLStream_readUnsignedInt; static methodinfo_t flash_net_URLStream_readDouble; static methodinfo_t flash_net_URLStream_readBytes; static methodinfo_t flash_net_URLStream_readUnsignedByte; static methodinfo_t flash_net_URLStream_readMultiByte; static methodinfo_t flash_net_URLStream_readInt; static varinfo_t flash_net_URLStream_bytesAvailable; static methodinfo_t flash_net_URLStream_load; static methodinfo_t flash_net_URLStream_close; static methodinfo_t flash_net_URLStream_readUnsignedShort; static methodinfo_t flash_net_URLStream_readObject; static methodinfo_t flash_net_URLStream_readFloat; static varinfo_t flash_net_URLStream_endian; static methodinfo_t flash_net_URLStream_readBoolean; static methodinfo_t flash_net_URLStream_readUTF; static methodinfo_t flash_net_URLStream_readByte; static methodinfo_t flash_net_URLStream_readUTFBytes; static methodinfo_t flash_net_URLStream_readShort; static varinfo_t flash_net_URLStream_objectEncoding; static varinfo_t flash_net_URLStream_connected; static methodinfo_t flash_net_URLStream_readUnsignedInt; static methodinfo_t flash_net_URLStream_readDouble; static methodinfo_t flash_net_URLStream_readBytes; static methodinfo_t flash_net_URLStream_readUnsignedByte; static methodinfo_t flash_net_URLStream_readMultiByte; static methodinfo_t flash_net_URLStream_readInt; static varinfo_t flash_net_URLStream_bytesAvailable; static methodinfo_t flash_net_URLStream_load; static methodinfo_t flash_net_URLStream_close; static methodinfo_t flash_net_URLStream_readUnsignedShort; static methodinfo_t flash_net_URLStream_readObject; static methodinfo_t flash_net_URLStream_readFloat; static varinfo_t flash_net_URLStream_endian; static methodinfo_t flash_net_URLStream_readBoolean; static classinfo_t flash_display_BlendMode; static classinfo_t flash_ui_Mouse; static classinfo_t flash_errors_InvalidSWFError; static classinfo_t flash_text_engine_RenderingMode; static classinfo_t flash_display_GraphicsTrianglePath; static varinfo_t flash_display_GraphicsTrianglePath_culling; static varinfo_t flash_display_GraphicsTrianglePath_vertices; static varinfo_t flash_display_GraphicsTrianglePath_indices; static varinfo_t flash_display_GraphicsTrianglePath_uvtData; static varinfo_t flash_display_GraphicsTrianglePath_culling; static varinfo_t flash_display_GraphicsTrianglePath_vertices; static varinfo_t flash_display_GraphicsTrianglePath_indices; static varinfo_t flash_display_GraphicsTrianglePath_uvtData; static classinfo_t flash_display_IGraphicsFill; static classinfo_t flash_text_engine_TypographicCase; static classinfo_t _XML; static methodinfo_t _XML_normalize; static methodinfo_t _XML_removeNamespace; static methodinfo_t _XML_prependChild; static methodinfo_t _XML_toXMLString; static methodinfo_t _XML_text; static methodinfo_t _XML_nodeKind; static methodinfo_t _XML_copy; static methodinfo_t _XML_toString; static methodinfo_t _XML_childIndex; static methodinfo_t _XML_setName; static methodinfo_t _XML_setLocalName; static methodinfo_t _XML_namespace; static methodinfo_t _XML_insertChildBefore; static methodinfo_t _XML_addNamespace; static methodinfo_t _XML_propertyIsEnumerable; static methodinfo_t _XML_comments; static methodinfo_t _XML_attributes; static methodinfo_t _XML_descendants; static methodinfo_t _XML_replace; static methodinfo_t _XML_setNotification; static methodinfo_t _XML_children; static methodinfo_t _XML_contains; static methodinfo_t _XML_hasSimpleContent; static methodinfo_t _XML_elements; static methodinfo_t _XML_hasComplexContent; static methodinfo_t _XML_insertChildAfter; static methodinfo_t _XML_parent; static methodinfo_t _XML_length; static methodinfo_t _XML_processingInstructions; static methodinfo_t _XML_child; static methodinfo_t _XML_appendChild; static methodinfo_t _XML_valueOf; static methodinfo_t _XML_localName; static methodinfo_t _XML_notification; static methodinfo_t _XML_inScopeNamespaces; static methodinfo_t _XML_hasOwnProperty; static methodinfo_t _XML_namespaceDeclarations; static methodinfo_t _XML_setNamespace; static methodinfo_t _XML_name; static methodinfo_t _XML_setChildren; static methodinfo_t _XML_attribute; static methodinfo_t _XML_normalize; static methodinfo_t _XML_removeNamespace; static methodinfo_t _XML_prependChild; static methodinfo_t _XML_toXMLString; static methodinfo_t _XML_text; static methodinfo_t _XML_nodeKind; static methodinfo_t _XML_copy; static methodinfo_t _XML_toString; static methodinfo_t _XML_childIndex; static methodinfo_t _XML_setName; static methodinfo_t _XML_setLocalName; static methodinfo_t _XML_namespace; static methodinfo_t _XML_insertChildBefore; static methodinfo_t _XML_addNamespace; static methodinfo_t _XML_propertyIsEnumerable; static methodinfo_t _XML_comments; static methodinfo_t _XML_attributes; static methodinfo_t _XML_descendants; static methodinfo_t _XML_replace; static methodinfo_t _XML_setNotification; static methodinfo_t _XML_children; static methodinfo_t _XML_contains; static methodinfo_t _XML_hasSimpleContent; static methodinfo_t _XML_elements; static methodinfo_t _XML_hasComplexContent; static methodinfo_t _XML_insertChildAfter; static methodinfo_t _XML_parent; static methodinfo_t _XML_length; static methodinfo_t _XML_processingInstructions; static methodinfo_t _XML_child; static methodinfo_t _XML_appendChild; static methodinfo_t _XML_valueOf; static methodinfo_t _XML_localName; static methodinfo_t _XML_notification; static methodinfo_t _XML_inScopeNamespaces; static methodinfo_t _XML_hasOwnProperty; static methodinfo_t _XML_namespaceDeclarations; static methodinfo_t _XML_setNamespace; static methodinfo_t _XML_name; static methodinfo_t _XML_setChildren; static methodinfo_t _XML_attribute; static classinfo_t flash_net_NetStreamInfo; static varinfo_t flash_net_NetStreamInfo_maxBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_dataBufferByteLength; static varinfo_t flash_net_NetStreamInfo_videoByteCount; static varinfo_t flash_net_NetStreamInfo_videoBufferLength; static varinfo_t flash_net_NetStreamInfo_audioBufferByteLength; static varinfo_t flash_net_NetStreamInfo_dataBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_SRTT; static varinfo_t flash_net_NetStreamInfo_droppedFrames; static varinfo_t flash_net_NetStreamInfo_audioByteCount; static varinfo_t flash_net_NetStreamInfo_audioBufferLength; static varinfo_t flash_net_NetStreamInfo_byteCount; static methodinfo_t flash_net_NetStreamInfo_toString; static varinfo_t flash_net_NetStreamInfo_dataByteCount; static varinfo_t flash_net_NetStreamInfo_videoBufferByteLength; static varinfo_t flash_net_NetStreamInfo_dataBufferLength; static varinfo_t flash_net_NetStreamInfo_audioLossRate; static varinfo_t flash_net_NetStreamInfo_videoBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_currentBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_audioBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_playbackBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_maxBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_dataBufferByteLength; static varinfo_t flash_net_NetStreamInfo_videoByteCount; static varinfo_t flash_net_NetStreamInfo_videoBufferLength; static varinfo_t flash_net_NetStreamInfo_audioBufferByteLength; static varinfo_t flash_net_NetStreamInfo_dataBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_SRTT; static varinfo_t flash_net_NetStreamInfo_droppedFrames; static varinfo_t flash_net_NetStreamInfo_audioByteCount; static varinfo_t flash_net_NetStreamInfo_audioBufferLength; static varinfo_t flash_net_NetStreamInfo_byteCount; static methodinfo_t flash_net_NetStreamInfo_toString; static varinfo_t flash_net_NetStreamInfo_dataByteCount; static varinfo_t flash_net_NetStreamInfo_videoBufferByteLength; static varinfo_t flash_net_NetStreamInfo_dataBufferLength; static varinfo_t flash_net_NetStreamInfo_audioLossRate; static varinfo_t flash_net_NetStreamInfo_videoBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_currentBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_audioBytesPerSecond; static varinfo_t flash_net_NetStreamInfo_playbackBytesPerSecond; static classinfo_t flash_display_Stage; static methodinfo_t flash_display_Stage_setChildIndex; static varinfo_t flash_display_Stage_stageFocusRect; static varinfo_t flash_display_Stage_frameRate; static methodinfo_t flash_display_Stage_invalidate; static varinfo_t flash_display_Stage_textSnapshot; static varinfo_t flash_display_Stage_quality; static methodinfo_t flash_display_Stage_willTrigger; static methodinfo_t flash_display_Stage_dispatchEvent; static methodinfo_t flash_display_Stage_isFocusInaccessible; static methodinfo_t flash_display_Stage_removeChildAt; static varinfo_t flash_display_Stage_fullScreenWidth; static methodinfo_t flash_display_Stage_addChildAt; static varinfo_t flash_display_Stage_height; static varinfo_t flash_display_Stage_fullScreenSourceRect; static varinfo_t flash_display_Stage_width; static methodinfo_t flash_display_Stage_addChild; static varinfo_t flash_display_Stage_numChildren; static varinfo_t flash_display_Stage_mouseChildren; static methodinfo_t flash_display_Stage_swapChildrenAt; static varinfo_t flash_display_Stage_showDefaultContextMenu; static methodinfo_t flash_display_Stage_addEventListener; static varinfo_t flash_display_Stage_stageHeight; static varinfo_t flash_display_Stage_fullScreenHeight; static varinfo_t flash_display_Stage_align; static methodinfo_t flash_display_Stage_hasEventListener; static varinfo_t flash_display_Stage_displayState; static varinfo_t flash_display_Stage_scaleMode; static varinfo_t flash_display_Stage_tabChildren; static varinfo_t flash_display_Stage_focus; static varinfo_t flash_display_Stage_colorCorrection; static varinfo_t flash_display_Stage_colorCorrectionSupport; static varinfo_t flash_display_Stage_stageWidth; static methodinfo_t flash_display_Stage_setChildIndex; static varinfo_t flash_display_Stage_stageFocusRect; static varinfo_t flash_display_Stage_frameRate; static methodinfo_t flash_display_Stage_invalidate; static varinfo_t flash_display_Stage_textSnapshot; static varinfo_t flash_display_Stage_quality; static methodinfo_t flash_display_Stage_willTrigger; static methodinfo_t flash_display_Stage_dispatchEvent; static methodinfo_t flash_display_Stage_isFocusInaccessible; static methodinfo_t flash_display_Stage_removeChildAt; static varinfo_t flash_display_Stage_fullScreenWidth; static methodinfo_t flash_display_Stage_addChildAt; static varinfo_t flash_display_Stage_height; static varinfo_t flash_display_Stage_fullScreenSourceRect; static varinfo_t flash_display_Stage_width; static methodinfo_t flash_display_Stage_addChild; static varinfo_t flash_display_Stage_numChildren; static varinfo_t flash_display_Stage_mouseChildren; static methodinfo_t flash_display_Stage_swapChildrenAt; static varinfo_t flash_display_Stage_showDefaultContextMenu; static methodinfo_t flash_display_Stage_addEventListener; static varinfo_t flash_display_Stage_stageHeight; static varinfo_t flash_display_Stage_fullScreenHeight; static varinfo_t flash_display_Stage_align; static methodinfo_t flash_display_Stage_hasEventListener; static varinfo_t flash_display_Stage_displayState; static varinfo_t flash_display_Stage_scaleMode; static varinfo_t flash_display_Stage_tabChildren; static varinfo_t flash_display_Stage_focus; static varinfo_t flash_display_Stage_colorCorrection; static varinfo_t flash_display_Stage_colorCorrectionSupport; static varinfo_t flash_display_Stage_stageWidth; static classinfo_t flash_ui_ContextMenuItem; static varinfo_t flash_ui_ContextMenuItem_separatorBefore; static varinfo_t flash_ui_ContextMenuItem_enabled; static varinfo_t flash_ui_ContextMenuItem_caption; static methodinfo_t flash_ui_ContextMenuItem_clone; static varinfo_t flash_ui_ContextMenuItem_visible; static varinfo_t flash_ui_ContextMenuItem_separatorBefore; static varinfo_t flash_ui_ContextMenuItem_enabled; static varinfo_t flash_ui_ContextMenuItem_caption; static methodinfo_t flash_ui_ContextMenuItem_clone; static varinfo_t flash_ui_ContextMenuItem_visible; static classinfo_t flash_trace_Trace; static classinfo_t flash_events_TimerEvent; static methodinfo_t flash_events_TimerEvent_toString; static methodinfo_t flash_events_TimerEvent_clone; static methodinfo_t flash_events_TimerEvent_updateAfterEvent; static methodinfo_t flash_events_TimerEvent_toString; static methodinfo_t flash_events_TimerEvent_clone; static methodinfo_t flash_events_TimerEvent_updateAfterEvent; static classinfo_t flash_events_SampleDataEvent; static methodinfo_t flash_events_SampleDataEvent_toString; static varinfo_t flash_events_SampleDataEvent_position; static methodinfo_t flash_events_SampleDataEvent_clone; static varinfo_t flash_events_SampleDataEvent_data; static methodinfo_t flash_events_SampleDataEvent_toString; static varinfo_t flash_events_SampleDataEvent_position; static methodinfo_t flash_events_SampleDataEvent_clone; static varinfo_t flash_events_SampleDataEvent_data; static classinfo_t flash_display_ShaderPrecision; static classinfo_t flash_net_FileReference; static varinfo_t flash_net_FileReference_type; static methodinfo_t flash_net_FileReference_browse; static varinfo_t flash_net_FileReference_creationDate; static methodinfo_t flash_net_FileReference_upload; static methodinfo_t flash_net_FileReference_download; static methodinfo_t flash_net_FileReference_save; static methodinfo_t flash_net_FileReference_cancel; static varinfo_t flash_net_FileReference_creator; static varinfo_t flash_net_FileReference_data; static varinfo_t flash_net_FileReference_size; static varinfo_t flash_net_FileReference_name; static methodinfo_t flash_net_FileReference_load; static varinfo_t flash_net_FileReference_modificationDate; static varinfo_t flash_net_FileReference_type; static methodinfo_t flash_net_FileReference_browse; static varinfo_t flash_net_FileReference_creationDate; static methodinfo_t flash_net_FileReference_upload; static methodinfo_t flash_net_FileReference_download; static methodinfo_t flash_net_FileReference_save; static methodinfo_t flash_net_FileReference_cancel; static varinfo_t flash_net_FileReference_creator; static varinfo_t flash_net_FileReference_data; static varinfo_t flash_net_FileReference_size; static varinfo_t flash_net_FileReference_name; static methodinfo_t flash_net_FileReference_load; static varinfo_t flash_net_FileReference_modificationDate; static classinfo_t _DefinitionError; static classinfo_t flash_events_EventDispatcher; static methodinfo_t flash_events_EventDispatcher_willTrigger; static methodinfo_t flash_events_EventDispatcher_toString; static methodinfo_t flash_events_EventDispatcher_removeEventListener; static methodinfo_t flash_events_EventDispatcher_hasEventListener; static methodinfo_t flash_events_EventDispatcher_addEventListener; static methodinfo_t flash_events_EventDispatcher_dispatchEvent; static methodinfo_t flash_events_EventDispatcher_willTrigger; static methodinfo_t flash_events_EventDispatcher_toString; static methodinfo_t flash_events_EventDispatcher_removeEventListener; static methodinfo_t flash_events_EventDispatcher_hasEventListener; static methodinfo_t flash_events_EventDispatcher_addEventListener; static methodinfo_t flash_events_EventDispatcher_dispatchEvent; static classinfo_t flash_net_SharedObjectFlushStatus; static classinfo_t flash_text_TextLineMetrics; static varinfo_t flash_text_TextLineMetrics_descent; static varinfo_t flash_text_TextLineMetrics_width; static varinfo_t flash_text_TextLineMetrics_ascent; static varinfo_t flash_text_TextLineMetrics_leading; static varinfo_t flash_text_TextLineMetrics_height; static varinfo_t flash_text_TextLineMetrics_x; static varinfo_t flash_text_TextLineMetrics_descent; static varinfo_t flash_text_TextLineMetrics_width; static varinfo_t flash_text_TextLineMetrics_ascent; static varinfo_t flash_text_TextLineMetrics_leading; static varinfo_t flash_text_TextLineMetrics_height; static varinfo_t flash_text_TextLineMetrics_x; static classinfo_t flash_text_AntiAliasType; static classinfo_t flash_system_SecurityDomain; static classinfo_t flash_text_Font; static methodinfo_t flash_text_Font_hasGlyphs; static varinfo_t flash_text_Font_fontName; static varinfo_t flash_text_Font_fontStyle; static varinfo_t flash_text_Font_fontType; static methodinfo_t flash_text_Font_hasGlyphs; static varinfo_t flash_text_Font_fontName; static varinfo_t flash_text_Font_fontStyle; static varinfo_t flash_text_Font_fontType; static classinfo_t _RegExp; static varinfo_t _RegExp_source; static methodinfo_t _RegExp_test; static varinfo_t _RegExp_global; static methodinfo_t _RegExp_exec; static varinfo_t _RegExp_ignoreCase; static varinfo_t _RegExp_dotall; static varinfo_t _RegExp_lastIndex; static varinfo_t _RegExp_extended; static varinfo_t _RegExp_multiline; static varinfo_t _RegExp_source; static methodinfo_t _RegExp_test; static varinfo_t _RegExp_global; static methodinfo_t _RegExp_exec; static varinfo_t _RegExp_ignoreCase; static varinfo_t _RegExp_dotall; static varinfo_t _RegExp_lastIndex; static varinfo_t _RegExp_extended; static varinfo_t _RegExp_multiline; static classinfo_t flash_accessibility_AccessibilityProperties; static varinfo_t flash_accessibility_AccessibilityProperties_forceSimple; static varinfo_t flash_accessibility_AccessibilityProperties_noAutoLabeling; static varinfo_t flash_accessibility_AccessibilityProperties_description; static varinfo_t flash_accessibility_AccessibilityProperties_name; static varinfo_t flash_accessibility_AccessibilityProperties_shortcut; static varinfo_t flash_accessibility_AccessibilityProperties_silent; static varinfo_t flash_accessibility_AccessibilityProperties_forceSimple; static varinfo_t flash_accessibility_AccessibilityProperties_noAutoLabeling; static varinfo_t flash_accessibility_AccessibilityProperties_description; static varinfo_t flash_accessibility_AccessibilityProperties_name; static varinfo_t flash_accessibility_AccessibilityProperties_shortcut; static varinfo_t flash_accessibility_AccessibilityProperties_silent; static classinfo_t flash_ui_ContextMenu; static methodinfo_t flash_ui_ContextMenu_hideBuiltInItems; static varinfo_t flash_ui_ContextMenu_clipboardItems; static varinfo_t flash_ui_ContextMenu_builtInItems; static varinfo_t flash_ui_ContextMenu_customItems; static methodinfo_t flash_ui_ContextMenu_clone; static varinfo_t flash_ui_ContextMenu_link; static varinfo_t flash_ui_ContextMenu_clipboardMenu; static methodinfo_t flash_ui_ContextMenu_hideBuiltInItems; static varinfo_t flash_ui_ContextMenu_clipboardItems; static varinfo_t flash_ui_ContextMenu_builtInItems; static varinfo_t flash_ui_ContextMenu_customItems; static methodinfo_t flash_ui_ContextMenu_clone; static varinfo_t flash_ui_ContextMenu_link; static varinfo_t flash_ui_ContextMenu_clipboardMenu; static classinfo_t flash_text_TextFieldAutoSize; static classinfo_t _Math; static classinfo_t flash_display_ColorCorrectionSupport; static classinfo_t flash_errors_IOError; static methodinfo_t _trace; static classinfo_t flash_ui_ContextMenuBuiltInItems; static varinfo_t flash_ui_ContextMenuBuiltInItems_zoom; static varinfo_t flash_ui_ContextMenuBuiltInItems_save; static varinfo_t flash_ui_ContextMenuBuiltInItems_loop; static varinfo_t flash_ui_ContextMenuBuiltInItems_print; static varinfo_t flash_ui_ContextMenuBuiltInItems_forwardAndBack; static varinfo_t flash_ui_ContextMenuBuiltInItems_rewind; static methodinfo_t flash_ui_ContextMenuBuiltInItems_clone; static varinfo_t flash_ui_ContextMenuBuiltInItems_quality; static varinfo_t flash_ui_ContextMenuBuiltInItems_play; static varinfo_t flash_ui_ContextMenuBuiltInItems_zoom; static varinfo_t flash_ui_ContextMenuBuiltInItems_save; static varinfo_t flash_ui_ContextMenuBuiltInItems_loop; static varinfo_t flash_ui_ContextMenuBuiltInItems_print; static varinfo_t flash_ui_ContextMenuBuiltInItems_forwardAndBack; static varinfo_t flash_ui_ContextMenuBuiltInItems_rewind; static methodinfo_t flash_ui_ContextMenuBuiltInItems_clone; static varinfo_t flash_ui_ContextMenuBuiltInItems_quality; static varinfo_t flash_ui_ContextMenuBuiltInItems_play; static classinfo_t flash_net_FileReferenceList; static varinfo_t flash_net_FileReferenceList_fileList; static methodinfo_t flash_net_FileReferenceList_browse; static varinfo_t flash_net_FileReferenceList_fileList; static methodinfo_t flash_net_FileReferenceList_browse; static classinfo_t flash_display_TriangleCulling; static classinfo_t flash_media_SoundMixer; static classinfo_t adobe_utils_XMLUI; static methodinfo_t _escape; static methodinfo_t flash_utils_setInterval; static classinfo_t flash_events_StatusEvent; static methodinfo_t flash_events_StatusEvent_toString; static varinfo_t flash_events_StatusEvent_code; static methodinfo_t flash_events_StatusEvent_clone; static varinfo_t flash_events_StatusEvent_level; static methodinfo_t flash_events_StatusEvent_toString; static varinfo_t flash_events_StatusEvent_code; static methodinfo_t flash_events_StatusEvent_clone; static varinfo_t flash_events_StatusEvent_level; static classinfo_t flash_display_IGraphicsPath; static classinfo_t flash_events_ShaderEvent; static varinfo_t flash_events_ShaderEvent_vector; static methodinfo_t flash_events_ShaderEvent_toString; static varinfo_t flash_events_ShaderEvent_bitmapData; static methodinfo_t flash_events_ShaderEvent_clone; static varinfo_t flash_events_ShaderEvent_byteArray; static varinfo_t flash_events_ShaderEvent_vector; static methodinfo_t flash_events_ShaderEvent_toString; static varinfo_t flash_events_ShaderEvent_bitmapData; static methodinfo_t flash_events_ShaderEvent_clone; static varinfo_t flash_events_ShaderEvent_byteArray; static classinfo_t flash_display_Shader; static varinfo_t flash_display_Shader_precisionHint; static varinfo_t flash_display_Shader_data; static varinfo_t flash_display_Shader_precisionHint; static varinfo_t flash_display_Shader_data; static classinfo_t flash_errors_StackOverflowError; static methodinfo_t flash_sampler_getInvocationCount; static classinfo_t flash_text_engine_Kerning; static classinfo_t flash_text_CSMSettings; static varinfo_t flash_text_CSMSettings_fontSize; static varinfo_t flash_text_CSMSettings_outsideCutoff; static varinfo_t flash_text_CSMSettings_insideCutoff; static varinfo_t flash_text_CSMSettings_fontSize; static varinfo_t flash_text_CSMSettings_outsideCutoff; static varinfo_t flash_text_CSMSettings_insideCutoff; static classinfo_t _RangeError; static classinfo_t _Number; static methodinfo_t _Number_valueOf; static methodinfo_t _Number_toString; static methodinfo_t _Number_toExponential; static methodinfo_t _Number_toFixed; static methodinfo_t _Number_toPrecision; static methodinfo_t _Number_valueOf; static methodinfo_t _Number_toString; static methodinfo_t _Number_toExponential; static methodinfo_t _Number_toFixed; static methodinfo_t _Number_toPrecision; static classinfo_t flash_display_Graphics; static methodinfo_t flash_display_Graphics_drawPath; static methodinfo_t flash_display_Graphics_drawEllipse; static methodinfo_t flash_display_Graphics_drawRoundRectComplex; static methodinfo_t flash_display_Graphics_moveTo; static methodinfo_t flash_display_Graphics_lineShaderStyle; static methodinfo_t flash_display_Graphics_beginFill; static methodinfo_t flash_display_Graphics_beginGradientFill; static methodinfo_t flash_display_Graphics_drawGraphicsData; static methodinfo_t flash_display_Graphics_lineGradientStyle; static methodinfo_t flash_display_Graphics_drawRoundRect; static methodinfo_t flash_display_Graphics_beginBitmapFill; static methodinfo_t flash_display_Graphics_lineStyle; static methodinfo_t flash_display_Graphics_lineTo; static methodinfo_t flash_display_Graphics_endFill; static methodinfo_t flash_display_Graphics_copyFrom; static methodinfo_t flash_display_Graphics_lineBitmapStyle; static methodinfo_t flash_display_Graphics_curveTo; static methodinfo_t flash_display_Graphics_clear; static methodinfo_t flash_display_Graphics_drawCircle; static methodinfo_t flash_display_Graphics_beginShaderFill; static methodinfo_t flash_display_Graphics_drawTriangles; static methodinfo_t flash_display_Graphics_drawRect; static methodinfo_t flash_display_Graphics_drawPath; static methodinfo_t flash_display_Graphics_drawEllipse; static methodinfo_t flash_display_Graphics_drawRoundRectComplex; static methodinfo_t flash_display_Graphics_moveTo; static methodinfo_t flash_display_Graphics_lineShaderStyle; static methodinfo_t flash_display_Graphics_beginFill; static methodinfo_t flash_display_Graphics_beginGradientFill; static methodinfo_t flash_display_Graphics_drawGraphicsData; static methodinfo_t flash_display_Graphics_lineGradientStyle; static methodinfo_t flash_display_Graphics_drawRoundRect; static methodinfo_t flash_display_Graphics_beginBitmapFill; static methodinfo_t flash_display_Graphics_lineStyle; static methodinfo_t flash_display_Graphics_lineTo; static methodinfo_t flash_display_Graphics_endFill; static methodinfo_t flash_display_Graphics_copyFrom; static methodinfo_t flash_display_Graphics_lineBitmapStyle; static methodinfo_t flash_display_Graphics_curveTo; static methodinfo_t flash_display_Graphics_clear; static methodinfo_t flash_display_Graphics_drawCircle; static methodinfo_t flash_display_Graphics_beginShaderFill; static methodinfo_t flash_display_Graphics_drawTriangles; static methodinfo_t flash_display_Graphics_drawRect; static classinfo_t _SyntaxError; static classinfo_t flash_sampler_NewObjectSample; static varinfo_t flash_sampler_NewObjectSample_type; static varinfo_t flash_sampler_NewObjectSample_object; static varinfo_t flash_sampler_NewObjectSample_id; static varinfo_t flash_sampler_NewObjectSample_type; static varinfo_t flash_sampler_NewObjectSample_object; static varinfo_t flash_sampler_NewObjectSample_id; static classinfo_t flash_net_FileFilter; static varinfo_t flash_net_FileFilter_extension; static varinfo_t flash_net_FileFilter_description; static varinfo_t flash_net_FileFilter_macType; static varinfo_t flash_net_FileFilter_extension; static varinfo_t flash_net_FileFilter_description; static varinfo_t flash_net_FileFilter_macType; static classinfo_t flash_display_BitmapDataChannel; static methodinfo_t flash_utils_clearInterval; static classinfo_t flash_text_engine_ContentElement; static varinfo_t flash_text_engine_ContentElement_eventMirror; static varinfo_t flash_text_engine_ContentElement_groupElement; static varinfo_t flash_text_engine_ContentElement_textRotation; static varinfo_t flash_text_engine_ContentElement_text; static varinfo_t flash_text_engine_ContentElement_userData; static varinfo_t flash_text_engine_ContentElement_elementFormat; static varinfo_t flash_text_engine_ContentElement_textBlock; static varinfo_t flash_text_engine_ContentElement_rawText; static varinfo_t flash_text_engine_ContentElement_textBlockBeginIndex; static varinfo_t flash_text_engine_ContentElement_eventMirror; static varinfo_t flash_text_engine_ContentElement_groupElement; static varinfo_t flash_text_engine_ContentElement_textRotation; static varinfo_t flash_text_engine_ContentElement_text; static varinfo_t flash_text_engine_ContentElement_userData; static varinfo_t flash_text_engine_ContentElement_elementFormat; static varinfo_t flash_text_engine_ContentElement_textBlock; static varinfo_t flash_text_engine_ContentElement_rawText; static varinfo_t flash_text_engine_ContentElement_textBlockBeginIndex; static classinfo_t flash_utils_Endian; static methodinfo_t flash_net_navigateToURL; static classinfo_t flash_events_ProgressEvent; static varinfo_t flash_events_ProgressEvent_bytesLoaded; static methodinfo_t flash_events_ProgressEvent_toString; static varinfo_t flash_events_ProgressEvent_bytesTotal; static methodinfo_t flash_events_ProgressEvent_clone; static varinfo_t flash_events_ProgressEvent_bytesLoaded; static methodinfo_t flash_events_ProgressEvent_toString; static varinfo_t flash_events_ProgressEvent_bytesTotal; static methodinfo_t flash_events_ProgressEvent_clone; static classinfo_t flash_media_Sound; static methodinfo_t flash_media_Sound_extract; static varinfo_t flash_media_Sound_bytesLoaded; static varinfo_t flash_media_Sound_id3; static methodinfo_t flash_media_Sound_play; static varinfo_t flash_media_Sound_url; static varinfo_t flash_media_Sound_isBuffering; static methodinfo_t flash_media_Sound_load; static varinfo_t flash_media_Sound_bytesTotal; static varinfo_t flash_media_Sound_length; static methodinfo_t flash_media_Sound_close; static methodinfo_t flash_media_Sound_extract; static varinfo_t flash_media_Sound_bytesLoaded; static varinfo_t flash_media_Sound_id3; static methodinfo_t flash_media_Sound_play; static varinfo_t flash_media_Sound_url; static varinfo_t flash_media_Sound_isBuffering; static methodinfo_t flash_media_Sound_load; static varinfo_t flash_media_Sound_bytesTotal; static varinfo_t flash_media_Sound_length; static methodinfo_t flash_media_Sound_close; static classinfo_t flash_text_TextExtent; static varinfo_t flash_text_TextExtent_descent; static varinfo_t flash_text_TextExtent_width; static varinfo_t flash_text_TextExtent_ascent; static varinfo_t flash_text_TextExtent_textFieldHeight; static varinfo_t flash_text_TextExtent_textFieldWidth; static varinfo_t flash_text_TextExtent_height; static varinfo_t flash_text_TextExtent_descent; static varinfo_t flash_text_TextExtent_width; static varinfo_t flash_text_TextExtent_ascent; static varinfo_t flash_text_TextExtent_textFieldHeight; static varinfo_t flash_text_TextExtent_textFieldWidth; static varinfo_t flash_text_TextExtent_height; static classinfo_t flash_text_FontStyle; static classinfo_t flash_text_engine_TextLineMirrorRegion; static varinfo_t flash_text_engine_TextLineMirrorRegion_mirror; static varinfo_t flash_text_engine_TextLineMirrorRegion_previousRegion; static varinfo_t flash_text_engine_TextLineMirrorRegion_bounds; static varinfo_t flash_text_engine_TextLineMirrorRegion_nextRegion; static varinfo_t flash_text_engine_TextLineMirrorRegion_element; static varinfo_t flash_text_engine_TextLineMirrorRegion_textLine; static varinfo_t flash_text_engine_TextLineMirrorRegion_mirror; static varinfo_t flash_text_engine_TextLineMirrorRegion_previousRegion; static varinfo_t flash_text_engine_TextLineMirrorRegion_bounds; static varinfo_t flash_text_engine_TextLineMirrorRegion_nextRegion; static varinfo_t flash_text_engine_TextLineMirrorRegion_element; static varinfo_t flash_text_engine_TextLineMirrorRegion_textLine; static classinfo_t flash_geom_Vector3D; static methodinfo_t flash_geom_Vector3D_subtract; static methodinfo_t flash_geom_Vector3D_scaleBy; static methodinfo_t flash_geom_Vector3D_decrementBy; static methodinfo_t flash_geom_Vector3D_equals; static methodinfo_t flash_geom_Vector3D_normalize; static methodinfo_t flash_geom_Vector3D_dotProduct; static methodinfo_t flash_geom_Vector3D_negate; static methodinfo_t flash_geom_Vector3D_toString; static varinfo_t flash_geom_Vector3D_lengthSquared; static varinfo_t flash_geom_Vector3D_x; static methodinfo_t flash_geom_Vector3D_incrementBy; static varinfo_t flash_geom_Vector3D_w; static varinfo_t flash_geom_Vector3D_z; static methodinfo_t flash_geom_Vector3D_add; static methodinfo_t flash_geom_Vector3D_project; static methodinfo_t flash_geom_Vector3D_crossProduct; static methodinfo_t flash_geom_Vector3D_nearEquals; static methodinfo_t flash_geom_Vector3D_clone; static varinfo_t flash_geom_Vector3D_y; static varinfo_t flash_geom_Vector3D_length; static methodinfo_t flash_geom_Vector3D_subtract; static methodinfo_t flash_geom_Vector3D_scaleBy; static methodinfo_t flash_geom_Vector3D_decrementBy; static methodinfo_t flash_geom_Vector3D_equals; static methodinfo_t flash_geom_Vector3D_normalize; static methodinfo_t flash_geom_Vector3D_dotProduct; static methodinfo_t flash_geom_Vector3D_negate; static methodinfo_t flash_geom_Vector3D_toString; static varinfo_t flash_geom_Vector3D_lengthSquared; static varinfo_t flash_geom_Vector3D_x; static methodinfo_t flash_geom_Vector3D_incrementBy; static varinfo_t flash_geom_Vector3D_w; static varinfo_t flash_geom_Vector3D_z; static methodinfo_t flash_geom_Vector3D_add; static methodinfo_t flash_geom_Vector3D_project; static methodinfo_t flash_geom_Vector3D_crossProduct; static methodinfo_t flash_geom_Vector3D_nearEquals; static methodinfo_t flash_geom_Vector3D_clone; static varinfo_t flash_geom_Vector3D_y; static varinfo_t flash_geom_Vector3D_length; static classinfo_t flash_desktop_ClipboardTransferMode; static classinfo_t flash_display_SpreadMethod; static classinfo_t flash_system_SecurityPanel; static classinfo_t flash_events_HTTPStatusEvent; static methodinfo_t flash_events_HTTPStatusEvent_toString; static methodinfo_t flash_events_HTTPStatusEvent_clone; static varinfo_t flash_events_HTTPStatusEvent_status; static methodinfo_t flash_events_HTTPStatusEvent_toString; static methodinfo_t flash_events_HTTPStatusEvent_clone; static varinfo_t flash_events_HTTPStatusEvent_status; static classinfo_t flash_net_NetStreamPlayOptions; static varinfo_t flash_net_NetStreamPlayOptions_len; static varinfo_t flash_net_NetStreamPlayOptions_streamName; static varinfo_t flash_net_NetStreamPlayOptions_start; static varinfo_t flash_net_NetStreamPlayOptions_oldStreamName; static varinfo_t flash_net_NetStreamPlayOptions_transition; static varinfo_t flash_net_NetStreamPlayOptions_len; static varinfo_t flash_net_NetStreamPlayOptions_streamName; static varinfo_t flash_net_NetStreamPlayOptions_start; static varinfo_t flash_net_NetStreamPlayOptions_oldStreamName; static varinfo_t flash_net_NetStreamPlayOptions_transition; static classinfo_t flash_net_Responder; static classinfo_t flash_net_XMLSocket; static methodinfo_t flash_net_XMLSocket_close; static methodinfo_t flash_net_XMLSocket_connect; static methodinfo_t flash_net_XMLSocket_send; static varinfo_t flash_net_XMLSocket_connected; static varinfo_t flash_net_XMLSocket_timeout; static methodinfo_t flash_net_XMLSocket_close; static methodinfo_t flash_net_XMLSocket_connect; static methodinfo_t flash_net_XMLSocket_send; static varinfo_t flash_net_XMLSocket_connected; static varinfo_t flash_net_XMLSocket_timeout; static classinfo_t flash_filters_ConvolutionFilter; static varinfo_t flash_filters_ConvolutionFilter_alpha; static varinfo_t flash_filters_ConvolutionFilter_matrixX; static varinfo_t flash_filters_ConvolutionFilter_matrix; static varinfo_t flash_filters_ConvolutionFilter_bias; static varinfo_t flash_filters_ConvolutionFilter_color; static varinfo_t flash_filters_ConvolutionFilter_preserveAlpha; static varinfo_t flash_filters_ConvolutionFilter_divisor; static methodinfo_t flash_filters_ConvolutionFilter_clone; static varinfo_t flash_filters_ConvolutionFilter_clamp; static varinfo_t flash_filters_ConvolutionFilter_matrixY; static varinfo_t flash_filters_ConvolutionFilter_alpha; static varinfo_t flash_filters_ConvolutionFilter_matrixX; static varinfo_t flash_filters_ConvolutionFilter_matrix; static varinfo_t flash_filters_ConvolutionFilter_bias; static varinfo_t flash_filters_ConvolutionFilter_color; static varinfo_t flash_filters_ConvolutionFilter_preserveAlpha; static varinfo_t flash_filters_ConvolutionFilter_divisor; static methodinfo_t flash_filters_ConvolutionFilter_clone; static varinfo_t flash_filters_ConvolutionFilter_clamp; static varinfo_t flash_filters_ConvolutionFilter_matrixY; static classinfo_t flash_text_engine_ElementFormat; static methodinfo_t flash_text_engine_ElementFormat_getFontMetrics; static varinfo_t flash_text_engine_ElementFormat_digitCase; static varinfo_t flash_text_engine_ElementFormat_breakOpportunity; static varinfo_t flash_text_engine_ElementFormat_ligatureLevel; static varinfo_t flash_text_engine_ElementFormat_dominantBaseline; static varinfo_t flash_text_engine_ElementFormat_alignmentBaseline; static varinfo_t flash_text_engine_ElementFormat_color; static varinfo_t flash_text_engine_ElementFormat_digitWidth; static varinfo_t flash_text_engine_ElementFormat_kerning; static varinfo_t flash_text_engine_ElementFormat_fontSize; static varinfo_t flash_text_engine_ElementFormat_fontDescription; static varinfo_t flash_text_engine_ElementFormat_baselineShift; static varinfo_t flash_text_engine_ElementFormat_locale; static varinfo_t flash_text_engine_ElementFormat_typographicCase; static varinfo_t flash_text_engine_ElementFormat_trackingLeft; static varinfo_t flash_text_engine_ElementFormat_locked; static methodinfo_t flash_text_engine_ElementFormat_clone; static varinfo_t flash_text_engine_ElementFormat_alpha; static varinfo_t flash_text_engine_ElementFormat_textRotation; static varinfo_t flash_text_engine_ElementFormat_trackingRight; static methodinfo_t flash_text_engine_ElementFormat_getFontMetrics; static varinfo_t flash_text_engine_ElementFormat_digitCase; static varinfo_t flash_text_engine_ElementFormat_breakOpportunity; static varinfo_t flash_text_engine_ElementFormat_ligatureLevel; static varinfo_t flash_text_engine_ElementFormat_dominantBaseline; static varinfo_t flash_text_engine_ElementFormat_alignmentBaseline; static varinfo_t flash_text_engine_ElementFormat_color; static varinfo_t flash_text_engine_ElementFormat_digitWidth; static varinfo_t flash_text_engine_ElementFormat_kerning; static varinfo_t flash_text_engine_ElementFormat_fontSize; static varinfo_t flash_text_engine_ElementFormat_fontDescription; static varinfo_t flash_text_engine_ElementFormat_baselineShift; static varinfo_t flash_text_engine_ElementFormat_locale; static varinfo_t flash_text_engine_ElementFormat_typographicCase; static varinfo_t flash_text_engine_ElementFormat_trackingLeft; static varinfo_t flash_text_engine_ElementFormat_locked; static methodinfo_t flash_text_engine_ElementFormat_clone; static varinfo_t flash_text_engine_ElementFormat_alpha; static varinfo_t flash_text_engine_ElementFormat_textRotation; static varinfo_t flash_text_engine_ElementFormat_trackingRight; static classinfo_t flash_display_GraphicsGradientFill; static varinfo_t flash_display_GraphicsGradientFill_interpolationMethod; static varinfo_t flash_display_GraphicsGradientFill_focalPointRatio; static varinfo_t flash_display_GraphicsGradientFill_colors; static varinfo_t flash_display_GraphicsGradientFill_matrix; static varinfo_t flash_display_GraphicsGradientFill_type; static varinfo_t flash_display_GraphicsGradientFill_ratios; static varinfo_t flash_display_GraphicsGradientFill_spreadMethod; static varinfo_t flash_display_GraphicsGradientFill_alphas; static varinfo_t flash_display_GraphicsGradientFill_interpolationMethod; static varinfo_t flash_display_GraphicsGradientFill_focalPointRatio; static varinfo_t flash_display_GraphicsGradientFill_colors; static varinfo_t flash_display_GraphicsGradientFill_matrix; static varinfo_t flash_display_GraphicsGradientFill_type; static varinfo_t flash_display_GraphicsGradientFill_ratios; static varinfo_t flash_display_GraphicsGradientFill_spreadMethod; static varinfo_t flash_display_GraphicsGradientFill_alphas; static classinfo_t flash_display_FrameLabel; static varinfo_t flash_display_FrameLabel_frame; static varinfo_t flash_display_FrameLabel_name; static varinfo_t flash_display_FrameLabel_frame; static varinfo_t flash_display_FrameLabel_name; static classinfo_t flash_media_SoundTransform; static varinfo_t flash_media_SoundTransform_pan; static varinfo_t flash_media_SoundTransform_leftToRight; static varinfo_t flash_media_SoundTransform_rightToLeft; static varinfo_t flash_media_SoundTransform_volume; static varinfo_t flash_media_SoundTransform_leftToLeft; static varinfo_t flash_media_SoundTransform_rightToRight; static varinfo_t flash_media_SoundTransform_pan; static varinfo_t flash_media_SoundTransform_leftToRight; static varinfo_t flash_media_SoundTransform_rightToLeft; static varinfo_t flash_media_SoundTransform_volume; static varinfo_t flash_media_SoundTransform_leftToLeft; static varinfo_t flash_media_SoundTransform_rightToRight; static varinfo_t _AS3; static classinfo_t flash_net_LocalConnection; static varinfo_t flash_net_LocalConnection_client; static methodinfo_t flash_net_LocalConnection_allowDomain; static methodinfo_t flash_net_LocalConnection_connect; static varinfo_t flash_net_LocalConnection_domain; static methodinfo_t flash_net_LocalConnection_allowInsecureDomain; static methodinfo_t flash_net_LocalConnection_send; static methodinfo_t flash_net_LocalConnection_close; static varinfo_t flash_net_LocalConnection_client; static methodinfo_t flash_net_LocalConnection_allowDomain; static methodinfo_t flash_net_LocalConnection_connect; static varinfo_t flash_net_LocalConnection_domain; static methodinfo_t flash_net_LocalConnection_allowInsecureDomain; static methodinfo_t flash_net_LocalConnection_send; static methodinfo_t flash_net_LocalConnection_close; static classinfo_t flash_display_ShaderParameterType; static classinfo_t flash_events_IMEEvent; static methodinfo_t flash_events_IMEEvent_toString; static methodinfo_t flash_events_IMEEvent_clone; static methodinfo_t flash_events_IMEEvent_toString; static methodinfo_t flash_events_IMEEvent_clone; static classinfo_t flash_text_TextFormatDisplay; static methodinfo_t flash_profiler_profile; static classinfo_t flash_display_AVM1Movie; static methodinfo_t flash_display_AVM1Movie_call; static methodinfo_t flash_display_AVM1Movie_addCallback; static methodinfo_t flash_display_AVM1Movie_call; static methodinfo_t flash_display_AVM1Movie_addCallback; static classinfo_t flash_events_ContextMenuEvent; static varinfo_t flash_events_ContextMenuEvent_mouseTarget; static varinfo_t flash_events_ContextMenuEvent_isMouseTargetInaccessible; static methodinfo_t flash_events_ContextMenuEvent_toString; static varinfo_t flash_events_ContextMenuEvent_contextMenuOwner; static methodinfo_t flash_events_ContextMenuEvent_clone; static varinfo_t flash_events_ContextMenuEvent_mouseTarget; static varinfo_t flash_events_ContextMenuEvent_isMouseTargetInaccessible; static methodinfo_t flash_events_ContextMenuEvent_toString; static varinfo_t flash_events_ContextMenuEvent_contextMenuOwner; static methodinfo_t flash_events_ContextMenuEvent_clone; static classinfo_t flash_events_EventPhase; static classinfo_t flash_display_JointStyle; static classinfo_t flash_utils_Dictionary; static classinfo_t flash_display_GraphicsPathCommand; static classinfo_t flash_filters_BevelFilter; static varinfo_t flash_filters_BevelFilter_type; static varinfo_t flash_filters_BevelFilter_highlightColor; static varinfo_t flash_filters_BevelFilter_knockout; static varinfo_t flash_filters_BevelFilter_distance; static varinfo_t flash_filters_BevelFilter_strength; static varinfo_t flash_filters_BevelFilter_highlightAlpha; static varinfo_t flash_filters_BevelFilter_blurY; static varinfo_t flash_filters_BevelFilter_shadowColor; static varinfo_t flash_filters_BevelFilter_angle; static varinfo_t flash_filters_BevelFilter_blurX; static varinfo_t flash_filters_BevelFilter_shadowAlpha; static varinfo_t flash_filters_BevelFilter_quality; static methodinfo_t flash_filters_BevelFilter_clone; static varinfo_t flash_filters_BevelFilter_type; static varinfo_t flash_filters_BevelFilter_highlightColor; static varinfo_t flash_filters_BevelFilter_knockout; static varinfo_t flash_filters_BevelFilter_distance; static varinfo_t flash_filters_BevelFilter_strength; static varinfo_t flash_filters_BevelFilter_highlightAlpha; static varinfo_t flash_filters_BevelFilter_blurY; static varinfo_t flash_filters_BevelFilter_shadowColor; static varinfo_t flash_filters_BevelFilter_angle; static varinfo_t flash_filters_BevelFilter_blurX; static varinfo_t flash_filters_BevelFilter_shadowAlpha; static varinfo_t flash_filters_BevelFilter_quality; static methodinfo_t flash_filters_BevelFilter_clone; static methodinfo_t flash_utils_getTimer; static classinfo_t flash_display_Loader; static varinfo_t flash_display_Loader_content; static methodinfo_t flash_display_Loader_unloadAndStop; static methodinfo_t flash_display_Loader_unload; static methodinfo_t flash_display_Loader_removeChildAt; static methodinfo_t flash_display_Loader_addChildAt; static varinfo_t flash_display_Loader_contentLoaderInfo; static methodinfo_t flash_display_Loader_loadBytes; static methodinfo_t flash_display_Loader_removeChild; static methodinfo_t flash_display_Loader_load; static methodinfo_t flash_display_Loader_addChild; static methodinfo_t flash_display_Loader_close; static methodinfo_t flash_display_Loader_setChildIndex; static varinfo_t flash_display_Loader_content; static methodinfo_t flash_display_Loader_unloadAndStop; static methodinfo_t flash_display_Loader_unload; static methodinfo_t flash_display_Loader_removeChildAt; static methodinfo_t flash_display_Loader_addChildAt; static varinfo_t flash_display_Loader_contentLoaderInfo; static methodinfo_t flash_display_Loader_loadBytes; static methodinfo_t flash_display_Loader_removeChild; static methodinfo_t flash_display_Loader_load; static methodinfo_t flash_display_Loader_addChild; static methodinfo_t flash_display_Loader_close; static methodinfo_t flash_display_Loader_setChildIndex; static classinfo_t flash_display_GraphicsBitmapFill; static varinfo_t flash_display_GraphicsBitmapFill_smooth; static varinfo_t flash_display_GraphicsBitmapFill_repeat; static varinfo_t flash_display_GraphicsBitmapFill_bitmapData; static varinfo_t flash_display_GraphicsBitmapFill_matrix; static varinfo_t flash_display_GraphicsBitmapFill_smooth; static varinfo_t flash_display_GraphicsBitmapFill_repeat; static varinfo_t flash_display_GraphicsBitmapFill_bitmapData; static varinfo_t flash_display_GraphicsBitmapFill_matrix; static varinfo_t _undefined; static classinfo_t flash_display_SimpleButton; static varinfo_t flash_display_SimpleButton_overState; static varinfo_t flash_display_SimpleButton_downState; static varinfo_t flash_display_SimpleButton_enabled; static varinfo_t flash_display_SimpleButton_trackAsMenu; static varinfo_t flash_display_SimpleButton_soundTransform; static varinfo_t flash_display_SimpleButton_useHandCursor; static varinfo_t flash_display_SimpleButton_upState; static varinfo_t flash_display_SimpleButton_hitTestState; static varinfo_t flash_display_SimpleButton_overState; static varinfo_t flash_display_SimpleButton_downState; static varinfo_t flash_display_SimpleButton_enabled; static varinfo_t flash_display_SimpleButton_trackAsMenu; static varinfo_t flash_display_SimpleButton_soundTransform; static varinfo_t flash_display_SimpleButton_useHandCursor; static varinfo_t flash_display_SimpleButton_upState; static varinfo_t flash_display_SimpleButton_hitTestState; static classinfo_t flash_text_engine_TabAlignment; static classinfo_t flash_text_engine_FontWeight; static methodinfo_t flash_utils_describeType; static classinfo_t flash_display_PixelSnapping; static classinfo_t flash_events_FocusEvent; static varinfo_t flash_events_FocusEvent_keyCode; static methodinfo_t flash_events_FocusEvent_toString; static varinfo_t flash_events_FocusEvent_isRelatedObjectInaccessible; static methodinfo_t flash_events_FocusEvent_clone; static varinfo_t flash_events_FocusEvent_shiftKey; static varinfo_t flash_events_FocusEvent_relatedObject; static varinfo_t flash_events_FocusEvent_keyCode; static methodinfo_t flash_events_FocusEvent_toString; static varinfo_t flash_events_FocusEvent_isRelatedObjectInaccessible; static methodinfo_t flash_events_FocusEvent_clone; static varinfo_t flash_events_FocusEvent_shiftKey; static varinfo_t flash_events_FocusEvent_relatedObject; static classinfo_t flash_errors_MemoryError; static classinfo_t flash_events_NetFilterEvent; static varinfo_t flash_events_NetFilterEvent_header; static methodinfo_t flash_events_NetFilterEvent_toString; static methodinfo_t flash_events_NetFilterEvent_clone; static varinfo_t flash_events_NetFilterEvent_data; static varinfo_t flash_events_NetFilterEvent_header; static methodinfo_t flash_events_NetFilterEvent_toString; static methodinfo_t flash_events_NetFilterEvent_clone; static varinfo_t flash_events_NetFilterEvent_data; static methodinfo_t _decodeURI; static methodinfo_t _encodeURI; static classinfo_t flash_text_engine_TextBaseline; static classinfo_t flash_external_ExternalInterface; static classinfo_t _EvalError; static classinfo_t flash_text_engine_DigitCase; static classinfo_t flash_text_TextFormatAlign; static classinfo_t flash_errors_ScriptTimeoutError; static classinfo_t _uint; static methodinfo_t _uint_valueOf; static methodinfo_t _uint_toString; static methodinfo_t _uint_toExponential; static methodinfo_t _uint_toFixed; static methodinfo_t _uint_toPrecision; static methodinfo_t _uint_valueOf; static methodinfo_t _uint_toString; static methodinfo_t _uint_toExponential; static methodinfo_t _uint_toFixed; static methodinfo_t _uint_toPrecision; static methodinfo_t flash_debugger_enterDebugger; static classinfo_t flash_geom_Orientation3D; static classinfo_t flash_text_engine_CFFHinting; static classinfo_t flash_text_FontType; static classinfo_t flash_filters_ShaderFilter; static varinfo_t flash_filters_ShaderFilter_bottomExtension; static varinfo_t flash_filters_ShaderFilter_shader; static varinfo_t flash_filters_ShaderFilter_rightExtension; static varinfo_t flash_filters_ShaderFilter_leftExtension; static varinfo_t flash_filters_ShaderFilter_topExtension; static varinfo_t flash_filters_ShaderFilter_bottomExtension; static varinfo_t flash_filters_ShaderFilter_shader; static varinfo_t flash_filters_ShaderFilter_rightExtension; static varinfo_t flash_filters_ShaderFilter_leftExtension; static varinfo_t flash_filters_ShaderFilter_topExtension; static classinfo_t flash_display_GraphicsPath; static methodinfo_t flash_display_GraphicsPath_wideMoveTo; static varinfo_t flash_display_GraphicsPath_winding; static methodinfo_t flash_display_GraphicsPath_moveTo; static methodinfo_t flash_display_GraphicsPath_wideLineTo; static varinfo_t flash_display_GraphicsPath_commands; static methodinfo_t flash_display_GraphicsPath_curveTo; static methodinfo_t flash_display_GraphicsPath_lineTo; static varinfo_t flash_display_GraphicsPath_data; static methodinfo_t flash_display_GraphicsPath_wideMoveTo; static varinfo_t flash_display_GraphicsPath_winding; static methodinfo_t flash_display_GraphicsPath_moveTo; static methodinfo_t flash_display_GraphicsPath_wideLineTo; static varinfo_t flash_display_GraphicsPath_commands; static methodinfo_t flash_display_GraphicsPath_curveTo; static methodinfo_t flash_display_GraphicsPath_lineTo; static varinfo_t flash_display_GraphicsPath_data; static classinfo_t flash_system_ApplicationDomain; static methodinfo_t flash_system_ApplicationDomain_hasDefinition; static methodinfo_t flash_system_ApplicationDomain_getDefinition; static varinfo_t flash_system_ApplicationDomain_parentDomain; static varinfo_t flash_system_ApplicationDomain_domainMemory; static methodinfo_t flash_system_ApplicationDomain_hasDefinition; static methodinfo_t flash_system_ApplicationDomain_getDefinition; static varinfo_t flash_system_ApplicationDomain_parentDomain; static varinfo_t flash_system_ApplicationDomain_domainMemory; static classinfo_t flash_events_KeyboardEvent; static varinfo_t flash_events_KeyboardEvent_shiftKey; static varinfo_t flash_events_KeyboardEvent_keyCode; static varinfo_t flash_events_KeyboardEvent_keyLocation; static methodinfo_t flash_events_KeyboardEvent_updateAfterEvent; static methodinfo_t flash_events_KeyboardEvent_toString; static varinfo_t flash_events_KeyboardEvent_altKey; static varinfo_t flash_events_KeyboardEvent_ctrlKey; static methodinfo_t flash_events_KeyboardEvent_clone; static varinfo_t flash_events_KeyboardEvent_charCode; static varinfo_t flash_events_KeyboardEvent_shiftKey; static varinfo_t flash_events_KeyboardEvent_keyCode; static varinfo_t flash_events_KeyboardEvent_keyLocation; static methodinfo_t flash_events_KeyboardEvent_updateAfterEvent; static methodinfo_t flash_events_KeyboardEvent_toString; static varinfo_t flash_events_KeyboardEvent_altKey; static varinfo_t flash_events_KeyboardEvent_ctrlKey; static methodinfo_t flash_events_KeyboardEvent_clone; static varinfo_t flash_events_KeyboardEvent_charCode; static classinfo_t adobe_utils_ProductManager; static varinfo_t adobe_utils_ProductManager_running; static methodinfo_t adobe_utils_ProductManager_download; static varinfo_t adobe_utils_ProductManager_installedVersion; static varinfo_t adobe_utils_ProductManager_installed; static methodinfo_t adobe_utils_ProductManager_launch; static varinfo_t adobe_utils_ProductManager_running; static methodinfo_t adobe_utils_ProductManager_download; static varinfo_t adobe_utils_ProductManager_installedVersion; static varinfo_t adobe_utils_ProductManager_installed; static methodinfo_t adobe_utils_ProductManager_launch; static classinfo_t flash_events_Event; static varinfo_t flash_events_Event_type; static varinfo_t flash_events_Event_cancelable; static methodinfo_t flash_events_Event_isDefaultPrevented; static varinfo_t flash_events_Event_target; static varinfo_t flash_events_Event_eventPhase; static varinfo_t flash_events_Event_currentTarget; static methodinfo_t flash_events_Event_toString; static methodinfo_t flash_events_Event_stopImmediatePropagation; static varinfo_t flash_events_Event_bubbles; static methodinfo_t flash_events_Event_stopPropagation; static methodinfo_t flash_events_Event_clone; static methodinfo_t flash_events_Event_preventDefault; static methodinfo_t flash_events_Event_formatToString; static varinfo_t flash_events_Event_type; static varinfo_t flash_events_Event_cancelable; static methodinfo_t flash_events_Event_isDefaultPrevented; static varinfo_t flash_events_Event_target; static varinfo_t flash_events_Event_eventPhase; static varinfo_t flash_events_Event_currentTarget; static methodinfo_t flash_events_Event_toString; static methodinfo_t flash_events_Event_stopImmediatePropagation; static varinfo_t flash_events_Event_bubbles; static methodinfo_t flash_events_Event_stopPropagation; static methodinfo_t flash_events_Event_clone; static methodinfo_t flash_events_Event_preventDefault; static methodinfo_t flash_events_Event_formatToString; static classinfo_t flash_desktop_ClipboardFormats; static classinfo_t flash_display_MovieClip; static methodinfo_t flash_display_MovieClip_prevScene; static methodinfo_t flash_display_MovieClip_gotoAndPlay; static varinfo_t flash_display_MovieClip_currentLabels; static methodinfo_t flash_display_MovieClip_nextFrame; static varinfo_t flash_display_MovieClip_currentScene; static varinfo_t flash_display_MovieClip_enabled; static varinfo_t flash_display_MovieClip_currentFrameLabel; static methodinfo_t flash_display_MovieClip_play; static varinfo_t flash_display_MovieClip_framesLoaded; static varinfo_t flash_display_MovieClip_scenes; static methodinfo_t flash_display_MovieClip_addFrameScript; static varinfo_t flash_display_MovieClip_currentLabel; static methodinfo_t flash_display_MovieClip_prevFrame; static methodinfo_t flash_display_MovieClip_gotoAndStop; static varinfo_t flash_display_MovieClip_currentFrame; static methodinfo_t flash_display_MovieClip_nextScene; static varinfo_t flash_display_MovieClip_totalFrames; static varinfo_t flash_display_MovieClip_trackAsMenu; static methodinfo_t flash_display_MovieClip_stop; static methodinfo_t flash_display_MovieClip_prevScene; static methodinfo_t flash_display_MovieClip_gotoAndPlay; static varinfo_t flash_display_MovieClip_currentLabels; static methodinfo_t flash_display_MovieClip_nextFrame; static varinfo_t flash_display_MovieClip_currentScene; static varinfo_t flash_display_MovieClip_enabled; static varinfo_t flash_display_MovieClip_currentFrameLabel; static methodinfo_t flash_display_MovieClip_play; static varinfo_t flash_display_MovieClip_framesLoaded; static varinfo_t flash_display_MovieClip_scenes; static methodinfo_t flash_display_MovieClip_addFrameScript; static varinfo_t flash_display_MovieClip_currentLabel; static methodinfo_t flash_display_MovieClip_prevFrame; static methodinfo_t flash_display_MovieClip_gotoAndStop; static varinfo_t flash_display_MovieClip_currentFrame; static methodinfo_t flash_display_MovieClip_nextScene; static varinfo_t flash_display_MovieClip_totalFrames; static varinfo_t flash_display_MovieClip_trackAsMenu; static methodinfo_t flash_display_MovieClip_stop; static classinfo_t flash_display_BitmapData; static methodinfo_t flash_display_BitmapData_getPixel32; static methodinfo_t flash_display_BitmapData_draw; static methodinfo_t flash_display_BitmapData_setPixels; static methodinfo_t flash_display_BitmapData_copyPixels; static methodinfo_t flash_display_BitmapData_histogram; static methodinfo_t flash_display_BitmapData_scroll; static varinfo_t flash_display_BitmapData_transparent; static methodinfo_t flash_display_BitmapData_noise; static methodinfo_t flash_display_BitmapData_threshold; static methodinfo_t flash_display_BitmapData_paletteMap; static methodinfo_t flash_display_BitmapData_perlinNoise; static methodinfo_t flash_display_BitmapData_hitTest; static methodinfo_t flash_display_BitmapData_getPixel; static methodinfo_t flash_display_BitmapData_unlock; static varinfo_t flash_display_BitmapData_height; static methodinfo_t flash_display_BitmapData_copyChannel; static varinfo_t flash_display_BitmapData_width; static methodinfo_t flash_display_BitmapData_clone; static methodinfo_t flash_display_BitmapData_colorTransform; static methodinfo_t flash_display_BitmapData_generateFilterRect; static methodinfo_t flash_display_BitmapData_compare; static methodinfo_t flash_display_BitmapData_fillRect; static methodinfo_t flash_display_BitmapData_setVector; static methodinfo_t flash_display_BitmapData_floodFill; static methodinfo_t flash_display_BitmapData_pixelDissolve; static methodinfo_t flash_display_BitmapData_setPixel; static methodinfo_t flash_display_BitmapData_setPixel32; static methodinfo_t flash_display_BitmapData_lock; static methodinfo_t flash_display_BitmapData_getVector; static methodinfo_t flash_display_BitmapData_getColorBoundsRect; static methodinfo_t flash_display_BitmapData_getPixels; static methodinfo_t flash_display_BitmapData_merge; static varinfo_t flash_display_BitmapData_rect; static methodinfo_t flash_display_BitmapData_applyFilter; static methodinfo_t flash_display_BitmapData_dispose; static methodinfo_t flash_display_BitmapData_getPixel32; static methodinfo_t flash_display_BitmapData_draw; static methodinfo_t flash_display_BitmapData_setPixels; static methodinfo_t flash_display_BitmapData_copyPixels; static methodinfo_t flash_display_BitmapData_histogram; static methodinfo_t flash_display_BitmapData_scroll; static varinfo_t flash_display_BitmapData_transparent; static methodinfo_t flash_display_BitmapData_noise; static methodinfo_t flash_display_BitmapData_threshold; static methodinfo_t flash_display_BitmapData_paletteMap; static methodinfo_t flash_display_BitmapData_perlinNoise; static methodinfo_t flash_display_BitmapData_hitTest; static methodinfo_t flash_display_BitmapData_getPixel; static methodinfo_t flash_display_BitmapData_unlock; static varinfo_t flash_display_BitmapData_height; static methodinfo_t flash_display_BitmapData_copyChannel; static varinfo_t flash_display_BitmapData_width; static methodinfo_t flash_display_BitmapData_clone; static methodinfo_t flash_display_BitmapData_colorTransform; static methodinfo_t flash_display_BitmapData_generateFilterRect; static methodinfo_t flash_display_BitmapData_compare; static methodinfo_t flash_display_BitmapData_fillRect; static methodinfo_t flash_display_BitmapData_setVector; static methodinfo_t flash_display_BitmapData_floodFill; static methodinfo_t flash_display_BitmapData_pixelDissolve; static methodinfo_t flash_display_BitmapData_setPixel; static methodinfo_t flash_display_BitmapData_setPixel32; static methodinfo_t flash_display_BitmapData_lock; static methodinfo_t flash_display_BitmapData_getVector; static methodinfo_t flash_display_BitmapData_getColorBoundsRect; static methodinfo_t flash_display_BitmapData_getPixels; static methodinfo_t flash_display_BitmapData_merge; static varinfo_t flash_display_BitmapData_rect; static methodinfo_t flash_display_BitmapData_applyFilter; static methodinfo_t flash_display_BitmapData_dispose; static classinfo_t flash_text_engine_LigatureLevel; static varinfo_t _Infinity; static classinfo_t flash_text_engine_FontDescription; static varinfo_t flash_text_engine_FontDescription_renderingMode; static varinfo_t flash_text_engine_FontDescription_cffHinting; static varinfo_t flash_text_engine_FontDescription_fontPosture; static varinfo_t flash_text_engine_FontDescription_fontName; static varinfo_t flash_text_engine_FontDescription_fontLookup; static varinfo_t flash_text_engine_FontDescription_locked; static varinfo_t flash_text_engine_FontDescription_fontWeight; static methodinfo_t flash_text_engine_FontDescription_clone; static varinfo_t flash_text_engine_FontDescription_renderingMode; static varinfo_t flash_text_engine_FontDescription_cffHinting; static varinfo_t flash_text_engine_FontDescription_fontPosture; static varinfo_t flash_text_engine_FontDescription_fontName; static varinfo_t flash_text_engine_FontDescription_fontLookup; static varinfo_t flash_text_engine_FontDescription_locked; static varinfo_t flash_text_engine_FontDescription_fontWeight; static methodinfo_t flash_text_engine_FontDescription_clone; static classinfo_t flash_text_engine_TextElement; static methodinfo_t flash_text_engine_TextElement_replaceText; static methodinfo_t flash_text_engine_TextElement_replaceText; static classinfo_t flash_display_SWFVersion; static classinfo_t flash_net_URLLoader; static methodinfo_t flash_net_URLLoader_close; static varinfo_t flash_net_URLLoader_bytesLoaded; static methodinfo_t flash_net_URLLoader_load; static varinfo_t flash_net_URLLoader_bytesTotal; static varinfo_t flash_net_URLLoader_dataFormat; static varinfo_t flash_net_URLLoader_data; static methodinfo_t flash_net_URLLoader_close; static varinfo_t flash_net_URLLoader_bytesLoaded; static methodinfo_t flash_net_URLLoader_load; static varinfo_t flash_net_URLLoader_bytesTotal; static varinfo_t flash_net_URLLoader_dataFormat; static varinfo_t flash_net_URLLoader_data; static classinfo_t flash_geom_Matrix; static varinfo_t flash_geom_Matrix_b; static methodinfo_t flash_geom_Matrix_deltaTransformPoint; static methodinfo_t flash_geom_Matrix_identity; static varinfo_t flash_geom_Matrix_ty; static methodinfo_t flash_geom_Matrix_translate; static methodinfo_t flash_geom_Matrix_concat; static varinfo_t flash_geom_Matrix_c; static varinfo_t flash_geom_Matrix_a; static methodinfo_t flash_geom_Matrix_scale; static varinfo_t flash_geom_Matrix_d; static methodinfo_t flash_geom_Matrix_transformPoint; static methodinfo_t flash_geom_Matrix_rotate; static methodinfo_t flash_geom_Matrix_createGradientBox; static methodinfo_t flash_geom_Matrix_toString; static methodinfo_t flash_geom_Matrix_invert; static methodinfo_t flash_geom_Matrix_clone; static varinfo_t flash_geom_Matrix_tx; static methodinfo_t flash_geom_Matrix_createBox; static varinfo_t flash_geom_Matrix_b; static methodinfo_t flash_geom_Matrix_deltaTransformPoint; static methodinfo_t flash_geom_Matrix_identity; static varinfo_t flash_geom_Matrix_ty; static methodinfo_t flash_geom_Matrix_translate; static methodinfo_t flash_geom_Matrix_concat; static varinfo_t flash_geom_Matrix_c; static varinfo_t flash_geom_Matrix_a; static methodinfo_t flash_geom_Matrix_scale; static varinfo_t flash_geom_Matrix_d; static methodinfo_t flash_geom_Matrix_transformPoint; static methodinfo_t flash_geom_Matrix_rotate; static methodinfo_t flash_geom_Matrix_createGradientBox; static methodinfo_t flash_geom_Matrix_toString; static methodinfo_t flash_geom_Matrix_invert; static methodinfo_t flash_geom_Matrix_clone; static varinfo_t flash_geom_Matrix_tx; static methodinfo_t flash_geom_Matrix_createBox; static classinfo_t flash_accessibility_Accessibility; static methodinfo_t flash_net_sendToURL; static classinfo_t flash_filters_GlowFilter; static varinfo_t flash_filters_GlowFilter_blurY; static varinfo_t flash_filters_GlowFilter_strength; static varinfo_t flash_filters_GlowFilter_inner; static varinfo_t flash_filters_GlowFilter_color; static methodinfo_t flash_filters_GlowFilter_clone; static varinfo_t flash_filters_GlowFilter_quality; static varinfo_t flash_filters_GlowFilter_knockout; static varinfo_t flash_filters_GlowFilter_alpha; static varinfo_t flash_filters_GlowFilter_blurX; static varinfo_t flash_filters_GlowFilter_blurY; static varinfo_t flash_filters_GlowFilter_strength; static varinfo_t flash_filters_GlowFilter_inner; static varinfo_t flash_filters_GlowFilter_color; static methodinfo_t flash_filters_GlowFilter_clone; static varinfo_t flash_filters_GlowFilter_quality; static varinfo_t flash_filters_GlowFilter_knockout; static varinfo_t flash_filters_GlowFilter_alpha; static varinfo_t flash_filters_GlowFilter_blurX; static classinfo_t flash_events_FullScreenEvent; static methodinfo_t flash_events_FullScreenEvent_toString; static methodinfo_t flash_events_FullScreenEvent_clone; static varinfo_t flash_events_FullScreenEvent_fullScreen; static methodinfo_t flash_events_FullScreenEvent_toString; static methodinfo_t flash_events_FullScreenEvent_clone; static varinfo_t flash_events_FullScreenEvent_fullScreen; static classinfo_t flash_display_StageDisplayState; static classinfo_t flash_text_engine_TextJustifier; static varinfo_t flash_text_engine_TextJustifier_lineJustification; static varinfo_t flash_text_engine_TextJustifier_locale; static methodinfo_t flash_text_engine_TextJustifier_clone; static varinfo_t flash_text_engine_TextJustifier_lineJustification; static varinfo_t flash_text_engine_TextJustifier_locale; static methodinfo_t flash_text_engine_TextJustifier_clone; static classinfo_t flash_display_StageAlign; static varinfo_t _NaN; static classinfo_t _ReferenceError; static classinfo_t flash_display_Shape; static varinfo_t flash_display_Shape_graphics; static varinfo_t flash_display_Shape_graphics; static classinfo_t flash_text_TextFormat = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextFormat", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextFormat_leading = {0x01, 0x00, 0x80, 0x16, "", "leading", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_bold = {0x01, 0x00, 0x80, 0x16, "", "bold", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_underline = {0x01, 0x00, 0x80, 0x16, "", "underline", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_letterSpacing = {0x01, 0x00, 0x80, 0x16, "", "letterSpacing", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_kerning = {0x01, 0x00, 0x80, 0x16, "", "kerning", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_target = {0x01, 0x00, 0x80, 0x16, "", "target", 0, &_String, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_italic = {0x01, 0x00, 0x80, 0x16, "", "italic", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_rightMargin = {0x01, 0x00, 0x80, 0x16, "", "rightMargin", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_bullet = {0x01, 0x00, 0x80, 0x16, "", "bullet", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_url = {0x01, 0x00, 0x80, 0x16, "", "url", 0, &_String, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_size = {0x01, 0x00, 0x80, 0x16, "", "size", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_indent = {0x01, 0x00, 0x80, 0x16, "", "indent", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_leftMargin = {0x01, 0x00, 0x80, 0x16, "", "leftMargin", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_display = {0x01, 0x00, 0x80, 0x16, "", "display", 0, &_String, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_align = {0x01, 0x00, 0x80, 0x16, "", "align", 0, &_String, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_tabStops = {0x01, 0x00, 0x80, 0x16, "", "tabStops", 0, &_Array, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_blockIndent = {0x01, 0x00, 0x80, 0x16, "", "blockIndent", 0, &_Object, &flash_text_TextFormat, 0}; static varinfo_t flash_text_TextFormat_font = {0x01, 0x00, 0x80, 0x16, "", "font", 0, &_String, &flash_text_TextFormat, 0}; static classinfo_t flash_filters_BitmapFilter = {0x03, 0x00, 0x80, 0x16, "flash.filters", "BitmapFilter", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_filters_BitmapFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_BitmapFilter, 0}; static classinfo_t flash_filters_DropShadowFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "DropShadowFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_DropShadowFilter_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_strength = {0x01, 0x00, 0x80, 0x16, "", "strength", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_angle = {0x01, 0x00, 0x80, 0x16, "", "angle", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_knockout = {0x01, 0x00, 0x80, 0x16, "", "knockout", 0, &_Boolean, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_hideObject = {0x01, 0x00, 0x80, 0x16, "", "hideObject", 0, &_Boolean, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_inner = {0x01, 0x00, 0x80, 0x16, "", "inner", 0, &_Boolean, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static varinfo_t flash_filters_DropShadowFilter_distance = {0x01, 0x00, 0x80, 0x16, "", "distance", 0, &_Number, &flash_filters_DropShadowFilter, 0}; static methodinfo_t flash_filters_DropShadowFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_DropShadowFilter, 0}; static classinfo_t adobe_utils_CustomActions = {0x03, 0x00, 0x81, 0x16, "adobe.utils", "CustomActions", 0, &_Object, interfaces: {0}}; static varinfo_t adobe_utils_CustomActions_actionsList = {0x01, 0x00, 0x82, 0x16, "", "actionsList", 0, &_Array, &adobe_utils_CustomActions, 0}; static methodinfo_t adobe_utils_CustomActions_uninstallActions = {0x02, 0x00, 0x82, 0x16, "", "uninstallActions", 0, &voidclass, &adobe_utils_CustomActions, 0}; static methodinfo_t adobe_utils_CustomActions_getActions = {0x02, 0x00, 0x82, 0x16, "", "getActions", 0, &_String, &adobe_utils_CustomActions, 0}; static methodinfo_t adobe_utils_CustomActions_installActions = {0x02, 0x00, 0x82, 0x16, "", "installActions", 0, &voidclass, &adobe_utils_CustomActions, 0}; static classinfo_t flash_text_engine_TextLineValidity = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextLineValidity", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextLineValidity_STATIC = {0x01, 0x00, 0x82, 0x16, "", "STATIC", 0, &_String, &flash_text_engine_TextLineValidity, 0}; static varinfo_t flash_text_engine_TextLineValidity_VALID = {0x01, 0x00, 0x82, 0x16, "", "VALID", 0, &_String, &flash_text_engine_TextLineValidity, 0}; static varinfo_t flash_text_engine_TextLineValidity_INVALID = {0x01, 0x00, 0x82, 0x16, "", "INVALID", 0, &_String, &flash_text_engine_TextLineValidity, 0}; static varinfo_t flash_text_engine_TextLineValidity_POSSIBLY_INVALID = {0x01, 0x00, 0x82, 0x16, "", "POSSIBLY_INVALID", 0, &_String, &flash_text_engine_TextLineValidity, 0}; static classinfo_t flash_display_LineScaleMode = {0x03, 0x00, 0x81, 0x16, "flash.display", "LineScaleMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_LineScaleMode_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_display_LineScaleMode, 0}; static varinfo_t flash_display_LineScaleMode_VERTICAL = {0x01, 0x00, 0x82, 0x16, "", "VERTICAL", 0, &_String, &flash_display_LineScaleMode, 0}; static varinfo_t flash_display_LineScaleMode_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_display_LineScaleMode, 0}; static varinfo_t flash_display_LineScaleMode_HORIZONTAL = {0x01, 0x00, 0x82, 0x16, "", "HORIZONTAL", 0, &_String, &flash_display_LineScaleMode, 0}; static classinfo_t flash_geom_Transform = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Transform", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_Transform_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &flash_geom_Matrix, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_perspectiveProjection = {0x01, 0x00, 0x80, 0x16, "", "perspectiveProjection", 0, &flash_geom_PerspectiveProjection, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_concatenatedMatrix = {0x01, 0x00, 0x80, 0x16, "", "concatenatedMatrix", 0, &flash_geom_Matrix, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_colorTransform = {0x01, 0x00, 0x80, 0x16, "", "colorTransform", 0, &flash_geom_ColorTransform, &flash_geom_Transform, 0}; static methodinfo_t flash_geom_Transform_getRelativeMatrix3D = {0x02, 0x00, 0x80, 0x16, "", "getRelativeMatrix3D", 0, &flash_geom_Matrix3D, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_pixelBounds = {0x01, 0x00, 0x80, 0x16, "", "pixelBounds", 0, &flash_geom_Rectangle, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_matrix3D = {0x01, 0x00, 0x80, 0x16, "", "matrix3D", 0, &flash_geom_Matrix3D, &flash_geom_Transform, 0}; static varinfo_t flash_geom_Transform_concatenatedColorTransform = {0x01, 0x00, 0x80, 0x16, "", "concatenatedColorTransform", 0, &flash_geom_ColorTransform, &flash_geom_Transform, 0}; static classinfo_t flash_ui_KeyLocation = {0x03, 0x00, 0x81, 0x16, "flash.ui", "KeyLocation", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_KeyLocation_LEFT = {0x01, 0x00, 0x82, 0x16, "", "LEFT", 0, &_uint, &flash_ui_KeyLocation, 0}; static varinfo_t flash_ui_KeyLocation_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "RIGHT", 0, &_uint, &flash_ui_KeyLocation, 0}; static varinfo_t flash_ui_KeyLocation_NUM_PAD = {0x01, 0x00, 0x82, 0x16, "", "NUM_PAD", 0, &_uint, &flash_ui_KeyLocation, 0}; static varinfo_t flash_ui_KeyLocation_STANDARD = {0x01, 0x00, 0x82, 0x16, "", "STANDARD", 0, &_uint, &flash_ui_KeyLocation, 0}; static classinfo_t flash_events_MouseEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "MouseEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_MouseEvent_localY = {0x01, 0x00, 0x80, 0x16, "", "localY", 0, &_Number, &flash_events_MouseEvent, 0}; static methodinfo_t flash_events_MouseEvent_updateAfterEvent = {0x02, 0x00, 0x80, 0x16, "", "updateAfterEvent", 0, &voidclass, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_delta = {0x01, 0x00, 0x80, 0x16, "", "delta", 0, &_int, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_stageX = {0x01, 0x00, 0x80, 0x16, "", "stageX", 0, &_Number, &flash_events_MouseEvent, 0}; static methodinfo_t flash_events_MouseEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_relatedObject = {0x01, 0x00, 0x80, 0x16, "", "relatedObject", 0, &flash_display_InteractiveObject, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_isRelatedObjectInaccessible = {0x01, 0x00, 0x80, 0x16, "", "isRelatedObjectInaccessible", 0, &_Boolean, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_shiftKey = {0x01, 0x00, 0x80, 0x16, "", "shiftKey", 0, &_Boolean, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_stageY = {0x01, 0x00, 0x80, 0x16, "", "stageY", 0, &_Number, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_altKey = {0x01, 0x00, 0x80, 0x16, "", "altKey", 0, &_Boolean, &flash_events_MouseEvent, 0}; static methodinfo_t flash_events_MouseEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_ctrlKey = {0x01, 0x00, 0x80, 0x16, "", "ctrlKey", 0, &_Boolean, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_localX = {0x01, 0x00, 0x80, 0x16, "", "localX", 0, &_Number, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_buttonDown = {0x01, 0x00, 0x80, 0x16, "", "buttonDown", 0, &_Boolean, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_ROLL_OVER = {0x01, 0x00, 0x82, 0x16, "", "ROLL_OVER", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_ROLL_OUT = {0x01, 0x00, 0x82, 0x16, "", "ROLL_OUT", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_DOWN = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_DOWN", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_DOUBLE_CLICK = {0x01, 0x00, 0x82, 0x16, "", "DOUBLE_CLICK", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_WHEEL = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_WHEEL", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_CLICK = {0x01, 0x00, 0x82, 0x16, "", "CLICK", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_MOVE = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_MOVE", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_UP = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_UP", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_OVER = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_OVER", 0, &_String, &flash_events_MouseEvent, 0}; static varinfo_t flash_events_MouseEvent_MOUSE_OUT = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_OUT", 0, &_String, &flash_events_MouseEvent, 0}; static classinfo_t flash_text_engine_LineJustification = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "LineJustification", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_LineJustification_ALL_INCLUDING_LAST = {0x01, 0x00, 0x82, 0x16, "", "ALL_INCLUDING_LAST", 0, &_String, &flash_text_engine_LineJustification, 0}; static varinfo_t flash_text_engine_LineJustification_UNJUSTIFIED = {0x01, 0x00, 0x82, 0x16, "", "UNJUSTIFIED", 0, &_String, &flash_text_engine_LineJustification, 0}; static varinfo_t flash_text_engine_LineJustification_ALL_BUT_LAST = {0x01, 0x00, 0x82, 0x16, "", "ALL_BUT_LAST", 0, &_String, &flash_text_engine_LineJustification, 0}; static classinfo_t flash_media_Camera = {0x03, 0x00, 0x81, 0x16, "flash.media", "Camera", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_media_Camera_fps = {0x01, 0x00, 0x80, 0x16, "", "fps", 0, &_Number, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setMode = {0x02, 0x00, 0x80, 0x16, "", "setMode", 0, &voidclass, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_keyFrameInterval = {0x01, 0x00, 0x80, 0x16, "", "keyFrameInterval", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_motionTimeout = {0x01, 0x00, 0x80, 0x16, "", "motionTimeout", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_int, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setCursor = {0x02, 0x00, 0x80, 0x16, "", "setCursor", 0, &voidclass, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setLoopback = {0x02, 0x00, 0x80, 0x16, "", "setLoopback", 0, &voidclass, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_index = {0x01, 0x00, 0x80, 0x16, "", "index", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_currentFPS = {0x01, 0x00, 0x80, 0x16, "", "currentFPS", 0, &_Number, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setKeyFrameInterval = {0x02, 0x00, 0x80, 0x16, "", "setKeyFrameInterval", 0, &voidclass, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_motionLevel = {0x01, 0x00, 0x80, 0x16, "", "motionLevel", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_bandwidth = {0x01, 0x00, 0x80, 0x16, "", "bandwidth", 0, &_int, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_muted = {0x01, 0x00, 0x80, 0x16, "", "muted", 0, &_Boolean, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_activityLevel = {0x01, 0x00, 0x80, 0x16, "", "activityLevel", 0, &_Number, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_loopback = {0x01, 0x00, 0x80, 0x16, "", "loopback", 0, &_Boolean, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setQuality = {0x02, 0x00, 0x80, 0x16, "", "setQuality", 0, &voidclass, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_setMotionLevel = {0x02, 0x00, 0x80, 0x16, "", "setMotionLevel", 0, &voidclass, &flash_media_Camera, 0}; static methodinfo_t flash_media_Camera_getCamera = {0x02, 0x00, 0x82, 0x16, "", "getCamera", 0, &flash_media_Camera, &flash_media_Camera, 0}; static varinfo_t flash_media_Camera_names = {0x01, 0x00, 0x82, 0x16, "", "names", 0, &_Array, &flash_media_Camera, 0}; static methodinfo_t flash_net_registerClassAlias = {0x02, 0x00, 0x82, 0x16, "flash.net", "registerClassAlias", 0, &voidclass, 0, 0}; static classinfo_t flash_accessibility_AccessibilityImplementation = {0x03, 0x00, 0x80, 0x16, "flash.accessibility", "AccessibilityImplementation", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accState = {0x02, 0x00, 0x80, 0x16, "", "get_accState", 0, &_uint, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accName = {0x02, 0x00, 0x80, 0x16, "", "get_accName", 0, &_String, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accSelection = {0x02, 0x00, 0x80, 0x16, "", "get_accSelection", 0, &_Array, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_accDoDefaultAction = {0x02, 0x00, 0x80, 0x16, "", "accDoDefaultAction", 0, &voidclass, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accFocus = {0x02, 0x00, 0x80, 0x16, "", "get_accFocus", 0, &_uint, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accDefaultAction = {0x02, 0x00, 0x80, 0x16, "", "get_accDefaultAction", 0, &_String, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_accSelect = {0x02, 0x00, 0x80, 0x16, "", "accSelect", 0, &voidclass, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accValue = {0x02, 0x00, 0x80, 0x16, "", "get_accValue", 0, &_String, &flash_accessibility_AccessibilityImplementation, 0}; static varinfo_t flash_accessibility_AccessibilityImplementation_stub = {0x01, 0x00, 0x80, 0x16, "", "stub", 0, &_Boolean, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_get_accRole = {0x02, 0x00, 0x80, 0x16, "", "get_accRole", 0, &_uint, &flash_accessibility_AccessibilityImplementation, 0}; static varinfo_t flash_accessibility_AccessibilityImplementation_errno = {0x01, 0x00, 0x80, 0x16, "", "errno", 0, &_uint, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_isLabeledBy = {0x02, 0x00, 0x80, 0x16, "", "isLabeledBy", 0, &_Boolean, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_accLocation = {0x02, 0x00, 0x80, 0x16, "", "accLocation", 0, 0, &flash_accessibility_AccessibilityImplementation, 0}; static methodinfo_t flash_accessibility_AccessibilityImplementation_getChildIDArray = {0x02, 0x00, 0x80, 0x16, "", "getChildIDArray", 0, &_Array, &flash_accessibility_AccessibilityImplementation, 0}; static classinfo_t flash_utils_ByteArray = {0x03, 0x00, 0x80, 0x16, "flash.utils", "ByteArray", 0, &_Object, interfaces: {&flash_utils_IDataInput, &flash_utils_IDataOutput, 0}}; static methodinfo_t flash_utils_ByteArray_writeBoolean = {0x02, 0x00, 0x80, 0x16, "", "writeBoolean", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readDouble = {0x02, 0x00, 0x80, 0x16, "", "readDouble", 0, &_Number, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeByte = {0x02, 0x00, 0x80, 0x16, "", "writeByte", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeObject = {0x02, 0x00, 0x80, 0x16, "", "writeObject", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readUTFBytes = {0x02, 0x00, 0x80, 0x16, "", "readUTFBytes", 0, &_String, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeMultiByte = {0x02, 0x00, 0x80, 0x16, "", "writeMultiByte", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_uncompress = {0x02, 0x00, 0x80, 0x16, "", "uncompress", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readUnsignedByte = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedByte", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeInt = {0x02, 0x00, 0x80, 0x16, "", "writeInt", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_deflate = {0x02, 0x00, 0x80, 0x16, "", "deflate", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readMultiByte = {0x02, 0x00, 0x80, 0x16, "", "readMultiByte", 0, &_String, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readBytes = {0x02, 0x00, 0x80, 0x16, "", "readBytes", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeShort = {0x02, 0x00, 0x80, 0x16, "", "writeShort", 0, &voidclass, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_position = {0x01, 0x00, 0x80, 0x16, "", "position", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readShort = {0x02, 0x00, 0x80, 0x16, "", "readShort", 0, &_int, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeUTF = {0x02, 0x00, 0x80, 0x16, "", "writeUTF", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeBytes = {0x02, 0x00, 0x80, 0x16, "", "writeBytes", 0, &voidclass, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readObject = {0x02, 0x00, 0x80, 0x16, "", "readObject", 0, 0, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeUnsignedInt = {0x02, 0x00, 0x80, 0x16, "", "writeUnsignedInt", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeDouble = {0x02, 0x00, 0x80, 0x16, "", "writeDouble", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeFloat = {0x02, 0x00, 0x80, 0x16, "", "writeFloat", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readInt = {0x02, 0x00, 0x80, 0x16, "", "readInt", 0, &_int, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readByte = {0x02, 0x00, 0x80, 0x16, "", "readByte", 0, &_int, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_bytesAvailable = {0x01, 0x00, 0x80, 0x16, "", "bytesAvailable", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_endian = {0x01, 0x00, 0x80, 0x16, "", "endian", 0, &_String, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readUnsignedShort = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedShort", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readUnsignedInt = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedInt", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readFloat = {0x02, 0x00, 0x80, 0x16, "", "readFloat", 0, &_Number, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_compress = {0x02, 0x00, 0x80, 0x16, "", "compress", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_writeUTFBytes = {0x02, 0x00, 0x80, 0x16, "", "writeUTFBytes", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readBoolean = {0x02, 0x00, 0x80, 0x16, "", "readBoolean", 0, &_Boolean, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_inflate = {0x02, 0x00, 0x80, 0x16, "", "inflate", 0, &voidclass, &flash_utils_ByteArray, 0}; static methodinfo_t flash_utils_ByteArray_readUTF = {0x02, 0x00, 0x80, 0x16, "", "readUTF", 0, &_String, &flash_utils_ByteArray, 0}; static varinfo_t flash_utils_ByteArray_defaultObjectEncoding = {0x01, 0x00, 0x82, 0x16, "", "defaultObjectEncoding", 0, &_uint, &flash_utils_ByteArray, 0}; static methodinfo_t flash_sampler_stopSampling = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "stopSampling", 0, &voidclass, 0, 0}; static classinfo_t flash_events_SyncEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "SyncEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_SyncEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_SyncEvent, 0}; static methodinfo_t flash_events_SyncEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_SyncEvent, 0}; static varinfo_t flash_events_SyncEvent_changeList = {0x01, 0x00, 0x80, 0x16, "", "changeList", 0, &_Array, &flash_events_SyncEvent, 0}; static varinfo_t flash_events_SyncEvent_SYNC = {0x01, 0x00, 0x82, 0x16, "", "SYNC", 0, &_String, &flash_events_SyncEvent, 0}; static methodinfo_t _encodeURIComponent = {0x02, 0x00, 0x82, 0x16, "", "encodeURIComponent", 0, &_String, 0, 0}; static classinfo_t flash_net_Socket = {0x03, 0x00, 0x80, 0x16, "flash.net", "Socket", 0, &flash_events_EventDispatcher, interfaces: {&flash_utils_IDataInput, &flash_utils_IDataOutput, 0}}; static methodinfo_t flash_net_Socket_writeBoolean = {0x02, 0x00, 0x80, 0x16, "", "writeBoolean", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_connect = {0x02, 0x00, 0x80, 0x16, "", "connect", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readDouble = {0x02, 0x00, 0x80, 0x16, "", "readDouble", 0, &_Number, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeByte = {0x02, 0x00, 0x80, 0x16, "", "writeByte", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeObject = {0x02, 0x00, 0x80, 0x16, "", "writeObject", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readUTFBytes = {0x02, 0x00, 0x80, 0x16, "", "readUTFBytes", 0, &_String, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeMultiByte = {0x02, 0x00, 0x80, 0x16, "", "writeMultiByte", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readUnsignedByte = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedByte", 0, &_uint, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeInt = {0x02, 0x00, 0x80, 0x16, "", "writeInt", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readMultiByte = {0x02, 0x00, 0x80, 0x16, "", "readMultiByte", 0, &_String, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readBytes = {0x02, 0x00, 0x80, 0x16, "", "readBytes", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeShort = {0x02, 0x00, 0x80, 0x16, "", "writeShort", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readShort = {0x02, 0x00, 0x80, 0x16, "", "readShort", 0, &_int, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeUTF = {0x02, 0x00, 0x80, 0x16, "", "writeUTF", 0, &voidclass, &flash_net_Socket, 0}; static varinfo_t flash_net_Socket_timeout = {0x01, 0x00, 0x80, 0x16, "", "timeout", 0, &_uint, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeBytes = {0x02, 0x00, 0x80, 0x16, "", "writeBytes", 0, &voidclass, &flash_net_Socket, 0}; static varinfo_t flash_net_Socket_connected = {0x01, 0x00, 0x80, 0x16, "", "connected", 0, &_Boolean, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readObject = {0x02, 0x00, 0x80, 0x16, "", "readObject", 0, 0, &flash_net_Socket, 0}; static varinfo_t flash_net_Socket_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_flush = {0x02, 0x00, 0x80, 0x16, "", "flush", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeUnsignedInt = {0x02, 0x00, 0x80, 0x16, "", "writeUnsignedInt", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeDouble = {0x02, 0x00, 0x80, 0x16, "", "writeDouble", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeFloat = {0x02, 0x00, 0x80, 0x16, "", "writeFloat", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readInt = {0x02, 0x00, 0x80, 0x16, "", "readInt", 0, &_int, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readByte = {0x02, 0x00, 0x80, 0x16, "", "readByte", 0, &_int, &flash_net_Socket, 0}; static varinfo_t flash_net_Socket_bytesAvailable = {0x01, 0x00, 0x80, 0x16, "", "bytesAvailable", 0, &_uint, &flash_net_Socket, 0}; static varinfo_t flash_net_Socket_endian = {0x01, 0x00, 0x80, 0x16, "", "endian", 0, &_String, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readUnsignedShort = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedShort", 0, &_uint, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readUnsignedInt = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedInt", 0, &_uint, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readFloat = {0x02, 0x00, 0x80, 0x16, "", "readFloat", 0, &_Number, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_writeUTFBytes = {0x02, 0x00, 0x80, 0x16, "", "writeUTFBytes", 0, &voidclass, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readBoolean = {0x02, 0x00, 0x80, 0x16, "", "readBoolean", 0, &_Boolean, &flash_net_Socket, 0}; static methodinfo_t flash_net_Socket_readUTF = {0x02, 0x00, 0x80, 0x16, "", "readUTF", 0, &_String, &flash_net_Socket, 0}; static methodinfo_t _unescape = {0x02, 0x00, 0x82, 0x16, "", "unescape", 0, &_String, 0, 0}; static classinfo_t flash_utils_Timer = {0x03, 0x00, 0x80, 0x16, "flash.utils", "Timer", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_utils_Timer_reset = {0x02, 0x00, 0x80, 0x16, "", "reset", 0, &voidclass, &flash_utils_Timer, 0}; static varinfo_t flash_utils_Timer_running = {0x01, 0x00, 0x80, 0x16, "", "running", 0, &_Boolean, &flash_utils_Timer, 0}; static varinfo_t flash_utils_Timer_repeatCount = {0x01, 0x00, 0x80, 0x16, "", "repeatCount", 0, &_int, &flash_utils_Timer, 0}; static methodinfo_t flash_utils_Timer_stop = {0x02, 0x00, 0x80, 0x16, "", "stop", 0, &voidclass, &flash_utils_Timer, 0}; static methodinfo_t flash_utils_Timer_start = {0x02, 0x00, 0x80, 0x16, "", "start", 0, &voidclass, &flash_utils_Timer, 0}; static varinfo_t flash_utils_Timer_currentCount = {0x01, 0x00, 0x80, 0x16, "", "currentCount", 0, &_int, &flash_utils_Timer, 0}; static varinfo_t flash_utils_Timer_delay = {0x01, 0x00, 0x80, 0x16, "", "delay", 0, &_Number, &flash_utils_Timer, 0}; static classinfo_t _Array = {0x03, 0x00, 0x88, 0x16, "", "Array", 0, &_Object, interfaces: {0}}; static methodinfo_t _Array_forEach = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "forEach", 0, &voidclass, &_Array, 0}; static methodinfo_t _Array_sortOn = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "sortOn", 0, 0, &_Array, 0}; static methodinfo_t _Array_indexOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "indexOf", 0, &_int, &_Array, 0}; static methodinfo_t _Array_splice = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "splice", 0, 0, &_Array, 0}; static methodinfo_t _Array_lastIndexOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "lastIndexOf", 0, &_int, &_Array, 0}; static methodinfo_t _Array_map = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "map", 0, &_Array, &_Array, 0}; static methodinfo_t _Array_concat = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "concat", 0, &_Array, &_Array, 0}; static methodinfo_t _Array_shift = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "shift", 0, 0, &_Array, 0}; static methodinfo_t _Array_unshift = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "unshift", 0, &_uint, &_Array, 0}; static methodinfo_t _Array_some = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "some", 0, &_Boolean, &_Array, 0}; static methodinfo_t _Array_filter = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "filter", 0, &_Array, &_Array, 0}; static methodinfo_t _Array_join = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "join", 0, &_String, &_Array, 0}; static methodinfo_t _Array_slice = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "slice", 0, &_Array, &_Array, 0}; static methodinfo_t _Array_every = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "every", 0, &_Boolean, &_Array, 0}; static methodinfo_t _Array_pop = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "pop", 0, 0, &_Array, 0}; static methodinfo_t _Array_sort = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "sort", 0, 0, &_Array, 0}; static methodinfo_t _Array_reverse = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "reverse", 0, &_Array, &_Array, 0}; static methodinfo_t _Array_push = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "push", 0, &_uint, &_Array, 0}; static varinfo_t _Array_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_uint, &_Array, 0}; static varinfo_t _Array_DESCENDING = {0x01, 0x00, 0x82, 0x16, "", "DESCENDING", 0, &_uint, &_Array, 0}; static varinfo_t _Array_UNIQUESORT = {0x01, 0x00, 0x82, 0x16, "", "UNIQUESORT", 0, &_uint, &_Array, 0}; static varinfo_t _Array_RETURNINDEXEDARRAY = {0x01, 0x00, 0x82, 0x16, "", "RETURNINDEXEDARRAY", 0, &_uint, &_Array, 0}; static varinfo_t _Array_CASEINSENSITIVE = {0x01, 0x00, 0x82, 0x16, "", "CASEINSENSITIVE", 0, &_uint, &_Array, 0}; static varinfo_t _Array_NUMERIC = {0x01, 0x00, 0x82, 0x16, "", "NUMERIC", 0, &_uint, &_Array, 0}; static classinfo_t flash_geom_ColorTransform = {0x03, 0x00, 0x80, 0x16, "flash.geom", "ColorTransform", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_ColorTransform_blueOffset = {0x01, 0x00, 0x80, 0x16, "", "blueOffset", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_greenOffset = {0x01, 0x00, 0x80, 0x16, "", "greenOffset", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_greenMultiplier = {0x01, 0x00, 0x80, 0x16, "", "greenMultiplier", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_redMultiplier = {0x01, 0x00, 0x80, 0x16, "", "redMultiplier", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_geom_ColorTransform, 0}; static methodinfo_t flash_geom_ColorTransform_concat = {0x02, 0x00, 0x80, 0x16, "", "concat", 0, &voidclass, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_alphaOffset = {0x01, 0x00, 0x80, 0x16, "", "alphaOffset", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_blueMultiplier = {0x01, 0x00, 0x80, 0x16, "", "blueMultiplier", 0, &_Number, &flash_geom_ColorTransform, 0}; static methodinfo_t flash_geom_ColorTransform_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_alphaMultiplier = {0x01, 0x00, 0x80, 0x16, "", "alphaMultiplier", 0, &_Number, &flash_geom_ColorTransform, 0}; static varinfo_t flash_geom_ColorTransform_redOffset = {0x01, 0x00, 0x80, 0x16, "", "redOffset", 0, &_Number, &flash_geom_ColorTransform, 0}; static classinfo_t flash_text_GridFitType = {0x03, 0x00, 0x81, 0x16, "flash.text", "GridFitType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_GridFitType_SUBPIXEL = {0x01, 0x00, 0x82, 0x16, "", "SUBPIXEL", 0, &_String, &flash_text_GridFitType, 0}; static varinfo_t flash_text_GridFitType_PIXEL = {0x01, 0x00, 0x82, 0x16, "", "PIXEL", 0, &_String, &flash_text_GridFitType, 0}; static varinfo_t flash_text_GridFitType_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_text_GridFitType, 0}; static classinfo_t flash_filters_DisplacementMapFilterMode = {0x03, 0x00, 0x81, 0x16, "flash.filters", "DisplacementMapFilterMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_filters_DisplacementMapFilterMode_COLOR = {0x01, 0x00, 0x82, 0x16, "", "COLOR", 0, &_String, &flash_filters_DisplacementMapFilterMode, 0}; static varinfo_t flash_filters_DisplacementMapFilterMode_WRAP = {0x01, 0x00, 0x82, 0x16, "", "WRAP", 0, &_String, &flash_filters_DisplacementMapFilterMode, 0}; static varinfo_t flash_filters_DisplacementMapFilterMode_CLAMP = {0x01, 0x00, 0x82, 0x16, "", "CLAMP", 0, &_String, &flash_filters_DisplacementMapFilterMode, 0}; static varinfo_t flash_filters_DisplacementMapFilterMode_IGNORE = {0x01, 0x00, 0x82, 0x16, "", "IGNORE", 0, &_String, &flash_filters_DisplacementMapFilterMode, 0}; static classinfo_t flash_text_TextFieldType = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextFieldType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextFieldType_DYNAMIC = {0x01, 0x00, 0x82, 0x16, "", "DYNAMIC", 0, &_String, &flash_text_TextFieldType, 0}; static varinfo_t flash_text_TextFieldType_INPUT = {0x01, 0x00, 0x82, 0x16, "", "INPUT", 0, &_String, &flash_text_TextFieldType, 0}; static classinfo_t flash_display_IGraphicsStroke = {0x03, 0x00, 0x90, 0x16, "flash.display", "IGraphicsStroke", 0, 0, interfaces: {0}}; static classinfo_t flash_media_SoundLoaderContext = {0x03, 0x00, 0x80, 0x16, "flash.media", "SoundLoaderContext", 0, &_Object, interfaces: {0}}; static varinfo_t flash_media_SoundLoaderContext_checkPolicyFile = {0x01, 0x00, 0x80, 0x16, "", "checkPolicyFile", 0, &_Boolean, &flash_media_SoundLoaderContext, 0}; static varinfo_t flash_media_SoundLoaderContext_bufferTime = {0x01, 0x00, 0x80, 0x16, "", "bufferTime", 0, &_Number, &flash_media_SoundLoaderContext, 0}; static classinfo_t flash_net_IDynamicPropertyOutput = {0x03, 0x00, 0x90, 0x16, "flash.net", "IDynamicPropertyOutput", 0, 0, interfaces: {0}}; static methodinfo_t flash_net_IDynamicPropertyOutput_writeDynamicProperty = {0x02, 0x00, 0x80, 0x08, "flash.net:IDynamicPropertyOutput", "writeDynamicProperty", 0, &voidclass, &flash_net_IDynamicPropertyOutput, 0}; static classinfo_t flash_display_IGraphicsData = {0x03, 0x00, 0x90, 0x16, "flash.display", "IGraphicsData", 0, 0, interfaces: {0}}; static methodinfo_t flash_utils_getDefinitionByName = {0x02, 0x00, 0x82, 0x16, "flash.utils", "getDefinitionByName", 0, &_Object, 0, 0}; static classinfo_t _Function = {0x03, 0x00, 0x88, 0x16, "", "Function", 0, &_Object, interfaces: {0}}; static varinfo_t _Function_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_int, &_Function, 0}; static methodinfo_t _Function_apply = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "apply", 0, 0, &_Function, 0}; static methodinfo_t _Function_call = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "call", 0, 0, &_Function, 0}; static varinfo_t _Function_prototype = {0x01, 0x00, 0x80, 0x16, "", "prototype", 0, 0, &_Function, 0}; static classinfo_t flash_geom_PerspectiveProjection = {0x03, 0x00, 0x80, 0x16, "flash.geom", "PerspectiveProjection", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_PerspectiveProjection_fieldOfView = {0x01, 0x00, 0x80, 0x16, "", "fieldOfView", 0, &_Number, &flash_geom_PerspectiveProjection, 0}; static varinfo_t flash_geom_PerspectiveProjection_projectionCenter = {0x01, 0x00, 0x80, 0x16, "", "projectionCenter", 0, &flash_geom_Point, &flash_geom_PerspectiveProjection, 0}; static methodinfo_t flash_geom_PerspectiveProjection_toMatrix3D = {0x02, 0x00, 0x80, 0x16, "", "toMatrix3D", 0, &flash_geom_Matrix3D, &flash_geom_PerspectiveProjection, 0}; static varinfo_t flash_geom_PerspectiveProjection_focalLength = {0x01, 0x00, 0x80, 0x16, "", "focalLength", 0, &_Number, &flash_geom_PerspectiveProjection, 0}; static classinfo_t flash_text_engine_BreakOpportunity = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "BreakOpportunity", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_BreakOpportunity_AUTO = {0x01, 0x00, 0x82, 0x16, "", "AUTO", 0, &_String, &flash_text_engine_BreakOpportunity, 0}; static varinfo_t flash_text_engine_BreakOpportunity_ANY = {0x01, 0x00, 0x82, 0x16, "", "ANY", 0, &_String, &flash_text_engine_BreakOpportunity, 0}; static varinfo_t flash_text_engine_BreakOpportunity_ALL = {0x01, 0x00, 0x82, 0x16, "", "ALL", 0, &_String, &flash_text_engine_BreakOpportunity, 0}; static varinfo_t flash_text_engine_BreakOpportunity_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_text_engine_BreakOpportunity, 0}; static methodinfo_t flash_sampler__getInvocationCount = {0x02, 0x00, 0x82, 0x17, "flash.sampler", "_getInvocationCount", 0, &_Number, 0, 0}; static methodinfo_t _parseFloat = {0x02, 0x00, 0x82, 0x16, "", "parseFloat", 0, &_Number, 0, 0}; static classinfo_t flash_events_NetStatusEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "NetStatusEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_NetStatusEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_NetStatusEvent, 0}; static varinfo_t flash_events_NetStatusEvent_info = {0x01, 0x00, 0x80, 0x16, "", "info", 0, &_Object, &flash_events_NetStatusEvent, 0}; static methodinfo_t flash_events_NetStatusEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_NetStatusEvent, 0}; static varinfo_t flash_events_NetStatusEvent_NET_STATUS = {0x01, 0x00, 0x82, 0x16, "", "NET_STATUS", 0, &_String, &flash_events_NetStatusEvent, 0}; static classinfo_t flash_display_ShaderJob = {0x03, 0x00, 0x80, 0x16, "flash.display", "ShaderJob", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_display_ShaderJob_cancel = {0x02, 0x00, 0x80, 0x16, "", "cancel", 0, &voidclass, &flash_display_ShaderJob, 0}; static varinfo_t flash_display_ShaderJob_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_int, &flash_display_ShaderJob, 0}; static methodinfo_t flash_display_ShaderJob_start = {0x02, 0x00, 0x80, 0x16, "", "start", 0, &voidclass, &flash_display_ShaderJob, 0}; static varinfo_t flash_display_ShaderJob_shader = {0x01, 0x00, 0x80, 0x16, "", "shader", 0, &flash_display_Shader, &flash_display_ShaderJob, 0}; static varinfo_t flash_display_ShaderJob_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_int, &flash_display_ShaderJob, 0}; static varinfo_t flash_display_ShaderJob_target = {0x01, 0x00, 0x80, 0x16, "", "target", 0, &_Object, &flash_display_ShaderJob, 0}; static varinfo_t flash_display_ShaderJob_progress = {0x01, 0x00, 0x80, 0x16, "", "progress", 0, &_Number, &flash_display_ShaderJob, 0}; static classinfo_t _VerifyError = {0x03, 0x00, 0x88, 0x16, "", "VerifyError", 0, &_Error, interfaces: {0}}; static varinfo_t _VerifyError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_VerifyError, 0}; static classinfo_t flash_events_AsyncErrorEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "AsyncErrorEvent", 0, &flash_events_ErrorEvent, interfaces: {0}}; static methodinfo_t flash_events_AsyncErrorEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_AsyncErrorEvent, 0}; static varinfo_t flash_events_AsyncErrorEvent_error = {0x01, 0x00, 0x80, 0x16, "", "error", 0, &_Error, &flash_events_AsyncErrorEvent, 0}; static methodinfo_t flash_events_AsyncErrorEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_AsyncErrorEvent, 0}; static varinfo_t flash_events_AsyncErrorEvent_ASYNC_ERROR = {0x01, 0x00, 0x82, 0x16, "", "ASYNC_ERROR", 0, &_String, &flash_events_AsyncErrorEvent, 0}; static classinfo_t flash_net_SharedObject = {0x03, 0x00, 0x80, 0x16, "flash.net", "SharedObject", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_SharedObject_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_net_SharedObject, 0}; static varinfo_t flash_net_SharedObject_client = {0x01, 0x00, 0x80, 0x16, "", "client", 0, &_Object, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_setProperty = {0x02, 0x00, 0x80, 0x16, "", "setProperty", 0, &voidclass, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_flush = {0x02, 0x00, 0x80, 0x16, "", "flush", 0, &_String, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_connect = {0x02, 0x00, 0x80, 0x16, "", "connect", 0, &voidclass, &flash_net_SharedObject, 0}; static varinfo_t flash_net_SharedObject_size = {0x01, 0x00, 0x80, 0x16, "", "size", 0, &_uint, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_setDirty = {0x02, 0x00, 0x80, 0x16, "", "setDirty", 0, &voidclass, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_send = {0x02, 0x00, 0x80, 0x16, "", "send", 0, &voidclass, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_SharedObject, 0}; static varinfo_t flash_net_SharedObject_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &_Object, &flash_net_SharedObject, 0}; static varinfo_t flash_net_SharedObject_defaultObjectEncoding = {0x01, 0x00, 0x82, 0x16, "", "defaultObjectEncoding", 0, &_uint, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_getDiskUsage = {0x02, 0x00, 0x82, 0x16, "", "getDiskUsage", 0, &_int, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_getRemote = {0x02, 0x00, 0x82, 0x16, "", "getRemote", 0, &flash_net_SharedObject, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_deleteAll = {0x02, 0x00, 0x82, 0x16, "", "deleteAll", 0, &_int, &flash_net_SharedObject, 0}; static methodinfo_t flash_net_SharedObject_getLocal = {0x02, 0x00, 0x82, 0x16, "", "getLocal", 0, &flash_net_SharedObject, &flash_net_SharedObject, 0}; static classinfo_t _Namespace = {0x03, 0x00, 0x81, 0x16, "", "Namespace", 0, &_Object, interfaces: {0}}; static methodinfo_t _Namespace_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_String, &_Namespace, 0}; static methodinfo_t _Namespace_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_Namespace, 0}; static varinfo_t _Namespace_uri = {0x01, 0x00, 0x80, 0x16, "", "uri", 0, &_String, &_Namespace, 0}; static varinfo_t _Namespace_prefix = {0x01, 0x00, 0x80, 0x16, "", "prefix", 0, 0, &_Namespace, 0}; static varinfo_t _Namespace_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, 0, &_Namespace, 0}; static methodinfo_t flash_utils_setTimeout = {0x02, 0x00, 0x82, 0x16, "flash.utils", "setTimeout", 0, &_uint, 0, 0}; static classinfo_t flash_geom_Matrix3D = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Matrix3D", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_geom_Matrix3D_decompose = {0x02, 0x00, 0x80, 0x16, "", "decompose", 0, &__AS3___vec_Vector, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_pointAt = {0x02, 0x00, 0x80, 0x16, "", "pointAt", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_identity = {0x02, 0x00, 0x80, 0x16, "", "identity", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_transformVector = {0x02, 0x00, 0x80, 0x16, "", "transformVector", 0, &flash_geom_Vector3D, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_appendRotation = {0x02, 0x00, 0x80, 0x16, "", "appendRotation", 0, &voidclass, &flash_geom_Matrix3D, 0}; static varinfo_t flash_geom_Matrix3D_determinant = {0x01, 0x00, 0x80, 0x16, "", "determinant", 0, &_Number, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_prependRotation = {0x02, 0x00, 0x80, 0x16, "", "prependRotation", 0, &voidclass, &flash_geom_Matrix3D, 0}; static varinfo_t flash_geom_Matrix3D_position = {0x01, 0x00, 0x80, 0x16, "", "position", 0, &flash_geom_Vector3D, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_interpolateTo = {0x02, 0x00, 0x80, 0x16, "", "interpolateTo", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_appendScale = {0x02, 0x00, 0x80, 0x16, "", "appendScale", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_prepend = {0x02, 0x00, 0x80, 0x16, "", "prepend", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_recompose = {0x02, 0x00, 0x80, 0x16, "", "recompose", 0, &_Boolean, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_appendTranslation = {0x02, 0x00, 0x80, 0x16, "", "appendTranslation", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_invert = {0x02, 0x00, 0x80, 0x16, "", "invert", 0, &_Boolean, &flash_geom_Matrix3D, 0}; static varinfo_t flash_geom_Matrix3D_rawData = {0x01, 0x00, 0x80, 0x16, "", "rawData", 0, &__AS3___vec_Vector, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_prependTranslation = {0x02, 0x00, 0x80, 0x16, "", "prependTranslation", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_append = {0x02, 0x00, 0x80, 0x16, "", "append", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_geom_Matrix3D, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_prependScale = {0x02, 0x00, 0x80, 0x16, "", "prependScale", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_deltaTransformVector = {0x02, 0x00, 0x80, 0x16, "", "deltaTransformVector", 0, &flash_geom_Vector3D, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_transformVectors = {0x02, 0x00, 0x80, 0x16, "", "transformVectors", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_transpose = {0x02, 0x00, 0x80, 0x16, "", "transpose", 0, &voidclass, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_geom_Matrix3D_interpolate = {0x02, 0x00, 0x82, 0x16, "", "interpolate", 0, &flash_geom_Matrix3D, &flash_geom_Matrix3D, 0}; static methodinfo_t flash_sampler_pauseSampling = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "pauseSampling", 0, &voidclass, 0, 0}; static classinfo_t flash_system_Capabilities = {0x03, 0x00, 0x81, 0x16, "flash.system", "Capabilities", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_Capabilities_maxLevelIDC = {0x01, 0x00, 0x82, 0x16, "", "maxLevelIDC", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_isDebugger = {0x01, 0x00, 0x82, 0x16, "", "isDebugger", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasStreamingAudio = {0x01, 0x00, 0x82, 0x16, "", "hasStreamingAudio", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_screenColor = {0x01, 0x00, 0x82, 0x16, "", "screenColor", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasIME = {0x01, 0x00, 0x82, 0x16, "", "hasIME", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasEmbeddedVideo = {0x01, 0x00, 0x82, 0x16, "", "hasEmbeddedVideo", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasTLS = {0x01, 0x00, 0x82, 0x16, "", "hasTLS", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_isEmbeddedInAcrobat = {0x01, 0x00, 0x82, 0x16, "", "isEmbeddedInAcrobat", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasScreenPlayback = {0x01, 0x00, 0x82, 0x16, "", "hasScreenPlayback", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasVideoEncoder = {0x01, 0x00, 0x82, 0x16, "", "hasVideoEncoder", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasAudioEncoder = {0x01, 0x00, 0x82, 0x16, "", "hasAudioEncoder", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_pixelAspectRatio = {0x01, 0x00, 0x82, 0x16, "", "pixelAspectRatio", 0, &_Number, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasStreamingVideo = {0x01, 0x00, 0x82, 0x16, "", "hasStreamingVideo", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_screenResolutionX = {0x01, 0x00, 0x82, 0x16, "", "screenResolutionX", 0, &_Number, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasScreenBroadcast = {0x01, 0x00, 0x82, 0x16, "", "hasScreenBroadcast", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasAudio = {0x01, 0x00, 0x82, 0x16, "", "hasAudio", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_language = {0x01, 0x00, 0x82, 0x16, "", "language", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_manufacturer = {0x01, 0x00, 0x82, 0x16, "", "manufacturer", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasPrinting = {0x01, 0x00, 0x82, 0x16, "", "hasPrinting", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_os = {0x01, 0x00, 0x82, 0x16, "", "os", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_localFileReadDisable = {0x01, 0x00, 0x82, 0x16, "", "localFileReadDisable", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasMP3 = {0x01, 0x00, 0x82, 0x16, "", "hasMP3", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_avHardwareDisable = {0x01, 0x00, 0x82, 0x16, "", "avHardwareDisable", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_hasAccessibility = {0x01, 0x00, 0x82, 0x16, "", "hasAccessibility", 0, &_Boolean, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_version = {0x01, 0x00, 0x82, 0x16, "", "version", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_screenDPI = {0x01, 0x00, 0x82, 0x16, "", "screenDPI", 0, &_Number, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_playerType = {0x01, 0x00, 0x82, 0x16, "", "playerType", 0, &_String, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_screenResolutionY = {0x01, 0x00, 0x82, 0x16, "", "screenResolutionY", 0, &_Number, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities__internal = {0x01, 0x00, 0x82, 0x16, "", "_internal", 0, &_uint, &flash_system_Capabilities, 0}; static varinfo_t flash_system_Capabilities_serverString = {0x01, 0x00, 0x82, 0x16, "", "serverString", 0, &_String, &flash_system_Capabilities, 0}; static methodinfo_t flash_sampler_getSetterInvocationCount = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getSetterInvocationCount", 0, &_Number, 0, 0}; static methodinfo_t flash_sampler_getGetterInvocationCount = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getGetterInvocationCount", 0, &_Number, 0, 0}; static classinfo_t flash_filters_BlurFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "BlurFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_BlurFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_BlurFilter, 0}; static methodinfo_t flash_filters_BlurFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_BlurFilter, 0}; static varinfo_t flash_filters_BlurFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_BlurFilter, 0}; static varinfo_t flash_filters_BlurFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_BlurFilter, 0}; static methodinfo_t _isFinite = {0x02, 0x00, 0x82, 0x16, "", "isFinite", 0, &_Boolean, 0, 0}; static classinfo_t flash_media_Video = {0x03, 0x00, 0x80, 0x16, "flash.media", "Video", 0, &flash_display_DisplayObject, interfaces: {0}}; static methodinfo_t flash_media_Video_attachCamera = {0x02, 0x00, 0x80, 0x16, "", "attachCamera", 0, &voidclass, &flash_media_Video, 0}; static varinfo_t flash_media_Video_videoWidth = {0x01, 0x00, 0x80, 0x16, "", "videoWidth", 0, &_int, &flash_media_Video, 0}; static methodinfo_t flash_media_Video_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_media_Video, 0}; static varinfo_t flash_media_Video_deblocking = {0x01, 0x00, 0x80, 0x16, "", "deblocking", 0, &_int, &flash_media_Video, 0}; static varinfo_t flash_media_Video_videoHeight = {0x01, 0x00, 0x80, 0x16, "", "videoHeight", 0, &_int, &flash_media_Video, 0}; static methodinfo_t flash_media_Video_attachNetStream = {0x02, 0x00, 0x80, 0x16, "", "attachNetStream", 0, &voidclass, &flash_media_Video, 0}; static varinfo_t flash_media_Video_smoothing = {0x01, 0x00, 0x80, 0x16, "", "smoothing", 0, &_Boolean, &flash_media_Video, 0}; static classinfo_t flash_text_engine_TextLineCreationResult = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextLineCreationResult", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextLineCreationResult_EMERGENCY = {0x01, 0x00, 0x82, 0x16, "", "EMERGENCY", 0, &_String, &flash_text_engine_TextLineCreationResult, 0}; static varinfo_t flash_text_engine_TextLineCreationResult_COMPLETE = {0x01, 0x00, 0x82, 0x16, "", "COMPLETE", 0, &_String, &flash_text_engine_TextLineCreationResult, 0}; static varinfo_t flash_text_engine_TextLineCreationResult_SUCCESS = {0x01, 0x00, 0x82, 0x16, "", "SUCCESS", 0, &_String, &flash_text_engine_TextLineCreationResult, 0}; static varinfo_t flash_text_engine_TextLineCreationResult_INSUFFICIENT_WIDTH = {0x01, 0x00, 0x82, 0x16, "", "INSUFFICIENT_WIDTH", 0, &_String, &flash_text_engine_TextLineCreationResult, 0}; static classinfo_t _Error = {0x03, 0x00, 0x88, 0x16, "", "Error", 0, &_Object, interfaces: {0}}; static varinfo_t _Error_message = {0x01, 0x00, 0x80, 0x16, "", "message", 0, 0, &_Error, 0}; static varinfo_t _Error_errorID = {0x01, 0x00, 0x80, 0x16, "", "errorID", 0, &_int, &_Error, 0}; static methodinfo_t _Error_getStackTrace = {0x02, 0x00, 0x80, 0x16, "", "getStackTrace", 0, &_String, &_Error, 0}; static varinfo_t _Error_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, 0, &_Error, 0}; static varinfo_t _Error_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Error, 0}; static methodinfo_t _Error_getErrorMessage = {0x02, 0x00, 0x82, 0x16, "", "getErrorMessage", 0, &_String, &_Error, 0}; static methodinfo_t _Error_throwError = {0x02, 0x00, 0x82, 0x16, "", "throwError", 0, 0, &_Error, 0}; static classinfo_t flash_xml_XMLNode = {0x03, 0x00, 0x80, 0x16, "flash.xml", "XMLNode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_xml_XMLNode_childNodes = {0x01, 0x00, 0x80, 0x16, "", "childNodes", 0, &_Array, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_appendChild = {0x02, 0x00, 0x80, 0x16, "", "appendChild", 0, &voidclass, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_nextSibling = {0x01, 0x00, 0x80, 0x16, "", "nextSibling", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_nodeType = {0x01, 0x00, 0x80, 0x16, "", "nodeType", 0, &_uint, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_attributes = {0x01, 0x00, 0x80, 0x16, "", "attributes", 0, &_Object, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_firstChild = {0x01, 0x00, 0x80, 0x16, "", "firstChild", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_parentNode = {0x01, 0x00, 0x80, 0x16, "", "parentNode", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_prefix = {0x01, 0x00, 0x80, 0x16, "", "prefix", 0, &_String, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_localName = {0x01, 0x00, 0x80, 0x16, "", "localName", 0, &_String, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_nodeName = {0x01, 0x00, 0x80, 0x16, "", "nodeName", 0, &_String, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_getNamespaceForPrefix = {0x02, 0x00, 0x80, 0x16, "", "getNamespaceForPrefix", 0, &_String, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_insertBefore = {0x02, 0x00, 0x80, 0x16, "", "insertBefore", 0, &voidclass, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_lastChild = {0x01, 0x00, 0x80, 0x16, "", "lastChild", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_cloneNode = {0x02, 0x00, 0x80, 0x16, "", "cloneNode", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_removeNode = {0x02, 0x00, 0x80, 0x16, "", "removeNode", 0, &voidclass, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_namespaceURI = {0x01, 0x00, 0x80, 0x16, "", "namespaceURI", 0, &_String, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_previousSibling = {0x01, 0x00, 0x80, 0x16, "", "previousSibling", 0, &flash_xml_XMLNode, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_hasChildNodes = {0x02, 0x00, 0x80, 0x16, "", "hasChildNodes", 0, &_Boolean, &flash_xml_XMLNode, 0}; static methodinfo_t flash_xml_XMLNode_getPrefixForNamespace = {0x02, 0x00, 0x80, 0x16, "", "getPrefixForNamespace", 0, &_String, &flash_xml_XMLNode, 0}; static varinfo_t flash_xml_XMLNode_nodeValue = {0x01, 0x00, 0x80, 0x16, "", "nodeValue", 0, &_String, &flash_xml_XMLNode, 0}; static classinfo_t flash_net_URLVariables = {0x03, 0x00, 0x88, 0x16, "flash.net", "URLVariables", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_net_URLVariables_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_net_URLVariables, 0}; static methodinfo_t flash_net_URLVariables_decode = {0x02, 0x00, 0x80, 0x16, "", "decode", 0, &voidclass, &flash_net_URLVariables, 0}; static classinfo_t flash_display_LoaderInfo = {0x03, 0x00, 0x80, 0x16, "flash.display", "LoaderInfo", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_display_LoaderInfo_actionScriptVersion = {0x01, 0x00, 0x80, 0x16, "", "actionScriptVersion", 0, &_uint, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_contentType = {0x01, 0x00, 0x80, 0x16, "", "contentType", 0, &_String, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_sameDomain = {0x01, 0x00, 0x80, 0x16, "", "sameDomain", 0, &_Boolean, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_bytesTotal = {0x01, 0x00, 0x80, 0x16, "", "bytesTotal", 0, &_uint, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_loaderURL = {0x01, 0x00, 0x80, 0x16, "", "loaderURL", 0, &_String, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_int, &flash_display_LoaderInfo, 0}; static methodinfo_t flash_display_LoaderInfo_dispatchEvent = {0x02, 0x00, 0x80, 0x16, "", "dispatchEvent", 0, &_Boolean, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_int, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_frameRate = {0x01, 0x00, 0x80, 0x16, "", "frameRate", 0, &_Number, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_parameters = {0x01, 0x00, 0x80, 0x16, "", "parameters", 0, &_Object, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_bytesLoaded = {0x01, 0x00, 0x80, 0x16, "", "bytesLoaded", 0, &_uint, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_url = {0x01, 0x00, 0x80, 0x16, "", "url", 0, &_String, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_content = {0x01, 0x00, 0x80, 0x16, "", "content", 0, &flash_display_DisplayObject, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_swfVersion = {0x01, 0x00, 0x80, 0x16, "", "swfVersion", 0, &_uint, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_bytes = {0x01, 0x00, 0x80, 0x16, "", "bytes", 0, &flash_utils_ByteArray, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_loader = {0x01, 0x00, 0x80, 0x16, "", "loader", 0, &flash_display_Loader, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_applicationDomain = {0x01, 0x00, 0x80, 0x16, "", "applicationDomain", 0, &flash_system_ApplicationDomain, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_parentAllowsChild = {0x01, 0x00, 0x80, 0x16, "", "parentAllowsChild", 0, &_Boolean, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_childAllowsParent = {0x01, 0x00, 0x80, 0x16, "", "childAllowsParent", 0, &_Boolean, &flash_display_LoaderInfo, 0}; static varinfo_t flash_display_LoaderInfo_sharedEvents = {0x01, 0x00, 0x80, 0x16, "", "sharedEvents", 0, &flash_events_EventDispatcher, &flash_display_LoaderInfo, 0}; static methodinfo_t flash_display_LoaderInfo_getLoaderInfoByDefinition = {0x02, 0x00, 0x82, 0x16, "", "getLoaderInfoByDefinition", 0, &flash_display_LoaderInfo, &flash_display_LoaderInfo, 0}; static classinfo_t flash_sampler_Sample = {0x03, 0x00, 0x80, 0x16, "flash.sampler", "Sample", 0, &_Object, interfaces: {0}}; static varinfo_t flash_sampler_Sample_time = {0x01, 0x00, 0x80, 0x16, "", "time", 0, &_Number, &flash_sampler_Sample, 0}; static varinfo_t flash_sampler_Sample_stack = {0x01, 0x00, 0x80, 0x16, "", "stack", 0, &_Array, &flash_sampler_Sample, 0}; static classinfo_t flash_text_engine_DigitWidth = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "DigitWidth", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_DigitWidth_PROPORTIONAL = {0x01, 0x00, 0x82, 0x16, "", "PROPORTIONAL", 0, &_String, &flash_text_engine_DigitWidth, 0}; static varinfo_t flash_text_engine_DigitWidth_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_text_engine_DigitWidth, 0}; static varinfo_t flash_text_engine_DigitWidth_TABULAR = {0x01, 0x00, 0x82, 0x16, "", "TABULAR", 0, &_String, &flash_text_engine_DigitWidth, 0}; static classinfo_t flash_net_URLRequestMethod = {0x03, 0x00, 0x81, 0x16, "flash.net", "URLRequestMethod", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_URLRequestMethod_GET = {0x01, 0x00, 0x82, 0x16, "", "GET", 0, &_String, &flash_net_URLRequestMethod, 0}; static varinfo_t flash_net_URLRequestMethod_POST = {0x01, 0x00, 0x82, 0x16, "", "POST", 0, &_String, &flash_net_URLRequestMethod, 0}; static methodinfo_t adobe_utils_MMExecute = {0x02, 0x00, 0x82, 0x16, "adobe.utils", "MMExecute", 0, &_String, 0, 0}; static classinfo_t flash_system_System = {0x03, 0x00, 0x81, 0x16, "flash.system", "System", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_system_System_pause = {0x02, 0x00, 0x82, 0x16, "", "pause", 0, &voidclass, &flash_system_System, 0}; static varinfo_t flash_system_System_useCodePage = {0x01, 0x00, 0x82, 0x16, "", "useCodePage", 0, &_Boolean, &flash_system_System, 0}; static methodinfo_t flash_system_System_exit = {0x02, 0x00, 0x82, 0x16, "", "exit", 0, &voidclass, &flash_system_System, 0}; static methodinfo_t flash_system_System_setClipboard = {0x02, 0x00, 0x82, 0x16, "", "setClipboard", 0, &voidclass, &flash_system_System, 0}; static varinfo_t flash_system_System_totalMemory = {0x01, 0x00, 0x82, 0x16, "", "totalMemory", 0, &_uint, &flash_system_System, 0}; static methodinfo_t flash_system_System_gc = {0x02, 0x00, 0x82, 0x16, "", "gc", 0, &voidclass, &flash_system_System, 0}; static methodinfo_t flash_system_System_resume = {0x02, 0x00, 0x82, 0x16, "", "resume", 0, &voidclass, &flash_system_System, 0}; static varinfo_t flash_system_System_vmVersion = {0x01, 0x00, 0x82, 0x16, "", "vmVersion", 0, &_String, &flash_system_System, 0}; static varinfo_t flash_system_System_ime = {0x01, 0x00, 0x82, 0x16, "", "ime", 0, &flash_system_IME, &flash_system_System, 0}; static classinfo_t flash_filters_BitmapFilterQuality = {0x03, 0x00, 0x81, 0x16, "flash.filters", "BitmapFilterQuality", 0, &_Object, interfaces: {0}}; static varinfo_t flash_filters_BitmapFilterQuality_LOW = {0x01, 0x00, 0x82, 0x16, "", "LOW", 0, &_int, &flash_filters_BitmapFilterQuality, 0}; static varinfo_t flash_filters_BitmapFilterQuality_MEDIUM = {0x01, 0x00, 0x82, 0x16, "", "MEDIUM", 0, &_int, &flash_filters_BitmapFilterQuality, 0}; static varinfo_t flash_filters_BitmapFilterQuality_HIGH = {0x01, 0x00, 0x82, 0x16, "", "HIGH", 0, &_int, &flash_filters_BitmapFilterQuality, 0}; static classinfo_t flash_display_DisplayObjectContainer = {0x03, 0x00, 0x80, 0x16, "flash.display", "DisplayObjectContainer", 0, &flash_display_InteractiveObject, interfaces: {0}}; static methodinfo_t flash_display_DisplayObjectContainer_addChild = {0x02, 0x00, 0x80, 0x16, "", "addChild", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_getObjectsUnderPoint = {0x02, 0x00, 0x80, 0x16, "", "getObjectsUnderPoint", 0, &_Array, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_removeChildAt = {0x02, 0x00, 0x80, 0x16, "", "removeChildAt", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_swapChildren = {0x02, 0x00, 0x80, 0x16, "", "swapChildren", 0, &voidclass, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_areInaccessibleObjectsUnderPoint = {0x02, 0x00, 0x80, 0x16, "", "areInaccessibleObjectsUnderPoint", 0, &_Boolean, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_setChildIndex = {0x02, 0x00, 0x80, 0x16, "", "setChildIndex", 0, &voidclass, &flash_display_DisplayObjectContainer, 0}; static varinfo_t flash_display_DisplayObjectContainer_numChildren = {0x01, 0x00, 0x80, 0x16, "", "numChildren", 0, &_int, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_getChildIndex = {0x02, 0x00, 0x80, 0x16, "", "getChildIndex", 0, &_int, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_getChildAt = {0x02, 0x00, 0x80, 0x16, "", "getChildAt", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_removeChild = {0x02, 0x00, 0x80, 0x16, "", "removeChild", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_addChildAt = {0x02, 0x00, 0x80, 0x16, "", "addChildAt", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_contains = {0x02, 0x00, 0x80, 0x16, "", "contains", 0, &_Boolean, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_getChildByName = {0x02, 0x00, 0x80, 0x16, "", "getChildByName", 0, &flash_display_DisplayObject, &flash_display_DisplayObjectContainer, 0}; static methodinfo_t flash_display_DisplayObjectContainer_swapChildrenAt = {0x02, 0x00, 0x80, 0x16, "", "swapChildrenAt", 0, &voidclass, &flash_display_DisplayObjectContainer, 0}; static varinfo_t flash_display_DisplayObjectContainer_mouseChildren = {0x01, 0x00, 0x80, 0x16, "", "mouseChildren", 0, &_Boolean, &flash_display_DisplayObjectContainer, 0}; static varinfo_t flash_display_DisplayObjectContainer_tabChildren = {0x01, 0x00, 0x80, 0x16, "", "tabChildren", 0, &_Boolean, &flash_display_DisplayObjectContainer, 0}; static varinfo_t flash_display_DisplayObjectContainer_textSnapshot = {0x01, 0x00, 0x80, 0x16, "", "textSnapshot", 0, &flash_text_TextSnapshot, &flash_display_DisplayObjectContainer, 0}; static classinfo_t flash_system_LoaderContext = {0x03, 0x00, 0x80, 0x16, "flash.system", "LoaderContext", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_LoaderContext_checkPolicyFile = {0x01, 0x00, 0x80, 0x16, "", "checkPolicyFile", 0, &_Boolean, &flash_system_LoaderContext, 0}; static varinfo_t flash_system_LoaderContext_securityDomain = {0x01, 0x00, 0x80, 0x16, "", "securityDomain", 0, &flash_system_SecurityDomain, &flash_system_LoaderContext, 0}; static varinfo_t flash_system_LoaderContext_applicationDomain = {0x01, 0x00, 0x80, 0x16, "", "applicationDomain", 0, &flash_system_ApplicationDomain, &flash_system_LoaderContext, 0}; static methodinfo_t flash_utils_clearTimeout = {0x02, 0x00, 0x82, 0x16, "flash.utils", "clearTimeout", 0, &voidclass, 0, 0}; static methodinfo_t _isXMLName = {0x02, 0x00, 0x82, 0x16, "", "isXMLName", 0, &_Boolean, 0, 0}; static classinfo_t flash_xml_XMLNodeType = {0x03, 0x00, 0x81, 0x16, "flash.xml", "XMLNodeType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_xml_XMLNodeType_PROCESSING_INSTRUCTION_NODE = {0x01, 0x00, 0x82, 0x16, "", "PROCESSING_INSTRUCTION_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_CDATA_NODE = {0x01, 0x00, 0x82, 0x16, "", "CDATA_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_DOCUMENT_TYPE_NODE = {0x01, 0x00, 0x82, 0x16, "", "DOCUMENT_TYPE_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_COMMENT_NODE = {0x01, 0x00, 0x82, 0x16, "", "COMMENT_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_XML_DECLARATION = {0x01, 0x00, 0x82, 0x16, "", "XML_DECLARATION", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_TEXT_NODE = {0x01, 0x00, 0x82, 0x16, "", "TEXT_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static varinfo_t flash_xml_XMLNodeType_ELEMENT_NODE = {0x01, 0x00, 0x82, 0x16, "", "ELEMENT_NODE", 0, &_uint, &flash_xml_XMLNodeType, 0}; static classinfo_t flash_events_ErrorEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "ErrorEvent", 0, &flash_events_TextEvent, interfaces: {0}}; static methodinfo_t flash_events_ErrorEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_ErrorEvent, 0}; static methodinfo_t flash_events_ErrorEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_ErrorEvent, 0}; static varinfo_t flash_events_ErrorEvent_ERROR = {0x01, 0x00, 0x82, 0x16, "", "ERROR", 0, &_String, &flash_events_ErrorEvent, 0}; static classinfo_t flash_utils_IDataOutput = {0x03, 0x00, 0x90, 0x16, "flash.utils", "IDataOutput", 0, 0, interfaces: {0}}; static methodinfo_t flash_utils_IDataOutput_writeUnsignedInt = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeUnsignedInt", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeInt = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeInt", 0, &voidclass, &flash_utils_IDataOutput, 0}; static varinfo_t flash_utils_IDataOutput_objectEncoding = {0x01, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "objectEncoding", 0, &_uint, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeUTFBytes = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeUTFBytes", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeObject = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeObject", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeMultiByte = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeMultiByte", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeShort = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeShort", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeFloat = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeFloat", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeUTF = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeUTF", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeByte = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeByte", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeBoolean = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeBoolean", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeDouble = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeDouble", 0, &voidclass, &flash_utils_IDataOutput, 0}; static methodinfo_t flash_utils_IDataOutput_writeBytes = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "writeBytes", 0, &voidclass, &flash_utils_IDataOutput, 0}; static varinfo_t flash_utils_IDataOutput_endian = {0x01, 0x00, 0x80, 0x08, "flash.utils:IDataOutput", "endian", 0, &_String, &flash_utils_IDataOutput, 0}; static classinfo_t flash_geom_Utils3D = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Utils3D", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_geom_Utils3D_projectVectors = {0x02, 0x00, 0x82, 0x16, "", "projectVectors", 0, &voidclass, &flash_geom_Utils3D, 0}; static methodinfo_t flash_geom_Utils3D_projectVector = {0x02, 0x00, 0x82, 0x16, "", "projectVector", 0, &flash_geom_Vector3D, &flash_geom_Utils3D, 0}; static methodinfo_t flash_geom_Utils3D_pointTowards = {0x02, 0x00, 0x82, 0x16, "", "pointTowards", 0, &flash_geom_Matrix3D, &flash_geom_Utils3D, 0}; static classinfo_t flash_events_TextEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "TextEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_TextEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_TextEvent, 0}; static varinfo_t flash_events_TextEvent_text = {0x01, 0x00, 0x80, 0x16, "", "text", 0, &_String, &flash_events_TextEvent, 0}; static methodinfo_t flash_events_TextEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_TextEvent, 0}; static varinfo_t flash_events_TextEvent_LINK = {0x01, 0x00, 0x82, 0x16, "", "LINK", 0, &_String, &flash_events_TextEvent, 0}; static varinfo_t flash_events_TextEvent_TEXT_INPUT = {0x01, 0x00, 0x82, 0x16, "", "TEXT_INPUT", 0, &_String, &flash_events_TextEvent, 0}; static classinfo_t flash_utils_Proxy = {0x03, 0x00, 0x80, 0x16, "flash.utils", "Proxy", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_utils_Proxy_callProperty = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "callProperty", 0, 0, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_setProperty = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "setProperty", 0, &voidclass, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_getProperty = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "getProperty", 0, 0, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_nextName = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "nextName", 0, &_String, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_nextNameIndex = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "nextNameIndex", 0, &_int, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_hasProperty = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "hasProperty", 0, &_Boolean, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_deleteProperty = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "deleteProperty", 0, &_Boolean, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_getDescendants = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "getDescendants", 0, 0, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_isAttribute = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "isAttribute", 0, &_Boolean, &flash_utils_Proxy, 0}; static methodinfo_t flash_utils_Proxy_nextValue = {0x02, 0x00, 0x80, 0x08, "http://www.adobe.com/2006/actionscript/flash/proxy", "nextValue", 0, 0, &flash_utils_Proxy, 0}; static classinfo_t flash_text_engine_FontPosture = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "FontPosture", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_FontPosture_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_text_engine_FontPosture, 0}; static varinfo_t flash_text_engine_FontPosture_ITALIC = {0x01, 0x00, 0x82, 0x16, "", "ITALIC", 0, &_String, &flash_text_engine_FontPosture, 0}; static classinfo_t flash_xml_XMLDocument = {0x03, 0x00, 0x80, 0x16, "flash.xml", "XMLDocument", 0, &flash_xml_XMLNode, interfaces: {0}}; static varinfo_t flash_xml_XMLDocument_docTypeDecl = {0x01, 0x00, 0x80, 0x16, "", "docTypeDecl", 0, &_Object, &flash_xml_XMLDocument, 0}; static varinfo_t flash_xml_XMLDocument_idMap = {0x01, 0x00, 0x80, 0x16, "", "idMap", 0, &_Object, &flash_xml_XMLDocument, 0}; static methodinfo_t flash_xml_XMLDocument_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_xml_XMLDocument, 0}; static varinfo_t flash_xml_XMLDocument_xmlDecl = {0x01, 0x00, 0x80, 0x16, "", "xmlDecl", 0, &_Object, &flash_xml_XMLDocument, 0}; static methodinfo_t flash_xml_XMLDocument_createElement = {0x02, 0x00, 0x80, 0x16, "", "createElement", 0, &flash_xml_XMLNode, &flash_xml_XMLDocument, 0}; static varinfo_t flash_xml_XMLDocument_ignoreWhite = {0x01, 0x00, 0x80, 0x16, "", "ignoreWhite", 0, &_Boolean, &flash_xml_XMLDocument, 0}; static methodinfo_t flash_xml_XMLDocument_createTextNode = {0x02, 0x00, 0x80, 0x16, "", "createTextNode", 0, &flash_xml_XMLNode, &flash_xml_XMLDocument, 0}; static methodinfo_t flash_xml_XMLDocument_parseXML = {0x02, 0x00, 0x80, 0x16, "", "parseXML", 0, &voidclass, &flash_xml_XMLDocument, 0}; static classinfo_t flash_display_ShaderInput = {0x03, 0x00, 0x89, 0x16, "flash.display", "ShaderInput", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ShaderInput_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_int, &flash_display_ShaderInput, 0}; static varinfo_t flash_display_ShaderInput_input = {0x01, 0x00, 0x80, 0x16, "", "input", 0, &_Object, &flash_display_ShaderInput, 0}; static varinfo_t flash_display_ShaderInput_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_int, &flash_display_ShaderInput, 0}; static varinfo_t flash_display_ShaderInput_index = {0x01, 0x00, 0x80, 0x16, "", "index", 0, &_int, &flash_display_ShaderInput, 0}; static varinfo_t flash_display_ShaderInput_channels = {0x01, 0x00, 0x80, 0x16, "", "channels", 0, &_int, &flash_display_ShaderInput, 0}; static classinfo_t flash_text_engine_TextBlock = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextBlock", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_text_engine_TextBlock_createTextLine = {0x02, 0x00, 0x80, 0x16, "", "createTextLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_bidiLevel = {0x01, 0x00, 0x80, 0x16, "", "bidiLevel", 0, &_int, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_getTextLineAtCharIndex = {0x02, 0x00, 0x80, 0x16, "", "getTextLineAtCharIndex", 0, &flash_text_engine_TextLine, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_lastLine = {0x01, 0x00, 0x80, 0x16, "", "lastLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_findPreviousWordBoundary = {0x02, 0x00, 0x80, 0x16, "", "findPreviousWordBoundary", 0, &_int, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_findPreviousAtomBoundary = {0x02, 0x00, 0x80, 0x16, "", "findPreviousAtomBoundary", 0, &_int, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_baselineZero = {0x01, 0x00, 0x80, 0x16, "", "baselineZero", 0, &_String, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_applyNonLinearFontScaling = {0x01, 0x00, 0x80, 0x16, "", "applyNonLinearFontScaling", 0, &_Boolean, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_firstLine = {0x01, 0x00, 0x80, 0x16, "", "firstLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_textJustifier = {0x01, 0x00, 0x80, 0x16, "", "textJustifier", 0, &flash_text_engine_TextJustifier, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_releaseLines = {0x02, 0x00, 0x80, 0x16, "", "releaseLines", 0, &voidclass, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_firstInvalidLine = {0x01, 0x00, 0x80, 0x16, "", "firstInvalidLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_baselineFontSize = {0x01, 0x00, 0x80, 0x16, "", "baselineFontSize", 0, &_Number, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_lineRotation = {0x01, 0x00, 0x80, 0x16, "", "lineRotation", 0, &_String, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_userData = {0x01, 0x00, 0x80, 0x16, "", "userData", 0, 0, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_content = {0x01, 0x00, 0x80, 0x16, "", "content", 0, &flash_text_engine_ContentElement, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_textLineCreationResult = {0x01, 0x00, 0x80, 0x16, "", "textLineCreationResult", 0, &_String, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_baselineFontDescription = {0x01, 0x00, 0x80, 0x16, "", "baselineFontDescription", 0, &flash_text_engine_FontDescription, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_findNextAtomBoundary = {0x02, 0x00, 0x80, 0x16, "", "findNextAtomBoundary", 0, &_int, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_findNextWordBoundary = {0x02, 0x00, 0x80, 0x16, "", "findNextWordBoundary", 0, &_int, &flash_text_engine_TextBlock, 0}; static varinfo_t flash_text_engine_TextBlock_tabStops = {0x01, 0x00, 0x80, 0x16, "", "tabStops", 0, &__AS3___vec_Vector, &flash_text_engine_TextBlock, 0}; static methodinfo_t flash_text_engine_TextBlock_dump = {0x02, 0x00, 0x80, 0x16, "", "dump", 0, &_String, &flash_text_engine_TextBlock, 0}; static classinfo_t flash_ui_MouseCursor = {0x03, 0x00, 0x81, 0x16, "flash.ui", "MouseCursor", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_MouseCursor_BUTTON = {0x01, 0x00, 0x82, 0x16, "", "BUTTON", 0, &_String, &flash_ui_MouseCursor, 0}; static varinfo_t flash_ui_MouseCursor_AUTO = {0x01, 0x00, 0x82, 0x16, "", "AUTO", 0, &_String, &flash_ui_MouseCursor, 0}; static varinfo_t flash_ui_MouseCursor_ARROW = {0x01, 0x00, 0x82, 0x16, "", "ARROW", 0, &_String, &flash_ui_MouseCursor, 0}; static varinfo_t flash_ui_MouseCursor_IBEAM = {0x01, 0x00, 0x82, 0x16, "", "IBEAM", 0, &_String, &flash_ui_MouseCursor, 0}; static varinfo_t flash_ui_MouseCursor_HAND = {0x01, 0x00, 0x82, 0x16, "", "HAND", 0, &_String, &flash_ui_MouseCursor, 0}; static namespace_t flash_utils_flash_proxy_constant_ns = {0x08, "http://www.adobe.com/2006/actionscript/flash/proxy"}; static constant_t flash_utils_flash_proxy_constant = {type: 8, &flash_utils_flash_proxy_constant_ns}; static varinfo_t flash_utils_flash_proxy = {0x01, 0x00, 0xa2, 0x16, "flash.utils", "flash_proxy", 0, 0, 0, &flash_utils_flash_proxy_constant}; static classinfo_t flash_display_MorphShape = {0x03, 0x00, 0x81, 0x16, "flash.display", "MorphShape", 0, &flash_display_DisplayObject, interfaces: {0}}; static classinfo_t flash_text_TextDisplayMode = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextDisplayMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextDisplayMode_CRT = {0x01, 0x00, 0x82, 0x16, "", "CRT", 0, &_String, &flash_text_TextDisplayMode, 0}; static varinfo_t flash_text_TextDisplayMode_LCD = {0x01, 0x00, 0x82, 0x16, "", "LCD", 0, &_String, &flash_text_TextDisplayMode, 0}; static varinfo_t flash_text_TextDisplayMode_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_text_TextDisplayMode, 0}; static classinfo_t flash_net_URLLoaderDataFormat = {0x03, 0x00, 0x81, 0x16, "flash.net", "URLLoaderDataFormat", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_URLLoaderDataFormat_VARIABLES = {0x01, 0x00, 0x82, 0x16, "", "VARIABLES", 0, &_String, &flash_net_URLLoaderDataFormat, 0}; static varinfo_t flash_net_URLLoaderDataFormat_BINARY = {0x01, 0x00, 0x82, 0x16, "", "BINARY", 0, &_String, &flash_net_URLLoaderDataFormat, 0}; static varinfo_t flash_net_URLLoaderDataFormat_TEXT = {0x01, 0x00, 0x82, 0x16, "", "TEXT", 0, &_String, &flash_net_URLLoaderDataFormat, 0}; static classinfo_t flash_display_StageQuality = {0x03, 0x00, 0x81, 0x16, "flash.display", "StageQuality", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_StageQuality_LOW = {0x01, 0x00, 0x82, 0x16, "", "LOW", 0, &_String, &flash_display_StageQuality, 0}; static varinfo_t flash_display_StageQuality_MEDIUM = {0x01, 0x00, 0x82, 0x16, "", "MEDIUM", 0, &_String, &flash_display_StageQuality, 0}; static varinfo_t flash_display_StageQuality_HIGH = {0x01, 0x00, 0x82, 0x16, "", "HIGH", 0, &_String, &flash_display_StageQuality, 0}; static varinfo_t flash_display_StageQuality_BEST = {0x01, 0x00, 0x82, 0x16, "", "BEST", 0, &_String, &flash_display_StageQuality, 0}; static classinfo_t flash_display_Sprite = {0x03, 0x00, 0x80, 0x16, "flash.display", "Sprite", 0, &flash_display_DisplayObjectContainer, interfaces: {0}}; static methodinfo_t flash_display_Sprite_stopDrag = {0x02, 0x00, 0x80, 0x16, "", "stopDrag", 0, &voidclass, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_buttonMode = {0x01, 0x00, 0x80, 0x16, "", "buttonMode", 0, &_Boolean, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_soundTransform = {0x01, 0x00, 0x80, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_hitArea = {0x01, 0x00, 0x80, 0x16, "", "hitArea", 0, &flash_display_Sprite, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_useHandCursor = {0x01, 0x00, 0x80, 0x16, "", "useHandCursor", 0, &_Boolean, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_graphics = {0x01, 0x00, 0x80, 0x16, "", "graphics", 0, &flash_display_Graphics, &flash_display_Sprite, 0}; static methodinfo_t flash_display_Sprite_startDrag = {0x02, 0x00, 0x80, 0x16, "", "startDrag", 0, &voidclass, &flash_display_Sprite, 0}; static varinfo_t flash_display_Sprite_dropTarget = {0x01, 0x00, 0x80, 0x16, "", "dropTarget", 0, &flash_display_DisplayObject, &flash_display_Sprite, 0}; static classinfo_t flash_ui_Keyboard = {0x03, 0x00, 0x81, 0x16, "flash.ui", "Keyboard", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_Keyboard_PAGE_DOWN = {0x01, 0x00, 0x82, 0x16, "", "PAGE_DOWN", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F4 = {0x01, 0x00, 0x82, 0x16, "", "F4", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_ENTER = {0x01, 0x00, 0x82, 0x16, "", "ENTER", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_CONTROL = {0x01, 0x00, 0x82, 0x16, "", "CONTROL", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F7 = {0x01, 0x00, 0x82, 0x16, "", "F7", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F14 = {0x01, 0x00, 0x82, 0x16, "", "F14", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_3 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_3", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_DECIMAL = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_DECIMAL", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_CAPS_LOCK = {0x01, 0x00, 0x82, 0x16, "", "CAPS_LOCK", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_SHIFT = {0x01, 0x00, 0x82, 0x16, "", "SHIFT", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_TAB = {0x01, 0x00, 0x82, 0x16, "", "TAB", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_0 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_0", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_END = {0x01, 0x00, 0x82, 0x16, "", "END", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_1 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_1", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_LEFT = {0x01, 0x00, 0x82, 0x16, "", "LEFT", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F8 = {0x01, 0x00, 0x82, 0x16, "", "F8", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F9 = {0x01, 0x00, 0x82, 0x16, "", "F9", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_numLock = {0x01, 0x00, 0x82, 0x16, "", "numLock", 0, &_Boolean, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F2 = {0x01, 0x00, 0x82, 0x16, "", "F2", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_4 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_4", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F3 = {0x01, 0x00, 0x82, 0x16, "", "F3", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_2 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_2", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_HOME = {0x01, 0x00, 0x82, 0x16, "", "HOME", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_7 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_7", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_6 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_6", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F6 = {0x01, 0x00, 0x82, 0x16, "", "F6", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F5 = {0x01, 0x00, 0x82, 0x16, "", "F5", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_INSERT = {0x01, 0x00, 0x82, 0x16, "", "INSERT", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_ESCAPE = {0x01, 0x00, 0x82, 0x16, "", "ESCAPE", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F1 = {0x01, 0x00, 0x82, 0x16, "", "F1", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_SUBTRACT = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_SUBTRACT", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_8 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_8", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_SPACE = {0x01, 0x00, 0x82, 0x16, "", "SPACE", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_BACKSPACE = {0x01, 0x00, 0x82, 0x16, "", "BACKSPACE", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_DELETE = {0x01, 0x00, 0x82, 0x16, "", "DELETE", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_MULTIPLY = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_MULTIPLY", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F13 = {0x01, 0x00, 0x82, 0x16, "", "F13", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_ADD = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_ADD", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_9 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_9", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F12 = {0x01, 0x00, 0x82, 0x16, "", "F12", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "RIGHT", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F15 = {0x01, 0x00, 0x82, 0x16, "", "F15", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F11 = {0x01, 0x00, 0x82, 0x16, "", "F11", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_UP = {0x01, 0x00, 0x82, 0x16, "", "UP", 0, &_uint, &flash_ui_Keyboard, 0}; static methodinfo_t flash_ui_Keyboard_isAccessible = {0x02, 0x00, 0x82, 0x16, "", "isAccessible", 0, &_Boolean, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_DOWN = {0x01, 0x00, 0x82, 0x16, "", "DOWN", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_capsLock = {0x01, 0x00, 0x82, 0x16, "", "capsLock", 0, &_Boolean, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_PAGE_UP = {0x01, 0x00, 0x82, 0x16, "", "PAGE_UP", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_ENTER = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_ENTER", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_F10 = {0x01, 0x00, 0x82, 0x16, "", "F10", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_5 = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_5", 0, &_uint, &flash_ui_Keyboard, 0}; static varinfo_t flash_ui_Keyboard_NUMPAD_DIVIDE = {0x01, 0x00, 0x82, 0x16, "", "NUMPAD_DIVIDE", 0, &_uint, &flash_ui_Keyboard, 0}; static classinfo_t flash_filters_DisplacementMapFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "DisplacementMapFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_DisplacementMapFilter_scaleY = {0x01, 0x00, 0x80, 0x16, "", "scaleY", 0, &_Number, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_mapPoint = {0x01, 0x00, 0x80, 0x16, "", "mapPoint", 0, &flash_geom_Point, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_scaleX = {0x01, 0x00, 0x80, 0x16, "", "scaleX", 0, &_Number, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_mapBitmap = {0x01, 0x00, 0x80, 0x16, "", "mapBitmap", 0, &flash_display_BitmapData, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_mode = {0x01, 0x00, 0x80, 0x16, "", "mode", 0, &_String, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_componentX = {0x01, 0x00, 0x80, 0x16, "", "componentX", 0, &_uint, &flash_filters_DisplacementMapFilter, 0}; static methodinfo_t flash_filters_DisplacementMapFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_filters_DisplacementMapFilter, 0}; static varinfo_t flash_filters_DisplacementMapFilter_componentY = {0x01, 0x00, 0x80, 0x16, "", "componentY", 0, &_uint, &flash_filters_DisplacementMapFilter, 0}; static methodinfo_t flash_utils_escapeMultiByte = {0x02, 0x00, 0x82, 0x16, "flash.utils", "escapeMultiByte", 0, &_String, 0, 0}; static methodinfo_t adobe_utils_MMEndCommand = {0x02, 0x00, 0x82, 0x16, "adobe.utils", "MMEndCommand", 0, &voidclass, 0, 0}; static classinfo_t flash_display_GradientType = {0x03, 0x00, 0x81, 0x16, "flash.display", "GradientType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_GradientType_LINEAR = {0x01, 0x00, 0x82, 0x16, "", "LINEAR", 0, &_String, &flash_display_GradientType, 0}; static varinfo_t flash_display_GradientType_RADIAL = {0x01, 0x00, 0x82, 0x16, "", "RADIAL", 0, &_String, &flash_display_GradientType, 0}; static classinfo_t flash_media_ID3Info = {0x03, 0x00, 0x89, 0x16, "flash.media", "ID3Info", 0, &_Object, interfaces: {0}}; static varinfo_t flash_media_ID3Info_comment = {0x01, 0x00, 0x80, 0x16, "", "comment", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_year = {0x01, 0x00, 0x80, 0x16, "", "year", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_track = {0x01, 0x00, 0x80, 0x16, "", "track", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_artist = {0x01, 0x00, 0x80, 0x16, "", "artist", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_songName = {0x01, 0x00, 0x80, 0x16, "", "songName", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_genre = {0x01, 0x00, 0x80, 0x16, "", "genre", 0, &_String, &flash_media_ID3Info, 0}; static varinfo_t flash_media_ID3Info_album = {0x01, 0x00, 0x80, 0x16, "", "album", 0, &_String, &flash_media_ID3Info, 0}; static classinfo_t flash_display_GraphicsSolidFill = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsSolidFill", 0, &_Object, interfaces: {&flash_display_IGraphicsFill, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsSolidFill_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_display_GraphicsSolidFill, 0}; static varinfo_t flash_display_GraphicsSolidFill_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_display_GraphicsSolidFill, 0}; static classinfo_t flash_filters_ColorMatrixFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "ColorMatrixFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_ColorMatrixFilter_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &_Array, &flash_filters_ColorMatrixFilter, 0}; static methodinfo_t flash_filters_ColorMatrixFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_ColorMatrixFilter, 0}; static classinfo_t flash_net_NetStreamPlayTransitions = {0x03, 0x00, 0x80, 0x16, "flash.net", "NetStreamPlayTransitions", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_NetStreamPlayTransitions_RESET = {0x01, 0x00, 0x82, 0x16, "", "RESET", 0, 0, &flash_net_NetStreamPlayTransitions, 0}; static varinfo_t flash_net_NetStreamPlayTransitions_APPEND = {0x01, 0x00, 0x82, 0x16, "", "APPEND", 0, 0, &flash_net_NetStreamPlayTransitions, 0}; static varinfo_t flash_net_NetStreamPlayTransitions_SWAP = {0x01, 0x00, 0x82, 0x16, "", "SWAP", 0, 0, &flash_net_NetStreamPlayTransitions, 0}; static varinfo_t flash_net_NetStreamPlayTransitions_SWITCH = {0x01, 0x00, 0x82, 0x16, "", "SWITCH", 0, 0, &flash_net_NetStreamPlayTransitions, 0}; static varinfo_t flash_net_NetStreamPlayTransitions_STOP = {0x01, 0x00, 0x82, 0x16, "", "STOP", 0, 0, &flash_net_NetStreamPlayTransitions, 0}; static classinfo_t flash_media_SoundCodec = {0x03, 0x00, 0x81, 0x16, "flash.media", "SoundCodec", 0, &_Object, interfaces: {0}}; static varinfo_t flash_media_SoundCodec_NELLYMOSER = {0x01, 0x00, 0x82, 0x16, "", "NELLYMOSER", 0, &_String, &flash_media_SoundCodec, 0}; static varinfo_t flash_media_SoundCodec_SPEEX = {0x01, 0x00, 0x82, 0x16, "", "SPEEX", 0, &_String, &flash_media_SoundCodec, 0}; static classinfo_t flash_net_ObjectEncoding = {0x03, 0x00, 0x81, 0x16, "flash.net", "ObjectEncoding", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_ObjectEncoding_dynamicPropertyWriter = {0x01, 0x00, 0x82, 0x16, "", "dynamicPropertyWriter", 0, &flash_net_IDynamicPropertyWriter, &flash_net_ObjectEncoding, 0}; static varinfo_t flash_net_ObjectEncoding_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_uint, &flash_net_ObjectEncoding, 0}; static varinfo_t flash_net_ObjectEncoding_AMF0 = {0x01, 0x00, 0x82, 0x16, "", "AMF0", 0, &_uint, &flash_net_ObjectEncoding, 0}; static varinfo_t flash_net_ObjectEncoding_AMF3 = {0x01, 0x00, 0x82, 0x16, "", "AMF3", 0, &_uint, &flash_net_ObjectEncoding, 0}; static classinfo_t flash_text_engine_GroupElement = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "GroupElement", 0, &flash_text_engine_ContentElement, interfaces: {0}}; static methodinfo_t flash_text_engine_GroupElement_groupElements = {0x02, 0x00, 0x80, 0x16, "", "groupElements", 0, &flash_text_engine_GroupElement, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_splitTextElement = {0x02, 0x00, 0x80, 0x16, "", "splitTextElement", 0, &flash_text_engine_TextElement, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_mergeTextElements = {0x02, 0x00, 0x80, 0x16, "", "mergeTextElements", 0, &flash_text_engine_TextElement, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_getElementAtCharIndex = {0x02, 0x00, 0x80, 0x16, "", "getElementAtCharIndex", 0, &flash_text_engine_ContentElement, &flash_text_engine_GroupElement, 0}; static varinfo_t flash_text_engine_GroupElement_elementCount = {0x01, 0x00, 0x80, 0x16, "", "elementCount", 0, &_int, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_setElements = {0x02, 0x00, 0x80, 0x16, "", "setElements", 0, &voidclass, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_getElementAt = {0x02, 0x00, 0x80, 0x16, "", "getElementAt", 0, &flash_text_engine_ContentElement, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_ungroupElements = {0x02, 0x00, 0x80, 0x16, "", "ungroupElements", 0, &voidclass, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_replaceElements = {0x02, 0x00, 0x80, 0x16, "", "replaceElements", 0, &__AS3___vec_Vector, &flash_text_engine_GroupElement, 0}; static methodinfo_t flash_text_engine_GroupElement_getElementIndex = {0x02, 0x00, 0x80, 0x16, "", "getElementIndex", 0, &_int, &flash_text_engine_GroupElement, 0}; static methodinfo_t _parseInt = {0x02, 0x00, 0x82, 0x16, "", "parseInt", 0, &_Number, 0, 0}; static classinfo_t _QName = {0x03, 0x00, 0x81, 0x16, "", "QName", 0, &_Object, interfaces: {0}}; static varinfo_t _QName_localName = {0x01, 0x00, 0x80, 0x16, "", "localName", 0, &_String, &_QName, 0}; static methodinfo_t _QName_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_QName, &_QName, 0}; static methodinfo_t _QName_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_QName, 0}; static varinfo_t _QName_uri = {0x01, 0x00, 0x80, 0x16, "", "uri", 0, 0, &_QName, 0}; static varinfo_t _QName_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, 0, &_QName, 0}; static classinfo_t _UninitializedError = {0x03, 0x00, 0x88, 0x16, "", "UninitializedError", 0, &_Error, interfaces: {0}}; static varinfo_t _UninitializedError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_UninitializedError, 0}; static classinfo_t _Date = {0x03, 0x00, 0x89, 0x16, "", "Date", 0, &_Object, interfaces: {0}}; static methodinfo_t _Date_getTimezoneOffset = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getTimezoneOffset", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getTime = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getTime", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCMilliseconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCMilliseconds", 0, &_Number, &_Date, 0}; static varinfo_t _Date_month = {0x01, 0x00, 0x80, 0x16, "", "month", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_Date, 0}; static methodinfo_t _Date_getHours = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getHours", 0, &_Number, &_Date, 0}; static varinfo_t _Date_date = {0x01, 0x00, 0x80, 0x16, "", "date", 0, &_Number, &_Date, 0}; static varinfo_t _Date_milliseconds = {0x01, 0x00, 0x80, 0x16, "", "milliseconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setSeconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setSeconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getDate = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getDate", 0, &_Number, &_Date, 0}; static varinfo_t _Date_hoursUTC = {0x01, 0x00, 0x80, 0x16, "", "hoursUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCDate = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCDate", 0, &_Number, &_Date, 0}; static varinfo_t _Date_timezoneOffset = {0x01, 0x00, 0x80, 0x16, "", "timezoneOffset", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setTime = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setTime", 0, &_Number, &_Date, 0}; static varinfo_t _Date_millisecondsUTC = {0x01, 0x00, 0x80, 0x16, "", "millisecondsUTC", 0, &_Number, &_Date, 0}; static varinfo_t _Date_minutes = {0x01, 0x00, 0x80, 0x16, "", "minutes", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCHours = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCHours", 0, &_Number, &_Date, 0}; static varinfo_t _Date_minutesUTC = {0x01, 0x00, 0x80, 0x16, "", "minutesUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toLocaleTimeString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLocaleTimeString", 0, &_String, &_Date, 0}; static varinfo_t _Date_fullYearUTC = {0x01, 0x00, 0x80, 0x16, "", "fullYearUTC", 0, &_Number, &_Date, 0}; static varinfo_t _Date_time = {0x01, 0x00, 0x80, 0x16, "", "time", 0, &_Number, &_Date, 0}; static varinfo_t _Date_monthUTC = {0x01, 0x00, 0x80, 0x16, "", "monthUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCMilliseconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCMilliseconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toDateString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toDateString", 0, &_String, &_Date, 0}; static methodinfo_t _Date_getMonth = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getMonth", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setMinutes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setMinutes", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toLocaleDateString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLocaleDateString", 0, &_String, &_Date, 0}; static varinfo_t _Date_fullYear = {0x01, 0x00, 0x80, 0x16, "", "fullYear", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCFullYear = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCFullYear", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getSeconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getSeconds", 0, &_Number, &_Date, 0}; static varinfo_t _Date_dateUTC = {0x01, 0x00, 0x80, 0x16, "", "dateUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getMilliseconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getMilliseconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCMinutes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCMinutes", 0, &_Number, &_Date, 0}; static varinfo_t _Date_day = {0x01, 0x00, 0x80, 0x16, "", "day", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCSeconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCSeconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCDate = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCDate", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCMonth = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCMonth", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_Number, &_Date, 0}; static varinfo_t _Date_seconds = {0x01, 0x00, 0x80, 0x16, "", "seconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCMinutes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCMinutes", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setDate = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setDate", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getFullYear = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getFullYear", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setFullYear = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setFullYear", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setHours = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setHours", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setMonth = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setMonth", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCSeconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCSeconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getMinutes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getMinutes", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toLocaleString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLocaleString", 0, &_String, &_Date, 0}; static methodinfo_t _Date_toUTCString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toUTCString", 0, &_String, &_Date, 0}; static varinfo_t _Date_dayUTC = {0x01, 0x00, 0x80, 0x16, "", "dayUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getDay = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getDay", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCMonth = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCMonth", 0, &_Number, &_Date, 0}; static varinfo_t _Date_hours = {0x01, 0x00, 0x80, 0x16, "", "hours", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCDay = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCDay", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_setUTCFullYear = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setUTCFullYear", 0, &_Number, &_Date, 0}; static varinfo_t _Date_secondsUTC = {0x01, 0x00, 0x80, 0x16, "", "secondsUTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_toTimeString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toTimeString", 0, &_String, &_Date, 0}; static methodinfo_t _Date_setMilliseconds = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setMilliseconds", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_getUTCHours = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "getUTCHours", 0, &_Number, &_Date, 0}; static varinfo_t _Date_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Date, 0}; static methodinfo_t _Date_UTC = {0x02, 0x00, 0x82, 0x16, "", "UTC", 0, &_Number, &_Date, 0}; static methodinfo_t _Date_parse = {0x02, 0x00, 0x82, 0x16, "", "parse", 0, &_Number, &_Date, 0}; static classinfo_t flash_text_StyleSheet = {0x03, 0x00, 0x88, 0x16, "flash.text", "StyleSheet", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_text_StyleSheet_styleNames = {0x01, 0x00, 0x80, 0x16, "", "styleNames", 0, &_Array, &flash_text_StyleSheet, 0}; static methodinfo_t flash_text_StyleSheet_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_text_StyleSheet, 0}; static methodinfo_t flash_text_StyleSheet_transform = {0x02, 0x00, 0x80, 0x16, "", "transform", 0, &flash_text_TextFormat, &flash_text_StyleSheet, 0}; static methodinfo_t flash_text_StyleSheet_getStyle = {0x02, 0x00, 0x80, 0x16, "", "getStyle", 0, &_Object, &flash_text_StyleSheet, 0}; static methodinfo_t flash_text_StyleSheet_parseCSS = {0x02, 0x00, 0x80, 0x16, "", "parseCSS", 0, &voidclass, &flash_text_StyleSheet, 0}; static methodinfo_t flash_text_StyleSheet_setStyle = {0x02, 0x00, 0x80, 0x16, "", "setStyle", 0, &voidclass, &flash_text_StyleSheet, 0}; static classinfo_t flash_display_ActionScriptVersion = {0x03, 0x00, 0x81, 0x16, "flash.display", "ActionScriptVersion", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ActionScriptVersion_ACTIONSCRIPT3 = {0x01, 0x00, 0x82, 0x16, "", "ACTIONSCRIPT3", 0, &_uint, &flash_display_ActionScriptVersion, 0}; static varinfo_t flash_display_ActionScriptVersion_ACTIONSCRIPT2 = {0x01, 0x00, 0x82, 0x16, "", "ACTIONSCRIPT2", 0, &_uint, &flash_display_ActionScriptVersion, 0}; static classinfo_t flash_text_engine_EastAsianJustifier = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "EastAsianJustifier", 0, &flash_text_engine_TextJustifier, interfaces: {0}}; static varinfo_t flash_text_engine_EastAsianJustifier_justificationStyle = {0x01, 0x00, 0x80, 0x16, "", "justificationStyle", 0, &_String, &flash_text_engine_EastAsianJustifier, 0}; static methodinfo_t flash_text_engine_EastAsianJustifier_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_text_engine_TextJustifier, &flash_text_engine_EastAsianJustifier, 0}; static classinfo_t _String = {0x03, 0x00, 0x81, 0x16, "", "String", 0, &_Object, interfaces: {0}}; static methodinfo_t _String_indexOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "indexOf", 0, &_int, &_String, 0}; static methodinfo_t _String_replace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "replace", 0, &_String, &_String, 0}; static methodinfo_t _String_lastIndexOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "lastIndexOf", 0, &_int, &_String, 0}; static methodinfo_t _String_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_String, &_String, 0}; static methodinfo_t _String_concat = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "concat", 0, &_String, &_String, 0}; static methodinfo_t _String_substr = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "substr", 0, &_String, &_String, 0}; static methodinfo_t _String_slice = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "slice", 0, &_String, &_String, 0}; static methodinfo_t _String_search = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "search", 0, &_int, &_String, 0}; static methodinfo_t _String_toLocaleUpperCase = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLocaleUpperCase", 0, &_String, &_String, 0}; static methodinfo_t _String_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_String, 0}; static methodinfo_t _String_toUpperCase = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toUpperCase", 0, &_String, &_String, 0}; static methodinfo_t _String_charAt = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "charAt", 0, &_String, &_String, 0}; static methodinfo_t _String_match = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "match", 0, &_Array, &_String, 0}; static methodinfo_t _String_charCodeAt = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "charCodeAt", 0, &_Number, &_String, 0}; static methodinfo_t _String_substring = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "substring", 0, &_String, &_String, 0}; static methodinfo_t _String_localeCompare = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "localeCompare", 0, &_int, &_String, 0}; static methodinfo_t _String_split = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "split", 0, &_Array, &_String, 0}; static methodinfo_t _String_toLocaleLowerCase = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLocaleLowerCase", 0, &_String, &_String, 0}; static varinfo_t _String_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_int, &_String, 0}; static methodinfo_t _String_toLowerCase = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toLowerCase", 0, &_String, &_String, 0}; static methodinfo_t _String_fromCharCode = {0x02, 0x00, 0x82, 0x08, "http://adobe.com/AS3/2006/builtin", "fromCharCode", 0, &_String, &_String, 0}; static classinfo_t flash_media_SoundChannel = {0x03, 0x00, 0x81, 0x16, "flash.media", "SoundChannel", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_media_SoundChannel_leftPeak = {0x01, 0x00, 0x80, 0x16, "", "leftPeak", 0, &_Number, &flash_media_SoundChannel, 0}; static methodinfo_t flash_media_SoundChannel_stop = {0x02, 0x00, 0x80, 0x16, "", "stop", 0, &voidclass, &flash_media_SoundChannel, 0}; static varinfo_t flash_media_SoundChannel_position = {0x01, 0x00, 0x80, 0x16, "", "position", 0, &_Number, &flash_media_SoundChannel, 0}; static varinfo_t flash_media_SoundChannel_soundTransform = {0x01, 0x00, 0x80, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_media_SoundChannel, 0}; static varinfo_t flash_media_SoundChannel_rightPeak = {0x01, 0x00, 0x80, 0x16, "", "rightPeak", 0, &_Number, &flash_media_SoundChannel, 0}; static classinfo_t flash_desktop_Clipboard = {0x03, 0x00, 0x80, 0x16, "flash.desktop", "Clipboard", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_desktop_Clipboard_setDataHandler = {0x02, 0x00, 0x80, 0x16, "", "setDataHandler", 0, &_Boolean, &flash_desktop_Clipboard, 0}; static methodinfo_t flash_desktop_Clipboard_setData = {0x02, 0x00, 0x80, 0x16, "", "setData", 0, &_Boolean, &flash_desktop_Clipboard, 0}; static varinfo_t flash_desktop_Clipboard_formats = {0x01, 0x00, 0x80, 0x16, "", "formats", 0, &_Array, &flash_desktop_Clipboard, 0}; static methodinfo_t flash_desktop_Clipboard_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_desktop_Clipboard, 0}; static methodinfo_t flash_desktop_Clipboard_getData = {0x02, 0x00, 0x80, 0x16, "", "getData", 0, &_Object, &flash_desktop_Clipboard, 0}; static methodinfo_t flash_desktop_Clipboard_hasFormat = {0x02, 0x00, 0x80, 0x16, "", "hasFormat", 0, &_Boolean, &flash_desktop_Clipboard, 0}; static methodinfo_t flash_desktop_Clipboard_clearData = {0x02, 0x00, 0x80, 0x16, "", "clearData", 0, &voidclass, &flash_desktop_Clipboard, 0}; static varinfo_t flash_desktop_Clipboard_generalClipboard = {0x01, 0x00, 0x82, 0x16, "", "generalClipboard", 0, &flash_desktop_Clipboard, &flash_desktop_Clipboard, 0}; static classinfo_t flash_display_IBitmapDrawable = {0x03, 0x00, 0x90, 0x16, "flash.display", "IBitmapDrawable", 0, 0, interfaces: {0}}; static classinfo_t _TypeError = {0x03, 0x00, 0x88, 0x16, "", "TypeError", 0, &_Error, interfaces: {0}}; static varinfo_t _TypeError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_TypeError, 0}; static classinfo_t _int = {0x03, 0x00, 0x81, 0x16, "", "int", 0, &_Object, interfaces: {0}}; static methodinfo_t _int_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_int, &_int, 0}; static methodinfo_t _int_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_int, 0}; static methodinfo_t _int_toExponential = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toExponential", 0, &_String, &_int, 0}; static methodinfo_t _int_toFixed = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toFixed", 0, &_String, &_int, 0}; static methodinfo_t _int_toPrecision = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toPrecision", 0, &_String, &_int, 0}; static varinfo_t _int_MAX_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MAX_VALUE", 0, &_int, &_int, 0}; static varinfo_t _int_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_int, 0}; static varinfo_t _int_MIN_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MIN_VALUE", 0, &_int, &_int, 0}; static classinfo_t flash_display_Scene = {0x03, 0x00, 0x81, 0x16, "flash.display", "Scene", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_Scene_numFrames = {0x01, 0x00, 0x80, 0x16, "", "numFrames", 0, &_int, &flash_display_Scene, 0}; static varinfo_t flash_display_Scene_labels = {0x01, 0x00, 0x80, 0x16, "", "labels", 0, &_Array, &flash_display_Scene, 0}; static varinfo_t flash_display_Scene_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_display_Scene, 0}; static classinfo_t flash_text_engine_FontMetrics = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "FontMetrics", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_FontMetrics_superscriptOffset = {0x01, 0x00, 0x80, 0x16, "", "superscriptOffset", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_underlineThickness = {0x01, 0x00, 0x80, 0x16, "", "underlineThickness", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_subscriptScale = {0x01, 0x00, 0x80, 0x16, "", "subscriptScale", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_strikethroughOffset = {0x01, 0x00, 0x80, 0x16, "", "strikethroughOffset", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_emBox = {0x01, 0x00, 0x80, 0x16, "", "emBox", 0, &flash_geom_Rectangle, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_strikethroughThickness = {0x01, 0x00, 0x80, 0x16, "", "strikethroughThickness", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_superscriptScale = {0x01, 0x00, 0x80, 0x16, "", "superscriptScale", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_subscriptOffset = {0x01, 0x00, 0x80, 0x16, "", "subscriptOffset", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static varinfo_t flash_text_engine_FontMetrics_underlineOffset = {0x01, 0x00, 0x80, 0x16, "", "underlineOffset", 0, &_Number, &flash_text_engine_FontMetrics, 0}; static classinfo_t flash_utils_IExternalizable = {0x03, 0x00, 0x90, 0x16, "flash.utils", "IExternalizable", 0, 0, interfaces: {0}}; static methodinfo_t flash_utils_IExternalizable_readExternal = {0x02, 0x00, 0x80, 0x08, "flash.utils:IExternalizable", "readExternal", 0, &voidclass, &flash_utils_IExternalizable, 0}; static methodinfo_t flash_utils_IExternalizable_writeExternal = {0x02, 0x00, 0x80, 0x08, "flash.utils:IExternalizable", "writeExternal", 0, &voidclass, &flash_utils_IExternalizable, 0}; static classinfo_t __AS3___vec_Vector = {0x03, 0x00, 0x89, 0x16, "__AS3__.vec", "Vector", 0, &_Object, interfaces: {0}}; static classinfo_t flash_filters_GradientBevelFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "GradientBevelFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_GradientBevelFilter_strength = {0x01, 0x00, 0x80, 0x16, "", "strength", 0, &_Number, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_angle = {0x01, 0x00, 0x80, 0x16, "", "angle", 0, &_Number, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_knockout = {0x01, 0x00, 0x80, 0x16, "", "knockout", 0, &_Boolean, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_alphas = {0x01, 0x00, 0x80, 0x16, "", "alphas", 0, &_Array, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_ratios = {0x01, 0x00, 0x80, 0x16, "", "ratios", 0, &_Array, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_colors = {0x01, 0x00, 0x80, 0x16, "", "colors", 0, &_Array, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_GradientBevelFilter, 0}; static varinfo_t flash_filters_GradientBevelFilter_distance = {0x01, 0x00, 0x80, 0x16, "", "distance", 0, &_Number, &flash_filters_GradientBevelFilter, 0}; static methodinfo_t flash_filters_GradientBevelFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_GradientBevelFilter, 0}; static classinfo_t flash_text_TextRun = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextRun", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextRun_beginIndex = {0x01, 0x00, 0x80, 0x16, "", "beginIndex", 0, &_int, &flash_text_TextRun, 0}; static varinfo_t flash_text_TextRun_endIndex = {0x01, 0x00, 0x80, 0x16, "", "endIndex", 0, &_int, &flash_text_TextRun, 0}; static varinfo_t flash_text_TextRun_textFormat = {0x01, 0x00, 0x80, 0x16, "", "textFormat", 0, &flash_text_TextFormat, &flash_text_TextRun, 0}; static classinfo_t flash_text_TextColorType = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextColorType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextColorType_DARK_COLOR = {0x01, 0x00, 0x82, 0x16, "", "DARK_COLOR", 0, &_String, &flash_text_TextColorType, 0}; static varinfo_t flash_text_TextColorType_LIGHT_COLOR = {0x01, 0x00, 0x82, 0x16, "", "LIGHT_COLOR", 0, &_String, &flash_text_TextColorType, 0}; static methodinfo_t flash_sampler_getSampleCount = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getSampleCount", 0, &_Number, 0, 0}; static classinfo_t flash_net_URLRequestHeader = {0x03, 0x00, 0x81, 0x16, "flash.net", "URLRequestHeader", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_URLRequestHeader_value = {0x01, 0x00, 0x80, 0x16, "", "value", 0, &_String, &flash_net_URLRequestHeader, 0}; static varinfo_t flash_net_URLRequestHeader_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_net_URLRequestHeader, 0}; static methodinfo_t flash_profiler_showRedrawRegions = {0x02, 0x00, 0x82, 0x16, "flash.profiler", "showRedrawRegions", 0, &voidclass, 0, 0}; static classinfo_t flash_display_ShaderData = {0x03, 0x00, 0x89, 0x16, "flash.display", "ShaderData", 0, &_Object, interfaces: {0}}; static classinfo_t flash_text_engine_TextLine = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextLine", 0, &flash_display_DisplayObjectContainer, interfaces: {0}}; static varinfo_t flash_text_engine_TextLine_previousLine = {0x01, 0x00, 0x80, 0x16, "", "previousLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_validity = {0x01, 0x00, 0x80, 0x16, "", "validity", 0, &_String, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockBeginIndex = {0x02, 0x00, 0x80, 0x16, "", "getAtomTextBlockBeginIndex", 0, &_int, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomWordBoundaryOnLeft = {0x02, 0x00, 0x80, 0x16, "", "getAtomWordBoundaryOnLeft", 0, &_Boolean, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomTextRotation = {0x02, 0x00, 0x80, 0x16, "", "getAtomTextRotation", 0, &_String, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_textHeight = {0x01, 0x00, 0x80, 0x16, "", "textHeight", 0, &_Number, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomCenter = {0x02, 0x00, 0x80, 0x16, "", "getAtomCenter", 0, &_Number, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomBounds = {0x02, 0x00, 0x80, 0x16, "", "getAtomBounds", 0, &flash_geom_Rectangle, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_mirrorRegions = {0x01, 0x00, 0x80, 0x16, "", "mirrorRegions", 0, &__AS3___vec_Vector, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_rawTextLength = {0x01, 0x00, 0x80, 0x16, "", "rawTextLength", 0, &_int, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_userData = {0x01, 0x00, 0x80, 0x16, "", "userData", 0, 0, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_textWidth = {0x01, 0x00, 0x80, 0x16, "", "textWidth", 0, &_Number, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_textBlock = {0x01, 0x00, 0x80, 0x16, "", "textBlock", 0, &flash_text_engine_TextBlock, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_textBlockBeginIndex = {0x01, 0x00, 0x80, 0x16, "", "textBlockBeginIndex", 0, &_int, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_unjustifiedTextWidth = {0x01, 0x00, 0x80, 0x16, "", "unjustifiedTextWidth", 0, &_Number, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_ascent = {0x01, 0x00, 0x80, 0x16, "", "ascent", 0, &_Number, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getBaselinePosition = {0x02, 0x00, 0x80, 0x16, "", "getBaselinePosition", 0, &_Number, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_specifiedWidth = {0x01, 0x00, 0x80, 0x16, "", "specifiedWidth", 0, &_Number, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getMirrorRegion = {0x02, 0x00, 0x80, 0x16, "", "getMirrorRegion", 0, &flash_text_engine_TextLineMirrorRegion, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomGraphic = {0x02, 0x00, 0x80, 0x16, "", "getAtomGraphic", 0, &flash_display_DisplayObject, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_hasGraphicElement = {0x01, 0x00, 0x80, 0x16, "", "hasGraphicElement", 0, &_Boolean, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_flushAtomData = {0x02, 0x00, 0x80, 0x16, "", "flushAtomData", 0, &voidclass, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_dump = {0x02, 0x00, 0x80, 0x16, "", "dump", 0, &_String, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_nextLine = {0x01, 0x00, 0x80, 0x16, "", "nextLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtCharIndex = {0x02, 0x00, 0x80, 0x16, "", "getAtomIndexAtCharIndex", 0, &_int, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomTextBlockEndIndex = {0x02, 0x00, 0x80, 0x16, "", "getAtomTextBlockEndIndex", 0, &_int, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_atomCount = {0x01, 0x00, 0x80, 0x16, "", "atomCount", 0, &_int, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_descent = {0x01, 0x00, 0x80, 0x16, "", "descent", 0, &_Number, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomBidiLevel = {0x02, 0x00, 0x80, 0x16, "", "getAtomBidiLevel", 0, &_int, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_text_engine_TextLine_getAtomIndexAtPoint = {0x02, 0x00, 0x80, 0x16, "", "getAtomIndexAtPoint", 0, &_int, &flash_text_engine_TextLine, 0}; static varinfo_t flash_text_engine_TextLine_MAX_LINE_WIDTH = {0x01, 0x00, 0x82, 0x16, "", "MAX_LINE_WIDTH", 0, &_int, &flash_text_engine_TextLine, 0}; static methodinfo_t flash_sampler_getSamples = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getSamples", 0, &_Object, 0, 0}; static classinfo_t flash_net_URLRequest = {0x03, 0x00, 0x81, 0x16, "flash.net", "URLRequest", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_URLRequest_contentType = {0x01, 0x00, 0x80, 0x16, "", "contentType", 0, &_String, &flash_net_URLRequest, 0}; static varinfo_t flash_net_URLRequest_url = {0x01, 0x00, 0x80, 0x16, "", "url", 0, &_String, &flash_net_URLRequest, 0}; static varinfo_t flash_net_URLRequest_requestHeaders = {0x01, 0x00, 0x80, 0x16, "", "requestHeaders", 0, &_Array, &flash_net_URLRequest, 0}; static varinfo_t flash_net_URLRequest_method = {0x01, 0x00, 0x80, 0x16, "", "method", 0, &_String, &flash_net_URLRequest, 0}; static varinfo_t flash_net_URLRequest_digest = {0x01, 0x00, 0x80, 0x16, "", "digest", 0, &_String, &flash_net_URLRequest, 0}; static varinfo_t flash_net_URLRequest_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &_Object, &flash_net_URLRequest, 0}; static classinfo_t _URIError = {0x03, 0x00, 0x88, 0x16, "", "URIError", 0, &_Error, interfaces: {0}}; static varinfo_t _URIError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_URIError, 0}; static methodinfo_t flash_net_getClassByAlias = {0x02, 0x00, 0x82, 0x16, "flash.net", "getClassByAlias", 0, &_Class, 0, 0}; static classinfo_t flash_display_ShaderParameter = {0x03, 0x00, 0x89, 0x16, "flash.display", "ShaderParameter", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ShaderParameter_value = {0x01, 0x00, 0x80, 0x16, "", "value", 0, &_Array, &flash_display_ShaderParameter, 0}; static varinfo_t flash_display_ShaderParameter_index = {0x01, 0x00, 0x80, 0x16, "", "index", 0, &_int, &flash_display_ShaderParameter, 0}; static varinfo_t flash_display_ShaderParameter_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_display_ShaderParameter, 0}; static classinfo_t flash_filters_BitmapFilterType = {0x03, 0x00, 0x81, 0x16, "flash.filters", "BitmapFilterType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_filters_BitmapFilterType_FULL = {0x01, 0x00, 0x82, 0x16, "", "FULL", 0, &_String, &flash_filters_BitmapFilterType, 0}; static varinfo_t flash_filters_BitmapFilterType_INNER = {0x01, 0x00, 0x82, 0x16, "", "INNER", 0, &_String, &flash_filters_BitmapFilterType, 0}; static varinfo_t flash_filters_BitmapFilterType_OUTER = {0x01, 0x00, 0x82, 0x16, "", "OUTER", 0, &_String, &flash_filters_BitmapFilterType, 0}; static classinfo_t _SecurityError = {0x03, 0x00, 0x88, 0x16, "", "SecurityError", 0, &_Error, interfaces: {0}}; static varinfo_t _SecurityError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_SecurityError, 0}; static classinfo_t flash_utils_IDataInput = {0x03, 0x00, 0x90, 0x16, "flash.utils", "IDataInput", 0, 0, interfaces: {0}}; static methodinfo_t flash_utils_IDataInput_readUTF = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readUTF", 0, &_String, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readByte = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readByte", 0, &_int, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readUTFBytes = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readUTFBytes", 0, &_String, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readShort = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readShort", 0, &_int, &flash_utils_IDataInput, 0}; static varinfo_t flash_utils_IDataInput_objectEncoding = {0x01, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "objectEncoding", 0, &_uint, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readUnsignedInt = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readUnsignedInt", 0, &_uint, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readDouble = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readDouble", 0, &_Number, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readBytes = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readBytes", 0, &voidclass, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readUnsignedByte = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readUnsignedByte", 0, &_uint, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readMultiByte = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readMultiByte", 0, &_String, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readInt = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readInt", 0, &_int, &flash_utils_IDataInput, 0}; static varinfo_t flash_utils_IDataInput_bytesAvailable = {0x01, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "bytesAvailable", 0, &_uint, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readUnsignedShort = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readUnsignedShort", 0, &_uint, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readObject = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readObject", 0, 0, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readFloat = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readFloat", 0, &_Number, &flash_utils_IDataInput, 0}; static varinfo_t flash_utils_IDataInput_endian = {0x01, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "endian", 0, &_String, &flash_utils_IDataInput, 0}; static methodinfo_t flash_utils_IDataInput_readBoolean = {0x02, 0x00, 0x80, 0x08, "flash.utils:IDataInput", "readBoolean", 0, &_Boolean, &flash_utils_IDataInput, 0}; static classinfo_t flash_events_IEventDispatcher = {0x03, 0x00, 0x90, 0x16, "flash.events", "IEventDispatcher", 0, 0, interfaces: {0}}; static methodinfo_t flash_events_IEventDispatcher_willTrigger = {0x02, 0x00, 0x80, 0x08, "flash.events:IEventDispatcher", "willTrigger", 0, &_Boolean, &flash_events_IEventDispatcher, 0}; static methodinfo_t flash_events_IEventDispatcher_removeEventListener = {0x02, 0x00, 0x80, 0x08, "flash.events:IEventDispatcher", "removeEventListener", 0, &voidclass, &flash_events_IEventDispatcher, 0}; static methodinfo_t flash_events_IEventDispatcher_hasEventListener = {0x02, 0x00, 0x80, 0x08, "flash.events:IEventDispatcher", "hasEventListener", 0, &_Boolean, &flash_events_IEventDispatcher, 0}; static methodinfo_t flash_events_IEventDispatcher_addEventListener = {0x02, 0x00, 0x80, 0x08, "flash.events:IEventDispatcher", "addEventListener", 0, &voidclass, &flash_events_IEventDispatcher, 0}; static methodinfo_t flash_events_IEventDispatcher_dispatchEvent = {0x02, 0x00, 0x80, 0x08, "flash.events:IEventDispatcher", "dispatchEvent", 0, &_Boolean, &flash_events_IEventDispatcher, 0}; static classinfo_t _Class = {0x03, 0x00, 0x88, 0x16, "", "Class", 0, &_Object, interfaces: {0}}; static varinfo_t _Class_prototype = {0x01, 0x00, 0x80, 0x16, "", "prototype", 0, 0, &_Class, 0}; static varinfo_t _Class_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Class, 0}; static classinfo_t flash_geom_Rectangle = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Rectangle", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_Rectangle_top = {0x01, 0x00, 0x80, 0x16, "", "top", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_intersection = {0x02, 0x00, 0x80, 0x16, "", "intersection", 0, &flash_geom_Rectangle, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_intersects = {0x02, 0x00, 0x80, 0x16, "", "intersects", 0, &_Boolean, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_containsPoint = {0x02, 0x00, 0x80, 0x16, "", "containsPoint", 0, &_Boolean, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_setEmpty = {0x02, 0x00, 0x80, 0x16, "", "setEmpty", 0, &voidclass, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_topLeft = {0x01, 0x00, 0x80, 0x16, "", "topLeft", 0, &flash_geom_Point, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_containsRect = {0x02, 0x00, 0x80, 0x16, "", "containsRect", 0, &_Boolean, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_isEmpty = {0x02, 0x00, 0x80, 0x16, "", "isEmpty", 0, &_Boolean, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_equals = {0x02, 0x00, 0x80, 0x16, "", "equals", 0, &_Boolean, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_Number, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_left = {0x01, 0x00, 0x80, 0x16, "", "left", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_inflate = {0x02, 0x00, 0x80, 0x16, "", "inflate", 0, &voidclass, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_inflatePoint = {0x02, 0x00, 0x80, 0x16, "", "inflatePoint", 0, &voidclass, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_offsetPoint = {0x02, 0x00, 0x80, 0x16, "", "offsetPoint", 0, &voidclass, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_x = {0x01, 0x00, 0x80, 0x16, "", "x", 0, &_Number, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_size = {0x01, 0x00, 0x80, 0x16, "", "size", 0, &flash_geom_Point, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_bottomRight = {0x01, 0x00, 0x80, 0x16, "", "bottomRight", 0, &flash_geom_Point, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_right = {0x01, 0x00, 0x80, 0x16, "", "right", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_contains = {0x02, 0x00, 0x80, 0x16, "", "contains", 0, &_Boolean, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_union = {0x02, 0x00, 0x80, 0x16, "", "union", 0, &flash_geom_Rectangle, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_bottom = {0x01, 0x00, 0x80, 0x16, "", "bottom", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_geom_Rectangle, &flash_geom_Rectangle, 0}; static varinfo_t flash_geom_Rectangle_y = {0x01, 0x00, 0x80, 0x16, "", "y", 0, &_Number, &flash_geom_Rectangle, 0}; static methodinfo_t flash_geom_Rectangle_offset = {0x02, 0x00, 0x80, 0x16, "", "offset", 0, &voidclass, &flash_geom_Rectangle, 0}; static classinfo_t flash_events_SecurityErrorEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "SecurityErrorEvent", 0, &flash_events_ErrorEvent, interfaces: {0}}; static methodinfo_t flash_events_SecurityErrorEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_SecurityErrorEvent, 0}; static methodinfo_t flash_events_SecurityErrorEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_SecurityErrorEvent, 0}; static varinfo_t flash_events_SecurityErrorEvent_SECURITY_ERROR = {0x01, 0x00, 0x82, 0x16, "", "SECURITY_ERROR", 0, &_String, &flash_events_SecurityErrorEvent, 0}; static classinfo_t flash_net_IDynamicPropertyWriter = {0x03, 0x00, 0x90, 0x16, "flash.net", "IDynamicPropertyWriter", 0, 0, interfaces: {0}}; static methodinfo_t flash_net_IDynamicPropertyWriter_writeDynamicProperties = {0x02, 0x00, 0x80, 0x08, "flash.net:IDynamicPropertyWriter", "writeDynamicProperties", 0, &voidclass, &flash_net_IDynamicPropertyWriter, 0}; static classinfo_t flash_display_InterpolationMethod = {0x03, 0x00, 0x81, 0x16, "flash.display", "InterpolationMethod", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_InterpolationMethod_RGB = {0x01, 0x00, 0x82, 0x16, "", "RGB", 0, &_String, &flash_display_InterpolationMethod, 0}; static varinfo_t flash_display_InterpolationMethod_LINEAR_RGB = {0x01, 0x00, 0x82, 0x16, "", "LINEAR_RGB", 0, &_String, &flash_display_InterpolationMethod, 0}; static classinfo_t _Object = {0x03, 0x00, 0x88, 0x16, "", "Object", 0, 0, interfaces: {0}}; static methodinfo_t _Object_propertyIsEnumerable = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "propertyIsEnumerable", 0, &_Boolean, &_Object, 0}; static methodinfo_t _Object_isPrototypeOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "isPrototypeOf", 0, &_Boolean, &_Object, 0}; static methodinfo_t _Object_hasOwnProperty = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasOwnProperty", 0, &_Boolean, &_Object, 0}; static methodinfo_t _Object_init = {0x02, 0x00, 0x82, 0x17, "", "init", 0, 0, &_Object, 0}; static varinfo_t _Object_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Object, 0}; static methodinfo_t _Object__setPropertyIsEnumerable = {0x02, 0x00, 0x82, 0x1a, "", "_setPropertyIsEnumerable", 0, &voidclass, &_Object, 0}; static methodinfo_t _Object__dontEnumPrototype = {0x02, 0x00, 0x82, 0x1a, "", "_dontEnumPrototype", 0, &voidclass, &_Object, 0}; static classinfo_t flash_errors_EOFError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "EOFError", 0, &flash_errors_IOError, interfaces: {0}}; static classinfo_t flash_net_NetStream = {0x03, 0x00, 0x80, 0x16, "flash.net", "NetStream", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_NetStream_videoCodec = {0x01, 0x00, 0x80, 0x16, "", "videoCodec", 0, &_uint, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_info = {0x01, 0x00, 0x80, 0x16, "", "info", 0, &flash_net_NetStreamInfo, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_attachCamera = {0x02, 0x00, 0x80, 0x16, "", "attachCamera", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_farNonce = {0x01, 0x00, 0x80, 0x16, "", "farNonce", 0, &_String, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_pause = {0x02, 0x00, 0x80, 0x16, "", "pause", 0, &voidclass, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_onPeerConnect = {0x02, 0x00, 0x80, 0x16, "", "onPeerConnect", 0, &_Boolean, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_client = {0x01, 0x00, 0x80, 0x16, "", "client", 0, &_Object, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_resume = {0x02, 0x00, 0x80, 0x16, "", "resume", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_liveDelay = {0x01, 0x00, 0x80, 0x16, "", "liveDelay", 0, &_Number, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_peerStreams = {0x01, 0x00, 0x80, 0x16, "", "peerStreams", 0, &_Array, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_bytesLoaded = {0x01, 0x00, 0x80, 0x16, "", "bytesLoaded", 0, &_uint, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_receiveVideo = {0x02, 0x00, 0x80, 0x16, "", "receiveVideo", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_maxPauseBufferTime = {0x01, 0x00, 0x80, 0x16, "", "maxPauseBufferTime", 0, &_Number, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_play2 = {0x02, 0x00, 0x80, 0x16, "", "play2", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_audioCodec = {0x01, 0x00, 0x80, 0x16, "", "audioCodec", 0, &_uint, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_receiveVideoFPS = {0x02, 0x00, 0x80, 0x16, "", "receiveVideoFPS", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_bytesTotal = {0x01, 0x00, 0x80, 0x16, "", "bytesTotal", 0, &_uint, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_farID = {0x01, 0x00, 0x80, 0x16, "", "farID", 0, &_String, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_receiveAudio = {0x02, 0x00, 0x80, 0x16, "", "receiveAudio", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_bufferLength = {0x01, 0x00, 0x80, 0x16, "", "bufferLength", 0, &_Number, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_seek = {0x02, 0x00, 0x80, 0x16, "", "seek", 0, &voidclass, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_attachAudio = {0x02, 0x00, 0x80, 0x16, "", "attachAudio", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_bufferTime = {0x01, 0x00, 0x80, 0x16, "", "bufferTime", 0, &_Number, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_play = {0x02, 0x00, 0x80, 0x16, "", "play", 0, &voidclass, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_publish = {0x02, 0x00, 0x80, 0x16, "", "publish", 0, &voidclass, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_togglePause = {0x02, 0x00, 0x80, 0x16, "", "togglePause", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_checkPolicyFile = {0x01, 0x00, 0x80, 0x16, "", "checkPolicyFile", 0, &_Boolean, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_nearNonce = {0x01, 0x00, 0x80, 0x16, "", "nearNonce", 0, &_String, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_decodedFrames = {0x01, 0x00, 0x80, 0x16, "", "decodedFrames", 0, &_uint, &flash_net_NetStream, 0}; static methodinfo_t flash_net_NetStream_send = {0x02, 0x00, 0x80, 0x16, "", "send", 0, &voidclass, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_currentFPS = {0x01, 0x00, 0x80, 0x16, "", "currentFPS", 0, &_Number, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_time = {0x01, 0x00, 0x80, 0x16, "", "time", 0, &_Number, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_soundTransform = {0x01, 0x00, 0x80, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_CONNECT_TO_FMS = {0x01, 0x00, 0x82, 0x16, "", "CONNECT_TO_FMS", 0, &_String, &flash_net_NetStream, 0}; static varinfo_t flash_net_NetStream_DIRECT_CONNECTIONS = {0x01, 0x00, 0x82, 0x16, "", "DIRECT_CONNECTIONS", 0, &_String, &flash_net_NetStream, 0}; static classinfo_t _ArgumentError = {0x03, 0x00, 0x88, 0x16, "", "ArgumentError", 0, &_Error, interfaces: {0}}; static varinfo_t _ArgumentError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_ArgumentError, 0}; static classinfo_t _XMLList = {0x03, 0x00, 0x89, 0x16, "", "XMLList", 0, &_Object, interfaces: {0}}; static methodinfo_t _XMLList_normalize = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "normalize", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_removeNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "removeNamespace", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_prependChild = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "prependChild", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_toXMLString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toXMLString", 0, &_String, &_XMLList, 0}; static methodinfo_t _XMLList_nodeKind = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "nodeKind", 0, &_String, &_XMLList, 0}; static methodinfo_t _XMLList_copy = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "copy", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_text = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "text", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_XMLList, 0}; static methodinfo_t _XMLList_childIndex = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "childIndex", 0, &_int, &_XMLList, 0}; static methodinfo_t _XMLList_setName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setName", 0, &voidclass, &_XMLList, 0}; static methodinfo_t _XMLList_setLocalName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setLocalName", 0, &voidclass, &_XMLList, 0}; static methodinfo_t _XMLList_namespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "namespace", 0, 0, &_XMLList, 0}; static methodinfo_t _XMLList_insertChildBefore = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "insertChildBefore", 0, 0, &_XMLList, 0}; static methodinfo_t _XMLList_addNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "addNamespace", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_propertyIsEnumerable = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "propertyIsEnumerable", 0, &_Boolean, &_XMLList, 0}; static methodinfo_t _XMLList_comments = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "comments", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_attributes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "attributes", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_descendants = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "descendants", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_replace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "replace", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_children = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "children", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_contains = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "contains", 0, &_Boolean, &_XMLList, 0}; static methodinfo_t _XMLList_hasSimpleContent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasSimpleContent", 0, &_Boolean, &_XMLList, 0}; static methodinfo_t _XMLList_elements = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "elements", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_hasComplexContent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasComplexContent", 0, &_Boolean, &_XMLList, 0}; static methodinfo_t _XMLList_insertChildAfter = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "insertChildAfter", 0, 0, &_XMLList, 0}; static methodinfo_t _XMLList_parent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "parent", 0, 0, &_XMLList, 0}; static methodinfo_t _XMLList_length = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "length", 0, &_int, &_XMLList, 0}; static methodinfo_t _XMLList_processingInstructions = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "processingInstructions", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_child = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "child", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_appendChild = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "appendChild", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_XMLList, &_XMLList, 0}; static methodinfo_t _XMLList_localName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "localName", 0, &_Object, &_XMLList, 0}; static methodinfo_t _XMLList_inScopeNamespaces = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "inScopeNamespaces", 0, &_Array, &_XMLList, 0}; static methodinfo_t _XMLList_hasOwnProperty = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasOwnProperty", 0, &_Boolean, &_XMLList, 0}; static methodinfo_t _XMLList_setNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setNamespace", 0, &voidclass, &_XMLList, 0}; static methodinfo_t _XMLList_namespaceDeclarations = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "namespaceDeclarations", 0, &_Array, &_XMLList, 0}; static methodinfo_t _XMLList_name = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "name", 0, &_Object, &_XMLList, 0}; static methodinfo_t _XMLList_setChildren = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setChildren", 0, &_XML, &_XMLList, 0}; static methodinfo_t _XMLList_attribute = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "attribute", 0, &_XMLList, &_XMLList, 0}; static classinfo_t flash_geom_Point = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Point", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_geom_Point_equals = {0x02, 0x00, 0x80, 0x16, "", "equals", 0, &_Boolean, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_normalize = {0x02, 0x00, 0x80, 0x16, "", "normalize", 0, &voidclass, &flash_geom_Point, 0}; static varinfo_t flash_geom_Point_x = {0x01, 0x00, 0x80, 0x16, "", "x", 0, &_Number, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_offset = {0x02, 0x00, 0x80, 0x16, "", "offset", 0, &voidclass, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_subtract = {0x02, 0x00, 0x80, 0x16, "", "subtract", 0, &flash_geom_Point, &flash_geom_Point, 0}; static varinfo_t flash_geom_Point_y = {0x01, 0x00, 0x80, 0x16, "", "y", 0, &_Number, &flash_geom_Point, 0}; static varinfo_t flash_geom_Point_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_Number, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_add = {0x02, 0x00, 0x80, 0x16, "", "add", 0, &flash_geom_Point, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_geom_Point, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_polar = {0x02, 0x00, 0x82, 0x16, "", "polar", 0, &flash_geom_Point, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_distance = {0x02, 0x00, 0x82, 0x16, "", "distance", 0, &_Number, &flash_geom_Point, 0}; static methodinfo_t flash_geom_Point_interpolate = {0x02, 0x00, 0x82, 0x16, "", "interpolate", 0, &flash_geom_Point, &flash_geom_Point, 0}; static classinfo_t flash_printing_PrintJobOptions = {0x03, 0x00, 0x80, 0x16, "flash.printing", "PrintJobOptions", 0, &_Object, interfaces: {0}}; static varinfo_t flash_printing_PrintJobOptions_printAsBitmap = {0x01, 0x00, 0x80, 0x16, "", "printAsBitmap", 0, &_Boolean, &flash_printing_PrintJobOptions, 0}; static classinfo_t flash_display_DisplayObject = {0x03, 0x00, 0x80, 0x16, "flash.display", "DisplayObject", 0, &flash_events_EventDispatcher, interfaces: {&flash_display_IBitmapDrawable, 0}}; static varinfo_t flash_display_DisplayObject_rotation = {0x01, 0x00, 0x80, 0x16, "", "rotation", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_filters = {0x01, 0x00, 0x80, 0x16, "", "filters", 0, &_Array, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_rotationZ = {0x01, 0x00, 0x80, 0x16, "", "rotationZ", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_accessibilityProperties = {0x01, 0x00, 0x80, 0x16, "", "accessibilityProperties", 0, &flash_accessibility_AccessibilityProperties, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_mouseX = {0x01, 0x00, 0x80, 0x16, "", "mouseX", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_root = {0x01, 0x00, 0x80, 0x16, "", "root", 0, &flash_display_DisplayObject, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_stage = {0x01, 0x00, 0x80, 0x16, "", "stage", 0, &flash_display_Stage, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_rotationY = {0x01, 0x00, 0x80, 0x16, "", "rotationY", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_scaleZ = {0x01, 0x00, 0x80, 0x16, "", "scaleZ", 0, &_Number, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_local3DToGlobal = {0x02, 0x00, 0x80, 0x16, "", "local3DToGlobal", 0, &flash_geom_Point, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_loaderInfo = {0x01, 0x00, 0x80, 0x16, "", "loaderInfo", 0, &flash_display_LoaderInfo, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_cacheAsBitmap = {0x01, 0x00, 0x80, 0x16, "", "cacheAsBitmap", 0, &_Boolean, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_transform = {0x01, 0x00, 0x80, 0x16, "", "transform", 0, &flash_geom_Transform, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_scaleY = {0x01, 0x00, 0x80, 0x16, "", "scaleY", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_rotationX = {0x01, 0x00, 0x80, 0x16, "", "rotationX", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_scrollRect = {0x01, 0x00, 0x80, 0x16, "", "scrollRect", 0, &flash_geom_Rectangle, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_scale9Grid = {0x01, 0x00, 0x80, 0x16, "", "scale9Grid", 0, &flash_geom_Rectangle, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_parent = {0x01, 0x00, 0x80, 0x16, "", "parent", 0, &flash_display_DisplayObjectContainer, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_hitTestObject = {0x02, 0x00, 0x80, 0x16, "", "hitTestObject", 0, &_Boolean, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_hitTestPoint = {0x02, 0x00, 0x80, 0x16, "", "hitTestPoint", 0, &_Boolean, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_getRect = {0x02, 0x00, 0x80, 0x16, "", "getRect", 0, &flash_geom_Rectangle, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_opaqueBackground = {0x01, 0x00, 0x80, 0x16, "", "opaqueBackground", 0, &_Object, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_globalToLocal3D = {0x02, 0x00, 0x80, 0x16, "", "globalToLocal3D", 0, &flash_geom_Vector3D, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_visible = {0x01, 0x00, 0x80, 0x16, "", "visible", 0, &_Boolean, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_blendMode = {0x01, 0x00, 0x80, 0x16, "", "blendMode", 0, &_String, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_scaleX = {0x01, 0x00, 0x80, 0x16, "", "scaleX", 0, &_Number, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_globalToLocal = {0x02, 0x00, 0x80, 0x16, "", "globalToLocal", 0, &flash_geom_Point, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_localToGlobal = {0x02, 0x00, 0x80, 0x16, "", "localToGlobal", 0, &flash_geom_Point, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_z = {0x01, 0x00, 0x80, 0x16, "", "z", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_display_DisplayObject, 0}; static methodinfo_t flash_display_DisplayObject_getBounds = {0x02, 0x00, 0x80, 0x16, "", "getBounds", 0, &flash_geom_Rectangle, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_mask = {0x01, 0x00, 0x80, 0x16, "", "mask", 0, &flash_display_DisplayObject, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_mouseY = {0x01, 0x00, 0x80, 0x16, "", "mouseY", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_x = {0x01, 0x00, 0x80, 0x16, "", "x", 0, &_Number, &flash_display_DisplayObject, 0}; static varinfo_t flash_display_DisplayObject_y = {0x01, 0x00, 0x80, 0x16, "", "y", 0, &_Number, &flash_display_DisplayObject, 0}; static classinfo_t flash_sampler_DeleteObjectSample = {0x03, 0x00, 0x81, 0x16, "flash.sampler", "DeleteObjectSample", 0, &flash_sampler_Sample, interfaces: {0}}; static varinfo_t flash_sampler_DeleteObjectSample_size = {0x01, 0x00, 0x80, 0x16, "", "size", 0, &_Number, &flash_sampler_DeleteObjectSample, 0}; static varinfo_t flash_sampler_DeleteObjectSample_id = {0x01, 0x00, 0x80, 0x16, "", "id", 0, &_Number, &flash_sampler_DeleteObjectSample, 0}; static methodinfo_t flash_system_fscommand = {0x02, 0x00, 0x82, 0x16, "flash.system", "fscommand", 0, &voidclass, 0, 0}; static methodinfo_t flash_utils_unescapeMultiByte = {0x02, 0x00, 0x82, 0x16, "flash.utils", "unescapeMultiByte", 0, &_String, 0, 0}; static classinfo_t flash_sampler_StackFrame = {0x03, 0x00, 0x81, 0x16, "flash.sampler", "StackFrame", 0, &_Object, interfaces: {0}}; static varinfo_t flash_sampler_StackFrame_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_sampler_StackFrame, 0}; static varinfo_t flash_sampler_StackFrame_line = {0x01, 0x00, 0x80, 0x16, "", "line", 0, &_uint, &flash_sampler_StackFrame, 0}; static methodinfo_t flash_sampler_StackFrame_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_sampler_StackFrame, 0}; static varinfo_t flash_sampler_StackFrame_file = {0x01, 0x00, 0x80, 0x16, "", "file", 0, &_String, &flash_sampler_StackFrame, 0}; static classinfo_t flash_system_JPEGLoaderContext = {0x03, 0x00, 0x80, 0x16, "flash.system", "JPEGLoaderContext", 0, &flash_system_LoaderContext, interfaces: {0}}; static varinfo_t flash_system_JPEGLoaderContext_deblockingFilter = {0x01, 0x00, 0x80, 0x16, "", "deblockingFilter", 0, &_Number, &flash_system_JPEGLoaderContext, 0}; static classinfo_t flash_system_IME = {0x03, 0x00, 0x81, 0x16, "flash.system", "IME", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_system_IME_setCompositionString = {0x02, 0x00, 0x82, 0x16, "", "setCompositionString", 0, &voidclass, &flash_system_IME, 0}; static varinfo_t flash_system_IME_enabled = {0x01, 0x00, 0x82, 0x16, "", "enabled", 0, &_Boolean, &flash_system_IME, 0}; static methodinfo_t flash_system_IME_doConversion = {0x02, 0x00, 0x82, 0x16, "", "doConversion", 0, &voidclass, &flash_system_IME, 0}; static varinfo_t flash_system_IME_conversionMode = {0x01, 0x00, 0x82, 0x16, "", "conversionMode", 0, &_String, &flash_system_IME, 0}; static methodinfo_t _isNaN = {0x02, 0x00, 0x82, 0x16, "", "isNaN", 0, &_Boolean, 0, 0}; static classinfo_t flash_system_Security = {0x03, 0x00, 0x81, 0x16, "flash.system", "Security", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_Security_sandboxType = {0x01, 0x00, 0x82, 0x16, "", "sandboxType", 0, &_String, &flash_system_Security, 0}; static varinfo_t flash_system_Security_LOCAL_WITH_NETWORK = {0x01, 0x00, 0x82, 0x16, "", "LOCAL_WITH_NETWORK", 0, &_String, &flash_system_Security, 0}; static methodinfo_t flash_system_Security_loadPolicyFile = {0x02, 0x00, 0x82, 0x16, "", "loadPolicyFile", 0, &voidclass, &flash_system_Security, 0}; static methodinfo_t flash_system_Security_allowDomain = {0x02, 0x00, 0x82, 0x16, "", "allowDomain", 0, &voidclass, &flash_system_Security, 0}; static methodinfo_t flash_system_Security_showSettings = {0x02, 0x00, 0x82, 0x16, "", "showSettings", 0, &voidclass, &flash_system_Security, 0}; static varinfo_t flash_system_Security_LOCAL_TRUSTED = {0x01, 0x00, 0x82, 0x16, "", "LOCAL_TRUSTED", 0, &_String, &flash_system_Security, 0}; static varinfo_t flash_system_Security_disableAVM1Loading = {0x01, 0x00, 0x82, 0x16, "", "disableAVM1Loading", 0, &_Boolean, &flash_system_Security, 0}; static methodinfo_t flash_system_Security_allowInsecureDomain = {0x02, 0x00, 0x82, 0x16, "", "allowInsecureDomain", 0, &voidclass, &flash_system_Security, 0}; static varinfo_t flash_system_Security_exactSettings = {0x01, 0x00, 0x82, 0x16, "", "exactSettings", 0, &_Boolean, &flash_system_Security, 0}; static varinfo_t flash_system_Security_REMOTE = {0x01, 0x00, 0x82, 0x16, "", "REMOTE", 0, &_String, &flash_system_Security, 0}; static varinfo_t flash_system_Security_LOCAL_WITH_FILE = {0x01, 0x00, 0x82, 0x16, "", "LOCAL_WITH_FILE", 0, &_String, &flash_system_Security, 0}; static classinfo_t flash_display_Bitmap = {0x03, 0x00, 0x80, 0x16, "flash.display", "Bitmap", 0, &flash_display_DisplayObject, interfaces: {0}}; static varinfo_t flash_display_Bitmap_pixelSnapping = {0x01, 0x00, 0x80, 0x16, "", "pixelSnapping", 0, &_String, &flash_display_Bitmap, 0}; static varinfo_t flash_display_Bitmap_bitmapData = {0x01, 0x00, 0x80, 0x16, "", "bitmapData", 0, &flash_display_BitmapData, &flash_display_Bitmap, 0}; static varinfo_t flash_display_Bitmap_smoothing = {0x01, 0x00, 0x80, 0x16, "", "smoothing", 0, &_Boolean, &flash_display_Bitmap, 0}; static classinfo_t flash_printing_PrintJob = {0x03, 0x00, 0x80, 0x16, "flash.printing", "PrintJob", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_printing_PrintJob_paperWidth = {0x01, 0x00, 0x80, 0x16, "", "paperWidth", 0, &_int, &flash_printing_PrintJob, 0}; static methodinfo_t flash_printing_PrintJob_addPage = {0x02, 0x00, 0x80, 0x16, "", "addPage", 0, &voidclass, &flash_printing_PrintJob, 0}; static varinfo_t flash_printing_PrintJob_pageHeight = {0x01, 0x00, 0x80, 0x16, "", "pageHeight", 0, &_int, &flash_printing_PrintJob, 0}; static methodinfo_t flash_printing_PrintJob_start = {0x02, 0x00, 0x80, 0x16, "", "start", 0, &_Boolean, &flash_printing_PrintJob, 0}; static varinfo_t flash_printing_PrintJob_pageWidth = {0x01, 0x00, 0x80, 0x16, "", "pageWidth", 0, &_int, &flash_printing_PrintJob, 0}; static methodinfo_t flash_printing_PrintJob_send = {0x02, 0x00, 0x80, 0x16, "", "send", 0, &voidclass, &flash_printing_PrintJob, 0}; static varinfo_t flash_printing_PrintJob_paperHeight = {0x01, 0x00, 0x80, 0x16, "", "paperHeight", 0, &_int, &flash_printing_PrintJob, 0}; static varinfo_t flash_printing_PrintJob_orientation = {0x01, 0x00, 0x80, 0x16, "", "orientation", 0, &_String, &flash_printing_PrintJob, 0}; static classinfo_t flash_text_StaticText = {0x03, 0x00, 0x81, 0x16, "flash.text", "StaticText", 0, &flash_display_DisplayObject, interfaces: {0}}; static varinfo_t flash_text_StaticText_text = {0x01, 0x00, 0x80, 0x16, "", "text", 0, &_String, &flash_text_StaticText, 0}; static classinfo_t flash_text_engine_SpaceJustifier = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "SpaceJustifier", 0, &flash_text_engine_TextJustifier, interfaces: {0}}; static methodinfo_t flash_text_engine_SpaceJustifier_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_text_engine_TextJustifier, &flash_text_engine_SpaceJustifier, 0}; static varinfo_t flash_text_engine_SpaceJustifier_letterSpacing = {0x01, 0x00, 0x80, 0x16, "", "letterSpacing", 0, &_Boolean, &flash_text_engine_SpaceJustifier, 0}; static classinfo_t flash_events_DataEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "DataEvent", 0, &flash_events_TextEvent, interfaces: {0}}; static methodinfo_t flash_events_DataEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_DataEvent, 0}; static methodinfo_t flash_events_DataEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_DataEvent, 0}; static varinfo_t flash_events_DataEvent_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &_String, &flash_events_DataEvent, 0}; static varinfo_t flash_events_DataEvent_DATA = {0x01, 0x00, 0x82, 0x16, "", "DATA", 0, &_String, &flash_events_DataEvent, 0}; static varinfo_t flash_events_DataEvent_UPLOAD_COMPLETE_DATA = {0x01, 0x00, 0x82, 0x16, "", "UPLOAD_COMPLETE_DATA", 0, &_String, &flash_events_DataEvent, 0}; static classinfo_t flash_events_ActivityEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "ActivityEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_ActivityEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_ActivityEvent, 0}; static varinfo_t flash_events_ActivityEvent_activating = {0x01, 0x00, 0x80, 0x16, "", "activating", 0, &_Boolean, &flash_events_ActivityEvent, 0}; static methodinfo_t flash_events_ActivityEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_ActivityEvent, 0}; static varinfo_t flash_events_ActivityEvent_ACTIVITY = {0x01, 0x00, 0x82, 0x16, "", "ACTIVITY", 0, &_String, &flash_events_ActivityEvent, 0}; static classinfo_t flash_display_GraphicsEndFill = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsEndFill", 0, &_Object, interfaces: {&flash_display_IGraphicsFill, &flash_display_IGraphicsData, 0}}; static classinfo_t flash_display_ColorCorrection = {0x03, 0x00, 0x81, 0x16, "flash.display", "ColorCorrection", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ColorCorrection_OFF = {0x01, 0x00, 0x82, 0x16, "", "OFF", 0, &_String, &flash_display_ColorCorrection, 0}; static varinfo_t flash_display_ColorCorrection_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_display_ColorCorrection, 0}; static varinfo_t flash_display_ColorCorrection_ON = {0x01, 0x00, 0x82, 0x16, "", "ON", 0, &_String, &flash_display_ColorCorrection, 0}; static classinfo_t flash_events_IOErrorEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "IOErrorEvent", 0, &flash_events_ErrorEvent, interfaces: {0}}; static methodinfo_t flash_events_IOErrorEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_IOErrorEvent, 0}; static methodinfo_t flash_events_IOErrorEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_IOErrorEvent, 0}; static varinfo_t flash_events_IOErrorEvent_IO_ERROR = {0x01, 0x00, 0x82, 0x16, "", "IO_ERROR", 0, &_String, &flash_events_IOErrorEvent, 0}; static varinfo_t flash_events_IOErrorEvent_VERIFY_ERROR = {0x01, 0x00, 0x82, 0x16, "", "VERIFY_ERROR", 0, &_String, &flash_events_IOErrorEvent, 0}; static varinfo_t flash_events_IOErrorEvent_NETWORK_ERROR = {0x01, 0x00, 0x82, 0x16, "", "NETWORK_ERROR", 0, &_String, &flash_events_IOErrorEvent, 0}; static varinfo_t flash_events_IOErrorEvent_DISK_ERROR = {0x01, 0x00, 0x82, 0x16, "", "DISK_ERROR", 0, &_String, &flash_events_IOErrorEvent, 0}; static classinfo_t flash_display_GraphicsStroke = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsStroke", 0, &_Object, interfaces: {&flash_display_IGraphicsStroke, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsStroke_scaleMode = {0x01, 0x00, 0x80, 0x16, "", "scaleMode", 0, &_String, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_miterLimit = {0x01, 0x00, 0x80, 0x16, "", "miterLimit", 0, &_Number, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_pixelHinting = {0x01, 0x00, 0x80, 0x16, "", "pixelHinting", 0, &_Boolean, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_fill = {0x01, 0x00, 0x80, 0x16, "", "fill", 0, &flash_display_IGraphicsFill, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_thickness = {0x01, 0x00, 0x80, 0x16, "", "thickness", 0, &_Number, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_joints = {0x01, 0x00, 0x80, 0x16, "", "joints", 0, &_String, &flash_display_GraphicsStroke, 0}; static varinfo_t flash_display_GraphicsStroke_caps = {0x01, 0x00, 0x80, 0x16, "", "caps", 0, &_String, &flash_display_GraphicsStroke, 0}; static classinfo_t _Boolean = {0x03, 0x00, 0x81, 0x16, "", "Boolean", 0, &_Object, interfaces: {0}}; static methodinfo_t _Boolean_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_Boolean, &_Boolean, 0}; static methodinfo_t _Boolean_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_Boolean, 0}; static varinfo_t _Boolean_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Boolean, 0}; static methodinfo_t flash_sampler_getMemberNames = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getMemberNames", 0, &_Object, 0, 0}; static methodinfo_t flash_utils_getQualifiedClassName = {0x02, 0x00, 0x82, 0x16, "flash.utils", "getQualifiedClassName", 0, &_String, 0, 0}; static classinfo_t flash_text_engine_GraphicElement = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "GraphicElement", 0, &flash_text_engine_ContentElement, interfaces: {0}}; static varinfo_t flash_text_engine_GraphicElement_graphic = {0x01, 0x00, 0x80, 0x16, "", "graphic", 0, &flash_display_DisplayObject, &flash_text_engine_GraphicElement, 0}; static varinfo_t flash_text_engine_GraphicElement_elementWidth = {0x01, 0x00, 0x80, 0x16, "", "elementWidth", 0, &_Number, &flash_text_engine_GraphicElement, 0}; static varinfo_t flash_text_engine_GraphicElement_elementHeight = {0x01, 0x00, 0x80, 0x16, "", "elementHeight", 0, &_Number, &flash_text_engine_GraphicElement, 0}; static classinfo_t flash_media_Microphone = {0x03, 0x00, 0x81, 0x16, "flash.media", "Microphone", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_media_Microphone_codec = {0x01, 0x00, 0x80, 0x16, "", "codec", 0, &_String, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_gain = {0x01, 0x00, 0x80, 0x16, "", "gain", 0, &_Number, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_index = {0x01, 0x00, 0x80, 0x16, "", "index", 0, &_int, &flash_media_Microphone, 0}; static methodinfo_t flash_media_Microphone_setLoopBack = {0x02, 0x00, 0x80, 0x16, "", "setLoopBack", 0, &voidclass, &flash_media_Microphone, 0}; static methodinfo_t flash_media_Microphone_setSilenceLevel = {0x02, 0x00, 0x80, 0x16, "", "setSilenceLevel", 0, &voidclass, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_media_Microphone, 0}; static methodinfo_t flash_media_Microphone_setUseEchoSuppression = {0x02, 0x00, 0x80, 0x16, "", "setUseEchoSuppression", 0, &voidclass, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_framesPerPacket = {0x01, 0x00, 0x80, 0x16, "", "framesPerPacket", 0, &_int, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_muted = {0x01, 0x00, 0x80, 0x16, "", "muted", 0, &_Boolean, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_soundTransform = {0x01, 0x00, 0x80, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_encodeQuality = {0x01, 0x00, 0x80, 0x16, "", "encodeQuality", 0, &_int, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_useEchoSuppression = {0x01, 0x00, 0x80, 0x16, "", "useEchoSuppression", 0, &_Boolean, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_silenceLevel = {0x01, 0x00, 0x80, 0x16, "", "silenceLevel", 0, &_Number, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_silenceTimeout = {0x01, 0x00, 0x80, 0x16, "", "silenceTimeout", 0, &_int, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_rate = {0x01, 0x00, 0x80, 0x16, "", "rate", 0, &_int, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_activityLevel = {0x01, 0x00, 0x80, 0x16, "", "activityLevel", 0, &_Number, &flash_media_Microphone, 0}; static varinfo_t flash_media_Microphone_names = {0x01, 0x00, 0x82, 0x16, "", "names", 0, &_Array, &flash_media_Microphone, 0}; static methodinfo_t flash_media_Microphone_getMicrophone = {0x02, 0x00, 0x82, 0x16, "", "getMicrophone", 0, &flash_media_Microphone, &flash_media_Microphone, 0}; static classinfo_t flash_ui_ContextMenuClipboardItems = {0x03, 0x00, 0x81, 0x16, "flash.ui", "ContextMenuClipboardItems", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_ContextMenuClipboardItems_clear = {0x01, 0x00, 0x80, 0x16, "", "clear", 0, &_Boolean, &flash_ui_ContextMenuClipboardItems, 0}; static methodinfo_t flash_ui_ContextMenuClipboardItems_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_ui_ContextMenuClipboardItems, &flash_ui_ContextMenuClipboardItems, 0}; static varinfo_t flash_ui_ContextMenuClipboardItems_paste = {0x01, 0x00, 0x80, 0x16, "", "paste", 0, &_Boolean, &flash_ui_ContextMenuClipboardItems, 0}; static varinfo_t flash_ui_ContextMenuClipboardItems_selectAll = {0x01, 0x00, 0x80, 0x16, "", "selectAll", 0, &_Boolean, &flash_ui_ContextMenuClipboardItems, 0}; static varinfo_t flash_ui_ContextMenuClipboardItems_copy = {0x01, 0x00, 0x80, 0x16, "", "copy", 0, &_Boolean, &flash_ui_ContextMenuClipboardItems, 0}; static varinfo_t flash_ui_ContextMenuClipboardItems_cut = {0x01, 0x00, 0x80, 0x16, "", "cut", 0, &_Boolean, &flash_ui_ContextMenuClipboardItems, 0}; static classinfo_t flash_display_GraphicsShaderFill = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsShaderFill", 0, &_Object, interfaces: {&flash_display_IGraphicsFill, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsShaderFill_shader = {0x01, 0x00, 0x80, 0x16, "", "shader", 0, &flash_display_Shader, &flash_display_GraphicsShaderFill, 0}; static varinfo_t flash_display_GraphicsShaderFill_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &flash_geom_Matrix, &flash_display_GraphicsShaderFill, 0}; static classinfo_t flash_errors_IllegalOperationError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "IllegalOperationError", 0, &_Error, interfaces: {0}}; static classinfo_t flash_filters_GradientGlowFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "GradientGlowFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_GradientGlowFilter_strength = {0x01, 0x00, 0x80, 0x16, "", "strength", 0, &_Number, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_angle = {0x01, 0x00, 0x80, 0x16, "", "angle", 0, &_Number, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_knockout = {0x01, 0x00, 0x80, 0x16, "", "knockout", 0, &_Boolean, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_alphas = {0x01, 0x00, 0x80, 0x16, "", "alphas", 0, &_Array, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_ratios = {0x01, 0x00, 0x80, 0x16, "", "ratios", 0, &_Array, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_colors = {0x01, 0x00, 0x80, 0x16, "", "colors", 0, &_Array, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_GradientGlowFilter, 0}; static varinfo_t flash_filters_GradientGlowFilter_distance = {0x01, 0x00, 0x80, 0x16, "", "distance", 0, &_Number, &flash_filters_GradientGlowFilter, 0}; static methodinfo_t flash_filters_GradientGlowFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_GradientGlowFilter, 0}; static classinfo_t flash_display_CapsStyle = {0x03, 0x00, 0x81, 0x16, "flash.display", "CapsStyle", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_CapsStyle_ROUND = {0x01, 0x00, 0x82, 0x16, "", "ROUND", 0, &_String, &flash_display_CapsStyle, 0}; static varinfo_t flash_display_CapsStyle_SQUARE = {0x01, 0x00, 0x82, 0x16, "", "SQUARE", 0, &_String, &flash_display_CapsStyle, 0}; static varinfo_t flash_display_CapsStyle_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_display_CapsStyle, 0}; static classinfo_t flash_text_TextSnapshot = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextSnapshot", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_text_TextSnapshot_setSelectColor = {0x02, 0x00, 0x80, 0x16, "", "setSelectColor", 0, &voidclass, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_setSelected = {0x02, 0x00, 0x80, 0x16, "", "setSelected", 0, &voidclass, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_getSelectedText = {0x02, 0x00, 0x80, 0x16, "", "getSelectedText", 0, &_String, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_getTextRunInfo = {0x02, 0x00, 0x80, 0x16, "", "getTextRunInfo", 0, &_Array, &flash_text_TextSnapshot, 0}; static varinfo_t flash_text_TextSnapshot_charCount = {0x01, 0x00, 0x80, 0x16, "", "charCount", 0, &_int, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_findText = {0x02, 0x00, 0x80, 0x16, "", "findText", 0, &_int, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_getSelected = {0x02, 0x00, 0x80, 0x16, "", "getSelected", 0, &_Boolean, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_hitTestTextNearPos = {0x02, 0x00, 0x80, 0x16, "", "hitTestTextNearPos", 0, &_Number, &flash_text_TextSnapshot, 0}; static methodinfo_t flash_text_TextSnapshot_getText = {0x02, 0x00, 0x80, 0x16, "", "getText", 0, &_String, &flash_text_TextSnapshot, 0}; static classinfo_t flash_text_engine_FontLookup = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "FontLookup", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_FontLookup_DEVICE = {0x01, 0x00, 0x82, 0x16, "", "DEVICE", 0, &_String, &flash_text_engine_FontLookup, 0}; static varinfo_t flash_text_engine_FontLookup_EMBEDDED_CFF = {0x01, 0x00, 0x82, 0x16, "", "EMBEDDED_CFF", 0, &_String, &flash_text_engine_FontLookup, 0}; static classinfo_t flash_display_InteractiveObject = {0x03, 0x00, 0x80, 0x16, "flash.display", "InteractiveObject", 0, &flash_display_DisplayObject, interfaces: {0}}; static varinfo_t flash_display_InteractiveObject_tabIndex = {0x01, 0x00, 0x80, 0x16, "", "tabIndex", 0, &_int, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_doubleClickEnabled = {0x01, 0x00, 0x80, 0x16, "", "doubleClickEnabled", 0, &_Boolean, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_tabEnabled = {0x01, 0x00, 0x80, 0x16, "", "tabEnabled", 0, &_Boolean, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_mouseEnabled = {0x01, 0x00, 0x80, 0x16, "", "mouseEnabled", 0, &_Boolean, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_contextMenu = {0x01, 0x00, 0x80, 0x16, "", "contextMenu", 0, &flash_ui_ContextMenu, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_focusRect = {0x01, 0x00, 0x80, 0x16, "", "focusRect", 0, &_Object, &flash_display_InteractiveObject, 0}; static varinfo_t flash_display_InteractiveObject_accessibilityImplementation = {0x01, 0x00, 0x80, 0x16, "", "accessibilityImplementation", 0, &flash_accessibility_AccessibilityImplementation, &flash_display_InteractiveObject, 0}; static classinfo_t flash_text_TextField = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextField", 0, &flash_display_InteractiveObject, interfaces: {0}}; static methodinfo_t flash_text_TextField_getTextFormat = {0x02, 0x00, 0x80, 0x16, "", "getTextFormat", 0, &flash_text_TextFormat, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_border = {0x01, 0x00, 0x80, 0x16, "", "border", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_selectedText = {0x01, 0x00, 0x80, 0x16, "", "selectedText", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_pasteRichText = {0x02, 0x00, 0x80, 0x17, "", "pasteRichText", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_bottomScrollV = {0x01, 0x00, 0x80, 0x16, "", "bottomScrollV", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineIndexOfChar = {0x02, 0x00, 0x80, 0x16, "", "getLineIndexOfChar", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_replaceText = {0x02, 0x00, 0x80, 0x16, "", "replaceText", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_defaultTextFormat = {0x01, 0x00, 0x80, 0x16, "", "defaultTextFormat", 0, &flash_text_TextFormat, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_restrict = {0x01, 0x00, 0x80, 0x16, "", "restrict", 0, &_String, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_htmlText = {0x01, 0x00, 0x80, 0x16, "", "htmlText", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_copyRichText = {0x02, 0x00, 0x80, 0x17, "", "copyRichText", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineText = {0x02, 0x00, 0x80, 0x16, "", "getLineText", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getFirstCharInParagraph = {0x02, 0x00, 0x80, 0x16, "", "getFirstCharInParagraph", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_setSelection = {0x02, 0x00, 0x80, 0x16, "", "setSelection", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_wordWrap = {0x01, 0x00, 0x80, 0x16, "", "wordWrap", 0, &_Boolean, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_appendText = {0x02, 0x00, 0x80, 0x16, "", "appendText", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_caretIndex = {0x01, 0x00, 0x80, 0x16, "", "caretIndex", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_mouseWheelEnabled = {0x01, 0x00, 0x80, 0x16, "", "mouseWheelEnabled", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_selectionBeginIndex = {0x01, 0x00, 0x80, 0x16, "", "selectionBeginIndex", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_sharpness = {0x01, 0x00, 0x80, 0x16, "", "sharpness", 0, &_Number, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineIndexAtPoint = {0x02, 0x00, 0x80, 0x16, "", "getLineIndexAtPoint", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getCharIndexAtPoint = {0x02, 0x00, 0x80, 0x16, "", "getCharIndexAtPoint", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getXMLText = {0x02, 0x00, 0x80, 0x16, "", "getXMLText", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getParagraphLength = {0x02, 0x00, 0x80, 0x16, "", "getParagraphLength", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getRawText = {0x02, 0x00, 0x80, 0x16, "", "getRawText", 0, &_String, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_gridFitType = {0x01, 0x00, 0x80, 0x16, "", "gridFitType", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineOffset = {0x02, 0x00, 0x80, 0x16, "", "getLineOffset", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_backgroundColor = {0x01, 0x00, 0x80, 0x16, "", "backgroundColor", 0, &_uint, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_multiline = {0x01, 0x00, 0x80, 0x16, "", "multiline", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_numLines = {0x01, 0x00, 0x80, 0x16, "", "numLines", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getImageReference = {0x02, 0x00, 0x80, 0x16, "", "getImageReference", 0, &flash_display_DisplayObject, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_displayAsPassword = {0x01, 0x00, 0x80, 0x16, "", "displayAsPassword", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_textWidth = {0x01, 0x00, 0x80, 0x16, "", "textWidth", 0, &_Number, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_autoSize = {0x01, 0x00, 0x80, 0x16, "", "autoSize", 0, &_String, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_selectable = {0x01, 0x00, 0x80, 0x16, "", "selectable", 0, &_Boolean, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getCharBoundaries = {0x02, 0x00, 0x80, 0x16, "", "getCharBoundaries", 0, &flash_geom_Rectangle, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_alwaysShowSelection = {0x01, 0x00, 0x80, 0x16, "", "alwaysShowSelection", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_thickness = {0x01, 0x00, 0x80, 0x16, "", "thickness", 0, &_Number, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_useRichTextClipboard = {0x01, 0x00, 0x80, 0x16, "", "useRichTextClipboard", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_scrollV = {0x01, 0x00, 0x80, 0x16, "", "scrollV", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getTextRuns = {0x02, 0x00, 0x80, 0x16, "", "getTextRuns", 0, &_Array, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_setTextFormat = {0x02, 0x00, 0x80, 0x16, "", "setTextFormat", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_textColor = {0x01, 0x00, 0x80, 0x16, "", "textColor", 0, &_uint, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_maxScrollV = {0x01, 0x00, 0x80, 0x16, "", "maxScrollV", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_embedFonts = {0x01, 0x00, 0x80, 0x16, "", "embedFonts", 0, &_Boolean, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_scrollH = {0x01, 0x00, 0x80, 0x16, "", "scrollH", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_text = {0x01, 0x00, 0x80, 0x16, "", "text", 0, &_String, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineLength = {0x02, 0x00, 0x80, 0x16, "", "getLineLength", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_textHeight = {0x01, 0x00, 0x80, 0x16, "", "textHeight", 0, &_Number, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_antiAliasType = {0x01, 0x00, 0x80, 0x16, "", "antiAliasType", 0, &_String, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_styleSheet = {0x01, 0x00, 0x80, 0x16, "", "styleSheet", 0, &flash_text_StyleSheet, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_background = {0x01, 0x00, 0x80, 0x16, "", "background", 0, &_Boolean, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_replaceSelectedText = {0x02, 0x00, 0x80, 0x16, "", "replaceSelectedText", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_borderColor = {0x01, 0x00, 0x80, 0x16, "", "borderColor", 0, &_uint, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_maxScrollH = {0x01, 0x00, 0x80, 0x16, "", "maxScrollH", 0, &_int, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_maxChars = {0x01, 0x00, 0x80, 0x16, "", "maxChars", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_getLineMetrics = {0x02, 0x00, 0x80, 0x16, "", "getLineMetrics", 0, &flash_text_TextLineMetrics, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_selectionEndIndex = {0x01, 0x00, 0x80, 0x16, "", "selectionEndIndex", 0, &_int, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_insertXMLText = {0x02, 0x00, 0x80, 0x16, "", "insertXMLText", 0, &voidclass, &flash_text_TextField, 0}; static varinfo_t flash_text_TextField_condenseWhite = {0x01, 0x00, 0x80, 0x16, "", "condenseWhite", 0, &_Boolean, &flash_text_TextField, 0}; static methodinfo_t flash_text_TextField_isFontCompatible = {0x02, 0x00, 0x82, 0x16, "", "isFontCompatible", 0, &_Boolean, &flash_text_TextField, 0}; static classinfo_t flash_printing_PrintJobOrientation = {0x03, 0x00, 0x81, 0x16, "flash.printing", "PrintJobOrientation", 0, &_Object, interfaces: {0}}; static varinfo_t flash_printing_PrintJobOrientation_LANDSCAPE = {0x01, 0x00, 0x82, 0x16, "", "LANDSCAPE", 0, &_String, &flash_printing_PrintJobOrientation, 0}; static varinfo_t flash_printing_PrintJobOrientation_PORTRAIT = {0x01, 0x00, 0x82, 0x16, "", "PORTRAIT", 0, &_String, &flash_printing_PrintJobOrientation, 0}; static classinfo_t flash_text_TextRenderer = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextRenderer", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextRenderer_displayMode = {0x01, 0x00, 0x82, 0x16, "", "displayMode", 0, &_String, &flash_text_TextRenderer, 0}; static varinfo_t flash_text_TextRenderer_antiAliasType = {0x01, 0x00, 0x82, 0x16, "", "antiAliasType", 0, &_String, &flash_text_TextRenderer, 0}; static varinfo_t flash_text_TextRenderer_maxLevel = {0x01, 0x00, 0x82, 0x16, "", "maxLevel", 0, &_int, &flash_text_TextRenderer, 0}; static methodinfo_t flash_text_TextRenderer_setAdvancedAntiAliasingTable = {0x02, 0x00, 0x82, 0x16, "", "setAdvancedAntiAliasingTable", 0, &voidclass, &flash_text_TextRenderer, 0}; static classinfo_t flash_net_NetConnection = {0x03, 0x00, 0x80, 0x16, "flash.net", "NetConnection", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_NetConnection_nearID = {0x01, 0x00, 0x80, 0x16, "", "nearID", 0, &_String, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_client = {0x01, 0x00, 0x80, 0x16, "", "client", 0, &_Object, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_farNonce = {0x01, 0x00, 0x80, 0x16, "", "farNonce", 0, &_String, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_farID = {0x01, 0x00, 0x80, 0x16, "", "farID", 0, &_String, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_connected = {0x01, 0x00, 0x80, 0x16, "", "connected", 0, &_Boolean, &flash_net_NetConnection, 0}; static methodinfo_t flash_net_NetConnection_call = {0x02, 0x00, 0x80, 0x16, "", "call", 0, &voidclass, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_usingTLS = {0x01, 0x00, 0x80, 0x16, "", "usingTLS", 0, &_Boolean, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_proxyType = {0x01, 0x00, 0x80, 0x16, "", "proxyType", 0, &_String, &flash_net_NetConnection, 0}; static methodinfo_t flash_net_NetConnection_addHeader = {0x02, 0x00, 0x80, 0x16, "", "addHeader", 0, &voidclass, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_protocol = {0x01, 0x00, 0x80, 0x16, "", "protocol", 0, &_String, &flash_net_NetConnection, 0}; static methodinfo_t flash_net_NetConnection_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_nearNonce = {0x01, 0x00, 0x80, 0x16, "", "nearNonce", 0, &_String, &flash_net_NetConnection, 0}; static methodinfo_t flash_net_NetConnection_connect = {0x02, 0x00, 0x80, 0x16, "", "connect", 0, &voidclass, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_unconnectedPeerStreams = {0x01, 0x00, 0x80, 0x16, "", "unconnectedPeerStreams", 0, &_Array, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_maxPeerConnections = {0x01, 0x00, 0x80, 0x16, "", "maxPeerConnections", 0, &_uint, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_connectedProxyType = {0x01, 0x00, 0x80, 0x16, "", "connectedProxyType", 0, &_String, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_uri = {0x01, 0x00, 0x80, 0x16, "", "uri", 0, &_String, &flash_net_NetConnection, 0}; static varinfo_t flash_net_NetConnection_defaultObjectEncoding = {0x01, 0x00, 0x82, 0x16, "", "defaultObjectEncoding", 0, &_uint, &flash_net_NetConnection, 0}; static methodinfo_t _decodeURIComponent = {0x02, 0x00, 0x82, 0x16, "", "decodeURIComponent", 0, &_String, 0, 0}; static methodinfo_t flash_sampler_isGetterSetter = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "isGetterSetter", 0, &_Boolean, 0, 0}; static methodinfo_t flash_utils_getQualifiedSuperclassName = {0x02, 0x00, 0x82, 0x16, "flash.utils", "getQualifiedSuperclassName", 0, &_String, 0, 0}; static classinfo_t flash_display_GraphicsPathWinding = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsPathWinding", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_GraphicsPathWinding_EVEN_ODD = {0x01, 0x00, 0x82, 0x16, "", "EVEN_ODD", 0, &_String, &flash_display_GraphicsPathWinding, 0}; static varinfo_t flash_display_GraphicsPathWinding_NON_ZERO = {0x01, 0x00, 0x82, 0x16, "", "NON_ZERO", 0, &_String, &flash_display_GraphicsPathWinding, 0}; static classinfo_t flash_text_engine_TabStop = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TabStop", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TabStop_alignment = {0x01, 0x00, 0x80, 0x16, "", "alignment", 0, &_String, &flash_text_engine_TabStop, 0}; static varinfo_t flash_text_engine_TabStop_position = {0x01, 0x00, 0x80, 0x16, "", "position", 0, &_Number, &flash_text_engine_TabStop, 0}; static varinfo_t flash_text_engine_TabStop_decimalAlignmentToken = {0x01, 0x00, 0x80, 0x16, "", "decimalAlignmentToken", 0, &_String, &flash_text_engine_TabStop, 0}; static classinfo_t flash_text_engine_JustificationStyle = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "JustificationStyle", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_JustificationStyle_PUSH_OUT_ONLY = {0x01, 0x00, 0x82, 0x16, "", "PUSH_OUT_ONLY", 0, &_String, &flash_text_engine_JustificationStyle, 0}; static varinfo_t flash_text_engine_JustificationStyle_PRIORITIZE_LEAST_ADJUSTMENT = {0x01, 0x00, 0x82, 0x16, "", "PRIORITIZE_LEAST_ADJUSTMENT", 0, &_String, &flash_text_engine_JustificationStyle, 0}; static varinfo_t flash_text_engine_JustificationStyle_PUSH_IN_KINSOKU = {0x01, 0x00, 0x82, 0x16, "", "PUSH_IN_KINSOKU", 0, &_String, &flash_text_engine_JustificationStyle, 0}; static methodinfo_t flash_sampler_startSampling = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "startSampling", 0, &voidclass, 0, 0}; static classinfo_t flash_text_engine_TextRotation = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextRotation", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextRotation_ROTATE_270 = {0x01, 0x00, 0x82, 0x16, "", "ROTATE_270", 0, &_String, &flash_text_engine_TextRotation, 0}; static varinfo_t flash_text_engine_TextRotation_AUTO = {0x01, 0x00, 0x82, 0x16, "", "AUTO", 0, &_String, &flash_text_engine_TextRotation, 0}; static varinfo_t flash_text_engine_TextRotation_ROTATE_0 = {0x01, 0x00, 0x82, 0x16, "", "ROTATE_0", 0, &_String, &flash_text_engine_TextRotation, 0}; static varinfo_t flash_text_engine_TextRotation_ROTATE_90 = {0x01, 0x00, 0x82, 0x16, "", "ROTATE_90", 0, &_String, &flash_text_engine_TextRotation, 0}; static varinfo_t flash_text_engine_TextRotation_ROTATE_180 = {0x01, 0x00, 0x82, 0x16, "", "ROTATE_180", 0, &_String, &flash_text_engine_TextRotation, 0}; static methodinfo_t flash_sampler_clearSamples = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "clearSamples", 0, &voidclass, 0, 0}; static classinfo_t flash_system_IMEConversionMode = {0x03, 0x00, 0x81, 0x16, "flash.system", "IMEConversionMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_IMEConversionMode_JAPANESE_KATAKANA_FULL = {0x01, 0x00, 0x82, 0x16, "", "JAPANESE_KATAKANA_FULL", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_CHINESE = {0x01, 0x00, 0x82, 0x16, "", "CHINESE", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_JAPANESE_KATAKANA_HALF = {0x01, 0x00, 0x82, 0x16, "", "JAPANESE_KATAKANA_HALF", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_UNKNOWN = {0x01, 0x00, 0x82, 0x16, "", "UNKNOWN", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_KOREAN = {0x01, 0x00, 0x82, 0x16, "", "KOREAN", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_ALPHANUMERIC_HALF = {0x01, 0x00, 0x82, 0x16, "", "ALPHANUMERIC_HALF", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_ALPHANUMERIC_FULL = {0x01, 0x00, 0x82, 0x16, "", "ALPHANUMERIC_FULL", 0, &_String, &flash_system_IMEConversionMode, 0}; static varinfo_t flash_system_IMEConversionMode_JAPANESE_HIRAGANA = {0x01, 0x00, 0x82, 0x16, "", "JAPANESE_HIRAGANA", 0, &_String, &flash_system_IMEConversionMode, 0}; static classinfo_t flash_display_StageScaleMode = {0x03, 0x00, 0x81, 0x16, "flash.display", "StageScaleMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_StageScaleMode_SHOW_ALL = {0x01, 0x00, 0x82, 0x16, "", "SHOW_ALL", 0, &_String, &flash_display_StageScaleMode, 0}; static varinfo_t flash_display_StageScaleMode_NO_BORDER = {0x01, 0x00, 0x82, 0x16, "", "NO_BORDER", 0, &_String, &flash_display_StageScaleMode, 0}; static varinfo_t flash_display_StageScaleMode_EXACT_FIT = {0x01, 0x00, 0x82, 0x16, "", "EXACT_FIT", 0, &_String, &flash_display_StageScaleMode, 0}; static varinfo_t flash_display_StageScaleMode_NO_SCALE = {0x01, 0x00, 0x82, 0x16, "", "NO_SCALE", 0, &_String, &flash_display_StageScaleMode, 0}; static methodinfo_t flash_sampler_getSize = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getSize", 0, &_Number, 0, 0}; static classinfo_t flash_net_URLStream = {0x03, 0x00, 0x80, 0x16, "flash.net", "URLStream", 0, &flash_events_EventDispatcher, interfaces: {&flash_utils_IDataInput, 0}}; static methodinfo_t flash_net_URLStream_readUTF = {0x02, 0x00, 0x80, 0x16, "", "readUTF", 0, &_String, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readByte = {0x02, 0x00, 0x80, 0x16, "", "readByte", 0, &_int, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readUTFBytes = {0x02, 0x00, 0x80, 0x16, "", "readUTFBytes", 0, &_String, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readShort = {0x02, 0x00, 0x80, 0x16, "", "readShort", 0, &_int, &flash_net_URLStream, 0}; static varinfo_t flash_net_URLStream_objectEncoding = {0x01, 0x00, 0x80, 0x16, "", "objectEncoding", 0, &_uint, &flash_net_URLStream, 0}; static varinfo_t flash_net_URLStream_connected = {0x01, 0x00, 0x80, 0x16, "", "connected", 0, &_Boolean, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readUnsignedInt = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedInt", 0, &_uint, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readDouble = {0x02, 0x00, 0x80, 0x16, "", "readDouble", 0, &_Number, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readBytes = {0x02, 0x00, 0x80, 0x16, "", "readBytes", 0, &voidclass, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readUnsignedByte = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedByte", 0, &_uint, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readMultiByte = {0x02, 0x00, 0x80, 0x16, "", "readMultiByte", 0, &_String, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readInt = {0x02, 0x00, 0x80, 0x16, "", "readInt", 0, &_int, &flash_net_URLStream, 0}; static varinfo_t flash_net_URLStream_bytesAvailable = {0x01, 0x00, 0x80, 0x16, "", "bytesAvailable", 0, &_uint, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_load = {0x02, 0x00, 0x80, 0x16, "", "load", 0, &voidclass, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readUnsignedShort = {0x02, 0x00, 0x80, 0x16, "", "readUnsignedShort", 0, &_uint, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readObject = {0x02, 0x00, 0x80, 0x16, "", "readObject", 0, 0, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readFloat = {0x02, 0x00, 0x80, 0x16, "", "readFloat", 0, &_Number, &flash_net_URLStream, 0}; static varinfo_t flash_net_URLStream_endian = {0x01, 0x00, 0x80, 0x16, "", "endian", 0, &_String, &flash_net_URLStream, 0}; static methodinfo_t flash_net_URLStream_readBoolean = {0x02, 0x00, 0x80, 0x16, "", "readBoolean", 0, &_Boolean, &flash_net_URLStream, 0}; static classinfo_t flash_display_BlendMode = {0x03, 0x00, 0x81, 0x16, "flash.display", "BlendMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_BlendMode_LAYER = {0x01, 0x00, 0x82, 0x16, "", "LAYER", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_ERASE = {0x01, 0x00, 0x82, 0x16, "", "ERASE", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_HARDLIGHT = {0x01, 0x00, 0x82, 0x16, "", "HARDLIGHT", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_OVERLAY = {0x01, 0x00, 0x82, 0x16, "", "OVERLAY", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_ALPHA = {0x01, 0x00, 0x82, 0x16, "", "ALPHA", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_SUBTRACT = {0x01, 0x00, 0x82, 0x16, "", "SUBTRACT", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_INVERT = {0x01, 0x00, 0x82, 0x16, "", "INVERT", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_DIFFERENCE = {0x01, 0x00, 0x82, 0x16, "", "DIFFERENCE", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_DARKEN = {0x01, 0x00, 0x82, 0x16, "", "DARKEN", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_SHADER = {0x01, 0x00, 0x82, 0x16, "", "SHADER", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_MULTIPLY = {0x01, 0x00, 0x82, 0x16, "", "MULTIPLY", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_ADD = {0x01, 0x00, 0x82, 0x16, "", "ADD", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_SCREEN = {0x01, 0x00, 0x82, 0x16, "", "SCREEN", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_display_BlendMode, 0}; static varinfo_t flash_display_BlendMode_LIGHTEN = {0x01, 0x00, 0x82, 0x16, "", "LIGHTEN", 0, &_String, &flash_display_BlendMode, 0}; static classinfo_t flash_ui_Mouse = {0x03, 0x00, 0x81, 0x16, "flash.ui", "Mouse", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_Mouse_cursor = {0x01, 0x00, 0x82, 0x16, "", "cursor", 0, &_String, &flash_ui_Mouse, 0}; static methodinfo_t flash_ui_Mouse_show = {0x02, 0x00, 0x82, 0x16, "", "show", 0, &voidclass, &flash_ui_Mouse, 0}; static methodinfo_t flash_ui_Mouse_hide = {0x02, 0x00, 0x82, 0x16, "", "hide", 0, &voidclass, &flash_ui_Mouse, 0}; static classinfo_t flash_errors_InvalidSWFError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "InvalidSWFError", 0, &_Error, interfaces: {0}}; static classinfo_t flash_text_engine_RenderingMode = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "RenderingMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_RenderingMode_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_text_engine_RenderingMode, 0}; static varinfo_t flash_text_engine_RenderingMode_CFF = {0x01, 0x00, 0x82, 0x16, "", "CFF", 0, &_String, &flash_text_engine_RenderingMode, 0}; static classinfo_t flash_display_GraphicsTrianglePath = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsTrianglePath", 0, &_Object, interfaces: {&flash_display_IGraphicsPath, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsTrianglePath_culling = {0x01, 0x00, 0x80, 0x16, "", "culling", 0, &_String, &flash_display_GraphicsTrianglePath, 0}; static varinfo_t flash_display_GraphicsTrianglePath_vertices = {0x01, 0x00, 0x80, 0x16, "", "vertices", 0, &__AS3___vec_Vector, &flash_display_GraphicsTrianglePath, 0}; static varinfo_t flash_display_GraphicsTrianglePath_indices = {0x01, 0x00, 0x80, 0x16, "", "indices", 0, &__AS3___vec_Vector, &flash_display_GraphicsTrianglePath, 0}; static varinfo_t flash_display_GraphicsTrianglePath_uvtData = {0x01, 0x00, 0x80, 0x16, "", "uvtData", 0, &__AS3___vec_Vector, &flash_display_GraphicsTrianglePath, 0}; static classinfo_t flash_display_IGraphicsFill = {0x03, 0x00, 0x90, 0x16, "flash.display", "IGraphicsFill", 0, 0, interfaces: {0}}; static classinfo_t flash_text_engine_TypographicCase = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TypographicCase", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TypographicCase_UPPERCASE = {0x01, 0x00, 0x82, 0x16, "", "UPPERCASE", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_LOWERCASE = {0x01, 0x00, 0x82, 0x16, "", "LOWERCASE", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_SMALL_CAPS = {0x01, 0x00, 0x82, 0x16, "", "SMALL_CAPS", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_TITLE = {0x01, 0x00, 0x82, 0x16, "", "TITLE", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_CAPS = {0x01, 0x00, 0x82, 0x16, "", "CAPS", 0, &_String, &flash_text_engine_TypographicCase, 0}; static varinfo_t flash_text_engine_TypographicCase_CAPS_AND_SMALL_CAPS = {0x01, 0x00, 0x82, 0x16, "", "CAPS_AND_SMALL_CAPS", 0, &_String, &flash_text_engine_TypographicCase, 0}; static classinfo_t _XML = {0x03, 0x00, 0x89, 0x16, "", "XML", 0, &_Object, interfaces: {0}}; static methodinfo_t _XML_normalize = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "normalize", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_removeNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "removeNamespace", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_prependChild = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "prependChild", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_toXMLString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toXMLString", 0, &_String, &_XML, 0}; static methodinfo_t _XML_text = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "text", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_nodeKind = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "nodeKind", 0, &_String, &_XML, 0}; static methodinfo_t _XML_copy = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "copy", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_XML, 0}; static methodinfo_t _XML_childIndex = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "childIndex", 0, &_int, &_XML, 0}; static methodinfo_t _XML_setName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setName", 0, &voidclass, &_XML, 0}; static methodinfo_t _XML_setLocalName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setLocalName", 0, &voidclass, &_XML, 0}; static methodinfo_t _XML_namespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "namespace", 0, 0, &_XML, 0}; static methodinfo_t _XML_insertChildBefore = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "insertChildBefore", 0, 0, &_XML, 0}; static methodinfo_t _XML_addNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "addNamespace", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_propertyIsEnumerable = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "propertyIsEnumerable", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_comments = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "comments", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_attributes = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "attributes", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_descendants = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "descendants", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_replace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "replace", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_setNotification = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setNotification", 0, 0, &_XML, 0}; static methodinfo_t _XML_children = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "children", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_contains = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "contains", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_hasSimpleContent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasSimpleContent", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_elements = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "elements", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_hasComplexContent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasComplexContent", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_insertChildAfter = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "insertChildAfter", 0, 0, &_XML, 0}; static methodinfo_t _XML_parent = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "parent", 0, 0, &_XML, 0}; static methodinfo_t _XML_length = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "length", 0, &_int, &_XML, 0}; static methodinfo_t _XML_processingInstructions = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "processingInstructions", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_child = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "child", 0, &_XMLList, &_XML, 0}; static methodinfo_t _XML_appendChild = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "appendChild", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_localName = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "localName", 0, &_Object, &_XML, 0}; static methodinfo_t _XML_notification = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "notification", 0, &_Function, &_XML, 0}; static methodinfo_t _XML_inScopeNamespaces = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "inScopeNamespaces", 0, &_Array, &_XML, 0}; static methodinfo_t _XML_hasOwnProperty = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "hasOwnProperty", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_namespaceDeclarations = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "namespaceDeclarations", 0, &_Array, &_XML, 0}; static methodinfo_t _XML_setNamespace = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setNamespace", 0, &voidclass, &_XML, 0}; static methodinfo_t _XML_name = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "name", 0, &_Object, &_XML, 0}; static methodinfo_t _XML_setChildren = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "setChildren", 0, &_XML, &_XML, 0}; static methodinfo_t _XML_attribute = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "attribute", 0, &_XMLList, &_XML, 0}; static varinfo_t _XML_prettyPrinting = {0x01, 0x00, 0x82, 0x16, "", "prettyPrinting", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_setSettings = {0x02, 0x00, 0x82, 0x08, "http://adobe.com/AS3/2006/builtin", "setSettings", 0, &voidclass, &_XML, 0}; static varinfo_t _XML_ignoreComments = {0x01, 0x00, 0x82, 0x16, "", "ignoreComments", 0, &_Boolean, &_XML, 0}; static varinfo_t _XML_prettyIndent = {0x01, 0x00, 0x82, 0x16, "", "prettyIndent", 0, &_int, &_XML, 0}; static methodinfo_t _XML_settings = {0x02, 0x00, 0x82, 0x08, "http://adobe.com/AS3/2006/builtin", "settings", 0, &_Object, &_XML, 0}; static varinfo_t _XML_ignoreProcessingInstructions = {0x01, 0x00, 0x82, 0x16, "", "ignoreProcessingInstructions", 0, &_Boolean, &_XML, 0}; static varinfo_t _XML_ignoreWhitespace = {0x01, 0x00, 0x82, 0x16, "", "ignoreWhitespace", 0, &_Boolean, &_XML, 0}; static methodinfo_t _XML_defaultSettings = {0x02, 0x00, 0x82, 0x08, "http://adobe.com/AS3/2006/builtin", "defaultSettings", 0, &_Object, &_XML, 0}; static classinfo_t flash_net_NetStreamInfo = {0x03, 0x00, 0x81, 0x16, "flash.net", "NetStreamInfo", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_NetStreamInfo_maxBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "maxBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_dataBufferByteLength = {0x01, 0x00, 0x80, 0x16, "", "dataBufferByteLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_videoByteCount = {0x01, 0x00, 0x80, 0x16, "", "videoByteCount", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_videoBufferLength = {0x01, 0x00, 0x80, 0x16, "", "videoBufferLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_audioBufferByteLength = {0x01, 0x00, 0x80, 0x16, "", "audioBufferByteLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_dataBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "dataBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_SRTT = {0x01, 0x00, 0x80, 0x16, "", "SRTT", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_droppedFrames = {0x01, 0x00, 0x80, 0x16, "", "droppedFrames", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_audioByteCount = {0x01, 0x00, 0x80, 0x16, "", "audioByteCount", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_audioBufferLength = {0x01, 0x00, 0x80, 0x16, "", "audioBufferLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_byteCount = {0x01, 0x00, 0x80, 0x16, "", "byteCount", 0, &_Number, &flash_net_NetStreamInfo, 0}; static methodinfo_t flash_net_NetStreamInfo_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_dataByteCount = {0x01, 0x00, 0x80, 0x16, "", "dataByteCount", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_videoBufferByteLength = {0x01, 0x00, 0x80, 0x16, "", "videoBufferByteLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_dataBufferLength = {0x01, 0x00, 0x80, 0x16, "", "dataBufferLength", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_audioLossRate = {0x01, 0x00, 0x80, 0x16, "", "audioLossRate", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_videoBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "videoBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_currentBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "currentBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_audioBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "audioBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static varinfo_t flash_net_NetStreamInfo_playbackBytesPerSecond = {0x01, 0x00, 0x80, 0x16, "", "playbackBytesPerSecond", 0, &_Number, &flash_net_NetStreamInfo, 0}; static classinfo_t flash_display_Stage = {0x03, 0x00, 0x80, 0x16, "flash.display", "Stage", 0, &flash_display_DisplayObjectContainer, interfaces: {0}}; static methodinfo_t flash_display_Stage_setChildIndex = {0x02, 0x00, 0x80, 0x16, "", "setChildIndex", 0, &voidclass, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_stageFocusRect = {0x01, 0x00, 0x80, 0x16, "", "stageFocusRect", 0, &_Boolean, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_frameRate = {0x01, 0x00, 0x80, 0x16, "", "frameRate", 0, &_Number, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_invalidate = {0x02, 0x00, 0x80, 0x16, "", "invalidate", 0, &voidclass, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_textSnapshot = {0x01, 0x00, 0x80, 0x16, "", "textSnapshot", 0, &flash_text_TextSnapshot, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_String, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_willTrigger = {0x02, 0x00, 0x80, 0x16, "", "willTrigger", 0, &_Boolean, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_dispatchEvent = {0x02, 0x00, 0x80, 0x16, "", "dispatchEvent", 0, &_Boolean, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_isFocusInaccessible = {0x02, 0x00, 0x80, 0x16, "", "isFocusInaccessible", 0, &_Boolean, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_removeChildAt = {0x02, 0x00, 0x80, 0x16, "", "removeChildAt", 0, &flash_display_DisplayObject, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_fullScreenWidth = {0x01, 0x00, 0x80, 0x16, "", "fullScreenWidth", 0, &_uint, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_addChildAt = {0x02, 0x00, 0x80, 0x16, "", "addChildAt", 0, &flash_display_DisplayObject, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_Number, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_fullScreenSourceRect = {0x01, 0x00, 0x80, 0x16, "", "fullScreenSourceRect", 0, &flash_geom_Rectangle, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_Number, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_addChild = {0x02, 0x00, 0x80, 0x16, "", "addChild", 0, &flash_display_DisplayObject, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_numChildren = {0x01, 0x00, 0x80, 0x16, "", "numChildren", 0, &_int, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_mouseChildren = {0x01, 0x00, 0x80, 0x16, "", "mouseChildren", 0, &_Boolean, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_swapChildrenAt = {0x02, 0x00, 0x80, 0x16, "", "swapChildrenAt", 0, &voidclass, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_showDefaultContextMenu = {0x01, 0x00, 0x80, 0x16, "", "showDefaultContextMenu", 0, &_Boolean, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_addEventListener = {0x02, 0x00, 0x80, 0x16, "", "addEventListener", 0, &voidclass, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_stageHeight = {0x01, 0x00, 0x80, 0x16, "", "stageHeight", 0, &_int, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_fullScreenHeight = {0x01, 0x00, 0x80, 0x16, "", "fullScreenHeight", 0, &_uint, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_align = {0x01, 0x00, 0x80, 0x16, "", "align", 0, &_String, &flash_display_Stage, 0}; static methodinfo_t flash_display_Stage_hasEventListener = {0x02, 0x00, 0x80, 0x16, "", "hasEventListener", 0, &_Boolean, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_displayState = {0x01, 0x00, 0x80, 0x16, "", "displayState", 0, &_String, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_scaleMode = {0x01, 0x00, 0x80, 0x16, "", "scaleMode", 0, &_String, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_tabChildren = {0x01, 0x00, 0x80, 0x16, "", "tabChildren", 0, &_Boolean, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_focus = {0x01, 0x00, 0x80, 0x16, "", "focus", 0, &flash_display_InteractiveObject, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_colorCorrection = {0x01, 0x00, 0x80, 0x16, "", "colorCorrection", 0, &_String, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_colorCorrectionSupport = {0x01, 0x00, 0x80, 0x16, "", "colorCorrectionSupport", 0, &_String, &flash_display_Stage, 0}; static varinfo_t flash_display_Stage_stageWidth = {0x01, 0x00, 0x80, 0x16, "", "stageWidth", 0, &_int, &flash_display_Stage, 0}; static classinfo_t flash_ui_ContextMenuItem = {0x03, 0x00, 0x81, 0x16, "flash.ui", "ContextMenuItem", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_ui_ContextMenuItem_separatorBefore = {0x01, 0x00, 0x80, 0x16, "", "separatorBefore", 0, &_Boolean, &flash_ui_ContextMenuItem, 0}; static varinfo_t flash_ui_ContextMenuItem_enabled = {0x01, 0x00, 0x80, 0x16, "", "enabled", 0, &_Boolean, &flash_ui_ContextMenuItem, 0}; static varinfo_t flash_ui_ContextMenuItem_caption = {0x01, 0x00, 0x80, 0x16, "", "caption", 0, &_String, &flash_ui_ContextMenuItem, 0}; static methodinfo_t flash_ui_ContextMenuItem_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_ui_ContextMenuItem, &flash_ui_ContextMenuItem, 0}; static varinfo_t flash_ui_ContextMenuItem_visible = {0x01, 0x00, 0x80, 0x16, "", "visible", 0, &_Boolean, &flash_ui_ContextMenuItem, 0}; static classinfo_t flash_trace_Trace = {0x03, 0x00, 0x80, 0x16, "flash.trace", "Trace", 0, &_Object, interfaces: {0}}; static varinfo_t flash_trace_Trace_METHODS_AND_LINES_WITH_ARGS = {0x01, 0x00, 0x82, 0x16, "", "METHODS_AND_LINES_WITH_ARGS", 0, &_int, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_FILE = {0x01, 0x00, 0x82, 0x16, "", "FILE", 0, 0, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_METHODS_WITH_ARGS = {0x01, 0x00, 0x82, 0x16, "", "METHODS_WITH_ARGS", 0, &_int, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_OFF = {0x01, 0x00, 0x82, 0x16, "", "OFF", 0, &_int, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_METHODS_AND_LINES = {0x01, 0x00, 0x82, 0x16, "", "METHODS_AND_LINES", 0, &_int, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_LISTENER = {0x01, 0x00, 0x82, 0x16, "", "LISTENER", 0, 0, &flash_trace_Trace, 0}; static methodinfo_t flash_trace_Trace_getLevel = {0x02, 0x00, 0x82, 0x16, "", "getLevel", 0, &_int, &flash_trace_Trace, 0}; static methodinfo_t flash_trace_Trace_setLevel = {0x02, 0x00, 0x82, 0x16, "", "setLevel", 0, 0, &flash_trace_Trace, 0}; static methodinfo_t flash_trace_Trace_setListener = {0x02, 0x00, 0x82, 0x16, "", "setListener", 0, 0, &flash_trace_Trace, 0}; static methodinfo_t flash_trace_Trace_getListener = {0x02, 0x00, 0x82, 0x16, "", "getListener", 0, &_Function, &flash_trace_Trace, 0}; static varinfo_t flash_trace_Trace_METHODS = {0x01, 0x00, 0x82, 0x16, "", "METHODS", 0, &_int, &flash_trace_Trace, 0}; static classinfo_t flash_events_TimerEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "TimerEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_TimerEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_TimerEvent, 0}; static methodinfo_t flash_events_TimerEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_TimerEvent, 0}; static methodinfo_t flash_events_TimerEvent_updateAfterEvent = {0x02, 0x00, 0x80, 0x16, "", "updateAfterEvent", 0, &voidclass, &flash_events_TimerEvent, 0}; static varinfo_t flash_events_TimerEvent_TIMER_COMPLETE = {0x01, 0x00, 0x82, 0x16, "", "TIMER_COMPLETE", 0, &_String, &flash_events_TimerEvent, 0}; static varinfo_t flash_events_TimerEvent_TIMER = {0x01, 0x00, 0x82, 0x16, "", "TIMER", 0, &_String, &flash_events_TimerEvent, 0}; static classinfo_t flash_events_SampleDataEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "SampleDataEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_SampleDataEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_SampleDataEvent, 0}; static varinfo_t flash_events_SampleDataEvent_position = {0x01, 0x00, 0x80, 0x16, "", "position", 0, &_Number, &flash_events_SampleDataEvent, 0}; static methodinfo_t flash_events_SampleDataEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_SampleDataEvent, 0}; static varinfo_t flash_events_SampleDataEvent_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &flash_utils_ByteArray, &flash_events_SampleDataEvent, 0}; static varinfo_t flash_events_SampleDataEvent_SAMPLE_DATA = {0x01, 0x00, 0x82, 0x16, "", "SAMPLE_DATA", 0, &_String, &flash_events_SampleDataEvent, 0}; static classinfo_t flash_display_ShaderPrecision = {0x03, 0x00, 0x81, 0x16, "flash.display", "ShaderPrecision", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ShaderPrecision_FULL = {0x01, 0x00, 0x82, 0x16, "", "FULL", 0, &_String, &flash_display_ShaderPrecision, 0}; static varinfo_t flash_display_ShaderPrecision_FAST = {0x01, 0x00, 0x82, 0x16, "", "FAST", 0, &_String, &flash_display_ShaderPrecision, 0}; static classinfo_t flash_net_FileReference = {0x03, 0x00, 0x80, 0x16, "flash.net", "FileReference", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_FileReference_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_browse = {0x02, 0x00, 0x80, 0x16, "", "browse", 0, &_Boolean, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_creationDate = {0x01, 0x00, 0x80, 0x16, "", "creationDate", 0, &_Date, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_upload = {0x02, 0x00, 0x80, 0x16, "", "upload", 0, &voidclass, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_download = {0x02, 0x00, 0x80, 0x16, "", "download", 0, &voidclass, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_save = {0x02, 0x00, 0x80, 0x16, "", "save", 0, &voidclass, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_cancel = {0x02, 0x00, 0x80, 0x16, "", "cancel", 0, &voidclass, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_creator = {0x01, 0x00, 0x80, 0x16, "", "creator", 0, &_String, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &flash_utils_ByteArray, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_size = {0x01, 0x00, 0x80, 0x16, "", "size", 0, &_uint, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_net_FileReference, 0}; static methodinfo_t flash_net_FileReference_load = {0x02, 0x00, 0x80, 0x16, "", "load", 0, &voidclass, &flash_net_FileReference, 0}; static varinfo_t flash_net_FileReference_modificationDate = {0x01, 0x00, 0x80, 0x16, "", "modificationDate", 0, &_Date, &flash_net_FileReference, 0}; static classinfo_t _DefinitionError = {0x03, 0x00, 0x88, 0x16, "", "DefinitionError", 0, &_Error, interfaces: {0}}; static varinfo_t _DefinitionError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_DefinitionError, 0}; static classinfo_t flash_events_EventDispatcher = {0x03, 0x00, 0x80, 0x16, "flash.events", "EventDispatcher", 0, &_Object, interfaces: {&flash_events_IEventDispatcher, 0}}; static methodinfo_t flash_events_EventDispatcher_willTrigger = {0x02, 0x00, 0x80, 0x16, "", "willTrigger", 0, &_Boolean, &flash_events_EventDispatcher, 0}; static methodinfo_t flash_events_EventDispatcher_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_EventDispatcher, 0}; static methodinfo_t flash_events_EventDispatcher_removeEventListener = {0x02, 0x00, 0x80, 0x16, "", "removeEventListener", 0, &voidclass, &flash_events_EventDispatcher, 0}; static methodinfo_t flash_events_EventDispatcher_hasEventListener = {0x02, 0x00, 0x80, 0x16, "", "hasEventListener", 0, &_Boolean, &flash_events_EventDispatcher, 0}; static methodinfo_t flash_events_EventDispatcher_addEventListener = {0x02, 0x00, 0x80, 0x16, "", "addEventListener", 0, &voidclass, &flash_events_EventDispatcher, 0}; static methodinfo_t flash_events_EventDispatcher_dispatchEvent = {0x02, 0x00, 0x80, 0x16, "", "dispatchEvent", 0, &_Boolean, &flash_events_EventDispatcher, 0}; static classinfo_t flash_net_SharedObjectFlushStatus = {0x03, 0x00, 0x81, 0x16, "flash.net", "SharedObjectFlushStatus", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_SharedObjectFlushStatus_FLUSHED = {0x01, 0x00, 0x82, 0x16, "", "FLUSHED", 0, &_String, &flash_net_SharedObjectFlushStatus, 0}; static varinfo_t flash_net_SharedObjectFlushStatus_PENDING = {0x01, 0x00, 0x82, 0x16, "", "PENDING", 0, &_String, &flash_net_SharedObjectFlushStatus, 0}; static classinfo_t flash_text_TextLineMetrics = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextLineMetrics", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextLineMetrics_descent = {0x01, 0x00, 0x80, 0x16, "", "descent", 0, &_Number, &flash_text_TextLineMetrics, 0}; static varinfo_t flash_text_TextLineMetrics_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_Number, &flash_text_TextLineMetrics, 0}; static varinfo_t flash_text_TextLineMetrics_ascent = {0x01, 0x00, 0x80, 0x16, "", "ascent", 0, &_Number, &flash_text_TextLineMetrics, 0}; static varinfo_t flash_text_TextLineMetrics_leading = {0x01, 0x00, 0x80, 0x16, "", "leading", 0, &_Number, &flash_text_TextLineMetrics, 0}; static varinfo_t flash_text_TextLineMetrics_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_Number, &flash_text_TextLineMetrics, 0}; static varinfo_t flash_text_TextLineMetrics_x = {0x01, 0x00, 0x80, 0x16, "", "x", 0, &_Number, &flash_text_TextLineMetrics, 0}; static classinfo_t flash_text_AntiAliasType = {0x03, 0x00, 0x81, 0x16, "flash.text", "AntiAliasType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_AntiAliasType_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_text_AntiAliasType, 0}; static varinfo_t flash_text_AntiAliasType_ADVANCED = {0x01, 0x00, 0x82, 0x16, "", "ADVANCED", 0, &_String, &flash_text_AntiAliasType, 0}; static classinfo_t flash_system_SecurityDomain = {0x03, 0x00, 0x80, 0x16, "flash.system", "SecurityDomain", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_SecurityDomain_currentDomain = {0x01, 0x00, 0x82, 0x16, "", "currentDomain", 0, &flash_system_SecurityDomain, &flash_system_SecurityDomain, 0}; static classinfo_t flash_text_Font = {0x03, 0x00, 0x80, 0x16, "flash.text", "Font", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_text_Font_hasGlyphs = {0x02, 0x00, 0x80, 0x16, "", "hasGlyphs", 0, &_Boolean, &flash_text_Font, 0}; static varinfo_t flash_text_Font_fontName = {0x01, 0x00, 0x80, 0x16, "", "fontName", 0, &_String, &flash_text_Font, 0}; static varinfo_t flash_text_Font_fontStyle = {0x01, 0x00, 0x80, 0x16, "", "fontStyle", 0, &_String, &flash_text_Font, 0}; static varinfo_t flash_text_Font_fontType = {0x01, 0x00, 0x80, 0x16, "", "fontType", 0, &_String, &flash_text_Font, 0}; static methodinfo_t flash_text_Font_enumerateFonts = {0x02, 0x00, 0x82, 0x16, "", "enumerateFonts", 0, &_Array, &flash_text_Font, 0}; static methodinfo_t flash_text_Font_registerFont = {0x02, 0x00, 0x82, 0x16, "", "registerFont", 0, &voidclass, &flash_text_Font, 0}; static classinfo_t _RegExp = {0x03, 0x00, 0x88, 0x16, "", "RegExp", 0, &_Object, interfaces: {0}}; static varinfo_t _RegExp_source = {0x01, 0x00, 0x80, 0x16, "", "source", 0, &_String, &_RegExp, 0}; static methodinfo_t _RegExp_test = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "test", 0, &_Boolean, &_RegExp, 0}; static varinfo_t _RegExp_global = {0x01, 0x00, 0x80, 0x16, "", "global", 0, &_Boolean, &_RegExp, 0}; static methodinfo_t _RegExp_exec = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "exec", 0, 0, &_RegExp, 0}; static varinfo_t _RegExp_ignoreCase = {0x01, 0x00, 0x80, 0x16, "", "ignoreCase", 0, &_Boolean, &_RegExp, 0}; static varinfo_t _RegExp_dotall = {0x01, 0x00, 0x80, 0x16, "", "dotall", 0, &_Boolean, &_RegExp, 0}; static varinfo_t _RegExp_lastIndex = {0x01, 0x00, 0x80, 0x16, "", "lastIndex", 0, &_int, &_RegExp, 0}; static varinfo_t _RegExp_extended = {0x01, 0x00, 0x80, 0x16, "", "extended", 0, &_Boolean, &_RegExp, 0}; static varinfo_t _RegExp_multiline = {0x01, 0x00, 0x80, 0x16, "", "multiline", 0, &_Boolean, &_RegExp, 0}; static varinfo_t _RegExp_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_RegExp, 0}; static classinfo_t flash_accessibility_AccessibilityProperties = {0x03, 0x00, 0x80, 0x16, "flash.accessibility", "AccessibilityProperties", 0, &_Object, interfaces: {0}}; static varinfo_t flash_accessibility_AccessibilityProperties_forceSimple = {0x01, 0x00, 0x80, 0x16, "", "forceSimple", 0, &_Boolean, &flash_accessibility_AccessibilityProperties, 0}; static varinfo_t flash_accessibility_AccessibilityProperties_noAutoLabeling = {0x01, 0x00, 0x80, 0x16, "", "noAutoLabeling", 0, &_Boolean, &flash_accessibility_AccessibilityProperties, 0}; static varinfo_t flash_accessibility_AccessibilityProperties_description = {0x01, 0x00, 0x80, 0x16, "", "description", 0, &_String, &flash_accessibility_AccessibilityProperties, 0}; static varinfo_t flash_accessibility_AccessibilityProperties_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_accessibility_AccessibilityProperties, 0}; static varinfo_t flash_accessibility_AccessibilityProperties_shortcut = {0x01, 0x00, 0x80, 0x16, "", "shortcut", 0, &_String, &flash_accessibility_AccessibilityProperties, 0}; static varinfo_t flash_accessibility_AccessibilityProperties_silent = {0x01, 0x00, 0x80, 0x16, "", "silent", 0, &_Boolean, &flash_accessibility_AccessibilityProperties, 0}; static classinfo_t flash_ui_ContextMenu = {0x03, 0x00, 0x81, 0x16, "flash.ui", "ContextMenu", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_ui_ContextMenu_hideBuiltInItems = {0x02, 0x00, 0x80, 0x16, "", "hideBuiltInItems", 0, &voidclass, &flash_ui_ContextMenu, 0}; static varinfo_t flash_ui_ContextMenu_clipboardItems = {0x01, 0x00, 0x80, 0x16, "", "clipboardItems", 0, &flash_ui_ContextMenuClipboardItems, &flash_ui_ContextMenu, 0}; static varinfo_t flash_ui_ContextMenu_builtInItems = {0x01, 0x00, 0x80, 0x16, "", "builtInItems", 0, &flash_ui_ContextMenuBuiltInItems, &flash_ui_ContextMenu, 0}; static varinfo_t flash_ui_ContextMenu_customItems = {0x01, 0x00, 0x80, 0x16, "", "customItems", 0, &_Array, &flash_ui_ContextMenu, 0}; static methodinfo_t flash_ui_ContextMenu_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_ui_ContextMenu, &flash_ui_ContextMenu, 0}; static varinfo_t flash_ui_ContextMenu_link = {0x01, 0x00, 0x80, 0x16, "", "link", 0, &flash_net_URLRequest, &flash_ui_ContextMenu, 0}; static varinfo_t flash_ui_ContextMenu_clipboardMenu = {0x01, 0x00, 0x80, 0x16, "", "clipboardMenu", 0, &_Boolean, &flash_ui_ContextMenu, 0}; static classinfo_t flash_text_TextFieldAutoSize = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextFieldAutoSize", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextFieldAutoSize_LEFT = {0x01, 0x00, 0x82, 0x16, "", "LEFT", 0, &_String, &flash_text_TextFieldAutoSize, 0}; static varinfo_t flash_text_TextFieldAutoSize_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "RIGHT", 0, &_String, &flash_text_TextFieldAutoSize, 0}; static varinfo_t flash_text_TextFieldAutoSize_CENTER = {0x01, 0x00, 0x82, 0x16, "", "CENTER", 0, &_String, &flash_text_TextFieldAutoSize, 0}; static varinfo_t flash_text_TextFieldAutoSize_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_text_TextFieldAutoSize, 0}; static classinfo_t _Math = {0x03, 0x00, 0x81, 0x16, "", "Math", 0, &_Object, interfaces: {0}}; static methodinfo_t _Math_ceil = {0x02, 0x00, 0x82, 0x16, "", "ceil", 0, &_Number, &_Math, 0}; static varinfo_t _Math_SQRT2 = {0x01, 0x00, 0x82, 0x16, "", "SQRT2", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_cos = {0x02, 0x00, 0x82, 0x16, "", "cos", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_abs = {0x02, 0x00, 0x82, 0x16, "", "abs", 0, &_Number, &_Math, 0}; static varinfo_t _Math_PI = {0x01, 0x00, 0x82, 0x16, "", "PI", 0, &_Number, &_Math, 0}; static varinfo_t _Math_E = {0x01, 0x00, 0x82, 0x16, "", "E", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_round = {0x02, 0x00, 0x82, 0x16, "", "round", 0, &_Number, &_Math, 0}; static varinfo_t _Math_LN10 = {0x01, 0x00, 0x82, 0x16, "", "LN10", 0, &_Number, &_Math, 0}; static varinfo_t _Math_SQRT1_2 = {0x01, 0x00, 0x82, 0x16, "", "SQRT1_2", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_log = {0x02, 0x00, 0x82, 0x16, "", "log", 0, &_Number, &_Math, 0}; static varinfo_t _Math_LOG10E = {0x01, 0x00, 0x82, 0x16, "", "LOG10E", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_random = {0x02, 0x00, 0x82, 0x16, "", "random", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_acos = {0x02, 0x00, 0x82, 0x16, "", "acos", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_tan = {0x02, 0x00, 0x82, 0x16, "", "tan", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_asin = {0x02, 0x00, 0x82, 0x16, "", "asin", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_exp = {0x02, 0x00, 0x82, 0x16, "", "exp", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_atan2 = {0x02, 0x00, 0x82, 0x16, "", "atan2", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_pow = {0x02, 0x00, 0x82, 0x16, "", "pow", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_min = {0x02, 0x00, 0x82, 0x16, "", "min", 0, &_Number, &_Math, 0}; static varinfo_t _Math_LN2 = {0x01, 0x00, 0x82, 0x16, "", "LN2", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_sin = {0x02, 0x00, 0x82, 0x16, "", "sin", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_sqrt = {0x02, 0x00, 0x82, 0x16, "", "sqrt", 0, &_Number, &_Math, 0}; static varinfo_t _Math_LOG2E = {0x01, 0x00, 0x82, 0x16, "", "LOG2E", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_max = {0x02, 0x00, 0x82, 0x16, "", "max", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_atan = {0x02, 0x00, 0x82, 0x16, "", "atan", 0, &_Number, &_Math, 0}; static methodinfo_t _Math_floor = {0x02, 0x00, 0x82, 0x16, "", "floor", 0, &_Number, &_Math, 0}; static classinfo_t flash_display_ColorCorrectionSupport = {0x03, 0x00, 0x81, 0x16, "flash.display", "ColorCorrectionSupport", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ColorCorrectionSupport_UNSUPPORTED = {0x01, 0x00, 0x82, 0x16, "", "UNSUPPORTED", 0, &_String, &flash_display_ColorCorrectionSupport, 0}; static varinfo_t flash_display_ColorCorrectionSupport_DEFAULT_ON = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT_ON", 0, &_String, &flash_display_ColorCorrectionSupport, 0}; static varinfo_t flash_display_ColorCorrectionSupport_DEFAULT_OFF = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT_OFF", 0, &_String, &flash_display_ColorCorrectionSupport, 0}; static classinfo_t flash_errors_IOError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "IOError", 0, &_Error, interfaces: {0}}; static methodinfo_t _trace = {0x02, 0x00, 0x82, 0x16, "", "trace", 0, &voidclass, 0, 0}; static classinfo_t flash_ui_ContextMenuBuiltInItems = {0x03, 0x00, 0x81, 0x16, "flash.ui", "ContextMenuBuiltInItems", 0, &_Object, interfaces: {0}}; static varinfo_t flash_ui_ContextMenuBuiltInItems_zoom = {0x01, 0x00, 0x80, 0x16, "", "zoom", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_save = {0x01, 0x00, 0x80, 0x16, "", "save", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_loop = {0x01, 0x00, 0x80, 0x16, "", "loop", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_print = {0x01, 0x00, 0x80, 0x16, "", "print", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_forwardAndBack = {0x01, 0x00, 0x80, 0x16, "", "forwardAndBack", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_rewind = {0x01, 0x00, 0x80, 0x16, "", "rewind", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static methodinfo_t flash_ui_ContextMenuBuiltInItems_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_ui_ContextMenuBuiltInItems, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static varinfo_t flash_ui_ContextMenuBuiltInItems_play = {0x01, 0x00, 0x80, 0x16, "", "play", 0, &_Boolean, &flash_ui_ContextMenuBuiltInItems, 0}; static classinfo_t flash_net_FileReferenceList = {0x03, 0x00, 0x80, 0x16, "flash.net", "FileReferenceList", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_FileReferenceList_fileList = {0x01, 0x00, 0x80, 0x16, "", "fileList", 0, &_Array, &flash_net_FileReferenceList, 0}; static methodinfo_t flash_net_FileReferenceList_browse = {0x02, 0x00, 0x80, 0x16, "", "browse", 0, &_Boolean, &flash_net_FileReferenceList, 0}; static classinfo_t flash_display_TriangleCulling = {0x03, 0x00, 0x81, 0x16, "flash.display", "TriangleCulling", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_TriangleCulling_POSITIVE = {0x01, 0x00, 0x82, 0x16, "", "POSITIVE", 0, &_String, &flash_display_TriangleCulling, 0}; static varinfo_t flash_display_TriangleCulling_NEGATIVE = {0x01, 0x00, 0x82, 0x16, "", "NEGATIVE", 0, &_String, &flash_display_TriangleCulling, 0}; static varinfo_t flash_display_TriangleCulling_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_display_TriangleCulling, 0}; static classinfo_t flash_media_SoundMixer = {0x03, 0x00, 0x81, 0x16, "flash.media", "SoundMixer", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_media_SoundMixer_computeSpectrum = {0x02, 0x00, 0x82, 0x16, "", "computeSpectrum", 0, &voidclass, &flash_media_SoundMixer, 0}; static methodinfo_t flash_media_SoundMixer_areSoundsInaccessible = {0x02, 0x00, 0x82, 0x16, "", "areSoundsInaccessible", 0, &_Boolean, &flash_media_SoundMixer, 0}; static varinfo_t flash_media_SoundMixer_soundTransform = {0x01, 0x00, 0x82, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_media_SoundMixer, 0}; static varinfo_t flash_media_SoundMixer_bufferTime = {0x01, 0x00, 0x82, 0x16, "", "bufferTime", 0, &_int, &flash_media_SoundMixer, 0}; static methodinfo_t flash_media_SoundMixer_stopAll = {0x02, 0x00, 0x82, 0x16, "", "stopAll", 0, &voidclass, &flash_media_SoundMixer, 0}; static classinfo_t adobe_utils_XMLUI = {0x03, 0x00, 0x81, 0x16, "adobe.utils", "XMLUI", 0, &_Object, interfaces: {0}}; static methodinfo_t adobe_utils_XMLUI_cancel = {0x02, 0x00, 0x82, 0x16, "", "cancel", 0, &voidclass, &adobe_utils_XMLUI, 0}; static methodinfo_t adobe_utils_XMLUI_setProperty = {0x02, 0x00, 0x82, 0x16, "", "setProperty", 0, &voidclass, &adobe_utils_XMLUI, 0}; static methodinfo_t adobe_utils_XMLUI_getProperty = {0x02, 0x00, 0x82, 0x16, "", "getProperty", 0, &_String, &adobe_utils_XMLUI, 0}; static methodinfo_t adobe_utils_XMLUI_accept = {0x02, 0x00, 0x82, 0x16, "", "accept", 0, &voidclass, &adobe_utils_XMLUI, 0}; static methodinfo_t _escape = {0x02, 0x00, 0x82, 0x16, "", "escape", 0, &_String, 0, 0}; static methodinfo_t flash_utils_setInterval = {0x02, 0x00, 0x82, 0x16, "flash.utils", "setInterval", 0, &_uint, 0, 0}; static classinfo_t flash_events_StatusEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "StatusEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_StatusEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_StatusEvent, 0}; static varinfo_t flash_events_StatusEvent_code = {0x01, 0x00, 0x80, 0x16, "", "code", 0, &_String, &flash_events_StatusEvent, 0}; static methodinfo_t flash_events_StatusEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_StatusEvent, 0}; static varinfo_t flash_events_StatusEvent_level = {0x01, 0x00, 0x80, 0x16, "", "level", 0, &_String, &flash_events_StatusEvent, 0}; static varinfo_t flash_events_StatusEvent_STATUS = {0x01, 0x00, 0x82, 0x16, "", "STATUS", 0, &_String, &flash_events_StatusEvent, 0}; static classinfo_t flash_display_IGraphicsPath = {0x03, 0x00, 0x90, 0x16, "flash.display", "IGraphicsPath", 0, 0, interfaces: {0}}; static classinfo_t flash_events_ShaderEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "ShaderEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_ShaderEvent_vector = {0x01, 0x00, 0x80, 0x16, "", "vector", 0, &__AS3___vec_Vector, &flash_events_ShaderEvent, 0}; static methodinfo_t flash_events_ShaderEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_ShaderEvent, 0}; static varinfo_t flash_events_ShaderEvent_bitmapData = {0x01, 0x00, 0x80, 0x16, "", "bitmapData", 0, &flash_display_BitmapData, &flash_events_ShaderEvent, 0}; static methodinfo_t flash_events_ShaderEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_ShaderEvent, 0}; static varinfo_t flash_events_ShaderEvent_byteArray = {0x01, 0x00, 0x80, 0x16, "", "byteArray", 0, &flash_utils_ByteArray, &flash_events_ShaderEvent, 0}; static varinfo_t flash_events_ShaderEvent_COMPLETE = {0x01, 0x00, 0x82, 0x16, "", "COMPLETE", 0, &_String, &flash_events_ShaderEvent, 0}; static classinfo_t flash_display_Shader = {0x03, 0x00, 0x80, 0x16, "flash.display", "Shader", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_Shader_precisionHint = {0x01, 0x00, 0x80, 0x16, "", "precisionHint", 0, &_String, &flash_display_Shader, 0}; static varinfo_t flash_display_Shader_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &flash_display_ShaderData, &flash_display_Shader, 0}; static classinfo_t flash_errors_StackOverflowError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "StackOverflowError", 0, &_Error, interfaces: {0}}; static methodinfo_t flash_sampler_getInvocationCount = {0x02, 0x00, 0x82, 0x16, "flash.sampler", "getInvocationCount", 0, &_Number, 0, 0}; static classinfo_t flash_text_engine_Kerning = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "Kerning", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_Kerning_AUTO = {0x01, 0x00, 0x82, 0x16, "", "AUTO", 0, &_String, &flash_text_engine_Kerning, 0}; static varinfo_t flash_text_engine_Kerning_OFF = {0x01, 0x00, 0x82, 0x16, "", "OFF", 0, &_String, &flash_text_engine_Kerning, 0}; static varinfo_t flash_text_engine_Kerning_ON = {0x01, 0x00, 0x82, 0x16, "", "ON", 0, &_String, &flash_text_engine_Kerning, 0}; static classinfo_t flash_text_CSMSettings = {0x03, 0x00, 0x81, 0x16, "flash.text", "CSMSettings", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_CSMSettings_fontSize = {0x01, 0x00, 0x80, 0x16, "", "fontSize", 0, &_Number, &flash_text_CSMSettings, 0}; static varinfo_t flash_text_CSMSettings_outsideCutoff = {0x01, 0x00, 0x80, 0x16, "", "outsideCutoff", 0, &_Number, &flash_text_CSMSettings, 0}; static varinfo_t flash_text_CSMSettings_insideCutoff = {0x01, 0x00, 0x80, 0x16, "", "insideCutoff", 0, &_Number, &flash_text_CSMSettings, 0}; static classinfo_t _RangeError = {0x03, 0x00, 0x88, 0x16, "", "RangeError", 0, &_Error, interfaces: {0}}; static varinfo_t _RangeError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_RangeError, 0}; static classinfo_t _Number = {0x03, 0x00, 0x81, 0x16, "", "Number", 0, &_Object, interfaces: {0}}; static methodinfo_t _Number_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_Number, &_Number, 0}; static methodinfo_t _Number_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_Number, 0}; static methodinfo_t _Number_toExponential = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toExponential", 0, &_String, &_Number, 0}; static methodinfo_t _Number_toFixed = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toFixed", 0, &_String, &_Number, 0}; static methodinfo_t _Number_toPrecision = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toPrecision", 0, &_String, &_Number, 0}; static varinfo_t _Number_MAX_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MAX_VALUE", 0, &_Number, &_Number, 0}; static varinfo_t _Number_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_Number, 0}; static varinfo_t _Number_MIN_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MIN_VALUE", 0, &_Number, &_Number, 0}; static varinfo_t _Number_NaN = {0x01, 0x00, 0x82, 0x16, "", "NaN", 0, &_Number, &_Number, 0}; static varinfo_t _Number_POSITIVE_INFINITY = {0x01, 0x00, 0x82, 0x16, "", "POSITIVE_INFINITY", 0, &_Number, &_Number, 0}; static varinfo_t _Number_NEGATIVE_INFINITY = {0x01, 0x00, 0x82, 0x16, "", "NEGATIVE_INFINITY", 0, &_Number, &_Number, 0}; static classinfo_t flash_display_Graphics = {0x03, 0x00, 0x81, 0x16, "flash.display", "Graphics", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_display_Graphics_drawPath = {0x02, 0x00, 0x80, 0x16, "", "drawPath", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawEllipse = {0x02, 0x00, 0x80, 0x16, "", "drawEllipse", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawRoundRectComplex = {0x02, 0x00, 0x80, 0x16, "", "drawRoundRectComplex", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_moveTo = {0x02, 0x00, 0x80, 0x16, "", "moveTo", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_lineShaderStyle = {0x02, 0x00, 0x80, 0x16, "", "lineShaderStyle", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_beginFill = {0x02, 0x00, 0x80, 0x16, "", "beginFill", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_beginGradientFill = {0x02, 0x00, 0x80, 0x16, "", "beginGradientFill", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawGraphicsData = {0x02, 0x00, 0x80, 0x16, "", "drawGraphicsData", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_lineGradientStyle = {0x02, 0x00, 0x80, 0x16, "", "lineGradientStyle", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawRoundRect = {0x02, 0x00, 0x80, 0x16, "", "drawRoundRect", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_beginBitmapFill = {0x02, 0x00, 0x80, 0x16, "", "beginBitmapFill", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_lineStyle = {0x02, 0x00, 0x80, 0x16, "", "lineStyle", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_lineTo = {0x02, 0x00, 0x80, 0x16, "", "lineTo", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_endFill = {0x02, 0x00, 0x80, 0x16, "", "endFill", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_copyFrom = {0x02, 0x00, 0x80, 0x16, "", "copyFrom", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_lineBitmapStyle = {0x02, 0x00, 0x80, 0x16, "", "lineBitmapStyle", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_curveTo = {0x02, 0x00, 0x80, 0x16, "", "curveTo", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_clear = {0x02, 0x00, 0x80, 0x16, "", "clear", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawCircle = {0x02, 0x00, 0x80, 0x16, "", "drawCircle", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_beginShaderFill = {0x02, 0x00, 0x80, 0x16, "", "beginShaderFill", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawTriangles = {0x02, 0x00, 0x80, 0x16, "", "drawTriangles", 0, &voidclass, &flash_display_Graphics, 0}; static methodinfo_t flash_display_Graphics_drawRect = {0x02, 0x00, 0x80, 0x16, "", "drawRect", 0, &voidclass, &flash_display_Graphics, 0}; static classinfo_t _SyntaxError = {0x03, 0x00, 0x88, 0x16, "", "SyntaxError", 0, &_Error, interfaces: {0}}; static varinfo_t _SyntaxError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_SyntaxError, 0}; static classinfo_t flash_sampler_NewObjectSample = {0x03, 0x00, 0x81, 0x16, "flash.sampler", "NewObjectSample", 0, &flash_sampler_Sample, interfaces: {0}}; static varinfo_t flash_sampler_NewObjectSample_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_Class, &flash_sampler_NewObjectSample, 0}; static varinfo_t flash_sampler_NewObjectSample_object = {0x01, 0x00, 0x80, 0x16, "", "object", 0, 0, &flash_sampler_NewObjectSample, 0}; static varinfo_t flash_sampler_NewObjectSample_id = {0x01, 0x00, 0x80, 0x16, "", "id", 0, &_Number, &flash_sampler_NewObjectSample, 0}; static classinfo_t flash_net_FileFilter = {0x03, 0x00, 0x81, 0x16, "flash.net", "FileFilter", 0, &_Object, interfaces: {0}}; static varinfo_t flash_net_FileFilter_extension = {0x01, 0x00, 0x80, 0x16, "", "extension", 0, &_String, &flash_net_FileFilter, 0}; static varinfo_t flash_net_FileFilter_description = {0x01, 0x00, 0x80, 0x16, "", "description", 0, &_String, &flash_net_FileFilter, 0}; static varinfo_t flash_net_FileFilter_macType = {0x01, 0x00, 0x80, 0x16, "", "macType", 0, &_String, &flash_net_FileFilter, 0}; static classinfo_t flash_display_BitmapDataChannel = {0x03, 0x00, 0x81, 0x16, "flash.display", "BitmapDataChannel", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_BitmapDataChannel_BLUE = {0x01, 0x00, 0x82, 0x16, "", "BLUE", 0, &_uint, &flash_display_BitmapDataChannel, 0}; static varinfo_t flash_display_BitmapDataChannel_GREEN = {0x01, 0x00, 0x82, 0x16, "", "GREEN", 0, &_uint, &flash_display_BitmapDataChannel, 0}; static varinfo_t flash_display_BitmapDataChannel_ALPHA = {0x01, 0x00, 0x82, 0x16, "", "ALPHA", 0, &_uint, &flash_display_BitmapDataChannel, 0}; static varinfo_t flash_display_BitmapDataChannel_RED = {0x01, 0x00, 0x82, 0x16, "", "RED", 0, &_uint, &flash_display_BitmapDataChannel, 0}; static methodinfo_t flash_utils_clearInterval = {0x02, 0x00, 0x82, 0x16, "flash.utils", "clearInterval", 0, &voidclass, 0, 0}; static classinfo_t flash_text_engine_ContentElement = {0x03, 0x00, 0x80, 0x16, "flash.text.engine", "ContentElement", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_ContentElement_eventMirror = {0x01, 0x00, 0x80, 0x16, "", "eventMirror", 0, &flash_events_EventDispatcher, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_groupElement = {0x01, 0x00, 0x80, 0x16, "", "groupElement", 0, &flash_text_engine_GroupElement, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_textRotation = {0x01, 0x00, 0x80, 0x16, "", "textRotation", 0, &_String, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_text = {0x01, 0x00, 0x80, 0x16, "", "text", 0, &_String, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_userData = {0x01, 0x00, 0x80, 0x16, "", "userData", 0, 0, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_elementFormat = {0x01, 0x00, 0x80, 0x16, "", "elementFormat", 0, &flash_text_engine_ElementFormat, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_textBlock = {0x01, 0x00, 0x80, 0x16, "", "textBlock", 0, &flash_text_engine_TextBlock, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_rawText = {0x01, 0x00, 0x80, 0x16, "", "rawText", 0, &_String, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_textBlockBeginIndex = {0x01, 0x00, 0x80, 0x16, "", "textBlockBeginIndex", 0, &_int, &flash_text_engine_ContentElement, 0}; static varinfo_t flash_text_engine_ContentElement_GRAPHIC_ELEMENT = {0x01, 0x00, 0x82, 0x16, "", "GRAPHIC_ELEMENT", 0, &_uint, &flash_text_engine_ContentElement, 0}; static classinfo_t flash_utils_Endian = {0x03, 0x00, 0x81, 0x16, "flash.utils", "Endian", 0, &_Object, interfaces: {0}}; static varinfo_t flash_utils_Endian_LITTLE_ENDIAN = {0x01, 0x00, 0x82, 0x16, "", "LITTLE_ENDIAN", 0, &_String, &flash_utils_Endian, 0}; static varinfo_t flash_utils_Endian_BIG_ENDIAN = {0x01, 0x00, 0x82, 0x16, "", "BIG_ENDIAN", 0, &_String, &flash_utils_Endian, 0}; static methodinfo_t flash_net_navigateToURL = {0x02, 0x00, 0x82, 0x16, "flash.net", "navigateToURL", 0, &voidclass, 0, 0}; static classinfo_t flash_events_ProgressEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "ProgressEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_ProgressEvent_bytesLoaded = {0x01, 0x00, 0x80, 0x16, "", "bytesLoaded", 0, &_uint, &flash_events_ProgressEvent, 0}; static methodinfo_t flash_events_ProgressEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_ProgressEvent, 0}; static varinfo_t flash_events_ProgressEvent_bytesTotal = {0x01, 0x00, 0x80, 0x16, "", "bytesTotal", 0, &_uint, &flash_events_ProgressEvent, 0}; static methodinfo_t flash_events_ProgressEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_ProgressEvent, 0}; static varinfo_t flash_events_ProgressEvent_PROGRESS = {0x01, 0x00, 0x82, 0x16, "", "PROGRESS", 0, &_String, &flash_events_ProgressEvent, 0}; static varinfo_t flash_events_ProgressEvent_SOCKET_DATA = {0x01, 0x00, 0x82, 0x16, "", "SOCKET_DATA", 0, &_String, &flash_events_ProgressEvent, 0}; static classinfo_t flash_media_Sound = {0x03, 0x00, 0x80, 0x16, "flash.media", "Sound", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_media_Sound_extract = {0x02, 0x00, 0x80, 0x16, "", "extract", 0, &_Number, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_bytesLoaded = {0x01, 0x00, 0x80, 0x16, "", "bytesLoaded", 0, &_uint, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_id3 = {0x01, 0x00, 0x80, 0x16, "", "id3", 0, &flash_media_ID3Info, &flash_media_Sound, 0}; static methodinfo_t flash_media_Sound_play = {0x02, 0x00, 0x80, 0x16, "", "play", 0, &flash_media_SoundChannel, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_url = {0x01, 0x00, 0x80, 0x16, "", "url", 0, &_String, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_isBuffering = {0x01, 0x00, 0x80, 0x16, "", "isBuffering", 0, &_Boolean, &flash_media_Sound, 0}; static methodinfo_t flash_media_Sound_load = {0x02, 0x00, 0x80, 0x16, "", "load", 0, &voidclass, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_bytesTotal = {0x01, 0x00, 0x80, 0x16, "", "bytesTotal", 0, &_int, &flash_media_Sound, 0}; static varinfo_t flash_media_Sound_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_Number, &flash_media_Sound, 0}; static methodinfo_t flash_media_Sound_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_media_Sound, 0}; static classinfo_t flash_text_TextExtent = {0x03, 0x00, 0x80, 0x16, "flash.text", "TextExtent", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextExtent_descent = {0x01, 0x00, 0x80, 0x16, "", "descent", 0, &_Number, &flash_text_TextExtent, 0}; static varinfo_t flash_text_TextExtent_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_Number, &flash_text_TextExtent, 0}; static varinfo_t flash_text_TextExtent_ascent = {0x01, 0x00, 0x80, 0x16, "", "ascent", 0, &_Number, &flash_text_TextExtent, 0}; static varinfo_t flash_text_TextExtent_textFieldHeight = {0x01, 0x00, 0x80, 0x16, "", "textFieldHeight", 0, &_Number, &flash_text_TextExtent, 0}; static varinfo_t flash_text_TextExtent_textFieldWidth = {0x01, 0x00, 0x80, 0x16, "", "textFieldWidth", 0, &_Number, &flash_text_TextExtent, 0}; static varinfo_t flash_text_TextExtent_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_Number, &flash_text_TextExtent, 0}; static classinfo_t flash_text_FontStyle = {0x03, 0x00, 0x81, 0x16, "flash.text", "FontStyle", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_FontStyle_REGULAR = {0x01, 0x00, 0x82, 0x16, "", "REGULAR", 0, &_String, &flash_text_FontStyle, 0}; static varinfo_t flash_text_FontStyle_BOLD = {0x01, 0x00, 0x82, 0x16, "", "BOLD", 0, &_String, &flash_text_FontStyle, 0}; static varinfo_t flash_text_FontStyle_BOLD_ITALIC = {0x01, 0x00, 0x82, 0x16, "", "BOLD_ITALIC", 0, &_String, &flash_text_FontStyle, 0}; static varinfo_t flash_text_FontStyle_ITALIC = {0x01, 0x00, 0x82, 0x16, "", "ITALIC", 0, &_String, &flash_text_FontStyle, 0}; static classinfo_t flash_text_engine_TextLineMirrorRegion = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextLineMirrorRegion", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextLineMirrorRegion_mirror = {0x01, 0x00, 0x80, 0x16, "", "mirror", 0, &flash_events_EventDispatcher, &flash_text_engine_TextLineMirrorRegion, 0}; static varinfo_t flash_text_engine_TextLineMirrorRegion_previousRegion = {0x01, 0x00, 0x80, 0x16, "", "previousRegion", 0, &flash_text_engine_TextLineMirrorRegion, &flash_text_engine_TextLineMirrorRegion, 0}; static varinfo_t flash_text_engine_TextLineMirrorRegion_bounds = {0x01, 0x00, 0x80, 0x16, "", "bounds", 0, &flash_geom_Rectangle, &flash_text_engine_TextLineMirrorRegion, 0}; static varinfo_t flash_text_engine_TextLineMirrorRegion_nextRegion = {0x01, 0x00, 0x80, 0x16, "", "nextRegion", 0, &flash_text_engine_TextLineMirrorRegion, &flash_text_engine_TextLineMirrorRegion, 0}; static varinfo_t flash_text_engine_TextLineMirrorRegion_element = {0x01, 0x00, 0x80, 0x16, "", "element", 0, &flash_text_engine_ContentElement, &flash_text_engine_TextLineMirrorRegion, 0}; static varinfo_t flash_text_engine_TextLineMirrorRegion_textLine = {0x01, 0x00, 0x80, 0x16, "", "textLine", 0, &flash_text_engine_TextLine, &flash_text_engine_TextLineMirrorRegion, 0}; static classinfo_t flash_geom_Vector3D = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Vector3D", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_geom_Vector3D_subtract = {0x02, 0x00, 0x80, 0x16, "", "subtract", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_scaleBy = {0x02, 0x00, 0x80, 0x16, "", "scaleBy", 0, &voidclass, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_decrementBy = {0x02, 0x00, 0x80, 0x16, "", "decrementBy", 0, &voidclass, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_equals = {0x02, 0x00, 0x80, 0x16, "", "equals", 0, &_Boolean, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_normalize = {0x02, 0x00, 0x80, 0x16, "", "normalize", 0, &_Number, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_dotProduct = {0x02, 0x00, 0x80, 0x16, "", "dotProduct", 0, &_Number, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_negate = {0x02, 0x00, 0x80, 0x16, "", "negate", 0, &voidclass, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_lengthSquared = {0x01, 0x00, 0x80, 0x16, "", "lengthSquared", 0, &_Number, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_x = {0x01, 0x00, 0x80, 0x16, "", "x", 0, &_Number, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_incrementBy = {0x02, 0x00, 0x80, 0x16, "", "incrementBy", 0, &voidclass, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_w = {0x01, 0x00, 0x80, 0x16, "", "w", 0, &_Number, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_z = {0x01, 0x00, 0x80, 0x16, "", "z", 0, &_Number, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_add = {0x02, 0x00, 0x80, 0x16, "", "add", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_project = {0x02, 0x00, 0x80, 0x16, "", "project", 0, &voidclass, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_crossProduct = {0x02, 0x00, 0x80, 0x16, "", "crossProduct", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_nearEquals = {0x02, 0x00, 0x80, 0x16, "", "nearEquals", 0, &_Boolean, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_y = {0x01, 0x00, 0x80, 0x16, "", "y", 0, &_Number, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_length = {0x01, 0x00, 0x80, 0x16, "", "length", 0, &_Number, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_distance = {0x02, 0x00, 0x82, 0x16, "", "distance", 0, &_Number, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_Z_AXIS = {0x01, 0x00, 0x82, 0x16, "", "Z_AXIS", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_X_AXIS = {0x01, 0x00, 0x82, 0x16, "", "X_AXIS", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static methodinfo_t flash_geom_Vector3D_angleBetween = {0x02, 0x00, 0x82, 0x16, "", "angleBetween", 0, &_Number, &flash_geom_Vector3D, 0}; static varinfo_t flash_geom_Vector3D_Y_AXIS = {0x01, 0x00, 0x82, 0x16, "", "Y_AXIS", 0, &flash_geom_Vector3D, &flash_geom_Vector3D, 0}; static classinfo_t flash_desktop_ClipboardTransferMode = {0x03, 0x00, 0x80, 0x16, "flash.desktop", "ClipboardTransferMode", 0, &_Object, interfaces: {0}}; static varinfo_t flash_desktop_ClipboardTransferMode_CLONE_ONLY = {0x01, 0x00, 0x82, 0x16, "", "CLONE_ONLY", 0, &_String, &flash_desktop_ClipboardTransferMode, 0}; static varinfo_t flash_desktop_ClipboardTransferMode_ORIGINAL_PREFERRED = {0x01, 0x00, 0x82, 0x16, "", "ORIGINAL_PREFERRED", 0, &_String, &flash_desktop_ClipboardTransferMode, 0}; static varinfo_t flash_desktop_ClipboardTransferMode_CLONE_PREFERRED = {0x01, 0x00, 0x82, 0x16, "", "CLONE_PREFERRED", 0, &_String, &flash_desktop_ClipboardTransferMode, 0}; static varinfo_t flash_desktop_ClipboardTransferMode_ORIGINAL_ONLY = {0x01, 0x00, 0x82, 0x16, "", "ORIGINAL_ONLY", 0, &_String, &flash_desktop_ClipboardTransferMode, 0}; static classinfo_t flash_display_SpreadMethod = {0x03, 0x00, 0x81, 0x16, "flash.display", "SpreadMethod", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_SpreadMethod_REFLECT = {0x01, 0x00, 0x82, 0x16, "", "REFLECT", 0, &_String, &flash_display_SpreadMethod, 0}; static varinfo_t flash_display_SpreadMethod_REPEAT = {0x01, 0x00, 0x82, 0x16, "", "REPEAT", 0, &_String, &flash_display_SpreadMethod, 0}; static varinfo_t flash_display_SpreadMethod_PAD = {0x01, 0x00, 0x82, 0x16, "", "PAD", 0, &_String, &flash_display_SpreadMethod, 0}; static classinfo_t flash_system_SecurityPanel = {0x03, 0x00, 0x81, 0x16, "flash.system", "SecurityPanel", 0, &_Object, interfaces: {0}}; static varinfo_t flash_system_SecurityPanel_LOCAL_STORAGE = {0x01, 0x00, 0x82, 0x16, "", "LOCAL_STORAGE", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_CAMERA = {0x01, 0x00, 0x82, 0x16, "", "CAMERA", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_SETTINGS_MANAGER = {0x01, 0x00, 0x82, 0x16, "", "SETTINGS_MANAGER", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_PRIVACY = {0x01, 0x00, 0x82, 0x16, "", "PRIVACY", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_MICROPHONE = {0x01, 0x00, 0x82, 0x16, "", "MICROPHONE", 0, &_String, &flash_system_SecurityPanel, 0}; static varinfo_t flash_system_SecurityPanel_DISPLAY = {0x01, 0x00, 0x82, 0x16, "", "DISPLAY", 0, &_String, &flash_system_SecurityPanel, 0}; static classinfo_t flash_events_HTTPStatusEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "HTTPStatusEvent", 0, &flash_events_Event, interfaces: {0}}; static methodinfo_t flash_events_HTTPStatusEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_HTTPStatusEvent, 0}; static methodinfo_t flash_events_HTTPStatusEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_HTTPStatusEvent, 0}; static varinfo_t flash_events_HTTPStatusEvent_status = {0x01, 0x00, 0x80, 0x16, "", "status", 0, &_int, &flash_events_HTTPStatusEvent, 0}; static varinfo_t flash_events_HTTPStatusEvent_HTTP_STATUS = {0x01, 0x00, 0x82, 0x16, "", "HTTP_STATUS", 0, &_String, &flash_events_HTTPStatusEvent, 0}; static classinfo_t flash_net_NetStreamPlayOptions = {0x03, 0x00, 0x88, 0x16, "flash.net", "NetStreamPlayOptions", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_NetStreamPlayOptions_len = {0x01, 0x00, 0x80, 0x16, "", "len", 0, &_Number, &flash_net_NetStreamPlayOptions, 0}; static varinfo_t flash_net_NetStreamPlayOptions_streamName = {0x01, 0x00, 0x80, 0x16, "", "streamName", 0, &_String, &flash_net_NetStreamPlayOptions, 0}; static varinfo_t flash_net_NetStreamPlayOptions_start = {0x01, 0x00, 0x80, 0x16, "", "start", 0, &_Number, &flash_net_NetStreamPlayOptions, 0}; static varinfo_t flash_net_NetStreamPlayOptions_oldStreamName = {0x01, 0x00, 0x80, 0x16, "", "oldStreamName", 0, &_String, &flash_net_NetStreamPlayOptions, 0}; static varinfo_t flash_net_NetStreamPlayOptions_transition = {0x01, 0x00, 0x80, 0x16, "", "transition", 0, &_String, &flash_net_NetStreamPlayOptions, 0}; static classinfo_t flash_net_Responder = {0x03, 0x00, 0x80, 0x16, "flash.net", "Responder", 0, &_Object, interfaces: {0}}; static classinfo_t flash_net_XMLSocket = {0x03, 0x00, 0x80, 0x16, "flash.net", "XMLSocket", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_net_XMLSocket_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_XMLSocket, 0}; static methodinfo_t flash_net_XMLSocket_connect = {0x02, 0x00, 0x80, 0x16, "", "connect", 0, &voidclass, &flash_net_XMLSocket, 0}; static methodinfo_t flash_net_XMLSocket_send = {0x02, 0x00, 0x80, 0x16, "", "send", 0, &voidclass, &flash_net_XMLSocket, 0}; static varinfo_t flash_net_XMLSocket_connected = {0x01, 0x00, 0x80, 0x16, "", "connected", 0, &_Boolean, &flash_net_XMLSocket, 0}; static varinfo_t flash_net_XMLSocket_timeout = {0x01, 0x00, 0x80, 0x16, "", "timeout", 0, &_int, &flash_net_XMLSocket, 0}; static classinfo_t flash_filters_ConvolutionFilter = {0x03, 0x00, 0x80, 0x16, "flash.filters", "ConvolutionFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_ConvolutionFilter_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_matrixX = {0x01, 0x00, 0x80, 0x16, "", "matrixX", 0, &_Number, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &_Array, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_bias = {0x01, 0x00, 0x80, 0x16, "", "bias", 0, &_Number, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_preserveAlpha = {0x01, 0x00, 0x80, 0x16, "", "preserveAlpha", 0, &_Boolean, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_divisor = {0x01, 0x00, 0x80, 0x16, "", "divisor", 0, &_Number, &flash_filters_ConvolutionFilter, 0}; static methodinfo_t flash_filters_ConvolutionFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_clamp = {0x01, 0x00, 0x80, 0x16, "", "clamp", 0, &_Boolean, &flash_filters_ConvolutionFilter, 0}; static varinfo_t flash_filters_ConvolutionFilter_matrixY = {0x01, 0x00, 0x80, 0x16, "", "matrixY", 0, &_Number, &flash_filters_ConvolutionFilter, 0}; static classinfo_t flash_text_engine_ElementFormat = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "ElementFormat", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_text_engine_ElementFormat_getFontMetrics = {0x02, 0x00, 0x80, 0x16, "", "getFontMetrics", 0, &flash_text_engine_FontMetrics, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_digitCase = {0x01, 0x00, 0x80, 0x16, "", "digitCase", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_breakOpportunity = {0x01, 0x00, 0x80, 0x16, "", "breakOpportunity", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_ligatureLevel = {0x01, 0x00, 0x80, 0x16, "", "ligatureLevel", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_dominantBaseline = {0x01, 0x00, 0x80, 0x16, "", "dominantBaseline", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_alignmentBaseline = {0x01, 0x00, 0x80, 0x16, "", "alignmentBaseline", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_digitWidth = {0x01, 0x00, 0x80, 0x16, "", "digitWidth", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_kerning = {0x01, 0x00, 0x80, 0x16, "", "kerning", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_fontSize = {0x01, 0x00, 0x80, 0x16, "", "fontSize", 0, &_Number, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_fontDescription = {0x01, 0x00, 0x80, 0x16, "", "fontDescription", 0, &flash_text_engine_FontDescription, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_baselineShift = {0x01, 0x00, 0x80, 0x16, "", "baselineShift", 0, &_Number, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_locale = {0x01, 0x00, 0x80, 0x16, "", "locale", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_typographicCase = {0x01, 0x00, 0x80, 0x16, "", "typographicCase", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_trackingLeft = {0x01, 0x00, 0x80, 0x16, "", "trackingLeft", 0, &_Number, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_locked = {0x01, 0x00, 0x80, 0x16, "", "locked", 0, &_Boolean, &flash_text_engine_ElementFormat, 0}; static methodinfo_t flash_text_engine_ElementFormat_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_text_engine_ElementFormat, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_textRotation = {0x01, 0x00, 0x80, 0x16, "", "textRotation", 0, &_String, &flash_text_engine_ElementFormat, 0}; static varinfo_t flash_text_engine_ElementFormat_trackingRight = {0x01, 0x00, 0x80, 0x16, "", "trackingRight", 0, &_Number, &flash_text_engine_ElementFormat, 0}; static classinfo_t flash_display_GraphicsGradientFill = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsGradientFill", 0, &_Object, interfaces: {&flash_display_IGraphicsFill, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsGradientFill_interpolationMethod = {0x01, 0x00, 0x80, 0x16, "", "interpolationMethod", 0, &_String, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_focalPointRatio = {0x01, 0x00, 0x80, 0x16, "", "focalPointRatio", 0, &_Number, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_colors = {0x01, 0x00, 0x80, 0x16, "", "colors", 0, &_Array, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &flash_geom_Matrix, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_ratios = {0x01, 0x00, 0x80, 0x16, "", "ratios", 0, &_Array, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_spreadMethod = {0x01, 0x00, 0x80, 0x16, "", "spreadMethod", 0, &_String, &flash_display_GraphicsGradientFill, 0}; static varinfo_t flash_display_GraphicsGradientFill_alphas = {0x01, 0x00, 0x80, 0x16, "", "alphas", 0, &_Array, &flash_display_GraphicsGradientFill, 0}; static classinfo_t flash_display_FrameLabel = {0x03, 0x00, 0x81, 0x16, "flash.display", "FrameLabel", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_FrameLabel_frame = {0x01, 0x00, 0x80, 0x16, "", "frame", 0, &_int, &flash_display_FrameLabel, 0}; static varinfo_t flash_display_FrameLabel_name = {0x01, 0x00, 0x80, 0x16, "", "name", 0, &_String, &flash_display_FrameLabel, 0}; static classinfo_t flash_media_SoundTransform = {0x03, 0x00, 0x81, 0x16, "flash.media", "SoundTransform", 0, &_Object, interfaces: {0}}; static varinfo_t flash_media_SoundTransform_pan = {0x01, 0x00, 0x80, 0x16, "", "pan", 0, &_Number, &flash_media_SoundTransform, 0}; static varinfo_t flash_media_SoundTransform_leftToRight = {0x01, 0x00, 0x80, 0x16, "", "leftToRight", 0, &_Number, &flash_media_SoundTransform, 0}; static varinfo_t flash_media_SoundTransform_rightToLeft = {0x01, 0x00, 0x80, 0x16, "", "rightToLeft", 0, &_Number, &flash_media_SoundTransform, 0}; static varinfo_t flash_media_SoundTransform_volume = {0x01, 0x00, 0x80, 0x16, "", "volume", 0, &_Number, &flash_media_SoundTransform, 0}; static varinfo_t flash_media_SoundTransform_leftToLeft = {0x01, 0x00, 0x80, 0x16, "", "leftToLeft", 0, &_Number, &flash_media_SoundTransform, 0}; static varinfo_t flash_media_SoundTransform_rightToRight = {0x01, 0x00, 0x80, 0x16, "", "rightToRight", 0, &_Number, &flash_media_SoundTransform, 0}; static namespace_t _AS3_constant_ns = {0x08, "http://adobe.com/AS3/2006/builtin"}; static constant_t _AS3_constant = {type: 8, &_AS3_constant_ns}; static varinfo_t _AS3 = {0x01, 0x00, 0xa2, 0x16, "", "AS3", 0, 0, 0, &_AS3_constant}; static classinfo_t flash_net_LocalConnection = {0x03, 0x00, 0x80, 0x16, "flash.net", "LocalConnection", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t flash_net_LocalConnection_client = {0x01, 0x00, 0x80, 0x16, "", "client", 0, &_Object, &flash_net_LocalConnection, 0}; static methodinfo_t flash_net_LocalConnection_allowDomain = {0x02, 0x00, 0x80, 0x16, "", "allowDomain", 0, &voidclass, &flash_net_LocalConnection, 0}; static methodinfo_t flash_net_LocalConnection_connect = {0x02, 0x00, 0x80, 0x16, "", "connect", 0, &voidclass, &flash_net_LocalConnection, 0}; static varinfo_t flash_net_LocalConnection_domain = {0x01, 0x00, 0x80, 0x16, "", "domain", 0, &_String, &flash_net_LocalConnection, 0}; static methodinfo_t flash_net_LocalConnection_allowInsecureDomain = {0x02, 0x00, 0x80, 0x16, "", "allowInsecureDomain", 0, &voidclass, &flash_net_LocalConnection, 0}; static methodinfo_t flash_net_LocalConnection_send = {0x02, 0x00, 0x80, 0x16, "", "send", 0, &voidclass, &flash_net_LocalConnection, 0}; static methodinfo_t flash_net_LocalConnection_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_LocalConnection, 0}; static classinfo_t flash_display_ShaderParameterType = {0x03, 0x00, 0x81, 0x16, "flash.display", "ShaderParameterType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_ShaderParameterType_FLOAT = {0x01, 0x00, 0x82, 0x16, "", "FLOAT", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_BOOL = {0x01, 0x00, 0x82, 0x16, "", "BOOL", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_FLOAT2 = {0x01, 0x00, 0x82, 0x16, "", "FLOAT2", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_MATRIX2X2 = {0x01, 0x00, 0x82, 0x16, "", "MATRIX2X2", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_INT = {0x01, 0x00, 0x82, 0x16, "", "INT", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_INT4 = {0x01, 0x00, 0x82, 0x16, "", "INT4", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_MATRIX4X4 = {0x01, 0x00, 0x82, 0x16, "", "MATRIX4X4", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_FLOAT3 = {0x01, 0x00, 0x82, 0x16, "", "FLOAT3", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_BOOL2 = {0x01, 0x00, 0x82, 0x16, "", "BOOL2", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_INT3 = {0x01, 0x00, 0x82, 0x16, "", "INT3", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_BOOL3 = {0x01, 0x00, 0x82, 0x16, "", "BOOL3", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_BOOL4 = {0x01, 0x00, 0x82, 0x16, "", "BOOL4", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_FLOAT4 = {0x01, 0x00, 0x82, 0x16, "", "FLOAT4", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_INT2 = {0x01, 0x00, 0x82, 0x16, "", "INT2", 0, &_String, &flash_display_ShaderParameterType, 0}; static varinfo_t flash_display_ShaderParameterType_MATRIX3X3 = {0x01, 0x00, 0x82, 0x16, "", "MATRIX3X3", 0, &_String, &flash_display_ShaderParameterType, 0}; static classinfo_t flash_events_IMEEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "IMEEvent", 0, &flash_events_TextEvent, interfaces: {0}}; static methodinfo_t flash_events_IMEEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_IMEEvent, 0}; static methodinfo_t flash_events_IMEEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_IMEEvent, 0}; static varinfo_t flash_events_IMEEvent_IME_COMPOSITION = {0x01, 0x00, 0x82, 0x16, "", "IME_COMPOSITION", 0, &_String, &flash_events_IMEEvent, 0}; static classinfo_t flash_text_TextFormatDisplay = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextFormatDisplay", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextFormatDisplay_INLINE = {0x01, 0x00, 0x82, 0x16, "", "INLINE", 0, &_String, &flash_text_TextFormatDisplay, 0}; static varinfo_t flash_text_TextFormatDisplay_BLOCK = {0x01, 0x00, 0x82, 0x16, "", "BLOCK", 0, &_String, &flash_text_TextFormatDisplay, 0}; static methodinfo_t flash_profiler_profile = {0x02, 0x00, 0x82, 0x16, "flash.profiler", "profile", 0, &voidclass, 0, 0}; static classinfo_t flash_display_AVM1Movie = {0x03, 0x00, 0x80, 0x16, "flash.display", "AVM1Movie", 0, &flash_display_DisplayObject, interfaces: {0}}; static methodinfo_t flash_display_AVM1Movie_call = {0x02, 0x00, 0x80, 0x16, "", "call", 0, 0, &flash_display_AVM1Movie, 0}; static methodinfo_t flash_display_AVM1Movie_addCallback = {0x02, 0x00, 0x80, 0x16, "", "addCallback", 0, &voidclass, &flash_display_AVM1Movie, 0}; static classinfo_t flash_events_ContextMenuEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "ContextMenuEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_ContextMenuEvent_mouseTarget = {0x01, 0x00, 0x80, 0x16, "", "mouseTarget", 0, &flash_display_InteractiveObject, &flash_events_ContextMenuEvent, 0}; static varinfo_t flash_events_ContextMenuEvent_isMouseTargetInaccessible = {0x01, 0x00, 0x80, 0x16, "", "isMouseTargetInaccessible", 0, &_Boolean, &flash_events_ContextMenuEvent, 0}; static methodinfo_t flash_events_ContextMenuEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_ContextMenuEvent, 0}; static varinfo_t flash_events_ContextMenuEvent_contextMenuOwner = {0x01, 0x00, 0x80, 0x16, "", "contextMenuOwner", 0, &flash_display_InteractiveObject, &flash_events_ContextMenuEvent, 0}; static methodinfo_t flash_events_ContextMenuEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_ContextMenuEvent, 0}; static varinfo_t flash_events_ContextMenuEvent_MENU_SELECT = {0x01, 0x00, 0x82, 0x16, "", "MENU_SELECT", 0, &_String, &flash_events_ContextMenuEvent, 0}; static varinfo_t flash_events_ContextMenuEvent_MENU_ITEM_SELECT = {0x01, 0x00, 0x82, 0x16, "", "MENU_ITEM_SELECT", 0, &_String, &flash_events_ContextMenuEvent, 0}; static classinfo_t flash_events_EventPhase = {0x03, 0x00, 0x81, 0x16, "flash.events", "EventPhase", 0, &_Object, interfaces: {0}}; static varinfo_t flash_events_EventPhase_BUBBLING_PHASE = {0x01, 0x00, 0x82, 0x16, "", "BUBBLING_PHASE", 0, &_uint, &flash_events_EventPhase, 0}; static varinfo_t flash_events_EventPhase_CAPTURING_PHASE = {0x01, 0x00, 0x82, 0x16, "", "CAPTURING_PHASE", 0, &_uint, &flash_events_EventPhase, 0}; static varinfo_t flash_events_EventPhase_AT_TARGET = {0x01, 0x00, 0x82, 0x16, "", "AT_TARGET", 0, &_uint, &flash_events_EventPhase, 0}; static classinfo_t flash_display_JointStyle = {0x03, 0x00, 0x81, 0x16, "flash.display", "JointStyle", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_JointStyle_ROUND = {0x01, 0x00, 0x82, 0x16, "", "ROUND", 0, &_String, &flash_display_JointStyle, 0}; static varinfo_t flash_display_JointStyle_MITER = {0x01, 0x00, 0x82, 0x16, "", "MITER", 0, &_String, &flash_display_JointStyle, 0}; static varinfo_t flash_display_JointStyle_BEVEL = {0x01, 0x00, 0x82, 0x16, "", "BEVEL", 0, &_String, &flash_display_JointStyle, 0}; static classinfo_t flash_utils_Dictionary = {0x03, 0x00, 0x88, 0x16, "flash.utils", "Dictionary", 0, &_Object, interfaces: {0}}; static classinfo_t flash_display_GraphicsPathCommand = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsPathCommand", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_GraphicsPathCommand_NO_OP = {0x01, 0x00, 0x82, 0x16, "", "NO_OP", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static varinfo_t flash_display_GraphicsPathCommand_MOVE_TO = {0x01, 0x00, 0x82, 0x16, "", "MOVE_TO", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static varinfo_t flash_display_GraphicsPathCommand_WIDE_MOVE_TO = {0x01, 0x00, 0x82, 0x16, "", "WIDE_MOVE_TO", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static varinfo_t flash_display_GraphicsPathCommand_CURVE_TO = {0x01, 0x00, 0x82, 0x16, "", "CURVE_TO", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static varinfo_t flash_display_GraphicsPathCommand_LINE_TO = {0x01, 0x00, 0x82, 0x16, "", "LINE_TO", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static varinfo_t flash_display_GraphicsPathCommand_WIDE_LINE_TO = {0x01, 0x00, 0x82, 0x16, "", "WIDE_LINE_TO", 0, &_int, &flash_display_GraphicsPathCommand, 0}; static classinfo_t flash_filters_BevelFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "BevelFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_BevelFilter_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_highlightColor = {0x01, 0x00, 0x80, 0x16, "", "highlightColor", 0, &_uint, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_knockout = {0x01, 0x00, 0x80, 0x16, "", "knockout", 0, &_Boolean, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_distance = {0x01, 0x00, 0x80, 0x16, "", "distance", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_strength = {0x01, 0x00, 0x80, 0x16, "", "strength", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_highlightAlpha = {0x01, 0x00, 0x80, 0x16, "", "highlightAlpha", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_shadowColor = {0x01, 0x00, 0x80, 0x16, "", "shadowColor", 0, &_uint, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_angle = {0x01, 0x00, 0x80, 0x16, "", "angle", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_shadowAlpha = {0x01, 0x00, 0x80, 0x16, "", "shadowAlpha", 0, &_Number, &flash_filters_BevelFilter, 0}; static varinfo_t flash_filters_BevelFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_BevelFilter, 0}; static methodinfo_t flash_filters_BevelFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_BevelFilter, 0}; static methodinfo_t flash_utils_getTimer = {0x02, 0x00, 0x82, 0x16, "flash.utils", "getTimer", 0, &_int, 0, 0}; static classinfo_t flash_display_Loader = {0x03, 0x00, 0x80, 0x16, "flash.display", "Loader", 0, &flash_display_DisplayObjectContainer, interfaces: {0}}; static varinfo_t flash_display_Loader_content = {0x01, 0x00, 0x80, 0x16, "", "content", 0, &flash_display_DisplayObject, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_unloadAndStop = {0x02, 0x00, 0x80, 0x16, "", "unloadAndStop", 0, &voidclass, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_unload = {0x02, 0x00, 0x80, 0x16, "", "unload", 0, &voidclass, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_removeChildAt = {0x02, 0x00, 0x80, 0x16, "", "removeChildAt", 0, &flash_display_DisplayObject, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_addChildAt = {0x02, 0x00, 0x80, 0x16, "", "addChildAt", 0, &flash_display_DisplayObject, &flash_display_Loader, 0}; static varinfo_t flash_display_Loader_contentLoaderInfo = {0x01, 0x00, 0x80, 0x16, "", "contentLoaderInfo", 0, &flash_display_LoaderInfo, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_loadBytes = {0x02, 0x00, 0x80, 0x16, "", "loadBytes", 0, &voidclass, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_removeChild = {0x02, 0x00, 0x80, 0x16, "", "removeChild", 0, &flash_display_DisplayObject, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_load = {0x02, 0x00, 0x80, 0x16, "", "load", 0, &voidclass, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_addChild = {0x02, 0x00, 0x80, 0x16, "", "addChild", 0, &flash_display_DisplayObject, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_display_Loader, 0}; static methodinfo_t flash_display_Loader_setChildIndex = {0x02, 0x00, 0x80, 0x16, "", "setChildIndex", 0, &voidclass, &flash_display_Loader, 0}; static classinfo_t flash_display_GraphicsBitmapFill = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsBitmapFill", 0, &_Object, interfaces: {&flash_display_IGraphicsFill, &flash_display_IGraphicsData, 0}}; static varinfo_t flash_display_GraphicsBitmapFill_smooth = {0x01, 0x00, 0x80, 0x16, "", "smooth", 0, &_Boolean, &flash_display_GraphicsBitmapFill, 0}; static varinfo_t flash_display_GraphicsBitmapFill_repeat = {0x01, 0x00, 0x80, 0x16, "", "repeat", 0, &_Boolean, &flash_display_GraphicsBitmapFill, 0}; static varinfo_t flash_display_GraphicsBitmapFill_bitmapData = {0x01, 0x00, 0x80, 0x16, "", "bitmapData", 0, &flash_display_BitmapData, &flash_display_GraphicsBitmapFill, 0}; static varinfo_t flash_display_GraphicsBitmapFill_matrix = {0x01, 0x00, 0x80, 0x16, "", "matrix", 0, &flash_geom_Matrix, &flash_display_GraphicsBitmapFill, 0}; static varinfo_t _undefined = {0x01, 0x00, 0xa2, 0x16, "", "undefined", 0, 0, 0, 0}; static classinfo_t flash_display_SimpleButton = {0x03, 0x00, 0x80, 0x16, "flash.display", "SimpleButton", 0, &flash_display_InteractiveObject, interfaces: {0}}; static varinfo_t flash_display_SimpleButton_overState = {0x01, 0x00, 0x80, 0x16, "", "overState", 0, &flash_display_DisplayObject, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_downState = {0x01, 0x00, 0x80, 0x16, "", "downState", 0, &flash_display_DisplayObject, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_enabled = {0x01, 0x00, 0x80, 0x16, "", "enabled", 0, &_Boolean, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_trackAsMenu = {0x01, 0x00, 0x80, 0x16, "", "trackAsMenu", 0, &_Boolean, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_soundTransform = {0x01, 0x00, 0x80, 0x16, "", "soundTransform", 0, &flash_media_SoundTransform, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_useHandCursor = {0x01, 0x00, 0x80, 0x16, "", "useHandCursor", 0, &_Boolean, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_upState = {0x01, 0x00, 0x80, 0x16, "", "upState", 0, &flash_display_DisplayObject, &flash_display_SimpleButton, 0}; static varinfo_t flash_display_SimpleButton_hitTestState = {0x01, 0x00, 0x80, 0x16, "", "hitTestState", 0, &flash_display_DisplayObject, &flash_display_SimpleButton, 0}; static classinfo_t flash_text_engine_TabAlignment = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TabAlignment", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TabAlignment_END = {0x01, 0x00, 0x82, 0x16, "", "END", 0, &_String, &flash_text_engine_TabAlignment, 0}; static varinfo_t flash_text_engine_TabAlignment_CENTER = {0x01, 0x00, 0x82, 0x16, "", "CENTER", 0, &_String, &flash_text_engine_TabAlignment, 0}; static varinfo_t flash_text_engine_TabAlignment_START = {0x01, 0x00, 0x82, 0x16, "", "START", 0, &_String, &flash_text_engine_TabAlignment, 0}; static varinfo_t flash_text_engine_TabAlignment_DECIMAL = {0x01, 0x00, 0x82, 0x16, "", "DECIMAL", 0, &_String, &flash_text_engine_TabAlignment, 0}; static classinfo_t flash_text_engine_FontWeight = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "FontWeight", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_FontWeight_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_text_engine_FontWeight, 0}; static varinfo_t flash_text_engine_FontWeight_BOLD = {0x01, 0x00, 0x82, 0x16, "", "BOLD", 0, &_String, &flash_text_engine_FontWeight, 0}; static methodinfo_t flash_utils_describeType = {0x02, 0x00, 0x82, 0x16, "flash.utils", "describeType", 0, &_XML, 0, 0}; static classinfo_t flash_display_PixelSnapping = {0x03, 0x00, 0x81, 0x16, "flash.display", "PixelSnapping", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_PixelSnapping_AUTO = {0x01, 0x00, 0x82, 0x16, "", "AUTO", 0, &_String, &flash_display_PixelSnapping, 0}; static varinfo_t flash_display_PixelSnapping_NEVER = {0x01, 0x00, 0x82, 0x16, "", "NEVER", 0, &_String, &flash_display_PixelSnapping, 0}; static varinfo_t flash_display_PixelSnapping_ALWAYS = {0x01, 0x00, 0x82, 0x16, "", "ALWAYS", 0, &_String, &flash_display_PixelSnapping, 0}; static classinfo_t flash_events_FocusEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "FocusEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_FocusEvent_keyCode = {0x01, 0x00, 0x80, 0x16, "", "keyCode", 0, &_uint, &flash_events_FocusEvent, 0}; static methodinfo_t flash_events_FocusEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_isRelatedObjectInaccessible = {0x01, 0x00, 0x80, 0x16, "", "isRelatedObjectInaccessible", 0, &_Boolean, &flash_events_FocusEvent, 0}; static methodinfo_t flash_events_FocusEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_shiftKey = {0x01, 0x00, 0x80, 0x16, "", "shiftKey", 0, &_Boolean, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_relatedObject = {0x01, 0x00, 0x80, 0x16, "", "relatedObject", 0, &flash_display_InteractiveObject, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_FOCUS_IN = {0x01, 0x00, 0x82, 0x16, "", "FOCUS_IN", 0, &_String, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_FOCUS_OUT = {0x01, 0x00, 0x82, 0x16, "", "FOCUS_OUT", 0, &_String, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_KEY_FOCUS_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "KEY_FOCUS_CHANGE", 0, &_String, &flash_events_FocusEvent, 0}; static varinfo_t flash_events_FocusEvent_MOUSE_FOCUS_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_FOCUS_CHANGE", 0, &_String, &flash_events_FocusEvent, 0}; static classinfo_t flash_errors_MemoryError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "MemoryError", 0, &_Error, interfaces: {0}}; static classinfo_t flash_events_NetFilterEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "NetFilterEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_NetFilterEvent_header = {0x01, 0x00, 0x80, 0x16, "", "header", 0, &flash_utils_ByteArray, &flash_events_NetFilterEvent, 0}; static methodinfo_t flash_events_NetFilterEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_NetFilterEvent, 0}; static methodinfo_t flash_events_NetFilterEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_NetFilterEvent, 0}; static varinfo_t flash_events_NetFilterEvent_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &flash_utils_ByteArray, &flash_events_NetFilterEvent, 0}; static methodinfo_t _decodeURI = {0x02, 0x00, 0x82, 0x16, "", "decodeURI", 0, &_String, 0, 0}; static methodinfo_t _encodeURI = {0x02, 0x00, 0x82, 0x16, "", "encodeURI", 0, &_String, 0, 0}; static classinfo_t flash_text_engine_TextBaseline = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextBaseline", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextBaseline_ROMAN = {0x01, 0x00, 0x82, 0x16, "", "ROMAN", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_DESCENT = {0x01, 0x00, 0x82, 0x16, "", "DESCENT", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_IDEOGRAPHIC_CENTER = {0x01, 0x00, 0x82, 0x16, "", "IDEOGRAPHIC_CENTER", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_USE_DOMINANT_BASELINE = {0x01, 0x00, 0x82, 0x16, "", "USE_DOMINANT_BASELINE", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_IDEOGRAPHIC_BOTTOM = {0x01, 0x00, 0x82, 0x16, "", "IDEOGRAPHIC_BOTTOM", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_ASCENT = {0x01, 0x00, 0x82, 0x16, "", "ASCENT", 0, &_String, &flash_text_engine_TextBaseline, 0}; static varinfo_t flash_text_engine_TextBaseline_IDEOGRAPHIC_TOP = {0x01, 0x00, 0x82, 0x16, "", "IDEOGRAPHIC_TOP", 0, &_String, &flash_text_engine_TextBaseline, 0}; static classinfo_t flash_external_ExternalInterface = {0x03, 0x00, 0x81, 0x16, "flash.external", "ExternalInterface", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_external_ExternalInterface_call = {0x02, 0x00, 0x82, 0x16, "", "call", 0, 0, &flash_external_ExternalInterface, 0}; static varinfo_t flash_external_ExternalInterface_available = {0x01, 0x00, 0x82, 0x16, "", "available", 0, &_Boolean, &flash_external_ExternalInterface, 0}; static methodinfo_t flash_external_ExternalInterface_addCallback = {0x02, 0x00, 0x82, 0x16, "", "addCallback", 0, &voidclass, &flash_external_ExternalInterface, 0}; static varinfo_t flash_external_ExternalInterface_marshallExceptions = {0x01, 0x00, 0x82, 0x16, "", "marshallExceptions", 0, &_Boolean, &flash_external_ExternalInterface, 0}; static varinfo_t flash_external_ExternalInterface_objectID = {0x01, 0x00, 0x82, 0x16, "", "objectID", 0, &_String, &flash_external_ExternalInterface, 0}; static classinfo_t _EvalError = {0x03, 0x00, 0x88, 0x16, "", "EvalError", 0, &_Error, interfaces: {0}}; static varinfo_t _EvalError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_EvalError, 0}; static classinfo_t flash_text_engine_DigitCase = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "DigitCase", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_DigitCase_OLD_STYLE = {0x01, 0x00, 0x82, 0x16, "", "OLD_STYLE", 0, &_String, &flash_text_engine_DigitCase, 0}; static varinfo_t flash_text_engine_DigitCase_DEFAULT = {0x01, 0x00, 0x82, 0x16, "", "DEFAULT", 0, &_String, &flash_text_engine_DigitCase, 0}; static varinfo_t flash_text_engine_DigitCase_LINING = {0x01, 0x00, 0x82, 0x16, "", "LINING", 0, &_String, &flash_text_engine_DigitCase, 0}; static classinfo_t flash_text_TextFormatAlign = {0x03, 0x00, 0x81, 0x16, "flash.text", "TextFormatAlign", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_TextFormatAlign_LEFT = {0x01, 0x00, 0x82, 0x16, "", "LEFT", 0, &_String, &flash_text_TextFormatAlign, 0}; static varinfo_t flash_text_TextFormatAlign_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "RIGHT", 0, &_String, &flash_text_TextFormatAlign, 0}; static varinfo_t flash_text_TextFormatAlign_CENTER = {0x01, 0x00, 0x82, 0x16, "", "CENTER", 0, &_String, &flash_text_TextFormatAlign, 0}; static varinfo_t flash_text_TextFormatAlign_JUSTIFY = {0x01, 0x00, 0x82, 0x16, "", "JUSTIFY", 0, &_String, &flash_text_TextFormatAlign, 0}; static classinfo_t flash_errors_ScriptTimeoutError = {0x03, 0x00, 0x88, 0x16, "flash.errors", "ScriptTimeoutError", 0, &_Error, interfaces: {0}}; static classinfo_t _uint = {0x03, 0x00, 0x81, 0x16, "", "uint", 0, &_Object, interfaces: {0}}; static methodinfo_t _uint_valueOf = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "valueOf", 0, &_uint, &_uint, 0}; static methodinfo_t _uint_toString = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toString", 0, &_String, &_uint, 0}; static methodinfo_t _uint_toExponential = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toExponential", 0, &_String, &_uint, 0}; static methodinfo_t _uint_toFixed = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toFixed", 0, &_String, &_uint, 0}; static methodinfo_t _uint_toPrecision = {0x02, 0x00, 0x80, 0x08, "http://adobe.com/AS3/2006/builtin", "toPrecision", 0, &_String, &_uint, 0}; static varinfo_t _uint_MAX_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MAX_VALUE", 0, &_uint, &_uint, 0}; static varinfo_t _uint_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_uint, 0}; static varinfo_t _uint_MIN_VALUE = {0x01, 0x00, 0x82, 0x16, "", "MIN_VALUE", 0, &_uint, &_uint, 0}; static methodinfo_t flash_debugger_enterDebugger = {0x02, 0x00, 0x82, 0x16, "flash.debugger", "enterDebugger", 0, &voidclass, 0, 0}; static classinfo_t flash_geom_Orientation3D = {0x03, 0x00, 0x81, 0x16, "flash.geom", "Orientation3D", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_Orientation3D_QUATERNION = {0x01, 0x00, 0x82, 0x16, "", "QUATERNION", 0, &_String, &flash_geom_Orientation3D, 0}; static varinfo_t flash_geom_Orientation3D_EULER_ANGLES = {0x01, 0x00, 0x82, 0x16, "", "EULER_ANGLES", 0, &_String, &flash_geom_Orientation3D, 0}; static varinfo_t flash_geom_Orientation3D_AXIS_ANGLE = {0x01, 0x00, 0x82, 0x16, "", "AXIS_ANGLE", 0, &_String, &flash_geom_Orientation3D, 0}; static classinfo_t flash_text_engine_CFFHinting = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "CFFHinting", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_CFFHinting_HORIZONTAL_STEM = {0x01, 0x00, 0x82, 0x16, "", "HORIZONTAL_STEM", 0, &_String, &flash_text_engine_CFFHinting, 0}; static varinfo_t flash_text_engine_CFFHinting_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_text_engine_CFFHinting, 0}; static classinfo_t flash_text_FontType = {0x03, 0x00, 0x81, 0x16, "flash.text", "FontType", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_FontType_EMBEDDED = {0x01, 0x00, 0x82, 0x16, "", "EMBEDDED", 0, &_String, &flash_text_FontType, 0}; static varinfo_t flash_text_FontType_DEVICE = {0x01, 0x00, 0x82, 0x16, "", "DEVICE", 0, &_String, &flash_text_FontType, 0}; static varinfo_t flash_text_FontType_EMBEDDED_CFF = {0x01, 0x00, 0x82, 0x16, "", "EMBEDDED_CFF", 0, &_String, &flash_text_FontType, 0}; static classinfo_t flash_filters_ShaderFilter = {0x03, 0x00, 0x80, 0x16, "flash.filters", "ShaderFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_ShaderFilter_bottomExtension = {0x01, 0x00, 0x80, 0x16, "", "bottomExtension", 0, &_int, &flash_filters_ShaderFilter, 0}; static varinfo_t flash_filters_ShaderFilter_shader = {0x01, 0x00, 0x80, 0x16, "", "shader", 0, &flash_display_Shader, &flash_filters_ShaderFilter, 0}; static varinfo_t flash_filters_ShaderFilter_rightExtension = {0x01, 0x00, 0x80, 0x16, "", "rightExtension", 0, &_int, &flash_filters_ShaderFilter, 0}; static varinfo_t flash_filters_ShaderFilter_leftExtension = {0x01, 0x00, 0x80, 0x16, "", "leftExtension", 0, &_int, &flash_filters_ShaderFilter, 0}; static varinfo_t flash_filters_ShaderFilter_topExtension = {0x01, 0x00, 0x80, 0x16, "", "topExtension", 0, &_int, &flash_filters_ShaderFilter, 0}; static classinfo_t flash_display_GraphicsPath = {0x03, 0x00, 0x81, 0x16, "flash.display", "GraphicsPath", 0, &_Object, interfaces: {&flash_display_IGraphicsPath, &flash_display_IGraphicsData, 0}}; static methodinfo_t flash_display_GraphicsPath_wideMoveTo = {0x02, 0x00, 0x80, 0x16, "", "wideMoveTo", 0, &voidclass, &flash_display_GraphicsPath, 0}; static varinfo_t flash_display_GraphicsPath_winding = {0x01, 0x00, 0x80, 0x16, "", "winding", 0, &_String, &flash_display_GraphicsPath, 0}; static methodinfo_t flash_display_GraphicsPath_moveTo = {0x02, 0x00, 0x80, 0x16, "", "moveTo", 0, &voidclass, &flash_display_GraphicsPath, 0}; static methodinfo_t flash_display_GraphicsPath_wideLineTo = {0x02, 0x00, 0x80, 0x16, "", "wideLineTo", 0, &voidclass, &flash_display_GraphicsPath, 0}; static varinfo_t flash_display_GraphicsPath_commands = {0x01, 0x00, 0x80, 0x16, "", "commands", 0, &__AS3___vec_Vector, &flash_display_GraphicsPath, 0}; static methodinfo_t flash_display_GraphicsPath_curveTo = {0x02, 0x00, 0x80, 0x16, "", "curveTo", 0, &voidclass, &flash_display_GraphicsPath, 0}; static methodinfo_t flash_display_GraphicsPath_lineTo = {0x02, 0x00, 0x80, 0x16, "", "lineTo", 0, &voidclass, &flash_display_GraphicsPath, 0}; static varinfo_t flash_display_GraphicsPath_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, &__AS3___vec_Vector, &flash_display_GraphicsPath, 0}; static classinfo_t flash_system_ApplicationDomain = {0x03, 0x00, 0x81, 0x16, "flash.system", "ApplicationDomain", 0, &_Object, interfaces: {0}}; static methodinfo_t flash_system_ApplicationDomain_hasDefinition = {0x02, 0x00, 0x80, 0x16, "", "hasDefinition", 0, &_Boolean, &flash_system_ApplicationDomain, 0}; static methodinfo_t flash_system_ApplicationDomain_getDefinition = {0x02, 0x00, 0x80, 0x16, "", "getDefinition", 0, &_Object, &flash_system_ApplicationDomain, 0}; static varinfo_t flash_system_ApplicationDomain_parentDomain = {0x01, 0x00, 0x80, 0x16, "", "parentDomain", 0, &flash_system_ApplicationDomain, &flash_system_ApplicationDomain, 0}; static varinfo_t flash_system_ApplicationDomain_domainMemory = {0x01, 0x00, 0x80, 0x16, "", "domainMemory", 0, &flash_utils_ByteArray, &flash_system_ApplicationDomain, 0}; static varinfo_t flash_system_ApplicationDomain_MIN_DOMAIN_MEMORY_LENGTH = {0x01, 0x00, 0x82, 0x16, "", "MIN_DOMAIN_MEMORY_LENGTH", 0, &_uint, &flash_system_ApplicationDomain, 0}; static varinfo_t flash_system_ApplicationDomain_currentDomain = {0x01, 0x00, 0x82, 0x16, "", "currentDomain", 0, &flash_system_ApplicationDomain, &flash_system_ApplicationDomain, 0}; static classinfo_t flash_events_KeyboardEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "KeyboardEvent", 0, &flash_events_Event, interfaces: {0}}; static varinfo_t flash_events_KeyboardEvent_shiftKey = {0x01, 0x00, 0x80, 0x16, "", "shiftKey", 0, &_Boolean, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_keyCode = {0x01, 0x00, 0x80, 0x16, "", "keyCode", 0, &_uint, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_keyLocation = {0x01, 0x00, 0x80, 0x16, "", "keyLocation", 0, &_uint, &flash_events_KeyboardEvent, 0}; static methodinfo_t flash_events_KeyboardEvent_updateAfterEvent = {0x02, 0x00, 0x80, 0x16, "", "updateAfterEvent", 0, &voidclass, &flash_events_KeyboardEvent, 0}; static methodinfo_t flash_events_KeyboardEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_altKey = {0x01, 0x00, 0x80, 0x16, "", "altKey", 0, &_Boolean, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_ctrlKey = {0x01, 0x00, 0x80, 0x16, "", "ctrlKey", 0, &_Boolean, &flash_events_KeyboardEvent, 0}; static methodinfo_t flash_events_KeyboardEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_charCode = {0x01, 0x00, 0x80, 0x16, "", "charCode", 0, &_uint, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_KEY_DOWN = {0x01, 0x00, 0x82, 0x16, "", "KEY_DOWN", 0, &_String, &flash_events_KeyboardEvent, 0}; static varinfo_t flash_events_KeyboardEvent_KEY_UP = {0x01, 0x00, 0x82, 0x16, "", "KEY_UP", 0, &_String, &flash_events_KeyboardEvent, 0}; static classinfo_t adobe_utils_ProductManager = {0x03, 0x00, 0x81, 0x16, "adobe.utils", "ProductManager", 0, &flash_events_EventDispatcher, interfaces: {0}}; static varinfo_t adobe_utils_ProductManager_running = {0x01, 0x00, 0x80, 0x16, "", "running", 0, &_Boolean, &adobe_utils_ProductManager, 0}; static methodinfo_t adobe_utils_ProductManager_download = {0x02, 0x00, 0x80, 0x16, "", "download", 0, &_Boolean, &adobe_utils_ProductManager, 0}; static varinfo_t adobe_utils_ProductManager_installedVersion = {0x01, 0x00, 0x80, 0x16, "", "installedVersion", 0, &_String, &adobe_utils_ProductManager, 0}; static varinfo_t adobe_utils_ProductManager_installed = {0x01, 0x00, 0x80, 0x16, "", "installed", 0, &_Boolean, &adobe_utils_ProductManager, 0}; static methodinfo_t adobe_utils_ProductManager_launch = {0x02, 0x00, 0x80, 0x16, "", "launch", 0, &_Boolean, &adobe_utils_ProductManager, 0}; static classinfo_t flash_events_Event = {0x03, 0x00, 0x80, 0x16, "flash.events", "Event", 0, &_Object, interfaces: {0}}; static varinfo_t flash_events_Event_type = {0x01, 0x00, 0x80, 0x16, "", "type", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_cancelable = {0x01, 0x00, 0x80, 0x16, "", "cancelable", 0, &_Boolean, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_isDefaultPrevented = {0x02, 0x00, 0x80, 0x16, "", "isDefaultPrevented", 0, &_Boolean, &flash_events_Event, 0}; static varinfo_t flash_events_Event_target = {0x01, 0x00, 0x80, 0x16, "", "target", 0, &_Object, &flash_events_Event, 0}; static varinfo_t flash_events_Event_eventPhase = {0x01, 0x00, 0x80, 0x16, "", "eventPhase", 0, &_uint, &flash_events_Event, 0}; static varinfo_t flash_events_Event_currentTarget = {0x01, 0x00, 0x80, 0x16, "", "currentTarget", 0, &_Object, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_stopImmediatePropagation = {0x02, 0x00, 0x80, 0x16, "", "stopImmediatePropagation", 0, &voidclass, &flash_events_Event, 0}; static varinfo_t flash_events_Event_bubbles = {0x01, 0x00, 0x80, 0x16, "", "bubbles", 0, &_Boolean, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_stopPropagation = {0x02, 0x00, 0x80, 0x16, "", "stopPropagation", 0, &voidclass, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_preventDefault = {0x02, 0x00, 0x80, 0x16, "", "preventDefault", 0, &voidclass, &flash_events_Event, 0}; static methodinfo_t flash_events_Event_formatToString = {0x02, 0x00, 0x80, 0x16, "", "formatToString", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_REMOVED_FROM_STAGE = {0x01, 0x00, 0x82, 0x16, "", "REMOVED_FROM_STAGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CLEAR = {0x01, 0x00, 0x82, 0x16, "", "CLEAR", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_OPEN = {0x01, 0x00, 0x82, 0x16, "", "OPEN", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_TAB_CHILDREN_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "TAB_CHILDREN_CHANGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_DEACTIVATE = {0x01, 0x00, 0x82, 0x16, "", "DEACTIVATE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_ACTIVATE = {0x01, 0x00, 0x82, 0x16, "", "ACTIVATE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_SOUND_COMPLETE = {0x01, 0x00, 0x82, 0x16, "", "SOUND_COMPLETE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CANCEL = {0x01, 0x00, 0x82, 0x16, "", "CANCEL", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_REMOVED = {0x01, 0x00, 0x82, 0x16, "", "REMOVED", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_INIT = {0x01, 0x00, 0x82, 0x16, "", "INIT", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_FRAME_CONSTRUCTED = {0x01, 0x00, 0x82, 0x16, "", "FRAME_CONSTRUCTED", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_SCROLL = {0x01, 0x00, 0x82, 0x16, "", "SCROLL", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_TAB_INDEX_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "TAB_INDEX_CHANGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "CHANGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_ADDED_TO_STAGE = {0x01, 0x00, 0x82, 0x16, "", "ADDED_TO_STAGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_UNLOAD = {0x01, 0x00, 0x82, 0x16, "", "UNLOAD", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_SELECT = {0x01, 0x00, 0x82, 0x16, "", "SELECT", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CONNECT = {0x01, 0x00, 0x82, 0x16, "", "CONNECT", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CUT = {0x01, 0x00, 0x82, 0x16, "", "CUT", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_PASTE = {0x01, 0x00, 0x82, 0x16, "", "PASTE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_ADDED = {0x01, 0x00, 0x82, 0x16, "", "ADDED", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_ID3 = {0x01, 0x00, 0x82, 0x16, "", "ID3", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_ENTER_FRAME = {0x01, 0x00, 0x82, 0x16, "", "ENTER_FRAME", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_RENDER = {0x01, 0x00, 0x82, 0x16, "", "RENDER", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_EXIT_FRAME = {0x01, 0x00, 0x82, 0x16, "", "EXIT_FRAME", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_RESIZE = {0x01, 0x00, 0x82, 0x16, "", "RESIZE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_FULLSCREEN = {0x01, 0x00, 0x82, 0x16, "", "FULLSCREEN", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_MOUSE_LEAVE = {0x01, 0x00, 0x82, 0x16, "", "MOUSE_LEAVE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_CLOSE = {0x01, 0x00, 0x82, 0x16, "", "CLOSE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_SELECT_ALL = {0x01, 0x00, 0x82, 0x16, "", "SELECT_ALL", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_TAB_ENABLED_CHANGE = {0x01, 0x00, 0x82, 0x16, "", "TAB_ENABLED_CHANGE", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_COPY = {0x01, 0x00, 0x82, 0x16, "", "COPY", 0, &_String, &flash_events_Event, 0}; static varinfo_t flash_events_Event_COMPLETE = {0x01, 0x00, 0x82, 0x16, "", "COMPLETE", 0, &_String, &flash_events_Event, 0}; static classinfo_t flash_desktop_ClipboardFormats = {0x03, 0x00, 0x80, 0x16, "flash.desktop", "ClipboardFormats", 0, &_Object, interfaces: {0}}; static varinfo_t flash_desktop_ClipboardFormats_TEXT_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "TEXT_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_BITMAP_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "BITMAP_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_FLASH_PREFIX = {0x01, 0x00, 0x82, 0x17, "", "FLASH_PREFIX", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_HTML_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "HTML_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_REFERENCE_PREFIX = {0x01, 0x00, 0x82, 0x17, "", "REFERENCE_PREFIX", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_AIR_PREFIX = {0x01, 0x00, 0x82, 0x17, "", "AIR_PREFIX", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_SERIALIZATION_PREFIX = {0x01, 0x00, 0x82, 0x17, "", "SERIALIZATION_PREFIX", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_RICH_TEXT_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "RICH_TEXT_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_URL_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "URL_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static varinfo_t flash_desktop_ClipboardFormats_FILE_LIST_FORMAT = {0x01, 0x00, 0x82, 0x16, "", "FILE_LIST_FORMAT", 0, &_String, &flash_desktop_ClipboardFormats, 0}; static classinfo_t flash_display_MovieClip = {0x03, 0x00, 0x88, 0x16, "flash.display", "MovieClip", 0, &flash_display_Sprite, interfaces: {0}}; static methodinfo_t flash_display_MovieClip_prevScene = {0x02, 0x00, 0x80, 0x16, "", "prevScene", 0, &voidclass, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_gotoAndPlay = {0x02, 0x00, 0x80, 0x16, "", "gotoAndPlay", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_currentLabels = {0x01, 0x00, 0x80, 0x16, "", "currentLabels", 0, &_Array, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_nextFrame = {0x02, 0x00, 0x80, 0x16, "", "nextFrame", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_currentScene = {0x01, 0x00, 0x80, 0x16, "", "currentScene", 0, &flash_display_Scene, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_enabled = {0x01, 0x00, 0x80, 0x16, "", "enabled", 0, &_Boolean, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_currentFrameLabel = {0x01, 0x00, 0x80, 0x16, "", "currentFrameLabel", 0, &_String, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_play = {0x02, 0x00, 0x80, 0x16, "", "play", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_framesLoaded = {0x01, 0x00, 0x80, 0x16, "", "framesLoaded", 0, &_int, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_scenes = {0x01, 0x00, 0x80, 0x16, "", "scenes", 0, &_Array, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_addFrameScript = {0x02, 0x00, 0x80, 0x16, "", "addFrameScript", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_currentLabel = {0x01, 0x00, 0x80, 0x16, "", "currentLabel", 0, &_String, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_prevFrame = {0x02, 0x00, 0x80, 0x16, "", "prevFrame", 0, &voidclass, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_gotoAndStop = {0x02, 0x00, 0x80, 0x16, "", "gotoAndStop", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_currentFrame = {0x01, 0x00, 0x80, 0x16, "", "currentFrame", 0, &_int, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_nextScene = {0x02, 0x00, 0x80, 0x16, "", "nextScene", 0, &voidclass, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_totalFrames = {0x01, 0x00, 0x80, 0x16, "", "totalFrames", 0, &_int, &flash_display_MovieClip, 0}; static varinfo_t flash_display_MovieClip_trackAsMenu = {0x01, 0x00, 0x80, 0x16, "", "trackAsMenu", 0, &_Boolean, &flash_display_MovieClip, 0}; static methodinfo_t flash_display_MovieClip_stop = {0x02, 0x00, 0x80, 0x16, "", "stop", 0, &voidclass, &flash_display_MovieClip, 0}; static classinfo_t flash_display_BitmapData = {0x03, 0x00, 0x80, 0x16, "flash.display", "BitmapData", 0, &_Object, interfaces: {&flash_display_IBitmapDrawable, 0}}; static methodinfo_t flash_display_BitmapData_getPixel32 = {0x02, 0x00, 0x80, 0x16, "", "getPixel32", 0, &_uint, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_draw = {0x02, 0x00, 0x80, 0x16, "", "draw", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_setPixels = {0x02, 0x00, 0x80, 0x16, "", "setPixels", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_copyPixels = {0x02, 0x00, 0x80, 0x16, "", "copyPixels", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_histogram = {0x02, 0x00, 0x80, 0x16, "", "histogram", 0, &__AS3___vec_Vector, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_scroll = {0x02, 0x00, 0x80, 0x16, "", "scroll", 0, &voidclass, &flash_display_BitmapData, 0}; static varinfo_t flash_display_BitmapData_transparent = {0x01, 0x00, 0x80, 0x16, "", "transparent", 0, &_Boolean, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_noise = {0x02, 0x00, 0x80, 0x16, "", "noise", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_threshold = {0x02, 0x00, 0x80, 0x16, "", "threshold", 0, &_uint, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_paletteMap = {0x02, 0x00, 0x80, 0x16, "", "paletteMap", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_perlinNoise = {0x02, 0x00, 0x80, 0x16, "", "perlinNoise", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_hitTest = {0x02, 0x00, 0x80, 0x16, "", "hitTest", 0, &_Boolean, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_getPixel = {0x02, 0x00, 0x80, 0x16, "", "getPixel", 0, &_uint, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_unlock = {0x02, 0x00, 0x80, 0x16, "", "unlock", 0, &voidclass, &flash_display_BitmapData, 0}; static varinfo_t flash_display_BitmapData_height = {0x01, 0x00, 0x80, 0x16, "", "height", 0, &_int, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_copyChannel = {0x02, 0x00, 0x80, 0x16, "", "copyChannel", 0, &voidclass, &flash_display_BitmapData, 0}; static varinfo_t flash_display_BitmapData_width = {0x01, 0x00, 0x80, 0x16, "", "width", 0, &_int, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_display_BitmapData, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_colorTransform = {0x02, 0x00, 0x80, 0x16, "", "colorTransform", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_generateFilterRect = {0x02, 0x00, 0x80, 0x16, "", "generateFilterRect", 0, &flash_geom_Rectangle, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_compare = {0x02, 0x00, 0x80, 0x16, "", "compare", 0, &_Object, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_fillRect = {0x02, 0x00, 0x80, 0x16, "", "fillRect", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_setVector = {0x02, 0x00, 0x80, 0x16, "", "setVector", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_floodFill = {0x02, 0x00, 0x80, 0x16, "", "floodFill", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_pixelDissolve = {0x02, 0x00, 0x80, 0x16, "", "pixelDissolve", 0, &_int, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_setPixel = {0x02, 0x00, 0x80, 0x16, "", "setPixel", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_setPixel32 = {0x02, 0x00, 0x80, 0x16, "", "setPixel32", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_lock = {0x02, 0x00, 0x80, 0x16, "", "lock", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_getVector = {0x02, 0x00, 0x80, 0x16, "", "getVector", 0, &__AS3___vec_Vector, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_getColorBoundsRect = {0x02, 0x00, 0x80, 0x16, "", "getColorBoundsRect", 0, &flash_geom_Rectangle, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_getPixels = {0x02, 0x00, 0x80, 0x16, "", "getPixels", 0, &flash_utils_ByteArray, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_merge = {0x02, 0x00, 0x80, 0x16, "", "merge", 0, &voidclass, &flash_display_BitmapData, 0}; static varinfo_t flash_display_BitmapData_rect = {0x01, 0x00, 0x80, 0x16, "", "rect", 0, &flash_geom_Rectangle, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_applyFilter = {0x02, 0x00, 0x80, 0x16, "", "applyFilter", 0, &voidclass, &flash_display_BitmapData, 0}; static methodinfo_t flash_display_BitmapData_dispose = {0x02, 0x00, 0x80, 0x16, "", "dispose", 0, &voidclass, &flash_display_BitmapData, 0}; static classinfo_t flash_text_engine_LigatureLevel = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "LigatureLevel", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_LigatureLevel_UNCOMMON = {0x01, 0x00, 0x82, 0x16, "", "UNCOMMON", 0, &_String, &flash_text_engine_LigatureLevel, 0}; static varinfo_t flash_text_engine_LigatureLevel_COMMON = {0x01, 0x00, 0x82, 0x16, "", "COMMON", 0, &_String, &flash_text_engine_LigatureLevel, 0}; static varinfo_t flash_text_engine_LigatureLevel_EXOTIC = {0x01, 0x00, 0x82, 0x16, "", "EXOTIC", 0, &_String, &flash_text_engine_LigatureLevel, 0}; static varinfo_t flash_text_engine_LigatureLevel_MINIMUM = {0x01, 0x00, 0x82, 0x16, "", "MINIMUM", 0, &_String, &flash_text_engine_LigatureLevel, 0}; static varinfo_t flash_text_engine_LigatureLevel_NONE = {0x01, 0x00, 0x82, 0x16, "", "NONE", 0, &_String, &flash_text_engine_LigatureLevel, 0}; static constant_t _Infinity_constant = {type: 6}; static varinfo_t _Infinity = {0x01, 0x00, 0xa2, 0x16, "", "Infinity", 0, &_Number, 0, &_Infinity_constant}; static classinfo_t flash_text_engine_FontDescription = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "FontDescription", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_FontDescription_renderingMode = {0x01, 0x00, 0x80, 0x16, "", "renderingMode", 0, &_String, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_cffHinting = {0x01, 0x00, 0x80, 0x16, "", "cffHinting", 0, &_String, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_fontPosture = {0x01, 0x00, 0x80, 0x16, "", "fontPosture", 0, &_String, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_fontName = {0x01, 0x00, 0x80, 0x16, "", "fontName", 0, &_String, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_fontLookup = {0x01, 0x00, 0x80, 0x16, "", "fontLookup", 0, &_String, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_locked = {0x01, 0x00, 0x80, 0x16, "", "locked", 0, &_Boolean, &flash_text_engine_FontDescription, 0}; static varinfo_t flash_text_engine_FontDescription_fontWeight = {0x01, 0x00, 0x80, 0x16, "", "fontWeight", 0, &_String, &flash_text_engine_FontDescription, 0}; static methodinfo_t flash_text_engine_FontDescription_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_text_engine_FontDescription, &flash_text_engine_FontDescription, 0}; static methodinfo_t flash_text_engine_FontDescription_isFontCompatible = {0x02, 0x00, 0x82, 0x16, "", "isFontCompatible", 0, &_Boolean, &flash_text_engine_FontDescription, 0}; static classinfo_t flash_text_engine_TextElement = {0x03, 0x00, 0x81, 0x16, "flash.text.engine", "TextElement", 0, &flash_text_engine_ContentElement, interfaces: {0}}; static methodinfo_t flash_text_engine_TextElement_replaceText = {0x02, 0x00, 0x80, 0x16, "", "replaceText", 0, &voidclass, &flash_text_engine_TextElement, 0}; static classinfo_t flash_display_SWFVersion = {0x03, 0x00, 0x81, 0x16, "flash.display", "SWFVersion", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_SWFVersion_FLASH4 = {0x01, 0x00, 0x82, 0x16, "", "FLASH4", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH7 = {0x01, 0x00, 0x82, 0x16, "", "FLASH7", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH8 = {0x01, 0x00, 0x82, 0x16, "", "FLASH8", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH3 = {0x01, 0x00, 0x82, 0x16, "", "FLASH3", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH6 = {0x01, 0x00, 0x82, 0x16, "", "FLASH6", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH9 = {0x01, 0x00, 0x82, 0x16, "", "FLASH9", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH2 = {0x01, 0x00, 0x82, 0x16, "", "FLASH2", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH5 = {0x01, 0x00, 0x82, 0x16, "", "FLASH5", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH10 = {0x01, 0x00, 0x82, 0x16, "", "FLASH10", 0, &_uint, &flash_display_SWFVersion, 0}; static varinfo_t flash_display_SWFVersion_FLASH1 = {0x01, 0x00, 0x82, 0x16, "", "FLASH1", 0, &_uint, &flash_display_SWFVersion, 0}; static classinfo_t flash_net_URLLoader = {0x03, 0x00, 0x80, 0x16, "flash.net", "URLLoader", 0, &flash_events_EventDispatcher, interfaces: {0}}; static methodinfo_t flash_net_URLLoader_close = {0x02, 0x00, 0x80, 0x16, "", "close", 0, &voidclass, &flash_net_URLLoader, 0}; static varinfo_t flash_net_URLLoader_bytesLoaded = {0x01, 0x00, 0x80, 0x16, "", "bytesLoaded", 0, &_uint, &flash_net_URLLoader, 0}; static methodinfo_t flash_net_URLLoader_load = {0x02, 0x00, 0x80, 0x16, "", "load", 0, &voidclass, &flash_net_URLLoader, 0}; static varinfo_t flash_net_URLLoader_bytesTotal = {0x01, 0x00, 0x80, 0x16, "", "bytesTotal", 0, &_uint, &flash_net_URLLoader, 0}; static varinfo_t flash_net_URLLoader_dataFormat = {0x01, 0x00, 0x80, 0x16, "", "dataFormat", 0, &_String, &flash_net_URLLoader, 0}; static varinfo_t flash_net_URLLoader_data = {0x01, 0x00, 0x80, 0x16, "", "data", 0, 0, &flash_net_URLLoader, 0}; static classinfo_t flash_geom_Matrix = {0x03, 0x00, 0x80, 0x16, "flash.geom", "Matrix", 0, &_Object, interfaces: {0}}; static varinfo_t flash_geom_Matrix_b = {0x01, 0x00, 0x80, 0x16, "", "b", 0, &_Number, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_deltaTransformPoint = {0x02, 0x00, 0x80, 0x16, "", "deltaTransformPoint", 0, &flash_geom_Point, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_identity = {0x02, 0x00, 0x80, 0x16, "", "identity", 0, &voidclass, &flash_geom_Matrix, 0}; static varinfo_t flash_geom_Matrix_ty = {0x01, 0x00, 0x80, 0x16, "", "ty", 0, &_Number, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_translate = {0x02, 0x00, 0x80, 0x16, "", "translate", 0, &voidclass, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_concat = {0x02, 0x00, 0x80, 0x16, "", "concat", 0, &voidclass, &flash_geom_Matrix, 0}; static varinfo_t flash_geom_Matrix_c = {0x01, 0x00, 0x80, 0x16, "", "c", 0, &_Number, &flash_geom_Matrix, 0}; static varinfo_t flash_geom_Matrix_a = {0x01, 0x00, 0x80, 0x16, "", "a", 0, &_Number, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_scale = {0x02, 0x00, 0x80, 0x16, "", "scale", 0, &voidclass, &flash_geom_Matrix, 0}; static varinfo_t flash_geom_Matrix_d = {0x01, 0x00, 0x80, 0x16, "", "d", 0, &_Number, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_transformPoint = {0x02, 0x00, 0x80, 0x16, "", "transformPoint", 0, &flash_geom_Point, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_rotate = {0x02, 0x00, 0x80, 0x16, "", "rotate", 0, &voidclass, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_createGradientBox = {0x02, 0x00, 0x80, 0x16, "", "createGradientBox", 0, &voidclass, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_invert = {0x02, 0x00, 0x80, 0x16, "", "invert", 0, &voidclass, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_geom_Matrix, &flash_geom_Matrix, 0}; static varinfo_t flash_geom_Matrix_tx = {0x01, 0x00, 0x80, 0x16, "", "tx", 0, &_Number, &flash_geom_Matrix, 0}; static methodinfo_t flash_geom_Matrix_createBox = {0x02, 0x00, 0x80, 0x16, "", "createBox", 0, &voidclass, &flash_geom_Matrix, 0}; static classinfo_t flash_accessibility_Accessibility = {0x03, 0x00, 0x81, 0x16, "flash.accessibility", "Accessibility", 0, &_Object, interfaces: {0}}; static varinfo_t flash_accessibility_Accessibility_active = {0x01, 0x00, 0x82, 0x16, "", "active", 0, &_Boolean, &flash_accessibility_Accessibility, 0}; static methodinfo_t flash_accessibility_Accessibility_updateProperties = {0x02, 0x00, 0x82, 0x16, "", "updateProperties", 0, &voidclass, &flash_accessibility_Accessibility, 0}; static methodinfo_t flash_accessibility_Accessibility_sendEvent = {0x02, 0x00, 0x82, 0x16, "", "sendEvent", 0, &voidclass, &flash_accessibility_Accessibility, 0}; static methodinfo_t flash_net_sendToURL = {0x02, 0x00, 0x82, 0x16, "flash.net", "sendToURL", 0, &voidclass, 0, 0}; static classinfo_t flash_filters_GlowFilter = {0x03, 0x00, 0x81, 0x16, "flash.filters", "GlowFilter", 0, &flash_filters_BitmapFilter, interfaces: {0}}; static varinfo_t flash_filters_GlowFilter_blurY = {0x01, 0x00, 0x80, 0x16, "", "blurY", 0, &_Number, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_strength = {0x01, 0x00, 0x80, 0x16, "", "strength", 0, &_Number, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_inner = {0x01, 0x00, 0x80, 0x16, "", "inner", 0, &_Boolean, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_color = {0x01, 0x00, 0x80, 0x16, "", "color", 0, &_uint, &flash_filters_GlowFilter, 0}; static methodinfo_t flash_filters_GlowFilter_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_filters_BitmapFilter, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_quality = {0x01, 0x00, 0x80, 0x16, "", "quality", 0, &_int, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_knockout = {0x01, 0x00, 0x80, 0x16, "", "knockout", 0, &_Boolean, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_alpha = {0x01, 0x00, 0x80, 0x16, "", "alpha", 0, &_Number, &flash_filters_GlowFilter, 0}; static varinfo_t flash_filters_GlowFilter_blurX = {0x01, 0x00, 0x80, 0x16, "", "blurX", 0, &_Number, &flash_filters_GlowFilter, 0}; static classinfo_t flash_events_FullScreenEvent = {0x03, 0x00, 0x80, 0x16, "flash.events", "FullScreenEvent", 0, &flash_events_ActivityEvent, interfaces: {0}}; static methodinfo_t flash_events_FullScreenEvent_toString = {0x02, 0x00, 0x80, 0x16, "", "toString", 0, &_String, &flash_events_FullScreenEvent, 0}; static methodinfo_t flash_events_FullScreenEvent_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_events_Event, &flash_events_FullScreenEvent, 0}; static varinfo_t flash_events_FullScreenEvent_fullScreen = {0x01, 0x00, 0x80, 0x16, "", "fullScreen", 0, &_Boolean, &flash_events_FullScreenEvent, 0}; static varinfo_t flash_events_FullScreenEvent_FULL_SCREEN = {0x01, 0x00, 0x82, 0x16, "", "FULL_SCREEN", 0, &_String, &flash_events_FullScreenEvent, 0}; static classinfo_t flash_display_StageDisplayState = {0x03, 0x00, 0x81, 0x16, "flash.display", "StageDisplayState", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_StageDisplayState_NORMAL = {0x01, 0x00, 0x82, 0x16, "", "NORMAL", 0, &_String, &flash_display_StageDisplayState, 0}; static varinfo_t flash_display_StageDisplayState_FULL_SCREEN = {0x01, 0x00, 0x82, 0x16, "", "FULL_SCREEN", 0, &_String, &flash_display_StageDisplayState, 0}; static classinfo_t flash_text_engine_TextJustifier = {0x03, 0x00, 0x80, 0x16, "flash.text.engine", "TextJustifier", 0, &_Object, interfaces: {0}}; static varinfo_t flash_text_engine_TextJustifier_lineJustification = {0x01, 0x00, 0x80, 0x16, "", "lineJustification", 0, &_String, &flash_text_engine_TextJustifier, 0}; static varinfo_t flash_text_engine_TextJustifier_locale = {0x01, 0x00, 0x80, 0x16, "", "locale", 0, &_String, &flash_text_engine_TextJustifier, 0}; static methodinfo_t flash_text_engine_TextJustifier_clone = {0x02, 0x00, 0x80, 0x16, "", "clone", 0, &flash_text_engine_TextJustifier, &flash_text_engine_TextJustifier, 0}; static methodinfo_t flash_text_engine_TextJustifier_getJustifierForLocale = {0x02, 0x00, 0x82, 0x16, "", "getJustifierForLocale", 0, &flash_text_engine_TextJustifier, &flash_text_engine_TextJustifier, 0}; static classinfo_t flash_display_StageAlign = {0x03, 0x00, 0x81, 0x16, "flash.display", "StageAlign", 0, &_Object, interfaces: {0}}; static varinfo_t flash_display_StageAlign_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "RIGHT", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_BOTTOM = {0x01, 0x00, 0x82, 0x16, "", "BOTTOM", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_BOTTOM_LEFT = {0x01, 0x00, 0x82, 0x16, "", "BOTTOM_LEFT", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_TOP_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "TOP_RIGHT", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_TOP = {0x01, 0x00, 0x82, 0x16, "", "TOP", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_LEFT = {0x01, 0x00, 0x82, 0x16, "", "LEFT", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_BOTTOM_RIGHT = {0x01, 0x00, 0x82, 0x16, "", "BOTTOM_RIGHT", 0, &_String, &flash_display_StageAlign, 0}; static varinfo_t flash_display_StageAlign_TOP_LEFT = {0x01, 0x00, 0x82, 0x16, "", "TOP_LEFT", 0, &_String, &flash_display_StageAlign, 0}; static constant_t _NaN_constant = {type: 6}; static varinfo_t _NaN = {0x01, 0x00, 0xa2, 0x16, "", "NaN", 0, &_Number, 0, &_NaN_constant}; static classinfo_t _ReferenceError = {0x03, 0x00, 0x88, 0x16, "", "ReferenceError", 0, &_Error, interfaces: {0}}; static varinfo_t _ReferenceError_length = {0x01, 0x00, 0x82, 0x16, "", "length", 0, &_int, &_ReferenceError, 0}; static classinfo_t flash_display_Shape = {0x03, 0x00, 0x80, 0x16, "flash.display", "Shape", 0, &flash_display_DisplayObject, interfaces: {0}}; static varinfo_t flash_display_Shape_graphics = {0x01, 0x00, 0x80, 0x16, "", "graphics", 0, &flash_display_Graphics, &flash_display_Shape, 0}; dict_t* builtin_getclasses() { dict_t*d = dict_new2(&slotinfo_type); dict_put(d, &flash_text_TextFormat, &flash_text_TextFormat); dict_init2(&flash_text_TextFormat.members, &memberinfo_type, 31); dict_init2(&flash_text_TextFormat.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_leading, &flash_text_TextFormat_leading); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_bold, &flash_text_TextFormat_bold); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_underline, &flash_text_TextFormat_underline); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_color, &flash_text_TextFormat_color); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_letterSpacing, &flash_text_TextFormat_letterSpacing); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_kerning, &flash_text_TextFormat_kerning); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_target, &flash_text_TextFormat_target); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_italic, &flash_text_TextFormat_italic); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_rightMargin, &flash_text_TextFormat_rightMargin); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_bullet, &flash_text_TextFormat_bullet); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_url, &flash_text_TextFormat_url); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_size, &flash_text_TextFormat_size); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_indent, &flash_text_TextFormat_indent); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_leftMargin, &flash_text_TextFormat_leftMargin); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_display, &flash_text_TextFormat_display); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_align, &flash_text_TextFormat_align); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_tabStops, &flash_text_TextFormat_tabStops); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_blockIndent, &flash_text_TextFormat_blockIndent); dict_put(&flash_text_TextFormat.members, &flash_text_TextFormat_font, &flash_text_TextFormat_font); dict_put(d, &flash_filters_BitmapFilter, &flash_filters_BitmapFilter); dict_init2(&flash_filters_BitmapFilter.members, &memberinfo_type, 8); dict_init2(&flash_filters_BitmapFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_BitmapFilter.members, &flash_filters_BitmapFilter_clone, &flash_filters_BitmapFilter_clone); dict_put(d, &flash_filters_DropShadowFilter, &flash_filters_DropShadowFilter); dict_init2(&flash_filters_DropShadowFilter.members, &memberinfo_type, 15); dict_init2(&flash_filters_DropShadowFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_alpha, &flash_filters_DropShadowFilter_alpha); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_strength, &flash_filters_DropShadowFilter_strength); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_quality, &flash_filters_DropShadowFilter_quality); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_angle, &flash_filters_DropShadowFilter_angle); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_knockout, &flash_filters_DropShadowFilter_knockout); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_color, &flash_filters_DropShadowFilter_color); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_hideObject, &flash_filters_DropShadowFilter_hideObject); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_inner, &flash_filters_DropShadowFilter_inner); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_blurX, &flash_filters_DropShadowFilter_blurX); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_blurY, &flash_filters_DropShadowFilter_blurY); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_distance, &flash_filters_DropShadowFilter_distance); dict_put(&flash_filters_DropShadowFilter.members, &flash_filters_DropShadowFilter_clone, &flash_filters_DropShadowFilter_clone); dict_put(d, &adobe_utils_CustomActions, &adobe_utils_CustomActions); dict_init2(&adobe_utils_CustomActions.members, &memberinfo_type, 8); dict_init2(&adobe_utils_CustomActions.static_members, &memberinfo_type, 8); dict_put(&adobe_utils_CustomActions.static_members, &adobe_utils_CustomActions_actionsList, &adobe_utils_CustomActions_actionsList); dict_put(&adobe_utils_CustomActions.static_members, &adobe_utils_CustomActions_uninstallActions, &adobe_utils_CustomActions_uninstallActions); dict_put(&adobe_utils_CustomActions.static_members, &adobe_utils_CustomActions_getActions, &adobe_utils_CustomActions_getActions); dict_put(&adobe_utils_CustomActions.static_members, &adobe_utils_CustomActions_installActions, &adobe_utils_CustomActions_installActions); dict_put(d, &flash_text_engine_TextLineValidity, &flash_text_engine_TextLineValidity); dict_init2(&flash_text_engine_TextLineValidity.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextLineValidity.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextLineValidity.static_members, &flash_text_engine_TextLineValidity_STATIC, &flash_text_engine_TextLineValidity_STATIC); dict_put(&flash_text_engine_TextLineValidity.static_members, &flash_text_engine_TextLineValidity_VALID, &flash_text_engine_TextLineValidity_VALID); dict_put(&flash_text_engine_TextLineValidity.static_members, &flash_text_engine_TextLineValidity_INVALID, &flash_text_engine_TextLineValidity_INVALID); dict_put(&flash_text_engine_TextLineValidity.static_members, &flash_text_engine_TextLineValidity_POSSIBLY_INVALID, &flash_text_engine_TextLineValidity_POSSIBLY_INVALID); dict_put(d, &flash_display_LineScaleMode, &flash_display_LineScaleMode); dict_init2(&flash_display_LineScaleMode.members, &memberinfo_type, 8); dict_init2(&flash_display_LineScaleMode.static_members, &memberinfo_type, 8); dict_put(&flash_display_LineScaleMode.static_members, &flash_display_LineScaleMode_NORMAL, &flash_display_LineScaleMode_NORMAL); dict_put(&flash_display_LineScaleMode.static_members, &flash_display_LineScaleMode_VERTICAL, &flash_display_LineScaleMode_VERTICAL); dict_put(&flash_display_LineScaleMode.static_members, &flash_display_LineScaleMode_NONE, &flash_display_LineScaleMode_NONE); dict_put(&flash_display_LineScaleMode.static_members, &flash_display_LineScaleMode_HORIZONTAL, &flash_display_LineScaleMode_HORIZONTAL); dict_put(d, &flash_geom_Transform, &flash_geom_Transform); dict_init2(&flash_geom_Transform.members, &memberinfo_type, 15); dict_init2(&flash_geom_Transform.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_matrix, &flash_geom_Transform_matrix); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_perspectiveProjection, &flash_geom_Transform_perspectiveProjection); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_concatenatedMatrix, &flash_geom_Transform_concatenatedMatrix); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_colorTransform, &flash_geom_Transform_colorTransform); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_getRelativeMatrix3D, &flash_geom_Transform_getRelativeMatrix3D); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_pixelBounds, &flash_geom_Transform_pixelBounds); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_matrix3D, &flash_geom_Transform_matrix3D); dict_put(&flash_geom_Transform.members, &flash_geom_Transform_concatenatedColorTransform, &flash_geom_Transform_concatenatedColorTransform); dict_put(d, &flash_ui_KeyLocation, &flash_ui_KeyLocation); dict_init2(&flash_ui_KeyLocation.members, &memberinfo_type, 8); dict_init2(&flash_ui_KeyLocation.static_members, &memberinfo_type, 8); dict_put(&flash_ui_KeyLocation.static_members, &flash_ui_KeyLocation_LEFT, &flash_ui_KeyLocation_LEFT); dict_put(&flash_ui_KeyLocation.static_members, &flash_ui_KeyLocation_RIGHT, &flash_ui_KeyLocation_RIGHT); dict_put(&flash_ui_KeyLocation.static_members, &flash_ui_KeyLocation_NUM_PAD, &flash_ui_KeyLocation_NUM_PAD); dict_put(&flash_ui_KeyLocation.static_members, &flash_ui_KeyLocation_STANDARD, &flash_ui_KeyLocation_STANDARD); dict_put(d, &flash_events_MouseEvent, &flash_events_MouseEvent); dict_init2(&flash_events_MouseEvent.members, &memberinfo_type, 31); dict_init2(&flash_events_MouseEvent.static_members, &memberinfo_type, 15); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_localY, &flash_events_MouseEvent_localY); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_updateAfterEvent, &flash_events_MouseEvent_updateAfterEvent); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_delta, &flash_events_MouseEvent_delta); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_stageX, &flash_events_MouseEvent_stageX); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_toString, &flash_events_MouseEvent_toString); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_relatedObject, &flash_events_MouseEvent_relatedObject); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_isRelatedObjectInaccessible, &flash_events_MouseEvent_isRelatedObjectInaccessible); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_shiftKey, &flash_events_MouseEvent_shiftKey); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_stageY, &flash_events_MouseEvent_stageY); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_altKey, &flash_events_MouseEvent_altKey); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_clone, &flash_events_MouseEvent_clone); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_ctrlKey, &flash_events_MouseEvent_ctrlKey); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_localX, &flash_events_MouseEvent_localX); dict_put(&flash_events_MouseEvent.members, &flash_events_MouseEvent_buttonDown, &flash_events_MouseEvent_buttonDown); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_ROLL_OVER, &flash_events_MouseEvent_ROLL_OVER); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_ROLL_OUT, &flash_events_MouseEvent_ROLL_OUT); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_DOWN, &flash_events_MouseEvent_MOUSE_DOWN); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_DOUBLE_CLICK, &flash_events_MouseEvent_DOUBLE_CLICK); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_WHEEL, &flash_events_MouseEvent_MOUSE_WHEEL); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_CLICK, &flash_events_MouseEvent_CLICK); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_MOVE, &flash_events_MouseEvent_MOUSE_MOVE); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_UP, &flash_events_MouseEvent_MOUSE_UP); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_OVER, &flash_events_MouseEvent_MOUSE_OVER); dict_put(&flash_events_MouseEvent.static_members, &flash_events_MouseEvent_MOUSE_OUT, &flash_events_MouseEvent_MOUSE_OUT); dict_put(d, &flash_text_engine_LineJustification, &flash_text_engine_LineJustification); dict_init2(&flash_text_engine_LineJustification.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_LineJustification.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_LineJustification.static_members, &flash_text_engine_LineJustification_ALL_INCLUDING_LAST, &flash_text_engine_LineJustification_ALL_INCLUDING_LAST); dict_put(&flash_text_engine_LineJustification.static_members, &flash_text_engine_LineJustification_UNJUSTIFIED, &flash_text_engine_LineJustification_UNJUSTIFIED); dict_put(&flash_text_engine_LineJustification.static_members, &flash_text_engine_LineJustification_ALL_BUT_LAST, &flash_text_engine_LineJustification_ALL_BUT_LAST); dict_put(d, &flash_media_Camera, &flash_media_Camera); dict_init2(&flash_media_Camera.members, &memberinfo_type, 31); dict_init2(&flash_media_Camera.static_members, &memberinfo_type, 8); dict_put(&flash_media_Camera.members, &flash_media_Camera_fps, &flash_media_Camera_fps); dict_put(&flash_media_Camera.members, &flash_media_Camera_setMode, &flash_media_Camera_setMode); dict_put(&flash_media_Camera.members, &flash_media_Camera_keyFrameInterval, &flash_media_Camera_keyFrameInterval); dict_put(&flash_media_Camera.members, &flash_media_Camera_motionTimeout, &flash_media_Camera_motionTimeout); dict_put(&flash_media_Camera.members, &flash_media_Camera_width, &flash_media_Camera_width); dict_put(&flash_media_Camera.members, &flash_media_Camera_setCursor, &flash_media_Camera_setCursor); dict_put(&flash_media_Camera.members, &flash_media_Camera_setLoopback, &flash_media_Camera_setLoopback); dict_put(&flash_media_Camera.members, &flash_media_Camera_height, &flash_media_Camera_height); dict_put(&flash_media_Camera.members, &flash_media_Camera_index, &flash_media_Camera_index); dict_put(&flash_media_Camera.members, &flash_media_Camera_name, &flash_media_Camera_name); dict_put(&flash_media_Camera.members, &flash_media_Camera_currentFPS, &flash_media_Camera_currentFPS); dict_put(&flash_media_Camera.members, &flash_media_Camera_setKeyFrameInterval, &flash_media_Camera_setKeyFrameInterval); dict_put(&flash_media_Camera.members, &flash_media_Camera_quality, &flash_media_Camera_quality); dict_put(&flash_media_Camera.members, &flash_media_Camera_motionLevel, &flash_media_Camera_motionLevel); dict_put(&flash_media_Camera.members, &flash_media_Camera_bandwidth, &flash_media_Camera_bandwidth); dict_put(&flash_media_Camera.members, &flash_media_Camera_muted, &flash_media_Camera_muted); dict_put(&flash_media_Camera.members, &flash_media_Camera_activityLevel, &flash_media_Camera_activityLevel); dict_put(&flash_media_Camera.members, &flash_media_Camera_loopback, &flash_media_Camera_loopback); dict_put(&flash_media_Camera.members, &flash_media_Camera_setQuality, &flash_media_Camera_setQuality); dict_put(&flash_media_Camera.members, &flash_media_Camera_setMotionLevel, &flash_media_Camera_setMotionLevel); dict_put(&flash_media_Camera.static_members, &flash_media_Camera_getCamera, &flash_media_Camera_getCamera); dict_put(&flash_media_Camera.static_members, &flash_media_Camera_names, &flash_media_Camera_names); dict_put(d, &flash_net_registerClassAlias, &flash_net_registerClassAlias); dict_put(d, &flash_accessibility_AccessibilityImplementation, &flash_accessibility_AccessibilityImplementation); dict_init2(&flash_accessibility_AccessibilityImplementation.members, &memberinfo_type, 15); dict_init2(&flash_accessibility_AccessibilityImplementation.static_members, &memberinfo_type, 8); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accState, &flash_accessibility_AccessibilityImplementation_get_accState); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accName, &flash_accessibility_AccessibilityImplementation_get_accName); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accSelection, &flash_accessibility_AccessibilityImplementation_get_accSelection); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_accDoDefaultAction, &flash_accessibility_AccessibilityImplementation_accDoDefaultAction); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accFocus, &flash_accessibility_AccessibilityImplementation_get_accFocus); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accDefaultAction, &flash_accessibility_AccessibilityImplementation_get_accDefaultAction); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_accSelect, &flash_accessibility_AccessibilityImplementation_accSelect); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accValue, &flash_accessibility_AccessibilityImplementation_get_accValue); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_stub, &flash_accessibility_AccessibilityImplementation_stub); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_get_accRole, &flash_accessibility_AccessibilityImplementation_get_accRole); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_errno, &flash_accessibility_AccessibilityImplementation_errno); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_isLabeledBy, &flash_accessibility_AccessibilityImplementation_isLabeledBy); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_accLocation, &flash_accessibility_AccessibilityImplementation_accLocation); dict_put(&flash_accessibility_AccessibilityImplementation.members, &flash_accessibility_AccessibilityImplementation_getChildIDArray, &flash_accessibility_AccessibilityImplementation_getChildIDArray); dict_put(d, &flash_utils_ByteArray, &flash_utils_ByteArray); dict_init2(&flash_utils_ByteArray.members, &memberinfo_type, 63); dict_init2(&flash_utils_ByteArray.static_members, &memberinfo_type, 8); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeBoolean, &flash_utils_ByteArray_writeBoolean); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readDouble, &flash_utils_ByteArray_readDouble); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_toString, &flash_utils_ByteArray_toString); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeByte, &flash_utils_ByteArray_writeByte); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeObject, &flash_utils_ByteArray_writeObject); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readUTFBytes, &flash_utils_ByteArray_readUTFBytes); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeMultiByte, &flash_utils_ByteArray_writeMultiByte); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_uncompress, &flash_utils_ByteArray_uncompress); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readUnsignedByte, &flash_utils_ByteArray_readUnsignedByte); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeInt, &flash_utils_ByteArray_writeInt); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_deflate, &flash_utils_ByteArray_deflate); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readMultiByte, &flash_utils_ByteArray_readMultiByte); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readBytes, &flash_utils_ByteArray_readBytes); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeShort, &flash_utils_ByteArray_writeShort); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_position, &flash_utils_ByteArray_position); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readShort, &flash_utils_ByteArray_readShort); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeUTF, &flash_utils_ByteArray_writeUTF); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeBytes, &flash_utils_ByteArray_writeBytes); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_objectEncoding, &flash_utils_ByteArray_objectEncoding); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readObject, &flash_utils_ByteArray_readObject); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_length, &flash_utils_ByteArray_length); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeUnsignedInt, &flash_utils_ByteArray_writeUnsignedInt); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeDouble, &flash_utils_ByteArray_writeDouble); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeFloat, &flash_utils_ByteArray_writeFloat); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readInt, &flash_utils_ByteArray_readInt); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readByte, &flash_utils_ByteArray_readByte); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_bytesAvailable, &flash_utils_ByteArray_bytesAvailable); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_clear, &flash_utils_ByteArray_clear); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_endian, &flash_utils_ByteArray_endian); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readUnsignedShort, &flash_utils_ByteArray_readUnsignedShort); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readUnsignedInt, &flash_utils_ByteArray_readUnsignedInt); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readFloat, &flash_utils_ByteArray_readFloat); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_compress, &flash_utils_ByteArray_compress); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_writeUTFBytes, &flash_utils_ByteArray_writeUTFBytes); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readBoolean, &flash_utils_ByteArray_readBoolean); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_inflate, &flash_utils_ByteArray_inflate); dict_put(&flash_utils_ByteArray.members, &flash_utils_ByteArray_readUTF, &flash_utils_ByteArray_readUTF); dict_put(&flash_utils_ByteArray.static_members, &flash_utils_ByteArray_defaultObjectEncoding, &flash_utils_ByteArray_defaultObjectEncoding); dict_put(d, &flash_sampler_stopSampling, &flash_sampler_stopSampling); dict_put(d, &flash_events_SyncEvent, &flash_events_SyncEvent); dict_init2(&flash_events_SyncEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_SyncEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_SyncEvent.members, &flash_events_SyncEvent_toString, &flash_events_SyncEvent_toString); dict_put(&flash_events_SyncEvent.members, &flash_events_SyncEvent_clone, &flash_events_SyncEvent_clone); dict_put(&flash_events_SyncEvent.members, &flash_events_SyncEvent_changeList, &flash_events_SyncEvent_changeList); dict_put(&flash_events_SyncEvent.static_members, &flash_events_SyncEvent_SYNC, &flash_events_SyncEvent_SYNC); dict_put(d, &_encodeURIComponent, &_encodeURIComponent); dict_put(d, &flash_net_Socket, &flash_net_Socket); dict_init2(&flash_net_Socket.members, &memberinfo_type, 63); dict_init2(&flash_net_Socket.static_members, &memberinfo_type, 8); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeBoolean, &flash_net_Socket_writeBoolean); dict_put(&flash_net_Socket.members, &flash_net_Socket_connect, &flash_net_Socket_connect); dict_put(&flash_net_Socket.members, &flash_net_Socket_readDouble, &flash_net_Socket_readDouble); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeByte, &flash_net_Socket_writeByte); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeObject, &flash_net_Socket_writeObject); dict_put(&flash_net_Socket.members, &flash_net_Socket_readUTFBytes, &flash_net_Socket_readUTFBytes); dict_put(&flash_net_Socket.members, &flash_net_Socket_close, &flash_net_Socket_close); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeMultiByte, &flash_net_Socket_writeMultiByte); dict_put(&flash_net_Socket.members, &flash_net_Socket_readUnsignedByte, &flash_net_Socket_readUnsignedByte); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeInt, &flash_net_Socket_writeInt); dict_put(&flash_net_Socket.members, &flash_net_Socket_readMultiByte, &flash_net_Socket_readMultiByte); dict_put(&flash_net_Socket.members, &flash_net_Socket_readBytes, &flash_net_Socket_readBytes); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeShort, &flash_net_Socket_writeShort); dict_put(&flash_net_Socket.members, &flash_net_Socket_readShort, &flash_net_Socket_readShort); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeUTF, &flash_net_Socket_writeUTF); dict_put(&flash_net_Socket.members, &flash_net_Socket_timeout, &flash_net_Socket_timeout); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeBytes, &flash_net_Socket_writeBytes); dict_put(&flash_net_Socket.members, &flash_net_Socket_connected, &flash_net_Socket_connected); dict_put(&flash_net_Socket.members, &flash_net_Socket_readObject, &flash_net_Socket_readObject); dict_put(&flash_net_Socket.members, &flash_net_Socket_objectEncoding, &flash_net_Socket_objectEncoding); dict_put(&flash_net_Socket.members, &flash_net_Socket_flush, &flash_net_Socket_flush); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeUnsignedInt, &flash_net_Socket_writeUnsignedInt); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeDouble, &flash_net_Socket_writeDouble); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeFloat, &flash_net_Socket_writeFloat); dict_put(&flash_net_Socket.members, &flash_net_Socket_readInt, &flash_net_Socket_readInt); dict_put(&flash_net_Socket.members, &flash_net_Socket_readByte, &flash_net_Socket_readByte); dict_put(&flash_net_Socket.members, &flash_net_Socket_bytesAvailable, &flash_net_Socket_bytesAvailable); dict_put(&flash_net_Socket.members, &flash_net_Socket_endian, &flash_net_Socket_endian); dict_put(&flash_net_Socket.members, &flash_net_Socket_readUnsignedShort, &flash_net_Socket_readUnsignedShort); dict_put(&flash_net_Socket.members, &flash_net_Socket_readUnsignedInt, &flash_net_Socket_readUnsignedInt); dict_put(&flash_net_Socket.members, &flash_net_Socket_readFloat, &flash_net_Socket_readFloat); dict_put(&flash_net_Socket.members, &flash_net_Socket_writeUTFBytes, &flash_net_Socket_writeUTFBytes); dict_put(&flash_net_Socket.members, &flash_net_Socket_readBoolean, &flash_net_Socket_readBoolean); dict_put(&flash_net_Socket.members, &flash_net_Socket_readUTF, &flash_net_Socket_readUTF); dict_put(d, &_unescape, &_unescape); dict_put(d, &flash_utils_Timer, &flash_utils_Timer); dict_init2(&flash_utils_Timer.members, &memberinfo_type, 8); dict_init2(&flash_utils_Timer.static_members, &memberinfo_type, 8); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_reset, &flash_utils_Timer_reset); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_running, &flash_utils_Timer_running); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_repeatCount, &flash_utils_Timer_repeatCount); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_stop, &flash_utils_Timer_stop); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_start, &flash_utils_Timer_start); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_currentCount, &flash_utils_Timer_currentCount); dict_put(&flash_utils_Timer.members, &flash_utils_Timer_delay, &flash_utils_Timer_delay); dict_put(d, &_Array, &_Array); dict_init2(&_Array.members, &memberinfo_type, 31); dict_init2(&_Array.static_members, &memberinfo_type, 8); dict_put(&_Array.members, &_Array_forEach, &_Array_forEach); dict_put(&_Array.members, &_Array_sortOn, &_Array_sortOn); dict_put(&_Array.members, &_Array_indexOf, &_Array_indexOf); dict_put(&_Array.members, &_Array_splice, &_Array_splice); dict_put(&_Array.members, &_Array_lastIndexOf, &_Array_lastIndexOf); dict_put(&_Array.members, &_Array_map, &_Array_map); dict_put(&_Array.members, &_Array_concat, &_Array_concat); dict_put(&_Array.members, &_Array_shift, &_Array_shift); dict_put(&_Array.members, &_Array_unshift, &_Array_unshift); dict_put(&_Array.members, &_Array_some, &_Array_some); dict_put(&_Array.members, &_Array_filter, &_Array_filter); dict_put(&_Array.members, &_Array_join, &_Array_join); dict_put(&_Array.members, &_Array_slice, &_Array_slice); dict_put(&_Array.members, &_Array_every, &_Array_every); dict_put(&_Array.members, &_Array_pop, &_Array_pop); dict_put(&_Array.members, &_Array_sort, &_Array_sort); dict_put(&_Array.members, &_Array_reverse, &_Array_reverse); dict_put(&_Array.members, &_Array_push, &_Array_push); dict_put(&_Array.members, &_Array_length, &_Array_length); dict_put(&_Array.static_members, &_Array_DESCENDING, &_Array_DESCENDING); dict_put(&_Array.static_members, &_Array_UNIQUESORT, &_Array_UNIQUESORT); dict_put(&_Array.static_members, &_Array_RETURNINDEXEDARRAY, &_Array_RETURNINDEXEDARRAY); dict_put(&_Array.static_members, &_Array_CASEINSENSITIVE, &_Array_CASEINSENSITIVE); dict_put(&_Array.static_members, &_Array_NUMERIC, &_Array_NUMERIC); dict_put(d, &flash_geom_ColorTransform, &flash_geom_ColorTransform); dict_init2(&flash_geom_ColorTransform.members, &memberinfo_type, 15); dict_init2(&flash_geom_ColorTransform.static_members, &memberinfo_type, 8); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_blueOffset, &flash_geom_ColorTransform_blueOffset); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_greenOffset, &flash_geom_ColorTransform_greenOffset); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_greenMultiplier, &flash_geom_ColorTransform_greenMultiplier); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_redMultiplier, &flash_geom_ColorTransform_redMultiplier); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_color, &flash_geom_ColorTransform_color); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_concat, &flash_geom_ColorTransform_concat); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_alphaOffset, &flash_geom_ColorTransform_alphaOffset); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_blueMultiplier, &flash_geom_ColorTransform_blueMultiplier); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_toString, &flash_geom_ColorTransform_toString); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_alphaMultiplier, &flash_geom_ColorTransform_alphaMultiplier); dict_put(&flash_geom_ColorTransform.members, &flash_geom_ColorTransform_redOffset, &flash_geom_ColorTransform_redOffset); dict_put(d, &flash_text_GridFitType, &flash_text_GridFitType); dict_init2(&flash_text_GridFitType.members, &memberinfo_type, 8); dict_init2(&flash_text_GridFitType.static_members, &memberinfo_type, 8); dict_put(&flash_text_GridFitType.static_members, &flash_text_GridFitType_SUBPIXEL, &flash_text_GridFitType_SUBPIXEL); dict_put(&flash_text_GridFitType.static_members, &flash_text_GridFitType_PIXEL, &flash_text_GridFitType_PIXEL); dict_put(&flash_text_GridFitType.static_members, &flash_text_GridFitType_NONE, &flash_text_GridFitType_NONE); dict_put(d, &flash_filters_DisplacementMapFilterMode, &flash_filters_DisplacementMapFilterMode); dict_init2(&flash_filters_DisplacementMapFilterMode.members, &memberinfo_type, 8); dict_init2(&flash_filters_DisplacementMapFilterMode.static_members, &memberinfo_type, 8); dict_put(&flash_filters_DisplacementMapFilterMode.static_members, &flash_filters_DisplacementMapFilterMode_COLOR, &flash_filters_DisplacementMapFilterMode_COLOR); dict_put(&flash_filters_DisplacementMapFilterMode.static_members, &flash_filters_DisplacementMapFilterMode_WRAP, &flash_filters_DisplacementMapFilterMode_WRAP); dict_put(&flash_filters_DisplacementMapFilterMode.static_members, &flash_filters_DisplacementMapFilterMode_CLAMP, &flash_filters_DisplacementMapFilterMode_CLAMP); dict_put(&flash_filters_DisplacementMapFilterMode.static_members, &flash_filters_DisplacementMapFilterMode_IGNORE, &flash_filters_DisplacementMapFilterMode_IGNORE); dict_put(d, &flash_text_TextFieldType, &flash_text_TextFieldType); dict_init2(&flash_text_TextFieldType.members, &memberinfo_type, 8); dict_init2(&flash_text_TextFieldType.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextFieldType.static_members, &flash_text_TextFieldType_DYNAMIC, &flash_text_TextFieldType_DYNAMIC); dict_put(&flash_text_TextFieldType.static_members, &flash_text_TextFieldType_INPUT, &flash_text_TextFieldType_INPUT); dict_put(d, &flash_display_IGraphicsStroke, &flash_display_IGraphicsStroke); dict_init2(&flash_display_IGraphicsStroke.members, &memberinfo_type, 8); dict_init2(&flash_display_IGraphicsStroke.static_members, &memberinfo_type, 8); dict_put(d, &flash_media_SoundLoaderContext, &flash_media_SoundLoaderContext); dict_init2(&flash_media_SoundLoaderContext.members, &memberinfo_type, 8); dict_init2(&flash_media_SoundLoaderContext.static_members, &memberinfo_type, 8); dict_put(&flash_media_SoundLoaderContext.members, &flash_media_SoundLoaderContext_checkPolicyFile, &flash_media_SoundLoaderContext_checkPolicyFile); dict_put(&flash_media_SoundLoaderContext.members, &flash_media_SoundLoaderContext_bufferTime, &flash_media_SoundLoaderContext_bufferTime); dict_put(d, &flash_net_IDynamicPropertyOutput, &flash_net_IDynamicPropertyOutput); dict_init2(&flash_net_IDynamicPropertyOutput.members, &memberinfo_type, 8); dict_init2(&flash_net_IDynamicPropertyOutput.static_members, &memberinfo_type, 8); dict_put(&flash_net_IDynamicPropertyOutput.members, &flash_net_IDynamicPropertyOutput_writeDynamicProperty, &flash_net_IDynamicPropertyOutput_writeDynamicProperty); dict_put(d, &flash_display_IGraphicsData, &flash_display_IGraphicsData); dict_init2(&flash_display_IGraphicsData.members, &memberinfo_type, 8); dict_init2(&flash_display_IGraphicsData.static_members, &memberinfo_type, 8); dict_put(d, &flash_utils_getDefinitionByName, &flash_utils_getDefinitionByName); dict_put(d, &_Function, &_Function); dict_init2(&_Function.members, &memberinfo_type, 8); dict_init2(&_Function.static_members, &memberinfo_type, 8); dict_put(&_Function.members, &_Function_length, &_Function_length); dict_put(&_Function.members, &_Function_apply, &_Function_apply); dict_put(&_Function.members, &_Function_call, &_Function_call); dict_put(&_Function.members, &_Function_prototype, &_Function_prototype); dict_put(d, &flash_geom_PerspectiveProjection, &flash_geom_PerspectiveProjection); dict_init2(&flash_geom_PerspectiveProjection.members, &memberinfo_type, 8); dict_init2(&flash_geom_PerspectiveProjection.static_members, &memberinfo_type, 8); dict_put(&flash_geom_PerspectiveProjection.members, &flash_geom_PerspectiveProjection_fieldOfView, &flash_geom_PerspectiveProjection_fieldOfView); dict_put(&flash_geom_PerspectiveProjection.members, &flash_geom_PerspectiveProjection_projectionCenter, &flash_geom_PerspectiveProjection_projectionCenter); dict_put(&flash_geom_PerspectiveProjection.members, &flash_geom_PerspectiveProjection_toMatrix3D, &flash_geom_PerspectiveProjection_toMatrix3D); dict_put(&flash_geom_PerspectiveProjection.members, &flash_geom_PerspectiveProjection_focalLength, &flash_geom_PerspectiveProjection_focalLength); dict_put(d, &flash_text_engine_BreakOpportunity, &flash_text_engine_BreakOpportunity); dict_init2(&flash_text_engine_BreakOpportunity.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_BreakOpportunity.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_BreakOpportunity.static_members, &flash_text_engine_BreakOpportunity_AUTO, &flash_text_engine_BreakOpportunity_AUTO); dict_put(&flash_text_engine_BreakOpportunity.static_members, &flash_text_engine_BreakOpportunity_ANY, &flash_text_engine_BreakOpportunity_ANY); dict_put(&flash_text_engine_BreakOpportunity.static_members, &flash_text_engine_BreakOpportunity_ALL, &flash_text_engine_BreakOpportunity_ALL); dict_put(&flash_text_engine_BreakOpportunity.static_members, &flash_text_engine_BreakOpportunity_NONE, &flash_text_engine_BreakOpportunity_NONE); dict_put(d, &flash_sampler__getInvocationCount, &flash_sampler__getInvocationCount); dict_put(d, &_parseFloat, &_parseFloat); dict_put(d, &flash_events_NetStatusEvent, &flash_events_NetStatusEvent); dict_init2(&flash_events_NetStatusEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_NetStatusEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_NetStatusEvent.members, &flash_events_NetStatusEvent_toString, &flash_events_NetStatusEvent_toString); dict_put(&flash_events_NetStatusEvent.members, &flash_events_NetStatusEvent_info, &flash_events_NetStatusEvent_info); dict_put(&flash_events_NetStatusEvent.members, &flash_events_NetStatusEvent_clone, &flash_events_NetStatusEvent_clone); dict_put(&flash_events_NetStatusEvent.static_members, &flash_events_NetStatusEvent_NET_STATUS, &flash_events_NetStatusEvent_NET_STATUS); dict_put(d, &flash_display_ShaderJob, &flash_display_ShaderJob); dict_init2(&flash_display_ShaderJob.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderJob.static_members, &memberinfo_type, 8); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_cancel, &flash_display_ShaderJob_cancel); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_width, &flash_display_ShaderJob_width); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_start, &flash_display_ShaderJob_start); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_shader, &flash_display_ShaderJob_shader); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_height, &flash_display_ShaderJob_height); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_target, &flash_display_ShaderJob_target); dict_put(&flash_display_ShaderJob.members, &flash_display_ShaderJob_progress, &flash_display_ShaderJob_progress); dict_put(d, &_VerifyError, &_VerifyError); dict_init2(&_VerifyError.members, &memberinfo_type, 8); dict_init2(&_VerifyError.static_members, &memberinfo_type, 8); dict_put(&_VerifyError.static_members, &_VerifyError_length, &_VerifyError_length); dict_put(d, &flash_events_AsyncErrorEvent, &flash_events_AsyncErrorEvent); dict_init2(&flash_events_AsyncErrorEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_AsyncErrorEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_AsyncErrorEvent.members, &flash_events_AsyncErrorEvent_toString, &flash_events_AsyncErrorEvent_toString); dict_put(&flash_events_AsyncErrorEvent.members, &flash_events_AsyncErrorEvent_error, &flash_events_AsyncErrorEvent_error); dict_put(&flash_events_AsyncErrorEvent.members, &flash_events_AsyncErrorEvent_clone, &flash_events_AsyncErrorEvent_clone); dict_put(&flash_events_AsyncErrorEvent.static_members, &flash_events_AsyncErrorEvent_ASYNC_ERROR, &flash_events_AsyncErrorEvent_ASYNC_ERROR); dict_put(d, &flash_net_SharedObject, &flash_net_SharedObject); dict_init2(&flash_net_SharedObject.members, &memberinfo_type, 15); dict_init2(&flash_net_SharedObject.static_members, &memberinfo_type, 8); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_objectEncoding, &flash_net_SharedObject_objectEncoding); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_client, &flash_net_SharedObject_client); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_setProperty, &flash_net_SharedObject_setProperty); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_clear, &flash_net_SharedObject_clear); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_flush, &flash_net_SharedObject_flush); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_connect, &flash_net_SharedObject_connect); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_size, &flash_net_SharedObject_size); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_setDirty, &flash_net_SharedObject_setDirty); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_send, &flash_net_SharedObject_send); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_close, &flash_net_SharedObject_close); dict_put(&flash_net_SharedObject.members, &flash_net_SharedObject_data, &flash_net_SharedObject_data); dict_put(&flash_net_SharedObject.static_members, &flash_net_SharedObject_defaultObjectEncoding, &flash_net_SharedObject_defaultObjectEncoding); dict_put(&flash_net_SharedObject.static_members, &flash_net_SharedObject_getDiskUsage, &flash_net_SharedObject_getDiskUsage); dict_put(&flash_net_SharedObject.static_members, &flash_net_SharedObject_getRemote, &flash_net_SharedObject_getRemote); dict_put(&flash_net_SharedObject.static_members, &flash_net_SharedObject_deleteAll, &flash_net_SharedObject_deleteAll); dict_put(&flash_net_SharedObject.static_members, &flash_net_SharedObject_getLocal, &flash_net_SharedObject_getLocal); dict_put(d, &_Namespace, &_Namespace); dict_init2(&_Namespace.members, &memberinfo_type, 8); dict_init2(&_Namespace.static_members, &memberinfo_type, 8); dict_put(&_Namespace.members, &_Namespace_valueOf, &_Namespace_valueOf); dict_put(&_Namespace.members, &_Namespace_toString, &_Namespace_toString); dict_put(&_Namespace.members, &_Namespace_uri, &_Namespace_uri); dict_put(&_Namespace.members, &_Namespace_prefix, &_Namespace_prefix); dict_put(&_Namespace.static_members, &_Namespace_length, &_Namespace_length); dict_put(d, &flash_utils_setTimeout, &flash_utils_setTimeout); dict_put(d, &flash_geom_Matrix3D, &flash_geom_Matrix3D); dict_init2(&flash_geom_Matrix3D.members, &memberinfo_type, 31); dict_init2(&flash_geom_Matrix3D.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_decompose, &flash_geom_Matrix3D_decompose); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_pointAt, &flash_geom_Matrix3D_pointAt); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_identity, &flash_geom_Matrix3D_identity); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_transformVector, &flash_geom_Matrix3D_transformVector); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_appendRotation, &flash_geom_Matrix3D_appendRotation); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_determinant, &flash_geom_Matrix3D_determinant); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_prependRotation, &flash_geom_Matrix3D_prependRotation); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_position, &flash_geom_Matrix3D_position); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_interpolateTo, &flash_geom_Matrix3D_interpolateTo); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_appendScale, &flash_geom_Matrix3D_appendScale); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_prepend, &flash_geom_Matrix3D_prepend); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_recompose, &flash_geom_Matrix3D_recompose); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_appendTranslation, &flash_geom_Matrix3D_appendTranslation); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_invert, &flash_geom_Matrix3D_invert); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_rawData, &flash_geom_Matrix3D_rawData); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_prependTranslation, &flash_geom_Matrix3D_prependTranslation); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_append, &flash_geom_Matrix3D_append); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_clone, &flash_geom_Matrix3D_clone); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_prependScale, &flash_geom_Matrix3D_prependScale); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_deltaTransformVector, &flash_geom_Matrix3D_deltaTransformVector); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_transformVectors, &flash_geom_Matrix3D_transformVectors); dict_put(&flash_geom_Matrix3D.members, &flash_geom_Matrix3D_transpose, &flash_geom_Matrix3D_transpose); dict_put(&flash_geom_Matrix3D.static_members, &flash_geom_Matrix3D_interpolate, &flash_geom_Matrix3D_interpolate); dict_put(d, &flash_sampler_pauseSampling, &flash_sampler_pauseSampling); dict_put(d, &flash_system_Capabilities, &flash_system_Capabilities); dict_init2(&flash_system_Capabilities.members, &memberinfo_type, 8); dict_init2(&flash_system_Capabilities.static_members, &memberinfo_type, 63); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_maxLevelIDC, &flash_system_Capabilities_maxLevelIDC); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_isDebugger, &flash_system_Capabilities_isDebugger); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasStreamingAudio, &flash_system_Capabilities_hasStreamingAudio); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_screenColor, &flash_system_Capabilities_screenColor); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasIME, &flash_system_Capabilities_hasIME); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasEmbeddedVideo, &flash_system_Capabilities_hasEmbeddedVideo); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasTLS, &flash_system_Capabilities_hasTLS); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_isEmbeddedInAcrobat, &flash_system_Capabilities_isEmbeddedInAcrobat); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasScreenPlayback, &flash_system_Capabilities_hasScreenPlayback); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasVideoEncoder, &flash_system_Capabilities_hasVideoEncoder); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasAudioEncoder, &flash_system_Capabilities_hasAudioEncoder); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_pixelAspectRatio, &flash_system_Capabilities_pixelAspectRatio); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasStreamingVideo, &flash_system_Capabilities_hasStreamingVideo); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_screenResolutionX, &flash_system_Capabilities_screenResolutionX); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasScreenBroadcast, &flash_system_Capabilities_hasScreenBroadcast); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasAudio, &flash_system_Capabilities_hasAudio); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_language, &flash_system_Capabilities_language); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_manufacturer, &flash_system_Capabilities_manufacturer); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasPrinting, &flash_system_Capabilities_hasPrinting); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_os, &flash_system_Capabilities_os); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_localFileReadDisable, &flash_system_Capabilities_localFileReadDisable); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasMP3, &flash_system_Capabilities_hasMP3); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_avHardwareDisable, &flash_system_Capabilities_avHardwareDisable); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_hasAccessibility, &flash_system_Capabilities_hasAccessibility); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_version, &flash_system_Capabilities_version); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_screenDPI, &flash_system_Capabilities_screenDPI); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_playerType, &flash_system_Capabilities_playerType); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_screenResolutionY, &flash_system_Capabilities_screenResolutionY); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities__internal, &flash_system_Capabilities__internal); dict_put(&flash_system_Capabilities.static_members, &flash_system_Capabilities_serverString, &flash_system_Capabilities_serverString); dict_put(d, &flash_sampler_getSetterInvocationCount, &flash_sampler_getSetterInvocationCount); dict_put(d, &flash_sampler_getGetterInvocationCount, &flash_sampler_getGetterInvocationCount); dict_put(d, &flash_filters_BlurFilter, &flash_filters_BlurFilter); dict_init2(&flash_filters_BlurFilter.members, &memberinfo_type, 8); dict_init2(&flash_filters_BlurFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_BlurFilter.members, &flash_filters_BlurFilter_blurY, &flash_filters_BlurFilter_blurY); dict_put(&flash_filters_BlurFilter.members, &flash_filters_BlurFilter_clone, &flash_filters_BlurFilter_clone); dict_put(&flash_filters_BlurFilter.members, &flash_filters_BlurFilter_quality, &flash_filters_BlurFilter_quality); dict_put(&flash_filters_BlurFilter.members, &flash_filters_BlurFilter_blurX, &flash_filters_BlurFilter_blurX); dict_put(d, &_isFinite, &_isFinite); dict_put(d, &flash_media_Video, &flash_media_Video); dict_init2(&flash_media_Video.members, &memberinfo_type, 8); dict_init2(&flash_media_Video.static_members, &memberinfo_type, 8); dict_put(&flash_media_Video.members, &flash_media_Video_attachCamera, &flash_media_Video_attachCamera); dict_put(&flash_media_Video.members, &flash_media_Video_videoWidth, &flash_media_Video_videoWidth); dict_put(&flash_media_Video.members, &flash_media_Video_clear, &flash_media_Video_clear); dict_put(&flash_media_Video.members, &flash_media_Video_deblocking, &flash_media_Video_deblocking); dict_put(&flash_media_Video.members, &flash_media_Video_videoHeight, &flash_media_Video_videoHeight); dict_put(&flash_media_Video.members, &flash_media_Video_attachNetStream, &flash_media_Video_attachNetStream); dict_put(&flash_media_Video.members, &flash_media_Video_smoothing, &flash_media_Video_smoothing); dict_put(d, &flash_text_engine_TextLineCreationResult, &flash_text_engine_TextLineCreationResult); dict_init2(&flash_text_engine_TextLineCreationResult.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextLineCreationResult.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextLineCreationResult.static_members, &flash_text_engine_TextLineCreationResult_EMERGENCY, &flash_text_engine_TextLineCreationResult_EMERGENCY); dict_put(&flash_text_engine_TextLineCreationResult.static_members, &flash_text_engine_TextLineCreationResult_COMPLETE, &flash_text_engine_TextLineCreationResult_COMPLETE); dict_put(&flash_text_engine_TextLineCreationResult.static_members, &flash_text_engine_TextLineCreationResult_SUCCESS, &flash_text_engine_TextLineCreationResult_SUCCESS); dict_put(&flash_text_engine_TextLineCreationResult.static_members, &flash_text_engine_TextLineCreationResult_INSUFFICIENT_WIDTH, &flash_text_engine_TextLineCreationResult_INSUFFICIENT_WIDTH); dict_put(d, &_Error, &_Error); dict_init2(&_Error.members, &memberinfo_type, 8); dict_init2(&_Error.static_members, &memberinfo_type, 8); dict_put(&_Error.members, &_Error_message, &_Error_message); dict_put(&_Error.members, &_Error_errorID, &_Error_errorID); dict_put(&_Error.members, &_Error_getStackTrace, &_Error_getStackTrace); dict_put(&_Error.members, &_Error_name, &_Error_name); dict_put(&_Error.static_members, &_Error_length, &_Error_length); dict_put(&_Error.static_members, &_Error_getErrorMessage, &_Error_getErrorMessage); dict_put(&_Error.static_members, &_Error_throwError, &_Error_throwError); dict_put(d, &flash_xml_XMLNode, &flash_xml_XMLNode); dict_init2(&flash_xml_XMLNode.members, &memberinfo_type, 31); dict_init2(&flash_xml_XMLNode.static_members, &memberinfo_type, 8); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_childNodes, &flash_xml_XMLNode_childNodes); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_appendChild, &flash_xml_XMLNode_appendChild); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_nextSibling, &flash_xml_XMLNode_nextSibling); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_nodeType, &flash_xml_XMLNode_nodeType); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_attributes, &flash_xml_XMLNode_attributes); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_firstChild, &flash_xml_XMLNode_firstChild); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_parentNode, &flash_xml_XMLNode_parentNode); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_toString, &flash_xml_XMLNode_toString); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_prefix, &flash_xml_XMLNode_prefix); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_localName, &flash_xml_XMLNode_localName); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_nodeName, &flash_xml_XMLNode_nodeName); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_getNamespaceForPrefix, &flash_xml_XMLNode_getNamespaceForPrefix); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_insertBefore, &flash_xml_XMLNode_insertBefore); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_lastChild, &flash_xml_XMLNode_lastChild); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_cloneNode, &flash_xml_XMLNode_cloneNode); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_removeNode, &flash_xml_XMLNode_removeNode); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_namespaceURI, &flash_xml_XMLNode_namespaceURI); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_previousSibling, &flash_xml_XMLNode_previousSibling); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_hasChildNodes, &flash_xml_XMLNode_hasChildNodes); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_getPrefixForNamespace, &flash_xml_XMLNode_getPrefixForNamespace); dict_put(&flash_xml_XMLNode.members, &flash_xml_XMLNode_nodeValue, &flash_xml_XMLNode_nodeValue); dict_put(d, &flash_net_URLVariables, &flash_net_URLVariables); dict_init2(&flash_net_URLVariables.members, &memberinfo_type, 8); dict_init2(&flash_net_URLVariables.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLVariables.members, &flash_net_URLVariables_toString, &flash_net_URLVariables_toString); dict_put(&flash_net_URLVariables.members, &flash_net_URLVariables_decode, &flash_net_URLVariables_decode); dict_put(d, &flash_display_LoaderInfo, &flash_display_LoaderInfo); dict_init2(&flash_display_LoaderInfo.members, &memberinfo_type, 31); dict_init2(&flash_display_LoaderInfo.static_members, &memberinfo_type, 8); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_actionScriptVersion, &flash_display_LoaderInfo_actionScriptVersion); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_contentType, &flash_display_LoaderInfo_contentType); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_sameDomain, &flash_display_LoaderInfo_sameDomain); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_bytesTotal, &flash_display_LoaderInfo_bytesTotal); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_loaderURL, &flash_display_LoaderInfo_loaderURL); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_width, &flash_display_LoaderInfo_width); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_dispatchEvent, &flash_display_LoaderInfo_dispatchEvent); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_height, &flash_display_LoaderInfo_height); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_frameRate, &flash_display_LoaderInfo_frameRate); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_parameters, &flash_display_LoaderInfo_parameters); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_bytesLoaded, &flash_display_LoaderInfo_bytesLoaded); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_url, &flash_display_LoaderInfo_url); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_content, &flash_display_LoaderInfo_content); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_swfVersion, &flash_display_LoaderInfo_swfVersion); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_bytes, &flash_display_LoaderInfo_bytes); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_loader, &flash_display_LoaderInfo_loader); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_applicationDomain, &flash_display_LoaderInfo_applicationDomain); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_parentAllowsChild, &flash_display_LoaderInfo_parentAllowsChild); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_childAllowsParent, &flash_display_LoaderInfo_childAllowsParent); dict_put(&flash_display_LoaderInfo.members, &flash_display_LoaderInfo_sharedEvents, &flash_display_LoaderInfo_sharedEvents); dict_put(&flash_display_LoaderInfo.static_members, &flash_display_LoaderInfo_getLoaderInfoByDefinition, &flash_display_LoaderInfo_getLoaderInfoByDefinition); dict_put(d, &flash_sampler_Sample, &flash_sampler_Sample); dict_init2(&flash_sampler_Sample.members, &memberinfo_type, 8); dict_init2(&flash_sampler_Sample.static_members, &memberinfo_type, 8); dict_put(&flash_sampler_Sample.members, &flash_sampler_Sample_time, &flash_sampler_Sample_time); dict_put(&flash_sampler_Sample.members, &flash_sampler_Sample_stack, &flash_sampler_Sample_stack); dict_put(d, &flash_text_engine_DigitWidth, &flash_text_engine_DigitWidth); dict_init2(&flash_text_engine_DigitWidth.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_DigitWidth.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_DigitWidth.static_members, &flash_text_engine_DigitWidth_PROPORTIONAL, &flash_text_engine_DigitWidth_PROPORTIONAL); dict_put(&flash_text_engine_DigitWidth.static_members, &flash_text_engine_DigitWidth_DEFAULT, &flash_text_engine_DigitWidth_DEFAULT); dict_put(&flash_text_engine_DigitWidth.static_members, &flash_text_engine_DigitWidth_TABULAR, &flash_text_engine_DigitWidth_TABULAR); dict_put(d, &flash_net_URLRequestMethod, &flash_net_URLRequestMethod); dict_init2(&flash_net_URLRequestMethod.members, &memberinfo_type, 8); dict_init2(&flash_net_URLRequestMethod.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLRequestMethod.static_members, &flash_net_URLRequestMethod_GET, &flash_net_URLRequestMethod_GET); dict_put(&flash_net_URLRequestMethod.static_members, &flash_net_URLRequestMethod_POST, &flash_net_URLRequestMethod_POST); dict_put(d, &adobe_utils_MMExecute, &adobe_utils_MMExecute); dict_put(d, &flash_system_System, &flash_system_System); dict_init2(&flash_system_System.members, &memberinfo_type, 8); dict_init2(&flash_system_System.static_members, &memberinfo_type, 15); dict_put(&flash_system_System.static_members, &flash_system_System_pause, &flash_system_System_pause); dict_put(&flash_system_System.static_members, &flash_system_System_useCodePage, &flash_system_System_useCodePage); dict_put(&flash_system_System.static_members, &flash_system_System_exit, &flash_system_System_exit); dict_put(&flash_system_System.static_members, &flash_system_System_setClipboard, &flash_system_System_setClipboard); dict_put(&flash_system_System.static_members, &flash_system_System_totalMemory, &flash_system_System_totalMemory); dict_put(&flash_system_System.static_members, &flash_system_System_gc, &flash_system_System_gc); dict_put(&flash_system_System.static_members, &flash_system_System_resume, &flash_system_System_resume); dict_put(&flash_system_System.static_members, &flash_system_System_vmVersion, &flash_system_System_vmVersion); dict_put(&flash_system_System.static_members, &flash_system_System_ime, &flash_system_System_ime); dict_put(d, &flash_filters_BitmapFilterQuality, &flash_filters_BitmapFilterQuality); dict_init2(&flash_filters_BitmapFilterQuality.members, &memberinfo_type, 8); dict_init2(&flash_filters_BitmapFilterQuality.static_members, &memberinfo_type, 8); dict_put(&flash_filters_BitmapFilterQuality.static_members, &flash_filters_BitmapFilterQuality_LOW, &flash_filters_BitmapFilterQuality_LOW); dict_put(&flash_filters_BitmapFilterQuality.static_members, &flash_filters_BitmapFilterQuality_MEDIUM, &flash_filters_BitmapFilterQuality_MEDIUM); dict_put(&flash_filters_BitmapFilterQuality.static_members, &flash_filters_BitmapFilterQuality_HIGH, &flash_filters_BitmapFilterQuality_HIGH); dict_put(d, &flash_display_DisplayObjectContainer, &flash_display_DisplayObjectContainer); dict_init2(&flash_display_DisplayObjectContainer.members, &memberinfo_type, 31); dict_init2(&flash_display_DisplayObjectContainer.static_members, &memberinfo_type, 8); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_addChild, &flash_display_DisplayObjectContainer_addChild); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_getObjectsUnderPoint, &flash_display_DisplayObjectContainer_getObjectsUnderPoint); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_removeChildAt, &flash_display_DisplayObjectContainer_removeChildAt); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_swapChildren, &flash_display_DisplayObjectContainer_swapChildren); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_areInaccessibleObjectsUnderPoint, &flash_display_DisplayObjectContainer_areInaccessibleObjectsUnderPoint); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_setChildIndex, &flash_display_DisplayObjectContainer_setChildIndex); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_numChildren, &flash_display_DisplayObjectContainer_numChildren); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_getChildIndex, &flash_display_DisplayObjectContainer_getChildIndex); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_getChildAt, &flash_display_DisplayObjectContainer_getChildAt); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_removeChild, &flash_display_DisplayObjectContainer_removeChild); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_addChildAt, &flash_display_DisplayObjectContainer_addChildAt); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_contains, &flash_display_DisplayObjectContainer_contains); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_getChildByName, &flash_display_DisplayObjectContainer_getChildByName); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_swapChildrenAt, &flash_display_DisplayObjectContainer_swapChildrenAt); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_mouseChildren, &flash_display_DisplayObjectContainer_mouseChildren); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_tabChildren, &flash_display_DisplayObjectContainer_tabChildren); dict_put(&flash_display_DisplayObjectContainer.members, &flash_display_DisplayObjectContainer_textSnapshot, &flash_display_DisplayObjectContainer_textSnapshot); dict_put(d, &flash_system_LoaderContext, &flash_system_LoaderContext); dict_init2(&flash_system_LoaderContext.members, &memberinfo_type, 8); dict_init2(&flash_system_LoaderContext.static_members, &memberinfo_type, 8); dict_put(&flash_system_LoaderContext.members, &flash_system_LoaderContext_checkPolicyFile, &flash_system_LoaderContext_checkPolicyFile); dict_put(&flash_system_LoaderContext.members, &flash_system_LoaderContext_securityDomain, &flash_system_LoaderContext_securityDomain); dict_put(&flash_system_LoaderContext.members, &flash_system_LoaderContext_applicationDomain, &flash_system_LoaderContext_applicationDomain); dict_put(d, &flash_utils_clearTimeout, &flash_utils_clearTimeout); dict_put(d, &_isXMLName, &_isXMLName); dict_put(d, &flash_xml_XMLNodeType, &flash_xml_XMLNodeType); dict_init2(&flash_xml_XMLNodeType.members, &memberinfo_type, 8); dict_init2(&flash_xml_XMLNodeType.static_members, &memberinfo_type, 8); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_PROCESSING_INSTRUCTION_NODE, &flash_xml_XMLNodeType_PROCESSING_INSTRUCTION_NODE); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_CDATA_NODE, &flash_xml_XMLNodeType_CDATA_NODE); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_DOCUMENT_TYPE_NODE, &flash_xml_XMLNodeType_DOCUMENT_TYPE_NODE); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_COMMENT_NODE, &flash_xml_XMLNodeType_COMMENT_NODE); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_XML_DECLARATION, &flash_xml_XMLNodeType_XML_DECLARATION); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_TEXT_NODE, &flash_xml_XMLNodeType_TEXT_NODE); dict_put(&flash_xml_XMLNodeType.static_members, &flash_xml_XMLNodeType_ELEMENT_NODE, &flash_xml_XMLNodeType_ELEMENT_NODE); dict_put(d, &flash_events_ErrorEvent, &flash_events_ErrorEvent); dict_init2(&flash_events_ErrorEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_ErrorEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_ErrorEvent.members, &flash_events_ErrorEvent_toString, &flash_events_ErrorEvent_toString); dict_put(&flash_events_ErrorEvent.members, &flash_events_ErrorEvent_clone, &flash_events_ErrorEvent_clone); dict_put(&flash_events_ErrorEvent.static_members, &flash_events_ErrorEvent_ERROR, &flash_events_ErrorEvent_ERROR); dict_put(d, &flash_utils_IDataOutput, &flash_utils_IDataOutput); dict_init2(&flash_utils_IDataOutput.members, &memberinfo_type, 31); dict_init2(&flash_utils_IDataOutput.static_members, &memberinfo_type, 8); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeUnsignedInt, &flash_utils_IDataOutput_writeUnsignedInt); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeInt, &flash_utils_IDataOutput_writeInt); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_objectEncoding, &flash_utils_IDataOutput_objectEncoding); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeUTFBytes, &flash_utils_IDataOutput_writeUTFBytes); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeObject, &flash_utils_IDataOutput_writeObject); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeMultiByte, &flash_utils_IDataOutput_writeMultiByte); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeShort, &flash_utils_IDataOutput_writeShort); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeFloat, &flash_utils_IDataOutput_writeFloat); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeUTF, &flash_utils_IDataOutput_writeUTF); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeByte, &flash_utils_IDataOutput_writeByte); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeBoolean, &flash_utils_IDataOutput_writeBoolean); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeDouble, &flash_utils_IDataOutput_writeDouble); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_writeBytes, &flash_utils_IDataOutput_writeBytes); dict_put(&flash_utils_IDataOutput.members, &flash_utils_IDataOutput_endian, &flash_utils_IDataOutput_endian); dict_put(d, &flash_geom_Utils3D, &flash_geom_Utils3D); dict_init2(&flash_geom_Utils3D.members, &memberinfo_type, 8); dict_init2(&flash_geom_Utils3D.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Utils3D.static_members, &flash_geom_Utils3D_projectVectors, &flash_geom_Utils3D_projectVectors); dict_put(&flash_geom_Utils3D.static_members, &flash_geom_Utils3D_projectVector, &flash_geom_Utils3D_projectVector); dict_put(&flash_geom_Utils3D.static_members, &flash_geom_Utils3D_pointTowards, &flash_geom_Utils3D_pointTowards); dict_put(d, &flash_events_TextEvent, &flash_events_TextEvent); dict_init2(&flash_events_TextEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_TextEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_TextEvent.members, &flash_events_TextEvent_toString, &flash_events_TextEvent_toString); dict_put(&flash_events_TextEvent.members, &flash_events_TextEvent_text, &flash_events_TextEvent_text); dict_put(&flash_events_TextEvent.members, &flash_events_TextEvent_clone, &flash_events_TextEvent_clone); dict_put(&flash_events_TextEvent.static_members, &flash_events_TextEvent_LINK, &flash_events_TextEvent_LINK); dict_put(&flash_events_TextEvent.static_members, &flash_events_TextEvent_TEXT_INPUT, &flash_events_TextEvent_TEXT_INPUT); dict_put(d, &flash_utils_Proxy, &flash_utils_Proxy); dict_init2(&flash_utils_Proxy.members, &memberinfo_type, 15); dict_init2(&flash_utils_Proxy.static_members, &memberinfo_type, 8); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_callProperty, &flash_utils_Proxy_callProperty); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_setProperty, &flash_utils_Proxy_setProperty); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_getProperty, &flash_utils_Proxy_getProperty); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_nextName, &flash_utils_Proxy_nextName); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_nextNameIndex, &flash_utils_Proxy_nextNameIndex); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_hasProperty, &flash_utils_Proxy_hasProperty); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_deleteProperty, &flash_utils_Proxy_deleteProperty); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_getDescendants, &flash_utils_Proxy_getDescendants); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_isAttribute, &flash_utils_Proxy_isAttribute); dict_put(&flash_utils_Proxy.members, &flash_utils_Proxy_nextValue, &flash_utils_Proxy_nextValue); dict_put(d, &flash_text_engine_FontPosture, &flash_text_engine_FontPosture); dict_init2(&flash_text_engine_FontPosture.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_FontPosture.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_FontPosture.static_members, &flash_text_engine_FontPosture_NORMAL, &flash_text_engine_FontPosture_NORMAL); dict_put(&flash_text_engine_FontPosture.static_members, &flash_text_engine_FontPosture_ITALIC, &flash_text_engine_FontPosture_ITALIC); dict_put(d, &flash_xml_XMLDocument, &flash_xml_XMLDocument); dict_init2(&flash_xml_XMLDocument.members, &memberinfo_type, 8); dict_init2(&flash_xml_XMLDocument.static_members, &memberinfo_type, 8); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_docTypeDecl, &flash_xml_XMLDocument_docTypeDecl); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_idMap, &flash_xml_XMLDocument_idMap); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_toString, &flash_xml_XMLDocument_toString); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_xmlDecl, &flash_xml_XMLDocument_xmlDecl); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_createElement, &flash_xml_XMLDocument_createElement); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_ignoreWhite, &flash_xml_XMLDocument_ignoreWhite); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_createTextNode, &flash_xml_XMLDocument_createTextNode); dict_put(&flash_xml_XMLDocument.members, &flash_xml_XMLDocument_parseXML, &flash_xml_XMLDocument_parseXML); dict_put(d, &flash_display_ShaderInput, &flash_display_ShaderInput); dict_init2(&flash_display_ShaderInput.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderInput.static_members, &memberinfo_type, 8); dict_put(&flash_display_ShaderInput.members, &flash_display_ShaderInput_width, &flash_display_ShaderInput_width); dict_put(&flash_display_ShaderInput.members, &flash_display_ShaderInput_input, &flash_display_ShaderInput_input); dict_put(&flash_display_ShaderInput.members, &flash_display_ShaderInput_height, &flash_display_ShaderInput_height); dict_put(&flash_display_ShaderInput.members, &flash_display_ShaderInput_index, &flash_display_ShaderInput_index); dict_put(&flash_display_ShaderInput.members, &flash_display_ShaderInput_channels, &flash_display_ShaderInput_channels); dict_put(d, &flash_text_engine_TextBlock, &flash_text_engine_TextBlock); dict_init2(&flash_text_engine_TextBlock.members, &memberinfo_type, 31); dict_init2(&flash_text_engine_TextBlock.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_createTextLine, &flash_text_engine_TextBlock_createTextLine); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_bidiLevel, &flash_text_engine_TextBlock_bidiLevel); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_getTextLineAtCharIndex, &flash_text_engine_TextBlock_getTextLineAtCharIndex); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_lastLine, &flash_text_engine_TextBlock_lastLine); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_findPreviousWordBoundary, &flash_text_engine_TextBlock_findPreviousWordBoundary); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_findPreviousAtomBoundary, &flash_text_engine_TextBlock_findPreviousAtomBoundary); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_baselineZero, &flash_text_engine_TextBlock_baselineZero); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_applyNonLinearFontScaling, &flash_text_engine_TextBlock_applyNonLinearFontScaling); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_firstLine, &flash_text_engine_TextBlock_firstLine); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_textJustifier, &flash_text_engine_TextBlock_textJustifier); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_releaseLines, &flash_text_engine_TextBlock_releaseLines); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_firstInvalidLine, &flash_text_engine_TextBlock_firstInvalidLine); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_baselineFontSize, &flash_text_engine_TextBlock_baselineFontSize); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_lineRotation, &flash_text_engine_TextBlock_lineRotation); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_userData, &flash_text_engine_TextBlock_userData); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_content, &flash_text_engine_TextBlock_content); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_textLineCreationResult, &flash_text_engine_TextBlock_textLineCreationResult); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_baselineFontDescription, &flash_text_engine_TextBlock_baselineFontDescription); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_findNextAtomBoundary, &flash_text_engine_TextBlock_findNextAtomBoundary); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_findNextWordBoundary, &flash_text_engine_TextBlock_findNextWordBoundary); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_tabStops, &flash_text_engine_TextBlock_tabStops); dict_put(&flash_text_engine_TextBlock.members, &flash_text_engine_TextBlock_dump, &flash_text_engine_TextBlock_dump); dict_put(d, &flash_ui_MouseCursor, &flash_ui_MouseCursor); dict_init2(&flash_ui_MouseCursor.members, &memberinfo_type, 8); dict_init2(&flash_ui_MouseCursor.static_members, &memberinfo_type, 8); dict_put(&flash_ui_MouseCursor.static_members, &flash_ui_MouseCursor_BUTTON, &flash_ui_MouseCursor_BUTTON); dict_put(&flash_ui_MouseCursor.static_members, &flash_ui_MouseCursor_AUTO, &flash_ui_MouseCursor_AUTO); dict_put(&flash_ui_MouseCursor.static_members, &flash_ui_MouseCursor_ARROW, &flash_ui_MouseCursor_ARROW); dict_put(&flash_ui_MouseCursor.static_members, &flash_ui_MouseCursor_IBEAM, &flash_ui_MouseCursor_IBEAM); dict_put(&flash_ui_MouseCursor.static_members, &flash_ui_MouseCursor_HAND, &flash_ui_MouseCursor_HAND); dict_put(d, &flash_utils_flash_proxy, &flash_utils_flash_proxy); dict_put(d, &flash_display_MorphShape, &flash_display_MorphShape); dict_init2(&flash_display_MorphShape.members, &memberinfo_type, 8); dict_init2(&flash_display_MorphShape.static_members, &memberinfo_type, 8); dict_put(d, &flash_text_TextDisplayMode, &flash_text_TextDisplayMode); dict_init2(&flash_text_TextDisplayMode.members, &memberinfo_type, 8); dict_init2(&flash_text_TextDisplayMode.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextDisplayMode.static_members, &flash_text_TextDisplayMode_CRT, &flash_text_TextDisplayMode_CRT); dict_put(&flash_text_TextDisplayMode.static_members, &flash_text_TextDisplayMode_LCD, &flash_text_TextDisplayMode_LCD); dict_put(&flash_text_TextDisplayMode.static_members, &flash_text_TextDisplayMode_DEFAULT, &flash_text_TextDisplayMode_DEFAULT); dict_put(d, &flash_net_URLLoaderDataFormat, &flash_net_URLLoaderDataFormat); dict_init2(&flash_net_URLLoaderDataFormat.members, &memberinfo_type, 8); dict_init2(&flash_net_URLLoaderDataFormat.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLLoaderDataFormat.static_members, &flash_net_URLLoaderDataFormat_VARIABLES, &flash_net_URLLoaderDataFormat_VARIABLES); dict_put(&flash_net_URLLoaderDataFormat.static_members, &flash_net_URLLoaderDataFormat_BINARY, &flash_net_URLLoaderDataFormat_BINARY); dict_put(&flash_net_URLLoaderDataFormat.static_members, &flash_net_URLLoaderDataFormat_TEXT, &flash_net_URLLoaderDataFormat_TEXT); dict_put(d, &flash_display_StageQuality, &flash_display_StageQuality); dict_init2(&flash_display_StageQuality.members, &memberinfo_type, 8); dict_init2(&flash_display_StageQuality.static_members, &memberinfo_type, 8); dict_put(&flash_display_StageQuality.static_members, &flash_display_StageQuality_LOW, &flash_display_StageQuality_LOW); dict_put(&flash_display_StageQuality.static_members, &flash_display_StageQuality_MEDIUM, &flash_display_StageQuality_MEDIUM); dict_put(&flash_display_StageQuality.static_members, &flash_display_StageQuality_HIGH, &flash_display_StageQuality_HIGH); dict_put(&flash_display_StageQuality.static_members, &flash_display_StageQuality_BEST, &flash_display_StageQuality_BEST); dict_put(d, &flash_display_Sprite, &flash_display_Sprite); dict_init2(&flash_display_Sprite.members, &memberinfo_type, 15); dict_init2(&flash_display_Sprite.static_members, &memberinfo_type, 8); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_stopDrag, &flash_display_Sprite_stopDrag); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_buttonMode, &flash_display_Sprite_buttonMode); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_soundTransform, &flash_display_Sprite_soundTransform); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_hitArea, &flash_display_Sprite_hitArea); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_useHandCursor, &flash_display_Sprite_useHandCursor); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_graphics, &flash_display_Sprite_graphics); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_startDrag, &flash_display_Sprite_startDrag); dict_put(&flash_display_Sprite.members, &flash_display_Sprite_dropTarget, &flash_display_Sprite_dropTarget); dict_put(d, &flash_ui_Keyboard, &flash_ui_Keyboard); dict_init2(&flash_ui_Keyboard.members, &memberinfo_type, 8); dict_init2(&flash_ui_Keyboard.static_members, &memberinfo_type, 127); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_PAGE_DOWN, &flash_ui_Keyboard_PAGE_DOWN); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F4, &flash_ui_Keyboard_F4); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_ENTER, &flash_ui_Keyboard_ENTER); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_CONTROL, &flash_ui_Keyboard_CONTROL); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F7, &flash_ui_Keyboard_F7); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F14, &flash_ui_Keyboard_F14); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_3, &flash_ui_Keyboard_NUMPAD_3); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_DECIMAL, &flash_ui_Keyboard_NUMPAD_DECIMAL); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_CAPS_LOCK, &flash_ui_Keyboard_CAPS_LOCK); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_SHIFT, &flash_ui_Keyboard_SHIFT); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_TAB, &flash_ui_Keyboard_TAB); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_0, &flash_ui_Keyboard_NUMPAD_0); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_END, &flash_ui_Keyboard_END); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_1, &flash_ui_Keyboard_NUMPAD_1); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_LEFT, &flash_ui_Keyboard_LEFT); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F8, &flash_ui_Keyboard_F8); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F9, &flash_ui_Keyboard_F9); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_numLock, &flash_ui_Keyboard_numLock); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F2, &flash_ui_Keyboard_F2); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_4, &flash_ui_Keyboard_NUMPAD_4); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F3, &flash_ui_Keyboard_F3); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_2, &flash_ui_Keyboard_NUMPAD_2); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_HOME, &flash_ui_Keyboard_HOME); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_7, &flash_ui_Keyboard_NUMPAD_7); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_6, &flash_ui_Keyboard_NUMPAD_6); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F6, &flash_ui_Keyboard_F6); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F5, &flash_ui_Keyboard_F5); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_INSERT, &flash_ui_Keyboard_INSERT); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_ESCAPE, &flash_ui_Keyboard_ESCAPE); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F1, &flash_ui_Keyboard_F1); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_SUBTRACT, &flash_ui_Keyboard_NUMPAD_SUBTRACT); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_8, &flash_ui_Keyboard_NUMPAD_8); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_SPACE, &flash_ui_Keyboard_SPACE); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_BACKSPACE, &flash_ui_Keyboard_BACKSPACE); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_DELETE, &flash_ui_Keyboard_DELETE); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_MULTIPLY, &flash_ui_Keyboard_NUMPAD_MULTIPLY); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F13, &flash_ui_Keyboard_F13); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_ADD, &flash_ui_Keyboard_NUMPAD_ADD); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_9, &flash_ui_Keyboard_NUMPAD_9); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F12, &flash_ui_Keyboard_F12); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_RIGHT, &flash_ui_Keyboard_RIGHT); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F15, &flash_ui_Keyboard_F15); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F11, &flash_ui_Keyboard_F11); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_UP, &flash_ui_Keyboard_UP); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_isAccessible, &flash_ui_Keyboard_isAccessible); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_DOWN, &flash_ui_Keyboard_DOWN); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_capsLock, &flash_ui_Keyboard_capsLock); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_PAGE_UP, &flash_ui_Keyboard_PAGE_UP); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_ENTER, &flash_ui_Keyboard_NUMPAD_ENTER); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_F10, &flash_ui_Keyboard_F10); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_5, &flash_ui_Keyboard_NUMPAD_5); dict_put(&flash_ui_Keyboard.static_members, &flash_ui_Keyboard_NUMPAD_DIVIDE, &flash_ui_Keyboard_NUMPAD_DIVIDE); dict_put(d, &flash_filters_DisplacementMapFilter, &flash_filters_DisplacementMapFilter); dict_init2(&flash_filters_DisplacementMapFilter.members, &memberinfo_type, 31); dict_init2(&flash_filters_DisplacementMapFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_scaleY, &flash_filters_DisplacementMapFilter_scaleY); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_mapPoint, &flash_filters_DisplacementMapFilter_mapPoint); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_scaleX, &flash_filters_DisplacementMapFilter_scaleX); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_mapBitmap, &flash_filters_DisplacementMapFilter_mapBitmap); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_mode, &flash_filters_DisplacementMapFilter_mode); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_color, &flash_filters_DisplacementMapFilter_color); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_componentX, &flash_filters_DisplacementMapFilter_componentX); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_clone, &flash_filters_DisplacementMapFilter_clone); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_alpha, &flash_filters_DisplacementMapFilter_alpha); dict_put(&flash_filters_DisplacementMapFilter.members, &flash_filters_DisplacementMapFilter_componentY, &flash_filters_DisplacementMapFilter_componentY); dict_put(d, &flash_utils_escapeMultiByte, &flash_utils_escapeMultiByte); dict_put(d, &adobe_utils_MMEndCommand, &adobe_utils_MMEndCommand); dict_put(d, &flash_display_GradientType, &flash_display_GradientType); dict_init2(&flash_display_GradientType.members, &memberinfo_type, 8); dict_init2(&flash_display_GradientType.static_members, &memberinfo_type, 8); dict_put(&flash_display_GradientType.static_members, &flash_display_GradientType_LINEAR, &flash_display_GradientType_LINEAR); dict_put(&flash_display_GradientType.static_members, &flash_display_GradientType_RADIAL, &flash_display_GradientType_RADIAL); dict_put(d, &flash_media_ID3Info, &flash_media_ID3Info); dict_init2(&flash_media_ID3Info.members, &memberinfo_type, 8); dict_init2(&flash_media_ID3Info.static_members, &memberinfo_type, 8); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_comment, &flash_media_ID3Info_comment); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_year, &flash_media_ID3Info_year); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_track, &flash_media_ID3Info_track); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_artist, &flash_media_ID3Info_artist); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_songName, &flash_media_ID3Info_songName); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_genre, &flash_media_ID3Info_genre); dict_put(&flash_media_ID3Info.members, &flash_media_ID3Info_album, &flash_media_ID3Info_album); dict_put(d, &flash_display_GraphicsSolidFill, &flash_display_GraphicsSolidFill); dict_init2(&flash_display_GraphicsSolidFill.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsSolidFill.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsSolidFill.members, &flash_display_GraphicsSolidFill_color, &flash_display_GraphicsSolidFill_color); dict_put(&flash_display_GraphicsSolidFill.members, &flash_display_GraphicsSolidFill_alpha, &flash_display_GraphicsSolidFill_alpha); dict_put(d, &flash_filters_ColorMatrixFilter, &flash_filters_ColorMatrixFilter); dict_init2(&flash_filters_ColorMatrixFilter.members, &memberinfo_type, 8); dict_init2(&flash_filters_ColorMatrixFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_ColorMatrixFilter.members, &flash_filters_ColorMatrixFilter_matrix, &flash_filters_ColorMatrixFilter_matrix); dict_put(&flash_filters_ColorMatrixFilter.members, &flash_filters_ColorMatrixFilter_clone, &flash_filters_ColorMatrixFilter_clone); dict_put(d, &flash_net_NetStreamPlayTransitions, &flash_net_NetStreamPlayTransitions); dict_init2(&flash_net_NetStreamPlayTransitions.members, &memberinfo_type, 8); dict_init2(&flash_net_NetStreamPlayTransitions.static_members, &memberinfo_type, 8); dict_put(&flash_net_NetStreamPlayTransitions.static_members, &flash_net_NetStreamPlayTransitions_RESET, &flash_net_NetStreamPlayTransitions_RESET); dict_put(&flash_net_NetStreamPlayTransitions.static_members, &flash_net_NetStreamPlayTransitions_APPEND, &flash_net_NetStreamPlayTransitions_APPEND); dict_put(&flash_net_NetStreamPlayTransitions.static_members, &flash_net_NetStreamPlayTransitions_SWAP, &flash_net_NetStreamPlayTransitions_SWAP); dict_put(&flash_net_NetStreamPlayTransitions.static_members, &flash_net_NetStreamPlayTransitions_SWITCH, &flash_net_NetStreamPlayTransitions_SWITCH); dict_put(&flash_net_NetStreamPlayTransitions.static_members, &flash_net_NetStreamPlayTransitions_STOP, &flash_net_NetStreamPlayTransitions_STOP); dict_put(d, &flash_media_SoundCodec, &flash_media_SoundCodec); dict_init2(&flash_media_SoundCodec.members, &memberinfo_type, 8); dict_init2(&flash_media_SoundCodec.static_members, &memberinfo_type, 8); dict_put(&flash_media_SoundCodec.static_members, &flash_media_SoundCodec_NELLYMOSER, &flash_media_SoundCodec_NELLYMOSER); dict_put(&flash_media_SoundCodec.static_members, &flash_media_SoundCodec_SPEEX, &flash_media_SoundCodec_SPEEX); dict_put(d, &flash_net_ObjectEncoding, &flash_net_ObjectEncoding); dict_init2(&flash_net_ObjectEncoding.members, &memberinfo_type, 8); dict_init2(&flash_net_ObjectEncoding.static_members, &memberinfo_type, 8); dict_put(&flash_net_ObjectEncoding.static_members, &flash_net_ObjectEncoding_dynamicPropertyWriter, &flash_net_ObjectEncoding_dynamicPropertyWriter); dict_put(&flash_net_ObjectEncoding.static_members, &flash_net_ObjectEncoding_DEFAULT, &flash_net_ObjectEncoding_DEFAULT); dict_put(&flash_net_ObjectEncoding.static_members, &flash_net_ObjectEncoding_AMF0, &flash_net_ObjectEncoding_AMF0); dict_put(&flash_net_ObjectEncoding.static_members, &flash_net_ObjectEncoding_AMF3, &flash_net_ObjectEncoding_AMF3); dict_put(d, &flash_text_engine_GroupElement, &flash_text_engine_GroupElement); dict_init2(&flash_text_engine_GroupElement.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_GroupElement.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_groupElements, &flash_text_engine_GroupElement_groupElements); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_splitTextElement, &flash_text_engine_GroupElement_splitTextElement); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_mergeTextElements, &flash_text_engine_GroupElement_mergeTextElements); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_getElementAtCharIndex, &flash_text_engine_GroupElement_getElementAtCharIndex); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_elementCount, &flash_text_engine_GroupElement_elementCount); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_setElements, &flash_text_engine_GroupElement_setElements); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_getElementAt, &flash_text_engine_GroupElement_getElementAt); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_ungroupElements, &flash_text_engine_GroupElement_ungroupElements); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_replaceElements, &flash_text_engine_GroupElement_replaceElements); dict_put(&flash_text_engine_GroupElement.members, &flash_text_engine_GroupElement_getElementIndex, &flash_text_engine_GroupElement_getElementIndex); dict_put(d, &_parseInt, &_parseInt); dict_put(d, &_QName, &_QName); dict_init2(&_QName.members, &memberinfo_type, 8); dict_init2(&_QName.static_members, &memberinfo_type, 8); dict_put(&_QName.members, &_QName_localName, &_QName_localName); dict_put(&_QName.members, &_QName_valueOf, &_QName_valueOf); dict_put(&_QName.members, &_QName_toString, &_QName_toString); dict_put(&_QName.members, &_QName_uri, &_QName_uri); dict_put(&_QName.static_members, &_QName_length, &_QName_length); dict_put(d, &_UninitializedError, &_UninitializedError); dict_init2(&_UninitializedError.members, &memberinfo_type, 8); dict_init2(&_UninitializedError.static_members, &memberinfo_type, 8); dict_put(&_UninitializedError.static_members, &_UninitializedError_length, &_UninitializedError_length); dict_put(d, &_Date, &_Date); dict_init2(&_Date.members, &memberinfo_type, 127); dict_init2(&_Date.static_members, &memberinfo_type, 8); dict_put(&_Date.members, &_Date_getTimezoneOffset, &_Date_getTimezoneOffset); dict_put(&_Date.members, &_Date_getTime, &_Date_getTime); dict_put(&_Date.members, &_Date_setUTCMilliseconds, &_Date_setUTCMilliseconds); dict_put(&_Date.members, &_Date_month, &_Date_month); dict_put(&_Date.members, &_Date_toString, &_Date_toString); dict_put(&_Date.members, &_Date_getHours, &_Date_getHours); dict_put(&_Date.members, &_Date_date, &_Date_date); dict_put(&_Date.members, &_Date_milliseconds, &_Date_milliseconds); dict_put(&_Date.members, &_Date_setSeconds, &_Date_setSeconds); dict_put(&_Date.members, &_Date_getDate, &_Date_getDate); dict_put(&_Date.members, &_Date_hoursUTC, &_Date_hoursUTC); dict_put(&_Date.members, &_Date_getUTCDate, &_Date_getUTCDate); dict_put(&_Date.members, &_Date_timezoneOffset, &_Date_timezoneOffset); dict_put(&_Date.members, &_Date_setTime, &_Date_setTime); dict_put(&_Date.members, &_Date_millisecondsUTC, &_Date_millisecondsUTC); dict_put(&_Date.members, &_Date_minutes, &_Date_minutes); dict_put(&_Date.members, &_Date_setUTCHours, &_Date_setUTCHours); dict_put(&_Date.members, &_Date_minutesUTC, &_Date_minutesUTC); dict_put(&_Date.members, &_Date_toLocaleTimeString, &_Date_toLocaleTimeString); dict_put(&_Date.members, &_Date_fullYearUTC, &_Date_fullYearUTC); dict_put(&_Date.members, &_Date_time, &_Date_time); dict_put(&_Date.members, &_Date_monthUTC, &_Date_monthUTC); dict_put(&_Date.members, &_Date_getUTCMilliseconds, &_Date_getUTCMilliseconds); dict_put(&_Date.members, &_Date_toDateString, &_Date_toDateString); dict_put(&_Date.members, &_Date_getMonth, &_Date_getMonth); dict_put(&_Date.members, &_Date_setMinutes, &_Date_setMinutes); dict_put(&_Date.members, &_Date_toLocaleDateString, &_Date_toLocaleDateString); dict_put(&_Date.members, &_Date_fullYear, &_Date_fullYear); dict_put(&_Date.members, &_Date_getUTCFullYear, &_Date_getUTCFullYear); dict_put(&_Date.members, &_Date_getSeconds, &_Date_getSeconds); dict_put(&_Date.members, &_Date_dateUTC, &_Date_dateUTC); dict_put(&_Date.members, &_Date_getMilliseconds, &_Date_getMilliseconds); dict_put(&_Date.members, &_Date_setUTCMinutes, &_Date_setUTCMinutes); dict_put(&_Date.members, &_Date_day, &_Date_day); dict_put(&_Date.members, &_Date_setUTCSeconds, &_Date_setUTCSeconds); dict_put(&_Date.members, &_Date_setUTCDate, &_Date_setUTCDate); dict_put(&_Date.members, &_Date_getUTCMonth, &_Date_getUTCMonth); dict_put(&_Date.members, &_Date_valueOf, &_Date_valueOf); dict_put(&_Date.members, &_Date_seconds, &_Date_seconds); dict_put(&_Date.members, &_Date_getUTCMinutes, &_Date_getUTCMinutes); dict_put(&_Date.members, &_Date_setDate, &_Date_setDate); dict_put(&_Date.members, &_Date_getFullYear, &_Date_getFullYear); dict_put(&_Date.members, &_Date_setFullYear, &_Date_setFullYear); dict_put(&_Date.members, &_Date_setHours, &_Date_setHours); dict_put(&_Date.members, &_Date_setMonth, &_Date_setMonth); dict_put(&_Date.members, &_Date_getUTCSeconds, &_Date_getUTCSeconds); dict_put(&_Date.members, &_Date_getMinutes, &_Date_getMinutes); dict_put(&_Date.members, &_Date_toLocaleString, &_Date_toLocaleString); dict_put(&_Date.members, &_Date_toUTCString, &_Date_toUTCString); dict_put(&_Date.members, &_Date_dayUTC, &_Date_dayUTC); dict_put(&_Date.members, &_Date_getDay, &_Date_getDay); dict_put(&_Date.members, &_Date_setUTCMonth, &_Date_setUTCMonth); dict_put(&_Date.members, &_Date_hours, &_Date_hours); dict_put(&_Date.members, &_Date_getUTCDay, &_Date_getUTCDay); dict_put(&_Date.members, &_Date_setUTCFullYear, &_Date_setUTCFullYear); dict_put(&_Date.members, &_Date_secondsUTC, &_Date_secondsUTC); dict_put(&_Date.members, &_Date_toTimeString, &_Date_toTimeString); dict_put(&_Date.members, &_Date_setMilliseconds, &_Date_setMilliseconds); dict_put(&_Date.members, &_Date_getUTCHours, &_Date_getUTCHours); dict_put(&_Date.static_members, &_Date_length, &_Date_length); dict_put(&_Date.static_members, &_Date_UTC, &_Date_UTC); dict_put(&_Date.static_members, &_Date_parse, &_Date_parse); dict_put(d, &flash_text_StyleSheet, &flash_text_StyleSheet); dict_init2(&flash_text_StyleSheet.members, &memberinfo_type, 8); dict_init2(&flash_text_StyleSheet.static_members, &memberinfo_type, 8); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_styleNames, &flash_text_StyleSheet_styleNames); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_clear, &flash_text_StyleSheet_clear); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_transform, &flash_text_StyleSheet_transform); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_getStyle, &flash_text_StyleSheet_getStyle); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_parseCSS, &flash_text_StyleSheet_parseCSS); dict_put(&flash_text_StyleSheet.members, &flash_text_StyleSheet_setStyle, &flash_text_StyleSheet_setStyle); dict_put(d, &flash_display_ActionScriptVersion, &flash_display_ActionScriptVersion); dict_init2(&flash_display_ActionScriptVersion.members, &memberinfo_type, 8); dict_init2(&flash_display_ActionScriptVersion.static_members, &memberinfo_type, 8); dict_put(&flash_display_ActionScriptVersion.static_members, &flash_display_ActionScriptVersion_ACTIONSCRIPT3, &flash_display_ActionScriptVersion_ACTIONSCRIPT3); dict_put(&flash_display_ActionScriptVersion.static_members, &flash_display_ActionScriptVersion_ACTIONSCRIPT2, &flash_display_ActionScriptVersion_ACTIONSCRIPT2); dict_put(d, &flash_text_engine_EastAsianJustifier, &flash_text_engine_EastAsianJustifier); dict_init2(&flash_text_engine_EastAsianJustifier.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_EastAsianJustifier.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_EastAsianJustifier.members, &flash_text_engine_EastAsianJustifier_justificationStyle, &flash_text_engine_EastAsianJustifier_justificationStyle); dict_put(&flash_text_engine_EastAsianJustifier.members, &flash_text_engine_EastAsianJustifier_clone, &flash_text_engine_EastAsianJustifier_clone); dict_put(d, &_String, &_String); dict_init2(&_String.members, &memberinfo_type, 31); dict_init2(&_String.static_members, &memberinfo_type, 8); dict_put(&_String.members, &_String_indexOf, &_String_indexOf); dict_put(&_String.members, &_String_replace, &_String_replace); dict_put(&_String.members, &_String_lastIndexOf, &_String_lastIndexOf); dict_put(&_String.members, &_String_valueOf, &_String_valueOf); dict_put(&_String.members, &_String_concat, &_String_concat); dict_put(&_String.members, &_String_substr, &_String_substr); dict_put(&_String.members, &_String_slice, &_String_slice); dict_put(&_String.members, &_String_search, &_String_search); dict_put(&_String.members, &_String_toLocaleUpperCase, &_String_toLocaleUpperCase); dict_put(&_String.members, &_String_toString, &_String_toString); dict_put(&_String.members, &_String_toUpperCase, &_String_toUpperCase); dict_put(&_String.members, &_String_charAt, &_String_charAt); dict_put(&_String.members, &_String_match, &_String_match); dict_put(&_String.members, &_String_charCodeAt, &_String_charCodeAt); dict_put(&_String.members, &_String_substring, &_String_substring); dict_put(&_String.members, &_String_localeCompare, &_String_localeCompare); dict_put(&_String.members, &_String_split, &_String_split); dict_put(&_String.members, &_String_toLocaleLowerCase, &_String_toLocaleLowerCase); dict_put(&_String.members, &_String_length, &_String_length); dict_put(&_String.members, &_String_toLowerCase, &_String_toLowerCase); dict_put(&_String.static_members, &_String_fromCharCode, &_String_fromCharCode); dict_put(d, &flash_media_SoundChannel, &flash_media_SoundChannel); dict_init2(&flash_media_SoundChannel.members, &memberinfo_type, 8); dict_init2(&flash_media_SoundChannel.static_members, &memberinfo_type, 8); dict_put(&flash_media_SoundChannel.members, &flash_media_SoundChannel_leftPeak, &flash_media_SoundChannel_leftPeak); dict_put(&flash_media_SoundChannel.members, &flash_media_SoundChannel_stop, &flash_media_SoundChannel_stop); dict_put(&flash_media_SoundChannel.members, &flash_media_SoundChannel_position, &flash_media_SoundChannel_position); dict_put(&flash_media_SoundChannel.members, &flash_media_SoundChannel_soundTransform, &flash_media_SoundChannel_soundTransform); dict_put(&flash_media_SoundChannel.members, &flash_media_SoundChannel_rightPeak, &flash_media_SoundChannel_rightPeak); dict_put(d, &flash_desktop_Clipboard, &flash_desktop_Clipboard); dict_init2(&flash_desktop_Clipboard.members, &memberinfo_type, 8); dict_init2(&flash_desktop_Clipboard.static_members, &memberinfo_type, 8); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_setDataHandler, &flash_desktop_Clipboard_setDataHandler); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_setData, &flash_desktop_Clipboard_setData); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_formats, &flash_desktop_Clipboard_formats); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_clear, &flash_desktop_Clipboard_clear); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_getData, &flash_desktop_Clipboard_getData); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_hasFormat, &flash_desktop_Clipboard_hasFormat); dict_put(&flash_desktop_Clipboard.members, &flash_desktop_Clipboard_clearData, &flash_desktop_Clipboard_clearData); dict_put(&flash_desktop_Clipboard.static_members, &flash_desktop_Clipboard_generalClipboard, &flash_desktop_Clipboard_generalClipboard); dict_put(d, &flash_display_IBitmapDrawable, &flash_display_IBitmapDrawable); dict_init2(&flash_display_IBitmapDrawable.members, &memberinfo_type, 8); dict_init2(&flash_display_IBitmapDrawable.static_members, &memberinfo_type, 8); dict_put(d, &_TypeError, &_TypeError); dict_init2(&_TypeError.members, &memberinfo_type, 8); dict_init2(&_TypeError.static_members, &memberinfo_type, 8); dict_put(&_TypeError.static_members, &_TypeError_length, &_TypeError_length); dict_put(d, &_int, &_int); dict_init2(&_int.members, &memberinfo_type, 8); dict_init2(&_int.static_members, &memberinfo_type, 8); dict_put(&_int.members, &_int_valueOf, &_int_valueOf); dict_put(&_int.members, &_int_toString, &_int_toString); dict_put(&_int.members, &_int_toExponential, &_int_toExponential); dict_put(&_int.members, &_int_toFixed, &_int_toFixed); dict_put(&_int.members, &_int_toPrecision, &_int_toPrecision); dict_put(&_int.static_members, &_int_MAX_VALUE, &_int_MAX_VALUE); dict_put(&_int.static_members, &_int_length, &_int_length); dict_put(&_int.static_members, &_int_MIN_VALUE, &_int_MIN_VALUE); dict_put(d, &flash_display_Scene, &flash_display_Scene); dict_init2(&flash_display_Scene.members, &memberinfo_type, 8); dict_init2(&flash_display_Scene.static_members, &memberinfo_type, 8); dict_put(&flash_display_Scene.members, &flash_display_Scene_numFrames, &flash_display_Scene_numFrames); dict_put(&flash_display_Scene.members, &flash_display_Scene_labels, &flash_display_Scene_labels); dict_put(&flash_display_Scene.members, &flash_display_Scene_name, &flash_display_Scene_name); dict_put(d, &flash_text_engine_FontMetrics, &flash_text_engine_FontMetrics); dict_init2(&flash_text_engine_FontMetrics.members, &memberinfo_type, 15); dict_init2(&flash_text_engine_FontMetrics.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_superscriptOffset, &flash_text_engine_FontMetrics_superscriptOffset); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_underlineThickness, &flash_text_engine_FontMetrics_underlineThickness); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_subscriptScale, &flash_text_engine_FontMetrics_subscriptScale); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_strikethroughOffset, &flash_text_engine_FontMetrics_strikethroughOffset); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_emBox, &flash_text_engine_FontMetrics_emBox); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_strikethroughThickness, &flash_text_engine_FontMetrics_strikethroughThickness); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_superscriptScale, &flash_text_engine_FontMetrics_superscriptScale); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_subscriptOffset, &flash_text_engine_FontMetrics_subscriptOffset); dict_put(&flash_text_engine_FontMetrics.members, &flash_text_engine_FontMetrics_underlineOffset, &flash_text_engine_FontMetrics_underlineOffset); dict_put(d, &flash_utils_IExternalizable, &flash_utils_IExternalizable); dict_init2(&flash_utils_IExternalizable.members, &memberinfo_type, 8); dict_init2(&flash_utils_IExternalizable.static_members, &memberinfo_type, 8); dict_put(&flash_utils_IExternalizable.members, &flash_utils_IExternalizable_readExternal, &flash_utils_IExternalizable_readExternal); dict_put(&flash_utils_IExternalizable.members, &flash_utils_IExternalizable_writeExternal, &flash_utils_IExternalizable_writeExternal); dict_put(d, &__AS3___vec_Vector, &__AS3___vec_Vector); dict_init2(&__AS3___vec_Vector.members, &memberinfo_type, 8); dict_init2(&__AS3___vec_Vector.static_members, &memberinfo_type, 8); dict_put(d, &flash_filters_GradientBevelFilter, &flash_filters_GradientBevelFilter); dict_init2(&flash_filters_GradientBevelFilter.members, &memberinfo_type, 15); dict_init2(&flash_filters_GradientBevelFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_strength, &flash_filters_GradientBevelFilter_strength); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_quality, &flash_filters_GradientBevelFilter_quality); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_angle, &flash_filters_GradientBevelFilter_angle); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_knockout, &flash_filters_GradientBevelFilter_knockout); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_alphas, &flash_filters_GradientBevelFilter_alphas); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_type, &flash_filters_GradientBevelFilter_type); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_ratios, &flash_filters_GradientBevelFilter_ratios); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_colors, &flash_filters_GradientBevelFilter_colors); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_blurX, &flash_filters_GradientBevelFilter_blurX); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_blurY, &flash_filters_GradientBevelFilter_blurY); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_distance, &flash_filters_GradientBevelFilter_distance); dict_put(&flash_filters_GradientBevelFilter.members, &flash_filters_GradientBevelFilter_clone, &flash_filters_GradientBevelFilter_clone); dict_put(d, &flash_text_TextRun, &flash_text_TextRun); dict_init2(&flash_text_TextRun.members, &memberinfo_type, 8); dict_init2(&flash_text_TextRun.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextRun.members, &flash_text_TextRun_beginIndex, &flash_text_TextRun_beginIndex); dict_put(&flash_text_TextRun.members, &flash_text_TextRun_endIndex, &flash_text_TextRun_endIndex); dict_put(&flash_text_TextRun.members, &flash_text_TextRun_textFormat, &flash_text_TextRun_textFormat); dict_put(d, &flash_text_TextColorType, &flash_text_TextColorType); dict_init2(&flash_text_TextColorType.members, &memberinfo_type, 8); dict_init2(&flash_text_TextColorType.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextColorType.static_members, &flash_text_TextColorType_DARK_COLOR, &flash_text_TextColorType_DARK_COLOR); dict_put(&flash_text_TextColorType.static_members, &flash_text_TextColorType_LIGHT_COLOR, &flash_text_TextColorType_LIGHT_COLOR); dict_put(d, &flash_sampler_getSampleCount, &flash_sampler_getSampleCount); dict_put(d, &flash_net_URLRequestHeader, &flash_net_URLRequestHeader); dict_init2(&flash_net_URLRequestHeader.members, &memberinfo_type, 8); dict_init2(&flash_net_URLRequestHeader.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLRequestHeader.members, &flash_net_URLRequestHeader_value, &flash_net_URLRequestHeader_value); dict_put(&flash_net_URLRequestHeader.members, &flash_net_URLRequestHeader_name, &flash_net_URLRequestHeader_name); dict_put(d, &flash_profiler_showRedrawRegions, &flash_profiler_showRedrawRegions); dict_put(d, &flash_display_ShaderData, &flash_display_ShaderData); dict_init2(&flash_display_ShaderData.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderData.static_members, &memberinfo_type, 8); dict_put(d, &flash_text_engine_TextLine, &flash_text_engine_TextLine); dict_init2(&flash_text_engine_TextLine.members, &memberinfo_type, 63); dict_init2(&flash_text_engine_TextLine.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_previousLine, &flash_text_engine_TextLine_previousLine); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_validity, &flash_text_engine_TextLine_validity); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomTextBlockBeginIndex, &flash_text_engine_TextLine_getAtomTextBlockBeginIndex); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomWordBoundaryOnLeft, &flash_text_engine_TextLine_getAtomWordBoundaryOnLeft); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomTextRotation, &flash_text_engine_TextLine_getAtomTextRotation); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_textHeight, &flash_text_engine_TextLine_textHeight); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomCenter, &flash_text_engine_TextLine_getAtomCenter); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomBounds, &flash_text_engine_TextLine_getAtomBounds); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_mirrorRegions, &flash_text_engine_TextLine_mirrorRegions); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_rawTextLength, &flash_text_engine_TextLine_rawTextLength); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_userData, &flash_text_engine_TextLine_userData); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_textWidth, &flash_text_engine_TextLine_textWidth); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_textBlock, &flash_text_engine_TextLine_textBlock); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_textBlockBeginIndex, &flash_text_engine_TextLine_textBlockBeginIndex); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_unjustifiedTextWidth, &flash_text_engine_TextLine_unjustifiedTextWidth); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_ascent, &flash_text_engine_TextLine_ascent); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getBaselinePosition, &flash_text_engine_TextLine_getBaselinePosition); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_specifiedWidth, &flash_text_engine_TextLine_specifiedWidth); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getMirrorRegion, &flash_text_engine_TextLine_getMirrorRegion); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomGraphic, &flash_text_engine_TextLine_getAtomGraphic); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_hasGraphicElement, &flash_text_engine_TextLine_hasGraphicElement); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_flushAtomData, &flash_text_engine_TextLine_flushAtomData); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_dump, &flash_text_engine_TextLine_dump); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_nextLine, &flash_text_engine_TextLine_nextLine); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomIndexAtCharIndex, &flash_text_engine_TextLine_getAtomIndexAtCharIndex); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomTextBlockEndIndex, &flash_text_engine_TextLine_getAtomTextBlockEndIndex); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_atomCount, &flash_text_engine_TextLine_atomCount); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_descent, &flash_text_engine_TextLine_descent); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomBidiLevel, &flash_text_engine_TextLine_getAtomBidiLevel); dict_put(&flash_text_engine_TextLine.members, &flash_text_engine_TextLine_getAtomIndexAtPoint, &flash_text_engine_TextLine_getAtomIndexAtPoint); dict_put(&flash_text_engine_TextLine.static_members, &flash_text_engine_TextLine_MAX_LINE_WIDTH, &flash_text_engine_TextLine_MAX_LINE_WIDTH); dict_put(d, &flash_sampler_getSamples, &flash_sampler_getSamples); dict_put(d, &flash_net_URLRequest, &flash_net_URLRequest); dict_init2(&flash_net_URLRequest.members, &memberinfo_type, 15); dict_init2(&flash_net_URLRequest.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_contentType, &flash_net_URLRequest_contentType); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_url, &flash_net_URLRequest_url); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_requestHeaders, &flash_net_URLRequest_requestHeaders); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_method, &flash_net_URLRequest_method); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_digest, &flash_net_URLRequest_digest); dict_put(&flash_net_URLRequest.members, &flash_net_URLRequest_data, &flash_net_URLRequest_data); dict_put(d, &_URIError, &_URIError); dict_init2(&_URIError.members, &memberinfo_type, 8); dict_init2(&_URIError.static_members, &memberinfo_type, 8); dict_put(&_URIError.static_members, &_URIError_length, &_URIError_length); dict_put(d, &flash_net_getClassByAlias, &flash_net_getClassByAlias); dict_put(d, &flash_display_ShaderParameter, &flash_display_ShaderParameter); dict_init2(&flash_display_ShaderParameter.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderParameter.static_members, &memberinfo_type, 8); dict_put(&flash_display_ShaderParameter.members, &flash_display_ShaderParameter_value, &flash_display_ShaderParameter_value); dict_put(&flash_display_ShaderParameter.members, &flash_display_ShaderParameter_index, &flash_display_ShaderParameter_index); dict_put(&flash_display_ShaderParameter.members, &flash_display_ShaderParameter_type, &flash_display_ShaderParameter_type); dict_put(d, &flash_filters_BitmapFilterType, &flash_filters_BitmapFilterType); dict_init2(&flash_filters_BitmapFilterType.members, &memberinfo_type, 8); dict_init2(&flash_filters_BitmapFilterType.static_members, &memberinfo_type, 8); dict_put(&flash_filters_BitmapFilterType.static_members, &flash_filters_BitmapFilterType_FULL, &flash_filters_BitmapFilterType_FULL); dict_put(&flash_filters_BitmapFilterType.static_members, &flash_filters_BitmapFilterType_INNER, &flash_filters_BitmapFilterType_INNER); dict_put(&flash_filters_BitmapFilterType.static_members, &flash_filters_BitmapFilterType_OUTER, &flash_filters_BitmapFilterType_OUTER); dict_put(d, &_SecurityError, &_SecurityError); dict_init2(&_SecurityError.members, &memberinfo_type, 8); dict_init2(&_SecurityError.static_members, &memberinfo_type, 8); dict_put(&_SecurityError.static_members, &_SecurityError_length, &_SecurityError_length); dict_put(d, &flash_utils_IDataInput, &flash_utils_IDataInput); dict_init2(&flash_utils_IDataInput.members, &memberinfo_type, 31); dict_init2(&flash_utils_IDataInput.static_members, &memberinfo_type, 8); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readUTF, &flash_utils_IDataInput_readUTF); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readByte, &flash_utils_IDataInput_readByte); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readUTFBytes, &flash_utils_IDataInput_readUTFBytes); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readShort, &flash_utils_IDataInput_readShort); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_objectEncoding, &flash_utils_IDataInput_objectEncoding); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readUnsignedInt, &flash_utils_IDataInput_readUnsignedInt); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readDouble, &flash_utils_IDataInput_readDouble); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readBytes, &flash_utils_IDataInput_readBytes); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readUnsignedByte, &flash_utils_IDataInput_readUnsignedByte); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readMultiByte, &flash_utils_IDataInput_readMultiByte); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readInt, &flash_utils_IDataInput_readInt); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_bytesAvailable, &flash_utils_IDataInput_bytesAvailable); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readUnsignedShort, &flash_utils_IDataInput_readUnsignedShort); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readObject, &flash_utils_IDataInput_readObject); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readFloat, &flash_utils_IDataInput_readFloat); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_endian, &flash_utils_IDataInput_endian); dict_put(&flash_utils_IDataInput.members, &flash_utils_IDataInput_readBoolean, &flash_utils_IDataInput_readBoolean); dict_put(d, &flash_events_IEventDispatcher, &flash_events_IEventDispatcher); dict_init2(&flash_events_IEventDispatcher.members, &memberinfo_type, 8); dict_init2(&flash_events_IEventDispatcher.static_members, &memberinfo_type, 8); dict_put(&flash_events_IEventDispatcher.members, &flash_events_IEventDispatcher_willTrigger, &flash_events_IEventDispatcher_willTrigger); dict_put(&flash_events_IEventDispatcher.members, &flash_events_IEventDispatcher_removeEventListener, &flash_events_IEventDispatcher_removeEventListener); dict_put(&flash_events_IEventDispatcher.members, &flash_events_IEventDispatcher_hasEventListener, &flash_events_IEventDispatcher_hasEventListener); dict_put(&flash_events_IEventDispatcher.members, &flash_events_IEventDispatcher_addEventListener, &flash_events_IEventDispatcher_addEventListener); dict_put(&flash_events_IEventDispatcher.members, &flash_events_IEventDispatcher_dispatchEvent, &flash_events_IEventDispatcher_dispatchEvent); dict_put(d, &_Class, &_Class); dict_init2(&_Class.members, &memberinfo_type, 8); dict_init2(&_Class.static_members, &memberinfo_type, 8); dict_put(&_Class.members, &_Class_prototype, &_Class_prototype); dict_put(&_Class.static_members, &_Class_length, &_Class_length); dict_put(d, &flash_geom_Rectangle, &flash_geom_Rectangle); dict_init2(&flash_geom_Rectangle.members, &memberinfo_type, 31); dict_init2(&flash_geom_Rectangle.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_top, &flash_geom_Rectangle_top); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_intersection, &flash_geom_Rectangle_intersection); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_intersects, &flash_geom_Rectangle_intersects); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_containsPoint, &flash_geom_Rectangle_containsPoint); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_setEmpty, &flash_geom_Rectangle_setEmpty); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_topLeft, &flash_geom_Rectangle_topLeft); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_width, &flash_geom_Rectangle_width); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_containsRect, &flash_geom_Rectangle_containsRect); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_isEmpty, &flash_geom_Rectangle_isEmpty); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_equals, &flash_geom_Rectangle_equals); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_height, &flash_geom_Rectangle_height); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_left, &flash_geom_Rectangle_left); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_inflate, &flash_geom_Rectangle_inflate); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_inflatePoint, &flash_geom_Rectangle_inflatePoint); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_toString, &flash_geom_Rectangle_toString); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_offsetPoint, &flash_geom_Rectangle_offsetPoint); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_x, &flash_geom_Rectangle_x); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_size, &flash_geom_Rectangle_size); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_bottomRight, &flash_geom_Rectangle_bottomRight); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_right, &flash_geom_Rectangle_right); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_contains, &flash_geom_Rectangle_contains); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_union, &flash_geom_Rectangle_union); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_bottom, &flash_geom_Rectangle_bottom); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_clone, &flash_geom_Rectangle_clone); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_y, &flash_geom_Rectangle_y); dict_put(&flash_geom_Rectangle.members, &flash_geom_Rectangle_offset, &flash_geom_Rectangle_offset); dict_put(d, &flash_events_SecurityErrorEvent, &flash_events_SecurityErrorEvent); dict_init2(&flash_events_SecurityErrorEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_SecurityErrorEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_SecurityErrorEvent.members, &flash_events_SecurityErrorEvent_toString, &flash_events_SecurityErrorEvent_toString); dict_put(&flash_events_SecurityErrorEvent.members, &flash_events_SecurityErrorEvent_clone, &flash_events_SecurityErrorEvent_clone); dict_put(&flash_events_SecurityErrorEvent.static_members, &flash_events_SecurityErrorEvent_SECURITY_ERROR, &flash_events_SecurityErrorEvent_SECURITY_ERROR); dict_put(d, &flash_net_IDynamicPropertyWriter, &flash_net_IDynamicPropertyWriter); dict_init2(&flash_net_IDynamicPropertyWriter.members, &memberinfo_type, 8); dict_init2(&flash_net_IDynamicPropertyWriter.static_members, &memberinfo_type, 8); dict_put(&flash_net_IDynamicPropertyWriter.members, &flash_net_IDynamicPropertyWriter_writeDynamicProperties, &flash_net_IDynamicPropertyWriter_writeDynamicProperties); dict_put(d, &flash_display_InterpolationMethod, &flash_display_InterpolationMethod); dict_init2(&flash_display_InterpolationMethod.members, &memberinfo_type, 8); dict_init2(&flash_display_InterpolationMethod.static_members, &memberinfo_type, 8); dict_put(&flash_display_InterpolationMethod.static_members, &flash_display_InterpolationMethod_RGB, &flash_display_InterpolationMethod_RGB); dict_put(&flash_display_InterpolationMethod.static_members, &flash_display_InterpolationMethod_LINEAR_RGB, &flash_display_InterpolationMethod_LINEAR_RGB); dict_put(d, &_Object, &_Object); dict_init2(&_Object.members, &memberinfo_type, 8); dict_init2(&_Object.static_members, &memberinfo_type, 8); dict_put(&_Object.members, &_Object_propertyIsEnumerable, &_Object_propertyIsEnumerable); dict_put(&_Object.members, &_Object_isPrototypeOf, &_Object_isPrototypeOf); dict_put(&_Object.members, &_Object_hasOwnProperty, &_Object_hasOwnProperty); dict_put(&_Object.static_members, &_Object_init, &_Object_init); dict_put(&_Object.static_members, &_Object_length, &_Object_length); dict_put(&_Object.static_members, &_Object__setPropertyIsEnumerable, &_Object__setPropertyIsEnumerable); dict_put(&_Object.static_members, &_Object__dontEnumPrototype, &_Object__dontEnumPrototype); dict_put(d, &flash_errors_EOFError, &flash_errors_EOFError); dict_init2(&flash_errors_EOFError.members, &memberinfo_type, 8); dict_init2(&flash_errors_EOFError.static_members, &memberinfo_type, 8); dict_put(d, &flash_net_NetStream, &flash_net_NetStream); dict_init2(&flash_net_NetStream.members, &memberinfo_type, 63); dict_init2(&flash_net_NetStream.static_members, &memberinfo_type, 8); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_videoCodec, &flash_net_NetStream_videoCodec); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_info, &flash_net_NetStream_info); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_attachCamera, &flash_net_NetStream_attachCamera); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_farNonce, &flash_net_NetStream_farNonce); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_close, &flash_net_NetStream_close); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_pause, &flash_net_NetStream_pause); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_onPeerConnect, &flash_net_NetStream_onPeerConnect); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_client, &flash_net_NetStream_client); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_resume, &flash_net_NetStream_resume); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_liveDelay, &flash_net_NetStream_liveDelay); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_peerStreams, &flash_net_NetStream_peerStreams); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_objectEncoding, &flash_net_NetStream_objectEncoding); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_bytesLoaded, &flash_net_NetStream_bytesLoaded); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_receiveVideo, &flash_net_NetStream_receiveVideo); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_maxPauseBufferTime, &flash_net_NetStream_maxPauseBufferTime); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_play2, &flash_net_NetStream_play2); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_audioCodec, &flash_net_NetStream_audioCodec); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_receiveVideoFPS, &flash_net_NetStream_receiveVideoFPS); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_bytesTotal, &flash_net_NetStream_bytesTotal); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_farID, &flash_net_NetStream_farID); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_receiveAudio, &flash_net_NetStream_receiveAudio); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_bufferLength, &flash_net_NetStream_bufferLength); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_seek, &flash_net_NetStream_seek); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_attachAudio, &flash_net_NetStream_attachAudio); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_bufferTime, &flash_net_NetStream_bufferTime); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_play, &flash_net_NetStream_play); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_publish, &flash_net_NetStream_publish); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_togglePause, &flash_net_NetStream_togglePause); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_checkPolicyFile, &flash_net_NetStream_checkPolicyFile); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_nearNonce, &flash_net_NetStream_nearNonce); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_decodedFrames, &flash_net_NetStream_decodedFrames); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_send, &flash_net_NetStream_send); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_currentFPS, &flash_net_NetStream_currentFPS); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_time, &flash_net_NetStream_time); dict_put(&flash_net_NetStream.members, &flash_net_NetStream_soundTransform, &flash_net_NetStream_soundTransform); dict_put(&flash_net_NetStream.static_members, &flash_net_NetStream_CONNECT_TO_FMS, &flash_net_NetStream_CONNECT_TO_FMS); dict_put(&flash_net_NetStream.static_members, &flash_net_NetStream_DIRECT_CONNECTIONS, &flash_net_NetStream_DIRECT_CONNECTIONS); dict_put(d, &_ArgumentError, &_ArgumentError); dict_init2(&_ArgumentError.members, &memberinfo_type, 8); dict_init2(&_ArgumentError.static_members, &memberinfo_type, 8); dict_put(&_ArgumentError.static_members, &_ArgumentError_length, &_ArgumentError_length); dict_put(d, &_XMLList, &_XMLList); dict_init2(&_XMLList.members, &memberinfo_type, 63); dict_init2(&_XMLList.static_members, &memberinfo_type, 8); dict_put(&_XMLList.members, &_XMLList_normalize, &_XMLList_normalize); dict_put(&_XMLList.members, &_XMLList_removeNamespace, &_XMLList_removeNamespace); dict_put(&_XMLList.members, &_XMLList_prependChild, &_XMLList_prependChild); dict_put(&_XMLList.members, &_XMLList_toXMLString, &_XMLList_toXMLString); dict_put(&_XMLList.members, &_XMLList_nodeKind, &_XMLList_nodeKind); dict_put(&_XMLList.members, &_XMLList_copy, &_XMLList_copy); dict_put(&_XMLList.members, &_XMLList_text, &_XMLList_text); dict_put(&_XMLList.members, &_XMLList_toString, &_XMLList_toString); dict_put(&_XMLList.members, &_XMLList_childIndex, &_XMLList_childIndex); dict_put(&_XMLList.members, &_XMLList_setName, &_XMLList_setName); dict_put(&_XMLList.members, &_XMLList_setLocalName, &_XMLList_setLocalName); dict_put(&_XMLList.members, &_XMLList_namespace, &_XMLList_namespace); dict_put(&_XMLList.members, &_XMLList_insertChildBefore, &_XMLList_insertChildBefore); dict_put(&_XMLList.members, &_XMLList_addNamespace, &_XMLList_addNamespace); dict_put(&_XMLList.members, &_XMLList_propertyIsEnumerable, &_XMLList_propertyIsEnumerable); dict_put(&_XMLList.members, &_XMLList_comments, &_XMLList_comments); dict_put(&_XMLList.members, &_XMLList_attributes, &_XMLList_attributes); dict_put(&_XMLList.members, &_XMLList_descendants, &_XMLList_descendants); dict_put(&_XMLList.members, &_XMLList_replace, &_XMLList_replace); dict_put(&_XMLList.members, &_XMLList_children, &_XMLList_children); dict_put(&_XMLList.members, &_XMLList_contains, &_XMLList_contains); dict_put(&_XMLList.members, &_XMLList_hasSimpleContent, &_XMLList_hasSimpleContent); dict_put(&_XMLList.members, &_XMLList_elements, &_XMLList_elements); dict_put(&_XMLList.members, &_XMLList_hasComplexContent, &_XMLList_hasComplexContent); dict_put(&_XMLList.members, &_XMLList_insertChildAfter, &_XMLList_insertChildAfter); dict_put(&_XMLList.members, &_XMLList_parent, &_XMLList_parent); dict_put(&_XMLList.members, &_XMLList_length, &_XMLList_length); dict_put(&_XMLList.members, &_XMLList_processingInstructions, &_XMLList_processingInstructions); dict_put(&_XMLList.members, &_XMLList_child, &_XMLList_child); dict_put(&_XMLList.members, &_XMLList_appendChild, &_XMLList_appendChild); dict_put(&_XMLList.members, &_XMLList_valueOf, &_XMLList_valueOf); dict_put(&_XMLList.members, &_XMLList_localName, &_XMLList_localName); dict_put(&_XMLList.members, &_XMLList_inScopeNamespaces, &_XMLList_inScopeNamespaces); dict_put(&_XMLList.members, &_XMLList_hasOwnProperty, &_XMLList_hasOwnProperty); dict_put(&_XMLList.members, &_XMLList_setNamespace, &_XMLList_setNamespace); dict_put(&_XMLList.members, &_XMLList_namespaceDeclarations, &_XMLList_namespaceDeclarations); dict_put(&_XMLList.members, &_XMLList_name, &_XMLList_name); dict_put(&_XMLList.members, &_XMLList_setChildren, &_XMLList_setChildren); dict_put(&_XMLList.members, &_XMLList_attribute, &_XMLList_attribute); dict_put(d, &flash_geom_Point, &flash_geom_Point); dict_init2(&flash_geom_Point.members, &memberinfo_type, 15); dict_init2(&flash_geom_Point.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Point.members, &flash_geom_Point_equals, &flash_geom_Point_equals); dict_put(&flash_geom_Point.members, &flash_geom_Point_normalize, &flash_geom_Point_normalize); dict_put(&flash_geom_Point.members, &flash_geom_Point_x, &flash_geom_Point_x); dict_put(&flash_geom_Point.members, &flash_geom_Point_offset, &flash_geom_Point_offset); dict_put(&flash_geom_Point.members, &flash_geom_Point_subtract, &flash_geom_Point_subtract); dict_put(&flash_geom_Point.members, &flash_geom_Point_y, &flash_geom_Point_y); dict_put(&flash_geom_Point.members, &flash_geom_Point_length, &flash_geom_Point_length); dict_put(&flash_geom_Point.members, &flash_geom_Point_add, &flash_geom_Point_add); dict_put(&flash_geom_Point.members, &flash_geom_Point_toString, &flash_geom_Point_toString); dict_put(&flash_geom_Point.members, &flash_geom_Point_clone, &flash_geom_Point_clone); dict_put(&flash_geom_Point.static_members, &flash_geom_Point_polar, &flash_geom_Point_polar); dict_put(&flash_geom_Point.static_members, &flash_geom_Point_distance, &flash_geom_Point_distance); dict_put(&flash_geom_Point.static_members, &flash_geom_Point_interpolate, &flash_geom_Point_interpolate); dict_put(d, &flash_printing_PrintJobOptions, &flash_printing_PrintJobOptions); dict_init2(&flash_printing_PrintJobOptions.members, &memberinfo_type, 8); dict_init2(&flash_printing_PrintJobOptions.static_members, &memberinfo_type, 8); dict_put(&flash_printing_PrintJobOptions.members, &flash_printing_PrintJobOptions_printAsBitmap, &flash_printing_PrintJobOptions_printAsBitmap); dict_put(d, &flash_display_DisplayObject, &flash_display_DisplayObject); dict_init2(&flash_display_DisplayObject.members, &memberinfo_type, 63); dict_init2(&flash_display_DisplayObject.static_members, &memberinfo_type, 8); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_rotation, &flash_display_DisplayObject_rotation); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_filters, &flash_display_DisplayObject_filters); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_rotationZ, &flash_display_DisplayObject_rotationZ); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_accessibilityProperties, &flash_display_DisplayObject_accessibilityProperties); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_mouseX, &flash_display_DisplayObject_mouseX); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_root, &flash_display_DisplayObject_root); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_stage, &flash_display_DisplayObject_stage); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_rotationY, &flash_display_DisplayObject_rotationY); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_scaleZ, &flash_display_DisplayObject_scaleZ); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_local3DToGlobal, &flash_display_DisplayObject_local3DToGlobal); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_loaderInfo, &flash_display_DisplayObject_loaderInfo); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_cacheAsBitmap, &flash_display_DisplayObject_cacheAsBitmap); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_transform, &flash_display_DisplayObject_transform); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_scaleY, &flash_display_DisplayObject_scaleY); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_height, &flash_display_DisplayObject_height); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_rotationX, &flash_display_DisplayObject_rotationX); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_scrollRect, &flash_display_DisplayObject_scrollRect); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_width, &flash_display_DisplayObject_width); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_scale9Grid, &flash_display_DisplayObject_scale9Grid); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_parent, &flash_display_DisplayObject_parent); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_hitTestObject, &flash_display_DisplayObject_hitTestObject); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_hitTestPoint, &flash_display_DisplayObject_hitTestPoint); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_alpha, &flash_display_DisplayObject_alpha); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_getRect, &flash_display_DisplayObject_getRect); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_opaqueBackground, &flash_display_DisplayObject_opaqueBackground); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_globalToLocal3D, &flash_display_DisplayObject_globalToLocal3D); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_visible, &flash_display_DisplayObject_visible); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_blendMode, &flash_display_DisplayObject_blendMode); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_scaleX, &flash_display_DisplayObject_scaleX); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_globalToLocal, &flash_display_DisplayObject_globalToLocal); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_localToGlobal, &flash_display_DisplayObject_localToGlobal); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_z, &flash_display_DisplayObject_z); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_name, &flash_display_DisplayObject_name); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_getBounds, &flash_display_DisplayObject_getBounds); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_mask, &flash_display_DisplayObject_mask); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_mouseY, &flash_display_DisplayObject_mouseY); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_x, &flash_display_DisplayObject_x); dict_put(&flash_display_DisplayObject.members, &flash_display_DisplayObject_y, &flash_display_DisplayObject_y); dict_put(d, &flash_sampler_DeleteObjectSample, &flash_sampler_DeleteObjectSample); dict_init2(&flash_sampler_DeleteObjectSample.members, &memberinfo_type, 8); dict_init2(&flash_sampler_DeleteObjectSample.static_members, &memberinfo_type, 8); dict_put(&flash_sampler_DeleteObjectSample.members, &flash_sampler_DeleteObjectSample_size, &flash_sampler_DeleteObjectSample_size); dict_put(&flash_sampler_DeleteObjectSample.members, &flash_sampler_DeleteObjectSample_id, &flash_sampler_DeleteObjectSample_id); dict_put(d, &flash_system_fscommand, &flash_system_fscommand); dict_put(d, &flash_utils_unescapeMultiByte, &flash_utils_unescapeMultiByte); dict_put(d, &flash_sampler_StackFrame, &flash_sampler_StackFrame); dict_init2(&flash_sampler_StackFrame.members, &memberinfo_type, 8); dict_init2(&flash_sampler_StackFrame.static_members, &memberinfo_type, 8); dict_put(&flash_sampler_StackFrame.members, &flash_sampler_StackFrame_name, &flash_sampler_StackFrame_name); dict_put(&flash_sampler_StackFrame.members, &flash_sampler_StackFrame_line, &flash_sampler_StackFrame_line); dict_put(&flash_sampler_StackFrame.members, &flash_sampler_StackFrame_toString, &flash_sampler_StackFrame_toString); dict_put(&flash_sampler_StackFrame.members, &flash_sampler_StackFrame_file, &flash_sampler_StackFrame_file); dict_put(d, &flash_system_JPEGLoaderContext, &flash_system_JPEGLoaderContext); dict_init2(&flash_system_JPEGLoaderContext.members, &memberinfo_type, 8); dict_init2(&flash_system_JPEGLoaderContext.static_members, &memberinfo_type, 8); dict_put(&flash_system_JPEGLoaderContext.members, &flash_system_JPEGLoaderContext_deblockingFilter, &flash_system_JPEGLoaderContext_deblockingFilter); dict_put(d, &flash_system_IME, &flash_system_IME); dict_init2(&flash_system_IME.members, &memberinfo_type, 8); dict_init2(&flash_system_IME.static_members, &memberinfo_type, 8); dict_put(&flash_system_IME.static_members, &flash_system_IME_setCompositionString, &flash_system_IME_setCompositionString); dict_put(&flash_system_IME.static_members, &flash_system_IME_enabled, &flash_system_IME_enabled); dict_put(&flash_system_IME.static_members, &flash_system_IME_doConversion, &flash_system_IME_doConversion); dict_put(&flash_system_IME.static_members, &flash_system_IME_conversionMode, &flash_system_IME_conversionMode); dict_put(d, &_isNaN, &_isNaN); dict_put(d, &flash_system_Security, &flash_system_Security); dict_init2(&flash_system_Security.members, &memberinfo_type, 8); dict_init2(&flash_system_Security.static_members, &memberinfo_type, 15); dict_put(&flash_system_Security.static_members, &flash_system_Security_sandboxType, &flash_system_Security_sandboxType); dict_put(&flash_system_Security.static_members, &flash_system_Security_LOCAL_WITH_NETWORK, &flash_system_Security_LOCAL_WITH_NETWORK); dict_put(&flash_system_Security.static_members, &flash_system_Security_loadPolicyFile, &flash_system_Security_loadPolicyFile); dict_put(&flash_system_Security.static_members, &flash_system_Security_allowDomain, &flash_system_Security_allowDomain); dict_put(&flash_system_Security.static_members, &flash_system_Security_showSettings, &flash_system_Security_showSettings); dict_put(&flash_system_Security.static_members, &flash_system_Security_LOCAL_TRUSTED, &flash_system_Security_LOCAL_TRUSTED); dict_put(&flash_system_Security.static_members, &flash_system_Security_disableAVM1Loading, &flash_system_Security_disableAVM1Loading); dict_put(&flash_system_Security.static_members, &flash_system_Security_allowInsecureDomain, &flash_system_Security_allowInsecureDomain); dict_put(&flash_system_Security.static_members, &flash_system_Security_exactSettings, &flash_system_Security_exactSettings); dict_put(&flash_system_Security.static_members, &flash_system_Security_REMOTE, &flash_system_Security_REMOTE); dict_put(&flash_system_Security.static_members, &flash_system_Security_LOCAL_WITH_FILE, &flash_system_Security_LOCAL_WITH_FILE); dict_put(d, &flash_display_Bitmap, &flash_display_Bitmap); dict_init2(&flash_display_Bitmap.members, &memberinfo_type, 8); dict_init2(&flash_display_Bitmap.static_members, &memberinfo_type, 8); dict_put(&flash_display_Bitmap.members, &flash_display_Bitmap_pixelSnapping, &flash_display_Bitmap_pixelSnapping); dict_put(&flash_display_Bitmap.members, &flash_display_Bitmap_bitmapData, &flash_display_Bitmap_bitmapData); dict_put(&flash_display_Bitmap.members, &flash_display_Bitmap_smoothing, &flash_display_Bitmap_smoothing); dict_put(d, &flash_printing_PrintJob, &flash_printing_PrintJob); dict_init2(&flash_printing_PrintJob.members, &memberinfo_type, 15); dict_init2(&flash_printing_PrintJob.static_members, &memberinfo_type, 8); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_paperWidth, &flash_printing_PrintJob_paperWidth); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_addPage, &flash_printing_PrintJob_addPage); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_pageHeight, &flash_printing_PrintJob_pageHeight); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_start, &flash_printing_PrintJob_start); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_pageWidth, &flash_printing_PrintJob_pageWidth); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_send, &flash_printing_PrintJob_send); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_paperHeight, &flash_printing_PrintJob_paperHeight); dict_put(&flash_printing_PrintJob.members, &flash_printing_PrintJob_orientation, &flash_printing_PrintJob_orientation); dict_put(d, &flash_text_StaticText, &flash_text_StaticText); dict_init2(&flash_text_StaticText.members, &memberinfo_type, 8); dict_init2(&flash_text_StaticText.static_members, &memberinfo_type, 8); dict_put(&flash_text_StaticText.members, &flash_text_StaticText_text, &flash_text_StaticText_text); dict_put(d, &flash_text_engine_SpaceJustifier, &flash_text_engine_SpaceJustifier); dict_init2(&flash_text_engine_SpaceJustifier.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_SpaceJustifier.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_SpaceJustifier.members, &flash_text_engine_SpaceJustifier_clone, &flash_text_engine_SpaceJustifier_clone); dict_put(&flash_text_engine_SpaceJustifier.members, &flash_text_engine_SpaceJustifier_letterSpacing, &flash_text_engine_SpaceJustifier_letterSpacing); dict_put(d, &flash_events_DataEvent, &flash_events_DataEvent); dict_init2(&flash_events_DataEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_DataEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_DataEvent.members, &flash_events_DataEvent_toString, &flash_events_DataEvent_toString); dict_put(&flash_events_DataEvent.members, &flash_events_DataEvent_clone, &flash_events_DataEvent_clone); dict_put(&flash_events_DataEvent.members, &flash_events_DataEvent_data, &flash_events_DataEvent_data); dict_put(&flash_events_DataEvent.static_members, &flash_events_DataEvent_DATA, &flash_events_DataEvent_DATA); dict_put(&flash_events_DataEvent.static_members, &flash_events_DataEvent_UPLOAD_COMPLETE_DATA, &flash_events_DataEvent_UPLOAD_COMPLETE_DATA); dict_put(d, &flash_events_ActivityEvent, &flash_events_ActivityEvent); dict_init2(&flash_events_ActivityEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_ActivityEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_ActivityEvent.members, &flash_events_ActivityEvent_toString, &flash_events_ActivityEvent_toString); dict_put(&flash_events_ActivityEvent.members, &flash_events_ActivityEvent_activating, &flash_events_ActivityEvent_activating); dict_put(&flash_events_ActivityEvent.members, &flash_events_ActivityEvent_clone, &flash_events_ActivityEvent_clone); dict_put(&flash_events_ActivityEvent.static_members, &flash_events_ActivityEvent_ACTIVITY, &flash_events_ActivityEvent_ACTIVITY); dict_put(d, &flash_display_GraphicsEndFill, &flash_display_GraphicsEndFill); dict_init2(&flash_display_GraphicsEndFill.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsEndFill.static_members, &memberinfo_type, 8); dict_put(d, &flash_display_ColorCorrection, &flash_display_ColorCorrection); dict_init2(&flash_display_ColorCorrection.members, &memberinfo_type, 8); dict_init2(&flash_display_ColorCorrection.static_members, &memberinfo_type, 8); dict_put(&flash_display_ColorCorrection.static_members, &flash_display_ColorCorrection_OFF, &flash_display_ColorCorrection_OFF); dict_put(&flash_display_ColorCorrection.static_members, &flash_display_ColorCorrection_DEFAULT, &flash_display_ColorCorrection_DEFAULT); dict_put(&flash_display_ColorCorrection.static_members, &flash_display_ColorCorrection_ON, &flash_display_ColorCorrection_ON); dict_put(d, &flash_events_IOErrorEvent, &flash_events_IOErrorEvent); dict_init2(&flash_events_IOErrorEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_IOErrorEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_IOErrorEvent.members, &flash_events_IOErrorEvent_toString, &flash_events_IOErrorEvent_toString); dict_put(&flash_events_IOErrorEvent.members, &flash_events_IOErrorEvent_clone, &flash_events_IOErrorEvent_clone); dict_put(&flash_events_IOErrorEvent.static_members, &flash_events_IOErrorEvent_IO_ERROR, &flash_events_IOErrorEvent_IO_ERROR); dict_put(&flash_events_IOErrorEvent.static_members, &flash_events_IOErrorEvent_VERIFY_ERROR, &flash_events_IOErrorEvent_VERIFY_ERROR); dict_put(&flash_events_IOErrorEvent.static_members, &flash_events_IOErrorEvent_NETWORK_ERROR, &flash_events_IOErrorEvent_NETWORK_ERROR); dict_put(&flash_events_IOErrorEvent.static_members, &flash_events_IOErrorEvent_DISK_ERROR, &flash_events_IOErrorEvent_DISK_ERROR); dict_put(d, &flash_display_GraphicsStroke, &flash_display_GraphicsStroke); dict_init2(&flash_display_GraphicsStroke.members, &memberinfo_type, 15); dict_init2(&flash_display_GraphicsStroke.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_scaleMode, &flash_display_GraphicsStroke_scaleMode); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_miterLimit, &flash_display_GraphicsStroke_miterLimit); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_pixelHinting, &flash_display_GraphicsStroke_pixelHinting); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_fill, &flash_display_GraphicsStroke_fill); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_thickness, &flash_display_GraphicsStroke_thickness); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_joints, &flash_display_GraphicsStroke_joints); dict_put(&flash_display_GraphicsStroke.members, &flash_display_GraphicsStroke_caps, &flash_display_GraphicsStroke_caps); dict_put(d, &_Boolean, &_Boolean); dict_init2(&_Boolean.members, &memberinfo_type, 8); dict_init2(&_Boolean.static_members, &memberinfo_type, 8); dict_put(&_Boolean.members, &_Boolean_valueOf, &_Boolean_valueOf); dict_put(&_Boolean.members, &_Boolean_toString, &_Boolean_toString); dict_put(&_Boolean.static_members, &_Boolean_length, &_Boolean_length); dict_put(d, &flash_sampler_getMemberNames, &flash_sampler_getMemberNames); dict_put(d, &flash_utils_getQualifiedClassName, &flash_utils_getQualifiedClassName); dict_put(d, &flash_text_engine_GraphicElement, &flash_text_engine_GraphicElement); dict_init2(&flash_text_engine_GraphicElement.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_GraphicElement.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_GraphicElement.members, &flash_text_engine_GraphicElement_graphic, &flash_text_engine_GraphicElement_graphic); dict_put(&flash_text_engine_GraphicElement.members, &flash_text_engine_GraphicElement_elementWidth, &flash_text_engine_GraphicElement_elementWidth); dict_put(&flash_text_engine_GraphicElement.members, &flash_text_engine_GraphicElement_elementHeight, &flash_text_engine_GraphicElement_elementHeight); dict_put(d, &flash_media_Microphone, &flash_media_Microphone); dict_init2(&flash_media_Microphone.members, &memberinfo_type, 31); dict_init2(&flash_media_Microphone.static_members, &memberinfo_type, 8); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_codec, &flash_media_Microphone_codec); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_gain, &flash_media_Microphone_gain); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_index, &flash_media_Microphone_index); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_setLoopBack, &flash_media_Microphone_setLoopBack); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_setSilenceLevel, &flash_media_Microphone_setSilenceLevel); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_name, &flash_media_Microphone_name); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_setUseEchoSuppression, &flash_media_Microphone_setUseEchoSuppression); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_framesPerPacket, &flash_media_Microphone_framesPerPacket); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_muted, &flash_media_Microphone_muted); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_soundTransform, &flash_media_Microphone_soundTransform); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_encodeQuality, &flash_media_Microphone_encodeQuality); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_useEchoSuppression, &flash_media_Microphone_useEchoSuppression); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_silenceLevel, &flash_media_Microphone_silenceLevel); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_silenceTimeout, &flash_media_Microphone_silenceTimeout); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_rate, &flash_media_Microphone_rate); dict_put(&flash_media_Microphone.members, &flash_media_Microphone_activityLevel, &flash_media_Microphone_activityLevel); dict_put(&flash_media_Microphone.static_members, &flash_media_Microphone_names, &flash_media_Microphone_names); dict_put(&flash_media_Microphone.static_members, &flash_media_Microphone_getMicrophone, &flash_media_Microphone_getMicrophone); dict_put(d, &flash_ui_ContextMenuClipboardItems, &flash_ui_ContextMenuClipboardItems); dict_init2(&flash_ui_ContextMenuClipboardItems.members, &memberinfo_type, 8); dict_init2(&flash_ui_ContextMenuClipboardItems.static_members, &memberinfo_type, 8); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_clear, &flash_ui_ContextMenuClipboardItems_clear); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_clone, &flash_ui_ContextMenuClipboardItems_clone); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_paste, &flash_ui_ContextMenuClipboardItems_paste); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_selectAll, &flash_ui_ContextMenuClipboardItems_selectAll); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_copy, &flash_ui_ContextMenuClipboardItems_copy); dict_put(&flash_ui_ContextMenuClipboardItems.members, &flash_ui_ContextMenuClipboardItems_cut, &flash_ui_ContextMenuClipboardItems_cut); dict_put(d, &flash_display_GraphicsShaderFill, &flash_display_GraphicsShaderFill); dict_init2(&flash_display_GraphicsShaderFill.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsShaderFill.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsShaderFill.members, &flash_display_GraphicsShaderFill_shader, &flash_display_GraphicsShaderFill_shader); dict_put(&flash_display_GraphicsShaderFill.members, &flash_display_GraphicsShaderFill_matrix, &flash_display_GraphicsShaderFill_matrix); dict_put(d, &flash_errors_IllegalOperationError, &flash_errors_IllegalOperationError); dict_init2(&flash_errors_IllegalOperationError.members, &memberinfo_type, 8); dict_init2(&flash_errors_IllegalOperationError.static_members, &memberinfo_type, 8); dict_put(d, &flash_filters_GradientGlowFilter, &flash_filters_GradientGlowFilter); dict_init2(&flash_filters_GradientGlowFilter.members, &memberinfo_type, 15); dict_init2(&flash_filters_GradientGlowFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_strength, &flash_filters_GradientGlowFilter_strength); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_quality, &flash_filters_GradientGlowFilter_quality); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_angle, &flash_filters_GradientGlowFilter_angle); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_knockout, &flash_filters_GradientGlowFilter_knockout); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_type, &flash_filters_GradientGlowFilter_type); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_alphas, &flash_filters_GradientGlowFilter_alphas); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_ratios, &flash_filters_GradientGlowFilter_ratios); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_colors, &flash_filters_GradientGlowFilter_colors); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_blurX, &flash_filters_GradientGlowFilter_blurX); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_blurY, &flash_filters_GradientGlowFilter_blurY); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_distance, &flash_filters_GradientGlowFilter_distance); dict_put(&flash_filters_GradientGlowFilter.members, &flash_filters_GradientGlowFilter_clone, &flash_filters_GradientGlowFilter_clone); dict_put(d, &flash_display_CapsStyle, &flash_display_CapsStyle); dict_init2(&flash_display_CapsStyle.members, &memberinfo_type, 8); dict_init2(&flash_display_CapsStyle.static_members, &memberinfo_type, 8); dict_put(&flash_display_CapsStyle.static_members, &flash_display_CapsStyle_ROUND, &flash_display_CapsStyle_ROUND); dict_put(&flash_display_CapsStyle.static_members, &flash_display_CapsStyle_SQUARE, &flash_display_CapsStyle_SQUARE); dict_put(&flash_display_CapsStyle.static_members, &flash_display_CapsStyle_NONE, &flash_display_CapsStyle_NONE); dict_put(d, &flash_text_TextSnapshot, &flash_text_TextSnapshot); dict_init2(&flash_text_TextSnapshot.members, &memberinfo_type, 15); dict_init2(&flash_text_TextSnapshot.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_setSelectColor, &flash_text_TextSnapshot_setSelectColor); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_setSelected, &flash_text_TextSnapshot_setSelected); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_getSelectedText, &flash_text_TextSnapshot_getSelectedText); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_getTextRunInfo, &flash_text_TextSnapshot_getTextRunInfo); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_charCount, &flash_text_TextSnapshot_charCount); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_findText, &flash_text_TextSnapshot_findText); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_getSelected, &flash_text_TextSnapshot_getSelected); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_hitTestTextNearPos, &flash_text_TextSnapshot_hitTestTextNearPos); dict_put(&flash_text_TextSnapshot.members, &flash_text_TextSnapshot_getText, &flash_text_TextSnapshot_getText); dict_put(d, &flash_text_engine_FontLookup, &flash_text_engine_FontLookup); dict_init2(&flash_text_engine_FontLookup.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_FontLookup.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_FontLookup.static_members, &flash_text_engine_FontLookup_DEVICE, &flash_text_engine_FontLookup_DEVICE); dict_put(&flash_text_engine_FontLookup.static_members, &flash_text_engine_FontLookup_EMBEDDED_CFF, &flash_text_engine_FontLookup_EMBEDDED_CFF); dict_put(d, &flash_display_InteractiveObject, &flash_display_InteractiveObject); dict_init2(&flash_display_InteractiveObject.members, &memberinfo_type, 15); dict_init2(&flash_display_InteractiveObject.static_members, &memberinfo_type, 8); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_tabIndex, &flash_display_InteractiveObject_tabIndex); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_doubleClickEnabled, &flash_display_InteractiveObject_doubleClickEnabled); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_tabEnabled, &flash_display_InteractiveObject_tabEnabled); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_mouseEnabled, &flash_display_InteractiveObject_mouseEnabled); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_contextMenu, &flash_display_InteractiveObject_contextMenu); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_focusRect, &flash_display_InteractiveObject_focusRect); dict_put(&flash_display_InteractiveObject.members, &flash_display_InteractiveObject_accessibilityImplementation, &flash_display_InteractiveObject_accessibilityImplementation); dict_put(d, &flash_text_TextField, &flash_text_TextField); dict_init2(&flash_text_TextField.members, &memberinfo_type, 127); dict_init2(&flash_text_TextField.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextField.members, &flash_text_TextField_getTextFormat, &flash_text_TextField_getTextFormat); dict_put(&flash_text_TextField.members, &flash_text_TextField_border, &flash_text_TextField_border); dict_put(&flash_text_TextField.members, &flash_text_TextField_selectedText, &flash_text_TextField_selectedText); dict_put(&flash_text_TextField.members, &flash_text_TextField_pasteRichText, &flash_text_TextField_pasteRichText); dict_put(&flash_text_TextField.members, &flash_text_TextField_bottomScrollV, &flash_text_TextField_bottomScrollV); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineIndexOfChar, &flash_text_TextField_getLineIndexOfChar); dict_put(&flash_text_TextField.members, &flash_text_TextField_replaceText, &flash_text_TextField_replaceText); dict_put(&flash_text_TextField.members, &flash_text_TextField_defaultTextFormat, &flash_text_TextField_defaultTextFormat); dict_put(&flash_text_TextField.members, &flash_text_TextField_restrict, &flash_text_TextField_restrict); dict_put(&flash_text_TextField.members, &flash_text_TextField_htmlText, &flash_text_TextField_htmlText); dict_put(&flash_text_TextField.members, &flash_text_TextField_copyRichText, &flash_text_TextField_copyRichText); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineText, &flash_text_TextField_getLineText); dict_put(&flash_text_TextField.members, &flash_text_TextField_getFirstCharInParagraph, &flash_text_TextField_getFirstCharInParagraph); dict_put(&flash_text_TextField.members, &flash_text_TextField_setSelection, &flash_text_TextField_setSelection); dict_put(&flash_text_TextField.members, &flash_text_TextField_length, &flash_text_TextField_length); dict_put(&flash_text_TextField.members, &flash_text_TextField_wordWrap, &flash_text_TextField_wordWrap); dict_put(&flash_text_TextField.members, &flash_text_TextField_appendText, &flash_text_TextField_appendText); dict_put(&flash_text_TextField.members, &flash_text_TextField_caretIndex, &flash_text_TextField_caretIndex); dict_put(&flash_text_TextField.members, &flash_text_TextField_mouseWheelEnabled, &flash_text_TextField_mouseWheelEnabled); dict_put(&flash_text_TextField.members, &flash_text_TextField_selectionBeginIndex, &flash_text_TextField_selectionBeginIndex); dict_put(&flash_text_TextField.members, &flash_text_TextField_sharpness, &flash_text_TextField_sharpness); dict_put(&flash_text_TextField.members, &flash_text_TextField_type, &flash_text_TextField_type); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineIndexAtPoint, &flash_text_TextField_getLineIndexAtPoint); dict_put(&flash_text_TextField.members, &flash_text_TextField_getCharIndexAtPoint, &flash_text_TextField_getCharIndexAtPoint); dict_put(&flash_text_TextField.members, &flash_text_TextField_getXMLText, &flash_text_TextField_getXMLText); dict_put(&flash_text_TextField.members, &flash_text_TextField_getParagraphLength, &flash_text_TextField_getParagraphLength); dict_put(&flash_text_TextField.members, &flash_text_TextField_getRawText, &flash_text_TextField_getRawText); dict_put(&flash_text_TextField.members, &flash_text_TextField_gridFitType, &flash_text_TextField_gridFitType); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineOffset, &flash_text_TextField_getLineOffset); dict_put(&flash_text_TextField.members, &flash_text_TextField_backgroundColor, &flash_text_TextField_backgroundColor); dict_put(&flash_text_TextField.members, &flash_text_TextField_multiline, &flash_text_TextField_multiline); dict_put(&flash_text_TextField.members, &flash_text_TextField_numLines, &flash_text_TextField_numLines); dict_put(&flash_text_TextField.members, &flash_text_TextField_getImageReference, &flash_text_TextField_getImageReference); dict_put(&flash_text_TextField.members, &flash_text_TextField_displayAsPassword, &flash_text_TextField_displayAsPassword); dict_put(&flash_text_TextField.members, &flash_text_TextField_textWidth, &flash_text_TextField_textWidth); dict_put(&flash_text_TextField.members, &flash_text_TextField_autoSize, &flash_text_TextField_autoSize); dict_put(&flash_text_TextField.members, &flash_text_TextField_selectable, &flash_text_TextField_selectable); dict_put(&flash_text_TextField.members, &flash_text_TextField_getCharBoundaries, &flash_text_TextField_getCharBoundaries); dict_put(&flash_text_TextField.members, &flash_text_TextField_alwaysShowSelection, &flash_text_TextField_alwaysShowSelection); dict_put(&flash_text_TextField.members, &flash_text_TextField_thickness, &flash_text_TextField_thickness); dict_put(&flash_text_TextField.members, &flash_text_TextField_useRichTextClipboard, &flash_text_TextField_useRichTextClipboard); dict_put(&flash_text_TextField.members, &flash_text_TextField_scrollV, &flash_text_TextField_scrollV); dict_put(&flash_text_TextField.members, &flash_text_TextField_getTextRuns, &flash_text_TextField_getTextRuns); dict_put(&flash_text_TextField.members, &flash_text_TextField_setTextFormat, &flash_text_TextField_setTextFormat); dict_put(&flash_text_TextField.members, &flash_text_TextField_textColor, &flash_text_TextField_textColor); dict_put(&flash_text_TextField.members, &flash_text_TextField_maxScrollV, &flash_text_TextField_maxScrollV); dict_put(&flash_text_TextField.members, &flash_text_TextField_embedFonts, &flash_text_TextField_embedFonts); dict_put(&flash_text_TextField.members, &flash_text_TextField_scrollH, &flash_text_TextField_scrollH); dict_put(&flash_text_TextField.members, &flash_text_TextField_text, &flash_text_TextField_text); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineLength, &flash_text_TextField_getLineLength); dict_put(&flash_text_TextField.members, &flash_text_TextField_textHeight, &flash_text_TextField_textHeight); dict_put(&flash_text_TextField.members, &flash_text_TextField_antiAliasType, &flash_text_TextField_antiAliasType); dict_put(&flash_text_TextField.members, &flash_text_TextField_styleSheet, &flash_text_TextField_styleSheet); dict_put(&flash_text_TextField.members, &flash_text_TextField_background, &flash_text_TextField_background); dict_put(&flash_text_TextField.members, &flash_text_TextField_replaceSelectedText, &flash_text_TextField_replaceSelectedText); dict_put(&flash_text_TextField.members, &flash_text_TextField_borderColor, &flash_text_TextField_borderColor); dict_put(&flash_text_TextField.members, &flash_text_TextField_maxScrollH, &flash_text_TextField_maxScrollH); dict_put(&flash_text_TextField.members, &flash_text_TextField_maxChars, &flash_text_TextField_maxChars); dict_put(&flash_text_TextField.members, &flash_text_TextField_getLineMetrics, &flash_text_TextField_getLineMetrics); dict_put(&flash_text_TextField.members, &flash_text_TextField_selectionEndIndex, &flash_text_TextField_selectionEndIndex); dict_put(&flash_text_TextField.members, &flash_text_TextField_insertXMLText, &flash_text_TextField_insertXMLText); dict_put(&flash_text_TextField.members, &flash_text_TextField_condenseWhite, &flash_text_TextField_condenseWhite); dict_put(&flash_text_TextField.static_members, &flash_text_TextField_isFontCompatible, &flash_text_TextField_isFontCompatible); dict_put(d, &flash_printing_PrintJobOrientation, &flash_printing_PrintJobOrientation); dict_init2(&flash_printing_PrintJobOrientation.members, &memberinfo_type, 8); dict_init2(&flash_printing_PrintJobOrientation.static_members, &memberinfo_type, 8); dict_put(&flash_printing_PrintJobOrientation.static_members, &flash_printing_PrintJobOrientation_LANDSCAPE, &flash_printing_PrintJobOrientation_LANDSCAPE); dict_put(&flash_printing_PrintJobOrientation.static_members, &flash_printing_PrintJobOrientation_PORTRAIT, &flash_printing_PrintJobOrientation_PORTRAIT); dict_put(d, &flash_text_TextRenderer, &flash_text_TextRenderer); dict_init2(&flash_text_TextRenderer.members, &memberinfo_type, 8); dict_init2(&flash_text_TextRenderer.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextRenderer.static_members, &flash_text_TextRenderer_displayMode, &flash_text_TextRenderer_displayMode); dict_put(&flash_text_TextRenderer.static_members, &flash_text_TextRenderer_antiAliasType, &flash_text_TextRenderer_antiAliasType); dict_put(&flash_text_TextRenderer.static_members, &flash_text_TextRenderer_maxLevel, &flash_text_TextRenderer_maxLevel); dict_put(&flash_text_TextRenderer.static_members, &flash_text_TextRenderer_setAdvancedAntiAliasingTable, &flash_text_TextRenderer_setAdvancedAntiAliasingTable); dict_put(d, &flash_net_NetConnection, &flash_net_NetConnection); dict_init2(&flash_net_NetConnection.members, &memberinfo_type, 31); dict_init2(&flash_net_NetConnection.static_members, &memberinfo_type, 8); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_nearID, &flash_net_NetConnection_nearID); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_client, &flash_net_NetConnection_client); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_farNonce, &flash_net_NetConnection_farNonce); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_objectEncoding, &flash_net_NetConnection_objectEncoding); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_farID, &flash_net_NetConnection_farID); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_connected, &flash_net_NetConnection_connected); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_call, &flash_net_NetConnection_call); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_usingTLS, &flash_net_NetConnection_usingTLS); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_proxyType, &flash_net_NetConnection_proxyType); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_addHeader, &flash_net_NetConnection_addHeader); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_protocol, &flash_net_NetConnection_protocol); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_close, &flash_net_NetConnection_close); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_nearNonce, &flash_net_NetConnection_nearNonce); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_connect, &flash_net_NetConnection_connect); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_unconnectedPeerStreams, &flash_net_NetConnection_unconnectedPeerStreams); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_maxPeerConnections, &flash_net_NetConnection_maxPeerConnections); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_connectedProxyType, &flash_net_NetConnection_connectedProxyType); dict_put(&flash_net_NetConnection.members, &flash_net_NetConnection_uri, &flash_net_NetConnection_uri); dict_put(&flash_net_NetConnection.static_members, &flash_net_NetConnection_defaultObjectEncoding, &flash_net_NetConnection_defaultObjectEncoding); dict_put(d, &_decodeURIComponent, &_decodeURIComponent); dict_put(d, &flash_sampler_isGetterSetter, &flash_sampler_isGetterSetter); dict_put(d, &flash_utils_getQualifiedSuperclassName, &flash_utils_getQualifiedSuperclassName); dict_put(d, &flash_display_GraphicsPathWinding, &flash_display_GraphicsPathWinding); dict_init2(&flash_display_GraphicsPathWinding.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsPathWinding.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsPathWinding.static_members, &flash_display_GraphicsPathWinding_EVEN_ODD, &flash_display_GraphicsPathWinding_EVEN_ODD); dict_put(&flash_display_GraphicsPathWinding.static_members, &flash_display_GraphicsPathWinding_NON_ZERO, &flash_display_GraphicsPathWinding_NON_ZERO); dict_put(d, &flash_text_engine_TabStop, &flash_text_engine_TabStop); dict_init2(&flash_text_engine_TabStop.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TabStop.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TabStop.members, &flash_text_engine_TabStop_alignment, &flash_text_engine_TabStop_alignment); dict_put(&flash_text_engine_TabStop.members, &flash_text_engine_TabStop_position, &flash_text_engine_TabStop_position); dict_put(&flash_text_engine_TabStop.members, &flash_text_engine_TabStop_decimalAlignmentToken, &flash_text_engine_TabStop_decimalAlignmentToken); dict_put(d, &flash_text_engine_JustificationStyle, &flash_text_engine_JustificationStyle); dict_init2(&flash_text_engine_JustificationStyle.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_JustificationStyle.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_JustificationStyle.static_members, &flash_text_engine_JustificationStyle_PUSH_OUT_ONLY, &flash_text_engine_JustificationStyle_PUSH_OUT_ONLY); dict_put(&flash_text_engine_JustificationStyle.static_members, &flash_text_engine_JustificationStyle_PRIORITIZE_LEAST_ADJUSTMENT, &flash_text_engine_JustificationStyle_PRIORITIZE_LEAST_ADJUSTMENT); dict_put(&flash_text_engine_JustificationStyle.static_members, &flash_text_engine_JustificationStyle_PUSH_IN_KINSOKU, &flash_text_engine_JustificationStyle_PUSH_IN_KINSOKU); dict_put(d, &flash_sampler_startSampling, &flash_sampler_startSampling); dict_put(d, &flash_text_engine_TextRotation, &flash_text_engine_TextRotation); dict_init2(&flash_text_engine_TextRotation.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextRotation.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextRotation.static_members, &flash_text_engine_TextRotation_ROTATE_270, &flash_text_engine_TextRotation_ROTATE_270); dict_put(&flash_text_engine_TextRotation.static_members, &flash_text_engine_TextRotation_AUTO, &flash_text_engine_TextRotation_AUTO); dict_put(&flash_text_engine_TextRotation.static_members, &flash_text_engine_TextRotation_ROTATE_0, &flash_text_engine_TextRotation_ROTATE_0); dict_put(&flash_text_engine_TextRotation.static_members, &flash_text_engine_TextRotation_ROTATE_90, &flash_text_engine_TextRotation_ROTATE_90); dict_put(&flash_text_engine_TextRotation.static_members, &flash_text_engine_TextRotation_ROTATE_180, &flash_text_engine_TextRotation_ROTATE_180); dict_put(d, &flash_sampler_clearSamples, &flash_sampler_clearSamples); dict_put(d, &flash_system_IMEConversionMode, &flash_system_IMEConversionMode); dict_init2(&flash_system_IMEConversionMode.members, &memberinfo_type, 8); dict_init2(&flash_system_IMEConversionMode.static_members, &memberinfo_type, 8); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_JAPANESE_KATAKANA_FULL, &flash_system_IMEConversionMode_JAPANESE_KATAKANA_FULL); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_CHINESE, &flash_system_IMEConversionMode_CHINESE); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_JAPANESE_KATAKANA_HALF, &flash_system_IMEConversionMode_JAPANESE_KATAKANA_HALF); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_UNKNOWN, &flash_system_IMEConversionMode_UNKNOWN); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_KOREAN, &flash_system_IMEConversionMode_KOREAN); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_ALPHANUMERIC_HALF, &flash_system_IMEConversionMode_ALPHANUMERIC_HALF); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_ALPHANUMERIC_FULL, &flash_system_IMEConversionMode_ALPHANUMERIC_FULL); dict_put(&flash_system_IMEConversionMode.static_members, &flash_system_IMEConversionMode_JAPANESE_HIRAGANA, &flash_system_IMEConversionMode_JAPANESE_HIRAGANA); dict_put(d, &flash_display_StageScaleMode, &flash_display_StageScaleMode); dict_init2(&flash_display_StageScaleMode.members, &memberinfo_type, 8); dict_init2(&flash_display_StageScaleMode.static_members, &memberinfo_type, 8); dict_put(&flash_display_StageScaleMode.static_members, &flash_display_StageScaleMode_SHOW_ALL, &flash_display_StageScaleMode_SHOW_ALL); dict_put(&flash_display_StageScaleMode.static_members, &flash_display_StageScaleMode_NO_BORDER, &flash_display_StageScaleMode_NO_BORDER); dict_put(&flash_display_StageScaleMode.static_members, &flash_display_StageScaleMode_EXACT_FIT, &flash_display_StageScaleMode_EXACT_FIT); dict_put(&flash_display_StageScaleMode.static_members, &flash_display_StageScaleMode_NO_SCALE, &flash_display_StageScaleMode_NO_SCALE); dict_put(d, &flash_sampler_getSize, &flash_sampler_getSize); dict_put(d, &flash_net_URLStream, &flash_net_URLStream); dict_init2(&flash_net_URLStream.members, &memberinfo_type, 31); dict_init2(&flash_net_URLStream.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readUTF, &flash_net_URLStream_readUTF); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readByte, &flash_net_URLStream_readByte); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readUTFBytes, &flash_net_URLStream_readUTFBytes); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readShort, &flash_net_URLStream_readShort); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_objectEncoding, &flash_net_URLStream_objectEncoding); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_connected, &flash_net_URLStream_connected); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readUnsignedInt, &flash_net_URLStream_readUnsignedInt); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readDouble, &flash_net_URLStream_readDouble); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readBytes, &flash_net_URLStream_readBytes); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readUnsignedByte, &flash_net_URLStream_readUnsignedByte); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readMultiByte, &flash_net_URLStream_readMultiByte); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readInt, &flash_net_URLStream_readInt); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_bytesAvailable, &flash_net_URLStream_bytesAvailable); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_load, &flash_net_URLStream_load); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_close, &flash_net_URLStream_close); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readUnsignedShort, &flash_net_URLStream_readUnsignedShort); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readObject, &flash_net_URLStream_readObject); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readFloat, &flash_net_URLStream_readFloat); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_endian, &flash_net_URLStream_endian); dict_put(&flash_net_URLStream.members, &flash_net_URLStream_readBoolean, &flash_net_URLStream_readBoolean); dict_put(d, &flash_display_BlendMode, &flash_display_BlendMode); dict_init2(&flash_display_BlendMode.members, &memberinfo_type, 8); dict_init2(&flash_display_BlendMode.static_members, &memberinfo_type, 31); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_LAYER, &flash_display_BlendMode_LAYER); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_ERASE, &flash_display_BlendMode_ERASE); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_HARDLIGHT, &flash_display_BlendMode_HARDLIGHT); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_OVERLAY, &flash_display_BlendMode_OVERLAY); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_ALPHA, &flash_display_BlendMode_ALPHA); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_SUBTRACT, &flash_display_BlendMode_SUBTRACT); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_INVERT, &flash_display_BlendMode_INVERT); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_DIFFERENCE, &flash_display_BlendMode_DIFFERENCE); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_DARKEN, &flash_display_BlendMode_DARKEN); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_SHADER, &flash_display_BlendMode_SHADER); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_MULTIPLY, &flash_display_BlendMode_MULTIPLY); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_ADD, &flash_display_BlendMode_ADD); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_SCREEN, &flash_display_BlendMode_SCREEN); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_NORMAL, &flash_display_BlendMode_NORMAL); dict_put(&flash_display_BlendMode.static_members, &flash_display_BlendMode_LIGHTEN, &flash_display_BlendMode_LIGHTEN); dict_put(d, &flash_ui_Mouse, &flash_ui_Mouse); dict_init2(&flash_ui_Mouse.members, &memberinfo_type, 8); dict_init2(&flash_ui_Mouse.static_members, &memberinfo_type, 8); dict_put(&flash_ui_Mouse.static_members, &flash_ui_Mouse_cursor, &flash_ui_Mouse_cursor); dict_put(&flash_ui_Mouse.static_members, &flash_ui_Mouse_show, &flash_ui_Mouse_show); dict_put(&flash_ui_Mouse.static_members, &flash_ui_Mouse_hide, &flash_ui_Mouse_hide); dict_put(d, &flash_errors_InvalidSWFError, &flash_errors_InvalidSWFError); dict_init2(&flash_errors_InvalidSWFError.members, &memberinfo_type, 8); dict_init2(&flash_errors_InvalidSWFError.static_members, &memberinfo_type, 8); dict_put(d, &flash_text_engine_RenderingMode, &flash_text_engine_RenderingMode); dict_init2(&flash_text_engine_RenderingMode.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_RenderingMode.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_RenderingMode.static_members, &flash_text_engine_RenderingMode_NORMAL, &flash_text_engine_RenderingMode_NORMAL); dict_put(&flash_text_engine_RenderingMode.static_members, &flash_text_engine_RenderingMode_CFF, &flash_text_engine_RenderingMode_CFF); dict_put(d, &flash_display_GraphicsTrianglePath, &flash_display_GraphicsTrianglePath); dict_init2(&flash_display_GraphicsTrianglePath.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsTrianglePath.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsTrianglePath.members, &flash_display_GraphicsTrianglePath_culling, &flash_display_GraphicsTrianglePath_culling); dict_put(&flash_display_GraphicsTrianglePath.members, &flash_display_GraphicsTrianglePath_vertices, &flash_display_GraphicsTrianglePath_vertices); dict_put(&flash_display_GraphicsTrianglePath.members, &flash_display_GraphicsTrianglePath_indices, &flash_display_GraphicsTrianglePath_indices); dict_put(&flash_display_GraphicsTrianglePath.members, &flash_display_GraphicsTrianglePath_uvtData, &flash_display_GraphicsTrianglePath_uvtData); dict_put(d, &flash_display_IGraphicsFill, &flash_display_IGraphicsFill); dict_init2(&flash_display_IGraphicsFill.members, &memberinfo_type, 8); dict_init2(&flash_display_IGraphicsFill.static_members, &memberinfo_type, 8); dict_put(d, &flash_text_engine_TypographicCase, &flash_text_engine_TypographicCase); dict_init2(&flash_text_engine_TypographicCase.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TypographicCase.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_UPPERCASE, &flash_text_engine_TypographicCase_UPPERCASE); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_DEFAULT, &flash_text_engine_TypographicCase_DEFAULT); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_LOWERCASE, &flash_text_engine_TypographicCase_LOWERCASE); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_SMALL_CAPS, &flash_text_engine_TypographicCase_SMALL_CAPS); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_TITLE, &flash_text_engine_TypographicCase_TITLE); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_CAPS, &flash_text_engine_TypographicCase_CAPS); dict_put(&flash_text_engine_TypographicCase.static_members, &flash_text_engine_TypographicCase_CAPS_AND_SMALL_CAPS, &flash_text_engine_TypographicCase_CAPS_AND_SMALL_CAPS); dict_put(d, &_XML, &_XML); dict_init2(&_XML.members, &memberinfo_type, 63); dict_init2(&_XML.static_members, &memberinfo_type, 15); dict_put(&_XML.members, &_XML_normalize, &_XML_normalize); dict_put(&_XML.members, &_XML_removeNamespace, &_XML_removeNamespace); dict_put(&_XML.members, &_XML_prependChild, &_XML_prependChild); dict_put(&_XML.members, &_XML_toXMLString, &_XML_toXMLString); dict_put(&_XML.members, &_XML_text, &_XML_text); dict_put(&_XML.members, &_XML_nodeKind, &_XML_nodeKind); dict_put(&_XML.members, &_XML_copy, &_XML_copy); dict_put(&_XML.members, &_XML_toString, &_XML_toString); dict_put(&_XML.members, &_XML_childIndex, &_XML_childIndex); dict_put(&_XML.members, &_XML_setName, &_XML_setName); dict_put(&_XML.members, &_XML_setLocalName, &_XML_setLocalName); dict_put(&_XML.members, &_XML_namespace, &_XML_namespace); dict_put(&_XML.members, &_XML_insertChildBefore, &_XML_insertChildBefore); dict_put(&_XML.members, &_XML_addNamespace, &_XML_addNamespace); dict_put(&_XML.members, &_XML_propertyIsEnumerable, &_XML_propertyIsEnumerable); dict_put(&_XML.members, &_XML_comments, &_XML_comments); dict_put(&_XML.members, &_XML_attributes, &_XML_attributes); dict_put(&_XML.members, &_XML_descendants, &_XML_descendants); dict_put(&_XML.members, &_XML_replace, &_XML_replace); dict_put(&_XML.members, &_XML_setNotification, &_XML_setNotification); dict_put(&_XML.members, &_XML_children, &_XML_children); dict_put(&_XML.members, &_XML_contains, &_XML_contains); dict_put(&_XML.members, &_XML_hasSimpleContent, &_XML_hasSimpleContent); dict_put(&_XML.members, &_XML_elements, &_XML_elements); dict_put(&_XML.members, &_XML_hasComplexContent, &_XML_hasComplexContent); dict_put(&_XML.members, &_XML_insertChildAfter, &_XML_insertChildAfter); dict_put(&_XML.members, &_XML_parent, &_XML_parent); dict_put(&_XML.members, &_XML_length, &_XML_length); dict_put(&_XML.members, &_XML_processingInstructions, &_XML_processingInstructions); dict_put(&_XML.members, &_XML_child, &_XML_child); dict_put(&_XML.members, &_XML_appendChild, &_XML_appendChild); dict_put(&_XML.members, &_XML_valueOf, &_XML_valueOf); dict_put(&_XML.members, &_XML_localName, &_XML_localName); dict_put(&_XML.members, &_XML_notification, &_XML_notification); dict_put(&_XML.members, &_XML_inScopeNamespaces, &_XML_inScopeNamespaces); dict_put(&_XML.members, &_XML_hasOwnProperty, &_XML_hasOwnProperty); dict_put(&_XML.members, &_XML_namespaceDeclarations, &_XML_namespaceDeclarations); dict_put(&_XML.members, &_XML_setNamespace, &_XML_setNamespace); dict_put(&_XML.members, &_XML_name, &_XML_name); dict_put(&_XML.members, &_XML_setChildren, &_XML_setChildren); dict_put(&_XML.members, &_XML_attribute, &_XML_attribute); dict_put(&_XML.static_members, &_XML_prettyPrinting, &_XML_prettyPrinting); dict_put(&_XML.static_members, &_XML_setSettings, &_XML_setSettings); dict_put(&_XML.static_members, &_XML_ignoreComments, &_XML_ignoreComments); dict_put(&_XML.static_members, &_XML_prettyIndent, &_XML_prettyIndent); dict_put(&_XML.static_members, &_XML_settings, &_XML_settings); dict_put(&_XML.static_members, &_XML_ignoreProcessingInstructions, &_XML_ignoreProcessingInstructions); dict_put(&_XML.static_members, &_XML_ignoreWhitespace, &_XML_ignoreWhitespace); dict_put(&_XML.static_members, &_XML_defaultSettings, &_XML_defaultSettings); dict_put(d, &flash_net_NetStreamInfo, &flash_net_NetStreamInfo); dict_init2(&flash_net_NetStreamInfo.members, &memberinfo_type, 31); dict_init2(&flash_net_NetStreamInfo.static_members, &memberinfo_type, 8); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_maxBytesPerSecond, &flash_net_NetStreamInfo_maxBytesPerSecond); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_dataBufferByteLength, &flash_net_NetStreamInfo_dataBufferByteLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_videoByteCount, &flash_net_NetStreamInfo_videoByteCount); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_videoBufferLength, &flash_net_NetStreamInfo_videoBufferLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_audioBufferByteLength, &flash_net_NetStreamInfo_audioBufferByteLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_dataBytesPerSecond, &flash_net_NetStreamInfo_dataBytesPerSecond); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_SRTT, &flash_net_NetStreamInfo_SRTT); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_droppedFrames, &flash_net_NetStreamInfo_droppedFrames); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_audioByteCount, &flash_net_NetStreamInfo_audioByteCount); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_audioBufferLength, &flash_net_NetStreamInfo_audioBufferLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_byteCount, &flash_net_NetStreamInfo_byteCount); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_toString, &flash_net_NetStreamInfo_toString); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_dataByteCount, &flash_net_NetStreamInfo_dataByteCount); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_videoBufferByteLength, &flash_net_NetStreamInfo_videoBufferByteLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_dataBufferLength, &flash_net_NetStreamInfo_dataBufferLength); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_audioLossRate, &flash_net_NetStreamInfo_audioLossRate); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_videoBytesPerSecond, &flash_net_NetStreamInfo_videoBytesPerSecond); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_currentBytesPerSecond, &flash_net_NetStreamInfo_currentBytesPerSecond); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_audioBytesPerSecond, &flash_net_NetStreamInfo_audioBytesPerSecond); dict_put(&flash_net_NetStreamInfo.members, &flash_net_NetStreamInfo_playbackBytesPerSecond, &flash_net_NetStreamInfo_playbackBytesPerSecond); dict_put(d, &flash_display_Stage, &flash_display_Stage); dict_init2(&flash_display_Stage.members, &memberinfo_type, 63); dict_init2(&flash_display_Stage.static_members, &memberinfo_type, 8); dict_put(&flash_display_Stage.members, &flash_display_Stage_setChildIndex, &flash_display_Stage_setChildIndex); dict_put(&flash_display_Stage.members, &flash_display_Stage_stageFocusRect, &flash_display_Stage_stageFocusRect); dict_put(&flash_display_Stage.members, &flash_display_Stage_frameRate, &flash_display_Stage_frameRate); dict_put(&flash_display_Stage.members, &flash_display_Stage_invalidate, &flash_display_Stage_invalidate); dict_put(&flash_display_Stage.members, &flash_display_Stage_textSnapshot, &flash_display_Stage_textSnapshot); dict_put(&flash_display_Stage.members, &flash_display_Stage_quality, &flash_display_Stage_quality); dict_put(&flash_display_Stage.members, &flash_display_Stage_willTrigger, &flash_display_Stage_willTrigger); dict_put(&flash_display_Stage.members, &flash_display_Stage_dispatchEvent, &flash_display_Stage_dispatchEvent); dict_put(&flash_display_Stage.members, &flash_display_Stage_isFocusInaccessible, &flash_display_Stage_isFocusInaccessible); dict_put(&flash_display_Stage.members, &flash_display_Stage_removeChildAt, &flash_display_Stage_removeChildAt); dict_put(&flash_display_Stage.members, &flash_display_Stage_fullScreenWidth, &flash_display_Stage_fullScreenWidth); dict_put(&flash_display_Stage.members, &flash_display_Stage_addChildAt, &flash_display_Stage_addChildAt); dict_put(&flash_display_Stage.members, &flash_display_Stage_height, &flash_display_Stage_height); dict_put(&flash_display_Stage.members, &flash_display_Stage_fullScreenSourceRect, &flash_display_Stage_fullScreenSourceRect); dict_put(&flash_display_Stage.members, &flash_display_Stage_width, &flash_display_Stage_width); dict_put(&flash_display_Stage.members, &flash_display_Stage_addChild, &flash_display_Stage_addChild); dict_put(&flash_display_Stage.members, &flash_display_Stage_numChildren, &flash_display_Stage_numChildren); dict_put(&flash_display_Stage.members, &flash_display_Stage_mouseChildren, &flash_display_Stage_mouseChildren); dict_put(&flash_display_Stage.members, &flash_display_Stage_swapChildrenAt, &flash_display_Stage_swapChildrenAt); dict_put(&flash_display_Stage.members, &flash_display_Stage_showDefaultContextMenu, &flash_display_Stage_showDefaultContextMenu); dict_put(&flash_display_Stage.members, &flash_display_Stage_addEventListener, &flash_display_Stage_addEventListener); dict_put(&flash_display_Stage.members, &flash_display_Stage_stageHeight, &flash_display_Stage_stageHeight); dict_put(&flash_display_Stage.members, &flash_display_Stage_fullScreenHeight, &flash_display_Stage_fullScreenHeight); dict_put(&flash_display_Stage.members, &flash_display_Stage_align, &flash_display_Stage_align); dict_put(&flash_display_Stage.members, &flash_display_Stage_hasEventListener, &flash_display_Stage_hasEventListener); dict_put(&flash_display_Stage.members, &flash_display_Stage_displayState, &flash_display_Stage_displayState); dict_put(&flash_display_Stage.members, &flash_display_Stage_scaleMode, &flash_display_Stage_scaleMode); dict_put(&flash_display_Stage.members, &flash_display_Stage_tabChildren, &flash_display_Stage_tabChildren); dict_put(&flash_display_Stage.members, &flash_display_Stage_focus, &flash_display_Stage_focus); dict_put(&flash_display_Stage.members, &flash_display_Stage_colorCorrection, &flash_display_Stage_colorCorrection); dict_put(&flash_display_Stage.members, &flash_display_Stage_colorCorrectionSupport, &flash_display_Stage_colorCorrectionSupport); dict_put(&flash_display_Stage.members, &flash_display_Stage_stageWidth, &flash_display_Stage_stageWidth); dict_put(d, &flash_ui_ContextMenuItem, &flash_ui_ContextMenuItem); dict_init2(&flash_ui_ContextMenuItem.members, &memberinfo_type, 8); dict_init2(&flash_ui_ContextMenuItem.static_members, &memberinfo_type, 8); dict_put(&flash_ui_ContextMenuItem.members, &flash_ui_ContextMenuItem_separatorBefore, &flash_ui_ContextMenuItem_separatorBefore); dict_put(&flash_ui_ContextMenuItem.members, &flash_ui_ContextMenuItem_enabled, &flash_ui_ContextMenuItem_enabled); dict_put(&flash_ui_ContextMenuItem.members, &flash_ui_ContextMenuItem_caption, &flash_ui_ContextMenuItem_caption); dict_put(&flash_ui_ContextMenuItem.members, &flash_ui_ContextMenuItem_clone, &flash_ui_ContextMenuItem_clone); dict_put(&flash_ui_ContextMenuItem.members, &flash_ui_ContextMenuItem_visible, &flash_ui_ContextMenuItem_visible); dict_put(d, &flash_trace_Trace, &flash_trace_Trace); dict_init2(&flash_trace_Trace.members, &memberinfo_type, 8); dict_init2(&flash_trace_Trace.static_members, &memberinfo_type, 15); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_METHODS_AND_LINES_WITH_ARGS, &flash_trace_Trace_METHODS_AND_LINES_WITH_ARGS); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_FILE, &flash_trace_Trace_FILE); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_METHODS_WITH_ARGS, &flash_trace_Trace_METHODS_WITH_ARGS); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_OFF, &flash_trace_Trace_OFF); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_METHODS_AND_LINES, &flash_trace_Trace_METHODS_AND_LINES); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_LISTENER, &flash_trace_Trace_LISTENER); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_getLevel, &flash_trace_Trace_getLevel); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_setLevel, &flash_trace_Trace_setLevel); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_setListener, &flash_trace_Trace_setListener); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_getListener, &flash_trace_Trace_getListener); dict_put(&flash_trace_Trace.static_members, &flash_trace_Trace_METHODS, &flash_trace_Trace_METHODS); dict_put(d, &flash_events_TimerEvent, &flash_events_TimerEvent); dict_init2(&flash_events_TimerEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_TimerEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_TimerEvent.members, &flash_events_TimerEvent_toString, &flash_events_TimerEvent_toString); dict_put(&flash_events_TimerEvent.members, &flash_events_TimerEvent_clone, &flash_events_TimerEvent_clone); dict_put(&flash_events_TimerEvent.members, &flash_events_TimerEvent_updateAfterEvent, &flash_events_TimerEvent_updateAfterEvent); dict_put(&flash_events_TimerEvent.static_members, &flash_events_TimerEvent_TIMER_COMPLETE, &flash_events_TimerEvent_TIMER_COMPLETE); dict_put(&flash_events_TimerEvent.static_members, &flash_events_TimerEvent_TIMER, &flash_events_TimerEvent_TIMER); dict_put(d, &flash_events_SampleDataEvent, &flash_events_SampleDataEvent); dict_init2(&flash_events_SampleDataEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_SampleDataEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_SampleDataEvent.members, &flash_events_SampleDataEvent_toString, &flash_events_SampleDataEvent_toString); dict_put(&flash_events_SampleDataEvent.members, &flash_events_SampleDataEvent_position, &flash_events_SampleDataEvent_position); dict_put(&flash_events_SampleDataEvent.members, &flash_events_SampleDataEvent_clone, &flash_events_SampleDataEvent_clone); dict_put(&flash_events_SampleDataEvent.members, &flash_events_SampleDataEvent_data, &flash_events_SampleDataEvent_data); dict_put(&flash_events_SampleDataEvent.static_members, &flash_events_SampleDataEvent_SAMPLE_DATA, &flash_events_SampleDataEvent_SAMPLE_DATA); dict_put(d, &flash_display_ShaderPrecision, &flash_display_ShaderPrecision); dict_init2(&flash_display_ShaderPrecision.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderPrecision.static_members, &memberinfo_type, 8); dict_put(&flash_display_ShaderPrecision.static_members, &flash_display_ShaderPrecision_FULL, &flash_display_ShaderPrecision_FULL); dict_put(&flash_display_ShaderPrecision.static_members, &flash_display_ShaderPrecision_FAST, &flash_display_ShaderPrecision_FAST); dict_put(d, &flash_net_FileReference, &flash_net_FileReference); dict_init2(&flash_net_FileReference.members, &memberinfo_type, 31); dict_init2(&flash_net_FileReference.static_members, &memberinfo_type, 8); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_type, &flash_net_FileReference_type); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_browse, &flash_net_FileReference_browse); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_creationDate, &flash_net_FileReference_creationDate); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_upload, &flash_net_FileReference_upload); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_download, &flash_net_FileReference_download); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_save, &flash_net_FileReference_save); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_cancel, &flash_net_FileReference_cancel); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_creator, &flash_net_FileReference_creator); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_data, &flash_net_FileReference_data); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_size, &flash_net_FileReference_size); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_name, &flash_net_FileReference_name); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_load, &flash_net_FileReference_load); dict_put(&flash_net_FileReference.members, &flash_net_FileReference_modificationDate, &flash_net_FileReference_modificationDate); dict_put(d, &_DefinitionError, &_DefinitionError); dict_init2(&_DefinitionError.members, &memberinfo_type, 8); dict_init2(&_DefinitionError.static_members, &memberinfo_type, 8); dict_put(&_DefinitionError.static_members, &_DefinitionError_length, &_DefinitionError_length); dict_put(d, &flash_events_EventDispatcher, &flash_events_EventDispatcher); dict_init2(&flash_events_EventDispatcher.members, &memberinfo_type, 8); dict_init2(&flash_events_EventDispatcher.static_members, &memberinfo_type, 8); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_willTrigger, &flash_events_EventDispatcher_willTrigger); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_toString, &flash_events_EventDispatcher_toString); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_removeEventListener, &flash_events_EventDispatcher_removeEventListener); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_hasEventListener, &flash_events_EventDispatcher_hasEventListener); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_addEventListener, &flash_events_EventDispatcher_addEventListener); dict_put(&flash_events_EventDispatcher.members, &flash_events_EventDispatcher_dispatchEvent, &flash_events_EventDispatcher_dispatchEvent); dict_put(d, &flash_net_SharedObjectFlushStatus, &flash_net_SharedObjectFlushStatus); dict_init2(&flash_net_SharedObjectFlushStatus.members, &memberinfo_type, 8); dict_init2(&flash_net_SharedObjectFlushStatus.static_members, &memberinfo_type, 8); dict_put(&flash_net_SharedObjectFlushStatus.static_members, &flash_net_SharedObjectFlushStatus_FLUSHED, &flash_net_SharedObjectFlushStatus_FLUSHED); dict_put(&flash_net_SharedObjectFlushStatus.static_members, &flash_net_SharedObjectFlushStatus_PENDING, &flash_net_SharedObjectFlushStatus_PENDING); dict_put(d, &flash_text_TextLineMetrics, &flash_text_TextLineMetrics); dict_init2(&flash_text_TextLineMetrics.members, &memberinfo_type, 8); dict_init2(&flash_text_TextLineMetrics.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_descent, &flash_text_TextLineMetrics_descent); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_width, &flash_text_TextLineMetrics_width); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_ascent, &flash_text_TextLineMetrics_ascent); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_leading, &flash_text_TextLineMetrics_leading); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_height, &flash_text_TextLineMetrics_height); dict_put(&flash_text_TextLineMetrics.members, &flash_text_TextLineMetrics_x, &flash_text_TextLineMetrics_x); dict_put(d, &flash_text_AntiAliasType, &flash_text_AntiAliasType); dict_init2(&flash_text_AntiAliasType.members, &memberinfo_type, 8); dict_init2(&flash_text_AntiAliasType.static_members, &memberinfo_type, 8); dict_put(&flash_text_AntiAliasType.static_members, &flash_text_AntiAliasType_NORMAL, &flash_text_AntiAliasType_NORMAL); dict_put(&flash_text_AntiAliasType.static_members, &flash_text_AntiAliasType_ADVANCED, &flash_text_AntiAliasType_ADVANCED); dict_put(d, &flash_system_SecurityDomain, &flash_system_SecurityDomain); dict_init2(&flash_system_SecurityDomain.members, &memberinfo_type, 8); dict_init2(&flash_system_SecurityDomain.static_members, &memberinfo_type, 8); dict_put(&flash_system_SecurityDomain.static_members, &flash_system_SecurityDomain_currentDomain, &flash_system_SecurityDomain_currentDomain); dict_put(d, &flash_text_Font, &flash_text_Font); dict_init2(&flash_text_Font.members, &memberinfo_type, 8); dict_init2(&flash_text_Font.static_members, &memberinfo_type, 8); dict_put(&flash_text_Font.members, &flash_text_Font_hasGlyphs, &flash_text_Font_hasGlyphs); dict_put(&flash_text_Font.members, &flash_text_Font_fontName, &flash_text_Font_fontName); dict_put(&flash_text_Font.members, &flash_text_Font_fontStyle, &flash_text_Font_fontStyle); dict_put(&flash_text_Font.members, &flash_text_Font_fontType, &flash_text_Font_fontType); dict_put(&flash_text_Font.static_members, &flash_text_Font_enumerateFonts, &flash_text_Font_enumerateFonts); dict_put(&flash_text_Font.static_members, &flash_text_Font_registerFont, &flash_text_Font_registerFont); dict_put(d, &_RegExp, &_RegExp); dict_init2(&_RegExp.members, &memberinfo_type, 8); dict_init2(&_RegExp.static_members, &memberinfo_type, 8); dict_put(&_RegExp.members, &_RegExp_source, &_RegExp_source); dict_put(&_RegExp.members, &_RegExp_test, &_RegExp_test); dict_put(&_RegExp.members, &_RegExp_global, &_RegExp_global); dict_put(&_RegExp.members, &_RegExp_exec, &_RegExp_exec); dict_put(&_RegExp.members, &_RegExp_ignoreCase, &_RegExp_ignoreCase); dict_put(&_RegExp.members, &_RegExp_dotall, &_RegExp_dotall); dict_put(&_RegExp.members, &_RegExp_lastIndex, &_RegExp_lastIndex); dict_put(&_RegExp.members, &_RegExp_extended, &_RegExp_extended); dict_put(&_RegExp.members, &_RegExp_multiline, &_RegExp_multiline); dict_put(&_RegExp.static_members, &_RegExp_length, &_RegExp_length); dict_put(d, &flash_accessibility_AccessibilityProperties, &flash_accessibility_AccessibilityProperties); dict_init2(&flash_accessibility_AccessibilityProperties.members, &memberinfo_type, 8); dict_init2(&flash_accessibility_AccessibilityProperties.static_members, &memberinfo_type, 8); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_forceSimple, &flash_accessibility_AccessibilityProperties_forceSimple); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_noAutoLabeling, &flash_accessibility_AccessibilityProperties_noAutoLabeling); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_description, &flash_accessibility_AccessibilityProperties_description); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_name, &flash_accessibility_AccessibilityProperties_name); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_shortcut, &flash_accessibility_AccessibilityProperties_shortcut); dict_put(&flash_accessibility_AccessibilityProperties.members, &flash_accessibility_AccessibilityProperties_silent, &flash_accessibility_AccessibilityProperties_silent); dict_put(d, &flash_ui_ContextMenu, &flash_ui_ContextMenu); dict_init2(&flash_ui_ContextMenu.members, &memberinfo_type, 8); dict_init2(&flash_ui_ContextMenu.static_members, &memberinfo_type, 8); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_hideBuiltInItems, &flash_ui_ContextMenu_hideBuiltInItems); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_clipboardItems, &flash_ui_ContextMenu_clipboardItems); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_builtInItems, &flash_ui_ContextMenu_builtInItems); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_customItems, &flash_ui_ContextMenu_customItems); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_clone, &flash_ui_ContextMenu_clone); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_link, &flash_ui_ContextMenu_link); dict_put(&flash_ui_ContextMenu.members, &flash_ui_ContextMenu_clipboardMenu, &flash_ui_ContextMenu_clipboardMenu); dict_put(d, &flash_text_TextFieldAutoSize, &flash_text_TextFieldAutoSize); dict_init2(&flash_text_TextFieldAutoSize.members, &memberinfo_type, 8); dict_init2(&flash_text_TextFieldAutoSize.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextFieldAutoSize.static_members, &flash_text_TextFieldAutoSize_LEFT, &flash_text_TextFieldAutoSize_LEFT); dict_put(&flash_text_TextFieldAutoSize.static_members, &flash_text_TextFieldAutoSize_RIGHT, &flash_text_TextFieldAutoSize_RIGHT); dict_put(&flash_text_TextFieldAutoSize.static_members, &flash_text_TextFieldAutoSize_CENTER, &flash_text_TextFieldAutoSize_CENTER); dict_put(&flash_text_TextFieldAutoSize.static_members, &flash_text_TextFieldAutoSize_NONE, &flash_text_TextFieldAutoSize_NONE); dict_put(d, &_Math, &_Math); dict_init2(&_Math.members, &memberinfo_type, 8); dict_init2(&_Math.static_members, &memberinfo_type, 63); dict_put(&_Math.static_members, &_Math_ceil, &_Math_ceil); dict_put(&_Math.static_members, &_Math_SQRT2, &_Math_SQRT2); dict_put(&_Math.static_members, &_Math_cos, &_Math_cos); dict_put(&_Math.static_members, &_Math_abs, &_Math_abs); dict_put(&_Math.static_members, &_Math_PI, &_Math_PI); dict_put(&_Math.static_members, &_Math_E, &_Math_E); dict_put(&_Math.static_members, &_Math_round, &_Math_round); dict_put(&_Math.static_members, &_Math_LN10, &_Math_LN10); dict_put(&_Math.static_members, &_Math_SQRT1_2, &_Math_SQRT1_2); dict_put(&_Math.static_members, &_Math_log, &_Math_log); dict_put(&_Math.static_members, &_Math_LOG10E, &_Math_LOG10E); dict_put(&_Math.static_members, &_Math_random, &_Math_random); dict_put(&_Math.static_members, &_Math_acos, &_Math_acos); dict_put(&_Math.static_members, &_Math_tan, &_Math_tan); dict_put(&_Math.static_members, &_Math_asin, &_Math_asin); dict_put(&_Math.static_members, &_Math_exp, &_Math_exp); dict_put(&_Math.static_members, &_Math_atan2, &_Math_atan2); dict_put(&_Math.static_members, &_Math_pow, &_Math_pow); dict_put(&_Math.static_members, &_Math_min, &_Math_min); dict_put(&_Math.static_members, &_Math_LN2, &_Math_LN2); dict_put(&_Math.static_members, &_Math_sin, &_Math_sin); dict_put(&_Math.static_members, &_Math_sqrt, &_Math_sqrt); dict_put(&_Math.static_members, &_Math_LOG2E, &_Math_LOG2E); dict_put(&_Math.static_members, &_Math_max, &_Math_max); dict_put(&_Math.static_members, &_Math_atan, &_Math_atan); dict_put(&_Math.static_members, &_Math_floor, &_Math_floor); dict_put(d, &flash_display_ColorCorrectionSupport, &flash_display_ColorCorrectionSupport); dict_init2(&flash_display_ColorCorrectionSupport.members, &memberinfo_type, 8); dict_init2(&flash_display_ColorCorrectionSupport.static_members, &memberinfo_type, 8); dict_put(&flash_display_ColorCorrectionSupport.static_members, &flash_display_ColorCorrectionSupport_UNSUPPORTED, &flash_display_ColorCorrectionSupport_UNSUPPORTED); dict_put(&flash_display_ColorCorrectionSupport.static_members, &flash_display_ColorCorrectionSupport_DEFAULT_ON, &flash_display_ColorCorrectionSupport_DEFAULT_ON); dict_put(&flash_display_ColorCorrectionSupport.static_members, &flash_display_ColorCorrectionSupport_DEFAULT_OFF, &flash_display_ColorCorrectionSupport_DEFAULT_OFF); dict_put(d, &flash_errors_IOError, &flash_errors_IOError); dict_init2(&flash_errors_IOError.members, &memberinfo_type, 8); dict_init2(&flash_errors_IOError.static_members, &memberinfo_type, 8); dict_put(d, &_trace, &_trace); dict_put(d, &flash_ui_ContextMenuBuiltInItems, &flash_ui_ContextMenuBuiltInItems); dict_init2(&flash_ui_ContextMenuBuiltInItems.members, &memberinfo_type, 8); dict_init2(&flash_ui_ContextMenuBuiltInItems.static_members, &memberinfo_type, 8); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_zoom, &flash_ui_ContextMenuBuiltInItems_zoom); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_save, &flash_ui_ContextMenuBuiltInItems_save); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_loop, &flash_ui_ContextMenuBuiltInItems_loop); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_print, &flash_ui_ContextMenuBuiltInItems_print); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_forwardAndBack, &flash_ui_ContextMenuBuiltInItems_forwardAndBack); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_rewind, &flash_ui_ContextMenuBuiltInItems_rewind); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_clone, &flash_ui_ContextMenuBuiltInItems_clone); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_quality, &flash_ui_ContextMenuBuiltInItems_quality); dict_put(&flash_ui_ContextMenuBuiltInItems.members, &flash_ui_ContextMenuBuiltInItems_play, &flash_ui_ContextMenuBuiltInItems_play); dict_put(d, &flash_net_FileReferenceList, &flash_net_FileReferenceList); dict_init2(&flash_net_FileReferenceList.members, &memberinfo_type, 8); dict_init2(&flash_net_FileReferenceList.static_members, &memberinfo_type, 8); dict_put(&flash_net_FileReferenceList.members, &flash_net_FileReferenceList_fileList, &flash_net_FileReferenceList_fileList); dict_put(&flash_net_FileReferenceList.members, &flash_net_FileReferenceList_browse, &flash_net_FileReferenceList_browse); dict_put(d, &flash_display_TriangleCulling, &flash_display_TriangleCulling); dict_init2(&flash_display_TriangleCulling.members, &memberinfo_type, 8); dict_init2(&flash_display_TriangleCulling.static_members, &memberinfo_type, 8); dict_put(&flash_display_TriangleCulling.static_members, &flash_display_TriangleCulling_POSITIVE, &flash_display_TriangleCulling_POSITIVE); dict_put(&flash_display_TriangleCulling.static_members, &flash_display_TriangleCulling_NEGATIVE, &flash_display_TriangleCulling_NEGATIVE); dict_put(&flash_display_TriangleCulling.static_members, &flash_display_TriangleCulling_NONE, &flash_display_TriangleCulling_NONE); dict_put(d, &flash_media_SoundMixer, &flash_media_SoundMixer); dict_init2(&flash_media_SoundMixer.members, &memberinfo_type, 8); dict_init2(&flash_media_SoundMixer.static_members, &memberinfo_type, 8); dict_put(&flash_media_SoundMixer.static_members, &flash_media_SoundMixer_computeSpectrum, &flash_media_SoundMixer_computeSpectrum); dict_put(&flash_media_SoundMixer.static_members, &flash_media_SoundMixer_areSoundsInaccessible, &flash_media_SoundMixer_areSoundsInaccessible); dict_put(&flash_media_SoundMixer.static_members, &flash_media_SoundMixer_soundTransform, &flash_media_SoundMixer_soundTransform); dict_put(&flash_media_SoundMixer.static_members, &flash_media_SoundMixer_bufferTime, &flash_media_SoundMixer_bufferTime); dict_put(&flash_media_SoundMixer.static_members, &flash_media_SoundMixer_stopAll, &flash_media_SoundMixer_stopAll); dict_put(d, &adobe_utils_XMLUI, &adobe_utils_XMLUI); dict_init2(&adobe_utils_XMLUI.members, &memberinfo_type, 8); dict_init2(&adobe_utils_XMLUI.static_members, &memberinfo_type, 8); dict_put(&adobe_utils_XMLUI.static_members, &adobe_utils_XMLUI_cancel, &adobe_utils_XMLUI_cancel); dict_put(&adobe_utils_XMLUI.static_members, &adobe_utils_XMLUI_setProperty, &adobe_utils_XMLUI_setProperty); dict_put(&adobe_utils_XMLUI.static_members, &adobe_utils_XMLUI_getProperty, &adobe_utils_XMLUI_getProperty); dict_put(&adobe_utils_XMLUI.static_members, &adobe_utils_XMLUI_accept, &adobe_utils_XMLUI_accept); dict_put(d, &_escape, &_escape); dict_put(d, &flash_utils_setInterval, &flash_utils_setInterval); dict_put(d, &flash_events_StatusEvent, &flash_events_StatusEvent); dict_init2(&flash_events_StatusEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_StatusEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_StatusEvent.members, &flash_events_StatusEvent_toString, &flash_events_StatusEvent_toString); dict_put(&flash_events_StatusEvent.members, &flash_events_StatusEvent_code, &flash_events_StatusEvent_code); dict_put(&flash_events_StatusEvent.members, &flash_events_StatusEvent_clone, &flash_events_StatusEvent_clone); dict_put(&flash_events_StatusEvent.members, &flash_events_StatusEvent_level, &flash_events_StatusEvent_level); dict_put(&flash_events_StatusEvent.static_members, &flash_events_StatusEvent_STATUS, &flash_events_StatusEvent_STATUS); dict_put(d, &flash_display_IGraphicsPath, &flash_display_IGraphicsPath); dict_init2(&flash_display_IGraphicsPath.members, &memberinfo_type, 8); dict_init2(&flash_display_IGraphicsPath.static_members, &memberinfo_type, 8); dict_put(d, &flash_events_ShaderEvent, &flash_events_ShaderEvent); dict_init2(&flash_events_ShaderEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_ShaderEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_ShaderEvent.members, &flash_events_ShaderEvent_vector, &flash_events_ShaderEvent_vector); dict_put(&flash_events_ShaderEvent.members, &flash_events_ShaderEvent_toString, &flash_events_ShaderEvent_toString); dict_put(&flash_events_ShaderEvent.members, &flash_events_ShaderEvent_bitmapData, &flash_events_ShaderEvent_bitmapData); dict_put(&flash_events_ShaderEvent.members, &flash_events_ShaderEvent_clone, &flash_events_ShaderEvent_clone); dict_put(&flash_events_ShaderEvent.members, &flash_events_ShaderEvent_byteArray, &flash_events_ShaderEvent_byteArray); dict_put(&flash_events_ShaderEvent.static_members, &flash_events_ShaderEvent_COMPLETE, &flash_events_ShaderEvent_COMPLETE); dict_put(d, &flash_display_Shader, &flash_display_Shader); dict_init2(&flash_display_Shader.members, &memberinfo_type, 8); dict_init2(&flash_display_Shader.static_members, &memberinfo_type, 8); dict_put(&flash_display_Shader.members, &flash_display_Shader_precisionHint, &flash_display_Shader_precisionHint); dict_put(&flash_display_Shader.members, &flash_display_Shader_data, &flash_display_Shader_data); dict_put(d, &flash_errors_StackOverflowError, &flash_errors_StackOverflowError); dict_init2(&flash_errors_StackOverflowError.members, &memberinfo_type, 8); dict_init2(&flash_errors_StackOverflowError.static_members, &memberinfo_type, 8); dict_put(d, &flash_sampler_getInvocationCount, &flash_sampler_getInvocationCount); dict_put(d, &flash_text_engine_Kerning, &flash_text_engine_Kerning); dict_init2(&flash_text_engine_Kerning.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_Kerning.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_Kerning.static_members, &flash_text_engine_Kerning_AUTO, &flash_text_engine_Kerning_AUTO); dict_put(&flash_text_engine_Kerning.static_members, &flash_text_engine_Kerning_OFF, &flash_text_engine_Kerning_OFF); dict_put(&flash_text_engine_Kerning.static_members, &flash_text_engine_Kerning_ON, &flash_text_engine_Kerning_ON); dict_put(d, &flash_text_CSMSettings, &flash_text_CSMSettings); dict_init2(&flash_text_CSMSettings.members, &memberinfo_type, 8); dict_init2(&flash_text_CSMSettings.static_members, &memberinfo_type, 8); dict_put(&flash_text_CSMSettings.members, &flash_text_CSMSettings_fontSize, &flash_text_CSMSettings_fontSize); dict_put(&flash_text_CSMSettings.members, &flash_text_CSMSettings_outsideCutoff, &flash_text_CSMSettings_outsideCutoff); dict_put(&flash_text_CSMSettings.members, &flash_text_CSMSettings_insideCutoff, &flash_text_CSMSettings_insideCutoff); dict_put(d, &_RangeError, &_RangeError); dict_init2(&_RangeError.members, &memberinfo_type, 8); dict_init2(&_RangeError.static_members, &memberinfo_type, 8); dict_put(&_RangeError.static_members, &_RangeError_length, &_RangeError_length); dict_put(d, &_Number, &_Number); dict_init2(&_Number.members, &memberinfo_type, 8); dict_init2(&_Number.static_members, &memberinfo_type, 8); dict_put(&_Number.members, &_Number_valueOf, &_Number_valueOf); dict_put(&_Number.members, &_Number_toString, &_Number_toString); dict_put(&_Number.members, &_Number_toExponential, &_Number_toExponential); dict_put(&_Number.members, &_Number_toFixed, &_Number_toFixed); dict_put(&_Number.members, &_Number_toPrecision, &_Number_toPrecision); dict_put(&_Number.static_members, &_Number_MAX_VALUE, &_Number_MAX_VALUE); dict_put(&_Number.static_members, &_Number_length, &_Number_length); dict_put(&_Number.static_members, &_Number_MIN_VALUE, &_Number_MIN_VALUE); dict_put(&_Number.static_members, &_Number_NaN, &_Number_NaN); dict_put(&_Number.static_members, &_Number_POSITIVE_INFINITY, &_Number_POSITIVE_INFINITY); dict_put(&_Number.static_members, &_Number_NEGATIVE_INFINITY, &_Number_NEGATIVE_INFINITY); dict_put(d, &flash_display_Graphics, &flash_display_Graphics); dict_init2(&flash_display_Graphics.members, &memberinfo_type, 63); dict_init2(&flash_display_Graphics.static_members, &memberinfo_type, 8); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawPath, &flash_display_Graphics_drawPath); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawEllipse, &flash_display_Graphics_drawEllipse); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawRoundRectComplex, &flash_display_Graphics_drawRoundRectComplex); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_moveTo, &flash_display_Graphics_moveTo); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_lineShaderStyle, &flash_display_Graphics_lineShaderStyle); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_beginFill, &flash_display_Graphics_beginFill); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_beginGradientFill, &flash_display_Graphics_beginGradientFill); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawGraphicsData, &flash_display_Graphics_drawGraphicsData); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_lineGradientStyle, &flash_display_Graphics_lineGradientStyle); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawRoundRect, &flash_display_Graphics_drawRoundRect); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_beginBitmapFill, &flash_display_Graphics_beginBitmapFill); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_lineStyle, &flash_display_Graphics_lineStyle); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_lineTo, &flash_display_Graphics_lineTo); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_endFill, &flash_display_Graphics_endFill); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_copyFrom, &flash_display_Graphics_copyFrom); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_lineBitmapStyle, &flash_display_Graphics_lineBitmapStyle); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_curveTo, &flash_display_Graphics_curveTo); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_clear, &flash_display_Graphics_clear); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawCircle, &flash_display_Graphics_drawCircle); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_beginShaderFill, &flash_display_Graphics_beginShaderFill); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawTriangles, &flash_display_Graphics_drawTriangles); dict_put(&flash_display_Graphics.members, &flash_display_Graphics_drawRect, &flash_display_Graphics_drawRect); dict_put(d, &_SyntaxError, &_SyntaxError); dict_init2(&_SyntaxError.members, &memberinfo_type, 8); dict_init2(&_SyntaxError.static_members, &memberinfo_type, 8); dict_put(&_SyntaxError.static_members, &_SyntaxError_length, &_SyntaxError_length); dict_put(d, &flash_sampler_NewObjectSample, &flash_sampler_NewObjectSample); dict_init2(&flash_sampler_NewObjectSample.members, &memberinfo_type, 8); dict_init2(&flash_sampler_NewObjectSample.static_members, &memberinfo_type, 8); dict_put(&flash_sampler_NewObjectSample.members, &flash_sampler_NewObjectSample_type, &flash_sampler_NewObjectSample_type); dict_put(&flash_sampler_NewObjectSample.members, &flash_sampler_NewObjectSample_object, &flash_sampler_NewObjectSample_object); dict_put(&flash_sampler_NewObjectSample.members, &flash_sampler_NewObjectSample_id, &flash_sampler_NewObjectSample_id); dict_put(d, &flash_net_FileFilter, &flash_net_FileFilter); dict_init2(&flash_net_FileFilter.members, &memberinfo_type, 8); dict_init2(&flash_net_FileFilter.static_members, &memberinfo_type, 8); dict_put(&flash_net_FileFilter.members, &flash_net_FileFilter_extension, &flash_net_FileFilter_extension); dict_put(&flash_net_FileFilter.members, &flash_net_FileFilter_description, &flash_net_FileFilter_description); dict_put(&flash_net_FileFilter.members, &flash_net_FileFilter_macType, &flash_net_FileFilter_macType); dict_put(d, &flash_display_BitmapDataChannel, &flash_display_BitmapDataChannel); dict_init2(&flash_display_BitmapDataChannel.members, &memberinfo_type, 8); dict_init2(&flash_display_BitmapDataChannel.static_members, &memberinfo_type, 8); dict_put(&flash_display_BitmapDataChannel.static_members, &flash_display_BitmapDataChannel_BLUE, &flash_display_BitmapDataChannel_BLUE); dict_put(&flash_display_BitmapDataChannel.static_members, &flash_display_BitmapDataChannel_GREEN, &flash_display_BitmapDataChannel_GREEN); dict_put(&flash_display_BitmapDataChannel.static_members, &flash_display_BitmapDataChannel_ALPHA, &flash_display_BitmapDataChannel_ALPHA); dict_put(&flash_display_BitmapDataChannel.static_members, &flash_display_BitmapDataChannel_RED, &flash_display_BitmapDataChannel_RED); dict_put(d, &flash_utils_clearInterval, &flash_utils_clearInterval); dict_put(d, &flash_text_engine_ContentElement, &flash_text_engine_ContentElement); dict_init2(&flash_text_engine_ContentElement.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_ContentElement.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_eventMirror, &flash_text_engine_ContentElement_eventMirror); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_groupElement, &flash_text_engine_ContentElement_groupElement); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_textRotation, &flash_text_engine_ContentElement_textRotation); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_text, &flash_text_engine_ContentElement_text); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_userData, &flash_text_engine_ContentElement_userData); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_elementFormat, &flash_text_engine_ContentElement_elementFormat); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_textBlock, &flash_text_engine_ContentElement_textBlock); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_rawText, &flash_text_engine_ContentElement_rawText); dict_put(&flash_text_engine_ContentElement.members, &flash_text_engine_ContentElement_textBlockBeginIndex, &flash_text_engine_ContentElement_textBlockBeginIndex); dict_put(&flash_text_engine_ContentElement.static_members, &flash_text_engine_ContentElement_GRAPHIC_ELEMENT, &flash_text_engine_ContentElement_GRAPHIC_ELEMENT); dict_put(d, &flash_utils_Endian, &flash_utils_Endian); dict_init2(&flash_utils_Endian.members, &memberinfo_type, 8); dict_init2(&flash_utils_Endian.static_members, &memberinfo_type, 8); dict_put(&flash_utils_Endian.static_members, &flash_utils_Endian_LITTLE_ENDIAN, &flash_utils_Endian_LITTLE_ENDIAN); dict_put(&flash_utils_Endian.static_members, &flash_utils_Endian_BIG_ENDIAN, &flash_utils_Endian_BIG_ENDIAN); dict_put(d, &flash_net_navigateToURL, &flash_net_navigateToURL); dict_put(d, &flash_events_ProgressEvent, &flash_events_ProgressEvent); dict_init2(&flash_events_ProgressEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_ProgressEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_ProgressEvent.members, &flash_events_ProgressEvent_bytesLoaded, &flash_events_ProgressEvent_bytesLoaded); dict_put(&flash_events_ProgressEvent.members, &flash_events_ProgressEvent_toString, &flash_events_ProgressEvent_toString); dict_put(&flash_events_ProgressEvent.members, &flash_events_ProgressEvent_bytesTotal, &flash_events_ProgressEvent_bytesTotal); dict_put(&flash_events_ProgressEvent.members, &flash_events_ProgressEvent_clone, &flash_events_ProgressEvent_clone); dict_put(&flash_events_ProgressEvent.static_members, &flash_events_ProgressEvent_PROGRESS, &flash_events_ProgressEvent_PROGRESS); dict_put(&flash_events_ProgressEvent.static_members, &flash_events_ProgressEvent_SOCKET_DATA, &flash_events_ProgressEvent_SOCKET_DATA); dict_put(d, &flash_media_Sound, &flash_media_Sound); dict_init2(&flash_media_Sound.members, &memberinfo_type, 15); dict_init2(&flash_media_Sound.static_members, &memberinfo_type, 8); dict_put(&flash_media_Sound.members, &flash_media_Sound_extract, &flash_media_Sound_extract); dict_put(&flash_media_Sound.members, &flash_media_Sound_bytesLoaded, &flash_media_Sound_bytesLoaded); dict_put(&flash_media_Sound.members, &flash_media_Sound_id3, &flash_media_Sound_id3); dict_put(&flash_media_Sound.members, &flash_media_Sound_play, &flash_media_Sound_play); dict_put(&flash_media_Sound.members, &flash_media_Sound_url, &flash_media_Sound_url); dict_put(&flash_media_Sound.members, &flash_media_Sound_isBuffering, &flash_media_Sound_isBuffering); dict_put(&flash_media_Sound.members, &flash_media_Sound_load, &flash_media_Sound_load); dict_put(&flash_media_Sound.members, &flash_media_Sound_bytesTotal, &flash_media_Sound_bytesTotal); dict_put(&flash_media_Sound.members, &flash_media_Sound_length, &flash_media_Sound_length); dict_put(&flash_media_Sound.members, &flash_media_Sound_close, &flash_media_Sound_close); dict_put(d, &flash_text_TextExtent, &flash_text_TextExtent); dict_init2(&flash_text_TextExtent.members, &memberinfo_type, 8); dict_init2(&flash_text_TextExtent.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_descent, &flash_text_TextExtent_descent); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_width, &flash_text_TextExtent_width); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_ascent, &flash_text_TextExtent_ascent); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_textFieldHeight, &flash_text_TextExtent_textFieldHeight); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_textFieldWidth, &flash_text_TextExtent_textFieldWidth); dict_put(&flash_text_TextExtent.members, &flash_text_TextExtent_height, &flash_text_TextExtent_height); dict_put(d, &flash_text_FontStyle, &flash_text_FontStyle); dict_init2(&flash_text_FontStyle.members, &memberinfo_type, 8); dict_init2(&flash_text_FontStyle.static_members, &memberinfo_type, 8); dict_put(&flash_text_FontStyle.static_members, &flash_text_FontStyle_REGULAR, &flash_text_FontStyle_REGULAR); dict_put(&flash_text_FontStyle.static_members, &flash_text_FontStyle_BOLD, &flash_text_FontStyle_BOLD); dict_put(&flash_text_FontStyle.static_members, &flash_text_FontStyle_BOLD_ITALIC, &flash_text_FontStyle_BOLD_ITALIC); dict_put(&flash_text_FontStyle.static_members, &flash_text_FontStyle_ITALIC, &flash_text_FontStyle_ITALIC); dict_put(d, &flash_text_engine_TextLineMirrorRegion, &flash_text_engine_TextLineMirrorRegion); dict_init2(&flash_text_engine_TextLineMirrorRegion.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextLineMirrorRegion.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_mirror, &flash_text_engine_TextLineMirrorRegion_mirror); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_previousRegion, &flash_text_engine_TextLineMirrorRegion_previousRegion); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_bounds, &flash_text_engine_TextLineMirrorRegion_bounds); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_nextRegion, &flash_text_engine_TextLineMirrorRegion_nextRegion); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_element, &flash_text_engine_TextLineMirrorRegion_element); dict_put(&flash_text_engine_TextLineMirrorRegion.members, &flash_text_engine_TextLineMirrorRegion_textLine, &flash_text_engine_TextLineMirrorRegion_textLine); dict_put(d, &flash_geom_Vector3D, &flash_geom_Vector3D); dict_init2(&flash_geom_Vector3D.members, &memberinfo_type, 31); dict_init2(&flash_geom_Vector3D.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_subtract, &flash_geom_Vector3D_subtract); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_scaleBy, &flash_geom_Vector3D_scaleBy); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_decrementBy, &flash_geom_Vector3D_decrementBy); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_equals, &flash_geom_Vector3D_equals); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_normalize, &flash_geom_Vector3D_normalize); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_dotProduct, &flash_geom_Vector3D_dotProduct); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_negate, &flash_geom_Vector3D_negate); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_toString, &flash_geom_Vector3D_toString); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_lengthSquared, &flash_geom_Vector3D_lengthSquared); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_x, &flash_geom_Vector3D_x); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_incrementBy, &flash_geom_Vector3D_incrementBy); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_w, &flash_geom_Vector3D_w); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_z, &flash_geom_Vector3D_z); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_add, &flash_geom_Vector3D_add); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_project, &flash_geom_Vector3D_project); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_crossProduct, &flash_geom_Vector3D_crossProduct); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_nearEquals, &flash_geom_Vector3D_nearEquals); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_clone, &flash_geom_Vector3D_clone); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_y, &flash_geom_Vector3D_y); dict_put(&flash_geom_Vector3D.members, &flash_geom_Vector3D_length, &flash_geom_Vector3D_length); dict_put(&flash_geom_Vector3D.static_members, &flash_geom_Vector3D_distance, &flash_geom_Vector3D_distance); dict_put(&flash_geom_Vector3D.static_members, &flash_geom_Vector3D_Z_AXIS, &flash_geom_Vector3D_Z_AXIS); dict_put(&flash_geom_Vector3D.static_members, &flash_geom_Vector3D_X_AXIS, &flash_geom_Vector3D_X_AXIS); dict_put(&flash_geom_Vector3D.static_members, &flash_geom_Vector3D_angleBetween, &flash_geom_Vector3D_angleBetween); dict_put(&flash_geom_Vector3D.static_members, &flash_geom_Vector3D_Y_AXIS, &flash_geom_Vector3D_Y_AXIS); dict_put(d, &flash_desktop_ClipboardTransferMode, &flash_desktop_ClipboardTransferMode); dict_init2(&flash_desktop_ClipboardTransferMode.members, &memberinfo_type, 8); dict_init2(&flash_desktop_ClipboardTransferMode.static_members, &memberinfo_type, 8); dict_put(&flash_desktop_ClipboardTransferMode.static_members, &flash_desktop_ClipboardTransferMode_CLONE_ONLY, &flash_desktop_ClipboardTransferMode_CLONE_ONLY); dict_put(&flash_desktop_ClipboardTransferMode.static_members, &flash_desktop_ClipboardTransferMode_ORIGINAL_PREFERRED, &flash_desktop_ClipboardTransferMode_ORIGINAL_PREFERRED); dict_put(&flash_desktop_ClipboardTransferMode.static_members, &flash_desktop_ClipboardTransferMode_CLONE_PREFERRED, &flash_desktop_ClipboardTransferMode_CLONE_PREFERRED); dict_put(&flash_desktop_ClipboardTransferMode.static_members, &flash_desktop_ClipboardTransferMode_ORIGINAL_ONLY, &flash_desktop_ClipboardTransferMode_ORIGINAL_ONLY); dict_put(d, &flash_display_SpreadMethod, &flash_display_SpreadMethod); dict_init2(&flash_display_SpreadMethod.members, &memberinfo_type, 8); dict_init2(&flash_display_SpreadMethod.static_members, &memberinfo_type, 8); dict_put(&flash_display_SpreadMethod.static_members, &flash_display_SpreadMethod_REFLECT, &flash_display_SpreadMethod_REFLECT); dict_put(&flash_display_SpreadMethod.static_members, &flash_display_SpreadMethod_REPEAT, &flash_display_SpreadMethod_REPEAT); dict_put(&flash_display_SpreadMethod.static_members, &flash_display_SpreadMethod_PAD, &flash_display_SpreadMethod_PAD); dict_put(d, &flash_system_SecurityPanel, &flash_system_SecurityPanel); dict_init2(&flash_system_SecurityPanel.members, &memberinfo_type, 8); dict_init2(&flash_system_SecurityPanel.static_members, &memberinfo_type, 8); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_LOCAL_STORAGE, &flash_system_SecurityPanel_LOCAL_STORAGE); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_CAMERA, &flash_system_SecurityPanel_CAMERA); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_DEFAULT, &flash_system_SecurityPanel_DEFAULT); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_SETTINGS_MANAGER, &flash_system_SecurityPanel_SETTINGS_MANAGER); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_PRIVACY, &flash_system_SecurityPanel_PRIVACY); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_MICROPHONE, &flash_system_SecurityPanel_MICROPHONE); dict_put(&flash_system_SecurityPanel.static_members, &flash_system_SecurityPanel_DISPLAY, &flash_system_SecurityPanel_DISPLAY); dict_put(d, &flash_events_HTTPStatusEvent, &flash_events_HTTPStatusEvent); dict_init2(&flash_events_HTTPStatusEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_HTTPStatusEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_HTTPStatusEvent.members, &flash_events_HTTPStatusEvent_toString, &flash_events_HTTPStatusEvent_toString); dict_put(&flash_events_HTTPStatusEvent.members, &flash_events_HTTPStatusEvent_clone, &flash_events_HTTPStatusEvent_clone); dict_put(&flash_events_HTTPStatusEvent.members, &flash_events_HTTPStatusEvent_status, &flash_events_HTTPStatusEvent_status); dict_put(&flash_events_HTTPStatusEvent.static_members, &flash_events_HTTPStatusEvent_HTTP_STATUS, &flash_events_HTTPStatusEvent_HTTP_STATUS); dict_put(d, &flash_net_NetStreamPlayOptions, &flash_net_NetStreamPlayOptions); dict_init2(&flash_net_NetStreamPlayOptions.members, &memberinfo_type, 8); dict_init2(&flash_net_NetStreamPlayOptions.static_members, &memberinfo_type, 8); dict_put(&flash_net_NetStreamPlayOptions.members, &flash_net_NetStreamPlayOptions_len, &flash_net_NetStreamPlayOptions_len); dict_put(&flash_net_NetStreamPlayOptions.members, &flash_net_NetStreamPlayOptions_streamName, &flash_net_NetStreamPlayOptions_streamName); dict_put(&flash_net_NetStreamPlayOptions.members, &flash_net_NetStreamPlayOptions_start, &flash_net_NetStreamPlayOptions_start); dict_put(&flash_net_NetStreamPlayOptions.members, &flash_net_NetStreamPlayOptions_oldStreamName, &flash_net_NetStreamPlayOptions_oldStreamName); dict_put(&flash_net_NetStreamPlayOptions.members, &flash_net_NetStreamPlayOptions_transition, &flash_net_NetStreamPlayOptions_transition); dict_put(d, &flash_net_Responder, &flash_net_Responder); dict_init2(&flash_net_Responder.members, &memberinfo_type, 8); dict_init2(&flash_net_Responder.static_members, &memberinfo_type, 8); dict_put(d, &flash_net_XMLSocket, &flash_net_XMLSocket); dict_init2(&flash_net_XMLSocket.members, &memberinfo_type, 8); dict_init2(&flash_net_XMLSocket.static_members, &memberinfo_type, 8); dict_put(&flash_net_XMLSocket.members, &flash_net_XMLSocket_close, &flash_net_XMLSocket_close); dict_put(&flash_net_XMLSocket.members, &flash_net_XMLSocket_connect, &flash_net_XMLSocket_connect); dict_put(&flash_net_XMLSocket.members, &flash_net_XMLSocket_send, &flash_net_XMLSocket_send); dict_put(&flash_net_XMLSocket.members, &flash_net_XMLSocket_connected, &flash_net_XMLSocket_connected); dict_put(&flash_net_XMLSocket.members, &flash_net_XMLSocket_timeout, &flash_net_XMLSocket_timeout); dict_put(d, &flash_filters_ConvolutionFilter, &flash_filters_ConvolutionFilter); dict_init2(&flash_filters_ConvolutionFilter.members, &memberinfo_type, 15); dict_init2(&flash_filters_ConvolutionFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_alpha, &flash_filters_ConvolutionFilter_alpha); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_matrixX, &flash_filters_ConvolutionFilter_matrixX); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_matrix, &flash_filters_ConvolutionFilter_matrix); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_bias, &flash_filters_ConvolutionFilter_bias); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_color, &flash_filters_ConvolutionFilter_color); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_preserveAlpha, &flash_filters_ConvolutionFilter_preserveAlpha); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_divisor, &flash_filters_ConvolutionFilter_divisor); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_clone, &flash_filters_ConvolutionFilter_clone); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_clamp, &flash_filters_ConvolutionFilter_clamp); dict_put(&flash_filters_ConvolutionFilter.members, &flash_filters_ConvolutionFilter_matrixY, &flash_filters_ConvolutionFilter_matrixY); dict_put(d, &flash_text_engine_ElementFormat, &flash_text_engine_ElementFormat); dict_init2(&flash_text_engine_ElementFormat.members, &memberinfo_type, 31); dict_init2(&flash_text_engine_ElementFormat.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_getFontMetrics, &flash_text_engine_ElementFormat_getFontMetrics); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_digitCase, &flash_text_engine_ElementFormat_digitCase); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_breakOpportunity, &flash_text_engine_ElementFormat_breakOpportunity); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_ligatureLevel, &flash_text_engine_ElementFormat_ligatureLevel); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_dominantBaseline, &flash_text_engine_ElementFormat_dominantBaseline); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_alignmentBaseline, &flash_text_engine_ElementFormat_alignmentBaseline); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_color, &flash_text_engine_ElementFormat_color); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_digitWidth, &flash_text_engine_ElementFormat_digitWidth); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_kerning, &flash_text_engine_ElementFormat_kerning); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_fontSize, &flash_text_engine_ElementFormat_fontSize); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_fontDescription, &flash_text_engine_ElementFormat_fontDescription); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_baselineShift, &flash_text_engine_ElementFormat_baselineShift); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_locale, &flash_text_engine_ElementFormat_locale); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_typographicCase, &flash_text_engine_ElementFormat_typographicCase); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_trackingLeft, &flash_text_engine_ElementFormat_trackingLeft); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_locked, &flash_text_engine_ElementFormat_locked); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_clone, &flash_text_engine_ElementFormat_clone); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_alpha, &flash_text_engine_ElementFormat_alpha); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_textRotation, &flash_text_engine_ElementFormat_textRotation); dict_put(&flash_text_engine_ElementFormat.members, &flash_text_engine_ElementFormat_trackingRight, &flash_text_engine_ElementFormat_trackingRight); dict_put(d, &flash_display_GraphicsGradientFill, &flash_display_GraphicsGradientFill); dict_init2(&flash_display_GraphicsGradientFill.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsGradientFill.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_interpolationMethod, &flash_display_GraphicsGradientFill_interpolationMethod); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_focalPointRatio, &flash_display_GraphicsGradientFill_focalPointRatio); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_colors, &flash_display_GraphicsGradientFill_colors); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_matrix, &flash_display_GraphicsGradientFill_matrix); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_type, &flash_display_GraphicsGradientFill_type); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_ratios, &flash_display_GraphicsGradientFill_ratios); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_spreadMethod, &flash_display_GraphicsGradientFill_spreadMethod); dict_put(&flash_display_GraphicsGradientFill.members, &flash_display_GraphicsGradientFill_alphas, &flash_display_GraphicsGradientFill_alphas); dict_put(d, &flash_display_FrameLabel, &flash_display_FrameLabel); dict_init2(&flash_display_FrameLabel.members, &memberinfo_type, 8); dict_init2(&flash_display_FrameLabel.static_members, &memberinfo_type, 8); dict_put(&flash_display_FrameLabel.members, &flash_display_FrameLabel_frame, &flash_display_FrameLabel_frame); dict_put(&flash_display_FrameLabel.members, &flash_display_FrameLabel_name, &flash_display_FrameLabel_name); dict_put(d, &flash_media_SoundTransform, &flash_media_SoundTransform); dict_init2(&flash_media_SoundTransform.members, &memberinfo_type, 8); dict_init2(&flash_media_SoundTransform.static_members, &memberinfo_type, 8); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_pan, &flash_media_SoundTransform_pan); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_leftToRight, &flash_media_SoundTransform_leftToRight); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_rightToLeft, &flash_media_SoundTransform_rightToLeft); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_volume, &flash_media_SoundTransform_volume); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_leftToLeft, &flash_media_SoundTransform_leftToLeft); dict_put(&flash_media_SoundTransform.members, &flash_media_SoundTransform_rightToRight, &flash_media_SoundTransform_rightToRight); dict_put(d, &_AS3, &_AS3); dict_put(d, &flash_net_LocalConnection, &flash_net_LocalConnection); dict_init2(&flash_net_LocalConnection.members, &memberinfo_type, 15); dict_init2(&flash_net_LocalConnection.static_members, &memberinfo_type, 8); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_client, &flash_net_LocalConnection_client); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_allowDomain, &flash_net_LocalConnection_allowDomain); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_connect, &flash_net_LocalConnection_connect); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_domain, &flash_net_LocalConnection_domain); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_allowInsecureDomain, &flash_net_LocalConnection_allowInsecureDomain); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_send, &flash_net_LocalConnection_send); dict_put(&flash_net_LocalConnection.members, &flash_net_LocalConnection_close, &flash_net_LocalConnection_close); dict_put(d, &flash_display_ShaderParameterType, &flash_display_ShaderParameterType); dict_init2(&flash_display_ShaderParameterType.members, &memberinfo_type, 8); dict_init2(&flash_display_ShaderParameterType.static_members, &memberinfo_type, 31); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_FLOAT, &flash_display_ShaderParameterType_FLOAT); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_BOOL, &flash_display_ShaderParameterType_BOOL); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_FLOAT2, &flash_display_ShaderParameterType_FLOAT2); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_MATRIX2X2, &flash_display_ShaderParameterType_MATRIX2X2); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_INT, &flash_display_ShaderParameterType_INT); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_INT4, &flash_display_ShaderParameterType_INT4); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_MATRIX4X4, &flash_display_ShaderParameterType_MATRIX4X4); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_FLOAT3, &flash_display_ShaderParameterType_FLOAT3); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_BOOL2, &flash_display_ShaderParameterType_BOOL2); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_INT3, &flash_display_ShaderParameterType_INT3); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_BOOL3, &flash_display_ShaderParameterType_BOOL3); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_BOOL4, &flash_display_ShaderParameterType_BOOL4); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_FLOAT4, &flash_display_ShaderParameterType_FLOAT4); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_INT2, &flash_display_ShaderParameterType_INT2); dict_put(&flash_display_ShaderParameterType.static_members, &flash_display_ShaderParameterType_MATRIX3X3, &flash_display_ShaderParameterType_MATRIX3X3); dict_put(d, &flash_events_IMEEvent, &flash_events_IMEEvent); dict_init2(&flash_events_IMEEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_IMEEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_IMEEvent.members, &flash_events_IMEEvent_toString, &flash_events_IMEEvent_toString); dict_put(&flash_events_IMEEvent.members, &flash_events_IMEEvent_clone, &flash_events_IMEEvent_clone); dict_put(&flash_events_IMEEvent.static_members, &flash_events_IMEEvent_IME_COMPOSITION, &flash_events_IMEEvent_IME_COMPOSITION); dict_put(d, &flash_text_TextFormatDisplay, &flash_text_TextFormatDisplay); dict_init2(&flash_text_TextFormatDisplay.members, &memberinfo_type, 8); dict_init2(&flash_text_TextFormatDisplay.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextFormatDisplay.static_members, &flash_text_TextFormatDisplay_INLINE, &flash_text_TextFormatDisplay_INLINE); dict_put(&flash_text_TextFormatDisplay.static_members, &flash_text_TextFormatDisplay_BLOCK, &flash_text_TextFormatDisplay_BLOCK); dict_put(d, &flash_profiler_profile, &flash_profiler_profile); dict_put(d, &flash_display_AVM1Movie, &flash_display_AVM1Movie); dict_init2(&flash_display_AVM1Movie.members, &memberinfo_type, 8); dict_init2(&flash_display_AVM1Movie.static_members, &memberinfo_type, 8); dict_put(&flash_display_AVM1Movie.members, &flash_display_AVM1Movie_call, &flash_display_AVM1Movie_call); dict_put(&flash_display_AVM1Movie.members, &flash_display_AVM1Movie_addCallback, &flash_display_AVM1Movie_addCallback); dict_put(d, &flash_events_ContextMenuEvent, &flash_events_ContextMenuEvent); dict_init2(&flash_events_ContextMenuEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_ContextMenuEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_ContextMenuEvent.members, &flash_events_ContextMenuEvent_mouseTarget, &flash_events_ContextMenuEvent_mouseTarget); dict_put(&flash_events_ContextMenuEvent.members, &flash_events_ContextMenuEvent_isMouseTargetInaccessible, &flash_events_ContextMenuEvent_isMouseTargetInaccessible); dict_put(&flash_events_ContextMenuEvent.members, &flash_events_ContextMenuEvent_toString, &flash_events_ContextMenuEvent_toString); dict_put(&flash_events_ContextMenuEvent.members, &flash_events_ContextMenuEvent_contextMenuOwner, &flash_events_ContextMenuEvent_contextMenuOwner); dict_put(&flash_events_ContextMenuEvent.members, &flash_events_ContextMenuEvent_clone, &flash_events_ContextMenuEvent_clone); dict_put(&flash_events_ContextMenuEvent.static_members, &flash_events_ContextMenuEvent_MENU_SELECT, &flash_events_ContextMenuEvent_MENU_SELECT); dict_put(&flash_events_ContextMenuEvent.static_members, &flash_events_ContextMenuEvent_MENU_ITEM_SELECT, &flash_events_ContextMenuEvent_MENU_ITEM_SELECT); dict_put(d, &flash_events_EventPhase, &flash_events_EventPhase); dict_init2(&flash_events_EventPhase.members, &memberinfo_type, 8); dict_init2(&flash_events_EventPhase.static_members, &memberinfo_type, 8); dict_put(&flash_events_EventPhase.static_members, &flash_events_EventPhase_BUBBLING_PHASE, &flash_events_EventPhase_BUBBLING_PHASE); dict_put(&flash_events_EventPhase.static_members, &flash_events_EventPhase_CAPTURING_PHASE, &flash_events_EventPhase_CAPTURING_PHASE); dict_put(&flash_events_EventPhase.static_members, &flash_events_EventPhase_AT_TARGET, &flash_events_EventPhase_AT_TARGET); dict_put(d, &flash_display_JointStyle, &flash_display_JointStyle); dict_init2(&flash_display_JointStyle.members, &memberinfo_type, 8); dict_init2(&flash_display_JointStyle.static_members, &memberinfo_type, 8); dict_put(&flash_display_JointStyle.static_members, &flash_display_JointStyle_ROUND, &flash_display_JointStyle_ROUND); dict_put(&flash_display_JointStyle.static_members, &flash_display_JointStyle_MITER, &flash_display_JointStyle_MITER); dict_put(&flash_display_JointStyle.static_members, &flash_display_JointStyle_BEVEL, &flash_display_JointStyle_BEVEL); dict_put(d, &flash_utils_Dictionary, &flash_utils_Dictionary); dict_init2(&flash_utils_Dictionary.members, &memberinfo_type, 8); dict_init2(&flash_utils_Dictionary.static_members, &memberinfo_type, 8); dict_put(d, &flash_display_GraphicsPathCommand, &flash_display_GraphicsPathCommand); dict_init2(&flash_display_GraphicsPathCommand.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsPathCommand.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_NO_OP, &flash_display_GraphicsPathCommand_NO_OP); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_MOVE_TO, &flash_display_GraphicsPathCommand_MOVE_TO); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_WIDE_MOVE_TO, &flash_display_GraphicsPathCommand_WIDE_MOVE_TO); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_CURVE_TO, &flash_display_GraphicsPathCommand_CURVE_TO); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_LINE_TO, &flash_display_GraphicsPathCommand_LINE_TO); dict_put(&flash_display_GraphicsPathCommand.static_members, &flash_display_GraphicsPathCommand_WIDE_LINE_TO, &flash_display_GraphicsPathCommand_WIDE_LINE_TO); dict_put(d, &flash_filters_BevelFilter, &flash_filters_BevelFilter); dict_init2(&flash_filters_BevelFilter.members, &memberinfo_type, 31); dict_init2(&flash_filters_BevelFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_type, &flash_filters_BevelFilter_type); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_highlightColor, &flash_filters_BevelFilter_highlightColor); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_knockout, &flash_filters_BevelFilter_knockout); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_distance, &flash_filters_BevelFilter_distance); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_strength, &flash_filters_BevelFilter_strength); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_highlightAlpha, &flash_filters_BevelFilter_highlightAlpha); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_blurY, &flash_filters_BevelFilter_blurY); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_shadowColor, &flash_filters_BevelFilter_shadowColor); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_angle, &flash_filters_BevelFilter_angle); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_blurX, &flash_filters_BevelFilter_blurX); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_shadowAlpha, &flash_filters_BevelFilter_shadowAlpha); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_quality, &flash_filters_BevelFilter_quality); dict_put(&flash_filters_BevelFilter.members, &flash_filters_BevelFilter_clone, &flash_filters_BevelFilter_clone); dict_put(d, &flash_utils_getTimer, &flash_utils_getTimer); dict_put(d, &flash_display_Loader, &flash_display_Loader); dict_init2(&flash_display_Loader.members, &memberinfo_type, 15); dict_init2(&flash_display_Loader.static_members, &memberinfo_type, 8); dict_put(&flash_display_Loader.members, &flash_display_Loader_content, &flash_display_Loader_content); dict_put(&flash_display_Loader.members, &flash_display_Loader_unloadAndStop, &flash_display_Loader_unloadAndStop); dict_put(&flash_display_Loader.members, &flash_display_Loader_unload, &flash_display_Loader_unload); dict_put(&flash_display_Loader.members, &flash_display_Loader_removeChildAt, &flash_display_Loader_removeChildAt); dict_put(&flash_display_Loader.members, &flash_display_Loader_addChildAt, &flash_display_Loader_addChildAt); dict_put(&flash_display_Loader.members, &flash_display_Loader_contentLoaderInfo, &flash_display_Loader_contentLoaderInfo); dict_put(&flash_display_Loader.members, &flash_display_Loader_loadBytes, &flash_display_Loader_loadBytes); dict_put(&flash_display_Loader.members, &flash_display_Loader_removeChild, &flash_display_Loader_removeChild); dict_put(&flash_display_Loader.members, &flash_display_Loader_load, &flash_display_Loader_load); dict_put(&flash_display_Loader.members, &flash_display_Loader_addChild, &flash_display_Loader_addChild); dict_put(&flash_display_Loader.members, &flash_display_Loader_close, &flash_display_Loader_close); dict_put(&flash_display_Loader.members, &flash_display_Loader_setChildIndex, &flash_display_Loader_setChildIndex); dict_put(d, &flash_display_GraphicsBitmapFill, &flash_display_GraphicsBitmapFill); dict_init2(&flash_display_GraphicsBitmapFill.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsBitmapFill.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsBitmapFill.members, &flash_display_GraphicsBitmapFill_smooth, &flash_display_GraphicsBitmapFill_smooth); dict_put(&flash_display_GraphicsBitmapFill.members, &flash_display_GraphicsBitmapFill_repeat, &flash_display_GraphicsBitmapFill_repeat); dict_put(&flash_display_GraphicsBitmapFill.members, &flash_display_GraphicsBitmapFill_bitmapData, &flash_display_GraphicsBitmapFill_bitmapData); dict_put(&flash_display_GraphicsBitmapFill.members, &flash_display_GraphicsBitmapFill_matrix, &flash_display_GraphicsBitmapFill_matrix); dict_put(d, &_undefined, &_undefined); dict_put(d, &flash_display_SimpleButton, &flash_display_SimpleButton); dict_init2(&flash_display_SimpleButton.members, &memberinfo_type, 8); dict_init2(&flash_display_SimpleButton.static_members, &memberinfo_type, 8); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_overState, &flash_display_SimpleButton_overState); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_downState, &flash_display_SimpleButton_downState); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_enabled, &flash_display_SimpleButton_enabled); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_trackAsMenu, &flash_display_SimpleButton_trackAsMenu); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_soundTransform, &flash_display_SimpleButton_soundTransform); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_useHandCursor, &flash_display_SimpleButton_useHandCursor); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_upState, &flash_display_SimpleButton_upState); dict_put(&flash_display_SimpleButton.members, &flash_display_SimpleButton_hitTestState, &flash_display_SimpleButton_hitTestState); dict_put(d, &flash_text_engine_TabAlignment, &flash_text_engine_TabAlignment); dict_init2(&flash_text_engine_TabAlignment.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TabAlignment.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TabAlignment.static_members, &flash_text_engine_TabAlignment_END, &flash_text_engine_TabAlignment_END); dict_put(&flash_text_engine_TabAlignment.static_members, &flash_text_engine_TabAlignment_CENTER, &flash_text_engine_TabAlignment_CENTER); dict_put(&flash_text_engine_TabAlignment.static_members, &flash_text_engine_TabAlignment_START, &flash_text_engine_TabAlignment_START); dict_put(&flash_text_engine_TabAlignment.static_members, &flash_text_engine_TabAlignment_DECIMAL, &flash_text_engine_TabAlignment_DECIMAL); dict_put(d, &flash_text_engine_FontWeight, &flash_text_engine_FontWeight); dict_init2(&flash_text_engine_FontWeight.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_FontWeight.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_FontWeight.static_members, &flash_text_engine_FontWeight_NORMAL, &flash_text_engine_FontWeight_NORMAL); dict_put(&flash_text_engine_FontWeight.static_members, &flash_text_engine_FontWeight_BOLD, &flash_text_engine_FontWeight_BOLD); dict_put(d, &flash_utils_describeType, &flash_utils_describeType); dict_put(d, &flash_display_PixelSnapping, &flash_display_PixelSnapping); dict_init2(&flash_display_PixelSnapping.members, &memberinfo_type, 8); dict_init2(&flash_display_PixelSnapping.static_members, &memberinfo_type, 8); dict_put(&flash_display_PixelSnapping.static_members, &flash_display_PixelSnapping_AUTO, &flash_display_PixelSnapping_AUTO); dict_put(&flash_display_PixelSnapping.static_members, &flash_display_PixelSnapping_NEVER, &flash_display_PixelSnapping_NEVER); dict_put(&flash_display_PixelSnapping.static_members, &flash_display_PixelSnapping_ALWAYS, &flash_display_PixelSnapping_ALWAYS); dict_put(d, &flash_events_FocusEvent, &flash_events_FocusEvent); dict_init2(&flash_events_FocusEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_FocusEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_keyCode, &flash_events_FocusEvent_keyCode); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_toString, &flash_events_FocusEvent_toString); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_isRelatedObjectInaccessible, &flash_events_FocusEvent_isRelatedObjectInaccessible); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_clone, &flash_events_FocusEvent_clone); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_shiftKey, &flash_events_FocusEvent_shiftKey); dict_put(&flash_events_FocusEvent.members, &flash_events_FocusEvent_relatedObject, &flash_events_FocusEvent_relatedObject); dict_put(&flash_events_FocusEvent.static_members, &flash_events_FocusEvent_FOCUS_IN, &flash_events_FocusEvent_FOCUS_IN); dict_put(&flash_events_FocusEvent.static_members, &flash_events_FocusEvent_FOCUS_OUT, &flash_events_FocusEvent_FOCUS_OUT); dict_put(&flash_events_FocusEvent.static_members, &flash_events_FocusEvent_KEY_FOCUS_CHANGE, &flash_events_FocusEvent_KEY_FOCUS_CHANGE); dict_put(&flash_events_FocusEvent.static_members, &flash_events_FocusEvent_MOUSE_FOCUS_CHANGE, &flash_events_FocusEvent_MOUSE_FOCUS_CHANGE); dict_put(d, &flash_errors_MemoryError, &flash_errors_MemoryError); dict_init2(&flash_errors_MemoryError.members, &memberinfo_type, 8); dict_init2(&flash_errors_MemoryError.static_members, &memberinfo_type, 8); dict_put(d, &flash_events_NetFilterEvent, &flash_events_NetFilterEvent); dict_init2(&flash_events_NetFilterEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_NetFilterEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_NetFilterEvent.members, &flash_events_NetFilterEvent_header, &flash_events_NetFilterEvent_header); dict_put(&flash_events_NetFilterEvent.members, &flash_events_NetFilterEvent_toString, &flash_events_NetFilterEvent_toString); dict_put(&flash_events_NetFilterEvent.members, &flash_events_NetFilterEvent_clone, &flash_events_NetFilterEvent_clone); dict_put(&flash_events_NetFilterEvent.members, &flash_events_NetFilterEvent_data, &flash_events_NetFilterEvent_data); dict_put(d, &_decodeURI, &_decodeURI); dict_put(d, &_encodeURI, &_encodeURI); dict_put(d, &flash_text_engine_TextBaseline, &flash_text_engine_TextBaseline); dict_init2(&flash_text_engine_TextBaseline.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextBaseline.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_ROMAN, &flash_text_engine_TextBaseline_ROMAN); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_DESCENT, &flash_text_engine_TextBaseline_DESCENT); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_IDEOGRAPHIC_CENTER, &flash_text_engine_TextBaseline_IDEOGRAPHIC_CENTER); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_USE_DOMINANT_BASELINE, &flash_text_engine_TextBaseline_USE_DOMINANT_BASELINE); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_IDEOGRAPHIC_BOTTOM, &flash_text_engine_TextBaseline_IDEOGRAPHIC_BOTTOM); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_ASCENT, &flash_text_engine_TextBaseline_ASCENT); dict_put(&flash_text_engine_TextBaseline.static_members, &flash_text_engine_TextBaseline_IDEOGRAPHIC_TOP, &flash_text_engine_TextBaseline_IDEOGRAPHIC_TOP); dict_put(d, &flash_external_ExternalInterface, &flash_external_ExternalInterface); dict_init2(&flash_external_ExternalInterface.members, &memberinfo_type, 8); dict_init2(&flash_external_ExternalInterface.static_members, &memberinfo_type, 8); dict_put(&flash_external_ExternalInterface.static_members, &flash_external_ExternalInterface_call, &flash_external_ExternalInterface_call); dict_put(&flash_external_ExternalInterface.static_members, &flash_external_ExternalInterface_available, &flash_external_ExternalInterface_available); dict_put(&flash_external_ExternalInterface.static_members, &flash_external_ExternalInterface_addCallback, &flash_external_ExternalInterface_addCallback); dict_put(&flash_external_ExternalInterface.static_members, &flash_external_ExternalInterface_marshallExceptions, &flash_external_ExternalInterface_marshallExceptions); dict_put(&flash_external_ExternalInterface.static_members, &flash_external_ExternalInterface_objectID, &flash_external_ExternalInterface_objectID); dict_put(d, &_EvalError, &_EvalError); dict_init2(&_EvalError.members, &memberinfo_type, 8); dict_init2(&_EvalError.static_members, &memberinfo_type, 8); dict_put(&_EvalError.static_members, &_EvalError_length, &_EvalError_length); dict_put(d, &flash_text_engine_DigitCase, &flash_text_engine_DigitCase); dict_init2(&flash_text_engine_DigitCase.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_DigitCase.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_DigitCase.static_members, &flash_text_engine_DigitCase_OLD_STYLE, &flash_text_engine_DigitCase_OLD_STYLE); dict_put(&flash_text_engine_DigitCase.static_members, &flash_text_engine_DigitCase_DEFAULT, &flash_text_engine_DigitCase_DEFAULT); dict_put(&flash_text_engine_DigitCase.static_members, &flash_text_engine_DigitCase_LINING, &flash_text_engine_DigitCase_LINING); dict_put(d, &flash_text_TextFormatAlign, &flash_text_TextFormatAlign); dict_init2(&flash_text_TextFormatAlign.members, &memberinfo_type, 8); dict_init2(&flash_text_TextFormatAlign.static_members, &memberinfo_type, 8); dict_put(&flash_text_TextFormatAlign.static_members, &flash_text_TextFormatAlign_LEFT, &flash_text_TextFormatAlign_LEFT); dict_put(&flash_text_TextFormatAlign.static_members, &flash_text_TextFormatAlign_RIGHT, &flash_text_TextFormatAlign_RIGHT); dict_put(&flash_text_TextFormatAlign.static_members, &flash_text_TextFormatAlign_CENTER, &flash_text_TextFormatAlign_CENTER); dict_put(&flash_text_TextFormatAlign.static_members, &flash_text_TextFormatAlign_JUSTIFY, &flash_text_TextFormatAlign_JUSTIFY); dict_put(d, &flash_errors_ScriptTimeoutError, &flash_errors_ScriptTimeoutError); dict_init2(&flash_errors_ScriptTimeoutError.members, &memberinfo_type, 8); dict_init2(&flash_errors_ScriptTimeoutError.static_members, &memberinfo_type, 8); dict_put(d, &_uint, &_uint); dict_init2(&_uint.members, &memberinfo_type, 8); dict_init2(&_uint.static_members, &memberinfo_type, 8); dict_put(&_uint.members, &_uint_valueOf, &_uint_valueOf); dict_put(&_uint.members, &_uint_toString, &_uint_toString); dict_put(&_uint.members, &_uint_toExponential, &_uint_toExponential); dict_put(&_uint.members, &_uint_toFixed, &_uint_toFixed); dict_put(&_uint.members, &_uint_toPrecision, &_uint_toPrecision); dict_put(&_uint.static_members, &_uint_MAX_VALUE, &_uint_MAX_VALUE); dict_put(&_uint.static_members, &_uint_length, &_uint_length); dict_put(&_uint.static_members, &_uint_MIN_VALUE, &_uint_MIN_VALUE); dict_put(d, &flash_debugger_enterDebugger, &flash_debugger_enterDebugger); dict_put(d, &flash_geom_Orientation3D, &flash_geom_Orientation3D); dict_init2(&flash_geom_Orientation3D.members, &memberinfo_type, 8); dict_init2(&flash_geom_Orientation3D.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Orientation3D.static_members, &flash_geom_Orientation3D_QUATERNION, &flash_geom_Orientation3D_QUATERNION); dict_put(&flash_geom_Orientation3D.static_members, &flash_geom_Orientation3D_EULER_ANGLES, &flash_geom_Orientation3D_EULER_ANGLES); dict_put(&flash_geom_Orientation3D.static_members, &flash_geom_Orientation3D_AXIS_ANGLE, &flash_geom_Orientation3D_AXIS_ANGLE); dict_put(d, &flash_text_engine_CFFHinting, &flash_text_engine_CFFHinting); dict_init2(&flash_text_engine_CFFHinting.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_CFFHinting.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_CFFHinting.static_members, &flash_text_engine_CFFHinting_HORIZONTAL_STEM, &flash_text_engine_CFFHinting_HORIZONTAL_STEM); dict_put(&flash_text_engine_CFFHinting.static_members, &flash_text_engine_CFFHinting_NONE, &flash_text_engine_CFFHinting_NONE); dict_put(d, &flash_text_FontType, &flash_text_FontType); dict_init2(&flash_text_FontType.members, &memberinfo_type, 8); dict_init2(&flash_text_FontType.static_members, &memberinfo_type, 8); dict_put(&flash_text_FontType.static_members, &flash_text_FontType_EMBEDDED, &flash_text_FontType_EMBEDDED); dict_put(&flash_text_FontType.static_members, &flash_text_FontType_DEVICE, &flash_text_FontType_DEVICE); dict_put(&flash_text_FontType.static_members, &flash_text_FontType_EMBEDDED_CFF, &flash_text_FontType_EMBEDDED_CFF); dict_put(d, &flash_filters_ShaderFilter, &flash_filters_ShaderFilter); dict_init2(&flash_filters_ShaderFilter.members, &memberinfo_type, 8); dict_init2(&flash_filters_ShaderFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_ShaderFilter.members, &flash_filters_ShaderFilter_bottomExtension, &flash_filters_ShaderFilter_bottomExtension); dict_put(&flash_filters_ShaderFilter.members, &flash_filters_ShaderFilter_shader, &flash_filters_ShaderFilter_shader); dict_put(&flash_filters_ShaderFilter.members, &flash_filters_ShaderFilter_rightExtension, &flash_filters_ShaderFilter_rightExtension); dict_put(&flash_filters_ShaderFilter.members, &flash_filters_ShaderFilter_leftExtension, &flash_filters_ShaderFilter_leftExtension); dict_put(&flash_filters_ShaderFilter.members, &flash_filters_ShaderFilter_topExtension, &flash_filters_ShaderFilter_topExtension); dict_put(d, &flash_display_GraphicsPath, &flash_display_GraphicsPath); dict_init2(&flash_display_GraphicsPath.members, &memberinfo_type, 8); dict_init2(&flash_display_GraphicsPath.static_members, &memberinfo_type, 8); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_wideMoveTo, &flash_display_GraphicsPath_wideMoveTo); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_winding, &flash_display_GraphicsPath_winding); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_moveTo, &flash_display_GraphicsPath_moveTo); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_wideLineTo, &flash_display_GraphicsPath_wideLineTo); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_commands, &flash_display_GraphicsPath_commands); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_curveTo, &flash_display_GraphicsPath_curveTo); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_lineTo, &flash_display_GraphicsPath_lineTo); dict_put(&flash_display_GraphicsPath.members, &flash_display_GraphicsPath_data, &flash_display_GraphicsPath_data); dict_put(d, &flash_system_ApplicationDomain, &flash_system_ApplicationDomain); dict_init2(&flash_system_ApplicationDomain.members, &memberinfo_type, 8); dict_init2(&flash_system_ApplicationDomain.static_members, &memberinfo_type, 8); dict_put(&flash_system_ApplicationDomain.members, &flash_system_ApplicationDomain_hasDefinition, &flash_system_ApplicationDomain_hasDefinition); dict_put(&flash_system_ApplicationDomain.members, &flash_system_ApplicationDomain_getDefinition, &flash_system_ApplicationDomain_getDefinition); dict_put(&flash_system_ApplicationDomain.members, &flash_system_ApplicationDomain_parentDomain, &flash_system_ApplicationDomain_parentDomain); dict_put(&flash_system_ApplicationDomain.members, &flash_system_ApplicationDomain_domainMemory, &flash_system_ApplicationDomain_domainMemory); dict_put(&flash_system_ApplicationDomain.static_members, &flash_system_ApplicationDomain_MIN_DOMAIN_MEMORY_LENGTH, &flash_system_ApplicationDomain_MIN_DOMAIN_MEMORY_LENGTH); dict_put(&flash_system_ApplicationDomain.static_members, &flash_system_ApplicationDomain_currentDomain, &flash_system_ApplicationDomain_currentDomain); dict_put(d, &flash_events_KeyboardEvent, &flash_events_KeyboardEvent); dict_init2(&flash_events_KeyboardEvent.members, &memberinfo_type, 15); dict_init2(&flash_events_KeyboardEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_shiftKey, &flash_events_KeyboardEvent_shiftKey); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_keyCode, &flash_events_KeyboardEvent_keyCode); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_keyLocation, &flash_events_KeyboardEvent_keyLocation); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_updateAfterEvent, &flash_events_KeyboardEvent_updateAfterEvent); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_toString, &flash_events_KeyboardEvent_toString); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_altKey, &flash_events_KeyboardEvent_altKey); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_ctrlKey, &flash_events_KeyboardEvent_ctrlKey); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_clone, &flash_events_KeyboardEvent_clone); dict_put(&flash_events_KeyboardEvent.members, &flash_events_KeyboardEvent_charCode, &flash_events_KeyboardEvent_charCode); dict_put(&flash_events_KeyboardEvent.static_members, &flash_events_KeyboardEvent_KEY_DOWN, &flash_events_KeyboardEvent_KEY_DOWN); dict_put(&flash_events_KeyboardEvent.static_members, &flash_events_KeyboardEvent_KEY_UP, &flash_events_KeyboardEvent_KEY_UP); dict_put(d, &adobe_utils_ProductManager, &adobe_utils_ProductManager); dict_init2(&adobe_utils_ProductManager.members, &memberinfo_type, 8); dict_init2(&adobe_utils_ProductManager.static_members, &memberinfo_type, 8); dict_put(&adobe_utils_ProductManager.members, &adobe_utils_ProductManager_running, &adobe_utils_ProductManager_running); dict_put(&adobe_utils_ProductManager.members, &adobe_utils_ProductManager_download, &adobe_utils_ProductManager_download); dict_put(&adobe_utils_ProductManager.members, &adobe_utils_ProductManager_installedVersion, &adobe_utils_ProductManager_installedVersion); dict_put(&adobe_utils_ProductManager.members, &adobe_utils_ProductManager_installed, &adobe_utils_ProductManager_installed); dict_put(&adobe_utils_ProductManager.members, &adobe_utils_ProductManager_launch, &adobe_utils_ProductManager_launch); dict_put(d, &flash_events_Event, &flash_events_Event); dict_init2(&flash_events_Event.members, &memberinfo_type, 31); dict_init2(&flash_events_Event.static_members, &memberinfo_type, 63); dict_put(&flash_events_Event.members, &flash_events_Event_type, &flash_events_Event_type); dict_put(&flash_events_Event.members, &flash_events_Event_cancelable, &flash_events_Event_cancelable); dict_put(&flash_events_Event.members, &flash_events_Event_isDefaultPrevented, &flash_events_Event_isDefaultPrevented); dict_put(&flash_events_Event.members, &flash_events_Event_target, &flash_events_Event_target); dict_put(&flash_events_Event.members, &flash_events_Event_eventPhase, &flash_events_Event_eventPhase); dict_put(&flash_events_Event.members, &flash_events_Event_currentTarget, &flash_events_Event_currentTarget); dict_put(&flash_events_Event.members, &flash_events_Event_toString, &flash_events_Event_toString); dict_put(&flash_events_Event.members, &flash_events_Event_stopImmediatePropagation, &flash_events_Event_stopImmediatePropagation); dict_put(&flash_events_Event.members, &flash_events_Event_bubbles, &flash_events_Event_bubbles); dict_put(&flash_events_Event.members, &flash_events_Event_stopPropagation, &flash_events_Event_stopPropagation); dict_put(&flash_events_Event.members, &flash_events_Event_clone, &flash_events_Event_clone); dict_put(&flash_events_Event.members, &flash_events_Event_preventDefault, &flash_events_Event_preventDefault); dict_put(&flash_events_Event.members, &flash_events_Event_formatToString, &flash_events_Event_formatToString); dict_put(&flash_events_Event.static_members, &flash_events_Event_REMOVED_FROM_STAGE, &flash_events_Event_REMOVED_FROM_STAGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_CLEAR, &flash_events_Event_CLEAR); dict_put(&flash_events_Event.static_members, &flash_events_Event_OPEN, &flash_events_Event_OPEN); dict_put(&flash_events_Event.static_members, &flash_events_Event_TAB_CHILDREN_CHANGE, &flash_events_Event_TAB_CHILDREN_CHANGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_DEACTIVATE, &flash_events_Event_DEACTIVATE); dict_put(&flash_events_Event.static_members, &flash_events_Event_ACTIVATE, &flash_events_Event_ACTIVATE); dict_put(&flash_events_Event.static_members, &flash_events_Event_SOUND_COMPLETE, &flash_events_Event_SOUND_COMPLETE); dict_put(&flash_events_Event.static_members, &flash_events_Event_CANCEL, &flash_events_Event_CANCEL); dict_put(&flash_events_Event.static_members, &flash_events_Event_REMOVED, &flash_events_Event_REMOVED); dict_put(&flash_events_Event.static_members, &flash_events_Event_INIT, &flash_events_Event_INIT); dict_put(&flash_events_Event.static_members, &flash_events_Event_FRAME_CONSTRUCTED, &flash_events_Event_FRAME_CONSTRUCTED); dict_put(&flash_events_Event.static_members, &flash_events_Event_SCROLL, &flash_events_Event_SCROLL); dict_put(&flash_events_Event.static_members, &flash_events_Event_TAB_INDEX_CHANGE, &flash_events_Event_TAB_INDEX_CHANGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_CHANGE, &flash_events_Event_CHANGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_ADDED_TO_STAGE, &flash_events_Event_ADDED_TO_STAGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_UNLOAD, &flash_events_Event_UNLOAD); dict_put(&flash_events_Event.static_members, &flash_events_Event_SELECT, &flash_events_Event_SELECT); dict_put(&flash_events_Event.static_members, &flash_events_Event_CONNECT, &flash_events_Event_CONNECT); dict_put(&flash_events_Event.static_members, &flash_events_Event_CUT, &flash_events_Event_CUT); dict_put(&flash_events_Event.static_members, &flash_events_Event_PASTE, &flash_events_Event_PASTE); dict_put(&flash_events_Event.static_members, &flash_events_Event_ADDED, &flash_events_Event_ADDED); dict_put(&flash_events_Event.static_members, &flash_events_Event_ID3, &flash_events_Event_ID3); dict_put(&flash_events_Event.static_members, &flash_events_Event_ENTER_FRAME, &flash_events_Event_ENTER_FRAME); dict_put(&flash_events_Event.static_members, &flash_events_Event_RENDER, &flash_events_Event_RENDER); dict_put(&flash_events_Event.static_members, &flash_events_Event_EXIT_FRAME, &flash_events_Event_EXIT_FRAME); dict_put(&flash_events_Event.static_members, &flash_events_Event_RESIZE, &flash_events_Event_RESIZE); dict_put(&flash_events_Event.static_members, &flash_events_Event_FULLSCREEN, &flash_events_Event_FULLSCREEN); dict_put(&flash_events_Event.static_members, &flash_events_Event_MOUSE_LEAVE, &flash_events_Event_MOUSE_LEAVE); dict_put(&flash_events_Event.static_members, &flash_events_Event_CLOSE, &flash_events_Event_CLOSE); dict_put(&flash_events_Event.static_members, &flash_events_Event_SELECT_ALL, &flash_events_Event_SELECT_ALL); dict_put(&flash_events_Event.static_members, &flash_events_Event_TAB_ENABLED_CHANGE, &flash_events_Event_TAB_ENABLED_CHANGE); dict_put(&flash_events_Event.static_members, &flash_events_Event_COPY, &flash_events_Event_COPY); dict_put(&flash_events_Event.static_members, &flash_events_Event_COMPLETE, &flash_events_Event_COMPLETE); dict_put(d, &flash_desktop_ClipboardFormats, &flash_desktop_ClipboardFormats); dict_init2(&flash_desktop_ClipboardFormats.members, &memberinfo_type, 8); dict_init2(&flash_desktop_ClipboardFormats.static_members, &memberinfo_type, 15); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_TEXT_FORMAT, &flash_desktop_ClipboardFormats_TEXT_FORMAT); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_BITMAP_FORMAT, &flash_desktop_ClipboardFormats_BITMAP_FORMAT); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_FLASH_PREFIX, &flash_desktop_ClipboardFormats_FLASH_PREFIX); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_HTML_FORMAT, &flash_desktop_ClipboardFormats_HTML_FORMAT); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_REFERENCE_PREFIX, &flash_desktop_ClipboardFormats_REFERENCE_PREFIX); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_AIR_PREFIX, &flash_desktop_ClipboardFormats_AIR_PREFIX); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_SERIALIZATION_PREFIX, &flash_desktop_ClipboardFormats_SERIALIZATION_PREFIX); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_RICH_TEXT_FORMAT, &flash_desktop_ClipboardFormats_RICH_TEXT_FORMAT); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_URL_FORMAT, &flash_desktop_ClipboardFormats_URL_FORMAT); dict_put(&flash_desktop_ClipboardFormats.static_members, &flash_desktop_ClipboardFormats_FILE_LIST_FORMAT, &flash_desktop_ClipboardFormats_FILE_LIST_FORMAT); dict_put(d, &flash_display_MovieClip, &flash_display_MovieClip); dict_init2(&flash_display_MovieClip.members, &memberinfo_type, 31); dict_init2(&flash_display_MovieClip.static_members, &memberinfo_type, 8); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_prevScene, &flash_display_MovieClip_prevScene); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_gotoAndPlay, &flash_display_MovieClip_gotoAndPlay); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_currentLabels, &flash_display_MovieClip_currentLabels); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_nextFrame, &flash_display_MovieClip_nextFrame); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_currentScene, &flash_display_MovieClip_currentScene); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_enabled, &flash_display_MovieClip_enabled); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_currentFrameLabel, &flash_display_MovieClip_currentFrameLabel); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_play, &flash_display_MovieClip_play); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_framesLoaded, &flash_display_MovieClip_framesLoaded); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_scenes, &flash_display_MovieClip_scenes); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_addFrameScript, &flash_display_MovieClip_addFrameScript); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_currentLabel, &flash_display_MovieClip_currentLabel); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_prevFrame, &flash_display_MovieClip_prevFrame); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_gotoAndStop, &flash_display_MovieClip_gotoAndStop); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_currentFrame, &flash_display_MovieClip_currentFrame); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_nextScene, &flash_display_MovieClip_nextScene); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_totalFrames, &flash_display_MovieClip_totalFrames); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_trackAsMenu, &flash_display_MovieClip_trackAsMenu); dict_put(&flash_display_MovieClip.members, &flash_display_MovieClip_stop, &flash_display_MovieClip_stop); dict_put(d, &flash_display_BitmapData, &flash_display_BitmapData); dict_init2(&flash_display_BitmapData.members, &memberinfo_type, 63); dict_init2(&flash_display_BitmapData.static_members, &memberinfo_type, 8); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_getPixel32, &flash_display_BitmapData_getPixel32); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_draw, &flash_display_BitmapData_draw); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_setPixels, &flash_display_BitmapData_setPixels); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_copyPixels, &flash_display_BitmapData_copyPixels); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_histogram, &flash_display_BitmapData_histogram); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_scroll, &flash_display_BitmapData_scroll); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_transparent, &flash_display_BitmapData_transparent); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_noise, &flash_display_BitmapData_noise); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_threshold, &flash_display_BitmapData_threshold); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_paletteMap, &flash_display_BitmapData_paletteMap); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_perlinNoise, &flash_display_BitmapData_perlinNoise); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_hitTest, &flash_display_BitmapData_hitTest); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_getPixel, &flash_display_BitmapData_getPixel); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_unlock, &flash_display_BitmapData_unlock); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_height, &flash_display_BitmapData_height); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_copyChannel, &flash_display_BitmapData_copyChannel); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_width, &flash_display_BitmapData_width); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_clone, &flash_display_BitmapData_clone); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_colorTransform, &flash_display_BitmapData_colorTransform); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_generateFilterRect, &flash_display_BitmapData_generateFilterRect); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_compare, &flash_display_BitmapData_compare); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_fillRect, &flash_display_BitmapData_fillRect); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_setVector, &flash_display_BitmapData_setVector); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_floodFill, &flash_display_BitmapData_floodFill); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_pixelDissolve, &flash_display_BitmapData_pixelDissolve); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_setPixel, &flash_display_BitmapData_setPixel); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_setPixel32, &flash_display_BitmapData_setPixel32); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_lock, &flash_display_BitmapData_lock); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_getVector, &flash_display_BitmapData_getVector); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_getColorBoundsRect, &flash_display_BitmapData_getColorBoundsRect); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_getPixels, &flash_display_BitmapData_getPixels); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_merge, &flash_display_BitmapData_merge); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_rect, &flash_display_BitmapData_rect); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_applyFilter, &flash_display_BitmapData_applyFilter); dict_put(&flash_display_BitmapData.members, &flash_display_BitmapData_dispose, &flash_display_BitmapData_dispose); dict_put(d, &flash_text_engine_LigatureLevel, &flash_text_engine_LigatureLevel); dict_init2(&flash_text_engine_LigatureLevel.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_LigatureLevel.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_LigatureLevel.static_members, &flash_text_engine_LigatureLevel_UNCOMMON, &flash_text_engine_LigatureLevel_UNCOMMON); dict_put(&flash_text_engine_LigatureLevel.static_members, &flash_text_engine_LigatureLevel_COMMON, &flash_text_engine_LigatureLevel_COMMON); dict_put(&flash_text_engine_LigatureLevel.static_members, &flash_text_engine_LigatureLevel_EXOTIC, &flash_text_engine_LigatureLevel_EXOTIC); dict_put(&flash_text_engine_LigatureLevel.static_members, &flash_text_engine_LigatureLevel_MINIMUM, &flash_text_engine_LigatureLevel_MINIMUM); dict_put(&flash_text_engine_LigatureLevel.static_members, &flash_text_engine_LigatureLevel_NONE, &flash_text_engine_LigatureLevel_NONE); dict_put(d, &_Infinity, &_Infinity); dict_put(d, &flash_text_engine_FontDescription, &flash_text_engine_FontDescription); dict_init2(&flash_text_engine_FontDescription.members, &memberinfo_type, 15); dict_init2(&flash_text_engine_FontDescription.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_renderingMode, &flash_text_engine_FontDescription_renderingMode); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_cffHinting, &flash_text_engine_FontDescription_cffHinting); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_fontPosture, &flash_text_engine_FontDescription_fontPosture); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_fontName, &flash_text_engine_FontDescription_fontName); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_fontLookup, &flash_text_engine_FontDescription_fontLookup); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_locked, &flash_text_engine_FontDescription_locked); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_fontWeight, &flash_text_engine_FontDescription_fontWeight); dict_put(&flash_text_engine_FontDescription.members, &flash_text_engine_FontDescription_clone, &flash_text_engine_FontDescription_clone); dict_put(&flash_text_engine_FontDescription.static_members, &flash_text_engine_FontDescription_isFontCompatible, &flash_text_engine_FontDescription_isFontCompatible); dict_put(d, &flash_text_engine_TextElement, &flash_text_engine_TextElement); dict_init2(&flash_text_engine_TextElement.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextElement.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextElement.members, &flash_text_engine_TextElement_replaceText, &flash_text_engine_TextElement_replaceText); dict_put(d, &flash_display_SWFVersion, &flash_display_SWFVersion); dict_init2(&flash_display_SWFVersion.members, &memberinfo_type, 8); dict_init2(&flash_display_SWFVersion.static_members, &memberinfo_type, 8); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH4, &flash_display_SWFVersion_FLASH4); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH7, &flash_display_SWFVersion_FLASH7); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH8, &flash_display_SWFVersion_FLASH8); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH3, &flash_display_SWFVersion_FLASH3); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH6, &flash_display_SWFVersion_FLASH6); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH9, &flash_display_SWFVersion_FLASH9); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH2, &flash_display_SWFVersion_FLASH2); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH5, &flash_display_SWFVersion_FLASH5); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH10, &flash_display_SWFVersion_FLASH10); dict_put(&flash_display_SWFVersion.static_members, &flash_display_SWFVersion_FLASH1, &flash_display_SWFVersion_FLASH1); dict_put(d, &flash_net_URLLoader, &flash_net_URLLoader); dict_init2(&flash_net_URLLoader.members, &memberinfo_type, 8); dict_init2(&flash_net_URLLoader.static_members, &memberinfo_type, 8); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_close, &flash_net_URLLoader_close); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_bytesLoaded, &flash_net_URLLoader_bytesLoaded); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_load, &flash_net_URLLoader_load); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_bytesTotal, &flash_net_URLLoader_bytesTotal); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_dataFormat, &flash_net_URLLoader_dataFormat); dict_put(&flash_net_URLLoader.members, &flash_net_URLLoader_data, &flash_net_URLLoader_data); dict_put(d, &flash_geom_Matrix, &flash_geom_Matrix); dict_init2(&flash_geom_Matrix.members, &memberinfo_type, 31); dict_init2(&flash_geom_Matrix.static_members, &memberinfo_type, 8); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_b, &flash_geom_Matrix_b); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_deltaTransformPoint, &flash_geom_Matrix_deltaTransformPoint); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_identity, &flash_geom_Matrix_identity); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_ty, &flash_geom_Matrix_ty); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_translate, &flash_geom_Matrix_translate); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_concat, &flash_geom_Matrix_concat); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_c, &flash_geom_Matrix_c); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_a, &flash_geom_Matrix_a); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_scale, &flash_geom_Matrix_scale); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_d, &flash_geom_Matrix_d); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_transformPoint, &flash_geom_Matrix_transformPoint); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_rotate, &flash_geom_Matrix_rotate); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_createGradientBox, &flash_geom_Matrix_createGradientBox); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_toString, &flash_geom_Matrix_toString); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_invert, &flash_geom_Matrix_invert); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_clone, &flash_geom_Matrix_clone); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_tx, &flash_geom_Matrix_tx); dict_put(&flash_geom_Matrix.members, &flash_geom_Matrix_createBox, &flash_geom_Matrix_createBox); dict_put(d, &flash_accessibility_Accessibility, &flash_accessibility_Accessibility); dict_init2(&flash_accessibility_Accessibility.members, &memberinfo_type, 8); dict_init2(&flash_accessibility_Accessibility.static_members, &memberinfo_type, 8); dict_put(&flash_accessibility_Accessibility.static_members, &flash_accessibility_Accessibility_active, &flash_accessibility_Accessibility_active); dict_put(&flash_accessibility_Accessibility.static_members, &flash_accessibility_Accessibility_updateProperties, &flash_accessibility_Accessibility_updateProperties); dict_put(&flash_accessibility_Accessibility.static_members, &flash_accessibility_Accessibility_sendEvent, &flash_accessibility_Accessibility_sendEvent); dict_put(d, &flash_net_sendToURL, &flash_net_sendToURL); dict_put(d, &flash_filters_GlowFilter, &flash_filters_GlowFilter); dict_init2(&flash_filters_GlowFilter.members, &memberinfo_type, 8); dict_init2(&flash_filters_GlowFilter.static_members, &memberinfo_type, 8); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_blurY, &flash_filters_GlowFilter_blurY); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_strength, &flash_filters_GlowFilter_strength); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_inner, &flash_filters_GlowFilter_inner); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_color, &flash_filters_GlowFilter_color); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_clone, &flash_filters_GlowFilter_clone); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_quality, &flash_filters_GlowFilter_quality); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_knockout, &flash_filters_GlowFilter_knockout); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_alpha, &flash_filters_GlowFilter_alpha); dict_put(&flash_filters_GlowFilter.members, &flash_filters_GlowFilter_blurX, &flash_filters_GlowFilter_blurX); dict_put(d, &flash_events_FullScreenEvent, &flash_events_FullScreenEvent); dict_init2(&flash_events_FullScreenEvent.members, &memberinfo_type, 8); dict_init2(&flash_events_FullScreenEvent.static_members, &memberinfo_type, 8); dict_put(&flash_events_FullScreenEvent.members, &flash_events_FullScreenEvent_toString, &flash_events_FullScreenEvent_toString); dict_put(&flash_events_FullScreenEvent.members, &flash_events_FullScreenEvent_clone, &flash_events_FullScreenEvent_clone); dict_put(&flash_events_FullScreenEvent.members, &flash_events_FullScreenEvent_fullScreen, &flash_events_FullScreenEvent_fullScreen); dict_put(&flash_events_FullScreenEvent.static_members, &flash_events_FullScreenEvent_FULL_SCREEN, &flash_events_FullScreenEvent_FULL_SCREEN); dict_put(d, &flash_display_StageDisplayState, &flash_display_StageDisplayState); dict_init2(&flash_display_StageDisplayState.members, &memberinfo_type, 8); dict_init2(&flash_display_StageDisplayState.static_members, &memberinfo_type, 8); dict_put(&flash_display_StageDisplayState.static_members, &flash_display_StageDisplayState_NORMAL, &flash_display_StageDisplayState_NORMAL); dict_put(&flash_display_StageDisplayState.static_members, &flash_display_StageDisplayState_FULL_SCREEN, &flash_display_StageDisplayState_FULL_SCREEN); dict_put(d, &flash_text_engine_TextJustifier, &flash_text_engine_TextJustifier); dict_init2(&flash_text_engine_TextJustifier.members, &memberinfo_type, 8); dict_init2(&flash_text_engine_TextJustifier.static_members, &memberinfo_type, 8); dict_put(&flash_text_engine_TextJustifier.members, &flash_text_engine_TextJustifier_lineJustification, &flash_text_engine_TextJustifier_lineJustification); dict_put(&flash_text_engine_TextJustifier.members, &flash_text_engine_TextJustifier_locale, &flash_text_engine_TextJustifier_locale); dict_put(&flash_text_engine_TextJustifier.members, &flash_text_engine_TextJustifier_clone, &flash_text_engine_TextJustifier_clone); dict_put(&flash_text_engine_TextJustifier.static_members, &flash_text_engine_TextJustifier_getJustifierForLocale, &flash_text_engine_TextJustifier_getJustifierForLocale); dict_put(d, &flash_display_StageAlign, &flash_display_StageAlign); dict_init2(&flash_display_StageAlign.members, &memberinfo_type, 8); dict_init2(&flash_display_StageAlign.static_members, &memberinfo_type, 15); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_RIGHT, &flash_display_StageAlign_RIGHT); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_BOTTOM, &flash_display_StageAlign_BOTTOM); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_BOTTOM_LEFT, &flash_display_StageAlign_BOTTOM_LEFT); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_TOP_RIGHT, &flash_display_StageAlign_TOP_RIGHT); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_TOP, &flash_display_StageAlign_TOP); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_LEFT, &flash_display_StageAlign_LEFT); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_BOTTOM_RIGHT, &flash_display_StageAlign_BOTTOM_RIGHT); dict_put(&flash_display_StageAlign.static_members, &flash_display_StageAlign_TOP_LEFT, &flash_display_StageAlign_TOP_LEFT); dict_put(d, &_NaN, &_NaN); dict_put(d, &_ReferenceError, &_ReferenceError); dict_init2(&_ReferenceError.members, &memberinfo_type, 8); dict_init2(&_ReferenceError.static_members, &memberinfo_type, 8); dict_put(&_ReferenceError.static_members, &_ReferenceError_length, &_ReferenceError_length); dict_put(d, &flash_display_Shape, &flash_display_Shape); dict_init2(&flash_display_Shape.members, &memberinfo_type, 8); dict_init2(&flash_display_Shape.static_members, &memberinfo_type, 8); dict_put(&flash_display_Shape.members, &flash_display_Shape_graphics, &flash_display_Shape_graphics); _NaN_constant.f = __builtin_nan(""); _Infinity_constant.f = __builtin_inf(); return d; } swftools_0.9.2+git20130725.orig/lib/as3/import.h0000644000175000017500000000204312216332640020241 0ustar gawaingawain/* import.h Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #ifndef __as3_import_h__ #define __as3_import_h__ void as3_import_file(char*filename); void as3_import_swf(char*filename); void as3_import_abc(char*filename); void as3_import_code(void*f); #endif swftools_0.9.2+git20130725.orig/lib/as3/initcode.h0000644000175000017500000000262012216332640020526 0ustar gawaingawain/* initcode.h Routines for handling/compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008,2009 Matthias Kramm 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 */ #ifndef __initcode_h__ #define __initcode_h__ #include "abc.h" #include "registry.h" DECLARE(parsedclass); DECLARE_LIST(parsedclass); struct _parsedclass { classinfo_t*cls; dict_t parents; dict_t usedclasses_deep; dict_t usedclasses; abc_class_t*abc; }; void initcode_add_classlist(abc_script_t*init, parsedclass_list_t*classes); parsedclass_t* parsedclass_new(classinfo_t*c, abc_class_t*abc); void parsedclass_add_dependency(parsedclass_t*p, classinfo_t*c); #endif swftools_0.9.2+git20130725.orig/lib/as3/abc.c0000644000175000017500000012657312216332640017466 0ustar gawaingawain/* abc.c Routines for handling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include #include "../rfxswf.h" #include "../q.h" #include "abc.h" #include "assets.h" char stringbuffer[2048]; int abc_RegisterNameSpace(abc_file_t*file, const char*name); int abc_RegisterPackageNameSpace(abc_file_t*file, const char*name); int abc_RegisterPackageInternalNameSpace(abc_file_t*file, const char*name); int abc_RegisterProtectedNameSpace(abc_file_t*file, const char*name); int abc_RegisterExplicitNameSpace(abc_file_t*file, const char*name); int abc_RegisterStaticProtectedNameSpace(abc_file_t*file, const char*name); int abc_RegisterPrivateNameSpace(abc_file_t*file, const char*name); /* TODO: switch to a datastructure with just values */ #define NO_KEY "" static void params_dump(FILE*fo, multiname_list_t*l, constant_list_t*o) { int n = list_length(l); int no = list_length(o); int i = 0; fprintf(fo, "("); while(l) { char*s = multiname_tostring(l->multiname); fprintf(fo, "%s", s); free(s); if(i>=n-no) { s = constant_tostring(o->constant); fprintf(fo, " = "); fprintf(fo, "%s", s); free(s); o = o->next; } if(l->next) fprintf(fo, ", "); l = l->next;i++; } fprintf(fo, ")"); } //#define DEBUG #define DEBUG if(0) static void parse_metadata(TAG*tag, abc_file_t*file, pool_t*pool) { int t; int num_metadata = swf_GetU30(tag); DEBUG printf("%d metadata\n", num_metadata); for(t=0;tmetadata, entry_name, items); } } void swf_CopyData(TAG*to, TAG*from, int len) { unsigned char*data = malloc(len); swf_GetBlock(from, data, len); swf_SetBlock(to, data, len); free(data); } abc_file_t*abc_file_new() { abc_file_t*f = malloc(sizeof(abc_file_t)); memset(f, 0, sizeof(abc_file_t)); f->metadata = array_new1(); f->methods = array_new1(); f->classes = array_new1(); f->scripts = array_new1(); f->method_bodies = array_new1(); f->flags = ABCFILE_LAZY; return f; } abc_class_t* abc_class_new(abc_file_t*file, multiname_t*classname, multiname_t*superclass) { NEW(abc_class_t,c); if(file) array_append(file->classes, NO_KEY, c); c->file = file; c->classname = multiname_clone(classname); c->superclass = multiname_clone(superclass); c->flags = 0; c->constructor = 0; c->static_constructor = 0; c->traits = list_new(); return c; } abc_class_t* abc_class_new2(abc_file_t*pool, char*classname, char*superclass) { return abc_class_new(pool, multiname_fromstring(classname), multiname_fromstring(superclass)); } void abc_class_sealed(abc_class_t*c) { c->flags |= CLASS_SEALED; } void abc_class_final(abc_class_t*c) { c->flags |= CLASS_FINAL; } void abc_class_interface(abc_class_t*c) { c->flags |= CLASS_INTERFACE; } void abc_class_protectedNS(abc_class_t*c, char*namespace) { c->protectedNS = namespace_new_protected(namespace); c->flags |= CLASS_PROTECTED_NS; } void abc_class_add_interface(abc_class_t*c, multiname_t*interface) { list_append(c->interfaces, multiname_clone(interface)); } char*abc_class_fullname(abc_class_t*cls) { const char*package = cls->classname->ns->name; const char*name = cls->classname->name; int l1 = strlen(package); int l2 = strlen(name); char*fullname = malloc(l1+l2+2); if(l1) { memcpy(fullname, package, l1); fullname[l1++]='.'; } memcpy(fullname+l1, name, l2+1); return fullname; } void abc_method_init(abc_method_t*m, abc_file_t*file, multiname_t*returntype, char body) { /* construct method object */ m->index = array_length(file->methods); array_append(file->methods, NO_KEY, m); m->return_type = returntype; if(body) { /* construct code (method body) object */ NEW(abc_method_body_t,c); array_append(file->method_bodies, NO_KEY, c); c->index = array_length(file->method_bodies); c->file = file; c->traits = list_new(); c->code = 0; /* crosslink the two objects */ m->body = c; c->method = m; } } abc_method_t* abc_method_new(abc_file_t*file, multiname_t*returntype, char body) { NEW(abc_method_t,m); abc_method_init(m, file, returntype, body); return m; } abc_method_t* abc_class_getconstructor(abc_class_t*cls, multiname_t*returntype) { if(cls->constructor) { return cls->constructor; } abc_method_t* m = abc_method_new(cls->file, returntype, 1); cls->constructor = m; return m; } abc_method_t* abc_class_getstaticconstructor(abc_class_t*cls, multiname_t*returntype) { if(cls->static_constructor) { return cls->static_constructor; } abc_method_t* m = abc_method_new(cls->file, returntype, 1); cls->static_constructor = m; return m; } trait_t*trait_new(int type, multiname_t*name, int data1, int data2, constant_t*v) { trait_t*trait = malloc(sizeof(trait_t)); memset(trait, 0, sizeof(trait_t)); trait->kind = type&0x0f; trait->attributes = type&0xf0; trait->name = name; trait->data1 = data1; trait->data2 = data2; trait->value = v; return trait; } trait_t*trait_new_member(trait_list_t**traits, multiname_t*type, multiname_t*name,constant_t*v) { int kind = TRAIT_SLOT; trait_t*trait = malloc(sizeof(trait_t)); memset(trait, 0, sizeof(trait_t)); trait->kind = kind&0x0f; trait->attributes = kind&0xf0; trait->name = name; trait->type_name = type; trait->slot_id = list_length(*traits)+1; trait_list_t*l = *traits; list_append_(traits, trait); return trait; } trait_t*trait_new_method(trait_list_t**traits, multiname_t*name, abc_method_t*m) { int type = TRAIT_METHOD; trait_t*trait = malloc(sizeof(trait_t)); memset(trait, 0, sizeof(trait_t)); trait->kind = type&0x0f; trait->attributes = type&0xf0; trait->name = name; trait->method = m; /* start assigning traits at position #1. Weird things happen when assigning slot 0- slot 0 and 1 seem to be identical */ trait->slot_id = list_length(*traits)+1; list_append_(traits, trait); return trait; } abc_method_t* abc_class_method(abc_class_t*cls, multiname_t*returntype, multiname_t*name) { abc_file_t*file = cls->file; abc_method_t* m = abc_method_new(cls->file, returntype, !(cls->flags&CLASS_INTERFACE)); m->trait = trait_new_method(&cls->traits, multiname_clone(name), m); return m; } abc_method_t* abc_class_staticmethod(abc_class_t*cls, multiname_t*returntype, multiname_t*name) { abc_file_t*file = cls->file; abc_method_t* m = abc_method_new(cls->file, returntype, !(cls->flags&CLASS_INTERFACE)); m->trait = trait_new_method(&cls->static_traits, multiname_clone(name), m); return m; } trait_t* abc_class_slot(abc_class_t*cls, multiname_t*name, multiname_t*type) { abc_file_t*file = cls->file; multiname_t*m_name = multiname_clone(name); multiname_t*m_type = multiname_clone(type); trait_t*t = trait_new_member(&cls->traits, m_type, m_name, 0); return t; } trait_t* abc_class_staticslot(abc_class_t*cls, multiname_t*name, multiname_t*type) { abc_file_t*file = cls->file; multiname_t*m_name = multiname_clone(name); multiname_t*m_type = multiname_clone(type); trait_t*t = trait_new_member(&cls->static_traits, m_type, m_name, 0); return t; } trait_t* traits_find_slotid(trait_list_t*traits, int slotid) { trait_list_t*l; trait_t*t=0; for(l=traits;l;l=l->next) { if(l->trait->slot_id==slotid) { t=l->trait; break; } } return t; } void abc_method_body_addClassTrait(abc_method_body_t*code, char*multiname, int slotid, abc_class_t*cls) { abc_file_t*file = code->file; multiname_t*m = multiname_fromstring(multiname); trait_t*trait = trait_new(TRAIT_CLASS, m, slotid, 0, 0); trait->cls = cls; list_append(code->traits, trait); } /* notice: traits of a method (body) belonging to an init script and traits of the init script are *not* the same thing */ trait_t* abc_initscript_addClassTrait(abc_script_t*script, multiname_t*multiname, abc_class_t*cls) { abc_file_t*file = script->file; multiname_t*m = multiname_clone(multiname); int slotid = list_length(script->traits)+1; trait_t*trait = trait_new(TRAIT_CLASS, m, slotid, 0, 0); trait->cls = cls; list_append(script->traits, trait); return trait; } abc_script_t* abc_initscript(abc_file_t*file) { abc_method_t*m = abc_method_new(file, 0, 1); abc_script_t* s = malloc(sizeof(abc_script_t)); s->method = m; s->traits = list_new(); s->file = file; array_append(file->scripts, NO_KEY, s); return s; } static void traits_dump(FILE*fo, const char*prefix, trait_list_t*traits, abc_file_t*file, dict_t*methods_seen); static void dump_method(FILE*fo, const char*prefix, const char*attr, const char*type, const char*name, abc_method_t*m, abc_file_t*file, dict_t*methods_seen) { if(methods_seen) dict_put(methods_seen, m, 0); char*return_type = 0; if(m->return_type) return_type = multiname_tostring(m->return_type); else return_type = strdup("*"); fprintf(fo, "%s", prefix); fprintf(fo, "%s %s ", attr, type); fprintf(fo, "%s %s=%s", return_type, name, m->name); params_dump(fo, m->parameters, m->optional_parameters); fprintf(fo, "(%d params, %d optional)\n", list_length(m->parameters), list_length(m->optional_parameters)); free(return_type);return_type=0; abc_method_body_t*c = m->body; if(!c) { return; } fprintf(fo, "%s[stack:%d locals:%d scope:%d-%d flags:", prefix, c->old.max_stack, c->old.local_count, c->old.init_scope_depth, c->old.max_scope_depth); int flags = c->method->flags; if(flags&METHOD_NEED_ARGUMENTS) {fprintf(fo, " need_arguments");flags&=~METHOD_NEED_ARGUMENTS;} if(flags&METHOD_NEED_ACTIVATION) {fprintf(fo, " need_activation");flags&=~METHOD_NEED_ACTIVATION;} if(flags&METHOD_NEED_REST) {fprintf(fo, " need_rest");flags&=~METHOD_NEED_REST;} if(flags&METHOD_HAS_OPTIONAL) {fprintf(fo, " has_optional");flags&=~METHOD_HAS_OPTIONAL;} if(flags&METHOD_SET_DXNS) {fprintf(fo, " set_dxns");flags&=~METHOD_SET_DXNS;} if(flags&METHOD_HAS_PARAM_NAMES) {fprintf(fo, " has_param_names");flags&=~METHOD_HAS_PARAM_NAMES;} if(flags) fprintf(fo, " %02x", flags); fprintf(fo, "]"); if(m->trait) { fprintf(fo, " slot:%d", m->trait->slot_id); } fprintf(fo, "\n"); char prefix2[80]; sprintf(prefix2, "%s ", prefix); if(c->traits) traits_dump(fo, prefix, c->traits, file, methods_seen); fprintf(fo, "%s{\n", prefix); code_dump2(c->code, c->exceptions, file, prefix2, fo); fprintf(fo, "%s}\n\n", prefix); } static void traits_free(trait_list_t*traits) { trait_list_t*t = traits; while(t) { if(t->trait->name) { multiname_destroy(t->trait->name);t->trait->name = 0; } if(t->trait->kind == TRAIT_SLOT || t->trait->kind == TRAIT_CONST) { multiname_destroy(t->trait->type_name); } if(t->trait->value) { constant_free(t->trait->value);t->trait->value = 0; } free(t->trait);t->trait = 0; t = t->next; } list_free(traits); } static char trait_is_method(trait_t*trait) { return (trait->kind == TRAIT_METHOD || trait->kind == TRAIT_GETTER || trait->kind == TRAIT_SETTER || trait->kind == TRAIT_FUNCTION); } static trait_list_t* traits_parse(TAG*tag, pool_t*pool, abc_file_t*file) { int num_traits = swf_GetU30(tag); trait_list_t*traits = list_new(); int t; if(num_traits) { DEBUG printf("%d traits\n", num_traits); } for(t=0;tname = multiname_clone(pool_lookup_multiname(pool, swf_GetU30(tag))); // always a QName (ns,name) const char*name = 0; DEBUG name = multiname_tostring(trait->name); U8 kind = swf_GetU8(tag); U8 attributes = kind&0xf0; kind&=0x0f; trait->kind = kind; trait->attributes = attributes; DEBUG printf(" trait %d) %s type=%02x\n", t, name, kind); if(kind == TRAIT_METHOD || kind == TRAIT_GETTER || kind == TRAIT_SETTER) { // method / getter / setter trait->disp_id = swf_GetU30(tag); trait->method = (abc_method_t*)array_getvalue(file->methods, swf_GetU30(tag)); trait->method->trait = trait; DEBUG printf(" method/getter/setter\n"); } else if(kind == TRAIT_FUNCTION) { // function trait->slot_id = swf_GetU30(tag); trait->method = (abc_method_t*)array_getvalue(file->methods, swf_GetU30(tag)); trait->method->trait = trait; } else if(kind == TRAIT_CLASS) { // class trait->slot_id = swf_GetU30(tag); trait->cls = (abc_class_t*)array_getvalue(file->classes, swf_GetU30(tag)); DEBUG printf(" class %s %d %p\n", name, trait->slot_id, (int)trait->cls); } else if(kind == TRAIT_SLOT || kind == TRAIT_CONST) { // slot, const trait->slot_id = swf_GetU30(tag); trait->type_name = multiname_clone(pool_lookup_multiname(pool, swf_GetU30(tag))); int vindex = swf_GetU30(tag); if(vindex) { int vkind = swf_GetU8(tag); trait->value = constant_fromindex(pool, vindex, vkind); } DEBUG printf(" slot %s %d %s (%s)\n", name, trait->slot_id, trait->type_name->name, constant_tostring(trait->value)); } else { fprintf(stderr, "Can't parse trait type %d\n", kind); } if(attributes&0x40) { int num = swf_GetU30(tag); int s; for(s=0;sTRAIT_CONST) { fprintf(stderr, "Can't parse trait type %d\n", kind); } if(attributes&0x40) { int s, num = swf_GetU30(tag); for(s=0;strait; swf_SetU30(tag, pool_register_multiname(pool, trait->name)); swf_SetU8(tag, trait->kind|trait->attributes); swf_SetU30(tag, trait->data1); if(trait->kind == TRAIT_CLASS) { swf_SetU30(tag, trait->cls->index); } else if(trait->kind == TRAIT_GETTER || trait->kind == TRAIT_SETTER || trait->kind == TRAIT_METHOD) { swf_SetU30(tag, trait->method->index); } else if(trait->kind == TRAIT_SLOT || trait->kind == TRAIT_CONST) { int index = pool_register_multiname(pool, trait->type_name); swf_SetU30(tag, index); } else { swf_SetU30(tag, trait->data2); } if(trait->kind == TRAIT_SLOT || trait->kind == TRAIT_CONST) { int vindex = constant_get_index(pool, trait->value); swf_SetU30(tag, vindex); if(vindex) { swf_SetU8(tag, trait->value->type); } } if(trait->attributes&0x40) { // metadata swf_SetU30(tag, 0); } traits = traits->next; } } static void traits_dump(FILE*fo, const char*prefix, trait_list_t*traits, abc_file_t*file, dict_t*methods_seen) { int t; while(traits) { trait_t*trait = traits->trait; char*name = multiname_tostring(trait->name); U8 kind = trait->kind; U8 attributes = trait->attributes; char a = attributes & (TRAIT_ATTR_OVERRIDE|TRAIT_ATTR_FINAL); char* type = ""; if(a==TRAIT_ATTR_FINAL) type = "final "; else if(a==TRAIT_ATTR_OVERRIDE) type = "override "; else if(a==(TRAIT_ATTR_OVERRIDE|TRAIT_ATTR_FINAL)) type = "final override "; if(attributes&TRAIT_ATTR_METADATA) fprintf(fo, ""); if(kind == TRAIT_METHOD) { abc_method_t*m = trait->method; dump_method(fo, prefix, type, "method", name, m, file, methods_seen); } else if(kind == TRAIT_GETTER) { abc_method_t*m = trait->method; dump_method(fo, prefix, type, "getter", name, m, file, methods_seen); } else if(kind == TRAIT_SETTER) { abc_method_t*m = trait->method; dump_method(fo, prefix, type, "setter", name, m, file, methods_seen); } else if(kind == TRAIT_FUNCTION) { // function abc_method_t*m = trait->method; dump_method(fo, prefix, type, "function", name, m, file, methods_seen); } else if(kind == TRAIT_CLASS) { // class abc_class_t*cls = trait->cls; if(!cls) { fprintf(fo, "%sslot %d: class %s=00000000\n", prefix, trait->slot_id, name); } else { fprintf(fo, "%sslot %d: class %s=%s\n", prefix, trait->slot_id, name, cls->classname->name); } } else if(kind == TRAIT_SLOT || kind == TRAIT_CONST) { // slot, const int slot_id = trait->slot_id; char*type_name = multiname_tostring(trait->type_name); char*value = constant_tostring(trait->value); fprintf(fo, "%sslot %d: %s %s:%s %s %s\n", prefix, trait->slot_id, kind==TRAIT_CONST?"const":"var", name, type_name, trait->value?"=":"", trait->value?value:""); if(value) free(value); free(type_name); } else { fprintf(fo, "%s can't dump trait type %d\n", prefix, kind); } free(name); traits=traits->next; } } void* swf_DumpABC(FILE*fo, void*code, char*prefix) { abc_file_t* file = (abc_file_t*)code; if(file->name) { fprintf(fo, "%s#\n", prefix); fprintf(fo, "%s#name: %s\n", prefix, file->name); fprintf(fo, "%s#\n", prefix); } int t; for(t=0;tmetadata->num;t++) { const char*entry_name = array_getkey(file->metadata, t); fprintf(fo, "%s#Metadata \"%s\":\n", prefix, entry_name); int s; array_t*items = (array_t*)array_getvalue(file->metadata, t); for(s=0;snum;s++) { fprintf(fo, "%s# %s=%s\n", prefix, (char*)array_getkey(items, s), (char*)array_getvalue(items,s)); } fprintf(fo, "%s#\n", prefix); } dict_t*methods_seen = dict_new2(&ptr_type); for(t=0;tclasses->num;t++) { abc_class_t*cls = (abc_class_t*)array_getvalue(file->classes, t); char prefix2[80]; sprintf(prefix2, "%s ", prefix); fprintf(fo, "%s", prefix); if(cls->flags&1) fprintf(fo, "sealed "); if(cls->flags&2) fprintf(fo, "final "); if(cls->flags&4) fprintf(fo, "interface "); if(cls->flags&8) { char*s = namespace_tostring(cls->protectedNS); fprintf(fo, "protectedNS(%s) ", s); free(s); } char*classname = multiname_tostring(cls->classname); fprintf(fo, "class %s", classname); free(classname); if(cls->superclass) { char*supername = multiname_tostring(cls->superclass); fprintf(fo, " extends %s", supername); free(supername); } if(cls->interfaces) { multiname_list_t*ilist = cls->interfaces; if(ilist) fprintf(fo, " implements"); while(ilist) { char*s = multiname_tostring(ilist->multiname); fprintf(fo, " %s", s); free(s); ilist = ilist->next; } ilist->next; } if(cls->flags&0xf0) fprintf(fo, "extra flags=%02x\n", cls->flags&0xf0); fprintf(fo, "%s{\n", prefix); dict_put(methods_seen, cls->static_constructor, 0); dict_put(methods_seen, cls->constructor, 0); if(cls->static_constructor) { dump_method(fo, prefix2, "", "staticconstructor", "", cls->static_constructor, file, methods_seen); } traits_dump(fo, prefix2, cls->static_traits, file, methods_seen); char*n = multiname_tostring(cls->classname); if(cls->constructor) dump_method(fo, prefix2, "", "constructor", n, cls->constructor, file, methods_seen); free(n); traits_dump(fo, prefix2,cls->traits, file, methods_seen); if(cls->asset) { swf_DumpAsset(fo, cls->asset, prefix2); } fprintf(fo, "%s}\n", prefix); } fprintf(fo, "%s\n", prefix); for(t=0;tscripts->num;t++) { abc_script_t*s = (abc_script_t*)array_getvalue(file->scripts, t); dump_method(fo, prefix, "", "initmethod", "init", s->method, file, methods_seen); traits_dump(fo, prefix, s->traits, file, methods_seen); } char extra=0; for(t=0;tmethods->num;t++) { abc_method_t*m = (abc_method_t*)array_getvalue(file->methods, t); if(!dict_contains(methods_seen, m)) { if(!extra) { extra=1; fprintf(fo, "\n"); fprintf(fo, "%s//internal (non-class non-script) methods:\n", prefix); } char name[18]; sprintf(name, "%08x ", m->index); dump_method(fo, prefix, "", "internalmethod", name, m, file, methods_seen); } } dict_destroy(methods_seen); return file; } void* swf_ReadABC(TAG*tag) { abc_file_t* file = abc_file_new(); pool_t*pool = pool_new(); swf_SetTagPos(tag, 0); int t; if(tag->id == ST_DOABC) { U32 abcflags = swf_GetU32(tag); DEBUG printf("flags=%08x\n", abcflags); char*name= swf_GetString(tag); file->name = (name&&name[0])?strdup(name):0; } U32 version = swf_GetU32(tag); if(version!=0x002e0010) { fprintf(stderr, "Warning: unknown AVM2 version %08x\n", version); } pool_read(pool, tag); int num_methods = swf_GetU30(tag); DEBUG printf("%d methods\n", num_methods); for(t=0;treturn_type = multiname_clone(pool_lookup_multiname(pool, return_type_index)); else m->return_type = 0; int s; for(s=0;sparameters, param); } int namenr = swf_GetU30(tag); if(namenr) m->name = strdup(pool_lookup_string(pool, namenr)); else m->name = strdup(""); m->flags = swf_GetU8(tag); DEBUG printf("method %d) %s ", t, m->name); DEBUG params_dump(stdout, m->parameters, m->optional_parameters); DEBUG printf("flags=%02x\n", m->flags); if(m->flags&0x08) { m->optional_parameters = list_new(); int num = swf_GetU30(tag); int s; for(s=0;soptional_parameters, c); } } if(m->flags&0x80) { /* debug information- not used by avm2 */ multiname_list_t*l = m->parameters; while(l) { const char*name = pool_lookup_string(pool, swf_GetU30(tag)); l = l->next; } } m->index = array_length(file->methods); array_append(file->methods, NO_KEY, m); } parse_metadata(tag, file, pool); /* skip classes, and scripts for now, and do the real parsing later */ int num_classes = swf_GetU30(tag); int classes_pos = tag->pos; DEBUG printf("%d classes\n", num_classes); for(t=0;tclasses, NO_KEY, cls); cls->flags = swf_GetU8(tag); DEBUG printf("class %d %02x\n", t, cls->flags); if(cls->flags&8) swf_GetU30(tag); //protectedNS int s; int inum = swf_GetU30(tag); //interface count cls->interfaces = 0; for(s=0;sinterfaces, m); DEBUG printf(" class %d interface: %s\n", t, m->name); } int iinit = swf_GetU30(tag); //iinit DEBUG printf("--iinit-->%d\n", iinit); traits_skip(tag); } for(t=0;tclasses, t); int cinit = swf_GetU30(tag); DEBUG printf("--cinit(%d)-->%d\n", t, cinit); cls->static_constructor = (abc_method_t*)array_getvalue(file->methods, cinit); traits_skip(tag); } int num_scripts = swf_GetU30(tag); DEBUG printf("%d scripts\n", num_scripts); for(t=0;t= file->methods->num) { printf("Invalid method number: %d\n", methodnr); return 0; } abc_method_t*m = (abc_method_t*)array_getvalue(file->methods, methodnr); abc_method_body_t*c = malloc(sizeof(abc_method_body_t)); memset(c, 0, sizeof(abc_method_body_t)); c->old.max_stack = swf_GetU30(tag); c->old.local_count = swf_GetU30(tag); c->old.init_scope_depth = swf_GetU30(tag); c->old.max_scope_depth = swf_GetU30(tag); c->init_scope_depth = c->old.init_scope_depth; int code_length = swf_GetU30(tag); c->method = m; m->body = c; int pos = tag->pos + code_length; codelookup_t*codelookup = 0; c->code = code_parse(tag, code_length, file, pool, &codelookup); tag->pos = pos; int exception_count = swf_GetU30(tag); int s; c->exceptions = list_new(); for(s=0;sfrom = code_atposition(codelookup, swf_GetU30(tag)); e->to = code_atposition(codelookup, swf_GetU30(tag)); e->target = code_atposition(codelookup, swf_GetU30(tag)); e->exc_type = multiname_clone(pool_lookup_multiname(pool, swf_GetU30(tag))); e->var_name = multiname_clone(pool_lookup_multiname(pool, swf_GetU30(tag))); //e->var_name = pool_lookup_string(pool, swf_GetU30(tag)); //if(e->var_name) e->var_name = strdup(e->var_name); list_append(c->exceptions, e); } codelookup_free(codelookup); c->traits = traits_parse(tag, pool, file); DEBUG printf("method_body %d) (method %d), %d bytes of code\n", t, methodnr, code_length); array_append(file->method_bodies, NO_KEY, c); } if(tag->len - tag->pos) { fprintf(stderr, "ERROR: %d unparsed bytes remaining in ABC block\n", tag->len - tag->pos); return 0; } swf_SetTagPos(tag, classes_pos); for(t=0;tclasses, t); int classname_index = swf_GetU30(tag); int superclass_index = swf_GetU30(tag); cls->classname = multiname_clone(pool_lookup_multiname(pool, classname_index)); cls->superclass = multiname_clone(pool_lookup_multiname(pool, superclass_index)); cls->flags = swf_GetU8(tag); const char*ns = ""; if(cls->flags&8) { int ns_index = swf_GetU30(tag); cls->protectedNS = namespace_clone(pool_lookup_namespace(pool, ns_index)); } int num_interfaces = swf_GetU30(tag); //interface count int s; for(s=0;sconstructor = (abc_method_t*)array_getvalue(file->methods, iinit); cls->traits = traits_parse(tag, pool, file); } for(t=0;tclasses, t); /* SKIP */ swf_GetU30(tag); // cindex cls->static_traits = traits_parse(tag, pool, file); } int num_scripts2 = swf_GetU30(tag); for(t=0;tmethods, init); abc_script_t*s = malloc(sizeof(abc_script_t)); memset(s, 0, sizeof(abc_script_t)); s->method = m; s->traits = traits_parse(tag, pool, file); array_append(file->scripts, NO_KEY, s); } pool_destroy(pool); return file; } static pool_t*writeABC(TAG*abctag, void*code, pool_t*pool) { abc_file_t*file = (abc_file_t*)code; if(!pool) pool = pool_new(); if(!file) file = abc_file_new(); TAG*tmp = swf_InsertTag(0,0); TAG*tag = tmp; int t; /* add method bodies where needed */ for(t=0;tclasses->num;t++) { abc_class_t*c = (abc_class_t*)array_getvalue(file->classes, t); if(!c->constructor) { if(!(c->flags&CLASS_INTERFACE)) { NEW(abc_method_t,m);array_append(file->methods, NO_KEY, m); NEW(abc_method_body_t,body);array_append(file->method_bodies, NO_KEY, body); // don't bother to set m->index body->method = m; m->body = body; if(c->superclass && c->superclass->name && strcmp(c->superclass->name,"Object")) { body->code = abc_getlocal_0(body->code); body->code = abc_constructsuper(body->code, 0); } body->code = abc_returnvoid(body->code); c->constructor = m; } else { NEW(abc_method_t,m);array_append(file->methods, NO_KEY, m); c->constructor = m; } } if(!c->static_constructor) { NEW(abc_method_t,m);array_append(file->methods, NO_KEY, m); NEW(abc_method_body_t,body);array_append(file->method_bodies, NO_KEY, body); body->method = m; m->body = body; body->code = abc_returnvoid(0); c->static_constructor = m; } } swf_SetU30(tag, file->methods->num); /* enumerate classes, methods and method bodies */ for(t=0;tmethods->num;t++) { abc_method_t*m = (abc_method_t*)array_getvalue(file->methods, t); m->index = t; } for(t=0;tclasses->num;t++) { abc_class_t*c = (abc_class_t*)array_getvalue(file->classes, t); c->index = t; } for(t=0;tmethod_bodies->num;t++) { abc_method_body_t*m = (abc_method_body_t*)array_getvalue(file->method_bodies, t); m->index = t; } /* generate code statistics */ for(t=0;tmethod_bodies->num;t++) { abc_method_body_t*m = (abc_method_body_t*)array_getvalue(file->method_bodies, t); m->stats = code_get_statistics(m->code, m->exceptions); } /* level init scope depths: The init scope depth of a method is always as least as high as the init scope depth of it's surrounding class. A method has it's own init_scope_depth if it's an init method (then its init scope depth is zero), or if it's used as a closure. Not sure yet what to do with methods which are used at different locations- e.g. the nullmethod is used all over the place. EDIT: flashplayer doesn't allow this anyway- a method can only be used once Also, I have the strong suspicion that flash player uses only the difference between max_scope_stack and init_scope_stack, anyway. */ for(t=0;tclasses->num;t++) { abc_class_t*c = (abc_class_t*)array_getvalue(file->classes, t); trait_list_t*traits = c->traits; if(c->constructor && c->constructor->body && c->constructor->body->init_scope_depth < c->init_scope_depth) { c->constructor->body->init_scope_depth = c->init_scope_depth; } if(c->static_constructor && c->static_constructor->body && c->static_constructor->body->init_scope_depth < c->init_scope_depth) { c->static_constructor->body->init_scope_depth = c->init_scope_depth; } while(traits) { trait_t*trait = traits->trait; if(trait_is_method(trait) && trait->method->body) { abc_method_body_t*body = trait->method->body; if(body->init_scope_depth < c->init_scope_depth) { body->init_scope_depth = c->init_scope_depth; } } traits = traits->next; } } for(t=0;tmethods->num;t++) { abc_method_t*m = (abc_method_t*)array_getvalue(file->methods, t); int n = 0; multiname_list_t*l = m->parameters; int num_params = list_length(m->parameters); swf_SetU30(tag, num_params); if(m->return_type) swf_SetU30(tag, pool_register_multiname(pool, m->return_type)); else swf_SetU30(tag, 0); int s; while(l) { swf_SetU30(tag, pool_register_multiname(pool, l->multiname)); l = l->next; } if(m->name) { swf_SetU30(tag, pool_register_string(pool, m->name)); } else { swf_SetU30(tag, 0); } U8 flags = m->flags&(METHOD_NEED_REST|METHOD_NEED_ARGUMENTS); if(m->optional_parameters) flags |= METHOD_HAS_OPTIONAL; if(m->body) { flags |= m->body->stats->flags; } swf_SetU8(tag, flags); if(flags&METHOD_HAS_OPTIONAL) { swf_SetU30(tag, list_length(m->optional_parameters)); constant_list_t*l = m->optional_parameters; while(l) { int i = constant_get_index(pool, l->constant); swf_SetU30(tag, i); if(!i) { swf_SetU8(tag, CONSTANT_NULL); } else { swf_SetU8(tag, l->constant->type); } l = l->next; } } } /* write metadata */ swf_SetU30(tag, file->metadata->num); for(t=0;tmetadata->num;t++) { const char*entry_name = array_getkey(file->metadata, t); swf_SetU30(tag, pool_register_string(pool, entry_name)); array_t*items = (array_t*)array_getvalue(file->metadata, t); swf_SetU30(tag, items->num); int s; for(s=0;snum;s++) { int i1 = pool_register_string(pool, array_getkey(items, s)); int i2 = pool_register_string(pool, array_getvalue(items, s)); swf_SetU30(tag, i1); swf_SetU30(tag, i2); } } swf_SetU30(tag, file->classes->num); for(t=0;tclasses->num;t++) { abc_class_t*c = (abc_class_t*)array_getvalue(file->classes, t); int classname_index = pool_register_multiname(pool, c->classname); int superclass_index = pool_register_multiname(pool, c->superclass); swf_SetU30(tag, classname_index); swf_SetU30(tag, superclass_index); swf_SetU8(tag, c->flags); // flags if(c->flags&0x08) { int ns_index = pool_register_namespace(pool, c->protectedNS); swf_SetU30(tag, ns_index); } swf_SetU30(tag, list_length(c->interfaces)); multiname_list_t*interface= c->interfaces; while(interface) { swf_SetU30(tag, pool_register_multiname(pool, interface->multiname)); interface = interface->next; } assert(c->constructor); swf_SetU30(tag, c->constructor->index); traits_write(pool, tag, c->traits); } for(t=0;tclasses->num;t++) { abc_class_t*c = (abc_class_t*)array_getvalue(file->classes, t); assert(c->static_constructor); swf_SetU30(tag, c->static_constructor->index); traits_write(pool, tag, c->static_traits); } swf_SetU30(tag, file->scripts->num); for(t=0;tscripts->num;t++) { abc_script_t*s = (abc_script_t*)array_getvalue(file->scripts, t); if(!s->method->body || !s->method->body->code) { fprintf(stderr, "Internal Error: initscript has no body\n"); } swf_SetU30(tag, s->method->index); //!=t! traits_write(pool, tag, s->traits); } swf_SetU30(tag, file->method_bodies->num); for(t=0;tmethod_bodies->num;t++) { abc_method_body_t*c = (abc_method_body_t*)array_getvalue(file->method_bodies, t); abc_method_t*m = c->method; swf_SetU30(tag, m->index); //swf_SetU30(tag, c->old.max_stack); //swf_SetU30(tag, c->old.local_count); //swf_SetU30(tag, c->old.init_scope_depth); //swf_SetU30(tag, c->old.max_scope_depth); swf_SetU30(tag, c->stats->max_stack); int param_num = list_length(c->method->parameters)+1; if(c->method->flags&METHOD_NEED_REST) param_num++; if(param_num <= c->stats->local_count) swf_SetU30(tag, c->stats->local_count); else swf_SetU30(tag, param_num); swf_SetU30(tag, c->init_scope_depth); swf_SetU30(tag, c->stats->max_scope_depth+ c->init_scope_depth); code_write(tag, c->code, pool, file); swf_SetU30(tag, list_length(c->exceptions)); abc_exception_list_t*l = c->exceptions; while(l) { // warning: assumes "pos" in each code_t is up-to-date swf_SetU30(tag, l->abc_exception->from->pos); swf_SetU30(tag, l->abc_exception->to->pos); swf_SetU30(tag, l->abc_exception->target->pos); swf_SetU30(tag, pool_register_multiname(pool, l->abc_exception->exc_type)); swf_SetU30(tag, pool_register_multiname(pool, l->abc_exception->var_name)); l = l->next; } traits_write(pool, tag, c->traits); } /* free temporary codestat data again. Notice: If we were to write this file multiple times, this can also be shifted to abc_file_free() */ for(t=0;tmethod_bodies->num;t++) { abc_method_body_t*m = (abc_method_body_t*)array_getvalue(file->method_bodies, t); codestats_free(m->stats);m->stats=0; } // --- start to write real tag -- tag = abctag; if(tag->id == ST_DOABC) { swf_SetU32(tag, file->flags); // flags swf_SetString(tag, file->name); } swf_SetU16(tag, 0x10); //version swf_SetU16(tag, 0x2e); pool_write(pool, tag); swf_SetBlock(tag, tmp->data, tmp->len); swf_DeleteTag(0, tmp); return pool; } void swf_WriteABC(TAG*abctag, void*code) { pool_t*pool = writeABC(abctag, code, 0); pool_optimize(pool); swf_ResetTag(abctag, abctag->id); writeABC(abctag, code, pool); pool_destroy(pool); } void abc_file_free(abc_file_t*file) { if(!file) return; int t; if(file->metadata) { for(t=0;tmetadata->num;t++) { array_t*items = (array_t*)array_getvalue(file->metadata, t); int s; for(s=0;snum;s++) { free(array_getvalue(items, s)); } array_free(items); } array_free(file->metadata);file->metadata=0; } for(t=0;tmethods->num;t++) { abc_method_t*m = (abc_method_t*)array_getvalue(file->methods, t); multiname_list_t*param = m->parameters; while(param) { multiname_destroy(param->multiname);param->multiname=0; param = param->next; } list_free(m->parameters);m->parameters=0; constant_list_t*opt = m->optional_parameters; while(opt) { constant_free(opt->constant);opt->constant=0; opt = opt->next; } list_free(m->optional_parameters);m->optional_parameters=0; if(m->name) { free((void*)m->name);m->name=0; } if(m->return_type) { multiname_destroy(m->return_type); } free(m); } array_free(file->methods);file->methods=0; for(t=0;tclasses->num;t++) { abc_class_t*cls = (abc_class_t*)array_getvalue(file->classes, t); traits_free(cls->traits);cls->traits=0; traits_free(cls->static_traits);cls->static_traits=0; if(cls->classname) { multiname_destroy(cls->classname); } if(cls->superclass) { multiname_destroy(cls->superclass); } multiname_list_t*i = cls->interfaces; while(i) { multiname_destroy(i->multiname);i->multiname=0; i = i->next; } list_free(cls->interfaces);cls->interfaces=0; if(cls->protectedNS) { namespace_destroy(cls->protectedNS); } free(cls); } array_free(file->classes);file->classes=0; for(t=0;tscripts->num;t++) { abc_script_t*s = (abc_script_t*)array_getvalue(file->scripts, t); traits_free(s->traits);s->traits=0; free(s); } array_free(file->scripts);file->scripts=0; for(t=0;tmethod_bodies->num;t++) { abc_method_body_t*body = (abc_method_body_t*)array_getvalue(file->method_bodies, t); code_free(body->code);body->code=0; traits_free(body->traits);body->traits=0; abc_exception_list_t*ee = body->exceptions; while(ee) { abc_exception_t*e=ee->abc_exception;ee->abc_exception=0; e->from = e->to = e->target = 0; multiname_destroy(e->exc_type);e->exc_type=0; multiname_destroy(e->var_name);e->var_name=0; free(e); ee=ee->next; } list_free(body->exceptions);body->exceptions=0; free(body); } array_free(file->method_bodies);file->method_bodies=0; if(file->name) { free((void*)file->name);file->name=0; } free(file); } void swf_FreeABC(void*code) { abc_file_t*file= (abc_file_t*)code; abc_file_free(file); } swftools_0.9.2+git20130725.orig/lib/as3/expr.h0000644000175000017500000001044612216332640017713 0ustar gawaingawain/* expr.h Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #ifndef __expr_h__ #define __expr_h__ #include "../q.h" #include "code.h" #include "registry.h" #include "pool.h" DECLARE(node); DECLARE(typedcode); DECLARE(nodetype); DECLARE_LIST(node); struct _typedcode { code_t*c; classinfo_t*t; }; #define NODE_HAS_CHILDREN 1 struct _nodetype { char*name; int flags; typedcode_t (*write)(node_t*n); typedcode_t (*read)(node_t*n); code_t* (*exec)(node_t*n); constant_t (*eval)(node_t*n); }; extern nodetype_t node_plus; extern nodetype_t node_minus; extern nodetype_t node_lplusplus; //++x extern nodetype_t node_lminusminus; //--x extern nodetype_t node_rplusplus; //x++ extern nodetype_t node_rminusminus; //x-- extern nodetype_t node_multiply; extern nodetype_t node_div; extern nodetype_t node_mod; extern nodetype_t node_dot; extern nodetype_t node_lt; extern nodetype_t node_gt; extern nodetype_t node_le; //<= extern nodetype_t node_ge; //>= extern nodetype_t node_eqeq; //== extern nodetype_t node_eqeqeq; //=== extern nodetype_t node_noteqeq; //!== extern nodetype_t node_noteq; //!= extern nodetype_t node_oror; //|| extern nodetype_t node_andand; //&& extern nodetype_t node_not; extern nodetype_t node_bitnot; extern nodetype_t node_bitand; extern nodetype_t node_bitxor; extern nodetype_t node_bitor; extern nodetype_t node_shr; //>> extern nodetype_t node_shl; //<< extern nodetype_t node_ushr; //>>> extern nodetype_t node_in; //in extern nodetype_t node_as; //as extern nodetype_t node_instanceof; //instanceof extern nodetype_t node_is; //is extern nodetype_t node_typeof; //typeof extern nodetype_t node_void; //void extern nodetype_t node_neg; //- extern nodetype_t node_muleq; //*= extern nodetype_t node_modeq; //%= extern nodetype_t node_shleq; //<<= extern nodetype_t node_shreq; //>>= extern nodetype_t node_ushreq; //>>>= extern nodetype_t node_diveq; ///= extern nodetype_t node_bitoreq; //|= extern nodetype_t node_bitxoreq; //^= extern nodetype_t node_bitandeq; //&= extern nodetype_t node_pluseq; //+= extern nodetype_t node_minuseq; //-= extern nodetype_t node_assign; //-= extern nodetype_t node_tenary; //?: extern nodetype_t node_arraylookup; //x[y] extern nodetype_t node_comma; //(y1,y2,...,yn) extern nodetype_t node_const; extern nodetype_t node_code; #if 0 extern nodetype_t node_dotdot; //.. extern nodetype_t node_dotat; //.@ extern nodetype_t node_dotstar; //.* extern nodetype_t node_filter; //.( extern nodetype_t node_new; //new extern nodetype_t node_delete; //delete extern nodetype_t node_call; //functioncall extern nodetype_t node_at; //@ extern nodetype_t node_dotns; //.:: #endif node_t* multinode_extend(node_t*n, node_t*add); struct _node { nodetype_t*type; node_t*parent; union { struct { node_t**child; int num_children; }; constant_t*value; char*id; typedcode_t code; }; }; node_t* mkdummynode(); node_t* mkconstnode(constant_t*c); node_t* mkcodenode(typedcode_t c); node_t* mkstringnode(const char*s); node_t* mkaddnode(node_t*n1, node_t*n2); node_t* mkmultinode(nodetype_t*t, node_t*one); node_t* mknode1(nodetype_t*t, node_t*node); node_t* mknode2(nodetype_t*t, node_t*left, node_t*right); node_t* mknode3(nodetype_t*t, node_t*one, node_t*two, node_t*three); void node_free(node_t*n); typedcode_t node_read(node_t*n); //read and free typedcode_t node_write(node_t*n); //write and free code_t* node_exec(node_t*n); //exec and free constant_t node_eval(node_t*n); //eval and free void node_dump(node_t*n); #endif swftools_0.9.2+git20130725.orig/lib/as3/files.h0000644000175000017500000000307612216332640020040 0ustar gawaingawain/* files.h Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __avm2_files_h__ #define __avm2_files_h__ typedef struct _include_dir { char*path; struct _include_dir*next; } include_dir_t; extern int current_line; extern int current_column; extern char* current_filename; extern char* current_filename_short; extern char* current_filename_long; extern include_dir_t* current_include_dirs; void add_include_dir(char*dir); char*find_file(const char*filename, char report_errors); void enter_file(const char*name, const char*filename, void*state); FILE* enter_file2(const char*name, const char*filename, void*state); void* leave_file(); char* concat_paths(const char*base, const char*add); char* normalize_path(const char*path); char* filename_to_lowercase(const char*name); #endif swftools_0.9.2+git20130725.orig/lib/as3/opcodes.h0000644000175000017500000006341512216332640020375 0ustar gawaingawain#ifndef __opcodes_h__ #define __opcodes_h__ #include "abc.h" #include "pool.h" #include "code.h" code_t* abc_add(code_t*prev); #define add(method) (method->code = abc_add(method->code)) #define OPCODE_ADD 0xa0 code_t* abc_add_i(code_t*prev); #define add_i(method) (method->code = abc_add_i(method->code)) #define OPCODE_ADD_I 0xc5 code_t* abc_astype(code_t*prev, char* name); #define astype(method,name) (method->code = abc_astype(method->code,name)) #define OPCODE_ASTYPE 0x86 code_t* abc_astype2(code_t*prev, multiname_t* name); #define astype2(method,name) (method->code = abc_astype2(method->code,name)) #define OPCODE_ASTYPE2 0x86 code_t* abc_astypelate(code_t*prev); #define astypelate(method) (method->code = abc_astypelate(method->code)) #define OPCODE_ASTYPELATE 0x87 code_t* abc_bitand(code_t*prev); #define bitand(method) (method->code = abc_bitand(method->code)) #define OPCODE_BITAND 0xA8 code_t* abc_bitnot(code_t*prev); #define bitnot(method) (method->code = abc_bitnot(method->code)) #define OPCODE_BITNOT 0x97 code_t* abc_bitor(code_t*prev); #define bitor(method) (method->code = abc_bitor(method->code)) #define OPCODE_BITOR 0xa9 code_t* abc_bitxor(code_t*prev); #define bitxor(method) (method->code = abc_bitxor(method->code)) #define OPCODE_BITXOR 0xaa code_t* abc_call(code_t*prev, int v); #define call(method,v) (method->code = abc_call(method->code,v)) #define OPCODE_CALL 0x41 code_t* abc_callmethod(code_t*prev, abc_method_t* m, int v); #define callmethod(method,m,v) (method->code = abc_callmethod(method->code,m,v)) #define OPCODE_CALLMETHOD 0x43 code_t* abc_callproplex(code_t*prev, char* name, int v); #define callproplex(method,name,v) (method->code = abc_callproplex(method->code,name,v)) #define OPCODE_CALLPROPLEX 0x4c code_t* abc_callproplex2(code_t*prev, multiname_t* name, int v); #define callproplex2(method,name,v) (method->code = abc_callproplex2(method->code,name,v)) #define OPCODE_CALLPROPLEX2 0x4c code_t* abc_callproperty(code_t*prev, char* name, int v); #define callproperty(method,name,v) (method->code = abc_callproperty(method->code,name,v)) #define OPCODE_CALLPROPERTY 0x46 code_t* abc_callproperty2(code_t*prev, multiname_t* name, int v); #define callproperty2(method,name,v) (method->code = abc_callproperty2(method->code,name,v)) #define OPCODE_CALLPROPERTY2 0x46 code_t* abc_callpropvoid(code_t*prev, char* name, int v); #define callpropvoid(method,name,v) (method->code = abc_callpropvoid(method->code,name,v)) #define OPCODE_CALLPROPVOID 0x4f code_t* abc_callpropvoid2(code_t*prev, multiname_t* name, int v); #define callpropvoid2(method,name,v) (method->code = abc_callpropvoid2(method->code,name,v)) #define OPCODE_CALLPROPVOID2 0x4f code_t* abc_callstatic(code_t*prev, abc_method_body_t* m, int v); #define callstatic(method,m,v) (method->code = abc_callstatic(method->code,m,v)) #define OPCODE_CALLSTATIC 0x44 code_t* abc_callsuper(code_t*prev, char* name, int v); #define callsuper(method,name,v) (method->code = abc_callsuper(method->code,name,v)) #define OPCODE_CALLSUPER 0x45 code_t* abc_callsuper2(code_t*prev, multiname_t* name, int v); #define callsuper2(method,name,v) (method->code = abc_callsuper2(method->code,name,v)) #define OPCODE_CALLSUPER2 0x45 code_t* abc_callsupervoid(code_t*prev, char* name, int v); #define callsupervoid(method,name,v) (method->code = abc_callsupervoid(method->code,name,v)) #define OPCODE_CALLSUPERVOID 0x4e code_t* abc_callsupervoid2(code_t*prev, multiname_t* name, int v); #define callsupervoid2(method,name,v) (method->code = abc_callsupervoid2(method->code,name,v)) #define OPCODE_CALLSUPERVOID2 0x4e code_t* abc_checkfilter(code_t*prev); #define checkfilter(method) (method->code = abc_checkfilter(method->code)) #define OPCODE_CHECKFILTER 0x78 code_t* abc_coerce(code_t*prev, char* name); #define coerce(method,name) (method->code = abc_coerce(method->code,name)) #define OPCODE_COERCE 0x80 code_t* abc_coerce2(code_t*prev, multiname_t* name); #define coerce2(method,name) (method->code = abc_coerce2(method->code,name)) #define OPCODE_COERCE2 0x80 code_t* abc_coerce_a(code_t*prev); #define coerce_a(method) (method->code = abc_coerce_a(method->code)) #define OPCODE_COERCE_A 0x82 code_t* abc_coerce_s(code_t*prev); #define coerce_s(method) (method->code = abc_coerce_s(method->code)) #define OPCODE_COERCE_S 0x85 code_t* abc_construct(code_t*prev, int v); #define construct(method,v) (method->code = abc_construct(method->code,v)) #define OPCODE_CONSTRUCT 0x42 code_t* abc_constructprop(code_t*prev, char* name, int v); #define constructprop(method,name,v) (method->code = abc_constructprop(method->code,name,v)) #define OPCODE_CONSTRUCTPROP 0x4a code_t* abc_constructprop2(code_t*prev, multiname_t* name, int v); #define constructprop2(method,name,v) (method->code = abc_constructprop2(method->code,name,v)) #define OPCODE_CONSTRUCTPROP2 0x4a code_t* abc_constructsuper(code_t*prev, int v); #define constructsuper(method,v) (method->code = abc_constructsuper(method->code,v)) #define OPCODE_CONSTRUCTSUPER 0x49 code_t* abc_convert_b(code_t*prev); #define convert_b(method) (method->code = abc_convert_b(method->code)) #define OPCODE_CONVERT_B 0x76 code_t* abc_convert_i(code_t*prev); #define convert_i(method) (method->code = abc_convert_i(method->code)) #define OPCODE_CONVERT_I 0x73 code_t* abc_convert_d(code_t*prev); #define convert_d(method) (method->code = abc_convert_d(method->code)) #define OPCODE_CONVERT_D 0x75 code_t* abc_convert_o(code_t*prev); #define convert_o(method) (method->code = abc_convert_o(method->code)) #define OPCODE_CONVERT_O 0x77 code_t* abc_convert_u(code_t*prev); #define convert_u(method) (method->code = abc_convert_u(method->code)) #define OPCODE_CONVERT_U 0x74 code_t* abc_convert_s(code_t*prev); #define convert_s(method) (method->code = abc_convert_s(method->code)) #define OPCODE_CONVERT_S 0x70 code_t* abc_debug(code_t*prev, void* debuginfo); #define debug(method,debuginfo) (method->code = abc_debug(method->code,debuginfo)) #define OPCODE_DEBUG 0xef code_t* abc_debugfile(code_t*prev, char* name); #define debugfile(method,name) (method->code = abc_debugfile(method->code,name)) #define OPCODE_DEBUGFILE 0xf1 code_t* abc_debugfile2(code_t*prev, string_t* s); #define debugfile2(method,s) (method->code = abc_debugfile2(method->code,s)) #define OPCODE_DEBUGFILE2 0xf1 code_t* abc_debugline(code_t*prev, int v); #define debugline(method,v) (method->code = abc_debugline(method->code,v)) #define OPCODE_DEBUGLINE 0xf0 code_t* abc_declocal(code_t*prev, int reg); #define declocal(method,reg) (method->code = abc_declocal(method->code,reg)) #define OPCODE_DECLOCAL 0x94 code_t* abc_declocal_i(code_t*prev, int reg); #define declocal_i(method,reg) (method->code = abc_declocal_i(method->code,reg)) #define OPCODE_DECLOCAL_I 0xc3 code_t* abc_decrement(code_t*prev); #define decrement(method) (method->code = abc_decrement(method->code)) #define OPCODE_DECREMENT 0x93 code_t* abc_decrement_i(code_t*prev); #define decrement_i(method) (method->code = abc_decrement_i(method->code)) #define OPCODE_DECREMENT_I 0xc1 code_t* abc_deleteproperty(code_t*prev, char* name); #define deleteproperty(method,name) (method->code = abc_deleteproperty(method->code,name)) #define OPCODE_DELETEPROPERTY 0x6a code_t* abc_deleteproperty2(code_t*prev, multiname_t* name); #define deleteproperty2(method,name) (method->code = abc_deleteproperty2(method->code,name)) #define OPCODE_DELETEPROPERTY2 0x6a code_t* abc_divide(code_t*prev); #define divide(method) (method->code = abc_divide(method->code)) #define OPCODE_DIVIDE 0xa3 code_t* abc_dup(code_t*prev); #define dup(method) (method->code = abc_dup(method->code)) #define OPCODE_DUP 0x2a code_t* abc_dxns(code_t*prev, char* name); #define dxns(method,name) (method->code = abc_dxns(method->code,name)) #define OPCODE_DXNS 0x06 code_t* abc_dxns2(code_t*prev, string_t* s); #define dxns2(method,s) (method->code = abc_dxns2(method->code,s)) #define OPCODE_DXNS2 0x06 code_t* abc_dxnslate(code_t*prev); #define dxnslate(method) (method->code = abc_dxnslate(method->code)) #define OPCODE_DXNSLATE 0x07 code_t* abc_equals(code_t*prev); #define equals(method) (method->code = abc_equals(method->code)) #define OPCODE_EQUALS 0xab code_t* abc_esc_xattr(code_t*prev); #define esc_xattr(method) (method->code = abc_esc_xattr(method->code)) #define OPCODE_ESC_XATTR 0x72 code_t* abc_esc_xelem(code_t*prev); #define esc_xelem(method) (method->code = abc_esc_xelem(method->code)) #define OPCODE_ESC_XELEM 0x71 code_t* abc_findproperty(code_t*prev, char* name); #define findproperty(method,name) (method->code = abc_findproperty(method->code,name)) #define OPCODE_FINDPROPERTY 0x5e code_t* abc_findproperty2(code_t*prev, multiname_t* name); #define findproperty2(method,name) (method->code = abc_findproperty2(method->code,name)) #define OPCODE_FINDPROPERTY2 0x5e code_t* abc_findpropstrict(code_t*prev, char* name); #define findpropstrict(method,name) (method->code = abc_findpropstrict(method->code,name)) #define OPCODE_FINDPROPSTRICT 0x5d code_t* abc_findpropstrict2(code_t*prev, multiname_t* name); #define findpropstrict2(method,name) (method->code = abc_findpropstrict2(method->code,name)) #define OPCODE_FINDPROPSTRICT2 0x5d code_t* abc_getdescendants(code_t*prev, char* name); #define getdescendants(method,name) (method->code = abc_getdescendants(method->code,name)) #define OPCODE_GETDESCENDANTS 0x59 code_t* abc_getdescendants2(code_t*prev, multiname_t* name); #define getdescendants2(method,name) (method->code = abc_getdescendants2(method->code,name)) #define OPCODE_GETDESCENDANTS2 0x59 code_t* abc_getglobalscope(code_t*prev); #define getglobalscope(method) (method->code = abc_getglobalscope(method->code)) #define OPCODE_GETGLOBALSCOPE 0x64 code_t* abc_getglobalslot(code_t*prev, int v); #define getglobalslot(method,v) (method->code = abc_getglobalslot(method->code,v)) #define OPCODE_GETGLOBALSLOT 0x6e code_t* abc_getlex(code_t*prev, char* name); #define getlex(method,name) (method->code = abc_getlex(method->code,name)) #define OPCODE_GETLEX 0x60 code_t* abc_getlex2(code_t*prev, multiname_t* name); #define getlex2(method,name) (method->code = abc_getlex2(method->code,name)) #define OPCODE_GETLEX2 0x60 code_t* abc_getlocal(code_t*prev, int reg); #define getlocal(method,reg) (method->code = abc_getlocal(method->code,reg)) #define OPCODE_GETLOCAL 0x62 code_t* abc_getlocal_0(code_t*prev); #define getlocal_0(method) (method->code = abc_getlocal_0(method->code)) #define OPCODE_GETLOCAL_0 0xd0 code_t* abc_getlocal_1(code_t*prev); #define getlocal_1(method) (method->code = abc_getlocal_1(method->code)) #define OPCODE_GETLOCAL_1 0xd1 code_t* abc_getlocal_2(code_t*prev); #define getlocal_2(method) (method->code = abc_getlocal_2(method->code)) #define OPCODE_GETLOCAL_2 0xd2 code_t* abc_getlocal_3(code_t*prev); #define getlocal_3(method) (method->code = abc_getlocal_3(method->code)) #define OPCODE_GETLOCAL_3 0xd3 code_t* abc_getproperty(code_t*prev, char* name); #define getproperty(method,name) (method->code = abc_getproperty(method->code,name)) #define OPCODE_GETPROPERTY 0x66 code_t* abc_getproperty2(code_t*prev, multiname_t* name); #define getproperty2(method,name) (method->code = abc_getproperty2(method->code,name)) #define OPCODE_GETPROPERTY2 0x66 code_t* abc_getscopeobject(code_t*prev, int v); #define getscopeobject(method,v) (method->code = abc_getscopeobject(method->code,v)) #define OPCODE_GETSCOPEOBJECT 0x65 code_t* abc_getslot(code_t*prev, int v); #define getslot(method,v) (method->code = abc_getslot(method->code,v)) #define OPCODE_GETSLOT 0x6c code_t* abc_getsuper(code_t*prev, char* name); #define getsuper(method,name) (method->code = abc_getsuper(method->code,name)) #define OPCODE_GETSUPER 0x04 code_t* abc_getsuper2(code_t*prev, multiname_t* name); #define getsuper2(method,name) (method->code = abc_getsuper2(method->code,name)) #define OPCODE_GETSUPER2 0x04 code_t* abc_greaterthan(code_t*prev); #define greaterthan(method) (method->code = abc_greaterthan(method->code)) #define OPCODE_GREATERTHAN 0xaf code_t* abc_greaterequals(code_t*prev); #define greaterequals(method) (method->code = abc_greaterequals(method->code)) #define OPCODE_GREATEREQUALS 0xb0 code_t* abc_hasnext(code_t*prev); #define hasnext(method) (method->code = abc_hasnext(method->code)) #define OPCODE_HASNEXT 0x1f code_t* abc_hasnext2(code_t*prev, int reg, int reg2); #define hasnext2(method,reg,reg2) (method->code = abc_hasnext2(method->code,reg,reg2)) #define OPCODE_HASNEXT2 0x32 code_t* abc_ifeq(code_t*prev, code_t* label); #define ifeq(method,label) (method->code = abc_ifeq(method->code,label)) #define OPCODE_IFEQ 0x13 code_t* abc_iffalse(code_t*prev, code_t* label); #define iffalse(method,label) (method->code = abc_iffalse(method->code,label)) #define OPCODE_IFFALSE 0x12 code_t* abc_ifge(code_t*prev, code_t* label); #define ifge(method,label) (method->code = abc_ifge(method->code,label)) #define OPCODE_IFGE 0x18 code_t* abc_ifgt(code_t*prev, code_t* label); #define ifgt(method,label) (method->code = abc_ifgt(method->code,label)) #define OPCODE_IFGT 0x17 code_t* abc_ifle(code_t*prev, code_t* label); #define ifle(method,label) (method->code = abc_ifle(method->code,label)) #define OPCODE_IFLE 0x16 code_t* abc_iflt(code_t*prev, code_t* label); #define iflt(method,label) (method->code = abc_iflt(method->code,label)) #define OPCODE_IFLT 0x15 code_t* abc_ifnge(code_t*prev, code_t* label); #define ifnge(method,label) (method->code = abc_ifnge(method->code,label)) #define OPCODE_IFNGE 0x0f code_t* abc_ifngt(code_t*prev, code_t* label); #define ifngt(method,label) (method->code = abc_ifngt(method->code,label)) #define OPCODE_IFNGT 0x0e code_t* abc_ifnle(code_t*prev, code_t* label); #define ifnle(method,label) (method->code = abc_ifnle(method->code,label)) #define OPCODE_IFNLE 0x0d code_t* abc_ifnlt(code_t*prev, code_t* label); #define ifnlt(method,label) (method->code = abc_ifnlt(method->code,label)) #define OPCODE_IFNLT 0x0c code_t* abc_ifne(code_t*prev, code_t* label); #define ifne(method,label) (method->code = abc_ifne(method->code,label)) #define OPCODE_IFNE 0x14 code_t* abc_ifstricteq(code_t*prev, code_t* label); #define ifstricteq(method,label) (method->code = abc_ifstricteq(method->code,label)) #define OPCODE_IFSTRICTEQ 0x19 code_t* abc_ifstrictne(code_t*prev, code_t* label); #define ifstrictne(method,label) (method->code = abc_ifstrictne(method->code,label)) #define OPCODE_IFSTRICTNE 0x1a code_t* abc_iftrue(code_t*prev, code_t* label); #define iftrue(method,label) (method->code = abc_iftrue(method->code,label)) #define OPCODE_IFTRUE 0x11 code_t* abc_in(code_t*prev); #define in(method) (method->code = abc_in(method->code)) #define OPCODE_IN 0xb4 code_t* abc_inclocal(code_t*prev, int reg); #define inclocal(method,reg) (method->code = abc_inclocal(method->code,reg)) #define OPCODE_INCLOCAL 0x92 code_t* abc_inclocal_i(code_t*prev, int reg); #define inclocal_i(method,reg) (method->code = abc_inclocal_i(method->code,reg)) #define OPCODE_INCLOCAL_I 0xc2 code_t* abc_increment(code_t*prev); #define increment(method) (method->code = abc_increment(method->code)) #define OPCODE_INCREMENT 0x91 code_t* abc_increment_i(code_t*prev); #define increment_i(method) (method->code = abc_increment_i(method->code)) #define OPCODE_INCREMENT_I 0xc0 code_t* abc_initproperty(code_t*prev, char* name); #define initproperty(method,name) (method->code = abc_initproperty(method->code,name)) #define OPCODE_INITPROPERTY 0x68 code_t* abc_initproperty2(code_t*prev, multiname_t* name); #define initproperty2(method,name) (method->code = abc_initproperty2(method->code,name)) #define OPCODE_INITPROPERTY2 0x68 code_t* abc_instanceof(code_t*prev); #define instanceof(method) (method->code = abc_instanceof(method->code)) #define OPCODE_INSTANCEOF 0xb1 code_t* abc_istype(code_t*prev, char* name); #define istype(method,name) (method->code = abc_istype(method->code,name)) #define OPCODE_ISTYPE 0xb2 code_t* abc_istype2(code_t*prev, multiname_t* name); #define istype2(method,name) (method->code = abc_istype2(method->code,name)) #define OPCODE_ISTYPE2 0xb2 code_t* abc_istypelate(code_t*prev); #define istypelate(method) (method->code = abc_istypelate(method->code)) #define OPCODE_ISTYPELATE 0xb3 code_t* abc_jump(code_t*prev, code_t* label); #define jump(method,label) (method->code = abc_jump(method->code,label)) #define OPCODE_JUMP 0x10 code_t* abc_kill(code_t*prev, int reg); #define kill(method,reg) (method->code = abc_kill(method->code,reg)) #define OPCODE_KILL 0x08 code_t* abc_label(code_t*prev); #define label(method) (method->code = abc_label(method->code)) #define OPCODE_LABEL 0x09 code_t* abc_lessequals(code_t*prev); #define lessequals(method) (method->code = abc_lessequals(method->code)) #define OPCODE_LESSEQUALS 0xae code_t* abc_lessthan(code_t*prev); #define lessthan(method) (method->code = abc_lessthan(method->code)) #define OPCODE_LESSTHAN 0xad code_t* abc_lookupswitch(code_t*prev, lookupswitch_t* l); #define lookupswitch(method,l) (method->code = abc_lookupswitch(method->code,l)) #define OPCODE_LOOKUPSWITCH 0x1b code_t* abc_lshift(code_t*prev); #define lshift(method) (method->code = abc_lshift(method->code)) #define OPCODE_LSHIFT 0xa5 code_t* abc_modulo(code_t*prev); #define modulo(method) (method->code = abc_modulo(method->code)) #define OPCODE_MODULO 0xa4 code_t* abc_multiply(code_t*prev); #define multiply(method) (method->code = abc_multiply(method->code)) #define OPCODE_MULTIPLY 0xa2 code_t* abc_multiply_i(code_t*prev); #define multiply_i(method) (method->code = abc_multiply_i(method->code)) #define OPCODE_MULTIPLY_I 0xc7 code_t* abc_negate(code_t*prev); #define negate(method) (method->code = abc_negate(method->code)) #define OPCODE_NEGATE 0x90 code_t* abc_negate_i(code_t*prev); #define negate_i(method) (method->code = abc_negate_i(method->code)) #define OPCODE_NEGATE_I 0xc4 code_t* abc_newactivation(code_t*prev); #define newactivation(method) (method->code = abc_newactivation(method->code)) #define OPCODE_NEWACTIVATION 0x57 code_t* abc_newarray(code_t*prev, int v); #define newarray(method,v) (method->code = abc_newarray(method->code,v)) #define OPCODE_NEWARRAY 0x56 code_t* abc_newcatch(code_t*prev, int v); #define newcatch(method,v) (method->code = abc_newcatch(method->code,v)) #define OPCODE_NEWCATCH 0x5a code_t* abc_newclass(code_t*prev, abc_class_t* m); #define newclass(method,m) (method->code = abc_newclass(method->code,m)) #define OPCODE_NEWCLASS 0x58 code_t* abc_newfunction(code_t*prev, abc_method_t* m); #define newfunction(method,m) (method->code = abc_newfunction(method->code,m)) #define OPCODE_NEWFUNCTION 0x40 code_t* abc_newobject(code_t*prev, int v); #define newobject(method,v) (method->code = abc_newobject(method->code,v)) #define OPCODE_NEWOBJECT 0x55 code_t* abc_nextname(code_t*prev); #define nextname(method) (method->code = abc_nextname(method->code)) #define OPCODE_NEXTNAME 0x1e code_t* abc_nextvalue(code_t*prev); #define nextvalue(method) (method->code = abc_nextvalue(method->code)) #define OPCODE_NEXTVALUE 0x23 code_t* abc_nop(code_t*prev); #define nop(method) (method->code = abc_nop(method->code)) #define OPCODE_NOP 0x02 code_t* abc_not(code_t*prev); #define not(method) (method->code = abc_not(method->code)) #define OPCODE_NOT 0x96 code_t* abc_pop(code_t*prev); #define pop(method) (method->code = abc_pop(method->code)) #define OPCODE_POP 0x29 code_t* abc_popscope(code_t*prev); #define popscope(method) (method->code = abc_popscope(method->code)) #define OPCODE_POPSCOPE 0x1d code_t* abc_pushbyte(code_t*prev, int v); #define pushbyte(method,v) (method->code = abc_pushbyte(method->code,v)) #define OPCODE_PUSHBYTE 0x24 code_t* abc_pushdouble(code_t*prev, double f); #define pushdouble(method,f) (method->code = abc_pushdouble(method->code,f)) #define OPCODE_PUSHDOUBLE 0x2f code_t* abc_pushfalse(code_t*prev); #define pushfalse(method) (method->code = abc_pushfalse(method->code)) #define OPCODE_PUSHFALSE 0x27 code_t* abc_pushint(code_t*prev, int i); #define pushint(method,i) (method->code = abc_pushint(method->code,i)) #define OPCODE_PUSHINT 0x2d code_t* abc_pushnamespace(code_t*prev, namespace_t* ns); #define pushnamespace(method,ns) (method->code = abc_pushnamespace(method->code,ns)) #define OPCODE_PUSHNAMESPACE 0x31 code_t* abc_pushnan(code_t*prev); #define pushnan(method) (method->code = abc_pushnan(method->code)) #define OPCODE_PUSHNAN 0x28 code_t* abc_pushnull(code_t*prev); #define pushnull(method) (method->code = abc_pushnull(method->code)) #define OPCODE_PUSHNULL 0x20 code_t* abc_pushscope(code_t*prev); #define pushscope(method) (method->code = abc_pushscope(method->code)) #define OPCODE_PUSHSCOPE 0x30 code_t* abc_pushshort(code_t*prev, int v); #define pushshort(method,v) (method->code = abc_pushshort(method->code,v)) #define OPCODE_PUSHSHORT 0x25 code_t* abc_pushstring(code_t*prev, char* name); #define pushstring(method,name) (method->code = abc_pushstring(method->code,name)) #define OPCODE_PUSHSTRING 0x2c code_t* abc_pushstring2(code_t*prev, string_t* s); #define pushstring2(method,s) (method->code = abc_pushstring2(method->code,s)) #define OPCODE_PUSHSTRING2 0x2c code_t* abc_pushtrue(code_t*prev); #define pushtrue(method) (method->code = abc_pushtrue(method->code)) #define OPCODE_PUSHTRUE 0x26 code_t* abc_pushuint(code_t*prev, unsigned int u); #define pushuint(method,u) (method->code = abc_pushuint(method->code,u)) #define OPCODE_PUSHUINT 0x2e code_t* abc_pushundefined(code_t*prev); #define pushundefined(method) (method->code = abc_pushundefined(method->code)) #define OPCODE_PUSHUNDEFINED 0x21 code_t* abc_pushwith(code_t*prev); #define pushwith(method) (method->code = abc_pushwith(method->code)) #define OPCODE_PUSHWITH 0x1c code_t* abc_returnvalue(code_t*prev); #define returnvalue(method) (method->code = abc_returnvalue(method->code)) #define OPCODE_RETURNVALUE 0x48 code_t* abc_returnvoid(code_t*prev); #define returnvoid(method) (method->code = abc_returnvoid(method->code)) #define OPCODE_RETURNVOID 0x47 code_t* abc_rshift(code_t*prev); #define rshift(method) (method->code = abc_rshift(method->code)) #define OPCODE_RSHIFT 0xa6 code_t* abc_setlocal(code_t*prev, int reg); #define setlocal(method,reg) (method->code = abc_setlocal(method->code,reg)) #define OPCODE_SETLOCAL 0x63 code_t* abc_setlocal_0(code_t*prev); #define setlocal_0(method) (method->code = abc_setlocal_0(method->code)) #define OPCODE_SETLOCAL_0 0xd4 code_t* abc_setlocal_1(code_t*prev); #define setlocal_1(method) (method->code = abc_setlocal_1(method->code)) #define OPCODE_SETLOCAL_1 0xd5 code_t* abc_setlocal_2(code_t*prev); #define setlocal_2(method) (method->code = abc_setlocal_2(method->code)) #define OPCODE_SETLOCAL_2 0xd6 code_t* abc_setlocal_3(code_t*prev); #define setlocal_3(method) (method->code = abc_setlocal_3(method->code)) #define OPCODE_SETLOCAL_3 0xd7 code_t* abc_setglobalslot(code_t*prev, int v); #define setglobalslot(method,v) (method->code = abc_setglobalslot(method->code,v)) #define OPCODE_SETGLOBALSLOT 0x6f code_t* abc_setproperty(code_t*prev, char* name); #define setproperty(method,name) (method->code = abc_setproperty(method->code,name)) #define OPCODE_SETPROPERTY 0x61 code_t* abc_setproperty2(code_t*prev, multiname_t* name); #define setproperty2(method,name) (method->code = abc_setproperty2(method->code,name)) #define OPCODE_SETPROPERTY2 0x61 code_t* abc_setslot(code_t*prev, int v); #define setslot(method,v) (method->code = abc_setslot(method->code,v)) #define OPCODE_SETSLOT 0x6d code_t* abc_setsuper(code_t*prev, char* name); #define setsuper(method,name) (method->code = abc_setsuper(method->code,name)) #define OPCODE_SETSUPER 0x05 code_t* abc_setsuper2(code_t*prev, multiname_t* name); #define setsuper2(method,name) (method->code = abc_setsuper2(method->code,name)) #define OPCODE_SETSUPER2 0x05 code_t* abc_strictequals(code_t*prev); #define strictequals(method) (method->code = abc_strictequals(method->code)) #define OPCODE_STRICTEQUALS 0xac code_t* abc_subtract(code_t*prev); #define subtract(method) (method->code = abc_subtract(method->code)) #define OPCODE_SUBTRACT 0xa1 code_t* abc_subtract_i(code_t*prev); #define subtract_i(method) (method->code = abc_subtract_i(method->code)) #define OPCODE_SUBTRACT_I 0xc6 code_t* abc_swap(code_t*prev); #define swap(method) (method->code = abc_swap(method->code)) #define OPCODE_SWAP 0x2b code_t* abc_throw(code_t*prev); #define throw(method) (method->code = abc_throw(method->code)) #define OPCODE_THROW 0x03 code_t* abc_typeof(code_t*prev); #define typeof(method) (method->code = abc_typeof(method->code)) #define OPCODE_TYPEOF 0x95 code_t* abc_urshift(code_t*prev); #define urshift(method) (method->code = abc_urshift(method->code)) #define OPCODE_URSHIFT 0xa7 code_t* abc_applytype(code_t*prev, int v); #define applytype(method,v) (method->code = abc_applytype(method->code,v)) #define OPCODE_APPLYTYPE 0x53 code_t* abc___pushpackage__(code_t*prev, char* name); #define __pushpackage__(method,name) (method->code = abc___pushpackage__(method->code,name)) #define OPCODE___PUSHPACKAGE__ 0xfb code_t* abc___pushpackage__2(code_t*prev, string_t* s); #define __pushpackage__2(method,s) (method->code = abc___pushpackage__2(method->code,s)) #define OPCODE___PUSHPACKAGE__2 0xfb code_t* abc___rethrow__(code_t*prev); #define __rethrow__(method) (method->code = abc___rethrow__(method->code)) #define OPCODE___RETHROW__ 0xfc code_t* abc___fallthrough__(code_t*prev, char* name); #define __fallthrough__(method,name) (method->code = abc___fallthrough__(method->code,name)) #define OPCODE___FALLTHROUGH__ 0xfd code_t* abc___fallthrough__2(code_t*prev, string_t* s); #define __fallthrough__2(method,s) (method->code = abc___fallthrough__2(method->code,s)) #define OPCODE___FALLTHROUGH__2 0xfd code_t* abc___continue__(code_t*prev, char* name); #define __continue__(method,name) (method->code = abc___continue__(method->code,name)) #define OPCODE___CONTINUE__ 0xfe code_t* abc___continue__2(code_t*prev, string_t* s); #define __continue__2(method,s) (method->code = abc___continue__2(method->code,s)) #define OPCODE___CONTINUE__2 0xfe code_t* abc___break__(code_t*prev, char* name); #define __break__(method,name) (method->code = abc___break__(method->code,name)) #define OPCODE___BREAK__ 0xff code_t* abc___break__2(code_t*prev, string_t* s); #define __break__2(method,s) (method->code = abc___break__2(method->code,s)) #define OPCODE___BREAK__2 0xff #endif swftools_0.9.2+git20130725.orig/lib/as3/parser.h0000644000175000017500000000234012216332640020223 0ustar gawaingawain/* parser.h Routines for compiling Flash2 AVM2 ABC Actionscript Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __abc_parser_h__ #define __abc_parser_h__ /* first public class overloading MovieClip, if any */ extern char*as3_globalclass; void set_conditional(const char*part1, const char*part2); void initialize_parser(); void initialize_file(const char*name, const char*filename); void finish_file(); void* finish_parser(); #endif swftools_0.9.2+git20130725.orig/lib/as3/files.c0000644000175000017500000002044012216332640020025 0ustar gawaingawain/* files.c Extension module for the rfxswf library. Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include #include #include #include #include "files.h" #include "common.h" #include "tokenizer.h" #include "../os.h" static int verbose = 0; static void dbg(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(!verbose) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(includefilehandler) "); printf("%s\n", buf); fflush(stdout); } int current_line=1; int current_column=0; char* current_filename=0; char* current_filename_short=0; char* current_filename_long=0; include_dir_t* current_include_dirs=0; #define MAX_INCLUDE_DEPTH 16 void*include_stack[MAX_INCLUDE_DEPTH]; int line_stack[MAX_INCLUDE_DEPTH]; int column_stack[MAX_INCLUDE_DEPTH]; char* filename_stack[MAX_INCLUDE_DEPTH]; char* shortfilename_stack[MAX_INCLUDE_DEPTH]; char* longfilename_stack[MAX_INCLUDE_DEPTH]; include_dir_t* includedir_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; void add_include_dir(char*dir) { include_dir_t*d = malloc(sizeof(include_dir_t)); memset(d , 0, sizeof(include_dir_t)); d->path = strdup(dir); d->next = current_include_dirs; current_include_dirs = d; } void del_include_dirs(include_dir_t*d, include_dir_t*d2) { while(d && d!=d2) { include_dir_t*next = d->next; free(d->path);d->path=0; d->next = 0; free(d); d = next; } } char*get_path(const char*file) { char*path = strdup(file); char*r1 = strrchr(path, '/'); char*r2 = strrchr(path, '\\'); if(r1r2) { *r1=0; return path; } else { return strdup("."); } } char is_absolute(const char*filename) { if(!filename || !filename[0]) return 0; if(filename[0]=='/' || filename[0]=='\\') return 1; if(filename[1]==':' && filename[2]=='/') return 1; if(filename[1]==':' && filename[2]=='\\') return 1; return 0; } char* filename_to_lowercase(const char*name) { char*n = strdup(name); //char*x1 = strrchr(name, '/'); //char*x2 = strrchr(name, '\\'); char*s = n; //if(x1+1>s) s=x1+1; //if(x2+1>s) s=x2+1; while(*s) { /* FIXME: what we probably should do here is use libc's tolower(). I don't really know yet, though, how Windows (or MacOS X) handles lowercasing of Unicode filenames */ if(*s>='A' && *s<='Z') *s += 'a'-'A'; s++; } return n; } char* normalize_path(const char*path) { char*n = 0, *d = 0; if(!is_absolute(path)) { char buf[512]; char*c = getcwd(buf,512); int l = strlen(buf); d = n = malloc(l+strlen(path)+10); strcpy(n, buf);d += l; if(!l || n[l-1]!=path_seperator) { *d=path_seperator;d++; } } else { d = n = strdup(path); } const char*s=path; char init = 1; while(*s) { if(init && s[0] == '.' && (s[1]==path_seperator || s[1]=='\0')) { if(!s[1]) break; s+=2; init=1; continue; } if(init && s[0] == '.' && s[1] == '.' && (s[2] == path_seperator || s[2]=='\0')) { // step one down char*last = 0; if(d<=n) return 0; *--d = 0; if(!(last=strrchr(n, path_seperator))) { return 0; } d = last+1; if(!s[2]) break; s+=3; init=1; continue; } *d = *s; if(*s==path_seperator) init=1; else init=0; d++;s++; } if(d!=n && d[-1]==path_seperator) d--; *d = 0; #ifdef LOWERCASE_UPPERCASE n = filename_to_lowercase(n); #endif return n; } static void testnormalize() { #define TEST(x) {printf("%s -> %s\n", (x), normalize_path(x));} TEST("."); TEST("../as3"); TEST("../as3/"); TEST("../as3/parser.y"); TEST("../as3/ok/../ok/scope.as"); TEST("ok/scope.as"); TEST("ok/./scope.as"); TEST("./ok/scope.as"); TEST("./"); TEST("/tmp/"); TEST("/./tmp/"); TEST("../"); TEST("/"); TEST("/tmp"); TEST("/tmp/../usr/"); } char* concat_paths(const char*base, const char*add) { int l1 = strlen(base); int l2 = strlen(add); int pos = 0; char*n = 0; while(l1 && base[l1-1] == path_seperator) l1--; while(pos < l2 && add[pos] == path_seperator) pos++; n = (char*)malloc(l1 + (l2-pos) + 2); memcpy(n,base,l1); n[l1]=path_seperator; memcpy(&n[l1+1],&add[pos],l2-pos+1); return n; } char*find_file(const char*filename, char error) { include_dir_t*i = current_include_dirs; FILE*fi = 0; if(is_absolute(filename)) { FILE*fi = fopen(filename, "rb"); if(fi) { fclose(fi); return strdup(filename); } } else { if(!i && error) { as3_warning("Include directory stack is empty, while looking for file %s", filename); } while(i) { char*p = concat_paths(i->path, filename); fi = fopen(p, "rb"); if(fi) { fclose(fi); return p; } else { free(p); } i = i->next; } } if(!error) { return 0; } as3_error("Couldn't find file %s", filename); i = current_include_dirs; while(i) { fprintf(stderr, "include dir: %s\n", i->path); i = i->next; } return 0; } void enter_file(const char*name, const char*filename, void*state) { if(include_stack_ptr >= MAX_INCLUDE_DEPTH) { as3_error("Includes nested too deeply"); exit(1); } include_stack[include_stack_ptr] = state; line_stack[include_stack_ptr] = current_line; column_stack[include_stack_ptr] = current_column; shortfilename_stack[include_stack_ptr] = current_filename_short; longfilename_stack[include_stack_ptr] = current_filename_long; filename_stack[include_stack_ptr] = current_filename; includedir_stack[include_stack_ptr] = current_include_dirs; /*char*dir = get_path(filename); add_include_dir(dir); free(dir);*/ include_stack_ptr++; dbg("entering file %s", filename); current_line=1; current_column=0; current_filename = strdup(name); current_filename_short = strdup(name); current_filename_long = strdup(filename); } FILE*enter_file2(const char*name, const char*filename, void*state) { enter_file(name, filename, state); FILE*fi = fopen(filename, "rb"); if(!fi) { as3_error("Couldn't find file %s: %s", filename, strerror(errno)); } return fi; } void* leave_file() { dbg("leaving file %s", current_filename); if(--include_stack_ptr<=0) { return 0; } else { free(current_filename);current_filename = filename_stack[include_stack_ptr]; free(current_filename_short);current_filename_short = shortfilename_stack[include_stack_ptr]; free(current_filename_long);current_filename_long = longfilename_stack[include_stack_ptr]; current_column = column_stack[include_stack_ptr]; current_line = line_stack[include_stack_ptr]; del_include_dirs(includedir_stack[include_stack_ptr], current_include_dirs); current_include_dirs = includedir_stack[include_stack_ptr]; return include_stack[include_stack_ptr]; } } swftools_0.9.2+git20130725.orig/lib/as3/tokenizer.h0000644000175000017500000000417112216332640020745 0ustar gawaingawain/* tokenizer.h Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __parser_h__ #define __parser_h__ #include "../q.h" #include "abc.h" #include "pool.h" #include "files.h" #include "tokenizer.h" #include "registry.h" #include "code.h" #include "opcodes.h" #include "expr.h" DECLARE(token); DECLARE_LIST(token); DECLARE(param); DECLARE_LIST(param); DECLARE(params); DECLARE(modifiers); DECLARE(namespace_decl); DECLARE_LIST(namespace_decl); DECLARE_LIST(typedcode); struct _param { char*name; classinfo_t*type; constant_t*value; }; struct _params { param_list_t*list; char varargs; }; struct _modifiers { int flags; char*ns; }; struct _namespace_decl { const char*name; const char*url; }; /* small helper structs: */ typedef struct _codeandnumber { code_t*cc; int number; } codeandnumber_t; typedef struct _for_start { char*name; char each; } for_start_t; typedef struct _regexp { char*pattern; char*options; } regexp_t; extern char start_of_expression; typedef token_t*tokenptr_t; #include "parser.tab.h" extern char*token2string(enum yytokentype nr, YYSTYPE v); extern unsigned int as3_tokencount; void as3_buffer_input(void*buffer, int len); void as3_file_input(FILE*fi); void tokenizer_begin_xml(); void tokenizer_begin_xmltext(); void tokenizer_end_xmltext(); void tokenizer_end_xml(); #define T_EOF 0 extern int avm2_lex(); extern int avm2_lex_destroy(); #endif swftools_0.9.2+git20130725.orig/lib/as3/parser.tab.h0000644000175000017500000001215512216332640020775 0ustar gawaingawain /* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { T_IDENTIFIER = 258, T_STRING = 259, T_REGEXP = 260, T_EMPTY = 261, T_INT = 262, T_UINT = 263, T_FLOAT = 264, T_FOR = 265, T_WHILE = 266, T_DO = 267, T_SWITCH = 268, KW_IMPLEMENTS = 269, KW_NAMESPACE = 270, KW_PACKAGE = 271, KW_PROTECTED = 272, KW_ARGUMENTS = 273, KW_PUBLIC = 274, KW_PRIVATE = 275, KW_USE = 276, KW_INTERNAL = 277, KW_NEW = 278, KW_NATIVE = 279, KW_FUNCTION = 280, KW_FINALLY = 281, KW_UNDEFINED = 282, KW_NAN = 283, KW_CONTINUE = 284, KW_CLASS = 285, KW_CONST = 286, KW_CATCH = 287, KW_CASE = 288, KW_SET = 289, KW_VOID = 290, KW_THROW = 291, KW_STATIC = 292, KW_WITH = 293, KW_INSTANCEOF = 294, KW_IMPORT = 295, KW_RETURN = 296, KW_TYPEOF = 297, KW_INTERFACE = 298, KW_NULL = 299, KW_VAR = 300, KW_DYNAMIC = 301, KW_OVERRIDE = 302, KW_FINAL = 303, KW_EACH = 304, KW_GET = 305, KW_TRY = 306, KW_SUPER = 307, KW_EXTENDS = 308, KW_FALSE = 309, KW_TRUE = 310, KW_BOOLEAN = 311, KW_UINT = 312, KW_INT = 313, KW_NUMBER = 314, KW_STRING = 315, KW_DEFAULT = 316, KW_DEFAULT_XML = 317, KW_DELETE = 318, KW_IF = 319, KW_ELSE = 320, KW_BREAK = 321, KW_IS = 322, KW_IN = 323, KW_AS = 324, T_DICTSTART = 325, T_EQEQ = 326, T_EQEQEQ = 327, T_NE = 328, T_NEE = 329, T_LE = 330, T_GE = 331, T_ORBY = 332, T_DIVBY = 333, T_MODBY = 334, T_MULBY = 335, T_ANDBY = 336, T_PLUSBY = 337, T_MINUSBY = 338, T_XORBY = 339, T_SHRBY = 340, T_SHLBY = 341, T_USHRBY = 342, T_OROR = 343, T_ANDAND = 344, T_COLONCOLON = 345, T_MINUSMINUS = 346, T_PLUSPLUS = 347, T_DOTDOT = 348, T_DOTDOTDOT = 349, T_SHL = 350, T_USHR = 351, T_SHR = 352, prec_none = 353, prec_var_read = 354, below_semicolon = 355, below_assignment = 356, below_lt = 357, below_minus = 358, minusminus_prefix = 359, plusplus_prefix = 360, below_curly = 361, new2 = 362, below_identifier = 363, above_identifier = 364, below_else = 365, above_function = 366 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union /* Line 1685 of skeleton.m4 */ #line 48 "parser.y" tokenunion { /* Line 1685 of skeleton.m4 */ #line 48 "parser.y" enum yytokentype token; classinfo_t*classinfo; classinfo_list_t*classinfo_list; slotinfo_t*slotinfo; slotinfo_list_t*slotinfo_list; int number_int; unsigned int number_uint; double number_float; code_t*code; typedcode_t value; //typedcode_list_t*value_list; codeandnumber_t value_list; param_t* param; params_t params; string_t str; char*id; constant_t*constant; for_start_t for_start; abc_exception_t *exception; regexp_t regexp; modifiers_t flags; namespace_decl_t* namespace_decl; node_t*node; struct { abc_exception_list_t *l; code_t*finally; } catch_list; /* Line 1685 of skeleton.m4 */ #line 200 "parser.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE a3_lval; swftools_0.9.2+git20130725.orig/lib/as3/assets.h0000644000175000017500000000075112216332640020235 0ustar gawaingawain#ifndef __abc_assets_h__ #define __abc_assets_h__ #include "abc.h" #include "registry.h" typedef struct _asset_resolver { SWF*swf; abc_asset_t**id2asset; dict_t*name2asset; U16 mainclass_id; } asset_resolver_t; asset_resolver_t* swf_ParseAssets(SWF*swf); void swf_ResolveAssets(asset_resolver_t*swf, abc_file_t*file); void swf_DumpAsset(FILE*fo, abc_asset_t*asset, const char*prefix); TAG*swf_AssetsToTags(TAG*tag, asset_bundle_list_t*assets); #endif //__abc_assets_h__ swftools_0.9.2+git20130725.orig/lib/as3/parser.tab.c0000644000175000017500000066745612216332640021014 0ustar gawaingawain /* A Bison parser, made by GNU Bison 2.4.2. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.4.2" /* Skeleton name. */ #define YYSKELETON_NAME "./skeleton.m4" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse a3_parse #define yylex a3_lex #define yyerror a3_error #define yylval a3_lval #define yychar a3_char #define yydebug a3_debug #define yynerrs a3_nerrs /* Copy the first part of user declarations. */ /* Line 198 of skeleton.m4 */ #line 23 "parser.y" #include #include #include #include "abc.h" #include "pool.h" #include "files.h" #include "common.h" #include "tokenizer.h" #include "registry.h" #include "code.h" #include "opcodes.h" #include "compiler.h" #include "expr.h" #include "initcode.h" #include "parser_help.h" extern int a3_lex(); /* Line 198 of skeleton.m4 */ #line 103 "parser.tab.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 1 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { T_IDENTIFIER = 258, T_STRING = 259, T_REGEXP = 260, T_EMPTY = 261, T_INT = 262, T_UINT = 263, T_FLOAT = 264, T_FOR = 265, T_WHILE = 266, T_DO = 267, T_SWITCH = 268, KW_IMPLEMENTS = 269, KW_NAMESPACE = 270, KW_PACKAGE = 271, KW_PROTECTED = 272, KW_ARGUMENTS = 273, KW_PUBLIC = 274, KW_PRIVATE = 275, KW_USE = 276, KW_INTERNAL = 277, KW_NEW = 278, KW_NATIVE = 279, KW_FUNCTION = 280, KW_FINALLY = 281, KW_UNDEFINED = 282, KW_NAN = 283, KW_CONTINUE = 284, KW_CLASS = 285, KW_CONST = 286, KW_CATCH = 287, KW_CASE = 288, KW_SET = 289, KW_VOID = 290, KW_THROW = 291, KW_STATIC = 292, KW_WITH = 293, KW_INSTANCEOF = 294, KW_IMPORT = 295, KW_RETURN = 296, KW_TYPEOF = 297, KW_INTERFACE = 298, KW_NULL = 299, KW_VAR = 300, KW_DYNAMIC = 301, KW_OVERRIDE = 302, KW_FINAL = 303, KW_EACH = 304, KW_GET = 305, KW_TRY = 306, KW_SUPER = 307, KW_EXTENDS = 308, KW_FALSE = 309, KW_TRUE = 310, KW_BOOLEAN = 311, KW_UINT = 312, KW_INT = 313, KW_NUMBER = 314, KW_STRING = 315, KW_DEFAULT = 316, KW_DEFAULT_XML = 317, KW_DELETE = 318, KW_IF = 319, KW_ELSE = 320, KW_BREAK = 321, KW_IS = 322, KW_IN = 323, KW_AS = 324, T_DICTSTART = 325, T_EQEQ = 326, T_EQEQEQ = 327, T_NE = 328, T_NEE = 329, T_LE = 330, T_GE = 331, T_ORBY = 332, T_DIVBY = 333, T_MODBY = 334, T_MULBY = 335, T_ANDBY = 336, T_PLUSBY = 337, T_MINUSBY = 338, T_XORBY = 339, T_SHRBY = 340, T_SHLBY = 341, T_USHRBY = 342, T_OROR = 343, T_ANDAND = 344, T_COLONCOLON = 345, T_MINUSMINUS = 346, T_PLUSPLUS = 347, T_DOTDOT = 348, T_DOTDOTDOT = 349, T_SHL = 350, T_USHR = 351, T_SHR = 352, prec_none = 353, prec_var_read = 354, below_semicolon = 355, below_assignment = 356, below_lt = 357, below_minus = 358, minusminus_prefix = 359, plusplus_prefix = 360, below_curly = 361, new2 = 362, below_identifier = 363, above_identifier = 364, below_else = 365, above_function = 366 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union /* Line 223 of skeleton.m4 */ #line 48 "parser.y" tokenunion { /* Line 223 of skeleton.m4 */ #line 48 "parser.y" enum yytokentype token; classinfo_t*classinfo; classinfo_list_t*classinfo_list; slotinfo_t*slotinfo; slotinfo_list_t*slotinfo_list; int number_int; unsigned int number_uint; double number_float; code_t*code; typedcode_t value; //typedcode_list_t*value_list; codeandnumber_t value_list; param_t* param; params_t params; string_t str; char*id; constant_t*constant; for_start_t for_start; abc_exception_t *exception; regexp_t regexp; modifiers_t flags; namespace_decl_t* namespace_decl; node_t*node; struct { abc_exception_list_t *l; code_t*finally; } catch_list; /* Line 223 of skeleton.m4 */ #line 287 "parser.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 273 of skeleton.m4 */ #line 277 "parser.y" #define PASS1 }} if(as3_pass == 1) {{ #define PASS1END }} if(as3_pass == 2) {{ #define PASS2 }} if(as3_pass == 2) {{ #define PASS12 }} if(as3_pass == 1 || as3_pass == 2) {{ #define PASS12END }} if(as3_pass == 2) {{ #define PASS_ALWAYS }} {{ /* Line 273 of skeleton.m4 */ #line 311 "parser.tab.c" /* Unqualified %code blocks. */ /* Line 274 of skeleton.m4 */ #line 403 "parser.y" char is_subtype_of(classinfo_t*type, classinfo_t*supertype) { return 1; // FIXME } char do_init_variable(char*name) { if(!state->method->no_variable_scoping) return 0; if(!state->new_vars) return 1; return 1; } /* Line 274 of skeleton.m4 */ #line 854 "parser.y" static void state_has_imports() { state->wildcard_imports = list_clone(state->wildcard_imports); state->imports = dict_clone(state->imports); state->has_own_imports = 1; } static void import_toplevel(const char*package) { char* s = strdup(package); while(1) { dict_put(state->import_toplevel_packages, s, 0); char*x = strrchr(s, '.'); if(!x) break; *x = 0; } free(s); } /* Line 274 of skeleton.m4 */ #line 999 "parser.y" static int slotstate_varconst = 0; static modifiers_t*slotstate_flags = 0; static void setslotstate(modifiers_t* flags, int varconst) { slotstate_varconst = varconst; slotstate_flags = flags; if(state->cls) { if(flags) { if(flags->flags&FLAG_STATIC) { state->method = state->cls->static_init; } else { state->method = state->cls->init; } } else { // reset to "default" state (all in class code is static by default) */ state->method = state->cls->static_init; } } else { as3_assert(state->method); } } static trait_t* add_abc_slot(modifiers_t* modifiers, const char*name, multiname_t*m, code_t***c) { int flags = modifiers->flags; namespace_t ns = modifiers2access(modifiers); /* slot name */ multiname_t mname = {QNAME, &ns, 0, name}; trait_list_t**traits; code_t**code=0; if(!state->cls) { // global variable if(!global->init) global->init = abc_initscript(global->file); ns.name = state->package; traits = &global->init->traits; code = &global->init->method->body->code; } else if(flags&FLAG_STATIC) { // static variable traits = &state->cls->abc->static_traits; code = &state->cls->static_init->header; } else { // instance variable traits = &state->cls->abc->traits; code = &state->cls->init->header; if(ns.access == ACCESS_PROTECTED) { ns.name = concat3(state->cls->info->package,":",state->cls->info->name); } } if(c) *c = code; if(m) *m = *multiname_clone(&mname); return trait_new_member(traits, 0, multiname_clone(&mname), 0); } /* Line 274 of skeleton.m4 */ #line 1173 "parser.y" static int xml_level = 0; /* Line 274 of skeleton.m4 */ #line 1841 "parser.y" node_t* resolve_identifier(const char*name); node_t* get_descendants(node_t*e,const char*ns,const char*subnode,char multi, char attr) { typedcode_t v = node_read(e); typedcode_t w; multiname_t m = {0,0,0,subnode}; namespace_t zero = {ZERONAMESPACE,"*"}; if(!strcmp(ns,"*")) { m.ns = &zero; m.type = attr?QNAMEA:QNAME; } else { typedcode_t w = node_read(resolve_identifier(ns)); if(!TYPE_IS_NAMESPACE(w.t)) { as3_softwarning("%s might not be a namespace", ns); } v.c = code_append(v.c, w.c); v.c = converttype(v.c, w.t, TYPE_NAMESPACE); m.type = attr?RTQNAMEA:RTQNAME; } if(!multi) { v.c = abc_getproperty2(v.c, &m); } else { v.c = abc_getdescendants2(v.c, &m); } if(TYPE_IS_XML(v.t)) { v.t = TYPE_XMLLIST; } else { v.c = abc_coerce_a(v.c); v.t = TYPE_ANY; } return mkcodenode(v); } /* Line 274 of skeleton.m4 */ #line 2016 "parser.y" node_t* var_read(variable_t*v) { typedcode_t o; o.c = abc_getlocal(0, v->index); o.t = v->type; return mkcodenode(o); } node_t* resolve_identifier(const char*name) { typedcode_t o; o.t = 0; o.c = 0; slotinfo_t*a = 0; memberinfo_t*f = 0; variable_t*v; /* look at variables */ if((v = find_variable(state, name))) { // name is a local variable return var_read(v); } if((v = find_slot(state->method, name))) { o.c = abc_getscopeobject(o.c, 1); o.c = abc_getslot(o.c, v->index); o.t = v->type; return mkcodenode(o); } int i_am_static = state->method->is_static; if(!state->method->inner && !state->xmlfilter && state->cls) { /* look at current class' members */ if((f = findmember_nsset(state->cls->info, name, 1, i_am_static))) { // name is a member or attribute in this class int var_is_static = (f->flags&FLAG_STATIC); if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) { /* if the variable is a constant (and we know what is evaluates to), we can just use the value itself */ varinfo_t*v = (varinfo_t*)f; if(v->value) { return mkconstnode(v->value); } } if(var_is_static >= i_am_static) { if(f->kind == INFOTYPE_METHOD) { o.t = TYPE_FUNCTION(f); } else { o.t = f->type; } if(var_is_static && !i_am_static) { /* access to a static member from a non-static location. do this via findpropstrict: there doesn't seem to be any non-lookup way to access static properties of a class */ state->method->late_binding = 1; o.t = f->type; namespace_t ns = {f->access, f->package}; multiname_t m = {QNAME, &ns, 0, name}; o.c = abc_findpropstrict2(o.c, &m); o.c = abc_getproperty2(o.c, &m); return mkcodenode(o); } else if(f->slot>0) { o.c = abc_getlocal_0(o.c); o.c = abc_getslot(o.c, f->slot); return mkcodenode(o); } else { MEMBER_MULTINAME(m, f, name); o.c = abc_getlocal_0(o.c); o.c = abc_getproperty2(o.c, &m); return mkcodenode(o); } } } /* special case: it's allowed to access non-static constants from a static context */ if(i_am_static && (f=findmember_nsset(state->cls->info, name, 1, 0))) { if(f->kind == INFOTYPE_VAR && (f->flags&FLAG_CONST)) { varinfo_t*v = (varinfo_t*)f; if(v->value) { return mkconstnode(v->value); } } } } /* look at actual classes, in the current package and imported */ if(!state->xmlfilter && (a = find_class(name))) { registry_use(a); if(state->cls && state->cls->info == (classinfo_t*)a && i_am_static) { o.c = abc_getlocal_0(0); o.t = TYPE_CLASS((classinfo_t*)a); } else { o = push_class(a); } return mkcodenode(o); } /* look through package prefixes */ if(!state->xmlfilter && (dict_contains(state->import_toplevel_packages, name) || registry_ispackage(name))) { o.c = abc___pushpackage__(o.c, (char*)name); o.t = 0; return mkcodenode(o); //? } /* unknown object, let the avm2 resolve it */ if(1) { if(!state->method->inner && !state->xmlfilter) { /* we really should make inner functions aware of the class context */ as3_warning("Couldn't resolve '%s', doing late binding", name); } state->method->late_binding = 1; multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, name}; o.t = 0; o.c = abc_findpropstrict2(o.c, &m); o.c = abc_getproperty2(o.c, &m); return mkcodenode(o); } } /* Line 274 of skeleton.m4 */ #line 2175 "parser.y" void add_active_url(const char*url) { NEW(namespace_t,n); n->name = url; list_append(state->active_namespace_urls, n); } /* Line 274 of skeleton.m4 */ #line 609 "parser.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 158 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 3127 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 137 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 134 /* YYNRULES -- Number of rules. */ #define YYNRULES 350 /* YYNRULES -- Number of states. */ #define YYNSTATES 593 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 366 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 120, 2, 2, 2, 118, 109, 2, 124, 136, 117, 115, 102, 114, 129, 116, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 106, 101, 111, 104, 112, 105, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 126, 2, 127, 108, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 128, 107, 135, 119, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 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, 100, 103, 110, 113, 121, 122, 123, 125, 131, 132, 133, 134 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 5, 6, 8, 10, 13, 15, 17, 19, 21, 23, 25, 27, 28, 30, 32, 35, 37, 39, 41, 43, 45, 50, 52, 54, 55, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 90, 93, 95, 97, 99, 101, 103, 105, 107, 110, 112, 114, 115, 118, 119, 122, 125, 127, 131, 135, 136, 139, 140, 143, 150, 151, 153, 155, 159, 161, 164, 168, 177, 184, 190, 197, 199, 202, 204, 207, 208, 210, 212, 215, 217, 220, 225, 229, 230, 239, 240, 250, 251, 257, 259, 262, 264, 267, 269, 270, 277, 280, 282, 287, 290, 292, 294, 296, 298, 302, 304, 305, 312, 313, 319, 322, 325, 330, 331, 333, 335, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 357, 360, 361, 364, 365, 368, 369, 379, 380, 389, 390, 392, 394, 397, 399, 401, 403, 408, 410, 411, 413, 415, 418, 420, 423, 432, 434, 436, 437, 442, 444, 448, 452, 453, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476, 478, 480, 481, 482, 487, 488, 493, 494, 497, 500, 503, 506, 510, 512, 514, 515, 517, 524, 535, 547, 549, 552, 554, 558, 562, 566, 570, 571, 573, 576, 581, 585, 587, 592, 595, 597, 599, 600, 601, 614, 616, 617, 618, 629, 631, 635, 637, 639, 641, 645, 647, 649, 651, 654, 655, 656, 660, 661, 663, 665, 667, 670, 673, 674, 679, 684, 689, 692, 694, 697, 699, 701, 703, 707, 709, 713, 714, 716, 718, 720, 722, 724, 726, 730, 736, 738, 740, 742, 744, 746, 748, 750, 752, 754, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 796, 800, 804, 807, 810, 814, 818, 822, 826, 830, 834, 838, 842, 846, 850, 854, 858, 862, 866, 870, 873, 876, 878, 882, 885, 890, 894, 898, 902, 906, 910, 914, 918, 922, 926, 930, 934, 938, 944, 947, 950, 953, 956, 960, 963, 964, 971, 973, 975, 977, 981, 987, 991, 997, 1003, 1008, 1015, 1020, 1027, 1034, 1041, 1045, 1047, 1050, 1055, 1060, 1063, 1068 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 138, 0, -1, 139, -1, -1, 140, -1, 141, -1, 140, 141, -1, 188, -1, 200, -1, 198, -1, 234, -1, 209, -1, 150, -1, 101, -1, -1, 143, -1, 144, -1, 143, 144, -1, 200, -1, 198, -1, 234, -1, 209, -1, 150, -1, 126, 151, 261, 127, -1, 101, -1, 146, -1, -1, 146, 148, -1, 148, -1, 269, -1, 191, -1, 163, -1, 164, -1, 165, -1, 166, -1, 173, -1, 159, -1, 185, -1, 181, -1, 257, -1, 270, -1, 268, -1, 128, 146, 135, -1, 128, 135, -1, 101, -1, 147, -1, 153, -1, 167, -1, 168, -1, 253, -1, 183, -1, 148, 101, -1, 148, -1, 147, -1, -1, 104, 261, -1, -1, 45, 154, -1, 31, 154, -1, 155, -1, 154, 102, 155, -1, 3, 244, 152, -1, -1, 157, 149, -1, -1, 65, 156, -1, 64, 124, 255, 136, 156, 158, -1, -1, 153, -1, 257, -1, 45, 3, 244, -1, 3, -1, 10, 124, -1, 10, 49, 124, -1, 162, 160, 101, 255, 101, 257, 136, 156, -1, 162, 161, 68, 255, 136, 156, -1, 11, 124, 255, 136, 156, -1, 12, 156, 11, 124, 255, 136, -1, 66, -1, 66, 3, -1, 29, -1, 29, 3, -1, -1, 170, -1, 172, -1, 170, 172, -1, 171, -1, 170, 171, -1, 33, 261, 106, 145, -1, 61, 106, 145, -1, -1, 13, 124, 174, 261, 136, 128, 169, 135, -1, -1, 32, 124, 3, 244, 136, 176, 128, 145, 135, -1, -1, 26, 128, 178, 145, 135, -1, 175, -1, 179, 175, -1, 179, -1, 179, 177, -1, 177, -1, -1, 51, 128, 182, 145, 135, 180, -1, 36, 255, -1, 36, -1, 38, 124, 255, 136, -1, 184, 149, -1, 3, -1, 16, -1, 15, -1, 28, -1, 187, 129, 186, -1, 186, -1, -1, 16, 187, 128, 189, 142, 135, -1, -1, 16, 128, 190, 142, 135, -1, 40, 3, -1, 40, 240, -1, 40, 187, 129, 117, -1, -1, 193, -1, 194, -1, 193, 194, -1, 19, -1, 20, -1, 17, -1, 37, -1, 46, -1, 48, -1, 47, -1, 24, -1, 22, -1, -1, 53, 241, -1, -1, 53, 242, -1, -1, 14, 242, -1, -1, 192, 30, 3, 195, 197, 128, 199, 202, 135, -1, -1, 192, 43, 3, 196, 128, 201, 205, 135, -1, -1, 203, -1, 204, -1, 203, 204, -1, 101, -1, 209, -1, 234, -1, 126, 151, 261, 127, -1, 147, -1, -1, 206, -1, 207, -1, 206, 207, -1, 101, -1, 45, 3, -1, 192, 25, 233, 3, 124, 230, 136, 244, -1, 45, -1, 31, -1, -1, 192, 208, 210, 211, -1, 212, -1, 211, 102, 212, -1, 3, 244, 152, -1, -1, 104, 261, -1, 7, -1, 8, -1, 9, -1, 4, -1, 55, -1, 54, -1, 44, -1, 27, -1, 28, -1, 227, -1, 111, -1, 112, -1, -1, -1, 128, 261, 220, 135, -1, -1, 128, 261, 222, 135, -1, -1, 223, 219, -1, 223, 4, -1, 223, 112, -1, 227, 223, -1, 224, 227, 223, -1, 3, -1, 221, -1, -1, 228, -1, 216, 225, 226, 116, 218, 112, -1, 216, 225, 226, 217, 223, 111, 116, 225, 218, 112, -1, 216, 225, 226, 217, 223, 224, 111, 116, 225, 218, 112, -1, 229, -1, 228, 229, -1, 221, -1, 221, 104, 4, -1, 221, 104, 221, -1, 3, 104, 221, -1, 3, 104, 4, -1, -1, 231, -1, 94, 232, -1, 231, 102, 94, 232, -1, 231, 102, 232, -1, 232, -1, 3, 106, 243, 213, -1, 3, 213, -1, 50, -1, 34, -1, -1, -1, 192, 25, 233, 3, 124, 230, 136, 244, 128, 235, 145, 135, -1, 3, -1, -1, -1, 25, 236, 124, 230, 136, 244, 128, 238, 145, 135, -1, 186, -1, 187, 129, 186, -1, 240, -1, 239, -1, 241, -1, 242, 102, 241, -1, 241, -1, 117, -1, 35, -1, 106, 243, -1, -1, -1, 124, 246, 136, -1, -1, 247, -1, 248, -1, 254, -1, 247, 102, -1, 248, 254, -1, -1, 23, 261, 249, 245, -1, 261, 124, 246, 136, -1, 52, 124, 246, 136, -1, 63, 261, -1, 41, -1, 41, 255, -1, 261, -1, 256, -1, 261, -1, 256, 102, 261, -1, 261, -1, 257, 102, 261, -1, -1, 260, -1, 3, -1, 4, -1, 7, -1, 8, -1, 9, -1, 259, 106, 254, -1, 260, 102, 259, 106, 254, -1, 237, -1, 265, -1, 250, -1, 252, -1, 251, -1, 266, -1, 214, -1, 215, -1, 5, -1, 18, -1, 126, 246, 127, -1, 70, 258, 135, -1, 261, 111, 261, -1, 261, 112, 261, -1, 261, 75, 261, -1, 261, 76, 261, -1, 261, 71, 261, -1, 261, 72, 261, -1, 261, 74, 261, -1, 261, 73, 261, -1, 261, 88, 261, -1, 261, 89, 261, -1, 120, 261, -1, 119, 261, -1, 261, 109, 261, -1, 261, 108, 261, -1, 261, 107, 261, -1, 261, 97, 261, -1, 261, 96, 261, -1, 261, 95, 261, -1, 261, 116, 261, -1, 261, 118, 261, -1, 261, 115, 261, -1, 261, 114, 261, -1, 261, 117, 261, -1, 261, 68, 261, -1, 261, 69, 261, -1, 261, 39, 261, -1, 261, 67, 261, -1, 42, 261, -1, 35, 261, -1, 35, -1, 124, 256, 136, -1, 114, 261, -1, 261, 126, 261, 127, -1, 261, 80, 261, -1, 261, 79, 261, -1, 261, 86, 261, -1, 261, 85, 261, -1, 261, 87, 261, -1, 261, 78, 261, -1, 261, 77, 261, -1, 261, 84, 261, -1, 261, 81, 261, -1, 261, 82, 261, -1, 261, 83, 261, -1, 261, 104, 261, -1, 261, 105, 261, 106, 261, -1, 261, 92, -1, 261, 91, -1, 92, 261, -1, 91, 261, -1, 52, 129, 3, -1, 130, 3, -1, -1, 261, 129, 124, 262, 261, 136, -1, 117, -1, 186, -1, 117, -1, 261, 90, 261, -1, 261, 129, 263, 90, 264, -1, 261, 93, 264, -1, 261, 93, 263, 90, 264, -1, 261, 129, 126, 261, 127, -1, 261, 129, 130, 264, -1, 261, 129, 130, 263, 90, 264, -1, 261, 93, 130, 264, -1, 261, 93, 130, 263, 90, 264, -1, 261, 129, 130, 126, 261, 127, -1, 261, 93, 130, 126, 261, 127, -1, 261, 129, 264, -1, 3, -1, 15, 3, -1, 15, 3, 104, 3, -1, 15, 3, 104, 4, -1, 192, 267, -1, 62, 15, 104, 261, -1, 21, 15, 241, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 292, 292, 294, 294, 295, 296, 298, 299, 300, 301, 302, 303, 305, 307, 307, 308, 309, 311, 312, 313, 314, 315, 317, 318, 320, 321, 323, 326, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 346, 347, 348, 349, 350, 351, 352, 367, 368, 372, 383, 418, 419, 421, 422, 424, 425, 427, 488, 488, 492, 493, 496, 512, 513, 514, 519, 523, 528, 529, 531, 551, 595, 611, 623, 626, 629, 632, 636, 637, 638, 639, 640, 641, 643, 654, 657, 657, 688, 688, 713, 713, 729, 730, 731, 732, 740, 749, 749, 798, 803, 814, 824, 841, 842, 843, 844, 846, 847, 849, 849, 851, 851, 875, 883, 897, 913, 914, 915, 916, 923, 924, 925, 926, 927, 928, 929, 930, 931, 938, 939, 941, 942, 944, 945, 949, 947, 955, 953, 962, 963, 964, 965, 966, 968, 969, 970, 972, 978, 979, 980, 981, 982, 983, 986, 1059, 1059, 1061, 1061, 1063, 1064, 1066, 1150, 1151, 1159, 1160, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1177, 1188, 1189, 1190, 1192, 1192, 1195, 1195, 1198, 1199, 1202, 1207, 1210, 1213, 1216, 1219, 1223, 1226, 1230, 1234, 1239, 1245, 1248, 1251, 1254, 1259, 1262, 1265, 1275, 1279, 1285, 1291, 1299, 1304, 1310, 1318, 1326, 1327, 1328, 1331, 1330, 1347, 1348, 1350, 1349, 1373, 1393, 1408, 1409, 1411, 1412, 1414, 1415, 1416, 1425, 1426, 1430, 1431, 1433, 1434, 1435, 1437, 1441, 1442, 1447, 1448, 1495, 1545, 1566, 1588, 1591, 1598, 1601, 1604, 1607, 1610, 1613, 1618, 1619, 1621, 1622, 1623, 1624, 1625, 1627, 1633, 1642, 1643, 1644, 1645, 1646, 1647, 1649, 1653, 1658, 1676, 1687, 1697, 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, 1753, 1754, 1755, 1756, 1758, 1773, 1781, 1781, 1836, 1838, 1839, 1880, 1883, 1886, 1893, 1896, 1907, 1915, 1919, 1926, 1930, 1940, 1951, 2149, 2184, 2191, 2198, 2205, 2227, 2234 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "T_IDENTIFIER", "T_STRING", "T_REGEXP", "T_EMPTY", "T_INT", "T_UINT", "T_FLOAT", "\"for\"", "\"while\"", "\"do\"", "\"switch\"", "\"implements\"", "\"namespace\"", "\"package\"", "\"protected\"", "\"arguments\"", "\"public\"", "\"private\"", "\"use\"", "\"internal\"", "\"new\"", "\"native\"", "\"function\"", "\"finally\"", "\"undefined\"", "\"NaN\"", "\"continue\"", "\"class\"", "\"const\"", "\"catch\"", "\"case\"", "\"set\"", "\"void\"", "\"throw\"", "\"static\"", "\"with\"", "\"instanceof\"", "\"import\"", "\"return\"", "\"typeof\"", "\"interface\"", "\"null\"", "\"var\"", "\"dynamic\"", "\"override\"", "\"final\"", "\"each\"", "\"get\"", "\"try\"", "\"super\"", "\"extends\"", "\"false\"", "\"true\"", "\"Boolean\"", "\"uint\"", "\"int\"", "\"Number\"", "\"String\"", "\"default\"", "\"default xml\"", "\"delete\"", "\"if\"", "\"else\"", "\"break\"", "\"is\"", "\"in\"", "\"as\"", "\"{ (dictionary)\"", "\"==\"", "\"===\"", "\"!=\"", "\"!==\"", "\"<=\"", "\">=\"", "\"|=\"", "\"/=\"", "\"%=\"", "\"*=\"", "\"&=\"", "\"+=\"", "\"-=\"", "\"^=\"", "\">>=\"", "\"<<=\"", "\">>>=\"", "\"||\"", "\"&&\"", "\"::\"", "\"--\"", "\"++\"", "\"..\"", "\"...\"", "\"<<\"", "\">>>\"", "\">>\"", "prec_none", "prec_var_read", "below_semicolon", "';'", "','", "below_assignment", "'='", "'?'", "':'", "'|'", "'^'", "'&'", "below_lt", "'<'", "'>'", "below_minus", "'-'", "'+'", "'/'", "'*'", "'%'", "'~'", "'!'", "minusminus_prefix", "plusplus_prefix", "below_curly", "'('", "new2", "'['", "']'", "'{'", "'.'", "'@'", "below_identifier", "above_identifier", "below_else", "above_function", "'}'", "')'", "$accept", "PROGRAM", "MAYBE_PROGRAM_CODE_LIST", "PROGRAM_CODE_LIST", "PROGRAM_CODE", "MAYBE_INPACKAGE_CODE_LIST", "INPACKAGE_CODE_LIST", "INPACKAGE_CODE", "MAYBECODE", "CODE", "CODE_STATEMENT", "CODEPIECE", "CODEBLOCK", "PACKAGE_INITCODE", "EMBED_START", "MAYBEEXPRESSION", "VARIABLE_DECLARATION", "VARIABLE_LIST", "ONE_VARIABLE", "IF_CODEBLOCK", "$@1", "MAYBEELSE", "IF", "FOR_INIT", "FOR_IN_INIT", "FOR_START", "FOR", "FOR_IN", "WHILE", "DO_WHILE", "BREAK", "CONTINUE", "MAYBE_CASE_LIST", "CASE_LIST", "CASE", "DEFAULT", "SWITCH", "$@2", "CATCH", "$@3", "FINALLY", "$@4", "CATCH_LIST", "CATCH_FINALLY_LIST", "TRY", "$@5", "THROW", "WITH_HEAD", "WITH", "X_IDENTIFIER", "PACKAGE", "PACKAGE_DECLARATION", "$@6", "$@7", "IMPORT", "MAYBE_MODIFIERS", "MODIFIER_LIST", "MODIFIER", "EXTENDS", "EXTENDS_LIST", "IMPLEMENTS_LIST", "CLASS_DECLARATION", "$@8", "INTERFACE_DECLARATION", "$@9", "MAYBE_CLASS_BODY", "CLASS_BODY", "CLASS_BODY_ITEM", "MAYBE_INTERFACE_BODY", "INTERFACE_BODY", "IDECLARATION", "VARCONST", "SLOT_DECLARATION", "$@10", "SLOT_LIST", "ONE_SLOT", "MAYBECONSTANT", "CONSTANT", "XML", "OPEN", "CLOSE", "CLOSE2", "XMLEXPR1", "$@11", "XMLEXPR2", "$@12", "XMLTEXT", "XML2", "XML_ID_OR_EXPR", "MAYBE_XMLATTRIBUTES", "XMLNODE", "XMLATTRIBUTES", "XMLATTRIBUTE", "MAYBE_PARAM_LIST", "PARAM_LIST", "PARAM", "GETSET", "FUNCTION_DECLARATION", "$@13", "MAYBE_IDENTIFIER", "INNERFUNCTION", "$@14", "CLASS", "PACKAGEANDCLASS", "CLASS_SPEC", "CLASS_SPEC_LIST", "TYPE", "MAYBETYPE", "MAYBE_PARAM_VALUES", "MAYBE_EXPRESSION_LIST", "EXPRESSION_LIST", "EXPRESSION_LIST_AND_COMMA", "XX", "NEW", "FUNCTIONCALL", "DELETE", "RETURN", "NONCOMMAEXPRESSION", "EXPRESSION", "COMMA_EXPRESSION", "VOIDEXPRESSION", "MAYBE_DICT_EXPRPAIR_LIST", "DICTLH", "DICT_EXPRPAIR_LIST", "E", "$@15", "ID_OR_NS", "SUBNODE", "MEMBER", "VAR_READ", "NAMESPACE_ID", "NAMESPACE_DECLARATION", "DEFAULT_NAMESPACE", "USE_NAMESPACE", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 59, 44, 356, 61, 63, 58, 124, 94, 38, 357, 60, 62, 358, 45, 43, 47, 42, 37, 126, 33, 359, 360, 361, 40, 362, 91, 93, 123, 46, 64, 363, 364, 365, 366, 125, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { 0, 137, 138, 139, 139, 140, 140, 141, 141, 141, 141, 141, 141, 141, 142, 142, 143, 143, 144, 144, 144, 144, 144, 144, 144, 145, 145, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 149, 149, 150, 151, 152, 152, 153, 153, 154, 154, 155, 157, 156, 158, 158, 159, 160, 160, 160, 161, 161, 162, 162, 163, 164, 165, 166, 167, 167, 168, 168, 169, 169, 169, 169, 170, 170, 171, 172, 174, 173, 176, 175, 178, 177, 179, 179, 180, 180, 180, 182, 181, 183, 183, 184, 185, 186, 186, 186, 186, 187, 187, 189, 188, 190, 188, 191, 191, 191, 192, 192, 193, 193, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 196, 196, 197, 197, 199, 198, 201, 200, 202, 202, 203, 203, 204, 204, 204, 204, 204, 205, 205, 206, 206, 207, 207, 207, 208, 208, 210, 209, 211, 211, 212, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 215, 216, 217, 218, 220, 219, 222, 221, 223, 223, 223, 223, 224, 224, 225, 225, 226, 226, 227, 227, 227, 228, 228, 229, 229, 229, 229, 229, 230, 230, 230, 230, 231, 231, 232, 232, 233, 233, 233, 235, 234, 236, 236, 238, 237, 239, 240, 241, 241, 242, 242, 243, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 248, 247, 249, 250, 251, 251, 252, 253, 253, 254, 255, 256, 256, 257, 257, 258, 258, 259, 259, 259, 259, 259, 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 262, 261, 263, 264, 264, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 265, 266, 267, 267, 267, 268, 269, 270 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 4, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 2, 0, 2, 2, 1, 3, 3, 0, 2, 0, 2, 6, 0, 1, 1, 3, 1, 2, 3, 8, 6, 5, 6, 1, 2, 1, 2, 0, 1, 1, 2, 1, 2, 4, 3, 0, 8, 0, 9, 0, 5, 1, 2, 1, 2, 1, 0, 6, 2, 1, 4, 2, 1, 1, 1, 1, 3, 1, 0, 6, 0, 5, 2, 2, 4, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 2, 0, 9, 0, 8, 0, 1, 1, 2, 1, 1, 1, 4, 1, 0, 1, 1, 2, 1, 2, 8, 1, 1, 0, 4, 1, 3, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 4, 0, 2, 2, 2, 2, 3, 1, 1, 0, 1, 6, 10, 11, 1, 2, 1, 3, 3, 3, 3, 0, 1, 2, 4, 3, 1, 4, 2, 1, 1, 0, 0, 12, 1, 0, 0, 10, 1, 3, 1, 1, 1, 3, 1, 1, 1, 2, 0, 0, 3, 0, 1, 1, 1, 2, 2, 0, 4, 4, 4, 2, 1, 2, 1, 1, 1, 3, 1, 3, 0, 1, 1, 1, 1, 1, 1, 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 3, 2, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 2, 2, 2, 2, 3, 2, 0, 6, 1, 1, 1, 3, 5, 3, 5, 5, 4, 6, 4, 6, 6, 6, 3, 1, 2, 4, 4, 2, 4, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 120, 344, 171, 271, 168, 169, 170, 0, 0, 62, 0, 0, 126, 272, 124, 125, 0, 132, 0, 131, 219, 175, 176, 304, 127, 0, 0, 0, 174, 128, 130, 129, 0, 0, 173, 172, 0, 0, 0, 254, 0, 0, 13, 178, 0, 0, 0, 0, 235, 120, 0, 0, 2, 120, 5, 53, 12, 36, 67, 31, 32, 33, 34, 35, 38, 120, 37, 7, 30, 0, 121, 122, 9, 8, 11, 269, 270, 0, 177, 10, 263, 265, 267, 266, 39, 252, 264, 268, 41, 29, 40, 0, 72, 0, 0, 120, 90, 107, 109, 108, 110, 115, 112, 0, 0, 241, 218, 0, 303, 0, 117, 0, 118, 302, 101, 235, 0, 0, 245, 0, 256, 257, 258, 259, 260, 0, 0, 255, 324, 323, 306, 286, 285, 0, 250, 0, 236, 237, 238, 248, 80, 0, 104, 246, 0, 78, 44, 43, 120, 45, 28, 46, 47, 48, 50, 0, 49, 326, 1, 6, 344, 0, 68, 0, 0, 69, 52, 106, 0, 215, 0, 160, 0, 159, 161, 348, 123, 191, 0, 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, 73, 0, 249, 0, 63, 0, 120, 113, 0, 222, 0, 225, 224, 350, 233, 205, 0, 0, 26, 0, 325, 0, 0, 274, 0, 0, 0, 305, 273, 239, 240, 81, 232, 58, 59, 103, 247, 57, 79, 42, 27, 232, 0, 0, 51, 345, 214, 213, 0, 133, 135, 0, 183, 0, 200, 0, 194, 198, 253, 300, 301, 298, 299, 279, 280, 282, 281, 277, 278, 314, 313, 309, 308, 316, 317, 318, 315, 311, 310, 312, 283, 284, 332, 331, 0, 330, 0, 334, 292, 291, 290, 319, 0, 289, 288, 287, 275, 276, 296, 295, 293, 297, 294, 0, 0, 327, 0, 0, 0, 343, 62, 0, 0, 24, 54, 0, 120, 16, 22, 19, 18, 21, 20, 120, 111, 0, 235, 242, 166, 0, 0, 206, 210, 105, 119, 223, 0, 25, 244, 349, 62, 261, 0, 251, 0, 56, 0, 56, 0, 0, 0, 0, 0, 137, 0, 0, 232, 162, 163, 0, 0, 0, 179, 180, 185, 199, 0, 0, 339, 0, 0, 243, 307, 0, 0, 0, 0, 337, 0, 76, 0, 0, 0, 116, 17, 0, 0, 0, 0, 212, 207, 232, 0, 0, 64, 0, 230, 229, 228, 231, 0, 61, 60, 0, 62, 346, 347, 205, 134, 0, 0, 226, 136, 141, 56, 0, 184, 204, 203, 201, 202, 0, 0, 0, 0, 331, 335, 320, 0, 336, 0, 0, 333, 77, 82, 0, 114, 234, 167, 166, 0, 0, 209, 0, 0, 96, 100, 98, 102, 62, 66, 262, 55, 0, 75, 0, 138, 139, 0, 120, 165, 164, 195, 187, 178, 188, 0, 186, 0, 185, 342, 340, 328, 341, 338, 0, 0, 0, 83, 86, 84, 23, 211, 220, 208, 94, 0, 97, 99, 65, 62, 232, 120, 227, 0, 156, 0, 0, 120, 154, 0, 181, 178, 185, 189, 0, 26, 91, 87, 85, 26, 26, 232, 74, 0, 147, 54, 151, 0, 0, 120, 145, 148, 149, 157, 215, 142, 155, 180, 0, 0, 190, 26, 89, 0, 0, 0, 216, 0, 140, 146, 0, 0, 182, 180, 88, 221, 95, 92, 26, 0, 0, 196, 0, 0, 0, 150, 205, 197, 26, 217, 0, 0, 232, 93, 158 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 51, 52, 53, 54, 342, 343, 344, 363, 364, 149, 150, 167, 345, 409, 428, 151, 264, 261, 94, 95, 477, 57, 163, 164, 58, 59, 60, 61, 62, 152, 153, 504, 505, 506, 507, 63, 232, 472, 581, 473, 538, 474, 475, 64, 245, 154, 65, 66, 312, 237, 67, 350, 233, 68, 155, 70, 71, 380, 382, 437, 346, 519, 347, 486, 546, 547, 548, 524, 525, 526, 174, 348, 278, 384, 385, 416, 75, 76, 77, 391, 448, 494, 556, 179, 386, 449, 495, 180, 282, 78, 283, 284, 357, 358, 359, 275, 349, 576, 107, 80, 537, 238, 239, 425, 439, 426, 372, 354, 135, 136, 137, 241, 81, 82, 83, 156, 138, 228, 229, 84, 125, 126, 127, 85, 400, 313, 314, 86, 87, 175, 88, 89, 90 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -484 static const yytype_int16 yypact[] = { 1323, -484, -484, -484, -484, -484, -484, -13, -71, -484, -53, 62, -484, -484, -484, -484, 73, -484, 1851, -484, 110, -484, -484, 407, -484, 9, 229, 1851, -484, -484, -484, -484, -22, 16, -484, -484, 115, 1851, 33, 390, 1851, 1851, -484, -484, 1851, 1851, 1851, 1851, 1851, 549, 159, 216, -484, 1452, -484, -484, -484, -484, 1798, -484, -484, -484, -484, -484, -484, 1708, -484, -484, -484, 375, 419, -484, -484, -484, -484, -484, -484, 10, -484, -484, -484, -484, -484, -484, 117, 2620, -484, -484, -484, -484, -484, 93, -484, 1851, 209, 1708, -484, -484, -484, -484, -484, -484, -484, -65, 277, 147, -484, 100, -24, 1851, 113, 119, -484, -24, -484, 1851, 225, 135, -24, 1851, -484, -484, -484, -484, -484, 111, 148, 151, -24, -24, 208, -24, -24, -50, 2557, 134, 160, 1851, -484, 2557, 260, 261, 1851, 1851, 261, 263, -484, -484, 678, -484, -484, -484, -484, -484, -484, 256, -484, -484, -484, -484, 207, 275, -484, 180, 219, 117, 188, -484, 291, 39, 292, -484, 293, -484, -484, -484, -484, -484, 1851, -484, 13, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, -484, -484, 22, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 18, -484, 166, 202, 182, -484, 1851, 807, -484, 277, 178, 181, -484, -484, -484, 192, 15, 183, 44, 1580, 185, -484, 1851, 186, -484, 1851, 390, 1851, -484, -484, -484, -484, -484, 211, 226, -484, -484, -484, 226, -484, -484, -484, 211, 1851, 1851, -484, 227, -484, -484, 326, 280, 285, 338, 2557, 245, 246, 37, 13, -484, 2557, 928, 799, 799, 799, 2998, 2998, 2998, 2998, 928, 928, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2683, 2746, -484, 258, 210, -484, 262, -484, 354, 354, 354, 2557, 2053, 2809, 2872, 2935, 928, 928, 208, 208, -24, -24, -24, 218, 2116, -484, 1851, 240, 265, -484, -484, 1851, 1911, -484, 232, 221, 936, -484, -484, -484, -484, -484, -484, 807, -484, 277, 1851, -484, 50, 359, 228, 270, -484, -484, -484, 234, 230, 1580, -484, 2557, -484, -484, 267, 2557, 101, 272, 261, -17, 273, 247, 143, 257, 277, 366, 277, 264, 211, 284, -484, 254, 27, 31, -484, -484, -484, -484, 1851, 305, -484, 244, 1851, -484, -484, 1851, 2179, 1851, 312, -484, 244, -484, 271, 289, 1851, -484, -484, 268, 283, 1851, 101, -484, -484, 211, 21, 102, 343, 1851, -484, -484, -484, -484, 1851, -484, -484, 1851, -484, -484, -484, 15, -484, 277, 294, -484, 311, -484, 272, 338, -484, -484, -484, -484, -484, 314, 99, 2242, 244, -484, -484, 2557, 1982, -484, 2305, 244, -484, -484, 51, 2368, -484, -484, 2557, 319, 299, 359, -484, 300, 307, -484, -484, 102, -484, -484, -484, -484, 2557, -41, -484, 297, 311, -484, 277, 266, -484, -484, -484, -484, 313, -484, 1851, -484, 329, -484, -484, -484, -484, -484, -484, 1851, 331, 315, 51, -484, -484, -484, -484, -484, -484, -484, 445, -484, -484, -484, -484, 211, 1065, -484, 446, -484, 427, 318, 323, -484, 10, 2557, 339, -484, 103, 2431, 1580, -484, -484, -484, 1580, 1580, 211, -484, 332, -484, 232, -484, 106, 322, 1194, -484, -484, -484, -484, 39, -484, -484, -484, 328, 10, 103, 1580, -484, 341, 344, 337, -484, 1851, -484, -484, 451, 352, -484, -484, -484, -484, -484, -484, 1580, 2494, 350, -484, 369, 357, 347, -484, 15, -484, 1580, -484, 353, 351, 211, -484, -484 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -484, -484, -484, -484, 435, 140, -484, 149, -268, 444, 3, -55, 399, 41, -48, 55, 439, 360, 127, -288, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, -3, -2, -484, -484, 30, -484, 32, -484, -484, -484, -484, -484, -484, -484, -484, 6, 59, -484, -484, -484, -484, 1, -484, 437, -484, -484, -484, 43, -484, 45, -484, -484, -484, -42, -484, -484, -16, -484, 2, -484, -484, 66, 46, -484, -484, -484, -484, -479, -484, -484, -165, -484, -416, -484, -483, -484, -387, -484, 231, -395, -484, -336, -39, 4, -484, -484, -484, -484, -484, 484, -97, 75, 104, -260, -484, -104, -484, -484, -484, -484, -484, -484, -484, -125, -61, 468, -52, -484, 276, -484, -18, -484, -212, -184, -484, -484, -484, -484, -484, -484 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -330 static const yytype_int16 yytable[] = { 105, 69, 74, 55, 79, 108, 165, 240, 374, 113, 166, 246, 257, 177, 335, 281, 280, 102, 355, 118, 417, 97, 128, 129, 355, 97, 130, 131, 132, 134, 139, 444, 102, 98, 99, 446, 91, 98, 99, 482, 166, 56, 336, 72, 555, 73, 100, 97, 243, 406, 100, -70, 253, 93, 69, 74, 55, 79, 249, 98, 99, 181, 496, 234, 235, 97, 205, 206, 207, 208, 103, 96, 100, 273, 571, 134, 569, 98, 99, 421, 531, 262, 263, 469, 502, 111, 254, 427, 104, 274, 100, 134, 580, 267, 56, 517, 72, 139, 73, 394, 224, 134, 225, 490, 97, 226, 114, 490, 530, 356, 236, 92, 503, 106, 558, 468, 98, 99, 281, 139, 330, 168, 403, 441, 134, 134, 368, 395, 470, 100, 117, 169, 511, 109, 471, 310, 423, 171, 178, 310, 115, 178, 332, 481, 333, 116, 432, 433, 334, 389, 404, 173, 311, 390, 414, 178, 415, 119, 467, 178, 279, 361, 157, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 516, 588, 101, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 139, 331, 375, 376, 491, 492, 453, 97, 339, 492, 158, 227, 424, 181, 230, 459, 445, 447, 242, 98, 99, 493, 247, 540, 366, 493, 110, 139, 69, 370, 55, 205, 100, 248, 208, 351, -107, 97, 98, 99, 250, 97, 244, 413, 362, 134, 134, 252, 251, 98, 99, 100, 541, 98, 99, 255, 256, 258, 259, 560, 265, 498, 100, 561, 562, 168, 100, 225, 501, -71, 226, 407, 268, 563, 97, 269, 435, 12, 438, 14, 15, 270, 17, 271, 19, 572, 98, 99, 272, 276, 277, 478, 205, 206, 207, 208, 337, 24, 253, 100, 338, -112, 582, 267, 352, 521, 29, 30, 31, 401, 353, 371, 589, 360, 134, 365, 367, 139, 221, 222, 223, 310, 373, 378, 592, 377, 224, 379, 225, 139, 393, 226, 381, 438, 12, 383, 14, 15, 69, 17, 55, 19, -329, 387, 388, 69, 396, 55, 398, 405, 410, 310, 362, -235, 24, 452, 355, -111, 418, 420, 402, 522, 521, 29, 30, 31, 419, 422, 430, 450, 427, 236, 480, 454, 436, 434, 455, 431, 457, 236, 442, 236, 520, 443, 168, 462, 440, 120, 121, 451, 465, 122, 123, 124, 169, -152, 458, 463, 139, 170, 171, 460, 476, 479, 1, 2, 3, 485, 4, 5, 6, 461, 172, 464, 173, 236, 484, 414, 522, 13, 489, 510, 512, 527, 18, 513, 20, 518, 21, 22, 12, 533, 14, 15, 529, 17, 236, 19, 205, 206, 207, 208, 539, 551, 534, 28, 552, 553, 578, 557, 24, 566, -153, 33, 564, 34, 35, 570, 579, 29, 30, 31, 219, 220, 221, 222, 223, 575, 584, 528, 573, 39, 224, 574, 225, 585, 587, 226, 532, 586, 591, 523, 159, 590, 412, 236, 411, 148, 231, 565, 487, 162, 40, 41, 429, 260, 535, 536, 514, 567, 515, 176, 488, 554, 112, 483, 509, 568, 392, 133, 0, 0, 0, 466, 545, 549, 544, 550, 0, 139, 523, 0, 369, 0, 0, 47, 0, 48, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 545, 549, 544, 550, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 22, 140, 0, 141, 0, 0, 0, 23, 142, 24, 25, 0, 26, 143, 27, 0, 28, 144, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 145, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 0, 49, 0, 50, 0, 1, 2, 3, 147, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 22, 140, 0, 141, 0, 0, 0, 23, 142, 24, 25, 0, 26, 143, 27, 0, 28, 144, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 145, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 0, 49, 0, 50, 0, 1, 2, 3, 266, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, 182, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, -330, -330, -330, 36, 37, 38, 0, 0, 190, 191, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 217, 218, 0, 219, 220, 221, 222, 223, 43, 0, 0, 44, 0, 224, 0, 225, 45, 46, 226, 0, 0, 47, 0, 341, 0, 49, 0, 50, 0, 1, 2, 3, -14, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, -330, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 0, -330, -330, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, -330, -330, 0, 219, 220, 221, 222, 223, 43, 0, 0, 44, 0, 224, 0, 225, 45, 46, 226, 0, 0, 47, 0, 341, 0, 49, 0, 50, 0, 1, 2, 3, -15, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 543, 0, 49, 0, 50, 0, 1, 2, 3, -143, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 543, 0, 49, -3, 50, 0, 1, 2, 3, -144, 4, 5, 6, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 0, 49, -4, 50, 0, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 0, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 24, 25, 0, 26, 0, 27, 0, 28, 0, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 0, 49, 0, 50, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 0, -120, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 22, 140, 0, 141, 0, 0, 0, 23, 142, 24, 25, 0, 26, 143, 27, 0, 28, 144, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 145, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 0, 49, 0, 50, 1, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 0, 21, 22, 140, 0, 141, 0, 0, 0, 23, 142, 24, 25, 0, 26, 143, 27, 0, 28, 144, 29, 30, 31, 0, 0, 32, 33, 0, 34, 35, 0, 0, 0, 0, 0, 0, 36, 37, 38, 0, 145, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 160, 2, 3, 0, 4, 5, 6, 0, 146, 0, 0, 0, 0, 0, 0, 13, 0, 0, 43, 0, 18, 44, 20, 0, 21, 22, 45, 46, 141, 0, 0, 47, 23, 48, 0, 49, 0, 50, 0, 27, 0, 28, 161, 0, 0, 0, 0, 0, 0, 33, 0, 34, 35, 1, 2, 3, 0, 4, 5, 6, 37, 0, 0, 0, 0, 0, 0, 39, 13, 0, 0, 0, 0, 18, 0, 20, 0, 21, 22, 0, 0, 0, 0, 0, 0, 23, 0, 0, 40, 41, 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, 33, 0, 34, 35, 0, 0, 43, 0, 0, 44, 0, 37, 0, 0, 45, 46, 0, 0, 39, 47, 0, 48, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 44, 0, 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 48, 183, 184, 185, 50, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 0, 0, 212, 213, 0, 214, 215, 216, 182, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 0, 0, 0, 0, 0, 0, 408, 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 0, 0, 212, 213, 0, 214, 215, 216, 182, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 0, 0, 0, 0, 0, 0, 499, 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 397, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 399, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 456, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 497, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 500, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 508, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 559, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 583, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 212, 213, 0, 214, 215, 216, 0, 0, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 0, 0, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 0, 0, 0, 214, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 215, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 216, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, -330, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226, 183, 184, 185, 0, -330, -330, -330, -330, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, 0, 209, 210, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, 218, 0, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 224, 0, 225, 0, 0, 226 }; static const yytype_int16 yycheck[] = { 18, 0, 0, 0, 0, 23, 58, 104, 268, 27, 65, 115, 137, 3, 226, 180, 3, 11, 3, 37, 356, 3, 40, 41, 3, 3, 44, 45, 46, 47, 48, 4, 26, 15, 16, 4, 49, 15, 16, 434, 95, 0, 226, 0, 527, 0, 28, 3, 109, 337, 28, 68, 102, 124, 53, 53, 53, 53, 119, 15, 16, 102, 449, 128, 129, 3, 90, 91, 92, 93, 11, 124, 28, 34, 557, 93, 555, 15, 16, 367, 496, 142, 143, 419, 33, 26, 136, 104, 15, 50, 28, 109, 571, 148, 53, 136, 53, 115, 53, 311, 124, 119, 126, 4, 3, 129, 128, 4, 495, 94, 104, 124, 61, 3, 530, 94, 15, 16, 283, 137, 224, 15, 334, 383, 142, 143, 251, 311, 26, 28, 15, 25, 468, 124, 32, 117, 35, 31, 128, 117, 124, 128, 124, 431, 126, 129, 3, 4, 130, 112, 334, 45, 130, 116, 104, 128, 106, 124, 418, 128, 178, 117, 3, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 476, 584, 128, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 269, 270, 111, 112, 396, 3, 232, 112, 0, 124, 117, 102, 11, 405, 387, 388, 124, 15, 16, 128, 3, 517, 248, 128, 3, 251, 233, 253, 233, 90, 28, 104, 93, 235, 129, 3, 15, 16, 135, 3, 129, 353, 244, 269, 270, 102, 106, 15, 16, 28, 518, 15, 16, 127, 102, 3, 3, 533, 3, 451, 28, 537, 538, 15, 28, 126, 458, 68, 129, 338, 3, 539, 3, 101, 379, 17, 381, 19, 20, 68, 22, 101, 24, 559, 15, 16, 3, 3, 3, 422, 90, 91, 92, 93, 136, 37, 102, 28, 124, 129, 576, 364, 129, 45, 46, 47, 48, 333, 124, 106, 586, 136, 338, 136, 136, 341, 116, 117, 118, 117, 102, 3, 590, 104, 124, 53, 126, 353, 126, 129, 53, 436, 17, 3, 19, 20, 343, 22, 343, 24, 90, 104, 104, 350, 90, 350, 136, 90, 135, 117, 352, 127, 37, 117, 3, 129, 136, 135, 126, 101, 45, 46, 47, 48, 102, 106, 101, 393, 104, 371, 430, 397, 14, 124, 400, 136, 402, 379, 102, 381, 485, 135, 15, 409, 128, 3, 4, 90, 414, 7, 8, 9, 25, 135, 90, 135, 422, 30, 31, 136, 65, 427, 3, 4, 5, 102, 7, 8, 9, 128, 43, 136, 45, 415, 128, 104, 101, 18, 112, 128, 128, 116, 23, 124, 25, 136, 27, 28, 17, 106, 19, 20, 111, 22, 436, 24, 90, 91, 92, 93, 3, 3, 135, 44, 25, 135, 3, 116, 37, 135, 135, 52, 128, 54, 55, 135, 112, 46, 47, 48, 114, 115, 116, 117, 118, 136, 124, 493, 135, 70, 124, 135, 126, 112, 135, 129, 502, 128, 135, 486, 53, 136, 350, 485, 343, 49, 95, 543, 441, 58, 91, 92, 373, 141, 505, 505, 474, 547, 474, 70, 442, 525, 26, 436, 466, 552, 283, 47, -1, -1, -1, 415, 519, 519, 519, 519, -1, 543, 525, -1, 252, -1, -1, 124, -1, 126, -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, 565, 547, 547, 547, 547, 3, 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, -1, 31, -1, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, -1, 44, 45, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, -1, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, -1, 31, -1, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, -1, 44, 45, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, -1, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, 39, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, 67, 68, 69, 62, 63, 64, -1, -1, 75, 76, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, 111, 112, -1, 114, 115, 116, 117, 118, 111, -1, -1, 114, -1, 124, -1, 126, 119, 120, 129, -1, -1, 124, -1, 126, -1, 128, -1, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, 39, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, -1, 75, 76, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, 111, 112, -1, 114, 115, 116, 117, 118, 111, -1, -1, 114, -1, 124, -1, 126, 119, 120, 129, -1, -1, 124, -1, 126, -1, 128, -1, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, -1, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, 0, 130, -1, 3, 4, 5, 135, 7, 8, 9, 10, 11, 12, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, 0, 130, -1, 3, 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, 35, -1, 37, 38, -1, 40, -1, 42, -1, 44, -1, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, -1, 130, 3, 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, -1, 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, -1, 31, -1, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, -1, 44, 45, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, -1, 128, -1, 130, 3, 4, 5, -1, 7, 8, 9, 10, 11, 12, 13, -1, -1, -1, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, 27, 28, 29, -1, 31, -1, -1, -1, 35, 36, 37, 38, -1, 40, 41, 42, -1, 44, 45, 46, 47, 48, -1, -1, 51, 52, -1, 54, 55, -1, -1, -1, -1, -1, -1, 62, 63, 64, -1, 66, -1, -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, 3, 4, 5, -1, 7, 8, 9, -1, 101, -1, -1, -1, -1, -1, -1, 18, -1, -1, 111, -1, 23, 114, 25, -1, 27, 28, 119, 120, 31, -1, -1, 124, 35, 126, -1, 128, -1, 130, -1, 42, -1, 44, 45, -1, -1, -1, -1, -1, -1, 52, -1, 54, 55, 3, 4, 5, -1, 7, 8, 9, 63, -1, -1, -1, -1, -1, -1, 70, 18, -1, -1, -1, -1, 23, -1, 25, -1, 27, 28, -1, -1, -1, -1, -1, -1, 35, -1, -1, 91, 92, -1, -1, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 52, -1, 54, 55, -1, -1, 111, -1, -1, 114, -1, 63, -1, -1, 119, 120, -1, -1, 70, 124, -1, 126, -1, -1, -1, 130, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, 114, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, 126, 67, 68, 69, 130, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, 104, 105, -1, 107, 108, 109, 39, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, -1, -1, -1, -1, -1, -1, 136, -1, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, 104, 105, -1, 107, 108, 109, 39, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, -1, -1, -1, -1, -1, -1, 136, -1, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, 106, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, 106, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, 127, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, 104, 105, -1, 107, 108, 109, -1, -1, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 89, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, -1, -1, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, -1, -1, -1, 107, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, 108, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, 39, -1, -1, -1, -1, -1, -1, 109, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129, 67, 68, 69, -1, 71, 72, 73, 74, 75, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, 92, 93, -1, 95, 96, 97, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, 114, 115, 116, 117, 118, -1, -1, -1, -1, -1, 124, -1, 126, -1, -1, 129 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { 0, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 35, 37, 38, 40, 42, 44, 46, 47, 48, 51, 52, 54, 55, 62, 63, 64, 70, 91, 92, 101, 111, 114, 119, 120, 124, 126, 128, 130, 138, 139, 140, 141, 147, 150, 159, 162, 163, 164, 165, 166, 173, 181, 184, 185, 188, 191, 192, 193, 194, 198, 200, 209, 214, 215, 216, 227, 234, 237, 250, 251, 252, 257, 261, 265, 266, 268, 269, 270, 49, 124, 124, 156, 157, 124, 3, 15, 16, 28, 128, 186, 187, 15, 261, 3, 236, 261, 124, 3, 187, 240, 261, 128, 124, 129, 15, 261, 124, 3, 4, 7, 8, 9, 258, 259, 260, 261, 261, 261, 261, 261, 256, 261, 246, 247, 248, 254, 261, 29, 31, 36, 41, 45, 66, 101, 135, 146, 147, 148, 153, 167, 168, 183, 192, 253, 3, 0, 141, 3, 45, 153, 160, 161, 257, 148, 149, 15, 25, 30, 31, 43, 45, 208, 267, 194, 3, 128, 221, 225, 102, 39, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 95, 96, 97, 104, 105, 107, 108, 109, 111, 112, 114, 115, 116, 117, 118, 124, 126, 129, 124, 255, 256, 11, 149, 174, 190, 128, 129, 186, 187, 239, 240, 241, 249, 124, 255, 129, 182, 246, 3, 104, 255, 135, 106, 102, 102, 136, 127, 102, 254, 3, 3, 154, 155, 255, 255, 154, 3, 135, 148, 3, 101, 68, 101, 3, 34, 50, 233, 3, 3, 210, 261, 3, 221, 226, 228, 229, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 117, 130, 186, 263, 264, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 246, 261, 124, 126, 130, 263, 264, 136, 124, 261, 101, 126, 142, 143, 144, 150, 198, 200, 209, 234, 189, 186, 129, 124, 245, 3, 94, 230, 231, 232, 136, 117, 186, 145, 146, 136, 261, 136, 254, 259, 261, 106, 244, 102, 244, 255, 255, 104, 3, 53, 195, 53, 196, 3, 211, 212, 222, 104, 104, 112, 116, 217, 229, 126, 263, 264, 90, 106, 136, 127, 262, 261, 126, 263, 264, 90, 156, 255, 136, 151, 135, 144, 142, 246, 104, 106, 213, 232, 136, 102, 135, 156, 106, 35, 117, 241, 243, 104, 152, 155, 101, 136, 3, 4, 124, 241, 14, 197, 241, 242, 128, 244, 102, 135, 4, 221, 4, 221, 218, 223, 261, 90, 117, 264, 261, 261, 127, 261, 90, 264, 136, 128, 261, 135, 136, 261, 243, 244, 94, 232, 26, 32, 175, 177, 179, 180, 65, 158, 254, 261, 257, 156, 230, 242, 128, 102, 201, 152, 212, 112, 4, 111, 112, 128, 219, 224, 227, 127, 264, 136, 127, 264, 33, 61, 169, 170, 171, 172, 127, 213, 128, 232, 128, 124, 175, 177, 156, 136, 136, 199, 241, 45, 101, 192, 205, 206, 207, 116, 261, 111, 227, 223, 261, 106, 135, 171, 172, 238, 178, 3, 156, 244, 101, 126, 147, 192, 202, 203, 204, 209, 234, 3, 25, 135, 207, 225, 220, 116, 223, 106, 145, 145, 145, 244, 128, 151, 135, 204, 233, 218, 135, 225, 145, 135, 135, 136, 235, 261, 3, 112, 218, 176, 145, 127, 124, 112, 128, 135, 230, 145, 136, 135, 244 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*-------------------------. | yyparse or yypush_parse. | `-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 23: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 317 "parser.y" {PASS_ALWAYS as3_pass=(yyvsp[(2) - (4)].number_int);PASS1 as3_warning("embed command ignored");} } break; case 25: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 320 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 26: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 321 "parser.y" {(yyval.code)=code_new();} } break; case 27: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 323 "parser.y" { (yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code)); } } break; case 28: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 326 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 42: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 342 "parser.y" {(yyval.code)=(yyvsp[(2) - (3)].code);} } break; case 43: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 343 "parser.y" {(yyval.code)=0;} } break; case 44: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 346 "parser.y" {(yyval.code)=0;} } break; case 51: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 367 "parser.y" {(yyval.code)=(yyvsp[(1) - (2)].code);} } break; case 52: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 368 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 53: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 372 "parser.y" { if((yyvsp[(1) - (1)].code)) { if(!global->init) global->init = abc_initscript(global->file); code_t**cc = &global->init->method->body->code; *cc = code_append(*cc, (yyvsp[(1) - (1)].code)); } } } break; case 54: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 383 "parser.y" { PASS_ALWAYS (yyval.number_int) = as3_pass; as3_pass=0; } } break; case 55: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 418 "parser.y" {(yyval.node)=(yyvsp[(2) - (2)].node);} } break; case 56: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 419 "parser.y" {(yyval.node)=mkdummynode();} } break; case 57: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 421 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; case 58: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 422 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; case 59: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 424 "parser.y" {(yyval.code) = (yyvsp[(1) - (1)].code);} } break; case 60: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 425 "parser.y" {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));} } break; case 61: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 428 "parser.y" { PASS12 if(variable_exists((yyvsp[(1) - (3)].id))) syntaxerror("Variable %s already defined", (yyvsp[(1) - (3)].id)); PASS1 new_variable(state->method, (yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].classinfo), 1, 0); PASS2 char slot = 0; int index = 0; variable_t*v = 0; if(state->method->uses_slots) { v = find_slot(state->method, (yyvsp[(1) - (3)].id)); if(v && !v->init) { // this variable is stored in a slot v->init = 1; v->type = (yyvsp[(2) - (3)].classinfo); slot = 1; } } if(!v) { v = new_variable2(state->method, (yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].classinfo), 1, 0); } (yyval.code) = slot?abc_getscopeobject(0, 1):0; typedcode_t val = node_read((yyvsp[(3) - (3)].node)); if(!is_subtype_of(val.t, (yyvsp[(2) - (3)].classinfo))) { syntaxerror("Can't convert %s to %s", val.t->name, (yyvsp[(2) - (3)].classinfo)->name); } if((yyvsp[(2) - (3)].classinfo)) { if(val.c->prev || val.c->opcode != OPCODE_PUSHUNDEFINED) { (yyval.code) = code_append((yyval.code), val.c); (yyval.code) = converttype((yyval.code), val.t, (yyvsp[(2) - (3)].classinfo)); } else { code_free(val.c); (yyval.code) = defaultvalue((yyval.code), (yyvsp[(2) - (3)].classinfo)); } } else { if(val.c->prev || val.c->opcode != OPCODE_PUSHUNDEFINED) { (yyval.code) = code_append((yyval.code), val.c); (yyval.code) = abc_coerce_a((yyval.code)); } else { // don't do anything code_free(val.c); code_free((yyval.code)); (yyval.code) = 0; break; } } if(slot) { (yyval.code) = abc_setslot((yyval.code), v->index); } else { (yyval.code) = abc_setlocal((yyval.code), v->index); v->init = do_init_variable((yyvsp[(1) - (3)].id)); } } } break; case 62: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 488 "parser.y" {PASS12 new_state();} } break; case 63: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 488 "parser.y" { (yyval.code) = var_block((yyvsp[(2) - (2)].code), state->vars); PASS12 old_state(); } } break; case 64: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 492 "parser.y" {(yyval.code) = code_new();} } break; case 65: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 493 "parser.y" {(yyval.code)=(yyvsp[(2) - (2)].code);} } break; case 66: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 496 "parser.y" { (yyval.code) = code_new(); (yyval.code) = code_append((yyval.code), (yyvsp[(3) - (6)].value).c); code_t*myjmp,*myif = (yyval.code) = abc_iffalse((yyval.code), 0); (yyval.code) = code_append((yyval.code), (yyvsp[(5) - (6)].code)); if((yyvsp[(6) - (6)].code)) { myjmp = (yyval.code) = abc_jump((yyval.code), 0); } myif->branch = (yyval.code) = abc_nop((yyval.code)); if((yyvsp[(6) - (6)].code)) { (yyval.code) = code_append((yyval.code), (yyvsp[(6) - (6)].code)); myjmp->branch = (yyval.code) = abc_nop((yyval.code)); } } } break; case 67: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 512 "parser.y" {(yyval.code)=code_new();} } break; case 70: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 519 "parser.y" { PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable(state->method, (yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0); PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable(state->method, (yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0); } } break; case 71: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 523 "parser.y" { PASS12 (yyval.id)=(yyvsp[(1) - (1)].id); } } break; case 72: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 528 "parser.y" {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;} } break; case 73: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 529 "parser.y" {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;} } break; case 74: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 531 "parser.y" { if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement"); (yyval.code) = code_new(); (yyval.code) = code_append((yyval.code), (yyvsp[(2) - (8)].code)); code_t*loopstart = (yyval.code) = abc_label((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(4) - (8)].value).c); code_t*myif = (yyval.code) = abc_iffalse((yyval.code), 0); (yyval.code) = code_append((yyval.code), (yyvsp[(8) - (8)].code)); code_t*cont = (yyval.code) = abc_nop((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(6) - (8)].code)); (yyval.code) = abc_jump((yyval.code), loopstart); code_t*out = (yyval.code) = abc_nop((yyval.code)); breakjumpsto((yyval.code), (yyvsp[(1) - (8)].for_start).name, out); continuejumpsto((yyval.code), (yyvsp[(1) - (8)].for_start).name, cont); myif->branch = out; (yyval.code) = var_block((yyval.code), state->vars); PASS12 old_state(); } } break; case 75: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 551 "parser.y" { node_t*n = resolve_identifier((yyvsp[(2) - (6)].id)); typedcode_t w = node_write(n); int it = alloc_local(); int array = alloc_local(); (yyval.code) = code_new(); (yyval.code) = code_append((yyval.code), (yyvsp[(4) - (6)].value).c); (yyval.code) = abc_coerce_a((yyval.code)); (yyval.code) = abc_setlocal((yyval.code), array); (yyval.code) = abc_pushbyte((yyval.code), 0); (yyval.code) = abc_setlocal((yyval.code), it); code_t*loopstart = (yyval.code) = abc_label((yyval.code)); (yyval.code) = abc_hasnext2((yyval.code), array, it); code_t*myif = (yyval.code) = abc_iffalse((yyval.code), 0); (yyval.code) = abc_getlocal((yyval.code), array); (yyval.code) = abc_getlocal((yyval.code), it); if(!(yyvsp[(1) - (6)].for_start).each) (yyval.code) = abc_nextname((yyval.code)); else (yyval.code) = abc_nextvalue((yyval.code)); (yyval.code) = converttype((yyval.code), 0, w.t); (yyval.code) = code_append((yyval.code), w.c); (yyval.code) = code_append((yyval.code), (yyvsp[(6) - (6)].code)); (yyval.code) = abc_jump((yyval.code), loopstart); code_t*out = (yyval.code) = abc_nop((yyval.code)); breakjumpsto((yyval.code), (yyvsp[(1) - (6)].for_start).name, out); continuejumpsto((yyval.code), (yyvsp[(1) - (6)].for_start).name, loopstart); myif->branch = out; (yyval.code) = abc_kill((yyval.code), it); (yyval.code) = abc_kill((yyval.code), array); (yyval.code) = var_block((yyval.code), state->vars); PASS12 old_state(); } } break; case 76: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 595 "parser.y" { (yyval.code) = code_new(); code_t*myjmp = (yyval.code) = abc_jump((yyval.code), 0); code_t*loopstart = (yyval.code) = abc_label((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(5) - (5)].code)); code_t*cont = (yyval.code) = abc_nop((yyval.code)); myjmp->branch = cont; (yyval.code) = code_append((yyval.code), (yyvsp[(3) - (5)].value).c); (yyval.code) = abc_iftrue((yyval.code), loopstart); code_t*out = (yyval.code) = abc_nop((yyval.code)); breakjumpsto((yyval.code), (yyvsp[(1) - (5)].id), out); continuejumpsto((yyval.code), (yyvsp[(1) - (5)].id), cont); } } break; case 77: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 611 "parser.y" { (yyval.code) = code_new(); code_t*loopstart = (yyval.code) = abc_label((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(2) - (6)].code)); code_t*cont = (yyval.code) = abc_nop((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(5) - (6)].value).c); (yyval.code) = abc_iftrue((yyval.code), loopstart); code_t*out = (yyval.code) = abc_nop((yyval.code)); breakjumpsto((yyval.code), (yyvsp[(1) - (6)].id), out); continuejumpsto((yyval.code), (yyvsp[(1) - (6)].id), cont); } } break; case 78: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 623 "parser.y" { (yyval.code) = abc___break__(0, ""); } } break; case 79: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 626 "parser.y" { (yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id)); } } break; case 80: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 629 "parser.y" { (yyval.code) = abc___continue__(0, ""); } } break; case 81: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 632 "parser.y" { (yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id)); } } break; case 82: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 636 "parser.y" {(yyval.code)=0;} } break; case 83: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 637 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 84: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 638 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 85: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 639 "parser.y" {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));} } break; case 86: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 640 "parser.y" {(yyval.code)=(yyvsp[(1) - (1)].code);} } break; case 87: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 641 "parser.y" {(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));} } break; case 88: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 643 "parser.y" { (yyval.code) = abc_getlocal(0, state->switch_var); (yyval.code) = code_append((yyval.code), node_read((yyvsp[(2) - (4)].node)).c); code_t*j = (yyval.code) = abc_ifne((yyval.code), 0); (yyval.code) = code_append((yyval.code), (yyvsp[(4) - (4)].code)); if((yyval.code)->opcode != OPCODE___BREAK__) { (yyval.code) = abc___fallthrough__((yyval.code), ""); } code_t*e = (yyval.code) = abc_nop((yyval.code)); j->branch = e; } } break; case 89: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 654 "parser.y" { (yyval.code) = (yyvsp[(3) - (3)].code); } } break; case 90: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 657 "parser.y" {PASS12 new_state();state->switch_var=alloc_local();} } break; case 91: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 657 "parser.y" { (yyval.code) = node_read((yyvsp[(4) - (8)].node)).c; (yyval.code) = abc_setlocal((yyval.code), state->switch_var); (yyval.code) = code_append((yyval.code), (yyvsp[(7) - (8)].code)); code_t*out = (yyval.code) = abc_kill((yyval.code), state->switch_var); breakjumpsto((yyval.code), (yyvsp[(1) - (8)].id), out); code_t*c = (yyval.code),*lastblock=0; while(c) { if(c->opcode == OPCODE_IFNE) { if(!c->next) syntaxerror("internal error in fallthrough handling"); lastblock=c->next; } else if(c->opcode == OPCODE___FALLTHROUGH__) { if(lastblock) { c->opcode = OPCODE_JUMP; c->branch = lastblock; } else { /* fall through end of switch */ c->opcode = OPCODE_NOP; } } c=c->prev; } (yyval.code) = var_block((yyval.code), state->vars); PASS12 old_state(); } } break; case 92: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 688 "parser.y" {PASS12 new_state(); state->exception_name=(yyvsp[(3) - (5)].id); PASS1 new_variable(state->method, (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].classinfo), 0, 0); PASS2 new_variable(state->method, (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].classinfo), 0, 0); } } break; case 93: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 693 "parser.y" { namespace_t name_ns = {ACCESS_PACKAGE, ""}; multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)}; NEW(abc_exception_t, e) e->exc_type = sig2mname((yyvsp[(4) - (9)].classinfo)); e->var_name = multiname_clone(&name); (yyval.exception) = e; code_t*c = 0; int i = find_variable_safe(state, (yyvsp[(3) - (9)].id))->index; e->target = c = abc_nop(0); c = abc_setlocal(c, i); c = code_append(c, code_dup(state->method->scope_code)); c = code_append(c, (yyvsp[(8) - (9)].code)); c = abc_kill(c, i); c = var_block(c, state->vars); PASS12 old_state(); } } break; case 94: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 713 "parser.y" {PASS12 new_state();state->exception_name=0;} } break; case 95: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 713 "parser.y" { (yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code), state->vars); if(!(yyvsp[(4) - (5)].code)) { (yyval.exception)=0; } else { NEW(abc_exception_t, e) e->exc_type = 0; //all exceptions e->var_name = 0; //no name e->target = 0; e->to = abc_nop(0); e->to = code_append(e->to, (yyvsp[(4) - (5)].code)); (yyval.exception) = e; } PASS12 old_state(); } } break; case 96: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 729 "parser.y" {(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));} } break; case 97: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 730 "parser.y" {(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));} } break; case 98: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 731 "parser.y" {(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);} } break; case 99: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 732 "parser.y" { (yyval.catch_list) = (yyvsp[(1) - (2)].catch_list); (yyval.catch_list).finally = 0; if((yyvsp[(2) - (2)].exception)) { list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception)); (yyval.catch_list).finally = (yyvsp[(2) - (2)].exception)->to;(yyvsp[(2) - (2)].exception)->to=0; } } } break; case 100: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 740 "parser.y" { (yyval.catch_list).l=list_new(); (yyval.catch_list).finally = 0; if((yyvsp[(1) - (1)].exception)) { list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception)); (yyval.catch_list).finally = (yyvsp[(1) - (1)].exception)->to;(yyvsp[(1) - (1)].exception)->to=0; } } } break; case 101: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 749 "parser.y" {PASS12 new_state(); state->method->has_exceptions=1; state->method->late_binding=1;//for invariant scope_code } } break; case 102: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 752 "parser.y" { code_t*out = abc_nop(0); code_t*start = abc_nop(0); (yyval.code) = code_append(start, (yyvsp[(4) - (6)].code)); if(!is_break_or_jump((yyvsp[(4) - (6)].code))) { (yyval.code) = abc_jump((yyval.code), out); } code_t*end = (yyval.code) = abc_nop((yyval.code)); int tmp; if((yyvsp[(6) - (6)].catch_list).finally) tmp = alloc_local(); abc_exception_list_t*l = (yyvsp[(6) - (6)].catch_list).l; int count=0; while(l) { abc_exception_t*e = l->abc_exception; if(e->var_name) { (yyval.code) = code_append((yyval.code), e->target); (yyval.code) = abc_jump((yyval.code), out); } else { as3_assert((ptroff_t)(yyvsp[(6) - (6)].catch_list).finally); // finally block e->target = (yyval.code) = abc_nop((yyval.code)); (yyval.code) = code_append((yyval.code), code_dup(state->method->scope_code)); (yyval.code) = abc___rethrow__((yyval.code)); } e->from = start; e->to = end; l = l->next; } (yyval.code) = code_append((yyval.code), out); (yyval.code) = insert_finally((yyval.code), (yyvsp[(6) - (6)].catch_list).finally, tmp); list_concat(state->method->exceptions, (yyvsp[(6) - (6)].catch_list).l); (yyval.code) = var_block((yyval.code), state->vars); PASS12 old_state(); } } break; case 103: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 798 "parser.y" { (yyval.code)=(yyvsp[(2) - (2)].value).c; (yyval.code)=abc_throw((yyval.code)); } } break; case 104: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 803 "parser.y" { if(!state->exception_name) syntaxerror("re-throw only possible within a catch block"); variable_t*v = find_variable(state, state->exception_name); (yyval.code)=code_new(); (yyval.code)=abc_getlocal((yyval.code), v->index); (yyval.code)=abc_throw((yyval.code)); } } break; case 105: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 814 "parser.y" { new_state(); if(state->method->has_exceptions) { int v = alloc_local(); state->method->scope_code = abc_getlocal(state->method->scope_code, v); state->method->scope_code = abc_pushwith(state->method->scope_code); (yyval.value_list).number = v; } (yyval.value_list).cc = (yyvsp[(3) - (4)].value).c; } } break; case 106: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 824 "parser.y" { /* remove getlocal;pushwith from scope code again */ state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code)); (yyval.code) = (yyvsp[(1) - (2)].value_list).cc; if(state->method->has_exceptions) { (yyval.code) = abc_dup((yyval.code)); (yyval.code) = abc_setlocal((yyval.code), (yyvsp[(1) - (2)].value_list).number); } (yyval.code) = abc_pushwith((yyval.code)); (yyval.code) = code_append((yyval.code), (yyvsp[(2) - (2)].code)); (yyval.code) = abc_popscope((yyval.code)); old_state(); } } break; case 108: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 842 "parser.y" {PASS12 (yyval.id)="package";} } break; case 109: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 843 "parser.y" {PASS12 (yyval.id)="namespace";} } break; case 110: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 844 "parser.y" {PASS12 (yyval.id)="NaN";} } break; case 111: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 846 "parser.y" {PASS12 (yyval.id) = concat3((yyvsp[(1) - (3)].id),".",(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;} } break; case 112: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 847 "parser.y" {PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));} } break; case 113: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 849 "parser.y" {PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;} } break; case 114: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 850 "parser.y" {PASS12 endpackage();(yyval.code)=0;} } break; case 115: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 851 "parser.y" {PASS12 startpackage("");} } break; case 116: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 852 "parser.y" {PASS12 endpackage();(yyval.code)=0;} } break; case 117: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 875 "parser.y" { PASS12 slotinfo_t*s = registry_find(state->package, (yyvsp[(2) - (2)].id)); if(!s && as3_pass==1) {as3_schedule_class(state->package, (yyvsp[(2) - (2)].id));} state_has_imports(); dict_put(state->imports, state->package, (yyvsp[(2) - (2)].id)); (yyval.code)=0; } } break; case 118: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 883 "parser.y" { PASS12 slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name); if(!s && as3_pass==1) { as3_schedule_class((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name); } /*if(s && s->kind == INFOTYPE_VAR && TYPE_IS_NAMESPACE(s->type)) { trie_put(active_namespaces, (unsigned char*)$2->name, 0); }*/ state_has_imports(); dict_put(state->imports, (yyvsp[(2) - (2)].classinfo)->name, (yyvsp[(2) - (2)].classinfo)); import_toplevel((yyvsp[(2) - (2)].classinfo)->package); (yyval.code)=0; } } break; case 119: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 897 "parser.y" { PASS12 if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) { as3_schedule_package((yyvsp[(2) - (4)].id)); } NEW(import_t,i); i->package = (yyvsp[(2) - (4)].id); state_has_imports(); list_append(state->wildcard_imports, i); import_toplevel(i->package); (yyval.code)=0; } } break; case 120: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 913 "parser.y" {PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;} } break; case 121: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 914 "parser.y" {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);} } break; case 122: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 915 "parser.y" {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);} } break; case 123: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 916 "parser.y" { PASS12 (yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags; if((yyvsp[(1) - (2)].flags).ns && (yyvsp[(2) - (2)].flags).ns) syntaxerror("only one namespace allowed in one declaration"); (yyval.flags).ns=(yyvsp[(1) - (2)].flags).ns?(yyvsp[(1) - (2)].flags).ns:(yyvsp[(2) - (2)].flags).ns; } } break; case 124: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 923 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;} } break; case 125: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 924 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;} } break; case 126: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 925 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;} } break; case 127: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 926 "parser.y" {PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;} } break; case 128: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 927 "parser.y" {PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;} } break; case 129: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 928 "parser.y" {PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;} } break; case 130: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 929 "parser.y" {PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;} } break; case 131: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 930 "parser.y" {PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;} } break; case 132: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 931 "parser.y" {PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;} } break; case 133: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 938 "parser.y" {PASS12 (yyval.classinfo)=0;} } break; case 134: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 939 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);} } break; case 135: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 941 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();} } break; case 136: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 942 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);} } break; case 137: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 944 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();} } break; case 138: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 945 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);} } break; case 139: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 949 "parser.y" {PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));} } break; case 140: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 951 "parser.y" {PASS12 endclass();(yyval.code)=0;} } break; case 141: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 955 "parser.y" {PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE; startclass(&(yyvsp[(1) - (5)].flags),(yyvsp[(3) - (5)].id),0,(yyvsp[(4) - (5)].classinfo_list));} } break; case 142: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 958 "parser.y" {PASS12 endclass();(yyval.code)=0;} } break; case 150: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 970 "parser.y" {PASS_ALWAYS as3_pass=(yyvsp[(2) - (4)].number_int);PASS1 as3_warning("embed command ignored");} } break; case 151: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 972 "parser.y" { code_t*c = state->cls->static_init->header; c = code_append(c, (yyvsp[(1) - (1)].code)); state->cls->static_init->header = c; } } break; case 157: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 983 "parser.y" { syntaxerror("variable declarations not allowed in interfaces"); } } break; case 158: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 986 "parser.y" { PASS12 (yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC; if((yyvsp[(1) - (8)].flags).flags&(FLAG_PRIVATE|FLAG_PACKAGEINTERNAL|FLAG_PROTECTED)) { syntaxerror("invalid method modifiers: interface methods always need to be public"); } startfunction(&(yyvsp[(1) - (8)].flags),(yyvsp[(3) - (8)].token),(yyvsp[(4) - (8)].id),&(yyvsp[(6) - (8)].params),(yyvsp[(8) - (8)].classinfo)); endfunction(&(yyvsp[(1) - (8)].flags),(yyvsp[(3) - (8)].token),(yyvsp[(4) - (8)].id),&(yyvsp[(6) - (8)].params),(yyvsp[(8) - (8)].classinfo), 0); list_deep_free((yyvsp[(6) - (8)].params).list); } } break; case 161: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1061 "parser.y" {PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));} } break; case 162: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1061 "parser.y" {PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);} } break; case 163: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1063 "parser.y" {PASS12 (yyval.code)=0;} } break; case 164: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1064 "parser.y" {PASS12 (yyval.code)=0;} } break; case 165: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1067 "parser.y" { PASS12 int flags = slotstate_flags->flags; namespace_t ns = modifiers2access(slotstate_flags); if(as3_pass == 1) { varinfo_t* info = 0; if(state->cls) { memberinfo_t*i = registry_findmember(state->cls->info, ns.name, (yyvsp[(1) - (3)].id), 1, slotstate_flags->flags&FLAG_STATIC); if(i) { check_override(i, flags); } info = varinfo_register_onclass(state->cls->info, ns.access, ns.name, (yyvsp[(1) - (3)].id), slotstate_flags->flags&FLAG_STATIC); } else { slotinfo_t*i = registry_find(state->package, (yyvsp[(1) - (3)].id)); if(i) { syntaxerror("package %s already contains '%s'", state->package, (yyvsp[(1) - (3)].id)); } if(ns.name && ns.name[0]) { syntaxerror("namespaces not allowed on package-level variables"); } info = varinfo_register_global(ns.access, state->package, (yyvsp[(1) - (3)].id)); } info->type = (yyvsp[(2) - (3)].classinfo); info->flags = flags; dict_put(global->token2info, (void*)(ptroff_t)as3_tokencount, info); } if(as3_pass == 2) { varinfo_t*info = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount); multiname_t mname; code_t**code; trait_t*t = add_abc_slot(slotstate_flags, (yyvsp[(1) - (3)].id), &mname, &code); if((yyvsp[(2) - (3)].classinfo)) { MULTINAME(m, (yyvsp[(2) - (3)].classinfo)); t->type_name = multiname_clone(&m); } info->slot = t->slot_id; /* workaround for "VerifyError: Error #1053: Illegal override of ::test2 in C1" FIXME: is there a way to use slots and still don't have conflicting overrides? */ info->slot = t->slot_id = 0; constant_t cval = (yyvsp[(3) - (3)].node)->type->eval((yyvsp[(3) - (3)].node)); if(cval.type!=CONSTANT_UNKNOWN) { /* compile time constant */ t->value = malloc(sizeof(constant_t)); memcpy(t->value, &cval, sizeof(constant_t)); info->value = constant_clone(t->value); } else { typedcode_t v = node_read((yyvsp[(3) - (3)].node)); /* initalization code (if needed) */ code_t*c = 0; if(v.c && !is_pushundefined(v.c)) { c = abc_getlocal_0(c); c = code_append(c, v.c); c = converttype(c, v.t, (yyvsp[(2) - (3)].classinfo)); if(!t->slot_id) { c = abc_initproperty2(c, &mname); } else { c = abc_setslot(c, t->slot_id); } } *code = code_append(*code, c); } if(slotstate_varconst==KW_CONST) { t->kind= TRAIT_CONST; info->flags |= FLAG_CONST; } } (yyval.code)=0; } } break; case 166: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1150 "parser.y" {(yyval.constant)=0;} } break; case 167: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1151 "parser.y" { (yyval.constant) = malloc(sizeof(constant_t)); *(yyval.constant) = node_eval((yyvsp[(2) - (2)].node)); if((yyval.constant)->type == CONSTANT_UNKNOWN) { syntaxerror("can't evaluate default parameter value (needs to be a compile-time constant)"); } } } break; case 168: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1159 "parser.y" {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));} } break; case 169: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1160 "parser.y" { (yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint)); } } break; case 170: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1163 "parser.y" {(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));} } break; case 171: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1164 "parser.y" {(yyval.constant) = constant_new_string2((yyvsp[(1) - (1)].str).str,(yyvsp[(1) - (1)].str).len);free((char*)(yyvsp[(1) - (1)].str).str);} } break; case 172: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1165 "parser.y" {(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));} } break; case 173: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1166 "parser.y" {(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));} } break; case 174: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1167 "parser.y" {(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));} } break; case 175: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1168 "parser.y" {(yyval.constant) = constant_new_undefined((yyvsp[(1) - (1)].token));} } break; case 176: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1169 "parser.y" {(yyval.constant) = constant_new_float(__builtin_nan(""));} } break; case 177: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1177 "parser.y" { multiname_t m = {QNAME, &stdns, 0, "XML"}; typedcode_t v; v.c = 0; v.c = abc_getlex2(v.c, &m); v.c = code_append(v.c, node_read((yyvsp[(1) - (1)].node)).c); v.c = abc_construct(v.c, 1); v.t = TYPE_XML; (yyval.node) = mkcodenode(v); } } break; case 178: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1188 "parser.y" {PASS_ALWAYS if(!xml_level++) tokenizer_begin_xml();} } break; case 179: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1189 "parser.y" {PASS_ALWAYS tokenizer_begin_xmltext();} } break; case 180: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1190 "parser.y" {PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();} } break; case 181: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1192 "parser.y" {PASS_ALWAYS tokenizer_begin_xmltext();} } break; case 182: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1192 "parser.y" { (yyval.node) = (yyvsp[(2) - (4)].node); } } break; case 183: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1195 "parser.y" {PASS_ALWAYS tokenizer_begin_xml();} } break; case 184: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1195 "parser.y" { (yyval.node) = (yyvsp[(2) - (4)].node); } } break; case 185: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1198 "parser.y" {(yyval.node)=mkstringnode("");} } break; case 186: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1199 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)); } } break; case 187: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1202 "parser.y" { char* str = string_cstr(&(yyvsp[(2) - (2)].str)); (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),mkstringnode(str)); free(str); } } break; case 188: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1207 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkstringnode(">")); } } break; case 189: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1210 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)); } } break; case 190: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1213 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node))); } } break; case 191: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1216 "parser.y" { (yyval.node) = mkstringnode((yyvsp[(1) - (1)].id)); } } break; case 192: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1219 "parser.y" { (yyval.node) = (yyvsp[(1) - (1)].node); } } break; case 193: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1223 "parser.y" { (yyval.node) = mkstringnode(""); } } break; case 194: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1226 "parser.y" { (yyval.node) = mkaddnode(mkstringnode(" "),(yyvsp[(1) - (1)].node)); } } break; case 195: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1230 "parser.y" { //$$ = allocprintf("<%s%s/>", $2, $3, $5, $8); (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkstringnode("<"),(yyvsp[(2) - (6)].node)),(yyvsp[(3) - (6)].node)),mkstringnode("/>")); } } break; case 196: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1234 "parser.y" { //$$ = allocprintf("<%s%s>%s", $2, $3, $5, $8); (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode( mkstringnode("<"),(yyvsp[(2) - (10)].node)),(yyvsp[(3) - (10)].node)),mkstringnode(">")),(yyvsp[(5) - (10)].node)),mkstringnode("")); } } break; case 197: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1239 "parser.y" { //$$ = allocprintf("<%s%s>%s%s", $2, $3, $5, $6, $9); (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode( mkstringnode("<"),(yyvsp[(2) - (11)].node)),(yyvsp[(3) - (11)].node)),mkstringnode(">")),(yyvsp[(5) - (11)].node)),(yyvsp[(6) - (11)].node)),mkstringnode("")); } } break; case 198: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1245 "parser.y" { (yyval.node) = (yyvsp[(1) - (1)].node); } } break; case 199: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1248 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkaddnode(mkstringnode(" "),(yyvsp[(2) - (2)].node))); } } break; case 200: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1251 "parser.y" { (yyval.node) = (yyvsp[(1) - (1)].node); } } break; case 201: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1254 "parser.y" { char* str = string_cstr(&(yyvsp[(3) - (3)].str)); (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkstringnode(concat2("=",str))); free(str); } } break; case 202: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1259 "parser.y" { (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode(mkstringnode("=\""), mkaddnode((yyvsp[(3) - (3)].node), mkstringnode("\"")))); } } break; case 203: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1262 "parser.y" { (yyval.node) = mkaddnode(mkaddnode(mkstringnode(concat2((yyvsp[(1) - (3)].id),"=\"")), (yyvsp[(3) - (3)].node)), mkstringnode("\"")); } } break; case 204: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1265 "parser.y" { char* str = string_cstr(&(yyvsp[(3) - (3)].str)); (yyval.node)=mkstringnode(allocprintf("%s=%s", (yyvsp[(1) - (3)].id),str)); free(str); free((yyvsp[(1) - (3)].id));free((char*)(yyvsp[(3) - (3)].str).str); } } break; case 205: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1275 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); } } break; case 206: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1279 "parser.y" { PASS12 (yyval.params)=(yyvsp[(1) - (1)].params); } } break; case 207: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1285 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); (yyval.params).varargs=1; list_append((yyval.params).list, (yyvsp[(2) - (2)].param)); } } break; case 208: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1291 "parser.y" { PASS12 (yyval.params) =(yyvsp[(1) - (4)].params); (yyval.params).varargs=1; list_append((yyval.params).list, (yyvsp[(4) - (4)].param)); } } break; case 209: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1299 "parser.y" { PASS12 (yyval.params) = (yyvsp[(1) - (3)].params); list_append((yyval.params).list, (yyvsp[(3) - (3)].param)); } } break; case 210: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1304 "parser.y" { PASS12 memset(&(yyval.params),0,sizeof((yyval.params))); list_append((yyval.params).list, (yyvsp[(1) - (1)].param)); } } break; case 211: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1310 "parser.y" { PASS12 (yyval.param) = rfx_calloc(sizeof(param_t)); (yyval.param)->name=(yyvsp[(1) - (4)].id); (yyval.param)->type = (yyvsp[(3) - (4)].classinfo); PASS2 (yyval.param)->value = (yyvsp[(4) - (4)].constant); } } break; case 212: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1318 "parser.y" { PASS12 (yyval.param) = rfx_calloc(sizeof(param_t)); (yyval.param)->name=(yyvsp[(1) - (2)].id); (yyval.param)->type = TYPE_ANY; PASS2 (yyval.param)->value = (yyvsp[(2) - (2)].constant); } } break; case 215: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1328 "parser.y" {PASS12 (yyval.token)=0;} } break; case 216: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1331 "parser.y" {PASS12 startfunction(&(yyvsp[(1) - (9)].flags),(yyvsp[(3) - (9)].token),(yyvsp[(4) - (9)].id),&(yyvsp[(6) - (9)].params),(yyvsp[(8) - (9)].classinfo));} } break; case 217: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1332 "parser.y" { PASS1 endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0); PASS2 if(!state->method->info) syntaxerror("internal error"); code_t*c = method_header(state->method); c = wrap_function(c, 0, (yyvsp[(11) - (12)].code)); endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),(yyvsp[(8) - (12)].classinfo),c); PASS12 list_deep_free((yyvsp[(6) - (12)].params).list); (yyval.code)=0; } } break; case 219: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1348 "parser.y" {PASS12 (yyval.id)=0;} } break; case 220: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1350 "parser.y" {PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));} } break; case 221: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1351 "parser.y" { PASS1 endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0); PASS2 methodinfo_t*f = state->method->info; if(!f || !f->kind) syntaxerror("internal error"); code_t*c = method_header(state->method); c = wrap_function(c, 0, (yyvsp[(9) - (10)].code)); int index = state->method->var_index; endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),(yyvsp[(6) - (10)].classinfo),c); (yyval.value).c = abc_getlocal(0, index); (yyval.value).t = TYPE_FUNCTION(f); PASS12 list_deep_free((yyvsp[(4) - (10)].params).list); } } break; case 222: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1373 "parser.y" { PASS1 NEW(unresolvedinfo_t,c); memset(c, 0, sizeof(*c)); c->kind = INFOTYPE_UNRESOLVED; c->name = (yyvsp[(1) - (1)].id); c->package = get_package_from_name((yyvsp[(1) - (1)].id)); if(!c->package) { c->nsset = get_current_imports(); /* make the compiler look for this class in the current directory, just in case: */ as3_schedule_class_noerror(state->package, (yyvsp[(1) - (1)].id)); } (yyval.classinfo) = (classinfo_t*)c; PASS2 slotinfo_t*s = find_class((yyvsp[(1) - (1)].id)); if(!s) syntaxerror("Could not find class/method %s (current package: %s)\n", (yyvsp[(1) - (1)].id), state->package); (yyval.classinfo) = (classinfo_t*)s; registry_use(s); } } break; case 223: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1393 "parser.y" { PASS1 NEW(unresolvedinfo_t,c); memset(c, 0, sizeof(*c)); c->kind = INFOTYPE_UNRESOLVED; c->package = (yyvsp[(1) - (3)].id); c->name = (yyvsp[(3) - (3)].id); (yyval.classinfo) = (classinfo_t*)c; PASS2 slotinfo_t*s = registry_find((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id)); if(!s) syntaxerror("Couldn't find class/method %s.%s\n", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id)); free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0; (yyval.classinfo) = (classinfo_t*)s; registry_use(s); } } break; case 226: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1411 "parser.y" {PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));} } break; case 227: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1412 "parser.y" {PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));} } break; case 228: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1414 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);} } break; case 229: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1415 "parser.y" {PASS12 (yyval.classinfo)=TYPE_ANY;} } break; case 230: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1416 "parser.y" {PASS12 (yyval.classinfo)=TYPE_VOID;} } break; case 231: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1425 "parser.y" {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);} } break; case 232: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1426 "parser.y" {PASS12 (yyval.classinfo)=0;} } break; case 233: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1430 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; case 234: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1431 "parser.y" {(yyval.value_list)=(yyvsp[(2) - (3)].value_list);} } break; case 235: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1433 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; case 238: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1437 "parser.y" {(yyval.value_list).number=1; (yyval.value_list).cc = (yyvsp[(1) - (1)].value).c; } } break; case 239: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1441 "parser.y" {(yyval.value_list) = (yyvsp[(1) - (2)].value_list);} } break; case 240: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1442 "parser.y" { (yyval.value_list).number= (yyvsp[(1) - (2)].value_list).number+1; (yyval.value_list).cc = code_append((yyvsp[(1) - (2)].value_list).cc, (yyvsp[(2) - (2)].value).c); } } break; case 242: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1448 "parser.y" { typedcode_t v = node_read((yyvsp[(2) - (4)].node)); (yyval.value).c = v.c; if((yyval.value).c->opcode == OPCODE_COERCE_A) (yyval.value).c = code_cutlast((yyval.value).c); code_t*paramcode = (yyvsp[(4) - (4)].value_list).cc; if((yyval.value).c->opcode == OPCODE_GETPROPERTY) { multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0; (yyval.value).c = code_cutlast((yyval.value).c); (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_constructprop2((yyval.value).c, name, (yyvsp[(4) - (4)].value_list).number); multiname_destroy(name); } else if(is_getlocal((yyval.value).c)) { (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_construct((yyval.value).c, (yyvsp[(4) - (4)].value_list).number); } else if(TYPE_IS_CLASS(v.t) && v.t->data) { code_free((yyval.value).c); classinfo_t*c = v.t->data; MULTINAME(m, c); (yyval.value).c = abc_findpropstrict2(0, &m); (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_constructprop2((yyval.value).c, &m, (yyvsp[(4) - (4)].value_list).number); /*} else if($$.c->opcode == OPCODE_GETSLOT) { int slot = (int)(ptroff_t)$$.c->data[0]; trait_t*t = traits_find_slotid(state->cls->abc->traits,slot);//FIXME multiname_t*name = t->name; $$.c = code_cutlast($$.c); $$.c = code_append($$.c, paramcode); $$.c = abc_constructprop2($$.c, name, $4.number);*/ } else { (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_construct((yyval.value).c, (yyvsp[(4) - (4)].value_list).number); } (yyval.value).t = TYPE_ANY; if(TYPE_IS_CLASS(v.t) && v.t->data) { (yyval.value).t = v.t->data; } else { (yyval.value).c = abc_coerce_a((yyval.value).c); (yyval.value).t = TYPE_ANY; } } } break; case 243: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1495 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (4)].node)); (yyval.value).c = v.c; if((yyval.value).c->opcode == OPCODE_COERCE_A) { (yyval.value).c = code_cutlast((yyval.value).c); } code_t*paramcode = (yyvsp[(3) - (4)].value_list).cc; (yyval.value).t = TYPE_ANY; if((yyval.value).c->opcode == OPCODE_GETPROPERTY) { multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0; (yyval.value).c = code_cutlast((yyval.value).c); (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_callproperty2((yyval.value).c, name, (yyvsp[(3) - (4)].value_list).number); multiname_destroy(name); /* } else if($$.c->opcode == OPCODE_GETSLOT && $$.c->prev->opcode != OPCODE_GETSCOPEOBJECT) { int slot = (int)(ptroff_t)$$.c->data[0]; trait_t*t = traits_find_slotid(state->cls->abc->traits,slot); if(t->kind!=TRAIT_METHOD) { //ok: flash allows to assign closures to members. } multiname_t*name = t->name; $$.c = code_cutlast($$.c); $$.c = code_append($$.c, paramcode); //$$.c = abc_callmethod($$.c, t->method, len); //#1051 illegal early access binding $$.c = abc_callproperty2($$.c, name, $3.number);*/ } else if((yyval.value).c->opcode == OPCODE_GETSUPER) { multiname_t*name = (yyval.value).c->data[0];(yyval.value).c->data[0]=0; (yyval.value).c = code_cutlast((yyval.value).c); (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_callsuper2((yyval.value).c, name, (yyvsp[(3) - (4)].value_list).number); multiname_destroy(name); } else { (yyval.value).c = abc_getglobalscope((yyval.value).c); (yyval.value).c = code_append((yyval.value).c, paramcode); (yyval.value).c = abc_call((yyval.value).c, (yyvsp[(3) - (4)].value_list).number); } if(TYPE_IS_FUNCTION(v.t) && v.t->data) { (yyval.value).t = ((methodinfo_t*)(v.t->data))->return_type; } else if(TYPE_IS_CLASS(v.t) && v.t->data) { // calling a class is like a typecast (yyval.value).t = (classinfo_t*)v.t->data; } else { (yyval.value).t = TYPE_ANY; (yyval.value).c = abc_coerce_a((yyval.value).c); } } } break; case 244: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1545 "parser.y" { if(!state->cls) syntaxerror("super() not allowed outside of a class"); if(!state->method) syntaxerror("super() not allowed outside of a function"); if(!state->method->is_constructor) syntaxerror("super() not allowed outside of a constructor"); (yyval.value).c = code_new(); (yyval.value).c = abc_getlocal_0((yyval.value).c); (yyval.value).c = code_append((yyval.value).c, (yyvsp[(3) - (4)].value_list).cc); /* this is dependent on the control path, check this somewhere else if(state->method->has_super) syntaxerror("constructor may call super() only once"); */ state->method->has_super = 1; (yyval.value).c = abc_constructsuper((yyval.value).c, (yyvsp[(3) - (4)].value_list).number); (yyval.value).c = abc_pushundefined((yyval.value).c); (yyval.value).t = TYPE_ANY; } } break; case 245: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1566 "parser.y" { typedcode_t v = node_read((yyvsp[(2) - (2)].node)); (yyval.value).c = v.c; if((yyval.value).c->opcode == OPCODE_COERCE_A) { (yyval.value).c = code_cutlast((yyval.value).c); } multiname_t*name = 0; if((yyval.value).c->opcode == OPCODE_GETPROPERTY) { (yyval.value).c->opcode = OPCODE_DELETEPROPERTY; } else if((yyval.value).c->opcode == OPCODE_GETSLOT) { int slot = (int)(ptroff_t)(yyval.value).c->data[0]; multiname_t*name = traits_find_slotid(state->cls->abc->traits,slot)->name; (yyval.value).c = code_cutlast((yyval.value).c); (yyval.value).c = abc_deleteproperty2((yyval.value).c, name); } else { (yyval.value).c = abc_getlocal_0((yyval.value).c); MULTINAME_LATE(m, v.t?v.t->access:ACCESS_PACKAGE, ""); (yyval.value).c = abc_deleteproperty2((yyval.value).c, &m); } (yyval.value).t = TYPE_BOOLEAN; } } break; case 246: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1588 "parser.y" { (yyval.code) = abc_returnvoid(0); } } break; case 247: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1591 "parser.y" { (yyval.code) = (yyvsp[(2) - (2)].value).c; (yyval.code) = abc_returnvalue((yyval.code)); } } break; case 248: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1598 "parser.y" { (yyval.value) = node_read((yyvsp[(1) - (1)].node)); } } break; case 249: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1601 "parser.y" { (yyval.value) = node_read((yyvsp[(1) - (1)].node)); } } break; case 250: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1604 "parser.y" { (yyval.node) = mkmultinode(&node_comma, (yyvsp[(1) - (1)].node)); } } break; case 251: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1607 "parser.y" { (yyval.node) = multinode_extend((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } } break; case 252: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1610 "parser.y" { (yyval.code) = node_exec((yyvsp[(1) - (1)].node)); } } break; case 253: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1613 "parser.y" { (yyval.code) = (yyvsp[(1) - (3)].code); (yyval.code) = code_append((yyval.code), node_exec((yyvsp[(3) - (3)].node))); } } break; case 254: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1618 "parser.y" {(yyval.value_list).cc=0;(yyval.value_list).number=0;} } break; case 255: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1619 "parser.y" {(yyval.value_list)=(yyvsp[(1) - (1)].value_list);} } break; case 256: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1621 "parser.y" {(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));} } break; case 257: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1622 "parser.y" {(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));} } break; case 258: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1623 "parser.y" {syntaxerror("dictionary keys must be strings");} } break; case 259: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1624 "parser.y" {syntaxerror("dictionary keys must be strings");} } break; case 260: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1625 "parser.y" {syntaxerror("dictionary keys must be strings");} } break; case 261: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1627 "parser.y" { (yyval.value_list).cc = 0; (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].code)); (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(3) - (3)].value).c); (yyval.value_list).number = 2; } } break; case 262: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1633 "parser.y" { (yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc; (yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2; (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(3) - (5)].code)); (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(5) - (5)].value).c); } } break; case 263: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1642 "parser.y" {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));} } break; case 264: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1643 "parser.y" {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));} } break; case 265: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1644 "parser.y" {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));} } break; case 266: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1645 "parser.y" {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));} } break; case 267: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1646 "parser.y" {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));} } break; case 268: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1647 "parser.y" {(yyval.node) = (yyvsp[(1) - (1)].node);} } break; case 269: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1649 "parser.y" { (yyval.node) = mkconstnode((yyvsp[(1) - (1)].constant)); } } break; case 270: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1653 "parser.y" { (yyval.node) = (yyvsp[(1) - (1)].node); } } break; case 271: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1658 "parser.y" { typedcode_t v; v.c = 0; multiname_t m = {QNAME, &stdns, 0, "RegExp"}; if(!(yyvsp[(1) - (1)].regexp).options) { v.c = abc_getlex2(v.c, &m); v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).pattern); v.c = abc_construct(v.c, 1); } else { v.c = abc_getlex2(v.c, &m); v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).pattern); v.c = abc_pushstring(v.c, (yyvsp[(1) - (1)].regexp).options); v.c = abc_construct(v.c, 2); } v.t = TYPE_REGEXP; (yyval.node) = mkcodenode(v); } } break; case 272: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1676 "parser.y" { PASS1 state->method->need_arguments = 1; PASS2 typedcode_t v; v.c = abc_getlocal(0, state->method->need_arguments); v.t = TYPE_ARRAY; (yyval.node) = mkcodenode(v); } } break; case 273: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1687 "parser.y" { typedcode_t v; v.c = code_new(); v.c = code_append(v.c, (yyvsp[(2) - (3)].value_list).cc); v.c = abc_newarray(v.c, (yyvsp[(2) - (3)].value_list).number); v.t = registry_getarrayclass(); (yyval.node) = mkcodenode(v); } } break; case 274: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1697 "parser.y" { typedcode_t v; v.c = code_new(); v.c = code_append(v.c, (yyvsp[(2) - (3)].value_list).cc); v.c = abc_newobject(v.c, (yyvsp[(2) - (3)].value_list).number/2); v.t = registry_getobjectclass(); (yyval.node) = mkcodenode(v); } } break; case 275: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1706 "parser.y" {(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 276: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1707 "parser.y" {(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 277: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1708 "parser.y" {(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 278: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1709 "parser.y" {(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 279: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1710 "parser.y" {(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 280: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1711 "parser.y" {(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 281: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1712 "parser.y" {(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 282: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1713 "parser.y" {(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 283: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1714 "parser.y" {(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 284: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1715 "parser.y" {(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));} } break; case 285: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1716 "parser.y" {(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));} } break; case 286: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1717 "parser.y" {(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));} } break; case 287: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1718 "parser.y" {(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 288: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1719 "parser.y" {(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 289: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1720 "parser.y" {(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 290: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1721 "parser.y" {(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 291: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1722 "parser.y" {(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 292: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1723 "parser.y" {(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 293: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1724 "parser.y" {(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 294: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1725 "parser.y" {(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 295: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1726 "parser.y" {(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 296: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1727 "parser.y" {(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 297: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1728 "parser.y" {(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 298: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1729 "parser.y" {(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 299: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1730 "parser.y" {(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 300: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1731 "parser.y" {(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 301: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1732 "parser.y" {(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 302: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1733 "parser.y" {(yyval.node) = mknode1(&node_typeof, (yyvsp[(2) - (2)].node));} } break; case 303: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1734 "parser.y" {(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));} } break; case 304: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1735 "parser.y" { (yyval.node) = mkconstnode(constant_new_undefined());} } break; case 305: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1736 "parser.y" { (yyval.node)=(yyvsp[(2) - (3)].node);} } break; case 306: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1737 "parser.y" {(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));} } break; case 307: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1738 "parser.y" {(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));} } break; case 308: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1739 "parser.y" {(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 309: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1740 "parser.y" {(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 310: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1741 "parser.y" {(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 311: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1742 "parser.y" {(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 312: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1743 "parser.y" {(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 313: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1744 "parser.y" { (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 314: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1745 "parser.y" { (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 315: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1746 "parser.y" { (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 316: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1747 "parser.y" { (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 317: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1748 "parser.y" { (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 318: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1749 "parser.y" { (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 319: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1750 "parser.y" { (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));} } break; case 320: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1751 "parser.y" { (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));} } break; case 321: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1753 "parser.y" { (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));} } break; case 322: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1754 "parser.y" { (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));} } break; case 323: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1755 "parser.y" {(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); } } break; case 324: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1756 "parser.y" {(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); } } break; case 325: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1759 "parser.y" { if(!state->cls->info) syntaxerror("super keyword not allowed outside a class"); classinfo_t*t = state->cls->info->superclass; if(!t) t = TYPE_OBJECT; memberinfo_t*f = findmember_nsset(t, (yyvsp[(3) - (3)].id), 1, 0); MEMBER_MULTINAME(m, f, (yyvsp[(3) - (3)].id)); typedcode_t v; v.c = 0; v.c = abc_getlocal_0(v.c); v.c = abc_getsuper2(v.c, &m); v.t = slotinfo_gettype((slotinfo_t*)f); (yyval.node) = mkcodenode(v); } } break; case 326: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1773 "parser.y" { typedcode_t v; multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(2) - (2)].id)}; v.c = abc_getlex2(0, &m); v.t = TYPE_STRING; (yyval.node) = mkcodenode(v); } } break; case 327: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1781 "parser.y" {PASS12 new_state();state->xmlfilter=1;} } break; case 328: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1781 "parser.y" { PASS1 old_state(); PASS2 typedcode_t v = node_read((yyvsp[(1) - (6)].node)); typedcode_t w = node_read((yyvsp[(5) - (6)].node)); code_t*c = 0; int index = alloc_local(); int result = alloc_local(); int tmp = alloc_local(); int xml = alloc_local(); c = code_append(c, v.c); c = abc_checkfilter(c); c = abc_coerce_a(c); //hasnext2 converts to * c = abc_setlocal(c, xml); multiname_t m = {QNAME, &stdns, 0, "XMLList"}; c = abc_getlex2(c, &m); c = abc_construct(c, 0); c = abc_setlocal(c, result); c = abc_pushbyte(c, 0); c = abc_setlocal(c, index); code_t*jmp = c = abc_jump(c, 0); code_t*loop = c = abc_label(c); c = abc_getlocal(c, xml); c = abc_getlocal(c, index); c = abc_nextvalue(c); c = abc_dup(c); c = abc_setlocal(c, tmp); c = abc_pushwith(c); c = code_append(c, w.c); c = abc_popscope(c); code_t*b = c = abc_iffalse(c, 0); c = abc_getlocal(c, result); c = abc_getlocal(c, index); c = abc_getlocal(c, tmp); multiname_t m2 = {MULTINAMEL, 0, &nopackage_namespace_set, 0}; c = abc_setproperty2(c, &m2); c = b->branch = jmp->branch = abc_nop(c); c = abc_kill(c, tmp); c = abc_hasnext2(c, xml, index); c = abc_iftrue(c, loop); c = abc_getlocal(c, result); c = abc_kill(c, xml); c = abc_kill(c, result); c = abc_kill(c, index); c = var_block(c, state->vars); old_state(); typedcode_t r; r.c = c; r.t = TYPE_XMLLIST; (yyval.node) = mkcodenode(r); } } break; case 329: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1836 "parser.y" {(yyval.id)="*";} } break; case 331: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1839 "parser.y" {(yyval.id)="*";} } break; case 332: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1880 "parser.y" { } } break; case 333: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1883 "parser.y" { (yyval.node) = get_descendants((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].id), 0, 0); } } break; case 334: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1886 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (3)].node)); multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)}; v.c = abc_getdescendants2(v.c, &m); v.t = TYPE_XMLLIST; (yyval.node) = mkcodenode(v); } } break; case 335: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1893 "parser.y" { (yyval.node) = get_descendants((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].id), 1, 0); } } break; case 336: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1896 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (5)].node)); typedcode_t w = node_read((yyvsp[(4) - (5)].node)); multiname_t m = {MULTINAMEL, 0, &nopackage_namespace_set, 0}; v.c = code_append(v.c, w.c); v.c = converttype(w.c, w.t, TYPE_STRING); v.c = abc_getproperty2(v.c, &m); v.t = TYPE_XMLLIST; (yyval.node) = mkcodenode(v); } } break; case 337: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1907 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (4)].node)); multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)}; v.c = abc_getproperty2(v.c, &m); v.t = TYPE_STRING; (yyval.node) = mkcodenode(v); } } break; case 338: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1915 "parser.y" { (yyval.node) = get_descendants((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].id), (yyvsp[(6) - (6)].id), 0, 1); } } break; case 339: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1919 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (4)].node)); multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)}; v.c = abc_getdescendants2(v.c, &m); v.t = TYPE_STRING; (yyval.node) = mkcodenode(v); } } break; case 340: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1926 "parser.y" { (yyval.node) = get_descendants((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].id), (yyvsp[(6) - (6)].id), 1, 1); } } break; case 341: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1930 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (6)].node)); typedcode_t w = node_read((yyvsp[(5) - (6)].node)); multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0}; v.c = code_append(v.c, w.c); v.c = converttype(w.c, w.t, TYPE_STRING); v.c = abc_getproperty2(v.c, &m); v.t = TYPE_STRING; (yyval.node) = mkcodenode(v); } } break; case 342: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1940 "parser.y" { typedcode_t v = node_read((yyvsp[(1) - (6)].node)); typedcode_t w = node_read((yyvsp[(5) - (6)].node)); multiname_t m = {MULTINAMELA, 0, &nopackage_namespace_set, 0}; v.c = code_append(v.c, w.c); v.c = converttype(w.c, w.t, TYPE_STRING); v.c = abc_getdescendants2(v.c, &m); v.t = TYPE_STRING; (yyval.node) = mkcodenode(v); } } break; case 343: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 1951 "parser.y" { typedcode_t v1 = node_read((yyvsp[(1) - (3)].node)); (yyval.value).c = v1.c; classinfo_t*t = v1.t; char is_static = 0; if(TYPE_IS_CLASS(t) && t->data) { t = t->data; is_static = 1; } if(TYPE_IS_XML(t) && !findmember_nsset(t, (yyvsp[(3) - (3)].id), 1, is_static)) { multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)}; (yyval.value).c = abc_getproperty2((yyval.value).c, &m); (yyval.value).c = abc_coerce_a((yyval.value).c); (yyval.value).t = TYPE_XMLLIST; } else if(t) { if(t->subtype==INFOTYPE_UNRESOLVED) { syntaxerror("syntaxerror: trying to resolve property '%s' on incomplete object '%s'", (yyvsp[(3) - (3)].id), t->name); } memberinfo_t*f = findmember_nsset(t, (yyvsp[(3) - (3)].id), 1, is_static); char noslot = 0; if(f && !is_static != !(f->flags&FLAG_STATIC)) noslot=1; if(f && f->slot && !noslot) { (yyval.value).c = abc_getslot((yyval.value).c, f->slot); } else { if(!f) { if(!TYPE_IS_XMLLIST(t)) { as3_softwarning("Access of undefined property '%s' in %s", (yyvsp[(3) - (3)].id), t->name); } } MEMBER_MULTINAME(m, f, (yyvsp[(3) - (3)].id)); (yyval.value).c = abc_getproperty2((yyval.value).c, &m); } /* determine type */ (yyval.value).t = slotinfo_gettype((slotinfo_t*)f); if(!(yyval.value).t) (yyval.value).c = abc_coerce_a((yyval.value).c); } else if(v1.c && v1.c->opcode == OPCODE___PUSHPACKAGE__) { string_t*package = v1.c->data[0]; char*package2 = concat3(package->str, ".", (yyvsp[(3) - (3)].id)); slotinfo_t*a = registry_find(package->str, (yyvsp[(3) - (3)].id)); if(a) { (yyval.value) = push_class(a); } else if(dict_contains(state->import_toplevel_packages, package2) || registry_ispackage(package2)) { (yyval.value).c = v1.c; (yyval.value).c->data[0] = string_new4(package2); (yyval.value).t = 0; } else { syntaxerror("couldn't resolve %s", package2); } } else { /* when resolving a property on an unknown type, we do know the name of the property (and don't seem to need the package), but we need to make avm2 try out all access modes */ as3_softwarning("Resolving %s on unknown type", (yyvsp[(3) - (3)].id)); multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)}; (yyval.value).c = abc_getproperty2((yyval.value).c, &m); (yyval.value).c = abc_coerce_a((yyval.value).c); (yyval.value).t = TYPE_ANY; } } } break; case 344: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2149 "parser.y" { PASS1 char*name = (yyvsp[(1) - (1)].id); /* Queue unresolved identifiers for checking against the parent function's variables. We consider everything which is not a local variable "unresolved". This encompasses class names, members of the surrounding class etc. which is *correct* because local variables of the parent function would shadow those. */ if(!find_variable(state, name)) { unknown_variable(name); /* let the compiler know that it might want to check the current directory/package for this identifier- maybe there's a file $1.as defining $1. */ as3_schedule_class_noerror(state->package, name); } (yyval.node) = 0; PASS2 char*name = (yyvsp[(1) - (1)].id); (yyval.node) = resolve_identifier(name); } } break; case 345: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2184 "parser.y" { PASS12 NEW(namespace_decl_t,n); n->name = (yyvsp[(2) - (2)].id); n->url = (yyvsp[(2) - (2)].id); (yyval.namespace_decl)=n; } } break; case 346: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2191 "parser.y" { PASS12 NEW(namespace_decl_t,n); n->name = (yyvsp[(2) - (4)].id); n->url = (yyvsp[(4) - (4)].id); (yyval.namespace_decl)=n; } } break; case 347: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2198 "parser.y" { PASS12 NEW(namespace_decl_t,n); n->name = (yyvsp[(2) - (4)].id); n->url = (yyvsp[(4) - (4)].str).str; (yyval.namespace_decl)=n; } } break; case 348: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2205 "parser.y" { PASS12 dict_put(state->namespaces, (unsigned char*)(yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url); namespace_t access = modifiers2access(&(yyvsp[(1) - (2)].flags)); varinfo_t* var = varinfo_register_global(access.access, state->package, (yyvsp[(2) - (2)].namespace_decl)->name); var->type = TYPE_NAMESPACE; namespace_t ns; ns.access = ACCESS_NAMESPACE; ns.name = (yyvsp[(2) - (2)].namespace_decl)->url; var->value = constant_new_namespace(&ns); if(as3_pass==2) { MULTINAME(m, TYPE_NAMESPACE); trait_t*t = add_abc_slot(&(yyvsp[(1) - (2)].flags), (yyvsp[(2) - (2)].namespace_decl)->name, 0, 0); t->value = var->value; t->type_name = multiname_clone(&m); } (yyval.code)=0; } } break; case 349: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2228 "parser.y" { (yyval.code) = 0; (yyval.code) = code_append((yyval.code), node_read((yyvsp[(4) - (4)].node)).c); (yyval.code) = abc_dxnslate((yyval.code)); } } break; case 350: if(as3_pass==2) { /* Line 1464 of skeleton.m4 */ #line 2234 "parser.y" { PASS12 varinfo_t*s = (varinfo_t*)(yyvsp[(3) - (3)].classinfo); if(s->kind == INFOTYPE_UNRESOLVED) { s = (varinfo_t*)registry_resolve((slotinfo_t*)s); if(!s) syntaxerror("Couldn't resolve namespace %s", (yyvsp[(3) - (3)].classinfo)->name); } if(!s || s->kind != INFOTYPE_VAR) syntaxerror("%s.%s is not a public namespace (%d)", (yyvsp[(3) - (3)].classinfo)->package, (yyvsp[(3) - (3)].classinfo)->name, s?s->kind:-1); if(!s->value || !NS_TYPE(s->value->type)) syntaxerror("%s.%s is not a namespace", (yyvsp[(3) - (3)].classinfo)->package, (yyvsp[(3) - (3)].classinfo)->name); const char*url = s->value->ns->name; dict_put(state->namespaces, (unsigned char*)(yyvsp[(3) - (3)].classinfo)->name, (void*)url); add_active_url(url); (yyval.code)=0; } } break; /* Line 1464 of skeleton.m4 */ #line 7164 "parser.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } swftools_0.9.2+git20130725.orig/lib/mp3.c0000644000175000017500000001542012216332640016736 0ustar gawaingawain/* mp3.c Routines for handling .mp3 files Part of the swftools package. Copyright (c) 2005 Joel Yliluoma 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 */ #include #include #include #include "mp3.h" struct MP3Frame { unsigned bitrate; unsigned samprate; unsigned chanmode; unsigned framesize; unsigned char* data; struct MP3Frame* next; }; // 0 4 8 C static const unsigned BR_mpeg1[16] = {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}; static const unsigned BR_mpeg2[16] = {0,8, 16,24,32,40,48,56, 64, 80, 96,112,128,144,160,0}; static const unsigned BR_reserved[16] = {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0}; static const unsigned*const BR[4] = {BR_mpeg2, BR_reserved, BR_mpeg2, BR_mpeg1}; static const unsigned SR_mpeg1[4] = {44100,48000,32000,0}; static const unsigned SR_mpeg2[4] = {22050,24000,16000,0}; static const unsigned SR_mpeg25[4] = {11025,12000,8000,0}; static const unsigned SR_reserved[4] = {0,0,0,0}; static const unsigned*const SR[4] = {SR_mpeg25, SR_reserved, SR_mpeg2, SR_mpeg1}; int mp3_read(struct MP3*mp3, const char* filename) { struct MP3Frame* root = 0; struct MP3Frame** cur = &root; unsigned totalsize = 0; unsigned first_samprate = 0; unsigned nframes = 0; int first_chanmode = -1; FILE*fi = fopen(filename, "rb"); if(!fi) return 0; for(;;) { unsigned char FrameBuf[2048]; unsigned char* hdr = FrameBuf; unsigned char* data = FrameBuf+4; unsigned char* frdata; unsigned char mpegver; unsigned padding; unsigned bitrate; unsigned samprate; unsigned framesize; int chanmode; if(fread(hdr,1,4,fi) < 4) break; if(hdr[0] == 'I' && hdr[1] == 'D' && hdr[2] == '3') { /* Skip ID3 header */ unsigned id3_size = 0; if(fread(FrameBuf, 1, 6, fi) < 6) break; id3_size = (FrameBuf[5]) + (FrameBuf[4] << 7) + (FrameBuf[3] << 14) + (FrameBuf[2] << 21); fprintf(stderr, "readMP3: skipping ID3 tag (10+%u bytes)\n", id3_size); if(fseek(fi, id3_size, SEEK_CUR) < 0) { /* Cannot seek? Try reading. */ char* tmpbuf = (char*)malloc(id3_size); int nread=0; if(!tmpbuf) { fprintf(stderr, "readMP3: fseek and malloc both failed?\n"); break; } nread = fread(tmpbuf, 1, id3_size, fi); free(tmpbuf); if(nread < id3_size) break; } continue; } if(hdr[0] != 0xFF || (hdr[1] & 0xE0) != 0xE0) { fprintf(stderr, "readMP3: invalid header %02X %02X %02X %02X\n", hdr[0],hdr[1],hdr[2],hdr[3]); break; } mpegver = (hdr[1] >> 3) & 0x03; bitrate = BR[mpegver][ (hdr[2] >> 4) & 0x0F ] * 1000; samprate = SR[mpegver][ (hdr[2] >> 2) & 0x03 ]; chanmode = (hdr[3] >> 6) & 0x03; padding = (hdr[2] & 2) ? 1 : 0; if(!bitrate || !samprate) { /* Invalid frame */ /*break;*/ } if(!first_samprate) first_samprate = samprate; else if(first_samprate != samprate) { /* Sampling rate changed?!? */ fprintf(stderr, "readMP3: sampling rate changed?\n"); /*break;*/ } if(first_chanmode<0) first_chanmode = chanmode; else if(first_chanmode != chanmode) { /* Channel mode changed?!? */ fprintf(stderr, "readMP3: chanmode changed?\n"); /*break;*/ } framesize = ((mpegver == 3 ? 144 : 72) * bitrate) / samprate + padding; /* fprintf(stderr, "%02X %02X %02X %02X - bitrate=%u,samprate=%u,chanmode=%u,padding=%u,framesize=%u\n", hdr[0],hdr[1],hdr[2],hdr[3],bitrate,samprate,chanmode,padding,framesize); */ if(framesize > sizeof(FrameBuf)) break; if(fread(data, 1, framesize - 4, fi) < framesize-4) { fprintf(stderr, "readMP3: short read at frame %u\n", nframes); break; } if(!bitrate || !samprate) continue; frdata = (unsigned char*)malloc(framesize); if(!frdata) { fprintf(stderr, "readMP3: malloc failed\n"); break; } *cur = (struct MP3Frame*)malloc(sizeof(*root)); if(!*cur) { fprintf(stderr, "readMP3: malloc failed\n"); free(frdata); break; } (*cur)->next = 0; (*cur)->bitrate = bitrate; (*cur)->samprate = samprate; (*cur)->chanmode = chanmode; (*cur)->framesize = framesize; (*cur)->data = frdata; memcpy(frdata, FrameBuf, framesize); cur = &(*cur)->next; totalsize += framesize; ++nframes; } if(!root) { fprintf(stderr, "readMP3: not a MP3 file\n"); fclose(fi); return 0; } /* fprintf(stderr, "readMP3: read %u frames (%u bytes)\n", nframes, totalsize); */ mp3->SampRate = first_samprate; mp3->Channels = first_chanmode == 3 ? 1 : 2; mp3->NumFrames = nframes; mp3->size = totalsize; mp3->data = (unsigned char*)malloc(mp3->size); if(mp3->data) { unsigned pos=0; struct MP3Frame* it; for(it=root; it; it=it->next) { memcpy(mp3->data + pos, it->data, it->framesize); pos += it->framesize; } } else { fprintf(stderr, "readMP3: malloc failed\n"); } while(root) { struct MP3Frame* next = root->next; free(root->data); free(root); root = next; } fclose(fi); return mp3->data != NULL; } void mp3_clear(struct MP3*mp3) { free(mp3->data); mp3->data = 0; } swftools_0.9.2+git20130725.orig/lib/action/0002755000175000017500000000000012216332657017360 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/action/libming.h0000644000175000017500000000041112216332640021134 0ustar gawaingawain#include #include #include #ifndef __libming_h__ #define __libming_h__ typedef unsigned char byte; extern void (*SWF_error)(const char *msg, ...); extern void (*SWF_warn)(const char *msg, ...); extern int SWF_versionNum; #endif swftools_0.9.2+git20130725.orig/lib/action/actioncompiler.h0000644000175000017500000000022412216332640022525 0ustar gawaingawain#ifndef __actioncompiler_h__ #define __actioncompiler_h__ int compileSWFActionCode(const char *script, int version, void**data, int*len); #endif swftools_0.9.2+git20130725.orig/lib/action/swf5compiler.tab.h0000644000175000017500000001666512216332640022721 0ustar gawaingawain/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { BREAK = 258, CONTINUE = 259, FUNCTION = 260, ELSE = 261, SWITCH = 262, CASE = 263, DEFAULT = 264, FOR = 265, IN = 266, IF = 267, WHILE = 268, DO = 269, VAR = 270, NEW = 271, DELETE = 272, RETURN = 273, END = 274, WITH = 275, ASM = 276, EVAL = 277, RANDOM = 278, GETTIMER = 279, LENGTH = 280, CONCAT = 281, SUBSTR = 282, TRACE = 283, INT = 284, ORD = 285, CHR = 286, GETURL = 287, GETURL1 = 288, NEXTFRAME = 289, PREVFRAME = 290, PLAY = 291, STOP = 292, TOGGLEQUALITY = 293, STOPSOUNDS = 294, DUP = 295, SWAP = 296, POP = 297, PUSH = 298, SETREGISTER = 299, CALLFUNCTION = 300, CALLMETHOD = 301, AND = 302, OR = 303, XOR = 304, MODULO = 305, ADD = 306, LESSTHAN = 307, EQUALS = 308, INC = 309, DEC = 310, TYPEOF = 311, INSTANCEOF = 312, ENUMERATE = 313, INITOBJECT = 314, INITARRAY = 315, GETMEMBER = 316, SETMEMBER = 317, SHIFTLEFT = 318, SHIFTRIGHT = 319, SHIFTRIGHT2 = 320, VAREQUALS = 321, OLDADD = 322, SUBTRACT = 323, MULTIPLY = 324, DIVIDE = 325, OLDEQUALS = 326, OLDLESSTHAN = 327, LOGICALAND = 328, LOGICALOR = 329, NOT = 330, STRINGEQ = 331, STRINGLENGTH = 332, SUBSTRING = 333, GETVARIABLE = 334, SETVARIABLE = 335, SETTARGETEXPRESSION = 336, DUPLICATEMOVIECLIP = 337, REMOVEMOVIECLIP = 338, STRINGLESSTHAN = 339, MBLENGTH = 340, MBSUBSTRING = 341, MBORD = 342, MBCHR = 343, BRANCHALWAYS = 344, BRANCHIFTRUE = 345, GETURL2 = 346, POST = 347, GET = 348, LOADVARIABLES = 349, LOADMOVIE = 350, LOADVARIABLESNUM = 351, LOADMOVIENUM = 352, CALLFRAME = 353, STARTDRAG = 354, STOPDRAG = 355, GOTOFRAME = 356, SETTARGET = 357, NULLVAL = 358, INTEGER = 359, DOUBLE = 360, BOOLEAN = 361, REGISTER = 362, STRING = 363, IDENTIFIER = 364, EQ = 365, LE = 366, GE = 367, NE = 368, LAN = 369, LOR = 370, INCR = 371, DECR = 372, IEQ = 373, DEQ = 374, MEQ = 375, SEQ = 376, REQ = 377, AEQ = 378, OEQ = 379, SHL = 380, SHR = 381, SHR2 = 382, SHLEQ = 383, SHREQ = 384, SHR2EQ = 385, NOELSE = 386, UMINUS = 388, POSTFIX = 389 }; #endif /* Tokens. */ #define BREAK 258 #define CONTINUE 259 #define FUNCTION 260 #define ELSE 261 #define SWITCH 262 #define CASE 263 #define DEFAULT 264 #define FOR 265 #define IN 266 #define IF 267 #define WHILE 268 #define DO 269 #define VAR 270 #define NEW 271 #define DELETE 272 #define RETURN 273 #define END 274 #define WITH 275 #define ASM 276 #define EVAL 277 #define RANDOM 278 #define GETTIMER 279 #define LENGTH 280 #define CONCAT 281 #define SUBSTR 282 #define TRACE 283 #define INT 284 #define ORD 285 #define CHR 286 #define GETURL 287 #define GETURL1 288 #define NEXTFRAME 289 #define PREVFRAME 290 #define PLAY 291 #define STOP 292 #define TOGGLEQUALITY 293 #define STOPSOUNDS 294 #define DUP 295 #define SWAP 296 #define POP 297 #define PUSH 298 #define SETREGISTER 299 #define CALLFUNCTION 300 #define CALLMETHOD 301 #define AND 302 #define OR 303 #define XOR 304 #define MODULO 305 #define ADD 306 #define LESSTHAN 307 #define EQUALS 308 #define INC 309 #define DEC 310 #define TYPEOF 311 #define INSTANCEOF 312 #define ENUMERATE 313 #define INITOBJECT 314 #define INITARRAY 315 #define GETMEMBER 316 #define SETMEMBER 317 #define SHIFTLEFT 318 #define SHIFTRIGHT 319 #define SHIFTRIGHT2 320 #define VAREQUALS 321 #define OLDADD 322 #define SUBTRACT 323 #define MULTIPLY 324 #define DIVIDE 325 #define OLDEQUALS 326 #define OLDLESSTHAN 327 #define LOGICALAND 328 #define LOGICALOR 329 #define NOT 330 #define STRINGEQ 331 #define STRINGLENGTH 332 #define SUBSTRING 333 #define GETVARIABLE 334 #define SETVARIABLE 335 #define SETTARGETEXPRESSION 336 #define DUPLICATEMOVIECLIP 337 #define REMOVEMOVIECLIP 338 #define STRINGLESSTHAN 339 #define MBLENGTH 340 #define MBSUBSTRING 341 #define MBORD 342 #define MBCHR 343 #define BRANCHALWAYS 344 #define BRANCHIFTRUE 345 #define GETURL2 346 #define POST 347 #define GET 348 #define LOADVARIABLES 349 #define LOADMOVIE 350 #define LOADVARIABLESNUM 351 #define LOADMOVIENUM 352 #define CALLFRAME 353 #define STARTDRAG 354 #define STOPDRAG 355 #define GOTOFRAME 356 #define SETTARGET 357 #define NULLVAL 358 #define INTEGER 359 #define DOUBLE 360 #define BOOLEAN 361 #define REGISTER 362 #define STRING 363 #define IDENTIFIER 364 #define EQ 365 #define LE 366 #define GE 367 #define NE 368 #define LAN 369 #define LOR 370 #define INCR 371 #define DECR 372 #define IEQ 373 #define DEQ 374 #define MEQ 375 #define SEQ 376 #define REQ 377 #define AEQ 378 #define OEQ 379 #define SHL 380 #define SHR 381 #define SHR2 382 #define SHLEQ 383 #define SHREQ 384 #define SHR2EQ 385 #define NOELSE 386 #define UMINUS 388 #define POSTFIX 389 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 21 "swf5compiler.y" { Buffer action; char *str; SWFGetUrl2Method getURLMethod; int op; int intVal; int len; double doubleVal; struct { Buffer buffer; int count; } exprlist; struct switchcase switchcase; struct switchcases switchcases; struct { Buffer obj, ident, memexpr; } lval; } /* Line 1489 of yacc.c. */ #line 337 "swf5compiler.tab.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE swf5lval; swftools_0.9.2+git20130725.orig/lib/action/swf4compiler.y0000755000175000017500000006324412216332640022172 0ustar gawaingawain/* $Id: swf4compiler.y,v 1.1 2004/05/08 17:17:35 kramm Exp $ */ %start program %{ #include #include #include #include "compile.h" #include "action.h" #define YYPARSE_PARAM buffer %} %union { Buffer action; char *str; SWFActionFunction function; SWFGetUrl2Method getURLMethod; } /* tokens etc. */ %token BREAK %token FOR %token CONTINUE %token IF %token ELSE %token DO %token WHILE %token THIS /* functions */ %token EVAL %token TIME %token RANDOM %token LENGTH %token INT %token CONCAT %token DUPLICATECLIP %token REMOVECLIP %token TRACE %token STARTDRAG %token STOPDRAG %token ORD %token CHR %token CALLFRAME %token GETURL %token GETURL1 %token LOADMOVIE %token LOADVARIABLES %token POSTURL %token SUBSTR %token GETPROPERTY /* v3 functions */ %token NEXTFRAME %token PREVFRAME %token PLAY %token STOP %token TOGGLEQUALITY %token STOPSOUNDS %token GOTOFRAME %token GOTOANDPLAY %token FRAMELOADED %token SETTARGET /* high level functions */ %token TELLTARGET /* these three are strdup'ed in compiler.flex, so free them here */ %token STRING %token NUMBER %token IDENTIFIER %token PATH %token GETURL_METHOD %token EQ "==" %token LE "<=" %token GE ">=" %token NE "!=" %token LAN "&&" %token LOR "||" %token INC "++" %token DEC "--" %token IEQ "+=" %token DEQ "/=" %token MEQ "*=" %token SEQ "-=" %token STREQ "===" %token STRNE "!==" %token STRCMP "<=>" %token PARENT ".." %token END "end" /* ascending order of ops ..? */ %left ',' %right '=' "*=" "/=" "+=" "-=" %right '?' ':' %left "&&" "||" %left "==" "!=" "===" "!==" %left '<' '>' "<=" ">=" "<=>" %left '&' %left '+' '-' %left '*' '/' %right "++" "--" UMINUS '!' %right POSTFIX %right NEGATE %type elem %type elems %type stmt %type statements %type if_stmt %type iter_stmt %type cont_stmt %type break_stmt %type expr_opt %type void_function_call %type function_call %type lhs_expr %type pf_expr %type rhs_expr %type assign_stmt %type assign_stmts %type assign_stmts_opt %type expr %type program /* make sure to free these, too! */ %type sprite %type variable %% /* rules */ program : elems { *((Buffer *)buffer) = $1; } ; elems : elem | elems elem { bufferConcat($1, $2); } ; elem : stmt ; stmt : '{' '}' { $$ = NULL; } | '{' statements '}' { $$ = $2; } | ';' { $$ = NULL; } | assign_stmt ';' | if_stmt | iter_stmt | cont_stmt | break_stmt ; assign_stmts : assign_stmt | assign_stmts ',' assign_stmt { bufferConcat($1, $3); } ; statements : /* empty */ { $$ = NULL; } | stmt | statements stmt { bufferConcat($1, $2); } ; if_stmt /* XXX- I haven't tested the frameloaded() stuff yet.. */ : IF '(' FRAMELOADED '(' NUMBER ')' ')' stmt ELSE stmt { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_WAITFORFRAME); bufferWriteS16($$, 3); bufferWriteS16($$, atoi($5)); free($5); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($10)+5); bufferConcat($$, $10); /* ..here */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($8)); bufferConcat($$, $8); } | IF '(' FRAMELOADED '(' NUMBER ')' ')' stmt { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_WAITFORFRAME); bufferWriteS16($$, 3); bufferWriteS16($$, atoi($5)); free($5); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, 5); bufferWriteU8($$, SWFACTION_BRANCHALWAYS); /* ..here */ bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($8)); /* ..and then out */ bufferConcat($$, $8); } /* make this case cleaner.. */ | IF '(' '!' FRAMELOADED '(' NUMBER ')' ')' stmt { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_WAITFORFRAME); bufferWriteS16($$, 3); bufferWriteS16($$, atoi($6)); free($6); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($9)); bufferConcat($$, $9); } /* ..here */ | IF '(' FRAMELOADED '(' expr ')' ')' stmt ELSE stmt { $$ = $5; bufferWriteU8($$, SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($10)+5); bufferConcat($$, $10); /* ..here */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($8)); bufferConcat($$, $8); } | IF '(' FRAMELOADED '(' expr ')' ')' stmt { $$ = $5; bufferWriteU8($$, SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, 5); bufferWriteU8($$, SWFACTION_BRANCHALWAYS); /* ..here */ bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($8)); /* ..and then out */ bufferConcat($$, $8); } /* make this case cleaner.. */ | IF '(' '!' FRAMELOADED '(' expr ')' ')' stmt { $$ = $6; bufferWriteU8($$, SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($9)); bufferConcat($$, $9); } /* ..here */ | IF '(' expr ')' stmt ELSE stmt { bufferWriteU8($3, SWFACTION_BRANCHIFTRUE); bufferWriteS16($3, 2); bufferWriteS16($3, bufferLength($7)+5); bufferConcat($3, $7); bufferWriteU8($3, SWFACTION_BRANCHALWAYS); bufferWriteS16($3, 2); bufferWriteS16($3, bufferLength($5)); bufferConcat($3, $5); $$ = $3; } | IF '(' expr ')' stmt { bufferWriteU8($3, SWFACTION_LOGICALNOT); bufferWriteU8($3, SWFACTION_BRANCHIFTRUE); bufferWriteS16($3, 2); bufferWriteS16($3, bufferLength($5)); bufferConcat($3, $5); $$ = $3; } ; expr_opt : /* empty */ { $$ = NULL; } | expr { $$ = $1; } ; /* not thought out yet.. switch_stmt : SWITCH '(' expr ')' '{' { $$ = $3; pushLoop(); } switch_cases '}' { bufferConcat($$, $7); } ; switch_cases : switch_cases switch_case | switch_case ; switch_case : CASE INTEGER ':' stmt { $$ = newBuffer(); } ; */ iter_stmt : WHILE '(' '!' FRAMELOADED '(' NUMBER ')' ')' stmt { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_WAITFORFRAME); bufferWriteS16($$, 3); bufferWriteS16($$, atoi($6)); free($6); bufferWriteU8($$, 1); /* if not loaded, jump to.. */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($9)+5); bufferConcat($$, $9); /* ..here */ bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, -(bufferLength($$)+2)); } | WHILE '(' expr ')' stmt { $$ = $3; bufferWriteU8($$, SWFACTION_LOGICALNOT); bufferWriteU8($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($5)+5); bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, -(bufferLength($$)+2)); bufferResolveJumps($$); } | DO stmt WHILE '(' expr ')' { $$ = $2; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, -(bufferLength($$)+2)); bufferResolveJumps($$); } | FOR '(' assign_stmts_opt ';' expr_opt ';' assign_stmts_opt ')' stmt { if (!$5) $5 = newBuffer(); else { bufferWriteU8($5, SWFACTION_LOGICALNOT); bufferWriteU8($5, SWFACTION_BRANCHIFTRUE); bufferWriteS16($5, 2); bufferWriteS16($5, bufferLength($9)+bufferLength($7)+5); } bufferConcat($5, $9); bufferConcat($5, $7); bufferWriteU8($5, SWFACTION_BRANCHALWAYS); bufferWriteS16($5, 2); bufferWriteS16($5, -(bufferLength($5)+2)); bufferResolveJumps($5); $$ = $3; if(!$$) $$ = newBuffer(); bufferConcat($$, $5); } ; assign_stmts_opt : /* empty */ { $$ = NULL; } | assign_stmts ; cont_stmt : CONTINUE ';' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, MAGIC_CONTINUE_NUMBER); } ; break_stmt : BREAK ';' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, MAGIC_BREAK_NUMBER); } ; void_function_call : STOPDRAG '(' ')' /* no args */ { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_STOPDRAGMOVIE); } | CALLFRAME '(' variable ')' { $$ = newBuffer(); bufferWriteString($$, $3, strlen($3)+1); bufferWriteU8($$, SWFACTION_CALLFRAME); bufferWriteS16($$, 0); free($3); } | CALLFRAME '(' STRING ')' { $$ = newBuffer(); bufferWriteString($$, $3, strlen($3)+1); bufferWriteU8($$, SWFACTION_CALLFRAME); bufferWriteS16($$, 0); free($3); } | REMOVECLIP '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_REMOVECLIP); } | TRACE '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_TRACE); } /* getURL2(url, window, [method]) */ | GETURL '(' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, GETURL_METHOD_NOSEND); } | GETURL '(' expr ',' expr ',' GETURL_METHOD ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, $7); } | GETURL1 '(' STRING ',' STRING ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_GETURL); bufferWriteS16($$, strlen($3) + strlen($5) + 2); bufferWriteHardString($$, (byte*)$3, strlen($3)); bufferWriteU8($$, 0); bufferWriteHardString($$, (byte*)$5, strlen($5)); bufferWriteU8($$, 0); } | LOADMOVIE '(' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, GETURL_METHOD_NOSEND | GETURL_LOADMOVIE); } | LOADMOVIE '(' expr ',' expr ',' GETURL_METHOD ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, $7 | GETURL_LOADMOVIE); } | LOADVARIABLES '(' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, GETURL_METHOD_NOSEND | GETURL_LOADVARIABLES); } | LOADVARIABLES '(' expr ',' expr ',' GETURL_METHOD ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, $7 | GETURL_LOADVARIABLES); } /* startDrag(target, lock, [left, right, top, bottom]) */ | STARTDRAG '(' expr ',' expr ')' { $$ = newBuffer(); bufferWriteString($$, "0", 2); /* no constraint */ bufferConcat($$, $5); bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_STARTDRAGMOVIE); } | STARTDRAG '(' expr ',' expr ',' expr ',' expr ',' expr ',' expr ')' { $$ = newBuffer(); bufferConcat($$, $7); bufferConcat($$, $11); bufferConcat($$, $9); bufferConcat($$, $13); bufferWriteString($$, "1", 2); /* has constraint */ bufferConcat($$, $5); bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_STARTDRAGMOVIE); } /* duplicateClip(target, new, depth) */ | DUPLICATECLIP '(' expr ',' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferConcat($$, $7); bufferWriteWTHITProperty($$); bufferWriteU8($$, SWFACTION_ADD); /* see docs for explanation */ bufferWriteU8($$, SWFACTION_DUPLICATECLIP); } /* v3 actions */ | NEXTFRAME '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_NEXTFRAME); } | PREVFRAME '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_PREVFRAME); } | PLAY '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_PLAY); } | STOP '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_STOP); } | TOGGLEQUALITY '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_TOGGLEQUALITY); } | STOPSOUNDS '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_STOPSOUNDS); } | GOTOFRAME '(' NUMBER ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_GOTOFRAME); bufferWriteS16($$, 2); bufferWriteS16($$, atoi($3)); free($3); } | GOTOFRAME '(' STRING ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_GOTOLABEL); bufferWriteS16($$, strlen($3)+1); bufferWriteHardString($$, (byte*)$3, strlen($3)+1); free($3); } | GOTOFRAME '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_GOTOEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 0); } /* XXX - and stop */ | GOTOANDPLAY '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_GOTOEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 1); } /* XXX - and play */ | SETTARGET '(' STRING ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_SETTARGET); bufferWriteS16($$, strlen($3)+1); bufferWriteHardString($$, (byte*)$3, strlen($3)+1); free($3); } | SETTARGET '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_SETTARGETEXPRESSION); } | TELLTARGET '(' STRING ')' stmt { $$ = newBuffer(); /* SetTarget(STRING) */ bufferWriteU8($$, SWFACTION_SETTARGET); bufferWriteS16($$, strlen($3)+1); bufferWriteHardString($$, (byte*)$3, strlen($3)+1); /* stmt */ bufferConcat($$, $5); /* SetTarget('') */ bufferWriteU8($$, SWFACTION_SETTARGET); bufferWriteS16($$, 1); bufferWriteU8($$, 0); free($3); } | TELLTARGET '(' expr ')' stmt { $$ = $3; /* SetTarget(expr) */ bufferWriteU8($$, SWFACTION_SETTARGETEXPRESSION); /* stmt */ bufferConcat($$, $5); /* SetTarget('') */ bufferWriteU8($$, SWFACTION_SETTARGET); bufferWriteS16($$, 1); bufferWriteU8($$, 0); } ; function_call : EVAL '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_GETVARIABLE); } | TIME '(' ')' { $$ = newBuffer(); bufferWriteU8($$, SWFACTION_GETTIMER); } | RANDOM '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_RANDOM); } | LENGTH '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_STRINGLENGTH); } | INT '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_INT); } | ORD '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_ORD); } | CHR '(' expr ')' { $$ = $3; bufferWriteU8($$, SWFACTION_CHR); } | CONCAT '(' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_STRINGCONCAT); } | SUBSTR '(' expr ',' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferConcat($$, $7); bufferWriteU8($$, SWFACTION_SUBSTRING); } | GETPROPERTY '(' expr ',' STRING ')' { $$ = newBuffer(); bufferConcat($$, $3); bufferWriteGetProperty($$, $5); bufferWriteU8($$, SWFACTION_GETPROPERTY); free($5); } ; pf_expr : lhs_expr "++" %prec POSTFIX { $$ = newBuffer(); bufferWriteBuffer($$, $1); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteBuffer($$, $1); bufferConcat($$, $1); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETVARIABLE); } | lhs_expr "--" %prec POSTFIX { $$ = newBuffer(); bufferWriteBuffer($$, $1); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteBuffer($$, $1); bufferConcat($$, $1); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_SUBTRACT); bufferWriteU8($$, SWFACTION_SETVARIABLE); } ; /* these leave a value on the stack */ rhs_expr : function_call | '(' rhs_expr ')' { $$ = $2; } | NUMBER { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | '-' NUMBER %prec NEGATE { $$ = newBuffer(); bufferWriteString($$, "-", 2); bufferWriteString($$, $2, strlen($2)+1); free($2); } | STRING { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | variable { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteU8($$, SWFACTION_GETVARIABLE); free($1); } | sprite { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | sprite '.' IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteGetProperty($$, $3); bufferWriteU8($$, SWFACTION_GETPROPERTY); free($3); free($1); } | "++" sprite '.' IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteString($$, $2, strlen($2)+1); bufferWriteSetProperty($$, $4); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETPROPERTY); bufferWriteU8($$, SWFACTION_GETPROPERTY); free($2); free($4); } | "++" lhs_expr { $$ = $2; bufferWriteU8($$, SWFACTION_DUP); bufferWriteU8($$, SWFACTION_DUP); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETVARIABLE); bufferWriteU8($$, SWFACTION_GETVARIABLE); } | "--" sprite '.' IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteString($$, $2, strlen($2)+1); bufferWriteSetProperty($$, $4); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETPROPERTY); bufferWriteU8($$, SWFACTION_GETPROPERTY); free($2); free($4); } | "--" lhs_expr { $$ = $2; bufferWriteU8($$, SWFACTION_DUP); bufferWriteU8($$, SWFACTION_DUP); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_SUBTRACT); bufferWriteU8($$, SWFACTION_SETVARIABLE); bufferWriteU8($$, SWFACTION_GETVARIABLE); } | '-' rhs_expr %prec UMINUS { $$ = $2; bufferWriteString($2, "-1", 3); bufferWriteU8($2, SWFACTION_MULTIPLY); } | '!' rhs_expr { $$ = $2; bufferWriteU8($2, SWFACTION_LOGICALNOT); } | lhs_expr '=' rhs_expr /* assign and leave copy on stack */ { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_DUP); bufferWriteU8($$, SWFACTION_SETVARIABLE); } | rhs_expr '*' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_MULTIPLY); } | rhs_expr '/' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_DIVIDE); } | rhs_expr '+' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_ADD); } | rhs_expr '-' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_SUBTRACT); } | rhs_expr '&' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_STRINGCONCAT); } | rhs_expr '<' rhs_expr { $$ = $1; bufferConcat($$, $3); bufferWriteU8($$, SWFACTION_LESSTHAN); } | rhs_expr '>' rhs_expr { $$ = $3; bufferConcat($$, $1); bufferWriteU8($$, SWFACTION_LESSTHAN); } | rhs_expr "<=" rhs_expr { $$ = $3; bufferConcat($$, $1); bufferWriteU8($$, SWFACTION_LESSTHAN); bufferWriteU8($$, SWFACTION_LOGICALNOT); } | rhs_expr ">=" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_LESSTHAN); bufferWriteU8($1, SWFACTION_LOGICALNOT); } | rhs_expr "!==" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_STRINGEQ); bufferWriteU8($1, SWFACTION_LOGICALNOT); } | rhs_expr "===" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_STRINGEQ); } | rhs_expr "<=>" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_STRINGCOMPARE); } | rhs_expr "==" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_EQUAL); } | rhs_expr "!=" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_EQUAL); bufferWriteU8($1, SWFACTION_LOGICALNOT); } | rhs_expr "&&" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_LOGICALAND); } | rhs_expr "||" rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_LOGICALOR); } | rhs_expr '?' rhs_expr ':' rhs_expr { bufferWriteU8($1, SWFACTION_BRANCHIFTRUE); bufferWriteS16($1, 2); bufferWriteS16($1, bufferLength($5)+5); bufferConcat($1, $5); bufferWriteU8($1, SWFACTION_BRANCHALWAYS); bufferWriteS16($1, 2); bufferWriteS16($1, bufferLength($3)); bufferConcat($1, $3); } ; variable : IDENTIFIER | sprite ':' IDENTIFIER { $$ = $1; $$ = stringConcat($$, strdup(":")); $$ = stringConcat($$, $3); } ; sprite : THIS { $$ = strdup(""); } | '.' { $$ = strdup(""); } | '/' { $$ = strdup("/"); } | PARENT { $$ = strdup(".."); } | IDENTIFIER { $$ = $1; } | PATH { $$ = $1; } ; lhs_expr : variable { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | STRING { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | '(' rhs_expr ')' { $$ = $2; } ; assign_stmt : pf_expr | void_function_call | "++" lhs_expr { $$ = $2; bufferWriteBuffer($$, $2); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETVARIABLE); } | "--" lhs_expr { $$ = $2; bufferWriteBuffer($$, $2); bufferWriteU8($$, SWFACTION_GETVARIABLE); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_SUBTRACT); bufferWriteU8($$, SWFACTION_SETVARIABLE); } | "++" sprite '.' IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_ADD); bufferWriteString($$, $2, strlen($2)+1); bufferWriteSetProperty($$, $4); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($2); free($4); } | "--" sprite '.' IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $2, strlen($2)+1); bufferWriteGetProperty($$, $4); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferWriteString($$, "1", 2); bufferWriteU8($$, SWFACTION_SUBTRACT); bufferWriteString($$, $2, strlen($2)+1); bufferWriteSetProperty($$, $4); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($2); free($4); } | lhs_expr '=' rhs_expr { bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_SETVARIABLE); } | lhs_expr "*=" rhs_expr { bufferWriteBuffer($1, $1); bufferWriteU8($1, SWFACTION_GETVARIABLE); bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_MULTIPLY); bufferWriteU8($1, SWFACTION_SETVARIABLE); } | lhs_expr "/=" rhs_expr { bufferWriteBuffer($1, $1); bufferWriteU8($1, SWFACTION_GETVARIABLE); bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_DIVIDE); bufferWriteU8($1, SWFACTION_SETVARIABLE); } | lhs_expr "+=" rhs_expr { bufferWriteBuffer($1, $1); bufferWriteU8($1, SWFACTION_GETVARIABLE); bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_ADD); bufferWriteU8($1, SWFACTION_SETVARIABLE); } | lhs_expr "-=" rhs_expr { bufferWriteBuffer($1, $1); bufferWriteU8($1, SWFACTION_GETVARIABLE); bufferConcat($1, $3); bufferWriteU8($1, SWFACTION_SUBTRACT); bufferWriteU8($1, SWFACTION_SETVARIABLE); } | sprite '.' IDENTIFIER '=' rhs_expr { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteSetProperty($$, $3); bufferConcat($$,$5); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($1); free($3); } | sprite '.' IDENTIFIER "*=" rhs_expr { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteSetProperty($$, $3); bufferWriteString($$, $1, strlen($1)+1); bufferWriteGetProperty($$, $3); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_MULTIPLY); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($1); free($3); } | sprite '.' IDENTIFIER "/=" rhs_expr { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteSetProperty($$, $3); bufferWriteString($$, $1, strlen($1)+1); bufferWriteGetProperty($$, $3); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_DIVIDE); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($1); free($3); } | sprite '.' IDENTIFIER "+=" rhs_expr { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteSetProperty($$, $3); bufferWriteString($$, $1, strlen($1)+1); bufferWriteGetProperty($$, $3); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_ADD); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($1); free($3); } | sprite '.' IDENTIFIER "-=" rhs_expr { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteSetProperty($$, $3); bufferWriteString($$, $1, strlen($1)+1); bufferWriteGetProperty($$, $3); bufferWriteU8($$, SWFACTION_GETPROPERTY); bufferConcat($$, $5); bufferWriteU8($$, SWFACTION_SUBTRACT); bufferWriteU8($$, SWFACTION_SETPROPERTY); free($1); free($3); } ; expr : rhs_expr ; %% swftools_0.9.2+git20130725.orig/lib/action/swf4compiler.flex0000755000175000017500000002203312216332640022647 0ustar gawaingawain%{ #include #include #include "compile.h" #include "action.h" #include "blocks/error.h" #include "swf4compiler.tab.h" /* defines token types */ static int swf4debug; static const char *lexBuffer = NULL; static int lexBufferLen = 0; static int sLineNumber = 0; static char szLine[1024]; static char msgbufs[2][1024] = { {0}, {0} }, *msgline = {0}; static int column = 0; static void comment(); static void comment1(); static void count(); static void warning(char *msg); #define YY_INPUT(buf,result,max_size) result=lexBufferInput(buf, max_size) /* thanks to the prolific and brilliant Raff: */ static int lexBufferInput(char *buf, int max_size) { int l = lexBufferLen > max_size ? max_size : lexBufferLen; if (lexBufferLen <= 0) return YY_NULL; memcpy(buf, lexBuffer, l); lexBuffer += l; lexBufferLen -= l; return l; } /* very inefficient method of unescaping strings */ static void unescape(char *buf) { char *p, *p1; for (p1=buf; (p=strchr(p1, '\\')) != 0; p1 = p+1) { switch(p[1]) { case 'b' : p[1] = '\b'; break; case 'f' : p[1] = '\f'; break; case 'n' : p[1] = '\n'; break; case 'r' : p[1] = '\r'; break; case 't' : p[1] = '\t'; break; case 'x' : case 'u' : warning("unsupported escape sequence"); } strcpy(p, p+1); } } void swf4ParseInit(const char *script, int debug) { checkByteOrder(); yyrestart(NULL); swf4debug = debug; lexBuffer = script; lexBufferLen = strlen(script); sLineNumber = 0; column = 0; msgline = msgbufs[0]; } %} %{ // forward declaration needed by the following function #ifndef YY_PROTO #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif #endif static void yyunput YY_PROTO(( int c, char *buf_ptr )); void do_unput4(const char c) { unput(c); } %} DIGIT [0-9] ID [a-zA-Z_][a-zA-Z0-9_]* LEVEL \.\.? %% {DIGIT}+ { count(); swf4lval.str = strdup(yytext); return NUMBER; } {DIGIT}+"."{DIGIT}* { count(); swf4lval.str = strdup(yytext); return NUMBER; } true { count(); swf4lval.str = strdup("1"); return NUMBER; } false { count(); swf4lval.str = strdup("0"); return NUMBER; } break { count(); return BREAK; } continue { count(); return CONTINUE; } else { count(); return ELSE; } for { count(); return FOR; } if { count(); return IF; } while { count(); return WHILE; } do { count(); return DO; } valueOf { count(); return EVAL; } /* functions */ random { count(); return RANDOM; } time { count(); return TIME; } length { count(); return LENGTH; } int { count(); return INT; } concat { count(); return CONCAT; } duplicateClip { count(); return DUPLICATECLIP; } removeClip { count(); return REMOVECLIP; } trace { count(); return TRACE; } startDrag { count(); return STARTDRAG; } stopDrag { count(); return STOPDRAG; } ord { count(); return ORD; } chr { count(); return CHR; } callFrame { count(); return CALLFRAME; } getURL { count(); return GETURL; } getURL1 { count(); return GETURL1; } loadMovie { count(); return LOADMOVIE; } loadVariables { count(); return LOADVARIABLES; } substr { count(); return SUBSTR; } getProperty { count(); return GETPROPERTY; } /* getURL2 methods */ post { count(); swf4lval.getURLMethod = GETURL_METHOD_POST; return GETURL_METHOD; } get { count(); swf4lval.getURLMethod = GETURL_METHOD_GET; return GETURL_METHOD; } nosend { count(); swf4lval.getURLMethod = GETURL_METHOD_NOSEND; return GETURL_METHOD; } /* v3 functions */ nextFrame { count(); return NEXTFRAME; } prevFrame { count(); return PREVFRAME; } play { count(); return PLAY; } stop { count(); return STOP; } toggleQuality { count(); return TOGGLEQUALITY; } stopSounds { count(); return STOPSOUNDS; } gotoFrame { count(); return GOTOFRAME; } gotoAndPlay { count(); return GOTOANDPLAY; } frameLoaded { count(); return FRAMELOADED; } setTarget { count(); return SETTARGET; } /* high level functions */ tellTarget { count(); return TELLTARGET; } this { count(); return THIS; } {ID} { count(); swf4lval.str = strdup(yytext); return IDENTIFIER; } {LEVEL}?("/"({ID}|{LEVEL}))+ { count(); swf4lval.str = strdup(yytext); return PATH; } {ID}("/"({ID}|{LEVEL}))+ { count(); swf4lval.str = strdup(yytext); return PATH; } \"(\\.|[^\\"])*\" { count(); swf4lval.str = strdup(yytext+1); swf4lval.str[strlen(swf4lval.str)-1]=0; unescape(swf4lval.str); return STRING; } \'(\\.|[^\\'])*\' { count(); swf4lval.str = strdup(yytext+1); swf4lval.str[strlen(swf4lval.str)-1]=0; unescape(swf4lval.str); return STRING; } \"(\\.|[^\\"])*$ { count(); swf4lval.str = strdup(""); warning("Unterminated string!"); return STRING; } \'(\\.|[^\\'])*$ { count(); swf4lval.str = strdup(""); warning("Unterminated string!"); return STRING; } "/*" { count(); comment(); } "//" { count(); comment1(); } [ \t\v\f] { count(); } "++" { count(); return INC; } "--" { count(); return DEC; } "<" { count(); return '<'; } ">" { count(); return '>'; } "<=" { count(); return LE; } ">=" { count(); return GE; } "==" { count(); return EQ; } "!=" { count(); return NE; } "&&" { count(); return LAN; } "||" { count(); return LOR; } "*=" { count(); return MEQ; } "/=" { count(); return DEQ; } "+=" { count(); return IEQ; } "-=" { count(); return SEQ; } "===" { count(); return STREQ; } "!==" { count(); return STRNE; } "<=>" { count(); return STRCMP; } ".." { count(); return PARENT; } ";" { count(); return ';'; } "=" { count(); return '='; } "+" { count(); return '+'; } "-" { count(); return '-'; } "&" { count(); return '&'; } "*" { count(); return '*'; } "/" { count(); return '/'; } "!" { count(); return '!'; } "(" { count(); return '('; } ")" { count(); return ')'; } "[" { count(); return '['; } "]" { count(); return ']'; } "{" { count(); return '{'; } "}" { count(); return '}'; } "," { count(); return ','; } "." { count(); return '.'; } "?" { count(); return '?'; } ":" { count(); return ':'; } \r?\n { count(); column = 0; strcpy(szLine, yytext + 1); ++sLineNumber; yyless(1); } . printf( "Unrecognized character: %s\n", yytext ); %% static int getinput() { #ifdef __cplusplus return yyinput(); #else return input(); #endif } int swf4wrap() { return 1; } static void countline() { if(sLineNumber != 0) msgline[column] = 0; ++sLineNumber; column = 0; msgline = msgbufs[sLineNumber & 1]; } static int LineNumber(void) { return (sLineNumber + 1); } static int ColumnNumber(void) { return column; } static char *LineText(void) { msgline[column] = 0; return msgline; } static void comment(void) { // Handle block comments int c, c1; loop: // We have the start of a comment so look skip everything up to the // end of the comment character while ((c = getinput()) != '*' && c != EOF) { if(column < 1023) msgline[column] = c; ++column; // keep the line number in synch if (c == '\n') { // start the output (matches the algorithim in the lexx above) countline(); } if (swf4debug) putchar(c); } // is this the end of comment character if ((c1 = getinput()) != '/' && c != EOF) { // false start as this was no end of comment do_unput4(c1); goto loop; } // write out the start of the end of comment if (c != EOF) if (swf4debug) putchar(c); // write out the end of the end of comment if (c1 != EOF) if (swf4debug) putchar(c1); } static void comment1(void) { // Handle comment of type 1 (ie '//') int c; // this is a line comment while ((c = getinput()) != '\n' && c != EOF) { if (swf4debug) putchar(c); if(column < 1023) msgline[column] = c; ++column; }; // keep the line number in synch if (c == '\n') { if (swf4debug) putchar(c); countline(); } } static void count(void) { int n; // Count the characters to maintain the current column position if (yytext[0] == '\n') { if (swf4debug) printf("\n"); } else { if (swf4debug) printf("%s", yytext); for(n=0; n 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #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 swf4restart(swf4in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int swf4leng; extern FILE *swf4in, *swf4out; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up swf4text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up swf4text again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE 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 getc() * 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; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* 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 swf4restart()), so that the user can continue scanning by * just pointing swf4in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when swf4text is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int swf4leng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow swf4wrap()'s to do buffer switches * instead of setting up a fresh swf4in. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void swf4restart (FILE *input_file ); void swf4_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE swf4_create_buffer (FILE *file,int size ); void swf4_delete_buffer (YY_BUFFER_STATE b ); void swf4_flush_buffer (YY_BUFFER_STATE b ); void swf4push_buffer_state (YY_BUFFER_STATE new_buffer ); void swf4pop_buffer_state (void ); static void swf4ensure_buffer_stack (void ); static void swf4_load_buffer_state (void ); static void swf4_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER swf4_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE swf4_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE swf4_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE swf4_scan_bytes (yyconst char *bytes,int len ); void *swf4alloc (yy_size_t ); void *swf4realloc (void *,yy_size_t ); void swf4free (void * ); #define yy_new_buffer swf4_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ swf4ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ swf4_create_buffer(swf4in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ swf4ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ swf4_create_buffer(swf4in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *swf4in = (FILE *) 0, *swf4out = (FILE *) 0; typedef int yy_state_type; extern int swf4lineno; int swf4lineno = 1; extern char *swf4text; #define yytext_ptr swf4text static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up swf4text. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ swf4leng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 95 #define YY_END_OF_BUFFER 96 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[320] = { 0, 0, 0, 96, 94, 56, 93, 94, 82, 94, 79, 94, 83, 84, 80, 77, 89, 78, 90, 81, 1, 92, 75, 59, 76, 60, 91, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 85, 86, 87, 94, 88, 93, 64, 0, 52, 50, 0, 65, 0, 53, 51, 0, 67, 57, 69, 58, 70, 74, 0, 54, 48, 55, 68, 48, 2, 1, 61, 63, 62, 0, 47, 47, 47, 47, 47, 11, 47, 47, 47, 47, 47, 47, 47, 9, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 66, 72, 48, 48, 2, 73, 71, 49, 49, 47, 47, 24, 47, 47, 47, 47, 8, 47, 33, 47, 16, 47, 47, 47, 47, 23, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 49, 49, 47, 47, 47, 47, 47, 7, 47, 47, 47, 47, 47, 47, 47, 47, 47, 37, 32, 47, 47, 47, 47, 47, 38, 47, 47, 46, 14, 47, 47, 3, 47, 47, 5, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 20, 47, 10, 47, 17, 47, 47, 47, 47, 26, 47, 47, 15, 47, 47, 47, 34, 47, 13, 47, 47, 47, 47, 47, 30, 47, 47, 47, 47, 47, 47, 47, 47, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 12, 47, 6, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 22, 47, 47, 47, 25, 47, 47, 47, 47, 41, 28, 47, 35, 36, 47, 44, 21, 47, 47, 47, 47, 47, 47, 47, 47, 19, 40, 45, 47, 47, 43, 31, 42, 47, 47, 47, 47, 47, 18, 29, 39, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 1, 1, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 17, 17, 17, 17, 17, 17, 17, 17, 19, 20, 21, 22, 23, 24, 1, 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, 34, 50, 51, 52, 1, 34, 1, 53, 54, 55, 56, 57, 58, 59, 60, 61, 34, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 34, 77, 78, 79, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 yyconst flex_int32_t yy_meta[80] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 4, 5, 5, 1, 1, 1, 2, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[327] = { 0, 0, 0, 878, 879, 879, 879, 874, 854, 77, 868, 78, 879, 879, 852, 70, 879, 71, 72, 79, 81, 879, 879, 851, 850, 849, 879, 854, 68, 81, 73, 75, 91, 86, 84, 107, 111, 89, 139, 137, 138, 164, 110, 116, 879, 879, 879, 791, 879, 879, 846, 118, 153, 879, 864, 879, 100, 162, 879, 863, 879, 879, 879, 879, 879, 849, 176, 879, 156, 879, 879, 844, 167, 171, 836, 828, 879, 817, 815, 183, 184, 185, 191, 814, 195, 198, 200, 201, 206, 202, 207, 811, 216, 199, 223, 210, 212, 233, 228, 222, 250, 229, 234, 253, 261, 226, 259, 241, 256, 272, 280, 274, 268, 879, 879, 809, 807, 291, 879, 879, 296, 806, 288, 283, 805, 290, 299, 307, 300, 803, 302, 310, 305, 800, 316, 312, 314, 322, 798, 332, 340, 326, 337, 341, 343, 344, 333, 347, 338, 351, 362, 367, 376, 373, 360, 379, 797, 796, 381, 380, 393, 390, 396, 795, 404, 406, 408, 411, 409, 412, 428, 424, 420, 794, 793, 429, 425, 432, 444, 431, 456, 450, 452, 788, 779, 454, 457, 778, 477, 479, 776, 473, 460, 433, 484, 773, 491, 493, 494, 487, 502, 503, 504, 463, 506, 512, 508, 521, 517, 513, 525, 522, 533, 531, 535, 540, 769, 545, 753, 551, 712, 549, 562, 550, 546, 101, 564, 577, 676, 563, 580, 582, 675, 585, 670, 579, 574, 587, 592, 567, 648, 598, 602, 607, 609, 603, 608, 625, 615, 645, 626, 610, 635, 638, 611, 639, 641, 653, 637, 664, 643, 667, 642, 612, 668, 529, 672, 678, 647, 669, 684, 686, 693, 691, 695, 703, 696, 706, 497, 705, 701, 719, 465, 711, 726, 715, 729, 439, 436, 723, 421, 388, 731, 372, 353, 735, 737, 734, 740, 746, 741, 744, 752, 275, 267, 218, 763, 768, 203, 163, 158, 771, 747, 759, 764, 757, 145, 93, 88, 879, 834, 840, 845, 848, 851, 855, 858 } ; static yyconst flex_int16_t yy_def[327] = { 0, 319, 1, 319, 319, 319, 319, 319, 319, 320, 319, 321, 319, 319, 319, 319, 319, 319, 319, 322, 319, 319, 319, 319, 319, 319, 319, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 319, 319, 319, 319, 319, 319, 319, 320, 320, 319, 320, 319, 321, 321, 319, 321, 319, 319, 319, 319, 319, 319, 322, 319, 319, 319, 319, 324, 319, 319, 319, 319, 319, 325, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 319, 319, 319, 324, 319, 319, 319, 319, 326, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 319, 326, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 0, 319, 319, 319, 319, 319, 319, 319 } ; static yyconst flex_int16_t yy_nxt[959] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 27, 34, 27, 27, 35, 27, 36, 37, 38, 27, 39, 40, 41, 27, 42, 43, 27, 27, 44, 4, 45, 27, 28, 29, 30, 31, 32, 33, 27, 34, 27, 35, 27, 36, 37, 38, 27, 39, 40, 41, 27, 42, 43, 27, 27, 46, 47, 48, 52, 57, 61, 53, 77, 63, 58, 65, 66, 77, 67, 77, 62, 64, 68, 69, 72, 77, 73, 73, 77, 70, 77, 57, 77, 77, 80, 77, 58, 77, 79, 85, 83, 81, 91, 89, 86, 77, 84, 249, 82, 52, 92, 77, 53, 90, 77, 77, 54, 59, 87, 97, 77, 88, 80, 111, 93, 79, 85, 83, 95, 81, 91, 89, 86, 84, 94, 82, 112, 92, 96, 59, 90, 77, 77, 77, 52, 87, 97, 53, 88, 77, 101, 111, 93, 57, 102, 103, 95, 54, 58, 115, 66, 94, 77, 98, 112, 96, 99, 77, 77, 100, 104, 105, 117, 117, 72, 319, 73, 73, 101, 68, 319, 106, 102, 103, 107, 108, 319, 77, 77, 77, 98, 109, 54, 99, 110, 77, 100, 104, 105, 77, 122, 59, 77, 77, 77, 77, 77, 77, 123, 106, 77, 77, 107, 108, 77, 124, 77, 125, 109, 130, 77, 110, 77, 126, 128, 134, 77, 77, 122, 127, 77, 129, 77, 77, 131, 123, 135, 77, 77, 132, 147, 139, 124, 137, 125, 77, 136, 130, 133, 138, 126, 128, 134, 140, 77, 142, 127, 77, 129, 143, 77, 131, 149, 77, 135, 77, 132, 141, 147, 139, 137, 77, 77, 136, 145, 133, 77, 138, 77, 77, 140, 150, 142, 148, 77, 144, 143, 77, 146, 155, 149, 151, 77, 152, 77, 141, 117, 117, 154, 156, 77, 158, 145, 77, 77, 160, 77, 159, 150, 77, 148, 77, 144, 153, 77, 146, 77, 155, 77, 151, 77, 152, 161, 162, 163, 154, 77, 165, 170, 158, 77, 164, 168, 160, 159, 169, 77, 77, 166, 172, 153, 77, 77, 167, 77, 77, 171, 77, 77, 161, 162, 77, 163, 176, 165, 77, 170, 77, 164, 168, 175, 180, 182, 169, 77, 166, 77, 172, 177, 173, 167, 77, 174, 171, 179, 178, 77, 77, 181, 184, 77, 176, 183, 77, 77, 77, 185, 175, 180, 182, 187, 186, 77, 188, 77, 177, 173, 77, 191, 174, 77, 179, 178, 189, 190, 181, 192, 184, 77, 183, 77, 193, 77, 77, 185, 77, 77, 194, 187, 186, 188, 195, 199, 196, 77, 77, 191, 200, 77, 77, 189, 190, 77, 77, 192, 77, 77, 77, 197, 193, 77, 198, 204, 77, 201, 194, 205, 206, 77, 195, 199, 196, 207, 202, 77, 200, 77, 209, 77, 221, 77, 77, 203, 210, 77, 197, 208, 77, 198, 77, 204, 201, 211, 205, 216, 206, 230, 77, 215, 207, 202, 77, 213, 77, 214, 209, 221, 212, 77, 203, 210, 77, 220, 208, 217, 77, 218, 77, 77, 222, 211, 77, 216, 219, 230, 215, 77, 77, 77, 213, 77, 214, 77, 226, 212, 223, 77, 77, 225, 220, 224, 77, 217, 228, 218, 77, 77, 222, 232, 77, 219, 229, 227, 77, 235, 77, 231, 77, 233, 77, 226, 237, 223, 236, 77, 225, 234, 224, 241, 77, 77, 228, 238, 77, 77, 77, 232, 242, 229, 227, 239, 240, 235, 231, 244, 233, 77, 77, 77, 237, 236, 77, 243, 234, 248, 246, 241, 247, 77, 238, 250, 77, 245, 77, 77, 242, 77, 239, 240, 77, 251, 77, 244, 257, 256, 254, 77, 252, 255, 243, 260, 248, 77, 246, 247, 259, 77, 77, 250, 245, 253, 77, 77, 77, 77, 77, 77, 258, 251, 77, 265, 257, 256, 254, 252, 263, 255, 260, 261, 77, 77, 262, 268, 259, 264, 270, 273, 253, 267, 77, 266, 77, 77, 77, 258, 77, 77, 77, 265, 77, 277, 77, 77, 263, 269, 261, 271, 77, 262, 272, 268, 264, 270, 273, 274, 275, 267, 266, 77, 279, 276, 77, 77, 77, 77, 281, 77, 285, 277, 77, 77, 269, 77, 278, 271, 282, 280, 272, 77, 283, 77, 274, 275, 286, 284, 77, 279, 77, 276, 77, 77, 287, 281, 288, 285, 77, 289, 77, 290, 77, 77, 278, 291, 282, 280, 77, 77, 283, 296, 77, 286, 295, 284, 77, 292, 294, 298, 77, 293, 287, 77, 288, 297, 77, 289, 77, 290, 302, 77, 77, 291, 77, 301, 299, 77, 77, 296, 300, 77, 295, 77, 77, 292, 294, 298, 293, 77, 77, 306, 303, 297, 77, 308, 77, 307, 302, 304, 77, 77, 305, 301, 299, 77, 77, 300, 77, 311, 77, 309, 315, 77, 310, 77, 77, 312, 306, 303, 316, 314, 313, 308, 307, 77, 304, 318, 317, 305, 77, 77, 77, 77, 77, 77, 311, 77, 309, 315, 77, 310, 77, 77, 66, 312, 66, 316, 77, 314, 313, 77, 77, 120, 318, 317, 51, 51, 51, 51, 51, 51, 56, 56, 56, 56, 56, 56, 71, 71, 71, 119, 71, 78, 78, 78, 116, 116, 116, 121, 118, 66, 121, 157, 157, 157, 66, 319, 319, 114, 113, 77, 76, 75, 74, 60, 55, 50, 49, 319, 3, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319 } ; static yyconst flex_int16_t yy_chk[959] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 11, 15, 9, 28, 17, 11, 18, 18, 30, 19, 31, 15, 17, 19, 19, 20, 29, 20, 20, 34, 19, 33, 56, 318, 37, 29, 32, 56, 317, 28, 31, 30, 29, 34, 33, 32, 225, 30, 225, 29, 51, 34, 35, 51, 33, 42, 36, 9, 11, 32, 37, 43, 32, 29, 42, 35, 28, 31, 30, 36, 29, 34, 33, 32, 30, 35, 29, 43, 34, 36, 56, 33, 39, 40, 38, 52, 32, 37, 52, 32, 316, 39, 42, 35, 57, 39, 40, 36, 51, 57, 68, 68, 35, 310, 38, 43, 36, 38, 309, 41, 38, 40, 40, 72, 72, 73, 66, 73, 73, 39, 66, 66, 41, 39, 40, 41, 41, 66, 79, 80, 81, 38, 41, 52, 38, 41, 82, 38, 40, 40, 84, 79, 57, 85, 93, 86, 87, 89, 308, 80, 41, 88, 90, 41, 41, 95, 81, 96, 82, 41, 88, 92, 41, 305, 84, 86, 93, 99, 94, 79, 85, 105, 87, 98, 101, 89, 80, 94, 97, 102, 90, 105, 98, 81, 96, 82, 107, 95, 88, 92, 97, 84, 86, 93, 99, 100, 101, 85, 103, 87, 102, 108, 89, 107, 106, 94, 104, 90, 100, 105, 98, 96, 304, 112, 95, 104, 92, 109, 97, 111, 303, 99, 108, 101, 106, 110, 103, 102, 123, 104, 112, 107, 109, 122, 110, 125, 100, 117, 117, 111, 120, 120, 122, 104, 126, 128, 125, 130, 123, 108, 132, 106, 127, 103, 110, 131, 104, 135, 112, 136, 109, 134, 110, 125, 126, 127, 111, 137, 130, 135, 122, 141, 128, 132, 125, 123, 134, 139, 146, 131, 137, 110, 142, 148, 131, 140, 143, 136, 144, 145, 125, 126, 147, 127, 142, 130, 149, 135, 294, 128, 132, 141, 146, 148, 134, 154, 131, 150, 137, 143, 139, 131, 151, 140, 136, 145, 144, 293, 153, 147, 150, 152, 142, 149, 155, 159, 158, 151, 141, 146, 148, 153, 152, 291, 154, 161, 143, 139, 160, 159, 140, 162, 145, 144, 155, 158, 147, 160, 150, 164, 149, 165, 161, 166, 168, 151, 167, 169, 162, 153, 152, 154, 164, 168, 165, 172, 290, 159, 168, 171, 176, 155, 158, 170, 175, 160, 179, 177, 193, 166, 161, 288, 167, 171, 287, 169, 162, 172, 175, 178, 164, 168, 165, 176, 170, 181, 168, 182, 178, 185, 193, 180, 186, 170, 179, 192, 166, 177, 203, 167, 282, 171, 169, 180, 172, 186, 175, 203, 191, 185, 176, 170, 188, 181, 189, 182, 178, 193, 180, 194, 170, 179, 199, 192, 177, 188, 196, 189, 197, 198, 194, 180, 278, 186, 191, 203, 185, 200, 201, 202, 181, 204, 182, 206, 199, 180, 196, 205, 209, 198, 192, 197, 208, 188, 201, 189, 207, 211, 194, 205, 210, 191, 202, 200, 265, 208, 213, 204, 212, 206, 214, 199, 210, 196, 209, 215, 198, 207, 197, 214, 217, 224, 201, 211, 221, 223, 219, 205, 215, 202, 200, 212, 213, 208, 204, 219, 206, 222, 229, 226, 210, 209, 239, 217, 207, 224, 222, 214, 223, 236, 211, 226, 227, 221, 235, 230, 215, 231, 212, 213, 233, 227, 237, 219, 236, 235, 231, 238, 229, 233, 217, 239, 224, 241, 222, 223, 238, 242, 245, 226, 221, 230, 243, 246, 244, 251, 254, 263, 237, 227, 248, 245, 236, 235, 231, 229, 243, 233, 239, 241, 247, 250, 242, 248, 238, 244, 251, 254, 230, 247, 252, 246, 258, 253, 255, 237, 256, 262, 260, 245, 249, 258, 268, 240, 243, 250, 241, 252, 257, 242, 253, 248, 244, 251, 254, 255, 256, 247, 246, 259, 260, 257, 261, 264, 269, 234, 262, 266, 268, 258, 232, 228, 250, 267, 259, 252, 264, 261, 253, 270, 266, 271, 255, 256, 269, 267, 273, 260, 272, 257, 274, 276, 270, 262, 271, 268, 280, 272, 275, 273, 279, 277, 259, 274, 264, 261, 283, 220, 266, 280, 285, 269, 279, 267, 281, 275, 277, 283, 289, 276, 270, 284, 271, 281, 286, 272, 292, 273, 289, 297, 295, 274, 296, 286, 284, 298, 300, 280, 285, 301, 279, 299, 312, 275, 277, 283, 276, 302, 218, 297, 292, 281, 315, 299, 313, 298, 289, 295, 306, 314, 296, 286, 284, 307, 216, 285, 311, 302, 195, 300, 312, 190, 301, 187, 184, 306, 297, 292, 313, 311, 307, 299, 298, 183, 295, 315, 314, 296, 174, 173, 163, 157, 156, 138, 302, 133, 300, 312, 129, 301, 124, 121, 116, 306, 115, 313, 91, 311, 307, 83, 78, 77, 315, 314, 320, 320, 320, 320, 320, 320, 321, 321, 321, 321, 321, 321, 322, 322, 322, 75, 322, 323, 323, 323, 324, 324, 324, 325, 74, 71, 325, 326, 326, 326, 65, 59, 54, 50, 47, 27, 25, 24, 23, 14, 10, 8, 7, 3, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int swf4_flex_debug; int swf4_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *swf4text; #line 1 "swf4compiler.flex" #line 2 "swf4compiler.flex" #include #include #include "compile.h" #include "action.h" #include "blocks/error.h" #include "swf4compiler.tab.h" /* defines token types */ static int swf4debug; static const char *lexBuffer = NULL; static int lexBufferLen = 0; static int sLineNumber = 0; static char szLine[1024]; static char msgbufs[2][1024] = { {0}, {0} }, *msgline = {0}; static int column = 0; static void comment(); static void comment1(); static void count(); static void warning(char *msg); #define YY_INPUT(buf,result,max_size) result=lexBufferInput(buf, max_size) /* thanks to the prolific and brilliant Raff: */ static int lexBufferInput(char *buf, int max_size) { int l = lexBufferLen > max_size ? max_size : lexBufferLen; if (lexBufferLen <= 0) return YY_NULL; memcpy(buf, lexBuffer, l); lexBuffer += l; lexBufferLen -= l; return l; } /* very inefficient method of unescaping strings */ static void unescape(char *buf) { char *p, *p1; for (p1=buf; (p=strchr(p1, '\\')) != 0; p1 = p+1) { switch(p[1]) { case 'b' : p[1] = '\b'; break; case 'f' : p[1] = '\f'; break; case 'n' : p[1] = '\n'; break; case 'r' : p[1] = '\r'; break; case 't' : p[1] = '\t'; break; case 'x' : case 'u' : warning("unsupported escape sequence"); } strcpy(p, p+1); } } void swf4ParseInit(const char *script, int debug) { checkByteOrder(); swf4restart(NULL); swf4debug = debug; lexBuffer = script; lexBufferLen = strlen(script); sLineNumber = 0; column = 0; msgline = msgbufs[0]; } #line 79 "swf4compiler.flex" // forward declaration needed by the following function #ifndef YY_PROTO #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif #endif static void yyunput YY_PROTO(( int c, char *buf_ptr )); void do_unput4(const char c) { unput(c); } #line 874 "lex.swf4.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int swf4lex_destroy (void ); int swf4get_debug (void ); void swf4set_debug (int debug_flag ); YY_EXTRA_TYPE swf4get_extra (void ); void swf4set_extra (YY_EXTRA_TYPE user_defined ); FILE *swf4get_in (void ); void swf4set_in (FILE * in_str ); FILE *swf4get_out (void ); void swf4set_out (FILE * out_str ); int swf4get_leng (void ); char *swf4get_text (void ); int swf4get_lineno (void ); void swf4set_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int swf4wrap (void ); #else extern int swf4wrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #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 fwrite( swf4text, swf4leng, 1, swf4out ) #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) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( swf4in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( swf4in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, swf4in))==0 && ferror(swf4in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(swf4in); \ } \ }\ \ #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 /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int swf4lex (void); #define YY_DECL int swf4lex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after swf4text and swf4leng * 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 \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 96 "swf4compiler.flex" #line 1059 "lex.swf4.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! swf4in ) swf4in = stdin; if ( ! swf4out ) swf4out = stdout; if ( ! YY_CURRENT_BUFFER ) { swf4ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = swf4_create_buffer(swf4in,YY_BUF_SIZE ); } swf4_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of swf4text. */ *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_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 320 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 879 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 98 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text); return NUMBER; } YY_BREAK case 2: YY_RULE_SETUP #line 100 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text); return NUMBER; } YY_BREAK case 3: YY_RULE_SETUP #line 102 "swf4compiler.flex" { count(); swf4lval.str = strdup("1"); return NUMBER; } YY_BREAK case 4: YY_RULE_SETUP #line 104 "swf4compiler.flex" { count(); swf4lval.str = strdup("0"); return NUMBER; } YY_BREAK case 5: YY_RULE_SETUP #line 106 "swf4compiler.flex" { count(); return BREAK; } YY_BREAK case 6: YY_RULE_SETUP #line 107 "swf4compiler.flex" { count(); return CONTINUE; } YY_BREAK case 7: YY_RULE_SETUP #line 108 "swf4compiler.flex" { count(); return ELSE; } YY_BREAK case 8: YY_RULE_SETUP #line 109 "swf4compiler.flex" { count(); return FOR; } YY_BREAK case 9: YY_RULE_SETUP #line 110 "swf4compiler.flex" { count(); return IF; } YY_BREAK case 10: YY_RULE_SETUP #line 111 "swf4compiler.flex" { count(); return WHILE; } YY_BREAK case 11: YY_RULE_SETUP #line 112 "swf4compiler.flex" { count(); return DO; } YY_BREAK case 12: YY_RULE_SETUP #line 113 "swf4compiler.flex" { count(); return EVAL; } YY_BREAK /* functions */ case 13: YY_RULE_SETUP #line 116 "swf4compiler.flex" { count(); return RANDOM; } YY_BREAK case 14: YY_RULE_SETUP #line 117 "swf4compiler.flex" { count(); return TIME; } YY_BREAK case 15: YY_RULE_SETUP #line 118 "swf4compiler.flex" { count(); return LENGTH; } YY_BREAK case 16: YY_RULE_SETUP #line 119 "swf4compiler.flex" { count(); return INT; } YY_BREAK case 17: YY_RULE_SETUP #line 120 "swf4compiler.flex" { count(); return CONCAT; } YY_BREAK case 18: YY_RULE_SETUP #line 121 "swf4compiler.flex" { count(); return DUPLICATECLIP; } YY_BREAK case 19: YY_RULE_SETUP #line 122 "swf4compiler.flex" { count(); return REMOVECLIP; } YY_BREAK case 20: YY_RULE_SETUP #line 123 "swf4compiler.flex" { count(); return TRACE; } YY_BREAK case 21: YY_RULE_SETUP #line 124 "swf4compiler.flex" { count(); return STARTDRAG; } YY_BREAK case 22: YY_RULE_SETUP #line 125 "swf4compiler.flex" { count(); return STOPDRAG; } YY_BREAK case 23: YY_RULE_SETUP #line 126 "swf4compiler.flex" { count(); return ORD; } YY_BREAK case 24: YY_RULE_SETUP #line 127 "swf4compiler.flex" { count(); return CHR; } YY_BREAK case 25: YY_RULE_SETUP #line 128 "swf4compiler.flex" { count(); return CALLFRAME; } YY_BREAK case 26: YY_RULE_SETUP #line 129 "swf4compiler.flex" { count(); return GETURL; } YY_BREAK case 27: YY_RULE_SETUP #line 130 "swf4compiler.flex" { count(); return GETURL1; } YY_BREAK case 28: YY_RULE_SETUP #line 131 "swf4compiler.flex" { count(); return LOADMOVIE; } YY_BREAK case 29: YY_RULE_SETUP #line 132 "swf4compiler.flex" { count(); return LOADVARIABLES; } YY_BREAK case 30: YY_RULE_SETUP #line 133 "swf4compiler.flex" { count(); return SUBSTR; } YY_BREAK case 31: YY_RULE_SETUP #line 135 "swf4compiler.flex" { count(); return GETPROPERTY; } YY_BREAK /* getURL2 methods */ case 32: YY_RULE_SETUP #line 138 "swf4compiler.flex" { count(); swf4lval.getURLMethod = GETURL_METHOD_POST; return GETURL_METHOD; } YY_BREAK case 33: YY_RULE_SETUP #line 140 "swf4compiler.flex" { count(); swf4lval.getURLMethod = GETURL_METHOD_GET; return GETURL_METHOD; } YY_BREAK case 34: YY_RULE_SETUP #line 142 "swf4compiler.flex" { count(); swf4lval.getURLMethod = GETURL_METHOD_NOSEND; return GETURL_METHOD; } YY_BREAK /* v3 functions */ case 35: YY_RULE_SETUP #line 147 "swf4compiler.flex" { count(); return NEXTFRAME; } YY_BREAK case 36: YY_RULE_SETUP #line 148 "swf4compiler.flex" { count(); return PREVFRAME; } YY_BREAK case 37: YY_RULE_SETUP #line 149 "swf4compiler.flex" { count(); return PLAY; } YY_BREAK case 38: YY_RULE_SETUP #line 150 "swf4compiler.flex" { count(); return STOP; } YY_BREAK case 39: YY_RULE_SETUP #line 151 "swf4compiler.flex" { count(); return TOGGLEQUALITY; } YY_BREAK case 40: YY_RULE_SETUP #line 152 "swf4compiler.flex" { count(); return STOPSOUNDS; } YY_BREAK case 41: YY_RULE_SETUP #line 153 "swf4compiler.flex" { count(); return GOTOFRAME; } YY_BREAK case 42: YY_RULE_SETUP #line 154 "swf4compiler.flex" { count(); return GOTOANDPLAY; } YY_BREAK case 43: YY_RULE_SETUP #line 155 "swf4compiler.flex" { count(); return FRAMELOADED; } YY_BREAK case 44: YY_RULE_SETUP #line 156 "swf4compiler.flex" { count(); return SETTARGET; } YY_BREAK /* high level functions */ case 45: YY_RULE_SETUP #line 159 "swf4compiler.flex" { count(); return TELLTARGET; } YY_BREAK case 46: YY_RULE_SETUP #line 162 "swf4compiler.flex" { count(); return THIS; } YY_BREAK case 47: YY_RULE_SETUP #line 164 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text); return IDENTIFIER; } YY_BREAK case 48: YY_RULE_SETUP #line 167 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text); return PATH; } YY_BREAK case 49: YY_RULE_SETUP #line 170 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text); return PATH; } YY_BREAK case 50: /* rule 50 can match eol */ YY_RULE_SETUP #line 173 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text+1); swf4lval.str[strlen(swf4lval.str)-1]=0; unescape(swf4lval.str); return STRING; } YY_BREAK case 51: /* rule 51 can match eol */ YY_RULE_SETUP #line 178 "swf4compiler.flex" { count(); swf4lval.str = strdup(swf4text+1); swf4lval.str[strlen(swf4lval.str)-1]=0; unescape(swf4lval.str); return STRING; } YY_BREAK case 52: /* rule 52 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up swf4text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up swf4text again */ YY_RULE_SETUP #line 183 "swf4compiler.flex" { count(); swf4lval.str = strdup(""); warning("Unterminated string!"); return STRING; } YY_BREAK case 53: /* rule 53 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up swf4text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up swf4text again */ YY_RULE_SETUP #line 187 "swf4compiler.flex" { count(); swf4lval.str = strdup(""); warning("Unterminated string!"); return STRING; } YY_BREAK case 54: YY_RULE_SETUP #line 191 "swf4compiler.flex" { count(); comment(); } YY_BREAK case 55: YY_RULE_SETUP #line 192 "swf4compiler.flex" { count(); comment1(); } YY_BREAK case 56: YY_RULE_SETUP #line 193 "swf4compiler.flex" { count(); } YY_BREAK case 57: YY_RULE_SETUP #line 195 "swf4compiler.flex" { count(); return INC; } YY_BREAK case 58: YY_RULE_SETUP #line 196 "swf4compiler.flex" { count(); return DEC; } YY_BREAK case 59: YY_RULE_SETUP #line 197 "swf4compiler.flex" { count(); return '<'; } YY_BREAK case 60: YY_RULE_SETUP #line 198 "swf4compiler.flex" { count(); return '>'; } YY_BREAK case 61: YY_RULE_SETUP #line 199 "swf4compiler.flex" { count(); return LE; } YY_BREAK case 62: YY_RULE_SETUP #line 200 "swf4compiler.flex" { count(); return GE; } YY_BREAK case 63: YY_RULE_SETUP #line 201 "swf4compiler.flex" { count(); return EQ; } YY_BREAK case 64: YY_RULE_SETUP #line 202 "swf4compiler.flex" { count(); return NE; } YY_BREAK case 65: YY_RULE_SETUP #line 203 "swf4compiler.flex" { count(); return LAN; } YY_BREAK case 66: YY_RULE_SETUP #line 204 "swf4compiler.flex" { count(); return LOR; } YY_BREAK case 67: YY_RULE_SETUP #line 205 "swf4compiler.flex" { count(); return MEQ; } YY_BREAK case 68: YY_RULE_SETUP #line 206 "swf4compiler.flex" { count(); return DEQ; } YY_BREAK case 69: YY_RULE_SETUP #line 207 "swf4compiler.flex" { count(); return IEQ; } YY_BREAK case 70: YY_RULE_SETUP #line 208 "swf4compiler.flex" { count(); return SEQ; } YY_BREAK case 71: YY_RULE_SETUP #line 209 "swf4compiler.flex" { count(); return STREQ; } YY_BREAK case 72: YY_RULE_SETUP #line 210 "swf4compiler.flex" { count(); return STRNE; } YY_BREAK case 73: YY_RULE_SETUP #line 211 "swf4compiler.flex" { count(); return STRCMP; } YY_BREAK case 74: YY_RULE_SETUP #line 212 "swf4compiler.flex" { count(); return PARENT; } YY_BREAK case 75: YY_RULE_SETUP #line 214 "swf4compiler.flex" { count(); return ';'; } YY_BREAK case 76: YY_RULE_SETUP #line 215 "swf4compiler.flex" { count(); return '='; } YY_BREAK case 77: YY_RULE_SETUP #line 216 "swf4compiler.flex" { count(); return '+'; } YY_BREAK case 78: YY_RULE_SETUP #line 217 "swf4compiler.flex" { count(); return '-'; } YY_BREAK case 79: YY_RULE_SETUP #line 218 "swf4compiler.flex" { count(); return '&'; } YY_BREAK case 80: YY_RULE_SETUP #line 219 "swf4compiler.flex" { count(); return '*'; } YY_BREAK case 81: YY_RULE_SETUP #line 220 "swf4compiler.flex" { count(); return '/'; } YY_BREAK case 82: YY_RULE_SETUP #line 221 "swf4compiler.flex" { count(); return '!'; } YY_BREAK case 83: YY_RULE_SETUP #line 222 "swf4compiler.flex" { count(); return '('; } YY_BREAK case 84: YY_RULE_SETUP #line 223 "swf4compiler.flex" { count(); return ')'; } YY_BREAK case 85: YY_RULE_SETUP #line 224 "swf4compiler.flex" { count(); return '['; } YY_BREAK case 86: YY_RULE_SETUP #line 225 "swf4compiler.flex" { count(); return ']'; } YY_BREAK case 87: YY_RULE_SETUP #line 226 "swf4compiler.flex" { count(); return '{'; } YY_BREAK case 88: YY_RULE_SETUP #line 227 "swf4compiler.flex" { count(); return '}'; } YY_BREAK case 89: YY_RULE_SETUP #line 228 "swf4compiler.flex" { count(); return ','; } YY_BREAK case 90: YY_RULE_SETUP #line 229 "swf4compiler.flex" { count(); return '.'; } YY_BREAK case 91: YY_RULE_SETUP #line 230 "swf4compiler.flex" { count(); return '?'; } YY_BREAK case 92: YY_RULE_SETUP #line 231 "swf4compiler.flex" { count(); return ':'; } YY_BREAK case 93: /* rule 93 can match eol */ YY_RULE_SETUP #line 233 "swf4compiler.flex" { count(); column = 0; strcpy(szLine, swf4text + 1); ++sLineNumber; yyless(1); } YY_BREAK case 94: YY_RULE_SETUP #line 237 "swf4compiler.flex" printf( "Unrecognized character: %s\n", swf4text ); YY_BREAK case 95: YY_RULE_SETUP #line 239 "swf4compiler.flex" ECHO; YY_BREAK #line 1654 "lex.swf4.c" case YY_STATE_EOF(INITIAL): 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); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->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 swf4in at a new source and called * swf4lex(). 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_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = swf4in; YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( swf4wrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * swf4text, 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_LVALUE->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 swf4lex */ /* 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 (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->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 single character, 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_LVALUE->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_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* 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. */ swf4realloc((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_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; swf4restart(swf4in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) swf4realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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); 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); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 320 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } 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 ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 320 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 319); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up swf4text */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #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_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ swf4restart(swf4in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( swf4wrap( ) ) 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) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve swf4text */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void swf4restart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ swf4ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = swf4_create_buffer(swf4in,YY_BUF_SIZE ); } swf4_init_buffer(YY_CURRENT_BUFFER,input_file ); swf4_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void swf4_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * swf4pop_buffer_state(); * swf4push_buffer_state(new_buffer); */ swf4ensure_buffer_stack (); 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_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; swf4_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (swf4wrap()) processing, but the only time this flag * is looked at is after swf4wrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void swf4_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; swf4in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE swf4_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) swf4alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in swf4_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 *) swf4alloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in swf4_create_buffer()" ); b->yy_is_our_buffer = 1; swf4_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with swf4_create_buffer() * */ void swf4_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) swf4free((void *) b->yy_ch_buf ); swf4free((void *) b ); } #ifndef _UNISTD_H /* assume unistd.h has isatty() for us */ #ifdef __cplusplus extern "C" { #endif #ifdef __THROW /* this is a gnuism */ extern int isatty (int ) __THROW; #else extern int isatty (int ); #endif #ifdef __cplusplus } #endif #endif /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a swf4restart() or at EOF. */ static void swf4_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; swf4_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then swf4_init_buffer was _probably_ * called from swf4restart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void swf4_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; 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 ) swf4_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void swf4push_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; swf4ensure_buffer_stack(); /* This block is copied from swf4_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from swf4_switch_to_buffer. */ swf4_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void swf4pop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; swf4_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { swf4_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void swf4ensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)swf4alloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in swf4ensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)swf4realloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in swf4ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE swf4_scan_buffer (char * base, yy_size_t size ) { 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) swf4alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in swf4_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; swf4_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to swf4lex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * swf4_scan_bytes() instead. */ YY_BUFFER_STATE swf4_scan_string (yyconst char * yystr ) { return swf4_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to swf4lex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE swf4_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) swf4alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in swf4_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = swf4_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in swf4_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; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (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 swf4text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ swf4text[swf4leng] = (yy_hold_char); \ (yy_c_buf_p) = swf4text + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ swf4leng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int swf4get_lineno (void) { return swf4lineno; } /** Get the input stream. * */ FILE *swf4get_in (void) { return swf4in; } /** Get the output stream. * */ FILE *swf4get_out (void) { return swf4out; } /** Get the length of the current token. * */ int swf4get_leng (void) { return swf4leng; } /** Get the current token. * */ char *swf4get_text (void) { return swf4text; } /** Set the current line number. * @param line_number * */ void swf4set_lineno (int line_number ) { swf4lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see swf4_switch_to_buffer */ void swf4set_in (FILE * in_str ) { swf4in = in_str ; } void swf4set_out (FILE * out_str ) { swf4out = out_str ; } int swf4get_debug (void) { return swf4_flex_debug; } void swf4set_debug (int bdebug ) { swf4_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from swf4lex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT swf4in = stdin; swf4out = stdout; #else swf4in = (FILE *) 0; swf4out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * swf4lex_init() */ return 0; } /* swf4lex_destroy is for both reentrant and non-reentrant scanners. */ int swf4lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ swf4_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; swf4pop_buffer_state(); } /* Destroy the stack itself. */ swf4free((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * swf4lex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *swf4alloc (yy_size_t size ) { return (void *) malloc( size ); } void *swf4realloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void swf4free (void * ptr ) { free( (char *) ptr ); /* see swf4realloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 239 "swf4compiler.flex" static int getinput() { #ifdef __cplusplus return yyinput(); #else return input(); #endif } int swf4wrap() { return 1; } static void countline() { if(sLineNumber != 0) msgline[column] = 0; ++sLineNumber; column = 0; msgline = msgbufs[sLineNumber & 1]; } static int LineNumber(void) { return (sLineNumber + 1); } static int ColumnNumber(void) { return column; } static char *LineText(void) { msgline[column] = 0; return msgline; } static void comment(void) { // Handle block comments int c, c1; loop: // We have the start of a comment so look skip everything up to the // end of the comment character while ((c = getinput()) != '*' && c != EOF) { if(column < 1023) msgline[column] = c; ++column; // keep the line number in synch if (c == '\n') { // start the output (matches the algorithim in the lexx above) countline(); } if (swf4debug) putchar(c); } // is this the end of comment character if ((c1 = getinput()) != '/' && c != EOF) { // false start as this was no end of comment do_unput4(c1); goto loop; } // write out the start of the end of comment if (c != EOF) if (swf4debug) putchar(c); // write out the end of the end of comment if (c1 != EOF) if (swf4debug) putchar(c1); } static void comment1(void) { // Handle comment of type 1 (ie '//') int c; // this is a line comment while ((c = getinput()) != '\n' && c != EOF) { if (swf4debug) putchar(c); if(column < 1023) msgline[column] = c; ++column; }; // keep the line number in synch if (c == '\n') { if (swf4debug) putchar(c); countline(); } } static void count(void) { int n; // Count the characters to maintain the current column position if (swf4text[0] == '\n') { if (swf4debug) printf("\n"); } else { if (swf4debug) printf("%s", swf4text); for(n=0; n(y))?(x):(y)) #endif enum { PUSH_STRING = 0, PUSH_PROPERTY = 1, PUSH_NULL = 2, PUSH_UNDEF = 3, PUSH_REGISTER = 4, PUSH_BOOLEAN = 5, PUSH_DOUBLE = 6, PUSH_INT = 7, PUSH_CONSTANT = 8, PUSH_CONSTANT16 = 9 }; typedef enum { FUNCTION_RANDOM, FUNCTION_LENGTH, FUNCTION_TIME, FUNCTION_INT, FUNCTION_CONCAT, FUNCTION_DUPLICATECLIP } SWFActionFunction; typedef enum { GETURL_METHOD_NOSEND = 0, GETURL_METHOD_GET = 1, GETURL_METHOD_POST = 2 } SWFGetUrl2Method; #define GETURL_LOADMOVIE 0x40 #define GETURL_LOADVARIABLES 0x80 #define MAGIC_CONTINUE_NUMBER 0x7FFE #define MAGIC_BREAK_NUMBER 0x7FFF #define MAGIC_CONTINUE_NUMBER_LO 0xFE #define MAGIC_CONTINUE_NUMBER_HI 0x7F #define MAGIC_BREAK_NUMBER_LO 0xFF #define MAGIC_BREAK_NUMBER_HI 0x7F #define BUFFER_INCREMENT 128 struct _buffer { byte *buffer; byte *pos; int buffersize; int free; byte *pushloc; }; #define BUFFER_SIZE sizeof(struct _buffer) struct switchcase { Buffer cond, action; int condlen, actlen, isbreak; }; struct switchcases { struct switchcase *list; int count; }; enum ctx { CTX_FUNCTION = 1, CTX_LOOP, CTX_FOR_IN, CTX_SWITCH, CTX_BREAK, CTX_CONTINUE }; void addctx(enum ctx val); void delctx(enum ctx val); int chkctx(enum ctx val); void checkByteOrder(); /* create/destroy buffer object */ Buffer newBuffer(); void destroyBuffer(Buffer out); int bufferConcat(Buffer a, Buffer b); /* destroys b. */ int bufferWriteBuffer(Buffer a, Buffer b); /* doesn't. */ /* utilities for writing */ void bufferGrow(Buffer out); void bufferCheckSize(Buffer out, int bytes); int bufferLength(Buffer out); /* constant pool stuff */ int addConstant(const char *s); int bufferWriteConstants(Buffer out); #define MAXCONSTANTPOOLSIZE 65533 /* write data to buffer */ int bufferWriteOp(Buffer out, int data); int bufferWritePushOp(Buffer out); int bufferWriteU8(Buffer out, int data); int bufferWriteS16(Buffer out, int data); int bufferWriteData(Buffer out, const byte *buffer, int bytes); int bufferWriteHardString(Buffer out, byte *string, int length); int bufferWriteConstantString(Buffer out, byte *string, int length); int bufferWriteString(Buffer out, byte *string, int length); #ifdef __cplusplus /* helper function to avoid many casts */ inline int bufferWriteString(Buffer out, char *string, int length) { return bufferWriteString(out,(byte*) string, length); } #endif int bufferWriteInt(Buffer out, int i); int bufferWriteDouble(Buffer out, double d); int bufferWriteNull(Buffer out); int bufferWriteBoolean(Buffer out, int val); int bufferWriteRegister(Buffer out, int num); int bufferWriteSetRegister(Buffer out, int num); int bufferWriteGetProperty(Buffer out, char *string); int bufferWriteSetProperty(Buffer out, char *string); int bufferWriteWTHITProperty(Buffer out); /* concat b to a, destroy b */ char *stringConcat(char *a, char *b); /* resolve magic number standins to relative offsets */ void bufferResolveJumps(Buffer out); void bufferResolveSwitch(Buffer buffer, struct switchcases *slp); /* rather than setting globals... */ void swf4ParseInit(const char *string, int debug); void swf5ParseInit(const char *string, int debug); int swf4parse(void *b); int swf5parse(void *b); #endif /* SWF_COMPILE_H_INCLUDED */ swftools_0.9.2+git20130725.orig/lib/action/libming.c0000644000175000017500000000026012216332640021131 0ustar gawaingawain#include #include #include "libming.h" int SWF_versionNum = 7; void (*SWF_error)(const char *msg, ...) = 0; void (*SWF_warn)(const char *msg, ...) = 0; swftools_0.9.2+git20130725.orig/lib/action/swf4compiler.tab.c0000644000175000017500000035751112216332640022711 0ustar gawaingawain /* A Bison parser, made by GNU Bison 2.4. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse swf4parse #define yylex swf4lex #define yyerror swf4error #define yylval swf4lval #define yychar swf4char #define yydebug swf4debug #define yynerrs swf4nerrs /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ #line 5 "swf4compiler.y" #include #include #include #include "compile.h" #include "action.h" #define YYPARSE_PARAM buffer /* Line 189 of yacc.c */ #line 94 "swf4compiler.tab.c" /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { BREAK = 258, FOR = 259, CONTINUE = 260, IF = 261, ELSE = 262, DO = 263, WHILE = 264, THIS = 265, EVAL = 266, TIME = 267, RANDOM = 268, LENGTH = 269, INT = 270, CONCAT = 271, DUPLICATECLIP = 272, REMOVECLIP = 273, TRACE = 274, STARTDRAG = 275, STOPDRAG = 276, ORD = 277, CHR = 278, CALLFRAME = 279, GETURL = 280, GETURL1 = 281, LOADMOVIE = 282, LOADVARIABLES = 283, POSTURL = 284, SUBSTR = 285, GETPROPERTY = 286, NEXTFRAME = 287, PREVFRAME = 288, PLAY = 289, STOP = 290, TOGGLEQUALITY = 291, STOPSOUNDS = 292, GOTOFRAME = 293, GOTOANDPLAY = 294, FRAMELOADED = 295, SETTARGET = 296, TELLTARGET = 297, STRING = 298, NUMBER = 299, IDENTIFIER = 300, PATH = 301, GETURL_METHOD = 302, EQ = 303, LE = 304, GE = 305, NE = 306, LAN = 307, LOR = 308, INC = 309, DEC = 310, IEQ = 311, DEQ = 312, MEQ = 313, SEQ = 314, STREQ = 315, STRNE = 316, STRCMP = 317, PARENT = 318, END = 319, UMINUS = 320, POSTFIX = 321, NEGATE = 322 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 214 of yacc.c */ #line 17 "swf4compiler.y" Buffer action; char *str; SWFActionFunction function; SWFGetUrl2Method getURLMethod; /* Line 214 of yacc.c */ #line 206 "swf4compiler.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ #line 218 "swf4compiler.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 108 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 1341 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 86 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 22 /* YYNRULES -- Number of rules. */ #define YYNRULES 137 /* YYNRULES -- Number of states. */ #define YYNSTATES 369 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 322 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 76, 2, 2, 2, 2, 71, 2, 83, 84, 74, 72, 65, 73, 85, 75, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 68, 82, 69, 66, 70, 67, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 80, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 77, 78, 79 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 5, 7, 10, 12, 15, 19, 21, 24, 26, 28, 30, 32, 34, 38, 39, 41, 44, 55, 64, 74, 85, 94, 104, 112, 118, 119, 121, 131, 137, 144, 154, 155, 157, 160, 163, 167, 172, 177, 182, 187, 194, 203, 210, 217, 226, 233, 242, 249, 264, 273, 277, 281, 285, 289, 293, 297, 302, 307, 312, 317, 322, 327, 333, 339, 344, 348, 353, 358, 363, 368, 373, 380, 389, 396, 399, 402, 404, 408, 410, 413, 415, 417, 419, 423, 428, 431, 436, 439, 442, 445, 449, 453, 457, 461, 465, 469, 473, 477, 481, 485, 489, 493, 497, 501, 505, 509, 513, 519, 521, 525, 527, 529, 531, 533, 535, 537, 539, 541, 545, 547, 549, 552, 555, 560, 565, 569, 573, 577, 581, 585, 591, 597, 603, 609, 615 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 87, 0, -1, 88, -1, 89, -1, 88, 89, -1, 90, -1, 80, 81, -1, 80, 92, 81, -1, 82, -1, 106, 82, -1, 93, -1, 95, -1, 97, -1, 98, -1, 106, -1, 91, 65, 106, -1, -1, 90, -1, 92, 90, -1, 6, 83, 40, 83, 44, 84, 84, 90, 7, 90, -1, 6, 83, 40, 83, 44, 84, 84, 90, -1, 6, 83, 76, 40, 83, 44, 84, 84, 90, -1, 6, 83, 40, 83, 107, 84, 84, 90, 7, 90, -1, 6, 83, 40, 83, 107, 84, 84, 90, -1, 6, 83, 76, 40, 83, 107, 84, 84, 90, -1, 6, 83, 107, 84, 90, 7, 90, -1, 6, 83, 107, 84, 90, -1, -1, 107, -1, 9, 83, 76, 40, 83, 44, 84, 84, 90, -1, 9, 83, 107, 84, 90, -1, 8, 90, 9, 83, 107, 84, -1, 4, 83, 96, 82, 94, 82, 96, 84, 90, -1, -1, 91, -1, 5, 82, -1, 3, 82, -1, 21, 83, 84, -1, 24, 83, 103, 84, -1, 24, 83, 43, 84, -1, 18, 83, 107, 84, -1, 19, 83, 107, 84, -1, 25, 83, 107, 65, 107, 84, -1, 25, 83, 107, 65, 107, 65, 47, 84, -1, 26, 83, 43, 65, 43, 84, -1, 27, 83, 107, 65, 107, 84, -1, 27, 83, 107, 65, 107, 65, 47, 84, -1, 28, 83, 107, 65, 107, 84, -1, 28, 83, 107, 65, 107, 65, 47, 84, -1, 20, 83, 107, 65, 107, 84, -1, 20, 83, 107, 65, 107, 65, 107, 65, 107, 65, 107, 65, 107, 84, -1, 17, 83, 107, 65, 107, 65, 107, 84, -1, 32, 83, 84, -1, 33, 83, 84, -1, 34, 83, 84, -1, 35, 83, 84, -1, 36, 83, 84, -1, 37, 83, 84, -1, 38, 83, 44, 84, -1, 38, 83, 43, 84, -1, 38, 83, 107, 84, -1, 39, 83, 107, 84, -1, 41, 83, 43, 84, -1, 41, 83, 107, 84, -1, 42, 83, 43, 84, 90, -1, 42, 83, 107, 84, 90, -1, 11, 83, 107, 84, -1, 12, 83, 84, -1, 13, 83, 107, 84, -1, 14, 83, 107, 84, -1, 15, 83, 107, 84, -1, 22, 83, 107, 84, -1, 23, 83, 107, 84, -1, 16, 83, 107, 65, 107, 84, -1, 30, 83, 107, 65, 107, 65, 107, 84, -1, 31, 83, 107, 65, 43, 84, -1, 105, 54, -1, 105, 55, -1, 100, -1, 83, 102, 84, -1, 44, -1, 73, 44, -1, 43, -1, 103, -1, 104, -1, 104, 85, 45, -1, 54, 104, 85, 45, -1, 54, 105, -1, 55, 104, 85, 45, -1, 55, 105, -1, 73, 102, -1, 76, 102, -1, 105, 66, 102, -1, 102, 74, 102, -1, 102, 75, 102, -1, 102, 72, 102, -1, 102, 73, 102, -1, 102, 71, 102, -1, 102, 69, 102, -1, 102, 70, 102, -1, 102, 49, 102, -1, 102, 50, 102, -1, 102, 61, 102, -1, 102, 60, 102, -1, 102, 62, 102, -1, 102, 48, 102, -1, 102, 51, 102, -1, 102, 52, 102, -1, 102, 53, 102, -1, 102, 67, 102, 68, 102, -1, 45, -1, 104, 68, 45, -1, 10, -1, 85, -1, 75, -1, 63, -1, 45, -1, 46, -1, 103, -1, 43, -1, 83, 102, 84, -1, 101, -1, 99, -1, 54, 105, -1, 55, 105, -1, 54, 104, 85, 45, -1, 55, 104, 85, 45, -1, 105, 66, 102, -1, 105, 58, 102, -1, 105, 57, 102, -1, 105, 56, 102, -1, 105, 59, 102, -1, 104, 85, 45, 66, 102, -1, 104, 85, 45, 58, 102, -1, 104, 85, 45, 57, 102, -1, 104, 85, 45, 56, 102, -1, 104, 85, 45, 59, 102, -1, 102, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 144, 144, 150, 151, 156, 160, 161, 162, 163, 164, 165, 166, 167, 171, 172, 176, 177, 178, 185, 201, 217, 229, 243, 257, 267, 278, 288, 289, 313, 328, 340, 348, 370, 371, 375, 383, 391, 395, 402, 409, 413, 418, 425, 432, 441, 448, 455, 462, 470, 477, 489, 498, 502, 506, 510, 514, 518, 522, 529, 536, 542, 548, 555, 559, 573, 586, 590, 594, 598, 602, 606, 610, 614, 619, 625, 634, 645, 659, 661, 664, 669, 675, 680, 686, 691, 699, 714, 724, 739, 749, 754, 758, 764, 769, 774, 779, 784, 789, 794, 799, 805, 810, 815, 819, 823, 827, 832, 836, 840, 852, 854, 861, 864, 867, 870, 873, 876, 881, 886, 891, 895, 897, 899, 907, 915, 928, 941, 945, 952, 959, 966, 973, 982, 995, 1008, 1021, 1036 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "BREAK", "FOR", "CONTINUE", "IF", "ELSE", "DO", "WHILE", "THIS", "EVAL", "TIME", "RANDOM", "LENGTH", "INT", "CONCAT", "DUPLICATECLIP", "REMOVECLIP", "TRACE", "STARTDRAG", "STOPDRAG", "ORD", "CHR", "CALLFRAME", "GETURL", "GETURL1", "LOADMOVIE", "LOADVARIABLES", "POSTURL", "SUBSTR", "GETPROPERTY", "NEXTFRAME", "PREVFRAME", "PLAY", "STOP", "TOGGLEQUALITY", "STOPSOUNDS", "GOTOFRAME", "GOTOANDPLAY", "FRAMELOADED", "SETTARGET", "TELLTARGET", "STRING", "NUMBER", "IDENTIFIER", "PATH", "GETURL_METHOD", "\"==\"", "\"<=\"", "\">=\"", "\"!=\"", "\"&&\"", "\"||\"", "\"++\"", "\"--\"", "\"+=\"", "\"/=\"", "\"*=\"", "\"-=\"", "\"===\"", "\"!==\"", "\"<=>\"", "\"..\"", "\"end\"", "','", "'='", "'?'", "':'", "'<'", "'>'", "'&'", "'+'", "'-'", "'*'", "'/'", "'!'", "UMINUS", "POSTFIX", "NEGATE", "'{'", "'}'", "';'", "'('", "')'", "'.'", "$accept", "program", "elems", "elem", "stmt", "assign_stmts", "statements", "if_stmt", "expr_opt", "iter_stmt", "assign_stmts_opt", "cont_stmt", "break_stmt", "void_function_call", "function_call", "pf_expr", "rhs_expr", "variable", "sprite", "lhs_expr", "assign_stmt", "expr", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 44, 61, 63, 58, 60, 62, 38, 43, 45, 42, 47, 33, 320, 321, 322, 123, 125, 59, 40, 41, 46 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 86, 87, 88, 88, 89, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 95, 95, 95, 95, 96, 96, 97, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 1, 1, 3, 0, 1, 2, 10, 8, 9, 10, 8, 9, 7, 5, 0, 1, 9, 5, 6, 9, 0, 1, 2, 2, 3, 4, 4, 4, 4, 6, 8, 6, 6, 8, 6, 8, 6, 14, 8, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 6, 8, 6, 2, 2, 1, 3, 1, 2, 1, 1, 1, 3, 4, 2, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 2, 2, 4, 4, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 110, 117, 0, 0, 115, 114, 0, 8, 0, 113, 0, 2, 3, 5, 10, 11, 12, 13, 122, 121, 118, 0, 0, 0, 36, 33, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 124, 6, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 80, 0, 0, 0, 0, 0, 78, 0, 83, 84, 0, 1, 4, 0, 0, 76, 77, 0, 0, 0, 0, 0, 9, 34, 0, 14, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 55, 56, 57, 82, 80, 0, 0, 82, 0, 82, 0, 0, 0, 7, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 89, 80, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 111, 0, 130, 129, 128, 131, 127, 0, 27, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 39, 38, 0, 0, 0, 0, 59, 58, 60, 61, 62, 63, 0, 0, 125, 126, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 105, 100, 101, 106, 107, 108, 103, 102, 104, 0, 98, 99, 97, 95, 96, 93, 94, 85, 92, 0, 0, 0, 0, 0, 15, 0, 28, 80, 0, 0, 26, 0, 0, 30, 0, 0, 0, 0, 0, 0, 64, 65, 66, 68, 69, 70, 0, 71, 72, 0, 0, 86, 88, 0, 135, 134, 133, 136, 132, 33, 0, 0, 80, 0, 0, 31, 0, 0, 0, 49, 0, 42, 44, 0, 45, 0, 47, 0, 0, 0, 109, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 73, 0, 75, 0, 20, 23, 0, 0, 0, 51, 0, 43, 46, 48, 0, 32, 0, 0, 21, 24, 29, 0, 74, 19, 22, 0, 0, 0, 0, 50 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 39, 40, 41, 42, 120, 85, 43, 271, 44, 121, 45, 46, 47, 103, 48, 125, 105, 106, 107, 52, 126 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -70 static const yytype_int16 yypact[] = { 780, -69, -64, -60, -49, 780, -28, -70, -22, -14, -2, 3, 4, 11, 13, 17, 19, 20, 23, 25, 26, 29, 30, 31, 33, 47, 54, 56, -70, 16, -70, 32, 32, -70, -70, 614, -70, 422, -70, 72, 780, -70, -70, -70, -70, -70, -70, -70, -70, -70, -12, 65, 1, -70, 108, -70, 826, 80, 994, 422, 422, 422, 422, 64, 5, 422, 118, 422, 422, 81, 82, 86, 88, 89, 104, 1020, 422, 1076, 1102, -11, -70, -9, -70, -70, -70, 697, 106, 109, 117, 119, 120, 121, 123, 125, 127, 130, 98, -70, 32, 32, 1158, 422, 422, -70, 516, 135, -6, 141, -70, -70, 145, 169, -70, -70, 422, 422, 422, 422, 422, -70, 151, 137, -70, 139, 882, 613, 136, 140, 938, 142, 160, 143, 144, 166, -70, 148, 149, 170, 172, 174, 175, 178, -70, -70, -70, -70, -70, -70, -48, 150, 161, 162, -21, 163, -13, 164, 199, 204, -70, -70, 422, 167, 422, 422, 422, 422, 422, 422, 422, 422, -3, -70, -1, -70, -70, -70, -70, 1257, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, -70, 205, 422, -70, 128, 613, 613, 613, 613, 613, 108, 422, 1184, 171, 780, 422, 173, 780, 422, -70, -70, 422, -70, -70, 422, 210, 422, 422, -70, -70, -70, -70, -70, -70, 780, 780, -70, -70, 176, -70, 177, 179, 180, 190, 182, 188, 192, 193, 214, 228, 212, -46, 124, 124, -46, 696, 696, -46, -46, 124, 107, 124, 124, -65, 18, 18, -70, -70, -70, 613, 422, 422, 422, 422, 422, -70, 197, -70, 191, 196, 1240, 274, 206, 244, -70, 224, -63, -51, 207, -45, -35, -70, -70, -70, -70, -70, -70, 422, -70, -70, 422, 249, -70, -70, 422, 613, 613, 613, 613, 613, 108, 211, 213, 215, 216, 780, -70, 217, 422, 422, -70, 246, -70, -70, 247, -70, 251, -70, 218, 231, 219, 613, 220, 780, 780, 222, 223, -70, 225, 229, 243, 230, 234, 235, -70, 422, -70, 780, 305, 308, 780, 780, 780, -70, 422, -70, -70, -70, 236, -70, 780, 780, -70, -70, -70, 256, -70, -70, -70, 422, 258, 422, 240, -70 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -70, -70, -70, 285, 53, -70, -70, -70, -70, -70, 21, -70, -70, -70, -70, -70, 346, 0, 6, 12, -53, 209 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -121 static const yytype_int16 yytable[] = { 49, 122, 314, 179, 180, 49, 50, 191, 192, 193, 194, 50, 51, 53, 316, 7, 186, 51, -119, 54, 319, 315, 55, 188, 189, 190, 191, 192, 193, 194, 321, 49, 49, 317, 56, 49, 223, 79, 81, 320, 49, 50, 7, 80, 82, -119, 50, 51, 135, 322, 29, 30, 51, -119, 49, 58, 110, 110, 57, 110, 50, 59, 110, 227, 136, 110, 51, 110, 33, 60, 137, 229, 108, 111, 156, 28, 157, 29, 30, 196, 34, 61, 243, 119, 244, 49, 62, 63, 84, 127, 38, 50, 193, 194, 64, 33, 65, 51, 49, 49, 66, -116, 67, 68, 170, 172, 69, 34, 70, 71, 171, 173, 72, 73, 74, 37, 75, 38, 7, 112, 113, 114, 115, 116, 117, 8, 9, 10, 11, 12, 76, 118, 13, 14, 15, 16, 17, 77, 159, 78, 18, 19, 20, 21, 22, 23, 24, 25, 134, 26, 27, 28, 270, 29, 30, 178, 179, 180, 181, 182, 183, 139, 31, 32, -119, 142, 143, 184, 185, 186, 144, 33, 145, 146, 187, 299, 188, 189, 190, 191, 192, 193, 194, 34, 265, 266, 267, 268, 147, 160, 198, 37, 161, 38, 269, 190, 191, 192, 193, 194, 162, -118, 163, 164, 165, 49, 166, 197, 167, 49, 168, 50, 49, 169, 199, 50, 205, 51, 50, 206, 209, 51, 207, 210, 51, 213, 212, 214, 215, 49, 49, 216, 217, 218, 224, 50, 50, 219, 110, 220, 221, 51, 51, 222, 231, 225, 226, 228, 230, 232, 263, 234, 122, 283, 275, 292, 278, 295, 296, 297, 288, 289, 276, 290, 291, 279, 293, 129, 130, 131, 132, 133, 294, 298, 138, 306, 140, 141, -120, 305, 307, 310, 286, 287, 150, 151, 153, 155, 312, 313, 311, 318, 325, 336, 337, 328, 340, 329, 338, 330, 331, 333, 339, 341, 342, 49, 345, 346, 349, 347, 49, 50, 355, 348, 350, 356, 50, 51, 351, 352, 361, 364, 51, 366, 368, 109, 327, 0, 49, 49, 0, 0, 0, 0, 50, 50, 0, 0, 0, 0, 51, 51, 49, 0, 0, 49, 49, 49, 50, 0, 0, 50, 50, 50, 51, 49, 49, 51, 51, 51, 0, 50, 50, 332, 0, 0, 0, 51, 51, 233, 0, 235, 236, 237, 238, 239, 240, 241, 242, 0, 0, 343, 344, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, 0, 357, 358, 359, 0, 0, 0, 0, 0, 0, 0, 362, 363, 0, 0, 0, 0, 0, 272, 274, 0, 0, 277, 0, 0, 280, 0, 0, 281, 0, 0, 282, 0, 284, 285, 7, 86, 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, 92, 93, 175, 176, 177, 0, 0, 0, 94, 95, 0, 0, 0, 0, 0, 0, 200, 201, 202, 203, 204, 96, 97, 29, 30, 0, 176, 0, 0, 0, 176, 0, 98, 99, 0, 0, 0, 0, 0, 0, 309, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 34, 101, 0, 0, 323, 0, 0, 324, 102, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 335, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 0, 0, 264, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 178, 179, 180, 181, 182, 183, 0, 0, 0, 365, 0, 367, 184, 185, 186, 0, 0, 0, 0, 187, 0, 188, 189, 190, 191, 192, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, 304, 0, 1, 2, 3, 4, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 326, 18, 19, 20, 21, 22, 23, 24, 25, 0, 26, 27, 28, 0, 29, 30, 178, 179, 180, 181, 182, 183, 0, 31, 32, 0, 0, 0, 184, 185, 186, 0, 33, 0, 0, 187, 0, 188, 189, 190, 191, 192, 193, 194, 34, 0, 0, 0, 0, 35, 83, 36, 37, 0, 38, 1, 2, 3, 4, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 26, 27, 28, 0, 29, 30, 178, 179, 180, 181, 0, 0, 0, 31, 32, 0, 0, 0, 184, 185, 186, 0, 33, 0, 0, 0, 0, 188, 189, 190, 191, 192, 193, 194, 34, 0, 0, 0, 0, 35, 158, 36, 37, 0, 38, 1, 2, 3, 4, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 0, 0, 0, 18, 19, 20, 21, 22, 23, 24, 25, 0, 26, 27, 28, 0, 29, 30, 0, 0, 0, 0, 0, 0, 0, 31, 32, 7, 86, 87, 88, 89, 90, 91, 33, 0, 0, 0, 0, 92, 93, 0, 0, 0, 0, 0, 34, 94, 95, 0, 0, 35, 0, 36, 37, 0, 38, 123, 0, 0, 96, 97, 29, 30, 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 124, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 208, 0, 0, 96, 97, 29, 30, 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 101, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 96, 97, 29, 30, 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 101, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 7, 86, 87, 88, 89, 90, 91, 96, 97, 29, 30, 0, 92, 93, 0, 0, 0, 0, 98, 99, 94, 95, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 148, 149, 29, 30, 100, 0, 34, 128, 0, 0, 0, 98, 99, 0, 102, 0, 38, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 101, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 7, 86, 87, 88, 89, 90, 91, 152, 97, 29, 30, 0, 92, 93, 0, 0, 0, 0, 98, 99, 94, 95, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 154, 97, 29, 30, 100, 0, 34, 101, 0, 0, 0, 98, 99, 0, 102, 0, 38, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 101, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 7, 86, 87, 88, 89, 90, 91, 96, 174, 29, 30, 0, 92, 93, 0, 0, 0, 0, 98, 99, 94, 95, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 96, 273, 29, 30, 100, 0, 34, 101, 0, 0, 0, 98, 99, 0, 102, 0, 38, 0, 0, 0, 33, 0, 0, 7, 86, 87, 88, 89, 90, 91, 100, 0, 34, 101, 0, 92, 93, 0, 0, 0, 102, 0, 38, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 308, 29, 30, 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0, 0, 33, 0, 178, 179, 180, 181, 182, 183, 0, 0, 100, 0, 34, 101, 184, 185, 186, 0, 0, 0, 102, 187, 38, 188, 189, 190, 191, 192, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 245 }; static const yytype_int16 yycheck[] = { 0, 54, 65, 49, 50, 5, 0, 72, 73, 74, 75, 5, 0, 82, 65, 10, 62, 5, 66, 83, 65, 84, 82, 69, 70, 71, 72, 73, 74, 75, 65, 31, 32, 84, 83, 35, 84, 31, 32, 84, 40, 35, 10, 31, 32, 66, 40, 35, 43, 84, 45, 46, 40, 66, 54, 83, 68, 68, 5, 68, 54, 83, 68, 84, 64, 68, 54, 68, 63, 83, 64, 84, 0, 85, 85, 43, 85, 45, 46, 85, 75, 83, 85, 82, 85, 85, 83, 83, 35, 9, 85, 85, 74, 75, 83, 63, 83, 85, 98, 99, 83, 85, 83, 83, 98, 99, 83, 75, 83, 83, 98, 99, 83, 83, 83, 83, 83, 85, 10, 54, 55, 56, 57, 58, 59, 17, 18, 19, 20, 21, 83, 66, 24, 25, 26, 27, 28, 83, 85, 83, 32, 33, 34, 35, 36, 37, 38, 39, 84, 41, 42, 43, 205, 45, 46, 48, 49, 50, 51, 52, 53, 43, 54, 55, 66, 84, 84, 60, 61, 62, 84, 63, 84, 84, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 56, 57, 58, 59, 84, 83, 45, 83, 83, 85, 66, 71, 72, 73, 74, 75, 83, 66, 83, 83, 83, 205, 83, 66, 83, 209, 83, 205, 212, 83, 45, 209, 65, 205, 212, 82, 84, 209, 83, 83, 212, 65, 84, 84, 84, 229, 230, 65, 84, 84, 84, 229, 230, 65, 68, 65, 65, 229, 230, 65, 45, 84, 84, 84, 84, 45, 45, 84, 305, 43, 83, 65, 83, 65, 65, 45, 84, 84, 209, 84, 84, 212, 84, 58, 59, 60, 61, 62, 84, 45, 65, 84, 67, 68, 66, 82, 84, 7, 229, 230, 75, 76, 77, 78, 44, 65, 84, 84, 43, 47, 47, 84, 65, 84, 47, 84, 84, 84, 84, 84, 84, 305, 84, 84, 65, 84, 310, 305, 7, 84, 84, 7, 310, 305, 84, 84, 84, 65, 310, 65, 84, 40, 305, -1, 328, 329, -1, -1, -1, -1, 328, 329, -1, -1, -1, -1, 328, 329, 342, -1, -1, 345, 346, 347, 342, -1, -1, 345, 346, 347, 342, 355, 356, 345, 346, 347, -1, 355, 356, 310, -1, -1, -1, 355, 356, 160, -1, 162, 163, 164, 165, 166, 167, 168, 169, -1, -1, 328, 329, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 342, -1, -1, 345, 346, 347, -1, -1, -1, -1, -1, -1, -1, 355, 356, -1, -1, -1, -1, -1, 206, 207, -1, -1, 210, -1, -1, 213, -1, -1, 216, -1, -1, 219, -1, 221, 222, 10, 11, 12, 13, 14, 15, 16, -1, -1, -1, -1, -1, 22, 23, 100, 101, 102, -1, -1, -1, 30, 31, -1, -1, -1, -1, -1, -1, 114, 115, 116, 117, 118, 43, 44, 45, 46, -1, 124, -1, -1, -1, 128, -1, 54, 55, -1, -1, -1, -1, -1, -1, 275, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, 73, -1, 75, 76, -1, -1, 292, -1, -1, 295, 83, -1, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, 314, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, -1, -1, 197, -1, -1, -1, -1, -1, 340, -1, -1, -1, -1, -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, -1, -1, -1, 364, -1, 366, 60, 61, 62, -1, -1, -1, -1, 67, -1, 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 265, 266, 267, 268, 269, -1, 3, 4, 5, 6, -1, 8, 9, 10, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, -1, -1, 299, 32, 33, 34, 35, 36, 37, 38, 39, -1, 41, 42, 43, -1, 45, 46, 48, 49, 50, 51, 52, 53, -1, 54, 55, -1, -1, -1, 60, 61, 62, -1, 63, -1, -1, 67, -1, 69, 70, 71, 72, 73, 74, 75, 75, -1, -1, -1, -1, 80, 81, 82, 83, -1, 85, 3, 4, 5, 6, -1, 8, 9, 10, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, -1, 41, 42, 43, -1, 45, 46, 48, 49, 50, 51, -1, -1, -1, 54, 55, -1, -1, -1, 60, 61, 62, -1, 63, -1, -1, -1, -1, 69, 70, 71, 72, 73, 74, 75, 75, -1, -1, -1, -1, 80, 81, 82, 83, -1, 85, 3, 4, 5, 6, -1, 8, 9, 10, -1, -1, -1, -1, -1, -1, 17, 18, 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, -1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, -1, 41, 42, 43, -1, 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, 55, 10, 11, 12, 13, 14, 15, 16, 63, -1, -1, -1, -1, 22, 23, -1, -1, -1, -1, -1, 75, 30, 31, -1, -1, 80, -1, 82, 83, -1, 85, 40, -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 43, 44, 45, 46, -1, 22, 23, -1, -1, -1, -1, 54, 55, 30, 31, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 43, 44, 45, 46, 73, -1, 75, 76, -1, -1, -1, 54, 55, -1, 83, -1, 85, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 43, 44, 45, 46, -1, 22, 23, -1, -1, -1, -1, 54, 55, 30, 31, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 43, 44, 45, 46, 73, -1, 75, 76, -1, -1, -1, 54, 55, -1, 83, -1, 85, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 43, 44, 45, 46, -1, 22, 23, -1, -1, -1, -1, 54, 55, 30, 31, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 43, 44, 45, 46, 73, -1, 75, 76, -1, -1, -1, 54, 55, -1, 83, -1, 85, -1, -1, -1, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 73, -1, 75, 76, -1, 22, 23, -1, -1, -1, 83, -1, 85, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, 46, -1, -1, -1, -1, -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, 63, -1, 48, 49, 50, 51, 52, 53, -1, -1, 73, -1, 75, 76, 60, 61, 62, -1, -1, -1, 83, 67, 85, 69, 70, 71, 72, 73, 74, 75, -1, -1, -1, -1, -1, -1, -1, -1, 84 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 8, 9, 10, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 54, 55, 63, 75, 80, 82, 83, 85, 87, 88, 89, 90, 93, 95, 97, 98, 99, 101, 103, 104, 105, 106, 82, 83, 82, 83, 90, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 104, 105, 104, 105, 81, 90, 92, 11, 12, 13, 14, 15, 16, 22, 23, 30, 31, 43, 44, 54, 55, 73, 76, 83, 100, 102, 103, 104, 105, 0, 89, 68, 85, 54, 55, 56, 57, 58, 59, 66, 82, 91, 96, 106, 40, 76, 102, 107, 9, 76, 107, 107, 107, 107, 107, 84, 43, 103, 104, 107, 43, 107, 107, 84, 84, 84, 84, 84, 84, 43, 44, 107, 107, 43, 107, 43, 107, 85, 85, 81, 90, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 104, 105, 104, 105, 44, 102, 102, 102, 48, 49, 50, 51, 52, 53, 60, 61, 62, 67, 69, 70, 71, 72, 73, 74, 75, 84, 85, 66, 45, 45, 102, 102, 102, 102, 102, 65, 82, 83, 40, 84, 83, 40, 84, 65, 84, 84, 65, 84, 84, 65, 65, 65, 65, 84, 84, 84, 84, 84, 84, 84, 84, 45, 45, 107, 84, 107, 107, 107, 107, 107, 107, 107, 107, 85, 85, 84, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 45, 102, 56, 57, 58, 59, 66, 106, 94, 107, 44, 107, 83, 90, 107, 83, 90, 107, 107, 107, 43, 107, 107, 90, 90, 84, 84, 84, 84, 65, 84, 84, 65, 65, 45, 45, 68, 102, 102, 102, 102, 102, 82, 84, 84, 44, 107, 7, 84, 44, 65, 65, 84, 65, 84, 84, 65, 84, 65, 84, 107, 107, 43, 102, 96, 84, 84, 84, 84, 90, 84, 107, 107, 47, 47, 47, 84, 65, 84, 84, 90, 90, 84, 84, 84, 84, 65, 84, 84, 84, 107, 90, 7, 7, 90, 90, 90, 107, 84, 90, 90, 65, 107, 65, 107, 84 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*-------------------------. | yyparse or yypush_parse. | `-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yytoken = 0; yyss = yyssa; yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1455 of yacc.c */ #line 145 "swf4compiler.y" { *((Buffer *)buffer) = (yyvsp[(1) - (1)].action); ;} break; case 4: /* Line 1455 of yacc.c */ #line 152 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (2)].action), (yyvsp[(2) - (2)].action)); ;} break; case 6: /* Line 1455 of yacc.c */ #line 160 "swf4compiler.y" { (yyval.action) = NULL; ;} break; case 7: /* Line 1455 of yacc.c */ #line 161 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].action); ;} break; case 8: /* Line 1455 of yacc.c */ #line 162 "swf4compiler.y" { (yyval.action) = NULL; ;} break; case 15: /* Line 1455 of yacc.c */ #line 172 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); ;} break; case 16: /* Line 1455 of yacc.c */ #line 176 "swf4compiler.y" { (yyval.action) = NULL; ;} break; case 18: /* Line 1455 of yacc.c */ #line 179 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (2)].action), (yyvsp[(2) - (2)].action)); ;} break; case 19: /* Line 1455 of yacc.c */ #line 186 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAME); bufferWriteS16((yyval.action), 3); bufferWriteS16((yyval.action), atoi((yyvsp[(5) - (10)].str))); free((yyvsp[(5) - (10)].str)); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(10) - (10)].action))+5); bufferConcat((yyval.action), (yyvsp[(10) - (10)].action)); /* ..here */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(8) - (10)].action))); bufferConcat((yyval.action), (yyvsp[(8) - (10)].action)); ;} break; case 20: /* Line 1455 of yacc.c */ #line 202 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAME); bufferWriteS16((yyval.action), 3); bufferWriteS16((yyval.action), atoi((yyvsp[(5) - (8)].str))); free((yyvsp[(5) - (8)].str)); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), 5); bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); /* ..here */ bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(8) - (8)].action))); /* ..and then out */ bufferConcat((yyval.action), (yyvsp[(8) - (8)].action)); ;} break; case 21: /* Line 1455 of yacc.c */ #line 218 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAME); bufferWriteS16((yyval.action), 3); bufferWriteS16((yyval.action), atoi((yyvsp[(6) - (9)].str))); free((yyvsp[(6) - (9)].str)); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(9) - (9)].action))); bufferConcat((yyval.action), (yyvsp[(9) - (9)].action)); ;} break; case 22: /* Line 1455 of yacc.c */ #line 230 "swf4compiler.y" { (yyval.action) = (yyvsp[(5) - (10)].action); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(10) - (10)].action))+5); bufferConcat((yyval.action), (yyvsp[(10) - (10)].action)); /* ..here */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(8) - (10)].action))); bufferConcat((yyval.action), (yyvsp[(8) - (10)].action)); ;} break; case 23: /* Line 1455 of yacc.c */ #line 244 "swf4compiler.y" { (yyval.action) = (yyvsp[(5) - (8)].action); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), 5); bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); /* ..here */ bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(8) - (8)].action))); /* ..and then out */ bufferConcat((yyval.action), (yyvsp[(8) - (8)].action)); ;} break; case 24: /* Line 1455 of yacc.c */ #line 258 "swf4compiler.y" { (yyval.action) = (yyvsp[(6) - (9)].action); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAMEEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(9) - (9)].action))); bufferConcat((yyval.action), (yyvsp[(9) - (9)].action)); ;} break; case 25: /* Line 1455 of yacc.c */ #line 268 "swf4compiler.y" { bufferWriteU8((yyvsp[(3) - (7)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(3) - (7)].action), 2); bufferWriteS16((yyvsp[(3) - (7)].action), bufferLength((yyvsp[(7) - (7)].action))+5); bufferConcat((yyvsp[(3) - (7)].action), (yyvsp[(7) - (7)].action)); bufferWriteU8((yyvsp[(3) - (7)].action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyvsp[(3) - (7)].action), 2); bufferWriteS16((yyvsp[(3) - (7)].action), bufferLength((yyvsp[(5) - (7)].action))); bufferConcat((yyvsp[(3) - (7)].action), (yyvsp[(5) - (7)].action)); (yyval.action) = (yyvsp[(3) - (7)].action); ;} break; case 26: /* Line 1455 of yacc.c */ #line 279 "swf4compiler.y" { bufferWriteU8((yyvsp[(3) - (5)].action), SWFACTION_LOGICALNOT); bufferWriteU8((yyvsp[(3) - (5)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(3) - (5)].action), 2); bufferWriteS16((yyvsp[(3) - (5)].action), bufferLength((yyvsp[(5) - (5)].action))); bufferConcat((yyvsp[(3) - (5)].action), (yyvsp[(5) - (5)].action)); (yyval.action) = (yyvsp[(3) - (5)].action); ;} break; case 27: /* Line 1455 of yacc.c */ #line 288 "swf4compiler.y" { (yyval.action) = NULL; ;} break; case 28: /* Line 1455 of yacc.c */ #line 289 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (1)].action); ;} break; case 29: /* Line 1455 of yacc.c */ #line 314 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_WAITFORFRAME); bufferWriteS16((yyval.action), 3); bufferWriteS16((yyval.action), atoi((yyvsp[(6) - (9)].str))); free((yyvsp[(6) - (9)].str)); bufferWriteU8((yyval.action), 1); /* if not loaded, jump to.. */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(9) - (9)].action))+5); bufferConcat((yyval.action), (yyvsp[(9) - (9)].action)); /* ..here */ bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), -(bufferLength((yyval.action))+2)); ;} break; case 30: /* Line 1455 of yacc.c */ #line 329 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (5)].action); bufferWriteU8((yyval.action), SWFACTION_LOGICALNOT); bufferWriteU8((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(5) - (5)].action))+5); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), -(bufferLength((yyval.action))+2)); bufferResolveJumps((yyval.action)); ;} break; case 31: /* Line 1455 of yacc.c */ #line 341 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), -(bufferLength((yyval.action))+2)); bufferResolveJumps((yyval.action)); ;} break; case 32: /* Line 1455 of yacc.c */ #line 349 "swf4compiler.y" { if (!(yyvsp[(5) - (9)].action)) (yyvsp[(5) - (9)].action) = newBuffer(); else { bufferWriteU8((yyvsp[(5) - (9)].action), SWFACTION_LOGICALNOT); bufferWriteU8((yyvsp[(5) - (9)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(5) - (9)].action), 2); bufferWriteS16((yyvsp[(5) - (9)].action), bufferLength((yyvsp[(9) - (9)].action))+bufferLength((yyvsp[(7) - (9)].action))+5); } bufferConcat((yyvsp[(5) - (9)].action), (yyvsp[(9) - (9)].action)); bufferConcat((yyvsp[(5) - (9)].action), (yyvsp[(7) - (9)].action)); bufferWriteU8((yyvsp[(5) - (9)].action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyvsp[(5) - (9)].action), 2); bufferWriteS16((yyvsp[(5) - (9)].action), -(bufferLength((yyvsp[(5) - (9)].action))+2)); bufferResolveJumps((yyvsp[(5) - (9)].action)); (yyval.action) = (yyvsp[(3) - (9)].action); if(!(yyval.action)) (yyval.action) = newBuffer(); bufferConcat((yyval.action), (yyvsp[(5) - (9)].action)); ;} break; case 33: /* Line 1455 of yacc.c */ #line 370 "swf4compiler.y" { (yyval.action) = NULL; ;} break; case 35: /* Line 1455 of yacc.c */ #line 376 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), MAGIC_CONTINUE_NUMBER); ;} break; case 36: /* Line 1455 of yacc.c */ #line 384 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), MAGIC_BREAK_NUMBER); ;} break; case 37: /* Line 1455 of yacc.c */ #line 392 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_STOPDRAGMOVIE); ;} break; case 38: /* Line 1455 of yacc.c */ #line 396 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteU8((yyval.action), SWFACTION_CALLFRAME); bufferWriteS16((yyval.action), 0); free((yyvsp[(3) - (4)].str)); ;} break; case 39: /* Line 1455 of yacc.c */ #line 403 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteU8((yyval.action), SWFACTION_CALLFRAME); bufferWriteS16((yyval.action), 0); free((yyvsp[(3) - (4)].str)); ;} break; case 40: /* Line 1455 of yacc.c */ #line 410 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_REMOVECLIP); ;} break; case 41: /* Line 1455 of yacc.c */ #line 414 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_TRACE); ;} break; case 42: /* Line 1455 of yacc.c */ #line 419 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), GETURL_METHOD_NOSEND); ;} break; case 43: /* Line 1455 of yacc.c */ #line 426 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), (yyvsp[(7) - (8)].getURLMethod)); ;} break; case 44: /* Line 1455 of yacc.c */ #line 433 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_GETURL); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (6)].str)) + strlen((yyvsp[(5) - (6)].str)) + 2); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (6)].str), strlen((yyvsp[(3) - (6)].str))); bufferWriteU8((yyval.action), 0); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(5) - (6)].str), strlen((yyvsp[(5) - (6)].str))); bufferWriteU8((yyval.action), 0); ;} break; case 45: /* Line 1455 of yacc.c */ #line 442 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), GETURL_METHOD_NOSEND | GETURL_LOADMOVIE); ;} break; case 46: /* Line 1455 of yacc.c */ #line 449 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), (yyvsp[(7) - (8)].getURLMethod) | GETURL_LOADMOVIE); ;} break; case 47: /* Line 1455 of yacc.c */ #line 456 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), GETURL_METHOD_NOSEND | GETURL_LOADVARIABLES); ;} break; case 48: /* Line 1455 of yacc.c */ #line 463 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferWriteU8((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), (yyvsp[(7) - (8)].getURLMethod) | GETURL_LOADVARIABLES); ;} break; case 49: /* Line 1455 of yacc.c */ #line 471 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), "0", 2); /* no constraint */ bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferConcat((yyval.action), (yyvsp[(3) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_STARTDRAGMOVIE); ;} break; case 50: /* Line 1455 of yacc.c */ #line 478 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferConcat((yyval.action), (yyvsp[(7) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(11) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(9) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(13) - (14)].action)); bufferWriteString((yyval.action), "1", 2); /* has constraint */ bufferConcat((yyval.action), (yyvsp[(5) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(3) - (14)].action)); bufferWriteU8((yyval.action), SWFACTION_STARTDRAGMOVIE); ;} break; case 51: /* Line 1455 of yacc.c */ #line 490 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferConcat((yyval.action), (yyvsp[(7) - (8)].action)); bufferWriteWTHITProperty((yyval.action)); bufferWriteU8((yyval.action), SWFACTION_ADD); /* see docs for explanation */ bufferWriteU8((yyval.action), SWFACTION_DUPLICATECLIP); ;} break; case 52: /* Line 1455 of yacc.c */ #line 499 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_NEXTFRAME); ;} break; case 53: /* Line 1455 of yacc.c */ #line 503 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_PREVFRAME); ;} break; case 54: /* Line 1455 of yacc.c */ #line 507 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_PLAY); ;} break; case 55: /* Line 1455 of yacc.c */ #line 511 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_STOP); ;} break; case 56: /* Line 1455 of yacc.c */ #line 515 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_TOGGLEQUALITY); ;} break; case 57: /* Line 1455 of yacc.c */ #line 519 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_STOPSOUNDS); ;} break; case 58: /* Line 1455 of yacc.c */ #line 523 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_GOTOFRAME); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), atoi((yyvsp[(3) - (4)].str))); free((yyvsp[(3) - (4)].str)); ;} break; case 59: /* Line 1455 of yacc.c */ #line 530 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_GOTOLABEL); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); free((yyvsp[(3) - (4)].str)); ;} break; case 60: /* Line 1455 of yacc.c */ #line 537 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_GOTOEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0); ;} break; case 61: /* Line 1455 of yacc.c */ #line 543 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_GOTOEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 1); ;} break; case 62: /* Line 1455 of yacc.c */ #line 549 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_SETTARGET); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); free((yyvsp[(3) - (4)].str)); ;} break; case 63: /* Line 1455 of yacc.c */ #line 556 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_SETTARGETEXPRESSION); ;} break; case 64: /* Line 1455 of yacc.c */ #line 560 "swf4compiler.y" { (yyval.action) = newBuffer(); /* SetTarget(STRING) */ bufferWriteU8((yyval.action), SWFACTION_SETTARGET); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (5)].str))+1); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (5)].str), strlen((yyvsp[(3) - (5)].str))+1); /* stmt */ bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); /* SetTarget('') */ bufferWriteU8((yyval.action), SWFACTION_SETTARGET); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0); free((yyvsp[(3) - (5)].str)); ;} break; case 65: /* Line 1455 of yacc.c */ #line 574 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (5)].action); /* SetTarget(expr) */ bufferWriteU8((yyval.action), SWFACTION_SETTARGETEXPRESSION); /* stmt */ bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); /* SetTarget('') */ bufferWriteU8((yyval.action), SWFACTION_SETTARGET); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0); ;} break; case 66: /* Line 1455 of yacc.c */ #line 587 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); ;} break; case 67: /* Line 1455 of yacc.c */ #line 591 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteU8((yyval.action), SWFACTION_GETTIMER); ;} break; case 68: /* Line 1455 of yacc.c */ #line 595 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_RANDOM); ;} break; case 69: /* Line 1455 of yacc.c */ #line 599 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_STRINGLENGTH); ;} break; case 70: /* Line 1455 of yacc.c */ #line 603 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_INT); ;} break; case 71: /* Line 1455 of yacc.c */ #line 607 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_ORD); ;} break; case 72: /* Line 1455 of yacc.c */ #line 611 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteU8((yyval.action), SWFACTION_CHR); ;} break; case 73: /* Line 1455 of yacc.c */ #line 615 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteU8((yyval.action), SWFACTION_STRINGCONCAT); ;} break; case 74: /* Line 1455 of yacc.c */ #line 620 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferConcat((yyval.action), (yyvsp[(7) - (8)].action)); bufferWriteU8((yyval.action), SWFACTION_SUBSTRING); ;} break; case 75: /* Line 1455 of yacc.c */ #line 626 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferConcat((yyval.action), (yyvsp[(3) - (6)].action)); bufferWriteGetProperty((yyval.action), (yyvsp[(5) - (6)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); free((yyvsp[(5) - (6)].str)); ;} break; case 76: /* Line 1455 of yacc.c */ #line 635 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].action)); bufferConcat((yyval.action), (yyvsp[(1) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); ;} break; case 77: /* Line 1455 of yacc.c */ #line 646 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].action)); bufferConcat((yyval.action), (yyvsp[(1) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); ;} break; case 79: /* Line 1455 of yacc.c */ #line 662 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].action); ;} break; case 80: /* Line 1455 of yacc.c */ #line 665 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 81: /* Line 1455 of yacc.c */ #line 670 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), "-", 2); bufferWriteString((yyval.action), (yyvsp[(2) - (2)].str), strlen((yyvsp[(2) - (2)].str))+1); free((yyvsp[(2) - (2)].str)); ;} break; case 82: /* Line 1455 of yacc.c */ #line 676 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 83: /* Line 1455 of yacc.c */ #line 681 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); free((yyvsp[(1) - (1)].str)); ;} break; case 84: /* Line 1455 of yacc.c */ #line 687 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 85: /* Line 1455 of yacc.c */ #line 692 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (3)].str), strlen((yyvsp[(1) - (3)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(3) - (3)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); free((yyvsp[(3) - (3)].str)); free((yyvsp[(1) - (3)].str)); ;} break; case 86: /* Line 1455 of yacc.c */ #line 700 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); free((yyvsp[(2) - (4)].str)); free((yyvsp[(4) - (4)].str)); ;} break; case 87: /* Line 1455 of yacc.c */ #line 715 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteU8((yyval.action), SWFACTION_DUP); bufferWriteU8((yyval.action), SWFACTION_DUP); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); ;} break; case 88: /* Line 1455 of yacc.c */ #line 725 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); free((yyvsp[(2) - (4)].str)); free((yyvsp[(4) - (4)].str)); ;} break; case 89: /* Line 1455 of yacc.c */ #line 740 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteU8((yyval.action), SWFACTION_DUP); bufferWriteU8((yyval.action), SWFACTION_DUP); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); ;} break; case 90: /* Line 1455 of yacc.c */ #line 750 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteString((yyvsp[(2) - (2)].action), "-1", 3); bufferWriteU8((yyvsp[(2) - (2)].action), SWFACTION_MULTIPLY); ;} break; case 91: /* Line 1455 of yacc.c */ #line 755 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteU8((yyvsp[(2) - (2)].action), SWFACTION_LOGICALNOT); ;} break; case 92: /* Line 1455 of yacc.c */ #line 759 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_DUP); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); ;} break; case 93: /* Line 1455 of yacc.c */ #line 765 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_MULTIPLY); ;} break; case 94: /* Line 1455 of yacc.c */ #line 770 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_DIVIDE); ;} break; case 95: /* Line 1455 of yacc.c */ #line 775 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_ADD); ;} break; case 96: /* Line 1455 of yacc.c */ #line 780 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); ;} break; case 97: /* Line 1455 of yacc.c */ #line 785 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_STRINGCONCAT); ;} break; case 98: /* Line 1455 of yacc.c */ #line 790 "swf4compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_LESSTHAN); ;} break; case 99: /* Line 1455 of yacc.c */ #line 795 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (3)].action); bufferConcat((yyval.action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_LESSTHAN); ;} break; case 100: /* Line 1455 of yacc.c */ #line 800 "swf4compiler.y" { (yyval.action) = (yyvsp[(3) - (3)].action); bufferConcat((yyval.action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyval.action), SWFACTION_LESSTHAN); bufferWriteU8((yyval.action), SWFACTION_LOGICALNOT); ;} break; case 101: /* Line 1455 of yacc.c */ #line 806 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LESSTHAN); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LOGICALNOT); ;} break; case 102: /* Line 1455 of yacc.c */ #line 811 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_STRINGEQ); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LOGICALNOT); ;} break; case 103: /* Line 1455 of yacc.c */ #line 816 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_STRINGEQ); ;} break; case 104: /* Line 1455 of yacc.c */ #line 820 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_STRINGCOMPARE); ;} break; case 105: /* Line 1455 of yacc.c */ #line 824 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_EQUAL); ;} break; case 106: /* Line 1455 of yacc.c */ #line 828 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_EQUAL); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LOGICALNOT); ;} break; case 107: /* Line 1455 of yacc.c */ #line 833 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LOGICALAND); ;} break; case 108: /* Line 1455 of yacc.c */ #line 837 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_LOGICALOR); ;} break; case 109: /* Line 1455 of yacc.c */ #line 841 "swf4compiler.y" { bufferWriteU8((yyvsp[(1) - (5)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(1) - (5)].action), 2); bufferWriteS16((yyvsp[(1) - (5)].action), bufferLength((yyvsp[(5) - (5)].action))+5); bufferConcat((yyvsp[(1) - (5)].action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyvsp[(1) - (5)].action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyvsp[(1) - (5)].action), 2); bufferWriteS16((yyvsp[(1) - (5)].action), bufferLength((yyvsp[(3) - (5)].action))); bufferConcat((yyvsp[(1) - (5)].action), (yyvsp[(3) - (5)].action)); ;} break; case 111: /* Line 1455 of yacc.c */ #line 855 "swf4compiler.y" { (yyval.str) = (yyvsp[(1) - (3)].str); (yyval.str) = stringConcat((yyval.str), strdup(":")); (yyval.str) = stringConcat((yyval.str), (yyvsp[(3) - (3)].str)); ;} break; case 112: /* Line 1455 of yacc.c */ #line 862 "swf4compiler.y" { (yyval.str) = strdup(""); ;} break; case 113: /* Line 1455 of yacc.c */ #line 865 "swf4compiler.y" { (yyval.str) = strdup(""); ;} break; case 114: /* Line 1455 of yacc.c */ #line 868 "swf4compiler.y" { (yyval.str) = strdup("/"); ;} break; case 115: /* Line 1455 of yacc.c */ #line 871 "swf4compiler.y" { (yyval.str) = strdup(".."); ;} break; case 116: /* Line 1455 of yacc.c */ #line 874 "swf4compiler.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; case 117: /* Line 1455 of yacc.c */ #line 877 "swf4compiler.y" { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; case 118: /* Line 1455 of yacc.c */ #line 882 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 119: /* Line 1455 of yacc.c */ #line 887 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 120: /* Line 1455 of yacc.c */ #line 891 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].action); ;} break; case 123: /* Line 1455 of yacc.c */ #line 900 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteBuffer((yyval.action), (yyvsp[(2) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); ;} break; case 124: /* Line 1455 of yacc.c */ #line 908 "swf4compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteBuffer((yyval.action), (yyvsp[(2) - (2)].action)); bufferWriteU8((yyval.action), SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); bufferWriteU8((yyval.action), SWFACTION_SETVARIABLE); ;} break; case 125: /* Line 1455 of yacc.c */ #line 916 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(2) - (4)].str)); free((yyvsp[(4) - (4)].str)); ;} break; case 126: /* Line 1455 of yacc.c */ #line 929 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferWriteString((yyval.action), "1", 2); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); bufferWriteString((yyval.action), (yyvsp[(2) - (4)].str), strlen((yyvsp[(2) - (4)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(4) - (4)].str)); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(2) - (4)].str)); free((yyvsp[(4) - (4)].str)); ;} break; case 127: /* Line 1455 of yacc.c */ #line 942 "swf4compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SETVARIABLE); ;} break; case 128: /* Line 1455 of yacc.c */ #line 946 "swf4compiler.y" { bufferWriteBuffer((yyvsp[(1) - (3)].action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_GETVARIABLE); bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_MULTIPLY); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SETVARIABLE); ;} break; case 129: /* Line 1455 of yacc.c */ #line 953 "swf4compiler.y" { bufferWriteBuffer((yyvsp[(1) - (3)].action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_GETVARIABLE); bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_DIVIDE); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SETVARIABLE); ;} break; case 130: /* Line 1455 of yacc.c */ #line 960 "swf4compiler.y" { bufferWriteBuffer((yyvsp[(1) - (3)].action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_GETVARIABLE); bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_ADD); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SETVARIABLE); ;} break; case 131: /* Line 1455 of yacc.c */ #line 967 "swf4compiler.y" { bufferWriteBuffer((yyvsp[(1) - (3)].action), (yyvsp[(1) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_GETVARIABLE); bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SUBTRACT); bufferWriteU8((yyvsp[(1) - (3)].action), SWFACTION_SETVARIABLE); ;} break; case 132: /* Line 1455 of yacc.c */ #line 974 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferConcat((yyval.action),(yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str)); ;} break; case 133: /* Line 1455 of yacc.c */ #line 983 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_MULTIPLY); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str)); ;} break; case 134: /* Line 1455 of yacc.c */ #line 996 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_DIVIDE); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str)); ;} break; case 135: /* Line 1455 of yacc.c */ #line 1009 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_ADD); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str)); ;} break; case 136: /* Line 1455 of yacc.c */ #line 1022 "swf4compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteSetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteString((yyval.action), (yyvsp[(1) - (5)].str), strlen((yyvsp[(1) - (5)].str))+1); bufferWriteGetProperty((yyval.action), (yyvsp[(3) - (5)].str)); bufferWriteU8((yyval.action), SWFACTION_GETPROPERTY); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteU8((yyval.action), SWFACTION_SUBTRACT); bufferWriteU8((yyval.action), SWFACTION_SETPROPERTY); free((yyvsp[(1) - (5)].str)); free((yyvsp[(3) - (5)].str)); ;} break; /* Line 1455 of yacc.c */ #line 3218 "swf4compiler.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 1675 of yacc.c */ #line 1039 "swf4compiler.y" swftools_0.9.2+git20130725.orig/lib/action/ming.h0000644000175000017500000000002512216332640020446 0ustar gawaingawain#include "libming.h" swftools_0.9.2+git20130725.orig/lib/action/action.h0000755000175000017500000001063712216332640021006 0ustar gawaingawain/* action.h * * $Id: action.h,v 1.1 2004/05/08 17:09:35 kramm Exp $ * * Notice: This header file contains declarations of functions and types that * are just used internally. All library functions and types that are supposed * to be publicly accessable are defined in ./src/ming.h. */ #ifndef SWF_COMPILER_ACTION_H_INCLUDED #define SWF_COMPILER_ACTION_H_INCLUDED #include "ming.h" enum { SWFACTION_END = 0x00, /* v3 actions */ SWFACTION_NEXTFRAME = 0x04, SWFACTION_PREVFRAME = 0x05, SWFACTION_PLAY = 0x06, SWFACTION_STOP = 0x07, SWFACTION_TOGGLEQUALITY = 0x08, SWFACTION_STOPSOUNDS = 0x09, SWFACTION_GOTOFRAME = 0x81, /* >= 0x80 means record has args */ SWFACTION_GETURL = 0x83, SWFACTION_WAITFORFRAME = 0x8A, SWFACTION_SETTARGET = 0x8B, SWFACTION_GOTOLABEL = 0x8C, /* v4 actions */ SWFACTION_ADD = 0x0A, SWFACTION_SUBTRACT = 0x0B, SWFACTION_MULTIPLY = 0x0C, SWFACTION_DIVIDE = 0x0D, SWFACTION_EQUAL = 0x0E, SWFACTION_LESSTHAN = 0x0F, SWFACTION_LOGICALAND = 0x10, SWFACTION_LOGICALOR = 0x11, SWFACTION_LOGICALNOT = 0x12, SWFACTION_STRINGEQ = 0x13, SWFACTION_STRINGLENGTH = 0x14, SWFACTION_SUBSTRING = 0x15, SWFACTION_POP = 0x17, SWFACTION_INT = 0x18, SWFACTION_GETVARIABLE = 0x1C, SWFACTION_SETVARIABLE = 0x1D, SWFACTION_SETTARGETEXPRESSION = 0x20, SWFACTION_STRINGCONCAT = 0x21, SWFACTION_GETPROPERTY = 0x22, SWFACTION_SETPROPERTY = 0x23, SWFACTION_DUPLICATECLIP = 0x24, SWFACTION_REMOVECLIP = 0x25, SWFACTION_TRACE = 0x26, SWFACTION_STARTDRAGMOVIE = 0x27, SWFACTION_STOPDRAGMOVIE = 0x28, SWFACTION_STRINGCOMPARE = 0x29, SWFACTION_RANDOM = 0x30, SWFACTION_MBLENGTH = 0x31, SWFACTION_ORD = 0x32, SWFACTION_CHR = 0x33, SWFACTION_GETTIMER = 0x34, SWFACTION_MBSUBSTRING = 0x35, SWFACTION_MBORD = 0x36, SWFACTION_MBCHR = 0x37, SWFACTION_WAITFORFRAMEEXPRESSION = 0x8D, SWFACTION_PUSHDATA = 0x96, SWFACTION_BRANCHALWAYS = 0x99, SWFACTION_GETURL2 = 0x9A, SWFACTION_BRANCHIFTRUE = 0x9D, SWFACTION_CALLFRAME = 0x9E, SWFACTION_GOTOEXPRESSION = 0x9F, /* v5 actions */ SWFACTION_DELETEVAR = 0x3A,/*not used yet*/ SWFACTION_DELETE = 0x3B, SWFACTION_VAREQUALS = 0x3C, SWFACTION_CALLFUNCTION = 0x3D, SWFACTION_RETURN = 0x3E, SWFACTION_MODULO = 0x3F, SWFACTION_NEW = 0x40, SWFACTION_VAR = 0x41, SWFACTION_INITARRAY = 0x42, SWFACTION_INITOBJECT = 0x43, SWFACTION_TYPEOF = 0x44, SWFACTION_TARGETPATH = 0x45, SWFACTION_ENUMERATE = 0x46, SWFACTION_NEWADD = 0x47, SWFACTION_NEWLESSTHAN = 0x48, SWFACTION_NEWEQUALS = 0x49, SWFACTION_TONUMBER = 0x4A, SWFACTION_TOSTRING = 0x4B, SWFACTION_DUP = 0x4C, SWFACTION_SWAP = 0x4D, SWFACTION_GETMEMBER = 0x4E, SWFACTION_SETMEMBER = 0x4F, SWFACTION_INCREMENT = 0x50, SWFACTION_DECREMENT = 0x51, SWFACTION_CALLMETHOD = 0x52, SWFACTION_NEWMETHOD = 0x53,/*not used yet*/ SWFACTION_INSTANCEOF = 0x54, SWFACTION_ENUM2 = 0x55,/*not used yet*/ SWFACTION_BITWISEAND = 0x60, SWFACTION_BITWISEOR = 0x61, SWFACTION_BITWISEXOR = 0x62, SWFACTION_SHIFTLEFT = 0x63, SWFACTION_SHIFTRIGHT = 0x64, SWFACTION_SHIFTRIGHT2 = 0x65, SWFACTION_STRICTEQ = 0x66, SWFACTION_CONSTANTPOOL = 0x88, SWFACTION_WITH = 0x94, SWFACTION_DEFINEFUNCTION = 0x9B, SWFACTION_SETREGISTER = 0x87 }; #endif /* SWF_COMPILER_ACTION_H_INCLUDED */ swftools_0.9.2+git20130725.orig/lib/action/compile.c0000755000175000017500000003663312216332640021160 0ustar gawaingawain/* Ming, an SWF output library Copyright (C) 2002 Opaque Industries - http://www.opaque.net/ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WIN32 #include #endif #include #include #include #include #include "libming.h" #include "compile.h" #include "action.h" #include "blocks/error.h" static int nConstants = {0}, maxConstants = {0}, sizeConstants = {0}; static char **constants; /* XXX - temp hack until we check at compile time */ enum { SWF_BIG_ENDIAN, SWF_LITTLE_ENDIAN }; static int byteorder; void checkByteOrder() { unsigned int x; unsigned char *p; x = 0x01020304; p = (unsigned char *)&x; if(*p == 1) byteorder = SWF_BIG_ENDIAN; else byteorder = SWF_LITTLE_ENDIAN; } char *stringConcat(char *a, char *b) { if ( a != NULL ) { if ( b != NULL ) { a = (char*)realloc(a, strlen(a)+strlen(b)+1); strcat(a, b); free(b); } return a; } else return b; } void bufferPatchLength(Buffer buffer, int back) { unsigned char *output = buffer->buffer; int len = bufferLength(buffer); output[len-back-1] = (back>>8) & 0xff; output[len-back-2] = back & 0xff; } /* add len more bytes to length of the pushdata opcode pointed to by buffer->pushloc */ void bufferPatchPushLength(Buffer buffer, int len) { int oldsize; if(buffer->pushloc != NULL) { oldsize = (buffer->pushloc[0] & 0xff) | ((buffer->pushloc[1] & 0xff) << 8); oldsize += len; buffer->pushloc[0] = oldsize & 0xff; buffer->pushloc[1] = (oldsize >> 8) & 0xff; } else SWF_error("problem with bufferPatchPushLength\n"); } static int useConstants = 1; void Ming_useConstants(int flag) { useConstants = flag; } int addConstant(const char *s) { int i; for(i=0; i MAXCONSTANTPOOLSIZE ) return -1; if(nConstants == maxConstants) constants = (char **) realloc(constants, (maxConstants += 64) * sizeof(char *)); constants[nConstants] = strdup(s); sizeConstants += (strlen(s)+1); return nConstants++; } int bufferWriteConstants(Buffer out) { int i, len=2; if(nConstants == 0) return 0; bufferWriteU8(out, SWFACTION_CONSTANTPOOL); bufferWriteS16(out, 0); /* length */ bufferWriteS16(out, nConstants); for(i=0; ibuffer = (byte*)malloc(BUFFER_INCREMENT); out->pos = out->buffer; *(out->pos) = 0; out->buffersize = out->free = BUFFER_INCREMENT; out->pushloc = NULL; return out; } void destroyBuffer(Buffer out) { free(out->buffer); free(out); } int bufferLength(Buffer out) { if(out) return (out->pos)-(out->buffer); else return 0; } /* make sure there's enough space for bytes bytes */ void bufferCheckSize(Buffer out, int bytes) { if(bytes > out->free) { int New = BUFFER_INCREMENT * ((bytes-out->free-1)/BUFFER_INCREMENT + 1); int num = bufferLength(out); /* in case buffer gets displaced.. */ unsigned char *newbuf = (unsigned char*)realloc(out->buffer, out->buffersize+New); if(newbuf != out->buffer) { int pushd; if(out->pushloc) pushd = out->pos - out->pushloc; out->pos = newbuf+num; if(out->pushloc) out->pushloc = out->pos - pushd; } out->buffer = newbuf; out->buffersize += New; out->free += New; } } int bufferWriteData(Buffer b, const byte *data, int length) { int i; bufferCheckSize(b, length); for(i=0; ibuffer, bufferLength(b)); return 0; } /* if a's last op and b's first op are both PUSHDATA, concat into one op */ int bufferWriteDataAndPush(Buffer a, Buffer b) { int i, pushd; byte *data = b->buffer; int length = b->pos - b->buffer; if(a->pushloc && (b->buffer[0] == SWFACTION_PUSHDATA) && SWF_versionNum > 4) { pushd = (b->buffer[1] & 0xff) | ((b->buffer[2] & 0xff) << 8); bufferPatchPushLength(a, pushd); data += 3; length -= 3; } if(b->pushloc) pushd = b->pos - b->pushloc; bufferCheckSize(a, length); for(i=0; ipushloc && (b->buffer[0] == SWFACTION_PUSHDATA) && (b->pushloc == b->buffer+1)) ; /* b is just one pushdata, so do nothing.. */ else if(b->pushloc) a->pushloc = a->pos - pushd; else a->pushloc = 0; return length; } int bufferConcat(Buffer a, Buffer b) { int len; if(!a) return 0; if(b) { len = bufferWriteDataAndPush(a, b); destroyBuffer(b); } return len; } int bufferWriteOp(Buffer out, int data) { bufferWriteU8(out, data); out->pushloc = NULL; return 1; } int bufferWritePushOp(Buffer out) { bufferWriteU8(out, SWFACTION_PUSHDATA); out->pushloc = out->pos; return 1; } int bufferWriteU8(Buffer out, int data) { bufferCheckSize(out, 1); *(out->pos) = data; out->pos++; out->free--; return 1; } int bufferWriteS16(Buffer out, int data) { if(data < 0) data = (1<<16)+data; bufferWriteU8(out, data%256); data >>= 8; bufferWriteU8(out, data%256); return 2; } int bufferWriteHardString(Buffer out, byte *string, int length) { int i; for(i=0; ipushloc == NULL) { bufferWritePushOp(out); bufferWriteS16(out, 0); } l = bufferWriteConstantString(out, string, length); bufferPatchPushLength(out, l); return l; } } int bufferWriteInt(Buffer out, int i) { int len = 0; unsigned char *p = (unsigned char *)&i; if(out->pushloc == NULL || SWF_versionNum < 5) { len = 3; bufferWritePushOp(out); bufferWriteS16(out, 5); } else bufferPatchPushLength(out, 5); bufferWriteU8(out, PUSH_INT); if(byteorder == SWF_LITTLE_ENDIAN) { bufferWriteU8(out, p[0]); bufferWriteU8(out, p[1]); bufferWriteU8(out, p[2]); bufferWriteU8(out, p[3]); } else { bufferWriteU8(out, p[3]); bufferWriteU8(out, p[2]); bufferWriteU8(out, p[1]); bufferWriteU8(out, p[0]); } return len + 5; } int bufferWriteDouble(Buffer out, double d) { int len = 0; unsigned char *p = (unsigned char *)&d; if(out->pushloc == NULL || SWF_versionNum < 5) { len = 3; bufferWritePushOp(out); bufferWriteS16(out, 9); } else bufferPatchPushLength(out, 5); bufferWriteU8(out, PUSH_DOUBLE); if(byteorder == SWF_LITTLE_ENDIAN) { bufferWriteU8(out, p[4]); bufferWriteU8(out, p[5]); bufferWriteU8(out, p[6]); bufferWriteU8(out, p[7]); bufferWriteU8(out, p[0]); bufferWriteU8(out, p[1]); bufferWriteU8(out, p[2]); bufferWriteU8(out, p[3]); } else { bufferWriteU8(out, p[3]); bufferWriteU8(out, p[2]); bufferWriteU8(out, p[1]); bufferWriteU8(out, p[0]); bufferWriteU8(out, p[7]); bufferWriteU8(out, p[6]); bufferWriteU8(out, p[5]); bufferWriteU8(out, p[4]); } return len + 9; } int bufferWriteNull(Buffer out) { int len = 0; if(out->pushloc == NULL || SWF_versionNum < 5) { len = 3; bufferWritePushOp(out); bufferWriteS16(out, 1); } else bufferPatchPushLength(out, 1); bufferWriteU8(out, PUSH_NULL); return len + 1; } int bufferWriteBoolean(Buffer out, int val) { int len = 0; if(out->pushloc == NULL || SWF_versionNum < 5) { len = 3; bufferWritePushOp(out); bufferWriteS16(out, 2); } else bufferPatchPushLength(out, 2); bufferWriteU8(out, PUSH_BOOLEAN); bufferWriteU8(out, val ? 1 : 0); return len + 2; } int bufferWriteRegister(Buffer out, int num) { int len = 0; if(out->pushloc == NULL || SWF_versionNum < 5) { len = 3; bufferWritePushOp(out); bufferWriteS16(out, 2); } else bufferPatchPushLength(out, 2); bufferWriteU8(out, PUSH_REGISTER); bufferWriteU8(out, num); return len + 2; } int bufferWriteSetRegister(Buffer out, int num) { bufferWriteU8(out, SWFACTION_SETREGISTER); bufferWriteS16(out, 1); bufferWriteU8(out, num); return 4; } void lower(char *s) { while(*s) { *s = tolower(*s); ++s; } } /* this code will eventually help to pop extra values off the stack and make sure that continue and break address the proper context */ static enum ctx *ctx_stack = {0}; static int ctx_count = {0}, ctx_len = {0}; void addctx(enum ctx val) { if(ctx_count >= ctx_len) ctx_stack = (enum ctx*) realloc(ctx_stack, (ctx_len += 10) * sizeof(enum ctx)); ctx_stack[ctx_count++] = val; } void delctx(enum ctx val) { if(ctx_count <= 0 || ctx_stack[--ctx_count] != val) SWF_error("consistency check in delctx"); } int chkctx(enum ctx val) { int n, ret = 0; switch(val) { case CTX_FUNCTION: for(n = ctx_count ; --n >= 0 ; ) switch(ctx_stack[n]) { case CTX_SWITCH: case CTX_FOR_IN: ret++; break; case CTX_FUNCTION: return ret; default: ; /* computers are stupid */ } return -1; case CTX_BREAK: for(n = ctx_count ; --n >= 0 ; ) switch(ctx_stack[n]) { case CTX_SWITCH: case CTX_LOOP: return 0; case CTX_FOR_IN: return 1; case CTX_FUNCTION: return -1; default: ; /* computers are stupid */ } case CTX_CONTINUE: for(n = ctx_count ; --n >= 0 ; ) switch(ctx_stack[n]) { case CTX_LOOP: case CTX_FOR_IN: return 0; case CTX_FUNCTION: return -1; default: ; /* computers are stupid */ } default: ; /* computers are stupid */ } return 0; } /* replace MAGIC_CONTINUE_NUMBER and MAGIC_BREAK_NUMBER with jumps to head or tail, respectively */ /* jump offset is relative to end of jump instruction */ /* I can't believe this actually worked */ void bufferResolveJumps(Buffer out) { byte *p = out->buffer; int l, target; while(p < out->pos) { if(*p & 0x80) /* then it's a multibyte instruction */ { if(*p == SWFACTION_BRANCHALWAYS) { p += 3; /* plus instruction plus two-byte length */ if(*p == MAGIC_CONTINUE_NUMBER_LO && *(p+1) == MAGIC_CONTINUE_NUMBER_HI) { target = out->buffer - (p+2); *p = target & 0xff; *(p+1) = (target>>8) & 0xff; } else if(*p == MAGIC_BREAK_NUMBER_LO && *(p+1) == MAGIC_BREAK_NUMBER_HI) { target = out->pos - (p+2); *p = target & 0xff; *(p+1) = (target>>8) & 0xff; } p += 2; } else { ++p; l = *p; ++p; l += *p<<8; ++p; p += l; } } else ++p; } } // handle SWITCH statement void bufferResolveSwitch(Buffer buffer, struct switchcases *slp) { struct switchcase *scp; int n, len; unsigned char *output; len = bufferLength(buffer); for(n = 0, scp = slp->list ; n < slp->count ; n++, scp++) { scp->actlen = bufferLength(scp->action); if((n < slp->count-1)) scp->actlen += 5; if(scp->cond) { scp->condlen = bufferLength(scp->cond) + 8; bufferWriteOp(buffer, SWFACTION_DUP); bufferConcat(buffer, scp->cond); bufferWriteOp(buffer, SWFACTION_NEWEQUALS); bufferWriteOp(buffer, SWFACTION_LOGICALNOT); bufferWriteOp(buffer, SWFACTION_BRANCHIFTRUE); bufferWriteS16(buffer, 2); bufferWriteS16(buffer, scp->actlen); } else scp->condlen = 0; bufferConcat(buffer, scp->action); bufferWriteOp(buffer, SWFACTION_BRANCHALWAYS); bufferWriteS16(buffer, 2); bufferWriteS16(buffer, scp->isbreak ? MAGIC_BREAK_NUMBER : 0); if(!scp->cond) { slp->count = n+1; break; } } for(n = 0, scp = slp->list ; n < slp->count ; n++, scp++) { len += scp->condlen; output = buffer->buffer + len; if((n < slp->count-1) && !scp->isbreak) { output[scp->actlen-2] = (scp+1)->condlen & 0xff; output[scp->actlen-1] = (scp+1)->condlen >> 8; } len += scp->actlen; } } int lookupSetProperty(char *string) { lower(string); if(strcmp(string,"x")==0) return 0x0000; if(strcmp(string,"y")==0) return 0x3f80; if(strcmp(string,"xscale")==0) return 0x4000; if(strcmp(string,"yscale")==0) return 0x4040; if(strcmp(string,"alpha")==0) return 0x40c0; if(strcmp(string,"visible")==0) return 0x40e0; if(strcmp(string,"rotation")==0) return 0x4120; if(strcmp(string,"name")==0) return 0x4140; if(strcmp(string,"quality")==0) return 0x4180; if(strcmp(string,"focusrect")==0) return 0x4188; if(strcmp(string,"soundbuftime")==0) return 0x4190; SWF_error("No such property: %s\n", string); return -1; } int bufferWriteSetProperty(Buffer out, char *string) { int property = lookupSetProperty(string); bufferWriteU8(out, SWFACTION_PUSHDATA); bufferWriteS16(out, 5); bufferWriteU8(out, PUSH_PROPERTY); bufferWriteS16(out, 0); bufferWriteS16(out, property); return 8; } int bufferWriteWTHITProperty(Buffer out) { bufferWriteU8(out, SWFACTION_PUSHDATA); bufferWriteS16(out, 5); bufferWriteU8(out, PUSH_PROPERTY); bufferWriteS16(out, 0); bufferWriteS16(out, 0x4680); return 8; } const char *lookupGetProperty(char *string) { lower(string); if(strcmp(string,"x")==0) return "0"; if(strcmp(string,"y")==0) return "1"; if(strcmp(string,"xscale")==0) return "2"; if(strcmp(string,"yscale")==0) return "3"; if(strcmp(string,"currentframe")==0) return "4"; if(strcmp(string,"totalframes")==0) return "5"; if(strcmp(string,"alpha")==0) return "6"; if(strcmp(string,"visible")==0) return "7"; if(strcmp(string,"width")==0) return "8"; if(strcmp(string,"height")==0) return "9"; if(strcmp(string,"rotation")==0) return "10"; if(strcmp(string,"target")==0) return "11"; if(strcmp(string,"framesloaded")==0) return "12"; if(strcmp(string,"name")==0) return "13"; if(strcmp(string,"droptarget")==0) return "14"; if(strcmp(string,"url")==0) return "15"; if(strcmp(string,"quality")==0) return "16"; if(strcmp(string,"focusrect")==0) return "17"; if(strcmp(string,"soundbuftime")==0) return "18"; SWF_error("No such property: %s\n", string); return ""; } int bufferWriteGetProperty(Buffer out, char *string) { const char *property = lookupGetProperty(string); bufferWriteU8(out, SWFACTION_PUSHDATA); bufferWriteS16(out, strlen(property)+2); bufferWriteU8(out, PUSH_STRING); return 4 + bufferWriteData(out, (byte*) property, strlen(property)+1); } /* * Local variables: * tab-width: 2 * c-basic-offset: 2 * End: */ swftools_0.9.2+git20130725.orig/lib/action/swf5compiler.y0000644000175000017500000013026612216332640022167 0ustar gawaingawain/* $Id: swf5compiler.y,v 1.2 2008/10/28 13:05:13 kramm Exp $ */ %start program %{ #include #include #include #include "compile.h" #include "action.h" #include "assembler.h" #define YYPARSE_PARAM buffer Buffer bf, bc; %} %union { Buffer action; char *str; SWFGetUrl2Method getURLMethod; int op; int intVal; int len; double doubleVal; struct { Buffer buffer; int count; } exprlist; struct switchcase switchcase; struct switchcases switchcases; struct { Buffer obj, ident, memexpr; } lval; } /* tokens etc. */ %token BREAK CONTINUE FUNCTION ELSE SWITCH CASE DEFAULT FOR IN IF WHILE %token DO VAR NEW DELETE RETURN END WITH ASM EVAL %token RANDOM GETTIMER LENGTH CONCAT SUBSTR TRACE INT ORD CHR GETURL %token GETURL1 NEXTFRAME PREVFRAME PLAY STOP TOGGLEQUALITY STOPSOUNDS %token DUP SWAP POP PUSH SETREGISTER CALLFUNCTION CALLMETHOD %token AND OR XOR MODULO ADD LESSTHAN EQUALS %token INC DEC TYPEOF INSTANCEOF ENUMERATE INITOBJECT INITARRAY GETMEMBER %token SETMEMBER SHIFTLEFT SHIFTRIGHT SHIFTRIGHT2 VAREQUALS OLDADD SUBTRACT %token MULTIPLY DIVIDE OLDEQUALS OLDLESSTHAN LOGICALAND LOGICALOR NOT %token STRINGEQ STRINGLENGTH SUBSTRING GETVARIABLE SETVARIABLE %token SETTARGETEXPRESSION DUPLICATEMOVIECLIP REMOVEMOVIECLIP %token STRINGLESSTHAN MBLENGTH MBSUBSTRING MBORD MBCHR %token BRANCHALWAYS BRANCHIFTRUE GETURL2 POST GET %token LOADVARIABLES LOADMOVIE LOADVARIABLESNUM LOADMOVIENUM %token CALLFRAME STARTDRAG STOPDRAG GOTOFRAME SETTARGET %token NULLVAL %token INTEGER %token DOUBLE %token BOOLEAN %token REGISTER /* these two are strdup'ed in compiler.flex, so free them up here */ %token STRING %token IDENTIFIER %token EQ "==" %token LE "<=" %token GE ">=" %token NE "!=" %token LAN "&&" %token LOR "||" %token INCR "++" %token DECR "--" %token IEQ "+=" %token DEQ "/=" %token MEQ "*=" %token SEQ "-=" %token REQ "%=" %token AEQ "&=" %token OEQ "|=" %token SHL "<<" %token SHR ">>" %token SHR2 ">>>" %token SHLEQ "<<=" %token SHREQ ">>=" %token SHR2EQ ">>>=" /* ascending order of ops ..? */ %nonassoc NOELSE %nonassoc ELSE %left ',' %right '=' "*=" "/=" "%=" "+=" "-=" "&=" "|=" "^=" ">>=" ">>>=" "<<=" %right '?' ':' %left "&&" "||" %left "==" "!=" %left '<' '>' "<=" ">=" %left '&' '|' '^' %left "<<" ">>" ">>>" %left '+' '-' %left '*' '/' '%' %nonassoc "++" "--" %right '!' '~' UMINUS %right POSTFIX %right TYPEOF %nonassoc INSTANCEOF %left '.' '[' ']' %type program code %type stmt stmts %type if_stmt iter_stmt cont_stmt break_stmt return_stmt %type with_stmt %type switch_stmt %type anon_function_decl function_decl anycode %type void_function_call function_call method_call %type assign_stmt assign_stmts assign_stmts_opt %type expr expr_or_obj objexpr expr_opt obj_ref %type emptybraces level init_vars init_var primary lvalue_expr %type lvalue %type expr_list objexpr_list formals_list %type switch_case %type switch_cases %type assignop incdecop %type urlmethod %type identifier %type opcode opcode_list push_item with push_list /* %type integer %type double */ %% /* rules */ program : { bf = newBuffer(); bc = newBuffer(); } code { Buffer b = newBuffer(); bufferWriteConstants(b); bufferConcat(b, bf); bufferConcat(b, bc); *((Buffer *)buffer) = b; } | /* nothing */ { Buffer b = newBuffer(); *((Buffer *)buffer) = b; } ; code : anycode | code anycode ; anycode : stmt { bufferConcat(bc, $1); } | function_decl { bufferConcat(bf, $1); } ; stmts : stmt { $$ = $1; } | stmts stmt { $$ = $1; bufferConcat($$, $2); } ; emptybraces : '{' '}' { } ; stmt : emptybraces { $$ = NULL; } | '{' stmts '}' { $$ = $2; } | ';' { $$ = NULL; } | assign_stmt ';' { $$ = $1; } | if_stmt | iter_stmt | cont_stmt | break_stmt | switch_stmt | return_stmt | with_stmt ; with_stmt : WITH '(' expr ')' '{' stmts '}' { $$ = $3; bufferWriteOp($$, SWFACTION_WITH); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($6)); bufferConcat($$, $6); } ; // only possible if there is an active CTX_FUNCTION // in some contexts, may have to pop a few values ... return_stmt : RETURN ';' { int tmp = chkctx(CTX_FUNCTION); if(tmp < 0) swf5error("return outside function"); $$ = newBuffer(); while(--tmp >= 0) bufferWriteOp($$, SWFACTION_POP); bufferWriteNull($$); bufferWriteOp($$, SWFACTION_RETURN); } | RETURN expr_or_obj ';' { int tmp = chkctx(CTX_FUNCTION); if(tmp < 0) swf5error("return outside function"); $$ = newBuffer(); while(--tmp >= 0) bufferWriteOp($$, SWFACTION_POP); bufferConcat($$, $2); bufferWriteOp($$, SWFACTION_RETURN); } ; assign_stmts : assign_stmt | assign_stmts ',' assign_stmt { bufferConcat($1, $3); } ; if_stmt : IF '(' expr ')' stmt ELSE stmt { $$ = $3; bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($7)+5); bufferConcat($$, $7); bufferWriteOp($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($5)); bufferConcat($$, $5); } | IF '(' expr ')' stmt %prec NOELSE { $$ = $3; bufferWriteOp($$, SWFACTION_LOGICALNOT); bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($5)); bufferConcat($$, $5); } ; expr_opt : /* empty */ { $$ = NULL; } | expr { $$ = $1; } ; switch_init : SWITCH { addctx(CTX_SWITCH); } ; switch_stmt : switch_init '(' expr ')' '{' switch_cases '}' { $$ = $3; bufferResolveSwitch($$, &$6); bufferResolveJumps($$); bufferWriteOp($$, SWFACTION_POP); delctx(CTX_SWITCH); /* FIXME: continue in switch continues surrounding loop, if any */ } ; /* XXX */ switch_cases : /* empty */ { $$.count = 0; $$.list = 0; } | switch_cases switch_case { $$ = $1; $$.list = (struct switchcase*) realloc($$.list, ($$.count+1) * sizeof(struct switchcase)); $$.list[$$.count] = $2; $$.count++; } ; switch_case : CASE expr ':' stmts BREAK ';' { $$.cond = $2; $$.action = $4; $$.isbreak = 1; } | CASE expr ':' stmts { $$.cond = $2; $$.action = $4; $$.isbreak = 0; } | DEFAULT ':' stmts { $$.cond = NULL; $$.action = $3; $$.isbreak = 0; } ; /* there's GOT to be a better way than this.. */ identifier : IDENTIFIER | NEW { $$ = strdup("new"); } | DELETE { $$ = strdup("delete"); } | RANDOM { $$ = strdup("random"); } | GETTIMER { $$ = strdup("getTimer"); } | LENGTH { $$ = strdup("length"); } | CONCAT { $$ = strdup("concat"); } | SUBSTR { $$ = strdup("substr"); } | TRACE { $$ = strdup("trace"); } | INT { $$ = strdup("int"); } | ORD { $$ = strdup("ord"); } | CHR { $$ = strdup("chr"); } | GETURL { $$ = strdup("getURL"); } | GETURL1 { $$ = strdup("getURL1"); } | NEXTFRAME { $$ = strdup("nextFrame"); } | PREVFRAME { $$ = strdup("prevFrame"); } | PLAY { $$ = strdup("play"); } | STOP { $$ = strdup("stop"); } | TOGGLEQUALITY { $$ = strdup("toggleQuality"); } | STOPSOUNDS { $$ = strdup("stopSounds"); } | DUP { $$ = strdup("dup"); } | SWAP { $$ = strdup("swap"); } | POP { $$ = strdup("pop"); } | PUSH { $$ = strdup("push"); } | SETREGISTER { $$ = strdup("setRegister"); } | CALLFUNCTION { $$ = strdup("callFunction"); } | CALLMETHOD { $$ = strdup("callMethod"); } | AND { $$ = strdup("and"); } | OR { $$ = strdup("or"); } | XOR { $$ = strdup("xor"); } | MODULO { $$ = strdup("modulo"); } | ADD { $$ = strdup("add"); } | LESSTHAN { $$ = strdup("lessThan"); } | EQUALS { $$ = strdup("equals"); } | INC { $$ = strdup("inc"); } | DEC { $$ = strdup("dec"); } | TYPEOF { $$ = strdup("typeof"); } | INSTANCEOF { $$ = strdup("instanceof"); } | ENUMERATE { $$ = strdup("enumerate"); } | INITOBJECT { $$ = strdup("initobject"); } | INITARRAY { $$ = strdup("initarray"); } | GETMEMBER { $$ = strdup("getmember"); } | SETMEMBER { $$ = strdup("setmember"); } | SHIFTLEFT { $$ = strdup("shiftleft"); } | SHIFTRIGHT { $$ = strdup("shiftright"); } | SHIFTRIGHT2 { $$ = strdup("shiftright2"); } | VAREQUALS { $$ = strdup("varequals"); } | OLDADD { $$ = strdup("oldAdd"); } | SUBTRACT { $$ = strdup("subtract"); } | MULTIPLY { $$ = strdup("multiply"); } | DIVIDE { $$ = strdup("divide"); } | OLDEQUALS { $$ = strdup("oldequals"); } | OLDLESSTHAN { $$ = strdup("oldlessthan"); } | LOGICALAND { $$ = strdup("logicaland"); } | LOGICALOR { $$ = strdup("logicalor"); } | NOT { $$ = strdup("not"); } | STRINGEQ { $$ = strdup("stringeq"); } | STRINGLENGTH { $$ = strdup("stringlength"); } | SUBSTRING { $$ = strdup("substring"); } | GETVARIABLE { $$ = strdup("getvariable"); } | SETVARIABLE { $$ = strdup("setvariable"); } | SETTARGETEXPRESSION { $$ = strdup("settargetexpression"); } | DUPLICATEMOVIECLIP { $$ = strdup("duplicatemovieclip"); } | REMOVEMOVIECLIP { $$ = strdup("removemovieclip"); } | STARTDRAG { $$ = strdup("startdrag"); } | STOPDRAG { $$ = strdup("stopdrag"); } | STRINGLESSTHAN { $$ = strdup("stringlessthan"); } | MBLENGTH { $$ = strdup("mblength"); } | MBSUBSTRING { $$ = strdup("mbsubstring"); } | MBORD { $$ = strdup("mbord"); } | MBCHR { $$ = strdup("mbchr"); } | BRANCHALWAYS { $$ = strdup("branchalways"); } | BRANCHIFTRUE { $$ = strdup("branchiftrue"); } | GETURL2 { $$ = strdup("getURL2"); } | POST { $$ = strdup("post"); } | GET { $$ = strdup("get"); } | LOADVARIABLES { $$ = strdup("loadvariables"); } | LOADMOVIE { $$ = strdup("loadMovie"); } ; formals_list : /* empty */ { $$.buffer = newBuffer(); $$.count = 0; } | identifier { $$.buffer = newBuffer(); bufferWriteHardString($$.buffer, (byte*)$1, strlen($1)+1); $$.count = 1; } | formals_list ',' identifier { $$ = $1; bufferWriteHardString($$.buffer, (byte*)$3, strlen($3)+1); ++$$.count; } ; function_init : FUNCTION { addctx(CTX_FUNCTION); } ; function_decl : function_init identifier '(' formals_list ')' stmt { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_DEFINEFUNCTION); bufferWriteS16($$, strlen($2) + bufferLength($4.buffer) + 5); bufferWriteHardString($$, (byte*) $2, strlen($2)+1); bufferWriteS16($$, $4.count); bufferConcat($$, $4.buffer); bufferWriteS16($$, bufferLength($6)); bufferConcat($$, $6); delctx(CTX_FUNCTION); } ; obj_ref : identifier { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } | expr '.' identifier { $$ = $1; bufferWriteString($$, $3, strlen($3)+1); bufferWriteOp($$, SWFACTION_GETMEMBER); free($3); } | expr '[' expr ']' { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_GETMEMBER); } | function_call | method_call ; while_init : WHILE { addctx(CTX_LOOP); } ; do_init : DO { addctx(CTX_LOOP); } ; for_init : /* empty */ { addctx(CTX_LOOP); } ; for_in_init : /* empty */ { addctx(CTX_FOR_IN); } ; iter_stmt : while_init '(' expr ')' stmt { $$ = $3; bufferWriteOp($$, SWFACTION_LOGICALNOT); bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($5)+5); bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, -(bufferLength($$)+2)); bufferResolveJumps($$); delctx(CTX_LOOP); } | do_init stmt WHILE '(' expr ')' { if($2) { $$ = $2; bufferConcat($$, $5); } else $$ = $5; bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, -(bufferLength($$)+2)); bufferResolveJumps($$); delctx(CTX_LOOP); } | FOR '(' assign_stmts_opt ';' expr_opt ';' assign_stmts_opt ')' for_init stmt { if($3) $$ = $3; else $$ = newBuffer(); if($7) { bufferWriteOp($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($7)); } else $7 = newBuffer(); if($5) { bufferConcat($7, $5); bufferWriteOp($7, SWFACTION_LOGICALNOT); bufferWriteOp($7, SWFACTION_BRANCHIFTRUE); bufferWriteS16($7, 2); bufferWriteS16($7, bufferLength($10)+5); } bufferConcat($7, $10); bufferWriteOp($7, SWFACTION_BRANCHALWAYS); bufferWriteS16($7, 2); bufferWriteS16($7, -(bufferLength($7)+2)); bufferResolveJumps($7); bufferConcat($$, $7); delctx(CTX_LOOP); } | FOR '(' identifier IN obj_ref ')' for_in_init stmt { Buffer b2, b3; int tmp; $$ = $5; bufferWriteOp($$, SWFACTION_ENUMERATE); b2 = newBuffer(); bufferWriteSetRegister(b2, 0); bufferWriteOp(b2, SWFACTION_PUSHDATA); bufferWriteS16(b2, 1); bufferWriteU8(b2, 2); bufferWriteOp(b2, SWFACTION_NEWEQUALS); bufferWriteOp(b2, SWFACTION_BRANCHIFTRUE); bufferWriteS16(b2, 2); b3 = newBuffer(); /* basically a lvalue could be used here rather than an ident !!! */ /* probably by using reg1 for the test rather than reg0 */ bufferWriteString(b3, $3, strlen($3)+1); bufferWriteRegister(b3, 0); bufferWriteOp(b3, SWFACTION_SETVARIABLE); bufferConcat(b3, $8); bufferWriteS16(b2, bufferLength(b3) + 5); tmp = bufferLength(b2) + bufferLength(b3) + 5; bufferConcat($$, b2); bufferWriteOp(b3, SWFACTION_BRANCHALWAYS); bufferWriteS16(b3, 2); bufferWriteS16(b3, -tmp); bufferResolveJumps(b3); bufferConcat($$, b3); delctx(CTX_FOR_IN); } | FOR '(' VAR identifier IN obj_ref ')' for_in_init stmt { Buffer b2, b3; int tmp; $$ = $6; bufferWriteOp($$, SWFACTION_ENUMERATE); b2 = newBuffer(); bufferWriteSetRegister(b2, 0); bufferWriteOp(b2, SWFACTION_PUSHDATA); bufferWriteS16(b2, 1); bufferWriteU8(b2, 2); bufferWriteOp(b2, SWFACTION_NEWEQUALS); bufferWriteOp(b2, SWFACTION_BRANCHIFTRUE); bufferWriteS16(b2, 2); // add size later b3 = newBuffer(); bufferWriteString(b3, $4, strlen($4)+1); bufferWriteRegister(b3, 0); bufferWriteOp(b3, SWFACTION_VAREQUALS); bufferConcat(b3, $9); bufferWriteS16(b2, bufferLength(b3) + 5); tmp = bufferLength(b2) + bufferLength(b3) + 5; bufferConcat($$, b2); bufferWriteOp(b3, SWFACTION_BRANCHALWAYS); bufferWriteS16(b3, 2); bufferWriteS16(b3, -tmp); bufferResolveJumps(b3); bufferConcat($$, b3); delctx(CTX_FOR_IN); } ; assign_stmts_opt : /* empty */ { $$ = NULL; } | assign_stmts ; // continue only makes sense if there is a CTX_LOOP or CTX_FOR_IN // on the stack cont_stmt : CONTINUE ';' { if(chkctx(CTX_CONTINUE) < 0) swf5error("continue outside loop"); $$ = newBuffer(); bufferWriteOp($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, MAGIC_CONTINUE_NUMBER); } ; // break is possible if there is a CTX_LOOP, CTX_FOR_IN or CTX_SWITCH break_stmt : BREAK ';' { int tmp = chkctx(CTX_BREAK); if(tmp < 0) swf5error("break outside switch / loop"); $$ = newBuffer(); if(tmp) /* break out of a for .. in */ bufferWriteOp($$, SWFACTION_POP); bufferWriteOp($$, SWFACTION_BRANCHALWAYS); bufferWriteS16($$, 2); bufferWriteS16($$, MAGIC_BREAK_NUMBER); } ; urlmethod : /* empty */ { $$ = GETURL_METHOD_NOSEND; } | ',' GET { $$ = GETURL_METHOD_GET; } | ',' POST { $$ = GETURL_METHOD_POST; } | ',' STRING { if(strcmp($2, "GET") == 0) $$ = GETURL_METHOD_GET; else if(strcmp($2, "POST") == 0) $$ = GETURL_METHOD_POST; } ; level : INTEGER { char *lvlstring = (char*) malloc(12*sizeof(char)); sprintf(lvlstring, "_level%d", $1); $$ = newBuffer(); bufferWriteString($$, lvlstring, strlen(lvlstring)+1); free(lvlstring); } | expr { $$ = newBuffer(); bufferWriteString($$, "_level", 7); bufferConcat($$, $1); bufferWriteOp($$, SWFACTION_STRINGCONCAT); } ; void_function_call : IDENTIFIER '(' expr_list ')' { $$ = $3.buffer; bufferWriteInt($$, $3.count); bufferWriteString($$, $1, strlen($1)+1); bufferWriteOp($$, SWFACTION_CALLFUNCTION); bufferWriteOp($$, SWFACTION_POP); free($1); } | DELETE IDENTIFIER { $$ = newBuffer(); bufferWriteString($$, $2, strlen($2)+1); free($2); bufferWriteOp($$, SWFACTION_DELETE); } | DELETE lvalue_expr '.' IDENTIFIER { $$ = $2; // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteString($$, $4, strlen($4)+1); free($4); bufferWriteOp($$, SWFACTION_DELETEVAR); } | DELETE lvalue_expr '[' expr ']' { $$ = $2; // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferConcat($$, $4); // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp($$, SWFACTION_DELETEVAR); } | TRACE '(' expr_or_obj ')' { $$ = $3; bufferWriteOp($$, SWFACTION_TRACE); } | GETURL '(' expr ',' expr urlmethod ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, $6); } | LOADVARIABLES '(' expr ',' expr urlmethod ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, 0xc0+$6); } | LOADVARIABLESNUM '(' expr ',' level urlmethod ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, 0x80+$6); } | LOADMOVIE '(' expr ',' expr urlmethod ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, 0x40+$6); } | LOADMOVIENUM '(' expr ',' level urlmethod ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_GETURL2); bufferWriteS16($$, 1); bufferWriteU8($$, $6); } | CALLFRAME '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_CALLFRAME); bufferWriteS16($$, 0); } /* startDrag(target, lock, [left, right, top, bottom]) */ | STARTDRAG '(' expr ',' expr ')' { $$ = newBuffer(); bufferWriteString($$, "0", 2); /* no constraint */ bufferConcat($$, $5); bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_STARTDRAGMOVIE); } | STARTDRAG '(' expr ',' expr ',' expr ',' expr ',' expr ',' expr ')' { $$ = newBuffer(); bufferConcat($$, $7); bufferConcat($$, $11); bufferConcat($$, $9); bufferConcat($$, $13); bufferWriteString($$, "1", 2); /* has constraint */ bufferConcat($$, $5); bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_STARTDRAGMOVIE); } | STOPDRAG '(' ')' /* no args */ { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_STOPDRAGMOVIE); } /* duplicateMovieClip(target, new, depth) */ | DUPLICATEMOVIECLIP '(' expr ',' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferConcat($$, $7); bufferWriteInt($$, 16384); /* magic number */ bufferWriteOp($$, SWFACTION_ADD); bufferWriteOp($$, SWFACTION_DUPLICATECLIP); } | REMOVEMOVIECLIP '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_REMOVECLIP); } | GETURL1 '(' STRING ',' STRING ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_GETURL); bufferWriteS16($$, strlen($3) + strlen($5) + 2); bufferWriteHardString($$, (byte*)$3, strlen($3)); bufferWriteU8($$, 0); bufferWriteHardString($$, (byte*)$5, strlen($5)); bufferWriteU8($$, 0); } /* v3 actions */ | NEXTFRAME '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_NEXTFRAME); } | PREVFRAME '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_PREVFRAME); } | PLAY '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_PLAY); } | STOP '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_STOP); } | STOPSOUNDS '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_STOPSOUNDS); } | TOGGLEQUALITY '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_TOGGLEQUALITY); } | GOTOFRAME '(' INTEGER ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_GOTOFRAME); bufferWriteS16($$, 2); bufferWriteS16($$, $3); } | GOTOFRAME '(' STRING ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_GOTOLABEL); bufferWriteS16($$, strlen($3)+1); bufferWriteHardString($$, (byte*)$3, strlen($3)+1); free($3); } | GOTOFRAME '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_GOTOEXPRESSION); bufferWriteS16($$, 1); bufferWriteU8($$, 0); } /* XXX - and stop */ | SETTARGET '(' STRING ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_SETTARGET); bufferWriteS16($$, strlen($3)+1); bufferWriteHardString($$, (byte*)$3, strlen($3)+1); free($3); } | SETTARGET '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_SETTARGETEXPRESSION); } ; function_call : IDENTIFIER '(' expr_list ')' { $$ = $3.buffer; bufferWriteInt($$, $3.count); bufferWriteString($$, $1, strlen($1)+1); bufferWriteOp($$, SWFACTION_CALLFUNCTION); free($1); } | EVAL '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_GETVARIABLE); } | GETTIMER '(' ')' { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_GETTIMER); } | RANDOM '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_RANDOM); } | LENGTH '(' expr_or_obj ')' { $$ = $3; bufferWriteOp($$, SWFACTION_STRINGLENGTH); } | INT '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_INT); } | ORD '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_ORD); } | CHR '(' expr ')' { $$ = $3; bufferWriteOp($$, SWFACTION_CHR); } | CONCAT '(' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferWriteOp($$, SWFACTION_STRINGCONCAT); } | SUBSTRING '(' expr ',' expr ',' expr ')' { $$ = $3; bufferConcat($$, $5); bufferConcat($$, $7); bufferWriteOp($$, SWFACTION_SUBSTRING); } | TYPEOF '(' expr_or_obj ')' { $$ = $3; bufferWriteOp($$, SWFACTION_TYPEOF); } ; expr_list : /* empty */ { $$.buffer = newBuffer(); $$.count = 0; } | expr_or_obj { $$.buffer = $1; $$.count = 1; } /* goes backwards. rrgh. */ | expr_list ',' expr_or_obj { Buffer tmp = newBuffer(); bufferConcat(tmp, $3); bufferConcat(tmp, $$.buffer); $$.buffer = tmp; ++$$.count; } ; anon_function_decl : function_init '(' formals_list ')' stmt { $$ = newBuffer(); bufferWriteOp($$, SWFACTION_DEFINEFUNCTION); bufferWriteS16($$, bufferLength($3.buffer) + 5); bufferWriteU8($$, 0); /* empty function name */ bufferWriteS16($$, $3.count); bufferConcat($$, $3.buffer); bufferWriteS16($$, bufferLength($5)); bufferConcat($$, $5); delctx(CTX_FUNCTION); } ; method_call : lvalue_expr '.' identifier '(' expr_list ')' { $$ = $5.buffer; bufferWriteInt($$, $5.count); bufferConcat($$, $1); bufferWriteString($$, $3, strlen($3)+1); bufferWriteOp($$, SWFACTION_CALLMETHOD); free($3); } | lvalue_expr '[' expr ']' '(' expr_list ')' { $$ = $6.buffer; bufferWriteInt($$, $6.count); bufferConcat($$, $1); bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_CALLMETHOD); } ; objexpr : identifier ':' expr_or_obj { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferConcat($$, $3); } ; objexpr_list : objexpr { $$.buffer = $1; $$.count = 1; } | objexpr_list ',' objexpr { bufferConcat($$.buffer, $3); ++$$.count; } ; assignop : "+=" { $$ = SWFACTION_NEWADD; } | "-=" { $$ = SWFACTION_SUBTRACT; } | "*=" { $$ = SWFACTION_MULTIPLY; } | "/=" { $$ = SWFACTION_DIVIDE; } | "%=" { $$ = SWFACTION_MODULO; } | "&=" { $$ = SWFACTION_BITWISEAND; } | "|=" { $$ = SWFACTION_BITWISEOR; } | "^=" { $$ = SWFACTION_BITWISEXOR; } | "<<=" { $$ = SWFACTION_SHIFTLEFT; } | ">>=" { $$ = SWFACTION_SHIFTRIGHT; } | ">>>=" { $$ = SWFACTION_SHIFTRIGHT2; } ; incdecop : "++" { $$ = SWFACTION_INCREMENT; } | "--" { $$ = SWFACTION_DECREMENT; } ; /* integer : '-' INTEGER %prec UMINUS { $$ = -$2; } | INTEGER { $$ = $1; } ; double : '-' DOUBLE %prec UMINUS { $$ = -$2; } | DOUBLE { $$ = $1; } ; */ /* resolves an lvalue into a buffer */ lvalue_expr : lvalue { if($1.obj) { $$ = $1.obj; if($1.ident) bufferConcat($$, $1.ident); else bufferConcat($$, $1.memexpr); bufferWriteOp($$, SWFACTION_GETMEMBER); } else { $$ = $1.ident; bufferWriteOp($$, SWFACTION_GETVARIABLE); } } | function_call | method_call ; /* lvalue - things you can assign to */ lvalue : identifier { $$.ident = newBuffer(); bufferWriteString($$.ident, $1, strlen($1)+1); free($1); $$.obj = 0; $$.memexpr = 0; } | lvalue_expr '.' identifier %prec '.' { $$.obj = $1; $$.ident = newBuffer(); bufferWriteString($$.ident, $3, strlen($3)+1); $$.memexpr = 0; } | lvalue_expr '[' expr ']' %prec '.' { $$.obj = $1; $$.memexpr = $3; $$.ident = 0; } ; /* these leave a value on the stack */ expr : primary | '-' expr %prec UMINUS { $$ = $2; bufferWriteInt($2, -1); bufferWriteOp($2, SWFACTION_MULTIPLY); } | '~' expr %prec UMINUS { $$ = $2; bufferWriteInt($2, 0xffffffff); bufferWriteOp($2, SWFACTION_BITWISEXOR); } | '!' expr { $$ = $2; bufferWriteOp($2, SWFACTION_LOGICALNOT); } | expr "||" expr { $$ = $1; bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($3)+1); bufferWriteOp($$, SWFACTION_POP); bufferConcat($$, $3); } | expr "&&" expr { $$ = $1; bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, SWFACTION_LOGICALNOT); bufferWriteOp($$, SWFACTION_BRANCHIFTRUE); bufferWriteS16($$, 2); bufferWriteS16($$, bufferLength($3)+1); bufferWriteOp($$, SWFACTION_POP); bufferConcat($$, $3); } | expr '*' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_MULTIPLY); } | expr '/' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_DIVIDE); } | expr '%' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_MODULO); } | expr '+' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_NEWADD); } | expr '-' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_SUBTRACT); } | expr '&' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_BITWISEAND); } | expr '|' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_BITWISEOR); } | expr '^' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_BITWISEXOR); } | expr '<' expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_NEWLESSTHAN); } | expr '>' expr { $$ = $3; bufferConcat($$, $1); bufferWriteOp($$, SWFACTION_NEWLESSTHAN); } | expr "<=" expr { $$ = $3; bufferConcat($$, $1); bufferWriteOp($$, SWFACTION_NEWLESSTHAN); bufferWriteOp($$, SWFACTION_LOGICALNOT); } | expr ">=" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_NEWLESSTHAN); bufferWriteOp($1, SWFACTION_LOGICALNOT); } | expr "==" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_NEWEQUALS); } | expr "!=" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_NEWEQUALS); bufferWriteOp($1, SWFACTION_LOGICALNOT); } | expr "<<" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_SHIFTLEFT); } | expr ">>" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_SHIFTRIGHT); } | expr ">>>" expr { bufferConcat($1, $3); bufferWriteOp($1, SWFACTION_SHIFTRIGHT2); } | expr '?' expr ':' expr { bufferWriteOp($1, SWFACTION_BRANCHIFTRUE); bufferWriteS16($1, 2); bufferWriteS16($1, bufferLength($5)+5); bufferConcat($1, $5); bufferWriteOp($1, SWFACTION_BRANCHALWAYS); bufferWriteS16($1, 2); bufferWriteS16($1, bufferLength($3)); bufferConcat($1, $3); } | lvalue '=' expr_or_obj { if($1.obj) /* obj[memexpr] or obj.ident */ { $$ = $1.obj; if($1.ident) bufferConcat($$, $1.ident); else bufferConcat($$, $1.memexpr); bufferConcat($$, $3); bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SETMEMBER); bufferWriteRegister($$, 0); } else /* just ident */ { $$ = $3; bufferWriteOp($$, SWFACTION_DUP); bufferConcat($$, $1.ident); bufferWriteOp($$, SWFACTION_SWAP); bufferWriteOp($$, SWFACTION_SETVARIABLE); } /* tricky case missing here: lvalue ASSIGN expr */ /* like in x = y += z; */ } | expr INSTANCEOF lvalue_expr { $$ = $1; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_INSTANCEOF); } ; expr_or_obj : expr | NEW identifier { $$ = newBuffer(); bufferWriteInt($$, 0); bufferWriteString($$, $2, strlen($2)+1); bufferWriteOp($$, SWFACTION_NEW); } | NEW identifier '(' expr_list ')' { $$ = $4.buffer; bufferWriteInt($$, $4.count); bufferWriteString($$, $2, strlen($2)+1); bufferWriteOp($$, SWFACTION_NEW); } | '[' expr_list ']' { $$ = $2.buffer; bufferWriteInt($$, $2.count); bufferWriteOp($$, SWFACTION_INITARRAY); } | emptybraces { $$ = newBuffer(); bufferWriteInt($$, 0); bufferWriteOp($$, SWFACTION_INITOBJECT); } | '{' objexpr_list '}' { $$ = $2.buffer; bufferWriteInt($$, $2.count); bufferWriteOp($$, SWFACTION_INITOBJECT); } ; primary : function_call | anon_function_decl | method_call | lvalue_expr | incdecop lvalue %prec "++" { if($2.obj) { if($2.ident) // expr . identifier { $$ = $2.obj; bufferWriteOp($$, SWFACTION_DUP); /* a, a */ bufferWriteBuffer($$, $2.ident); /* a, a, i */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a */ bufferConcat($$, $2.ident); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); bufferWriteOp($$, $1); bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SETMEMBER); /* a.i = a.i+1 */ bufferWriteRegister($$, 0); /* a.i+1 */ } else // expr [ expr ] { $$ = $2.memexpr; /* i */ bufferConcat($$, $2.obj); /* i, a */ bufferWriteSetRegister($$, 0); /* ($2.memexpr can use reg0) */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i */ bufferWriteOp($$, SWFACTION_DUP); /* a, i, i */ bufferWriteRegister($$, 0); /* a, i, i, a */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp($$, $1); /* a, i, a[i]+1 */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ bufferWriteRegister($$, 0); /* a[i]+1 */ } } else // identifier { $$ = newBuffer(); bufferWriteBuffer($$, $2.ident); bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp($$, $1); bufferWriteOp($$, SWFACTION_DUP); bufferConcat($$, $2.ident); bufferWriteOp($$, SWFACTION_SWAP); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } | lvalue incdecop %prec POSTFIX { if($1.obj) { if($1.ident) { $$ = $1.obj; /* a */ bufferWriteOp($$, SWFACTION_DUP); /* a, a */ bufferWriteBuffer($$, $1.ident); /* a, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SWAP); /* a.i, a */ bufferConcat($$, $1.ident); /* a.i, a, i */ bufferWriteRegister($$, 0); /* a.i, a, i, a.i */ bufferWriteOp($$, $2); /* a.i, a, i, a.i+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); } else { $$ = $1.memexpr; bufferConcat($$, $1.obj); /* i, a */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SWAP); /* a, i */ bufferWriteOp($$, SWFACTION_DUP); /* a, i, i */ bufferWriteRegister($$, 0); /* a, i, i, a */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, $2); /* a, i, a[i]+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); bufferWriteRegister($$, 0); /* a[i] */ } } else { $$ = newBuffer(); bufferWriteBuffer($$, $1.ident); bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, $2); bufferConcat($$, $1.ident); bufferWriteOp($$, SWFACTION_SWAP); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } | '(' expr ')' { $$ = $2; } | '-' INTEGER %prec UMINUS { $$ = newBuffer(); bufferWriteInt($$, -$2); } | INTEGER { $$ = newBuffer(); bufferWriteInt($$, $1); } | '-' DOUBLE %prec UMINUS { $$ = newBuffer(); bufferWriteDouble($$, -$2); } | DOUBLE { $$ = newBuffer(); bufferWriteDouble($$, $1); } | BOOLEAN { $$ = newBuffer(); bufferWriteBoolean($$, $1); } | NULLVAL { $$ = newBuffer(); bufferWriteNull($$); } | STRING { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); free($1); } ; init_vars : init_var | init_vars ',' init_var { $$ = $1; bufferConcat($$, $3); } ; init_var : identifier '=' expr_or_obj { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_VAREQUALS); } | identifier { $$ = newBuffer(); bufferWriteString($$, $1, strlen($1)+1); bufferWriteOp($$, SWFACTION_VAR); } ; assign_stmt : ASM '{' { asmBuffer = newBuffer(); } opcode_list '}' { $$ = asmBuffer; } | VAR init_vars { $$ = $2; } | void_function_call | function_call { $$ = $1; bufferWriteOp($$, SWFACTION_POP); } | method_call { $$ = $1; bufferWriteOp($$, SWFACTION_POP); } | incdecop lvalue %prec INCR { if($2.obj) { if($2.ident) { $$ = $2.obj; /* a */ bufferWriteOp($$, SWFACTION_DUP); /* a, a */ bufferWriteBuffer($$, $2.ident); /* a, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteOp($$, $1); /* a, a.i+1 */ bufferConcat($$, $2.ident); /* a, a.i+1, i */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a.i+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a.i = a.i+1 */ } else { /* weird contortions so that $2.memexpr can use reg 0 */ $$ = $2.memexpr; /* i */ bufferConcat($$, $2.obj); /* i, a */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SWAP); /* a, i */ bufferWriteOp($$, SWFACTION_DUP); /* a, i, i */ bufferWriteRegister($$, 0); /* a, i, i, a */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp($$, $1); /* a, i, a[i]+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ } } else { $$ = $2.ident; bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp($$, $1); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } | lvalue incdecop %prec POSTFIX { if($1.obj) { if($1.ident) { $$ = $1.obj; /* a */ bufferWriteOp($$, SWFACTION_DUP); /* a, a */ bufferWriteBuffer($$, $1.ident); /* a, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteOp($$, $2); /* a, a.i+1 */ bufferConcat($$, $1.ident); /* a, a.i+1, i */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a.i+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a.i = a.i+1 */ } else { /* weird contortions so that $1.memexpr can use reg 0 */ $$ = $1.memexpr; /* i */ bufferConcat($$, $1.obj); /* i, a */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SWAP); /* a, i */ bufferWriteOp($$, SWFACTION_DUP); /* a, i, i */ bufferWriteRegister($$, 0); /* a, i, i, a */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp($$, $2); /* a, i, a[i]+1 */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ } } else { $$ = $1.ident; bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp($$, $2); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } | lvalue '=' expr_or_obj { if($1.obj) { $$ = $1.obj; if($1.ident) bufferConcat($$, $1.ident); else bufferConcat($$, $1.memexpr); bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_SETMEMBER); } else { $$ = $1.ident; bufferConcat($$, $3); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } | lvalue assignop expr { if($1.obj) { if($1.ident) { $$ = $1.obj; /* a */ bufferWriteOp($$, SWFACTION_DUP); /* a, a */ bufferWriteBuffer($$, $1.ident); /* a, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, a.i */ bufferConcat($$, $3); /* a, a.i, v */ bufferWriteOp($$, $2); /* a, a.i+v */ bufferConcat($$, $1.ident); /* a, a.i+v, i */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a.i+v */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a.i = a.i+v */ } else { $$ = $1.memexpr; /* i */ bufferConcat($$, $1.obj); /* i, a */ bufferWriteSetRegister($$, 0); bufferWriteOp($$, SWFACTION_SWAP); /* a, i */ bufferWriteOp($$, SWFACTION_DUP); /* a, i, i */ bufferWriteRegister($$, 0); /* a, i, i, a */ bufferWriteOp($$, SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp($$, SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferConcat($$, $3); /* a, i, a[i], v */ bufferWriteOp($$, $2); /* a, i, a[i]+v */ bufferWriteOp($$, SWFACTION_SETMEMBER); /* a[i] = a[i]+v */ } } else { $$ = $1.ident; bufferWriteOp($$, SWFACTION_DUP); bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferConcat($$, $3); bufferWriteOp($$, $2); bufferWriteOp($$, SWFACTION_SETVARIABLE); } } ; /* assembler stuff */ opcode_list : opcode | opcode_list opcode { $$ = $1 + $2; } ; with : WITH { $$ = bufferWriteOp(asmBuffer, SWFACTION_WITH); } opcode_list END { $$ = $2 + $3; bufferPatchLength(asmBuffer, $3); } ; push_item : STRING { $$ = bufferWriteConstantString(asmBuffer,(byte*) $1, strlen($1)+1); } | INTEGER { bufferWriteU8(asmBuffer, PUSH_INT); $$ = bufferWriteInt(asmBuffer, $1)+1; } | DOUBLE { bufferWriteU8(asmBuffer, PUSH_DOUBLE); $$ = bufferWriteDouble(asmBuffer, $1)+1; } | BOOLEAN { bufferWriteU8(asmBuffer, PUSH_BOOLEAN); $$ = bufferWriteU8(asmBuffer, $1)+1; } | NULLVAL { $$ = bufferWriteU8(asmBuffer, PUSH_NULL); } | REGISTER { bufferWriteU8(asmBuffer, PUSH_REGISTER); $$ = bufferWriteU8(asmBuffer, (char)atoi($1))+1; } ; push_list : push_item { $$ = $1; } | push_list ',' push_item { $$ += $3; } ; opcode : PUSH { $$ = bufferWriteOp(asmBuffer, SWFACTION_PUSHDATA); $$ += bufferWriteS16(asmBuffer, 0); } push_list { $$ = $2 + $3; bufferPatchLength(asmBuffer, $3); } | with | SETREGISTER REGISTER { $$ = bufferWriteOp(asmBuffer, SWFACTION_SETREGISTER); $$ += bufferWriteS16(asmBuffer, 1); $$ += bufferWriteU8(asmBuffer, (char)atoi($2)); } /* no args */ | CALLFUNCTION { $$ = bufferWriteOp(asmBuffer, SWFACTION_CALLFUNCTION); } | RETURN { $$ = bufferWriteOp(asmBuffer, SWFACTION_RETURN); } | CALLMETHOD { $$ = bufferWriteOp(asmBuffer, SWFACTION_CALLMETHOD); } | AND { $$ = bufferWriteOp(asmBuffer, SWFACTION_BITWISEAND); } | OR { $$ = bufferWriteOp(asmBuffer, SWFACTION_BITWISEOR); } | XOR { $$ = bufferWriteOp(asmBuffer, SWFACTION_BITWISEXOR); } | MODULO { $$ = bufferWriteOp(asmBuffer, SWFACTION_MODULO); } | ADD { $$ = bufferWriteOp(asmBuffer, SWFACTION_NEWADD); } | LESSTHAN { $$ = bufferWriteOp(asmBuffer, SWFACTION_NEWLESSTHAN); } | EQUALS { $$ = bufferWriteOp(asmBuffer, SWFACTION_NEWEQUALS); } | INC { $$ = bufferWriteOp(asmBuffer, SWFACTION_INCREMENT); } | DEC { $$ = bufferWriteOp(asmBuffer, SWFACTION_DECREMENT); } | TYPEOF { $$ = bufferWriteOp(asmBuffer, SWFACTION_TYPEOF); } | INSTANCEOF { $$ = bufferWriteOp(asmBuffer, SWFACTION_INSTANCEOF); } | ENUMERATE { $$ = bufferWriteOp(asmBuffer, SWFACTION_ENUMERATE); } | DELETE { $$ = bufferWriteOp(asmBuffer, SWFACTION_DELETE); } | NEW { $$ = bufferWriteOp(asmBuffer, SWFACTION_NEW); } | INITARRAY { $$ = bufferWriteOp(asmBuffer, SWFACTION_INITARRAY); } | INITOBJECT { $$ = bufferWriteOp(asmBuffer, SWFACTION_INITOBJECT); } | GETMEMBER { $$ = bufferWriteOp(asmBuffer, SWFACTION_GETMEMBER); } | SETMEMBER { $$ = bufferWriteOp(asmBuffer, SWFACTION_SETMEMBER); } | SHIFTLEFT { $$ = bufferWriteOp(asmBuffer, SWFACTION_SHIFTLEFT); } | SHIFTRIGHT { $$ = bufferWriteOp(asmBuffer, SWFACTION_SHIFTRIGHT); } | SHIFTRIGHT2 { $$ = bufferWriteOp(asmBuffer, SWFACTION_SHIFTRIGHT2); } | VAR { $$ = bufferWriteOp(asmBuffer, SWFACTION_VAR); } | VAREQUALS { $$ = bufferWriteOp(asmBuffer, SWFACTION_VAREQUALS); } /* f4 ops */ | OLDADD { $$ = bufferWriteOp(asmBuffer, SWFACTION_ADD); } | SUBTRACT { $$ = bufferWriteOp(asmBuffer, SWFACTION_SUBTRACT); } | MULTIPLY { $$ = bufferWriteOp(asmBuffer, SWFACTION_MULTIPLY); } | DIVIDE { $$ = bufferWriteOp(asmBuffer, SWFACTION_DIVIDE); } | OLDEQUALS { $$ = bufferWriteOp(asmBuffer, SWFACTION_EQUAL); } | OLDLESSTHAN { $$ = bufferWriteOp(asmBuffer, SWFACTION_LESSTHAN); } | LOGICALAND { $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALAND); } | LOGICALOR { $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALOR); } | NOT { $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALNOT); } | STRINGEQ { $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGEQ); } | STRINGLENGTH { $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGLENGTH); } | SUBSTRING { $$ = bufferWriteOp(asmBuffer, SWFACTION_SUBSTRING); } | INT { $$ = bufferWriteOp(asmBuffer, SWFACTION_INT); } | DUP { $$ = bufferWriteOp(asmBuffer, SWFACTION_DUP); } | SWAP { $$ = bufferWriteOp(asmBuffer, SWFACTION_SWAP); } | POP { $$ = bufferWriteOp(asmBuffer, SWFACTION_POP); } | GETVARIABLE { $$ = bufferWriteOp(asmBuffer, SWFACTION_GETVARIABLE); } | SETVARIABLE { $$ = bufferWriteOp(asmBuffer, SWFACTION_SETVARIABLE); } | SETTARGETEXPRESSION { $$ = bufferWriteOp(asmBuffer, SWFACTION_SETTARGETEXPRESSION); } | CONCAT { $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGCONCAT); } | DUPLICATEMOVIECLIP { $$ = bufferWriteOp(asmBuffer, SWFACTION_DUPLICATECLIP); } | REMOVEMOVIECLIP { $$ = bufferWriteOp(asmBuffer, SWFACTION_REMOVECLIP); } | TRACE { $$ = bufferWriteOp(asmBuffer, SWFACTION_TRACE); } | STRINGLESSTHAN { $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGCOMPARE); } | RANDOM { $$ = bufferWriteOp(asmBuffer, SWFACTION_RANDOM); } | MBLENGTH { $$ = bufferWriteOp(asmBuffer, SWFACTION_MBLENGTH); } | ORD { $$ = bufferWriteOp(asmBuffer, SWFACTION_ORD); } | CHR { $$ = bufferWriteOp(asmBuffer, SWFACTION_CHR); } | GETTIMER { $$ = bufferWriteOp(asmBuffer, SWFACTION_GETTIMER); } | MBSUBSTRING { $$ = bufferWriteOp(asmBuffer, SWFACTION_MBSUBSTRING); } | MBORD { $$ = bufferWriteOp(asmBuffer, SWFACTION_MBORD); } | MBCHR { $$ = bufferWriteOp(asmBuffer, SWFACTION_MBCHR); } /* with args */ | BRANCHALWAYS STRING { $$ = bufferWriteOp(asmBuffer, SWFACTION_BRANCHALWAYS); $$ += bufferWriteS16(asmBuffer, 2); $$ += bufferBranchTarget(asmBuffer, $2); } | BRANCHIFTRUE STRING { $$ = bufferWriteOp(asmBuffer, SWFACTION_BRANCHIFTRUE); $$ += bufferWriteS16(asmBuffer, 2); $$ += bufferBranchTarget(asmBuffer, $2); } ; %% swftools_0.9.2+git20130725.orig/lib/action/swf5compiler.flex0000644000175000017500000002722012216332640022650 0ustar gawaingawain%{ #include #include #include "compile.h" #include "action.h" #include "blocks/error.h" #include "swf5compiler.tab.h" /* defines token types */ static int swf5debug; static const char *lexBuffer = NULL; static int lexBufferLen = 0; static int sLineNumber = 0; static char szLine[1024]; static char msgbufs[2][1024] = { {0}, {0} }, *msgline = {0}; static int column = 0; static void comment(); static void comment1(); static void count(); static void countline(); static void warning(char *msg); #define YY_INPUT(buf,result,max_size) result=lexBufferInput(buf, max_size) /* thanks to the prolific and brilliant Raff: */ static int lexBufferInput(char *buf, int max_size) { int l = lexBufferLen > max_size ? max_size : lexBufferLen; if (lexBufferLen <= 0) return YY_NULL; memcpy(buf, lexBuffer, l); lexBuffer += l; lexBufferLen -= l; return l; } /* very inefficient method of unescaping strings */ static void unescape(char *buf) { char *p, *n; n = p = buf; while(*p) { if(*p == '\\') { switch(p[1]) { case 'b' : *n++ = '\b'; break; case 'f' : *n++ = '\f'; break; case 'n' : *n++ = '\n'; break; case 'r' : *n++ = '\r'; break; case 't' : *n++ = '\t'; break; case 'x' : case 'u' : warning("unsupported escape sequence"); } p+=2; } else { *n++ = *p++; } } *n = 0; } void swf5ParseInit(const char *script, int debug) { checkByteOrder(); yyrestart(NULL); swf5debug = debug; lexBuffer = script; lexBufferLen = strlen(script); sLineNumber = 0; column = 0; msgline = msgbufs[0]; } %} %s asm %{ // forward declaration needed by the following function #ifndef YY_PROTO #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif #endif static void yyunput YY_PROTO(( int c, char *buf_ptr )); void do_unput5(const char c) { unput(c); } %} DIGIT [0-9] ID [a-zA-Z_][a-zA-Z0-9_]* %% 0x[0-9a-fA-F]+ { count(); swf5lval.intVal = strtoul(yytext, NULL, 0); return INTEGER; } 0[0-7]+ { count(); swf5lval.intVal = strtoul(yytext, NULL, 0); return INTEGER; } {DIGIT}+ { count(); swf5lval.intVal = atoi(yytext); return INTEGER; } {DIGIT}+"."{DIGIT}* { count(); swf5lval.doubleVal = atof(yytext); return DOUBLE; } true { count(); swf5lval.intVal = 1; return BOOLEAN; } false { count(); swf5lval.intVal = 0; return BOOLEAN; } null { count(); return NULLVAL; } break { count(); return BREAK; } continue { count(); return CONTINUE; } function { count(); return FUNCTION; } else { count(); return ELSE; } switch { count(); return SWITCH; } case { count(); return CASE; } default { count(); return DEFAULT; } for { count(); return FOR; } in { count(); return IN; } if { count(); return IF; } while { count(); return WHILE; } do { count(); return DO; } var { count(); return VAR; } new { count(); return NEW; } delete { count(); return DELETE; } return { count(); return RETURN; } with { count(); return WITH; } asm { count(); BEGIN(asm); return ASM; } eval { count(); return EVAL; } typeof { count(); return TYPEOF; } instanceof { count(); return INSTANCEOF; } /* legacy functions */ random { count(); return RANDOM; } getTimer { count(); return GETTIMER; } length { count(); return LENGTH; } concat { count(); return CONCAT; } substr { count(); return SUBSTR; } trace { count(); return TRACE; } int { count(); return INT; } ord { count(); return ORD; } chr { count(); return CHR; } getURL { count(); return GETURL; } getURL1 { count(); return GETURL1; } nextFrame { count(); return NEXTFRAME; } prevFrame { count(); return PREVFRAME; } play { count(); return PLAY; } stop { count(); return STOP; } toggleQuality { count(); return TOGGLEQUALITY; } stopSounds { count(); return STOPSOUNDS; } callFrame { count(); return CALLFRAME; } gotoFrame { count(); return GOTOFRAME; } setTarget { count(); return SETTARGET; } loadVariables { count(); return LOADVARIABLES; } loadMovie { count(); return LOADMOVIE; } loadVariablesNum { count(); return LOADVARIABLESNUM; } loadMovieNum { count(); return LOADMOVIENUM; } duplicateMovieClip { count(); return DUPLICATEMOVIECLIP; } removeMovieClip { count(); return REMOVEMOVIECLIP; } /* assembler ops */ { dup { count(); return DUP; } swap { count(); return SWAP; } pop { count(); return POP; } push { count(); return PUSH; } setregister { count(); return SETREGISTER; } callfunction { count(); return CALLFUNCTION; } callmethod { count(); return CALLMETHOD; } and { count(); return AND; } or { count(); return OR; } xor { count(); return XOR; } modulo { count(); return MODULO; } add { count(); return ADD; } newadd { count(); return ADD; } lessthan { count(); return LESSTHAN; } newlessthan { count(); return LESSTHAN; } equals { count(); return EQUALS; } newequals { count(); return EQUALS; } inc { count(); return INC; } dec { count(); return DEC; } enumerate { count(); return ENUMERATE; } initobject { count(); return INITOBJECT; } initarray { count(); return INITARRAY; } getmember { count(); return GETMEMBER; } setmember { count(); return SETMEMBER; } shiftleft { count(); return SHIFTLEFT; } shiftright { count(); return SHIFTRIGHT; } shiftright2 { count(); return SHIFTRIGHT2; } varequals { count(); return VAREQUALS; } oldadd { count(); return OLDADD; } subtract { count(); return SUBTRACT; } multiply { count(); return MULTIPLY; } divide { count(); return DIVIDE; } oldequals { count(); return OLDEQUALS; } oldlessthan { count(); return OLDLESSTHAN; } logicaland { count(); return LOGICALAND; } logicalor { count(); return LOGICALOR; } not { count(); return NOT; } stringeq { count(); return STRINGEQ; } stringlength { count(); return STRINGLENGTH; } substring { count(); return SUBSTRING; } getvariable { count(); return GETVARIABLE; } setvariable { count(); return SETVARIABLE; } settargetexpr { count(); return SETTARGETEXPRESSION; } startdrag { count(); return STARTDRAG; } stopdrag { count(); return STOPDRAG; } stringlessthan { count(); return STRINGLESSTHAN; } mblength { count(); return MBLENGTH; } mbsubstring { count(); return MBSUBSTRING; } mbord { count(); return MBORD; } mbchr { count(); return MBCHR; } branch { count(); return BRANCHALWAYS; } branchalways { count(); return BRANCHALWAYS; } branchiftrue { count(); return BRANCHIFTRUE; } post { count(); return POST; } get { count(); return GET; } end { count(); return END; } } r\:{DIGIT}+ { count(); swf5lval.str = strdup(yytext+2); return REGISTER; } {ID} { count(); swf5lval.str = strdup(yytext); return IDENTIFIER; } \"(\\.|[^\\"])*\" { count(); swf5lval.str = strdup(yytext+1); swf5lval.str[strlen(swf5lval.str)-1]=0; unescape(swf5lval.str); return STRING; } \'(\\.|[^\\'])*\' { count(); swf5lval.str = strdup(yytext+1); swf5lval.str[strlen(swf5lval.str)-1]=0; unescape(swf5lval.str); return STRING; } \"(\\.|[^\\"])*$ { count(); swf5lval.str = strdup(""); warning("Unterminated string!"); return STRING; } \'(\\.|[^\\'])*$ { count(); swf5lval.str = strdup(""); warning("Unterminated string!"); return STRING; } "/*" { count(); comment(); } "//" { count(); comment1(); } [ \t\v\f] { count(); } "++" { count(); return INCR; } "--" { count(); return DECR; } "<=" { count(); return LE; } ">=" { count(); return GE; } "==" { count(); return EQ; } "!=" { count(); return NE; } "&&" { count(); return LAN; } "||" { count(); return LOR; } "*=" { count(); return MEQ; } "/=" { count(); return DEQ; } "+=" { count(); return IEQ; } "-=" { count(); return SEQ; } "&=" { count(); return AEQ; } "|=" { count(); return OEQ; } "<<" { count(); return SHL; } ">>" { count(); return SHR; } ">>>" { count(); return SHR2; } "<<=" { count(); return SHLEQ; } ">>=" { count(); return SHREQ; } ">>>=" { count(); return SHR2EQ; } "<" { count(); return '<'; } ">" { count(); return '>'; } ";" { count(); return ';'; } "=" { count(); return '='; } "+" { count(); return '+'; } "-" { count(); return '-'; } "&" { count(); return '&'; } "|" { count(); return '|'; } "^" { count(); return '^'; } "*" { count(); return '*'; } "/" { count(); return '/'; } "%" { count(); return '%'; } "!" { count(); return '!'; } "(" { count(); return '('; } ")" { count(); return ')'; } "[" { count(); return '['; } "]" { count(); return ']'; } "{" { count(); return '{'; } "}" { count(); BEGIN(0); return '}'; } "," { count(); return ','; } "." { count(); return '.'; } "?" { count(); return '?'; } ":" { count(); return ':'; } "~" { count(); return '~'; } \r?\n { count(); strcpy(szLine, yytext + 1); countline(); yyless(1); } . SWF_error("Unrecognized character: %s\n", yytext); %% static int getinput() { #ifdef __cplusplus return yyinput(); #else return input(); #endif } int swf5wrap() { return 1; } static void countline() { if(sLineNumber != 0) msgline[column] = 0; ++sLineNumber; column = 0; msgline = msgbufs[sLineNumber & 1]; } static int LineNumber(void) { return (sLineNumber + 1); } static int ColumnNumber(void) { return column; } static char *LineText(void) { msgline[column] = 0; return msgline; } static void comment() { // Handle block comments int c, c1; loop: // We have the start of a comment so look skip everything up to the // end of the comment character while ((c = getinput()) != '*' && c != EOF) { if(column < 1023) msgline[column] = c; ++column; // keep the line number in synch if (c == '\n') { // start the output (matches the algorithim in the lexx above) countline(); } if (swf5debug) putchar(c); } // is this the end of comment character if ((c1 = getinput()) != '/' && c != EOF) { // false start as this was no end of comment do_unput5(c1); goto loop; } // write out the start of the end of comment if (c != EOF) if (swf5debug) putchar(c); // write out the end of the end of comment if (c1 != EOF) if (swf5debug) putchar(c1); } static void comment1() { // Handle comment of type 1 (ie '//') int c; // this is a line comment while ((c = getinput()) != '\n' && c != EOF) { if (swf5debug) putchar(c); if(column < 1023) msgline[column] = c; ++column; }; // keep the line number in synch if (c == '\n') { if (swf5debug) putchar(c); countline(); } } static void count(void) { int n; // Count the characters to maintain the current column position if (yytext[0] == '\n') { if (swf5debug) printf("\n"); } else { if (swf5debug) printf("%s", yytext); for(n=0; n #include #include #include #include "libming.h" #include "compile.h" #include "action.h" #include "actioncompiler.h" static void print_error(const char*format,...) { char buf[1024]; int len; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); len = strlen(buf); while(len>0 && buf[len-1]=='\n') len--; buf[len] = '\n'; buf[len+1] = 0; fprintf(stderr, "error: %s", buf); } static void print_warn(const char*format,...) { char buf[1024]; int len; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); len = strlen(buf); while(len>0 && buf[len-1]=='\n') len--; buf[len] = '\n'; buf[len+1] = 0; printf("%s", buf); fprintf(stderr, "warning: %s", buf); } int compileSWFActionCode(const char *script, int version, void**data, int*len) { Buffer b; *data = 0; *len = 0; SWF_versionNum = version; if(!SWF_error) SWF_error = print_error; if(!SWF_warn) SWF_warn = print_warn; /* yydebug = 1; */ if(version == 4) { swf4ParseInit(script, 0); if(swf4parse((void *)&b) != 0) return 0; } else { swf5ParseInit(script, 0); if(swf5parse((void *)&b) != 0) return 0; } *data = b->buffer; *len = bufferLength(b); //destroyBuffer(b); free(b); return 1; } swftools_0.9.2+git20130725.orig/lib/action/assembler.h0000644000175000017500000000107512216332640021477 0ustar gawaingawain/* assembler.h * * $Id: assembler.h,v 1.1 2004/05/08 17:11:33 kramm Exp $ * * Notice: This header file contains declarations of functions and types that * are just used internally. All library functions and types that are supposed * to be publicly accessable are defined in ./src/ming.h. */ #ifndef SWF_ASSEMBLER_H_INCLUDED #define SWF_ASSEMBLER_H_INCLUDED #include "ming.h" #include "compile.h" extern Buffer asmBuffer; void bufferPatchLength(Buffer buffer, int len); int bufferBranchTarget(Buffer buffer, char *label); #endif /* SWF_ASSEMBLER_H_INCLUDED */ swftools_0.9.2+git20130725.orig/lib/action/assembler.c0000644000175000017500000000444112216332640021472 0ustar gawaingawain/* Ming, an SWF output library Copyright (C) 2002 Opaque Industries - http://www.opaque.net/ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "assembler.h" #include "compile.h" #include "action.h" int len; Buffer asmBuffer; int nLabels; struct label { char *name; int offset; }; struct label labels[256]; static int findLabel(char *label) { int i; for ( i=0; ibuffer; while ( i < len ) { if ( output[i] & 0x80 ) /* then it's a multibyte instruction */ { if ( output[i] == SWFACTION_BRANCHALWAYS || output[i] == SWFACTION_BRANCHIFTRUE ) { int target, offset; i += 3; /* plus instruction plus two-byte length */ target = output[i]; offset = labels[target].offset - (i+2); output[i] = offset & 0xff; output[++i] = (offset>>8) & 0xff; ++i; } else { ++i; l = output[i]; ++i; l += output[i]<<8; i += l+1; } } else ++i; } } /* * Local variables: * tab-width: 2 * c-basic-offset: 2 * End: */ swftools_0.9.2+git20130725.orig/lib/action/listaction.c0000755000175000017500000002571112216332640021674 0ustar gawaingawain#include #include #include #include "action.h" #include "compile.h" #define print(x) {fputs(x,stdout);} int gIndent; #define INDENT_LEVEL 2 void println(const char *s, ...) { va_list ap; int n = gIndent*INDENT_LEVEL; while(n-- > 0) putchar(' '); va_start(ap, s); vprintf(s, ap); va_end(ap); putchar('\n'); } int fileOffset = 0; int readUInt8(Buffer f) { return f->buffer[fileOffset++]; } int readSInt8(Buffer f) { return (signed char)readUInt8(f); } int readSInt16(Buffer f) { return readUInt8(f) + readSInt8(f)*256; } int readUInt16(Buffer f) { return readUInt8(f) + (readUInt8(f)<<8); } long readSInt32(Buffer f) { return (long)readUInt8(f) + (readUInt8(f)<<8) + (readUInt8(f)<<16) + (readUInt8(f)<<24); } unsigned long readUInt32(Buffer f) { return (unsigned long)(readUInt8(f) + (readUInt8(f)<<8) + (readUInt8(f)<<16) + (readUInt8(f)<<24)); } double readDouble(Buffer f) { double d; unsigned char *p = (unsigned char *)&d; p[4] = readUInt8(f); p[5] = readUInt8(f); p[6] = readUInt8(f); p[7] = readUInt8(f); p[0] = readUInt8(f); p[1] = readUInt8(f); p[2] = readUInt8(f); p[3] = readUInt8(f); return d; } char *readString(Buffer f) { int len = 0, buflen = 256; char c, *buf, *p; buf = (char *)malloc(sizeof(char)*256); p = buf; while((c=(char)readUInt8(f)) != '\0') { if(len==buflen) { buf = (char *)realloc(buf, sizeof(char)*(buflen+256)); buflen += 256; p = buf+len; } *(p++) = c; ++len; } *p = 0; return buf; } void dumpBytes(Buffer f, int length) { int j=0, i, k; unsigned char buf[16]; if(length==0) return; for(;;) { for(i=0; i<16; ++i) { printf("%02x ", buf[i] = readUInt8(f)); ++j; if(j==length) break; } if(j==length) { for(k=i+1; k<16; ++k) print(" "); ++i; } print(" "); for(k=0; k 31) && (buf[k] < 128)) putchar(buf[k]); else putchar('.'); putchar('\n'); if(j==length) break; } putchar('\n'); putchar('\n'); } void printDoAction(Buffer f, int length); char *dictionary[256]; int printActionRecord(Buffer f) { int length = 0, type; printf("(%i)\t", fileOffset); type = readUInt8(f); if((type&0x80) == 0x80) length = readUInt16(f); switch(type) { case SWFACTION_ADD: println("Add"); break; case SWFACTION_SUBTRACT: println("Subtract"); break; case SWFACTION_MULTIPLY: println("Multiply"); break; case SWFACTION_DIVIDE: println("Divide"); break; case SWFACTION_EQUAL: println("Equals"); break; case SWFACTION_LESSTHAN: println("Less Than"); break; case SWFACTION_LOGICALAND: println("And"); break; case SWFACTION_LOGICALOR: println("Or"); break; case SWFACTION_LOGICALNOT: println("Not"); break; case SWFACTION_STRINGEQ: println("String eq"); break; case SWFACTION_STRINGLENGTH: println("String Length"); break; case SWFACTION_SUBSTRING: println("Substring"); break; case SWFACTION_POP: println("Pop"); break; case SWFACTION_INT: println("Int"); break; case SWFACTION_GETVARIABLE: println("Get Variable"); break; case SWFACTION_SETVARIABLE: println("Set Variable"); break; case SWFACTION_SETTARGETEXPRESSION: println("Set Target Expression"); break; case SWFACTION_STRINGCONCAT: println("String Concat"); break; case SWFACTION_GETPROPERTY: println("Get Property"); break; case SWFACTION_SETPROPERTY: println("Set Property"); break; case SWFACTION_DUPLICATECLIP: println("Duplicate Clip"); break; case SWFACTION_REMOVECLIP: println("Remove Clip"); break; case SWFACTION_TRACE: println("Trace"); break; case SWFACTION_STARTDRAGMOVIE: println("Start Drag Movie"); break; case SWFACTION_STOPDRAGMOVIE: println("Stop Drag Movie"); break; case SWFACTION_STRINGCOMPARE: println("String Compare"); break; case SWFACTION_RANDOM: println("Random"); break; case SWFACTION_MBLENGTH: println("String MB Length"); break; case SWFACTION_ORD: println("Ord"); break; case SWFACTION_CHR: println("Chr"); break; case SWFACTION_GETTIMER: println("Get Timer"); break; case SWFACTION_MBSUBSTRING: println("MB Substring"); break; case SWFACTION_MBORD: println("MB Ord"); break; case SWFACTION_MBCHR: println("MB Chr"); break; case SWFACTION_NEXTFRAME: println("Next Frame"); break; case SWFACTION_PREVFRAME: println("Previous Frame"); break; case SWFACTION_PLAY: println("Play"); break; case SWFACTION_STOP: println("Stop"); break; case SWFACTION_TOGGLEQUALITY: println("Toggle Quality"); break; case SWFACTION_STOPSOUNDS: println("Stop Sounds"); break; /* ops with args */ case SWFACTION_PUSHDATA: { int type; int start = fileOffset; while(fileOffset < start+length) { switch(type = readUInt8(f)) { case 0: /* string */ println("Push String: %s", readString(f)); break; case 1: /* property */ readUInt16(f); /* always 0? */ println("Push Property: %04x", readUInt16(f)); break; case 2: /* null */ println("Push NULL"); break; case 3: /* ??? */ println("Push type 3- ??"); break; case 4: println("Push register %i", readUInt8(f)); break; case 5: if(readUInt8(f)) println("Push true"); else println("Push false"); break; case 6: /* double */ println("Push %f", readDouble(f)); break; case 7: /* int */ println("Push %i", readSInt32(f)); break; case 8: /* dictionary */ println("Push \"%s\"", dictionary[readUInt8(f)]); break; case 9: /* dictionary */ println("Push \"%s\"", dictionary[readSInt16(f)]); default: println("unknown push type: %i", type); } } break; } case SWFACTION_GOTOFRAME: println("Goto Frame %i", readUInt16(f)); break; case SWFACTION_GETURL: { char *url = readString(f); println("Get URL \"%s\" target \"%s\"", url, readString(f)); break; } case SWFACTION_WAITFORFRAMEEXPRESSION: println("Wait For Frame Expression, skip %i\n", readUInt8(f)); break; case SWFACTION_BRANCHALWAYS: println("Branch Always %i", readSInt16(f)); break; case SWFACTION_GETURL2: { int flags = readUInt8(f); const char *op = (flags & 0x80) ? "Get URL2 (loadvariables)" : "Get URL2"; const char *tgt = (flags & 0x40) ? " into target" : ""; switch(flags & 0x03) { case 0: println("%s%s (Don't send)", op, tgt); break; case 1: println("%s%s (GET)", op, tgt); break; case 2: println("%s%s (POST)", op, tgt); break; } } break; case SWFACTION_BRANCHIFTRUE: println("Branch If True %i", readSInt16(f)); break; case SWFACTION_CALLFRAME: println("Call Frame"); dumpBytes(f, length); break; case SWFACTION_GOTOEXPRESSION: print("Goto Expression"); if(readUInt8(f) == 1) printf(" and Play\n"); else printf(" and Stop\n"); break; case SWFACTION_WAITFORFRAME: { int frame = readUInt16(f); println("Wait for frame %i else skip %i", frame, readUInt8(f)); break; } case SWFACTION_SETTARGET: println("Set Target %s", readString(f)); break; case SWFACTION_GOTOLABEL: println("Goto Label %s", readString(f)); break; case SWFACTION_END: return 0; break; /* f5 ops */ case SWFACTION_DELETE: println("Delete"); break; case SWFACTION_VAR: println("Var"); break; case SWFACTION_VAREQUALS: println("Var assign"); break; case SWFACTION_INITARRAY: println("Init array"); break; case SWFACTION_INITOBJECT: println("Init object"); break; case SWFACTION_CALLFUNCTION: println("call function"); break; case SWFACTION_RETURN: println("return"); break; case SWFACTION_MODULO: println("modulo"); break; case SWFACTION_NEW: println("new"); break; case SWFACTION_TYPEOF: println("typeof"); break; case SWFACTION_NEWADD: println("new add"); break; case SWFACTION_NEWLESSTHAN: println("new less than"); break; case SWFACTION_NEWEQUALS: println("new equals"); break; case SWFACTION_DUP: println("dup"); break; case SWFACTION_SWAP: println("swap"); break; case SWFACTION_GETMEMBER: println("get member"); break; case SWFACTION_SETMEMBER: println("set member"); break; case SWFACTION_INCREMENT: println("increment"); break; case SWFACTION_CALLMETHOD: println("call method"); break; case SWFACTION_BITWISEAND: println("bitwise and"); break; case SWFACTION_BITWISEOR: println("bitwise or"); break; case SWFACTION_BITWISEXOR: println("bitwise xor"); break; case SWFACTION_SHIFTLEFT: println("shift left"); break; case SWFACTION_SHIFTRIGHT: println("shift right"); break; case SWFACTION_SHIFTRIGHT2: println("shift right 2"); break; case SWFACTION_CONSTANTPOOL: { int i, n = readUInt16(f); print("declare dictionary:"); for(i=0; i 0) { printf("%s", readString(f)); --n; } for(; n>0; --n) printf(", %s", readString(f)); putchar(')'); putchar('\n'); ++gIndent; printDoAction(f, readUInt16(f)); --gIndent; break; } case SWFACTION_ENUMERATE: println("enumerate"); break; case SWFACTION_SETREGISTER: println("set register %i", readUInt8(f)); break; /* f6 actions */ case SWFACTION_INSTANCEOF: println("instanceof"); break; case SWFACTION_STRICTEQ: println("strict_equals"); break; case SWFACTION_ENUM2: println("enum2"); break; default: println("Unknown Action: %02X", type); dumpBytes(f, length); } return 1; } void printDoAction(Buffer f, int length) { int end; if(!f) return; end = fileOffset + length; while(fileOffset < end && printActionRecord(f)) ; } swftools_0.9.2+git20130725.orig/lib/action/lex.swf5.c0000644000175000017500000027762512216332640021210 0ustar gawaingawain #line 3 "lex.swf5.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define yy_create_buffer swf5_create_buffer #define yy_delete_buffer swf5_delete_buffer #define yy_flex_debug swf5_flex_debug #define yy_init_buffer swf5_init_buffer #define yy_flush_buffer swf5_flush_buffer #define yy_load_buffer_state swf5_load_buffer_state #define yy_switch_to_buffer swf5_switch_to_buffer #define yyin swf5in #define yyleng swf5leng #define yylex swf5lex #define yylineno swf5lineno #define yyout swf5out #define yyrestart swf5restart #define yytext swf5text #define yywrap swf5wrap #define yyalloc swf5alloc #define yyrealloc swf5realloc #define yyfree swf5free #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #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 swf5restart(swf5in ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int swf5leng; extern FILE *swf5in, *swf5out; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up swf5text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up swf5text again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE 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 getc() * 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; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* 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 swf5restart()), so that the user can continue scanning by * just pointing swf5in at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when swf5text is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int swf5leng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow swf5wrap()'s to do buffer switches * instead of setting up a fresh swf5in. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void swf5restart (FILE *input_file ); void swf5_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE swf5_create_buffer (FILE *file,int size ); void swf5_delete_buffer (YY_BUFFER_STATE b ); void swf5_flush_buffer (YY_BUFFER_STATE b ); void swf5push_buffer_state (YY_BUFFER_STATE new_buffer ); void swf5pop_buffer_state (void ); static void swf5ensure_buffer_stack (void ); static void swf5_load_buffer_state (void ); static void swf5_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER swf5_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE swf5_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE swf5_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE swf5_scan_bytes (yyconst char *bytes,int len ); void *swf5alloc (yy_size_t ); void *swf5realloc (void *,yy_size_t ); void swf5free (void * ); #define yy_new_buffer swf5_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ swf5ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ swf5_create_buffer(swf5in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ swf5ensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ swf5_create_buffer(swf5in,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *swf5in = (FILE *) 0, *swf5out = (FILE *) 0; typedef int yy_state_type; extern int swf5lineno; int swf5lineno = 1; extern char *swf5text; #define yytext_ptr swf5text static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up swf5text. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ swf5leng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 166 #define YY_END_OF_BUFFER 167 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[650] = { 0, 0, 0, 0, 0, 167, 165, 119, 164, 165, 152, 165, 151, 146, 165, 153, 154, 149, 144, 159, 145, 160, 150, 3, 3, 162, 142, 140, 143, 141, 161, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 155, 156, 148, 157, 147, 158, 163, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 164, 125, 0, 115, 113, 0, 126, 132, 0, 116, 114, 0, 128, 120, 130, 121, 131, 117, 118, 129, 4, 2, 3, 0, 134, 122, 124, 123, 135, 112, 112, 112, 112, 112, 112, 112, 19, 112, 112, 112, 112, 112, 112, 112, 112, 17, 16, 112, 112, 112, 112, 112, 112, 112, 0, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 133, 127, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 16, 112, 112, 112, 112, 112, 112, 112, 112, 63, 112, 112, 112, 112, 112, 112, 112, 112, 112, 4, 1, 137, 138, 136, 25, 112, 112, 112, 37, 112, 112, 112, 112, 112, 112, 112, 15, 112, 112, 112, 112, 35, 112, 112, 21, 112, 112, 36, 112, 112, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 20, 112, 112, 66, 62, 112, 112, 73, 112, 55, 110, 112, 112, 109, 72, 112, 112, 112, 112, 112, 112, 112, 112, 112, 21, 91, 112, 57, 112, 112, 112, 112, 112, 112, 112, 112, 112, 20, 64, 139, 112, 112, 13, 112, 112, 112, 112, 112, 11, 26, 112, 112, 112, 112, 112, 112, 112, 112, 112, 7, 42, 112, 112, 112, 112, 112, 43, 112, 112, 112, 112, 5, 112, 112, 24, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 108, 58, 112, 112, 112, 112, 112, 112, 43, 112, 112, 112, 56, 112, 8, 112, 112, 112, 112, 112, 112, 6, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 34, 112, 18, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 104, 112, 103, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 32, 112, 112, 22, 112, 112, 112, 38, 112, 112, 31, 112, 112, 112, 112, 29, 112, 23, 112, 112, 33, 12, 112, 27, 105, 112, 112, 86, 112, 70, 112, 112, 112, 112, 112, 112, 112, 112, 65, 112, 67, 112, 112, 83, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 33, 112, 112, 112, 112, 14, 112, 112, 112, 39, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 9, 112, 10, 30, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 68, 112, 112, 101, 112, 85, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 99, 92, 112, 112, 84, 112, 46, 112, 47, 112, 50, 112, 40, 41, 112, 48, 112, 112, 112, 112, 112, 112, 74, 77, 112, 76, 112, 112, 90, 112, 71, 112, 87, 112, 78, 112, 48, 112, 79, 112, 98, 112, 112, 94, 82, 112, 28, 112, 112, 112, 45, 112, 112, 112, 112, 61, 112, 75, 89, 112, 112, 112, 112, 112, 112, 80, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 95, 102, 69, 88, 59, 112, 96, 81, 112, 112, 112, 52, 112, 112, 112, 106, 107, 60, 112, 93, 112, 112, 49, 112, 44, 97, 112, 112, 112, 112, 100, 112, 112, 54, 112, 51, 112, 53, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 6, 1, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 22, 22, 23, 24, 25, 26, 27, 28, 1, 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, 54, 1, 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, 54, 84, 85, 86, 87, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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 yyconst flex_int32_t yy_meta[88] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[654] = { 0, 0, 0, 59, 0, 322, 1377, 1377, 1377, 317, 275, 92, 1377, 89, 101, 1377, 1377, 259, 99, 1377, 90, 1377, 111, 124, 131, 1377, 1377, 82, 212, 87, 1377, 87, 89, 125, 123, 119, 131, 130, 0, 128, 134, 122, 112, 135, 185, 176, 169, 154, 180, 1377, 1377, 1377, 1377, 152, 1377, 1377, 187, 174, 192, 223, 228, 190, 227, 234, 232, 246, 234, 272, 280, 212, 233, 1377, 1377, 176, 237, 1377, 228, 1377, 1377, 227, 279, 1377, 223, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 318, 334, 344, 0, 161, 1377, 1377, 1377, 168, 0, 243, 254, 327, 248, 285, 307, 0, 305, 321, 340, 330, 326, 331, 327, 328, 0, 333, 336, 353, 332, 345, 354, 358, 355, 371, 352, 378, 347, 358, 377, 372, 385, 392, 378, 377, 390, 380, 1377, 1377, 397, 398, 403, 393, 404, 384, 398, 429, 394, 397, 445, 437, 448, 454, 437, 440, 435, 433, 456, 457, 451, 443, 448, 463, 492, 472, 500, 457, 458, 521, 0, 1377, 1377, 112, 0, 507, 504, 512, 0, 515, 518, 515, 509, 517, 512, 506, 0, 523, 507, 514, 510, 0, 525, 529, 0, 514, 524, 0, 516, 520, 583, 549, 546, 546, 548, 553, 551, 558, 572, 577, 576, 577, 0, 572, 577, 0, 0, 572, 575, 0, 579, 577, 0, 577, 591, 581, 0, 573, 576, 587, 596, 600, 588, 586, 592, 601, 637, 0, 640, 0, 607, 620, 626, 623, 612, 624, 638, 634, 634, 650, 0, 1377, 645, 655, 0, 661, 654, 643, 645, 657, 0, 0, 662, 653, 672, 669, 682, 688, 670, 685, 693, 0, 0, 694, 686, 680, 686, 704, 687, 688, 706, 698, 707, 0, 698, 709, 0, 712, 710, 717, 717, 712, 720, 725, 726, 713, 744, 730, 735, 746, 756, 747, 751, 757, 745, 759, 761, 749, 762, 0, 0, 763, 764, 769, 771, 753, 754, 782, 761, 756, 763, 0, 765, 0, 765, 764, 771, 775, 788, 804, 0, 799, 796, 798, 800, 805, 812, 806, 821, 806, 807, 813, 822, 814, 811, 815, 814, 825, 829, 0, 829, 0, 828, 823, 837, 838, 827, 827, 834, 835, 843, 865, 860, 868, 0, 863, 0, 859, 864, 864, 877, 861, 865, 881, 865, 868, 875, 882, 872, 874, 883, 889, 876, 889, 884, 902, 883, 904, 0, 885, 887, 0, 912, 906, 922, 108, 927, 926, 0, 908, 920, 938, 939, 0, 928, 0, 935, 923, 0, 0, 928, 0, 945, 933, 928, 0, 948, 0, 948, 943, 935, 945, 955, 949, 942, 943, 0, 952, 0, 964, 947, 0, 966, 954, 979, 978, 981, 980, 985, 989, 981, 999, 996, 993, 1001, 1004, 993, 1002, 0, 989, 996, 994, 0, 1000, 1009, 1006, 1007, 1008, 1009, 1008, 1019, 1011, 1005, 1015, 1027, 1038, 1039, 1028, 1044, 1049, 1057, 1054, 1046, 1060, 1054, 1046, 1040, 1054, 1047, 1056, 1049, 1065, 1053, 1068, 1073, 1070, 1074, 1081, 1076, 1067, 1080, 1072, 1067, 1081, 1096, 0, 1102, 0, 0, 1103, 1094, 1105, 1117, 1114, 1115, 1099, 1102, 1120, 1124, 1103, 1107, 1108, 1114, 1125, 1114, 1131, 1109, 1132, 0, 1122, 1123, 0, 1133, 0, 1124, 1136, 1126, 1138, 1129, 1133, 1141, 1165, 1148, 1161, 1163, 0, 0, 1165, 1171, 0, 1161, 0, 1168, 0, 1176, 1171, 1184, 0, 0, 1178, 0, 1169, 1177, 1189, 1174, 1184, 1190, 0, 0, 1183, 0, 1176, 1197, 0, 1188, 0, 1202, 0, 1203, 0, 1200, 1201, 1195, 0, 1193, 0, 1214, 1208, 0, 0, 1213, 0, 1208, 1218, 1233, 0, 1230, 1215, 1220, 1227, 0, 1239, 0, 0, 1238, 1232, 1233, 1230, 1225, 1245, 97, 1232, 1233, 1232, 1242, 1251, 1258, 1242, 1244, 1259, 1251, 0, 0, 0, 0, 0, 1250, 0, 0, 1259, 1265, 1272, 0, 1268, 1276, 1264, 0, 0, 0, 1272, 0, 1297, 1294, 1286, 1292, 0, 0, 1288, 1301, 1284, 1290, 0, 1295, 1295, 0, 1300, 0, 1294, 0, 1377, 1368, 1371, 1373, 91 } ; static yyconst flex_int16_t yy_def[654] = { 0, 649, 1, 1, 3, 649, 649, 649, 649, 649, 649, 650, 649, 649, 651, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 649, 649, 649, 649, 649, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 649, 650, 650, 649, 650, 649, 649, 651, 651, 649, 651, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 653, 649, 649, 649, 649, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 653, 649, 649, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 649, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 0, 649, 649, 649, 649 } ; static yyconst flex_int16_t yy_nxt[1465] = { 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24, 24, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 38, 38, 40, 38, 41, 42, 43, 38, 44, 45, 46, 38, 47, 48, 38, 38, 38, 49, 6, 50, 51, 31, 32, 33, 34, 35, 36, 37, 38, 39, 38, 38, 40, 38, 41, 42, 43, 38, 44, 45, 46, 38, 47, 48, 38, 38, 52, 53, 54, 55, 56, 57, 58, 59, 60, 170, 61, 74, 62, 77, 75, 63, 64, 65, 66, 67, 80, 86, 68, 95, 96, 69, 81, 70, 84, 98, 99, 78, 87, 618, 56, 57, 58, 59, 60, 88, 61, 85, 62, 452, 89, 63, 64, 65, 66, 67, 101, 102, 68, 90, 251, 69, 91, 70, 92, 92, 92, 92, 93, 91, 76, 93, 93, 93, 93, 93, 103, 120, 106, 82, 122, 109, 111, 104, 116, 114, 101, 102, 107, 118, 105, 110, 117, 121, 108, 115, 112, 123, 94, 119, 138, 74, 113, 124, 75, 135, 103, 120, 106, 171, 122, 109, 111, 104, 116, 114, 172, 173, 107, 118, 105, 110, 117, 121, 108, 115, 112, 123, 94, 119, 125, 128, 113, 124, 132, 135, 126, 133, 136, 137, 127, 140, 142, 143, 134, 149, 129, 130, 649, 131, 104, 141, 80, 649, 76, 115, 101, 105, 81, 139, 97, 128, 74, 167, 132, 75, 126, 133, 136, 137, 127, 140, 142, 143, 134, 149, 129, 130, 144, 131, 104, 141, 145, 116, 153, 115, 101, 105, 107, 151, 109, 150, 147, 167, 146, 148, 158, 154, 168, 152, 110, 156, 159, 155, 80, 82, 174, 83, 144, 175, 81, 157, 145, 116, 153, 76, 178, 121, 107, 151, 109, 150, 147, 72, 146, 148, 158, 154, 168, 152, 110, 156, 159, 155, 123, 162, 174, 160, 163, 175, 124, 157, 71, 161, 649, 649, 178, 121, 649, 179, 164, 165, 649, 166, 649, 649, 649, 82, 169, 169, 169, 169, 169, 180, 123, 162, 649, 160, 163, 181, 124, 182, 91, 161, 92, 92, 92, 92, 93, 179, 164, 165, 91, 166, 93, 93, 93, 93, 93, 176, 183, 184, 185, 180, 186, 187, 177, 188, 189, 181, 192, 182, 190, 191, 193, 194, 195, 196, 197, 198, 199, 200, 200, 200, 200, 200, 201, 204, 649, 176, 183, 184, 185, 205, 186, 187, 177, 188, 189, 206, 192, 207, 190, 191, 193, 194, 195, 196, 197, 198, 199, 202, 208, 209, 211, 212, 201, 204, 203, 213, 214, 215, 216, 205, 217, 218, 220, 219, 175, 206, 180, 207, 177, 210, 221, 224, 181, 225, 649, 649, 649, 202, 208, 209, 211, 212, 649, 649, 203, 213, 214, 215, 216, 222, 217, 218, 220, 219, 175, 649, 180, 234, 177, 210, 221, 224, 181, 225, 226, 193, 223, 192, 235, 237, 227, 229, 228, 230, 236, 195, 238, 197, 241, 222, 190, 191, 231, 239, 242, 232, 240, 234, 243, 233, 247, 249, 250, 649, 226, 193, 223, 192, 235, 237, 227, 229, 228, 230, 236, 195, 238, 197, 241, 244, 190, 191, 231, 239, 242, 232, 240, 248, 243, 233, 247, 249, 250, 245, 252, 207, 246, 169, 169, 169, 169, 169, 253, 254, 255, 257, 258, 259, 260, 244, 261, 262, 263, 264, 265, 266, 267, 248, 268, 269, 270, 256, 271, 245, 252, 207, 246, 272, 273, 649, 649, 649, 253, 254, 255, 257, 258, 259, 260, 274, 261, 262, 263, 264, 265, 266, 267, 275, 268, 269, 270, 256, 271, 276, 277, 278, 279, 272, 273, 200, 200, 200, 200, 200, 280, 281, 282, 283, 284, 274, 285, 286, 287, 288, 289, 259, 290, 275, 291, 294, 292, 295, 296, 276, 277, 278, 279, 264, 265, 293, 297, 298, 299, 300, 280, 281, 282, 283, 284, 301, 285, 286, 287, 288, 289, 259, 290, 302, 291, 294, 292, 295, 296, 309, 310, 315, 316, 264, 265, 293, 297, 298, 299, 300, 303, 311, 317, 306, 304, 301, 312, 307, 313, 318, 314, 305, 321, 302, 308, 319, 320, 322, 323, 309, 310, 315, 316, 324, 325, 326, 327, 328, 329, 330, 303, 311, 317, 306, 304, 331, 312, 307, 313, 318, 314, 305, 321, 332, 308, 319, 320, 322, 323, 333, 334, 335, 336, 324, 325, 326, 327, 328, 329, 330, 337, 339, 340, 341, 342, 331, 343, 344, 345, 338, 346, 347, 348, 332, 349, 350, 351, 352, 353, 333, 334, 335, 336, 355, 356, 354, 357, 358, 359, 360, 337, 339, 340, 341, 342, 362, 343, 344, 345, 338, 346, 347, 348, 361, 349, 350, 351, 352, 353, 363, 364, 365, 366, 355, 356, 354, 357, 358, 359, 360, 367, 368, 369, 370, 371, 362, 372, 373, 374, 375, 376, 377, 378, 361, 379, 380, 381, 383, 384, 363, 364, 365, 366, 385, 386, 387, 388, 389, 382, 390, 367, 368, 369, 370, 371, 391, 372, 373, 374, 375, 376, 377, 378, 345, 379, 380, 381, 383, 384, 392, 393, 394, 395, 385, 386, 387, 388, 389, 382, 390, 396, 397, 398, 399, 400, 391, 401, 402, 403, 404, 405, 406, 407, 345, 408, 409, 410, 411, 412, 392, 393, 394, 395, 387, 414, 415, 413, 416, 417, 418, 396, 397, 398, 399, 400, 419, 401, 402, 403, 404, 405, 406, 407, 420, 408, 409, 410, 411, 412, 421, 422, 423, 424, 387, 414, 415, 413, 416, 417, 418, 425, 426, 427, 428, 429, 419, 430, 431, 432, 433, 434, 435, 436, 420, 437, 440, 441, 438, 442, 421, 422, 423, 424, 439, 443, 444, 445, 446, 447, 448, 425, 426, 427, 428, 429, 449, 430, 431, 432, 433, 434, 435, 436, 450, 437, 440, 441, 438, 442, 451, 453, 454, 455, 439, 443, 444, 445, 446, 447, 448, 456, 457, 458, 459, 460, 449, 461, 462, 463, 465, 466, 467, 468, 450, 469, 470, 464, 471, 472, 451, 453, 454, 455, 473, 474, 475, 476, 477, 478, 479, 456, 457, 458, 459, 460, 480, 461, 462, 463, 465, 466, 467, 468, 481, 469, 470, 464, 471, 472, 482, 483, 484, 485, 473, 474, 475, 476, 477, 478, 479, 486, 487, 488, 489, 491, 480, 492, 493, 494, 495, 490, 496, 497, 481, 498, 499, 500, 501, 502, 482, 483, 484, 485, 503, 504, 505, 506, 507, 508, 509, 486, 487, 488, 489, 491, 510, 492, 493, 494, 495, 490, 496, 497, 511, 498, 499, 500, 501, 502, 512, 513, 514, 515, 503, 504, 505, 506, 507, 508, 509, 516, 517, 518, 519, 521, 510, 522, 523, 524, 525, 526, 527, 528, 511, 529, 530, 531, 520, 532, 512, 513, 514, 515, 533, 534, 535, 536, 537, 538, 539, 516, 517, 518, 519, 521, 540, 522, 523, 524, 525, 526, 527, 528, 541, 529, 530, 531, 520, 532, 542, 543, 544, 545, 533, 534, 535, 536, 537, 538, 539, 546, 547, 548, 549, 550, 540, 551, 552, 553, 554, 555, 556, 557, 541, 558, 559, 560, 561, 562, 542, 543, 544, 545, 563, 564, 565, 566, 567, 568, 569, 546, 547, 548, 549, 550, 570, 551, 552, 553, 554, 555, 556, 557, 571, 558, 559, 560, 561, 562, 572, 573, 574, 575, 563, 564, 565, 566, 567, 568, 569, 578, 576, 579, 580, 581, 570, 577, 582, 583, 584, 585, 586, 587, 571, 588, 589, 590, 591, 592, 572, 573, 574, 575, 593, 594, 595, 596, 597, 598, 599, 578, 576, 579, 580, 581, 600, 577, 582, 583, 584, 585, 586, 587, 601, 588, 589, 590, 591, 592, 602, 603, 604, 605, 593, 594, 595, 596, 597, 598, 599, 606, 607, 608, 609, 610, 600, 611, 612, 613, 614, 615, 616, 617, 601, 619, 620, 621, 622, 623, 602, 603, 604, 605, 624, 625, 626, 627, 628, 629, 630, 606, 607, 608, 609, 610, 631, 611, 612, 613, 614, 615, 616, 617, 632, 619, 620, 621, 622, 623, 633, 634, 635, 636, 624, 625, 626, 627, 628, 629, 630, 637, 638, 639, 640, 641, 631, 642, 643, 644, 645, 646, 647, 648, 632, 649, 649, 649, 649, 649, 633, 634, 635, 636, 649, 649, 649, 649, 649, 649, 649, 637, 638, 639, 640, 641, 649, 642, 643, 644, 645, 646, 647, 648, 73, 73, 73, 79, 79, 79, 100, 100, 5, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649 } ; static yyconst flex_int16_t yy_chk[1465] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 653, 3, 11, 3, 13, 11, 3, 3, 3, 3, 3, 14, 20, 3, 27, 27, 3, 14, 3, 18, 29, 29, 13, 20, 600, 3, 3, 3, 3, 3, 22, 3, 18, 3, 395, 22, 3, 3, 3, 3, 3, 31, 32, 3, 22, 173, 3, 23, 3, 23, 23, 23, 23, 23, 24, 11, 24, 24, 24, 24, 24, 33, 41, 34, 14, 42, 35, 36, 33, 39, 37, 31, 32, 34, 40, 33, 35, 39, 41, 34, 37, 36, 43, 23, 40, 53, 73, 36, 43, 73, 47, 33, 41, 34, 95, 42, 35, 36, 33, 39, 37, 99, 99, 34, 40, 33, 35, 39, 41, 34, 37, 36, 43, 23, 40, 44, 45, 36, 43, 46, 47, 44, 46, 48, 48, 44, 56, 57, 58, 46, 61, 45, 45, 82, 45, 58, 56, 79, 76, 73, 61, 56, 58, 79, 53, 28, 45, 74, 69, 46, 74, 44, 46, 48, 48, 44, 56, 57, 58, 46, 61, 45, 45, 59, 45, 58, 56, 59, 62, 64, 61, 56, 58, 59, 63, 60, 62, 60, 69, 59, 60, 66, 64, 70, 63, 60, 65, 66, 64, 80, 79, 101, 17, 59, 102, 80, 65, 59, 62, 64, 74, 104, 65, 59, 63, 60, 62, 60, 10, 59, 60, 66, 64, 70, 63, 60, 65, 66, 64, 67, 68, 101, 67, 68, 102, 67, 65, 9, 67, 5, 0, 104, 65, 0, 105, 68, 68, 0, 68, 0, 0, 0, 80, 91, 91, 91, 91, 91, 106, 67, 68, 0, 67, 68, 106, 67, 108, 92, 67, 92, 92, 92, 92, 92, 105, 68, 68, 93, 68, 93, 93, 93, 93, 93, 103, 109, 110, 111, 106, 112, 113, 103, 114, 115, 106, 118, 108, 117, 117, 119, 120, 120, 121, 122, 123, 124, 125, 125, 125, 125, 125, 126, 128, 0, 103, 109, 110, 111, 129, 112, 113, 103, 114, 115, 130, 118, 131, 117, 117, 119, 120, 120, 121, 122, 123, 124, 127, 132, 133, 134, 135, 126, 128, 127, 136, 137, 140, 141, 129, 142, 143, 145, 144, 142, 130, 144, 131, 143, 133, 146, 148, 144, 149, 0, 0, 0, 127, 132, 133, 134, 135, 0, 0, 127, 136, 137, 140, 141, 147, 142, 143, 145, 144, 142, 0, 144, 154, 143, 133, 146, 148, 144, 149, 150, 152, 147, 151, 155, 157, 150, 152, 151, 153, 156, 156, 158, 159, 161, 147, 150, 150, 153, 160, 162, 153, 160, 154, 163, 153, 165, 167, 168, 0, 150, 152, 147, 151, 155, 157, 150, 152, 151, 153, 156, 156, 158, 159, 161, 164, 150, 150, 153, 160, 162, 153, 160, 166, 163, 153, 165, 167, 168, 164, 175, 166, 164, 169, 169, 169, 169, 169, 176, 177, 179, 180, 181, 182, 183, 164, 184, 185, 187, 188, 188, 189, 190, 166, 192, 193, 195, 179, 196, 164, 175, 166, 164, 198, 199, 0, 0, 0, 176, 177, 179, 180, 181, 182, 183, 201, 184, 185, 187, 188, 188, 189, 190, 202, 192, 193, 195, 179, 196, 203, 204, 205, 206, 198, 199, 200, 200, 200, 200, 200, 207, 208, 209, 210, 211, 201, 213, 214, 217, 218, 220, 221, 223, 202, 224, 227, 225, 228, 229, 203, 204, 205, 206, 225, 225, 225, 230, 231, 232, 233, 207, 208, 209, 210, 211, 234, 213, 214, 217, 218, 220, 221, 223, 235, 224, 227, 225, 228, 229, 240, 241, 243, 244, 225, 225, 225, 230, 231, 232, 233, 236, 242, 245, 238, 236, 234, 242, 238, 242, 246, 242, 236, 248, 235, 238, 247, 247, 249, 252, 240, 241, 243, 244, 253, 255, 256, 257, 258, 259, 262, 236, 242, 245, 238, 236, 263, 242, 238, 242, 246, 242, 236, 248, 264, 238, 247, 247, 249, 252, 265, 266, 267, 268, 253, 255, 256, 257, 258, 259, 262, 269, 270, 273, 274, 275, 263, 276, 277, 278, 269, 279, 280, 281, 264, 282, 284, 285, 287, 288, 265, 266, 267, 268, 289, 290, 288, 291, 292, 293, 294, 269, 270, 273, 274, 275, 295, 276, 277, 278, 269, 279, 280, 281, 294, 282, 284, 285, 287, 288, 296, 297, 298, 299, 289, 290, 288, 291, 292, 293, 294, 300, 301, 302, 303, 304, 295, 305, 306, 307, 308, 311, 312, 313, 294, 314, 315, 316, 318, 319, 296, 297, 298, 299, 320, 322, 324, 325, 326, 317, 327, 300, 301, 302, 303, 304, 328, 305, 306, 307, 308, 311, 312, 313, 317, 314, 315, 316, 318, 319, 329, 331, 332, 333, 320, 322, 324, 325, 326, 317, 327, 334, 335, 336, 337, 338, 328, 339, 340, 341, 342, 343, 344, 345, 317, 346, 347, 348, 350, 352, 329, 331, 332, 333, 353, 354, 355, 353, 356, 357, 358, 334, 335, 336, 337, 338, 359, 339, 340, 341, 342, 343, 344, 345, 360, 346, 347, 348, 350, 352, 361, 362, 363, 365, 353, 354, 355, 353, 356, 357, 358, 367, 368, 369, 370, 371, 359, 372, 373, 374, 375, 376, 377, 378, 360, 379, 381, 382, 380, 383, 361, 362, 363, 365, 380, 384, 385, 386, 387, 389, 390, 367, 368, 369, 370, 371, 392, 372, 373, 374, 375, 376, 377, 378, 393, 379, 381, 382, 380, 383, 394, 396, 397, 399, 380, 384, 385, 386, 387, 389, 390, 400, 401, 402, 404, 406, 392, 407, 410, 412, 413, 414, 416, 418, 393, 419, 420, 412, 421, 422, 394, 396, 397, 399, 423, 424, 425, 427, 429, 430, 432, 400, 401, 402, 404, 406, 433, 407, 410, 412, 413, 414, 416, 418, 434, 419, 420, 412, 421, 422, 435, 436, 437, 438, 423, 424, 425, 427, 429, 430, 432, 439, 440, 441, 442, 443, 433, 444, 445, 446, 447, 442, 449, 450, 434, 451, 453, 454, 455, 456, 435, 436, 437, 438, 457, 458, 459, 460, 461, 462, 463, 439, 440, 441, 442, 443, 464, 444, 445, 446, 447, 442, 449, 450, 465, 451, 453, 454, 455, 456, 466, 467, 468, 469, 457, 458, 459, 460, 461, 462, 463, 470, 471, 472, 473, 474, 464, 475, 476, 477, 478, 479, 480, 481, 465, 482, 483, 484, 473, 485, 466, 467, 468, 469, 486, 487, 488, 489, 490, 491, 492, 470, 471, 472, 473, 474, 493, 475, 476, 477, 478, 479, 480, 481, 494, 482, 483, 484, 473, 485, 496, 499, 500, 501, 486, 487, 488, 489, 490, 491, 492, 502, 503, 504, 505, 506, 493, 507, 508, 509, 510, 511, 512, 513, 494, 514, 515, 516, 517, 519, 496, 499, 500, 501, 520, 522, 524, 525, 526, 527, 528, 502, 503, 504, 505, 506, 529, 507, 508, 509, 510, 511, 512, 513, 530, 514, 515, 516, 517, 519, 531, 532, 533, 534, 520, 522, 524, 525, 526, 527, 528, 538, 537, 540, 542, 544, 529, 537, 545, 546, 549, 551, 552, 553, 530, 554, 555, 556, 559, 561, 531, 532, 533, 534, 562, 564, 566, 568, 570, 571, 572, 538, 537, 540, 542, 544, 574, 537, 545, 546, 549, 551, 552, 553, 576, 554, 555, 556, 559, 561, 577, 580, 582, 583, 562, 564, 566, 568, 570, 571, 572, 584, 586, 587, 588, 589, 574, 591, 594, 595, 596, 597, 598, 599, 576, 601, 602, 603, 604, 605, 577, 580, 582, 583, 606, 607, 608, 609, 610, 616, 619, 584, 586, 587, 588, 589, 620, 591, 594, 595, 596, 597, 598, 599, 621, 601, 602, 603, 604, 605, 623, 624, 625, 629, 606, 607, 608, 609, 610, 616, 619, 631, 632, 633, 634, 637, 620, 638, 639, 640, 642, 643, 645, 647, 621, 0, 0, 0, 0, 0, 623, 624, 625, 629, 0, 0, 0, 0, 0, 0, 0, 631, 632, 633, 634, 637, 0, 638, 639, 640, 642, 643, 645, 647, 650, 650, 650, 651, 651, 651, 652, 652, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int swf5_flex_debug; int swf5_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *swf5text; #line 1 "swf5compiler.flex" #line 2 "swf5compiler.flex" #include #include #include "compile.h" #include "action.h" #include "blocks/error.h" #include "swf5compiler.tab.h" /* defines token types */ static int swf5debug; static const char *lexBuffer = NULL; static int lexBufferLen = 0; static int sLineNumber = 0; static char szLine[1024]; static char msgbufs[2][1024] = { {0}, {0} }, *msgline = {0}; static int column = 0; static void comment(); static void comment1(); static void count(); static void countline(); static void warning(char *msg); #define YY_INPUT(buf,result,max_size) result=lexBufferInput(buf, max_size) /* thanks to the prolific and brilliant Raff: */ static int lexBufferInput(char *buf, int max_size) { int l = lexBufferLen > max_size ? max_size : lexBufferLen; if (lexBufferLen <= 0) return YY_NULL; memcpy(buf, lexBuffer, l); lexBuffer += l; lexBufferLen -= l; return l; } /* very inefficient method of unescaping strings */ static void unescape(char *buf) { char *p, *n; n = p = buf; while(*p) { if(*p == '\\') { switch(p[1]) { case 'b' : *n++ = '\b'; break; case 'f' : *n++ = '\f'; break; case 'n' : *n++ = '\n'; break; case 'r' : *n++ = '\r'; break; case 't' : *n++ = '\t'; break; case 'x' : case 'u' : warning("unsupported escape sequence"); } p+=2; } else { *n++ = *p++; } } *n = 0; } void swf5ParseInit(const char *script, int debug) { checkByteOrder(); swf5restart(NULL); swf5debug = debug; lexBuffer = script; lexBufferLen = strlen(script); sLineNumber = 0; column = 0; msgline = msgbufs[0]; } #line 88 "swf5compiler.flex" // forward declaration needed by the following function #ifndef YY_PROTO #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif #endif static void yyunput YY_PROTO(( int c, char *buf_ptr )); void do_unput5(const char c) { unput(c); } #line 1103 "lex.swf5.c" #define INITIAL 0 #define asm 1 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int swf5lex_destroy (void ); int swf5get_debug (void ); void swf5set_debug (int debug_flag ); YY_EXTRA_TYPE swf5get_extra (void ); void swf5set_extra (YY_EXTRA_TYPE user_defined ); FILE *swf5get_in (void ); void swf5set_in (FILE * in_str ); FILE *swf5get_out (void ); void swf5set_out (FILE * out_str ); int swf5get_leng (void ); char *swf5get_text (void ); int swf5get_lineno (void ); void swf5set_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int swf5wrap (void ); #else extern int swf5wrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #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 fwrite( swf5text, swf5leng, 1, swf5out ) #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) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( swf5in )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( swf5in ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, swf5in))==0 && ferror(swf5in)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(swf5in); \ } \ }\ \ #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 /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int swf5lex (void); #define YY_DECL int swf5lex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after swf5text and swf5leng * 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 \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 104 "swf5compiler.flex" #line 1289 "lex.swf5.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! swf5in ) swf5in = stdin; if ( ! swf5out ) swf5out = stdout; if ( ! YY_CURRENT_BUFFER ) { swf5ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = swf5_create_buffer(swf5in,YY_BUF_SIZE ); } swf5_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of swf5text. */ *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_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 650 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 1377 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 106 "swf5compiler.flex" { count(); swf5lval.intVal = strtoul(swf5text, NULL, 0); return INTEGER; } YY_BREAK case 2: YY_RULE_SETUP #line 108 "swf5compiler.flex" { count(); swf5lval.intVal = strtoul(swf5text, NULL, 0); return INTEGER; } YY_BREAK case 3: YY_RULE_SETUP #line 110 "swf5compiler.flex" { count(); swf5lval.intVal = atoi(swf5text); return INTEGER; } YY_BREAK case 4: YY_RULE_SETUP #line 112 "swf5compiler.flex" { count(); swf5lval.doubleVal = atof(swf5text); return DOUBLE; } YY_BREAK case 5: YY_RULE_SETUP #line 114 "swf5compiler.flex" { count(); swf5lval.intVal = 1; return BOOLEAN; } YY_BREAK case 6: YY_RULE_SETUP #line 116 "swf5compiler.flex" { count(); swf5lval.intVal = 0; return BOOLEAN; } YY_BREAK case 7: YY_RULE_SETUP #line 118 "swf5compiler.flex" { count(); return NULLVAL; } YY_BREAK case 8: YY_RULE_SETUP #line 119 "swf5compiler.flex" { count(); return BREAK; } YY_BREAK case 9: YY_RULE_SETUP #line 120 "swf5compiler.flex" { count(); return CONTINUE; } YY_BREAK case 10: YY_RULE_SETUP #line 121 "swf5compiler.flex" { count(); return FUNCTION; } YY_BREAK case 11: YY_RULE_SETUP #line 122 "swf5compiler.flex" { count(); return ELSE; } YY_BREAK case 12: YY_RULE_SETUP #line 123 "swf5compiler.flex" { count(); return SWITCH; } YY_BREAK case 13: YY_RULE_SETUP #line 124 "swf5compiler.flex" { count(); return CASE; } YY_BREAK case 14: YY_RULE_SETUP #line 125 "swf5compiler.flex" { count(); return DEFAULT; } YY_BREAK case 15: YY_RULE_SETUP #line 126 "swf5compiler.flex" { count(); return FOR; } YY_BREAK case 16: YY_RULE_SETUP #line 127 "swf5compiler.flex" { count(); return IN; } YY_BREAK case 17: YY_RULE_SETUP #line 128 "swf5compiler.flex" { count(); return IF; } YY_BREAK case 18: YY_RULE_SETUP #line 129 "swf5compiler.flex" { count(); return WHILE; } YY_BREAK case 19: YY_RULE_SETUP #line 130 "swf5compiler.flex" { count(); return DO; } YY_BREAK case 20: YY_RULE_SETUP #line 131 "swf5compiler.flex" { count(); return VAR; } YY_BREAK case 21: YY_RULE_SETUP #line 132 "swf5compiler.flex" { count(); return NEW; } YY_BREAK case 22: YY_RULE_SETUP #line 133 "swf5compiler.flex" { count(); return DELETE; } YY_BREAK case 23: YY_RULE_SETUP #line 134 "swf5compiler.flex" { count(); return RETURN; } YY_BREAK case 24: YY_RULE_SETUP #line 135 "swf5compiler.flex" { count(); return WITH; } YY_BREAK case 25: YY_RULE_SETUP #line 136 "swf5compiler.flex" { count(); BEGIN(asm); return ASM; } YY_BREAK case 26: YY_RULE_SETUP #line 137 "swf5compiler.flex" { count(); return EVAL; } YY_BREAK case 27: YY_RULE_SETUP #line 138 "swf5compiler.flex" { count(); return TYPEOF; } YY_BREAK case 28: YY_RULE_SETUP #line 139 "swf5compiler.flex" { count(); return INSTANCEOF; } YY_BREAK /* legacy functions */ case 29: YY_RULE_SETUP #line 142 "swf5compiler.flex" { count(); return RANDOM; } YY_BREAK case 30: YY_RULE_SETUP #line 143 "swf5compiler.flex" { count(); return GETTIMER; } YY_BREAK case 31: YY_RULE_SETUP #line 144 "swf5compiler.flex" { count(); return LENGTH; } YY_BREAK case 32: YY_RULE_SETUP #line 145 "swf5compiler.flex" { count(); return CONCAT; } YY_BREAK case 33: YY_RULE_SETUP #line 146 "swf5compiler.flex" { count(); return SUBSTR; } YY_BREAK case 34: YY_RULE_SETUP #line 147 "swf5compiler.flex" { count(); return TRACE; } YY_BREAK case 35: YY_RULE_SETUP #line 148 "swf5compiler.flex" { count(); return INT; } YY_BREAK case 36: YY_RULE_SETUP #line 149 "swf5compiler.flex" { count(); return ORD; } YY_BREAK case 37: YY_RULE_SETUP #line 150 "swf5compiler.flex" { count(); return CHR; } YY_BREAK case 38: YY_RULE_SETUP #line 151 "swf5compiler.flex" { count(); return GETURL; } YY_BREAK case 39: YY_RULE_SETUP #line 152 "swf5compiler.flex" { count(); return GETURL1; } YY_BREAK case 40: YY_RULE_SETUP #line 153 "swf5compiler.flex" { count(); return NEXTFRAME; } YY_BREAK case 41: YY_RULE_SETUP #line 154 "swf5compiler.flex" { count(); return PREVFRAME; } YY_BREAK case 42: YY_RULE_SETUP #line 155 "swf5compiler.flex" { count(); return PLAY; } YY_BREAK case 43: YY_RULE_SETUP #line 156 "swf5compiler.flex" { count(); return STOP; } YY_BREAK case 44: YY_RULE_SETUP #line 157 "swf5compiler.flex" { count(); return TOGGLEQUALITY; } YY_BREAK case 45: YY_RULE_SETUP #line 158 "swf5compiler.flex" { count(); return STOPSOUNDS; } YY_BREAK case 46: YY_RULE_SETUP #line 159 "swf5compiler.flex" { count(); return CALLFRAME; } YY_BREAK case 47: YY_RULE_SETUP #line 160 "swf5compiler.flex" { count(); return GOTOFRAME; } YY_BREAK case 48: YY_RULE_SETUP #line 161 "swf5compiler.flex" { count(); return SETTARGET; } YY_BREAK case 49: YY_RULE_SETUP #line 162 "swf5compiler.flex" { count(); return LOADVARIABLES; } YY_BREAK case 50: YY_RULE_SETUP #line 163 "swf5compiler.flex" { count(); return LOADMOVIE; } YY_BREAK case 51: YY_RULE_SETUP #line 164 "swf5compiler.flex" { count(); return LOADVARIABLESNUM; } YY_BREAK case 52: YY_RULE_SETUP #line 165 "swf5compiler.flex" { count(); return LOADMOVIENUM; } YY_BREAK case 53: YY_RULE_SETUP #line 166 "swf5compiler.flex" { count(); return DUPLICATEMOVIECLIP; } YY_BREAK case 54: YY_RULE_SETUP #line 167 "swf5compiler.flex" { count(); return REMOVEMOVIECLIP; } YY_BREAK /* assembler ops */ case 55: YY_RULE_SETUP #line 171 "swf5compiler.flex" { count(); return DUP; } YY_BREAK case 56: YY_RULE_SETUP #line 172 "swf5compiler.flex" { count(); return SWAP; } YY_BREAK case 57: YY_RULE_SETUP #line 173 "swf5compiler.flex" { count(); return POP; } YY_BREAK case 58: YY_RULE_SETUP #line 174 "swf5compiler.flex" { count(); return PUSH; } YY_BREAK case 59: YY_RULE_SETUP #line 175 "swf5compiler.flex" { count(); return SETREGISTER; } YY_BREAK case 60: YY_RULE_SETUP #line 176 "swf5compiler.flex" { count(); return CALLFUNCTION; } YY_BREAK case 61: YY_RULE_SETUP #line 177 "swf5compiler.flex" { count(); return CALLMETHOD; } YY_BREAK case 62: YY_RULE_SETUP #line 178 "swf5compiler.flex" { count(); return AND; } YY_BREAK case 63: YY_RULE_SETUP #line 179 "swf5compiler.flex" { count(); return OR; } YY_BREAK case 64: YY_RULE_SETUP #line 180 "swf5compiler.flex" { count(); return XOR; } YY_BREAK case 65: YY_RULE_SETUP #line 181 "swf5compiler.flex" { count(); return MODULO; } YY_BREAK case 66: YY_RULE_SETUP #line 182 "swf5compiler.flex" { count(); return ADD; } YY_BREAK case 67: YY_RULE_SETUP #line 183 "swf5compiler.flex" { count(); return ADD; } YY_BREAK case 68: YY_RULE_SETUP #line 184 "swf5compiler.flex" { count(); return LESSTHAN; } YY_BREAK case 69: YY_RULE_SETUP #line 185 "swf5compiler.flex" { count(); return LESSTHAN; } YY_BREAK case 70: YY_RULE_SETUP #line 186 "swf5compiler.flex" { count(); return EQUALS; } YY_BREAK case 71: YY_RULE_SETUP #line 187 "swf5compiler.flex" { count(); return EQUALS; } YY_BREAK case 72: YY_RULE_SETUP #line 188 "swf5compiler.flex" { count(); return INC; } YY_BREAK case 73: YY_RULE_SETUP #line 189 "swf5compiler.flex" { count(); return DEC; } YY_BREAK case 74: YY_RULE_SETUP #line 190 "swf5compiler.flex" { count(); return ENUMERATE; } YY_BREAK case 75: YY_RULE_SETUP #line 191 "swf5compiler.flex" { count(); return INITOBJECT; } YY_BREAK case 76: YY_RULE_SETUP #line 192 "swf5compiler.flex" { count(); return INITARRAY; } YY_BREAK case 77: YY_RULE_SETUP #line 193 "swf5compiler.flex" { count(); return GETMEMBER; } YY_BREAK case 78: YY_RULE_SETUP #line 194 "swf5compiler.flex" { count(); return SETMEMBER; } YY_BREAK case 79: YY_RULE_SETUP #line 195 "swf5compiler.flex" { count(); return SHIFTLEFT; } YY_BREAK case 80: YY_RULE_SETUP #line 196 "swf5compiler.flex" { count(); return SHIFTRIGHT; } YY_BREAK case 81: YY_RULE_SETUP #line 197 "swf5compiler.flex" { count(); return SHIFTRIGHT2; } YY_BREAK case 82: YY_RULE_SETUP #line 198 "swf5compiler.flex" { count(); return VAREQUALS; } YY_BREAK case 83: YY_RULE_SETUP #line 199 "swf5compiler.flex" { count(); return OLDADD; } YY_BREAK case 84: YY_RULE_SETUP #line 200 "swf5compiler.flex" { count(); return SUBTRACT; } YY_BREAK case 85: YY_RULE_SETUP #line 201 "swf5compiler.flex" { count(); return MULTIPLY; } YY_BREAK case 86: YY_RULE_SETUP #line 202 "swf5compiler.flex" { count(); return DIVIDE; } YY_BREAK case 87: YY_RULE_SETUP #line 203 "swf5compiler.flex" { count(); return OLDEQUALS; } YY_BREAK case 88: YY_RULE_SETUP #line 204 "swf5compiler.flex" { count(); return OLDLESSTHAN; } YY_BREAK case 89: YY_RULE_SETUP #line 205 "swf5compiler.flex" { count(); return LOGICALAND; } YY_BREAK case 90: YY_RULE_SETUP #line 206 "swf5compiler.flex" { count(); return LOGICALOR; } YY_BREAK case 91: YY_RULE_SETUP #line 207 "swf5compiler.flex" { count(); return NOT; } YY_BREAK case 92: YY_RULE_SETUP #line 208 "swf5compiler.flex" { count(); return STRINGEQ; } YY_BREAK case 93: YY_RULE_SETUP #line 209 "swf5compiler.flex" { count(); return STRINGLENGTH; } YY_BREAK case 94: YY_RULE_SETUP #line 210 "swf5compiler.flex" { count(); return SUBSTRING; } YY_BREAK case 95: YY_RULE_SETUP #line 211 "swf5compiler.flex" { count(); return GETVARIABLE; } YY_BREAK case 96: YY_RULE_SETUP #line 212 "swf5compiler.flex" { count(); return SETVARIABLE; } YY_BREAK case 97: YY_RULE_SETUP #line 213 "swf5compiler.flex" { count(); return SETTARGETEXPRESSION; } YY_BREAK case 98: YY_RULE_SETUP #line 214 "swf5compiler.flex" { count(); return STARTDRAG; } YY_BREAK case 99: YY_RULE_SETUP #line 215 "swf5compiler.flex" { count(); return STOPDRAG; } YY_BREAK case 100: YY_RULE_SETUP #line 216 "swf5compiler.flex" { count(); return STRINGLESSTHAN; } YY_BREAK case 101: YY_RULE_SETUP #line 217 "swf5compiler.flex" { count(); return MBLENGTH; } YY_BREAK case 102: YY_RULE_SETUP #line 218 "swf5compiler.flex" { count(); return MBSUBSTRING; } YY_BREAK case 103: YY_RULE_SETUP #line 219 "swf5compiler.flex" { count(); return MBORD; } YY_BREAK case 104: YY_RULE_SETUP #line 220 "swf5compiler.flex" { count(); return MBCHR; } YY_BREAK case 105: YY_RULE_SETUP #line 221 "swf5compiler.flex" { count(); return BRANCHALWAYS; } YY_BREAK case 106: YY_RULE_SETUP #line 222 "swf5compiler.flex" { count(); return BRANCHALWAYS; } YY_BREAK case 107: YY_RULE_SETUP #line 223 "swf5compiler.flex" { count(); return BRANCHIFTRUE; } YY_BREAK case 108: YY_RULE_SETUP #line 224 "swf5compiler.flex" { count(); return POST; } YY_BREAK case 109: YY_RULE_SETUP #line 225 "swf5compiler.flex" { count(); return GET; } YY_BREAK case 110: YY_RULE_SETUP #line 226 "swf5compiler.flex" { count(); return END; } YY_BREAK case 111: YY_RULE_SETUP #line 229 "swf5compiler.flex" { count(); swf5lval.str = strdup(swf5text+2); return REGISTER; } YY_BREAK case 112: YY_RULE_SETUP #line 233 "swf5compiler.flex" { count(); swf5lval.str = strdup(swf5text); return IDENTIFIER; } YY_BREAK case 113: /* rule 113 can match eol */ YY_RULE_SETUP #line 236 "swf5compiler.flex" { count(); swf5lval.str = strdup(swf5text+1); swf5lval.str[strlen(swf5lval.str)-1]=0; unescape(swf5lval.str); return STRING; } YY_BREAK case 114: /* rule 114 can match eol */ YY_RULE_SETUP #line 241 "swf5compiler.flex" { count(); swf5lval.str = strdup(swf5text+1); swf5lval.str[strlen(swf5lval.str)-1]=0; unescape(swf5lval.str); return STRING; } YY_BREAK case 115: /* rule 115 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up swf5text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up swf5text again */ YY_RULE_SETUP #line 246 "swf5compiler.flex" { count(); swf5lval.str = strdup(""); warning("Unterminated string!"); return STRING; } YY_BREAK case 116: /* rule 116 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up swf5text */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up swf5text again */ YY_RULE_SETUP #line 250 "swf5compiler.flex" { count(); swf5lval.str = strdup(""); warning("Unterminated string!"); return STRING; } YY_BREAK case 117: YY_RULE_SETUP #line 254 "swf5compiler.flex" { count(); comment(); } YY_BREAK case 118: YY_RULE_SETUP #line 255 "swf5compiler.flex" { count(); comment1(); } YY_BREAK case 119: YY_RULE_SETUP #line 256 "swf5compiler.flex" { count(); } YY_BREAK case 120: YY_RULE_SETUP #line 258 "swf5compiler.flex" { count(); return INCR; } YY_BREAK case 121: YY_RULE_SETUP #line 259 "swf5compiler.flex" { count(); return DECR; } YY_BREAK case 122: YY_RULE_SETUP #line 260 "swf5compiler.flex" { count(); return LE; } YY_BREAK case 123: YY_RULE_SETUP #line 261 "swf5compiler.flex" { count(); return GE; } YY_BREAK case 124: YY_RULE_SETUP #line 262 "swf5compiler.flex" { count(); return EQ; } YY_BREAK case 125: YY_RULE_SETUP #line 263 "swf5compiler.flex" { count(); return NE; } YY_BREAK case 126: YY_RULE_SETUP #line 264 "swf5compiler.flex" { count(); return LAN; } YY_BREAK case 127: YY_RULE_SETUP #line 265 "swf5compiler.flex" { count(); return LOR; } YY_BREAK case 128: YY_RULE_SETUP #line 266 "swf5compiler.flex" { count(); return MEQ; } YY_BREAK case 129: YY_RULE_SETUP #line 267 "swf5compiler.flex" { count(); return DEQ; } YY_BREAK case 130: YY_RULE_SETUP #line 268 "swf5compiler.flex" { count(); return IEQ; } YY_BREAK case 131: YY_RULE_SETUP #line 269 "swf5compiler.flex" { count(); return SEQ; } YY_BREAK case 132: YY_RULE_SETUP #line 270 "swf5compiler.flex" { count(); return AEQ; } YY_BREAK case 133: YY_RULE_SETUP #line 271 "swf5compiler.flex" { count(); return OEQ; } YY_BREAK case 134: YY_RULE_SETUP #line 272 "swf5compiler.flex" { count(); return SHL; } YY_BREAK case 135: YY_RULE_SETUP #line 273 "swf5compiler.flex" { count(); return SHR; } YY_BREAK case 136: YY_RULE_SETUP #line 274 "swf5compiler.flex" { count(); return SHR2; } YY_BREAK case 137: YY_RULE_SETUP #line 275 "swf5compiler.flex" { count(); return SHLEQ; } YY_BREAK case 138: YY_RULE_SETUP #line 276 "swf5compiler.flex" { count(); return SHREQ; } YY_BREAK case 139: YY_RULE_SETUP #line 277 "swf5compiler.flex" { count(); return SHR2EQ; } YY_BREAK case 140: YY_RULE_SETUP #line 279 "swf5compiler.flex" { count(); return '<'; } YY_BREAK case 141: YY_RULE_SETUP #line 280 "swf5compiler.flex" { count(); return '>'; } YY_BREAK case 142: YY_RULE_SETUP #line 281 "swf5compiler.flex" { count(); return ';'; } YY_BREAK case 143: YY_RULE_SETUP #line 282 "swf5compiler.flex" { count(); return '='; } YY_BREAK case 144: YY_RULE_SETUP #line 283 "swf5compiler.flex" { count(); return '+'; } YY_BREAK case 145: YY_RULE_SETUP #line 284 "swf5compiler.flex" { count(); return '-'; } YY_BREAK case 146: YY_RULE_SETUP #line 285 "swf5compiler.flex" { count(); return '&'; } YY_BREAK case 147: YY_RULE_SETUP #line 286 "swf5compiler.flex" { count(); return '|'; } YY_BREAK case 148: YY_RULE_SETUP #line 287 "swf5compiler.flex" { count(); return '^'; } YY_BREAK case 149: YY_RULE_SETUP #line 288 "swf5compiler.flex" { count(); return '*'; } YY_BREAK case 150: YY_RULE_SETUP #line 289 "swf5compiler.flex" { count(); return '/'; } YY_BREAK case 151: YY_RULE_SETUP #line 290 "swf5compiler.flex" { count(); return '%'; } YY_BREAK case 152: YY_RULE_SETUP #line 291 "swf5compiler.flex" { count(); return '!'; } YY_BREAK case 153: YY_RULE_SETUP #line 292 "swf5compiler.flex" { count(); return '('; } YY_BREAK case 154: YY_RULE_SETUP #line 293 "swf5compiler.flex" { count(); return ')'; } YY_BREAK case 155: YY_RULE_SETUP #line 294 "swf5compiler.flex" { count(); return '['; } YY_BREAK case 156: YY_RULE_SETUP #line 295 "swf5compiler.flex" { count(); return ']'; } YY_BREAK case 157: YY_RULE_SETUP #line 296 "swf5compiler.flex" { count(); return '{'; } YY_BREAK case 158: YY_RULE_SETUP #line 297 "swf5compiler.flex" { count(); BEGIN(0); return '}'; } YY_BREAK case 159: YY_RULE_SETUP #line 298 "swf5compiler.flex" { count(); return ','; } YY_BREAK case 160: YY_RULE_SETUP #line 299 "swf5compiler.flex" { count(); return '.'; } YY_BREAK case 161: YY_RULE_SETUP #line 300 "swf5compiler.flex" { count(); return '?'; } YY_BREAK case 162: YY_RULE_SETUP #line 301 "swf5compiler.flex" { count(); return ':'; } YY_BREAK case 163: YY_RULE_SETUP #line 302 "swf5compiler.flex" { count(); return '~'; } YY_BREAK case 164: /* rule 164 can match eol */ YY_RULE_SETUP #line 304 "swf5compiler.flex" { count(); strcpy(szLine, swf5text + 1); countline(); yyless(1); } YY_BREAK case 165: YY_RULE_SETUP #line 307 "swf5compiler.flex" SWF_error("Unrecognized character: %s\n", swf5text); YY_BREAK case 166: YY_RULE_SETUP #line 309 "swf5compiler.flex" ECHO; YY_BREAK #line 2236 "lex.swf5.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(asm): 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); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->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 swf5in at a new source and called * swf5lex(). 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_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = swf5in; YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( swf5wrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * swf5text, 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_LVALUE->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 swf5lex */ /* 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 (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->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 single character, 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_LVALUE->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_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* 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. */ swf5realloc((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_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; swf5restart(swf5in ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) swf5realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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); 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); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 650 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } 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 ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = 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 >= 650 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 649); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up swf5text */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #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_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ swf5restart(swf5in ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( swf5wrap( ) ) 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) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve swf5text */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void swf5restart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ swf5ensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = swf5_create_buffer(swf5in,YY_BUF_SIZE ); } swf5_init_buffer(YY_CURRENT_BUFFER,input_file ); swf5_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void swf5_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * swf5pop_buffer_state(); * swf5push_buffer_state(new_buffer); */ swf5ensure_buffer_stack (); 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_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; swf5_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (swf5wrap()) processing, but the only time this flag * is looked at is after swf5wrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void swf5_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; swf5in = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE swf5_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) swf5alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in swf5_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 *) swf5alloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in swf5_create_buffer()" ); b->yy_is_our_buffer = 1; swf5_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with swf5_create_buffer() * */ void swf5_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) swf5free((void *) b->yy_ch_buf ); swf5free((void *) b ); } #ifndef _UNISTD_H /* assume unistd.h has isatty() for us */ #ifdef __cplusplus extern "C" { #endif #ifdef __THROW /* this is a gnuism */ extern int isatty (int ) __THROW; #else extern int isatty (int ); #endif #ifdef __cplusplus } #endif #endif /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a swf5restart() or at EOF. */ static void swf5_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; swf5_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then swf5_init_buffer was _probably_ * called from swf5restart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void swf5_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; 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 ) swf5_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void swf5push_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; swf5ensure_buffer_stack(); /* This block is copied from swf5_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from swf5_switch_to_buffer. */ swf5_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void swf5pop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; swf5_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { swf5_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void swf5ensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)swf5alloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in swf5ensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)swf5realloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in swf5ensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE swf5_scan_buffer (char * base, yy_size_t size ) { 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) swf5alloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in swf5_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; swf5_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to swf5lex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * swf5_scan_bytes() instead. */ YY_BUFFER_STATE swf5_scan_string (yyconst char * yystr ) { return swf5_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to swf5lex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE swf5_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) swf5alloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in swf5_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = swf5_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in swf5_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; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (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 swf5text. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ swf5text[swf5leng] = (yy_hold_char); \ (yy_c_buf_p) = swf5text + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ swf5leng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int swf5get_lineno (void) { return swf5lineno; } /** Get the input stream. * */ FILE *swf5get_in (void) { return swf5in; } /** Get the output stream. * */ FILE *swf5get_out (void) { return swf5out; } /** Get the length of the current token. * */ int swf5get_leng (void) { return swf5leng; } /** Get the current token. * */ char *swf5get_text (void) { return swf5text; } /** Set the current line number. * @param line_number * */ void swf5set_lineno (int line_number ) { swf5lineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see swf5_switch_to_buffer */ void swf5set_in (FILE * in_str ) { swf5in = in_str ; } void swf5set_out (FILE * out_str ) { swf5out = out_str ; } int swf5get_debug (void) { return swf5_flex_debug; } void swf5set_debug (int bdebug ) { swf5_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from swf5lex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT swf5in = stdin; swf5out = stdout; #else swf5in = (FILE *) 0; swf5out = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * swf5lex_init() */ return 0; } /* swf5lex_destroy is for both reentrant and non-reentrant scanners. */ int swf5lex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ swf5_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; swf5pop_buffer_state(); } /* Destroy the stack itself. */ swf5free((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * swf5lex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *swf5alloc (yy_size_t size ) { return (void *) malloc( size ); } void *swf5realloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void swf5free (void * ptr ) { free( (char *) ptr ); /* see swf5realloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 309 "swf5compiler.flex" static int getinput() { #ifdef __cplusplus return yyinput(); #else return input(); #endif } int swf5wrap() { return 1; } static void countline() { if(sLineNumber != 0) msgline[column] = 0; ++sLineNumber; column = 0; msgline = msgbufs[sLineNumber & 1]; } static int LineNumber(void) { return (sLineNumber + 1); } static int ColumnNumber(void) { return column; } static char *LineText(void) { msgline[column] = 0; return msgline; } static void comment() { // Handle block comments int c, c1; loop: // We have the start of a comment so look skip everything up to the // end of the comment character while ((c = getinput()) != '*' && c != EOF) { if(column < 1023) msgline[column] = c; ++column; // keep the line number in synch if (c == '\n') { // start the output (matches the algorithim in the lexx above) countline(); } if (swf5debug) putchar(c); } // is this the end of comment character if ((c1 = getinput()) != '/' && c != EOF) { // false start as this was no end of comment do_unput5(c1); goto loop; } // write out the start of the end of comment if (c != EOF) if (swf5debug) putchar(c); // write out the end of the end of comment if (c1 != EOF) if (swf5debug) putchar(c1); } static void comment1() { // Handle comment of type 1 (ie '//') int c; // this is a line comment while ((c = getinput()) != '\n' && c != EOF) { if (swf5debug) putchar(c); if(column < 1023) msgline[column] = c; ++column; }; // keep the line number in synch if (c == '\n') { if (swf5debug) putchar(c); countline(); } } static void count(void) { int n; // Count the characters to maintain the current column position if (swf5text[0] == '\n') { if (swf5debug) printf("\n"); } else { if (swf5debug) printf("%s", swf5text); for(n=0; n #include #include #include "compile.h" #include "action.h" #include "assembler.h" #define YYPARSE_PARAM buffer Buffer bf, bc; /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE #line 21 "swf5compiler.y" { Buffer action; char *str; SWFGetUrl2Method getURLMethod; int op; int intVal; int len; double doubleVal; struct { Buffer buffer; int count; } exprlist; struct switchcase switchcase; struct switchcases switchcases; struct { Buffer obj, ident, memexpr; } lval; } /* Line 187 of yacc.c. */ #line 407 "swf5compiler.tab.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 216 of yacc.c. */ #line 420 "swf5compiler.tab.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int i) #else static int YYID (i) int i; #endif { return i; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 5253 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 159 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 57 /* YYNRULES -- Number of rules. */ #define YYNRULES 348 /* YYNRULES -- Number of states. */ #define YYNSTATES 616 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 389 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 147, 2, 2, 2, 146, 139, 2, 157, 158, 144, 142, 132, 143, 151, 145, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 136, 156, 137, 133, 138, 135, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 152, 2, 153, 141, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 154, 140, 155, 148, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 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, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 134, 149, 150 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint16 yyprhs[] = { 0, 0, 3, 4, 7, 8, 10, 13, 15, 17, 19, 22, 25, 27, 31, 33, 36, 38, 40, 42, 44, 46, 48, 50, 58, 61, 65, 67, 71, 79, 85, 86, 88, 90, 98, 99, 102, 109, 114, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 275, 277, 281, 283, 290, 292, 296, 301, 303, 305, 307, 309, 310, 311, 317, 324, 335, 344, 354, 355, 357, 360, 363, 364, 367, 370, 373, 375, 377, 382, 385, 390, 396, 401, 409, 417, 425, 433, 441, 446, 453, 468, 472, 481, 486, 493, 497, 501, 505, 509, 513, 517, 522, 527, 532, 537, 542, 547, 552, 556, 561, 566, 571, 576, 581, 588, 597, 602, 603, 605, 609, 615, 622, 630, 634, 636, 640, 642, 644, 646, 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, 668, 670, 672, 674, 678, 683, 685, 688, 691, 694, 698, 702, 706, 710, 714, 718, 722, 726, 730, 734, 738, 742, 746, 750, 754, 758, 762, 766, 770, 776, 780, 784, 786, 789, 795, 799, 801, 805, 807, 809, 811, 813, 816, 819, 823, 826, 828, 831, 833, 835, 837, 839, 841, 845, 849, 851, 852, 858, 861, 863, 865, 867, 870, 873, 877, 881, 883, 886, 887, 892, 894, 896, 898, 900, 902, 904, 906, 910, 911, 915, 917, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972, 974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1039 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int16 yyrhs[] = { 160, 0, -1, -1, 161, 162, -1, -1, 163, -1, 162, 163, -1, 166, -1, 179, -1, 166, -1, 164, 166, -1, 154, 155, -1, 165, -1, 154, 164, 155, -1, 156, -1, 207, 156, -1, 170, -1, 185, -1, 187, -1, 188, -1, 173, -1, 168, -1, 167, -1, 20, 157, 202, 158, 154, 164, 155, -1, 18, 156, -1, 18, 203, 156, -1, 207, -1, 169, 132, 207, -1, 12, 157, 202, 158, 166, 6, 166, -1, 12, 157, 202, 158, 166, -1, -1, 202, -1, 7, -1, 172, 157, 202, 158, 154, 174, 155, -1, -1, 174, 175, -1, 8, 202, 136, 164, 3, 156, -1, 8, 202, 136, 164, -1, 9, 136, 164, -1, 109, -1, 16, -1, 17, -1, 23, -1, 24, -1, 25, -1, 26, -1, 27, -1, 28, -1, 29, -1, 30, -1, 31, -1, 32, -1, 33, -1, 34, -1, 35, -1, 36, -1, 37, -1, 38, -1, 39, -1, 40, -1, 41, -1, 42, -1, 43, -1, 44, -1, 45, -1, 46, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, 59, -1, 60, -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, 66, -1, 67, -1, 68, -1, 69, -1, 70, -1, 71, -1, 72, -1, 73, -1, 74, -1, 75, -1, 76, -1, 77, -1, 78, -1, 79, -1, 80, -1, 81, -1, 82, -1, 83, -1, 99, -1, 100, -1, 84, -1, 85, -1, 86, -1, 87, -1, 88, -1, 89, -1, 90, -1, 91, -1, 92, -1, 93, -1, 94, -1, 95, -1, -1, 176, -1, 177, 132, 176, -1, 5, -1, 178, 176, 157, 177, 158, 166, -1, 176, -1, 202, 151, 176, -1, 202, 152, 202, 153, -1, 192, -1, 195, -1, 13, -1, 14, -1, -1, -1, 181, 157, 202, 158, 166, -1, 182, 166, 13, 157, 202, 158, -1, 10, 157, 186, 156, 171, 156, 186, 158, 183, 166, -1, 10, 157, 176, 11, 180, 158, 184, 166, -1, 10, 157, 15, 176, 11, 180, 158, 184, 166, -1, -1, 169, -1, 4, 156, -1, 3, 156, -1, -1, 132, 93, -1, 132, 92, -1, 132, 108, -1, 104, -1, 202, -1, 109, 157, 193, 158, -1, 17, 109, -1, 17, 200, 151, 109, -1, 17, 200, 152, 202, 153, -1, 28, 157, 203, 158, -1, 32, 157, 202, 132, 202, 189, 158, -1, 94, 157, 202, 132, 202, 189, 158, -1, 96, 157, 202, 132, 190, 189, 158, -1, 95, 157, 202, 132, 202, 189, 158, -1, 97, 157, 202, 132, 190, 189, 158, -1, 98, 157, 202, 158, -1, 99, 157, 202, 132, 202, 158, -1, 99, 157, 202, 132, 202, 132, 202, 132, 202, 132, 202, 132, 202, 158, -1, 100, 157, 158, -1, 82, 157, 202, 132, 202, 132, 202, 158, -1, 83, 157, 202, 158, -1, 33, 157, 108, 132, 108, 158, -1, 34, 157, 158, -1, 35, 157, 158, -1, 36, 157, 158, -1, 37, 157, 158, -1, 39, 157, 158, -1, 38, 157, 158, -1, 101, 157, 104, 158, -1, 101, 157, 108, 158, -1, 101, 157, 202, 158, -1, 102, 157, 108, 158, -1, 102, 157, 202, 158, -1, 109, 157, 193, 158, -1, 22, 157, 202, 158, -1, 24, 157, 158, -1, 23, 157, 202, 158, -1, 25, 157, 203, 158, -1, 29, 157, 202, 158, -1, 30, 157, 202, 158, -1, 31, 157, 202, 158, -1, 26, 157, 202, 132, 202, 158, -1, 78, 157, 202, 132, 202, 132, 202, 158, -1, 56, 157, 203, 158, -1, -1, 203, -1, 193, 132, 203, -1, 178, 157, 177, 158, 166, -1, 200, 151, 176, 157, 193, 158, -1, 200, 152, 202, 153, 157, 193, 158, -1, 176, 136, 203, -1, 196, -1, 197, 132, 196, -1, 118, -1, 121, -1, 120, -1, 119, -1, 122, -1, 123, -1, 124, -1, 134, -1, 128, -1, 129, -1, 130, -1, 116, -1, 117, -1, 201, -1, 192, -1, 195, -1, 176, -1, 200, 151, 176, -1, 200, 152, 202, 153, -1, 204, -1, 143, 202, -1, 148, 202, -1, 147, 202, -1, 202, 115, 202, -1, 202, 114, 202, -1, 202, 144, 202, -1, 202, 145, 202, -1, 202, 146, 202, -1, 202, 142, 202, -1, 202, 143, 202, -1, 202, 139, 202, -1, 202, 140, 202, -1, 202, 141, 202, -1, 202, 137, 202, -1, 202, 138, 202, -1, 202, 111, 202, -1, 202, 112, 202, -1, 202, 110, 202, -1, 202, 113, 202, -1, 202, 125, 202, -1, 202, 126, 202, -1, 202, 127, 202, -1, 202, 135, 202, 136, 202, -1, 201, 133, 203, -1, 202, 57, 200, -1, 202, -1, 16, 176, -1, 16, 176, 157, 193, 158, -1, 152, 193, 153, -1, 165, -1, 154, 197, 155, -1, 192, -1, 194, -1, 195, -1, 200, -1, 199, 201, -1, 201, 199, -1, 157, 202, 158, -1, 143, 104, -1, 104, -1, 143, 105, -1, 105, -1, 106, -1, 103, -1, 108, -1, 206, -1, 205, 132, 206, -1, 176, 133, 203, -1, 176, -1, -1, 21, 154, 208, 209, 155, -1, 15, 205, -1, 191, -1, 192, -1, 195, -1, 199, 201, -1, 201, 199, -1, 201, 133, 203, -1, 201, 198, 202, -1, 214, -1, 209, 214, -1, -1, 20, 211, 209, 19, -1, 108, -1, 104, -1, 105, -1, 106, -1, 103, -1, 107, -1, 212, -1, 213, 132, 212, -1, -1, 43, 215, 213, -1, 210, -1, 44, 107, -1, 45, -1, 18, -1, 46, -1, 47, -1, 48, -1, 49, -1, 50, -1, 51, -1, 52, -1, 53, -1, 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, 17, -1, 16, -1, 60, -1, 59, -1, 61, -1, 62, -1, 63, -1, 64, -1, 65, -1, 15, -1, 66, -1, 67, -1, 68, -1, 69, -1, 70, -1, 71, -1, 72, -1, 73, -1, 74, -1, 75, -1, 76, -1, 77, -1, 78, -1, 29, -1, 40, -1, 41, -1, 42, -1, 79, -1, 80, -1, 81, -1, 26, -1, 82, -1, 83, -1, 28, -1, 84, -1, 23, -1, 85, -1, 30, -1, 31, -1, 24, -1, 86, -1, 87, -1, 88, -1, 89, 108, -1, 90, 108, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 152, 152, 152, 160, 164, 165, 169, 171, 176, 179, 185, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 203, 214, 224, 236, 237, 241, 252, 262, 263, 267, 272, 286, 289, 297, 302, 307, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 399, 402, 407, 414, 419, 433, 438, 444, 449, 451, 455, 460, 466, 471, 475, 488, 501, 536, 569, 603, 604, 610, 621, 634, 636, 638, 640, 647, 654, 662, 670, 676, 683, 690, 694, 701, 708, 715, 722, 729, 735, 742, 753, 758, 766, 770, 780, 784, 788, 792, 796, 800, 804, 810, 817, 823, 830, 839, 846, 850, 854, 858, 862, 866, 870, 874, 879, 885, 894, 897, 902, 911, 924, 932, 941, 948, 952, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 972, 973, 991, 1009, 1010, 1015, 1022, 1028, 1037, 1039, 1044, 1049, 1053, 1062, 1072, 1077, 1082, 1087, 1092, 1097, 1102, 1107, 1112, 1117, 1122, 1128, 1133, 1137, 1142, 1146, 1150, 1154, 1164, 1191, 1199, 1201, 1207, 1213, 1218, 1223, 1231, 1233, 1235, 1237, 1239, 1284, 1329, 1332, 1336, 1340, 1344, 1348, 1352, 1356, 1363, 1365, 1371, 1377, 1385, 1384, 1389, 1392, 1394, 1398, 1402, 1441, 1480, 1501, 1546, 1547, 1552, 1551, 1559, 1562, 1565, 1568, 1571, 1573, 1580, 1581, 1585, 1585, 1591, 1593, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 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, 1688, 1692 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "BREAK", "CONTINUE", "FUNCTION", "ELSE", "SWITCH", "CASE", "DEFAULT", "FOR", "IN", "IF", "WHILE", "DO", "VAR", "NEW", "DELETE", "RETURN", "END", "WITH", "ASM", "EVAL", "RANDOM", "GETTIMER", "LENGTH", "CONCAT", "SUBSTR", "TRACE", "INT", "ORD", "CHR", "GETURL", "GETURL1", "NEXTFRAME", "PREVFRAME", "PLAY", "STOP", "TOGGLEQUALITY", "STOPSOUNDS", "DUP", "SWAP", "POP", "PUSH", "SETREGISTER", "CALLFUNCTION", "CALLMETHOD", "AND", "OR", "XOR", "MODULO", "ADD", "LESSTHAN", "EQUALS", "INC", "DEC", "TYPEOF", "INSTANCEOF", "ENUMERATE", "INITOBJECT", "INITARRAY", "GETMEMBER", "SETMEMBER", "SHIFTLEFT", "SHIFTRIGHT", "SHIFTRIGHT2", "VAREQUALS", "OLDADD", "SUBTRACT", "MULTIPLY", "DIVIDE", "OLDEQUALS", "OLDLESSTHAN", "LOGICALAND", "LOGICALOR", "NOT", "STRINGEQ", "STRINGLENGTH", "SUBSTRING", "GETVARIABLE", "SETVARIABLE", "SETTARGETEXPRESSION", "DUPLICATEMOVIECLIP", "REMOVEMOVIECLIP", "STRINGLESSTHAN", "MBLENGTH", "MBSUBSTRING", "MBORD", "MBCHR", "BRANCHALWAYS", "BRANCHIFTRUE", "GETURL2", "POST", "GET", "LOADVARIABLES", "LOADMOVIE", "LOADVARIABLESNUM", "LOADMOVIENUM", "CALLFRAME", "STARTDRAG", "STOPDRAG", "GOTOFRAME", "SETTARGET", "NULLVAL", "INTEGER", "DOUBLE", "BOOLEAN", "REGISTER", "STRING", "IDENTIFIER", "\"==\"", "\"<=\"", "\">=\"", "\"!=\"", "\"&&\"", "\"||\"", "\"++\"", "\"--\"", "\"+=\"", "\"/=\"", "\"*=\"", "\"-=\"", "\"%=\"", "\"&=\"", "\"|=\"", "\"<<\"", "\">>\"", "\">>>\"", "\"<<=\"", "\">>=\"", "\">>>=\"", "NOELSE", "','", "'='", "\"^=\"", "'?'", "':'", "'<'", "'>'", "'&'", "'|'", "'^'", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "'~'", "UMINUS", "POSTFIX", "'.'", "'['", "']'", "'{'", "'}'", "';'", "'('", "')'", "$accept", "program", "@1", "code", "anycode", "stmts", "emptybraces", "stmt", "with_stmt", "return_stmt", "assign_stmts", "if_stmt", "expr_opt", "switch_init", "switch_stmt", "switch_cases", "switch_case", "identifier", "formals_list", "function_init", "function_decl", "obj_ref", "while_init", "do_init", "for_init", "for_in_init", "iter_stmt", "assign_stmts_opt", "cont_stmt", "break_stmt", "urlmethod", "level", "void_function_call", "function_call", "expr_list", "anon_function_decl", "method_call", "objexpr", "objexpr_list", "assignop", "incdecop", "lvalue_expr", "lvalue", "expr", "expr_or_obj", "primary", "init_vars", "init_var", "assign_stmt", "@2", "opcode_list", "with", "@3", "push_item", "push_list", "opcode", "@4", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 44, 61, 387, 63, 58, 60, 62, 38, 124, 94, 43, 45, 42, 47, 37, 33, 126, 388, 389, 46, 91, 93, 123, 125, 59, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 159, 161, 160, 160, 162, 162, 163, 163, 164, 164, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 168, 168, 169, 169, 170, 170, 171, 171, 172, 173, 174, 174, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 178, 179, 180, 180, 180, 180, 180, 181, 182, 183, 184, 185, 185, 185, 185, 185, 186, 186, 187, 188, 189, 189, 189, 189, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 194, 195, 195, 196, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 206, 206, 208, 207, 207, 207, 207, 207, 207, 207, 207, 207, 209, 209, 211, 210, 212, 212, 212, 212, 212, 212, 213, 213, 215, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 0, 1, 2, 1, 1, 1, 2, 2, 1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 7, 2, 3, 1, 3, 7, 5, 0, 1, 1, 7, 0, 2, 6, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 1, 6, 1, 3, 4, 1, 1, 1, 1, 0, 0, 5, 6, 10, 8, 9, 0, 1, 2, 2, 0, 2, 2, 2, 1, 1, 4, 2, 4, 5, 4, 7, 7, 7, 7, 7, 4, 6, 14, 3, 8, 4, 6, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 6, 8, 4, 0, 1, 3, 5, 6, 7, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1, 2, 5, 3, 1, 3, 1, 1, 1, 1, 2, 2, 3, 2, 1, 2, 1, 1, 1, 1, 1, 3, 3, 1, 0, 5, 2, 1, 1, 1, 2, 2, 3, 3, 1, 2, 0, 4, 1, 1, 1, 1, 1, 1, 1, 3, 0, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint16 yydefact[] = { 2, 0, 0, 1, 0, 0, 120, 32, 0, 0, 127, 128, 0, 40, 41, 0, 0, 0, 0, 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, 100, 101, 102, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, 103, 104, 0, 0, 39, 205, 206, 0, 14, 3, 5, 12, 7, 22, 21, 16, 0, 20, 210, 0, 8, 0, 0, 17, 18, 19, 266, 267, 268, 0, 0, 207, 0, 139, 138, 136, 0, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 75, 97, 101, 102, 115, 116, 103, 104, 39, 262, 265, 259, 147, 208, 209, 0, 207, 40, 257, 253, 255, 256, 258, 39, 0, 0, 0, 185, 0, 24, 0, 243, 0, 208, 246, 209, 0, 248, 207, 239, 0, 213, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 11, 0, 9, 6, 0, 0, 0, 0, 269, 0, 0, 194, 197, 196, 195, 198, 199, 200, 202, 203, 204, 0, 201, 0, 270, 15, 0, 137, 210, 0, 26, 0, 0, 0, 185, 0, 0, 240, 252, 254, 214, 216, 215, 0, 186, 0, 192, 0, 0, 117, 249, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 166, 168, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 159, 253, 258, 0, 258, 0, 0, 13, 10, 0, 117, 0, 0, 211, 0, 271, 272, 262, 0, 0, 30, 0, 261, 260, 0, 39, 0, 185, 0, 242, 0, 0, 244, 251, 118, 0, 237, 238, 231, 229, 230, 232, 218, 217, 233, 234, 235, 0, 227, 228, 224, 225, 226, 222, 223, 219, 220, 221, 0, 313, 305, 304, 290, 275, 339, 343, 334, 337, 327, 341, 342, 328, 329, 330, 285, 0, 289, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 307, 306, 308, 309, 310, 311, 312, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 331, 332, 333, 335, 336, 338, 340, 344, 345, 346, 0, 0, 0, 287, 273, 175, 177, 178, 0, 150, 179, 180, 181, 0, 0, 184, 0, 0, 161, 0, 0, 0, 0, 156, 0, 169, 170, 171, 172, 173, 146, 0, 0, 0, 0, 185, 212, 0, 27, 210, 0, 208, 209, 0, 0, 31, 29, 174, 149, 0, 187, 191, 193, 0, 0, 0, 0, 0, 0, 288, 347, 348, 264, 274, 0, 140, 0, 0, 0, 140, 140, 253, 140, 145, 140, 0, 34, 0, 131, 0, 0, 185, 0, 130, 0, 0, 136, 0, 241, 119, 188, 236, 0, 0, 281, 278, 279, 280, 282, 277, 283, 286, 182, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 157, 0, 121, 132, 189, 0, 130, 0, 123, 0, 0, 28, 23, 276, 0, 142, 141, 143, 151, 0, 0, 152, 154, 153, 155, 0, 0, 0, 33, 35, 190, 0, 134, 124, 129, 284, 183, 160, 0, 0, 0, 135, 0, 0, 0, 38, 133, 0, 37, 0, 0, 0, 139, 0, 158 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 1, 2, 104, 105, 225, 106, 226, 108, 109, 251, 110, 492, 111, 112, 562, 590, 113, 363, 181, 115, 488, 116, 117, 603, 568, 118, 253, 119, 120, 552, 520, 121, 182, 267, 183, 184, 270, 271, 247, 185, 186, 187, 188, 268, 190, 159, 160, 127, 300, 450, 451, 505, 548, 549, 452, 506 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -496 static const yytype_int16 yypact[] = { 17, 30, 908, -496, -136, -123, -496, -496, -126, -105, -496, -496, 4178, -496, 4003, 1907, -101, -120, -88, -80, -75, -72, -65, -496, -62, -50, -43, -40, -38, -31, -30, -28, -27, -25, -24, -21, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -20, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -18, -496, -496, -496, -17, -16, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -15, -11, -8, -5, 5, 6, 7, 8, 9, 22, -496, -496, 1165, -496, 908, -496, -496, -496, -496, -496, -496, 23, -496, -496, 4178, -496, 24, 1627, -496, -496, -496, -496, -125, -97, 4091, -78, -58, -57, -496, -496, 3137, 2190, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 49, -96, -496, -71, -496, -496, -64, -496, 4178, -496, -496, -496, -496, -496, 27, 2326, 2190, 2190, 2051, 3002, -496, 2190, -496, 37, -496, -496, -496, 4091, -78, -49, 4896, -47, -496, 2190, -496, 2190, 2190, -3, 2051, 2190, 2051, 2190, 2190, 2190, 2190, 45, 40, 42, 47, 48, 51, 52, 2051, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 53, 2462, 2598, 2051, -496, 1319, -496, -496, 2190, 39, 2190, 143, -54, 4178, 2190, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 2051, -496, 2190, -496, -496, 4178, 69, 174, 46, -496, 331, 2051, 4178, 2051, 4265, 2190, 50, -496, -496, 146, 146, 146, -103, -496, 76, -496, -113, 576, 4178, -54, 2051, -496, 4091, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, -496, 750, 5163, 962, 999, -496, 55, 688, 56, 2850, 3280, 3317, 4304, 86, -496, -496, -496, -496, -496, -496, 58, 4341, 4378, 3354, 4415, 4452, 4489, 4526, 3391, 4563, -496, 61, 62, 3428, 64, 3465, -119, -496, -496, 3502, 4178, 3539, 68, 70, 3761, -496, 4896, -9, 3234, 2190, 2190, 1627, -496, -496, -118, -121, 3798, 2051, 2051, -496, 2051, 4178, -496, -496, -496, -117, -496, -78, 4955, 192, 192, 4955, 4933, 4933, 26, 26, 26, 4600, 192, 192, 32, 32, 32, -33, -33, 146, 146, 146, 75, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 123, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, 124, 125, 2869, -496, -496, -496, -496, -496, 2190, -496, -496, -496, -496, 2190, 127, -496, 2190, 2190, -496, 2190, 2190, 2734, 2734, -496, 2190, -496, -496, -496, -496, -496, -48, 77, -114, 1627, 2190, 2051, 80, 2190, -496, 82, 83, 88, 89, 3872, 94, 4896, 236, -496, -61, -111, -496, -496, -496, 4178, 1627, 2190, 1627, 5163, 84, -496, -496, -496, -496, -496, 3576, 4637, 96, 4674, 4711, 4637, 4637, -110, 112, 4896, 112, 289, -496, 1627, -496, 3613, -109, 2051, 97, -496, 4178, 2190, 3234, 1627, -496, -496, -496, 4896, 1473, 5087, -496, -496, -496, -496, -496, -496, -496, 120, -496, -14, 98, -496, 2190, 2190, 99, 101, 102, 103, 2190, -496, -4, -496, -496, -496, -107, -496, 1627, -496, 3835, 104, -496, -496, -496, 84, -496, -496, -496, -496, 3650, 3687, -496, -496, -496, -496, 4748, 2190, 128, -496, -496, -496, 1627, -496, -496, -496, -496, -496, -496, 2190, 4785, 1627, -496, 1627, 4822, 1627, 1627, -496, 2190, 1772, 4859, 109, 2190, -1, 3724, -496 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -496, -496, -496, -496, 162, -495, 28, 44, -496, -496, -496, -496, -496, -496, -496, -496, -496, 20, -66, 4, -496, -211, -496, -496, -496, -289, -496, -254, -496, -496, -397, -189, -496, -2, -220, -496, 14, -77, -496, -496, 141, 43, 91, 562, 38, -496, -496, 31, -129, -496, -218, -496, -496, -290, -496, -440, -496 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -213 static const yytype_int16 yytable[] = { 122, 254, 485, 334, 587, 588, 114, -36, -36, 540, 511, -148, 162, 356, 356, 501, 123, -4, 501, 359, 128, 356, -144, 356, 277, 356, -208, -208, 163, 356, 3, 130, 158, 129, 192, -148, 257, -148, 352, 478, 495, 502, 360, 180, 525, 125, 107, 536, -144, 565, 357, 591, 131, 189, -209, -209, 191, 164, 100, 101, 235, 236, 237, 238, 239, 240, 241, 100, 101, 193, 242, 243, 244, 233, 234, 245, 246, 194, 576, 577, -39, -39, 195, 277, 275, 196, 258, 259, 260, 277, -212, -212, 197, 126, 578, 198, 529, -207, -207, 249, 122, 511, 122, -174, -174, 165, 606, 199, 114, 298, 609, 295, 296, 297, 200, 122, 123, 201, 123, 202, 556, 557, 162, 558, 256, 559, 203, 204, 122, 205, 206, 123, 207, 208, 229, 497, 209, 210, 163, 211, 212, 213, 214, 124, 123, 125, 215, 125, 107, 216, 252, 589, 217, 311, -36, 303, 340, 284, 285, 286, 125, 231, 218, 219, 220, 221, 222, 125, 293, 294, 295, 296, 297, 125, 293, 294, 295, 296, 297, 223, 228, 230, 256, 162, 258, 347, 261, 542, 543, 544, 545, 546, 547, 126, 273, 126, 338, 269, 312, 163, 313, 346, 348, 277, 180, 314, 315, 355, 126, 316, 317, 328, 358, 455, 457, 232, 463, 486, 462, 473, 474, 126, 476, 122, 180, 482, 180, 483, 125, 504, 507, 524, 508, 509, 304, 514, 306, 529, 180, 123, -122, 531, 535, 124, 551, 124, -125, -126, 318, 277, 534, 180, 575, 341, 553, 567, 579, 582, 124, 583, 584, 585, 595, 528, 601, 613, 227, 248, 125, 336, 345, 124, 480, 180, 530, 162, 274, 158, 592, 341, 571, 522, 500, 343, 180, 596, 180, 541, 351, 0, 0, 163, 0, 362, 350, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 566, 0, 0, 0, 364, 0, 0, 126, 284, 285, 286, 365, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 122, 489, 277, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 362, 0, 123, 490, 0, 123, 0, 0, 124, 487, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 180, 180, 0, 180, 0, 277, 125, 0, 0, 125, 494, 498, 0, 499, 0, 0, 278, 279, 280, 281, 282, 283, 254, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 560, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 126, 0, 0, 126, 278, 279, 280, 281, 282, 283, 561, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 122, 0, 0, 0, 489, 0, 0, 0, 124, 0, 349, 124, 0, 0, 0, 0, 123, 0, 0, 0, 490, 122, 0, 122, 0, 0, 487, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 123, 0, 123, 0, 0, 537, 0, 122, 125, 526, 0, 0, 0, 0, 0, 0, 122, 122, 0, 0, 0, 0, 122, 123, 0, 0, 0, 0, 0, 125, 538, 125, 123, 123, 0, 0, 569, 0, 123, 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 125, 563, 0, 0, 126, 0, 0, 0, 0, 125, 125, 572, 0, 0, 123, 125, 336, 0, 0, 0, 0, 0, 122, 0, 0, 126, 0, 126, 0, 0, 0, 122, 0, 122, 0, 122, 122, 0, 123, 122, 0, 0, 0, 125, 593, 0, 0, 123, 126, 123, 0, 123, 123, 0, 124, 123, 0, 126, 126, 0, 0, 0, 0, 126, 0, 277, 0, 125, 602, 0, 0, 0, 0, 0, 0, 124, 125, 124, 125, 607, 125, 125, 336, 0, 125, 336, 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, 124, 124, 0, 0, 0, 0, 124, 0, 126, 0, 0, 278, 279, 280, 281, 282, 283, 126, 255, 126, 0, 126, 126, 0, 0, 126, 284, 285, 286, 0, 0, 0, 0, 0, 124, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 361, 264, 265, 266, 0, 0, 0, 272, 124, 0, 124, 277, 124, 124, 0, 0, 124, 0, 0, 299, 0, 301, 302, 0, 0, 305, 0, 307, 308, 309, 310, 0, 0, 0, 0, 0, 0, 0, 0, 319, 320, 321, 322, 323, 324, 325, 326, 327, 0, 331, 333, 0, 0, 0, 0, 0, 337, 0, 339, 0, 0, 0, 342, 0, 278, 279, 280, 281, 282, 283, 0, 0, 0, 277, 0, 344, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 456, 0, 354, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 491, 493, 4, 5, 6, 0, 7, 0, 0, 8, 0, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 512, 277, 0, 0, 0, 513, 100, 101, 515, 516, 0, 517, 518, 521, 521, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, 0, 491, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 102, 0, 103, 539, 0, 0, 0, 0, 0, 0, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 570, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 580, 581, 0, 0, 453, 0, 586, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 454, 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, 4, 5, 610, 0, 7, 0, 614, 8, 0, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 224, 103, 4, 5, 0, 0, 7, 0, 0, 8, 0, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 335, 103, 4, 5, 0, 0, 7, 0, 0, 8, 0, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 573, 103, 4, 5, 0, 0, 7, 0, 0, 8, 0, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 5, 0, 0, 7, 0, 102, 8, 103, 9, 10, 11, 12, 13, 14, 15, 0, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 132, 0, 102, 0, 103, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 168, 169, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 174, 175, 6, 0, 0, 176, 0, 177, 0, 178, 179, 0, 0, 166, 132, 0, 0, 0, 0, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 168, 169, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 6, 0, 0, 174, 175, 0, 0, 0, 176, 0, 177, 13, 132, 179, 0, 0, 0, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 168, 169, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 173, 0, 0, 0, 174, 175, 0, 0, 0, 13, 132, 0, 0, 0, 179, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 262, 263, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 173, 0, 0, 0, 174, 175, 0, 0, 0, 13, 132, 0, 0, 0, 179, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 329, 169, 170, 0, 330, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 173, 0, 0, 0, 174, 175, 0, 0, 0, 13, 132, 0, 0, 0, 179, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 168, 169, 170, 0, 332, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 173, 0, 0, 0, 174, 175, 0, 0, 0, 13, 132, 0, 0, 0, 179, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 167, 519, 169, 170, 0, 171, 172, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 174, 175, 0, 387, 388, 389, 390, 0, 391, 0, 179, 392, 393, 0, 394, 0, 395, 396, 397, 398, 0, 0, 0, 0, 0, 0, 277, 0, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 132, 0, 0, 0, 0, 510, 133, 134, 135, 136, 23, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 149, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 150, 75, 76, 77, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 13, 14, 0, 0, 224, 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, 0, 0, 0, 0, 0, 0, 99, 0, 0, 12, 13, 14, 0, 100, 101, 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, 277, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 459, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 460, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 466, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 471, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 475, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 477, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 479, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 481, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 550, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 564, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 597, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 598, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 615, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 484, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 496, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 594, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 13, 132, 0, 0, 532, 533, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 0, 13, 132, 0, 0, 0, 161, 18, 19, 20, 21, 22, 23, 137, 25, 26, 27, 141, 142, 143, 144, 145, 146, 147, 148, 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, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 13, 132, 0, 0, 0, 0, 172, 133, 134, 135, 136, 23, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 149, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 150, 75, 76, 77, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 0, 0, 0, 155, 156, 0, 0, 13, 132, 0, 0, 0, 0, 157, 133, 134, 135, 136, 23, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 149, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 150, 75, 76, 77, 151, 152, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 153, 154, 277, 0, 0, 155, 156, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 461, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 464, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 465, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 467, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 468, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 469, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 470, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 472, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 503, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 551, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 554, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 555, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 599, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 0, 0, 0, 287, 605, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 608, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 277, 612, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 282, 283, 277, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 287, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 278, 279, 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 279, 280, 0, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 387, 388, 389, 390, 574, 391, 0, 0, 392, 393, 0, 394, 0, 395, 396, 397, 398, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 387, 388, 389, 390, 0, 391, 0, 0, 392, 393, 0, 394, 0, 395, 396, 397, 398, 0, 0, 0, 0, 0, 0, 0, 0, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449 }; static const yytype_int16 yycheck[] = { 2, 130, 11, 223, 8, 9, 2, 8, 9, 504, 450, 132, 14, 132, 132, 132, 2, 0, 132, 132, 156, 132, 132, 132, 57, 132, 151, 152, 14, 132, 0, 157, 12, 156, 154, 156, 132, 158, 258, 158, 158, 158, 155, 15, 158, 2, 2, 158, 158, 158, 153, 158, 157, 15, 151, 152, 157, 14, 116, 117, 118, 119, 120, 121, 122, 123, 124, 116, 117, 157, 128, 129, 130, 151, 152, 133, 134, 157, 92, 93, 151, 152, 157, 57, 133, 157, 157, 151, 152, 57, 151, 152, 157, 2, 108, 157, 157, 151, 152, 156, 102, 541, 104, 151, 152, 14, 601, 157, 104, 156, 605, 144, 145, 146, 157, 117, 102, 157, 104, 157, 517, 518, 124, 520, 133, 522, 157, 157, 130, 157, 157, 117, 157, 157, 114, 355, 157, 157, 124, 157, 157, 157, 157, 2, 130, 102, 157, 104, 104, 157, 130, 155, 157, 108, 155, 158, 13, 125, 126, 127, 117, 117, 157, 157, 157, 157, 157, 124, 142, 143, 144, 145, 146, 130, 142, 143, 144, 145, 146, 157, 157, 157, 133, 185, 157, 11, 166, 103, 104, 105, 106, 107, 108, 102, 157, 104, 157, 177, 158, 185, 158, 132, 156, 57, 176, 158, 158, 157, 117, 158, 158, 158, 136, 158, 158, 124, 158, 346, 132, 158, 158, 130, 158, 225, 196, 157, 198, 157, 185, 154, 107, 154, 108, 108, 196, 108, 198, 157, 210, 225, 158, 158, 6, 102, 132, 104, 158, 158, 210, 57, 156, 223, 132, 233, 158, 158, 158, 158, 117, 158, 158, 158, 158, 483, 136, 156, 104, 126, 225, 225, 250, 130, 338, 245, 485, 277, 185, 257, 567, 259, 534, 470, 359, 245, 256, 575, 258, 505, 257, -1, -1, 277, -1, 273, 256, -1, -1, -1, -1, -1, -1, -1, -1, 275, -1, -1, -1, -1, -1, 529, -1, -1, -1, 275, -1, -1, 225, 125, 126, 127, 277, -1, -1, -1, -1, -1, -1, -1, 187, -1, -1, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, 346, 347, 57, 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, -1, 346, 347, -1, 349, -1, -1, 225, 347, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, -1, -1, -1, 355, 356, -1, 358, -1, 57, 346, -1, -1, 349, 349, 356, -1, 358, -1, -1, 110, 111, 112, 113, 114, 115, 534, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, 346, -1, -1, 349, 110, 111, 112, 113, 114, 115, 158, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, 481, -1, -1, -1, 485, -1, -1, -1, 346, -1, 158, 349, -1, -1, -1, -1, 481, -1, -1, -1, 485, 502, -1, 504, -1, -1, 485, -1, -1, -1, -1, -1, 483, -1, -1, -1, -1, 502, -1, 504, -1, -1, 501, -1, 525, 481, 481, -1, -1, -1, -1, -1, -1, 534, 535, -1, -1, -1, -1, 540, 525, -1, -1, -1, -1, -1, 502, 502, 504, 534, 535, -1, -1, 532, -1, 540, -1, -1, 529, -1, -1, -1, -1, -1, -1, -1, -1, 568, -1, 525, 525, -1, -1, 481, -1, -1, -1, -1, 534, 535, 535, -1, -1, 568, 540, 540, -1, -1, -1, -1, -1, 592, -1, -1, 502, -1, 504, -1, -1, -1, 601, -1, 603, -1, 605, 606, -1, 592, 609, -1, -1, -1, 568, 568, -1, -1, 601, 525, 603, -1, 605, 606, -1, 481, 609, -1, 534, 535, -1, -1, -1, -1, 540, -1, 57, -1, 592, 592, -1, -1, -1, -1, -1, -1, 502, 601, 504, 603, 603, 605, 606, 606, -1, 609, 609, -1, -1, -1, -1, -1, 568, -1, -1, -1, -1, -1, -1, 525, -1, -1, -1, -1, -1, -1, -1, -1, 534, 535, -1, -1, -1, -1, 540, -1, 592, -1, -1, 110, 111, 112, 113, 114, 115, 601, 131, 603, -1, 605, 606, -1, -1, 609, 125, 126, 127, -1, -1, -1, -1, -1, 568, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 592, 158, 173, 174, 175, -1, -1, -1, 179, 601, -1, 603, 57, 605, 606, -1, -1, 609, -1, -1, 191, -1, 193, 194, -1, -1, 197, -1, 199, 200, 201, 202, -1, -1, -1, -1, -1, -1, -1, -1, 211, 212, 213, 214, 215, 216, 217, 218, 219, -1, 221, 222, -1, -1, -1, -1, -1, 228, -1, 230, -1, -1, -1, 234, -1, 110, 111, 112, 113, 114, 115, -1, -1, -1, 57, -1, 247, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, 132, -1, 260, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 158, 347, 348, 3, 4, 5, -1, 7, -1, -1, 10, -1, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, 456, 57, -1, -1, -1, 461, 116, 117, 464, 465, -1, 467, 468, 469, 470, -1, 472, -1, -1, -1, -1, -1, -1, -1, -1, -1, 482, -1, -1, 485, -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, 154, -1, 156, 503, -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, 533, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, 554, 555, -1, -1, 158, -1, 560, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, 587, -1, -1, -1, -1, -1, -1, -1, 158, -1, -1, -1, 599, -1, -1, -1, -1, -1, -1, 3, 4, 608, -1, 7, -1, 612, 10, -1, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, 155, 156, 3, 4, -1, -1, 7, -1, -1, 10, -1, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, 155, 156, 3, 4, -1, -1, 7, -1, -1, 10, -1, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, 155, 156, 3, 4, -1, -1, 7, -1, -1, 10, -1, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, -1, -1, 7, -1, 154, 10, 156, 12, 13, 14, 15, 16, 17, 18, -1, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 17, -1, 154, -1, 156, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1, -1, -1, 147, 148, 5, -1, -1, 152, -1, 154, -1, 156, 157, -1, -1, 16, 17, -1, -1, -1, -1, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, 5, -1, -1, 147, 148, -1, -1, -1, 152, -1, 154, 16, 17, 157, -1, -1, -1, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 143, -1, -1, -1, 147, 148, -1, -1, -1, 16, 17, -1, -1, -1, 157, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 143, -1, -1, -1, 147, 148, -1, -1, -1, 16, 17, -1, -1, -1, 157, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 143, -1, -1, -1, 147, 148, -1, -1, -1, 16, 17, -1, -1, -1, 157, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 143, -1, -1, -1, 147, 148, -1, -1, -1, 16, 17, -1, -1, -1, 157, 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, -1, -1, -1, 99, 100, -1, -1, 103, 104, 105, 106, -1, 108, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1, -1, -1, 147, 148, -1, 15, 16, 17, 18, -1, 20, -1, 157, 23, 24, -1, 26, -1, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, 57, -1, 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, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 17, -1, -1, -1, -1, 155, 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, -1, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, 16, 17, -1, -1, 155, 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, 100, 101, 102, -1, -1, -1, -1, -1, -1, 109, -1, -1, 15, 16, 17, -1, 116, 117, 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, 100, 101, 102, 57, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, 116, 117, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, 158, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, 153, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, 153, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, 153, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 16, 17, -1, -1, 151, 152, 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, -1, -1, -1, 99, 100, -1, -1, -1, 16, 17, -1, -1, -1, 109, 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, -1, -1, -1, 99, 100, -1, -1, 16, 17, -1, -1, -1, -1, 109, 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, -1, -1, -1, 99, 100, -1, -1, 16, 17, -1, -1, -1, -1, 109, 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, 57, -1, -1, 99, 100, -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, -1, -1, -1, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, 57, 132, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, 114, 115, 57, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, 135, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 110, 111, 112, 113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, 126, 127, -1, -1, -1, -1, -1, 111, 112, -1, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 125, 126, 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 15, 16, 17, 18, 19, 20, -1, -1, 23, 24, -1, 26, -1, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, 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, 15, 16, 17, 18, -1, 20, -1, -1, 23, 24, -1, 26, -1, 28, 29, 30, 31, -1, -1, -1, -1, -1, -1, -1, -1, 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 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 160, 161, 0, 3, 4, 5, 7, 10, 12, 13, 14, 15, 16, 17, 18, 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, 100, 101, 102, 109, 116, 117, 154, 156, 162, 163, 165, 166, 167, 168, 170, 172, 173, 176, 178, 179, 181, 182, 185, 187, 188, 191, 192, 195, 199, 200, 201, 207, 156, 156, 157, 157, 17, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 56, 78, 82, 83, 94, 95, 99, 100, 109, 176, 205, 206, 109, 192, 195, 200, 201, 16, 103, 104, 105, 106, 108, 109, 143, 147, 148, 152, 154, 156, 157, 165, 178, 192, 194, 195, 199, 200, 201, 202, 203, 204, 157, 154, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 155, 164, 166, 163, 157, 176, 157, 166, 201, 151, 152, 118, 119, 120, 121, 122, 123, 124, 128, 129, 130, 133, 134, 198, 199, 156, 15, 169, 176, 186, 207, 202, 133, 132, 157, 151, 152, 176, 104, 105, 202, 202, 202, 193, 203, 176, 196, 197, 202, 157, 201, 133, 199, 57, 110, 111, 112, 113, 114, 115, 125, 126, 127, 135, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 156, 202, 208, 202, 202, 158, 203, 202, 203, 202, 202, 202, 202, 108, 158, 158, 158, 158, 158, 158, 203, 202, 202, 202, 202, 202, 202, 202, 202, 202, 158, 104, 108, 202, 108, 202, 193, 155, 166, 202, 157, 202, 13, 176, 202, 203, 202, 176, 132, 11, 156, 158, 203, 206, 193, 109, 202, 157, 132, 153, 136, 132, 155, 158, 176, 177, 203, 200, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 158, 15, 16, 17, 18, 20, 23, 24, 26, 28, 29, 30, 31, 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, 209, 210, 214, 158, 158, 158, 132, 158, 158, 158, 158, 132, 132, 158, 132, 132, 158, 132, 132, 132, 132, 158, 132, 158, 158, 158, 158, 158, 158, 158, 177, 158, 157, 157, 153, 11, 207, 176, 180, 192, 195, 202, 171, 202, 166, 158, 153, 193, 203, 203, 196, 132, 158, 136, 154, 211, 215, 107, 108, 108, 155, 214, 202, 202, 108, 202, 202, 202, 202, 104, 190, 202, 190, 202, 154, 158, 166, 202, 193, 157, 180, 158, 151, 152, 156, 6, 158, 176, 166, 202, 164, 209, 103, 104, 105, 106, 107, 108, 212, 213, 158, 132, 189, 158, 132, 132, 189, 189, 189, 189, 132, 158, 174, 166, 158, 158, 193, 158, 184, 176, 202, 186, 166, 155, 19, 132, 92, 93, 108, 158, 202, 202, 158, 158, 158, 158, 202, 8, 9, 155, 175, 158, 184, 166, 153, 158, 212, 158, 158, 132, 202, 136, 166, 183, 202, 136, 164, 166, 132, 164, 202, 3, 132, 156, 202, 158 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void yy_stack_print (bottom, top) yytype_int16 *bottom; yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); for (; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The look-ahead symbol. */ int yychar; /* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a look-ahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 152 "swf5compiler.y" { bf = newBuffer(); bc = newBuffer(); ;} break; case 3: #line 155 "swf5compiler.y" { Buffer b = newBuffer(); bufferWriteConstants(b); bufferConcat(b, bf); bufferConcat(b, bc); *((Buffer *)buffer) = b; ;} break; case 4: #line 160 "swf5compiler.y" { Buffer b = newBuffer(); *((Buffer *)buffer) = b; ;} break; case 7: #line 170 "swf5compiler.y" { bufferConcat(bc, (yyvsp[(1) - (1)].action)); ;} break; case 8: #line 172 "swf5compiler.y" { bufferConcat(bf, (yyvsp[(1) - (1)].action)); ;} break; case 9: #line 177 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (1)].action); ;} break; case 10: #line 180 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (2)].action); bufferConcat((yyval.action), (yyvsp[(2) - (2)].action)); ;} break; case 11: #line 185 "swf5compiler.y" { ;} break; case 12: #line 189 "swf5compiler.y" { (yyval.action) = NULL; ;} break; case 13: #line 190 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].action); ;} break; case 14: #line 191 "swf5compiler.y" { (yyval.action) = NULL; ;} break; case 15: #line 192 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (2)].action); ;} break; case 23: #line 204 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferWriteOp((yyval.action), SWFACTION_WITH); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(6) - (7)].action))); bufferConcat((yyval.action), (yyvsp[(6) - (7)].action)); ;} break; case 24: #line 215 "swf5compiler.y" { int tmp = chkctx(CTX_FUNCTION); if(tmp < 0) swf5error("return outside function"); (yyval.action) = newBuffer(); while(--tmp >= 0) bufferWriteOp((yyval.action), SWFACTION_POP); bufferWriteNull((yyval.action)); bufferWriteOp((yyval.action), SWFACTION_RETURN); ;} break; case 25: #line 225 "swf5compiler.y" { int tmp = chkctx(CTX_FUNCTION); if(tmp < 0) swf5error("return outside function"); (yyval.action) = newBuffer(); while(--tmp >= 0) bufferWriteOp((yyval.action), SWFACTION_POP); bufferConcat((yyval.action), (yyvsp[(2) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_RETURN); ;} break; case 27: #line 237 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); ;} break; case 28: #line 242 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(7) - (7)].action))+5); bufferConcat((yyval.action), (yyvsp[(7) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(5) - (7)].action))); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); ;} break; case 29: #line 253 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (5)].action); bufferWriteOp((yyval.action), SWFACTION_LOGICALNOT); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(5) - (5)].action))); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); ;} break; case 30: #line 262 "swf5compiler.y" { (yyval.action) = NULL; ;} break; case 31: #line 263 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (1)].action); ;} break; case 32: #line 268 "swf5compiler.y" { addctx(CTX_SWITCH); ;} break; case 33: #line 274 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferResolveSwitch((yyval.action), &(yyvsp[(6) - (7)].switchcases)); bufferResolveJumps((yyval.action)); bufferWriteOp((yyval.action), SWFACTION_POP); delctx(CTX_SWITCH); /* FIXME: continue in switch continues surrounding loop, if any */ ;} break; case 34: #line 286 "swf5compiler.y" { (yyval.switchcases).count = 0; (yyval.switchcases).list = 0; ;} break; case 35: #line 290 "swf5compiler.y" { (yyval.switchcases) = (yyvsp[(1) - (2)].switchcases); (yyval.switchcases).list = (struct switchcase*) realloc((yyval.switchcases).list, ((yyval.switchcases).count+1) * sizeof(struct switchcase)); (yyval.switchcases).list[(yyval.switchcases).count] = (yyvsp[(2) - (2)].switchcase); (yyval.switchcases).count++; ;} break; case 36: #line 298 "swf5compiler.y" { (yyval.switchcase).cond = (yyvsp[(2) - (6)].action); (yyval.switchcase).action = (yyvsp[(4) - (6)].action); (yyval.switchcase).isbreak = 1; ;} break; case 37: #line 303 "swf5compiler.y" { (yyval.switchcase).cond = (yyvsp[(2) - (4)].action); (yyval.switchcase).action = (yyvsp[(4) - (4)].action); (yyval.switchcase).isbreak = 0; ;} break; case 38: #line 308 "swf5compiler.y" { (yyval.switchcase).cond = NULL; (yyval.switchcase).action = (yyvsp[(3) - (3)].action); (yyval.switchcase).isbreak = 0; ;} break; case 40: #line 318 "swf5compiler.y" { (yyval.str) = strdup("new"); ;} break; case 41: #line 319 "swf5compiler.y" { (yyval.str) = strdup("delete"); ;} break; case 42: #line 320 "swf5compiler.y" { (yyval.str) = strdup("random"); ;} break; case 43: #line 321 "swf5compiler.y" { (yyval.str) = strdup("getTimer"); ;} break; case 44: #line 322 "swf5compiler.y" { (yyval.str) = strdup("length"); ;} break; case 45: #line 323 "swf5compiler.y" { (yyval.str) = strdup("concat"); ;} break; case 46: #line 324 "swf5compiler.y" { (yyval.str) = strdup("substr"); ;} break; case 47: #line 325 "swf5compiler.y" { (yyval.str) = strdup("trace"); ;} break; case 48: #line 326 "swf5compiler.y" { (yyval.str) = strdup("int"); ;} break; case 49: #line 327 "swf5compiler.y" { (yyval.str) = strdup("ord"); ;} break; case 50: #line 328 "swf5compiler.y" { (yyval.str) = strdup("chr"); ;} break; case 51: #line 329 "swf5compiler.y" { (yyval.str) = strdup("getURL"); ;} break; case 52: #line 330 "swf5compiler.y" { (yyval.str) = strdup("getURL1"); ;} break; case 53: #line 331 "swf5compiler.y" { (yyval.str) = strdup("nextFrame"); ;} break; case 54: #line 332 "swf5compiler.y" { (yyval.str) = strdup("prevFrame"); ;} break; case 55: #line 333 "swf5compiler.y" { (yyval.str) = strdup("play"); ;} break; case 56: #line 334 "swf5compiler.y" { (yyval.str) = strdup("stop"); ;} break; case 57: #line 335 "swf5compiler.y" { (yyval.str) = strdup("toggleQuality"); ;} break; case 58: #line 336 "swf5compiler.y" { (yyval.str) = strdup("stopSounds"); ;} break; case 59: #line 337 "swf5compiler.y" { (yyval.str) = strdup("dup"); ;} break; case 60: #line 338 "swf5compiler.y" { (yyval.str) = strdup("swap"); ;} break; case 61: #line 339 "swf5compiler.y" { (yyval.str) = strdup("pop"); ;} break; case 62: #line 340 "swf5compiler.y" { (yyval.str) = strdup("push"); ;} break; case 63: #line 341 "swf5compiler.y" { (yyval.str) = strdup("setRegister"); ;} break; case 64: #line 342 "swf5compiler.y" { (yyval.str) = strdup("callFunction"); ;} break; case 65: #line 343 "swf5compiler.y" { (yyval.str) = strdup("callMethod"); ;} break; case 66: #line 344 "swf5compiler.y" { (yyval.str) = strdup("and"); ;} break; case 67: #line 345 "swf5compiler.y" { (yyval.str) = strdup("or"); ;} break; case 68: #line 346 "swf5compiler.y" { (yyval.str) = strdup("xor"); ;} break; case 69: #line 347 "swf5compiler.y" { (yyval.str) = strdup("modulo"); ;} break; case 70: #line 348 "swf5compiler.y" { (yyval.str) = strdup("add"); ;} break; case 71: #line 349 "swf5compiler.y" { (yyval.str) = strdup("lessThan"); ;} break; case 72: #line 350 "swf5compiler.y" { (yyval.str) = strdup("equals"); ;} break; case 73: #line 351 "swf5compiler.y" { (yyval.str) = strdup("inc"); ;} break; case 74: #line 352 "swf5compiler.y" { (yyval.str) = strdup("dec"); ;} break; case 75: #line 353 "swf5compiler.y" { (yyval.str) = strdup("typeof"); ;} break; case 76: #line 354 "swf5compiler.y" { (yyval.str) = strdup("instanceof"); ;} break; case 77: #line 355 "swf5compiler.y" { (yyval.str) = strdup("enumerate"); ;} break; case 78: #line 356 "swf5compiler.y" { (yyval.str) = strdup("initobject"); ;} break; case 79: #line 357 "swf5compiler.y" { (yyval.str) = strdup("initarray"); ;} break; case 80: #line 358 "swf5compiler.y" { (yyval.str) = strdup("getmember"); ;} break; case 81: #line 359 "swf5compiler.y" { (yyval.str) = strdup("setmember"); ;} break; case 82: #line 360 "swf5compiler.y" { (yyval.str) = strdup("shiftleft"); ;} break; case 83: #line 361 "swf5compiler.y" { (yyval.str) = strdup("shiftright"); ;} break; case 84: #line 362 "swf5compiler.y" { (yyval.str) = strdup("shiftright2"); ;} break; case 85: #line 363 "swf5compiler.y" { (yyval.str) = strdup("varequals"); ;} break; case 86: #line 364 "swf5compiler.y" { (yyval.str) = strdup("oldAdd"); ;} break; case 87: #line 365 "swf5compiler.y" { (yyval.str) = strdup("subtract"); ;} break; case 88: #line 366 "swf5compiler.y" { (yyval.str) = strdup("multiply"); ;} break; case 89: #line 367 "swf5compiler.y" { (yyval.str) = strdup("divide"); ;} break; case 90: #line 368 "swf5compiler.y" { (yyval.str) = strdup("oldequals"); ;} break; case 91: #line 369 "swf5compiler.y" { (yyval.str) = strdup("oldlessthan"); ;} break; case 92: #line 370 "swf5compiler.y" { (yyval.str) = strdup("logicaland"); ;} break; case 93: #line 371 "swf5compiler.y" { (yyval.str) = strdup("logicalor"); ;} break; case 94: #line 372 "swf5compiler.y" { (yyval.str) = strdup("not"); ;} break; case 95: #line 373 "swf5compiler.y" { (yyval.str) = strdup("stringeq"); ;} break; case 96: #line 374 "swf5compiler.y" { (yyval.str) = strdup("stringlength"); ;} break; case 97: #line 375 "swf5compiler.y" { (yyval.str) = strdup("substring"); ;} break; case 98: #line 376 "swf5compiler.y" { (yyval.str) = strdup("getvariable"); ;} break; case 99: #line 377 "swf5compiler.y" { (yyval.str) = strdup("setvariable"); ;} break; case 100: #line 378 "swf5compiler.y" { (yyval.str) = strdup("settargetexpression"); ;} break; case 101: #line 379 "swf5compiler.y" { (yyval.str) = strdup("duplicatemovieclip"); ;} break; case 102: #line 380 "swf5compiler.y" { (yyval.str) = strdup("removemovieclip"); ;} break; case 103: #line 381 "swf5compiler.y" { (yyval.str) = strdup("startdrag"); ;} break; case 104: #line 382 "swf5compiler.y" { (yyval.str) = strdup("stopdrag"); ;} break; case 105: #line 383 "swf5compiler.y" { (yyval.str) = strdup("stringlessthan"); ;} break; case 106: #line 384 "swf5compiler.y" { (yyval.str) = strdup("mblength"); ;} break; case 107: #line 385 "swf5compiler.y" { (yyval.str) = strdup("mbsubstring"); ;} break; case 108: #line 386 "swf5compiler.y" { (yyval.str) = strdup("mbord"); ;} break; case 109: #line 387 "swf5compiler.y" { (yyval.str) = strdup("mbchr"); ;} break; case 110: #line 388 "swf5compiler.y" { (yyval.str) = strdup("branchalways"); ;} break; case 111: #line 389 "swf5compiler.y" { (yyval.str) = strdup("branchiftrue"); ;} break; case 112: #line 390 "swf5compiler.y" { (yyval.str) = strdup("getURL2"); ;} break; case 113: #line 391 "swf5compiler.y" { (yyval.str) = strdup("post"); ;} break; case 114: #line 392 "swf5compiler.y" { (yyval.str) = strdup("get"); ;} break; case 115: #line 393 "swf5compiler.y" { (yyval.str) = strdup("loadvariables"); ;} break; case 116: #line 394 "swf5compiler.y" { (yyval.str) = strdup("loadMovie"); ;} break; case 117: #line 399 "swf5compiler.y" { (yyval.exprlist).buffer = newBuffer(); (yyval.exprlist).count = 0; ;} break; case 118: #line 403 "swf5compiler.y" { (yyval.exprlist).buffer = newBuffer(); bufferWriteHardString((yyval.exprlist).buffer, (byte*)(yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); (yyval.exprlist).count = 1; ;} break; case 119: #line 408 "swf5compiler.y" { (yyval.exprlist) = (yyvsp[(1) - (3)].exprlist); bufferWriteHardString((yyval.exprlist).buffer, (byte*)(yyvsp[(3) - (3)].str), strlen((yyvsp[(3) - (3)].str))+1); ++(yyval.exprlist).count; ;} break; case 120: #line 415 "swf5compiler.y" { addctx(CTX_FUNCTION); ;} break; case 121: #line 420 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_DEFINEFUNCTION); bufferWriteS16((yyval.action), strlen((yyvsp[(2) - (6)].str)) + bufferLength((yyvsp[(4) - (6)].exprlist).buffer) + 5); bufferWriteHardString((yyval.action), (byte*) (yyvsp[(2) - (6)].str), strlen((yyvsp[(2) - (6)].str))+1); bufferWriteS16((yyval.action), (yyvsp[(4) - (6)].exprlist).count); bufferConcat((yyval.action), (yyvsp[(4) - (6)].exprlist).buffer); bufferWriteS16((yyval.action), bufferLength((yyvsp[(6) - (6)].action))); bufferConcat((yyval.action), (yyvsp[(6) - (6)].action)); delctx(CTX_FUNCTION); ;} break; case 122: #line 434 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 123: #line 439 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferWriteString((yyval.action), (yyvsp[(3) - (3)].str), strlen((yyvsp[(3) - (3)].str))+1); bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); free((yyvsp[(3) - (3)].str)); ;} break; case 124: #line 445 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (4)].action); bufferConcat((yyval.action), (yyvsp[(3) - (4)].action)); bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); ;} break; case 127: #line 456 "swf5compiler.y" { addctx(CTX_LOOP); ;} break; case 128: #line 461 "swf5compiler.y" { addctx(CTX_LOOP); ;} break; case 129: #line 466 "swf5compiler.y" { addctx(CTX_LOOP); ;} break; case 130: #line 471 "swf5compiler.y" { addctx(CTX_FOR_IN); ;} break; case 131: #line 476 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (5)].action); bufferWriteOp((yyval.action), SWFACTION_LOGICALNOT); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(5) - (5)].action))+5); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); bufferWriteOp((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), -(bufferLength((yyval.action))+2)); bufferResolveJumps((yyval.action)); delctx(CTX_LOOP); ;} break; case 132: #line 489 "swf5compiler.y" { if((yyvsp[(2) - (6)].action)) { (yyval.action) = (yyvsp[(2) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); } else (yyval.action) = (yyvsp[(5) - (6)].action); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), -(bufferLength((yyval.action))+2)); bufferResolveJumps((yyval.action)); delctx(CTX_LOOP); ;} break; case 133: #line 502 "swf5compiler.y" { if((yyvsp[(3) - (10)].action)) (yyval.action) = (yyvsp[(3) - (10)].action); else (yyval.action) = newBuffer(); if((yyvsp[(7) - (10)].action)) { bufferWriteOp((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(7) - (10)].action))); } else (yyvsp[(7) - (10)].action) = newBuffer(); if((yyvsp[(5) - (10)].action)) { bufferConcat((yyvsp[(7) - (10)].action), (yyvsp[(5) - (10)].action)); bufferWriteOp((yyvsp[(7) - (10)].action), SWFACTION_LOGICALNOT); bufferWriteOp((yyvsp[(7) - (10)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(7) - (10)].action), 2); bufferWriteS16((yyvsp[(7) - (10)].action), bufferLength((yyvsp[(10) - (10)].action))+5); } bufferConcat((yyvsp[(7) - (10)].action), (yyvsp[(10) - (10)].action)); bufferWriteOp((yyvsp[(7) - (10)].action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyvsp[(7) - (10)].action), 2); bufferWriteS16((yyvsp[(7) - (10)].action), -(bufferLength((yyvsp[(7) - (10)].action))+2)); bufferResolveJumps((yyvsp[(7) - (10)].action)); bufferConcat((yyval.action), (yyvsp[(7) - (10)].action)); delctx(CTX_LOOP); ;} break; case 134: #line 537 "swf5compiler.y" { Buffer b2, b3; int tmp; (yyval.action) = (yyvsp[(5) - (8)].action); bufferWriteOp((yyval.action), SWFACTION_ENUMERATE); b2 = newBuffer(); bufferWriteSetRegister(b2, 0); bufferWriteOp(b2, SWFACTION_PUSHDATA); bufferWriteS16(b2, 1); bufferWriteU8(b2, 2); bufferWriteOp(b2, SWFACTION_NEWEQUALS); bufferWriteOp(b2, SWFACTION_BRANCHIFTRUE); bufferWriteS16(b2, 2); b3 = newBuffer(); /* basically a lvalue could be used here rather than an ident !!! */ /* probably by using reg1 for the test rather than reg0 */ bufferWriteString(b3, (yyvsp[(3) - (8)].str), strlen((yyvsp[(3) - (8)].str))+1); bufferWriteRegister(b3, 0); bufferWriteOp(b3, SWFACTION_SETVARIABLE); bufferConcat(b3, (yyvsp[(8) - (8)].action)); bufferWriteS16(b2, bufferLength(b3) + 5); tmp = bufferLength(b2) + bufferLength(b3) + 5; bufferConcat((yyval.action), b2); bufferWriteOp(b3, SWFACTION_BRANCHALWAYS); bufferWriteS16(b3, 2); bufferWriteS16(b3, -tmp); bufferResolveJumps(b3); bufferConcat((yyval.action), b3); delctx(CTX_FOR_IN); ;} break; case 135: #line 570 "swf5compiler.y" { Buffer b2, b3; int tmp; (yyval.action) = (yyvsp[(6) - (9)].action); bufferWriteOp((yyval.action), SWFACTION_ENUMERATE); b2 = newBuffer(); bufferWriteSetRegister(b2, 0); bufferWriteOp(b2, SWFACTION_PUSHDATA); bufferWriteS16(b2, 1); bufferWriteU8(b2, 2); bufferWriteOp(b2, SWFACTION_NEWEQUALS); bufferWriteOp(b2, SWFACTION_BRANCHIFTRUE); bufferWriteS16(b2, 2); // add size later b3 = newBuffer(); bufferWriteString(b3, (yyvsp[(4) - (9)].str), strlen((yyvsp[(4) - (9)].str))+1); bufferWriteRegister(b3, 0); bufferWriteOp(b3, SWFACTION_VAREQUALS); bufferConcat(b3, (yyvsp[(9) - (9)].action)); bufferWriteS16(b2, bufferLength(b3) + 5); tmp = bufferLength(b2) + bufferLength(b3) + 5; bufferConcat((yyval.action), b2); bufferWriteOp(b3, SWFACTION_BRANCHALWAYS); bufferWriteS16(b3, 2); bufferWriteS16(b3, -tmp); bufferResolveJumps(b3); bufferConcat((yyval.action), b3); delctx(CTX_FOR_IN); ;} break; case 136: #line 603 "swf5compiler.y" { (yyval.action) = NULL; ;} break; case 138: #line 611 "swf5compiler.y" { if(chkctx(CTX_CONTINUE) < 0) swf5error("continue outside loop"); (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), MAGIC_CONTINUE_NUMBER); ;} break; case 139: #line 622 "swf5compiler.y" { int tmp = chkctx(CTX_BREAK); if(tmp < 0) swf5error("break outside switch / loop"); (yyval.action) = newBuffer(); if(tmp) /* break out of a for .. in */ bufferWriteOp((yyval.action), SWFACTION_POP); bufferWriteOp((yyval.action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), MAGIC_BREAK_NUMBER); ;} break; case 140: #line 634 "swf5compiler.y" { (yyval.getURLMethod) = GETURL_METHOD_NOSEND; ;} break; case 141: #line 636 "swf5compiler.y" { (yyval.getURLMethod) = GETURL_METHOD_GET; ;} break; case 142: #line 638 "swf5compiler.y" { (yyval.getURLMethod) = GETURL_METHOD_POST; ;} break; case 143: #line 640 "swf5compiler.y" { if(strcmp((yyvsp[(2) - (2)].str), "GET") == 0) (yyval.getURLMethod) = GETURL_METHOD_GET; else if(strcmp((yyvsp[(2) - (2)].str), "POST") == 0) (yyval.getURLMethod) = GETURL_METHOD_POST; ;} break; case 144: #line 648 "swf5compiler.y" { char *lvlstring = (char*) malloc(12*sizeof(char)); sprintf(lvlstring, "_level%d", (yyvsp[(1) - (1)].intVal)); (yyval.action) = newBuffer(); bufferWriteString((yyval.action), lvlstring, strlen(lvlstring)+1); free(lvlstring); ;} break; case 145: #line 655 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), "_level", 7); bufferConcat((yyval.action), (yyvsp[(1) - (1)].action)); bufferWriteOp((yyval.action), SWFACTION_STRINGCONCAT); ;} break; case 146: #line 663 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(3) - (4)].exprlist).count); bufferWriteString((yyval.action), (yyvsp[(1) - (4)].str), strlen((yyvsp[(1) - (4)].str))+1); bufferWriteOp((yyval.action), SWFACTION_CALLFUNCTION); bufferWriteOp((yyval.action), SWFACTION_POP); free((yyvsp[(1) - (4)].str)); ;} break; case 147: #line 671 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(2) - (2)].str), strlen((yyvsp[(2) - (2)].str))+1); free((yyvsp[(2) - (2)].str)); bufferWriteOp((yyval.action), SWFACTION_DELETE); ;} break; case 148: #line 677 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (4)].action); // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteString((yyval.action), (yyvsp[(4) - (4)].str), strlen((yyvsp[(4) - (4)].str))+1); free((yyvsp[(4) - (4)].str)); bufferWriteOp((yyval.action), SWFACTION_DELETEVAR); ;} break; case 149: #line 684 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (5)].action); // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferConcat((yyval.action), (yyvsp[(4) - (5)].action)); // bufferWriteOp($$, SWFACTION_GETVARIABLE); bufferWriteOp((yyval.action), SWFACTION_DELETEVAR); ;} break; case 150: #line 691 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_TRACE); ;} break; case 151: #line 695 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), (yyvsp[(6) - (7)].getURLMethod)); ;} break; case 152: #line 702 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0xc0+(yyvsp[(6) - (7)].getURLMethod)); ;} break; case 153: #line 709 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0x80+(yyvsp[(6) - (7)].getURLMethod)); ;} break; case 154: #line 716 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0x40+(yyvsp[(6) - (7)].getURLMethod)); ;} break; case 155: #line 723 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (7)].action); bufferConcat((yyval.action), (yyvsp[(5) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_GETURL2); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), (yyvsp[(6) - (7)].getURLMethod)); ;} break; case 156: #line 730 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_CALLFRAME); bufferWriteS16((yyval.action), 0); ;} break; case 157: #line 736 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), "0", 2); /* no constraint */ bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferConcat((yyval.action), (yyvsp[(3) - (6)].action)); bufferWriteOp((yyval.action), SWFACTION_STARTDRAGMOVIE); ;} break; case 158: #line 743 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferConcat((yyval.action), (yyvsp[(7) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(11) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(9) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(13) - (14)].action)); bufferWriteString((yyval.action), "1", 2); /* has constraint */ bufferConcat((yyval.action), (yyvsp[(5) - (14)].action)); bufferConcat((yyval.action), (yyvsp[(3) - (14)].action)); bufferWriteOp((yyval.action), SWFACTION_STARTDRAGMOVIE); ;} break; case 159: #line 754 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_STOPDRAGMOVIE); ;} break; case 160: #line 759 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferConcat((yyval.action), (yyvsp[(7) - (8)].action)); bufferWriteInt((yyval.action), 16384); /* magic number */ bufferWriteOp((yyval.action), SWFACTION_ADD); bufferWriteOp((yyval.action), SWFACTION_DUPLICATECLIP); ;} break; case 161: #line 767 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_REMOVECLIP); ;} break; case 162: #line 771 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_GETURL); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (6)].str)) + strlen((yyvsp[(5) - (6)].str)) + 2); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (6)].str), strlen((yyvsp[(3) - (6)].str))); bufferWriteU8((yyval.action), 0); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(5) - (6)].str), strlen((yyvsp[(5) - (6)].str))); bufferWriteU8((yyval.action), 0); ;} break; case 163: #line 781 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_NEXTFRAME); ;} break; case 164: #line 785 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_PREVFRAME); ;} break; case 165: #line 789 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_PLAY); ;} break; case 166: #line 793 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_STOP); ;} break; case 167: #line 797 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_STOPSOUNDS); ;} break; case 168: #line 801 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_TOGGLEQUALITY); ;} break; case 169: #line 805 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_GOTOFRAME); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), (yyvsp[(3) - (4)].intVal)); ;} break; case 170: #line 811 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_GOTOLABEL); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); free((yyvsp[(3) - (4)].str)); ;} break; case 171: #line 818 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_GOTOEXPRESSION); bufferWriteS16((yyval.action), 1); bufferWriteU8((yyval.action), 0); ;} break; case 172: #line 824 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_SETTARGET); bufferWriteS16((yyval.action), strlen((yyvsp[(3) - (4)].str))+1); bufferWriteHardString((yyval.action), (byte*)(yyvsp[(3) - (4)].str), strlen((yyvsp[(3) - (4)].str))+1); free((yyvsp[(3) - (4)].str)); ;} break; case 173: #line 831 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_SETTARGETEXPRESSION); ;} break; case 174: #line 840 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(3) - (4)].exprlist).count); bufferWriteString((yyval.action), (yyvsp[(1) - (4)].str), strlen((yyvsp[(1) - (4)].str))+1); bufferWriteOp((yyval.action), SWFACTION_CALLFUNCTION); free((yyvsp[(1) - (4)].str)); ;} break; case 175: #line 847 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); ;} break; case 176: #line 851 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_GETTIMER); ;} break; case 177: #line 855 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_RANDOM); ;} break; case 178: #line 859 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_STRINGLENGTH); ;} break; case 179: #line 863 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_INT); ;} break; case 180: #line 867 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_ORD); ;} break; case 181: #line 871 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_CHR); ;} break; case 182: #line 875 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (6)].action); bufferConcat((yyval.action), (yyvsp[(5) - (6)].action)); bufferWriteOp((yyval.action), SWFACTION_STRINGCONCAT); ;} break; case 183: #line 880 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (8)].action); bufferConcat((yyval.action), (yyvsp[(5) - (8)].action)); bufferConcat((yyval.action), (yyvsp[(7) - (8)].action)); bufferWriteOp((yyval.action), SWFACTION_SUBSTRING); ;} break; case 184: #line 886 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (4)].action); bufferWriteOp((yyval.action), SWFACTION_TYPEOF); ;} break; case 185: #line 894 "swf5compiler.y" { (yyval.exprlist).buffer = newBuffer(); (yyval.exprlist).count = 0; ;} break; case 186: #line 898 "swf5compiler.y" { (yyval.exprlist).buffer = (yyvsp[(1) - (1)].action); (yyval.exprlist).count = 1; ;} break; case 187: #line 903 "swf5compiler.y" { Buffer tmp = newBuffer(); bufferConcat(tmp, (yyvsp[(3) - (3)].action)); bufferConcat(tmp, (yyval.exprlist).buffer); (yyval.exprlist).buffer = tmp; ++(yyval.exprlist).count; ;} break; case 188: #line 912 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteOp((yyval.action), SWFACTION_DEFINEFUNCTION); bufferWriteS16((yyval.action), bufferLength((yyvsp[(3) - (5)].exprlist).buffer) + 5); bufferWriteU8((yyval.action), 0); /* empty function name */ bufferWriteS16((yyval.action), (yyvsp[(3) - (5)].exprlist).count); bufferConcat((yyval.action), (yyvsp[(3) - (5)].exprlist).buffer); bufferWriteS16((yyval.action), bufferLength((yyvsp[(5) - (5)].action))); bufferConcat((yyval.action), (yyvsp[(5) - (5)].action)); delctx(CTX_FUNCTION); ;} break; case 189: #line 925 "swf5compiler.y" { (yyval.action) = (yyvsp[(5) - (6)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(5) - (6)].exprlist).count); bufferConcat((yyval.action), (yyvsp[(1) - (6)].action)); bufferWriteString((yyval.action), (yyvsp[(3) - (6)].str), strlen((yyvsp[(3) - (6)].str))+1); bufferWriteOp((yyval.action), SWFACTION_CALLMETHOD); free((yyvsp[(3) - (6)].str)); ;} break; case 190: #line 933 "swf5compiler.y" { (yyval.action) = (yyvsp[(6) - (7)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(6) - (7)].exprlist).count); bufferConcat((yyval.action), (yyvsp[(1) - (7)].action)); bufferConcat((yyval.action), (yyvsp[(3) - (7)].action)); bufferWriteOp((yyval.action), SWFACTION_CALLMETHOD); ;} break; case 191: #line 942 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (3)].str), strlen((yyvsp[(1) - (3)].str))+1); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); ;} break; case 192: #line 949 "swf5compiler.y" { (yyval.exprlist).buffer = (yyvsp[(1) - (1)].action); (yyval.exprlist).count = 1; ;} break; case 193: #line 953 "swf5compiler.y" { bufferConcat((yyval.exprlist).buffer, (yyvsp[(3) - (3)].action)); ++(yyval.exprlist).count; ;} break; case 194: #line 958 "swf5compiler.y" { (yyval.op) = SWFACTION_NEWADD; ;} break; case 195: #line 959 "swf5compiler.y" { (yyval.op) = SWFACTION_SUBTRACT; ;} break; case 196: #line 960 "swf5compiler.y" { (yyval.op) = SWFACTION_MULTIPLY; ;} break; case 197: #line 961 "swf5compiler.y" { (yyval.op) = SWFACTION_DIVIDE; ;} break; case 198: #line 962 "swf5compiler.y" { (yyval.op) = SWFACTION_MODULO; ;} break; case 199: #line 963 "swf5compiler.y" { (yyval.op) = SWFACTION_BITWISEAND; ;} break; case 200: #line 964 "swf5compiler.y" { (yyval.op) = SWFACTION_BITWISEOR; ;} break; case 201: #line 965 "swf5compiler.y" { (yyval.op) = SWFACTION_BITWISEXOR; ;} break; case 202: #line 966 "swf5compiler.y" { (yyval.op) = SWFACTION_SHIFTLEFT; ;} break; case 203: #line 967 "swf5compiler.y" { (yyval.op) = SWFACTION_SHIFTRIGHT; ;} break; case 204: #line 968 "swf5compiler.y" { (yyval.op) = SWFACTION_SHIFTRIGHT2; ;} break; case 205: #line 972 "swf5compiler.y" { (yyval.op) = SWFACTION_INCREMENT; ;} break; case 206: #line 973 "swf5compiler.y" { (yyval.op) = SWFACTION_DECREMENT; ;} break; case 207: #line 992 "swf5compiler.y" { if((yyvsp[(1) - (1)].lval).obj) { (yyval.action) = (yyvsp[(1) - (1)].lval).obj; if((yyvsp[(1) - (1)].lval).ident) bufferConcat((yyval.action), (yyvsp[(1) - (1)].lval).ident); else bufferConcat((yyval.action), (yyvsp[(1) - (1)].lval).memexpr); bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); } else { (yyval.action) = (yyvsp[(1) - (1)].lval).ident; bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); } ;} break; case 210: #line 1016 "swf5compiler.y" { (yyval.lval).ident = newBuffer(); bufferWriteString((yyval.lval).ident, (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); (yyval.lval).obj = 0; (yyval.lval).memexpr = 0; ;} break; case 211: #line 1023 "swf5compiler.y" { (yyval.lval).obj = (yyvsp[(1) - (3)].action); (yyval.lval).ident = newBuffer(); bufferWriteString((yyval.lval).ident, (yyvsp[(3) - (3)].str), strlen((yyvsp[(3) - (3)].str))+1); (yyval.lval).memexpr = 0; ;} break; case 212: #line 1029 "swf5compiler.y" { (yyval.lval).obj = (yyvsp[(1) - (4)].action); (yyval.lval).memexpr = (yyvsp[(3) - (4)].action); (yyval.lval).ident = 0; ;} break; case 214: #line 1040 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteInt((yyvsp[(2) - (2)].action), -1); bufferWriteOp((yyvsp[(2) - (2)].action), SWFACTION_MULTIPLY); ;} break; case 215: #line 1045 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteInt((yyvsp[(2) - (2)].action), 0xffffffff); bufferWriteOp((yyvsp[(2) - (2)].action), SWFACTION_BITWISEXOR); ;} break; case 216: #line 1050 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); bufferWriteOp((yyvsp[(2) - (2)].action), SWFACTION_LOGICALNOT); ;} break; case 217: #line 1054 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(3) - (3)].action))+1); bufferWriteOp((yyval.action), SWFACTION_POP); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); ;} break; case 218: #line 1063 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), SWFACTION_LOGICALNOT); bufferWriteOp((yyval.action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyval.action), 2); bufferWriteS16((yyval.action), bufferLength((yyvsp[(3) - (3)].action))+1); bufferWriteOp((yyval.action), SWFACTION_POP); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); ;} break; case 219: #line 1073 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_MULTIPLY); ;} break; case 220: #line 1078 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_DIVIDE); ;} break; case 221: #line 1083 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_MODULO); ;} break; case 222: #line 1088 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_NEWADD); ;} break; case 223: #line 1093 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_SUBTRACT); ;} break; case 224: #line 1098 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_BITWISEAND); ;} break; case 225: #line 1103 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_BITWISEOR); ;} break; case 226: #line 1108 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_BITWISEXOR); ;} break; case 227: #line 1113 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_NEWLESSTHAN); ;} break; case 228: #line 1118 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (3)].action); bufferConcat((yyval.action), (yyvsp[(1) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_NEWLESSTHAN); ;} break; case 229: #line 1123 "swf5compiler.y" { (yyval.action) = (yyvsp[(3) - (3)].action); bufferConcat((yyval.action), (yyvsp[(1) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_NEWLESSTHAN); bufferWriteOp((yyval.action), SWFACTION_LOGICALNOT); ;} break; case 230: #line 1129 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_NEWLESSTHAN); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_LOGICALNOT); ;} break; case 231: #line 1134 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_NEWEQUALS); ;} break; case 232: #line 1138 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_NEWEQUALS); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_LOGICALNOT); ;} break; case 233: #line 1143 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_SHIFTLEFT); ;} break; case 234: #line 1147 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_SHIFTRIGHT); ;} break; case 235: #line 1151 "swf5compiler.y" { bufferConcat((yyvsp[(1) - (3)].action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyvsp[(1) - (3)].action), SWFACTION_SHIFTRIGHT2); ;} break; case 236: #line 1155 "swf5compiler.y" { bufferWriteOp((yyvsp[(1) - (5)].action), SWFACTION_BRANCHIFTRUE); bufferWriteS16((yyvsp[(1) - (5)].action), 2); bufferWriteS16((yyvsp[(1) - (5)].action), bufferLength((yyvsp[(5) - (5)].action))+5); bufferConcat((yyvsp[(1) - (5)].action), (yyvsp[(5) - (5)].action)); bufferWriteOp((yyvsp[(1) - (5)].action), SWFACTION_BRANCHALWAYS); bufferWriteS16((yyvsp[(1) - (5)].action), 2); bufferWriteS16((yyvsp[(1) - (5)].action), bufferLength((yyvsp[(3) - (5)].action))); bufferConcat((yyvsp[(1) - (5)].action), (yyvsp[(3) - (5)].action)); ;} break; case 237: #line 1165 "swf5compiler.y" { if((yyvsp[(1) - (3)].lval).obj) /* obj[memexpr] or obj.ident */ { (yyval.action) = (yyvsp[(1) - (3)].lval).obj; if((yyvsp[(1) - (3)].lval).ident) bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).ident); else bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).memexpr); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); bufferWriteRegister((yyval.action), 0); } else /* just ident */ { (yyval.action) = (yyvsp[(3) - (3)].action); bufferWriteOp((yyval.action), SWFACTION_DUP); bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).ident); bufferWriteOp((yyval.action), SWFACTION_SWAP); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } /* tricky case missing here: lvalue ASSIGN expr */ /* like in x = y += z; */ ;} break; case 238: #line 1192 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_INSTANCEOF); ;} break; case 240: #line 1202 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteInt((yyval.action), 0); bufferWriteString((yyval.action), (yyvsp[(2) - (2)].str), strlen((yyvsp[(2) - (2)].str))+1); bufferWriteOp((yyval.action), SWFACTION_NEW); ;} break; case 241: #line 1208 "swf5compiler.y" { (yyval.action) = (yyvsp[(4) - (5)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(4) - (5)].exprlist).count); bufferWriteString((yyval.action), (yyvsp[(2) - (5)].str), strlen((yyvsp[(2) - (5)].str))+1); bufferWriteOp((yyval.action), SWFACTION_NEW); ;} break; case 242: #line 1214 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(2) - (3)].exprlist).count); bufferWriteOp((yyval.action), SWFACTION_INITARRAY); ;} break; case 243: #line 1219 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteInt((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_INITOBJECT); ;} break; case 244: #line 1224 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].exprlist).buffer; bufferWriteInt((yyval.action), (yyvsp[(2) - (3)].exprlist).count); bufferWriteOp((yyval.action), SWFACTION_INITOBJECT); ;} break; case 249: #line 1240 "swf5compiler.y" { if((yyvsp[(2) - (2)].lval).obj) { if((yyvsp[(2) - (2)].lval).ident) // expr . identifier { (yyval.action) = (yyvsp[(2) - (2)].lval).obj; bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, a */ bufferWriteBuffer((yyval.action), (yyvsp[(2) - (2)].lval).ident); /* a, a, i */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a */ bufferConcat((yyval.action), (yyvsp[(2) - (2)].lval).ident); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a.i = a.i+1 */ bufferWriteRegister((yyval.action), 0); /* a.i+1 */ } else // expr [ expr ] { (yyval.action) = (yyvsp[(2) - (2)].lval).memexpr; /* i */ bufferConcat((yyval.action), (yyvsp[(2) - (2)].lval).obj); /* i, a */ bufferWriteSetRegister((yyval.action), 0); /* ($2.memexpr can use reg0) */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, i, i */ bufferWriteRegister((yyval.action), 0); /* a, i, i, a */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); /* a, i, a[i]+1 */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ bufferWriteRegister((yyval.action), 0); /* a[i]+1 */ } } else // identifier { (yyval.action) = newBuffer(); bufferWriteBuffer((yyval.action), (yyvsp[(2) - (2)].lval).ident); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); bufferWriteOp((yyval.action), SWFACTION_DUP); bufferConcat((yyval.action), (yyvsp[(2) - (2)].lval).ident); bufferWriteOp((yyval.action), SWFACTION_SWAP); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 250: #line 1285 "swf5compiler.y" { if((yyvsp[(1) - (2)].lval).obj) { if((yyvsp[(1) - (2)].lval).ident) { (yyval.action) = (yyvsp[(1) - (2)].lval).obj; /* a */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, a */ bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].lval).ident); /* a, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a.i, a */ bufferConcat((yyval.action), (yyvsp[(1) - (2)].lval).ident); /* a.i, a, i */ bufferWriteRegister((yyval.action), 0); /* a.i, a, i, a.i */ bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); /* a.i, a, i, a.i+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); } else { (yyval.action) = (yyvsp[(1) - (2)].lval).memexpr; bufferConcat((yyval.action), (yyvsp[(1) - (2)].lval).obj); /* i, a */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, i, i */ bufferWriteRegister((yyval.action), 0); /* a, i, i, a */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); /* a, i, a[i]+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); bufferWriteRegister((yyval.action), 0); /* a[i] */ } } else { (yyval.action) = newBuffer(); bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].lval).ident); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); bufferConcat((yyval.action), (yyvsp[(1) - (2)].lval).ident); bufferWriteOp((yyval.action), SWFACTION_SWAP); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 251: #line 1330 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (3)].action); ;} break; case 252: #line 1333 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteInt((yyval.action), -(yyvsp[(2) - (2)].intVal)); ;} break; case 253: #line 1337 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteInt((yyval.action), (yyvsp[(1) - (1)].intVal)); ;} break; case 254: #line 1341 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteDouble((yyval.action), -(yyvsp[(2) - (2)].doubleVal)); ;} break; case 255: #line 1345 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteDouble((yyval.action), (yyvsp[(1) - (1)].doubleVal)); ;} break; case 256: #line 1349 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteBoolean((yyval.action), (yyvsp[(1) - (1)].intVal)); ;} break; case 257: #line 1353 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteNull((yyval.action)); ;} break; case 258: #line 1357 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); free((yyvsp[(1) - (1)].str)); ;} break; case 260: #line 1366 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (3)].action); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); ;} break; case 261: #line 1372 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (3)].str), strlen((yyvsp[(1) - (3)].str))+1); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_VAREQUALS); ;} break; case 262: #line 1378 "swf5compiler.y" { (yyval.action) = newBuffer(); bufferWriteString((yyval.action), (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); bufferWriteOp((yyval.action), SWFACTION_VAR); ;} break; case 263: #line 1385 "swf5compiler.y" { asmBuffer = newBuffer(); ;} break; case 264: #line 1387 "swf5compiler.y" { (yyval.action) = asmBuffer; ;} break; case 265: #line 1390 "swf5compiler.y" { (yyval.action) = (yyvsp[(2) - (2)].action); ;} break; case 267: #line 1395 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (1)].action); bufferWriteOp((yyval.action), SWFACTION_POP); ;} break; case 268: #line 1399 "swf5compiler.y" { (yyval.action) = (yyvsp[(1) - (1)].action); bufferWriteOp((yyval.action), SWFACTION_POP); ;} break; case 269: #line 1403 "swf5compiler.y" { if((yyvsp[(2) - (2)].lval).obj) { if((yyvsp[(2) - (2)].lval).ident) { (yyval.action) = (yyvsp[(2) - (2)].lval).obj; /* a */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, a */ bufferWriteBuffer((yyval.action), (yyvsp[(2) - (2)].lval).ident); /* a, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); /* a, a.i+1 */ bufferConcat((yyval.action), (yyvsp[(2) - (2)].lval).ident); /* a, a.i+1, i */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a.i+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a.i = a.i+1 */ } else { /* weird contortions so that $2.memexpr can use reg 0 */ (yyval.action) = (yyvsp[(2) - (2)].lval).memexpr; /* i */ bufferConcat((yyval.action), (yyvsp[(2) - (2)].lval).obj); /* i, a */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, i, i */ bufferWriteRegister((yyval.action), 0); /* a, i, i, a */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); /* a, i, a[i]+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ } } else { (yyval.action) = (yyvsp[(2) - (2)].lval).ident; bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); bufferWriteOp((yyval.action), (yyvsp[(1) - (2)].op)); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 270: #line 1442 "swf5compiler.y" { if((yyvsp[(1) - (2)].lval).obj) { if((yyvsp[(1) - (2)].lval).ident) { (yyval.action) = (yyvsp[(1) - (2)].lval).obj; /* a */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, a */ bufferWriteBuffer((yyval.action), (yyvsp[(1) - (2)].lval).ident); /* a, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, a.i */ bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); /* a, a.i+1 */ bufferConcat((yyval.action), (yyvsp[(1) - (2)].lval).ident); /* a, a.i+1, i */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a.i+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a.i = a.i+1 */ } else { /* weird contortions so that $1.memexpr can use reg 0 */ (yyval.action) = (yyvsp[(1) - (2)].lval).memexpr; /* i */ bufferConcat((yyval.action), (yyvsp[(1) - (2)].lval).obj); /* i, a */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, i, i */ bufferWriteRegister((yyval.action), 0); /* a, i, i, a */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); /* a, i, a[i]+1 */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a[i] = a[i]+1 */ } } else { (yyval.action) = (yyvsp[(1) - (2)].lval).ident; bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); bufferWriteOp((yyval.action), (yyvsp[(2) - (2)].op)); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 271: #line 1481 "swf5compiler.y" { if((yyvsp[(1) - (3)].lval).obj) { (yyval.action) = (yyvsp[(1) - (3)].lval).obj; if((yyvsp[(1) - (3)].lval).ident) bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).ident); else bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).memexpr); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); } else { (yyval.action) = (yyvsp[(1) - (3)].lval).ident; bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 272: #line 1502 "swf5compiler.y" { if((yyvsp[(1) - (3)].lval).obj) { if((yyvsp[(1) - (3)].lval).ident) { (yyval.action) = (yyvsp[(1) - (3)].lval).obj; /* a */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, a */ bufferWriteBuffer((yyval.action), (yyvsp[(1) - (3)].lval).ident); /* a, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, a.i */ bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); /* a, a.i, v */ bufferWriteOp((yyval.action), (yyvsp[(2) - (3)].op)); /* a, a.i+v */ bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).ident); /* a, a.i+v, i */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a.i+v */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a.i = a.i+v */ } else { (yyval.action) = (yyvsp[(1) - (3)].lval).memexpr; /* i */ bufferConcat((yyval.action), (yyvsp[(1) - (3)].lval).obj); /* i, a */ bufferWriteSetRegister((yyval.action), 0); bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i */ bufferWriteOp((yyval.action), SWFACTION_DUP); /* a, i, i */ bufferWriteRegister((yyval.action), 0); /* a, i, i, a */ bufferWriteOp((yyval.action), SWFACTION_SWAP); /* a, i, a, i */ bufferWriteOp((yyval.action), SWFACTION_GETMEMBER); /* a, i, a[i] */ bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); /* a, i, a[i], v */ bufferWriteOp((yyval.action), (yyvsp[(2) - (3)].op)); /* a, i, a[i]+v */ bufferWriteOp((yyval.action), SWFACTION_SETMEMBER); /* a[i] = a[i]+v */ } } else { (yyval.action) = (yyvsp[(1) - (3)].lval).ident; bufferWriteOp((yyval.action), SWFACTION_DUP); bufferWriteOp((yyval.action), SWFACTION_GETVARIABLE); bufferConcat((yyval.action), (yyvsp[(3) - (3)].action)); bufferWriteOp((yyval.action), (yyvsp[(2) - (3)].op)); bufferWriteOp((yyval.action), SWFACTION_SETVARIABLE); } ;} break; case 274: #line 1547 "swf5compiler.y" { (yyval.len) = (yyvsp[(1) - (2)].len) + (yyvsp[(2) - (2)].len); ;} break; case 275: #line 1552 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_WITH); ;} break; case 276: #line 1554 "swf5compiler.y" { (yyval.len) = (yyvsp[(2) - (4)].len) + (yyvsp[(3) - (4)].len); bufferPatchLength(asmBuffer, (yyvsp[(3) - (4)].len)); ;} break; case 277: #line 1559 "swf5compiler.y" { (yyval.len) = bufferWriteConstantString(asmBuffer,(byte*) (yyvsp[(1) - (1)].str), strlen((yyvsp[(1) - (1)].str))+1); ;} break; case 278: #line 1562 "swf5compiler.y" { bufferWriteU8(asmBuffer, PUSH_INT); (yyval.len) = bufferWriteInt(asmBuffer, (yyvsp[(1) - (1)].intVal))+1; ;} break; case 279: #line 1565 "swf5compiler.y" { bufferWriteU8(asmBuffer, PUSH_DOUBLE); (yyval.len) = bufferWriteDouble(asmBuffer, (yyvsp[(1) - (1)].doubleVal))+1; ;} break; case 280: #line 1568 "swf5compiler.y" { bufferWriteU8(asmBuffer, PUSH_BOOLEAN); (yyval.len) = bufferWriteU8(asmBuffer, (yyvsp[(1) - (1)].intVal))+1; ;} break; case 281: #line 1571 "swf5compiler.y" { (yyval.len) = bufferWriteU8(asmBuffer, PUSH_NULL); ;} break; case 282: #line 1573 "swf5compiler.y" { bufferWriteU8(asmBuffer, PUSH_REGISTER); (yyval.len) = bufferWriteU8(asmBuffer, (char)atoi((yyvsp[(1) - (1)].str)))+1; ;} break; case 283: #line 1580 "swf5compiler.y" { (yyval.len) = (yyvsp[(1) - (1)].len); ;} break; case 284: #line 1581 "swf5compiler.y" { (yyval.len) += (yyvsp[(3) - (3)].len); ;} break; case 285: #line 1585 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_PUSHDATA); (yyval.len) += bufferWriteS16(asmBuffer, 0); ;} break; case 286: #line 1588 "swf5compiler.y" { (yyval.len) = (yyvsp[(2) - (3)].len) + (yyvsp[(3) - (3)].len); bufferPatchLength(asmBuffer, (yyvsp[(3) - (3)].len)); ;} break; case 288: #line 1594 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SETREGISTER); (yyval.len) += bufferWriteS16(asmBuffer, 1); (yyval.len) += bufferWriteU8(asmBuffer, (char)atoi((yyvsp[(2) - (2)].str))); ;} break; case 289: #line 1600 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_CALLFUNCTION); ;} break; case 290: #line 1602 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_RETURN); ;} break; case 291: #line 1604 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_CALLMETHOD); ;} break; case 292: #line 1606 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_BITWISEAND); ;} break; case 293: #line 1608 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_BITWISEOR); ;} break; case 294: #line 1610 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_BITWISEXOR); ;} break; case 295: #line 1612 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MODULO); ;} break; case 296: #line 1614 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_NEWADD); ;} break; case 297: #line 1616 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_NEWLESSTHAN); ;} break; case 298: #line 1618 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_NEWEQUALS); ;} break; case 299: #line 1620 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_INCREMENT); ;} break; case 300: #line 1622 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_DECREMENT); ;} break; case 301: #line 1624 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_TYPEOF); ;} break; case 302: #line 1626 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_INSTANCEOF); ;} break; case 303: #line 1628 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_ENUMERATE); ;} break; case 304: #line 1630 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_DELETE); ;} break; case 305: #line 1632 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_NEW); ;} break; case 306: #line 1634 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_INITARRAY); ;} break; case 307: #line 1636 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_INITOBJECT); ;} break; case 308: #line 1638 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_GETMEMBER); ;} break; case 309: #line 1640 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SETMEMBER); ;} break; case 310: #line 1642 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SHIFTLEFT); ;} break; case 311: #line 1644 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SHIFTRIGHT); ;} break; case 312: #line 1646 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SHIFTRIGHT2); ;} break; case 313: #line 1648 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_VAR); ;} break; case 314: #line 1650 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_VAREQUALS); ;} break; case 315: #line 1654 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_ADD); ;} break; case 316: #line 1655 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SUBTRACT); ;} break; case 317: #line 1656 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MULTIPLY); ;} break; case 318: #line 1657 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_DIVIDE); ;} break; case 319: #line 1658 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_EQUAL); ;} break; case 320: #line 1659 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_LESSTHAN); ;} break; case 321: #line 1660 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_LOGICALAND); ;} break; case 322: #line 1661 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_LOGICALOR); ;} break; case 323: #line 1662 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_LOGICALNOT); ;} break; case 324: #line 1663 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_STRINGEQ); ;} break; case 325: #line 1664 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_STRINGLENGTH); ;} break; case 326: #line 1665 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SUBSTRING); ;} break; case 327: #line 1666 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_INT); ;} break; case 328: #line 1667 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_DUP); ;} break; case 329: #line 1668 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SWAP); ;} break; case 330: #line 1669 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_POP); ;} break; case 331: #line 1670 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_GETVARIABLE); ;} break; case 332: #line 1671 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SETVARIABLE); ;} break; case 333: #line 1672 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_SETTARGETEXPRESSION); ;} break; case 334: #line 1673 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_STRINGCONCAT); ;} break; case 335: #line 1674 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_DUPLICATECLIP); ;} break; case 336: #line 1675 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_REMOVECLIP); ;} break; case 337: #line 1676 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_TRACE); ;} break; case 338: #line 1677 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_STRINGCOMPARE); ;} break; case 339: #line 1678 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_RANDOM); ;} break; case 340: #line 1679 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MBLENGTH); ;} break; case 341: #line 1680 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_ORD); ;} break; case 342: #line 1681 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_CHR); ;} break; case 343: #line 1682 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_GETTIMER); ;} break; case 344: #line 1683 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MBSUBSTRING); ;} break; case 345: #line 1684 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MBORD); ;} break; case 346: #line 1685 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_MBCHR); ;} break; case 347: #line 1688 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_BRANCHALWAYS); (yyval.len) += bufferWriteS16(asmBuffer, 2); (yyval.len) += bufferBranchTarget(asmBuffer, (yyvsp[(2) - (2)].str)); ;} break; case 348: #line 1692 "swf5compiler.y" { (yyval.len) = bufferWriteOp(asmBuffer, SWFACTION_BRANCHIFTRUE); (yyval.len) += bufferWriteS16(asmBuffer, 2); (yyval.len) += bufferBranchTarget(asmBuffer, (yyvsp[(2) - (2)].str)); ;} break; /* Line 1267 of yacc.c. */ #line 5479 "swf5compiler.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } #line 1697 "swf5compiler.y" swftools_0.9.2+git20130725.orig/lib/action/swf4compiler.tab.h0000644000175000017500000000661712216332640022714 0ustar gawaingawain /* A Bison parser, made by GNU Bison 2.4. */ /* Skeleton interface for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { BREAK = 258, FOR = 259, CONTINUE = 260, IF = 261, ELSE = 262, DO = 263, WHILE = 264, THIS = 265, EVAL = 266, TIME = 267, RANDOM = 268, LENGTH = 269, INT = 270, CONCAT = 271, DUPLICATECLIP = 272, REMOVECLIP = 273, TRACE = 274, STARTDRAG = 275, STOPDRAG = 276, ORD = 277, CHR = 278, CALLFRAME = 279, GETURL = 280, GETURL1 = 281, LOADMOVIE = 282, LOADVARIABLES = 283, POSTURL = 284, SUBSTR = 285, GETPROPERTY = 286, NEXTFRAME = 287, PREVFRAME = 288, PLAY = 289, STOP = 290, TOGGLEQUALITY = 291, STOPSOUNDS = 292, GOTOFRAME = 293, GOTOANDPLAY = 294, FRAMELOADED = 295, SETTARGET = 296, TELLTARGET = 297, STRING = 298, NUMBER = 299, IDENTIFIER = 300, PATH = 301, GETURL_METHOD = 302, EQ = 303, LE = 304, GE = 305, NE = 306, LAN = 307, LOR = 308, INC = 309, DEC = 310, IEQ = 311, DEQ = 312, MEQ = 313, SEQ = 314, STREQ = 315, STRNE = 316, STRCMP = 317, PARENT = 318, END = 319, UMINUS = 320, POSTFIX = 321, NEGATE = 322 }; #endif #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 1676 of yacc.c */ #line 17 "swf4compiler.y" Buffer action; char *str; SWFActionFunction function; SWFGetUrl2Method getURLMethod; /* Line 1676 of yacc.c */ #line 128 "swf4compiler.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE swf4lval; swftools_0.9.2+git20130725.orig/lib/kdtree.c0000644000175000017500000003472112216332640017522 0ustar gawaingawain/* kdtree.c Implementation of 2d kd trees. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include #include #include "q.h" #include "kdtree.h" /* 0=right 1=down 2=left 3=up */ static int vx_and[4] = {INT_MAX, 0, INT_MAX, 0}; static int vy_and[4] = {0, INT_MAX, 0, INT_MAX}; static int vx[4] = {1, 0, -1, 0}; static int vy[4] = {0, 1, 0, -1}; static int vsign[4] = {1,1,-1,-1}; static char* vname[4] = {"right", "down", "left", "up"}; kdarea_t* kdarea_new(void*data) { NEW(kdarea_t,area); area->bbox.xmin = INT_MIN; area->bbox.ymin = INT_MIN; area->bbox.xmax = INT_MAX; area->bbox.ymax = INT_MAX; area->data = data; return area; } kdtree_t* kdtree_new() { NEW(kdtree_t,tree); tree->root = kdarea_new(0); return tree; } static inline int32_t max32(int32_t v1, int32_t v2) {return v1>v2?v1:v2;} static inline int32_t min32(int32_t v1, int32_t v2) {return v1type = type; b->xy = xy; return b; } kdarea_t*kdbranch_follow(const kdbranch_t*tree, int32_t x, int32_t y) { /* int follow = 0; switch(tree->type) { case KD_LEFT: follow = (x < tree->xy); break; case KD_RIGHT: follow = (x > tree->xy); break; case KD_UP: follow = (y < tree->xy); break; case KD_DOWN: follow = (y > tree->xy); break; } return &tree->side[follow]; */ int32_t s = x*vx[tree->type] + y*vy[tree->type]; int32_t v = tree->xy*vsign[tree->type]; return tree->side[s < v]; } static kdarea_list_t* kdarea_list_new(kdarea_t*area) { NEW(kdarea_list_t,b); b->area = area; b->next = b->prev = b; return b; } static kdarea_list_t*kdarea_list_concatenate(kdarea_list_t*l1, kdarea_list_t*l2) { if(!l1) return l2; if(!l2) return l1; l2->prev->next = l1->next; l1->next->prev = l2->prev; l2->prev = l1; l1->next = l2; return l1; } static kdbbox_t bbox_for_halfplane(int xy, int dir) { kdbbox_t b = {INT_MIN,INT_MIN,INT_MAX,INT_MAX}; switch(dir) { case KD_LEFT: b.xmax = xy; break; case KD_RIGHT: b.xmin = xy; break; case KD_UP: b.ymax = xy; break; case KD_DOWN: b.ymin = xy; break; } return b; } static kdbbox_t intersect_bbox(const kdbbox_t*box1, const kdbbox_t*box2) { kdbbox_t b = *box1; if(box2->xmin > b.xmin) b.xmin = box2->xmin; if(box2->ymin > b.ymin) b.ymin = box2->ymin; if(box2->xmax < b.xmax) b.xmax = box2->xmax; if(box2->ymax < b.ymax) b.ymax = box2->ymax; if(b.xmin > b.xmax) b.xmax = b.xmin; if(b.ymin > b.ymax) b.ymax = b.ymin; return b; } static void kdarea_split(kdarea_t*area, int xy, int dir, int32_t x1, int32_t y1, int32_t x2, int32_t y2) { if(!area->split) { kdbranch_t*b = area->split = kdbranch_new(xy, dir); kdbbox_t b1 = bbox_for_halfplane(xy, dir); kdbbox_t b2 = bbox_for_halfplane(xy, dir^2); b->side[0] = kdarea_new(area->data); b->side[1] = kdarea_new(area->data); b->side[0]->bbox = intersect_bbox(&area->bbox,&b1); b->side[1]->bbox = intersect_bbox(&area->bbox,&b2); memcpy(b->side[0]->neighbors, area->neighbors, sizeof(area->neighbors)); memcpy(b->side[1]->neighbors, area->neighbors, sizeof(area->neighbors)); b->side[0]->neighbors[dir^2] = b->side[1]; b->side[1]->neighbors[dir] = b->side[0]; area->data = 0; } else { kdbranch_t*split = area->split; kdarea_t*first = kdbranch_follow(split, x1,y1); kdarea_t*second = kdbranch_follow(split, x2,y2); if(!first) { if(!second) { /* line is on top of an already existing segment */ return; } else { /* first point is directly on the split */ kdarea_split(second, xy, dir, x1,y1, x2,y2); return; } } else { if(!second) { /* second point is directly on the split */ kdarea_split(first, xy, dir, x1,y1, x2,y2); return; } else if(first == second) { /* both points are to the same side of this split */ kdarea_split(first, xy, dir, x1,y1, x2,y2); return; } else { kdarea_split(first, xy, dir, x1,y1, x2,y2); kdarea_split(second, xy, dir, x1,y1, x2,y2); return; } } } } static kdarea_list_t* kdarea_filter(kdarea_t*area, int xy, int dir) { if(!area->split) { return kdarea_list_new(area); } else { kdbranch_t*branch = area->split; if((branch->type^dir) == 0) { /* both filter as well as branch point into the same direction */ if(xy*vsign[dir] >= branch->xy*vsign[dir]) { /* filter splits the primary node. We can skip the other one. */ #ifdef DEBUG printf("%p: using %p, skipping %p (looking to %s of %d)\n", area, branch->side[0], branch->side[1], vname[dir], xy); #endif return kdarea_filter(branch->side[0], xy, dir); } else { /* filter splits the secondary node. the primary node is left completely intact, and returned as such */ #ifdef DEBUG printf("%p: expanding %p, filtering %p (looking to %s of %d)\n", area, branch->side[0], branch->side[1], vname[dir], xy); #endif kdarea_list_t*l1 = kdarea_list_new(branch->side[0]); kdarea_list_t*l2 = kdarea_filter(branch->side[1], xy, dir); return kdarea_list_concatenate(l1,l2); } } else if((branch->type^dir) == 2) { /* filter and branch point into opposite directions */ if(xy*vsign[dir] >= branch->xy*vsign[dir]) { // filter splits the secondary node. We can skip the primary node. #ifdef DEBUG printf("%p: skipping %p, using %p (looking to %s of %d)\n", area, branch->side[0], branch->side[1], vname[dir], xy); #endif return kdarea_filter(branch->side[1], xy, dir); } else { /* filter splits the primary node. the secondary node is left completely intact, and returned as such */ #ifdef DEBUG printf("%p: filtering %p, expanding %p (looking to %s of %d)\n", area, branch->side[0], branch->side[1], vname[dir], xy); #endif kdarea_list_t*l1 = kdarea_filter(branch->side[0], xy, dir); kdarea_list_t*l2 = kdarea_list_new(branch->side[1]); return kdarea_list_concatenate(l1,l2); } } else { /* filter segment is perpendicular to the node */ return kdarea_list_new(area); } } } static kdarea_t* kdarea_find(kdarea_t*node, int x, int y) { while(node) { if(!node->split) break; node = kdbranch_follow(node->split, x,y); } return node; } kdarea_t*kdtree_find(kdtree_t*tree, int x, int y) { return kdarea_find(tree->root, x,y); } void kdarea_list_destroy(kdarea_list_t*list) { kdarea_list_t*i = list; if(i) do { kdarea_list_t*next = i->next; free(i); i = next; } while(i!=list); } static kdarea_list_t* kdarea_list_add(kdarea_list_t*l, kdarea_t*area) { return kdarea_list_concatenate(l,kdarea_list_new(area)); } static kdarea_list_t* kdarea_all_children(kdarea_t*area, int32_t x1, int32_t y1, int32_t x2, int32_t y2, kdarea_list_t*result) { if(!area->split) { if(area->bbox.xmin >= x1 && area->bbox.ymin >= y1 && area->bbox.xmax <= x2 && area->bbox.ymax <= y2) { result = kdarea_list_add(result, area); } } else { result = kdarea_all_children(area->split->side[0], x1, y1, x2, y2, result); result = kdarea_all_children(area->split->side[1], x1, y1, x2, y2, result); } return result; } /* return all areas that are contained in, or partly intersect, the given bounding box */ kdarea_list_t* kdtree_filter(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2, char leafs) { kdarea_list_t*result = 0; kdarea_list_t*branches1 = kdarea_filter(tree->root, x2, KD_LEFT); kdarea_list_t*i = branches1; #ifdef DEBUG kdarea_list_t*u = branches1; if(u) do {printf("%p [%d %d %d %d] is to the left of %d\n", u->area, u->area->bbox.xmin, u->area->bbox.ymin, u->area->bbox.xmax, u->area->bbox.ymax, x2);u = u->next;} while(u!=branches1); #endif if(i) do { kdarea_list_t*branches2 = kdarea_filter(i->area, y2, KD_UP); kdarea_list_t*j = branches2; #ifdef DEBUG kdarea_list_t*u = branches2; if(u) do {printf("%p [%d %d %d %d] is above %d\n", u->area, u->area->bbox.xmin, u->area->bbox.ymin, u->area->bbox.xmax, u->area->bbox.ymax, y2);u = u->next;} while(u!=branches2); #endif if(j) do { kdarea_list_t*branches3 = kdarea_filter(j->area, x1, KD_RIGHT); kdarea_list_t*k = branches3; #ifdef DEBUG kdarea_list_t*u = branches3; if(u) do {printf("%p [%d %d %d %d] is to the right of %d\n", u->area, u->area->bbox.xmin, u->area->bbox.ymin, u->area->bbox.xmax, u->area->bbox.ymax, x1);u = u->next;} while(u!=branches3); #endif if(k) do { kdarea_list_t*branches4 = kdarea_filter(k->area, y1, KD_DOWN); kdarea_list_t*l = branches4; #ifdef DEBUG kdarea_list_t*u = branches4; if(u) do {printf("%p [%d %d %d %d] is below %d\n", u->area, u->area->bbox.xmin, u->area->bbox.ymin, u->area->bbox.xmax, u->area->bbox.ymax, y1);u = u->next;} while(u!=branches4); #endif if(leafs) { if(l) do { result = kdarea_list_concatenate(result, kdarea_all_children(l->area, x1, y1, x2, y2, 0)); l = l->next; } while(l!=branches4); kdarea_list_destroy(branches4); } else { result = kdarea_list_concatenate(result, l); } k = k->next; } while(k!=branches3); kdarea_list_destroy(branches3); j = j->next; } while(j!=branches2); kdarea_list_destroy(branches2); i = i->next; } while(i!=branches1); kdarea_list_destroy(branches1); return result; } static void kdtree_modify_box(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2, void*(*f)(void*user,void*data), void*user) { kdarea_split(tree->root, x2, KD_LEFT, x2,y1, x2,y2); kdarea_split(tree->root, y2, KD_UP, x1,y2, x2,y2); kdarea_split(tree->root, x1, KD_RIGHT, x1,y1, x1,y2); kdarea_split(tree->root, y1, KD_DOWN, x1,y1, x2,y1); #ifdef DEBUG printf("inserting (%d,%d,%d,%d) %p\n", x1, y1, x2, y2, user); #endif kdarea_list_t*l = kdtree_filter(tree, x1, y1, x2, y2, 1); kdarea_list_t*i = l; if(l) do { #ifdef DEBUG printf("%p [%d,%d,%d,%d], is contained in [%d %d %d %d]\n", i->area, i->area->bbox.xmin, i->area->bbox.ymin, i->area->bbox.xmax, i->area->bbox.ymax, x1, y1, x2, y2); #endif i->area->data = f(user, i->area->data); i = i->next; } while(i!=l); kdarea_list_destroy(l); } static void* overwrite(void*user, void*data) { return user; } void kdtree_add_box(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2, void*data) { kdtree_modify_box(tree, x1, y1, x2, y2, overwrite, data); } static void* add_to_dict(void*user, void*data) { dict_t*items = (dict_t*)user; if(!dict_contains(items, data)) { dict_put(items, data, data); } return data; } kdresult_list_t*kdtree_find_in_box(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2) { dict_t*items = dict_new2(&ptr_type); kdtree_modify_box(tree, x1, y1, x2, y2, add_to_dict, items); kdresult_list_t*list = 0; DICT_ITERATE_KEY(items, void*, d) { if(d) { NEW(kdresult_list_t,r); r->data = d; r->next = list; list = r; } }; dict_destroy(items); return list; } kdarea_t*kdarea_neighbor(kdarea_t*area, int dir, int xy) { int x,y; switch(dir) { case KD_LEFT: x = area->bbox.xmin; y = xy; break; case KD_RIGHT: x = area->bbox.xmax; y = xy; break; case KD_UP: x = xy; y = area->bbox.ymin; break; case KD_DOWN: x = xy; y = area->bbox.ymax; break; } kdarea_t*n = area->neighbors[dir]; if(!n) return 0; return kdarea_find(n, x, y); } static void do_indent(int l) { int i; for(i=0;itype], branch->xy); kdbbox_t b = bbox_for_halfplane(branch->xy, branch->type); kdarea_print(branch->side[0], indent+4); kdarea_print(branch->side[1], indent+4); } void kdarea_print(kdarea_t*area, int indent) { int i; assert(area); do_indent(indent);printf("[%p] area (%d,%d,%d,%d) %p (l:%p r:%p u:%p d:%p)\n", area, area->bbox.xmin, area->bbox.ymin, area->bbox.xmax, area->bbox.ymax, area->data, area->neighbors[KD_LEFT], area->neighbors[KD_RIGHT], area->neighbors[KD_UP], area->neighbors[KD_DOWN]); if(area->split) { kdbranch_print(area->split, indent+4); } } void kdtree_print(kdtree_t*tree) { kdarea_print(tree->root, 0); } void kdbranch_destroy(kdbranch_t*b) { if(b->side[0]) { kdarea_destroy(b->side[0]); b->side[0] = 0; } if(b->side[1]) { kdarea_destroy(b->side[1]); b->side[1] = 0; } free(b); } void kdarea_destroy(kdarea_t*area) { if(area->split) { kdbranch_destroy(area->split); } free(area); } void kdtree_destroy(kdtree_t*tree) { kdarea_destroy(tree->root); tree->root = 0; free(tree); } #ifdef MAIN int main() { assert((1^vx[2]) < 0); kdtree_t*tree = kdtree_new(); kdtree_add_box(tree, 10,30,20,40, "hello world"); kdtree_add_box(tree, 12,50,15,60, "hello world"); //kdtree_print(tree); kdarea_t*a = kdtree_find(tree, 15,35); kdarea_t*left = kdarea_neighbor(a, KD_LEFT, /*y*/35); kdarea_t*right = kdarea_neighbor(a, KD_RIGHT, /*y*/35); kdarea_t*up = kdarea_neighbor(a, KD_UP, /*x*/15); kdarea_t*down = kdarea_neighbor(a, KD_DOWN, /*x*/15); a = kdtree_find(tree, 15,25); assert(!a || !a->data); a = kdtree_find(tree, 15,45); assert(!a || !a->data); a = kdtree_find(tree, 5,35); assert(!a || !a->data); a = kdtree_find(tree, 45,35); assert(!a || !a->data); kdtree_destroy(tree); } #endif swftools_0.9.2+git20130725.orig/lib/mem.h0000644000175000017500000000106012216332640017015 0ustar gawaingawain#ifndef __mem_h__ #define __mem_h__ #ifdef __cplusplus extern "C" { #endif #include #include "../config.h" #define ALLOC_ARRAY(type, num) (((type)*)rfxalloc(sizeof(type)*(num))) void* rfx_alloc(int size); void* rfx_calloc(int size); void* rfx_realloc(void*data, int size); void rfx_free(void*data); #ifndef HAVE_CALLOC void* rfx_calloc_replacement(int nmemb, int size); #define calloc rfx_calloc_replacement #endif #ifdef MEMORY_INFO long rfx_memory_used(); char* rfx_memory_used_str(); #endif #ifdef __cplusplus } #endif #endif //__mem_h__ swftools_0.9.2+git20130725.orig/lib/graphcut.h0000644000175000017500000000312012216332640020053 0ustar gawaingawain/* graphcut- a graphcut implementation based on the Boykov Kolmogorov algorithm Part of the swftools package. Copyright (c) 2007,2008,2009 Matthias Kramm This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef __graphcut_h__ #define __graphcut_h__ typedef signed int weight_t; typedef struct _halfedge halfedge_t; typedef struct _node node_t; typedef struct _graph graph_t; struct _halfedge { node_t*node; struct _halfedge*fwd; weight_t weight; weight_t init_weight; char used; halfedge_t*next; }; struct _node { halfedge_t*edges; union { int tmp; int component; int color; }; int nr; }; struct _graph { node_t* nodes; int num_nodes; }; graph_t* graph_new(int num_nodes); halfedge_t*graph_add_edge(node_t*from, node_t*to, weight_t forward_weight, weight_t backward_weight); weight_t graph_maxflow(graph_t*graph, node_t*pos1, node_t*pos2); int graph_find_components(graph_t*g); void graph_delete(graph_t*); #endif swftools_0.9.2+git20130725.orig/lib/q.h0000644000175000017500000002273512216332640016513 0ustar gawaingawain/* q.h Header file for q.c. Part of the swftools package. Copyright (c) 2001,2002,2003,2004 Matthias Kramm 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 */ #ifndef __q_h__ #define __q_h__ #include #include #include "mem.h" #ifdef __cplusplus extern "C" { #endif #define NEW(t,y) t*y = (t*)rfx_calloc(sizeof(t)); #define PTR_AS_INT(p) (((char*)(p))-((char*)NULL)) #define INT_AS_PTR(i) (((char*)NULL)+(int)(i)) /* dynamically growing mem section */ typedef struct _mem_t { char*buffer; int len; int pos; int read_pos; } mem_t; /* fifo buffered growing mem region */ typedef struct _ringbuffer_t { void*internal; int available; } ringbuffer_t; /* non-nul terminated string */ typedef struct _string_t { const char*str; int len; } string_t; /* key/value pairs of strings */ typedef struct _map_t { void*internal; } map_t; /* type information */ typedef char (*equals_func)(const void*o1, const void*o2); typedef unsigned int (*hash_func)(const void*o); typedef void* (*dup_func)(const void*o); typedef void (*free_func)(void*o); typedef struct _type_t { equals_func equals; hash_func hash; dup_func dup; free_func free; } type_t; extern type_t charptr_type; extern type_t stringstruct_type; extern type_t ptr_type; extern type_t int_type; typedef struct _dictentry { void*key; unsigned int hash; void*data; struct _dictentry*next; } dictentry_t; /* (void*) pointers referenced by strings */ typedef struct _dict { dictentry_t**slots; type_t*key_type; int hashsize; int num; } dict_t; /* array of key/value pairs, with fast lookup */ typedef struct _array_entry { void*name; void*data; } array_entry_t; typedef struct _array { int num; int size; array_entry_t*d; dict_t*entry2pos; } array_t; /* array of strings, string<->int mapping, with O(1) for int->string lookup and ~O(n/hashsize) for string->int lookup */ typedef struct _stringarray_t { void*internal; } stringarray_t; /* heap */ typedef struct _heap { void**elements; char*data; int elem_size; int size; int max_size; int(*compare)(const void *, const void *); } heap_t; /* trie (with rollback) */ typedef struct _trielayer { struct _trielayer*row[256]; unsigned char*rest; void*data; } trielayer_t; typedef struct _trie { trielayer_t* start; void*rollback; } trie_t; /* move to front list structure */ typedef struct _mtf_item { const void*key; int num; struct _mtf_item*next; } mtf_item_t; typedef struct _mtf { mtf_item_t*first; type_t*type; } mtf_t; char* strdup_n(const char*str, int size); char* allocprintf(const char*str, ...); float medianf(float*values, int n); unsigned int crc32_add_byte(unsigned int crc32, unsigned char b); unsigned int crc32_add_string(unsigned int crc32, const char*s); unsigned int crc32_add_bytes(unsigned int checksum, const void*s, int len); void mem_init(mem_t*mem); int mem_put(mem_t*m, void*data, int length); int mem_putstring(mem_t*m, string_t str); int mem_get(mem_t*m, void*data, int length); void mem_clear(mem_t*mem); void mem_destroy(mem_t*mem); void ringbuffer_init(ringbuffer_t*r); void ringbuffer_put(ringbuffer_t*r, void*buf, int size); int ringbuffer_read(ringbuffer_t*r, void*buf, int size); void ringbuffer_clear(ringbuffer_t*r); /* old style functions- should be renamed */ string_t string_new(const char*text, int len); string_t string_new2(const char*text); void string_dup(string_t*str, const char*text); void string_dup2(string_t*str, const char*text, int len); char* string_cstr(string_t*str); char* string_escape(string_t*str); string_t* string_new3(const char*text, int len); string_t* string_new4(const char*text); void string_free(string_t*s); unsigned int string_hash(const string_t*str); unsigned int string_hash2(const char*str); unsigned int string_hash3(const char*str, int len); uint64_t string_hash64(const char*str); void string_set(string_t*str, const char*text); void string_set2(string_t*str, const char*text, int len); string_t*string_dup3(string_t*s); int string_equals(string_t*str, const char*text); char* concat2(const char* t1, const char* t2); char* concat3(const char* t1, const char* t2, const char* t3); void stringarray_init(stringarray_t*sa, int hashsize); void stringarray_put(stringarray_t*sa, string_t str); char* stringarray_at(stringarray_t*sa, int pos); string_t stringarray_at2(stringarray_t*sa, int pos); int stringarray_find(stringarray_t*sa, string_t*str); void stringarray_clear(stringarray_t*sa); void stringarray_destroy(stringarray_t*sa); dict_t*dict_new(); dict_t*dict_new2(type_t*type); void dict_init(dict_t*dict, int size); void dict_init2(dict_t*dict, type_t*type, int size); dictentry_t*dict_put(dict_t*h, const void*key, void* data); void dict_put2(dict_t*h, const char*s, void*data); int dict_count(dict_t*h); void dict_dump(dict_t*h, FILE*fi, const char*prefix); dictentry_t* dict_get_slot(dict_t*h, const void*key); char dict_contains(dict_t*h, const void*s); void* dict_lookup(dict_t*h, const void*s); char dict_del(dict_t*h, const void*s); char dict_del2(dict_t*h, const void*key, void*data); dict_t*dict_clone(dict_t*); void dict_foreach_keyvalue(dict_t*h, void (*runFunction)(void*data, const void*key, void*val), void*data); void dict_foreach_value(dict_t*h, void (*runFunction)(void*)); void dict_free_all(dict_t*h, char free_keys, void (*free_data_function)(void*)); void dict_clear(dict_t*h); void dict_destroy_shallow(dict_t*dict); void dict_destroy(dict_t*dict); #define DICT_ITERATE_DATA(d,t,v) \ int v##_i;dictentry_t*v##_e;t v;\ for(v##_i=0;v##_i<(d)->hashsize;v##_i++) \ for(v##_e=(d)->slots[v##_i]; v##_e && ((v=(t)v##_e->data)||1); v##_e=v##_e->next) #define DICT_ITERATE_KEY(d,t,v) \ int v##_i;dictentry_t*v##_e;t v;\ for(v##_i=0;v##_i<(d)->hashsize;v##_i++) \ for(v##_e=(d)->slots[v##_i];v##_e && ((v=(t)v##_e->key)||1);v##_e=v##_e->next) #define DICT_ITERATE_ITEMS(d,t1,v1,t2,v2) \ int v1##_i;dictentry_t*v1##_e;t1 v1;t2 v2; \ for(v1##_i=0;v1##_i<(d)->hashsize;v1##_i++) \ for(v1##_e=(d)->slots[v1##_i]; v1##_e && (((v1=(t1)v1##_e->key)||1)&&((v2=(t2)v1##_e->data)||1)); v1##_e=v1##_e->next) void map_init(map_t*map); void map_put(map_t*map, string_t t1, string_t t2); const char* map_lookup(map_t*map, const char*name); void map_dump(map_t*map, FILE*fi, const char*prefix); void map_clear(map_t*map); void map_destroy(map_t*map); void heap_init(heap_t*h,int elem_size, int(*compare)(const void *, const void *)); heap_t* heap_new(int elem_size, int(*compare)(const void *, const void *)); heap_t* heap_clone(heap_t*o); void heap_clear(heap_t*h); void heap_destroy(heap_t*h); void heap_put(heap_t*h, void*e); int heap_size(heap_t*h); void* heap_peek(heap_t*h); void* heap_chopmax(heap_t*h); void heap_dump(heap_t*h, FILE*fi); void** heap_flatten(heap_t*h); trie_t*trie_new(); void trie_put(trie_t*t, unsigned const char*id, void*data); char trie_remove(trie_t*t, unsigned const char*id); void*trie_lookup(trie_t*t, unsigned const char*id); int trie_contains(trie_t*t, unsigned const char*id); void trie_remember(trie_t*t); void trie_rollback(trie_t*t); void trie_dump(trie_t*t); mtf_t* mtf_new(type_t*type); void mtf_increase(mtf_t*m, const void*key); void mtf_destroy(mtf_t*m); array_t* array_new1(); array_t* array_new2(type_t*type); void array_free(array_t*array); void*array_getkey(array_t*array, int nr); void*array_getvalue(array_t*array, int nr); int array_append(array_t*array, const void*name, void*data); #define array_contains(a,b) (array_find((a),(b))>=0) int array_find(array_t*array, const void*name); int array_find2(array_t*array, const void*name, void*data); int array_update(array_t*array, const void*name, void*data); int array_append_if_new(array_t*array, const void*name, void*data); #define array_length(a) ((a)->num) #define DECLARE(x) struct _##x;typedef struct _##x x##_t; #define DECLARE_LIST(x) \ struct _##x##_list { \ struct _##x* x; \ struct _##x##_list*next; \ }; \ typedef struct _##x##_list x##_list_t; int list_length_(void*_list); void*list_clone_(void*_list); void list_append_(void*_list, void*entry); void list_prepend_(void*_list, void*entry); void list_free_(void*_list); void list_deep_free_(void*_list); void list_concat_(void*l1, void*l2); #define list_new() ((void*)0) #define list_append(list, e) {sizeof((list)->next);list_append_(&(list),(e));} #define list_concat(l1, l2) {sizeof((l1)->next);sizeof((l2)->next);list_concat_(&(l1),&(l2));} #define list_prepend(list, e) {sizeof((list)->next);list_prepend_(&(list),(e));} #define list_free(list) {sizeof((list)->next);list_free_(&(list));} #define list_deep_free(list) {sizeof((list)->next);list_deep_free_(&(list));} #define list_clone(list) (sizeof((list)->next),(list?list_clone_(&(list)):0)) #define list_length(list) (sizeof((list)->next),list_length_(list)) #ifdef __cplusplus } #endif #endif //__q_h__ swftools_0.9.2+git20130725.orig/lib/rfxswf.c0000644000175000017500000012701512216332640017562 0ustar gawaingawain/* vi: set sts=2 sw=2 :*/ /* rfxswf.c Library for creating and reading SWF files or parts of it. There's a module directory which provides some extended functionality. Most modules are included at the bottom of this file. Part of the swftools package. Copyright (c) 2000-2003 Rainer Böhme Copyright (c) 2003 Matthias Kramm 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 */ #include "mem.h" #include "rfxswf.h" #ifdef HAVE_ZLIB #include #endif // HAVE_ZLIB #ifndef RFXSWF_DISABLESOUND #ifdef HAVE_LAME #include "lame/lame.h" #endif #endif #ifdef HAVE_TIME_H #include #endif #ifdef HAVE_IO_H #include #endif #include "./bitio.h" #include "./os.h" // internal constants #define MALLOC_SIZE 128 #define INSERT_RFX_TAG #define MEMSIZE(l) (((l/MALLOC_SIZE)+1)*MALLOC_SIZE) // inline wrapper functions TAG * swf_NextTag(TAG * t) { return t->next; } TAG * swf_PrevTag(TAG * t) { return t->prev; } U16 swf_GetTagID(TAG * t) { return t->id; } U32 swf_GetTagLen(TAG * t) { return t->len; } U8* swf_GetTagLenPtr(TAG * t) { return &(t->data[t->len]); } U32 swf_GetTagPos(TAG * t) { return t->pos; } void swf_SetTagPos(TAG * t,U32 pos) { swf_ResetReadBits(t); if (pos<=t->len) t->pos = pos; else { #ifdef DEBUG_RFXSWF fprintf(stderr,"SetTagPos(%d) out of bounds: TagID = %i\n",pos, t->id); #endif } } char* swf_GetString(TAG*t) { int pos = t->pos; while(t->pos < t->len && swf_GetU8(t)); /* make sure we always have a trailing zero byte */ if(t->pos == t->len) { if(t->len == t->memsize) { swf_ResetWriteBits(t); swf_SetU8(t, 0); t->len = t->pos; } t->data[t->len] = 0; } return (char*)&(t->data[pos]); } U8 swf_GetU8(TAG * t) { swf_ResetReadBits(t); #ifdef DEBUG_RFXSWF if ((int)t->pos>=(int)t->len) { fprintf(stderr,"GetU8() out of bounds: TagID = %i\n",t->id); return 0; } #endif return t->data[t->pos++]; } U16 swf_GetU16(TAG * t) { U16 res; swf_ResetReadBits(t); #ifdef DEBUG_RFXSWF if ((int)t->pos>((int)t->len-2)) { fprintf(stderr,"GetU16() out of bounds: TagID = %i\n",t->id); return 0; } #endif res = t->data[t->pos] | (t->data[t->pos+1]<<8); t->pos+=2; return res; } U32 swf_GetU32(TAG * t) { U32 res; swf_ResetReadBits(t); #ifdef DEBUG_RFXSWF if ((int)t->pos>((int)t->len-4)) { fprintf(stderr,"GetU32() out of bounds: TagID = %i\n",t->id); return 0; } #endif res = t->data[t->pos] | (t->data[t->pos+1]<<8) | (t->data[t->pos+2]<<16) | (t->data[t->pos+3]<<24); t->pos+=4; return res; } int swf_GetBlock(TAG * t,U8 * b,int l) // returns number of bytes written (<=l) // b = NULL -> skip data { swf_ResetReadBits(t); if ((t->len-t->pos)len-t->pos; if (b && l) memcpy(b,&t->data[t->pos],l); t->pos+=l; return l; } int swf_SetBlock(TAG * t,const U8 * b,int l) // Appends Block to the end of Tagdata, returns size { U32 newlen = t->len + l; swf_ResetWriteBits(t); if (newlen>t->memsize) { U32 newmem = MEMSIZE(newlen); U8 * newdata = (U8*)(rfx_realloc(t->data,newmem)); t->memsize = newmem; t->data = newdata; } if (b) memcpy(&t->data[t->len],b,l); else memset(&t->data[t->len],0x00,l); t->len+=l; return l; } int swf_SetU8(TAG * t,U8 v) { swf_ResetWriteBits(t); if ((t->len+1)>t->memsize) return (swf_SetBlock(t,&v,1)==1)?0:-1; t->data[t->len++] = v; return 0; } int swf_SetU16(TAG * t,U16 v) { U8 a[2]; a[0] = v&0xff; a[1] = v>>8; swf_ResetWriteBits(t); if ((t->len+2)>t->memsize) return (swf_SetBlock(t,a,2)==2)?0:-1; t->data[t->len++] = a[0]; t->data[t->len++] = a[1]; return 0; } void swf_SetS16(TAG * t,int v) { if(v>32767 || v<-32768) { #ifdef DEBUG_RFXSWF fprintf(stderr, "Warning: S16 overflow: %d\n", v); #endif } swf_SetU16(t, (S16)v); } int swf_SetU32(TAG * t,U32 v) { U8 a[4]; a[0] = v&0xff; // to ensure correct handling of non-intel byteorder a[1] = (v>>8)&0xff; a[2] = (v>>16)&0xff; a[3] = (v>>24)&0xff; swf_ResetWriteBits(t); if ((t->len+4)>t->memsize) return (swf_SetBlock(t,a,4)==4)?0:-1; t->data[t->len++] = a[0]; t->data[t->len++] = a[1]; t->data[t->len++] = a[2]; t->data[t->len++] = a[3]; return 0; } U32 swf_GetBits(TAG * t,int nbits) { U32 res = 0; if (!nbits) return 0; if (!t->readBit) t->readBit = 0x80; while (nbits) { res<<=1; #ifdef DEBUG_RFXSWF if (t->pos>=t->len) { fprintf(stderr,"GetBits() out of bounds: TagID = %i, pos=%d, len=%d\n",t->id, t->pos, t->len); int i,m=t->len>10?10:t->len; for(i=-1;idata[i]); } fprintf(stderr, "\n"); return res; } #endif if (t->data[t->pos]&t->readBit) res|=1; t->readBit>>=1; nbits--; if (!t->readBit) { if (nbits) t->readBit = 0x80; t->pos++; } } return res; } S32 swf_GetSBits(TAG * t,int nbits) { U32 res = swf_GetBits(t,nbits); if (res&(1<<(nbits-1))) res|=(0xffffffff<writeBit) { if (FAILED(swf_SetU8(t,0))) return -1; t->writeBit = 0x80; } if (v&bm) t->data[t->len-1] |= t->writeBit; bm>>=1; t->writeBit>>=1; nbits--; } return 0; } // Advanced Data Access Functions double swf_GetFixed(TAG * t) { U16 low = swf_GetU16(t); U16 high = swf_GetU16(t); return high + low*(1/65536.0); } void swf_SetFixed(TAG * t, double f) { U16 fr = (U16)((f-(int)f)*65536); swf_SetU16(t, fr); swf_SetU16(t, (U16)f - (f<0 && fr!=0)); } float swf_GetFixed8(TAG * t) { U8 low = swf_GetU8(t); U8 high = swf_GetU8(t); return (float)(high + low*(1/256.0)); } void swf_SetFixed8(TAG * t, float f) { U8 fr = (U8)((f-(int)f)*256); swf_SetU8(t, fr); swf_SetU8(t, (U8)f - (f<0 && fr!=0)); } U32 swf_GetU30(TAG*tag) { U32 shift = 0; U32 s = 0; int nr=0; while(1) { U8 b = swf_GetU8(tag); nr++; s|=(b&127)<=32) break; } /*int nr2= swf_SetU30(0, s); if(nr!=nr2) { printf("Unsigned value %d stored in %d bytes, I'd store it in %d bytes\n", s, nr, nr2); }*/ return s; } int swf_SetU30(TAG*tag, U32 u) { int nr = 0; do { if(tag) swf_SetU8(tag, (u&~0x7f?0x80:0) | (u&0x7F)); u>>=7; nr++; } while(u); return nr; } void swf_SetABCU32(TAG*tag, U32 u) { do { swf_SetU8(tag, (u&~0x7f?0x80:0) | (u&0x7F)); u>>=7; } while(u); } U32 swf_GetABCU32(TAG*tag) { return swf_GetU30(tag); } void swf_SetABCS32(TAG*tag, S32 v) { swf_SetABCU32(tag, v); } S32 swf_GetABCS32(TAG*tag) { return swf_GetABCU32(tag); } #if 0 /*The AVM2 spec is just plain wrong, claiming that S32 values are sign extended. They're not. This wastes up to 4 bytes for every negative value. */ void swf_SetABCS32(TAG*tag, S32 s) { printf("write S32: %d\n", s); S32 neg = s<0?-1:0; U8 sign = s<0?0x40:0; while(1) { U8 val = s&0x7f; U8 vsign = s&0x40; s>>=7; neg>>=7; if(s==neg && vsign==sign) { /* if the value we now write has the same sign as s and all the remaining bits are equal to the sign of s too, stop writing */ swf_SetU8(tag, val); printf("put %02x\n", val); break; } else { swf_SetU8(tag, 0x80 | val); printf("put %02x\n", 0x80|val); } }; } int swf_GetS30(TAG*tag) { U32 shift = 0; U32 s = 0; int nr=0; while(1) { U8 b = swf_GetU8(tag); nr++; nt i,m=t->len>10?10:t->len; for(i=0;idata[i]); } fprintf(stderr, "\n"); s|=(b&127)<=32) { if(b&64) { if(shift<32) s|=0xffffffff<>10)&0x1f; U16 m = f1&0x3ff; /* find highest bit in mantissa */ int h=0; while(!(m&0x400)) { m<<=1; h++; } m&=0x3ff; e -= h; e += 0x6f; f2.u = (f1&0x8000)<<16; //sign f2.u |= e<<23; //exponent f2.u |= m<<13; //mantissa return *(float*)&f2; } void swf_SetF16(TAG * t, float f) { union { U32 u; float f; } v; v.f = f; U16 result = (v.u>>16)&0x8000; //sign int exp = ((v.u>>23)&0xff)-0x7f+0x10; U16 m = (v.u>>13)&0x3ff; //fprintf(stderr, "%f: %04x sign, %d exp, %04x mantissa\n", f, result, exp, m); if(exp<-10) { // underflow (clamp to 0.0) exp = 0; m = 0; } else if(exp<0) { // partial underflow- strip some bits m = (m|0x400)>>-exp; exp = 0; } else if(exp>=32) { exp = 31; m = 0x3ff; fprintf(stderr, "Exponent overflow in FLOAT16 encoding\n"); } else { exp++; m = (m>>1)|0x200; } result |= exp<<10; result |= m; swf_SetU16(t, result); } float F16toFloat(U16 x) { TAG t; t.data = (void*)&x; t.readBit = 0; t.pos = 0; t.len = 2; return swf_GetF16(&t); } float floatToF16(float f) { U16 u = 0; TAG t; t.data = (void*)&u; t.len = 0; t.memsize = 2; t.writeBit = 0; swf_SetF16(&t, f); return u; } float swf_GetFloat(TAG *tag) { union { U32 uint_bits; float float_bits; } f; f.uint_bits = swf_GetU32(tag); return f.float_bits; } void swf_SetFloat(TAG *tag, float v) { union { U32 uint_bits; float float_bits; } f; f.float_bits = v; swf_SetU32(tag, f.uint_bits); } double swf_GetD64(TAG*tag) { /* FIXME: this is not big-endian compatible */ double value = *(double*)&tag->data[tag->pos]; swf_GetU32(tag); swf_GetU32(tag); return value; } int swf_SetD64(TAG*tag, double v) { /* FIXME: this is not big-endian compatible */ swf_SetU32(tag, ((U32*)&v)[0]); swf_SetU32(tag, ((U32*)&v)[1]); return 8; } int swf_GetU24(TAG*tag) { int b1 = swf_GetU8(tag); int b2 = swf_GetU8(tag); int b3 = swf_GetU8(tag); return b3<<16|b2<<8|b1; } int swf_GetS24(TAG*tag) { int b1 = swf_GetU8(tag); int b2 = swf_GetU8(tag); int b3 = swf_GetU8(tag); if(b3&0x80) { return -1-((b3<<16|b2<<8|b1)^0xffffff); } else { return b3<<16|b2<<8|b1; } } int swf_SetU24(TAG*tag, U32 v) { if(tag) { if(v&0xff000000) fprintf(stderr, "Error: Overflow in swf_SetU24()\n"); swf_SetU8(tag, v); swf_SetU8(tag, v>>8); swf_SetU8(tag, v>>16); } return 3; } int swf_SetS24(TAG*tag, U32 v) { if(tag) { if(!(v&0xff000000)) return swf_SetU24(tag, v); if((v&0xff000000)!=0xff000000) { fprintf(stderr, "Error: Overflow in swf_SetS24()\n"); } swf_SetU8(tag, v); swf_SetU8(tag, v>>8); swf_SetU8(tag, v>>16); } return 3; } int swf_SetRGB(TAG * t,RGBA * col) { if (!t) return -1; if (col) { swf_SetU8(t,col->r); swf_SetU8(t,col->g); swf_SetU8(t,col->b); } else swf_SetBlock(t,NULL,3); return 0; } void swf_GetRGB(TAG * t, RGBA * col) { RGBA dummy; if(!col) col = &dummy; col->r = swf_GetU8(t); col->g = swf_GetU8(t); col->b = swf_GetU8(t); col->a = 255; } int swf_SetRGBA(TAG * t,RGBA * col) { if (!t) return -1; if (col) { swf_SetU8(t,col->r); swf_SetU8(t,col->g); swf_SetU8(t,col->b); swf_SetU8(t,col->a); } else swf_SetBlock(t,NULL,4); return 0; } void swf_GetRGBA(TAG * t, RGBA * col) { RGBA dummy; if(!col) col = &dummy; col->r = swf_GetU8(t); col->g = swf_GetU8(t); col->b = swf_GetU8(t); col->a = swf_GetU8(t); } void swf_GetGradient(TAG * tag, GRADIENT * gradient, char alpha) { int t; if(!tag) { memset(gradient, 0, sizeof(GRADIENT)); return; } U8 num = swf_GetU8(tag) & 15; if(gradient) { gradient->num = num; gradient->rgba = (RGBA*)rfx_calloc(sizeof(RGBA)*gradient->num); gradient->ratios = (U8*)rfx_calloc(sizeof(gradient->ratios[0])*gradient->num); } for(t=0;tratios[t] = ratio; gradient->rgba[t] = color; } } } void swf_SetGradient(TAG * tag, GRADIENT * gradient, char alpha) { int t; if(!tag) { memset(gradient, 0, sizeof(GRADIENT)); return; } swf_SetU8(tag, gradient->num); for(t=0; t<8 && tnum; t++) { swf_SetU8(tag, gradient->ratios[t]); if(!alpha) swf_SetRGB(tag, &gradient->rgba[t]); else swf_SetRGBA(tag, &gradient->rgba[t]); } } void swf_FreeGradient(GRADIENT* gradient) { if(gradient->ratios) rfx_free(gradient->ratios); if(gradient->rgba) rfx_free(gradient->rgba); memset(gradient, 0, sizeof(GRADIENT)); } int swf_CountUBits(U32 v,int nbits) { int n = 32; U32 m = 0x80000000; if(v == 0x00000000) n = 0; else while (!(v&m)) { n--; m>>=1; } return (n>nbits)?n:nbits; } int swf_CountBits(U32 v,int nbits) { int n = 33; U32 m = 0x80000000; if (v&m) { if(v == 0xffffffff) n = 1; else while (v&m) { n--; m>>=1; } } else { if(v == 0x00000000) n = 0; else while (!(v&m)) { n--; m>>=1; } } return (n>nbits)?n:nbits; } int swf_GetRect(TAG * t,SRECT * r) { int nbits; SRECT dummy; if(!t) {r->xmin=r->xmax=r->ymin=r->ymax=0;return 0;} if (!r) r = &dummy; nbits = (int) swf_GetBits(t,5); r->xmin = swf_GetSBits(t,nbits); r->xmax = swf_GetSBits(t,nbits); r->ymin = swf_GetSBits(t,nbits); r->ymax = swf_GetSBits(t,nbits); return 0; } int reader_GetRect(reader_t*reader,SRECT * r) { int nbits; SRECT dummy; if (!r) r = &dummy; nbits = (int) reader_GetBits(reader,5); r->xmin = reader_GetSBits(reader,nbits); r->xmax = reader_GetSBits(reader,nbits); r->ymin = reader_GetSBits(reader,nbits); r->ymax = reader_GetSBits(reader,nbits); return 0; } int swf_SetRect(TAG * t,SRECT * r) { int nbits; nbits = swf_CountBits(r->xmin,0); nbits = swf_CountBits(r->xmax,nbits); nbits = swf_CountBits(r->ymin,nbits); nbits = swf_CountBits(r->ymax,nbits); if(nbits>=32) { #ifdef DEBUG_RFXSWF fprintf(stderr, "rfxswf: Warning: num_bits overflow in swf_SetRect\n"); #endif nbits=31; } swf_SetBits(t,nbits,5); swf_SetBits(t,r->xmin,nbits); swf_SetBits(t,r->xmax,nbits); swf_SetBits(t,r->ymin,nbits); swf_SetBits(t,r->ymax,nbits); return 0; } SRECT swf_ClipRect(SRECT border, SRECT r) { if(r.xmax > border.xmax) r.xmax = border.xmax; if(r.ymax > border.ymax) r.ymax = border.ymax; if(r.xmax < border.xmin) r.xmax = border.xmin; if(r.ymax < border.ymin) r.ymax = border.ymin; if(r.xmin > border.xmax) r.xmin = border.xmax; if(r.ymin > border.ymax) r.ymin = border.ymax; if(r.xmin < border.xmin) r.xmin = border.xmin; if(r.ymin < border.ymin) r.ymin = border.ymin; return r; } void swf_ExpandRect(SRECT*src, SPOINT add) { if((src->xmin | src->ymin | src->xmax | src->ymax)==0) { src->xmin = add.x; src->ymin = add.y; src->xmax = add.x; src->ymax = add.y; if((add.x|add.y) == 0) src->xmax++; //make sure the bbox is not NULL anymore return; } if(add.x < src->xmin) src->xmin = add.x; if(add.x > src->xmax) src->xmax = add.x; if(add.y < src->ymin) src->ymin = add.y; if(add.y > src->ymax) src->ymax = add.y; } void swf_ExpandRect2(SRECT*src, SRECT*add) { if((add->xmin | add->ymin | add->xmax | add->ymax)==0) return; if((src->xmin | src->ymin | src->xmax | src->ymax)==0) *src = *add; if(add->xmin < src->xmin) src->xmin = add->xmin; if(add->ymin < src->ymin) src->ymin = add->ymin; if(add->xmax > src->xmax) src->xmax = add->xmax; if(add->ymax > src->ymax) src->ymax = add->ymax; } void swf_ExpandRect3(SRECT*src, SPOINT center, int radius) { if((src->xmin | src->ymin | src->xmax | src->ymax)==0) { src->xmin = center.x-radius; src->ymin = center.y-radius; src->xmax = center.x+radius; src->ymax = center.y+radius; if((center.x|center.y|radius) == 0) src->xmax++; //make sure the bbox is not NULL anymore return; } if(center.x - radius < src->xmin) src->xmin = center.x - radius; if(center.x + radius > src->xmax) src->xmax = center.x + radius; if(center.y - radius < src->ymin) src->ymin = center.y - radius; if(center.y + radius > src->ymax) src->ymax = center.y + radius; } SPOINT swf_TurnPoint(SPOINT p, MATRIX* m) { SPOINT r; r.x = (int)(m->sx*(1/65536.0)*p.x + m->r1*(1/65536.0)*p.y + 0.5) + m->tx; r.y = (int)(m->r0*(1/65536.0)*p.x + m->sy*(1/65536.0)*p.y + 0.5) + m->ty; return r; } SRECT swf_TurnRect(SRECT r, MATRIX* m) { SRECT g; SPOINT p1,p2,p3,p4,pp1,pp2,pp3,pp4; if(!m) return r; p1.x = r.xmin;p1.y = r.ymin; p2.x = r.xmax;p2.y = r.ymin; p3.x = r.xmin;p3.y = r.ymax; p4.x = r.xmax;p4.y = r.ymax; pp1 = swf_TurnPoint(p1, m); pp2 = swf_TurnPoint(p2, m); pp3 = swf_TurnPoint(p3, m); pp4 = swf_TurnPoint(p4, m); g.xmin = g.xmax = pp1.x; g.ymin = g.ymax = pp1.y; swf_ExpandRect(&g, pp2); swf_ExpandRect(&g, pp3); swf_ExpandRect(&g, pp4); return g; } int swf_GetMatrix(TAG * t,MATRIX * m) { MATRIX dummy; int nbits; if (!m) m = &dummy; if (!t) { m->sx = m->sy = 0x10000; m->r0 = m->r1 = 0; m->tx = m->ty = 0; return -1; } swf_ResetReadBits(t); if (swf_GetBits(t,1)) { nbits = swf_GetBits(t,5); m->sx = swf_GetSBits(t,nbits); m->sy = swf_GetSBits(t,nbits); } else m->sx = m->sy = 0x10000; if (swf_GetBits(t,1)) { nbits = swf_GetBits(t,5); m->r0 = swf_GetSBits(t,nbits); m->r1 = swf_GetSBits(t,nbits); } else m->r0 = m->r1 = 0x0; nbits = swf_GetBits(t,5); m->tx = swf_GetSBits(t,nbits); m->ty = swf_GetSBits(t,nbits); return 0; } int swf_SetMatrix(TAG * t,MATRIX * m) { int nbits; MATRIX ma; if (!m) { m = &ma; ma.sx = ma.sy = 0x10000; ma.r0 = ma.r1 = 0; ma.tx = ma.ty = 0; } swf_ResetWriteBits(t); if ((m->sx==0x10000)&&(m->sy==0x10000)) swf_SetBits(t,0,1); else { swf_SetBits(t,1,1); nbits = swf_CountBits(m->sx,0); nbits = swf_CountBits(m->sy,nbits); if(nbits>=32) { /* TODO: happens on AMD64 systems for normal values? */ #ifdef DEBUG_RFXSWF fprintf(stderr,"rfxswf: Error: matrix values too large\n"); #endif nbits = 31; } swf_SetBits(t,nbits,5); swf_SetBits(t,m->sx,nbits); swf_SetBits(t,m->sy,nbits); } if ((!m->r0)&&(!m->r1)) swf_SetBits(t,0,1); else { swf_SetBits(t,1,1); nbits = swf_CountBits(m->r0,0); nbits = swf_CountBits(m->r1,nbits); if(nbits>=32) { #ifdef DEBUG_RFXSWF fprintf(stderr,"rfxswf: Error: matrix values too large\n"); #endif nbits = 31; } swf_SetBits(t,nbits,5); swf_SetBits(t,m->r0,nbits); swf_SetBits(t,m->r1,nbits); } nbits = swf_CountBits(m->tx,0); nbits = swf_CountBits(m->ty,nbits); if(nbits>=32) { #ifdef DEBUG_RFXSWF fprintf(stderr,"rfxswf: Error: matrix values too large\n"); #endif nbits = 31; } swf_SetBits(t,nbits,5); swf_SetBits(t,m->tx,nbits); swf_SetBits(t,m->ty,nbits); return 0; } int swf_GetCXForm(TAG * t,CXFORM * cx,U8 alpha) { CXFORM cxf; int hasadd; int hasmul; int nbits; if (!cx) cx = &cxf; cx->a0 = cx->r0 = cx->g0 = cx->b0 = 256; cx->a1 = cx->r1 = cx->g1 = cx->b1 = 0; if (!t) return 0; swf_ResetReadBits(t); hasadd = swf_GetBits(t,1); hasmul = swf_GetBits(t,1); nbits = swf_GetBits(t,4); if (hasmul) { cx->r0 = (S16)swf_GetSBits(t,nbits); cx->g0 = (S16)swf_GetSBits(t,nbits); cx->b0 = (S16)swf_GetSBits(t,nbits); if (alpha) cx->a0 = (S16)swf_GetSBits(t,nbits); } if (hasadd) { cx->r1 = (S16)swf_GetSBits(t,nbits); cx->g1 = (S16)swf_GetSBits(t,nbits); cx->b1 = (S16)swf_GetSBits(t,nbits); if (alpha) cx->a1 = (S16)swf_GetSBits(t,nbits); } return 0; } int swf_SetCXForm(TAG * t,CXFORM * cx,U8 alpha) { CXFORM cxf; int hasadd; int hasmul; int nbits; if (!cx) { cx = &cxf; cx->a0 = cx->r0 = cx->g0 = cx->b0 = 256; cx->a1 = cx->r1 = cx->g1 = cx->b1 = 0; } if (!alpha) { cx->a0 = 256; cx->a1 = 0; } nbits = 0; hasmul = (cx->a0!=256)||(cx->r0!=256)||(cx->g0!=256)||(cx->b0!=256); hasadd = cx->a1|cx->r1|cx->g1|cx->b1; if (hasmul) { if (alpha) nbits = swf_CountBits((S32)cx->a0,nbits); nbits = swf_CountBits((S32)cx->r0,nbits); nbits = swf_CountBits((S32)cx->g0,nbits); nbits = swf_CountBits((S32)cx->b0,nbits); } if (hasadd) { if (alpha) nbits = swf_CountBits((S32)cx->a1,nbits); nbits = swf_CountBits((S32)cx->r1,nbits); nbits = swf_CountBits((S32)cx->g1,nbits); nbits = swf_CountBits((S32)cx->b1,nbits); } swf_ResetWriteBits(t); swf_SetBits(t,hasadd?1:0,1); swf_SetBits(t,hasmul?1:0,1); swf_SetBits(t,nbits,4); if (hasmul) { swf_SetBits(t,cx->r0,nbits); swf_SetBits(t,cx->g0,nbits); swf_SetBits(t,cx->b0,nbits); if (alpha) swf_SetBits(t,cx->a0,nbits); } if (hasadd) { swf_SetBits(t,cx->r1,nbits); swf_SetBits(t,cx->g1,nbits); swf_SetBits(t,cx->b1,nbits); if (alpha) swf_SetBits(t,cx->a1,nbits); } return 0; } //int swf_GetPoint(TAG * t,SPOINT * p) { return 0; } //int swf_SetPoint(TAG * t,SPOINT * p) { return 0; } void swf_SetPassword(TAG * t, const char * password) { #ifdef HAVE_MD5 /* WARNING: crypt_md5 is not reentrant */ char salt[3]; char* md5string; #if defined(HAVE_LRAND48) && defined(HAVE_SRAND48) && defined(HAVE_TIME_H) && defined(HAVE_TIME) salt[0] = "abcdefghijklmnopqrstuvwxyz0123456789"[lrand48()%36]; salt[1] = "abcdefghijklmnopqrstuvwxyz0123456789"[lrand48()%36]; #else salt[0] = 'l'; salt[1] = '8'; fprintf(stderr, "rfxswf: Warning- no usable random generator found\n"); fprintf(stderr, "Your password will be vulnerable to dictionary attacks\n"); #endif salt[2] = 0; md5string = crypt_md5(password, salt); swf_SetU16(t,0); swf_SetString(t, md5string); #else fprintf(stderr, "Error: No MD5 compiled in"); #endif } void swf_SetString(TAG*t, const char* s) { if(!s) { swf_SetU8(t, 0); } else { swf_SetBlock(t,(U8*)s,strlen(s)+1); } } int swf_VerifyPassword(TAG * t, const char * password) { #ifdef HAVE_MD5 char*md5string1, *md5string2; char*x; char*salt; int n; if(t->len >= 5 && t->pos==0 && t->data[0] == 0 && t->data[1] == 0) { swf_GetU16(t); } else { printf("%d %d %d %d\n", t->len, t->pos, t->data[0], t->data[1]); } md5string1 = swf_GetString(t); if(strncmp(md5string1, "$1$",3 )) { fprintf(stderr, "rfxswf: no salt in pw string\n"); return 0; } x = strchr(md5string1+3, '$'); if(!x) { fprintf(stderr, "rfxswf: invalid salt format in pw string\n"); return 0; } n = x-(md5string1+3); salt = (char*)rfx_alloc(n+1); memcpy(salt, md5string1+3, n); salt[n] = 0; md5string2 = crypt_md5(password, salt); rfx_free(salt); if(strcmp(md5string1, md5string2) != 0) return 0; return 1; #else fprintf(stderr, "Error: No MD5 compiled in"); return 1; #endif } // Tag List Manipulating Functions TAG * swf_InsertTag(TAG * after,U16 id) { TAG * t; t = (TAG *)rfx_calloc(sizeof(TAG)); t->id = id; if (after) { t->prev = after; t->next = after->next; after->next = t; if (t->next) t->next->prev = t; } return t; } TAG * swf_InsertTagBefore(SWF* swf, TAG * before,U16 id) { TAG * t; t = (TAG *)rfx_calloc(sizeof(TAG)); t->id = id; if (before) { t->next = before; t->prev = before->prev; before->prev = t; if (t->prev) t->prev->next = t; } if(swf && swf->firstTag == before) { swf->firstTag = t; } return t; } void swf_ClearTag(TAG * t) { if (t->data) rfx_free(t->data); t->data = 0; t->pos = 0; t->len = 0; t->readBit = 0; t->writeBit = 0; t->memsize = 0; } void swf_ResetTag(TAG*tag, U16 id) { tag->len = tag->pos = tag->readBit = tag->writeBit = 0; tag->id = id; } TAG* swf_CopyTag(TAG*tag, TAG*to_copy) { tag = swf_InsertTag(tag, to_copy->id); swf_SetBlock(tag, to_copy->data, to_copy->len); return tag; } TAG* swf_DeleteTag(SWF*swf, TAG * t) { TAG*next = t->next; if (swf && swf->firstTag==t) swf->firstTag = t->next; if (t->prev) t->prev->next = t->next; if (t->next) t->next->prev = t->prev; if (t->data) rfx_free(t->data); rfx_free(t); return next; } TAG * swf_ReadTag(reader_t*reader, TAG * prev) { TAG * t; U16 raw; U32 len; int id; if (reader->read(reader, &raw, 2) !=2 ) return NULL; raw = LE_16_TO_NATIVE(raw); len = raw&0x3f; id = raw>>6; if (len==0x3f) { len = reader_readU32(reader); } if (id==ST_DEFINESPRITE) len = 2*sizeof(U16); // Sprite handling fix: Flatten sprite tree t = (TAG *)rfx_calloc(sizeof(TAG)); t->len = len; t->id = id; if (t->len) { t->data = (U8*)rfx_alloc(t->len); t->memsize = t->len; if (reader->read(reader, t->data, t->len) != t->len) { #ifdef DEBUG_RFXSWF fprintf(stderr, "rfxswf: Warning: Short read (tagid %d). File truncated?\n", t->id); #endif free(t->data);t->data=0; free(t); return NULL; } } if (prev) { t->prev = prev; prev->next = t; } return t; } int swf_DefineSprite_GetRealSize(TAG * t); int swf_WriteTag2(writer_t*writer, TAG * t) // returns tag length in bytes (incl. Header), -1 = Error // writer = 0 -> no output { U16 raw[3]; U32 len; int short_tag; if (!t) return -1; len = (t->id==ST_DEFINESPRITE)?swf_DefineSprite_GetRealSize(t):t->len; short_tag = len<0x3f&& (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&& t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3); if (writer) { #ifdef MEASURE int oldpos = writer->pos; #endif if (short_tag) { raw[0] = LE_16_TO_NATIVE(len|((t->id&0x3ff)<<6)); if (writer->write(writer,raw,2)!=2) { #ifdef DEBUG_RFXSWF fprintf(stderr,"WriteTag() failed: Short Header.\n"); #endif return -1; } } else { raw[0] = LE_16_TO_NATIVE((t->id<<6)|0x3f); if (writer->write(writer,raw,2)!=2) { #ifdef DEBUG_RFXSWF fprintf(stderr,"WriteTag() failed: Long Header (1).\n"); #endif return -1; } writer_writeU32(writer, len); } if (t->data) { if (writer->write(writer,t->data,t->len)!=t->len) { #ifdef DEBUG_RFXSWF fprintf(stderr,"WriteTag() failed: Data.\n"); #endif return -1; } } #ifdef DEBUG_RFXSWF else if (t->len) fprintf(stderr,"WriteTag(): Tag Data Error, id=%i\n",t->id); #endif #ifdef MEASURE writer->flush(writer); printf("TAG %s costs %d bytes\n", swf_TagGetName(t), writer->pos-oldpos); #endif } return t->len+(short_tag?2:6); } int swf_WriteTag(int handle, TAG * t) { writer_t writer; int len = 0; if(handle<0) return swf_WriteTag2(0, t); writer_init_filewriter(&writer, handle); len = swf_WriteTag2(&writer, t); writer.finish(&writer); return len; } int swf_DefineSprite_GetRealSize(TAG * t) // Sprite Handling: Helper function to pack DefineSprite-Tag { U32 len = t->len; if(len>4) { // folded sprite return t->len; } do { t = swf_NextTag(t); if (t && t->id!=ST_DEFINESPRITE) len += swf_WriteTag(-1, t); else t = NULL; } while (t&&(t->id!=ST_END)); return len; } void swf_UnFoldSprite(TAG * t) { U16 id,tmp; U32 len; TAG*next = t; U16 spriteid,spriteframes; int level; if(t->id!=ST_DEFINESPRITE) return; if(t->len<=4) // not folded return; swf_SetTagPos(t,0); spriteid = swf_GetU16(t); //id spriteframes = swf_GetU16(t); //frames level = 1; while(1) { TAG*it = 0; tmp = swf_GetU16(t); len = tmp&0x3f; id = tmp>>6; if(id == ST_END) level--; if(id == ST_DEFINESPRITE && len<=4) level++; if (len==0x3f) len = swf_GetU32(t); it = swf_InsertTag(next, id); next = it; it->len = len; it->id = id; if (it->len) { it->data = (U8*)rfx_alloc(it->len); it->memsize = it->len; swf_GetBlock(t, it->data, it->len); } if(!level) break; } rfx_free(t->data); t->data = 0; t->memsize = t->len = t->pos = 0; swf_SetU16(t, spriteid); swf_SetU16(t, spriteframes); } void swf_FoldSprite(TAG * t) { TAG*sprtag=t,*tmp; U16 id,frames; int level; if(t->id!=ST_DEFINESPRITE) return; if(!t->len) { #ifdef DEBUG_RFXSWF fprintf(stderr, "Error: Sprite has no ID!"); #endif return; } if(t->len>4) { /* sprite is already folded */ return; } t->pos = 0; id = swf_GetU16(t); rfx_free(t->data); t->len = t->pos = t->memsize = 0; t->data = 0; frames = 0; t = swf_NextTag(sprtag); level = 1; do { if(t->id==ST_SHOWFRAME) frames++; if(t->id == ST_DEFINESPRITE && t->len<=4) level++; if(t->id == ST_END) level--; t = swf_NextTag(t); } while(t && level); if(level) fprintf(stderr, "rfxswf error: sprite doesn't end(1)\n"); swf_SetU16(sprtag, id); swf_SetU16(sprtag, frames); t = swf_NextTag(sprtag); level = 1; do { if(t->len<0x3f&& (t->id!=ST_DEFINEBITSLOSSLESS&&t->id!=ST_DEFINEBITSLOSSLESS2&&t->id!=ST_SOUNDSTREAMBLOCK&& t->id!=ST_DEFINEBITSJPEG&&t->id!=ST_DEFINEBITSJPEG2&&t->id!=ST_DEFINEBITSJPEG3) ) { swf_SetU16(sprtag,t->len|(t->id<<6)); } else { swf_SetU16(sprtag,0x3f|(t->id<<6)); swf_SetU32(sprtag,t->len); } if(t->len) swf_SetBlock(sprtag,t->data, t->len); tmp = t; if(t->id == ST_DEFINESPRITE && t->len<=4) level++; if(t->id == ST_END) level--; t = swf_NextTag(t); swf_DeleteTag(0, tmp); } while (t && level); if(level) fprintf(stderr, "rfxswf error: sprite doesn't end(2)\n"); // sprtag->next = t; // t->prev = sprtag; } int swf_IsFolded(TAG * t) { return (t->id == ST_DEFINESPRITE && t->len>4); } void swf_FoldAll(SWF*swf) { TAG*tag = swf->firstTag; //swf_DumpSWF(stdout, swf); while(tag) { if(tag->id == ST_DEFINESPRITE) { swf_FoldSprite(tag); //swf_DumpSWF(stdout, swf); } tag = swf_NextTag(tag); } } void swf_UnFoldAll(SWF*swf) { TAG*tag = swf->firstTag; while(tag) { if(tag->id == ST_DEFINESPRITE) swf_UnFoldSprite(tag); tag = tag->next; } } void swf_OptimizeTagOrder(SWF*swf) { TAG*tag,*next; TAG*level0; int level; int changes; swf_UnFoldAll(swf); /* at the moment, we don't actually do optimizing, only fixing of non-spec-conformant things like sprite tags */ do { changes = 0; level = 0; level0 = 0; tag = swf->firstTag; while(tag) { next = tag->next; if(tag->id == ST_DEFINESPRITE) { if(tag->len>4) { /* ??? all sprites are supposed to be unfolded */ fprintf(stderr, "librfxswf error - internal error in OptimizeTagOrder/UnfoldAll\n"); } level++; if(level==1) { level0 = tag; tag = next; continue; } } if(level>=1) { /* move non-sprite tags out of sprite */ if(!swf_isAllowedSpriteTag(tag) || level>=2) { /* remove tag from current position */ tag->prev->next = tag->next; if(tag->next) tag->next->prev = tag->prev; /* insert before tag level0 */ tag->next = level0; tag->prev = level0->prev; level0->prev = tag; if(tag->prev) tag->prev->next = tag; else swf->firstTag = tag; changes = 1; } } if(tag->id == ST_END) { level--; } tag = next; } } while(changes); } // Movie Functions int swf_ReadSWF2(reader_t*reader, SWF * swf) // Reads SWF to memory (malloc'ed), returns length or <0 if fails { if (!swf) return -1; memset(swf,0x00,sizeof(SWF)); { char b[32]; // read Header int len; TAG * t; TAG t1; reader_t zreader; if ((len = reader->read(reader ,b,8))<8) return -1; if (b[0]!='F' && b[0]!='C') return -1; if (b[1]!='W') return -1; if (b[2]!='S') return -1; swf->fileVersion = b[3]; swf->compressed = (b[0]=='C')?1:0; swf->fileSize = GET32(&b[4]); if(swf->compressed) { reader_init_zlibinflate(&zreader, reader); reader = &zreader; } swf->compressed = 0; // derive from version number from now on reader_GetRect(reader, &swf->movieSize); reader->read(reader, &swf->frameRate, 2); swf->frameRate = LE_16_TO_NATIVE(swf->frameRate); reader->read(reader, &swf->frameCount, 2); swf->frameCount = LE_16_TO_NATIVE(swf->frameCount); /* read tags and connect to list */ t1.next = 0; t = &t1; while (t) { t = swf_ReadTag(reader,t); if(t && t->id == ST_FILEATTRIBUTES) { swf->fileAttributes = swf_GetU32(t); swf_ResetReadBits(t); } } swf->firstTag = t1.next; if(t1.next) t1.next->prev = NULL; } return reader->pos; } SWF* swf_OpenSWF(char*filename) { int fi = open(filename, O_RDONLY|O_BINARY); if(fi<0) { fprintf(stderr, "Failed to open %s\n", filename); return 0; } SWF* swf = rfx_alloc(sizeof(SWF)); swf_ReadSWF(fi, swf); close(fi); return swf; } int swf_ReadSWF(int handle, SWF * swf) { reader_t reader; reader_init_filereader(&reader, handle); return swf_ReadSWF2(&reader, swf); } void swf_ReadABCfile(char*filename, SWF*swf) { memset(swf, 0, sizeof(SWF)); swf->fileVersion=9; swf->fileAttributes=FILEATTRIBUTE_AS3; //as3 TAG*tag = swf->firstTag = swf_InsertTag(0, ST_RAWABC); memfile_t*file = memfile_open(filename); swf_SetBlock(tag, file->data, file->len); memfile_close(file); } int no_extra_tags = 0; int WriteExtraTags(SWF*swf, writer_t*writer) { TAG*t = swf->firstTag; TAG* has_fileattributes=0; int has_scenedescription=0; int has_version_8_action=0; int has_version_9_action=0; int len = 0; while(t) { if(t->id == ST_FILEATTRIBUTES) has_fileattributes = t; if(t->id == ST_SCENEDESCRIPTION) has_scenedescription = 1; if(t->id == ST_DOABC) has_version_9_action=1; /* FIXME: this doesn't yet find actionscript in buttons */ if(t->id == ST_DOACTION || t->id == ST_DOINITACTION) has_version_8_action=1; if(t->id == ST_PLACEOBJECT2 && t->len && (t->data[0]&0x80)) has_version_8_action=1; t = t->next; } if(has_version_8_action && has_version_9_action) { fprintf(stderr, "Warning: File contains both flash 8 and flash 9 actionscript\n"); } if(swf->fileVersion >= 9) { if(!has_fileattributes) { U32 flags = swf->fileAttributes|FILEATTRIBUTE_AS3; // 16 = has symbolclass tag | 8 = actionscript3 | 1 = usenetwork if(has_version_8_action && !has_version_9_action) flags &= ~FILEATTRIBUTE_AS3; TAG*fileattrib = swf_InsertTag(0, ST_FILEATTRIBUTES); swf_SetU32(fileattrib, flags); if(writer) { if(swf_WriteTag2(writer, fileattrib)<0) return -1; } else { len += swf_WriteTag(-1,fileattrib); } swf_DeleteTag(0, fileattrib); } else { if(swf->fileAttributes) { /* if we're writing a file out again where we might have possible modified the fileattributes in the header, adjust the tag data */ TAG*tt = swf_CopyTag(0,has_fileattributes); U32 flags = swf_GetU32(tt) | swf->fileAttributes; swf_ResetTag(tt, tt->id); swf_SetU32(tt, flags); if(swf_WriteTag2(writer, has_fileattributes)<0) return -1; swf_DeleteTag(0, tt); } else { if(swf_WriteTag2(writer, has_fileattributes)<0) return -1; } } if(0 && !has_scenedescription) { TAG*scene = swf_InsertTag(0, ST_SCENEDESCRIPTION); swf_SetU16(scene, 1); swf_SetString(scene, "Scene 1"); swf_SetU8(scene, 0); if(writer) { if(swf_WriteTag2(writer, scene)<0) return -1; } else { len += swf_WriteTag(-1,scene); } swf_DeleteTag(0, scene); } } return len; } int swf_WriteSWF2(writer_t*writer, SWF * swf) // Writes SWF to file, returns length or <0 if fails { U32 len; TAG * t; int frameCount=0; writer_t zwriter; int fileSize = 0; int inSprite = 0; int ret; writer_t*original_writer = writer; int writer_lastpos = 0; if (!swf) return -1; if (!writer) return -1; // the caller should provide a nullwriter, not 0, for querying SWF size if(original_writer) writer_lastpos = original_writer->pos; // Count Frames + File Size len = 0; t = swf->firstTag; frameCount = 0; if(swf->firstTag && !no_extra_tags) { len += WriteExtraTags(swf, 0); } while(t) { len += swf_WriteTag(-1,t); if(t->id == ST_DEFINESPRITE && !swf_IsFolded(t)) inSprite++; else if(t->id == ST_END && inSprite) inSprite--; else if(t->id == ST_END && !inSprite) { if(t->prev && t->prev->id!=ST_SHOWFRAME) frameCount++; } else if(t->id == ST_SHOWFRAME && !inSprite) frameCount++; t = swf_NextTag(t); } { TAG t1; char b[64],b4[4]; U32 l; memset(&t1,0x00,sizeof(TAG)); t1.data = (U8*)b; t1.memsize = 64; { // measure header file size TAG t2; char b2[64]; memset(&t2,0x00,sizeof(TAG)); t2.data = (U8*)b2; t2.memsize = 64; swf_SetRect(&t2, &swf->movieSize); swf_SetU16(&t2, swf->frameRate); swf_SetU16(&t2, swf->frameCount); l = swf_GetTagLen(&t2)+8; } if(swf->compressed == 8) { l -= 8; } fileSize = l+len; if(len) {// don't touch headers without tags swf->fileSize = fileSize; swf->frameCount = frameCount; } if(swf->compressed != 8) { /* compressed flag set to 8 means "skip first 8 header bytes". This is necessary if the caller wants to create compressed SWFs himself . It also means that we don't initialize our own zlib writer, but assume the caller provided one. */ if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6)) { char*id = "CWS"; writer->write(writer, id, 3); } else { char*id = "FWS"; writer->write(writer, id, 3); } writer->write(writer, &swf->fileVersion, 1); PUT32(b4, swf->fileSize); writer->write(writer, b4, 4); if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6)) { writer_init_zlibdeflate(&zwriter, writer); writer = &zwriter; } } swf_SetRect(&t1,&swf->movieSize); swf_SetU16(&t1,swf->frameRate); swf_SetU16(&t1,swf->frameCount); ret = writer->write(writer,b,swf_GetTagLen(&t1)); if (ret!=swf_GetTagLen(&t1)) { #ifdef DEBUG_RFXSWF fprintf(stderr, "ret:%d\n",ret); perror("write:"); fprintf(stderr,"WriteSWF() failed: Header.\n"); #endif return -1; } if(swf->firstTag && !no_extra_tags) { WriteExtraTags(swf, writer); } t = swf->firstTag; while (t) { if(no_extra_tags || t->id != ST_FILEATTRIBUTES) { if(swf_WriteTag2(writer, t)<0) return -1; } t = t->next; } if(swf->compressed==1 || (swf->compressed==0 && swf->fileVersion>=6) || swf->compressed==8) { if(swf->compressed != 8) { zwriter.finish(&zwriter); return original_writer->pos - writer_lastpos; } return (int)fileSize; } else { return (int)fileSize; } } } int swf_SaveSWF(SWF * swf, char*filename) { int fi = open(filename, O_BINARY|O_RDWR|O_TRUNC|O_CREAT, 0777); if(fi<0) { perror(filename); return 0; } if(swf_WriteSWF(fi, swf)<0) { fprintf(stderr, "Unable to write output file: %s\n", filename); return 0; } close(fi); return 1; } int swf_WriteSWF(int handle, SWF * swf) // Writes SWF to file, returns length or <0 if fails { writer_t writer; int len = 0; if(handle<0) { writer_init_nullwriter(&writer); len = swf_WriteSWF2(&writer, swf); return len; } writer_init_filewriter(&writer, handle); len = swf_WriteSWF2(&writer, swf); writer.finish(&writer); return len; } int swf_WriteHeader2(writer_t*writer,SWF * swf) { SWF myswf; memcpy(&myswf,swf,sizeof(SWF)); myswf.firstTag = 0; return swf_WriteSWF2(writer, &myswf); } int swf_WriteHeader(int handle,SWF * swf) { SWF myswf; memcpy(&myswf,swf,sizeof(SWF)); myswf.firstTag = 0; return swf_WriteSWF(handle, &myswf); } int swf_WriteCGI(SWF * swf) { int len; char s[1024]; len = swf_WriteSWF(-1,swf); if (len<0) return -1; sprintf(s,"Content-type: application/x-shockwave-flash\n" "Accept-Ranges: bytes\n" "Content-Length: %d\n" "Expires: Thu, 13 Apr 2000 23:59:59 GMT\n" "\n",len); write(fileno(stdout),s,strlen(s)); return swf_WriteSWF(fileno(stdout),swf); } SWF* swf_CopySWF(SWF*swf) { SWF*nswf = (SWF*)rfx_alloc(sizeof(SWF)); TAG*tag, *ntag; memcpy(nswf, swf, sizeof(SWF)); nswf->firstTag = 0; tag = swf->firstTag; ntag = 0; while(tag) { ntag = swf_CopyTag(ntag, tag); if(!nswf->firstTag) nswf->firstTag = ntag; tag = tag->next; } return nswf; } void swf_FreeTags(SWF * swf) // Frees all malloc'ed memory for tags { TAG * t = swf->firstTag; while (t) { TAG * tnew = t->next; if (t->data) rfx_free(t->data); rfx_free(t); t = tnew; } swf->firstTag = 0; } // include advanced functions //#include "modules/swfdump.c" //#include "modules/swfshape.c" //#include "modules/swftext.c" //#include "modules/swffont.c" //#include "modules/swfobject.c" //#include "modules/swfbutton.c" //#include "modules/swftools.c" //#include "modules/swfcgi.c" //#include "modules/swfbits.c" //#include "modules/swfaction.c" //#include "modules/swfabc.c" //#include "modules/swfsound.c" //#include "modules/swfdraw.c" //#include "modules/swfrender.c" //#include "modules/swffilter.c" swftools_0.9.2+git20130725.orig/lib/os.c0000755000175000017500000001705512216332640016671 0ustar gawaingawain/* os.c operating system dependent functions Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #include "os.h" #include #include #include #ifdef WIN32 #include #else #include #include #endif #ifdef HAVE_SYS_STAT_H #include #else #undef HAVE_STAT #endif #ifdef HAVE_SYS_MMAN_H #include #else #undef HAVE_MMAP #endif #ifdef HAVE_SYS_TYPES_H #include #else #undef HAVE_STAT #endif #if defined(CYGWIN) char path_seperator = '/'; #elif defined(WIN32) char path_seperator = '\\'; #else char path_seperator = '/'; #endif #ifdef WIN32 char* getRegistryEntry(char*path) { int res = 0; HKEY key; long rc; long size = 0; DWORD type; char*buf; rc = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_ALL_ACCESS, &key); if(rc) rc = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_READ, &key); if(rc) rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &key); if(rc) rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, path, 0, KEY_READ, &key); if (rc) { fprintf(stderr, "RegOpenKeyEx failed\n"); return 0; } rc = RegQueryValueEx(key, NULL, 0, 0, 0, (LPDWORD)&size) ; if(rc) { fprintf(stderr, "RegQueryValueEx(1) failed: %d\n", rc); return 0; } buf = (char*)malloc(size+1); rc = RegQueryValueEx(key, NULL, 0, &type, (BYTE*)buf, (LPDWORD)&size); if(rc) { fprintf(stderr, "RegQueryValueEx(2) failed: %d\n", rc); return 0; } if(type == REG_SZ || type == REG_EXPAND_SZ) { while(size && buf[size-1] == '\0') --size; buf[size] = 0; /* TODO: convert */ return buf; } else if(type == REG_BINARY) { return buf; } return 0; } int setRegistryEntry(char*key,char*value) { HKEY hkey1; HKEY hkey2; int ret1 = 0, ret2=0; ret1 = RegCreateKey(HKEY_CURRENT_USER, key, &hkey1); ret2 = RegCreateKey(HKEY_LOCAL_MACHINE, key, &hkey2); if(ret1 && ret2) { fprintf(stderr, "registry: CreateKey %s failed\n", key); return 0; } if(!ret1) ret1 = RegSetValue(hkey1, NULL, REG_SZ, value, strlen(value)+1); if(!ret2) ret2 = RegSetValue(hkey2, NULL, REG_SZ, value, strlen(value)+1); if(ret1 && ret2) { fprintf(stderr, "registry: SetValue %s failed\n", key); return 0; } return 1; } #endif //HINSTANCE me = GetModuleHandle(NULL); char* getInstallationPath() { #if defined(WIN32) char* path = getRegistryEntry("Software\\quiss.org\\swftools\\InstallPath"); if(path) return path; else return 0; #elif defined(CYGWIN) return SWFTOOLS_DATADIR; #else return SWFTOOLS_DATADIR; #endif } char* concatPaths(const char*base, const char*add) { int l1 = strlen(base); int l2 = strlen(add); int pos = 0; char*n = 0; while(l1 && base[l1-1] == path_seperator) l1--; while(pos < l2 && add[pos] == path_seperator) pos++; n = (char*)malloc(l1 + (l2-pos) + 2); memcpy(n,base,l1); n[l1]=path_seperator; strcpy(&n[l1+1],&add[pos]); return n; } char* stripFilename(const char*filename, const char*newext) { char*last1 = strrchr(filename, '/'); char*last2 = strrchr(filename, '\\'); const char*pos = filename; char*name; char*dot; if(last1>pos) pos = last1 + 1; if(last2>pos) pos = last2 + 1; name = (char*)malloc(strlen(pos)+2+(newext?strlen(newext):3)); strcpy(name, pos); dot = strrchr(name, '.'); if(dot) { *dot = 0; } if(newext) strcat(name, newext); return name; } static char* getTempDir() { #ifdef WIN32 char*dir = getenv("TMP"); if(!dir) dir = getenv("TEMP"); if(!dir) dir = getenv("tmp"); if(!dir) dir = getenv("temp"); if(!dir) dir = "C:\\"; #else char*dir = getenv("SWFTOOLS_TMP"); if(!dir) dir = "/tmp/"; #endif return dir; } char* mktempname(char*ptr, const char*ext) { static char tmpbuf[160]; char*dir = getTempDir(); int l = strlen(dir); char*sep = ""; if(!ptr) ptr = tmpbuf; if(l && dir[l-1]!='/' && dir[l-1]!='\\') { #ifdef WIN32 sep = "\\"; #else sep = "/"; #endif } #ifdef HAVE_LRAND48 unsigned int r1 = (unsigned int)lrand48(); unsigned int r2 = (unsigned int)lrand48(); #elif HAVE_RAND unsigned int r1 = rand(); unsigned int r2 = rand(); #else static int count = 1; unsigned int r1 = time(0); unsigned int r2 = (unsigned int)tmpbuf<<8^count; count ++; #endif if(ext) { sprintf(ptr, "%s%s%04x%04x.%s",dir,sep,r1,r2,ext); } else { sprintf(ptr, "%s%s%04x%04x",dir,sep,r1,r2); } return ptr; } memfile_t* memfile_open(const char*path) { memfile_t*file = malloc(sizeof(memfile_t)); #if defined(HAVE_MMAP) && defined(HAVE_STAT) int fi = open(path, O_RDONLY); if(fi<0) { perror(path); free(file); return 0; } struct stat sb; if(fstat(fi, &sb)<0) { perror(path); return 0; } file->len = sb.st_size; file->data = mmap(0, sb.st_size, PROT_READ, MAP_PRIVATE, fi, 0); close(fi); #else FILE*fi = fopen(path, "rb"); if(!fi) { perror(path); free(file); return 0; } fseek(fi, 0, SEEK_END); file->len = ftell(fi); fseek(fi, 0, SEEK_SET); file->data = malloc(file->len); if(!file->data) { fprintf(stderr, "Out of memory while allocating memory for file %s\n", path); free(file); return 0; } fread(file->data, file->len, 1, fi); fclose(fi); #endif return file; } void memfile_close(memfile_t*file) { #if defined(HAVE_MMAP) && defined(HAVE_STAT) munmap(file->data, file->len); #else free(file->data); #endif file->data = 0; file->len = 0; free(file); } void move_file(const char*from, const char*to) { int result = rename(from, to); if(result==0) return; //done! /* if we can't rename, for some reason, copy the file manually */ FILE*fi = fopen(from, "rb"); if(!fi) { perror(from); return; } FILE*fo = fopen(to, "wb"); if(!fo) { perror(to); return; } char buffer[16384]; while(1) { int bytes = fread(buffer, 1, 16384, fi); if(bytes<=0) break; fwrite(buffer, bytes, 1, fo); } fclose(fo); fclose(fi); unlink(from); } char file_exists(const char*filename) { #ifdef HAVE_STAT struct stat sb; return stat(filename, &sb) >= 0; #else int fi = open(filename, O_RDONLY); if(fi>=0) { close(fi); return 1; } return 0; #endif } int file_size(const char*filename) { #ifdef HAVE_STAT struct stat sb; if(stat(filename, &sb) >= 0) { return sb.st_size; } #endif FILE*fi = fopen(filename, "rb"); if(fi>=0) { fseek(fi, 0, SEEK_END); int size = ftell(fi); fclose(fi); return size; } return 0; } int open_file_or_stdin(const char*filename, int attr) { int f; if(strcmp(filename, "-")) { f = open(filename, attr); } else { f = 0; //stdin } return f; } swftools_0.9.2+git20130725.orig/lib/devices/0002755000175000017500000000000012216332657017525 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/devices/record.c0000644000175000017500000007135512216332640021150 0ustar gawaingawain/* gfxdevice_record.cc Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #include #include #include #include "../../config.h" #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_IO_H #include #endif #include #include #include #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../types.h" #include "../bitio.h" #include "../log.h" #include "../os.h" #include "../png.h" #ifdef HAVE_FASTLZ #include "../fastlz.h" #endif #include "record.h" //#define STATS //#define COMPRESS_IMAGES //#define FILTER_IMAGES typedef struct _state { char*last_string[16]; gfxcolor_t last_color[16]; gfxmatrix_t last_matrix[16]; #ifdef STATS int size_matrices; int size_positions; int size_images; int size_lines; int size_colors; int size_fonts; int size_chars; #endif } state_t; typedef struct _internal { gfxfontlist_t* fontlist; state_t state; writer_t w; int cliplevel; char use_tempfile; char*filename; } internal_t; typedef struct _internal_result { char use_tempfile; char*filename; void*data; int length; } internal_result_t; #define OP_END 0x00 #define OP_SETPARAM 0x01 #define OP_STROKE 0x02 #define OP_STARTCLIP 0x03 #define OP_ENDCLIP 0x04 #define OP_FILL 0x05 #define OP_FILLBITMAP 0x06 #define OP_FILLGRADIENT 0x07 #define OP_ADDFONT 0x08 #define OP_DRAWCHAR 0x09 #define OP_DRAWLINK 0x0a #define OP_STARTPAGE 0x0b #define OP_ENDPAGE 0x0c #define OP_FINISH 0x0d #define FLAG_SAME_AS_LAST 0x10 #define FLAG_ZERO_FONT 0x20 #define LINE_MOVETO 0x0e #define LINE_LINETO 0x0f #define LINE_SPLINETO 0x10 /* ----------------- reading/writing of low level primitives -------------- */ static void dumpLine(writer_t*w, state_t*state, gfxline_t*line) { while(line) { if(line->type == gfx_moveTo) { writer_writeU8(w, LINE_MOVETO); writer_writeDouble(w, line->x); writer_writeDouble(w, line->y); #ifdef STATS state->size_lines += 1+8+8; #endif } else if(line->type == gfx_lineTo) { writer_writeU8(w, LINE_LINETO); writer_writeDouble(w, line->x); writer_writeDouble(w, line->y); #ifdef STATS state->size_lines += 1+8+8; #endif } else if(line->type == gfx_splineTo) { writer_writeU8(w, LINE_SPLINETO); writer_writeDouble(w, line->x); writer_writeDouble(w, line->y); writer_writeDouble(w, line->sx); writer_writeDouble(w, line->sy); #ifdef STATS state->size_lines += 1+8+8+8+8; #endif } line = line->next; } writer_writeU8(w, OP_END); #ifdef STATS state->size_lines += 1; #endif } static gfxline_t* readLine(reader_t*r, state_t*s) { gfxline_t*start = 0, *pos = 0; while(1) { unsigned char op = reader_readU8(r); if(op == OP_END) break; gfxline_t*line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)); if(!start) { start = pos = line; } else { pos->next = line; pos = line; } if(op == LINE_MOVETO) { line->type = gfx_moveTo; line->x = reader_readDouble(r); line->y = reader_readDouble(r); } else if(op == LINE_LINETO) { line->type = gfx_lineTo; line->x = reader_readDouble(r); line->y = reader_readDouble(r); } else if(op == LINE_SPLINETO) { line->type = gfx_splineTo; line->x = reader_readDouble(r); line->y = reader_readDouble(r); line->sx = reader_readDouble(r); line->sy = reader_readDouble(r); } } return start; } static void dumpImage(writer_t*w, state_t*state, gfximage_t*img) { int oldpos = w->pos; writer_writeU16(w, img->width); writer_writeU16(w, img->height); #ifdef COMPRESS_IMAGES //35.3% images (2027305 bytes) (with filter, Z_BEST_COMPRESSION) //39.9% images (2458904 bytes) (with filter, Z_BEST_SPEED) //45.2% images (3055340 bytes) (without filter) //45.9% images (3149247 bytes) (without filter, 5) //48.0% images (3480495 bytes) (with filter, fastlz) //48.0% images (3488650 bytes) (without filter, Z_BEST_SPEED) //55.3% images (4665889 bytes) (without filter, fastlz level 2) //55.6% images (4726334 bytes) (without filter, fastlz level 1) //83.0% images (18091804 bytes) (no compression) gfxcolor_t*image; #ifdef FILTER_IMAGES unsigned char*filter = malloc(img->height); int y; image = malloc(img->width*img->height*sizeof(gfxcolor_t)); for(y=0;yheight;y++) { filter[y] = png_apply_filter_32( (void*)&image[y*img->width], (void*)&img->data[y*img->width], img->width, y); } #else image = img->data; #endif int size = img->width*img->height; uLongf compressdata_size = compressBound(size*sizeof(gfxcolor_t)); void*compressdata = malloc(compressdata_size); #ifdef HAVE_FASTLZ compressdata_size = fastlz_compress_level(2, (void*)image, size*sizeof(gfxcolor_t), compressdata); #else compress2(compressdata, &compressdata_size, (void*)image, sizeof(gfxcolor_t)*size, Z_BEST_SPEED); #endif writer_writeU32(w, compressdata_size); #ifdef FILTER_IMAGES w->write(w, filter, img->height); free(filter); free(image); #endif w->write(w, compressdata, compressdata_size); free(compressdata); #else w->write(w, img->data, img->width*img->height*sizeof(gfxcolor_t)); #endif #ifdef STATS state->size_images += w->pos - oldpos; #endif } static gfximage_t readImage(reader_t*r, state_t*state) { gfximage_t img; img.width = reader_readU16(r); img.height = reader_readU16(r); uLongf size = img.width*img.height*sizeof(gfxcolor_t); img.data = malloc(size); #ifdef COMPRESS_IMAGES uLongf compressdata_size = reader_readU32(r); void*compressdata = malloc(compressdata_size); # ifdef FILTER_IMAGES unsigned char*filter = malloc(img.height); r->read(r, filter, img.height); # endif r->read(r, compressdata, compressdata_size); # ifdef HAVE_FASTLZ fastlz_decompress(compressdata, compressdata_size, (void*)img.data, size); # else uncompress((void*)img.data, &size, compressdata, compressdata_size); # endif free(compressdata); # ifdef FILTER_IMAGES int y; unsigned char*line = malloc(img.width*sizeof(gfxcolor_t)); for(y=0;yread(r, img.data, size); #endif return img; } static void dumpMatrix(writer_t*w, state_t*state, gfxmatrix_t*matrix) { writer_writeDouble(w, matrix->m00); writer_writeDouble(w, matrix->m01); writer_writeDouble(w, matrix->m10); writer_writeDouble(w, matrix->m11); writer_writeDouble(w, matrix->tx); writer_writeDouble(w, matrix->ty); #ifdef STATS state->size_matrices += 6*8; #endif } static gfxmatrix_t readMatrix(reader_t*r, state_t*state) { gfxmatrix_t matrix; matrix.m00 = reader_readDouble(r); matrix.m01 = reader_readDouble(r); matrix.m10 = reader_readDouble(r); matrix.m11 = reader_readDouble(r); matrix.tx = reader_readDouble(r); matrix.ty = reader_readDouble(r); return matrix; } static void dumpXY(writer_t*w, state_t*state, gfxmatrix_t*matrix) { writer_writeDouble(w, matrix->tx); writer_writeDouble(w, matrix->ty); #ifdef STATS state->size_positions += 2*8; #endif } static void readXY(reader_t*r, state_t*state, gfxmatrix_t*m) { m->tx = reader_readDouble(r); m->ty = reader_readDouble(r); } static void dumpColor(writer_t*w, state_t*state, gfxcolor_t*color) { writer_writeU8(w, color->r); writer_writeU8(w, color->g); writer_writeU8(w, color->b); writer_writeU8(w, color->a); #ifdef STATS state->size_colors += 4; #endif } static gfxcolor_t readColor(reader_t*r, state_t*state) { gfxcolor_t col; col.r = reader_readU8(r); col.g = reader_readU8(r); col.b = reader_readU8(r); col.a = reader_readU8(r); return col; } static void dumpGradient(writer_t*w, state_t*state, gfxgradient_t*gradient) { while(gradient) { writer_writeU8(w, 1); dumpColor(w, state, &gradient->color); writer_writeFloat(w, gradient->pos); gradient = gradient->next; } writer_writeU8(w, 0); } static gfxgradient_t* readGradient(reader_t*r, state_t*state) { gfxgradient_t*start = 0, *pos = 0; while(1) { U8 op = reader_readU8(r); if(!op) break; gfxgradient_t*g = (gfxgradient_t*)rfx_calloc(sizeof(gfxgradient_t)); if(!start) { start = pos = g; } else { pos->next = g; pos = g; } g->color = readColor(r, state); g->pos = reader_readFloat(r); } return start; } static void dumpCXForm(writer_t*w, state_t*state, gfxcxform_t*c) { if(!c) { writer_writeU8(w, 0); } else { writer_writeU8(w, 1); writer_writeFloat(w, c->rr); writer_writeFloat(w, c->rg); writer_writeFloat(w, c->rb); writer_writeFloat(w, c->ra); writer_writeFloat(w, c->gr); writer_writeFloat(w, c->gg); writer_writeFloat(w, c->gb); writer_writeFloat(w, c->ga); writer_writeFloat(w, c->br); writer_writeFloat(w, c->bg); writer_writeFloat(w, c->bb); writer_writeFloat(w, c->ba); writer_writeFloat(w, c->ar); writer_writeFloat(w, c->ag); writer_writeFloat(w, c->ab); writer_writeFloat(w, c->aa); } } static gfxcxform_t* readCXForm(reader_t*r, state_t*state) { U8 type = reader_readU8(r); if(!type) return 0; gfxcxform_t* c = (gfxcxform_t*)rfx_calloc(sizeof(gfxcxform_t)); c->rr = reader_readFloat(r); c->rg = reader_readFloat(r); c->rb = reader_readFloat(r); c->ra = reader_readFloat(r); c->gr = reader_readFloat(r); c->gg = reader_readFloat(r); c->gb = reader_readFloat(r); c->ga = reader_readFloat(r); c->br = reader_readFloat(r); c->bg = reader_readFloat(r); c->bb = reader_readFloat(r); c->ba = reader_readFloat(r); c->ar = reader_readFloat(r); c->ag = reader_readFloat(r); c->ab = reader_readFloat(r); c->aa = reader_readFloat(r); return c; } static void dumpFont(writer_t*w, state_t*state, gfxfont_t*font) { int oldpos = w->pos; #ifdef STATS int old_size_lines = state->size_lines; #endif writer_writeString(w, font->id); writer_writeU32(w, font->num_glyphs); writer_writeU32(w, font->max_unicode); writer_writeDouble(w, font->ascent); writer_writeDouble(w, font->descent); int t; for(t=0;tnum_glyphs;t++) { dumpLine(w, state, font->glyphs[t].line); writer_writeDouble(w, font->glyphs[t].advance); writer_writeU32(w, font->glyphs[t].unicode); if(font->glyphs[t].name) { writer_writeString(w,font->glyphs[t].name); } else { writer_writeU8(w,0); } } for(t=0;tmax_unicode;t++) { writer_writeU32(w, font->unicode2glyph[t]); } #ifdef STATS state->size_lines = old_size_lines; state->size_fonts += w->pos - oldpos; #endif } static gfxfont_t*readFont(reader_t*r, state_t*state) { gfxfont_t* font = (gfxfont_t*)rfx_calloc(sizeof(gfxfont_t)); font->id = reader_readString(r); font->num_glyphs = reader_readU32(r); font->max_unicode = reader_readU32(r); font->ascent = reader_readDouble(r); font->descent = reader_readDouble(r); font->glyphs = (gfxglyph_t*)rfx_calloc(sizeof(gfxglyph_t)*font->num_glyphs); font->unicode2glyph = (int*)rfx_calloc(sizeof(font->unicode2glyph[0])*font->max_unicode); int t; for(t=0;tnum_glyphs;t++) { font->glyphs[t].line = readLine(r, state); font->glyphs[t].advance = reader_readDouble(r); font->glyphs[t].unicode = reader_readU32(r); font->glyphs[t].name = reader_readString(r); if(!font->glyphs[t].name[0]) { free((void*)(font->glyphs[t].name)); font->glyphs[t].name = 0; } } for(t=0;tmax_unicode;t++) { font->unicode2glyph[t] = reader_readU32(r); } return font; } /* ----------------- reading/writing of primitives with caching -------------- */ void state_clear(state_t*state) { int t; for(t=0;tlast_string)/sizeof(state->last_string[0]);t++) { if(state->last_string[t]) { free(state->last_string[t]); state->last_string[t] = 0; } } } static char* read_string(reader_t*r, state_t*state, U8 id, U8 flags) { assert(id>=0 && id<16); if(flags&FLAG_SAME_AS_LAST) { assert(state->last_string[id]); return strdup(state->last_string[id]); } char*s = reader_readString(r); if(state->last_string[id]) { free(state->last_string[id]); } state->last_string[id] = strdup(s); return s; } static gfxcolor_t read_color(reader_t*r, state_t*state, U8 id, U8 flags) { assert(id>=0 && id<16); if(flags&FLAG_SAME_AS_LAST) return state->last_color[id]; gfxcolor_t c = readColor(r, state); state->last_color[id] = c; return c; } static gfxmatrix_t read_matrix(reader_t*r, state_t*state, U8 id, U8 flags) { assert(id>=0 && id<16); if(flags&FLAG_SAME_AS_LAST) { gfxmatrix_t m = state->last_matrix[id]; readXY(r, state, &m); return m; } gfxmatrix_t m = readMatrix(r, state); state->last_matrix[id] = m; return m; } /* --------------------------- record device operations ---------------------- */ static int record_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x SETPARAM %s %s\n", dev, key, value); writer_writeU8(&i->w, OP_SETPARAM); writer_writeString(&i->w, key); writer_writeString(&i->w, value); return 1; } static void record_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x STROKE\n", dev); writer_writeU8(&i->w, OP_STROKE); writer_writeDouble(&i->w, width); writer_writeDouble(&i->w, miterLimit); dumpColor(&i->w, &i->state, color); writer_writeU8(&i->w, cap_style); writer_writeU8(&i->w, joint_style); dumpLine(&i->w, &i->state, line); } static void record_startclip(struct _gfxdevice*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x STARTCLIP\n", dev); writer_writeU8(&i->w, OP_STARTCLIP); dumpLine(&i->w, &i->state, line); i->cliplevel++; } static void record_endclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x ENDCLIP\n", dev); writer_writeU8(&i->w, OP_ENDCLIP); i->cliplevel--; if(i->cliplevel<0) { msg(" record: endclip() without startclip()"); } } static void record_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x FILL\n", dev); writer_writeU8(&i->w, OP_FILL); dumpColor(&i->w, &i->state, color); dumpLine(&i->w, &i->state, line); } static void record_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x FILLBITMAP\n", dev); writer_writeU8(&i->w, OP_FILLBITMAP); dumpImage(&i->w, &i->state, img); dumpMatrix(&i->w, &i->state, matrix); dumpLine(&i->w, &i->state, line); dumpCXForm(&i->w, &i->state, cxform); } static void record_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x FILLGRADIENT %08x\n", dev, gradient); writer_writeU8(&i->w, OP_FILLGRADIENT); writer_writeU8(&i->w, type); dumpGradient(&i->w, &i->state, gradient); dumpMatrix(&i->w, &i->state, matrix); dumpLine(&i->w, &i->state, line); } static void record_addfont(struct _gfxdevice*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x ADDFONT %s\n", dev, font->id); if(font && !gfxfontlist_hasfont(i->fontlist, font)) { writer_writeU8(&i->w, OP_ADDFONT); dumpFont(&i->w, &i->state, font); i->fontlist = gfxfontlist_addfont(i->fontlist, font); } } static void record_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(font && !gfxfontlist_hasfont(i->fontlist, font)) { record_addfont(dev, font); } msg(" record: %08x DRAWCHAR %d\n", glyphnr, dev); const char*font_id = (font&&font->id)?font->id:"*NULL*"; gfxmatrix_t*l = &i->state.last_matrix[OP_DRAWCHAR]; U8 flags = 0; if(!font) flags |= FLAG_ZERO_FONT; char same_font = i->state.last_string[OP_DRAWCHAR] && !strcmp(i->state.last_string[OP_DRAWCHAR], font_id); char same_matrix = (l->m00 == matrix->m00) && (l->m01 == matrix->m01) && (l->m10 == matrix->m10) && (l->m11 == matrix->m11); char same_color = !memcmp(color, &i->state.last_color[OP_DRAWCHAR], sizeof(gfxcolor_t)); /* FIXME if(same_font && same_matrix && same_color) flags |= FLAG_SAME_AS_LAST; */ writer_writeU8(&i->w, OP_DRAWCHAR|flags); writer_writeU32(&i->w, glyphnr); #ifdef STATS i->state.size_chars += 5; #endif if(!(flags&FLAG_SAME_AS_LAST)) { if(!(flags&FLAG_ZERO_FONT)) writer_writeString(&i->w, font_id); dumpColor(&i->w, &i->state, color); dumpMatrix(&i->w, &i->state, matrix); if(i->state.last_string[OP_DRAWCHAR]) free(i->state.last_string[OP_DRAWCHAR]); i->state.last_string[OP_DRAWCHAR] = strdup(font_id); i->state.last_color[OP_DRAWCHAR] = *color; i->state.last_matrix[OP_DRAWCHAR] = *matrix; } else { dumpXY(&i->w, &i->state, matrix); } } static void record_startpage(struct _gfxdevice*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x STARTPAGE\n", dev); writer_writeU8(&i->w, OP_STARTPAGE); writer_writeU16(&i->w, width); writer_writeU16(&i->w, height); } static void record_endpage(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x ENDPAGE\n", dev); writer_writeU8(&i->w, OP_ENDPAGE); } static void record_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x DRAWLINK\n", dev); writer_writeU8(&i->w, OP_DRAWLINK); dumpLine(&i->w, &i->state, line); writer_writeString(&i->w, action?action:""); writer_writeString(&i->w, text?text:""); } /* ------------------------------- replaying --------------------------------- */ static void replay(struct _gfxdevice*dev, gfxdevice_t*out, reader_t*r, gfxfontlist_t**fontlist) { internal_t*i = 0; if(dev) { i = (internal_t*)dev->internal; } gfxfontlist_t*_fontlist=0; if(!fontlist) { fontlist = &_fontlist; } state_t state; memset(&state, 0, sizeof(state)); while(1) { unsigned char op; if(r->read(r, &op, 1)!=1) break; unsigned char flags = op&0xf0; op&=0x0f; switch(op) { case OP_END: goto finish; case OP_SETPARAM: { msg(" replay: SETPARAM"); char*key; char*value; key = reader_readString(r); value = reader_readString(r); out->setparameter(out, key, value); free(key); free(value); break; } case OP_STARTPAGE: { msg(" replay: STARTPAGE"); U16 width = reader_readU16(r); U16 height = reader_readU16(r); out->startpage(out, width, height); break; } case OP_ENDPAGE: { msg(" replay: ENDPAGE"); out->endpage(out); break; } case OP_FINISH: { msg(" replay: FINISH"); break; } case OP_STROKE: { msg(" replay: STROKE"); double width = reader_readDouble(r); double miterlimit = reader_readDouble(r); gfxcolor_t color = readColor(r, &state); gfx_capType captype; int v = reader_readU8(r); switch (v) { case 0: captype = gfx_capButt; break; case 1: captype = gfx_capRound; break; case 2: captype = gfx_capSquare; break; } gfx_joinType jointtype; v = reader_readU8(r); switch (v) { case 0: jointtype = gfx_joinMiter; break; case 1: jointtype = gfx_joinRound; break; case 2: jointtype = gfx_joinBevel; break; } gfxline_t* line = readLine(r, &state); out->stroke(out, line, width, &color, captype, jointtype,miterlimit); gfxline_free(line); break; } case OP_STARTCLIP: { msg(" replay: STARTCLIP"); gfxline_t* line = readLine(r, &state); out->startclip(out, line); gfxline_free(line); break; } case OP_ENDCLIP: { msg(" replay: ENDCLIP"); out->endclip(out); break; } case OP_FILL: { msg(" replay: FILL"); gfxcolor_t color = readColor(r, &state); gfxline_t* line = readLine(r, &state); out->fill(out, line, &color); gfxline_free(line); break; } case OP_FILLBITMAP: { msg(" replay: FILLBITMAP"); gfximage_t img = readImage(r, &state); gfxmatrix_t matrix = readMatrix(r, &state); gfxline_t* line = readLine(r, &state); gfxcxform_t* cxform = readCXForm(r, &state); out->fillbitmap(out, line, &img, &matrix, cxform); gfxline_free(line); if(cxform) free(cxform); free(img.data);img.data=0; break; } case OP_FILLGRADIENT: { msg(" replay: FILLGRADIENT"); gfxgradienttype_t type; int v = reader_readU8(r); switch (v) { case 0: type = gfxgradient_radial; break; case 1: type = gfxgradient_linear; break; } gfxgradient_t*gradient = readGradient(r, &state); gfxmatrix_t matrix = readMatrix(r, &state); gfxline_t* line = readLine(r, &state); out->fillgradient(out, line, gradient, type, &matrix); break; } case OP_DRAWLINK: { msg(" replay: DRAWLINK"); gfxline_t* line = readLine(r, &state); char* s = reader_readString(r); char* t = reader_readString(r); out->drawlink(out,line,s, t); gfxline_free(line); free(s); break; } case OP_ADDFONT: { msg(" replay: ADDFONT out=%08x(%s)", out, out->name); gfxfont_t*font = readFont(r, &state); if(!gfxfontlist_hasfont(*fontlist, font)) { *fontlist = gfxfontlist_addfont(*fontlist, font); out->addfont(out, font); } else { gfxfont_free(font); } break; } case OP_DRAWCHAR: { U32 glyph = reader_readU32(r); gfxmatrix_t m = {1,0,0, 0,1,0}; char* id = 0; if(!(flags&FLAG_ZERO_FONT)) id = read_string(r, &state, op, flags); gfxcolor_t color = read_color(r, &state, op, flags); gfxmatrix_t matrix = read_matrix(r, &state, op, flags); gfxfont_t*font = id?gfxfontlist_findfont(*fontlist, id):0; if(i && !font) { font = gfxfontlist_findfont(i->fontlist, id); } msg(" replay: DRAWCHAR font=%s glyph=%d (flags=%d)", id, glyph, flags); out->drawchar(out, font, glyph, &color, &matrix); if(id) free(id); break; } } } finish: state_clear(&state); r->dealloc(r); if(_fontlist) gfxfontlist_free(_fontlist, 0); } void gfxresult_record_replay(gfxresult_t*result, gfxdevice_t*device, gfxfontlist_t**fontlist) { internal_result_t*i = (internal_result_t*)result->internal; reader_t r; if(i->use_tempfile) { reader_init_filereader2(&r, i->filename); } else { reader_init_memreader(&r, i->data, i->length); } replay(0, device, &r, fontlist); } static void record_result_write(gfxresult_t*r, int filedesc) { internal_result_t*i = (internal_result_t*)r->internal; if(i->data) { write(filedesc, i->data, i->length); } } static int record_result_save(gfxresult_t*r, const char*filename) { internal_result_t*i = (internal_result_t*)r->internal; if(i->use_tempfile) { move_file(i->filename, filename); } else { FILE*fi = fopen(filename, "wb"); if(!fi) { fprintf(stderr, "Couldn't open file %s for writing\n", filename); return -1; } fwrite(i->data, i->length, 1, fi); fclose(fi); } return 0; } static void*record_result_get(gfxresult_t*r, const char*name) { internal_result_t*i = (internal_result_t*)r->internal; if(!strcmp(name, "data")) { return i->data; } else if(!strcmp(name, "length")) { return &i->length; } return 0; } static void record_result_destroy(gfxresult_t*r) { internal_result_t*i = (internal_result_t*)r->internal; if(i->data) { free(i->data);i->data = 0; } if(i->filename) { unlink(i->filename); free(i->filename); } free(r->internal);r->internal = 0; free(r); } static unsigned char printable(unsigned char a) { if(a<32 || a==127) return '.'; else return a; } static void hexdumpMem(unsigned char*data, int len) { int t; char ascii[32]; for(t=0;tinternal; writer_t w; int len; void*data = writer_growmemwrite_memptr(&i->w, &len); gfxdevice_t out; gfxdevice_dummy_init(&out, NULL); reader_t r; reader_init_memreader(&r, data, len); replay(dev, &out, &r, NULL); } void gfxdevice_record_flush(gfxdevice_t*dev, gfxdevice_t*out, gfxfontlist_t**fontlist) { internal_t*i = (internal_t*)dev->internal; if(out) { if(!i->use_tempfile) { int len=0; void*data = writer_growmemwrite_memptr(&i->w, &len); reader_t r; reader_init_memreader(&r, data, len); replay(dev, out, &r, fontlist); writer_growmemwrite_reset(&i->w); } else { msg(" Flushing not supported for file based record device"); exit(1); } } } static gfxresult_t* record_finish(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; msg(" record: %08x END", dev); if(i->cliplevel) { msg(" Warning: unclosed cliplevels"); } state_clear(&i->state); #ifdef STATS int total = i->w.pos; if(total && i->use_tempfile) { state_t*s = &i->state; msg(" record device finished. stats:"); msg(" %4.1f%% matrices (%d bytes)", s->size_matrices*100.0/total, s->size_matrices); msg(" %4.1f%% positions (%d bytes)", s->size_positions*100.0/total, s->size_positions); msg(" %4.1f%% colors (%d bytes)", s->size_colors*100.0/total, s->size_colors); msg(" %4.1f%% lines (%d bytes)", s->size_lines*100.0/total, s->size_lines); msg(" %4.1f%% fonts (%d bytes)", s->size_fonts*100.0/total, s->size_fonts); msg(" %4.1f%% images (%d bytes)", s->size_images*100.0/total, s->size_images); msg(" %4.1f%% characters (%d bytes)", s->size_chars*100.0/total, s->size_chars); msg(" total: %d bytes", total); } #endif writer_writeU8(&i->w, OP_END); gfxfontlist_free(i->fontlist, 0); internal_result_t*ir = (internal_result_t*)rfx_calloc(sizeof(gfxresult_t)); ir->use_tempfile = i->use_tempfile; if(i->use_tempfile) { ir->filename = i->filename; } else { ir->data = writer_growmemwrite_getmem(&i->w); ir->length = i->w.pos; } i->w.finish(&i->w); gfxresult_t*result= (gfxresult_t*)rfx_calloc(sizeof(gfxresult_t)); result->save = record_result_save; result->get = record_result_get; result->destroy = record_result_destroy; result->internal = ir; free(dev->internal);memset(dev, 0, sizeof(gfxdevice_t)); return result; } void gfxdevice_record_init(gfxdevice_t*dev, char use_tempfile) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "record"; dev->internal = i; i->use_tempfile = use_tempfile; if(!use_tempfile) { writer_init_growingmemwriter(&i->w, 1048576); } else { char buffer[128]; i->filename = strdup(mktempname(buffer, "gfx")); writer_init_filewriter2(&i->w, i->filename); } i->fontlist = gfxfontlist_create(); i->cliplevel = 0; dev->setparameter = record_setparameter; dev->startpage = record_startpage; dev->startclip = record_startclip; dev->endclip = record_endclip; dev->stroke = record_stroke; dev->fill = record_fill; dev->fillbitmap = record_fillbitmap; dev->fillgradient = record_fillgradient; dev->addfont = record_addfont; dev->drawchar = record_drawchar; dev->drawlink = record_drawlink; dev->endpage = record_endpage; dev->finish = record_finish; } swftools_0.9.2+git20130725.orig/lib/devices/pdf.c0000644000175000017500000004154512216332640020441 0ustar gawaingawain/* pdf.c Part of the swftools package. Copyright (c) 2007 Matthias Kramm 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 */ #include #include #include #include #include #include #include #include #include "../os.h" #include "../q.h" #include "../log.h" #include "../jpeg.h" #include "../types.h" #include "../mem.h" #include "../log.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfximage.h" #include "../gfxfont.h" typedef struct _internal { PDF* p; char config_addblankpages; double config_xpad; double config_ypad; int config_maxdpi; int config_mindpi; int width,height; int num_pages; char*tempfile; char*page_opts; double lastx,lasty; gfxfontlist_t*fontlist; char has_matrix; double m00, m01, m10, m11; } internal_t; static void restore_matrix(internal_t*i) { if(i->has_matrix) { PDF_restore(i->p); i->has_matrix=0; i->m00 = 0; i->m01 = 0; i->m10 = 0; i->m11 = 0; } } static void set_matrix(internal_t*i, double m00, double m01, double m10, double m11) { restore_matrix(i); i->m00 = m00; i->m01 = m01; i->m10 = m10; i->m11 = m11; PDF_save(i->p); PDF_setmatrix(i->p, m00, -m01, m10, -m11, 0, i->height+2*i->config_ypad); i->has_matrix = 1; } static void reset_matrix(internal_t*i) { set_matrix(i, 1.0, 0.0, 0.0, 1.0); } static void transform_back(internal_t*i, double x, double y, double *ox, double *oy) { double det = i->m00*i->m11 - i->m10*i->m01; if(!det) { msg(" Codependent text matrix"); *ox=*oy=0; return; } *ox = (x*i->m11 - i->m10*y)/det; *oy = (i->m00*y - x*i->m01)/det; } void pdf_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; if(!i->tempfile) { i->tempfile = strdup(mktempname(0, "pdf")); PDF_begin_document(i->p, i->tempfile, 0, ""); //PDF_set_value(i->p, "compress", 0); PDF_set_parameter(i->p, "usercoordinates", "true"); PDF_set_parameter(i->p, "topdown", "true"); } int width_plus_pad = width+floor(i->config_xpad*2); int height_plus_pad = height+floor(i->config_ypad*2); PDF_begin_page_ext(i->p, width_plus_pad, height_plus_pad, i->page_opts); PDF_set_value(i->p, "CropBox/llx", 0); PDF_set_value(i->p, "CropBox/lly", 0); PDF_set_value(i->p, "CropBox/urx", width_plus_pad); PDF_set_value(i->p, "CropBox/ury", height_plus_pad); if(i->config_xpad || i->config_ypad) { PDF_set_value(i->p, "TrimBox/llx", i->config_xpad); PDF_set_value(i->p, "TrimBox/lly", i->config_ypad); PDF_set_value(i->p, "TrimBox/urx", i->config_xpad+width); PDF_set_value(i->p, "TrimBox/ury", i->config_ypad+height); } PDF_set_parameter(i->p, "fillrule", "evenodd"); i->width = width; i->height = height; i->num_pages++; reset_matrix(i); } int pdf_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "addblankpages")) { i->config_addblankpages = atoi(value); } else if(!strcmp(key, "maxdpi")) { i->config_maxdpi = atoi(value); } else if(!strcmp(key, "mindpi")) { i->config_mindpi = atoi(value); } else if(!strcmp(key, "xpad")) { i->config_xpad = atof(value); } else if(!strcmp(key, "ypad")) { i->config_ypad = atof(value); } return 0; } static int mkline(gfxline_t*line, PDF*p, double mx, double my, double scale, char fill) { double x=0,y=0; char first = 1; int ret = 0; gfxline_t*free_line = 0; if(fill) { line = gfxline_restitch(gfxline_clone(line)); free_line = line; } while(line) { if(line->type == gfx_moveTo && (x!=line->x || y!=line->y || first)) { first = 0; PDF_moveto(p, line->x*scale+mx, line->y*scale+my); } else if(line->type == gfx_lineTo) { PDF_lineto(p, line->x*scale+mx, line->y*scale+my); ret = 1; } else { /* when converting a quadratic bezier to a cubic bezier, the two new control points are both 2/3 the way from the endpoints to the old control point */ double c1x = (x + line->sx*2)/3; double c1y = (y + line->sy*2)/3; double c2x = (line->x + line->sx*2)/3; double c2y = (line->y + line->sy*2)/3; PDF_curveto(p, c1x*scale+mx, c1y*scale+my, c2x*scale+mx, c2y*scale+my, line->x*scale+mx, line->y*scale+my); ret = 1; } x = line->x; y = line->y; line = line->next; } if(free_line) gfxline_free(free_line); return ret; } void pdf_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; restore_matrix(i); PDF_save(i->p); if(mkline(line, i->p, i->config_xpad, i->config_ypad, 1.0, 1)) PDF_clip(i->p); else ; // TODO: strictly speaking, an empty clip clears everything reset_matrix(i); } void pdf_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; restore_matrix(i); PDF_restore(i->p); } void pdf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; if(width<1e-6) return; reset_matrix(i); PDF_setlinewidth(i->p, width); PDF_setlinecap(i->p, cap_style==gfx_capButt?0:(cap_style==gfx_capRound?1:2)); PDF_setlinejoin(i->p, joint_style==gfx_joinMiter?0:(joint_style==gfx_joinRound?1:2)); PDF_setrgbcolor_stroke(i->p, color->r/255.0, color->g/255.0, color->b/255.0); if(joint_style==gfx_joinMiter) PDF_setmiterlimit(i->p, miterLimit); if(mkline(line, i->p, i->config_xpad, i->config_ypad, 1.0, 0)) PDF_stroke(i->p); } void pdf_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; reset_matrix(i); PDF_setrgbcolor_fill(i->p, color->r/255.0, color->g/255.0, color->b/255.0); /* pdf-x (pdf 1.3) doesn't support opacityfill if(color->a!=255) { char opacityfill[80]; sprintf(opacityfill, "opacityfill %f", color->a/256.0); int gstate = PDF_create_gstate(i->p, opacityfill); PDF_set_gstate(i->p, gstate); }*/ if(mkline(line, i->p, i->config_xpad, i->config_ypad, 1.0, 1)) { PDF_fill(i->p); } } void pdf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*_matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; gfxmatrix_t _m = *_matrix; gfxmatrix_t*matrix = &_m; int t,size=img->width*img->height; int has_alpha=0; for(t=0;tdata[t].a!=255) { has_alpha=1; break; } } double w = sqrt(matrix->m00*matrix->m00+matrix->m01*matrix->m01); double h = sqrt(matrix->m10*matrix->m10+matrix->m11*matrix->m11); double l1 = w*img->width; double l2 = h*img->height; double dpi_x = 72.0 / w; double dpi_y = 72.0 / h; double dpi = dpi_x>dpi_y?dpi_x:dpi_y; gfximage_t*rescaled_image = 0; if(i->config_maxdpi && dpi > i->config_maxdpi) { int newwidth = img->width*i->config_maxdpi/dpi; int newheight = img->height*i->config_maxdpi/dpi; double s = dpi/i->config_maxdpi; matrix->m00 *= s; matrix->m01 *= s; matrix->m10 *= s; matrix->m11 *= s; rescaled_image = gfximage_rescale(img, newwidth, newheight); msg(" Downscaling %dx%d image (dpi %f, %.0fx%.0f on page) to %dx%d (dpi %d)", img->width, img->height, dpi, l1, l2, newwidth, newheight, i->config_maxdpi); img = rescaled_image; } if(i->config_mindpi && dpi < i->config_mindpi && img->width>1 && img->height>1) { msg(" Found image of size %dx%d with dpi %f, minimum allowed dpi is %d", img->width, img->height, dpi, i->config_mindpi); exit(1); } char tempfile[128]; mktempname(tempfile, "jpg"); gfximage_save_jpeg(img, tempfile, 90); int imgid=-1; if(has_alpha) { char tempfile2[128]; mktempname(tempfile2, "jpg"); int t; int size = img->width*img->height; unsigned char*alpha = malloc(size); for(t=0;tdata[t].a; } jpeg_save_gray(alpha, img->width, img->height, 97, tempfile2); free(alpha); int maskid = PDF_load_image(i->p, "jpeg", tempfile2, 0, "mask"); unlink(tempfile2); char masked[80]; if(maskid<0) { msg(" Couldn't process mask jpeg of size %dx%d: error code %d", img->width, img->height, maskid); return; } sprintf(masked, "masked %d", maskid); imgid = PDF_load_image(i->p, "jpeg", tempfile, 0, masked); } else { imgid = PDF_load_image(i->p, "jpeg", tempfile, 0, ""); } if(imgid<0) { msg(" Couldn't process jpeg of size %dx%d: error code %d, file %s", img->width, img->height, imgid, tempfile); return; } unlink(tempfile); char options[80]; set_matrix(i, matrix->m00, matrix->m01, matrix->m10, matrix->m11); /* an image's (0,0) is at the lower left corner */ double x=matrix->tx + i->config_xpad + matrix->m10*img->height; double y=matrix->ty + i->config_ypad + matrix->m11*img->height; double tx,ty; transform_back(i, x, y, &tx, &ty); PDF_place_image(i->p, imgid, tx, ty, 1.0); PDF_close_image(i->p, imgid); if(rescaled_image) gfximage_free(rescaled_image); } void pdf_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; } static const char type3 = 0; static const char ttf = 1; void pdf_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; int num = font->num_glyphs<256-32?font->num_glyphs:256-32; if(type3) { int fontid = 0; if(!gfxfontlist_hasfont(i->fontlist, font)) { static int fontnr = 1; char fontname[32]; sprintf(fontname, "font%d", fontnr++); int l = strlen(fontname); char fontname2[64]; int t; for(t=0;tp, fontname2, l*2, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, ""); for(t=0;tglyphs[t]; gfxbbox_t bbox = gfxline_getbbox(g->line); char name[32]; sprintf(name, "chr%d", t+32); PDF_encoding_set_char(i->p, fontname, t+32, name, 0); PDF_begin_glyph(i->p, name, g->advance, bbox.xmin/64.0, bbox.ymin/64.0, bbox.xmax/64.0, bbox.ymax/64.0); if(mkline(g->line, i->p, 0, 0, 1.0/64.0, 1)) PDF_fill(i->p); PDF_end_glyph(i->p); } PDF_end_font(i->p); fontid = PDF_load_font(i->p, fontname2, l*2, fontname, ""); i->fontlist = gfxfontlist_addfont2(i->fontlist, font, (void*)(ptroff_t)fontid); } } else if(ttf) { int fontid = 0; if(!gfxfontlist_hasfont(i->fontlist, font)) { char fontname[32],filename[32],fontname2[64]; static int fontnr = 1; sprintf(fontname, "font%d", fontnr); sprintf(filename, "font%d.ttf", fontnr); fontnr++; const char*old_id = font->id; font->id = fontname; int t; for(t=0;tglyphs[t].unicode = 32+t; } font->max_unicode = 0; font->unicode2glyph = 0; gfxfont_save(font, filename); font->id=old_id; #ifdef RUN_TTX /* for testing the generated fonts: run everything through ttx (fonttools) */ char cmd[256]; sprintf(cmd, "mv %s.ttf test.ttf", fontname);system(cmd); system("rm -f test.ttx"); if(system("ttx test.ttf")&0xff00) exit(1); sprintf(cmd, "mv test.ttf %s.old.ttf", fontname, fontname);system(cmd); sprintf(cmd, "ttx test.ttx;mv test.ttf %s.ttf", fontname);system(cmd); sprintf(cmd, "rm -f test.ttx");system(cmd); #endif int l = strlen(fontname); for(t=0;tp, fontname2, l*2, "host", "embedding=true"); i->fontlist = gfxfontlist_addfont2(i->fontlist, font, (void*)(ptroff_t)fontid); unlink(filename); } } } void pdf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(!font) return; gfxglyph_t*glyph = &font->glyphs[glyphnr]; char as_shape = 0; if(!type3 && !ttf) {msg(" No type3 enabled. Drawing char %d as shape", glyphnr);as_shape=1;} if(glyphnr>256-32) {msg(" Drawing char %d as shape (not < 224)", glyphnr);as_shape=1;} if(as_shape) { reset_matrix(i); PDF_setrgbcolor_fill(i->p, color->r/255.0, color->g/255.0, color->b/255.0); gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); if(mkline(line2, i->p, i->config_xpad, i->config_ypad, 1.0, 1)) { PDF_fill(i->p); } gfxline_free(line2); } else { assert(gfxfontlist_hasfont(i->fontlist, font)); int fontid = (int)(ptroff_t)gfxfontlist_getuserdata(i->fontlist, font->id); gfxmatrix_t m = *matrix; m.m00*=64; m.m01*=64; m.m10*=64; m.m11*=64; if(ttf) { m.m10 = -m.m10; m.m11 = -m.m11; } if(!(fabs(m.m00 - i->m00) < 1e-6 && fabs(m.m01 - i->m01) < 1e-6 && fabs(m.m10 - i->m10) < 1e-6 && fabs(m.m11 - i->m11) < 1e-6)) { set_matrix(i, m.m00, m.m01, m.m10, m.m11); } double tx, ty; transform_back(i, m.tx+i->config_xpad, m.ty+i->config_ypad, &tx, &ty); PDF_setfont(i->p, fontid, ttf?16.0:1.0); PDF_setrgbcolor_fill(i->p, color->r/255.0, color->g/255.0, color->b/255.0); char name[32]; sprintf(name, "%c", glyphnr+32); if(fabs(tx - i->lastx) > 0.001 || ty != i->lasty) { PDF_show_xy2(i->p, name, strlen(name), tx, ty); } else { PDF_show2(i->p, name, strlen(name)); } i->lastx = tx + glyph->advance; i->lasty = ty; } } void pdf_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; } void pdf_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; restore_matrix(i); PDF_end_page(i->p); } typedef struct pdfresult_internal { char*tempfile; } pdfresult_internal_t; void pdfresult_destroy(gfxresult_t*gfx) { pdfresult_internal_t*i = (pdfresult_internal_t*)gfx->internal; unlink(i->tempfile); free(i->tempfile); free(gfx->internal);gfx->internal = 0; free(gfx); } int pdfresult_save(gfxresult_t*gfx, const char*filename) { pdfresult_internal_t*i = (pdfresult_internal_t*)gfx->internal; FILE*fi = fopen(i->tempfile, "rb"); FILE*fo = fopen(filename, "wb"); if(!fo) { perror(filename); return -1; } char buffer[4096]; int size = 0; while((size = fread(buffer, 1, 4096, fi))) { fwrite(buffer, 1, size, fo); } fclose(fi); fclose(fo); return 0; } void* pdfresult_get(gfxresult_t*gfx, const char*name) { return 0; } gfxresult_t* pdf_finish(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; if(i->config_addblankpages) { int mod = i->num_pages%i->config_addblankpages; if(mod) { int count = i->config_addblankpages - mod; int t; for(t=0;tstartpage(dev, i->width, i->height); dev->endpage(dev); } } } PDF_end_document(i->p, ""); //PDF_close(i->p); PDF_delete(i->p); gfxresult_t*result = (gfxresult_t*)malloc(sizeof(gfxresult_t)); memset(result, 0, sizeof(gfxresult_t)); result->save = pdfresult_save; result->get = pdfresult_get; result->destroy = pdfresult_destroy; result->internal = 0; result->internal = malloc(sizeof(pdfresult_internal_t)); pdfresult_internal_t*ri = (pdfresult_internal_t*)result->internal; ri->tempfile = i->tempfile;i->tempfile=0; free(dev->internal);dev->internal = 0;i=0; return result; } void gfxdevice_pdf_init(gfxdevice_t*dev) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "pdf"; dev->internal = i; dev->setparameter = pdf_setparameter; dev->startpage = pdf_startpage; dev->startclip = pdf_startclip; dev->endclip = pdf_endclip; dev->stroke = pdf_stroke; dev->fill = pdf_fill; dev->fillbitmap = pdf_fillbitmap; dev->fillgradient = pdf_fillgradient; dev->addfont = pdf_addfont; dev->drawchar = pdf_drawchar; dev->drawlink = pdf_drawlink; dev->endpage = pdf_endpage; dev->finish = pdf_finish; i->page_opts = ""; i->lastx = -1e38; i->lasty = -1e38; i->has_matrix = 0; i->config_maxdpi = 72; i->p = PDF_new(); } swftools_0.9.2+git20130725.orig/lib/devices/rescale.c0000644000175000017500000002265612216332640021310 0ustar gawaingawain/* rescale.c Part of the swftools package. Copyright (c) 2006 Matthias Kramm 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 */ #include #include #include #ifndef WIN32 #include #endif #include #include #include #include "rescale.h" #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" typedef struct _internal { gfxdevice_t*out; int origwidth; int origheight; int targetwidth; int targetheight; int centerx, centery; gfxmatrix_t matrix; double zoomwidth; int keepratio; } internal_t; static int verbose = 1; static void dbg(char*format, ...) { if(!verbose) return; char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(device-rescale) %s\n", buf); fflush(stdout); } char gfxline_isRect(gfxline_t*line) { return 1; if(!line) return 0; double x1=line->x,y1=line->x,x2=line->x,y2=line->y; int nx1=0,nx2=0,ny1=0,ny2=0; line = line->next; while(line) { if(line->type != gfx_lineTo) return 0; if(line->x < x1) { x1 = line->x; nx1++; } else if(line->y < y1) { y1 = line->y; ny1++; } else if(line->x > x2) { x2 = line->x; nx2++; } else if(line->y > y1) { y2 = line->y; ny2++; } line = line->next; } return (nx1+nx2)==1 && (ny1+ny2)==1; } gfxline_t*transformgfxline(internal_t*i, gfxline_t*line) { /* special case: transformed rectangle if(gfxline_isRect(line)) { gfxbbox_t bbox = gfxline_getbbox(line); if(fabs(bbox.xmin)<0.1 && fabs(bbox.ymin)<0.1 && fabs(bbox.ymax-i->origwidth)<0.1 && fabs(bbox.ymax-i->origheight)<0.1) { gfxline_t r[5]; r[0].x = 0; r[0].y = 0; r[0].type = gfx_moveTo;r[0].next = &r[1]; r[1].x = i->targetwidth;r[1].y = 0; r[1].type = gfx_lineTo;r[1].next = &r[2]; r[2].x = i->targetwidth;r[2].y = i->targetheight;r[2].type = gfx_lineTo;r[2].next = &r[3]; r[3].x = 0; r[3].y = i->targetheight;r[3].type = gfx_lineTo;r[3].next = &r[4]; r[4].x = 0; r[4].y = 0; r[4].type = gfx_lineTo;r[4].next = 0; return gfxline_clone(r); } } */ gfxline_t*line2 = gfxline_clone(line); gfxline_transform(line2, &i->matrix); return line2; } int rescale_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "keepratio")) { i->keepratio = atoi(value); return 1; } else if(!strcmp(key, "centerx")) { i->centerx = atoi(value); return 1; } else if(!strcmp(key, "centery")) { i->centery = atoi(value); return 1; } else { if(i->out) { return i->out->setparameter(i->out,key,value); } else { return 0; } } } void rescale_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; i->origwidth = width; i->origheight = height; if(i->targetwidth || i->targetheight) { int targetwidth = i->targetwidth; if(!targetwidth) targetwidth = width*i->targetheight/height; int targetheight = i->targetheight; if(!targetheight) targetheight = height*i->targetwidth/width; if(i->keepratio) { double rx = (double)targetwidth / (double)width; double ry = (double)targetheight / (double)height; if(rxmatrix.m00 = rx; i->matrix.m11 = rx; i->matrix.tx = 0; if(i->centery) { i->matrix.ty = (targetheight - height*rx) / 2; } } else { i->matrix.m00 = ry; i->matrix.m11 = ry; if(i->centerx) { i->matrix.tx = (targetwidth - width*ry) / 2; } i->matrix.ty = 0; } } else { i->matrix.m00 = (double)targetwidth / (double)width; i->matrix.m11 = (double)targetheight / (double)height; } i->zoomwidth = sqrt(i->matrix.m00*i->matrix.m11); i->out->startpage(i->out,targetwidth,targetheight); } else { i->out->startpage(i->out,(int)(width*i->matrix.m00),(int)(height*i->matrix.m11)); } } void rescale_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); i->out->startclip(i->out,line2); gfxline_free(line2); } void rescale_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endclip(i->out); } void rescale_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); i->out->stroke(i->out, line2, width*i->zoomwidth, color, cap_style, joint_style, miterLimit); gfxline_free(line2); } void rescale_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); i->out->fill(i->out, line2, color); gfxline_free(line2); } void rescale_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); gfxmatrix_t m2; gfxmatrix_multiply(&i->matrix, matrix, &m2); i->out->fillbitmap(i->out, line2, img, &m2, cxform); gfxline_free(line2); } void rescale_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); i->out->fillgradient(i->out, line2, gradient, type, matrix); gfxline_free(line2); } void rescale_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; i->out->addfont(i->out, font); } void rescale_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; gfxmatrix_t m2; gfxmatrix_multiply(&i->matrix, matrix, &m2); i->out->drawchar(i->out, font, glyphnr, color, &m2); } void rescale_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; gfxline_t*line2 = transformgfxline(i, line); i->out->drawlink(i->out, line2, action, text); gfxline_free(line2); } void rescale_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endpage(i->out); } gfxresult_t* rescale_finish(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; gfxdevice_t*out = i->out; free(dev->internal);dev->internal = 0;i=0; if(out) { return out->finish(out); } else { return 0; } } void gfxdevice_rescale_init(gfxdevice_t*dev, gfxdevice_t*out, int width, int height, double scale) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "rescale"; dev->internal = i; dev->setparameter = rescale_setparameter; dev->startpage = rescale_startpage; dev->startclip = rescale_startclip; dev->endclip = rescale_endclip; dev->stroke = rescale_stroke; dev->fill = rescale_fill; dev->fillbitmap = rescale_fillbitmap; dev->fillgradient = rescale_fillgradient; dev->addfont = rescale_addfont; dev->drawchar = rescale_drawchar; dev->drawlink = rescale_drawlink; dev->endpage = rescale_endpage; dev->finish = rescale_finish; gfxmatrix_unit(&i->matrix); i->targetwidth = width; i->targetheight = height; i->zoomwidth = 1.0; i->centerx = 1; i->matrix.m00 = scale; i->matrix.m01 = 0; i->matrix.m11 = scale; i->matrix.m10 = 0; i->matrix.tx = 0; i->matrix.ty = 0; i->zoomwidth = scale; i->out = out; } void gfxdevice_rescale_setzoom(gfxdevice_t*dev, double scale) { internal_t*i = (internal_t*)dev->internal; if(strcmp(dev->name, "rescale")) { fprintf(stderr, "Internal error: can't cast device %s to a rescale device\n", dev->name); return; } i->matrix.m00 = scale; i->matrix.m01 = 0; i->matrix.m11 = scale; i->matrix.m10 = 0; i->matrix.tx = 0; i->matrix.ty = 0; i->zoomwidth = scale; } void gfxdevice_rescale_setdevice(gfxdevice_t*dev, gfxdevice_t*out) { internal_t*i = (internal_t*)dev->internal; if(strcmp(dev->name, "rescale")) { fprintf(stderr, "Internal error: can't cast device %s to a rescale device\n", dev->name); return; } i->out = out; } gfxdevice_t* gfxdevice_rescale_new(gfxdevice_t*out, int width, int height, double scale) { gfxdevice_t* d = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_rescale_init(d, out, width, height, scale); return d; } swftools_0.9.2+git20130725.orig/lib/devices/bbox.c0000644000175000017500000001104112216332640020606 0ustar gawaingawain/* bbox.c Part of the swftools package. Copyright (c) 2006 Matthias Kramm 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 */ #include #include #include #ifndef WIN32 #include #endif #include #include #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" typedef struct _internal { gfxbbox_t bbox; int do_graphics; int do_text; } internal_t; void measuregfxline(internal_t*i, gfxline_t*line) { gfxbbox_t b = gfxline_getbbox(line); if(b.xmin==0 && b.ymin==0 && b.xmax==0 && b.ymax==0) { return; } i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmin, b.ymin); i->bbox = gfxbbox_expand_to_point(i->bbox, b.xmax, b.ymax); } int bbox_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "graphics")) { i->do_graphics = atoi(value); return 1; } else if(!strcmp(key, "text")) { i->do_text = atoi(value); return 1; } return 0; } void bbox_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; i->bbox.xmin = 0; i->bbox.ymin = 0; i->bbox.xmax = 0; i->bbox.ymax = 0; } void bbox_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; } void bbox_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; } void bbox_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; if(i->do_graphics) measuregfxline(i, line); } void bbox_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; if(i->do_graphics) measuregfxline(i, line); } void bbox_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; if(i->do_graphics) measuregfxline(i, line); } void bbox_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(i->do_graphics) measuregfxline(i, line); } void bbox_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; } void bbox_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(!font) return; if(i->do_text) { gfxglyph_t*glyph = &font->glyphs[glyphnr]; gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); measuregfxline(i, line2); gfxline_free(line2); } } void bbox_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; } void bbox_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; } gfxresult_t* bbox_finish(gfxdevice_t*dev) { free(dev->internal);dev->internal = 0; return 0; } gfxbbox_t gfxdevice_bbox_getbbox(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; return i->bbox; } void gfxdevice_bbox_init(gfxdevice_t*dev) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "bbox"; dev->internal = i; dev->setparameter = bbox_setparameter; dev->startpage = bbox_startpage; dev->startclip = bbox_startclip; dev->endclip = bbox_endclip; dev->stroke = bbox_stroke; dev->fill = bbox_fill; dev->fillbitmap = bbox_fillbitmap; dev->fillgradient = bbox_fillgradient; dev->addfont = bbox_addfont; dev->drawchar = bbox_drawchar; dev->drawlink = bbox_drawlink; dev->endpage = bbox_endpage; dev->finish = bbox_finish; i->do_graphics = 1; i->do_text = 1; } swftools_0.9.2+git20130725.orig/lib/devices/dummy.c0000644000175000017500000001047312216332640021017 0ustar gawaingawain/* dummy.c Part of the swftools package. Copyright (c) 2007 Matthias Kramm 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 */ #include #include #include #include #include #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" typedef struct _internal { gfxdevice_t*out; } internal_t; int dummy_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; if(i->out) { return i->out->setparameter(i->out,key,value); } else { return 0; } } void dummy_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->startpage(i->out,width,height); } void dummy_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->startclip(i->out,line); } void dummy_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->endclip(i->out); } void dummy_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->stroke(i->out, line, width, color, cap_style, joint_style, miterLimit); } void dummy_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->fill(i->out, line, color); } void dummy_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->fillbitmap(i->out, line, img, matrix, cxform); } void dummy_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->fillgradient(i->out, line, gradient, type, matrix); } void dummy_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->addfont(i->out, font); } void dummy_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->drawchar(i->out, font, glyphnr, color, matrix); } void dummy_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->drawlink(i->out, line, action, text); } void dummy_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->endpage(i->out); } gfxresult_t* dummy_finish(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; if(i->out) { gfxdevice_t*out = i->out; free(dev->internal);dev->internal = 0;i=0; return out->finish(out); } else { free(dev->internal);dev->internal = 0;i=0; return 0; } } void gfxdevice_dummy_init(gfxdevice_t*dev, gfxdevice_t*out) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "dummy"; dev->internal = i; dev->setparameter = dummy_setparameter; dev->startpage = dummy_startpage; dev->startclip = dummy_startclip; dev->endclip = dummy_endclip; dev->stroke = dummy_stroke; dev->fill = dummy_fill; dev->fillbitmap = dummy_fillbitmap; dev->fillgradient = dummy_fillgradient; dev->addfont = dummy_addfont; dev->drawchar = dummy_drawchar; dev->drawlink = dummy_drawlink; dev->endpage = dummy_endpage; dev->finish = dummy_finish; i->out = out; } swftools_0.9.2+git20130725.orig/lib/devices/polyops.c0000644000175000017500000003051012216332640021363 0ustar gawaingawain/* polyops.c Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #include #include #include #ifndef WIN32 #include #endif #include #include #include #include #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfxpoly.h" #include "../log.h" #include "polyops.h" typedef struct _clip { gfxpoly_t*poly; int openclips; struct _clip*next; } clip_t; typedef struct _internal { gfxdevice_t*out; clip_t*clip; gfxpoly_t*polyunion; int good_polygons; int bad_polygons; } internal_t; static int verbose = 0; static void dbg(char*format, ...) { if(!verbose) return; char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(device-polyops) %s\n", buf); fflush(stdout); } int polyops_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { dbg("polyops_setparameter"); internal_t*i = (internal_t*)dev->internal; if(i->out) return i->out->setparameter(i->out,key,value); else return 0; } void polyops_startpage(struct _gfxdevice*dev, int width, int height) { dbg("polyops_startpage"); internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->startpage(i->out,width,height); } void polyops_startclip(struct _gfxdevice*dev, gfxline_t*line) { dbg("polyops_startclip"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t* oldclip = i->clip?i->clip->poly:0; gfxpoly_t* poly = gfxpoly_from_fill(line, DEFAULT_GRID); if(poly) i->good_polygons++; else i->bad_polygons++; gfxpoly_t* currentclip = 0; int type = 0; /* we can't rely on gfxpoly actually being able to convert a gfxline into a gfxpoly- for polygons which are too complex or just degenerate, this might fail. So handle all the cases where polygon conversion or intersection might go awry UPDATE: this is not needed anymore. The new gfxpoly implementation is stable enough so it always returns a valid result. Still, it's good practice. */ if(!poly && !oldclip) { i->out->startclip(i->out,line); currentclip = 0; type = 1; } else if(!poly && oldclip) { gfxline_t*oldclipline = gfxline_from_gfxpoly(oldclip); i->out->startclip(i->out,oldclipline); i->out->startclip(i->out,line); currentclip = 0; type = 2; } else if(poly && oldclip) { gfxpoly_t*intersection = gfxpoly_intersect(poly, oldclip); if(intersection) { i->good_polygons++; // this case is what usually happens gfxpoly_destroy(poly);poly=0; currentclip = intersection; type = 0; } else { i->bad_polygons++; gfxline_t*oldclipline = gfxline_from_gfxpoly(oldclip); i->out->startclip(i->out, oldclipline); currentclip = poly; type = 1; } } else if(poly && !oldclip) { currentclip = poly; type = 0; } clip_t*n = i->clip; i->clip = (clip_t*)rfx_calloc(sizeof(clip_t)); i->clip->next = n; i->clip->poly = currentclip; i->clip->openclips = type; } void polyops_endclip(struct _gfxdevice*dev) { dbg("polyops_endclip"); internal_t*i = (internal_t*)dev->internal; if(!i->clip) { msg(" endclip without startclip (in: polyops)\n"); return; } clip_t*old = i->clip; i->clip = i->clip->next; if(old->poly) { gfxpoly_destroy(old->poly);old->poly = 0; } int t; for(t=0;topenclips;t++) i->out->endclip(i->out); old->next = 0;free(old); } static void addtounion(struct _gfxdevice*dev, gfxpoly_t*poly) { internal_t*i = (internal_t*)dev->internal; if(poly && i->polyunion) { gfxpoly_t*old = i->polyunion; gfxpoly_t*newpoly = gfxpoly_union(poly,i->polyunion); i->polyunion = newpoly; gfxpoly_destroy(old); } } static gfxline_t* handle_poly(gfxdevice_t*dev, gfxpoly_t*poly, char*ok) { internal_t*i = (internal_t*)dev->internal; if(i->clip && i->clip->poly) { gfxpoly_t*old = poly; if(poly) { poly = gfxpoly_intersect(poly, i->clip->poly); gfxpoly_destroy(old); } } if(poly) i->good_polygons++; else i->bad_polygons++; addtounion(dev, poly); gfxline_t*gfxline = 0; if(poly) { // this is the case where everything went right gfxline_t*line = gfxline_from_gfxpoly(poly); gfxpoly_destroy(poly); *ok = 1; return line; } else { if(i->clip && i->clip->poly) { /* convert current clipping from a polygon to an actual "startclip" written to the output */ assert(i->clip->openclips <= 1); gfxline_t*clipline = gfxline_from_gfxpoly(i->clip->poly); i->out->startclip(i->out, clipline); gfxline_free(clipline); gfxpoly_destroy(i->clip->poly);i->clip->poly = 0; i->clip->openclips++; return 0; } else { return 0; } } } void polyops_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { dbg("polyops_stroke"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t* poly = gfxpoly_from_stroke(line, width, cap_style, joint_style, miterLimit, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(dev, poly, &ok); if(ok) { if(i->out && line2) i->out->fill(i->out, line2, color); gfxline_free(line2); } else { msg(" .."); if(i->out) i->out->stroke(i->out, line, width, color, cap_style, joint_style, miterLimit); } } void polyops_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { dbg("polyops_fill"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(dev, poly, &ok); if(ok) { if(i->out && line2) i->out->fill(i->out, line2, color); gfxline_free(line2); } else { if(i->out) i->out->fill(i->out, line, color); } } void polyops_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { dbg("polyops_fillbitmap"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(dev, poly, &ok); if(ok) { if(i->out && line2) i->out->fillbitmap(i->out, line2, img, matrix, cxform); gfxline_free(line2); } else { if(i->out) i->out->fillbitmap(i->out, line, img, matrix, cxform); } } void polyops_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { dbg("polyops_fillgradient"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(dev, poly, &ok); if(ok) { if(i->out && line2) i->out->fillgradient(i->out, line2, gradient, type, matrix); gfxline_free(line2); } else { if(i->out) i->out->fillgradient(i->out, line, gradient, type, matrix); } } void polyops_addfont(struct _gfxdevice*dev, gfxfont_t*font) { dbg("polyops_addfont"); internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->addfont(i->out, font); } void polyops_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { dbg("polyops_drawchar"); if(!font) return; internal_t*i = (internal_t*)dev->internal; gfxline_t*glyph = gfxline_clone(font->glyphs[glyphnr].line); gfxline_transform(glyph, matrix); if(i->clip && i->clip->poly) { gfxbbox_t bbox = gfxline_getbbox(glyph); gfxpoly_t*dummybox = gfxpoly_createbox(bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax, DEFAULT_GRID); gfxline_t*dummybox2 = gfxline_from_gfxpoly(dummybox); bbox = gfxline_getbbox(dummybox2); gfxline_free(dummybox2); char ok=0; gfxline_t*gfxline = handle_poly(dev, dummybox, &ok); if(ok) { gfxbbox_t bbox2 = gfxline_getbbox(gfxline); double w = bbox2.xmax - bbox2.xmin; double h = bbox2.ymax - bbox2.ymin; if(fabs((bbox.xmax - bbox.xmin) - w) > DEFAULT_GRID*2 || fabs((bbox.ymax - bbox.ymin) - h) > DEFAULT_GRID*2) { /* notable change in character size: character was clipped TODO: how to deal with diagonal cuts? */ msg(" Character %d was clipped: (%f,%f,%f,%f) -> (%f,%f,%f,%f)", glyphnr, bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax, bbox2.xmin,bbox2.ymin,bbox2.xmax,bbox2.ymax); polyops_fill(dev, glyph, color); } else { if(i->out) i->out->drawchar(i->out, font, glyphnr, color, matrix); } } else { if(i->out) i->out->drawchar(i->out, font, glyphnr, color, matrix); } gfxline_free(gfxline); } else { if(i->out) i->out->drawchar(i->out, font, glyphnr, color, matrix); } gfxline_free(glyph); } void polyops_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { dbg("polyops_drawlink"); internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->drawlink(i->out, line, action, text); } void polyops_endpage(struct _gfxdevice*dev) { dbg("polyops_endpage"); internal_t*i = (internal_t*)dev->internal; if(i->out) i->out->endpage(i->out); } gfxresult_t* polyops_finish(struct _gfxdevice*dev) { dbg("polyops_finish"); internal_t*i = (internal_t*)dev->internal; if(i->polyunion) { gfxpoly_destroy(i->polyunion);i->polyunion=0; } else { if(i->bad_polygons) { msg(" --flatten success rate: %.1f%% (%d failed polygons)", i->good_polygons*100.0 / (i->good_polygons + i->bad_polygons), i->bad_polygons); } } gfxdevice_t*out = i->out; free(i);memset(dev, 0, sizeof(gfxdevice_t)); if(out) { return out->finish(out); } else { return 0; } } gfxline_t*gfxdevice_union_getunion(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; return gfxline_from_gfxpoly(i->polyunion); } void gfxdevice_removeclippings_init(gfxdevice_t*dev, gfxdevice_t*out) { dbg("gfxdevice_removeclippings_init"); internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "removeclippings"; dev->internal = i; dev->setparameter = polyops_setparameter; dev->startpage = polyops_startpage; dev->startclip = polyops_startclip; dev->endclip = polyops_endclip; dev->stroke = polyops_stroke; dev->fill = polyops_fill; dev->fillbitmap = polyops_fillbitmap; dev->fillgradient = polyops_fillgradient; dev->addfont = polyops_addfont; dev->drawchar = polyops_drawchar; dev->drawlink = polyops_drawlink; dev->endpage = polyops_endpage; dev->finish = polyops_finish; i->out = out; i->polyunion = 0; } void gfxdevice_union_init(gfxdevice_t*dev,gfxdevice_t*out) { dbg("gfxdevice_getunion_init"); internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "union"; dev->internal = i; dev->setparameter = polyops_setparameter; dev->startpage = polyops_startpage; dev->startclip = polyops_startclip; dev->endclip = polyops_endclip; dev->stroke = polyops_stroke; dev->fill = polyops_fill; dev->fillbitmap = polyops_fillbitmap; dev->fillgradient = polyops_fillgradient; dev->addfont = polyops_addfont; dev->drawchar = polyops_drawchar; dev->drawlink = polyops_drawlink; dev->endpage = polyops_endpage; dev->finish = polyops_finish; i->out = out; /* create empty polygon */ i->polyunion = gfxpoly_from_stroke(0, 0, gfx_capButt, gfx_joinMiter, 0, DEFAULT_GRID); } swftools_0.9.2+git20130725.orig/lib/devices/file.c0000644000175000017500000001552412216332640020605 0ustar gawaingawain/* gfxdevice_file.cc Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #include #include #ifndef WIN32 #include #endif #include #include #include "../gfxdevice.h" typedef struct _internal { char*filename; FILE*fi; } internal_t; int file_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "setparameter %s=%s\n", key, value); return 1; } void file_startpage(struct _gfxdevice*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "startpage %d %d\n", width, height); } static void dumpline(FILE*fi, gfxline_t*line) { while(line) { if(line->type == gfx_moveTo) { fprintf(fi, "\tmoveTo %f %f\n", line->x, line->y); } else if(line->type == gfx_lineTo) { fprintf(fi, "\tlineTo %f %f\n", line->x, line->y); } else if(line->type == gfx_splineTo) { fprintf(fi, "\tsplineTo %f %f %f %f\n", line->sx, line->sy, line->x, line->y); } line = line->next; } } static void dumpmatrix (FILE*fi, gfxmatrix_t*matrix) { fprintf(fi, "| %5.2f %5.2f %5.2f\n", matrix->m00, matrix->m10, matrix->tx); fprintf(fi, "| %5.2f %5.2f %5.2f\n", matrix->m01, matrix->m11, matrix->ty); } static void dumpgradient (FILE*fi, gfxgradient_t*gradient) { while(gradient) { fprintf(fi, "pos %f: %02x%02x%02x%02x\n", gradient->pos, gradient->color.r, gradient->color.g, gradient->color.b, gradient->color.a); gradient = gradient->next; } } void file_startclip(struct _gfxdevice*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "startclip\n"); dumpline(i->fi, line); } void file_endclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "endclip\n"); } void file_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; char* jointTypes[] = {"joinMiter", "joinRound", "joinBevel"}; char* capTypes[] = {"capButt", "capRound", "capSquare"}; fprintf(i->fi, "stroke %f %f %s %s %02x%02x%02x%02x\n", width, miterLimit, capTypes[cap_style], jointTypes[joint_style], color->r, color->g, color->b, color->a ); dumpline(i->fi, line); } void file_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "fill %02x%02x%02x%02x\n", color->r, color->g, color->b, color->a); dumpline(i->fi, line); } void file_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "fillbitmap\n"); dumpmatrix(i->fi, matrix); dumpline(i->fi, line); } void file_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "fillgradient\n"); dumpmatrix(i->fi, matrix); dumpgradient(i->fi, gradient); dumpline(i->fi, line); } void file_addfont(struct _gfxdevice*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "addfont %s\n", font->id); } void file_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; } void file_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "drawlink %s\n", action); dumpline(i->fi, line); } void file_endpage(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; fprintf(i->fi, "endpage\n"); } typedef struct gfxresult_internal { FILE*fi; char*filename; } gfxresult_internal_t; void fileresult_destroy(struct _gfxresult*gfx) { gfxresult_internal_t*i = (gfxresult_internal_t*)gfx->internal; unlink(i->filename); free(i->filename);i->filename = 0; } int fileresult_save(struct _gfxresult*gfx, const char*filename) { gfxresult_internal_t*i = (gfxresult_internal_t*)gfx->internal; FILE*fi,*fo; fi = fopen(i->filename, "rb"); if(!fi) { perror(i->filename); return 0; } fo = fopen(filename, "wb"); if(!fo) { perror(filename); return 0; } char buf[4096]; while(!feof(fi)) { int l = fread(buf, 1, 4096, fi); if(l>0) { fwrite(buf, 1, l, fo); } else { break; } } fclose(fi); fclose(fo); return 0; } void* fileresult_get(struct _gfxresult*gfx, const char*name) { return 0; } gfxresult_t* file_finish(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; char*filename = strdup(i->filename); gfxresult_t*result = (gfxresult_t*)malloc(sizeof(gfxresult_t)); fclose(i->fi); i->fi = 0; if(i->filename) { free(i->filename); i->filename = 0; } free(dev->internal); dev->internal = 0; memset(result, 0, sizeof(gfxresult_t)); result->save = fileresult_save; result->get = fileresult_get; result->destroy = fileresult_destroy; result->internal = malloc(sizeof(gfxresult_internal_t)); ((gfxresult_internal_t*)result->internal)->filename = filename; return result; } void gfxdevice_file_init(gfxdevice_t*dev, char*filename) { internal_t*i = (internal_t*)malloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "file"; dev->internal = i; dev->setparameter = file_setparameter; dev->startpage = file_startpage; dev->startclip = file_startclip; dev->endclip = file_endclip; dev->stroke = file_stroke; dev->fill = file_fill; dev->fillbitmap = file_fillbitmap; dev->fillgradient = file_fillgradient; dev->addfont = file_addfont; dev->drawchar = file_drawchar; dev->drawlink = file_drawlink; dev->endpage = file_endpage; dev->finish = file_finish; i->fi = fopen(filename, "wb"); i->filename = strdup(filename); if(!i->fi) { fprintf(stderr, "Couldn't open file %s\n", filename); exit(1); } } swftools_0.9.2+git20130725.orig/lib/devices/file.h0000644000175000017500000000214712216332640020607 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_file_h__ #define __gfxdevice_file_h__ #ifdef __cplusplus extern "C" { #endif #include "../gfxdevice.h" void gfxdevice_file_init(gfxdevice_t*, char*filename); #ifdef __cplusplus } #endif #endif //gfxdevice_file_h__ swftools_0.9.2+git20130725.orig/lib/devices/text.h0000644000175000017500000000207212216332640020651 0ustar gawaingawain/* text.h Header file for dummy.c Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_text_h__ #define __gfxdevice_text_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_text_init(gfxdevice_t*dev); #ifdef __cplusplus } #endif #endif //__gfxdevice_text_h__ swftools_0.9.2+git20130725.orig/lib/devices/swf.c0000644000175000017500000027223712216332640020473 0ustar gawaingawain/* gfxdevice_swf.c Part of the swftools package. Copyright (c) 2001,2002,2003,2004,2005 Matthias Kramm Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "../../config.h" #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_IO_H #include #endif #ifdef HAVE_ASSERT_H #include #else #define assert(a) #endif #include #include "../mem.h" #include "../log.h" #include "../rfxswf.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "swf.h" #include "../gfxpoly.h" #include "../gfximage.h" #define CHARDATAMAX 1024 #define CHARMIDX 0 #define CHARMIDY 0 typedef struct _charatposition { int charid; SWFFONT*font; int x; int y; int size; RGBA color; } charatposition_t; typedef struct _chararray { charatposition_t chr[CHARDATAMAX+1]; int pos; struct _chararray *next; } chararray_t; typedef struct _charbuffer { MATRIX matrix; chararray_t*array; chararray_t*last; struct _charbuffer *next; } charbuffer_t; typedef struct _fontlist { SWFFONT *swffont; struct _fontlist*next; } fontlist_t; typedef long int twip; typedef struct _swfmatrix { double m11,m12,m21,m22,m31,m32; } swfmatrix_t; typedef struct _swfoutput_internal { gfxdevice_t*dev; // the gfxdevice object where this internal struct resides double config_dumpfonts; double config_ppmsubpixels; double config_jpegsubpixels; char hasbuttons; int config_invisibletexttofront; int config_dots; int config_simpleviewer; int config_opennewwindow; int config_ignoredraworder; int config_drawonlyshapes; int config_frameresets; int config_linknameurl; int config_jpegquality; int config_storeallcharacters; int config_enablezlib; int config_insertstoptag; int config_showimages; int config_watermark; int config_noclips; int config_flashversion; int config_reordertags; int config_showclipshapes; int config_splinemaxerror; int config_fontsplinemaxerror; int config_filloverlap; int config_local_with_network; int config_local_with_filesystem; int config_protect; int config_bboxvars; int config_disable_polygon_conversion; int config_normalize_polygon_positions; int config_alignfonts; double config_override_line_widths; double config_remove_small_polygons; char config_disablelinks; RGBA config_linkcolor; float config_minlinewidth; double config_caplinewidth; char* config_linktarget; char*config_internallinkfunction; char*config_externallinkfunction; char config_animate; double config_framerate; SWF* swf; fontlist_t* fontlist; char storefont; MATRIX page_matrix; TAG *tag; int currentswfid; int startids; int depth; int startdepth; int linewidth; SHAPE* shape; int shapeid; int textmode; int watermarks; int fillstyleid; int linestyleid; int swflastx; int swflasty; int lastwasfill; int shapeisempty; char fill; int min_x,max_x; int min_y,max_y; TAG* cliptags[128]; int clipshapes[128]; U32 clipdepths[128]; int clippos; /* image cache */ /* int pic_xids[1024]; int pic_yids[1024]; int pic_ids[1024]; int pic_width[1024]; int pic_height[1024]; int picpos; */ int frameno; int lastframeno; char fillstylechanged; int jpeg; //next image type int bboxrectpos; SRECT bboxrect; SRECT pagebbox; gfxline_t*stored_clipshapes; //for config_showclipshapes charbuffer_t* chardata; charbuffer_t* topchardata; //chars supposed to be above everything else int firstpage; char pagefinished; char overflow; int current_font_size; MATRIX fontmatrix; double lastfontm11,lastfontm12,lastfontm21,lastfontm22; SWFFONT *swffont; RGBA strokergb; RGBA fillrgb; int drawmode; int shapeposx; int shapeposy; char* mark; } swfoutput_internal; static const int NO_FONT3=0; static void swf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform); static int swf_setparameter(gfxdevice_t*driver, const char*key, const char*value); static void swf_drawstroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit); static void swf_startclip(gfxdevice_t*dev, gfxline_t*line); static void swf_endclip(gfxdevice_t*dev); static void swf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit); static void swf_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color); static void swf_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix); static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix); static void swf_addfont(gfxdevice_t*dev, gfxfont_t*font); static void swf_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text); static void swf_startframe(gfxdevice_t*dev, int width, int height); static void swf_endframe(gfxdevice_t*dev); static void swfoutput_namedlink(gfxdevice_t*dev, char*name, gfxline_t*points); static void swfoutput_linktopage(gfxdevice_t*dev, int page, gfxline_t*points); static void swfoutput_linktourl(gfxdevice_t*dev, const char*url, gfxline_t*points); static gfxresult_t* swf_finish(gfxdevice_t*driver); static swfoutput_internal* init_internal_struct() { swfoutput_internal*i = (swfoutput_internal*)malloc(sizeof(swfoutput_internal)); memset(i, 0, sizeof(swfoutput_internal)); i->storefont = 0; i->currentswfid = 0; i->depth = 0; i->overflow = 0; i->startdepth = 0; i->linewidth = 0; i->shapeid = -1; i->textmode = 0; i->frameno = 0; i->lastframeno = 0; i->mark = 0; i->fillstyleid; i->linestyleid; i->swflastx=0; i->swflasty=0; i->lastwasfill = 0; i->shapeisempty = 1; i->fill = 0; i->clippos = 0; i->fillstylechanged = 0; i->bboxrectpos = -1; i->chardata = 0; i->firstpage = 1; i->pagefinished = 1; i->config_disablelinks=0; i->config_dumpfonts=0; i->config_ppmsubpixels=0; i->config_jpegsubpixels=0; i->config_opennewwindow=1; i->config_ignoredraworder=0; i->config_drawonlyshapes=0; i->config_jpegquality=85; i->config_storeallcharacters=0; i->config_dots=1; i->config_enablezlib=0; i->config_insertstoptag=0; i->config_flashversion=6; i->config_framerate=0.25; i->config_splinemaxerror=1; i->config_fontsplinemaxerror=1; i->config_filloverlap=0; i->config_local_with_network=0; i->config_local_with_filesystem=0; i->config_protect=0; i->config_bboxvars=0; i->config_override_line_widths=0; i->config_showclipshapes=0; i->config_minlinewidth=0.05; i->config_caplinewidth=1; i->config_linktarget=0; i->config_internallinkfunction=0; i->config_externallinkfunction=0; i->config_reordertags=1; i->config_linknameurl=0; i->config_linkcolor.r = i->config_linkcolor.g = i->config_linkcolor.b = 255; i->config_linkcolor.a = 0x40; return i; }; static int id_error = 0; static U16 getNewID(gfxdevice_t* dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->currentswfid == 65535) { if(!id_error) { msg(" ID Table overflow"); msg(" This file is too complex to render- SWF only supports 65536 shapes at once"); } id_error=1; i->overflow = 1; exit(1); } return ++i->currentswfid; } static U16 getNewDepth(gfxdevice_t* dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->depth == 65520) { if(!id_error) { msg(" Depth Table overflow"); msg(" This file is too complex to render- SWF only supports 65536 shapes at once"); } id_error=1; i->overflow = 1; exit(1); } return ++i->depth; } static void startshape(gfxdevice_t* dev); static void starttext(gfxdevice_t* dev); static void endshape(gfxdevice_t* dev); static void endtext(gfxdevice_t* dev); typedef struct _plotxy { double x,y; } plotxy_t; static inline int twipsnap(double f) { /* if(f < -0x40000000/20.0) { fprintf(stderr, "Warning: Coordinate underflow (%f)\n", f); f = -0x40000000/20.0; } else if(f>0x3fffffff/20.0) { fprintf(stderr, "Warning: Coordinate overflow (%f)\n", f); f = 0x3fffffff/20.0; }*/ /* clamp coordinates to a rectangle with the property that we can represent a line from the upper left corner to the upper right corner using no more than 64 strokes */ const double min = -(1<<(18+4))/20.0; const double max = ((1<<(18+4))-1)/20.0; if(f < min) { fprintf(stderr, "Warning: Coordinate underflow (%f)\n", f); f = min; } else if(f>max) { fprintf(stderr, "Warning: Coordinate overflow (%f)\n", f); f = max; } return (int)(f*20); } // write a move-to command into the swf static int movetoxy(gfxdevice_t*dev, TAG*tag, plotxy_t p0) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int rx = twipsnap(p0.x); int ry = twipsnap(p0.y); if(rx!=i->swflastx || ry!=i->swflasty || i->fillstylechanged) { swf_ShapeSetMove (tag, i->shape, rx,ry); i->fillstylechanged = 0; i->swflastx=rx; i->swflasty=ry; return 1; } return 0; } static int moveto(gfxdevice_t*dev, TAG*tag, double x, double y) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; plotxy_t p; p.x = x; p.y = y; return movetoxy(dev, tag, p); } static void addPointToBBox(gfxdevice_t*dev, int px, int py) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; SPOINT p; p.x = px; p.y = py; if(i->fill) { swf_ExpandRect(&i->bboxrect, p); } else { swf_ExpandRect3(&i->bboxrect, p, i->linewidth*3/2); } } /*static void plot(gfxdevice_t*dev, int x, int y, TAG*tag) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int width = i->linewidth/4; if(width > 5) width = 5; ////square //swf_ShapeSetLine(tag, i->shape,-width,-width); //swf_ShapeSetLine(tag, i->shape,width*2,0); //swf_ShapeSetLine(tag, i->shape,0,width*2); //swf_ShapeSetLine(tag, i->shape,-width*2,0); //swf_ShapeSetLine(tag, i->shape,0,-width*2); //swf_ShapeSetLine(tag, i->shape,width,width); // diamond swf_ShapeSetLine(tag, i->shape,-width,0); swf_ShapeSetLine(tag, i->shape,width,-width); swf_ShapeSetLine(tag, i->shape,width,width); swf_ShapeSetLine(tag, i->shape,-width,width); swf_ShapeSetLine(tag, i->shape,-width,-width); swf_ShapeSetLine(tag, i->shape,width,0); addPointToBBox(dev, x-width ,y-width); addPointToBBox(dev, x+width ,y+width); }*/ // write a line-to command into the swf static void linetoxy(gfxdevice_t*dev, TAG*tag, plotxy_t p0) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int px = twipsnap(p0.x); int py = twipsnap(p0.y); int rx = (px-i->swflastx); int ry = (py-i->swflasty); if(rx|ry) { swf_ShapeSetLine (tag, i->shape, rx,ry); addPointToBBox(dev, i->swflastx,i->swflasty); addPointToBBox(dev, px,py); } /* this is a nice idea, but doesn't work with current flash players (the pixel will be invisible if they're not precisely on a pixel boundary) Besides, we should only do this if this lineto itself is again followed by a "move". else if(!i->fill && i->config_dots) { // treat lines of length 0 as plots, making them // at least 1 twip wide so Flash will display them //plot(dev, i->swflastx, i->swflasty, tag); swf_ShapeSetLine (tag, i->shape, rx+1,ry); }*/ i->shapeisempty = 0; i->swflastx+=rx; i->swflasty+=ry; } static void lineto(gfxdevice_t*dev, TAG*tag, double x, double y) { plotxy_t p; p.x = x; p.y = y; linetoxy(dev,tag, p); } // write a spline-to command into the swf static void splineto(gfxdevice_t*dev, TAG*tag, plotxy_t control,plotxy_t end) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int lastlastx = i->swflastx; int lastlasty = i->swflasty; int cx = (twipsnap(control.x)-i->swflastx); int cy = (twipsnap(control.y)-i->swflasty); i->swflastx += cx; i->swflasty += cy; int ex = (twipsnap(end.x)-i->swflastx); int ey = (twipsnap(end.y)-i->swflasty); i->swflastx += ex; i->swflasty += ey; if((cx || cy) && (ex || ey)) { swf_ShapeSetCurve(tag, i->shape, cx,cy,ex,ey); addPointToBBox(dev, lastlastx ,lastlasty ); addPointToBBox(dev, lastlastx+cx,lastlasty+cy); addPointToBBox(dev, lastlastx+cx+ex,lastlasty+cy+ey); } else if(cx || cy || ex || ey) { swf_ShapeSetLine(tag, i->shape, cx+ex,cy+ey); addPointToBBox(dev, lastlastx ,lastlasty ); addPointToBBox(dev, lastlastx+cx,lastlasty+cy); addPointToBBox(dev, lastlastx+cx+ex,lastlasty+cy+ey); } i->shapeisempty = 0; } /* write a line, given two points and the transformation matrix. */ /*static void line(gfxdevice_t*dev, TAG*tag, plotxy_t p0, plotxy_t p1) { moveto(dev, tag, p0); lineto(dev, tag, p1); }*/ void resetdrawer(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; i->swflastx = 0; i->swflasty = 0; } static void stopFill(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->lastwasfill!=0) { swf_ShapeSetStyle(i->tag,i->shape,i->linestyleid,0x8000,0); i->fillstylechanged = 1; i->lastwasfill = 0; } } static void startFill(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->lastwasfill!=1) { swf_ShapeSetStyle(i->tag,i->shape,0x8000,i->fillstyleid,0); i->fillstylechanged = 1; i->lastwasfill = 1; } } static inline int colorcompare(RGBA*a,RGBA*b) { if(a->r!=b->r || a->g!=b->g || a->b!=b->b || a->a!=b->a) { return 0; } return 1; } static SRECT getcharacterbbox(chararray_t*chardata, MATRIX* m, int flashversion) { SRECT r; char debug = 0; memset(&r, 0, sizeof(r)); int t; if(debug) printf("\n"); double div = 1.0 / 1024.0; if(flashversion>=8 && !NO_FONT3) { div = 1.0 / 20480.0; } while(chardata) { for(t=0;tpos;t++) { charatposition_t*chr = &chardata->chr[t]; SRECT b = chr->font->layout->bounds[chr->charid]; b.xmin = floor((b.xmin*(double)chr->size) *div); b.ymin = floor((b.ymin*(double)chr->size) *div); b.xmax = ceil((b.xmax*(double)chr->size) *div); b.ymax = ceil((b.ymax*(double)chr->size) *div); b.xmin += chr->x; b.ymin += chr->y; b.xmax += chr->x; b.ymax += chr->y; /* until we solve the INTERNAL_SCALING problem (see below) make sure the bounding box is big enough */ b.xmin -= 20; b.ymin -= 20; b.xmax += 20; b.ymax += 20; b = swf_TurnRect(b, m); if(debug) printf("(%f,%f,%f,%f) -> (%f,%f,%f,%f) [font %d, char %d]\n", chr->font->layout->bounds[chr->charid].xmin/20.0, chr->font->layout->bounds[chr->charid].ymin/20.0, chr->font->layout->bounds[chr->charid].xmax/20.0, chr->font->layout->bounds[chr->charid].ymax/20.0, b.xmin/20.0, b.ymin/20.0, b.xmax/20.0, b.ymax/20.0, chr->font->id, chr->charid); swf_ExpandRect2(&r, &b); } chardata = chardata->next; } if(debug) printf("-----> (%f,%f,%f,%f)\n", r.xmin/20.0, r.ymin/20.0, r.xmax/20.0, r.ymax/20.0); return r; } static chararray_t*chararray_reverse(chararray_t*buf) { chararray_t*prev = 0; while(buf) { chararray_t*next = buf->next; buf->next = prev; prev = buf; buf = next; } return prev; } static void chararray_writetotag(chararray_t*_chardata, TAG*tag) { SWFFONT font; RGBA color; color.r = _chardata?_chardata->chr[0].color.r^255:0; color.g = 0; color.b = 0; color.a = 0; SWFFONT*lastfont; int lastx; int lasty; int lastsize; int lastchar; int charids[128]; int charadvance[128]; int charstorepos; int pass; int glyphbits=1; //TODO: can this be zero? int advancebits=1; if(tag->id != ST_DEFINETEXT && tag->id != ST_DEFINETEXT2) { msg(" internal error: charbuffer_put needs an text tag, not %d\n",tag->id); exit(1); } if(!_chardata) { msg(" charbuffer_put called with zero characters"); } for(pass = 0; pass < 2; pass++) { charstorepos = 0; lastfont = 0; lastx = CHARMIDX; lasty = CHARMIDY; lastsize = -1; lastchar = -1; if(pass==1) { advancebits++; // add sign bit swf_SetU8(tag, glyphbits); swf_SetU8(tag, advancebits); } chararray_t*chardata = _chardata; while(chardata) { int t; assert(!chardata->next || chardata->pos == CHARDATAMAX); assert(chardata->pos); int to = chardata->next?chardata->pos-1:chardata->pos; for(t=0;t<=to;t++) { char islast = t==chardata->pos; charatposition_t*chr = &chardata->chr[t]; if(lastfont != chr->font || lastx!=chr->x || lasty!=chr->y || !colorcompare(&color, &chardata->chr[t].color) || charstorepos==127 || lastsize != chardata->chr[t].size || islast) { if(charstorepos && pass==0) { int s; for(s=0;s=(1<=(1<writeBit = 0; // Q&D swf_SetBits(tag, 0, 1); // GLYPH Record swf_SetBits(tag, charstorepos, 7); // number of glyphs int s; for(s=0;sx || lasty != chr->y) { newx = chr->x; newy = chr->y; if(newx == 0) newx = SET_TO_ZERO; if(newy == 0) newy = SET_TO_ZERO; } if(!colorcompare(&color, &chr->color)) { color = chr->color; newcolor = &color; } font.id = chr->font->id; if(lastfont != chr->font || lastsize != chr->size) newfont = &font; tag->writeBit = 0; // Q&D swf_TextSetInfoRecord(tag, newfont, chr->size, newcolor, newx, newy); } lastfont = chr->font; lastx = chr->x; lasty = chr->y; lastsize = chr->size; } if(islast) break; int nextx = chr->x; if(tpos-1) nextx = chardata->chr[t+1].x; if(t==chardata->pos-1 && chardata->next) nextx = chardata->next->chr[0].x; int dx = nextx-chr->x; int advance; if(dx>=0 && (dx<(1<<(advancebits-1)) || pass==0)) { advance = dx; lastx=nextx; } else { advance = 0; lastx=chr->x; } charids[charstorepos] = chr->charid; charadvance[charstorepos] = advance; lastchar = chr->charid; charstorepos ++; } chardata = chardata->next; } } } static void chararray_destroy(chararray_t*chr) { while(chr) { chararray_t*next = chr->next; chr->next = 0; free(chr); chr = next; } } static inline int matrix_diff(MATRIX*m1, MATRIX*m2) { return memcmp(m1,m2,sizeof(MATRIX)); } static charbuffer_t*charbuffer_append(charbuffer_t*buf, SWFFONT*font, int charid, int x,int y, int size, RGBA color, MATRIX*m) { if(!buf || matrix_diff(&buf->matrix,m)) { charbuffer_t*n = rfx_calloc(sizeof(charbuffer_t)); n->matrix = *m; n->next = buf; buf = n; } if(!buf->last || buf->last->pos == CHARDATAMAX) { chararray_t*n = rfx_calloc(sizeof(chararray_t)); if(!buf->array) { buf->array = buf->last = n; } else { buf->last->next = n; buf->last = n; } } chararray_t*a = buf->last; a->chr[a->pos].font = font; a->chr[a->pos].charid = charid; a->chr[a->pos].x = x; a->chr[a->pos].y = y; a->chr[a->pos].color = color; a->chr[a->pos].size = size; a->pos++; return buf; } /* Notice: we can only put chars in the range -1639,1638 (-32768/20,32768/20). So if we set this value to high, the char coordinates will overflow. If we set it to low, however, the char positions will be inaccurate */ #define GLYPH_SCALE 1 static void chararray_writetodev(gfxdevice_t*dev, chararray_t*array, MATRIX*matrix, char invisible) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int textid = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINETEXT2); swf_SetU16(i->tag, textid); SRECT r; r = getcharacterbbox(array, matrix, i->config_flashversion); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetMatrix(i->tag, matrix); msg(" Placing text as ID %d", textid); chararray_writetotag(array, i->tag); i->chardata = 0; swf_SetU8(i->tag,0); if(i->swf->fileVersion >= 8) { i->tag = swf_InsertTag(i->tag, ST_CSMTEXTSETTINGS); swf_SetU16(i->tag, textid); //swf_SetU8(i->tag, /*subpixel grid*/(2<<3)|/*flashtype*/0x40); swf_SetU8(i->tag, /*grid*/(1<<3)|/*flashtype*/0x40); //swf_SetU8(i->tag, /*no grid*/(0<<3)|/*flashtype*/0x40); swf_SetU32(i->tag, 0);//thickness swf_SetU32(i->tag, 0);//sharpness //swf_SetU32(i->tag, 0x20000);//thickness //swf_SetU32(i->tag, 0x800000);//sharpness swf_SetU8(i->tag, 0);//reserved } if(invisible && i->config_flashversion>=8) { i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT3); swf_ObjectPlaceBlend(i->tag,textid,getNewDepth(dev),&i->page_matrix,NULL,NULL,BLENDMODE_MULTIPLY); } else { i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); swf_ObjectPlace(i->tag,textid,getNewDepth(dev),&i->page_matrix,NULL,NULL); } } static void charbuffer_writetodevandfree(gfxdevice_t*dev, charbuffer_t*buf, char invisible) { while(buf) { charbuffer_t*next = buf->next;buf->next = 0; chararray_writetodev(dev, buf->array, &buf->matrix, invisible); chararray_destroy(buf->array); free(buf); buf = next; } } static void endtext(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!i->textmode) return; charbuffer_writetodevandfree(dev, i->chardata, 0);i->chardata = 0; i->textmode = 0; } static int watermark2_width=47; static int watermark2_height=11; static int watermark2[47] = {95,1989,71,0,2015,337,1678,0,2015,5,1921,320,1938,25,2006,1024, 1042,21,13,960,1039,976,8,2000,1359,1088,31,1989,321,1728,0,1152, 1344,832,0,1984,0,896,1088,1088,896,0,1984,128,256,512,1984}; static void draw_watermark(gfxdevice_t*dev, gfxbbox_t r, char drawall) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; double wx = r.xmax / 5.0; double tx = r.xmax*4.0 / 5.0; double ty = r.ymax-wx*watermark2_height/watermark2_width; double sx = (r.xmax - tx) / watermark2_width; double sy = (r.ymax - ty) / watermark2_height; double px = sx-0.5; double py = sy-0.5; if(ty > 0 && px > 1.0 && py > 1.0) { int x,y; for(y=0;y>y)&1)) { if(!drawall && rand()%5) continue; unsigned int b = rand(); moveto(dev, i->tag, x*sx+tx+((b>>1)&1)/20.0, y*sy+ty+((b>>3)&1)/20.0); lineto(dev, i->tag, x*sx+px+tx+((b>>2)&1)/20.0, y*sy+ty+((b>>3)&1)/20.0); lineto(dev, i->tag, x*sx+px+tx+((b>>2)&1)/20.0, y*sy+py+ty+((b>>4)&1)/20.0); lineto(dev, i->tag, x*sx+tx+((b>>1)&1)/20.0, y*sy+py+ty+((b>>4)&1)/20.0); lineto(dev, i->tag, x*sx+tx+((b>>1)&1)/20.0, y*sy+ty+((b>>3)&1)/20.0); } } } } static void swfoutput_setfillcolor(gfxdevice_t* dev, U8 r, U8 g, U8 b, U8 a) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->fillrgb.r == r && i->fillrgb.g == g && i->fillrgb.b == b && i->fillrgb.a == a) return; if(i->shapeid>=0) endshape(dev); i->fillrgb.r = r; i->fillrgb.g = g; i->fillrgb.b = b; i->fillrgb.a = a; } static void insert_watermark(gfxdevice_t*dev, char drawall) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!drawall && i->watermarks>20) return; endshape(dev); endtext(dev); if(drawall) { swfoutput_setfillcolor(dev, 0,0,255,192); } else { swfoutput_setfillcolor(dev, rand(),rand(),rand(),(rand()&127)+128); } startshape(dev); startFill(dev); gfxbbox_t r; r.xmin = r.ymin = 0; r.xmax = i->max_x; r.ymax = i->max_y; draw_watermark(dev, r, drawall); endshape(dev); i->watermarks++; } static void drawoutline(gfxdevice_t*dev, gfxline_t*line); static void endpage(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->pagefinished) return; if(i->shapeid>=0) endshape(dev); if(i->textmode) endtext(dev); if(i->topchardata) { charbuffer_writetodevandfree(dev, i->topchardata, 1); i->topchardata=0; } while(i->clippos) dev->endclip(dev); if(i->stored_clipshapes) { // in case of config_showclipshapes drawoutline(dev, i->stored_clipshapes); } if(i->config_watermark) { insert_watermark(dev, 1); } i->pagefinished = 1; } static void addViewer(gfxdevice_t* dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; SHAPE*s; RGBA button_colors[3]= {{0xbf,0x00,0x00,0x80},{0xbf,0x20,0x20,0xc0}, {0xbf,0xc0,0xc0,0xff}}; int ids[6]; int button_sizex = 20; int button_sizey = 20; int t; RGBA black = {255,0,0,0}; for(t=0;t<6;t++) { i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); swf_ShapeNew(&s); int ls1 = swf_ShapeAddLineStyle(s,40,&black); int fs1 = swf_ShapeAddSolidFillStyle(s,&button_colors[t/2]); int shapeid = ids[t] = getNewID(dev); swf_SetU16(i->tag,shapeid); SRECT r; r.xmin = -20*button_sizex; r.xmax = 20*button_sizex; r.ymin = 0; r.ymax = 40*button_sizey; swf_SetRect(i->tag,&r); // set shape bounds swf_SetShapeHeader(i->tag,s); // write all styles to tag swf_ShapeSetAll(i->tag,s,0*button_sizex,0,ls1,fs1,0); swf_ShapeSetLine(i->tag,s,(1-(t&1)*2)*20*button_sizex,20*button_sizey); swf_ShapeSetLine(i->tag,s,-(1-(t&1)*2)*20*button_sizex,20*button_sizey); swf_ShapeSetLine(i->tag,s,0,-40*button_sizey); swf_ShapeSetEnd(i->tag); // finish drawing swf_ShapeFree(s); // clean shape structure (which isn't needed anymore after writing the tag) } ActionTAG*a1=0,*a2=0,*a3=0; a1 = action_NextFrame(a1); a1 = action_Stop(a1); a1 = action_End(a1); a2 = action_PreviousFrame(a2); a2 = action_Stop(a2); a2 = action_End(a2); a3 = action_Stop(a3); a3 = action_End(a3); i->tag = swf_InsertTag(i->tag, ST_DOACTION); swf_ActionSet(i->tag,a3); i->tag = swf_InsertTag(i->tag,ST_DEFINEBUTTON); int buttonid1 = getNewID(dev); swf_SetU16(i->tag, buttonid1); swf_ButtonSetRecord(i->tag,BS_UP|BS_HIT,ids[0],1,NULL,NULL); swf_ButtonSetRecord(i->tag,BS_OVER,ids[2],1,NULL,NULL); swf_ButtonSetRecord(i->tag,BS_DOWN,ids[4],1,NULL,NULL); swf_SetU8(i->tag,0); // end of button records swf_ActionSet(i->tag,a1); i->tag = swf_InsertTag(i->tag,ST_DEFINEBUTTON); int buttonid2 = getNewID(dev); swf_SetU16(i->tag, buttonid2); swf_ButtonSetRecord(i->tag,BS_UP|BS_HIT,ids[1],1,NULL,NULL); swf_ButtonSetRecord(i->tag,BS_OVER,ids[3],1,NULL,NULL); swf_ButtonSetRecord(i->tag,BS_DOWN,ids[5],1,NULL,NULL); swf_SetU8(i->tag,0); // end of button records swf_ActionSet(i->tag,a2); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); MATRIX m; swf_GetMatrix(0, &m); m.tx = button_sizex*20+200; swf_ObjectPlace(i->tag, buttonid2, 65534,&m,0,0); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); m.tx = button_sizex*20+200+200; swf_ObjectPlace(i->tag, buttonid1, 65535,&m,0,0); } void swf_startframe(gfxdevice_t*dev, int width, int height) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->firstpage) { if(i->config_protect) { i->tag = swf_InsertTag(i->tag, ST_PROTECT); i->config_protect = 0; } if(i->config_simpleviewer) { addViewer(dev); } } if(!i->firstpage && !i->pagefinished) endpage(dev); msg(" Starting new SWF page of size %dx%d", width, height); swf_GetMatrix(0, &i->page_matrix); i->page_matrix.tx = 0; i->page_matrix.ty = 0; i->min_x = 0; i->min_y = 0; i->max_x = width; i->max_y = height; i->watermarks = 0; /* create a bbox structure with the page size. This is used for clipping shape and text bounding boxes. As we don't want to generate bounding boxes which extend beyond the movie size (in order to not confuse Flash), we clip everything against i->pagebbox */ i->pagebbox.xmin = 0; i->pagebbox.ymin = 0; i->pagebbox.xmax = width*20; i->pagebbox.ymax = height*20; /* increase SWF's bounding box */ swf_ExpandRect2(&i->swf->movieSize, &i->pagebbox); i->lastframeno = i->frameno; i->firstpage = 0; i->pagefinished = 0; i->chardata = 0; } void swf_endframe(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!i->pagefinished) endpage(dev); if( (i->swf->fileVersion <= 8) && (i->config_insertstoptag) ) { ActionTAG*atag=0; atag = action_Stop(atag); atag = action_End(atag); i->tag = swf_InsertTag(i->tag,ST_DOACTION); swf_ActionSet(i->tag,atag); } i->tag = swf_InsertTag(i->tag,ST_SHOWFRAME); i->frameno ++; for(i->depth;i->depth>i->startdepth;i->depth--) { i->tag = swf_InsertTag(i->tag,ST_REMOVEOBJECT2); swf_SetU16(i->tag,i->depth); } i->depth = i->startdepth; if(i->config_frameresets) { for(i->currentswfid;i->currentswfid>i->startids;i->currentswfid--) { i->tag = swf_InsertTag(i->tag,ST_FREECHARACTER); swf_SetU16(i->tag,i->currentswfid); } i->currentswfid = i->startids; } } static void setBackground(gfxdevice_t*dev, int x1, int y1, int x2, int y2) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; RGBA rgb; rgb.a = rgb.r = rgb.g = rgb.b = 0xff; SRECT r; SHAPE* s; int ls1=0,fs1=0; int shapeid = getNewID(dev); r.xmin = x1; r.ymin = y1; r.xmax = x2; r.ymax = y2; i->tag = swf_InsertTag(i->tag, ST_DEFINESHAPE); swf_ShapeNew(&s); fs1 = swf_ShapeAddSolidFillStyle(s, &rgb); swf_SetU16(i->tag,shapeid); swf_SetRect(i->tag,&r); swf_SetShapeHeader(i->tag,s); swf_ShapeSetAll(i->tag,s,x1,y1,ls1,fs1,0); swf_ShapeSetLine(i->tag,s,(x2-x1),0); swf_ShapeSetLine(i->tag,s,0,(y2-y1)); swf_ShapeSetLine(i->tag,s,(x1-x2),0); swf_ShapeSetLine(i->tag,s,0,(y1-y2)); swf_ShapeSetEnd(i->tag); swf_ShapeFree(s); i->tag = swf_InsertTag(i->tag, ST_PLACEOBJECT2); swf_ObjectPlace(i->tag,shapeid,getNewDepth(dev),0,0,0); i->tag = swf_InsertTag(i->tag, ST_PLACEOBJECT2); swf_ObjectPlaceClip(i->tag,shapeid,getNewDepth(dev),0,0,0,65535); } /* initialize the swf writer */ void gfxdevice_swf_init(gfxdevice_t* dev) { memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "swf"; dev->internal = init_internal_struct(); // set config to default values dev->startpage = swf_startframe; dev->endpage = swf_endframe; dev->finish = swf_finish; dev->fillbitmap = swf_fillbitmap; dev->setparameter = swf_setparameter; dev->stroke = swf_stroke; dev->startclip = swf_startclip; dev->endclip = swf_endclip; dev->fill = swf_fill; dev->fillgradient = swf_fillgradient; dev->addfont = swf_addfont; dev->drawchar = swf_drawchar; dev->drawlink = swf_drawlink; swfoutput_internal*i = (swfoutput_internal*)dev->internal; i->dev = dev; msg(" initializing swf output\n", i->max_x,i->max_y); i->swffont = 0; i->swf = (SWF*)rfx_calloc(sizeof(SWF)); i->swf->fileVersion = 0; i->swf->frameRate = 0x80; i->swf->movieSize.xmin = 0; i->swf->movieSize.ymin = 0; i->swf->movieSize.xmax = 0; i->swf->movieSize.ymax = 0; if(i->config_local_with_filesystem) { i->swf->fileAttributes = 8; // as3, local-with-filesystem } else { i->swf->fileAttributes = 9; // as3, local-with-network } i->swf->firstTag = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); i->tag = i->swf->firstTag; RGBA rgb; rgb.a = rgb.r = rgb.g = rgb.b = 0xff; //rgb.r = 0; swf_SetRGB(i->tag,&rgb); i->startdepth = i->depth = 0; i->startids = i->currentswfid = 0; } static void startshape(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; SRECT r; if(i->shapeid>=0) return; //if(i->chardatapos && i->chardata[i->chardatapos-1].color.a) endtext(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); swf_ShapeNew(&i->shape); i->linestyleid = swf_ShapeAddLineStyle(i->shape,i->linewidth,&i->strokergb); i->fillstyleid = swf_ShapeAddSolidFillStyle(i->shape,&i->fillrgb); if(i->mark) { RGBA markcol = {0,i->mark[0],i->mark[1],i->mark[2]}; swf_ShapeAddSolidFillStyle(i->shape,&markcol); } i->shapeid = getNewID(dev); msg(" Using shape id %d", i->shapeid); swf_SetU16(i->tag,i->shapeid); // ID i->bboxrectpos = i->tag->len; /* changed later */ swf_SetRect(i->tag,&i->pagebbox); memset(&i->bboxrect, 0, sizeof(i->bboxrect)); swf_SetShapeStyles(i->tag,i->shape); swf_ShapeCountBits(i->shape,NULL,NULL); swf_SetShapeBits(i->tag,i->shape); /* TODO: do we really need this? */ //swf_ShapeSetAll(i->tag,i->shape,/*x*/0,/*y*/0,i->linestyleid,0,0); //swf_ShapeSetAll(i->tag,i->shape,/*x*/UNDEFINED_COORD,/*y*/UNDEFINED_COORD,i->linestyleid,0,0); i->swflastx=i->swflasty=UNDEFINED_COORD; i->lastwasfill = -1; i->shapeisempty = 1; } static void starttext(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->shapeid>=0) endshape(dev); if(i->config_watermark) { insert_watermark(dev, 0); } i->textmode = 1; i->swflastx=i->swflasty=0; } /* TODO: move to ../lib/rfxswf */ void changeRect(gfxdevice_t*dev, TAG*tag, int pos, SRECT*newrect) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; /* determine length of old rect */ tag->pos = pos; tag->readBit = 0; SRECT old; swf_GetRect(tag, &old); swf_ResetReadBits(tag); int pos_end = tag->pos; int len = tag->len - pos_end; U8*data = (U8*)malloc(len); memcpy(data, &tag->data[pos_end], len); tag->writeBit = 0; tag->len = pos; swf_SetRect(tag, newrect); swf_SetBlock(tag, data, len); free(data); tag->pos = tag->readBit = 0; } void cancelshape(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; /* delete old shape tag */ TAG*todel = i->tag; i->tag = i->tag->prev; swf_DeleteTag(0, todel); if(i->shape) {swf_ShapeFree(i->shape);i->shape=0;} i->shapeid = -1; i->bboxrectpos = -1; // i->currentswfid--; // doesn't work, for some reason } void fixAreas(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!i->shapeisempty && i->fill && (i->bboxrect.xmin == i->bboxrect.xmax || i->bboxrect.ymin == i->bboxrect.ymax) && i->config_minlinewidth >= 0.001 ) { msg(" Shape has size 0: width=%.2f height=%.2f", (i->bboxrect.xmax-i->bboxrect.xmin)/20.0, (i->bboxrect.ymax-i->bboxrect.ymin)/20.0 ); SRECT r = i->bboxrect; if(r.xmin == r.xmax && r.ymin == r.ymax) { /* this thing comes down to a single dot- nothing to fix here */ return; } cancelshape(dev); RGBA save_col = i->strokergb; int save_width = i->linewidth; i->strokergb = i->fillrgb; i->linewidth = (int)(i->config_minlinewidth*20); if(i->linewidth==0) i->linewidth = 1; startshape(dev); stopFill(dev); moveto(dev, i->tag, r.xmin/20.0,r.ymin/20.0); lineto(dev, i->tag, r.xmax/20.0,r.ymax/20.0); i->strokergb = save_col; i->linewidth = save_width; } } static void endshape_noput(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->shapeid<0) return; //changeRect(dev, i->tag, i->bboxrectpos, &i->bboxrect); i->shapeid = -1; if(i->shape) { swf_ShapeFree(i->shape); i->shape=0; } i->fill=0; i->shapeposx=0; i->shapeposy=0; } static void endshape(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->shapeid<0) return; fixAreas(dev); if(i->shapeisempty || /*bbox empty?*/ (i->bboxrect.xmin == i->bboxrect.xmax && i->bboxrect.ymin == i->bboxrect.ymax)) { // delete the shape again, we didn't do anything msg(" cancelling shape: bbox is (%f,%f,%f,%f)", i->bboxrect.xmin /20.0, i->bboxrect.ymin /20.0, i->bboxrect.xmax /20.0, i->bboxrect.ymax /20.0 ); cancelshape(dev); return; } swf_ShapeSetEnd(i->tag); SRECT r = swf_ClipRect(i->pagebbox, i->bboxrect); changeRect(dev, i->tag, i->bboxrectpos, &r); msg(" Placing shape ID %d", i->shapeid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); MATRIX m = i->page_matrix; m.tx += i->shapeposx; m.ty += i->shapeposy; swf_ObjectPlace(i->tag,i->shapeid,getNewDepth(dev),&m,NULL,NULL); swf_ShapeFree(i->shape); i->shape = 0; i->shapeid = -1; i->bboxrectpos = -1; i->fill=0; i->shapeposx=0; i->shapeposy=0; } void wipeSWF(SWF*swf) { TAG*tag = swf->firstTag; while(tag) { TAG*next = tag->next; if(tag->id != ST_SETBACKGROUNDCOLOR && tag->id != ST_END && tag->id != ST_DOACTION && tag->id != ST_SHOWFRAME) { swf_DeleteTag(swf, tag); } tag = next; } } void swfoutput_finalize(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->tag && i->tag->id == ST_END) return; //already done i->swf->fileVersion = i->config_flashversion; i->swf->frameRate = i->config_framerate*0x100; if(i->config_bboxvars) { TAG* tag = swf_InsertTag(i->swf->firstTag, ST_DOACTION); ActionTAG*a = 0; a = action_PushString(a, "xmin"); a = action_PushFloat(a, i->swf->movieSize.xmin / 20.0); a = action_SetVariable(a); a = action_PushString(a, "ymin"); a = action_PushFloat(a, i->swf->movieSize.ymin / 20.0); a = action_SetVariable(a); a = action_PushString(a, "xmax"); a = action_PushFloat(a, i->swf->movieSize.xmax / 20.0); a = action_SetVariable(a); a = action_PushString(a, "ymax"); a = action_PushFloat(a, i->swf->movieSize.ymax / 20.0); a = action_SetVariable(a); a = action_PushString(a, "width"); a = action_PushFloat(a, (i->swf->movieSize.xmax - i->swf->movieSize.xmin) / 20.0); a = action_SetVariable(a); a = action_PushString(a, "height"); a = action_PushFloat(a, (i->swf->movieSize.ymax - i->swf->movieSize.ymin) / 20.0); a = action_SetVariable(a); a = action_End(a); swf_ActionSet(tag, a); swf_ActionFree(a); } if(i->mark) { free(i->mark);i->mark = 0; } endpage(dev); fontlist_t *iterator = i->fontlist; char use_font3 = i->config_flashversion>=8 && !NO_FONT3; while(iterator) { TAG*mtag = i->swf->firstTag; if(iterator->swffont) { if(!i->config_storeallcharacters) { msg(" Reducing font %s", iterator->swffont->name); swf_FontReduce(iterator->swffont); } int used = iterator->swffont->use && iterator->swffont->use->used_glyphs; if(used) { if(!use_font3) { mtag = swf_InsertTag(mtag, ST_DEFINEFONT2); swf_FontSetDefine2(mtag, iterator->swffont); } else { mtag = swf_InsertTag(mtag, ST_DEFINEFONT3); swf_FontSetDefine2(mtag, iterator->swffont); } } } iterator = iterator->next; } i->tag = swf_InsertTag(i->tag,ST_END); TAG* tag = i->tag->prev; if(use_font3 && i->config_storeallcharacters && i->config_alignfonts) { swf_FontPostprocess(i->swf); // generate alignment information } /* remove the removeobject2 tags between the last ST_SHOWFRAME and the ST_END- they confuse the flash player */ while(tag->id == ST_REMOVEOBJECT2) { TAG* prev = tag->prev; swf_DeleteTag(i->swf, tag); tag = prev; } if(i->overflow) { wipeSWF(i->swf); } if(i->config_enablezlib || i->config_flashversion>=6) { i->swf->compressed = 1; } /* Add AVM2 actionscript */ if(i->config_flashversion>=9 && (i->config_insertstoptag || i->hasbuttons) && !i->config_linknameurl) { swf_AddButtonLinks(i->swf, i->config_insertstoptag, i->config_internallinkfunction||i->config_externallinkfunction); } // if(i->config_reordertags) // swf_Optimize(i->swf); } int swfresult_save(gfxresult_t*gfx, const char*filename) { SWF*swf = (SWF*)gfx->internal; int fi; if(filename) fi = open(filename, O_BINARY|O_CREAT|O_TRUNC|O_WRONLY, 0777); else fi = 1; // stdout if(fi<=0) { msg(" Could not create \"%s\". ", FIXNULL(filename)); return -1; } if FAILED(swf_WriteSWF(fi,swf)) msg(" WriteSWF() failed.\n"); if(filename) close(fi); return 0; } void* swfresult_get(gfxresult_t*gfx, const char*name) { SWF*swf = (SWF*)gfx->internal; if(!strcmp(name, "swf")) { return (void*)swf_CopySWF(swf); } else if(!strcmp(name, "xmin")) { return (void*)(ptroff_t)(swf->movieSize.xmin/20); } else if(!strcmp(name, "ymin")) { return (void*)(ptroff_t)(swf->movieSize.ymin/20); } else if(!strcmp(name, "xmax")) { return (void*)(ptroff_t)(swf->movieSize.xmax/20); } else if(!strcmp(name, "ymax")) { return (void*)(ptroff_t)(swf->movieSize.ymax/20); } else if(!strcmp(name, "width")) { return (void*)(ptroff_t)((swf->movieSize.xmax - swf->movieSize.xmin)/20); } else if(!strcmp(name, "height")) { return (void*)(ptroff_t)((swf->movieSize.ymax - swf->movieSize.ymin)/20); } return 0; } void swfresult_destroy(gfxresult_t*gfx) { if(gfx->internal) { swf_FreeTags((SWF*)gfx->internal); free(gfx->internal); gfx->internal = 0; } memset(gfx, 0, sizeof(gfxresult_t)); free(gfx); } static void swfoutput_destroy(gfxdevice_t* dev); gfxresult_t* swf_finish(gfxdevice_t* dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; gfxresult_t*result; if(i->config_linktarget) { free(i->config_linktarget); i->config_linktarget = 0; } swfoutput_finalize(dev); SWF* swf = i->swf;i->swf = 0; swfoutput_destroy(dev); result = (gfxresult_t*)rfx_calloc(sizeof(gfxresult_t)); result->internal = swf; result->save = swfresult_save; result->write = 0; result->get = swfresult_get; result->destroy = swfresult_destroy; return result; } /* Perform cleaning up */ static void swfoutput_destroy(gfxdevice_t* dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!i) { /* not initialized yet- nothing to destroy */ return; } fontlist_t *tmp,*iterator = i->fontlist; while(iterator) { if(iterator->swffont) { swf_FontFree(iterator->swffont);iterator->swffont=0; } tmp = iterator; iterator = iterator->next; free(tmp); } if(i->swf) {swf_FreeTags(i->swf);free(i->swf);i->swf = 0;} free(i);i=0; memset(dev, 0, sizeof(gfxdevice_t)); } static void swfoutput_setstrokecolor(gfxdevice_t* dev, U8 r, U8 g, U8 b, U8 a) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->strokergb.r == r && i->strokergb.g == g && i->strokergb.b == b && i->strokergb.a == a) return; if(i->shapeid>=0) endshape(dev); i->strokergb.r = r; i->strokergb.g = g; i->strokergb.b = b; i->strokergb.a = a; } //#define ROUND_UP 19 //#define ROUND_UP 10 static void swfoutput_setlinewidth(gfxdevice_t*dev, double _linewidth) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->linewidth == (U16)(_linewidth*20+19.0/20.0)) return; if(i->shapeid>=0) endshape(dev); i->linewidth = (U16)(_linewidth*20+19.0/20.0); } static void drawlink(gfxdevice_t*dev, ActionTAG*,ActionTAG*, gfxline_t*points, char mouseover, char*type, const char*url); static void swfoutput_namedlink(gfxdevice_t*dev, char*name, gfxline_t*points); static void swfoutput_linktopage(gfxdevice_t*dev, int page, gfxline_t*points); static void swfoutput_linktourl(gfxdevice_t*dev, const char*url, gfxline_t*points); /*void swfoutput_drawlink(gfxdevice_t*dev, char*url, gfxline_t*points) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; dev->drawlink(dev, points, url); }*/ void swf_drawlink(gfxdevice_t*dev, gfxline_t*points, const char*url, const char*text) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->config_disablelinks) return; if(!strncmp("http://pdf2swf:", url, 15)) { char*tmp = strdup(url); int l = strlen(tmp); if(tmp[l-1] == '/') tmp[l-1] = 0; swfoutput_namedlink(dev, tmp+15, points); free(tmp); return; } else if(!strncmp("page", url, 4)) { int t, nodigit=0; for(t=4;url[t];t++) if(url[t]<'0' || url[t]>'9') nodigit = 1; if(!nodigit) { int page = atoi(&url[4]); if(page<0) page = 0; swfoutput_linktopage(dev, page, points); } } else { swfoutput_linktourl(dev, url, points); } } void swfoutput_linktourl(gfxdevice_t*dev, const char*url, gfxline_t*points) { ActionTAG* actions = 0; swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->shapeid>=0) endshape(dev); if(i->textmode) endtext(dev); /* TODO: escape special characters in url */ if(i->config_externallinkfunction && i->config_flashversion<=8) { actions = action_PushString(actions, url); //parameter actions = action_PushInt(actions, 1); //number of parameters (1) actions = action_PushString(actions, i->config_externallinkfunction); //function name actions = action_CallFunction(actions); } else if(!i->config_linktarget) { if(!i->config_opennewwindow) actions = action_GetUrl(actions, url, "_parent"); else actions = action_GetUrl(actions, url, "_this"); } else { actions = action_GetUrl(actions, url, i->config_linktarget); } actions = action_End(actions); drawlink(dev, actions, 0, points, 0, "url", url); swf_ActionFree(actions); } void swfoutput_linktopage(gfxdevice_t*dev, int page, gfxline_t*points) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; ActionTAG* actions = 0; if(i->shapeid>=0) endshape(dev); if(i->textmode) endtext(dev); if(!i->config_internallinkfunction || i->config_flashversion>=9) { actions = action_GotoFrame(actions, page-1); actions = action_End(actions); } else { actions = action_PushInt(actions, page); //parameter actions = action_PushInt(actions, 1); //number of parameters (1) actions = action_PushString(actions, i->config_internallinkfunction); //function name actions = action_CallFunction(actions); actions = action_End(actions); } char name[80]; sprintf(name, "page%d", page); drawlink(dev, actions, 0, points, 0, "page", name); swf_ActionFree(actions); } /* Named Links (a.k.a. Acrobatmenu) are used to implement various gadgets of the viewer objects, like subtitles, index elements etc. */ void swfoutput_namedlink(gfxdevice_t*dev, char*name, gfxline_t*points) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; ActionTAG *actions1,*actions2; char*tmp = strdup(name); char mouseover = 1; if(i->shapeid>=0) endshape(dev); if(i->textmode) endtext(dev); char*type = 0; if(!strncmp(tmp, "call:", 5)) { char*x = strchr(&tmp[5], ':'); if(!x) { actions1 = action_PushInt(0, 0); //number of parameters (0) actions1 = action_PushString(actions1, &tmp[5]); //function name actions1 = action_CallFunction(actions1); actions1 = action_End(actions1); } else { *x = 0; actions1 = action_PushString(0, x+1); //parameter actions1 = action_PushInt(actions1, 1); //number of parameters (1) actions1 = action_PushString(actions1, &tmp[5]); //function name actions1 = action_CallFunction(actions1); actions1 = action_End(actions1); } actions2 = action_End(0); mouseover = 0; type = "call"; } else { actions1 = action_PushString(0, "/:subtitle"); actions1 = action_PushString(actions1, name); actions1 = action_SetVariable(actions1); actions1 = action_End(actions1); actions2 = action_PushString(0, "/:subtitle"); actions2 = action_PushString(actions2, ""); actions2 = action_SetVariable(actions2); actions2 = action_End(actions2); type = "subtitle"; } drawlink(dev, actions1, actions2, points, mouseover, type, name); swf_ActionFree(actions1); swf_ActionFree(actions2); free(tmp); } static void drawgfxline(gfxdevice_t*dev, gfxline_t*line, int fill) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; gfxcoord_t lastx=0,lasty=0,px=0,py=0; char lastwasmoveto; int lines= 0, splines=0; i->fill = fill; while(1) { if(!line) break; /* check whether the next segment is zero */ if(line->type == gfx_moveTo) { moveto(dev, i->tag, line->x, line->y); px = lastx = line->x; py = lasty = line->y; lastwasmoveto = 1; } if(line->type == gfx_lineTo) { lineto(dev, i->tag, line->x, line->y); px = line->x; py = line->y; lastwasmoveto = 0; lines++; } else if(line->type == gfx_splineTo) { plotxy_t s,p; s.x = line->sx;p.x = line->x; s.y = line->sy;p.y = line->y; splineto(dev, i->tag, s, p); px = line->x; py = line->y; lastwasmoveto = 0; splines++; } line = line->next; } msg(" drawgfxline, %d lines, %d splines", lines, splines); } static void drawlink(gfxdevice_t*dev, ActionTAG*actions1, ActionTAG*actions2, gfxline_t*points, char mouseover, char*type, const char*url) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; RGBA rgb; SRECT r; int lsid=0; int fsid; int myshapeid; int myshapeid2; double posx = 0; double posy = 0; int buttonid = getNewID(dev); gfxbbox_t bbox = gfxline_getbbox(points); if(i->config_linknameurl) { actions1 = 0; actions2 = 0; } i->hasbuttons = 1; /* shape */ myshapeid = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); swf_ShapeNew(&i->shape); rgb.r = rgb.b = rgb.a = rgb.g = 0; fsid = swf_ShapeAddSolidFillStyle(i->shape,&rgb); swf_SetU16(i->tag, myshapeid); r.xmin = (int)(bbox.xmin*20); r.ymin = (int)(bbox.ymin*20); r.xmax = (int)(bbox.xmax*20); r.ymax = (int)(bbox.ymax*20); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,i->shape); swf_ShapeCountBits(i->shape,NULL,NULL); swf_SetShapeBits(i->tag,i->shape); swf_ShapeSetAll(i->tag,i->shape,/*x*/0,/*y*/0,0,fsid,0); i->swflastx = i->swflasty = 0; drawgfxline(dev, points, 1); swf_ShapeSetEnd(i->tag); swf_ShapeFree(i->shape); /* shape2 */ myshapeid2 = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); swf_ShapeNew(&i->shape); rgb = i->config_linkcolor; fsid = swf_ShapeAddSolidFillStyle(i->shape,&rgb); swf_SetU16(i->tag, myshapeid2); r.xmin = (int)(bbox.xmin*20); r.ymin = (int)(bbox.ymin*20); r.xmax = (int)(bbox.xmax*20); r.ymax = (int)(bbox.ymax*20); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,i->shape); swf_ShapeCountBits(i->shape,NULL,NULL); swf_SetShapeBits(i->tag,i->shape); swf_ShapeSetAll(i->tag,i->shape,/*x*/0,/*y*/0,0,fsid,0); i->swflastx = i->swflasty = 0; drawgfxline(dev, points, 1); swf_ShapeSetEnd(i->tag); swf_ShapeFree(i->shape); if(!mouseover) { i->tag = swf_InsertTag(i->tag,ST_DEFINEBUTTON); swf_SetU16(i->tag,buttonid); //id swf_ButtonSetFlags(i->tag, 0); //menu=no swf_ButtonSetRecord(i->tag,0x01,myshapeid,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x02,myshapeid2,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x04,myshapeid2,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x08,myshapeid,i->depth,0,0); swf_SetU8(i->tag,0); swf_ActionSet(i->tag,actions1); swf_SetU8(i->tag,0); } else { i->tag = swf_InsertTag(i->tag,ST_DEFINEBUTTON2); swf_SetU16(i->tag,buttonid); //id swf_ButtonSetFlags(i->tag, 0); //menu=no swf_ButtonSetRecord(i->tag,0x01,myshapeid,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x02,myshapeid2,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x04,myshapeid2,i->depth,0,0); swf_ButtonSetRecord(i->tag,0x08,myshapeid,i->depth,0,0); swf_SetU8(i->tag,0); // end of button records swf_ButtonSetCondition(i->tag, BC_IDLE_OVERUP); swf_ActionSet(i->tag,actions1); if(actions2) { swf_ButtonSetCondition(i->tag, BC_OVERUP_IDLE); swf_ActionSet(i->tag,actions2); swf_SetU8(i->tag,0); swf_ButtonPostProcess(i->tag, 2); } else { swf_SetU8(i->tag,0); swf_ButtonPostProcess(i->tag, 1); } } char buf[80]; char*buf2 = 0; const char* name = 0; if(i->config_linknameurl) { buf2 = malloc(strlen(type)+strlen(url)+2); sprintf(buf2, "%s:%s", type, url); name = buf2; } else { name = buf; sprintf(buf, "button%d", buttonid); } msg(" Placing link ID %d", buttonid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); if(posx!=0 || posy!=0) { SPOINT p; p.x = (int)(posx*20); p.y = (int)(posy*20); p = swf_TurnPoint(p, &i->page_matrix); MATRIX m; m = i->page_matrix; m.tx = p.x; m.ty = p.y; swf_ObjectPlace(i->tag, buttonid, getNewDepth(dev),&m,0,(U8*)name); } else { swf_ObjectPlace(i->tag, buttonid, getNewDepth(dev),&i->page_matrix,0,(U8*)name); } if(buf2) free(buf2); } /////////// /* for(t=0;tinternal; msg(" swfdevice: %s=%s", name, value); if(!strcmp(name, "jpegsubpixels")) { i->config_jpegsubpixels = atof(value); } else if(!strcmp(name, "ppmsubpixels")) { i->config_ppmsubpixels = atof(value); } else if(!strcmp(name, "subpixels")) { i->config_ppmsubpixels = i->config_jpegsubpixels = atof(value); } else if(!strcmp(name, "drawonlyshapes")) { i->config_drawonlyshapes = atoi(value); } else if(!strcmp(name, "ignoredraworder")) { i->config_ignoredraworder = atoi(value); } else if(!strcmp(name, "mark")) { if(!value || !value[0]) { if(i->mark) free(i->mark); i->mark = 0; } else { int t; i->mark = strdup("..."); for(t=0;t<3;t++) if(value[t]) i->mark[t] = value[t]; } } else if(!strcmp(name, "filloverlap")) { i->config_filloverlap = atoi(value); } else if(!strcmp(name, "local_with_network")) { i->config_local_with_network = atoi(value); i->config_local_with_filesystem = !i->config_local_with_network; } else if(!strcmp(name, "local_with_filesystem")) { i->config_local_with_filesystem = atoi(value); i->config_local_with_network = !i->config_local_with_filesystem; } else if(!strcmp(name, "linksopennewwindow")) { i->config_opennewwindow = atoi(value); } else if(!strcmp(name, "opennewwindow")) { i->config_opennewwindow = atoi(value); } else if(!strcmp(name, "storeallcharacters")) { i->config_storeallcharacters = atoi(value); } else if(!strcmp(name, "alignfonts")) { i->config_alignfonts = atoi(value); } else if(!strcmp(name, "enablezlib")) { i->config_enablezlib = atoi(value); } else if(!strcmp(name, "bboxvars")) { i->config_bboxvars = atoi(value); } else if(!strcmp(name, "dots")) { i->config_dots = atoi(value); } else if(!strcmp(name, "frameresets")) { i->config_frameresets = atoi(value); } else if(!strcmp(name, "showclipshapes")) { i->config_showclipshapes = atoi(value); } else if(!strcmp(name, "reordertags")) { i->config_reordertags = atoi(value); } else if(!strcmp(name, "internallinkfunction")) { i->config_internallinkfunction = strdup(value); } else if(!strcmp(name, "externallinkfunction")) { i->config_externallinkfunction = strdup(value); } else if(!strcmp(name, "linkfunction")) { //sets both internallinkfunction and externallinkfunction i->config_internallinkfunction = strdup(value); i->config_externallinkfunction = strdup(value); } else if(!strcmp(name, "disable_polygon_conversion")) { i->config_disable_polygon_conversion = atoi(value); } else if(!strcmp(name, "normalize_polygon_positions")) { i->config_normalize_polygon_positions = atoi(value); } else if(!strcmp(name, "wxwindowparams")) { i->config_watermark = atoi(value); } else if(!strcmp(name, "insertstop")) { i->config_insertstoptag = atoi(value); } else if(!strcmp(name, "protect")) { i->config_protect = atoi(value); if(i->config_protect && i->tag) { i->tag = swf_InsertTag(i->tag, ST_PROTECT); } } else if(!strcmp(name, "flashversion")) { i->config_flashversion = atoi(value); if(i->swf) { i->swf->fileVersion = i->config_flashversion; } } else if(!strcmp(name, "framerate")) { i->config_framerate = atof(value); if(i->swf) { i->swf->frameRate = i->config_framerate*0x100; } } else if(!strcmp(name, "minlinewidth")) { i->config_minlinewidth = atof(value); } else if(!strcmp(name, "remove_small_polygons")) { i->config_remove_small_polygons = atof(value); } else if(!strcmp(name, "caplinewidth")) { i->config_caplinewidth = atof(value); } else if(!strcmp(name, "linktarget")) { i->config_linktarget = strdup(value); } else if(!strcmp(name, "invisibletexttofront")) { i->config_invisibletexttofront = atoi(value); } else if(!strcmp(name, "noclips")) { i->config_noclips = atoi(value); } else if(!strcmp(name, "dumpfonts")) { i->config_dumpfonts = atoi(value); } else if(!strcmp(name, "override_line_widths")) { i->config_override_line_widths = atof(value); } else if(!strcmp(name, "animate")) { i->config_animate = atoi(value); i->config_framerate = 25; } else if(!strcmp(name, "linknameurl")) { i->config_linknameurl = atoi(value); } else if(!strcmp(name, "showimages")) { i->config_showimages = atoi(value); } else if(!strcmp(name, "disablelinks")) { i->config_disablelinks = atoi(value); } else if(!strcmp(name, "simpleviewer")) { i->config_simpleviewer = atoi(value); } else if(!strcmp(name, "next_bitmap_is_jpeg")) { i->jpeg = 1; } else if(!strcmp(name, "jpegquality")) { int val = atoi(value); if(val<0) val=0; if(val>101) val=101; i->config_jpegquality = val; } else if(!strcmp(name, "splinequality")) { int v = atoi(value); v = 500-(v*5); // 100% = 0.25 pixel, 0% = 25 pixel if(v<1) v = 1; i->config_splinemaxerror = v; } else if(!strcmp(name, "fontquality")) { int v = atoi(value); v = 500-(v*5); // 100% = 0.25 pixel, 0% = 25 pixel if(v<1) v = 1; i->config_fontsplinemaxerror = v; } else if(!strcmp(name, "linkcolor")) { if(strlen(value)!=8) { fprintf(stderr, "Unknown format for option 'linkcolor'. (%s <-> RRGGBBAA)\n", value); return 1; } # define NIBBLE(s) (((s)>='0' && (s)<='9')?((s)-'0'):((s)&0x0f)+9) i->config_linkcolor.r = NIBBLE(value[0])<<4 | NIBBLE(value[1]); i->config_linkcolor.g = NIBBLE(value[2])<<4 | NIBBLE(value[3]); i->config_linkcolor.b = NIBBLE(value[4])<<4 | NIBBLE(value[5]); i->config_linkcolor.a = NIBBLE(value[6])<<4 | NIBBLE(value[7]); } else if(!strcmp(name, "help")) { printf("\nSWF layer options:\n"); printf("jpegsubpixels= resolution adjustment for jpeg images (same as jpegdpi, but in pixels)\n"); printf("ppmsubpixels= shortcut for setting both jpegsubpixels and ppmsubpixels\n"); printf("drawonlyshapes convert everything to shapes (currently broken)\n"); printf("ignoredraworder allow to perform a few optimizations for creating smaller SWFs\n"); printf("linksopennewwindow make links open a new browser window\n"); printf("linktarget target window name of new links\n"); printf("linkcolor==6)\n"); printf("bboxvars store the bounding box of the SWF file in actionscript variables\n"); printf("dots Take care to handle dots correctly\n"); printf("reordertags=0/1 (default: 1) perform some tag optimizations\n"); printf("internallinkfunction= when the user clicks a internal link (to a different page) in the converted file, this actionscript function is called\n"); printf("externallinkfunction= when the user clicks an external link (e.g. http://www.foo.bar/) on the converted file, this actionscript function is called\n"); printf("disable_polygon_conversion never convert strokes to polygons (will remove capstyles and joint styles)\n"); printf("caplinewidth= the minimum thichness a line needs to have so that capstyles become visible (and are converted)\n"); printf("insertstop put an ActionScript \"STOP\" tag in every frame\n"); printf("protect add a \"protect\" tag to the file, to prevent loading in the Flash editor\n"); printf("flashversion= the SWF fileversion (6)\n"); printf("framerate= SWF framerate\n"); printf("minlinewidth= convert horizontal/vertical boxes smaller than this width to lines (0.05) \n"); printf("simpleviewer Add next/previous buttons to the SWF\n"); printf("animate insert a showframe tag after each placeobject (animate draw order of PDF files)\n"); printf("jpegquality= set compression quality of jpeg images\n"); printf("splinequality= Set the quality of spline convertion to value (0-100, default: 100).\n"); printf("disablelinks Disable links.\n"); } else { return 0; } return 1; } // -------------------------------------------------------------------- static CXFORM gfxcxform_to_cxform(gfxcxform_t* c) { CXFORM cx; swf_GetCXForm(0, &cx, 1); if(!c) return cx; if(c->rg!=0 || c->rb!=0 || c->ra!=0 || c->gr!=0 || c->gb!=0 || c->ga!=0 || c->br!=0 || c->bg!=0 || c->ba!=0 || c->ar!=0 || c->ag!=0 || c->ab!=0) msg(" CXForm not SWF-compatible"); cx.a0 = (S16)(c->aa*256); cx.r0 = (S16)(c->rr*256); cx.g0 = (S16)(c->gg*256); cx.b0 = (S16)(c->bb*256); cx.a1 = c->ta; cx.r1 = c->tr; cx.g1 = c->tg; cx.b1 = c->tb; return cx; } /* TODO */ static int imageInCache(gfxdevice_t*dev, void*data, int width, int height) { return -1; } static void addImageToCache(gfxdevice_t*dev, void*data, int width, int height) { } static int add_image(swfoutput_internal*i, gfximage_t*img, int targetwidth, int targetheight, int* newwidth, int* newheight) { gfxdevice_t*dev = i->dev; RGBA*newpic = 0; RGBA*mem = (RGBA*)img->data; int sizex = img->width; int sizey = img->height; int is_jpeg = i->jpeg; i->jpeg = 0; int newsizex=sizex, newsizey=sizey; /// { if(is_jpeg && i->config_jpegsubpixels) { newsizex = (int)(targetwidth*i->config_jpegsubpixels + 0.5); newsizey = (int)(targetheight*i->config_jpegsubpixels + 0.5); } else if(!is_jpeg && i->config_ppmsubpixels) { newsizex = (int)(targetwidth*i->config_ppmsubpixels + 0.5); newsizey = (int)(targetheight*i->config_ppmsubpixels + 0.5); } /// } if(sizex<=0 || sizey<=0) return -1; if(newsizex<=0) newsizex = 1; if(newsizey<=0) newsizey = 1; /* TODO: cache images */ if(newsizex Scaling %dx%d image to %dx%d", sizex, sizey, newsizex, newsizey); gfximage_t*ni = gfximage_rescale(img, newsizex, newsizey); newpic = (RGBA*)ni->data; free(ni); *newwidth = sizex = newsizex; *newheight = sizey = newsizey; mem = newpic; } else { *newwidth = newsizex = sizex; *newheight = newsizey = sizey; } int num_colors = swf_ImageGetNumberOfPaletteEntries(mem,sizex,sizey,0); int has_alpha = swf_ImageHasAlpha(mem,sizex,sizey); msg(" Drawing %dx%d %s%simage (id %d) at size %dx%d (%dx%d), %s%d colors", sizex, sizey, has_alpha?(has_alpha==2?"semi-transparent ":"transparent "):"", is_jpeg?"jpeg-":"", i->currentswfid+1, newsizex, newsizey, targetwidth, targetheight, /*newsizex, newsizey,*/ num_colors>256?">":"", num_colors>256?256:num_colors); /*RGBA* pal = (RGBA*)rfx_alloc(sizeof(RGBA)*num_colors); swf_ImageGetNumberOfPaletteEntries(mem,sizex,sizey,pal); int t; for(t=0;ttag = swf_AddImage(i->tag, bitid, mem, sizex, sizey, i->config_jpegquality); addImageToCache(dev, mem, sizex, sizey); } else { bitid = cacheid; } if(newpic) free(newpic); return bitid; } int line_is_empty(gfxline_t*line) { while(line) { if(line->type != gfx_moveTo) return 0; line = line->next; } return 1; } static SRECT gfxline_getSWFbbox(gfxline_t*line) { gfxbbox_t bbox = gfxline_getbbox(line); SRECT r; r.xmin = (int)(bbox.xmin*20); r.ymin = (int)(bbox.ymin*20); r.xmax = (int)(bbox.xmax*20); r.ymax = (int)(bbox.ymax*20); return r; } static void swf_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(line_is_empty(line)) return; endshape(dev); endtext(dev); int targetx = (int)(sqrt(matrix->m00*matrix->m00 + matrix->m01*matrix->m01)*img->width); int targety = (int)(sqrt(matrix->m10*matrix->m10 + matrix->m11*matrix->m11)*img->height); int newwidth=0,newheight=0; int bitid = add_image(i, img, targetx, targety, &newwidth, &newheight); if(bitid<0) return; double fx = (double)img->width / (double)newwidth; double fy = (double)img->height / (double)newheight; MATRIX m; m.sx = (int)(65536*20*matrix->m00*fx); m.r1 = (int)(65536*20*matrix->m10*fy); m.r0 = (int)(65536*20*matrix->m01*fx); m.sy = (int)(65536*20*matrix->m11*fy); m.tx = (int)(matrix->tx*20); m.ty = (int)(matrix->ty*20); /* shape */ int myshapeid = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE); SHAPE*shape; swf_ShapeNew(&shape); int fsid = swf_ShapeAddBitmapFillStyle(shape,&m,bitid,1); int lsid = 0; if(i->config_showimages) { RGBA pink = {255,255,0,255}; lsid = swf_ShapeAddLineStyle(shape, 20, &pink); } swf_SetU16(i->tag, myshapeid); SRECT r = gfxline_getSWFbbox(line); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,shape); swf_ShapeCountBits(shape,NULL,NULL); swf_SetShapeBits(i->tag,shape); swf_ShapeSetAll(i->tag,shape,UNDEFINED_COORD,UNDEFINED_COORD,lsid,fsid,0); i->swflastx = i->swflasty = UNDEFINED_COORD; drawgfxline(dev, line, 1); swf_ShapeSetEnd(i->tag); swf_ShapeFree(shape); msg(" Placing image, shape ID %d, bitmap ID %d", myshapeid, bitid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); CXFORM cxform2 = gfxcxform_to_cxform(cxform); swf_ObjectPlace(i->tag,myshapeid,getNewDepth(dev),&i->page_matrix,&cxform2,NULL); } static RGBA col_purple = {255,255,0,255}; static void drawoutline(gfxdevice_t*dev, gfxline_t*line) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; int myshapeid = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); SHAPE*shape; swf_ShapeNew(&shape); int lsid = swf_ShapeAddLineStyle(shape,60,&col_purple); swf_SetU16(i->tag,myshapeid); SRECT r = gfxline_getSWFbbox(line); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,shape); swf_ShapeCountBits(shape,NULL,NULL); swf_SetShapeBits(i->tag,shape); swf_ShapeSetAll(i->tag,shape,UNDEFINED_COORD,UNDEFINED_COORD,lsid,0,0); drawgfxline(dev, line, 1); swf_ShapeSetEnd(i->tag); swf_ShapeFree(shape); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); swf_ObjectPlace(i->tag, myshapeid, getNewDepth(dev), 0,0,0); } static void swf_startclip(gfxdevice_t*dev, gfxline_t*line) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->config_noclips) return; endtext(dev); endshape(dev); if(i->clippos >= 127) { msg(" Too many clip levels."); i->clippos --; } if(i->config_showclipshapes) { i->stored_clipshapes = gfxline_append(i->stored_clipshapes, gfxline_clone(line)); } int myshapeid = getNewID(dev); i->tag = swf_InsertTag(i->tag,ST_DEFINESHAPE3); RGBA col; memset(&col, 0, sizeof(RGBA)); col.a = 255; SHAPE*shape; swf_ShapeNew(&shape); int fsid = swf_ShapeAddSolidFillStyle(shape,&col); if(i->mark) { RGBA markcol = {0,i->mark[0],i->mark[1],i->mark[2]}; swf_ShapeAddSolidFillStyle(shape,&markcol); } swf_SetU16(i->tag,myshapeid); SRECT r = gfxline_getSWFbbox(line); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,shape); swf_ShapeCountBits(shape,NULL,NULL); swf_SetShapeBits(i->tag,shape); swf_ShapeSetAll(i->tag,shape,UNDEFINED_COORD,UNDEFINED_COORD,0,fsid,0); i->swflastx = i->swflasty = UNDEFINED_COORD; i->shapeisempty = 1; drawgfxline(dev, line, 1); if(i->shapeisempty) { /* an empty clip shape is equivalent to a shape with no area */ int x = line?line->x:0; int y = line?line->y:0; moveto(dev, i->tag, x,y); lineto(dev, i->tag, x,y); lineto(dev, i->tag, x,y); } if(!i->shapeisempty && i->currentswfid==1 && r.xmin==0 && r.ymin==0 && r.xmax==(int)(i->max_x*20) && r.ymax==(int)(i->max_y*20)) { if(i->config_watermark) { gfxbbox_t r; r.xmin = r.ymin = 0;r.xmax = i->max_x;r.ymax = i->max_y; draw_watermark(dev, r, 1); } } swf_ShapeSetEnd(i->tag); swf_ShapeFree(shape); /* TODO: remember the bbox, and check all shapes against it */ msg(" Placing clip ID %d", myshapeid); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); i->cliptags[i->clippos] = i->tag; i->clipshapes[i->clippos] = myshapeid; i->clipdepths[i->clippos] = getNewDepth(dev); i->clippos++; } static void swf_endclip(gfxdevice_t*dev) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->config_noclips) return; if(i->textmode) endtext(dev); if(i->shapeid>=0) endshape(dev); if(!i->clippos) { msg(" Invalid end of clipping region"); return; } i->clippos--; /*swf_ObjectPlaceClip(i->cliptags[i->clippos],i->clipshapes[i->clippos],i->clipdepths[i->clippos],&i->page_matrix,NULL,NULL, / * clip to depth: * / i->depth <= i->clipdepths[i->clippos]? i->depth : i->depth - 1); i->depth ++;*/ swf_ObjectPlaceClip(i->cliptags[i->clippos],i->clipshapes[i->clippos],i->clipdepths[i->clippos],&i->page_matrix,NULL,NULL,i->depth); } static int gfxline_type(gfxline_t*line) { int tmplines=0; int tmpsplines=0; int lines=0; int splines=0; int haszerosegments=0; int length=0; while(line) { if(line->type == gfx_moveTo) { tmplines=0; tmpsplines=0; } else if(line->type == gfx_lineTo) { tmplines++; if(tmplines>lines) lines=tmplines; } else if(line->type == gfx_splineTo) { tmpsplines++; if(tmpsplines>lines) splines=tmpsplines; } length++; line = line->next; } if(length>400) return 5; if(lines==0 && splines==0) return 0; else if(lines==1 && splines==0) return 1; else if(lines==0 && splines==1) return 2; else if(splines==0) return 3; else return 4; } static int gfxline_has_dots(gfxline_t*line) { int tmplines=0; double x=0,y=0; double dist = 0; int isline = 0; int short_gap = 0; while(line) { if(line->type == gfx_moveTo) { /* test the length of the preceding line, and assume it is a dot if it's length is less than 1.0. But *only* if there's a noticable gap between the previous line and the next moveTo. (I've come across a PDF where thousands of "dots" were stringed together, forming a line) */ int last_short_gap = short_gap; if((fabs(line->x - x) + fabs(line->y - y)) < 1.0) { short_gap = 1; } else { short_gap = 0; } if(isline && dist < 1 && !short_gap && !last_short_gap) { return 1; } dist = 0; isline = 0; } else if(line->type == gfx_lineTo) { dist += fabs(line->x - x) + fabs(line->y - y); isline = 1; } else if(line->type == gfx_splineTo) { dist += fabs(line->sx - x) + fabs(line->sy - y) + fabs(line->x - line->sx) + fabs(line->y - line->sy); isline = 1; } x = line->x; y = line->y; line = line->next; } if(isline && dist < 1 && !short_gap) { return 1; } return 0; } static int gfxline_fix_short_edges(gfxline_t*line) { double x,y; while(line) { if(line->type == gfx_lineTo) { if(fabs(line->x - x) + fabs(line->y - y) < 0.01) { line->x += 0.01; } } else if(line->type == gfx_splineTo) { if(fabs(line->sx - x) + fabs(line->sy - y) + fabs(line->x - line->sx) + fabs(line->y - line->sy) < 0.01) { line->x += 0.01; } } x = line->x; y = line->y; line = line->next; } return 0; } static char is_inside_page(gfxdevice_t*dev, gfxcoord_t x, gfxcoord_t y) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(xmin_x || x>i->max_x) return 0; if(ymin_y || y>i->max_y) return 0; return 1; } gfxline_t* gfxline_move(gfxline_t*line, double x, double y) { gfxline_t*l = line = gfxline_clone(line); while(l) { l->x += x; l->y += y; l->sx += x; l->sy += y; l = l->next; } return line; } //#define NORMALIZE_POLYGON_POSITIONS static void swf_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(line_is_empty(line)) return; int type = gfxline_type(line); int has_dots = gfxline_has_dots(line); gfxbbox_t r = gfxline_getbbox(line); int is_outside_page = !is_inside_page(dev, r.xmin, r.ymin) || !is_inside_page(dev, r.xmax, r.ymax); if(i->config_override_line_widths) { width = i->config_override_line_widths; } /* TODO: * split line into segments, and perform this check for all segments */ if(i->config_disable_polygon_conversion || /*type>=5 ||*/ (!has_dots && (width <= i->config_caplinewidth || (cap_style == gfx_capRound && joint_style == gfx_joinRound) || (cap_style == gfx_capRound && type<=2)))) { // ... } else { /* convert line to polygon */ msg(" draw as polygon, type=%d dots=%d", type, has_dots); if(has_dots) gfxline_fix_short_edges(line); /* we need to convert the line into a polygon */ gfxpoly_t* poly = gfxpoly_from_stroke(line, width, cap_style, joint_style, miterLimit, DEFAULT_GRID); gfxline_t*gfxline = gfxline_from_gfxpoly(poly); dev->fill(dev, gfxline, color); gfxline_free(gfxline); gfxpoly_destroy(poly); return; } msg(" draw as stroke, type=%d dots=%d", type, has_dots); endtext(dev); if(i->config_normalize_polygon_positions) { endshape(dev); double startx = 0, starty = 0; if(line && line->type == gfx_moveTo) { startx = line->x; starty = line->y; } line = gfxline_move(line, -startx, -starty); i->shapeposx = (int)(startx*20); i->shapeposy = (int)(starty*20); } swfoutput_setstrokecolor(dev, color->r, color->g, color->b, color->a); swfoutput_setlinewidth(dev, width); startshape(dev); stopFill(dev); drawgfxline(dev, line, 0); if(i->config_normalize_polygon_positions) { free(line); //account for _move } } static void swf_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(line_is_empty(line)) return; if(!color->a) return; gfxbbox_t r = gfxline_getbbox(line); int is_outside_page = !is_inside_page(dev, r.xmin, r.ymin) || !is_inside_page(dev, r.xmax, r.ymax); if(r.xmax - r.xmin < i->config_remove_small_polygons && r.ymax - r.ymin < i->config_remove_small_polygons) { msg(" Not drawing %.2fx%.2f polygon", r.xmax - r.xmin, r.ymax - r.ymin); return; } endtext(dev); if(!i->config_ignoredraworder) endshape(dev); if(i->config_normalize_polygon_positions) { endshape(dev); double startx = 0, starty = 0; if(line && line->type == gfx_moveTo) { startx = line->x; starty = line->y; } line = gfxline_move(line, -startx, -starty); i->shapeposx = (int)(startx*20); i->shapeposy = (int)(starty*20); } swfoutput_setfillcolor(dev, color->r, color->g, color->b, color->a); startshape(dev); startFill(dev); drawgfxline(dev, line, 1); if(i->currentswfid==2 && r.xmin==0 && r.ymin==0 && r.xmax==i->max_x && r.ymax==i->max_y) { if(i->config_watermark) { draw_watermark(dev, r, 1); } } msg(" end of swf_fill (shapeid=%d)", i->shapeid); if(i->config_normalize_polygon_positions) { free(line); //account for _move } } static GRADIENT* gfxgradient_to_GRADIENT(gfxgradient_t*gradient) { int num = 0; gfxgradient_t*g = gradient; while(g) { num++; g = g->next; } GRADIENT* swfgradient = malloc(sizeof(GRADIENT)); swfgradient->num = num; swfgradient->rgba = malloc(sizeof(swfgradient->rgba[0])*num); swfgradient->ratios = malloc(sizeof(swfgradient->ratios[0])*num); g = gradient; num = 0; while(g) { swfgradient->ratios[num] = g->pos*255; swfgradient->rgba[num] = *(RGBA*)&g->color; num++; g = g->next; } return swfgradient; } static void swf_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { if(line_is_empty(line)) return; swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(line_is_empty(line)) return; GRADIENT* swfgradient = gfxgradient_to_GRADIENT(gradient); if(!swfgradient) return; endshape(dev); endtext(dev); double f = type==gfxgradient_radial?4:4; MATRIX m; m.sx = (int)(matrix->m00*20*f); m.r1 = (int)(matrix->m10*20*f); m.r0 = (int)(matrix->m01*20*f); m.sy = (int)(matrix->m11*20*f); m.tx = (int)(matrix->tx*20); m.ty = (int)(matrix->ty*20); /* shape */ int myshapeid = getNewID(dev); i->tag = swf_InsertTag(i->tag, ST_DEFINESHAPE2); SHAPE*shape; swf_ShapeNew(&shape); int fsid = swf_ShapeAddGradientFillStyle(shape,&m,swfgradient,type==gfxgradient_radial); swf_SetU16(i->tag, myshapeid); SRECT r = gfxline_getSWFbbox(line); r = swf_ClipRect(i->pagebbox, r); swf_SetRect(i->tag,&r); swf_SetShapeStyles(i->tag,shape); swf_ShapeCountBits(shape,NULL,NULL); swf_SetShapeBits(i->tag,shape); swf_ShapeSetAll(i->tag,shape,UNDEFINED_COORD,UNDEFINED_COORD,0,fsid,0); i->swflastx = i->swflasty = UNDEFINED_COORD; drawgfxline(dev, line, 1); swf_ShapeSetEnd(i->tag); swf_ShapeFree(shape); int depth = getNewDepth(dev); msg(" Placing gradient, shape ID %d, depth %d", myshapeid, depth); i->tag = swf_InsertTag(i->tag,ST_PLACEOBJECT2); swf_ObjectPlace(i->tag,myshapeid,depth,&i->page_matrix,NULL,NULL); swf_FreeGradient(swfgradient);free(swfgradient); } static SWFFONT* gfxfont_to_swffont(gfxfont_t*font, const char* id, int version) { SWFFONT*swffont = (SWFFONT*)rfx_calloc(sizeof(SWFFONT)); int t; SRECT bounds = {0,0,0,0}; swffont->id = -1; swffont->version = version; swffont->name = (U8*)strdup(id); swffont->layout = (SWFLAYOUT*)rfx_calloc(sizeof(SWFLAYOUT)); swffont->layout->ascent = 0; swffont->layout->descent = 0; swffont->layout->leading = 0; swffont->layout->bounds = (SRECT*)rfx_calloc(sizeof(SRECT)*font->num_glyphs); swffont->encoding = FONT_ENCODING_UNICODE; swffont->numchars = font->num_glyphs; swffont->maxascii = font->max_unicode; swffont->ascii2glyph = (int*)rfx_calloc(sizeof(int)*swffont->maxascii); swffont->glyph2ascii = (U16*)rfx_calloc(sizeof(U16)*swffont->numchars); swffont->glyph = (SWFGLYPH*)rfx_calloc(sizeof(SWFGLYPH)*swffont->numchars); swffont->glyphnames = (char**)rfx_calloc(sizeof(char*)*swffont->numchars); SRECT max = {0,0,0,0}; for(t=0;tnum_glyphs;t++) { drawer_t draw; gfxline_t*line; double advance = 0; int u = font->glyphs[t].unicode; int s; char twice=0; for(s=0;snum_glyphs;s++) { if(swffont->glyph2ascii[s]==u) twice=1; } if(u >= 0xd800 || u == 0x0000 || twice) { /* flash 8 flashtype requires unique unicode IDs for each character. We use the Unicode private user area to assign characters, hoping that the font doesn't contain more than 8192 glyphs */ u = 0xe000 + (t&0x1fff); } swffont->glyph2ascii[t] = u; if(font->glyphs[t].name) { swffont->glyphnames[t] = strdup(font->glyphs[t].name); } else { swffont->glyphnames[t] = 0; } advance = font->glyphs[t].advance; swf_Shape01DrawerInit(&draw, 0); line = font->glyphs[t].line; const double scale = GLYPH_SCALE; while(line) { FPOINT c,to; c.x = line->sx * scale; c.y = -line->sy * scale; //to.x = floor(line->x * scale); to.y = floor(-line->y * scale); to.x = line->x * scale; to.y = -line->y * scale; /*if(strstr(swffont->name, "BIRNU") && t==90) { to.x += 1; }*/ if(line->type == gfx_moveTo) { draw.moveTo(&draw, &to); } else if(line->type == gfx_lineTo) { draw.lineTo(&draw, &to); } else if(line->type == gfx_splineTo) { draw.splineTo(&draw, &c, &to); } line = line->next; } draw.finish(&draw); swffont->glyph[t].shape = swf_ShapeDrawerToShape(&draw); SRECT bbox = swf_ShapeDrawerGetBBox(&draw); swf_ExpandRect2(&max, &bbox); swffont->layout->bounds[t] = bbox; if(advance<32768.0/20) { swffont->glyph[t].advance = (int)(advance*20); } else { //msg(" Advance value overflow in glyph %d", t); swffont->glyph[t].advance = 32767; } draw.dealloc(&draw); swf_ExpandRect2(&bounds, &swffont->layout->bounds[t]); } for(t=0;tnum_glyphs;t++) { SRECT bbox = swffont->layout->bounds[t]; /* if the glyph doesn't have a bounding box, use the combined bounding box (necessary e.g. for space characters) */ if(!(bbox.xmin|bbox.ymin|bbox.xmax|bbox.ymax)) { swffont->layout->bounds[t] = bbox = max; } /* check that the advance value is reasonable, by comparing it with the bounding box */ if(bbox.xmax>0 && (bbox.xmax*10 < swffont->glyph[t].advance || !swffont->glyph[t].advance)) { if(swffont->glyph[t].advance) msg(" fix bad advance value for char %d: bbox=%.2f, advance=%.2f\n", t, bbox.xmax/20.0, swffont->glyph[t].advance/20.0); swffont->glyph[t].advance = bbox.xmax; } //swffont->glyph[t].advance = bbox.xmax - bbox.xmin; } /* Flash player will use the advance value from the char, and the ascent/descent values from the layout for text selection. ascent will extend the char into negative y direction, from the baseline, while descent will extend in positive y direction, also from the baseline. The baseline is defined as the y-position zero */ swffont->layout->ascent = bounds.ymin<0?-bounds.ymin:0; swffont->layout->descent = bounds.ymax>0?bounds.ymax:0; swffont->layout->leading = bounds.ymax - bounds.ymin; /* if the font has proper ascent/descent values (>0) and those define greater (but not overly large) line spacing than what we estimated from the bounding boxes, use the font's parameters */ if(font->ascent*20 > swffont->layout->ascent && font->ascent*20*2 < swffont->layout->ascent) swffont->layout->ascent = font->ascent*20; if(font->descent*20 > swffont->layout->descent && font->descent*20*2 < swffont->layout->descent) swffont->layout->descent = font->descent*20; swf_FontSort(swffont); return swffont; } static void swf_addfont(gfxdevice_t*dev, gfxfont_t*font) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->swffont && i->swffont->name && !strcmp((char*)i->swffont->name,font->id)) return; // the requested font is the current font fontlist_t*last=0,*l = i->fontlist; while(l) { last = l; if(!strcmp((char*)l->swffont->name, font->id)) { return; // we already know this font } l = l->next; } l = (fontlist_t*)rfx_calloc(sizeof(fontlist_t)); l->swffont = gfxfont_to_swffont(font, font->id, (i->config_flashversion>=8 && !NO_FONT3)?3:2); l->next = 0; if(last) { last->next = l; } else { i->fontlist = l; } swf_FontSetID(l->swffont, getNewID(i->dev)); if(getScreenLogLevel() >= LOGLEVEL_DEBUG) { int iii; // print font information msg(" Font %s",font->id); msg(" | ID: %d", l->swffont->id); msg(" | Version: %d", l->swffont->version); msg(" | Name: %s", l->swffont->name); msg(" | Numchars: %d", l->swffont->numchars); msg(" | Maxascii: %d", l->swffont->maxascii); msg(" | Style: %d", l->swffont->style); msg(" | Encoding: %d", l->swffont->encoding); if(l->swffont->layout) { msg(" | Ascent: %.2f", l->swffont->layout->ascent / 20.0); msg(" | Descent: %.2f", l->swffont->layout->descent / 20.0); msg(" | Leading: %.2f", l->swffont->layout->leading / 20.0); } for(iii=0; iiiswffont->numchars;iii++) { msg(" | Glyph %d) name=%s, unicode=%d size=%d bbox=(%.2f,%.2f,%.2f,%.2f)\n", iii, l->swffont->glyphnames?l->swffont->glyphnames[iii]:"", l->swffont->glyph2ascii[iii], l->swffont->glyph[iii].shape->bitlen, l->swffont->layout->bounds[iii].xmin/20.0, l->swffont->layout->bounds[iii].ymin/20.0, l->swffont->layout->bounds[iii].xmax/20.0, l->swffont->layout->bounds[iii].ymax/20.0 ); } } } static void swf_switchfont(gfxdevice_t*dev, const char*fontid) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->swffont && i->swffont->name && !strcmp((char*)i->swffont->name,fontid)) return; // the requested font is the current font fontlist_t*l = i->fontlist; while(l) { if(!strcmp((char*)l->swffont->name, fontid)) { i->swffont = l->swffont; return; //done! } l = l->next; } msg(" Unknown font id: %s", fontid); return; } /* sets the matrix which is to be applied to characters drawn by swfoutput_drawchar() */ static void setfontscale(gfxdevice_t*dev,double m11,double m12, double m21,double m22,double x, double y, char force) { m11 *= 1024; m12 *= 1024; m21 *= 1024; m22 *= 1024; swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(i->lastfontm11 == m11 && i->lastfontm12 == m12 && i->lastfontm21 == m21 && i->lastfontm22 == m22 && !force) return; if(i->textmode) endtext(dev); i->lastfontm11 = m11; i->lastfontm12 = m12; i->lastfontm21 = m21; i->lastfontm22 = m22; double xsize = sqrt(m11*m11 + m12*m12); double ysize = sqrt(m21*m21 + m22*m22); int extrazoom = 1; if(i->config_flashversion>=8 && !NO_FONT3) extrazoom = 20; i->current_font_size = (xsize>ysize?xsize:ysize)*extrazoom; if(i->current_font_size < 1) i->current_font_size = 1; MATRIX m; swf_GetMatrix(0, &m); if(m21 || m12 || fabs(m11+m22)>0.001 || m11<0) { double ifs = (double)extrazoom/(i->current_font_size); m.sx = (S32)((m11*ifs)*65536); m.r1 = -(S32)((m21*ifs)*65536); m.r0 = (S32)((m12*ifs)*65536); m.sy = -(S32)((m22*ifs)*65536); } /* this is the position of the first char to set a new fontmatrix- we hope that it's close enough to all other characters using the font, so we use its position as origin for the matrix */ m.tx = x*20; m.ty = y*20; i->fontmatrix = m; } static void swf_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix) { swfoutput_internal*i = (swfoutput_internal*)dev->internal; if(!font) { msg(" swf_drawchar called (glyph %d) without font", glyph); return; } if(i->config_drawonlyshapes) { gfxglyph_t*g = &font->glyphs[glyph]; gfxline_t*line2 = gfxline_clone(g->line); gfxline_transform(line2, matrix); dev->fill(dev, line2, color); gfxline_free(line2); return; } if(!i->swffont || !i->swffont->name || strcmp((char*)i->swffont->name,font->id)) // not equal to current font { swf_switchfont(dev, font->id); // set the current font } if(!i->swffont) { msg(" swf_drawchar: Font is NULL"); return; } if(glyph<0 || glyph>=i->swffont->numchars) { msg(" No character %d in font %s (%d chars)", glyph, FIXNULL((char*)i->swffont->name), i->swffont->numchars); return; } glyph = i->swffont->glyph2glyph[glyph]; setfontscale(dev, matrix->m00, matrix->m01, matrix->m10, matrix->m11, matrix->tx, matrix->ty, 0); double det = i->fontmatrix.sx/65536.0 * i->fontmatrix.sy/65536.0 - i->fontmatrix.r0/65536.0 * i->fontmatrix.r1/65536.0; if(fabs(det) < 0.0005) { /* x direction equals y direction- the text is invisible */ msg(" Not drawing invisible character %d (det=%f, m=[%f %f;%f %f]\n", glyph, det, i->fontmatrix.sx/65536.0, i->fontmatrix.r1/65536.0, i->fontmatrix.r0/65536.0, i->fontmatrix.sy/65536.0); return; } /*if(i->swffont->glyph[glyph].shape->bitlen <= 16) { msg(" Glyph %d in current charset (%s, %d characters) is empty", glyph, FIXNULL((char*)i->swffont->name), i->swffont->numchars); return 1; }*/ /* calculate character position with respect to the current font matrix */ double s = 20 * GLYPH_SCALE / det; double px = matrix->tx - i->fontmatrix.tx/20.0; double py = matrix->ty - i->fontmatrix.ty/20.0; int x = (SCOORD)(( px * i->fontmatrix.sy/65536.0 - py * i->fontmatrix.r1/65536.0)*s); int y = (SCOORD)((- px * i->fontmatrix.r0/65536.0 + py * i->fontmatrix.sx/65536.0)*s); if(x>32767 || x<-32768 || y>32767 || y<-32768) { msg(" Moving character origin to %f %f\n", matrix->tx, matrix->ty); endtext(dev); setfontscale(dev, matrix->m00, matrix->m01, matrix->m10, matrix->m11, matrix->tx, matrix->ty, 1); /* since we just moved the char origin to the current char's position, it now has the relative position (0,0) */ x = y = 0; } if(i->shapeid>=0) endshape(dev); if(i->config_animate) { endtext(dev); i->tag = swf_InsertTag(i->tag,ST_SHOWFRAME); } if(!i->textmode) starttext(dev); msg(" Drawing char %d in font %d at %d,%d in color %02x%02x%02x%02x", glyph, i->swffont->id, x, y, color->r, color->g, color->b, color->a); if(color->a == 0 && i->config_invisibletexttofront) { RGBA color2 = *(RGBA*)color; if(i->config_flashversion>=8) { // use "multiply" blend mode color2.a = color2.r = color2.g = color2.b = 255; } i->topchardata = charbuffer_append(i->topchardata, i->swffont, glyph, x, y, i->current_font_size, color2, &i->fontmatrix); } else { i->chardata = charbuffer_append(i->chardata, i->swffont, glyph, x, y, i->current_font_size, *(RGBA*)color, &i->fontmatrix); } swf_FontUseGlyph(i->swffont, glyph, i->current_font_size); return; } swftools_0.9.2+git20130725.orig/lib/devices/opengl.h0000644000175000017500000000210412216332640021145 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __opengl_h__ #define __opengl_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_opengl_init(gfxdevice_t*); #ifdef __cplusplus } #endif #endif //__opengl_h__ swftools_0.9.2+git20130725.orig/lib/devices/swf.h0000644000175000017500000000211112216332640020456 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __swfoutput_h__ #define __swfoutput_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_swf_init(gfxdevice_t*); #ifdef __cplusplus } #endif #endif //__swfoutput_h__ swftools_0.9.2+git20130725.orig/lib/devices/opengl.c0000644000175000017500000003733612216332640021157 0ustar gawaingawain#include #include #include #include #include "../gfxdevice.h" #include "../gfxtools.h" #include "../types.h" #include #include #include #include #include typedef struct _fontlist { gfxfont_t*font; struct _fontlist*next; } fontlist_t; typedef struct _internal { gfxfont_t*font; char*fontid; fontlist_t* fontlist; int width, height; int currentz; double zstep; int config_polygonoutlines; GLUtesselator *tesselator; GLUtesselator *tesselator_line; GLUtesselator *tesselator_tex; } internal_t; static int verbose = 0; static void dbg(char*format, ...) { char buf[1024]; int l; va_list arglist; if(!verbose) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(device-opengl) %s\n", buf); fflush(stdout); } #ifndef CALLBACK #define CALLBACK #endif typedef void(*callbackfunction_t)(); void CALLBACK errorCallback(GLenum errorCode) { const GLubyte *estring; estring = gluErrorString(errorCode); printf("Tessellation Error: %s\n", estring); exit(0); } void CALLBACK beginCallback(GLenum which) { glBegin(which); } void CALLBACK endCallback(void) { glEnd(); } void CALLBACK vertexCallback(GLvoid *vertex) { double*xyz = (GLdouble*)vertex; glVertex3d(xyz[0],xyz[1],xyz[2]); } void CALLBACK combineCallback(GLdouble coords[3], GLdouble *data[4], GLfloat w[4], GLdouble **out) { GLdouble *vertex; vertex = (GLdouble *) malloc(6 * sizeof(GLdouble)); vertex[0] = coords[0]; vertex[1] = coords[1]; vertex[2] = coords[2]; *out = vertex; } void CALLBACK vertexCallbackTex(GLvoid *vertex) { double*v = (GLdouble*)vertex; glTexCoord2f(v[3],v[4]); glVertex3d(v[0],v[1],v[2]); } void CALLBACK combineCallbackTex(GLdouble coords[3], GLdouble *data[4], GLfloat w[4], GLdouble **out) { GLdouble *vertex; vertex = (GLdouble *) malloc(5 * sizeof(GLdouble)); vertex[0] = coords[0]; vertex[1] = coords[1]; vertex[2] = coords[2]; if(data[2] && data[3]) { vertex[3] = w[0]*data[0][3] + w[1]*data[1][3] + w[2]*data[2][3] + w[3]*data[3][3]; vertex[4] = w[0]*data[0][4] + w[1]*data[1][4] + w[2]*data[2][4] + w[3]*data[3][4]; } else { vertex[3] = w[0]*data[0][3] + w[1]*data[1][3]; vertex[4] = w[0]*data[0][4] + w[1]*data[1][4]; } *out = vertex; } int opengl_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; dbg("setparameter %s=%s", key, value); if(!strcmp(key, "polygonoutlines")) { i->config_polygonoutlines = atoi(value); } else if(!strcmp(key, "zstep")) { i->zstep = atof(value); } return 0; } void opengl_startpage(struct _gfxdevice*dev, int width, int height) { dbg("startpage %d %d", width, height); internal_t*i = (internal_t*)dev->internal; i->width = width; i->height = height; i->currentz = 0; } void opengl_startclip(struct _gfxdevice*dev, gfxline_t*line) { dbg("startclip"); } void opengl_endclip(struct _gfxdevice*dev) { dbg("endclip"); } void opengl_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { dbg("stroke"); internal_t*i = (internal_t*)dev->internal; i->currentz+=1; char running = 0; gfxline_t*l=0; glColor4f(color->r/255.0, color->g/255.0, color->b/255.0, color->a/255.0); //glLineWidth(width*64); if(width <= 0) { width = 1.0; } glLineWidth(width); double z = i->currentz*i->zstep; glPolygonOffset(0.0, 500.0); l = line; while(l) { if(l->type == gfx_moveTo) { if(running) { running = 0; glEnd(); } } if(!running) { running = 1; glBegin(GL_LINE_STRIP); } glVertex3d(l->x, l->y, z); l=l->next; } if(running) { running = 0; glEnd(); } glLineWidth(1.0); } #define SPLINE_SUBDIVISION 2 void tesselatePolygon(GLUtesselator*tesselator, double z, gfxline_t*line) { int len = 0; gfxline_t*l=0; double lastx=0,lasty=0; double*xyz=0; char running = 0; gluTessBeginPolygon(tesselator, NULL); l = line; len = 0; while(l) { if(l->type == gfx_splineTo) { double c = sqrt(abs(l->x-2*l->sx+lastx) + abs(l->y-2*l->sy+lasty))*SPLINE_SUBDIVISION; int steps = (int)c; if(steps<1) steps = 1; len += steps; } else { len++; } l = l->next; } //printf("full len:%d\n", len); xyz = malloc(sizeof(double)*3*len); l = line; len = 0; while(l) { if(l->type == gfx_moveTo) { if(running) { running = 0; gluTessEndContour(tesselator); } } if(!running) { running = 1; gluTessBeginContour(tesselator); } if(l->type == gfx_splineTo) { int j; double c = sqrt(abs(l->x-2*l->sx+lastx) + abs(l->y-2*l->sy+lasty))*SPLINE_SUBDIVISION; int steps = (int)c; if(steps<1) steps = 1; //printf("c=%f d1=%f (%f/%f) d2=%f (%f/%f)\n", c,d1,l->x-l->sx,l->y-l->sy,d2,lastx-l->sx,lasty-l->sy); //printf("%f %f %f\n", lastx, l->sx, l->x); //printf("%f %f %f\n", lasty, l->sy, l->y); for(j=1;j<=steps;j++) { //printf("%d\n", j); double t = (double)j / (double)steps; xyz[len*3+0] = lastx*(1-t)*(1-t) + 2*l->sx*(1-t)*t + l->x*t*t; xyz[len*3+1] = lasty*(1-t)*(1-t) + 2*l->sy*(1-t)*t + l->y*t*t; xyz[len*3+2] = z; gluTessVertex(tesselator, &xyz[len*3], &xyz[len*3]); len++; } //printf("%d\n", len); } else { xyz[len*3+0] = l->x; xyz[len*3+1] = l->y; xyz[len*3+2] = z; gluTessVertex(tesselator, &xyz[len*3], &xyz[len*3]); len++; } lastx = l->x; lasty = l->y; l=l->next; } if(running) { running = 0; gluTessEndContour(tesselator); } gluTessEndPolygon(tesselator); free(xyz); } void opengl_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { double z; dbg("fill %02x%02x%02x%02x", color->a, color->r, color->g, color->b); internal_t*i = (internal_t*)dev->internal; glDisable(GL_TEXTURE_2D); glColor4f(color->r/255.0, color->g/255.0, color->b/255.0, color->a/255.0); i->currentz ++; z = (i->currentz*i->zstep); tesselatePolygon(i->tesselator, z, line); //tesselatePolygon(i->tesselator_line, z, line); } typedef struct _gfxhash { unsigned char d[16]; } gfxhash_t; char gfxhash_compare(gfxhash_t*h1, gfxhash_t*h2) { return !memcmp(h1->d, h2->d, 16); } typedef struct _imgopengl { gfxhash_t hash; GLuint texID; int width, height; unsigned char*data; struct _imgopengl*next; } imgopengl_t; static imgopengl_t*img2texid = 0; static gfxhash_t gfximage_hash(gfximage_t*img) { int t; int size = img->width*img->height*4; U8*data = (U8*)img->data; gfxhash_t hash; memset(&hash, 0, sizeof(hash)); *(int*)&hash.d[0] = string_hash3(data, size); return hash; } static void delTextures() { imgopengl_t*i = img2texid; while(i) { imgopengl_t*next = i->next; if(i->data) { glDeleteTextures(1, &i->texID); free(i->data); } memset(i, 0, sizeof(imgopengl_t)); free(i); i = next; } } static imgopengl_t*addTexture(gfximage_t*img) { gfxhash_t hash = gfximage_hash(img); imgopengl_t*i = img2texid; int width_bits = 0; int height_bits = 0; while(1<width) width_bits++; while(1<height) height_bits++; int newwidth = 1<hash) && newwidth==i->width && newheight==i->height) { return i; } i = i->next; } GLuint texIDs[1]; glGenTextures(1, texIDs); i = malloc(sizeof(imgopengl_t)); i->hash = hash; i->texID = texIDs[0]; i->next = img2texid; img2texid = i; i->width = newwidth; i->height = newheight; unsigned char*data = malloc(newwidth*newheight*4); i->data = data; int x,y; for(y=0;yheight;y++) { for(x=0;xwidth;x++) { data[(y*newwidth+x)*4+0] = img->data[y*img->width+x].r; data[(y*newwidth+x)*4+1] = img->data[y*img->width+x].g; data[(y*newwidth+x)*4+2] = img->data[y*img->width+x].b; data[(y*newwidth+x)*4+3] = img->data[y*img->width+x].a; } int lastx = img->width - 1; for(;xdata[y*img->width+lastx].r; data[(y*newwidth+x)*4+1] = img->data[y*img->width+lastx].g; data[(y*newwidth+x)*4+2] = img->data[y*img->width+lastx].b; data[(y*newwidth+x)*4+3] = img->data[y*img->width+lastx].a; } } int lasty = img->height - 1; for(;ydata[lasty*img->width+x].r; data[(y*newwidth+x)*4+1] = img->data[lasty*img->width+x].g; data[(y*newwidth+x)*4+2] = img->data[lasty*img->width+x].b; data[(y*newwidth+x)*4+3] = img->data[lasty*img->width+x].a; } } glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, i->texID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, i->width, i->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); return i; }; void opengl_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { dbg("fillbitmap"); internal_t*i = (internal_t*)dev->internal; char running = 0; int len = 0; double*xyz=0; gfxline_t*l=0; glColor4f(1.0,0,0.7,1.0); i->currentz ++; imgopengl_t* txt = addTexture(img); gfxmatrix_t m2; gfxmatrix_invert(matrix, &m2); m2.m00 /= txt->width; m2.m10 /= txt->width; m2.tx /= txt->width; m2.m01 /= txt->height; m2.m11 /= txt->height; m2.ty /= txt->height; glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, txt->texID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); gluTessBeginPolygon(i->tesselator_tex, NULL); l = line; len = 0; while(l) { len++; l = l->next; } xyz = malloc(sizeof(double)*5*len); l = line; len = 0; while(l) { if(l->type == gfx_moveTo) { if(running) { running = 0; gluTessEndContour(i->tesselator_tex); } } if(!running) { running = 1; gluTessBeginContour(i->tesselator_tex); } xyz[len*5+0] = l->x; xyz[len*5+1] = l->y; xyz[len*5+2] = (i->currentz*i->zstep); xyz[len*5+3] = 0; xyz[len*5+4] = 0; gfxmatrix_transform(&m2, /*src*/&xyz[len*5+0], /*dest*/&xyz[len*5+3]); gluTessVertex(i->tesselator_tex, &xyz[len*5], &xyz[len*5]); len++; l=l->next; } if(running) { running = 0; gluTessEndContour(i->tesselator_tex); } gluTessEndPolygon(i->tesselator_tex); free(xyz); glDisable(GL_TEXTURE_2D); } void opengl_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { dbg("fillgradient"); } void opengl_addfont(gfxdevice_t*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; fontlist_t*last=0,*l = i->fontlist; while(l) { last = l; if(!strcmp((char*)l->font->id, font->id)) { return; // we already know this font } l = l->next; } l = (fontlist_t*)rfx_calloc(sizeof(fontlist_t)); l->font = font; l->next = 0; if(last) { last->next = l; } else { i->fontlist = l; } } void opengl_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(!font) return; if(i->font && i->font->id && !strcmp(font->id, i->font->id)) { // current font is correct } else { fontlist_t*l = i->fontlist; i->font = 0; while(l) { if(!strcmp((char*)l->font->id, font->id)) { i->font = l->font; break; } l = l->next; } if(i->font == 0) { opengl_addfont(dev, font); i->font = font; //fprintf(stderr, "Unknown font id: %s", font->id); //return; } } gfxglyph_t*glyph = &i->font->glyphs[glyphnr]; gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); opengl_fill(dev, line2, color); gfxline_free(line2); i->currentz --; return; } void opengl_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { dbg("link"); } void opengl_endpage(struct _gfxdevice*dev) { dbg("endpage"); } int opengl_result_save(struct _gfxresult*gfx, const char*filename) { dbg("result:save"); return 0; } void* opengl_result_get(struct _gfxresult*gfx, const char*name) { dbg("result:get"); return 0; } void opengl_result_destroy(struct _gfxresult*gfx) { dbg("result:destroy"); free(gfx); delTextures(); } gfxresult_t*opengl_finish(struct _gfxdevice*dev) { dbg("finish"); internal_t*i = (internal_t*)dev->internal; gluDeleteTess(i->tesselator);i->tesselator=0; gluDeleteTess(i->tesselator_tex);i->tesselator_tex=0; gfxresult_t*result = (gfxresult_t*)malloc(sizeof(gfxresult_t)); memset(result, 0, sizeof(gfxresult_t)); result->save = opengl_result_save; result->get = opengl_result_get; result->destroy = opengl_result_destroy; return result; } void gfxdevice_opengl_init(gfxdevice_t*dev) { dbg("init"); internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "opengl"; dev->internal = i; dev->setparameter = opengl_setparameter; dev->startpage = opengl_startpage; dev->startclip = opengl_startclip; dev->endclip = opengl_endclip; dev->stroke = opengl_stroke; dev->fill = opengl_fill; dev->fillbitmap = opengl_fillbitmap; dev->fillgradient = opengl_fillgradient; dev->addfont = opengl_addfont; dev->drawchar = opengl_drawchar; dev->drawlink = opengl_drawlink; dev->endpage = opengl_endpage; dev->finish = opengl_finish; i->zstep = 1.0 / 32; i->tesselator = gluNewTess(); gluTessCallback(i->tesselator, GLU_TESS_ERROR, (callbackfunction_t)errorCallback); gluTessCallback(i->tesselator, GLU_TESS_VERTEX, (callbackfunction_t)vertexCallback); gluTessCallback(i->tesselator, GLU_TESS_BEGIN, (callbackfunction_t)beginCallback); gluTessCallback(i->tesselator, GLU_TESS_END, (callbackfunction_t)endCallback); gluTessCallback(i->tesselator, GLU_TESS_COMBINE, (callbackfunction_t)combineCallback); i->tesselator_line = gluNewTess(); gluTessCallback(i->tesselator_line, GLU_TESS_ERROR, (callbackfunction_t)errorCallback); gluTessCallback(i->tesselator_line, GLU_TESS_VERTEX, (callbackfunction_t)vertexCallback); gluTessCallback(i->tesselator_line, GLU_TESS_BEGIN, (callbackfunction_t)beginCallback); gluTessCallback(i->tesselator_line, GLU_TESS_END, (callbackfunction_t)endCallback); gluTessProperty(i->tesselator_line, GLU_TESS_BOUNDARY_ONLY, 1.0); i->tesselator_tex = gluNewTess(); gluTessCallback(i->tesselator_tex, GLU_TESS_ERROR, (callbackfunction_t)errorCallback); gluTessCallback(i->tesselator_tex, GLU_TESS_VERTEX, (callbackfunction_t)vertexCallbackTex); gluTessCallback(i->tesselator_tex, GLU_TESS_BEGIN, (callbackfunction_t)beginCallback); gluTessCallback(i->tesselator_tex, GLU_TESS_END, (callbackfunction_t)endCallback); gluTessCallback(i->tesselator_tex, GLU_TESS_COMBINE, (callbackfunction_t)combineCallbackTex); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); } swftools_0.9.2+git20130725.orig/lib/devices/render.h0000644000175000017500000000215412216332640021145 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __render_h__ #define __render_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_render_init(gfxdevice_t*); gfxdevice_t* gfxdevice_render_new(); #ifdef __cplusplus } #endif #endif //__swfoutput_h__ swftools_0.9.2+git20130725.orig/lib/devices/ops.c0000644000175000017500000001251712216332640020466 0ustar gawaingawain/* ops.c Part of the swftools package. Copyright (c) 2006 Matthias Kramm 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 */ #include #include #include #ifndef WIN32 #include #endif #include #include #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "ops.h" typedef struct _internal { gfxdevice_t*out; U8 alpha; } internal_t; static int verbose = 1; static void dbg(char*format, ...) { if(!verbose) return; char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(device-ops) %s\n", buf); fflush(stdout); } inline gfxcolor_t transform_color(internal_t*i, gfxcolor_t*col) { gfxcolor_t col2; /*col2.r = (col->r * i->alpha)>>8; col2.g = (col->g * i->alpha)>>8; col2.b = (col->b * i->alpha)>>8;*/ col2.r = col->r; col2.g = col->g; col2.b = col->b; col2.a = (col->a * i->alpha)/255; return col2; } int ops_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; return i->out->setparameter(i->out,key,value); } void ops_startpage(struct _gfxdevice*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; i->out->startpage(i->out,width,height); } void ops_startclip(struct _gfxdevice*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; i->out->startclip(i->out,line); } void ops_endclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endclip(i->out); } void ops_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; gfxcolor_t color2 = transform_color(i, color); i->out->stroke(i->out, line, width, &color2, cap_style, joint_style, miterLimit); } void ops_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; gfxcolor_t color2 = transform_color(i, color); i->out->fill(i->out, line, &color2); } void ops_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; gfximage_t img2; img2.width = img->width; img2.height = img->height; img2.data = (gfxcolor_t*)malloc(img->width*img->height*4); int x,y; for(y=0;yheight;y++) { gfxcolor_t*in = &img->data[y*img->width]; gfxcolor_t*out = &img2.data[y*img->width]; for(x=0;xwidth;x++) { out[x] = transform_color(i, &in[x]); } } i->out->fillbitmap(i->out, line, &img2, matrix, cxform); free(img2.data); } void ops_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; i->out->fillgradient(i->out, line, gradient, type, matrix); } void ops_addfont(struct _gfxdevice*dev, gfxfont_t*font) { internal_t*i = (internal_t*)dev->internal; i->out->addfont(i->out, font); } void ops_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; gfxcolor_t color2 = transform_color(i, color); i->out->drawchar(i->out, font, glyphnr, color, matrix); } void ops_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { internal_t*i = (internal_t*)dev->internal; i->out->drawlink(i->out, line, action, text); } void ops_endpage(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; i->out->endpage(i->out); } gfxresult_t* ops_finish(struct _gfxdevice*dev) { if(dev->internal) free(dev->internal); dev->internal = 0; return 0; } void gfxdevice_ops_init(gfxdevice_t*dev, gfxdevice_t*out, U8 alpha) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "ops"; dev->internal = i; dev->setparameter = ops_setparameter; dev->startpage = ops_startpage; dev->startclip = ops_startclip; dev->endclip = ops_endclip; dev->stroke = ops_stroke; dev->fill = ops_fill; dev->fillbitmap = ops_fillbitmap; dev->fillgradient = ops_fillgradient; dev->addfont = ops_addfont; dev->drawchar = ops_drawchar; dev->drawlink = ops_drawlink; dev->endpage = ops_endpage; dev->finish = ops_finish; i->out = out; i->alpha = alpha; } swftools_0.9.2+git20130725.orig/lib/devices/ops.h0000644000175000017500000000220112216332640020460 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_ops_h__ #define __gfxdevice_ops_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_ops_init(gfxdevice_t*self, gfxdevice_t*dest, unsigned char alpha); #ifdef __cplusplus } #endif #endif //__gfxdevice_ops_h__ swftools_0.9.2+git20130725.orig/lib/devices/dummy.h0000644000175000017500000000212012216332640021012 0ustar gawaingawain/* dummy.h Header file for dummy.c Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_dummy_h__ #define __gfxdevice_dummy_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_dummy_init(gfxdevice_t*dev, gfxdevice_t*out); #ifdef __cplusplus } #endif #endif //__gfxdevice_dummy_h__ swftools_0.9.2+git20130725.orig/lib/devices/record.h0000644000175000017500000000255012216332640021144 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __record_h__ #define __record_h__ #include "../gfxdevice.h" #include "../gfxtools.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_record_init(gfxdevice_t*, char use_tempfile); gfxdevice_t* gfxdevice_record_new(char*filename); void gfxdevice_record_flush(gfxdevice_t*, gfxdevice_t*, gfxfontlist_t**); void gfxresult_record_replay(gfxresult_t*, gfxdevice_t*, gfxfontlist_t**); void gfxdevice_record_show(gfxdevice_t*dev); #ifdef __cplusplus } #endif #endif //__record_h__ swftools_0.9.2+git20130725.orig/lib/devices/pdf.h0000644000175000017500000000205112216332640020433 0ustar gawaingawain/* pdf.h Header file for pdf.c Part of the swftools package. Copyright (c) 2009 Matthias Kramm 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 */ #ifndef __gfxdevice_pdf_h__ #define __gfxdevice_pdf_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_pdf_init(gfxdevice_t*dev); #ifdef __cplusplus } #endif #endif //__gfxdevice_pdf_h__ swftools_0.9.2+git20130725.orig/lib/devices/rescale.h0000644000175000017500000000273112216332640021305 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_rescale_h__ #define __gfxdevice_rescale_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif /* either: width,height = desired output size or: scale = desired zoom factor */ void gfxdevice_rescale_init(gfxdevice_t*dev, gfxdevice_t*out, int width, int height, double scale); gfxdevice_t* gfxdevice_rescale_new(gfxdevice_t*out, int width, int height, double scale); void gfxdevice_rescale_setzoom(gfxdevice_t*dev, double scale); void gfxdevice_rescale_setdevice(gfxdevice_t*dev, gfxdevice_t*out); #ifdef __cplusplus } #endif #endif //__gfxdevice_rescale_h__ swftools_0.9.2+git20130725.orig/lib/devices/text.c0000644000175000017500000001524412216332640020651 0ustar gawaingawain/* text.c Part of the swftools package. Copyright (c) 2006 Matthias Kramm 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 */ #include #include #include #include #include #include #include "../types.h" #include "../mem.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../utf8.h" typedef struct _textpage { char*text; int textsize; int textpos; struct _textpage*next; } textpage_t; typedef struct _internal { textpage_t*first_page; textpage_t*current_page; double currentx; double currenty; double lastadvance; } internal_t; int text_setparameter(gfxdevice_t*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; return 0; } void text_startpage(gfxdevice_t*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; if(!i->first_page) { i->first_page = i->current_page = (textpage_t*)malloc(sizeof(textpage_t)); } else { i->current_page->next = (textpage_t*)malloc(sizeof(textpage_t)); i->current_page = i->current_page->next; } i->current_page->textsize = 4096; i->current_page->text = (char*)malloc(i->current_page->textsize); i->current_page->textpos = 0; i->current_page->next = 0; i->currentx = 0; i->currenty = 0; i->lastadvance = 0; } void text_startclip(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; } void text_endclip(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; } void text_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; } void text_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; } void text_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; } void text_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; } void text_addfont(gfxdevice_t*dev, gfxfont_t*font) {} static void addchar(gfxdevice_t*dev, int unicode) { internal_t*i = (internal_t*)dev->internal; if(!i->current_page) { text_startpage(dev, 0, 0); } if(i->current_page->textpos + 10 > i->current_page->textsize) { i->current_page->textsize += 4096; i->current_page->text = realloc(i->current_page->text, i->current_page->textsize); } writeUTF8(unicode, &i->current_page->text[i->current_page->textpos]); i->current_page->textpos += strlen(&i->current_page->text[i->current_page->textpos]); } void text_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; double xshift = matrix->tx - i->currentx; double yshift = matrix->ty - i->currenty; i->currentx = matrix->tx; i->currenty = matrix->ty; if(fabs(yshift)>1.0) { addchar(dev, 10); } else if(xshift > i->lastadvance*1.3 || xshift<0) { addchar(dev, 32); } int u; if(font) { i->lastadvance = font->glyphs[glyphnr].advance*matrix->m00; u = font->glyphs[glyphnr].unicode; } else { u = glyphnr; i->currentx = 0;i->currenty = 0; } if(u>13) { addchar(dev, u); } } void text_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*drawlink) { internal_t*i = (internal_t*)dev->internal; } void text_endpage(gfxdevice_t*dev) { internal_t*i = (internal_t*)dev->internal; } void text_result_write(gfxresult_t*r, int filedesc) { textpage_t*i= (textpage_t*)r->internal; } int text_result_save(gfxresult_t*r, const char*filename) { textpage_t*i= (textpage_t*)r->internal; if(!i) { return 0; // no pages drawn } FILE*fi = fopen(filename, "wb"); if(!fi) return 0; while(i) { fwrite(i->text, i->textpos, 1, fi); i = i->next; } fclose(fi); return 1; } void*text_result_get(gfxresult_t*r, const char*name) { textpage_t*i= (textpage_t*)r->internal; if(!strcmp(name,"text")) { textpage_t*j = i; int len = 0; while(j) { len += i->textpos; j = j->next; } char*text = (char*)malloc(len); int pos = 0; j = i; while(j) { memcpy(&text[pos], i->text, i->textpos); pos += i->textpos; j = j->next; } text[pos] = 0; return text; } else if(!strncmp(name,"page",4)) { int pagenr = atoi(&name[4]); if(pagenr<0) pagenr=0; while(pagenr>0) { i = i->next; if(!i) return 0; } i->text[i->textpos] = 0; return strdup(i->text); } return 0; } void text_result_destroy(gfxresult_t*r) { textpage_t*i= (textpage_t*)r->internal; r->internal = 0; while(i) { textpage_t*next = i->next; free(i->text);i->text = 0; free(i); i = next; } free(r); } gfxresult_t* text_finish(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; gfxresult_t* res = (gfxresult_t*)rfx_calloc(sizeof(gfxresult_t)); res->internal = i->first_page;i->first_page = 0;i->current_page=0; res->write = text_result_write; res->save = text_result_save; res->get = text_result_get; res->destroy = text_result_destroy; free(dev->internal); dev->internal = 0; i = 0; return res; } void gfxdevice_text_init(gfxdevice_t*dev, gfxdevice_t*out) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "text"; dev->internal = i; dev->setparameter = text_setparameter; dev->startpage = text_startpage; dev->startclip = text_startclip; dev->endclip = text_endclip; dev->stroke = text_stroke; dev->fill = text_fill; dev->fillbitmap = text_fillbitmap; dev->fillgradient = text_fillgradient; dev->addfont = text_addfont; dev->drawchar = text_drawchar; dev->drawlink = text_drawlink; dev->endpage = text_endpage; dev->finish = text_finish; } swftools_0.9.2+git20130725.orig/lib/devices/polyops.h0000644000175000017500000000235312216332640021374 0ustar gawaingawain/* gfxdevice_polyops.h Header file for gfxdevice_polyops.c Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __gfxdevice_polyops_h__ #define __gfxdevice_polyops_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_removeclippings_init(gfxdevice_t*self, gfxdevice_t*dest); void gfxdevice_union_init(gfxdevice_t*self, gfxdevice_t*dest); gfxline_t*gfxdevice_union_getunion(struct _gfxdevice*dev); #ifdef __cplusplus } #endif #endif //__gfxdevice_polyops_h__ swftools_0.9.2+git20130725.orig/lib/devices/render.c0000644000175000017500000006515012216332640021145 0ustar gawaingawain/* render.c Part of the swftools package. Copyright (c) 2005/2006/2007 Matthias Kramm 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 */ #include #include #include #include #include "../gfxdevice.h" #include "../gfxtools.h" #include "../mem.h" #include "../types.h" #include "../png.h" #include "../log.h" #include "render.h" typedef gfxcolor_t RGBA; typedef struct _renderpoint { float x; } renderpoint_t; typedef struct _renderline { renderpoint_t*points; int size; int num; } renderline_t; typedef struct _internal_result { gfximage_t img; struct _internal_result*next; char palette; } internal_result_t; typedef struct _clipbuffer { U32*data; struct _clipbuffer*next; } clipbuffer_t; typedef struct _internal { int width; int height; int width2; int height2; int bitwidth; int multiply; int antialize; int zoom; int ymin, ymax; int fillwhite; char palette; RGBA* img; clipbuffer_t*clipbuf; renderline_t*lines; internal_result_t*results; internal_result_t*result_next; } internal_t; typedef enum {filltype_solid,filltype_clip,filltype_bitmap,filltype_gradient} filltype_t; typedef struct _fillinfo { filltype_t type; gfxcolor_t*color; gfximage_t*image; gfxmatrix_t*matrix; gfxcxform_t*cxform; RGBA*gradient; char linear_or_radial; } fillinfo_t; static inline void add_pixel(internal_t*i, float x, int y) { renderpoint_t p; if(x >= i->width2 || y >= i->height2 || y<0) return; p.x = x; if(yymin) i->ymin = y; if(y>i->ymax) i->ymax = y; renderline_t*l = &i->lines[y]; if(l->num == l->size) { l->size += 32; l->points = (renderpoint_t*)rfx_realloc(l->points, l->size * sizeof(renderpoint_t)); } l->points[l->num] = p; l->num++; } /* set this to 0.777777 or something if the "both fillstyles set while not inside shape" problem appears to often */ #define CUT 0.5 #define INT(x) ((int)((x)+16)-16) static void add_line(gfxdevice_t*dev , double x1, double y1, double x2, double y2) { internal_t*i = (internal_t*)dev->internal; double diffx, diffy; double ny1, ny2, stepx; /* if(DEBUG&4) { int l = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)); printf(" l[%d - %.2f/%.2f -> %.2f/%.2f]\n", l, x1/20.0, y1/20.0, x2/20.0, y2/20.0); }*/ if(y2 < y1) { double x; double y; x = x1;x1 = x2;x2=x; y = y1;y1 = y2;y2=y; } diffx = x2 - x1; diffy = y2 - y1; ny1 = INT(y1)+CUT; ny2 = INT(y2)+CUT; if(ny1 < y1) { ny1 = INT(y1) + 1.0 + CUT; } if(ny2 >= y2) { ny2 = INT(y2) - 1.0 + CUT; } if(ny1 > ny2) return; stepx = diffx/diffy; x1 = x1 + (ny1-y1)*stepx; x2 = x2 + (ny2-y2)*stepx; { int posy=INT(ny1); int endy=INT(ny2); double posx=0; double startx = x1; while(posy<=endy) { float xx = (float)(startx + posx); add_pixel(i, xx ,posy); posx+=stepx; posy++; } } } #define PI 3.14159265358979 static void add_solidline(gfxdevice_t*dev, double x1, double y1, double x2, double y2, double width) { /* TODO: handle cap styles */ internal_t*i = (internal_t*)dev->internal; double dx = x2-x1; double dy = y2-y1; double sd; double d; int t; int segments; double lastx,lasty; double vx,vy; double xx,yy; /* Make sure the line is always at least one pixel wide */ #ifdef LINEMODE1 /* That's what Macromedia's Player does at least at zoom level >= 1. */ width += 1.0; #else /* That's what Macromedia's Player seems to do at zoom level 0. */ /* TODO: needs testing */ /* TODO: how does this interact with scaling? */ if(width * i->multiply < 1.0) width = 1.0 / i->multiply; #endif sd = (double)dx*(double)dx+(double)dy*(double)dy; d = sqrt(sd); if(!dx && !dy) { vx = 1; vy = 0; } else { vx = ( dy/d); vy = (-dx/d); } segments = width/2; if(segments < 2) segments = 2; segments = 8; vx=vx*width*0.5; vy=vy*width*0.5; xx = x2+vx; yy = y2+vy; add_line(dev, x1+vx, y1+vy, xx, yy); lastx = xx; lasty = yy; for(t=1;tx < b->x) return -1; if(a->x > b->x) return 1; return 0; } static void fill_line_solid(RGBA*line, U32*z, int y, int x1, int x2, RGBA col) { int x = x1; U32 bit = 1<<(x1&31); int bitpos = (x1/32); if(col.a!=255) { int ainv = 255-col.a; col.r = (col.r*col.a)/255; col.g = (col.g*col.a)/255; col.b = (col.b*col.a)/255; do { if(z[bitpos]&bit) { line[x].r = ((line[x].r*ainv)/255)+col.r; line[x].g = ((line[x].g*ainv)/255)+col.g; line[x].b = ((line[x].b*ainv)/255)+col.b; //line[x].a = 255; line[x].a = ((line[x].a*ainv)/255)+col.a; } bit <<= 1; if(!bit) { bit = 1;bitpos++; } } while(++xmatrix; gfximage_t*b = info->image; if(!b || !b->width || !b->height) { gfxcolor_t red = {255,255,0,0}; fill_line_solid(line, z, y, x1, x2, red); return; } double det = m->m00*m->m11 - m->m01*m->m10; if(fabs(det) < 0.0005) { /* x direction equals y direction- the image is invisible */ return; } det = 1.0/det; double xx1 = ( (-m->tx) * m->m11 - (y - m->ty) * m->m10) * det; double yy1 = (- (-m->tx) * m->m01 + (y - m->ty) * m->m00) * det; double xinc1 = m->m11 * det; double yinc1 = m->m01 * det; U32 bit = 1<<(x1&31); int bitpos = (x1/32); do { if(z[bitpos]&bit) { RGBA col; int xx = (int)(xx1 + x * xinc1); int yy = (int)(yy1 - x * yinc1); int ainv; if(info->linear_or_radial) { if(xx<0) xx=0; if(xx>=b->width) xx = b->width-1; if(yy<0) yy=0; if(yy>=b->height) yy = b->height-1; } else { xx %= b->width; yy %= b->height; if(xx<0) xx += b->width; if(yy<0) yy += b->height; } col = b->data[yy*b->width+xx]; ainv = 255-col.a; /* needs bitmap with premultiplied alpha */ line[x].r = ((line[x].r*ainv)/255)+col.r; line[x].g = ((line[x].g*ainv)/255)+col.g; line[x].b = ((line[x].b*ainv)/255)+col.b; line[x].a = 255; } bit <<= 1; if(!bit) { bit = 1;bitpos++; } } while(++xmatrix; RGBA*g= info->gradient; double det = m->m00*m->m11 - m->m01*m->m10; if(fabs(det) < 0.0005) { /* x direction equals y direction */ return; } det = 1.0/det; double xx1 = ( (-m->tx) * m->m11 - (y - m->ty) * m->m10) * det; double yy1 = (- (-m->tx) * m->m01 + (y - m->ty) * m->m00) * det; double xinc1 = m->m11 * det; double yinc1 = m->m01 * det; U32 bit = 1<<(x1&31); int bitpos = (x1/32); do { if(z[bitpos]&bit) { RGBA col; int ainv; int pos = 0; if(info->linear_or_radial) { double xx = xx1 + x * xinc1; double yy = yy1 + y * yinc1; double r = sqrt(xx*xx + yy*yy); if(r>1) r = 1; pos = (int)(r*255.999); } else { double r = xx1 + x * xinc1; if(r>1) r = 1; if(r<-1) r = -1; pos = (int)((r+1)*127.999); } col = g[pos]; ainv = 255-col.a; /* needs bitmap with premultiplied alpha */ line[x].r = ((line[x].r*ainv)/255)+col.r; line[x].g = ((line[x].g*ainv)/255)+col.g; line[x].b = ((line[x].b*ainv)/255)+col.b; line[x].a = 255; } bit <<= 1; if(!bit) { bit = 1;bitpos++; } } while(++xtype == filltype_solid) fill_line_solid(line, zline, y, startx, endx, *fill->color); else if(fill->type == filltype_clip) fill_line_clip(line, zline, y, startx, endx); else if(fill->type == filltype_bitmap) fill_line_bitmap(line, zline, y, startx, endx, fill); else if(fill->type == filltype_gradient) fill_line_gradient(line, zline, y, startx, endx, fill); } void fill(gfxdevice_t*dev, fillinfo_t*fill) { internal_t*i = (internal_t*)dev->internal; int y; U32 clipdepth = 0; for(y=i->ymin;y<=i->ymax;y++) { renderpoint_t*points = i->lines[y].points; RGBA*line = &i->img[i->width2*y]; U32*zline = &i->clipbuf->data[i->bitwidth*y]; int n; int num = i->lines[y].num; int lastx; qsort(points, num, sizeof(renderpoint_t), compare_renderpoints); for(n=0;nx; int endx = next?next->x:i->width2; if(endx > i->width2) endx = i->width2; if(startx < 0) startx = 0; if(endx < 0) endx = 0; if(!(n&1)) fill_line(dev, line, zline, y, startx, endx, fill); lastx = endx; if(endx == i->width2) break; } if(fill->type == filltype_clip) { if(i->clipbuf->next) { U32*line2 = &i->clipbuf->next->data[i->bitwidth*y]; int x; for(x=0;xbitwidth;x++) zline[x] &= line2[x]; } } i->lines[y].num = 0; } } void fill_solid(gfxdevice_t*dev, gfxcolor_t* color) { fillinfo_t info; memset(&info, 0, sizeof(info)); info.type = filltype_solid; info.color = color; fill(dev, &info); } int render_setparameter(struct _gfxdevice*dev, const char*key, const char*value) { internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "antialize") || !strcmp(key, "antialise")) { i->antialize = atoi(value); i->zoom = i->antialize * i->multiply; return 1; } else if(!strcmp(key, "multiply")) { i->multiply = atoi(value); i->zoom = i->antialize * i->multiply; fprintf(stderr, "Warning: multiply not implemented yet\n"); return 1; } else if(!strcmp(key, "fillwhite")) { i->fillwhite = atoi(value); return 1; } else if(!strcmp(key, "palette")) { i->palette = atoi(value); return 1; } return 0; } void newclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; clipbuffer_t*c = (clipbuffer_t*)rfx_calloc(sizeof(clipbuffer_t)); c->data = (U32*)rfx_calloc(sizeof(U32) * i->bitwidth * i->height2); c->next = i->clipbuf; i->clipbuf = c; memset(c->data, 0, sizeof(U32)*i->bitwidth*i->height2); } void endclip(struct _gfxdevice*dev, char removelast) { internal_t*i = (internal_t*)dev->internal; /* test for at least one cliplevel (the one we created ourselves) */ if(!i->clipbuf || (!i->clipbuf->next && !removelast)) { fprintf(stderr, "endclip without any active clip buffers\n"); return; } clipbuffer_t*c = i->clipbuf; i->clipbuf = i->clipbuf->next; c->next = 0; free(c->data);c->data = 0; free(c); } void render_stroke(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { internal_t*i = (internal_t*)dev->internal; double x,y; /*if(cap_style != gfx_capRound || joint_style != gfx_joinRound) { fprintf(stderr, "Warning: cap/joint style != round not yet supported\n"); }*/ while(line) { if(line->type == gfx_moveTo) { } else if(line->type == gfx_lineTo) { double x1=x*i->zoom,y1=y*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; add_solidline(dev, x1, y1, x3, y3, width * i->zoom); fill_solid(dev, color); } else if(line->type == gfx_splineTo) { int t,parts; double xx,yy; double x1=x*i->zoom,y1=y*i->zoom; double x2=line->sx*i->zoom,y2=line->sy*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; double c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); xx=x1; yy=y1; parts = (int)(sqrt(c)/3); if(!parts) parts = 1; for(t=1;t<=parts;t++) { double nx = (double)(t*t*x3 + 2*t*(parts-t)*x2 + (parts-t)*(parts-t)*x1)/(double)(parts*parts); double ny = (double)(t*t*y3 + 2*t*(parts-t)*y2 + (parts-t)*(parts-t)*y1)/(double)(parts*parts); add_solidline(dev, xx, yy, nx, ny, width * i->zoom); fill_solid(dev, color); xx = nx; yy = ny; } } x = line->x; y = line->y; line = line->next; } } static void draw_line(gfxdevice_t*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; double x=0,y=0; while(line) { int x1,y1,x2,y2,x3,y3; if(line->type == gfx_moveTo) { } else if(line->type == gfx_lineTo) { double x1=x*i->zoom,y1=y*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; add_line(dev, x1, y1, x3, y3); } else if(line->type == gfx_splineTo) { int c,t,parts,qparts; double xx,yy; double x1=x*i->zoom,y1=y*i->zoom; double x2=line->sx*i->zoom,y2=line->sy*i->zoom; double x3=line->x*i->zoom,y3=line->y*i->zoom; c = abs(x3-2*x2+x1) + abs(y3-2*y2+y1); xx=x1; yy=y1; parts = (int)(sqrt(c)); if(!parts) parts = 1; for(t=1;t<=parts;t++) { double nx = (double)(t*t*x3 + 2*t*(parts-t)*x2 + (parts-t)*(parts-t)*x1)/(double)(parts*parts); double ny = (double)(t*t*y3 + 2*t*(parts-t)*y2 + (parts-t)*(parts-t)*y1)/(double)(parts*parts); add_line(dev, xx, yy, nx, ny); xx = nx; yy = ny; } } x = line->x; y = line->y; line = line->next; } } void render_startclip(struct _gfxdevice*dev, gfxline_t*line) { internal_t*i = (internal_t*)dev->internal; fillinfo_t info; memset(&info, 0, sizeof(info)); newclip(dev); info.type = filltype_clip; draw_line(dev, line); fill(dev, &info); } void render_endclip(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; endclip(dev, 0); } void render_fill(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color) { internal_t*i = (internal_t*)dev->internal; draw_line(dev, line); fill_solid(dev, color); } void render_fillbitmap(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform) { internal_t*i = (internal_t*)dev->internal; gfxmatrix_t m2 = *matrix; draw_line(dev, line); fillinfo_t info; memset(&info, 0, sizeof(info)); info.type = filltype_bitmap; info.image = img; info.matrix = &m2; info.cxform = cxform; m2.m00 *= i->zoom; m2.m01 *= i->zoom; m2.tx *= i->zoom; m2.m10 *= i->zoom; m2.m11 *= i->zoom; m2.ty *= i->zoom; fill(dev, &info); } void render_fillgradient(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; gfxmatrix_t m2 = *matrix; draw_line(dev, line); RGBA g[256]; fillinfo_t info; memset(&info, 0, sizeof(info)); info.type = filltype_gradient; info.gradient = g; info.matrix = &m2; m2.m00 *= i->zoom; m2.m01 *= i->zoom; m2.tx *= i->zoom; m2.m10 *= i->zoom; m2.m11 *= i->zoom; m2.ty *= i->zoom; info.linear_or_radial = type == gfxgradient_radial; int pos = 0; gfxcolor_t color = {0,0,0,0}; pos=0; while(gradient) { int nextpos = gradient->pos*256; int t; if(nextpos>256) { msg(" Invalid gradient- contains values > 1.0"); return; } gfxcolor_t nextcolor = gradient->color; if(nextpos!=pos) { double p0 = 1.0; double p1 = 0.0; double step = 1.0/(nextpos-pos); int t; for(t=pos;tnext; } if(pos!=256) { msg(" Invalid gradient- doesn't end with 1.0"); } fill(dev, &info); } void render_addfont(struct _gfxdevice*dev, gfxfont_t*font) { } void render_drawchar(struct _gfxdevice*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { internal_t*i = (internal_t*)dev->internal; if(!font) return; /* align characters to whole pixels */ matrix->tx = (int)(matrix->tx * i->antialize) / i->antialize; matrix->ty = (int)(matrix->ty * i->antialize) / i->antialize; gfxglyph_t*glyph = &font->glyphs[glyphnr]; gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); draw_line(dev, line2); fill_solid(dev, color); gfxline_free(line2); return; } void render_result_write(gfxresult_t*r, int filedesc) { internal_result_t*i= (internal_result_t*)r->internal; } int render_result_save(gfxresult_t*r, const char*filename) { internal_result_t*i= (internal_result_t*)r->internal; if(!i) { return 0; // no pages drawn } if(i->next) { int nr=0; char filenamebuf[256]; char*origname = strdup(filename); int l = strlen(origname); if(l>3 && strchr("gG",origname[l-1]) && strchr("nN",filename[l-2]) && strchr("pP",origname[l-3]) && filename[l-4]=='.') { origname[l-4] = 0; } while(i->next) { sprintf(filenamebuf, "%s.%d.png", origname, nr); if(!i->palette) { png_write(filename, (unsigned char*)i->img.data, i->img.width, i->img.height); } else { png_write_palette_based_2(filename, (unsigned char*)i->img.data, i->img.width, i->img.height); } nr++; } free(origname); } else { if(!i->palette) { png_write(filename, (unsigned char*)i->img.data, i->img.width, i->img.height); } else { png_write_palette_based_2(filename, (unsigned char*)i->img.data, i->img.width, i->img.height); } } return 1; } char*gfximage_asXPM(gfximage_t*img, int depth) { int d= 256/depth; char*str = (char*)malloc(img->width*img->height*4 + 500 + 16*depth*depth*depth); char*p = str; p+= sprintf(p, "static char *noname[] = {\n\"%d %d 262144 3\",\n", img->width, img->height); int r,g,b; for(r=0;rheight;y++) { p+=sprintf(p, "\""); gfxcolor_t*col = &img->data[y*img->height]; int x; for(x=0;xwidth;x++) { p+=sprintf(p, "%c%c%c", 32+(col->r/d), 32+(col->g/d), 32+(col->b/d)); } p+=sprintf(p, "\",\n"); } *p = 0; return p; } void*render_result_get(gfxresult_t*r, const char*name) { internal_result_t*i= (internal_result_t*)r->internal; if(!strncmp(name,"xpm",3)) { int pagenr = atoi(&name[3]); if(pagenr<0) pagenr=0; while(pagenr>0) { i = i->next; if(!i) return 0; pagenr--; } return gfximage_asXPM(&i->img, 64); } else if(!strncmp(name,"page",4)) { int pagenr = atoi(&name[4]); if(pagenr<0) pagenr=0; while(pagenr>0) { i = i->next; if(!i) return 0; pagenr--; } return &i->img; } return 0; } void render_result_destroy(gfxresult_t*r) { internal_result_t*i= (internal_result_t*)r->internal; r->internal = 0; while(i) { internal_result_t*next = i->next; free(i->img.data);i->img.data = 0; /* FIXME memleak the following rfx_free causes a segfault on WIN32 machines, if executed */ //rfx_free(i); i = next; } rfx_free(r); } gfxresult_t* render_finish(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; gfxresult_t* res = (gfxresult_t*)rfx_calloc(sizeof(gfxresult_t)); res->internal = i->results;i->results = 0; res->write = render_result_write; res->save = render_result_save; res->get = render_result_get; res->destroy = render_result_destroy; free(dev->internal); dev->internal = 0; i = 0; return res; } void render_startpage(struct _gfxdevice*dev, int width, int height) { internal_t*i = (internal_t*)dev->internal; int y; if(i->width2 || i->height2) { fprintf(stderr, "Error: startpage() called twice (no endpage()?)\n"); exit(1); } i->width = width*i->multiply; i->height = height*i->multiply; i->width2 = width*i->zoom; i->height2 = height*i->zoom; i->bitwidth = (i->width2+31)/32; i->lines = (renderline_t*)rfx_alloc(i->height2*sizeof(renderline_t)); for(y=0;yheight2;y++) { memset(&i->lines[y], 0, sizeof(renderline_t)); i->lines[y].points = 0; i->lines[y].num = 0; } i->img = (RGBA*)rfx_calloc(sizeof(RGBA)*i->width2*i->height2); if(i->fillwhite) { memset(i->img, 0xff, sizeof(RGBA)*i->width2*i->height2); } i->ymin = 0x7fffffff; i->ymax = -0x80000000; /* initialize initial clipping field, which doesn't clip anything yet */ newclip(dev); memset(i->clipbuf->data, 255, sizeof(U32)*i->bitwidth*i->height2); } static void store_image(internal_t*i, internal_result_t*ir) { ir->img.data = (gfxcolor_t*)malloc(i->width*i->height*sizeof(gfxcolor_t)); ir->img.width = i->width; ir->img.height = i->height; gfxcolor_t*dest = ir->img.data; if(i->antialize <= 1) /* no antializing */ { int y; for(y=0;yheight;y++) { RGBA*line = &i->img[y*i->width]; memcpy(&dest[y*i->width], line, sizeof(RGBA)*i->width); } } else { RGBA**lines = (RGBA**)rfx_calloc(sizeof(RGBA*)*i->antialize); int q = i->antialize*i->antialize; int ypos = 0; int y; int y2=0; for(y=0;yheight2;y++) { int n; ypos = y % i->antialize; lines[ypos] = &i->img[y*i->width2]; if(ypos == i->antialize-1) { RGBA*out = &dest[(y2++)*i->width]; int x; int r,g,b,a; for(x=0;xwidth;x++) { int xpos = x*i->antialize; int yp; U32 r=0,g=0,b=0,a=0; for(yp=0;ypantialize;yp++) { RGBA*lp = &lines[yp][xpos]; int xp; for(xp=0;xpantialize;xp++) { RGBA*p = &lp[xp]; r += p->r; g += p->g; b += p->b; a += p->a; } } out[x].r = r / q; out[x].g = g / q; out[x].b = b / q; out[x].a = a / q; } } } rfx_free(lines); } } void render_endpage(struct _gfxdevice*dev) { internal_t*i = (internal_t*)dev->internal; if(!i->width2 || !i->height2) { fprintf(stderr, "Error: endpage() called without corresponding startpage()\n"); exit(1); } endclip(dev, 1); int unclosed = 0; while(i->clipbuf) { endclip(dev, 1); unclosed++; } if(unclosed) { fprintf(stderr, "Warning: %d unclosed clip(s) while processing endpage()\n", unclosed); } internal_result_t*ir= (internal_result_t*)rfx_calloc(sizeof(internal_result_t)); ir->palette = i->palette; int y,x; store_image(i, ir); ir->next = 0; if(i->result_next) { i->result_next->next = ir; } if(!i->results) { i->results = ir; } i->result_next = ir; for(y=0;yheight2;y++) { rfx_free(i->lines[y].points); i->lines[y].points = 0; } rfx_free(i->lines);i->lines=0; if(i->img) {rfx_free(i->img);i->img = 0;} i->width2 = 0; i->height2 = 0; } void render_drawlink(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text) { /* not supported for this output device */ } void gfxdevice_render_init(gfxdevice_t*dev) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(dev, 0, sizeof(gfxdevice_t)); dev->name = "render"; dev->internal = i; i->width = 0; i->width2 = 0; i->height = 0; i->height2 = 0; i->antialize = 1; i->multiply = 1; i->zoom = 1; dev->setparameter = render_setparameter; dev->startpage = render_startpage; dev->startclip = render_startclip; dev->endclip = render_endclip; dev->stroke = render_stroke; dev->fill = render_fill; dev->fillbitmap = render_fillbitmap; dev->fillgradient = render_fillgradient; dev->addfont = render_addfont; dev->drawchar = render_drawchar; dev->drawlink = render_drawlink; dev->endpage = render_endpage; dev->finish = render_finish; } gfxdevice_t* gfxdevice_render_new() { gfxdevice_t* d = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_render_init(d); return d; } swftools_0.9.2+git20130725.orig/lib/devices/bbox.h0000644000175000017500000000222112216332640020613 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __gfxdevice_bbox_h__ #define __gfxdevice_bbox_h__ #include "../gfxdevice.h" #ifdef __cplusplus extern "C" { #endif void gfxdevice_bbox_init(gfxdevice_t*self); gfxbbox_t gfxdevice_bbox_getbbox(gfxdevice_t*self); #ifdef __cplusplus } #endif #endif //__gfxdevice_bbox_h__ swftools_0.9.2+git20130725.orig/lib/wav.c0000644000175000017500000001736412216332640017045 0ustar gawaingawain/* wav.c Routines for handling .wav files Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include #include "wav.h" struct WAVBlock { char id[5]; unsigned int size; }; int getWAVBlock(FILE*fi, struct WAVBlock*block) { unsigned int size; unsigned char b[4]; if(fread(block->id,1,4,fi)<4) return 0; block->id[4] = 0; if(fread(b,1,4,fi)<4) return 0; block->size = b[0]|b[1]<<8|b[2]<<16|b[3]<<24; /*printf("Chunk: [%c%c%c%c] (%d bytes)\n", block->id[0],block->id[1], block->id[2],block->id[3], block->size);*/ return 1; } int wav_read(struct WAV*wav, const char* filename) { FILE*fi = fopen(filename, "rb"); unsigned char b[16]; long int filesize; struct WAVBlock block; long int pos; if(!fi) return 0; fseek(fi, 0, SEEK_END); filesize = ftell(fi); fseek(fi, 0, SEEK_SET); //printf("Filesize: %d\n", filesize); if(!getWAVBlock (fi, &block)) { fclose(fi); return 0; } if(strncmp(block.id,"RIFF",4)) { fprintf(stderr, "wav_read: not a WAV file\n"); fclose(fi); return 0; } if(block.size + 8 < filesize) fprintf(stderr, "wav_read: warning - more tags (%lu extra bytes)\n", filesize - block.size - 8); if(block.size == filesize) /* some buggy software doesn't generate the right tag length */ block.size = filesize - 8; if(block.size + 8 > filesize) fprintf(stderr, "wav_read: warning - short file (%lu bytes missing)\n", block.size + 8 - filesize); if(fread(b, 1, 4, fi) < 4) { fclose(fi); return 0; } if(strncmp((const char*)b, "WAVE", 4)) { fprintf(stderr, "wav_read: not a WAV file (2)\n"); fclose(fi); return 0; } do { getWAVBlock(fi, &block); pos = ftell(fi); if(!strncmp(block.id, "fmt ", 4)) { if(fread(&b, 1, 16, fi)<16) { fclose(fi); return 0; } wav->tag = b[0]|b[1]<<8; wav->channels = b[2]|b[3]<<8; wav->sampsPerSec = b[4]|b[5]<<8|b[6]<<16|b[7]<<24; wav->bytesPerSec = b[8]|b[9]<<8|b[10]<<16|b[11]<<24; wav->align = b[12]|b[13]<<8; wav->bps = b[14]|b[15]<<8; } else if (!strncmp(block.id, "LIST", 4)) { // subchunk ICMT (comment) may exist } else if (!strncmp(block.id, "data", 4)) { int l; wav->data = (unsigned char*)malloc(block.size); if(!wav->data) { fprintf(stderr, "Out of memory (%d bytes needed)", block.size); fclose(fi); return 0; } l = fread(wav->data, 1, block.size, fi); if(l<=0) { fprintf(stderr, "Error: Couldn't read WAV data block\n"); fclose(fi); return 0; } else if(l < block.size) { fprintf(stderr, "Warning: data block of size %d is only %d bytes (%d bytes missing)\n", block.size, l, block.size-l); wav->size = l; } else { wav->size = block.size; } } pos+=block.size; fseek(fi, pos, SEEK_SET); } while (pos < filesize); fclose(fi); return 1; } int wav_write(struct WAV*wav, const char*filename) { FILE*fi = fopen(filename, "wb"); char*b="RIFFWAVEfmt \x10\0\0\0data"; char c[16]; unsigned long int w32; if(!fi) return 0; fwrite(b, 4, 1, fi); w32=(/*fmt*/8+0x10+/*data*/8+wav->size); c[0] = w32; c[1] = w32>>8; c[2] = w32>>16; c[3] = w32>>24; fwrite(c, 4, 1, fi); fwrite(&b[4], 12, 1, fi); c[0] = wav->tag; c[1] = wav->tag>>8; c[2] = wav->channels; c[3] = wav->channels>>8; c[4] = wav->sampsPerSec; c[5] = wav->sampsPerSec>>8; c[6] = wav->sampsPerSec>>16; c[7] = wav->sampsPerSec>>24; c[8] = wav->bytesPerSec; c[9] = wav->bytesPerSec>>8; c[10] = wav->bytesPerSec>>16; c[11] = wav->bytesPerSec>>24; c[12] = wav->align; c[13] = wav->align>>8; c[14] = wav->bps; c[15] = wav->bps>>8; fwrite(c, 16, 1, fi); fwrite(&b[16], 4, 1, fi); c[0] = wav->size; c[1] = wav->size>>8; c[2] = wav->size>>16; c[3] = wav->size>>24; fwrite(c,4,1,fi); printf("writing %d converted bytes\n", wav->size); fwrite(wav->data,wav->size,1,fi); fclose(fi); return 1; } void wav_print(struct WAV*wav) { printf("tag:%04x channels:%d samples/sec:%lu bytes/sec:%lu align:%d bits/sample:%d size:%d\n", wav->tag, wav->channels, wav->sampsPerSec, wav->bytesPerSec, wav->align, wav->bps, wav->size); } int wav_convert2mono(struct WAV*src, struct WAV*dest, int rate) { int samplelen=src->size/src->align; int bps=src->bps; double ratio; double pos = 0; int pos2 = 0; int channels=src->channels; int i; int fill; dest->sampsPerSec = rate; dest->bps = 16; dest->channels = 1; dest->align = 2; dest->tag = src->tag; dest->bytesPerSec = dest->sampsPerSec*dest->align; ratio = (double)dest->sampsPerSec/(double)src->sampsPerSec; fill = (int)(ratio+1)*2; dest->data = (unsigned char*)malloc((int)(samplelen*ratio*2)+128); if(!dest->data) return 0; dest->size = (int)(samplelen*ratio)*2; if(bps == 8) { if(ratio <= 1) { for(i=0; isize; i+=channels) { int pos2 = ((int)pos)*2; dest->data[pos2] = 0; dest->data[pos2+1] = src->data[i]+128; pos += ratio; } } else { for(i=0; isize; i+=channels) { int j; int pos2 = ((int)pos)*2; for(j=0;jdata[pos2+j+0] = 0; dest->data[pos2+j+1] = src->data[i]+128; } pos += ratio; } } } else if(bps == 16) { if(ratio <= 1) { for(i=0; isize/2; i+=channels) { int pos2 = ((int)pos)*2; dest->data[pos2+0]=src->data[i*2]; dest->data[pos2+1]=src->data[i*2+1]; pos += ratio; } } else { for(i=0; isize/2; i+=channels) { int j; int pos2 = ((int)pos)*2; for(j=0;jdata[pos2+j+0] = src->data[i*2]; dest->data[pos2+j+1] = src->data[i*2+1]; } pos += ratio; } } } else if(bps == 32) { if(ratio <= 1) { for(i=0; isize/4; i+=channels) { int pos2 = ((int)pos)*2; dest->data[pos2+0]=src->data[i*4+2]; dest->data[pos2+1]=src->data[i*4+3]; pos += ratio; } } else { for(i=0; isize/4; i+=channels) { int j; int pos2 = ((int)pos)*2; for(j=0;jdata[pos2+j+0] = src->data[i*4+2]; dest->data[pos2+j+1] = src->data[i*4+3]; } pos += ratio; } } } else { fprintf(stderr, "Unsupported bitspersample value: %d\n", bps); } return 1; } swftools_0.9.2+git20130725.orig/lib/args.h0000644000175000017500000001465012216332640017204 0ustar gawaingawain/* args.h Routines to simplify argument handling Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #ifndef __args_h__ #define __args_h__ #ifndef NO_ARGPARSER extern int args_callback_option(char*,char*); extern int args_callback_longoption(char*,char*); extern int args_callback_command(char*,char*); extern void args_callback_usage(char*name); //int argn; //char**argv; static void processargs(int argn2,char**argv2) { int t; if(argn2==1) { args_callback_usage(argv2[0]); exit(1); } for(t=1;t2) { fprintf(stderr, "internal error in command line parsing\n"); exit(1); } t+=num; } } } struct options_t { const char*shortoption; const char*longoption; }; static int args_long2shortoption(struct options_t*options, char*name, char*val) { char*equal = strchr(name,'='); if (equal) { *equal = 0; equal++; } while(options->shortoption) { if(!strcmp(options->longoption, name)) { char*tmp = (char*)malloc(strlen(options->shortoption) +(equal?strlen(equal)+2:2)); strcpy(tmp, options->shortoption); if(equal) { //strcpy(&tmp[strlen(tmp)], equal); int ret = args_callback_option(tmp, equal); if(!ret) { fprintf(stderr, "Warning: Option --%s takes no parameter.\n", name); } return 0; } return args_callback_option(tmp,val); } options++; } fprintf(stderr, "Unknown option: --%s\n", name); exit(1); } #endif /* check whether the value t is in a given range. examples: 3 is in range 1-10: true 7 is in range 2-4,6,8-10: false 9 is in range 1,2,3-12: true */ static char is_in_range(int t, char*irange) { char*pos = irange; char*digits; int num; char range = 0; int last=0; char tmp; if(!irange) // no range resembles (-OO,OO) return 1; while(*pos) { while(*pos == ' ' || *pos == '\r' || *pos == '\n' || *pos == '\t') pos++; digits = pos; while(*digits>='0' && *digits<='9') digits++; if(digits == pos) { fprintf(stderr, "Error: \"%s\" is not a valid format (digit expected)\n",irange); exit(1); } tmp=*digits;*digits=0; num = atoi(pos); *digits=tmp; pos = digits; while(*pos == ' ' || *pos == '\r' || *pos == '\n' || *pos == '\t') pos++; if(range && last<=t && num>=t) return 1; if(range) { range = 0; if(*pos) pos ++; continue; } if(*pos=='-') { if(range) { fprintf(stderr, "Error: \"%s\" is not a valid format (too many '-'s)\n",irange); exit(1); } last = num; range = 1; if(*pos) pos ++; continue; } else { /* if it isn't a '-', we assume it is a seperator like ',', ';', ':', whatever. */ if(t == num) return 1; if(*pos) pos ++; continue; } } if(range && last<=t) return 1; return 0; } static char* filename2template(char*filename, int*startindex) { int l = strlen(filename); char*newname = (char*)malloc(l+5); /* first look whether the file is already numbered */ while(1) { l--; if(l<0 || strchr("0123456789", filename[l])) break; }; if(l>=0) { int lastdigit=l; int firstdigit=l; while(firstdigit && strchr("0123456789", filename[firstdigit-1])) firstdigit--; *startindex = atoi(filename+firstdigit); memcpy(newname, filename, firstdigit); sprintf(newname+firstdigit, "%%%dd", lastdigit+1-firstdigit); strcat(newname+firstdigit, filename+lastdigit+1); return newname; } /* if it isn't, try to paste a %d between filename and extension */ char*dot = strrchr(filename, '.'); if(dot) { int pos = dot-filename; memcpy(newname, filename, pos); newname[pos++] = '.'; newname[pos++] = '%'; newname[pos++] = 'd'; strcpy(newname+pos, dot); *startindex = 1; return newname; } /* if that didn't work either, just append the number at the end */ strcpy(newname, filename); strcat(newname, ".%d"); *startindex = 1; return newname; } #endif //__args_h__ swftools_0.9.2+git20130725.orig/lib/base64.c0000644000175000017500000000355512216332640017331 0ustar gawaingawain/* base64.c Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include "base64.h" static const char base64[65]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; void write_base64(FILE*fi, const char* s) { const unsigned char*b = (const unsigned char*)s; const unsigned char*end = b + strlen(b); const unsigned char*end_minus_3 = end - 3; while(b <= end_minus_3) { char data[4]; data[0] = base64[(b[0]>>2)&63 ]; data[1] = base64[(b[0]<<4|b[1]>>4)&63]; data[2] = base64[(b[1]<<2|b[2]>>6)&63]; data[3] = base64[(b[2])&63 ]; fwrite(data, 4, 1, fi); b += 3; } unsigned char data[4]; switch(end - b) { case 0: return; //done case 1: data[0] = base64[(b[0]>>2)&63]; data[1] = base64[(b[0]<<4)&63]; data[2] = '='; data[3] = '='; break; case 2: data[0] = base64[(b[0]>>2)&63]; data[1] = base64[(b[0]<<4|b[1]>>4)&63]; data[2] = base64[(b[1]<<2)&63]; data[3] = '='; break; default: fprintf(stderr, "internal error in base64 implementation (%d)\n", end-b); break; } fwrite(data, 4, 1, fi); } swftools_0.9.2+git20130725.orig/lib/jpeg.c0000644000175000017500000003267012216332640017172 0ustar gawaingawain#include #include #include #include "jpeg.h" #include "../config.h" #ifdef HAVE_JPEGLIB #define HAVE_BOOLEAN #include #define OUTBUFFER_SIZE 0x8000 static FILE*fi; static JOCTET * buffer; static unsigned char*dest; static int len; static int destlen; static unsigned char*data; static int pos; static int size; static void file_init_destination(j_compress_ptr cinfo) { struct jpeg_destination_mgr*dmgr = (struct jpeg_destination_mgr*)(cinfo->dest); buffer = (JOCTET*)malloc(OUTBUFFER_SIZE); if(!buffer) { perror("malloc"); printf("Out of memory!\n"); exit(1); } dmgr->next_output_byte = buffer; dmgr->free_in_buffer = OUTBUFFER_SIZE; } static boolean file_empty_output_buffer(j_compress_ptr cinfo) { struct jpeg_destination_mgr*dmgr = (struct jpeg_destination_mgr*)(cinfo->dest); if(fi) fwrite(buffer, OUTBUFFER_SIZE, 1, fi); dmgr->next_output_byte = buffer; dmgr->free_in_buffer = OUTBUFFER_SIZE; return 1; } static void file_term_destination(j_compress_ptr cinfo) { struct jpeg_destination_mgr*dmgr = (struct jpeg_destination_mgr*)(cinfo->dest); if(fi) fwrite(buffer, OUTBUFFER_SIZE-dmgr->free_in_buffer, 1, fi); free(buffer); buffer = 0; dmgr->free_in_buffer = 0; } static void mem_init_destination(j_compress_ptr cinfo) { struct jpeg_destination_mgr*dmgr = (struct jpeg_destination_mgr*)(cinfo->dest); dmgr->next_output_byte = dest; dmgr->free_in_buffer = destlen; } static boolean mem_empty_output_buffer(j_compress_ptr cinfo) { printf("jpeg mem overflow!\n"); exit(1); } static void mem_term_destination(j_compress_ptr cinfo) { struct jpeg_destination_mgr*dmgr = (struct jpeg_destination_mgr*)(cinfo->dest); len = destlen - dmgr->free_in_buffer; dmgr->free_in_buffer = 0; } int jpeg_save(unsigned char*data, unsigned width, unsigned height, int quality, const char*filename) { struct jpeg_destination_mgr mgr; struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; int t; if(filename) fi = fopen(filename, "wb"); else fi = 0; memset(&cinfo, 0, sizeof(cinfo)); memset(&jerr, 0, sizeof(jerr)); memset(&mgr, 0, sizeof(mgr)); cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); mgr.init_destination = file_init_destination; mgr.empty_output_buffer = file_empty_output_buffer; mgr.term_destination = file_term_destination; cinfo.dest = &mgr; // init compression cinfo.image_width = width; cinfo.image_height = height; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo,quality,TRUE); //jpeg_write_tables(&cinfo); //jpeg_suppress_tables(&cinfo, TRUE); jpeg_start_compress(&cinfo, FALSE); for(t=0;tsrc; mgr->next_input_byte = data; mgr->bytes_in_buffer = size; //printf("init %d\n", size - mgr->bytes_in_buffer); } boolean mem_fill_input_buffer (j_decompress_ptr cinfo) { struct jpeg_source_mgr* mgr = cinfo->src; printf("fill %d\n", size - mgr->bytes_in_buffer); return 0; } void mem_skip_input_data (j_decompress_ptr cinfo, long num_bytes) { struct jpeg_source_mgr* mgr = cinfo->src; printf("skip %d +%ld\n", size - mgr->bytes_in_buffer, num_bytes); if(num_bytes<=0) return; mgr->next_input_byte += num_bytes; mgr->bytes_in_buffer -= num_bytes; } boolean mem_resync_to_restart (j_decompress_ptr cinfo, int desired) { struct jpeg_source_mgr* mgr = cinfo->src; printf("resync %d\n", size - mgr->bytes_in_buffer); mgr->next_input_byte = data; mgr->bytes_in_buffer = size; return 1; } void mem_term_source (j_decompress_ptr cinfo) { struct jpeg_source_mgr* mgr = cinfo->src; //printf("term %d\n", size - mgr->bytes_in_buffer); } int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char**dest, unsigned*width, unsigned*height) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; struct jpeg_source_mgr mgr; data = _data; size = _size; jpeg_create_decompress(&cinfo); mgr.next_input_byte = data; mgr.bytes_in_buffer = size; mgr.init_source =mem_init_source ; mgr.fill_input_buffer =mem_fill_input_buffer ; mgr.skip_input_data =mem_skip_input_data ; mgr.resync_to_restart =mem_resync_to_restart ; mgr.term_source =mem_term_source ; cinfo.err = jpeg_std_error(&jerr); cinfo.src = &mgr; jpeg_read_header(&cinfo, TRUE); cinfo.out_color_space == JCS_RGB; jpeg_start_decompress(&cinfo); *width = cinfo.output_width; *height = cinfo.output_height; *dest = malloc(cinfo.output_width * cinfo.output_height * 4); unsigned char*scanline = malloc(cinfo.output_width * 4); int y; for(y=0;y 0xffffffff) { *_width = 0; *_height = 0; return 0; } *dest = (unsigned char*)malloc(image_size); int y; for (y=0;y= 0; x--) { line[x].a = 255; line[x].r = js[x*3+0]; line[x].g = js[x*3+1]; line[x].b = js[x*3+2]; } } else if (cinfo.out_color_space == JCS_YCCK) { fprintf(stderr, "Error: Can't convert YCCK to RGB.\n"); return 0; } else if (cinfo.out_color_space == JCS_YCbCr) { for (x = 0; x < width; x++) { int y = js[x * 3 + 0]; int u = js[x * 3 + 1]; int v = js[x * 3 + 1]; line[x].a = 255; line[x].r = y + ((360 * (v - 128)) >> 8); line[x].g = y - ((88 * (u - 128) + 183 * (v - 128)) >> 8); line[x].b = y + ((455 * (u - 128)) >> 8); } } else if (cinfo.out_color_space == JCS_CMYK) { for (x = 0; x < width; x++) { int white = 255 - js[x * 4 + 3]; line[x].a = 255; line[x].r = white - ((js[x * 4] * white) >> 8); line[x].g = white - ((js[x * 4 + 1] * white) >> 8); line[x].b = white - ((js[x * 4 + 2] * white) >> 8); } } } free(scanline); jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(fi); return 1; } void jpeg_get_size(const char *filename, unsigned *width, unsigned*height) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; FILE *fi; *width = 0; *height = 0; cinfo.err = jpeg_std_error(&jerr); cinfo.image_width = 0; cinfo.image_height = 0; jpeg_create_decompress(&cinfo); if ((fi = fopen(filename, "rb")) == NULL) { fprintf(stderr, "couldn't open %s\n", filename); return; } jpeg_stdio_src(&cinfo, fi); jpeg_read_header(&cinfo, TRUE); *width = cinfo.image_width; *height = cinfo.image_height; jpeg_destroy_decompress(&cinfo); fclose(fi); } #else int jpeg_save(unsigned char*data, unsigned width, unsigned height, int quality, const char*filename) { fprintf(stderr, "jpeg_save: No JPEG support compiled in\n"); return 0; } int jpeg_save_to_file(unsigned char*data, unsigned width, unsigned height, int quality, FILE*fi) { fprintf(stderr, "jpeg_save_to_file: No JPEG support compiled in\n"); return 0; } int jpeg_save_to_mem(unsigned char*data, unsigned width, unsigned height, int quality, unsigned char*_dest, int _destlen, int components) { fprintf(stderr, "jpeg_save_tomem: No JPEG support compiled in\n"); return 0; } int jpeg_load_from_mem(unsigned char*_data, int size, unsigned char**dest, unsigned*width, unsigned*height) { fprintf(stderr, "jpeg_load_from_mem: No JPEG support compiled in\n"); return 0; } int jpeg_load(const char*filename, unsigned char**dest, unsigned*_width, unsigned*_height) { fprintf(stderr, "jpeg_load: No JPEG support compiled in\n"); return 0; } void jpeg_get_size(const char *fname, unsigned *width, unsigned *height) { *width = 0; *height = 0; fprintf(stderr, "jpeg_get_size: No JPEG support compiled in\n"); } #endif swftools_0.9.2+git20130725.orig/lib/gfxfilter.h0000644000175000017500000001020112216332640020226 0ustar gawaingawain/* gfxfilter.h Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #ifndef __gfxfilter_h__ #define __gfxfilter_h__ #include "gfxdevice.h" #include "types.h" #ifdef __cplusplus extern "C" { #endif typedef enum {gfxfilter_none, gfxfilter_onepass, gfxfilter_twopass} gfxfiltertype_t; typedef struct _gfxfilterbase { gfxfiltertype_t type; } gfxfilterbase_t; typedef struct _gfxfilter { gfxfiltertype_t type; int num_passes; const char*name; int pass; int (*setparameter)(struct _gfxfilter*in, const char*key, const char*value, struct _gfxdevice*out); void (*startpage)(struct _gfxfilter*in, int width, int height, struct _gfxdevice*out); void (*startclip)(struct _gfxfilter*in, gfxline_t*line, struct _gfxdevice*out); void (*endclip)(struct _gfxfilter*in, struct _gfxdevice*out); void (*stroke)(struct _gfxfilter*in, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, struct _gfxdevice*out); void (*fill)(struct _gfxfilter*in, gfxline_t*line, gfxcolor_t*color, struct _gfxdevice*out); void (*fillbitmap)(struct _gfxfilter*in, gfxline_t*line, gfximage_t*img, gfxmatrix_t*imgcoord2devcoord, gfxcxform_t*cxform, struct _gfxdevice*out); //cxform? tiling? void (*fillgradient)(struct _gfxfilter*in, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*gradcoord2devcoord, struct _gfxdevice*out); //? void (*addfont)(struct _gfxfilter*in, gfxfont_t*font, struct _gfxdevice*out); void (*drawchar)(struct _gfxfilter*in, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix, struct _gfxdevice*out); void (*drawlink)(struct _gfxfilter*in, gfxline_t*line, const char*action, const char*text, struct _gfxdevice*out); void (*endpage)(struct _gfxfilter*in, struct _gfxdevice*out); gfxresult_t* (*finish)(struct _gfxfilter*in, struct _gfxdevice*out); void (*dealloc)(struct _gfxfilter*f); void* internal; } gfxfilter_t; typedef struct _gfxtwopassfilter { gfxfiltertype_t type; gfxfilter_t pass1; gfxfilter_t pass2; } gfxtwopassfilter_t; gfxdevice_t*gfxfilter_apply(gfxfilter_t*filter, gfxdevice_t*dev); gfxdevice_t*gfxtwopassfilter_apply(gfxtwopassfilter_t*filter, gfxdevice_t*dev); typedef struct _gfxfilterchain { gfxfilterbase_t*filter; struct _gfxfilterchain*next; } gfxfilterchain_t; gfxfilterchain_t* gfxfilterchain_parse(const char*filterexpr); gfxdevice_t* gfxfilterchain_apply(gfxfilterchain_t*chain, gfxdevice_t*dev); void gfxfilterchain_destroy(gfxfilterchain_t*chain); #define wrap_filter(dev, name, args...) \ {gfxfilter_t f_##name; \ gfxfilter_##name##_init(&f_##name, ## args); \ dev = gfxfilter_apply(&f_##name, dev); \ } #define wrap_filter2(dev, name, args...) \ {gfxtwopassfilter_t f_##name; \ gfxtwopassfilter_##name##_init(&f_##name, ## args); \ dev = gfxtwopassfilter_apply(&f_##name, dev); \ } /* known filters */ void gfxfilter_maketransparent_init(gfxfilter_t*f, U8 alpha); void gfxfilter_flatten_init(gfxfilter_t*f); void gfxfilter_rescale_images_init(gfxfilter_t*f); void gfxtwopassfilter_remove_font_transforms_init(gfxtwopassfilter_t*f); void gfxtwopassfilter_one_big_font_init(gfxtwopassfilter_t*f); void gfxtwopassfilter_vectors_to_glyphs_init(gfxtwopassfilter_t*f); void gfxtwopassfilter_remove_invisible_characters_init(gfxtwopassfilter_t*f); #ifdef __cplusplus } #endif #endif //__gfxfilter_h__ swftools_0.9.2+git20130725.orig/lib/gfxpoly.h0000644000175000017500000000423312216332640017734 0ustar gawaingawain/* gfxpoly.h Various boolean polygon functions. Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #ifndef __gfxpoly_h__ #define __gfxpoly_h__ #ifdef __cplusplus extern "C" { #endif #include #include "mem.h" #include "gfxdevice.h" #include "gfxtools.h" /* A "grid" value is the granularity at which polygon intersection operates. It usually makes sense to set this to the smallest value that can actually be represented in the output device (like 0.05 = 1 twip for SWF). */ #define DEFAULT_GRID (0.05) typedef struct _gfxpoly { } gfxpoly_t; void gfxpoly_destroy(gfxpoly_t*poly); /* constructors */ gfxpoly_t* gfxpoly_from_fill(gfxline_t*line, double gridsize); gfxpoly_t* gfxpoly_from_stroke(gfxline_t*line, gfxcoord_t width, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, double gridsize); /* operators */ gfxpoly_t* gfxpoly_intersect(gfxpoly_t*p1, gfxpoly_t*p2); gfxpoly_t* gfxpoly_union(gfxpoly_t*p1, gfxpoly_t*p2); /* area functions */ double gfxpoly_area(gfxpoly_t*p); double gfxpoly_intersection_area(gfxpoly_t*p1, gfxpoly_t*p2); /* conversion functions */ gfxpoly_t* gfxpoly_createbox(double x1, double y1,double x2, double y2, double gridsize); gfxline_t* gfxline_from_gfxpoly(gfxpoly_t*poly); gfxline_t* gfxline_from_gfxpoly_with_direction(gfxpoly_t*poly); gfxline_t* gfxpoly_circular_to_evenodd(gfxline_t*line, double gridsize); #ifdef __cplusplus } #endif #endif //__gfxpoly_h__ swftools_0.9.2+git20130725.orig/lib/ttf.c0000644000175000017500000020640712216332640017043 0ustar gawaingawain/* ttf.c Parser and writer for truetype font files. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include #include "log.h" #include "os.h" #include "q.h" #include "mem.h" #include "ttf.h" #define TTCFTAG 0x74746366 #define OPENTYPE 0x4f54544f #define TRUETYPE_MACOS 0x74727565 #define VERSION_1_0 0x00010000 #define TAG_OS2 0x4f532f32 #define TAG_CMAP 0x636d6170 #define TAG_GLYF 0x676c7966 //required for non opentype #define TAG_HEAD 0x68656164 //required #define TAG_HHEA 0x68686561 //required #define TAG_HMTX 0x686d7478 //required #define TAG_VHEA 0x86686561 #define TAG_VMTX 0x866d7478 #define TAG_KERN 0x6b65726e #define TAG_LOCA 0x6c6f6361 //required for non opentype #define TAG_MAXP 0x6d617870 //required #define TAG_NAME 0x6e616d65 #define TAG_POST 0x706f7374 #define TAG_CFF 0x43464620 //required for opentype #define TAG_CVT 0x63767420 #define TAG_FPGM 0x6670676d #define TAG_GASP 0x67617370 #define TAG_PREP 0x70726570 static U32 checksum_block(U8*_data, int len) { U32 sum = 0; U8*data = (U8*)_data; int pos; int len_minus_4 = len-4; for(pos=0;pos<=len_minus_4;pos+=4) { sum += data[pos]<<24|data[pos+1]<<16|data[pos+2]<<8|data[pos+3]; } int left = len-pos; if(left == 1) sum+= data[pos+0]<<24; if(left == 2) sum+= data[pos+0]<<24|data[pos+1]<<16; if(left == 3) sum+= data[pos+0]<<24|data[pos+1]<<16|data[pos+2]<<8; return sum; } typedef struct _memreader { U8*mem; int pos; int size; } memreader_t; static U8 readU8(memreader_t*r) { return r->mem[r->pos++]; } static inline U16 readU16(memreader_t*r) { if(r->pos+2>r->size) return 0; U16 val = r->mem[r->pos]<<8| r->mem[r->pos+1]; r->pos += 2; return val; } static S16 readS16(memreader_t*r) { return (S16)readU16(r); } static U32 readU32(memreader_t*r) { if(r->pos+4>r->size) return 0; U32 val = r->mem[r->pos]<<24| r->mem[r->pos+1]<<16| r->mem[r->pos+2]<<8| r->mem[r->pos+3]; r->pos += 4; return val; } static void readBlock(memreader_t*r, void*dest, int len) { int remaining = r->size-r->pos; if(len > remaining) { memcpy(dest, r->mem+r->pos, remaining); memset(dest+remaining, 0, len - remaining); r->pos += remaining; } else { memcpy(dest, r->mem+r->pos, len); r->pos += len; } } static void reader_reset(memreader_t*r) { r->pos; } #define INIT_READ(r,data,length,pos) memreader_t r = {(data),(pos),(length)}; static void expand(ttf_table_t*w, int newsize) { int v1 = (newsize+63)&~63; int v2 = w->len + w->len / 2; w->memsize = v1>v2?v1:v2; w->data = rfx_realloc(w->data, w->memsize); } static inline void writeU8(ttf_table_t*w, unsigned char b) { if(w->memsizelen+1) expand(w, w->len+1); w->data[w->len++] = b; } static inline void writeU16(ttf_table_t*w, unsigned short v) { if(w->memsizelen+2) expand(w, w->len+2); w->data[w->len++] = v>>8; w->data[w->len++] = v; } static inline void writeU16_LE(ttf_table_t*w, unsigned short v) { if(w->memsizelen+2) expand(w, w->len+2); w->data[w->len++] = v; w->data[w->len++] = v>>8; } #define writeS16 writeU16 static inline void writeU32(ttf_table_t*w, unsigned long v) { if(w->memsizelen+4) expand(w, w->len+4); w->data[w->len++] = v>>24; w->data[w->len++] = v>>16; w->data[w->len++] = v>>8; w->data[w->len++] = v; } static inline void writeU32_LE(ttf_table_t*w, unsigned long v) { if(w->memsizelen+4) expand(w, w->len+4); w->data[w->len++] = v; w->data[w->len++] = v>>8; w->data[w->len++] = v>>16; w->data[w->len++] = v>>24; } static inline void writeBlock(ttf_table_t*w, void*data, int len) { if(w->memsizelen+len) expand(w, w->len+len); memcpy(w->data+w->len, data, len); w->len += len; } ttf_table_t*ttf_table_new(U32 id) { ttf_table_t*t = rfx_calloc(sizeof(ttf_table_t)); t->id = id; return t; } ttf_table_t*ttf_addtable(ttf_t*ttf, U32 id) { ttf_table_t*t = ttf_table_new(id); ttf_table_t*before,*after=0; for(before=ttf->tables; before&&before->idnext) { after=before; } if(before && before->id == id) { msg(" Error: duplicate table %08x", id); free(before->data); before->data = 0; before->len = 0; return before; } if(!after) { t->next = ttf->tables; ttf->tables = t; } else { t->prev = after; t->next = after->next; after->next = t; } if(t->next) t->next->prev = t; return t; } ttf_table_t*ttf_find_table(ttf_t*ttf, U32 id) { ttf_table_t*table = ttf->tables; while(table) { if(table->id == id) return table; table = table->next; } return 0; } void ttf_table_delete(ttf_t*ttf, ttf_table_t*table) { if(ttf && ttf->tables == table) { ttf->tables = table->next; } if(table->prev) table->prev->next = table->next; if(table->next) table->next->prev = table->prev; free(table->data); free(table); } U32 ttf_table_checksum(ttf_table_t*t) { U32 checksum = checksum_block(t->data, t->len); if(t->id==TAG_HEAD && t->len>=12) { /* the checksum for the HEAD table is calculated by masking out the checksumadjust field */ U32 adjust = t->data[8]<<24|t->data[9]<<16|t->data[10]<<8|t->data[11]; checksum -= adjust; } return checksum; } static U8 printable(U8 a) { if(a<32 || a==127) return '.'; else return a; } static void hexdump(U8*data, int len, const char*prefix) { int t; char ascii[32]; printf("%s -=> ",prefix); for(t=0;t ",ascii,prefix); } } } static void ttf_table_dump(ttf_table_t*t, const char*prefix) { if(!t) return; hexdump(t->data, t->len, prefix); } static table_head_t*head_new(ttf_t*ttf) { table_head_t*head = rfx_calloc(sizeof(table_head_t)); head->units_per_em = 1024; int t; if(ttf->num_glyphs) { head->xmin = ttf->glyphs[0].xmin; head->ymin = ttf->glyphs[0].ymin; head->xmax = ttf->glyphs[0].xmax; head->ymax = ttf->glyphs[0].ymax; for(t=1;tnum_glyphs;t++) { if(ttf->glyphs[t].xmin < head->xmin) head->xmin = ttf->glyphs[t].xmin; if(ttf->glyphs[t].ymin < head->ymin) head->ymin = ttf->glyphs[t].ymin; if(ttf->glyphs[t].xmax > head->xmax) head->xmax = ttf->glyphs[t].xmax; if(ttf->glyphs[t].ymax > head->ymax) head->ymax = ttf->glyphs[t].ymax; } } head->macStyle = 0; head->lowest_readable_size = 8; // not sure what font renderers actually do with this head->dir_hint = 0; return head; } static int head_parse(ttf_t*ttf, memreader_t*r) { ttf->head = rfx_calloc(sizeof(table_head_t)); U32 version = readU32(r); if(version!=VERSION_1_0) msg(" Font HEAD has unknown version %08x", version); U32 revision = readU32(r); U32 checksum2 = readU32(r); U32 magic = readU32(r); if(magic!=0x5f0f3cf5) msg(" Font HEAD has unknown magic number %08x", magic); ttf->head->flags = readU16(r); ttf->head->units_per_em = readU16(r); readU32(r);readU32(r); //created readU32(r);readU32(r); //modified ttf->head->xmin = readU16(r); ttf->head->ymin = readU16(r); ttf->head->xmax = readU16(r); ttf->head->ymax = readU16(r); ttf->head->macStyle = readU16(r); ttf->head->lowest_readable_size = readU16(r); //in pixels ttf->head->dir_hint = readS16(r); int loc_index = readS16(r); //used in 'loca' table if(loc_index>1) msg(" loca index format %d unknown", loc_index); U16 glyph_data_format = readS16(r); if(glyph_data_format!=0) msg(" Font glyph data format unknown: %04x", glyph_data_format); if(r->pos < r->size) { msg(" Leftover bytes (%d) in HEAD tag", r->size - r->pos); } return loc_index; } static void head_write(ttf_t*ttf, ttf_table_t*w, int loca_size) { writeU32(w, 0x10000); writeU32(w, 0x10000); writeU32(w, 0); //checksum writeU32(w, 0x5f0f3cf5); //magic writeU16(w, ttf->head->flags); writeU16(w, ttf->head->units_per_em); writeU32(w, 0);writeU32(w, 0); //created writeU32(w, 0);writeU32(w, 0); //modified writeU16(w, ttf->head->xmin); writeU16(w, ttf->head->ymin); writeU16(w, ttf->head->xmax); writeU16(w, ttf->head->ymax); writeU16(w, ttf->head->macStyle); writeU16(w, ttf->head->lowest_readable_size); writeS16(w, ttf->head->dir_hint); writeS16(w, loca_size); //loca index size (32 bit) writeS16(w, 0); //glyph data format } static void head_dump(ttf_t*ttf) { printf("head->flags: %d\n", ttf->head->flags); printf("head->units_per_em: %d\n", ttf->head->units_per_em); printf("head->xmin: %d\n", ttf->head->xmin); printf("head->ymin: %d\n", ttf->head->ymin); printf("head->xmax: %d\n", ttf->head->xmax); printf("head->ymax: %d\n", ttf->head->ymax); printf("head->macStyle: %d\n", ttf->head->macStyle); printf("head->lowest_readable_size: %d\n", ttf->head->lowest_readable_size); printf("head->dir_hint: %d\n", ttf->head->dir_hint); } static void head_delete(ttf_t*ttf) { if(ttf->head) { free(ttf->head); ttf->head=0; } } static table_os2_t*os2_new(ttf_t*ttf) { table_os2_t*os2 = rfx_calloc(sizeof(table_os2_t)); if(ttf->num_glyphs) { int average_width=0; int t; for(t=0;tnum_glyphs;t++) { average_width += (ttf->glyphs[t].advance + ttf->glyphs[t].bearing); } os2->xAvgCharWidth = average_width / ttf->num_glyphs; } /* that's what everybody seems to fill in */ os2->usWeightClass = 400; os2->usWidthClass = 5; if(ttf->head) { int advance = (ttf->head->xmax - ttf->head->xmin)/2; int height = (ttf->head->xmax - ttf->head->xmin); int ymid = height/2; /* I do believe a sane font rendering engine will actually use the font advance here- the subscript/superscript position will not be the same for each glyph */ os2->ySuperscriptXSize = os2->ySubscriptXSize = (ttf->head->xmax - ttf->head->xmin)/2; os2->ySuperscriptYSize = os2->ySubscriptYSize = (ttf->head->ymax - ttf->head->ymin)/2; os2->ySubscriptXOffset = advance; os2->ySubscriptYOffset = 0; os2->ySuperscriptXOffset = advance; os2->ySuperscriptYOffset = (ttf->head->ymax - ttf->head->ymin)/2; os2->yStrikeoutSize = ttf->head->units_per_em / 10; os2->yStrikeoutPosition = ymid; os2->usWinAscent = ttf->ascent; os2->usWinDescent = ttf->descent>0?0:-ttf->descent; os2->sxHeight = ymid; os2->sCapHeight = height*2/3; } os2->panose_Weight = 4; /* strictly speaking we'd have to set 92/64 bits in these tables, depending on what parts of the unicode table is filled. (e.g. bit 90 = tibetan). */ os2->ulCharRange[0] = 1; os2->ulCharRange[1] = 0; os2->ulCharRange[2] = 0; os2->ulCharRange[3] = 0; os2->ulCodePageRange1 = 1; os2->ulCodePageRange2 = 0; if(ttf->unicode_size) { int min,max; for(min=0;minunicode_size;min++) if(ttf->unicode[min]) break; for(max=ttf->unicode_size-1;max>=0;max--) if(ttf->unicode[max]) break; if(min<=max) { os2->fsFirstCharIndex = min; os2->fsLastCharIndex = max; } } os2->sTypoAscender = ttf->ascent; os2->sTypoDescender = ttf->descent; os2->sTypoLineGap = ttf->lineGap; os2->usDefaultChar = 0; os2->usBreakChar = (ttf->unicode_size>0x20 && ttf->unicode[0x20])?0x20:0; os2->usMaxContext = 0; // we don't use ligatures yet return os2; } static table_os2_t*os2_parse(memreader_t*r) { table_os2_t*os2 = rfx_calloc(sizeof(table_os2_t)); U16 version = readU16(r); /* 0 = TrueType 1.5 1 = TrueType 1.66 2 = OpenType 1.2 3 = OpenType 1.4 */ if(version!=0 && version!=1 && version!=2 && version!=3) msg(" Unknown OS2 version: %04x", version); os2->xAvgCharWidth = readS16(r); os2->usWeightClass = readU16(r); os2->usWidthClass = readU16(r); readU16(r); //fstype os2->ySubscriptXSize = readU16(r); os2->ySubscriptYSize = readU16(r); os2->ySubscriptXOffset = readU16(r); os2->ySubscriptYOffset = readU16(r); os2->ySuperscriptXSize = readU16(r); os2->ySuperscriptYSize = readU16(r); os2->ySuperscriptXOffset = readU16(r); os2->ySuperscriptYOffset = readU16(r); os2->yStrikeoutSize = readU16(r); os2->yStrikeoutPosition = readU16(r); os2->sFamilyClass = readU16(r); os2->panose_FamilyType = readU8(r); os2->panose_SerifStyle = readU8(r); os2->panose_Weight = readU8(r); os2->panose_Proportion = readU8(r); os2->panose_Contrast = readU8(r); os2->panose_StrokeVariation = readU8(r); os2->panose_ArmStyle = readU8(r); os2->panose_Letterform = readU8(r); os2->panose_Midline = readU8(r); os2->panose_XHeight = readU8(r); os2->ulCharRange[0] = readU32(r); os2->ulCharRange[1] = readU32(r); os2->ulCharRange[2] = readU32(r); os2->ulCharRange[3] = readU32(r); readU32(r); //vendor os2->fsSelection = readU16(r); os2->fsFirstCharIndex = readU16(r); os2->fsLastCharIndex = readU16(r); os2->sTypoAscender = readS16(r); os2->sTypoDescender = readS16(r); os2->sTypoLineGap = readS16(r); os2->usWinAscent = readU16(r); os2->usWinDescent = readU16(r); if(version<1) return os2; os2->ulCodePageRange1 = readU32(r); os2->ulCodePageRange2 = readU32(r); if(version<2) return os2; os2->sxHeight = readS16(r); os2->sCapHeight = readS16(r); os2->usDefaultChar = readU16(r); os2->usBreakChar = readU16(r); os2->usMaxContext = readU16(r); if(r->pos < r->size) { msg(" Leftover bytes (%d) in OS2 tag", r->size - r->pos); } return os2; } static void os2_write(ttf_t*ttf, ttf_table_t*w) { table_os2_t*os2 = ttf->os2; U16 version=1; if(os2->sxHeight|os2->sCapHeight|os2->usDefaultChar|os2->usBreakChar|os2->usMaxContext) { version=2; } writeU16(w, version); writeS16(w, os2->xAvgCharWidth); writeU16(w, os2->usWeightClass); writeU16(w, os2->usWidthClass); writeU16(w, 0); //fstype writeU16(w, os2->ySubscriptXSize); writeU16(w, os2->ySubscriptYSize); writeU16(w, os2->ySubscriptXOffset); writeU16(w, os2->ySubscriptYOffset); writeU16(w, os2->ySuperscriptXSize); writeU16(w, os2->ySuperscriptYSize); writeU16(w, os2->ySuperscriptXOffset); writeU16(w, os2->ySuperscriptYOffset); writeU16(w, os2->yStrikeoutSize); writeU16(w, os2->yStrikeoutPosition); writeU16(w, os2->sFamilyClass); writeU8(w, os2->panose_FamilyType); writeU8(w, os2->panose_SerifStyle); writeU8(w, os2->panose_Weight); writeU8(w, os2->panose_Proportion); writeU8(w, os2->panose_Contrast); writeU8(w, os2->panose_StrokeVariation); writeU8(w, os2->panose_ArmStyle); writeU8(w, os2->panose_Letterform); writeU8(w, os2->panose_Midline); writeU8(w, os2->panose_XHeight); writeU32(w, os2->ulCharRange[0]); writeU32(w, os2->ulCharRange[1]); writeU32(w, os2->ulCharRange[2]); writeU32(w, os2->ulCharRange[3]); writeU32(w, 0x53434244); //vendor writeU16(w, os2->fsSelection); writeU16(w, os2->fsFirstCharIndex); writeU16(w, os2->fsLastCharIndex); writeS16(w, os2->sTypoAscender); writeS16(w, os2->sTypoDescender); writeS16(w, os2->sTypoLineGap); writeU16(w, os2->usWinAscent); writeU16(w, os2->usWinDescent); if(version<1) return; writeU32(w, os2->ulCodePageRange1); writeU32(w, os2->ulCodePageRange2); if(version<2) return; writeS16(w, os2->sxHeight); writeS16(w, os2->sCapHeight); writeU16(w, os2->usDefaultChar); writeU16(w, os2->usBreakChar); writeU16(w, os2->usMaxContext); } static void os2_dump(ttf_t*ttf) { table_os2_t*os2 = ttf->os2; if(!os2) return; printf("os2->xAvgCharWidth: %d\n", os2->xAvgCharWidth); printf("os2->usWeightClass: %d\n", os2->usWeightClass); printf("os2->usWidthClass: %d\n", os2->usWidthClass); printf("os2->ySubscriptXSize: %d\n", os2->ySubscriptXSize); printf("os2->ySubscriptYSize: %d\n", os2->ySubscriptYSize); printf("os2->ySubscriptXOffset: %d\n", os2->ySubscriptXOffset); printf("os2->ySubscriptYOffset: %d\n", os2->ySubscriptYOffset); printf("os2->ySuperscriptXSize: %d\n", os2->ySuperscriptXSize); printf("os2->ySuperscriptYSize: %d\n", os2->ySuperscriptYSize); printf("os2->ySuperscriptXOffset: %d\n", os2->ySuperscriptXOffset); printf("os2->ySuperscriptYOffset: %d\n", os2->ySuperscriptYOffset); printf("os2->yStrikeoutSize: %d\n", os2->yStrikeoutSize); printf("os2->yStrikeoutPosition: %d\n", os2->yStrikeoutPosition); printf("os2->sFamilyClass: %d\n", os2->sFamilyClass); printf("os2->panose_FamilyType: %d\n", os2->panose_FamilyType); printf("os2->panose_SerifStyle: %d\n", os2->panose_SerifStyle); printf("os2->panose_Weight: %d\n", os2->panose_Weight); printf("os2->panose_Proportion: %d\n", os2->panose_Proportion); printf("os2->panose_Contrast: %d\n", os2->panose_Contrast); printf("os2->panose_StrokeVariation: %d\n", os2->panose_StrokeVariation); printf("os2->panose_ArmStyle: %d\n", os2->panose_ArmStyle); printf("os2->panose_Letterform: %d\n", os2->panose_Letterform); printf("os2->panose_Midline: %d\n", os2->panose_Midline); printf("os2->panose_XHeight: %d\n", os2->panose_XHeight); printf("os2->ulCharRange[0]: %d\n", os2->ulCharRange[0]); printf("os2->ulCharRange[1]: %d\n", os2->ulCharRange[1]); printf("os2->ulCharRange[2]: %d\n", os2->ulCharRange[2]); printf("os2->ulCharRange[3]: %d\n", os2->ulCharRange[3]); printf("os2->fsSelection: %d\n", os2->fsSelection); printf("os2->fsFirstCharIndex: %d\n", os2->fsFirstCharIndex); printf("os2->fsLastCharIndex: %d\n", os2->fsLastCharIndex); printf("os2->sTypoAscender: %d\n", os2->sTypoAscender); printf("os2->sTypoDescender: %d\n", os2->sTypoDescender); printf("os2->sTypoLineGap: %d\n", os2->sTypoLineGap); printf("os2->usWinAscent: %d\n", os2->usWinAscent); printf("os2->usWinDescent: %d\n", os2->usWinDescent); printf("os2->ulCodePageRange1: %d\n", os2->ulCodePageRange1); printf("os2->ulCodePageRange2: %d\n", os2->ulCodePageRange2); printf("os2->sxHeight: %d\n", os2->sxHeight); printf("os2->sCapHeight: %d\n", os2->sCapHeight); printf("os2->usDefaultChar: %d\n", os2->usDefaultChar); printf("os2->usBreakChar: %d\n", os2->usBreakChar); printf("os2->usMaxContext: %d\n", os2->usMaxContext); } static void os2_delete(ttf_t*ttf) { if(ttf->os2) free(ttf->os2); ttf->os2=0; } static table_maxp_t*maxp_new(ttf_t*ttf) { table_maxp_t*maxp = rfx_calloc(sizeof(table_maxp_t)); int t; maxp->maxContours=1; if(ttf->num_glyphs) { int max = 1; for(t=0;tnum_glyphs;t++) { if(ttf->glyphs[t].num_points>max) max = ttf->glyphs[t].num_points; int contours = 0; int s; for(s=0;sglyphs[t].num_points;s++) { if(ttf->glyphs[t].points[s].flags&GLYPH_CONTOUR_END) contours++; } if(maxp->maxContours < contours) maxp->maxContours = contours; } maxp->maxPoints = max; /* we don't generate composite glyphs yet */ maxp->maxComponentPoints = 0; maxp->maxComponentContours = 0; } maxp->maxZones = 2; // we don't use the Z0 zone return maxp; } static table_maxp_t* maxp_parse(ttf_t*ttf, memreader_t*r) { U32 version = readU32(r); ttf->num_glyphs = readU16(r); /* according to freetype, older fonts (version<0x10000) apparently only contain the number of glyphs. this is rather rare, though. */ if(version<0x10000 && r->size==6) return 0; if(r->size<32) msg(" Truncated maxp table (version %d)", version); table_maxp_t*maxp = rfx_calloc(sizeof(table_maxp_t)); maxp->maxPoints = readU16(r); maxp->maxContours = readU16(r); maxp->maxComponentPoints = readU16(r); maxp->maxComponentContours = readU16(r); maxp->maxZones = readU16(r); maxp->maxTwilightPoints = readU16(r); maxp->maxStorage = readU16(r); maxp->maxFunctionDefs = readU16(r); maxp->maxInstructionDefs = readU16(r); maxp->maxStackElements = readU16(r); maxp->maxSizeOfInstructions = readU16(r); maxp->maxComponentElements = readU16(r); maxp->maxComponentDepth = readU16(r); return maxp; } static void maxp_write(ttf_t*ttf, ttf_table_t*w) { table_maxp_t*maxp = ttf->maxp; if(!maxp) { /* version 0.5 simplified maxp table */ writeU32(w, 0x00005000); writeU16(w, ttf->num_glyphs); return; } writeU32(w, 0x10000); //version writeU16(w, ttf->num_glyphs); writeU16(w, maxp->maxPoints); writeU16(w, maxp->maxContours); writeU16(w, maxp->maxComponentPoints); writeU16(w, maxp->maxComponentContours); writeU16(w, maxp->maxZones); writeU16(w, maxp->maxTwilightPoints); writeU16(w, maxp->maxStorage); writeU16(w, maxp->maxFunctionDefs); writeU16(w, maxp->maxInstructionDefs); writeU16(w, maxp->maxStackElements); writeU16(w, maxp->maxSizeOfInstructions); writeU16(w, maxp->maxComponentElements); writeU16(w, maxp->maxComponentDepth); } static void maxp_dump(ttf_t*ttf) { table_maxp_t*maxp = ttf->maxp; if(!maxp) return; printf("maxp->maxPoints: %d\n", maxp->maxPoints); printf("maxp->maxContours: %d\n", maxp->maxContours); printf("maxp->maxComponentPoints: %d\n", maxp->maxComponentPoints); printf("maxp->maxComponentContours: %d\n", maxp->maxComponentContours); printf("maxp->maxZones: %d\n", maxp->maxZones); printf("maxp->maxTwilightPoints: %d\n", maxp->maxTwilightPoints); printf("maxp->maxStorage: %d\n", maxp->maxStorage); printf("maxp->maxFunctionDefs: %d\n", maxp->maxFunctionDefs); printf("maxp->maxInstructionDefs: %d\n", maxp->maxInstructionDefs); printf("maxp->maxStackElements: %d\n", maxp->maxStackElements); printf("maxp->maxSizeOfInstructions: %d\n", maxp->maxSizeOfInstructions); printf("maxp->maxComponentElements: %d\n", maxp->maxComponentElements); printf("maxp->maxComponentDepth: %d\n", maxp->maxComponentDepth); } static void maxp_delete(ttf_t*ttf) { if(ttf->maxp) free(ttf->maxp); ttf->maxp=0; } static table_hea_t*hea_new(ttf_t*ttf) { table_hea_t*hea = rfx_calloc(sizeof(table_hea_t)); if(ttf->num_glyphs) { int t; for(t=0;tnum_glyphs;t++) { if(ttf->glyphs[t].advance > hea->advanceWidthMax) hea->advanceWidthMax = ttf->glyphs[t].advance; if(ttf->glyphs[t].bearing < hea->minLeftSideBearing) hea->minLeftSideBearing = ttf->glyphs[t].bearing; if(ttf->glyphs[t].xmax < hea->minRightSideBearing) hea->minRightSideBearing = ttf->glyphs[t].xmax; int width = ttf->glyphs[t].xmax - ttf->glyphs[t].xmin; if(width > hea->xMaxExtent) hea->xMaxExtent = width; } hea->caretSlopeRise = 1; } return hea; } static int hea_parse(memreader_t*r, ttf_t*ttf) { table_hea_t*hea = ttf->hea = rfx_calloc(sizeof(table_hea_t)); U32 version = readU32(r); ttf->ascent = readS16(r); ttf->descent = readS16(r); ttf->lineGap = readS16(r); hea->advanceWidthMax = readU16(r); hea->minLeftSideBearing = readS16(r); hea->minRightSideBearing = readS16(r); hea->xMaxExtent = readS16(r); hea->caretSlopeRise = readS16(r); hea->caretSlopeRun = readS16(r); hea->caretOffset = readS16(r); readS16(r); //reserved[0] readS16(r); //reserved[1] readS16(r); //reserved[2] readS16(r); //reserved[3] S16 metricDataFormat = readS16(r); //should be 0 if(metricDataFormat!=0) { msg(" Unknown metric format %d", metricDataFormat); } int num_advances = readU16(r); if(num_advances > ttf->num_glyphs) { msg(" bad number of horizontal metrics: %d", num_advances); num_advances = ttf->num_glyphs; } return num_advances; } static table_hea_t*hea_write(ttf_t*ttf, ttf_table_t*w, int num_advances) { table_hea_t*hea = ttf->hea; writeU32(w, 0x00010000); writeS16(w, ttf->ascent); writeS16(w, ttf->descent); writeS16(w, ttf->lineGap); writeU16(w, hea->advanceWidthMax); writeS16(w, hea->minLeftSideBearing); writeS16(w, hea->minRightSideBearing); writeS16(w, hea->xMaxExtent); writeS16(w, hea->caretSlopeRise); writeS16(w, hea->caretSlopeRun); writeS16(w, hea->caretOffset); writeS16(w, 0); //reserved writeS16(w, 0); //reserved writeS16(w, 0); //reserved writeS16(w, 0); //reserved writeS16(w, 0); //metricDataFormat writeU16(w, num_advances); return hea; } static void hea_dump(ttf_t*ttf) { table_hea_t*hea = ttf->hea; if(!hea) return; const char*dir = ttf->is_vertical?"v":"h"; printf("%shea->ascent: %d\n", dir, ttf->ascent); printf("%shea->descent: %d\n", dir, ttf->descent); printf("%shea->lineGap: %d\n", dir, ttf->lineGap); printf("%shea->advanceWidthMax: %d\n", dir, hea->advanceWidthMax); printf("%shea->minLeftSideBearing: %d\n", dir, hea->minLeftSideBearing); printf("%shea->minRightSideBearing: %d\n", dir, hea->minRightSideBearing); printf("%shea->xMaxExtent: %d\n", dir, hea->xMaxExtent); printf("%shea->caretSlopeRise: %d\n", dir, hea->caretSlopeRise); printf("%shea->caretSlopeRun: %d\n", dir, hea->caretSlopeRun); printf("%shea->caretOffset: %d\n", dir, hea->caretOffset); } static void hea_delete(ttf_t*ttf) { if(ttf->hea) { free(ttf->hea); ttf->hea=0; } } static void mtx_parse(memreader_t*r, ttf_t*ttf, int num_advances) { U16 old_advance = 0; int t; if(num_advances > r->size/4) num_advances = r->size/4; for(t=0;tglyphs[t].advance = readU16(r); ttf->glyphs[t].bearing = readS16(r); } int rest = (r->size - num_advances*4)/2; if(ttf->num_glyphs < num_advances+rest) { rest = ttf->num_glyphs-num_advances; } for(t=0;tglyphs[t].advance = old_advance; ttf->glyphs[t].bearing = readS16(r); } } static int mtx_write(ttf_t*ttf, ttf_table_t*w) { int num_advances = ttf->num_glyphs; if(ttf->num_glyphs>=2) { int t; for(t=ttf->num_glyphs-1;t>0;t--) { if(ttf->glyphs[t-1].advance != ttf->glyphs[t].advance) break; } /* we need to store all individual advances as well as one entry for the constant */ num_advances = t+1; } int t; for(t=0;tglyphs[t].advance); writeS16(w, ttf->glyphs[t].bearing); } for(;tnum_glyphs;t++) { writeS16(w, ttf->glyphs[t].bearing); } return num_advances; } static U32*loca_parse(memreader_t*r, ttf_t*ttf, int size) { int t; int num = ttf->num_glyphs+1; U32*locations = rfx_calloc(num*sizeof(U32)); U32 lastloc = 0; U32 loc = 0; char warn_unsorted = 1; if(size) { if(num*4 > r->size) { msg(" Short 'loca' table (32 bit): %d/%d", r->size/4, num); num=r->size/4; } if(num*4 < r->size) { msg(" Extraneous data (%d bytes) in 'loca' table (32 bit)", r->size-num*4); } for(t=0;t loc && warn_unsorted) { msg(" Unsorted 'loca' table (32 bit)"); warn_unsorted=0; } lastloc = loc; } } else { if(num*2 > r->size) { msg(" Short 'loca' table (16 bit)"); num=r->size/2; } if(num*2 < r->size) { msg(" Extraneous data (%d bytes) in 'loca' table (16 bit)", r->size-num*2); } for(t=0;t loc && warn_unsorted) { msg(" Unsorted 'loca' table"); warn_unsorted=0; } lastloc = loc; } } return locations; } static int loca_write(ttf_t*ttf, ttf_table_t*w, U32*locations) { int t; char use_32bit = 0; for(t=0;t<=ttf->num_glyphs;t++) { if(locations[t]>=0x20000 || (locations[t]&1)) { use_32bit = 1; break; } } if(use_32bit) { for(t=0;t<=ttf->num_glyphs;t++) { writeU32(w, locations[t]); } return 1; } else { for(t=0;t<=ttf->num_glyphs;t++) { writeU16(w, locations[t]/2); } return 0; } } static int parse_simple_glyph(ttf_t*ttf, memreader_t*r, int num_contours, int glyphnr) { ttfglyph_t*glyph = &ttf->glyphs[glyphnr]; U16*endpoints = 0; if(num_contours>0) { endpoints = malloc(sizeof(U16)*num_contours); int s; int lastpos = -1; for(s=0;s Unsorted endpoints array (len:%d) last=%d now=%d", s, pos, lastpos); } lastpos = pos; } } U16 code_len = readU16(r); if(code_len) { glyph->code = malloc(sizeof(U16)*code_len); readBlock(r, glyph->code, code_len); glyph->code_size = code_len; } if(!endpoints) return 1; /*msg(" TTF Glyph %d) code_size=%d num_contours=%d glyph->num_points=%d %d/%d/%d/%d", glyphnr, code_len, num_contours, glyph->num_points, xmin, ymin, xmax, ymax);*/ INIT_READ(fx, r->mem, r->size, r->pos); INIT_READ(fy, r->mem, r->size, r->pos); glyph->num_points = endpoints[num_contours-1] + 1; glyph->points = rfx_calloc(sizeof(ttfpoint_t)*glyph->num_points); /* parse flag array (1st pass- to determine start of coordinates) */ int num=0; while(numnum_points) { U8 flag = readU8(r); if(flag&0xc0) { msg(" Bad flags in glyph outline: %02x (at pos %d)", flag, num); free(glyph->points); glyph->points = 0; glyph->num_points = 0; return 0; } int count = 1; if(flag & 0x08) count += readU8(r); if(count+num>glyph->num_points) { msg(" Bad count (%d) in glyph (%d) (at pos %d)", count, glyphnr, num); count = glyph->num_points-num; } num+=count; } /* parse flag array (2nd pass) and x coordinates */ num=0; int x = 0; char is_start=1; int contour_pos=0; int bytepos = r->pos; while(numnum_points) { U8 flag = readU8(&fx); int count = flag&8?readU8(&fx)+1:1; count=count>glyph->num_points-num?glyph->num_points-num:(count?count:1); do { char is_end=0; if(contour_pospoints[num].x = x; U8 f = flag&GLYPH_ON_CURVE; if(is_start) f|=GLYPH_CONTOUR_START; if(is_end) f|=GLYPH_CONTOUR_END; glyph->points[num].flags = f; num++; is_start = is_end; } while(--count); } /* parse flag array (3rd pass) and y coordinates */ num=0; int y = 0; while(numnum_points) { U8 flag = readU8(&fy); int count = flag&8?readU8(&fy)+1:1; count=count>glyph->num_points-num?glyph->num_points-num:(count?count:1); do { if((flag&0x24) == 0x24) y += readU8(r); else if((flag&0x24) == 0x04) y -= readU8(r); else if((flag&0x24) == 0x00) y += readS16(r); glyph->points[num].y = y; num++; } while(--count); } free(endpoints); return 1; } static void glyf_parse(memreader_t*rr, ttf_t*ttf, U32*loca) { int t; char warn_about_compound_glyphs=0; for(t=0;tnum_glyphs;t++) { INIT_READ(r, rr->mem, rr->size, loca[t]); if(loca[t]==loca[t+1] || loca[t]==r.size) continue; //empty glyph if(r.pos+10>r.size) { msg(" Truncated glyph entry %d/%d (or bad loca entry %d/%d, next loca: %d)", t, ttf->num_glyphs, loca[t], r.size, loca[t+1]); break; } S16 num_contours = readS16(&r); ttf->glyphs[t].xmin = readS16(&r); ttf->glyphs[t].ymin = readS16(&r); ttf->glyphs[t].xmax = readS16(&r); ttf->glyphs[t].ymax = readS16(&r); if(num_contours<0) { if(warn_about_compound_glyphs) msg(" Compound glyphs not supported yet"); warn_about_compound_glyphs=0; } else { if(!parse_simple_glyph(ttf, &r, num_contours, t)) return; } } } void write_simple_glyph(ttf_table_t*w, ttfglyph_t*g) { /* endpoints array */ int s; for(s=0;snum_points;s++) { if(g->points[s].flags&GLYPH_CONTOUR_END) writeU16(w, s); } /* bytecode */ writeU16(w, g->code_size); if(g->code_size) writeBlock(w, g->code, g->code_size); /* flags */ int lastx=0; int lasty=0; int lastflag=-1; int flagcount=0; for(s=0;snum_points;s++) { ttfpoint_t*p = &g->points[s]; int dx = p->x - lastx; int dy = p->y - lasty; U8 flags = p->flags&GLYPH_ON_CURVE; if(!dx) { flags|=0x10; } else if(dx<0 && dx>=-255) { flags|=0x02; } else if(dx>0 && dx<=255) { flags|=0x12; } if(!dy) { flags|=0x20; } else if(dy<0 && dy>=-255) { flags|=0x04; } else if(dy>0 && dy<=255) { flags|=0x24; } if(flags == lastflag && flagcount<255) { flagcount++; } else { if(lastflag>=0) { if(flagcount) { writeU8(w, lastflag|8); writeU8(w, flagcount); } else { writeU8(w, lastflag); } } lastflag = flags; flagcount = 0; } lastx = p->x; lasty = p->y; } if(lastflag>=0) { if(flagcount) { writeU8(w, lastflag|8); writeU8(w, flagcount); } else { writeU8(w, lastflag); } } /* coordinates */ lastx=0; int bytepos = w->len; for(s=0;snum_points;s++) { ttfpoint_t*p = &g->points[s]; int dx = p->x - lastx; if(dx>32767 || dx<-32768) { msg(" Coordinate overflow in glyph"); } lastx = p->x; if(dx>0 && dx<=255) writeU8(w, dx); else if(dx<0 && dx>=-255) writeU8(w, -dx); else if(dx) writeS16(w, dx); } lasty=0; for(s=0;snum_points;s++) { ttfpoint_t*p = &g->points[s]; int dy = p->y - lasty; if(dy>32767 || dy<-32768) { msg(" Coordinate overflow in glyph"); } lasty = p->y; if(dy>0 && dy<=255) writeU8(w, dy); else if(dy<0 && dy>=-255) writeU8(w, -dy); else if(dy) writeS16(w, dy); } } U32* glyf_write(ttf_t* ttf, ttf_table_t*w) { U32*locations = malloc(sizeof(U32)*(ttf->num_glyphs+1)); int t; for(t=0;tnum_glyphs;t++) { locations[t] = w->len; ttfglyph_t*g = &ttf->glyphs[t]; int s; int num_contours = 0; for(s=0;snum_points;s++) { if(g->points[s].flags&GLYPH_CONTOUR_END) num_contours++; } writeS16(w, num_contours?num_contours:1); writeS16(w, g->xmin); writeS16(w, g->ymin); writeS16(w, g->xmax); writeS16(w, g->ymax); if(!num_contours) { /* some ttf parsers can't deal with zero contours, so in the case of an empty glyph, write a single point (0,0) */ writeU16(w, 0); //endpoint of 1st contour writeU16(w, g->code_size); if(g->code_size) writeBlock(w, g->code, g->code_size); writeU8(w, 0x31); //flag (xy=(0,0),on curve) } else { write_simple_glyph(w, g); } } locations[t] = w->len; return locations; } void glyf_dump(ttf_t* ttf) { if(!ttf->glyphs) return; int t; for(t=0;tnum_glyphs;t++) { ttfglyph_t*g = &ttf->glyphs[t]; printf("glyph %d)\n", t); printf(" advance=%d\n", g->advance); printf(" bearing=%d\n", g->bearing); printf(" bbox=(%d/%d/%d/%d)\n", g->xmin, g->ymin, g->xmax, g->ymax); printf(" points=("); int s; for(s=0;snum_points;s++) { if(s) printf(","); printf("%d/%d/0x%02x", g->points[s].x, g->points[s].y, g->points[s].flags); } printf(")\n"); if(g->code_size) hexdump(g->code, g->code_size, " "); } } void glyf_delete(ttf_t* ttf) { if(!ttf->glyphs) return; int t; for(t=0;tnum_glyphs;t++) { if(ttf->glyphs[t].code) { free(ttf->glyphs[t].code); ttf->glyphs[t].code = 0; } if(ttf->glyphs[t].points) { free(ttf->glyphs[t].points); ttf->glyphs[t].points = 0; } } free(ttf->glyphs);ttf->glyphs=0; } static void grow_unicode(ttf_t*ttf, int index) { int size = index+1; if(!ttf->unicode) { ttf->unicode = rfx_calloc(sizeof(ttf->unicode[0])*size); } else if(ttf->unicode_sizeunicode = rfx_realloc(ttf->unicode, sizeof(ttf->unicode[0])*size); memset(ttf->unicode+ttf->unicode_size, 0, sizeof(ttf->unicode[0])*(size - ttf->unicode_size)); } ttf->unicode_size = size; } void cmap_parse(memreader_t*r, ttf_t*ttf) { readU16(r); // version (0) int num_subtables = readU16(r); int t; char warn=1; if(r->pos+num_subtables*8 > r->size) { msg(" CMap overflow"); num_subtables = (r->size-r->pos)/8; } unicode_t*data = 0; for(t=0;tr->size) { msg(" CMAP table %d %d is out of bounds (%d)", platform, encoding, offset); continue; } int is_unicode = platform==0 || platform==3 && encoding == 1 || platform==3 && encoding == 10; if(!is_unicode) continue; INIT_READ(t, r->mem, r->size, offset); U16 format = readU16(&t); int length = readU16(&t); U16 language = readU16(&t); if(language) msg(" Language code %02x in unicode mapping", language); int num = 0; if(format == 0) { num = length-6; if(t.pos+length > t.size) { msg(" overflow in format 0 cmap table"); num = t.size-t.pos; } data = malloc(num*sizeof(unicode_t)); int s; grow_unicode(ttf, num); for(s=0;sunicode[s] = readU8(&t); } } else if(format == 4) { U16 segment_count = readU16(&t); if(segment_count&1) { msg(" Bad segmentx2 count %d", segment_count); continue; } segment_count>>=1; readU16(&t); //searchrange readU16(&t); //entry selector readU16(&t); //range shift INIT_READ(r_end, t.mem, t.size, t.pos); INIT_READ(r_start, t.mem, t.size, t.pos+2+segment_count*2); INIT_READ(r_delta, t.mem, t.size, t.pos+2+segment_count*4); INIT_READ(r_range, t.mem, t.size, t.pos+2+segment_count*6); int glyphmap_start = t.pos+2+segment_count*8; int glyphmap_size = t.size - glyphmap_start; int s; for(s=0;sunicode[u] = (u + delta) & 0xffff; } } else { int pos = r_range.pos-2+range; if(warn && pos+end-start+1 > t.size) { msg(" glyphmap index out of bounds (%d-%d/%d)", pos, pos+end-start, t.size); warn=0; } INIT_READ(g, t.mem, t.size, pos); for(u=start;u<=end;u++) { ttf->unicode[u] = readU16(&g); } } } } } } static int segment_size(unicode_t*unicode, int pos, int size) { int s; int count=0; for(s=pos;s4) { /* a segment costs us 8 bytes, so for more than 4 consecutive zero entries (16 bit each) in the glyph index array, it pays off to start a new segment */ break; } } s -= count; // go to the last filled in entry if(s==size) return size-1; return s; } void cmap_write(ttf_t* ttf, ttf_table_t*w) { writeU16(w, 0); //version writeU16(w, 2); //two tables writeU16(w, 0); //platform (unicode) writeU16(w, 3); //encoding (unicode 2.0) writeU32(w, 20); //offset writeU16(w, 3); //platform (windows) writeU16(w, 1); //encoding (unicode basic multilingual plane UCS-2) writeU32(w, 20); //offset writeU16(w, 4); // format=4 int length_pos = w->len; writeU16(w, 0); // length: we don't know yet writeU16(w, 0); // language (n/a for unicode) int num_segments_pos = w->len; writeU16(w, 0); //number of segments: we don't know yet either writeU16(w, 0); //searchrange writeU16(w, 0); //entry selector writeU16(w, 0); //range shift int pos=0; int num_segments=0; while(pos < ttf->unicode_size) { if(!ttf->unicode[pos]) { pos++; continue; } int s = segment_size(ttf->unicode, pos, ttf->unicode_size); pos = s+1; num_segments++; } num_segments++; // account for 0xffff mapping int glyphmap_start = w->len+2+num_segments*8; int t; int end_pos = w->len; for(t=0;tlen; for(t=0;tlen; for(t=0;tlen; for(t=0;tdata[num_segments_pos++]=(num_segments*2)>>8; w->data[num_segments_pos++]=(num_segments*2); /* backpatch search range */ int tmp = num_segments; int search_range = 0; while(tmp) { search_range = tmp; tmp = tmp&(tmp-1); } w->data[num_segments_pos++]=(search_range*2)>>8; w->data[num_segments_pos++]=(search_range*2); /* backpatch entry selector */ int entry_selector = 0; tmp = search_range; while(tmp>1) {tmp>>=1;entry_selector++;} w->data[num_segments_pos++]=entry_selector>>8; w->data[num_segments_pos++]=entry_selector; /* backpatch range shift */ int range_shift = num_segments*2 - search_range*2; w->data[num_segments_pos++]=range_shift>>8; w->data[num_segments_pos++]=range_shift; pos=0; num_segments = 0; while(pos < ttf->unicode_size) { if(!ttf->unicode[pos]) { pos++; continue; } U16 end = segment_size(ttf->unicode, pos, ttf->unicode_size); w->data[end_pos++]=end>>8; w->data[end_pos++]=end; w->data[start_pos++]=pos>>8; w->data[start_pos++]=pos; int s; U16 delta = ttf->unicode[pos]-pos; char do_delta=1; for(s=pos+1;s<=end;s++) { U16 delta2 = ttf->unicode[s]-s; if(delta2!=delta) { do_delta=0; break; } } U16 range; if(do_delta) { range = 0; } else { delta = 0; range = w->len - range_pos; for(s=pos;s<=end;s++) { writeU16(w, ttf->unicode[s]); } } w->data[delta_pos++]=delta>>8; w->data[delta_pos++]=delta; w->data[range_pos++]=range>>8; w->data[range_pos++]=range; num_segments++; pos = end+1; } /* write out a mapping from 0xffff to 0- seems to be required by some libraries (e.g. fonttools) */ w->data[end_pos++]=0xff; w->data[end_pos++]=0xff; w->data[start_pos++]=0xff; w->data[start_pos++]=0xff; w->data[delta_pos++]=0; w->data[delta_pos++]=1; w->data[range_pos++]=0; w->data[range_pos++]=0; w->data[length_pos]=(w->len-20)>>8; w->data[length_pos+1]=w->len-20; } void cmap_delete(ttf_t*ttf) { if(ttf->unicode) { free(ttf->unicode); ttf->unicode=0; } ttf->unicode_size=0; } static char*readString(memreader_t*r, int len) { char*s = malloc(len+1); readBlock(r, s, len); s[len] = 0; return s; } void name_parse(memreader_t*r, ttf_t*ttf) { U16 format = readU16(r); U16 count = readU16(r); U16 offset = readU16(r); int t; for(t=0;tmem, r->size, offset+offset_2); if(!(platform==0 || (platform==1 && encoding==0))) continue; INIT_READ(s, r->mem, r->size, offset+offset_2); switch (name_id) { case 1: read_name = &ttf->family_name; break; case 2: read_name = &ttf->subfamily_name; break; case 3: read_name = &ttf->font_uid; break; case 4: read_name = &ttf->full_name; break; case 5: read_name = &ttf->version_string; break; case 6: read_name = &ttf->postscript_name; break; default: read_name = 0; } if (read_name) { if (*read_name) free(*read_name); *read_name = readString(&s, len); } } } void name_write(ttf_t*ttf, ttf_table_t*table) { char*strings[6] = {ttf->family_name, ttf->subfamily_name, ttf->font_uid, ttf->full_name, ttf->version_string, ttf->postscript_name}; int codes[6] = {1,2,3,4,5,6}; writeU16(table, 0); //format int count = 0; int t; int nr = sizeof(strings)/sizeof(strings[0]); for(t=0;tlen; writeU16(table, 0); //offset (will be filled in later) /* Windows expects the name table to be sorted by platform/encoding/language/name_id */ int offset = 0; for(t=0;tdata[offset_pos] = table->len>>8; table->data[offset_pos+1] = table->len; for(t=0;tfull_name) { free(ttf->full_name); ttf->full_name=0; } if(ttf->family_name) { free(ttf->family_name); ttf->family_name=0; } if(ttf->subfamily_name) { free(ttf->subfamily_name); ttf->subfamily_name=0; } if(ttf->version_string) { free(ttf->version_string); ttf->version_string=0; } if(ttf->font_uid) { free(ttf->font_uid); ttf->font_uid=0; } if(ttf->postscript_name) { free(ttf->postscript_name); ttf->postscript_name=0; } } static table_post_t*post_new(ttf_t*ttf) { table_post_t*post = rfx_calloc(sizeof(table_post_t)); return post; } void post_parse(memreader_t*r, ttf_t*ttf) { table_post_t*post = ttf->post = rfx_calloc(sizeof(table_post_t)); U32 format = readU32(r); post->italic_angle = readU32(r); post->underline_position = readU16(r); post->underline_thickness = readU16(r); U16 is_monospaced = readU32(r); readU32(r); // min mem 42 readU32(r); readU32(r); // min mem 1 readU32(r); } void post_write(ttf_t*ttf, ttf_table_t*table) { table_post_t*post = ttf->post; writeU32(table, 0x00030000); writeU32(table, post->italic_angle); writeU16(table, post->underline_position); writeU16(table, post->underline_thickness); writeU32(table, 0); //is monospaced TODO writeU32(table, 0); //min mem 42 writeU32(table, 0); writeU32(table, 0); //min mem 1 writeU32(table, 0); } void post_delete(ttf_t*ttf) { if(ttf->post) { free(ttf->post); ttf->post = 0; } } void cvt_parse(memreader_t*r, ttf_t*ttf) { table_cvt_t*cvt = ttf->cvt = rfx_calloc(sizeof(table_cvt_t)); cvt->num = r->size/2; cvt->values = malloc(cvt->num*sizeof(S16)); int t; for(t=0;tnum;t++) { cvt->values[t] = readS16(r); } } void cvt_write(ttf_t*ttf, ttf_table_t*table) { table_cvt_t*cvt = ttf->cvt; int t; for(t=0;tnum;t++) { writeS16(table, cvt->values[t]); } } void cvt_delete(ttf_t*ttf) { if(ttf->cvt) { if(ttf->cvt->values) free(ttf->cvt->values); free(ttf->cvt); ttf->cvt = 0; } } static table_gasp_t*gasp_new(ttf_t*ttf) { table_gasp_t*gasp = rfx_calloc(sizeof(table_gasp_t)); gasp->num = 1; gasp->records = rfx_calloc(sizeof(gasp->records[0])*gasp->num); gasp->records[0].size = 65535; gasp->records[0].behaviour = 15; //gridfit+grayscale rendering return gasp; } void gasp_parse(memreader_t*r, ttf_t*ttf) { table_gasp_t*gasp = ttf->gasp = rfx_calloc(sizeof(table_gasp_t)); readU16(r); //version int num = readU16(r); int t; if(!num) return; gasp->records = malloc(sizeof(gasp->records[0])*num); for(t=0;trecords[t].size = readU16(r); gasp->records[t].behaviour = readU16(r); } } #define GASP_SYMMETRIC_GRIDFIT 0x0008 #define GASP_SYMMETRIC_SMOOTHING 0x0004 #define GASP_DOGRAY 0x0002 #define GASP_GRIDFIT 0x0001 void gasp_write(ttf_t*ttf, ttf_table_t*table) { table_gasp_t*gasp = ttf->gasp; int version = 0; int t; for(t=0;tnum;t++) { if(gasp->records[t].behaviour & ~(GASP_GRIDFIT | GASP_DOGRAY)) { version = 1; } } writeU16(table, version); writeU16(table, gasp->num); for(t=0;tnum;t++) { writeU16(table, gasp->records[t].size); writeU16(table, gasp->records[t].behaviour); } } void gasp_delete(ttf_t*ttf) { if(ttf->gasp) { if(ttf->gasp->records) free(ttf->gasp->records); free(ttf->gasp); ttf->gasp = 0; } } table_code_t*prep_new(ttf_t*ttf) { table_code_t*prep = ttf->prep = rfx_calloc(sizeof(table_code_t)); ttf_table_t*t = ttf_table_new(0); writeU8(t,0xb8);writeU16(t,0x1ff); // pushword(0x1ff) writeU8(t,0x85); //scanctrl (always do dropout, for all sizes) writeU8(t,0xb0);writeU8(t,1); // pushbyte(1) writeU8(t,0x8d); //scantype (simple dropout control w/o stubs) writeU8(t,0xb0);writeU8(t,5); // pushbyte(5) writeU8(t,0x8d); //scantype (for windows) smart dropout control w/o stubs prep->code = t->data; prep->size = t->len; free(t); return prep; } void fpgm_parse(memreader_t*r, ttf_t*ttf) { table_code_t*fpgm = ttf->fpgm = rfx_calloc(sizeof(table_code_t)); if(!r->size) return; fpgm->size = r->size; fpgm->code = malloc(r->size); readBlock(r, fpgm->code, r->size); } void fpgm_write(ttf_t*ttf, ttf_table_t*table) { table_code_t*code = ttf->fpgm; writeBlock(table, code->code, code->size); } void fpgm_delete(ttf_t*ttf) { if(ttf->fpgm) { if(ttf->fpgm->code) free(ttf->fpgm->code); free(ttf->fpgm); ttf->fpgm = 0; } } void prep_parse(memreader_t*r, ttf_t*ttf) { table_code_t*prep = ttf->prep = rfx_calloc(sizeof(table_code_t)); if(!r->size) return; prep->size = r->size; prep->code = malloc(r->size); readBlock(r, prep->code, r->size); } void prep_write(ttf_t*ttf, ttf_table_t*table) { table_code_t*code = ttf->prep; writeBlock(table, code->code, code->size); } void prep_delete(ttf_t*ttf) { if(ttf->prep) { if(ttf->prep->code) free(ttf->prep->code); free(ttf->prep); ttf->prep = 0; } } static int ttf_parse_tables(ttf_t*ttf) { ttf_table_t*table; table = ttf_find_table(ttf, TAG_HEAD); if(!table) { msg(" Font has no head table"); return 0; } INIT_READ(m, table->data, table->len, 0); int loc_index = head_parse(ttf, &m); ttf_table_delete(ttf, table); table = ttf_find_table(ttf, TAG_MAXP); if(!table) { msg(" Font has no maxp table"); return 0; } INIT_READ(m2, table->data, table->len, 0); ttf->maxp = maxp_parse(ttf, &m2); ttf_table_delete(ttf, table); if(!ttf->num_glyphs) { msg(" Invalid number of characters"); return 0; } ttf->glyphs = rfx_calloc(sizeof(ttfglyph_t)*ttf->num_glyphs); table = ttf_find_table(ttf, TAG_OS2); if(table) { INIT_READ(m, table->data, table->len, 0); ttf->os2 = os2_parse(&m); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_HHEA); if(table) { INIT_READ(m, table->data, table->len, 0); int num_advances = hea_parse(&m, ttf); ttf_table_delete(ttf, table); table = ttf_find_table(ttf, TAG_HMTX); if(table) { INIT_READ(m, table->data, table->len, 0); mtx_parse(&m, ttf, num_advances); ttf_table_delete(ttf, table); } } else { table = ttf_find_table(ttf, TAG_VHEA); if(table) { ttf->is_vertical=1; INIT_READ(m, table->data, table->len, 0); int num_advances = hea_parse(&m, ttf); ttf_table_delete(ttf, table); table = ttf_find_table(ttf, TAG_VMTX); if(table) { INIT_READ(m, table->data, table->len, 0); mtx_parse(&m, ttf, num_advances); ttf_table_delete(ttf, table); } } else { msg(" Font contains neither HHEA nor VHEA"); } } table = ttf_find_table(ttf, TAG_LOCA); if(table) { INIT_READ(m, table->data, table->len, 0); U32*loca = loca_parse(&m, ttf, loc_index); ttf_table_delete(ttf, table); table = ttf_find_table(ttf, TAG_GLYF); if(table) { INIT_READ(m, table->data, table->len, 0); glyf_parse(&m, ttf, loca); ttf_table_delete(ttf, table); } free(loca); } table = ttf_find_table(ttf, TAG_CMAP); if(table) { INIT_READ(m, table->data, table->len, 0); cmap_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_POST); if(table) { INIT_READ(m, table->data, table->len, 0); post_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_NAME); if(table) { INIT_READ(m, table->data, table->len, 0); name_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_CVT); if(table) { INIT_READ(m, table->data, table->len, 0); cvt_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_GASP); if(table) { INIT_READ(m, table->data, table->len, 0); gasp_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_PREP); if(table) { INIT_READ(m, table->data, table->len, 0); prep_parse(&m, ttf); ttf_table_delete(ttf, table); } table = ttf_find_table(ttf, TAG_FPGM); if(table) { INIT_READ(m, table->data, table->len, 0); fpgm_parse(&m, ttf); ttf_table_delete(ttf, table); } return 1; } static void ttf_collapse_tables(ttf_t*ttf) { ttf_table_t*table; ttf_table_t*head = ttf_find_table(ttf, TAG_HEAD); if(head) return; //already collapsed if(ttf->maxp) { table = ttf_addtable(ttf, TAG_MAXP); maxp_write(ttf, table); maxp_delete(ttf); } if(ttf->os2) { table = ttf_addtable(ttf, TAG_OS2); os2_write(ttf, table); os2_delete(ttf); } if(ttf->hea) { if(!ttf->is_vertical) { table = ttf_addtable(ttf, TAG_HMTX); int num_advances = mtx_write(ttf, table); table = ttf_addtable(ttf, TAG_HHEA); hea_write(ttf, table, num_advances); hea_delete(ttf); } else { table = ttf_addtable(ttf, TAG_VMTX); int num_advances = mtx_write(ttf, table); table = ttf_addtable(ttf, TAG_VHEA); hea_write(ttf, table, num_advances); hea_delete(ttf); } } int loca_size=0; if(ttf->num_glyphs) { if(ttf->unicode) { table = ttf_addtable(ttf, TAG_CMAP); cmap_write(ttf, table); cmap_delete(ttf); } if(ttf->glyphs) { table = ttf_addtable(ttf, TAG_GLYF); U32*locations = glyf_write(ttf, table); table = ttf_addtable(ttf, TAG_LOCA); loca_size = loca_write(ttf, table, locations); free(locations); glyf_delete(ttf); } } if(ttf->full_name || ttf->family_name || ttf->subfamily_name || ttf->font_uid || ttf->postscript_name) { table = ttf_addtable(ttf, TAG_NAME); name_write(ttf, table); name_delete(ttf); } if(ttf->post) { table = ttf_addtable(ttf, TAG_POST); post_write(ttf, table); post_delete(ttf); } if(ttf->cvt) { table = ttf_addtable(ttf, TAG_CVT); cvt_write(ttf, table); cvt_delete(ttf); } if(ttf->gasp) { table = ttf_addtable(ttf, TAG_GASP); gasp_write(ttf, table); gasp_delete(ttf); } if(ttf->fpgm) { table = ttf_addtable(ttf, TAG_FPGM); fpgm_write(ttf, table); fpgm_delete(ttf); } if(ttf->prep) { table = ttf_addtable(ttf, TAG_PREP); prep_write(ttf, table); prep_delete(ttf); } table = ttf_addtable(ttf, TAG_HEAD); head_write(ttf, table, loca_size); head_delete(ttf); } ttf_t*ttf_new() { ttf_t*ttf = rfx_calloc(sizeof(ttf_t)); ttf->version = VERSION_1_0; return ttf; } ttf_t* ttf_load(void*data, int length) { INIT_READ(r,data,length, 0); if(length<12) { msg(" Truncated Truetype file (%d bytes)", length); return 0; } ttf_t*ttf = rfx_calloc(sizeof(ttf_t)); ttf->version = readU32(&r); if(ttf->version == SWAP32(length)) { U32 fontDataSize = readU32(&r); U32 version = readU32(&r); U32 flags = readU32(&r); U8 panose[10]; readBlock(&r, panose, 10); readU8(&r); //charset readU8(&r); //italoc readU32(&r); //weight readU16(&r); //fstype U16 magic = readU16(&r); //magicNumber /* we're being paranoid: it's entirely possible for the font size to be exactly 0x10000. Only treat this font as eot if it has the right magic number */ if(magic == 0x4c50) { readU32(&r); //unicoderange[0] readU32(&r); //unicoderange[1] readU32(&r); //unicoderange[2] readU32(&r); //unicoderange[3] readU32(&r); //codepagerange[0] readU32(&r); //codepagerange[1] readU32(&r); //checksumadjustment readU32(&r); //reserved[0] readU32(&r); //reserved[1] readU32(&r); //reserved[2] readU32(&r); //reserved[3] readU16(&r); //padding int nr=0; for(nr=0;nr<4;nr++) { int t, len; /* All of ttf is big-endian. All of ttf? No. One small eot table of indomitable little-endian... */ len = readU8(&r); len |= readU8(&r)<<8; len /= 2; for(t=0;t>8; } readU16(&r); // zero terminator } readU16(&r); // more padding /* adjust the offset to the start of the actual truetype data- the positions in the table header will be relative to the ttf data after the header, not to the file */ r.mem += r.pos; r.size -= r.pos; r.pos = 0; ttf->version = readU32(&r); } else { reader_reset(&r); ttf->version = readU32(&r); } } if(ttf->version == TTCFTAG) { /* a ttc collection is a number of truetype fonts packaged together */ if(length<16) { msg(" Truncated TTC file (%d bytes)", length); return 0; } U32 ttcf_version = readU32(&r); // 0x00000100: v1.0, 0x00000200: v2.0, includes DSIG table U32 num_fonts = readU32(&r); // number of fonts U32 font1_position = readU32(&r); if(font1_position+12 > length) {\ msg(" Truncated TTC file (%d bytes, first font at %d)", length, font1_position); return 0; } r.pos = font1_position; ttf->version = readU32(&r); } int num_tables = readU16(&r); readU16(&r); //search range readU16(&r); //entry selector readU16(&r); //range shift if(num_tables*16 > length) { msg(" Truncated TTF file (table entries: %d)", num_tables); if(ttf->version != OPENTYPE && ttf->version != TRUETYPE_MACOS && ttf->version != VERSION_1_0) { // bad table length, weird version. This is probably not a ttf file. return 0; } } U32*table_data = malloc(16*num_tables); int t; for(t=0;t length) { msg(" TTF Table %02x%02x%02x%02x outside of stream (pos %d)", (tag>>24)&0xff, (tag>>16)&0xff, (tag>>8)&0xff, (tag)&0xff, pos); } else { U8*mem = malloc(len); r.pos = pos; readBlock(&r, mem, len); ttf_table_t*table = ttf_addtable(ttf, tag); table->data = mem; table->len = table->memsize = len; #if 0 U32 checksum2 = ttf_table_checksum(table); if(checksum2!=checksum) { msg(" Checksum mismatch in tag %02x%02x%02x%02x %c%c%c%c (%d bytes) %08x!=%08x", (tag>>24)&0xff, (tag>>16)&0xff, (tag>>8)&0xff, (tag)&0xff, (tag>>24)&0xff, (tag>>16)&0xff, (tag>>8)&0xff, (tag)&0xff, len, checksum2, checksum); } #endif } } free(table_data); if(!ttf_parse_tables(ttf)) return 0; return ttf; } void ttf_create_truetype_tables(ttf_t*ttf) { if(!ttf->head) ttf->head = head_new(ttf); if(!ttf->maxp) ttf->maxp = maxp_new(ttf); if(!ttf->hea) ttf->hea = hea_new(ttf); if(!ttf->os2) ttf->os2 = os2_new(ttf); if(!ttf->post) ttf->post = post_new(ttf); if(!ttf->gasp) ttf->gasp = gasp_new(ttf); if(!ttf->prep) ttf->prep = prep_new(ttf); } ttf_table_t* ttf_write(ttf_t*ttf, U32*checksum_adjust) { ttf_collapse_tables(ttf); ttf_table_t*file = ttf_table_new(0); writeU32(file, VERSION_1_0); /* write number of tables */ int num_tables=0; ttf_table_t*t = ttf->tables; while(t) { num_tables++; t = t->next; } writeU16(file, num_tables); /* write search range */ int tmp = num_tables; int search_range = 0; while(tmp) { search_range = tmp; tmp = tmp&(tmp-1); } tmp = search_range; search_range*=16; writeU16(file, search_range); /* write entry selector */ int entry_selector = 0; while(tmp>1) { tmp>>=1; entry_selector++; } writeU16(file, entry_selector); /* write range shift */ int range_shift = num_tables*16 - search_range; writeU16(file, range_shift); /* write table dictionary */ int table_dictionary_pos = file->len; int data_pos = file->len + num_tables*16; for(t=ttf->tables;t;t=t->next) { writeU32(file, t->id); writeU32(file, ttf_table_checksum(t)); writeU32(file, data_pos); writeU32(file, t->len); data_pos += t->len; data_pos += (-t->len)&3; //pad } /* write tables */ int head_pos = 0; U8 zero[4]={0,0,0,0}; for(t=ttf->tables;t;t=t->next) { if(t->id == TAG_HEAD) head_pos = file->len; writeBlock(file, t->data, t->len); writeBlock(file, zero, (-t->len)&3); //pad } U32 checksum = 0xb1b0afba - ttf_table_checksum(file); if(checksum_adjust) *checksum_adjust = checksum; U8*checksum2 = file->data + head_pos + 8; checksum2[0] = checksum>>24; checksum2[1] = checksum>>16; checksum2[2] = checksum>>8; checksum2[3] = checksum>>0; return file; } ttf_table_t* ttf_eot_head(ttf_t*ttf) { ttf_table_t*file = ttf_table_new(0); writeU32(file, 0); //file size (filled in later) writeU32(file, 0); //fontdatasize (filled in later) writeU32(file, 0x01000200); writeU32(file, 0); //flags writeU8(file, ttf->os2->panose_FamilyType); writeU8(file, ttf->os2->panose_SerifStyle); writeU8(file, ttf->os2->panose_Weight); writeU8(file, ttf->os2->panose_Proportion); writeU8(file, ttf->os2->panose_Contrast); writeU8(file, ttf->os2->panose_StrokeVariation); writeU8(file, ttf->os2->panose_ArmStyle); writeU8(file, ttf->os2->panose_Letterform); writeU8(file, ttf->os2->panose_Midline); writeU8(file, ttf->os2->panose_XHeight); writeU8(file, 1); //charset (default) writeU8(file, ttf->os2->fsSelection&1); //italic writeU32_LE(file, ttf->os2->usWeightClass); writeU16(file, 0); //fstype writeU16(file, 0x4c50); //magic writeU32_LE(file, ttf->os2->ulCharRange[0]); writeU32_LE(file, ttf->os2->ulCharRange[1]); writeU32_LE(file, ttf->os2->ulCharRange[2]); writeU32_LE(file, ttf->os2->ulCharRange[3]); writeU32_LE(file, ttf->os2->ulCodePageRange1); writeU32_LE(file, ttf->os2->ulCodePageRange2); writeU32(file, 0); //checksum adjust (filled in later) writeU32(file, 0); //reserved[0] writeU32(file, 0); //reserved[1] writeU32(file, 0); //reserved[2] writeU32(file, 0); //reserved[3] writeU16(file, 0); //padding(1) int i,t,len; char* strings[] = {ttf->family_name, ttf->subfamily_name, ttf->version_string, ttf->full_name}; int nr = sizeof(strings)/sizeof(strings[0]); for(i=0;idata; U32 full_len = eot->len + t->len; len_data[0] = full_len>>0; len_data[1] = full_len>>8; len_data[2] = full_len>>16; len_data[3] = full_len>>24; U8*len_data2 = eot->data+4; len_data2[0] = t->len>>0; len_data2[1] = t->len>>8; len_data2[2] = t->len>>16; len_data2[3] = t->len>>24; U8*checksum_data = eot->data + 60; checksum_data[0] = checksum_adjust>>0; checksum_data[1] = checksum_adjust>>8; checksum_data[2] = checksum_adjust>>16; checksum_data[3] = checksum_adjust>>24; FILE*fi = fopen(filename, "wb"); if(!fi) { perror(filename); return; } fwrite(eot->data, eot->len, 1, fi); fwrite(t->data, t->len, 1, fi); fclose(fi); ttf_table_delete(0, t); ttf_table_delete(0, eot); } void ttf_save(ttf_t*ttf, const char*filename) { ttf_table_t* t = ttf_write(ttf, 0); FILE*fi = fopen(filename, "wb"); if(!fi) { perror(filename); return; } fwrite(t->data, t->len, 1, fi); fclose(fi); ttf_table_delete(0, t); } void ttf_dump(ttf_t*ttf) { msg(" Truetype file version %08x%s", ttf->version, ttf->version == OPENTYPE?" (opentype)":""); ttf_table_t*table = ttf->tables; while(table) { U32 tag = table->id; msg(" Tag %02x%02x%02x%02x [%c%c%c%c] (length: %d)", (tag>>24)&0xff, (tag>>16)&0xff, (tag>>8)&0xff, (tag)&0xff, (tag>>24)&0xff, (tag>>16)&0xff, (tag>>8)&0xff, (tag)&0xff, table->len); table = table->next; } //ttf_table_dump(ttf_find_table(ttf, TAG_MAXP)); head_dump(ttf); hea_dump(ttf); os2_dump(ttf); maxp_dump(ttf); glyf_dump(ttf); } void ttf_destroy_tables(ttf_t*ttf) { ttf_table_t*table = ttf->tables; while(table) { ttf_table_t*next = table->next; free(table->data); free(table); table = next; } ttf->tables = 0; } void ttf_reduce(ttf_t*ttf) { ttf_destroy_tables(ttf); } void ttf_destroy(ttf_t*ttf) { ttf_destroy_tables(ttf); maxp_delete(ttf); os2_delete(ttf); head_delete(ttf); hea_delete(ttf); glyf_delete(ttf); post_delete(ttf); cvt_delete(ttf); name_delete(ttf); free(ttf); } ttf_t* ttf_open(const char*filename) { memfile_t*m = memfile_open(filename); ttf_t*ttf = ttf_load(m->data, m->len); memfile_close(m); return ttf; } #ifdef MAIN int main(int argn, const char*argv[]) { setConsoleLogging(7); const char*filename = "comic.ttf"; if(argn>1) filename = argv[1]; //msg(" Loading %s", filename); memfile_t*m = memfile_open(filename); ttf_t*ttf = ttf_load(m->data, m->len); if(!ttf) { msg(" Couldn't load %s", filename); return 1; } ttf_reduce(ttf); ttf_create_truetype_tables(ttf); if(!ttf) return 1; memfile_close(m); //ttf_dump(ttf); //printf("os2 version: %04x (%d), maxp size: %d\n", // ttf->os2->version, ttf->os2->size, ttf->maxp->size); ttf_save_eot(ttf, "testfont.eot"); ttf_save(ttf, "testfont.ttf"); ttf_destroy(ttf); return 0; } #endif swftools_0.9.2+git20130725.orig/lib/gfxtools.c0000644000175000017500000010260012216332640020101 0ustar gawaingawain/* gfxtools.c Various utility functions for dealing with gfxdevices. Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #include #include #include #include #include #include #include #include "gfxtools.h" #include "gfxfont.h" #include "jpeg.h" #include "q.h" typedef struct _linedraw_internal { gfxline_t*start; gfxline_t*next; gfxcoord_t x0,y0; char has_moveto; } linedraw_internal_t; static void linedraw_moveTo(gfxdrawer_t*d, gfxcoord_t x, gfxcoord_t y) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); l->type = gfx_moveTo; i->has_moveto = 1; i->x0 = x; i->y0 = y; l->sx = l->sy = 0; d->x = l->x = x; d->y = l->y = y; l->next = 0; if(i->next) i->next->next = l; i->next = l; if(!i->start) i->start = l; } static void linedraw_lineTo(gfxdrawer_t*d, gfxcoord_t x, gfxcoord_t y) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; if(!i->has_moveto) { /* starts with a line, not with a moveto. As this is the first entry in the list, this is probably *meant* to be a moveto */ linedraw_moveTo(d, x, y); return; } gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); l->type = gfx_lineTo; d->x = l->x = x; d->y = l->y = y; l->next = 0; if(i->next) i->next->next = l; i->next = l; if(!i->start) i->start = l; } static void linedraw_splineTo(gfxdrawer_t*d, gfxcoord_t sx, gfxcoord_t sy, gfxcoord_t x, gfxcoord_t y) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; if(!i->has_moveto) { linedraw_moveTo(d, x, y); return; } gfxline_t*l = (gfxline_t*)rfx_alloc(sizeof(gfxline_t)); l->type = gfx_splineTo; d->x = l->x = x; d->y = l->y = y; l->sx = sx; l->sy = sy; l->next = 0; if(i->next) i->next->next = l; i->next = l; if(!i->start) i->start = l; } static void linedraw_close(gfxdrawer_t*d) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; if(!i->has_moveto) return; linedraw_lineTo(d, i->x0, i->y0); i->has_moveto = 0; i->x0 = 0; i->y0 = 0; } static void* linedraw_result(gfxdrawer_t*d) { linedraw_internal_t*i = (linedraw_internal_t*)d->internal; void*result = (void*)i->start; rfx_free(i); memset(d, 0, sizeof(gfxdrawer_t)); return result; } void gfxdrawer_target_gfxline(gfxdrawer_t*d) { linedraw_internal_t*i = (linedraw_internal_t*)rfx_calloc(sizeof(linedraw_internal_t)); d->x = 0x7fffffff; d->y = 0x7fffffff; d->internal = i; d->moveTo = linedraw_moveTo; d->lineTo = linedraw_lineTo; d->splineTo = linedraw_splineTo; d->close = linedraw_close; d->result = linedraw_result; } typedef struct _qspline_abc { double ax,bx,cx; double ay,by,cy; } qspline_abc_t; typedef struct qspline_t { gfxpoint_t start; gfxpoint_t control; gfxpoint_t end; } qspline_t; typedef struct cspline_t { gfxpoint_t start; gfxpoint_t control1; gfxpoint_t control2; gfxpoint_t end; } cspline_t; static void mkspline(qspline_abc_t*s, double x, double y, gfxline_t*l) { /* Form 1: x = t*t*l->x + 2*t*(1-t)*l->sx + (1-t)*(1-t)*x; Form 2: x = a*t*t + b*t + c */ s->cx = x; s->bx = 2*l->sx - 2*x; s->ax = l->x - 2*l->sx + x; s->cy = y; s->by = 2*l->sy - 2*y; s->ay = l->y - 2*l->sy + y; } static void spline_get_controlpoint(qspline_abc_t*q, double t1, double t2, double*dx, double*dy) { double dt = t2-t1; double nax = q->ax*dt*dt; double nay = q->ay*dt*dt; double nbx = 2*q->ax*dt*t1 + q->bx*dt; double nby = 2*q->ay*dt*t1 + q->by*dt; double ncx = q->ax*t1*t1 + q->bx*t1 + q->cx; double ncy = q->ay*t1*t1 + q->by*t1 + q->cy; *dx = ncx + nbx/2; *dy = ncy + nby/2; } static double get_spline_len(qspline_abc_t*s) { int parts = (int)(sqrt(fabs(s->ax) + fabs(s->ay))*3); int i; double len = 0; double r; double r2; if(parts < 3) parts = 3; r = 1.0/parts; r2 = 1.0/(parts*parts); for(i=0;iax*(2*i+1)*r2 + s->bx*r; double dy = s->ay*(2*i+1)*r2 + s->by*r; len += sqrt(dx*dx+dy*dy); } /*printf("Spline from %f,%f to %f,%f has len %f (%f)\n", s->cx, s->cy, s->cx + s->bx + s->ax, s->cy + s->by + s->ay, len, sqrt((s->bx + s->ax)*(s->bx + s->ax) + (s->by + s->ay)*(s->by + s->ay)) ); assert(len+0.5 >= sqrt((s->bx + s->ax)*(s->bx + s->ax) + (s->by + s->ay)*(s->by + s->ay))); */ return len; } void gfxtool_draw_dashed_line(gfxdrawer_t*d, gfxline_t*line, float*r, float phase) { double x=0,y=0; double linepos = 0,nextpos = 0; char on = 0; int apos=0; if(line && line->type != gfx_moveTo) { fprintf(stderr, "gfxtool: outline doesn't start with a moveTo"); return; } int i; double dashlen=0; for(i=0;r[i]>=0;i++) { dashlen+=r[i]; } if(!r || (r[0]<=0 && r[0]>-0.01) || dashlen<0.001) { // no dashing. just draw the thing while(line) { if(line->type == gfx_moveTo) { d->moveTo(d, line->x, line->y); } else if(line->type == gfx_lineTo) { d->lineTo(d, line->x, line->y); } else if(line->type == gfx_splineTo) { d->splineTo(d, line->sx, line->sy, line->x, line->y); } line = line->next; } return; } if(phase < 0) { phase = -phase; } if(r[0]<0 || phase<0) { fprintf(stderr, "gfxtool: invalid (negative) dashes: %f, phase=%f\n", r[0], phase); return; } for(;line;line=line->next) { if(line->type == gfx_moveTo) { d->moveTo(d, line->x, line->y); on = 1; nextpos = r[0]; apos = 0; linepos = 0; x = line->x; y = line->y; while(linepos < phase) { //printf("[+] linepos: %f, phase: %f, on:%d, apos:%d nextpos:%f\n", linepos, phase, on, apos, nextpos); linepos += r[apos]; if(linepos < phase) { on ^= 1; if(r[++apos]<0) apos = 0; nextpos += r[apos]; } } linepos = phase; //printf("[k] linepos: %f, phase: %f, on:%d, apos:%d nextpos:%f \n", linepos, phase, on, apos, nextpos); } else if(line->type == gfx_lineTo) { double dx = line->x - x; double dy = line->y - y; double len = sqrt(dx*dx+dy*dy); double vx; double vy; double lineend = linepos+len; if(len==0) continue; vx = dx/len; vy = dy/len; assert(nextpos>=linepos); //printf("(line) on:%d apos: %d nextpos: %f, line pos: %f, line end: %f\n", on, apos, nextpos, linepos, linepos+len); while(nextposlineTo(d, nx,ny);/*printf("lineTo %f\n", nextpos);*/} else {d->moveTo(d, nx,ny);/*printf("moveTo %f\n", nextpos);*/} on^=1; if(r[++apos]<0) apos = 0; nextpos+=r[apos]; } linepos = lineend; if(on) { //printf("lineTo %f\n", 1.0); d->lineTo(d, line->x,line->y); } x = line->x; y = line->y; } else if(line->type == gfx_splineTo) { qspline_abc_t q; double len, lineend,lastt; mkspline(&q, x, y, line); len = get_spline_len(&q); //printf("%f %f -> %f %f, len: %f\n", x, y, line->x, line->y, len); if(len==0) continue; lineend = linepos+len; lastt = 0; if(nextpos=linepos); //printf("(spline) on:%d apos: %d nextpos: %f, line pos: %f, line end: %f\n", on, apos, nextpos, linepos, linepos+len); while(nextpossplineTo(d, sx, sy, nx,ny); //printf("splineTo %f\n", nextpos); } else { d->moveTo(d, nx,ny); //printf("moveTo %f\n", nextpos); } lastt = t; on^=1; if(r[++apos]<0) apos = 0; nextpos+=r[apos]; } linepos = lineend; if(on) { double sx,sy; spline_get_controlpoint(&q, lastt, 1, &sx, &sy); d->splineTo(d, sx, sy, line->x,line->y); //printf("splineTo %f\n", 1.0); } x = line->x; y = line->y; } } } static char* getToken(const char**p) { const char*start; char*result; while(**p && strchr(" ,()\t\n\r", **p)) { (*p)++; } start = *p; if (strchr("LMlm", **p) && (isdigit(*(*p+1))||strchr("+-", *(*p+1)))) { (*p)++; } else while(**p && !strchr(" ,()\t\n\r", **p)) { (*p)++; } result = (char*)malloc((*p)-start+1); memcpy(result,start,(*p)-start+1); result[(*p)-start] = 0; return result; } static float getFloat(const char** p) { char* token = getToken(p); float result = atof(token); free(token); return result; } gfxline_t*gfxline_fromstring(const char*string) { gfxdrawer_t d; gfxdrawer_target_gfxline(&d); const char*p = string; while(*p) { char*token = getToken(&p); if(!token) break; if (!*token) { free(token); break; } if(!strcmp(token, "M")) { double x = getFloat(&p); double y = getFloat(&p); d.moveTo(&d, x, y); } else if(!strncmp(token, "L", 1)) { double x = getFloat(&p); double y = getFloat(&p); d.lineTo(&d, x, y); } else if(!strncmp(token, "C", 1)) { double x1 = getFloat(&p); double y1 = getFloat(&p); double x2 = getFloat(&p); double y2 = getFloat(&p); double x3 = getFloat(&p); double y3 = getFloat(&p); gfxdraw_cubicTo(&d, x1,y1, x2,y2, x3,y3, 0.9); } else if(!strncmp(token, "z", 1)) { //ignore } else fprintf(stderr, "gfxdraw: Warning: unknown primitive '%s'\n", token); free(token); } gfxline_t*line = d.result(&d); return line; } gfxline_t * gfxline_clone(gfxline_t*line) { gfxline_t*dest = 0; gfxline_t*pos = 0; while(line) { gfxline_t*n = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)); *n = *line; n->next = 0; if(!pos) { dest = pos = n; } else { pos->next = n; pos = n; } line = line->next; } return dest; } static char splineIsStraight(double x, double y, gfxline_t*l) { if(l->type == gfx_moveTo) return 0; if(l->type == gfx_lineTo) return 1; double dx = l->x-x; double dy = l->y-y; double sx = l->sx-x; double sy = l->sy-y; if(fabs(dx*sy - dy*sx) < 0.000001 && (dx*sx + dy*sy) >= 0) { return 1; } return 0; } void gfxline_optimize(gfxline_t*line) { gfxline_t*l = line; /* step 1: convert splines to lines, where possible */ double x=0,y=0; while(l) { if(l->type == gfx_splineTo && splineIsStraight(x,y,l)) { l->type = gfx_lineTo; } x = l->x; y = l->y; l = l->next; } /* step 2: combine adjacent lines and splines, where possible */ l = line; while(l && l->next) { gfxline_t*next = l->next; char combine = 0; double sx=0,sy=0; if(l->type == gfx_lineTo && next->type == gfx_lineTo) { double dx = l->x-x; double dy = l->y-y; double nx = next->x-l->x; double ny = next->y-l->y; if(fabs(dx*ny - dy*nx) < 0.000001 && (dx*nx + dy*ny) >= 0) { combine = 1; } } else if(l->type == gfx_splineTo && next->type == gfx_splineTo) { /* TODO */ } if(combine) { l->next = next->next; next->next = 0; l->x = next->x; l->y = next->y; l->sx = sx; l->sy = sy; rfx_free(next); } else { x = l->x; y = l->y; l = l->next; } } } gfxline_t* gfxtool_dash_line(gfxline_t*line, float*dashes, float phase) { gfxdrawer_t d; gfxline_t*result; gfxdrawer_target_gfxline(&d); gfxtool_draw_dashed_line(&d, line, dashes, phase); result= (gfxline_t*)d.result(&d); return result; } void gfxline_show(gfxline_t*l, FILE*fi) { while(l) { if(l->type == gfx_moveTo) { fprintf(fi, "moveTo %.2f,%.2f\n", l->x, l->y); } if(l->type == gfx_lineTo) { fprintf(fi, "lineTo %.2f,%.2f\n", l->x, l->y); } if(l->type == gfx_splineTo) { fprintf(fi, "splineTo %.2f,%.2f %.2f,%.2f\n", l->sx, l->sy, l->x, l->y); } l = l->next; } } void gfxline_free(gfxline_t*l) { if(l && (l+1) == l->next) { /* flattened */ rfx_free(l); } else { gfxline_t*next; while(l) { next = l->next; l->next = 0; rfx_free(l); l = next; } } } static inline gfxpoint_t cspline_getpoint(const struct cspline_t*s, double t) { gfxpoint_t p; double tt = t*t; double ttt = tt*t; double mt = (1-t); double mtmt = mt*(1-t); double mtmtmt = mtmt*(1-t); p.x= s->end.x*ttt + 3*s->control2.x*tt*mt + 3*s->control1.x*t*mtmt + s->start.x*mtmtmt; p.y= s->end.y*ttt + 3*s->control2.y*tt*mt + 3*s->control1.y*t*mtmt + s->start.y*mtmtmt; return p; } static gfxpoint_t qspline_getpoint(const qspline_t*s, double t) { gfxpoint_t p; p.x= s->end.x*t*t + 2*s->control.x*t*(1-t) + s->start.x*(1-t)*(1-t); p.y= s->end.y*t*t + 2*s->control.y*t*(1-t) + s->start.y*(1-t)*(1-t); return p; } static int approximate3(const cspline_t*s, qspline_t*q, int size, double quality2) { unsigned int gran = 0; unsigned int istep = 0x80000000; unsigned int istart = 0; int num = 0; int level = 0; while(istart<0x80000000) { unsigned int iend = istart + istep; double start = istart/(double)0x80000000; double end = iend/(double)0x80000000; qspline_t test; double pos,qpos; char left = 0,recurse=0; int t; int probes = 15; double dx,dy; /* create simple approximation: a qspline_t which run's through the qspline_t point at 0.5 */ test.start = cspline_getpoint(s, start); test.control = cspline_getpoint(s, (start+end)/2); test.end = cspline_getpoint(s, end); /* fix the control point: move it so that the new spline does runs through it */ test.control.x = -(test.end.x + test.start.x)/2 + 2*(test.control.x); test.control.y = -(test.end.y + test.start.y)/2 + 2*(test.control.y); /* depending on where we are in the spline, we either try to match the left or right tangent */ if(start<0.5) left=1; /* get derivative */ pos = left?start:end; qpos = pos*pos; test.control.x = s->end.x*(3*qpos) + 3*s->control2.x*(2*pos-3*qpos) + 3*s->control1.x*(1-4*pos+3*qpos) + s->start.x*(-3+6*pos-3*qpos); test.control.y = s->end.y*(3*qpos) + 3*s->control2.y*(2*pos-3*qpos) + 3*s->control1.y*(1-4*pos+3*qpos) + s->start.y*(-3+6*pos-3*qpos); if(left) { test.control.x *= (end-start)/2; test.control.y *= (end-start)/2; test.control.x += test.start.x; test.control.y += test.start.y; } else { test.control.x *= -(end-start)/2; test.control.y *= -(end-start)/2; test.control.x += test.end.x; test.control.y += test.end.y; } //#define PROBES #ifdef PROBES /* measure the spline's accurancy, by taking a number of probes */ for(t=0;tquality2) { recurse=1;break; } qr2 = qspline_getpoint(&test, (1-pos)); cr2 = cspline_getpoint(s, start+(1-pos)*(end-start)); dx = qr2.x - cr2.x; dy = qr2.y - cr2.y; dist2 = dx*dx+dy*dy; if(dist2>quality2) { recurse=1;break; } } #else // quadratic error: *much* faster! /* convert control point representation to d*x^3 + c*x^2 + b*x + a */ dx= s->end.x - s->control2.x*3 + s->control1.x*3 - s->start.x; dy= s->end.y - s->control2.y*3 + s->control1.y*3 - s->start.y; /* we need to do this for the subspline between [start,end], not [0,1] as a transformation of t->a*t+b does nothing to highest coefficient of the spline except multiply it with a^3, we just need to modify d here. */ {double m = end-start; dx*=m*m*m; dy*=m*m*m; } /* use the integral over (f(x)-g(x))^2 between 0 and 1 to measure the approximation quality. (it boils down to const*d^2) */ recurse = (dx*dx + dy*dy > quality2); #endif if(recurse && istep>1 && size-level > num) { istep >>= 1; level++; } else { *q++ = test; num++; istart += istep; while(!(istart & istep)) { level--; istep <<= 1; } } } return num; } void gfxdraw_conicTo(gfxdrawer_t*draw, double cx, double cy, double tox, double toy, double quality) { double c1x = (draw->x + 2 * cx) / 3; double c1y = (draw->y + 2 * cy) / 3; double c2x = (2 * cx + tox) / 3; double c2y = (2 * cy + toy) / 3; gfxdraw_cubicTo(draw, c1x, c1y, c2x, c2y, tox, toy, quality); } void gfxdraw_cubicTo(gfxdrawer_t*draw, double c1x, double c1y, double c2x, double c2y, double x, double y, double quality) { qspline_t q[128]; cspline_t c; double maxerror = quality>0 ? quality : 1.0; int t,num; c.start.x = draw->x; c.start.y = draw->y; c.control1.x = c1x; c.control1.y = c1y; c.control2.x = c2x; c.control2.y = c2y; c.end.x = x; c.end.y = y; num = approximate3(&c, q, 128, maxerror); for(t=0;tsplineTo(draw, mid.x, mid.y, to.x, to.y); } } gfxbbox_t gfxbbox_expand_to_point(gfxbbox_t box, gfxcoord_t x, gfxcoord_t y) { if(box.xmin==0 && box.ymin==0 && box.xmax==0 && box.ymax==0) { box.xmin = x; box.ymin = y; box.xmax = x; box.ymax = y; if(x==0 && y==0) box.xmax = 0.0000001; return box; } if(x < box.xmin) box.xmin = x; if(x > box.xmax) box.xmax = x; if(y < box.ymin) box.ymin = y; if(y > box.ymax) box.ymax = y; return box; } gfxbbox_t gfxbbox_expand_to_bbox(gfxbbox_t box, gfxbbox_t box2) { if(box2.xmin==0 && box2.ymin==0 && box2.xmax==0 && box2.ymax==0) { return box; } box = gfxbbox_expand_to_point(box, box2.xmin, box2.ymin); box = gfxbbox_expand_to_point(box, box2.xmax, box2.ymax); return box; } void gfxbbox_intersect(gfxbbox_t*box1, gfxbbox_t*box2) { if(box2->xmin > box1->xmin) box1->xmin = box2->xmin; if(box2->ymin > box1->ymin) box1->ymin = box2->ymin; if(box2->xmax < box1->xmax) box1->xmax = box2->xmax; if(box2->ymax < box1->ymax) box1->ymax = box2->ymax; if(box1->xmin > box1->xmax) box1->xmax = box1->xmin; if(box1->ymin > box1->ymax) box1->ymax = box1->ymin; } gfxbbox_t gfxline_getbbox(gfxline_t*line) { gfxcoord_t x=0,y=0; gfxbbox_t bbox = {0,0,0,0}; char last = 0; while(line) { if(line->type == gfx_moveTo) { last = 1; } else if(line->type == gfx_lineTo) { if(last) bbox = gfxbbox_expand_to_point(bbox, x, y); bbox = gfxbbox_expand_to_point(bbox, line->x, line->y); last = 0; } else if(line->type == gfx_splineTo) { if(last) bbox = gfxbbox_expand_to_point(bbox, x, y); bbox = gfxbbox_expand_to_point(bbox, line->sx, line->sy); bbox = gfxbbox_expand_to_point(bbox, line->x, line->y); last = 0; } x = line->x; y = line->y; line = line->next; } return bbox; } gfxline_t* gfxline_append(gfxline_t*line1, gfxline_t*line2) { gfxline_t*l = line1;; if(!l) return line2; while(l->next) { l = l->next; } l->next = line2; return line1; } void gfxline_transform(gfxline_t*line, gfxmatrix_t*matrix) { while(line) { double x = matrix->m00*line->x + matrix->m10*line->y + matrix->tx; double y = matrix->m01*line->x + matrix->m11*line->y + matrix->ty; line->x = x; line->y = y; if(line->type == gfx_splineTo) { double sx = matrix->m00*line->sx + matrix->m10*line->sy + matrix->tx; double sy = matrix->m01*line->sx + matrix->m11*line->sy + matrix->ty; line->sx = sx; line->sy = sy; } line = line->next; } } void gfxmatrix_dump(gfxmatrix_t*m, FILE*fi, char*prefix) { fprintf(fi, "%s%f %f | %f\n", prefix, m->m00, m->m10, m->tx); fprintf(fi, "%s%f %f | %f\n", prefix, m->m01, m->m11, m->ty); } void gfxmatrix_transform(gfxmatrix_t*m, double* v, double*dest) { dest[0] = m->m00*v[0] + m->m10*v[1] + m->tx; dest[1] = m->m01*v[0] + m->m11*v[1] + m->ty; } void gfxmatrix_invert(gfxmatrix_t*m, gfxmatrix_t*dest) { double det = m->m00 * m->m11 - m->m10 * m->m01; if(!det) { memset(dest, 0, sizeof(gfxmatrix_t)); return; } det = 1/det; dest->m00 = m->m11 * det; dest->m01 = -m->m01 * det; dest->m10 = -m->m10 * det; dest->m11 = m->m00 * det; dest->tx = -(dest->m00 * m->tx + dest->m10 * m->ty); dest->ty = -(dest->m01 * m->tx + dest->m11 * m->ty); } void gfxmatrix_unit(gfxmatrix_t*m) { memset(m, 0, sizeof(gfxmatrix_t)); m->m00 = 1.0; m->m11 = 1.0; } void gfxmatrix_multiply(gfxmatrix_t*m1, gfxmatrix_t*m2, gfxmatrix_t*dest) { dest->m00 = m1->m00*m2->m00 + m1->m10*m2->m01; dest->m01 = m1->m01*m2->m00 + m1->m11*m2->m01; dest->m10 = m1->m00*m2->m10 + m1->m10*m2->m11; dest->m11 = m1->m01*m2->m10 + m1->m11*m2->m11; dest->tx = m1->m00*m2->tx + m1->m10*m2->ty + m1->tx; dest->ty = m1->m01*m2->tx + m1->m11*m2->ty + m1->ty; } gfxfontlist_t* gfxfontlist_create() { /* Initial list ist empty */ return 0; } gfxfont_t*gfxfontlist_findfont(gfxfontlist_t*list, char*id) { gfxfontlist_t*l = list; while(l) { if(!strcmp((char*)l->font->id, id)) { return l->font; } l = l->next; } return 0; } char gfxfontlist_hasfont(gfxfontlist_t*list, gfxfont_t*font) { gfxfontlist_t*l = list; while(l) { if(!strcmp((char*)l->font->id, font->id)) { return 1; } l = l->next; } return 0; } void*gfxfontlist_getuserdata(gfxfontlist_t*list, const char*id) { gfxfontlist_t*l = list; while(l) { if(!strcmp((char*)l->font->id, id)) { return l->user; } l = l->next; } return 0; } gfxfontlist_t*gfxfontlist_addfont2(gfxfontlist_t*list, gfxfont_t*font, void*user) { gfxfontlist_t*last=0,*l = list; while(l) { last = l; if(l->font == font) { return list; // we already know this font } l = l->next; } if(!font) { fprintf(stderr, "Tried to add zero font\n"); } l = (gfxfontlist_t*)rfx_calloc(sizeof(gfxfontlist_t)); l->font = font; l->user = user; l->next = 0; if(last) { last->next = l; return list; } else { return l; } } gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font) { return gfxfontlist_addfont2(list, font, 0); } void gfxfontlist_free(gfxfontlist_t*list, char deletefonts) { gfxfontlist_t*l = list; while(l) { gfxfontlist_t*next = l->next; if(deletefonts && l->font) { gfxfont_free(l->font);l->font=0; } l->next = 0; free(l); l = next; } } gfxline_t*gfxline_makerectangle(double x1,double y1,double x2, double y2) { gfxline_t* line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)*5); line[0].x = x1;line[0].y = y1;line[0].type = gfx_moveTo;line[0].next = &line[1]; line[1].x = x2;line[1].y = y1;line[1].type = gfx_lineTo;line[1].next = &line[2]; line[2].x = x2;line[2].y = y2;line[2].type = gfx_lineTo;line[2].next = &line[3]; line[3].x = x1;line[3].y = y2;line[3].type = gfx_lineTo;line[3].next = &line[4]; line[4].x = x1;line[4].y = y1;line[4].type = gfx_lineTo; return line; } gfxline_t*gfxline_makecircle(double x,double y,double rx, double ry) { double C1 = 0.2930; double C2 = 0.4140; double begin = 0.7070; gfxline_t** line = (gfxline_t**)rfx_calloc(sizeof(gfxline_t*)*9); int t; for(t=0;t<9;t++) { line[t] = rfx_calloc(sizeof(gfxline_t)); } line[0]->type = gfx_moveTo; line[0]->x = x+begin*rx; line[0]->y = y+begin*ry; for(t=1;t<9;t++) { line[t-1]->next = line[t]; line[t]->type = gfx_splineTo; } line[8]->next = 0; #define R(nr,cx,cy,mx,my) \ line[nr]->sx = line[nr-1]->x + (cx); \ line[nr]->sy = line[nr-1]->y + (cy); \ line[nr]->x = line[nr]->sx + (mx); \ line[nr]->y = line[nr]->sy + (my); R(1, -C1*rx, C1*ry, -C2*rx, 0); R(2, -C2*rx, 0, -C1*rx, -C1*ry); R(3, -C1*rx, -C1*ry, 0, -C2*ry); R(4, 0, -C2*ry, C1*rx, -C1*ry); R(5, C1*rx, -C1*ry, C2*rx, 0); R(6, C2*rx, 0, C1*rx, C1*ry); R(7, C1*rx, C1*ry, 0, C2*ry); R(8, 0, C2*ry, -C1*rx, C1*ry); gfxline_t*l = line[0]; free(line); return l; } gfxbbox_t* gfxline_isrectangle(gfxline_t*_l) { if(!_l) return 0; gfxline_t*l = gfxline_clone(_l); gfxline_optimize(l); double x1=0,x2=0,y1=0,y2=0; int xc=0,yc=0; char corners=0; char prev=0; char fail=0; for(;l; l=l->next) { double x = l->x; double y = l->y; char top=0,left=0; if(xc==2 && x!=x1 && x!=x2) {fail=1;break;} else if(xc>=1 && x==x1) {left=0;} else if(xc==2 && x==x2) {left=1;} else if(xc==1 && x!=x1) {x2 = x; xc=2; left=1;} else if(xc==0) {x1 = x; xc=1;left=0;} else {fprintf(stderr, "Internal error in rectangle detection\n");} if(yc==2 && y!=y1 && y!=y2) {fail=1;break;} else if(yc>=1 && y==y1) {top=0;} else if(yc==2 && y==y2) {top=1;} else if(yc==1 && y!=y1) {y2 = y; yc=2; top=1;} else if(yc==0) {y1 = y; yc=1;top=0;} else {fprintf(stderr, "Internal error in rectangle detection\n");} char pos=top<<1|left; if((pos^prev)==3) { /* diagonal lines not allowed */ fail=1;break; } prev = pos; /* no corner except the first one may be touched twice */ if(pos && (corners & 1<xmin = x1; r->ymin = y1; r->xmax = x2; r->ymax = y2; return r; } void gfximage_transform(gfximage_t*img, gfxcxform_t*cxform) { int t; int size = img->width*img->height; int rr,rg,rb,ra, tr; int gr,gg,gb,ga, tg; int br,bg,bb,ba, tb; int ar,ag,ab,aa, ta; rr = (int)(cxform->rr*256);gr = (int)(cxform->gr*256); rg = (int)(cxform->rg*256);gg = (int)(cxform->gg*256); rb = (int)(cxform->rb*256);gb = (int)(cxform->gb*256); ra = (int)(cxform->ra*256);ga = (int)(cxform->ga*256); br = (int)(cxform->br*256);ar = (int)(cxform->ar*256);tr = (int)(cxform->tr*256); bg = (int)(cxform->bg*256);ag = (int)(cxform->ag*256);tg = (int)(cxform->tg*256); bb = (int)(cxform->bb*256);ab = (int)(cxform->ab*256);tb = (int)(cxform->tb*256); ba = (int)(cxform->ba*256);aa = (int)(cxform->aa*256);ta = (int)(cxform->ta*256); for(t=0;tdata[t]; unsigned char r = (pixel->r * rr + pixel->g * rg + pixel->b * rb + pixel->a * ra + tr) / 256; unsigned char g = (pixel->r * gr + pixel->g * gg + pixel->b * gb + pixel->a * ga + tg) / 256; unsigned char b = (pixel->r * br + pixel->g * bg + pixel->b * bb + pixel->a * ba + tb) / 256; unsigned char a = (pixel->r * ar + pixel->g * ag + pixel->b * ab + pixel->a * aa + ta) / 256; pixel->r = r; pixel->g = g; pixel->b = b; pixel->a = a; } } void gfxline_dump(gfxline_t*line, FILE*fi, char*prefix) { while(line) { if(line->type == gfx_moveTo) { fprintf(fi, "%smoveTo %.2f %.2f\n", prefix, line->x, line->y); } else if(line->type == gfx_lineTo) { fprintf(fi, "%slineTo %.2f %.2f\n", prefix, line->x, line->y); } else if(line->type == gfx_splineTo) { fprintf(fi, "%ssplineTo (%.2f %.2f) %.2f %.2f\n", prefix, line->sx, line->sy, line->x, line->y); } line = line->next; } } static char gfxpoint_equals(void*c1, void*c2) { return !memcmp(c1, c2, sizeof(gfxpoint_t)); } static unsigned int gfxpoint_hash(void*c) { return string_hash3(c, sizeof(gfxpoint_t)); } static void* gfxpoint_clone(void*c) { void*n = malloc(sizeof(gfxpoint_t)); memcpy(n, c, sizeof(gfxpoint_t)); return n; } static void gfxpoint_destroy(void*c) { free(c); } static type_t gfxpoint_type = { hash: (hash_func)gfxpoint_hash, equals: (equals_func)gfxpoint_equals, dup: (dup_func)gfxpoint_clone, free: (free_func)gfxpoint_destroy, }; /* makes sure that a gfxline is drawn in a single stroke. E.g. moveto 0,0 lineto 100,0 lineto 100,100 moveto 0,0 lineto 0,100 lineto 100,100 is converted to moveto 0,0, lineto 0,100 lineto 100,100 lineto 100,0 lineto 0,0 */ gfxline_t* gfxline_restitch(gfxline_t*line) { dict_t*ff = dict_new2(&gfxpoint_type); dict_t*rev = dict_new2(&gfxpoint_type); gfxline_t*prev=0; while(line) { gfxline_t*next = line->next; if(line->type == gfx_moveTo && (line->next && line->next->type != gfx_moveTo)) { gfxpoint_t xy = {line->x, line->y}; dict_put(ff, &xy, line); prev = line; } else if(!line->next || line->next->type == gfx_moveTo) { if(prev) { gfxpoint_t xy = {line->x, line->y}; dict_put(rev, &xy, prev); line->next = 0; prev=0; } } line = next; } gfxpoint_t pos = {0,0}; gfxline_t*result = 0; gfxline_t*last = 0; char first = 1; while(dict_count(ff)) { char reverse = 0, stitch = 1; gfxline_t*l = dict_lookup(ff, &pos); if(l) { char d = dict_del2(ff,&pos,l);assert(d); } else { l = dict_lookup(rev, &pos); if(l) { reverse = 1; char d = dict_del2(rev,&pos,l);assert(d); } } if(!l) { /* try to find *any* entry. this is costly, but doesn't happen too often */ stitch = 0; DICT_ITERATE_DATA(ff, gfxline_t*, l2) { l = l2; break; } assert(l); gfxpoint_t xy = {l->x,l->y}; char d = dict_del2(ff,&xy,l);assert(d); } gfxline_t*end = l; if(!reverse) { while(end->next) end = end->next; pos.x = end->x; pos.y = end->y; char d = dict_del2(rev,&pos,l);assert(d); } else { l = gfxline_reverse(l); pos.x = end->x; pos.y = end->y; char d = dict_del2(ff,&pos,end);assert(d); } assert(l->type == gfx_moveTo); if(stitch && !first) { /* cut away the moveTo */ gfxline_t*next = l->next; free(l); l = next; } if(!last) { result = l; last = end; } else { last->next = l; last = end; } first = 0; } dict_destroy(ff); dict_destroy(rev); return result; } gfxline_t* gfxline_reverse(gfxline_t*line) { gfxline_t*b = 0; while(line) { gfxline_t*next = line->next; if(next && next->type != gfx_moveTo) { line->type = next->type; line->sx = next->sx; line->sy = next->sy; } else { line->type = gfx_moveTo; } line->next = b; b = line; line = next; } return b; } void gfxline_normalize(gfxline_t*line, double sizex, double sizey) { gfxbbox_t b = gfxline_getbbox(line); if(b.xmax == b.xmin || b.ymax == b.ymin) return; gfxmatrix_t m; double w = b.xmax - b.xmin; double h = b.ymax - b.ymin; double fx = sizex/w; double fy = sizey/h; double s = fmin(fx,fy); m.m00 = s; m.m11 = s; m.tx = -b.xmin * s; m.ty = -b.ymin * s; m.m01 = m.m10 = 0; gfxline_transform(line, &m); } void gfxgradient_destroy(gfxgradient_t*gradient) { while(gradient) { gfxgradient_t*next = gradient->next; free(gradient); gradient = next; } } gfxparams_t* gfxparams_new() { return (gfxparams_t*)rfx_calloc(sizeof(gfxparams_t)); } void gfxparams_store(gfxparams_t*params, const char*key, const char*value) { gfxparam_t*o = params->params; while(o) { if(!strcmp(key, o->key)) { /* overwrite old value */ free((void*)o->value); o->value = strdup(value); return; } o = o->next; } gfxparam_t*p = (gfxparam_t*)malloc(sizeof(gfxparam_t)); p->key = strdup(key); p->value = strdup(value); p->next = 0; if(params->last) { params->last->next = p; params->last = p; } else { params->params = p; params->last = p; } } void gfxparams_free(gfxparams_t*params) { gfxparam_t*p = params->params; while(p) { gfxparam_t*next = p->next; free((void*)p->key); if(p->value) free((void*)p->value); free(p); p = next; } free(params); } static void turnpoint(double x, double y, gfxmatrix_t* m, double *_x, double*_y) { *_x = m->m00*x + m->m10*y + m->tx; *_y = m->m01*x + m->m11*y + m->ty; } gfxbbox_t gfxbbox_transform(gfxbbox_t*bbox, gfxmatrix_t*m) { double x1, y1, x2, y2, x3, y3, x4, y4; turnpoint(bbox->xmin, bbox->xmin, m, &x1, &y1); turnpoint(bbox->xmax, bbox->ymin, m, &x2, &y2); turnpoint(bbox->xmin, bbox->ymax, m, &x3, &y3); turnpoint(bbox->xmax, bbox->ymax, m, &x4, &y4); gfxbbox_t new_bbox = {x1, y1, x1, y1}; new_bbox = gfxbbox_expand_to_point(new_bbox, x2, y2); new_bbox = gfxbbox_expand_to_point(new_bbox, x3, y3); new_bbox = gfxbbox_expand_to_point(new_bbox, x4, y4); return new_bbox; } swftools_0.9.2+git20130725.orig/lib/xml.c0000644000175000017500000002663512216332640017051 0ustar gawaingawain/* xml.c Lightweight and fast xml parser. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include #include "xml.h" /* group: 0=data 1=whitespace 2='"' 3='<' 4='>' 5='&' 6=';' 7='?' 8='/' 9='=' 10='!' 11=EOF */ static int group[256] = { // 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f // \t \n \r 13, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, // 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f // ! " # $ % & ' ( ) * + , - . / 1,10, 2, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 8, // 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f // 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 9, 4, 7, // 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f // @ A B C D E F G H I J K L M N O 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f // P Q R S T U V W X Y Z [ \ ] ^ _ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11, 0,12, 0, 0, // 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f // ` a b c d e f g h i j k l m n o 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f // p q r s t u v w x y z { | } ~ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const char*errors[]= { 0, #define E1 -0x41 /*E1*/"xml file must start with & ; ? / = ! [ ] - EOB*/ /* 0 */{ E1, 0,E1, 1,E1,E1,E1,E1,E1,E1,E3,E1,E1,-63}, // .< /* 1 */{ E1,E1,E1,E1,E1,E1,E1, 9,E1,E1,E3,E1,E1,-63}, // <.? /* 2 */{ -3, 2,E3,E2,E2,E2,E2,E2,12,E2,16,E2,E2,-63}, // <. /* 3 */{ E3,E3,E3,E3,-1,E3,E3,E3,E3,E1,E3,E3,E3,-63}, // < /.> /* 4 */{ E3,E3,E3,E3,-2,E3,E3,E3,E3,E1,E1,E3,E3,-63}, // < .> /* 5 */{ 5, 5, 5,-4, 5, 5, 5, 5, 5, 5, 5,E3,E3,-63}, // da.ta /* 6 */{ 6,-7,E3,E2,-6,E2,E2,E3,-9,E3,E3,E3,E3,-63}, // %d\n", buffer[pos], state, new_state[state][group[buffer[pos]]]);*/ /* inner loop */ do { state = new_state[old=state][group[(unsigned char)buffer[pos++]]]; } while(state>=0); switch(state) { tag_stack_t*st; xmlattribute_t*a; case -63: // end of buffer if(pos!=num+1) { // we could backtrace, but the spec says this is indeed illegal fprintf(stderr, "error: xml contains \\0 chars\n"); return 0; } // undo pos = num; state = old; break; case -1: // self closing tag attributes = attributes_reverse(attributes); out->start_tag(out, tagname.result, attributes); out->end_tag(out, tagname.result); stringstate_clear(&tagname); attributes_free(attributes);attributes = 0; stringstate_start(&data, buffer, pos); state = 5; break; case -6: // after stringstate_finish(&tagname, buffer, pos-1); // fallthrough case -2: // . st = malloc(sizeof(tag_stack_t)); st->name = tagname.result; st->prev = stack; stack = st; attributes = attributes_reverse(attributes); if(!first) out->start_tag(out, tagname.result, attributes); attributes_free(attributes);attributes = 0; stringstate_start(&data, buffer, pos); state = 5; break; case -3: case -13: // after <, start of tag name first=0; stringstate_start(&tagname, buffer, pos-1); state = state==-3?6:13; break; case -14: // after , end of tag name stringstate_finish(&tagname, buffer, pos-1); // fallthrough case -15: // after out->end_tag(out, tagname.result); stringstate_clear(&tagname); stringstate_start(&data, buffer, pos); state = 5; break; case -4: // end of data stringstate_finish(&data, buffer, pos-1); if(!first) out->data(out, data.result, data.len); stringstate_clear(&data); state = 2; break; case -7: // after <, at whitespace, end of tag name stringstate_finish(&tagname, buffer, pos-1); state = 7; break; case -8: // inside tag, start of attribute name stringstate_start(&attr_name, buffer, pos-1); state = 8; break; case -9: stringstate_finish(&tagname, buffer, pos-1); state = 3; break; case -12: // end of attribute name, at ws stringstate_finish(&attr_name, buffer, pos-1); state = 15; break; case -10: // end of attribute name, at = stringstate_finish(&attr_name, buffer, pos-1); state = 10; break; case -11: // start of attribute value stringstate_start(&attr_value, buffer, pos); state = 11; break; case -5: // end of attribute value stringstate_finish(&attr_value, buffer, pos-1); a = malloc(sizeof(xmlattribute_t)); a->name = attr_name.result;attr_name.result=0; a->value = attr_value.result;attr_value.result=0; a->next = attributes; attributes = a; state = 7; break; case -20: state = 5; break; default: if(-state&0x40) { fprintf(stderr, "%s (state %d, char '%c')\n", errors[(-state)&0x3f], old, buffer[pos-1]); return 0; } else { fprintf(stderr, "internal error: no action %d\n", state); } return 0; break; } } stringstate_save(&tagname, buffer, pos); stringstate_save(&attr_name, buffer, pos); stringstate_save(&attr_value, buffer, pos); stringstate_save(&data, buffer, pos); } /* note: any of these except data *has* to be empty for a well formed xml */ stringstate_clear(&tagname); stringstate_clear(&attr_name); stringstate_clear(&attr_value); stringstate_clear(&data); while(stack) { tag_stack_t*next = stack->prev; free((void*)stack->name); free(stack); stack = next; } return 1; } #ifdef MAIN void my_start_tag(xmlconsumer_t*c, char*name, xmlattribute_t*attr) { printf("<%s", name); for(;attr;attr=attr->next) { printf(" %s=\"%s\"", attr->name, attr->value); } printf(">"); } void my_data(xmlconsumer_t*c, char*data, int len) { printf("%s", data); } void my_end_tag(xmlconsumer_t*c, char*name) { printf("", name); } int main() { xmlconsumer_t c = {my_start_tag, my_data, my_end_tag, 0}; reader_t r; reader_init_filereader2(&r, "test.xml"); xml_parse(&r, &c); r.dealloc(&r); printf("\n"); } #endif swftools_0.9.2+git20130725.orig/lib/log.c0000644000175000017500000001235412216332640017023 0ustar gawaingawain/* log.c Logging facilities for displaying information on screen, as well as (optional) storing it to a file and transmitting it over the network. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include #include #ifdef WIN32 //#include "stdafx.h" #include #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #else #include #include #endif #include "log.h" int maxloglevel = 1; static int screenloglevel = 1; static int fileloglevel = -1; static FILE *logFile = 0; int getScreenLogLevel() { return screenloglevel; } int getLogLevel() { return maxloglevel; } void setConsoleLogging(int level) { if(level>maxloglevel) maxloglevel=level; screenloglevel = level; } void setFileLogging(char*filename, int level, char append) { if(level>maxloglevel) maxloglevel=level; if(logFile) { fclose(logFile);logFile=0; } if(filename && level>=0) { logFile = fopen(filename, append?"ab+":"wb"); fileloglevel = level; } else { logFile = 0; fileloglevel = 0; } } /* deprecated */ void initLog(char* filename, int filelevel, char* s00, char* s01, int s02, int screenlevel) { setFileLogging(filename, filelevel, 0); setConsoleLogging(screenlevel); } void exitLog() { // close file if(logFile != NULL) { fclose(logFile); logFile = 0; fileloglevel = -1; screenloglevel = 1; maxloglevel = 1; } } static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug","Trace"}; static int loglevels=7; static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG ", "TRACE "}; static inline void log_str(const char* logString) { char timebuffer[32]; char* logBuffer; char dbuffer[9]; char tbuffer[9]; int level; char*lt; char*gt; int l; logBuffer = (char*)malloc (strlen(logString) + 24 + 15); #ifndef __NT__ { /*time_t t = time(0); tm*t2 = localtime(t); strftime(dbuffer, 8, "%m %d", t2); strftime(tbuffer, 8, "%m %d", t2); dbuffer[0]=0; //FIXME tbuffer[0]=0;*/ time_t t = time(0); char* a = ctime(&t); int l = strlen(a); while(a[l-1] == 13 || a[l-1] == 10) l--; a[l]=0; sprintf(timebuffer, "%s", a); } #else _strdate( dbuffer ); _strtime( tbuffer ); sprintf(timebuffer, "%s - %s",dbuffer,tbuffer); #endif // search for field level = -1; lt=strchr(logString, '<'); gt=strchr(logString, '>'); if(lt && gt && lt=0) { logBuffer[l]=0; l--; } if (level <= screenloglevel) { printf("%s\n", logBuffer); fflush(stdout); } if (level <= fileloglevel) { if (logFile != NULL) { fprintf(logFile, "%s\r\n", logBuffer); fflush(logFile); } } free (logBuffer); } void msg_str(const char* buf) { if(buf[0]=='<') { char*z = "fewnvdt"; char*x = strchr(z,buf[1]); if(x && (x-z)>maxloglevel) return; } log_str(buf); } char char2loglevel[32] = /* a b c d e f g h i j k l m n o */ {-1,-1,-1,-1, /*debug*/5, /*error*/1, /*fatal*/0, -1, -1, -1,-1,-1,-1,-1,/*notice*/3,-1, /* p q r s t u v w x y z */ -1,-1,-1, -1, /*trace*/6, -1,/*verbose*/4,/*warning*/2, -1,-1,-1, -1,-1,-1,-1,-1}; int msg_internal(const char* format, ...) { char buf[1024]; va_list arglist; va_start(arglist, format); /* speed up hack */ if(format[0]=='<') { char*z = "fewnvdt"; char*x = strchr(z,format[1]); if(x && (x-z)>maxloglevel) return 0; } vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); strcat(buf, "\n"); log_str(buf); return 0; } swftools_0.9.2+git20130725.orig/lib/log.h0000644000175000017500000000345612216332640017033 0ustar gawaingawain/* log.h Header file for log.c. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #ifndef __log_h__ #define __log_h__ #ifdef __cplusplus extern "C" { #endif #include #include #include #define LOGLEVEL_FATAL 0 #define LOGLEVEL_ERROR 1 #define LOGLEVEL_WARNING 2 #define LOGLEVEL_NOTICE 3 #define LOGLEVEL_VERBOSE 4 #define LOGLEVEL_DEBUG 5 #define LOGLEVEL_TRACE 6 extern int getLogLevel(); extern int getScreenLogLevel(); extern void initLog(char* pLogDir, int fileloglevel, char* servAddr, char* logPort, int serverloglevel, int screenloglevel); extern void setConsoleLogging(int level); extern void setFileLogging(char*filename, int level, char append); extern int maxloglevel; extern char char2loglevel[32]; #define msg(fmt,args...) \ (((fmt)[0]=='<' && char2loglevel[(fmt)[1]&31]<=maxloglevel)?msg_internal((fmt),## args):0) extern int msg_internal(const char* logFormat, ...); extern void msg_str(const char* log); extern void exitLog(void); #define FIXNULL(a) ((a)?(a):"NULL") #ifdef __cplusplus } #endif #endif // __log_h__ swftools_0.9.2+git20130725.orig/lib/filters/0002755000175000017500000000000012216332657017553 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/filters/remove_font_transforms.c0000644000175000017500000002201112216332640024502 0ustar gawaingawain/* remove_font_transform.c Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../types.h" #include "../mem.h" #include "../q.h" #include "../log.h" typedef struct _mymatrix { float m00,m01,m10,m11; char*id; unsigned char alpha; } mymatrix_t; static void* mymatrix_clone(const void*_m) { if(_m==0) return 0; const mymatrix_t*m1=_m; mymatrix_t*m2 = malloc(sizeof(mymatrix_t)); *m2 = *m1; m2->id = strdup(m1->id); return m2; } static unsigned int mymatrix_hash(const void*_m) { if(!_m) return 0; const mymatrix_t*m = (mymatrix_t*)_m; unsigned int h=0; h = crc32_add_bytes(h, (char*)&m->m00, sizeof(m->m00)); h = crc32_add_bytes(h, (char*)&m->m01, sizeof(m->m01)); h = crc32_add_bytes(h, (char*)&m->m10, sizeof(m->m10)); h = crc32_add_bytes(h, (char*)&m->m11, sizeof(m->m11)); h = crc32_add_bytes(h, (char*)&m->alpha, 1); h = crc32_add_string(h, m->id); return h; } static void mymatrix_destroy(void*_m) { mymatrix_t*m = (mymatrix_t*)_m; free(m->id);m->id=0; free(m); } static char mymatrix_equals(const void*_m1, const void*_m2) { const mymatrix_t*m1=_m1; const mymatrix_t*m2=_m2; if(!m1 || !m2) return m1==m2; /* we do a binary comparison of the float32 bits here instead of a numerical comparison to prevent the compiler from e.g. removing the (float) cast during optimization, which would break the equivalence between equals() and hash() (as the hash is derived from the float32 values) */ return *(U32*)&m1->m00 == *(U32*)&m2->m00 && *(U32*)&m1->m01 == *(U32*)&m2->m01 && *(U32*)&m1->m10 == *(U32*)&m2->m10 && *(U32*)&m1->m11 == *(U32*)&m2->m11 && m1->alpha == m2->alpha && !strcmp(m1->id, m2->id); } type_t mymatrix_type = { dup: mymatrix_clone, hash: mymatrix_hash, free: mymatrix_destroy, equals: mymatrix_equals }; typedef struct _internal { dict_t*matrices; char first; } internal_t; #ifdef __GNUC__ int __attribute__((noinline)) matrix_convert(gfxmatrix_t*in, const char*id, mymatrix_t*out, gfxmatrix_t*scalematrix, unsigned char alpha) #else int matrix_convert(gfxmatrix_t*in, const char*id, mymatrix_t*out, gfxmatrix_t*scalematrix, unsigned char alpha) #endif { double l1 = sqrt(in->m00 * in->m00 + in->m01 * in->m01); double l2 = sqrt(in->m10 * in->m10 + in->m11 * in->m11); double l = (l1+l2)/2.0; if(l < 1e-10) { memset(out, 0, sizeof(*out)); return 0; } out->m00 = in->m00 / l; out->m10 = in->m10 / l; out->m01 = -in->m01 / l; out->m11 = -in->m11 / l; out->id = (char*)id; out->alpha = alpha?1:0; if(scalematrix) { scalematrix->m00 = l; scalematrix->m01 = 0; scalematrix->m10 = 0; scalematrix->m11 = -l; scalematrix->tx = in->tx; scalematrix->ty = in->ty; } return 1; } typedef struct _matrixdata { gfxfontlist_t*fonts; } matrixdata_t; typedef struct _transformedfont { gfxfont_t*orig; gfxfont_t*font; mymatrix_t matrix; int*used; double dx; } transformedfont_t; static transformedfont_t* transformedfont_new(gfxfont_t*orig, mymatrix_t*m) { transformedfont_t*f = rfx_calloc(sizeof(transformedfont_t)); f->orig = orig; f->matrix = *m; f->used = rfx_calloc(sizeof(f->used[0])*orig->num_glyphs); int t; for(t=0;tnum_glyphs;t++) { if(orig->glyphs[t].unicode==32 && (!orig->glyphs[t].line || !orig->glyphs[t].line->next || !orig->glyphs[t].line->next->next)) f->used[t]=1; //always preserve the space char in fonts } return f; } static void pass1_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; mymatrix_t m; if(!font->id) msg(" Font has no ID"); if(!matrix_convert(matrix, font->id?font->id:"unknown", &m, 0, color->a)) return; transformedfont_t*fd = dict_lookup(i->matrices, &m); if(!fd) { fd = transformedfont_new(font, &m); dict_put(i->matrices, &m, fd); } fd->used[glyphnr]=1; out->drawchar(out, font, glyphnr, color, matrix); } static void glyph_transform(gfxglyph_t*g, mymatrix_t*mm) { gfxmatrix_t m; m.m00 = mm->m00; m.m01 = mm->m01; m.m10 = mm->m10; m.m11 = mm->m11; m.tx = 0; m.ty = 0; if(m.m00>0) g->advance *= m.m00; g->line = gfxline_clone(g->line); gfxline_transform(g->line, &m); } static gfxresult_t* pass1_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; DICT_ITERATE_DATA(i->matrices, transformedfont_t*, fd) { gfxfont_t*font = fd->font = rfx_calloc(sizeof(gfxfont_t)); char id[80]; static int fontcount=0; sprintf(id, "font%d", fontcount++); font->id = strdup(id); int t; int count=0; for(t=0;torig->num_glyphs;t++) { if(fd->used[t]) count++; } font->num_glyphs = count; font->glyphs = rfx_calloc(sizeof(gfxglyph_t)*font->num_glyphs); count = 0; for(t=0;torig->num_glyphs;t++) { if(fd->used[t]) { font->glyphs[count] = fd->orig->glyphs[t]; glyph_transform(&font->glyphs[count], &fd->matrix); fd->used[t] = count + 1; count++; } } /* adjust the origin so that every character is to the right of the origin */ gfxbbox_t total = {0,0,0,0}; double average_xmax = 0; for(t=0;tglyphs[t].line; gfxbbox_t b = gfxline_getbbox(line); total = gfxbbox_expand_to_bbox(total, b); } if(count) average_xmax /= count; fd->dx = 0;//-total.xmin; font->ascent = total.ymax; font->descent = -total.ymin; for(t=0;tglyphs[t]; gfxline_t*line = font->glyphs[t].line; if(fd->matrix.alpha) { while(line) { line->x += fd->dx; line->sx += fd->dx; line = line->next; } } else { gfxline_free(g->line); /* for OCR: remove the outlines of characters that are only ever displayed with alpha=0 */ g->line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)); g->line->type = gfx_moveTo; g->line->x = g->advance; } } gfxfont_fix_unicode(font, 1); } return out->finish(out); } static void pass2_addfont(gfxfilter_t*f, gfxfont_t*font, gfxdevice_t*out) { /* we throw away original fonts, and do the addfont() for the transformed fonts in the first drawchar() */ } static void pass2_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*_color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxcolor_t color = *_color; if(i->first) { i->first = 0; DICT_ITERATE_DATA(i->matrices, transformedfont_t*, fd) { out->addfont(out, fd->font); } } mymatrix_t m; gfxmatrix_t scalematrix; matrix_convert(matrix, font->id?font->id:"unknown", &m, &scalematrix, color.a); transformedfont_t*d = dict_lookup(i->matrices, &m); scalematrix.tx -= d->dx*scalematrix.m00; /* if this character is invisible (alpha=0), then we will have removed the outline, so we make set the alpha color channel to "fully visible" again to allow output devices to be more performant (transparency is expensive) */ if(!m.alpha) color.a = 255; out->drawchar(out, d->font, d->used[glyphnr]-1, &color, &scalematrix); } static gfxresult_t* pass2_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; DICT_ITERATE_DATA(i->matrices, transformedfont_t*, fd) { if(fd->used) { free(fd->used);fd->used=0; } free(fd); } dict_destroy(i->matrices);i->matrices=0; return out->finish(out); } void gfxtwopassfilter_remove_font_transforms_init(gfxtwopassfilter_t*f) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(f, 0, sizeof(gfxtwopassfilter_t)); f->type = gfxfilter_twopass; f->pass1.name = "remove font transforms pass 1"; f->pass1.drawchar = pass1_drawchar; f->pass1.finish = pass1_finish; f->pass1.internal = i; f->pass2.name = "remove font transforms pass 2"; f->pass2.addfont = pass2_addfont; f->pass2.drawchar = pass2_drawchar; f->pass2.finish = pass2_finish; f->pass2.internal = i; i->matrices = dict_new2(&mymatrix_type); i->first = 1; } swftools_0.9.2+git20130725.orig/lib/filters/remove_invisible_characters.c0000644000175000017500000001755512216332640025462 0ustar gawaingawain/* remove_invisible_characters.c Part of the swftools package. Copyright (c) 2011 Matthias Kramm 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 */ #include #include #include #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../gfxpoly.h" #include "../gfximage.h" #include "../types.h" #include "../mem.h" #include "../devices/render.h" typedef struct _page { uint8_t* visible; int size8; int size; struct _page*next; } page_t; typedef struct _internal { gfxdevice_t render; int count; double area; page_t*first_page; page_t*last_page; page_t*current_page; } internal_t; static gfxcolor_t black = {255,0,0,0}; static void pass1_startpage(gfxfilter_t*f, int width, int height, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxdevice_render_init(&i->render); i->render.startpage(&i->render, width, height); out->startpage(out, width, height); i->count = 0; } static void pass1_endpage(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->render.endpage(&i->render); out->endpage(out); gfxresult_t*result = i->render.finish(&i->render); page_t*page = (page_t*)rfx_calloc(sizeof(page_t)); if(!i->first_page) { i->first_page = i->last_page = i->current_page = page; } else { i->last_page->next = page; i->last_page = page; } page->size = i->count + 1; page->size8 = (page->size+7) >> 3; page->visible = (uint8_t*)rfx_calloc(page->size8); gfximage_t*img = (gfximage_t*)result->get(result, "page0"); int size = img->width*img->height; int t; for(t=0;tdata[t])>>8); page->visible[index>>3] |= (1<<(index&7)); } result->destroy(result); } static void pass1_fill(gfxfilter_t*f, gfxline_t*line, gfxcolor_t*color, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; if(color->a == 255) { i->render.fill(&i->render, line, &black); } out->fill(out, line, color); } static void pass1_stroke(gfxfilter_t*f, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; if(color->a == 255) { i->render.stroke(&i->render, line, width, &black, cap_style, joint_style, miterLimit); } out->stroke(out, line, width, color, cap_style, joint_style, miterLimit); } static void pass1_fillbitmap(gfxfilter_t*f, gfxline_t*line, gfximage_t* bitmap, gfxmatrix_t*imgcoord2devcoord, gfxcxform_t*cxform, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfximage_t*img = gfximage_new(bitmap->width, bitmap->height); int size = img->width*img->height; memset(img->data, 0, size*sizeof(gfxcolor_t)); int t; for(t=0;tdata[t].a = bitmap->data[t].a == 255 ? 255 : 0; } i->render.fillbitmap(&i->render, line, img, imgcoord2devcoord, 0); gfximage_free(img); out->fillbitmap(out, line, bitmap, imgcoord2devcoord, cxform); } static void pass1_fillgradient(gfxfilter_t*f, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*gradcoord2devcoord, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->render.fill(&i->render, line, &black); out->fillgradient(out, line, gradient, type, gradcoord2devcoord); } static void pass1_startclip(gfxfilter_t*f, gfxline_t*line, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->render.startclip(&i->render, line); out->startclip(out, line); } static void pass1_endclip(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->render.endclip(&i->render); out->endclip(out); } static void pass1_addfont(gfxfilter_t*f, gfxfont_t*font, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; /* Don't pass this to device->render(). We're not in a page yet, and the render device doesn't need addfont() */ //i->render.addfont(&i->render, font); out->addfont(out, font); } static void pass1_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->count++; gfxcolor_t c; *(uint32_t*)&c = i->count<<8|0xff; double advance = font->glyphs[glyphnr].advance; gfxline_t*box = gfxline_makerectangle(0,0,advance,font->ascent); gfxline_transform(box, matrix); i->render.fill(&i->render, box, &c); if(font->ascent < 512) { i->render.drawchar(&i->render, font, glyphnr, &c, matrix); } gfxline_free(box); out->drawchar(out, font, glyphnr, color, matrix); } static gfxresult_t*pass1_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; return out->finish(out); } static void pass2_startpage(gfxfilter_t*f, int width, int height, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; out->startpage(out, width, height); i->count = 0; } static void pass2_endpage(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->current_page = i->current_page->next; out->endpage(out); } static void pass2_addfont(gfxfilter_t*f, gfxfont_t*font, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; out->addfont(out, font); } static void pass2_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; i->count++; if(i->current_page->visible[i->count>>3]&(1<<(i->count&7))) { out->drawchar(out, font, glyphnr, color, matrix); } else { #ifdef DEBUG_AREA gfxline_t*line = gfxline_clone(font->glyphs[glyphnr].line); gfxline_transform(line, matrix); gfxpoly_t*poly = gfxpoly_from_fill(line, 0.05); double area = gfxpoly_area(poly); gfxpoly_destroy(poly); gfxline_free(line); i->area += area; #endif } } static gfxresult_t*pass2_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; #ifdef DEBUG_AREA printf("%f\n", i->area); #endif return out->finish(out); } void gfxtwopassfilter_remove_invisible_characters_init(gfxtwopassfilter_t*f) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(f, 0, sizeof(gfxtwopassfilter_t)); f->type = gfxfilter_twopass; f->pass1.name = "filter \"remove invisible characters\" pass 1"; f->pass1.addfont = pass1_addfont; f->pass1.drawchar = pass1_drawchar; f->pass1.fill = pass1_fill; f->pass1.fillbitmap = pass1_fillbitmap; f->pass1.fillgradient = pass1_fillgradient; f->pass1.stroke = pass1_stroke; f->pass1.startclip= pass1_startclip; f->pass1.endclip = pass1_endclip; f->pass1.startpage = pass1_startpage; f->pass1.endpage = pass1_endpage; f->pass1.finish = pass1_finish; f->pass1.internal = i; f->pass2.name = "filter \"remove invisible characters\" pass 2"; f->pass2.addfont = pass2_addfont; f->pass2.drawchar = pass2_drawchar; f->pass2.startpage = pass2_startpage; f->pass2.endpage = pass2_endpage; f->pass2.finish = pass2_finish; f->pass2.internal = i; } swftools_0.9.2+git20130725.orig/lib/filters/one_big_font.c0000644000175000017500000000716312216332640022344 0ustar gawaingawain/* remove_font_transform.c Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../types.h" #include "../mem.h" typedef struct _internal { gfxfontlist_t*fonts; gfxfont_t*font; int num_glyphs; } internal_t; typedef struct _fontdata { gfxfont_t*font; int start; } fontdata_t; static void pass1_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; fontdata_t*d = gfxfontlist_getuserdata(i->fonts, font->id); if(!d) { d = rfx_calloc(sizeof(fontdata_t)); d->font = font; d->start = i->num_glyphs; i->num_glyphs += font->num_glyphs; i->fonts = gfxfontlist_addfont2(i->fonts, font, d); } out->drawchar(out, font, glyphnr, color, matrix); } static gfxresult_t*pass1_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxfont_t*font = i->font = rfx_calloc(sizeof(gfxfont_t)); font->id = strdup("onebigfont"); font->num_glyphs = i->num_glyphs; font->glyphs = rfx_calloc(sizeof(gfxglyph_t)*i->num_glyphs); gfxfontlist_t*l = i->fonts; while(l) { gfxfont_t*old = l->font; fontdata_t*d = l->user; memcpy(font->glyphs + d->start, old->glyphs, sizeof(gfxglyph_t)*old->num_glyphs); if(old->ascent > font->ascent) font->ascent = old->ascent; if(old->descent > font->descent) font->descent = old->descent; l = l->next; } gfxfont_fix_unicode(font, 0); return out->finish(out); } static void pass2_addfont(gfxfilter_t*f, gfxfont_t*font, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; out->addfont(out, i->font); } static void pass2_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; fontdata_t*d = gfxfontlist_getuserdata(i->fonts, font->id); out->drawchar(out, i->font, glyphnr + d->start, color, matrix); } static gfxresult_t*pass2_finish(gfxfilter_t*f, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; // clean up gfxfontlist_t*l = i->fonts; while(l) { free(l->user);l->user=0; l=l->next; } gfxfontlist_free(i->fonts, 0);i->fonts=0; return out->finish(out); } void gfxtwopassfilter_one_big_font_init(gfxtwopassfilter_t*f) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(f, 0, sizeof(gfxtwopassfilter_t)); f->type = gfxfilter_twopass; f->pass1.name = "filter \"one big font\" pass 1"; f->pass1.drawchar = pass1_drawchar; f->pass1.finish = pass1_finish; f->pass1.internal = i; f->pass2.name = "filter \"one big font\" pass 2"; f->pass2.addfont = pass2_addfont; f->pass2.drawchar = pass2_drawchar; f->pass2.finish = pass2_finish; f->pass2.internal = i; } swftools_0.9.2+git20130725.orig/lib/filters/vectors_to_glyphs.c0000644000175000017500000001145312216332640023466 0ustar gawaingawain/* vectors_to_fonts.c Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfxpoly.h" #include "../gfxfont.h" #include "../types.h" #include "../mem.h" #include "../q.h" typedef struct _vglyph { gfxglyph_t glyph; struct _vglyph*next; } vglyph_t; typedef struct _internal { vglyph_t*first_glyph; vglyph_t*last_glyph; gfxfont_t*font; char first; int glyph_nr; } internal_t; #define FONT_SIZE 1024.0 static void pass1_fill(gfxfilter_t*f, gfxline_t*line, gfxcolor_t*color, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxbbox_t bbox = gfxline_getbbox(line); double height = bbox.ymax - bbox.ymin; double width = bbox.xmax - bbox.xmin; double size = fmax(width,height); if(fabs(size) < 1e-3) return; double scale = FONT_SIZE/size; gfxmatrix_t m = {scale, 0, -bbox.xmin*scale, 0, scale, -bbox.ymax*scale}; line = gfxline_clone(line); gfxline_transform(line, &m); line = gfxline_restitch(line); vglyph_t*v = rfx_calloc(sizeof(vglyph_t)); v->glyph.line = line; v->glyph.advance = width*scale; v->glyph.unicode = 32+i->glyph_nr; i->last_glyph->next = v; i->last_glyph = v; gfxmatrix_t m2 = {1.0/scale, 0, bbox.xmin, 0, 1.0/scale, bbox.ymax}; out->drawchar(out, 0, i->glyph_nr, color, &m2); i->glyph_nr++; } static void pass1_stroke(gfxfilter_t*f, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, gfxdevice_t*out) { return; internal_t*i = (internal_t*)f->internal; gfxpoly_t*poly = gfxpoly_from_stroke(line, width, cap_style, joint_style, miterLimit, DEFAULT_GRID); gfxline_t*line2 = gfxline_from_gfxpoly_with_direction(poly); pass1_fill(f, line2, color, out); gfxline_free(line2); gfxpoly_destroy(poly); } static void make_font(internal_t*i) { i->font = rfx_calloc(sizeof(gfxfont_t)); i->font->id = "SWFTools-Vector-Magic"; i->font->num_glyphs = i->glyph_nr; i->font->glyphs = malloc(sizeof(gfxglyph_t)*i->font->num_glyphs); i->font->ascent = FONT_SIZE; i->font->descent = 0; int pos = 0; vglyph_t*g = i->first_glyph; while(g) { i->font->glyphs[pos] = g->glyph; pos++; g = g->next; } gfxfont_fix_unicode(i->font, 1); } static void pass2_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; if(i->first) { make_font(i); out->addfont(out, i->font); i->first = 0; } if(!font) { font = i->font; gfxcolor_t red = {255,254,1,1}; int x; gfxmatrix_t m = {1.0, 0,0, 0, 1.0,0}; out->drawchar(out, font, 1, &red, &m); /*gfxmatrix_t m2 = {1.0, 0,600, 0, 1.0,600}; out->drawchar(out, font, 1, &red, &m2);*/ gfxline_t*line = gfxline_makerectangle(0, 0, 1, 1); gfximage_t img; img.data = color; img.width = 1; img.height = 1; out->fillbitmap(out, line, &img, &m, 0); } out->drawchar(out, font, glyphnr, color, matrix); } void gfxtwopassfilter_vectors_to_glyphs_init(gfxtwopassfilter_t*f) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); memset(f, 0, sizeof(gfxtwopassfilter_t)); f->type = gfxfilter_twopass; f->pass1.name = "vectors to glyphs pass 1"; f->pass1.fill = pass1_fill; f->pass1.stroke = pass1_stroke; f->pass1.internal = i; f->pass2.name = "vectors to glyphs pass 2"; f->pass2.drawchar = pass2_drawchar; f->pass2.internal = i; i->first = 1; i->first_glyph = rfx_calloc(sizeof(vglyph_t)); i->first_glyph->glyph.line = 0; i->first_glyph->glyph.advance = FONT_SIZE; i->first_glyph->glyph.unicode = 32; i->last_glyph = rfx_calloc(sizeof(vglyph_t)); // dummy char i->first_glyph->next = i->last_glyph; i->last_glyph->glyph.line = 0; i->last_glyph->glyph.advance = FONT_SIZE/8; i->last_glyph->glyph.unicode = 33; i->glyph_nr = 2; } swftools_0.9.2+git20130725.orig/lib/filters/rescale_images.c0000644000175000017500000000657212216332640022662 0ustar gawaingawain/* rescale_images.c Part of the swftools package. Copyright (c) 2011 Matthias Kramm 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 */ #include #include #include #include #include #include #include "../mem.h" #include "../gfxdevice.h" #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfximage.h" #include "../log.h" typedef struct _internal { double config_subpixels; } internal_t; int rescale_images_setparameter(gfxfilter_t*dev, const char*key, const char*value, gfxdevice_t*out) { internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "subpixels")) { i->config_subpixels = atof(value); } return out->setparameter(out,key,value); } void rescale_images_startpage(gfxfilter_t*dev, int width, int height, gfxdevice_t*out) { internal_t*i = (internal_t*)dev->internal; out->startpage(out,width,height); } void rescale_images_fillbitmap(gfxfilter_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform, gfxdevice_t*out) { internal_t*i = (internal_t*)dev->internal; if(img->width<=0 || img->height<=0) return; int target_width = (int)(sqrt(matrix->m00*matrix->m00 + matrix->m01*matrix->m01)*img->width); int target_height = (int)(sqrt(matrix->m10*matrix->m10 + matrix->m11*matrix->m11)*img->height); int new_width = (int)ceil(target_width*i->config_subpixels); int new_height = (int)ceil(target_height*i->config_subpixels); if(new_width<=0) new_width = 1; if(new_height<=0) new_height = 1; if(new_width < img->width || new_height < img->height) { msg(" Scaling %dx%d image to %dx%d", img->width, img->height, new_width, new_height); gfximage_t*new_image = gfximage_rescale(img, new_width, new_height); gfxmatrix_t m = *matrix; m.m00 = (m.m00 * img->width) / new_width; m.m01 = (m.m01 * img->width) / new_width; m.m10 = (m.m10 * img->height) / new_height; m.m11 = (m.m11 * img->height) / new_height; out->fillbitmap(out, line, new_image, &m, cxform); gfximage_free(new_image); } else { out->fillbitmap(out, line, img, matrix, cxform); } } gfxresult_t* rescale_images_finish(gfxfilter_t*dev, gfxdevice_t*out) { internal_t*i = (internal_t*)dev->internal; free(i);dev->internal = 0; return out->finish(out); } void gfxfilter_rescale_images_init(gfxfilter_t*f) { memset(f, 0, sizeof(gfxfilter_t)); internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); i->config_subpixels = 1.0; f->internal = i; f->name = "rescale_images"; f->type = gfxfilter_onepass; f->fillbitmap = rescale_images_fillbitmap; f->finish = rescale_images_finish; } swftools_0.9.2+git20130725.orig/lib/filters/flatten.c0000644000175000017500000002564612216332640021357 0ustar gawaingawain/* flatten.c Part of the swftools package. Copyright (c) 2008-2011 Matthias Kramm 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 */ #include #include #include #ifndef WIN32 #include #endif #include #include #include #include #include "../mem.h" #include "../gfxdevice.h" #include "../gfxfilter.h" #include "../gfxtools.h" #include "../gfxpoly.h" #include "../log.h" typedef struct _clip { gfxpoly_t*poly; int openclips; struct _clip*next; } clip_t; typedef struct _internal { clip_t*clip; char config_dont_clip_characters; int good_polygons; int bad_polygons; } internal_t; static int verbose = 0; static void dbg(char*format, ...) { if(!verbose) return; char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(device-polyops) %s\n", buf); fflush(stdout); } int flatten_setparameter(gfxfilter_t*dev, const char*key, const char*value, gfxdevice_t*out) { dbg("flatten_setparameter"); internal_t*i = (internal_t*)dev->internal; if(!strcmp(key, "dont_clip_characters")) { i->config_dont_clip_characters = atoi(value); } return out->setparameter(out,key,value); } void flatten_startpage(gfxfilter_t*dev, int width, int height, gfxdevice_t*out) { dbg("flatten_startpage"); internal_t*i = (internal_t*)dev->internal; out->startpage(out,width,height); } void flatten_startclip(gfxfilter_t*dev, gfxline_t*line, gfxdevice_t*out) { dbg("flatten_startclip"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t* oldclip = i->clip?i->clip->poly:0; gfxpoly_t* poly = gfxpoly_from_fill(line, DEFAULT_GRID); if(poly) i->good_polygons++; else i->bad_polygons++; gfxpoly_t* currentclip = 0; int type = 0; /* we can't rely on gfxpoly actually being able to convert a gfxline into a gfxpoly- for polygons which are too complex or just degenerate, this might fail. So handle all the cases where polygon conversion or intersection might go awry UPDATE: this is not needed anymore. The new gfxpoly implementation is stable enough so it always returns a valid result. Still, it's good practice. */ if(!poly && !oldclip) { out->startclip(out,line); currentclip = 0; type = 1; } else if(!poly && oldclip) { gfxline_t*oldclipline = gfxline_from_gfxpoly(oldclip); out->startclip(out,oldclipline); out->startclip(out,line); currentclip = 0; type = 2; } else if(poly && oldclip) { gfxpoly_t*intersection = gfxpoly_intersect(poly, oldclip); if(intersection) { i->good_polygons++; // this case is what usually happens gfxpoly_destroy(poly);poly=0; currentclip = intersection; type = 0; } else { i->bad_polygons++; gfxline_t*oldclipline = gfxline_from_gfxpoly(oldclip); out->startclip(out, oldclipline); currentclip = poly; type = 1; } } else if(poly && !oldclip) { currentclip = poly; type = 0; } clip_t*n = i->clip; i->clip = (clip_t*)rfx_calloc(sizeof(clip_t)); i->clip->next = n; i->clip->poly = currentclip; i->clip->openclips = type; } void flatten_endclip(gfxfilter_t*dev, gfxdevice_t*out) { dbg("flatten_endclip"); internal_t*i = (internal_t*)dev->internal; if(!i->clip) { msg(" endclip without startclip (in: polyops)\n"); return; } clip_t*old = i->clip; i->clip = i->clip->next; if(old->poly) { gfxpoly_destroy(old->poly);old->poly = 0; } int t; for(t=0;topenclips;t++) out->endclip(out); old->next = 0;free(old); } static gfxline_t* handle_poly(internal_t*i, gfxpoly_t*poly, char*ok, gfxdevice_t*out) { if(i->clip && i->clip->poly) { gfxpoly_t*old = poly; if(poly) { poly = gfxpoly_intersect(poly, i->clip->poly); gfxpoly_destroy(old); } } if(poly) i->good_polygons++; else i->bad_polygons++; gfxline_t*gfxline = 0; if(poly) { // this is the case where everything went right gfxline_t*line = gfxline_from_gfxpoly(poly); gfxpoly_destroy(poly); *ok = 1; return line; } else { if(i->clip && i->clip->poly) { /* convert current clipping from a polygon to an actual "startclip" written to the output */ assert(i->clip->openclips <= 1); gfxline_t*clipline = gfxline_from_gfxpoly(i->clip->poly); out->startclip(out, clipline); gfxline_free(clipline); gfxpoly_destroy(i->clip->poly);i->clip->poly = 0; i->clip->openclips++; return 0; } else { return 0; } } } void flatten_stroke(gfxfilter_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, gfxdevice_t*out) { dbg("flatten_stroke"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t* poly = gfxpoly_from_stroke(line, width, cap_style, joint_style, miterLimit, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(i, poly, &ok, out); if(ok) { if(out && line2) out->fill(out, line2, color); gfxline_free(line2); } else { msg(" .."); out->stroke(out, line, width, color, cap_style, joint_style, miterLimit); } } void flatten_fill(gfxfilter_t*dev, gfxline_t*line, gfxcolor_t*color, gfxdevice_t*out) { dbg("flatten_fill"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(i, poly, &ok, out); if(ok) { if(out && line2) out->fill(out, line2, color); gfxline_free(line2); } else { out->fill(out, line, color); } } void flatten_fillbitmap(gfxfilter_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform, gfxdevice_t*out) { dbg("flatten_fillbitmap"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(i, poly, &ok, out); if(ok) { if(out && line2) out->fillbitmap(out, line2, img, matrix, cxform); gfxline_free(line2); } else { out->fillbitmap(out, line, img, matrix, cxform); } } void flatten_fillgradient(gfxfilter_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix, gfxdevice_t*out) { dbg("flatten_fillgradient"); internal_t*i = (internal_t*)dev->internal; gfxpoly_t*poly = gfxpoly_from_fill(line, DEFAULT_GRID); char ok = 0; gfxline_t*line2 = handle_poly(i, poly, &ok, out); if(ok) { if(out && line2) out->fillgradient(out, line2, gradient, type, matrix); gfxline_free(line2); } else { out->fillgradient(out, line, gradient, type, matrix); } } void flatten_addfont(gfxfilter_t*dev, gfxfont_t*font, gfxdevice_t*out) { dbg("flatten_addfont"); internal_t*i = (internal_t*)dev->internal; out->addfont(out, font); } void flatten_drawchar(gfxfilter_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { dbg("flatten_drawchar"); if(!font) return; internal_t*i = (internal_t*)dev->internal; gfxline_t*glyph = gfxline_clone(font->glyphs[glyphnr].line); gfxline_transform(glyph, matrix); if(i->clip && i->clip->poly) { gfxbbox_t bbox = gfxline_getbbox(glyph); gfxpoly_t*dummybox = gfxpoly_createbox(bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax, DEFAULT_GRID); gfxline_t*dummybox2 = gfxline_from_gfxpoly(dummybox); bbox = gfxline_getbbox(dummybox2); gfxline_free(dummybox2); char ok=0; gfxline_t*gfxline = handle_poly(i, dummybox, &ok, out); if(ok) { gfxbbox_t bbox2 = gfxline_getbbox(gfxline); double w = bbox2.xmax - bbox2.xmin; double h = bbox2.ymax - bbox2.ymin; if(fabs((bbox.xmax - bbox.xmin) - w) > DEFAULT_GRID*2 || fabs((bbox.ymax - bbox.ymin) - h) > DEFAULT_GRID*2) { /* notable change in character size: character was clipped TODO: how to deal with diagonal cuts? */ msg(" Character %d was clipped: (%f,%f,%f,%f) -> (%f,%f,%f,%f)", glyphnr, bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax, bbox2.xmin,bbox2.ymin,bbox2.xmax,bbox2.ymax); if(!i->config_dont_clip_characters) { flatten_fill(dev, glyph, color, out); } else { if(bbox2.xmin < bbox2.xmax && bbox2.ymin < bbox2.ymax) { out->drawchar(out, font, glyphnr, color, matrix); } } } else { out->drawchar(out, font, glyphnr, color, matrix); } } else { out->drawchar(out, font, glyphnr, color, matrix); } gfxline_free(gfxline); } else { out->drawchar(out, font, glyphnr, color, matrix); } gfxline_free(glyph); } void flatten_drawlink(gfxfilter_t*dev, gfxline_t*line, const char*action, const char*text, gfxdevice_t*out) { dbg("flatten_drawlink"); internal_t*i = (internal_t*)dev->internal; out->drawlink(out, line, action, text); } void flatten_endpage(gfxfilter_t*dev, gfxdevice_t*out) { dbg("flatten_endpage"); internal_t*i = (internal_t*)dev->internal; out->endpage(out); } gfxresult_t* flatten_finish(gfxfilter_t*dev, gfxdevice_t*out) { dbg("flatten_finish"); internal_t*i = (internal_t*)dev->internal; if(i->bad_polygons) { msg(" --flatten success rate: %.1f%% (%d failed polygons)", i->good_polygons*100.0 / (i->good_polygons + i->bad_polygons), i->bad_polygons); } free(i);dev->internal = 0; return out->finish(out); } void gfxfilter_flatten_init(gfxfilter_t*f) { dbg("flatten filter"); memset(f, 0, sizeof(gfxfilter_t)); internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); f->internal = i; f->name = "flatten"; f->type = gfxfilter_onepass; f->setparameter = flatten_setparameter; f->startpage = flatten_startpage; f->startclip = flatten_startclip; f->endclip = flatten_endclip; f->stroke = flatten_stroke; f->fill = flatten_fill; f->fillbitmap = flatten_fillbitmap; f->fillgradient = flatten_fillgradient; f->addfont = flatten_addfont; f->drawchar = flatten_drawchar; f->drawlink = flatten_drawlink; f->endpage = flatten_endpage; f->finish = flatten_finish; } swftools_0.9.2+git20130725.orig/lib/filters/alpha.c0000644000175000017500000000742112216332640020776 0ustar gawaingawain/* alpha.c Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #include #include #include "../gfxfilter.h" #include "../gfxtools.h" #include "../types.h" #include "../mem.h" typedef struct _internal { U8 alpha; } internal_t; static inline gfxcolor_t transform_color(internal_t*i, gfxcolor_t*col) { gfxcolor_t col2; col2.r = col->r; col2.g = col->g; col2.b = col->b; col2.a = (col->a * i->alpha)/255; return col2; } static void maketransparent_stroke(gfxfilter_t*f, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxcolor_t color2 = transform_color(i, color); out->stroke(out, line, width, &color2, cap_style, joint_style, miterLimit); } static void maketransparent_fill(gfxfilter_t*f, gfxline_t*line, gfxcolor_t*color, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxcolor_t color2 = transform_color(i, color); out->fill(out, line, &color2); } static void maketransparent_fillbitmap(gfxfilter_t*f, gfxline_t*line, gfximage_t*img, gfxmatrix_t*matrix, gfxcxform_t*cxform, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfximage_t img2; img2.width = img->width; img2.height = img->height; img2.data = (gfxcolor_t*)rfx_alloc(img->width*img->height*4); int x,y; for(y=0;yheight;y++) { gfxcolor_t*in = &img->data[y*img->width]; gfxcolor_t*out = &img2.data[y*img->width]; for(x=0;xwidth;x++) { out[x] = transform_color(i, &in[x]); } } out->fillbitmap(out, line, &img2, matrix, cxform); rfx_free(img2.data); } static void maketransparent_drawchar(gfxfilter_t*f, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxcolor_t color2 = transform_color(i, color); out->drawchar(out, font, glyphnr, color, matrix); } static void maketransparent_fillgradient(gfxfilter_t*f, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix, gfxdevice_t*out) { internal_t*i = (internal_t*)f->internal; gfxgradient_t*g = 0, *prev = 0; while(gradient) { gfxgradient_t*n = rfx_alloc(sizeof(gfxgradient_t)); n->pos = gradient->pos; n->color = transform_color(i, &gradient->color); n->next = 0; if(prev) { prev->next = n; prev = n; } else { g = prev = n; } gradient = gradient->next; } out->fillgradient(out, line, g, type, matrix); gfxgradient_destroy(g); } void gfxfilter_maketransparent_init(gfxfilter_t*f, U8 alpha) { internal_t*i = (internal_t*)rfx_calloc(sizeof(internal_t)); i->alpha = alpha; memset(f, 0, sizeof(gfxfilter_t)); f->type = gfxfilter_onepass; f->name = "maketransparent"; f->internal = i; f->stroke = maketransparent_stroke; f->fill = maketransparent_fill; f->fillbitmap = maketransparent_fillbitmap; f->fillgradient = maketransparent_fillgradient; f->drawchar = maketransparent_drawchar; } swftools_0.9.2+git20130725.orig/lib/pdf/0002755000175000017500000000000012216332657016654 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/pdf/XMLOutputDev.cc0000644000175000017500000001043312216332640021472 0ustar gawaingawain/* XMLOutputDev.cc This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "../../config.h" #include #include #include "XMLOutputDev.h" #include "GfxState.h" #include "popplercompat.h" #ifndef HAVE_POPPLER #include "gfile.h" #endif XMLOutputDev::XMLOutputDev(char*filename) :TextOutputDev(mktmpname(0), false, false, false) { out = fopen(filename, "wb"); if(!out) { perror(filename); exit(-1); } fprintf(out, "\n"); fprintf(out, "\n"); } XMLOutputDev::~XMLOutputDev() { fprintf(out, "\n"); fclose(out); } void XMLOutputDev::startPage(int pageNum, GfxState *state) { TextOutputDev::startPage(pageNum, state); fprintf(out, "\n", pageNum, state->getPageWidth(), state->getPageHeight()); } void XMLOutputDev::endPage() { TextOutputDev::endPage(); TextWordList* list = makeWordList(); int len = list->getLength(); int i; char textTag = 0; GString*fontname = new GString(); double fontsize = -99999; double base = -9999; double color_r = -1; double color_g = -1; double color_b = -1; for(i=0;iget(i); GString*newfont = word->getFontName(); double newsize = word->getFontSize(); #ifdef HAVE_POPPLER double newbase = word->getBaseline(); #else double newbase = word->base; #endif double newcolor_r; double newcolor_g; double newcolor_b; word->getColor(&newcolor_r, &newcolor_g, &newcolor_b); if((newfont && newfont->cmp(fontname)) || newsize != fontsize || newbase != base || newcolor_r != color_r || newcolor_g != color_g || newcolor_b != color_b ) { TextFontInfo*info = word->getFontInfo(); if(textTag) fprintf(out, "\n"); textTag = 1; GBool italic = gFalse; GBool bold = gFalse; GBool serif = gFalse; if(info->isItalic()) italic = gTrue; if(info->isBold()) bold = gTrue; if(info->isSerif()) serif = gTrue; char*name = (char*)""; if(newfont) { name = newfont->lowerCase()->getCString(); if(strlen(name)>7 && name[6]=='+') name += 7; if(strstr(name, "ital")) italic = gTrue; if(strstr(name, "slan")) italic = gTrue; if(strstr(name, "obli")) italic = gTrue; if(strstr(name, "bold")) bold = gTrue; if(strstr(name, "heav")) bold = gTrue; if(strstr(name, "medi")) bold = gTrue; if(strstr(name, "serif")) serif = gTrue; } double xMin,yMin,xMax,yMax; word->getBBox(&xMin, &yMin, &xMax, &yMax); int rot = word->getRotation(); fprintf(out, "", name, newbase, (rot&1)?yMin:xMin, (rot&1)?yMin:xMin, (rot&1)?xMin:yMin, (rot&1)?yMax:xMax, (rot&1)?xMax:yMax, info->isFixedWidth()?"fixed;":"", serif?"serif;":"", italic?"italic;":"", bold?"bold;":"", newsize, ((int)(newcolor_r*255))&0xff, ((int)(newcolor_g*255))&0xff, ((int)(newcolor_b*255))&0xff ); fontname = newfont->copy(); fontsize = newsize; base = newbase; color_r = newcolor_r; color_g = newcolor_g; color_b = newcolor_b; } char*s = word->getText()->getCString(); while(*s) { switch(*s) { case '<': fprintf(out, "<");break; case '>': fprintf(out, ">");break; case '&': fprintf(out, "&");break; default: fwrite(s, 1, 1, out); } s++; } if(word->getSpaceAfter()) fprintf(out, " "); } if(textTag) fprintf(out, "\n"); fprintf(out, "\n"); } swftools_0.9.2+git20130725.orig/lib/pdf/FullBitmapOutputDev.cc0000644000175000017500000004070012216332640023071 0ustar gawaingawain/* FullBitmapOutputDev.cc Output Device which creates a bitmap. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "FullBitmapOutputDev.h" #include "CharOutputDev.h" #ifdef HAVE_POPPLER #include "splash/SplashBitmap.h" #include "splash/SplashPattern.h" #include "splash/Splash.h" #else #include "xpdf/config.h" #include "SplashBitmap.h" #include "SplashPattern.h" #include "Splash.h" #endif #include "../log.h" #include "../png.h" #include "../devices/record.h" static SplashColor splash_white = {255,255,255}; static SplashColor splash_black = {0,0,0}; FullBitmapOutputDev::FullBitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2) :CommonOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2) { this->doc = doc; this->xref = doc->getXRef(); msg(" Rendering everything to a bitmap"); /* color graphic output device, for creating bitmaps */ this->rgbdev = new SplashOutputDev(splashModeRGB8, 1, gFalse, splash_white, gTrue, gTrue); /* device for handling links */ this->gfxdev = new CharOutputDev(info, this->doc, page2page, num_pages, x, y, x1, y1, x2, y2); this->rgbdev->startDoc(this->xref); } FullBitmapOutputDev::~FullBitmapOutputDev() { if(this->rgbdev) { delete this->rgbdev;this->rgbdev = 0; } if(this->gfxdev) { delete this->gfxdev;this->gfxdev= 0; } } GBool FullBitmapOutputDev::getVectorAntialias() { return this->rgbdev->getVectorAntialias(); } void FullBitmapOutputDev::setVectorAntialias(GBool vaa) { this->rgbdev->setVectorAntialias(vaa); } void FullBitmapOutputDev::setDevice(gfxdevice_t*dev) { this->dev = dev; gfxdev->setDevice(dev); } void FullBitmapOutputDev::setParameter(const char*key, const char*value) { } static void getBitmapBBox(Guchar*alpha, int width, int height, int*xmin, int*ymin, int*xmax, int*ymax) { *ymin = -1; *xmin = width; *xmax = 0; int x,y; for(y=0;y*xmax) *xmax = right; } } if(*xmin>=*xmax || *ymin>=*ymax) { *xmin = 0; *ymin = 0; *xmax = 0; *ymax = 0; } } void FullBitmapOutputDev::flushBitmap() { int width = rgbdev->getBitmapWidth(); int height = rgbdev->getBitmapHeight(); SplashColorPtr rgb = rgbdev->getBitmap()->getDataPtr(); Guchar*alpha = rgbdev->getBitmap()->getAlphaPtr(); int xmin,ymin,xmax,ymax; getBitmapBBox(alpha, width, height, &xmin,&ymin,&xmax,&ymax); /* clip against (-movex, -movey, -movex+width, -movey+height) */ if(xmin < -this->movex) xmin = -this->movex; if(ymin < -this->movey) ymin = -this->movey; if(xmax > -this->movex + width) xmax = -this->movex+this->width; if(ymax > -this->movey + height) ymax = -this->movey+this->height; msg(" Flushing bitmap (bbox: %d,%d,%d,%d)", xmin,ymin,xmax,ymax); if((xmax-xmin)<=0 || (ymax-ymin)<=0) // no bitmap, nothing to do return; if(sizeof(SplashColor)!=3) { msg(" sizeof(SplashColor)!=3"); return; } //xmin = ymin = 0; //xmax = width; //ymax = height; int rangex = xmax-xmin; int rangey = ymax-ymin; gfximage_t*img = (gfximage_t*)malloc(sizeof(gfximage_t)); img->data = (gfxcolor_t*)malloc(rangex * rangey * 4); img->width = rangex; img->height = rangey; int x,y; for(y=0;ydata[y*rangex]; Guchar*ain = &alpha[(y+ymin)*width+xmin]; for(x=0;xfillbitmap(dev, line, img, &m, 0); gfxline_free(line); free(img->data);img->data=0;free(img);img=0; } GBool FullBitmapOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data), void *abortCheckCbkData) { this->setPage(page); gfxdev->setPage(page); return gTrue; } void FullBitmapOutputDev::beginPage(GfxState *state, int pageNum) { msg(" startPage"); rgbdev->startPage(pageNum, state); gfxdev->startPage(pageNum, state); } void FullBitmapOutputDev::endPage() { msg(" endPage (FullBitmapOutputDev)"); flushBitmap(); rgbdev->endPage(); gfxdev->endPage(); } GBool FullBitmapOutputDev::upsideDown() { return rgbdev->upsideDown(); } GBool FullBitmapOutputDev::useDrawChar() { return rgbdev->useDrawChar(); } GBool FullBitmapOutputDev::useTilingPatternFill() { return rgbdev->useTilingPatternFill(); } GBool FullBitmapOutputDev::useShadedFills() { return rgbdev->useShadedFills(); } GBool FullBitmapOutputDev::useDrawForm() { return rgbdev->useDrawForm(); } GBool FullBitmapOutputDev::interpretType3Chars() { return rgbdev->interpretType3Chars(); } GBool FullBitmapOutputDev::needNonText() { return rgbdev->needNonText(); } void FullBitmapOutputDev::setDefaultCTM(double *ctm) { rgbdev->setDefaultCTM(ctm); gfxdev->setDefaultCTM(ctm); } void FullBitmapOutputDev::saveState(GfxState *state) { rgbdev->saveState(state); } void FullBitmapOutputDev::restoreState(GfxState *state) { rgbdev->restoreState(state); } void FullBitmapOutputDev::updateAll(GfxState *state) { rgbdev->updateAll(state); } void FullBitmapOutputDev::updateCTM(GfxState *state, double m11, double m12, double m21, double m22, double m31, double m32) { rgbdev->updateCTM(state,m11,m12,m21,m22,m31,m32); gfxdev->updateCTM(state,m11,m12,m21,m22,m31,m32); } void FullBitmapOutputDev::updateLineDash(GfxState *state) { rgbdev->updateLineDash(state); } void FullBitmapOutputDev::updateFlatness(GfxState *state) { rgbdev->updateFlatness(state); } void FullBitmapOutputDev::updateLineJoin(GfxState *state) { rgbdev->updateLineJoin(state); } void FullBitmapOutputDev::updateLineCap(GfxState *state) { rgbdev->updateLineCap(state); } void FullBitmapOutputDev::updateMiterLimit(GfxState *state) { rgbdev->updateMiterLimit(state); } void FullBitmapOutputDev::updateLineWidth(GfxState *state) { rgbdev->updateLineWidth(state); } void FullBitmapOutputDev::updateStrokeAdjust(GfxState *state) { rgbdev->updateStrokeAdjust(state); } void FullBitmapOutputDev::updateFillColorSpace(GfxState *state) { rgbdev->updateFillColorSpace(state); } void FullBitmapOutputDev::updateStrokeColorSpace(GfxState *state) { rgbdev->updateStrokeColorSpace(state); } void FullBitmapOutputDev::updateFillColor(GfxState *state) { rgbdev->updateFillColor(state); } void FullBitmapOutputDev::updateStrokeColor(GfxState *state) { rgbdev->updateStrokeColor(state); } void FullBitmapOutputDev::updateBlendMode(GfxState *state) { rgbdev->updateBlendMode(state); } void FullBitmapOutputDev::updateFillOpacity(GfxState *state) { rgbdev->updateFillOpacity(state); } void FullBitmapOutputDev::updateStrokeOpacity(GfxState *state) { rgbdev->updateStrokeOpacity(state); } void FullBitmapOutputDev::updateFillOverprint(GfxState *state) { rgbdev->updateFillOverprint(state); } void FullBitmapOutputDev::updateStrokeOverprint(GfxState *state) { rgbdev->updateStrokeOverprint(state); } void FullBitmapOutputDev::updateTransfer(GfxState *state) { rgbdev->updateTransfer(state); } void FullBitmapOutputDev::updateFont(GfxState *state) { rgbdev->updateFont(state); } void FullBitmapOutputDev::updateTextMat(GfxState *state) { rgbdev->updateTextMat(state); } void FullBitmapOutputDev::updateCharSpace(GfxState *state) { rgbdev->updateCharSpace(state); } void FullBitmapOutputDev::updateRender(GfxState *state) { rgbdev->updateRender(state); } void FullBitmapOutputDev::updateRise(GfxState *state) { rgbdev->updateRise(state); } void FullBitmapOutputDev::updateWordSpace(GfxState *state) { rgbdev->updateWordSpace(state); } void FullBitmapOutputDev::updateHorizScaling(GfxState *state) { rgbdev->updateHorizScaling(state); } void FullBitmapOutputDev::updateTextPos(GfxState *state) { rgbdev->updateTextPos(state); } void FullBitmapOutputDev::updateTextShift(GfxState *state, double shift) { rgbdev->updateTextShift(state, shift); } void FullBitmapOutputDev::stroke(GfxState *state) { msg(" stroke"); rgbdev->stroke(state); } void FullBitmapOutputDev::fill(GfxState *state) { msg(" fill"); rgbdev->fill(state); } void FullBitmapOutputDev::eoFill(GfxState *state) { msg(" eoFill"); rgbdev->eoFill(state); } POPPLER_TILING_PATERN_RETURN FullBitmapOutputDev::tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep) { msg(" tilingPatternFill"); #ifdef HAVE_POPPLER return #endif rgbdev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat, bbox, x0, y0, x1, y1, xStep, yStep); } GBool FullBitmapOutputDev::functionShadedFill(GfxState *state, GfxFunctionShading *shading) { msg(" functionShadedFill"); return rgbdev->functionShadedFill(state, shading); } GBool FullBitmapOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading POPPLER_RAXIAL_MIN_MAX) { msg(" axialShadedFill"); return rgbdev->axialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); } GBool FullBitmapOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading POPPLER_RAXIAL_MIN_MAX) { msg(" radialShadedFill"); return rgbdev->radialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); } void FullBitmapOutputDev::clip(GfxState *state) { msg(" clip"); rgbdev->clip(state); } void FullBitmapOutputDev::eoClip(GfxState *state) { msg(" eoClip"); rgbdev->eoClip(state); } void FullBitmapOutputDev::clipToStrokePath(GfxState *state) { msg(" clipToStrokePath"); rgbdev->clipToStrokePath(state); } void FullBitmapOutputDev::beginStringOp(GfxState *state) { msg(" beginStringOp"); rgbdev->beginStringOp(state); } void FullBitmapOutputDev::endStringOp(GfxState *state) { msg(" endStringOp"); rgbdev->endStringOp(state); } void FullBitmapOutputDev::beginString(GfxState *state, GString *s) { msg(" beginString"); rgbdev->beginString(state, s); } void FullBitmapOutputDev::endString(GfxState *state) { msg(" endString"); rgbdev->endString(state); } void FullBitmapOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen) { msg(" drawChar"); rgbdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); } void FullBitmapOutputDev::drawString(GfxState *state, GString *s) { msg(" internal error: drawString not implemented"); rgbdev->drawString(state, s); } void FullBitmapOutputDev::endTextObject(GfxState *state) { /* FIXME: the below might render things (stroke outlines etc.) to gfxdev which might end up unflushed- should be handled similarily as drawChar() above */ msg(" endTextObject"); rgbdev->endTextObject(state); } /* TODO: these four operations below *should* do nothing, as type3 chars are drawn using operations like fill() */ GBool FullBitmapOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen) { msg(" beginType3Char"); return rgbdev->beginType3Char(state, x, y, dx, dy, code, u, uLen); } void FullBitmapOutputDev::type3D0(GfxState *state, double wx, double wy) { msg(" type3D0"); rgbdev->type3D0(state, wx, wy); } void FullBitmapOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { msg(" type3D1"); rgbdev->type3D1(state, wx, wy, llx, lly, urx, ury); } void FullBitmapOutputDev::endType3Char(GfxState *state) { msg(" endType3Char"); rgbdev->endType3Char(state); } void FullBitmapOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg) { msg(" drawImageMask"); rgbdev->drawImageMask(state, ref, str, width, height, invert, POPPLER_INTERPOLATE_ARG inlineImg); } void FullBitmapOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg) { msg(" drawImage"); rgbdev->drawImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskColors, inlineImg); } void FullBitmapOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE) { msg(" drawMaskedImage"); rgbdev->drawMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskInvert POPPLER_MASK_INTERPOLATE_ARG); } void FullBitmapOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE) { msg(" drawSoftMaskedImage"); rgbdev->drawSoftMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskColorMap POPPLER_MASK_INTERPOLATE_ARG); } void FullBitmapOutputDev::drawForm(Ref id) { msg(" drawForm"); rgbdev->drawForm(id); } void FullBitmapOutputDev::processLink(Link *link, Catalog *catalog) { msg(" processLink"); gfxdev->processLink(link, catalog); } void FullBitmapOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask) { msg(" beginTransparencyGroup"); rgbdev->beginTransparencyGroup(state, bbox, blendingColorSpace, isolated, knockout, forSoftMask); } void FullBitmapOutputDev::endTransparencyGroup(GfxState *state) { msg(" endTransparencyGroup"); rgbdev->endTransparencyGroup(state); } void FullBitmapOutputDev::paintTransparencyGroup(GfxState *state, double *bbox) { msg(" paintTransparencyGroup"); rgbdev->paintTransparencyGroup(state,bbox); } void FullBitmapOutputDev::setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor) { msg(" setSoftMask"); rgbdev->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); } void FullBitmapOutputDev::clearSoftMask(GfxState *state) { msg(" clearSoftMask"); rgbdev->clearSoftMask(state); } swftools_0.9.2+git20130725.orig/lib/pdf/bbox.c0000644000175000017500000002521312216332640017743 0ustar gawaingawain#include #include #include #include #include #include "../types.h" #include "../mem.h" typedef struct _ibbox { int xmin,ymin,xmax,ymax; struct _ibbox*next; } ibbox_t; ibbox_t* ibbox_new(int x1, int y1, int x2, int y2) { ibbox_t*b = (ibbox_t*)rfx_calloc(sizeof(ibbox_t)); b->xmin = x1; b->ymin = y1; b->xmax = x2; b->ymax = y2; return b; } void ibbox_destroy(ibbox_t*b) { while(b) { ibbox_t*next = b->next; free(b); b = next; } } ibbox_t*get_bitmap_bboxes_simple(unsigned char*alpha, int width, int height, int rowsize) { int ymin = -1; int ymax = -1; int xmin = width; int xmax = 0; int x,y; for(y=0;yxmax) xmax = right; } } ibbox_t* bbox = 0; if(xminwidth*y+x; head_t*h = rfx_calloc(sizeof(head_t)); h->magic = HEAD_MAGIC; h->nr = context->count++; h->pos = pos; h->x = x; h->y = y; h->bbox.xmin = h->bbox.xmax = x; h->bbox.ymin = h->bbox.ymax = y; h->next = context->heads; context->heads = h; if(h->next) { h->next->prev = h; } return h; } static void head_delete(context_t*context, head_t*h) { if(h->prev) { h->prev->next = h->next; } if(h->next) { h->next->prev = h->prev; } if(h==context->heads) { assert(!h->prev); context->heads = h->next; } free(h); } #define POINTS_TO_HEAD(ptr) (((head_t*)(ptr))->magic==HEAD_MAGIC) static inline void link_to(context_t*context, int from, int to) { // path compression void**data = context->group; int head = to; assert(data[head]); while(!POINTS_TO_HEAD(data[head])) { assert(data[head]!=(void*)&data[head]); // check that we're not in an infinite loop head=(void**)data[head]-(void**)data; } head_t*h = (head_t*)data[head]; int x = from%context->width; int y = from/context->width; if(x < h->bbox.xmin) h->bbox.xmin = x; if(y < h->bbox.ymin) h->bbox.ymin = y; if(x > h->bbox.xmax) h->bbox.xmax = x; if(y > h->bbox.ymax) h->bbox.ymax = y; data[from] = (void*)&data[head]; } static char ibbox_does_overlap(ibbox_t*b1, ibbox_t*b2) { if(b1->xmax < b2->xmin) return 0; if(b2->xmax < b1->xmin) return 0; if(b1->ymax < b2->ymin) return 0; if(b2->ymax < b1->ymin) return 0; return 1; } static void ibbox_expand(ibbox_t*src, ibbox_t*add) { if(add->xmin < src->xmin) src->xmin = add->xmin; if(add->ymin < src->ymin) src->ymin = add->ymin; if(add->xmax > src->xmax) src->xmax = add->xmax; if(add->ymax > src->ymax) src->ymax = add->ymax; } static inline void merge(context_t*context, int set1, int set2) { void**data = context->group; assert(data[set1]); assert(data[set2]); int head1 = set1; int head2 = set2; while(!POINTS_TO_HEAD(data[head1])) { head1=(void**)data[head1]-(void**)data; } while(!POINTS_TO_HEAD(data[head2])) { head2=(void**)data[head2]-(void**)data; } head_t*h1 = (head_t*)data[head1]; head_t*h2 = (head_t*)data[head2]; if(h1==h2) return; if(h1->rank>h2->rank) { h1->rank++; ibbox_expand(&h1->bbox,&h2->bbox); data[head2] = (void*)&data[head1]; head_delete(context, h2); } else { h2->rank++; ibbox_expand(&h2->bbox,&h1->bbox); data[head1] = (void*)&data[head2]; head_delete(context, h1); } } ibbox_t ibbox_clip(ibbox_t* outer, ibbox_t* inner) { ibbox_t i = {inner->xmin, inner->ymin, inner->xmax, inner->ymax, 0}; if(i.xmax > outer->xmax) i.xmax = outer->xmax; if(i.ymax > outer->ymax) i.ymax = outer->ymax; if(i.xmax < outer->xmin) i.xmax = outer->xmin; if(i.ymax < outer->ymin) i.ymax = outer->ymin; if(i.xmin > outer->xmax) i.xmin = outer->xmax; if(i.ymin > outer->ymax) i.ymin = outer->ymax; if(i.xmin < outer->xmin) i.xmin = outer->xmin; if(i.ymin < outer->ymin) i.ymin = outer->ymin; return i; } static void** annotate(context_t*context) { unsigned char*alpha = context->alpha; int width = context->width; int height = context->height; void** group = rfx_calloc(width*height*sizeof(void*)); context->group = group; int x,y; for(x=1;xrowsize; if(alpha[apos]) { if(group[pos-width]) link_to(context,pos,pos-width); else group[pos]=head_new(context,0,y); } for(x=1;xheads; changed = 0; while(h1) { head_t*next = h1->next; head_t*h2 = context->heads; while(h2) { if(h1!=h2) { if(ibbox_does_overlap(&h1->bbox, &h2->bbox)) { merge(context, h1->pos, h2->pos); changed = 1; break; } } h2 = h2->next; } h1 = next; } } while(changed); } typedef struct _circle_coord { S16 x,y; } circle_coord_t; static int compare_circle_coord(const void *_v1, const void *_v2) { circle_coord_t*v1=(circle_coord_t*)_v1; circle_coord_t*v2=(circle_coord_t*)_v2; return (v1->x*v1->x + v1->y*v1->y) - (v2->x*v2->x + v2->y*v2->y); } static head_t* search_vicinity(context_t*context, head_t*h, int max_radius, double*cos, double*sin) { static circle_coord_t*circle_order = 0; static int circle_order_size = 0; if(!circle_order) { circle_order_size = (max_radius*(max_radius+1))/2; circle_order = malloc(sizeof(circle_coord_t)*circle_order_size); int x,y; int i = 0; for(y=0;ygroup; int signx[4] = {-1,1,-1,1}; int signy[4] = {-1,-1,1,1}; for(t=1;tx+xx*signx[s]; int y=h->y+yy*signy[s]; if(x>=0 && y>=0 && xwidth && yheight) { int pos = y*context->width+x; if(data[pos]) { while(!POINTS_TO_HEAD(data[pos])) { pos=(void**)data[pos]-(void**)data; } head_t*new_head = (head_t*)data[pos]; if(new_head != h) { return new_head; } } } } } return 0; } static void fix_small_boxes(context_t*context) { double sintab[256]; double costab[256]; int t; for(t=0;t<256;t++) { sintab[t] = sin(t*M_PI/128); costab[t] = cos(t*M_PI/128); } head_t*h = context->heads; while(h) { h->seen = 0; h = h->next; } char changed; do { changed = 0; head_t*h = context->heads; while(h) { head_t*next = h->next; if(!h->seen) { if(h->bbox.xmax - h->bbox.xmin < 32 || h->bbox.ymax - h->bbox.ymin < 32) { head_t*other = search_vicinity(context, h, 64, costab, sintab); if(other) { merge(context, h->pos, other->pos); changed = 1; break; } else { //printf("nothing in the vicinity of %d,%d,%d,%d\n", h->bbox); h->seen = 1; } } /*else { printf("area %d,%d,%d,%d is large enough (%dx%d)\n", h->bbox.xmin, h->bbox.ymin, h->bbox.xmax, h->bbox.ymax, h->bbox.xmax - h->bbox.xmin, h->bbox.ymax - h->bbox.ymin); } */ } h = next; } } while(changed); } static void display(context_t*context) { int width = context->width; int height = context->height; void**group = context->group; int x,y; for(y=0;ynr); } else { printf("x%02d ", (void**)group[y*width+x]-(void**)group); } } printf("\n"); } head_t*h = context->heads; while(h) { printf("head: %d\n", h->nr); printf(" pos: %d/%d\n", h->pos%width, h->pos/width); printf(" bbox: [%d/%d,%d/%d]\n", h->bbox.xmin, h->bbox.ymin, h->bbox.xmax, h->bbox.ymax); h = h->next; } } ibbox_t*get_bitmap_bboxes(unsigned char*alpha, int width, int height, int rowsize) { int size = width*height; if(width<=1 || height<=1) return get_bitmap_bboxes_simple(alpha, width, height, rowsize); context_t context; context.alpha = alpha; context.rowsize = rowsize; context.width = width; context.height = height; context.heads = 0; context.count = 1; void**group = annotate(&context); fix_small_boxes(&context); overlap_bboxes(&context); #ifdef MAIN display(&context); #endif ibbox_t*bboxes = 0; head_t*h = context.heads; while(h) { head_t*next = h->next; ibbox_t*bbox = malloc(sizeof(ibbox_t)); memcpy(bbox, &h->bbox, sizeof(ibbox_t)); /* ibbox_t defines the open upper bound */ bbox->xmax++; bbox->ymax++; bbox->next = bboxes; bboxes = bbox; free(h); h = next; } free(context.group); return bboxes; } #ifdef MAIN int main(int argn, char*argv[]) { unsigned char alpha[8*8]= "\0\0\1\0\0\0\0\0" "\1\0\0\1\0\1\0\0" "\0\0\0\0\0\0\1\0" "\0\0\1\0\1\0\0\0" "\1\0\1\0\1\0\0\0" "\1\0\1\1\1\0\0\1" "\1\0\0\0\0\0\1\0" "\1\1\1\0\0\0\0\0"; get_bitmap_bboxes(alpha, 8,8, 8); } #endif swftools_0.9.2+git20130725.orig/lib/pdf/popplercompat.h0000644000175000017500000000323112216332640021677 0ustar gawaingawain#ifndef __popplercompat_h__ #define __popplercompat_h__ #include "../../config.h" #ifdef HAVE_POPPLER #define POPPLER_INTERPOLATE GBool interpolate, #define POPPLER_INTERPOLATE_ARG interpolate, #define POPPLER_MASK_INTERPOLATE , GBool maskInterpolate #define POPPLER_MASK_INTERPOLATE_ARG , maskInterpolate #else #define POPPLER_INTERPOLATE #define POPPLER_INTERPOLATE_ARG #define POPPLER_MASK_INTERPOLATE #define POPPLER_MASK_INTERPOLATE_ARG #endif #ifdef HAVE_POPPLER #define POPPLER_TILING_PATERN_RETURN GBool #define POPPLER_TILING_PATERN_GFX #define POPPLER_TILING_PATERN_GFX_ARG #else #define POPPLER_TILING_PATERN_RETURN void #if (xpdfMajorVersion*10000 + xpdfMinorVersion*100 + xpdfUpdateVersion) < 30207 #define POPPLER_TILING_PATERN_GFX #define POPPLER_TILING_PATERN_GFX_ARG #else #define POPPLER_TILING_PATERN_GFX Gfx *gfx, #define POPPLER_TILING_PATERN_GFX_ARG gfx, #endif #endif #ifdef HAVE_POPPLER char* mktmpname(char*ptr); #endif #ifdef HAVE_POPPLER #define POPPLER_RAXIAL_MIN_MAX , double min, double max #define POPPLER_RAXIAL_MIN_MAX_ARG , min, max #else #define POPPLER_RAXIAL_MIN_MAX #define POPPLER_RAXIAL_MIN_MAX_ARG #endif #ifdef HAVE_POPPLER #include #include #else #include "xpdf/config.h" #include "gfile.h" #include "GString.h" #endif #include "Object.h" #include "Stream.h" #include "Array.h" #include "Dict.h" #include "XRef.h" #include "Catalog.h" #include "Page.h" #include "PDFDoc.h" #include "Error.h" #include "Link.h" #include "OutputDev.h" #include "GfxFont.h" #include "GfxState.h" //#include "NameToUnicodeTable.h" #include "GlobalParams.h" #endif swftools_0.9.2+git20130725.orig/lib/pdf/InfoOutputDev.cc0000644000175000017500000006463612216332640021743 0ustar gawaingawain#include "../../config.h" #include "Object.h" #include "InfoOutputDev.h" #include "SplashOutputDev.h" #include "GfxState.h" #include "CommonOutputDev.h" #include "../log.h" #include "../types.h" #include "../q.h" #include "../gfxdevice.h" #include "../gfxfont.h" #include #include int config_unique_unicode = 1; int config_poly2bitmap_pass1 = 0; int config_skewedtobitmap_pass1 = 0; int config_addspace = 1; int config_fontquality = 10; int config_bigchar = 0; int config_marker_glyph = 0; int config_normalize_fonts = 0; int config_remove_font_transforms = 0; int config_remove_invisible_outlines = 0; static void* fontclass_clone(const void*_m) { if(_m==0) return 0; const fontclass_t*m1=(const fontclass_t*)_m; fontclass_t*m2 = (fontclass_t*)malloc(sizeof(fontclass_t)); *m2 = *m1; m2->id = strdup(m1->id); return m2; } static unsigned int fontclass_hash(const void*_m) { if(!_m) return 0; const fontclass_t*m = (fontclass_t*)_m; unsigned int h=0; if(config_remove_font_transforms) { U32 m00 = (*(U32*)&m->m00)&0xfff00000; U32 m01 = (*(U32*)&m->m01)&0xfff00000; U32 m10 = (*(U32*)&m->m10)&0xfff00000; U32 m11 = (*(U32*)&m->m11)&0xfff00000; h = crc32_add_bytes(h, (char*)&m00, sizeof(m00)); h = crc32_add_bytes(h, (char*)&m01, sizeof(m01)); h = crc32_add_bytes(h, (char*)&m10, sizeof(m10)); h = crc32_add_bytes(h, (char*)&m11, sizeof(m11)); } if(config_remove_invisible_outlines) { h = crc32_add_bytes(h, (char*)&m->alpha, 1); } return crc32_add_string(h, m->id); } static void fontclass_destroy(void*_m) { fontclass_t*m = (fontclass_t*)_m; free(m->id);m->id=0; free(m); } static char fontclass_equals(const void*_m1, const void*_m2) { const fontclass_t*m1=(const fontclass_t*)_m1; const fontclass_t*m2=(const fontclass_t*)_m2; if(!m1 || !m2) return m1==m2; if(config_remove_font_transforms) { /* we do a binary comparison of the float32 bits here instead of a numerical comparison to prevent the compiler from e.g. removing the (float) cast during optimization, which would break the equivalence between equals() and hash() (as the hash is derived from the float32 values) */ if(((*(U32*)&m1->m00 ^ *(U32*)&m2->m00)&0xfff00000) || ((*(U32*)&m1->m01 ^ *(U32*)&m2->m01)&0xfff00000) || ((*(U32*)&m1->m10 ^ *(U32*)&m2->m10)&0xfff00000) || ((*(U32*)&m1->m11 ^ *(U32*)&m2->m11)&0xfff00000)) return 0; } if(config_remove_invisible_outlines) { if(m1->alpha != m2->alpha) return 0; } return !strcmp(m1->id, m2->id); } static type_t fontclass_type = { fontclass_equals, fontclass_hash, fontclass_clone, fontclass_destroy }; InfoOutputDev::InfoOutputDev(XRef*xref) { num_links = 0; num_jpeg_images = 0; num_ppm_images = 0; num_chars = 0; num_fonts = 0; num_polygons= 0; num_layers = 0; num_text_breaks = 0; currentglyph = 0; previous_was_char = 0; SplashColor white = {255,255,255}; splash = new SplashOutputDev(splashModeRGB8,320,0,white,0,0); splash->startDoc(xref); last_font = 0; current_type3_font = 0; fontcache = dict_new2(&fontclass_type); } InfoOutputDev::~InfoOutputDev() { GHashIter*i; DICT_ITERATE_DATA(this->fontcache, FontInfo*, fd) { delete fd; } dict_destroy(this->fontcache);this->fontcache=0; delete splash;splash=0; } void FontInfo::grow(int size) { if(size >= this->num_glyphs) { this->glyphs = (GlyphInfo**)realloc(this->glyphs, sizeof(GlyphInfo*)*(size)); memset(&this->glyphs[this->num_glyphs], 0, sizeof(SplashPath*)*((size)-this->num_glyphs)); this->num_glyphs = size; } } FontInfo::FontInfo(fontclass_t*fontclass) { if(config_remove_font_transforms) { char buf[128]; static int counter=1; sprintf(buf, "font%d", counter++); this->id = strdup(buf); } else { this->id = strdup(fontclass->id); } this->fontclass = (fontclass_t*)fontclass_type.dup(fontclass); this->seen = 0; this->num_glyphs = 0; this->glyphs = 0; this->gfxfont = 0; this->space_char = -1; this->ascender = 0; this->descender = 0; this->scale = 1.0; this->num_chars = 0; this->num_spaces = 0; resetPositioning(); } FontInfo::~FontInfo() { if(this->id) {free(this->id);this->id=0;} this->font = 0; int t; for(t=0;tpath;glyphs[t]->path = 0; delete glyphs[t]; glyphs[t]=0; } } free(glyphs);glyphs=0; if(this->gfxfont) gfxfont_free(this->gfxfont); if(this->fontclass) { fontclass_type.free(this->fontclass); this->fontclass=0; } } char FontInfo::usesSpaces() { if(this->num_chars && this->num_spaces / (double)this->num_chars >= 0.05) { return 1; } return 0; } void FontInfo::resetPositioning() { this->lastchar = -1; this->lastx = 0; this->lasty = 0; this->lastadvance = 0; } static int findSpace(gfxfont_t*font) { int first_space = -1; int t; for(t=0;tnum_glyphs;t++) { gfxglyph_t*g = &font->glyphs[t]; if(GLYPH_IS_SPACE(g)) { if(g->unicode == 32) { /* now that we have found a space char, make sure it's unique */ int s; for(s=0;snum_glyphs;s++) { if(s!=t && font->glyphs[s].unicode==32) font->glyphs[s].unicode=0; } return t; } } } return -1; } static int addSpace(gfxfont_t*font) { /* first, make sure the new space char is the only char that'll use unicode 32 */ int t; for(t=0;tnum_glyphs;t++) { if(font->glyphs[t].unicode==32) font->glyphs[t].unicode=0; } // createGfxFont reserves space for up to two extra characters, so we don't need to realloc. int space_glyph = font->num_glyphs++; gfxglyph_t*g = &font->glyphs[space_glyph]; memset(g, 0, sizeof(*g)); g->unicode = 32; g->advance = fabs(font->ascent + font->descent) / 5.0; if(font->max_unicode > 32) font->unicode2glyph[32] = space_glyph; #if 0 g->line = gfxline_makerectangle(0, -font->ascent, g->advance, font->descent); #endif return space_glyph; } static void transform_glyph(gfxglyph_t*g, fontclass_t*mm, double scale) { gfxmatrix_t m; m.m00 = mm->m00 * scale; m.m01 = mm->m01 * scale; m.m10 = mm->m10 * scale; m.m11 = mm->m11 * scale; m.tx = 0; m.ty = 0; if(m.m00>0) g->advance *= m.m00; g->line = gfxline_clone(g->line); gfxline_transform(g->line, &m); } void gfxfont_transform(gfxfont_t*font, gfxmatrix_t*m) { int t; for(t=0;tnum_glyphs;t++) { gfxglyph_t*g = &font->glyphs[t]; gfxline_t*line = g->line; gfxline_transform(line, m); if(m->m00>0) g->advance *= m->m00; } } gfxbbox_t gfxfont_bbox(gfxfont_t*font) { gfxbbox_t tmp = {0,0,0,0}; int t; for(t=0;tnum_glyphs;t++) { gfxline_t*line = font->glyphs[t].line; gfxbbox_t b = gfxline_getbbox(line); tmp = gfxbbox_expand_to_bbox(tmp, b); } return tmp; } gfxfont_t* FontInfo::createGfxFont() { gfxfont_t*font = (gfxfont_t*)rfx_calloc(sizeof(gfxfont_t)); font->glyphs = (gfxglyph_t*)malloc(sizeof(gfxglyph_t)*(this->num_glyphs+2)); memset(font->glyphs, 0, sizeof(gfxglyph_t)*this->num_glyphs); font->id = 0; int t; double quality = (INTERNAL_FONT_SIZE * 200 / config_fontquality) / this->max_size; //printf("%d glyphs\n", font->num_glyphs); font->num_glyphs = 0; font->ascent = fabs(this->ascender); font->descent = fabs(this->descender); for(t=0;tnum_glyphs;t++) { if(this->glyphs[t]) { SplashPath*path = this->glyphs[t]->path; int len = path?path->getLength():0; //printf("glyph %d) %08x (%d line segments)\n", t, path, len); gfxglyph_t*glyph = &font->glyphs[font->num_glyphs]; this->glyphs[t]->glyphid = font->num_glyphs; glyph->unicode = this->glyphs[t]->unicode; gfxdrawer_t drawer; gfxdrawer_target_gfxline(&drawer); int s; int count = 0; double xmax = 0; for(s=0;sgetPoint(s, &x, &y, &f); if(!s || x > xmax) xmax = x; if(f&splashPathFirst) { drawer.moveTo(&drawer, x, y); } if(f&splashPathCurve) { double x2,y2; path->getPoint(++s, &x2, &y2, &f); if(f&splashPathCurve) { double x3,y3; path->getPoint(++s, &x3, &y3, &f); gfxdraw_cubicTo(&drawer, x, y, x2, y2, x3, y3, quality); } else { drawer.splineTo(&drawer, x, y, x2, y2); } } else { drawer.lineTo(&drawer, x, y); } // printf("%f %f %s %s\n", x, y, (f&splashPathCurve)?"curve":"", // (f&splashPathFirst)?"first":"", // (f&splashPathLast)?"last":""); } glyph->line = (gfxline_t*)drawer.result(&drawer); if(this->glyphs[t]->advance>0) { glyph->advance = this->glyphs[t]->advance; } else { glyph->advance = fmax(xmax, 0); } if(config_bigchar) { double max = this->glyphs[t]->advance_max; if(max>0 && max > glyph->advance) { glyph->advance = max; } } font->num_glyphs++; } } if(config_remove_font_transforms) { gfxmatrix_t glyph_transform; glyph_transform.m00 = fontclass->m00; glyph_transform.m01 = fontclass->m01; glyph_transform.m10 = fontclass->m10; glyph_transform.m11 = fontclass->m11; glyph_transform.tx = 0; glyph_transform.ty = 0; /* apply the font transformation to the font */ gfxfont_transform(font, &glyph_transform); gfxbbox_t total = gfxfont_bbox(font); font->ascent = total.ymax; font->descent = -total.ymin; } if(config_normalize_fonts) { /* make all chars 1024 high */ gfxbbox_t bbox = gfxfont_bbox(font); double height = bbox.ymax - bbox.ymin; double scale = 1.0; if(height>1e-5) { scale = 1024.0 / height; } this->scale = 1.0 / scale; gfxmatrix_t scale_matrix = {scale,0,0, 0,scale,0}; gfxfont_transform(font, &scale_matrix); font->ascent *= scale; font->descent *= scale; } if(config_remove_invisible_outlines) { /* for OCR docs: remove the outlines of characters that are only ever displayed with alpha=0 */ if(!fontclass->alpha) { for(t=0;tnum_glyphs;t++) { gfxglyph_t*g = &font->glyphs[t]; gfxline_t*line = font->glyphs[t].line; gfxline_free(g->line); g->line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)); g->line->type = gfx_moveTo; g->line->x = g->advance; } } } return font; } static float find_average_glyph_advance(gfxfont_t*f) { if(!f->num_glyphs) return 0.0; float*values = (float*)malloc(sizeof(float)*f->num_glyphs); int t; for(t=0;tnum_glyphs;t++) { values[t] = f->glyphs[t].advance; } float m = medianf(values, f->num_glyphs); free(values); return m; } gfxfont_t* FontInfo::getGfxFont() { if(!this->gfxfont) { this->gfxfont = this->createGfxFont(); this->gfxfont->id = strdup(this->id); this->space_char = findSpace(this->gfxfont); this->average_advance = find_average_glyph_advance(this->gfxfont); if(this->space_char>=0) { msg(" Font %s has space char %d (unicode=%d)", this->id, this->space_char, this->gfxfont->glyphs[this->space_char].unicode); } else if(config_addspace) { this->space_char = addSpace(this->gfxfont); msg(" Appending space char to font %s, position %d, width %f", this->gfxfont->id, this->space_char, this->gfxfont->glyphs[this->space_char].advance); } gfxfont_fix_unicode(this->gfxfont, config_unique_unicode); /* optionally append a marker glyph */ if(config_marker_glyph) { msg(" Appending marker char to font %s, position %d, unicode %d", this->gfxfont->id, this->gfxfont->num_glyphs, config_marker_glyph); gfxglyph_t*g = &this->gfxfont->glyphs[this->gfxfont->num_glyphs++]; g->name = 0; g->unicode = config_marker_glyph; g->advance = 2048; g->line = (gfxline_t*)rfx_calloc(sizeof(gfxline_t)); g->line->type = gfx_moveTo; g->line->x = g->advance; } } return this->gfxfont; } GBool InfoOutputDev::upsideDown() {return gTrue;} GBool InfoOutputDev::useDrawChar() {return gTrue;} GBool InfoOutputDev::interpretType3Chars() {return gTrue;} GBool InfoOutputDev::useTilingPatternFill() {return gFalse;} GBool InfoOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data), void *abortCheckCbkData) { this->page = page; return gTrue; } void InfoOutputDev::startPage(int pageNum, GfxState *state) { PDFRectangle *r = this->page->getCropBox(); double x1,y1,x2,y2; state->transform(r->x1,r->y1,&x1,&y1); state->transform(r->x2,r->y2,&x2,&y2); if(x2x1 = (int)x1; this->y1 = (int)y1; this->x2 = (int)x2; this->y2 = (int)y2; msg(" Generating info structure for page %d", pageNum); num_links = 0; num_jpeg_images = 0; num_ppm_images = 0; num_chars = 0; num_fonts = 0; num_polygons= 0; num_layers = 0; average_char_size = 0; } void InfoOutputDev::endPage() { if(num_chars) average_char_size /= num_chars; } void InfoOutputDev::drawLink(Link *link, Catalog *catalog) { num_links++; } /* } else if(!strcmp(key,"fontquality")) { this->config_fontquality = atof(value); if(this->config_fontquality<=1) this->config_fontquality=1; } else if(!strcmp(key,"bigchar")) { this->config_bigchar = atoi(value); } */ char*getFontID(GfxFont*font) { Ref*ref = font->getID(); GString*gstr = font->getName(); char* fname = gstr==0?0:gstr->getCString(); char buf[128]; if(fname==0) { if(font->getType() == fontType3) { sprintf(buf, "t3font-%d-%d", ref->num, ref->gen); } else { sprintf(buf, "font-%d-%d", ref->num, ref->gen); } } else { sprintf(buf, "%s-%d-%d", fname, ref->num, ref->gen); } return strdup(buf); } gfxmatrix_t gfxmatrix_from_state(GfxState*state) { double* ctm = state->getCTM(); double fontSize = state->getFontSize(); double*textMat = state->getTextMat(); /* taking the absolute value of horizScaling seems to be required for some italic fonts. FIXME: SplashOutputDev doesn't need this- why? */ double hscale = fabs(state->getHorizScaling()); // from xpdf-3.02/SplashOutputDev:updateFont double mm11 = textMat[0] * fontSize * hscale; double mm12 = textMat[1] * fontSize * hscale; double mm21 = textMat[2] * fontSize; double mm22 = textMat[3] * fontSize; // multiply with ctm, like state->getFontTransMat() does gfxmatrix_t m; m.m00 = (ctm[0]*mm11 + ctm[2]*mm12) / INTERNAL_FONT_SIZE; m.m01 = (ctm[1]*mm11 + ctm[3]*mm12) / INTERNAL_FONT_SIZE; m.m10 = (ctm[0]*mm21 + ctm[2]*mm22) / INTERNAL_FONT_SIZE; m.m11 = (ctm[1]*mm21 + ctm[3]*mm22) / INTERNAL_FONT_SIZE; m.tx = 0; m.ty = 0; return m; } void InfoOutputDev::updateTextMat(GfxState*state) { } GBool InfoOutputDev::needNonText() { /* this switches off certain expensive operations, like pattern fill and forms */ return gFalse; } void InfoOutputDev::updateFont(GfxState *state) { GfxFont*font = state->getFont(); if(!font) { current_splash_font = 0; return; } if(font->getType() == fontType3) { current_splash_font = 0; return; } GfxState* state2 = state->copy(); state2->setPath(0); state2->setCTM(1.0,0,0,1.0,0,0); splash->updateCTM(state2, 0,0,0,0,0,0); state2->setTextMat(1.0,0,0,1.0,0,0); state2->setFont(font, 1024.0); splash->doUpdateFont(state2); current_splash_font = splash->getCurrentFont(); delete state2; } double matrix_scale_factor(gfxmatrix_t*m) { double l1 = sqrt(m->m00 * m->m00 + m->m01 * m->m01); double l2 = sqrt(m->m10 * m->m10 + m->m11 * m->m11); return (l1+l2)/2.0; } #ifdef __GNUC__ int __attribute__((noinline)) font_classify(fontclass_t*out, gfxmatrix_t*in, const char*id, gfxcolor_t* color) #else int font_classify(fontclass_t*out, gfxmatrix_t*in, const char*id, gfxcolor_t* color) #endif { if(!config_remove_font_transforms) { out->m00 = 1.0; out->m11 = 1.0; out->m01 = 0.0; out->m10 = 0.0; } else { double l = matrix_scale_factor(in); if(l < 1e-10) { /* treat all singularity characters the same */ memset(out, 0, sizeof(*out)); l = 0; } else { out->m00 = in->m00 / l; out->m10 = in->m10 / l; out->m01 = -in->m01 / l; out->m11 = -in->m11 / l; } if(!color->a) { /* for invisible characters, transforms don't need to be that precise- use only 3 bits precision for mantissa. */ /* 0x80000000 //sign 0x78000000 //exponent 0x07ffffff //mantissa */ *(U32*)&out->m00 = (*(U32*)&out->m00)&0xffe00000; *(U32*)&out->m01 = (*(U32*)&out->m01)&0xffe00000; *(U32*)&out->m10 = (*(U32*)&out->m10)&0xffe00000; *(U32*)&out->m11 = (*(U32*)&out->m11)&0xffe00000; } } out->id = (char*)id; out->alpha = color->a?1:0; return 1; } void fontclass_print(fontclass_t*cls) { printf("[%f %f %f %f] %s alpha=%d\n", cls->m00, cls->m01, cls->m10, cls->m11, cls->id, cls->alpha ); } gfxcolor_t gfxstate_getfontcolor(GfxState*state) { /* FIXME: instead of duplicating BitmapOutputDev's and VectorOutputDev's transparent character logic here, we should move this code to CommonOutputDev and call it from all three places */ gfxcolor_t col = gfxstate_getfillcolor(state); /* HACK: if skewedtobitmap is on, weirdly rotated characters will be drawn transparently in BitmapOutputDev. In order to anticipate this, we duplicate the logic here */ if(config_remove_invisible_outlines && config_skewedtobitmap_pass1 && text_matrix_is_skewed(state)) { col.a = 0; } if(state->getRender() == RENDER_INVISIBLE) { col.a = 0; } if(config_poly2bitmap_pass1 && (state->getRender()&3)) { /* with poly2bitmap, stroke or stroke+fill characters are drawn to the bitmap and potentially overlaid with a transparent character. duplicate that logic here. */ col.a = 0; } return col; } static inline fontclass_t fontclass_from_state(GfxState*state) { fontclass_t cls; gfxcolor_t col = gfxstate_getfontcolor(state); char*id = getFontID(state->getFont()); gfxmatrix_t m = gfxmatrix_from_state(state); font_classify(&cls, &m, id, &col); return cls; } static inline void fontclass_clear(fontclass_t*cls) { free(cls->id);cls->id=0; } FontInfo* InfoOutputDev::getOrCreateFontInfo(GfxState*state) { GfxFont*font = state->getFont(); fontclass_t fontclass = fontclass_from_state(state); FontInfo* fontinfo = (FontInfo*)dict_lookup(this->fontcache, &fontclass); if(!fontinfo) { fontinfo = new FontInfo(&fontclass); dict_put(this->fontcache, &fontclass, fontinfo); fontinfo->font = font; fontinfo->max_size = 0; if(current_splash_font) { fontinfo->ascender = current_splash_font->ascender; fontinfo->descender = current_splash_font->descender; } else { fontinfo->ascender = fontinfo->descender = 0; } num_fonts++; } if(last_font && fontinfo!=last_font) { last_font->resetPositioning(); } this->last_font = fontinfo; fontclass_clear(&fontclass); return fontinfo; } FontInfo* InfoOutputDev::getFontInfo(GfxState*state) { fontclass_t fontclass = fontclass_from_state(state); FontInfo*result = (FontInfo*)dict_lookup(this->fontcache, &fontclass); if(!result) { printf("NOT FOUND: "); fontclass_print(&fontclass); } fontclass_clear(&fontclass); return result; } gfxmatrix_t FontInfo::get_gfxmatrix(GfxState*state) { gfxmatrix_t m = gfxmatrix_from_state(state); if(!config_remove_font_transforms) { return m; } else { double scale = matrix_scale_factor(&m) * this->scale; gfxmatrix_t m = {scale, 0, 0, 0, -scale, 0}; return m; } } void InfoOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen) { double m11,m21,m12,m22; state->getFontTransMat(&m11, &m12, &m21, &m22); m11 *= state->getHorizScaling(); m21 *= state->getHorizScaling(); double lenx = sqrt(m11*m11 + m12*m12); double leny = sqrt(m21*m21 + m22*m22); double len = lenx>leny?lenx:leny; FontInfo*fontinfo = getOrCreateFontInfo(state); if(!fontinfo) { msg(" Internal error: No fontinfo for font"); return; //error } if(!current_splash_font) { msg(" Internal error: No current splash fontinfo"); return; //error } if(fontinfo->max_size < len) { fontinfo->max_size = len; } fontinfo->num_chars++; if(uLen && u[0]==32) { fontinfo->num_spaces++; } average_char_size += fmax(lenx,leny); num_chars++; if(!previous_was_char) num_layers++; previous_was_char=1; fontinfo->grow(code+1); GlyphInfo*g = fontinfo->glyphs[code]; if(!g) { g = fontinfo->glyphs[code] = new GlyphInfo(); g->advance_max = 0; current_splash_font->last_advance = -1; g->path = current_splash_font->getGlyphPath(code); g->advance = current_splash_font->last_advance; g->unicode = 0; } if(uLen && ((u[0]>=32 && u[0]unicode) || !g->unicode)) { g->unicode = u[0]; } if(fontinfo->lastchar>=0 && fontinfo->lasty == y) { double xshift = (x - fontinfo->lastx); if(xshift>=0 && xshift > g->advance_max) { g->advance_max = xshift; } } else { num_text_breaks++; } fontinfo->lastx = x; fontinfo->lasty = y; fontinfo->lastchar = code; fontinfo->lastadvance = g->advance; } static char path_is_rectangular(GfxState* state) { GfxPath * path = state->getPath(); int num = path->getNumSubpaths(); if(num!=1) return 0; GfxSubpath*subpath = path->getSubpath(0); int subnum = path->getSubpath(0)->getNumPoints(); if(subnum>5) return 0; int s; for(s=1;sgetCurve(s)) return 0; if(subpath->getX(s) != subpath->getX(s-1) && subpath->getY(s) != subpath->getY(s-1)) { return 0; } } return 1; } void InfoOutputDev::fill(GfxState *state) { if(!path_is_rectangular(state)) previous_was_char=0; num_polygons++; } void InfoOutputDev::eoFill(GfxState *state) { if(!path_is_rectangular(state)) previous_was_char=0; num_polygons++; } GBool InfoOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen) { GfxFont*font = state->getFont(); if(!font) return gTrue; if(font->getType() != fontType3) return gTrue; current_splash_font = 0; fontclass_t fontclass = fontclass_from_state(state); FontInfo* fontinfo = (FontInfo*)dict_lookup(this->fontcache, &fontclass); if(!fontinfo) { fontinfo = new FontInfo(&fontclass); dict_put(this->fontcache, &fontclass, fontinfo); fontinfo->font = font; fontinfo->max_size = 0; num_fonts++; } fontclass_clear(&fontclass); current_type3_font = fontinfo; fontinfo->grow(code+1); if(!fontinfo->glyphs[code]) { currentglyph = fontinfo->glyphs[code] = new GlyphInfo(); currentglyph->unicode = uLen?u[0]:0; currentglyph->path = new SplashPath(); currentglyph->x1=0; currentglyph->y1=0; currentglyph->x2=dx; currentglyph->y2=dy; currentglyph->advance=dx; return gFalse; } else { return gTrue; } } void InfoOutputDev::type3D0(GfxState *state, double wx, double wy) { currentglyph->x1=0; currentglyph->y1=0; currentglyph->x2=wx; currentglyph->y2=wy; } void InfoOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { if(-lly>current_type3_font->descender) current_type3_font->descender = -lly; if(ury>current_type3_font->ascender) current_type3_font->ascender = ury; currentglyph->x1=llx; currentglyph->y1=lly; currentglyph->x2=urx; currentglyph->y2=ury; } void InfoOutputDev::endType3Char(GfxState *state) { double x1 = currentglyph->x1; double y1 = currentglyph->y1; double x2 = currentglyph->x2; double y2 = currentglyph->y2; currentglyph->path->moveTo(x1,y1); currentglyph->path->lineTo(x2,y1); currentglyph->path->lineTo(x2,y2); currentglyph->path->lineTo(x1,y2); currentglyph->path->close(); } void InfoOutputDev::saveState(GfxState *state) { updateAll(state); } void InfoOutputDev::restoreState(GfxState *state) { updateAll(state); } void InfoOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg) { previous_was_char=0; if(str->getKind()==strDCT) num_jpeg_images++; else num_ppm_images++; OutputDev::drawImageMask(state,ref,str,width,height,invert, POPPLER_INTERPOLATE_ARG inlineImg); } void InfoOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg) { previous_was_char=0; if(str->getKind()==strDCT) num_jpeg_images++; else num_ppm_images++; OutputDev::drawImage(state,ref,str,width,height,colorMap, POPPLER_INTERPOLATE_ARG maskColors,inlineImg); } void InfoOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE) { previous_was_char=0; if(str->getKind()==strDCT) num_jpeg_images++; else num_ppm_images++; OutputDev::drawMaskedImage(state,ref,str,width,height,colorMap, POPPLER_INTERPOLATE_ARG maskStr,maskWidth,maskHeight,maskInvert POPPLER_MASK_INTERPOLATE_ARG); } void InfoOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE) { previous_was_char=0; if(str->getKind()==strDCT) num_jpeg_images++; else num_ppm_images++; OutputDev::drawSoftMaskedImage(state,ref,str,width,height,colorMap, POPPLER_INTERPOLATE_ARG maskStr,maskWidth,maskHeight,maskColorMap POPPLER_MASK_INTERPOLATE_ARG); } void InfoOutputDev::dumpfonts(gfxdevice_t*dev) { GHashIter*i; GString*key; DICT_ITERATE_DATA(fontcache, FontInfo*, info) { dev->addfont(dev, info->getGfxFont()); } } swftools_0.9.2+git20130725.orig/lib/pdf/Makefile.in0000644000175000017500000002653612216332640020723 0ustar gawaingawain# Generated automatically from Makefile.in by configure. top_builddir = ../.. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ../../Makefile.common all-local: ../libgfxpdf$(A) pdf2swf$(E) pdf2jpeg$(E) all: ../libgfxpdf$(A) libgfxpdf: ../libgfxpdf$(A) libgfxpdf_objects = VectorGraphicOutputDev.$(O) BitmapOutputDev.$(O) FullBitmapOutputDev.$(O) CharOutputDev.$(O) CommonOutputDev.$(O) InfoOutputDev.$(O) XMLOutputDev.$(O) pdf.$(O) fonts.$(O) bbox.$(O) popplercompat.$(O) xpdf_in_source = @xpdf_in_source@ xpdf_objects = xpdf/GHash.$(O) xpdf/GList.$(O) xpdf/GString.$(O) xpdf/gmem.$(O) xpdf/gfile.$(O) \ xpdf/FoFiTrueType.$(O) xpdf/FoFiType1.$(O) xpdf/FoFiType1C.$(O) xpdf/FoFiBase.$(O) xpdf/FoFiEncodings.$(O) \ xpdf/OutputDev.$(O) xpdf/PDFDoc.$(O) xpdf/Error.$(O) xpdf/Stream.$(O) xpdf/Object.$(O) \ xpdf/Decrypt.$(O) xpdf/Array.$(O) xpdf/XRef.$(O) xpdf/Dict.$(O) xpdf/Parser.$(O) \ xpdf/Lexer.$(O) xpdf/Outline.$(O) xpdf/PDFDocEncoding.$(O) xpdf/Catalog.$(O) \ xpdf/Link.$(O) xpdf/GlobalParams.$(O) xpdf/JBIG2Stream.$(O) xpdf/Page.$(O) xpdf/JPXStream.$(O) \ xpdf/JArithmeticDecoder.$(O) xpdf/Gfx.$(O) xpdf/GfxFont.$(O) xpdf/CMap.$(O) xpdf/CharCodeToUnicode.$(O) \ xpdf/PSTokenizer.$(O) xpdf/FontEncodingTables.$(O) xpdf/BuiltinFont.$(O) xpdf/BuiltinFontTables.$(O) \ xpdf/GfxState.$(O) xpdf/Function.$(O) xpdf/Annot.$(O) xpdf/NameToCharCode.$(O) xpdf/UnicodeMap.$(O) \ xpdf/SecurityHandler.$(O) xpdf/TextOutputDev.$(O) xpdf/UnicodeTypeTable.$(O) #xpdf/OptionalContent.$(O) splash_in_source = @splash_in_source@ splash_objects = xpdf/SplashOutputDev.$(O) xpdf/SplashFont.$(O) xpdf/SplashState.$(O) xpdf/Splash.$(O) \ xpdf/SplashBitmap.$(O) xpdf/SplashClip.$(O) xpdf/SplashPattern.$(O) \ xpdf/SplashFontEngine.$(O) xpdf/SplashFontFile.$(O) xpdf/SplashFontFileID.$(O) \ xpdf/SplashScreen.$(O) xpdf/SplashPath.$(O) xpdf/SplashXPath.$(O) xpdf/SplashXPathScanner.$(O) \ xpdf/SplashFTFontEngine.$(O) xpdf/SplashFTFontFile.$(O) xpdf/SplashFTFont.$(O) xpdf_include = @xpdf_include@ popplercompat.$(O): popplercompat.cc $(C) -I ./ $(xpdf_include) popplercompat.cc -o $@ fonts.$(O): fonts.c $(C) fonts.c -o $@ bbox.$(O): bbox.c $(C) bbox.c -o $@ cmyk.$(O): cmyk.cc $(CC) -I ./ $(xpdf_include) cmyk.cc -o $@ CommonOutputDev.$(O): CommonOutputDev.cc InfoOutputDev.h $(CC) -I ./ $(xpdf_include) CommonOutputDev.cc -o $@ VectorGraphicOutputDev.$(O): VectorGraphicOutputDev.cc VectorGraphicOutputDev.h CharOutputDev.h CommonOutputDev.h InfoOutputDev.h ../gfxpoly.h $(CC) -I ./ $(xpdf_include) VectorGraphicOutputDev.cc -o $@ CharOutputDev.$(O): CharOutputDev.cc CharOutputDev.h CommonOutputDev.h InfoOutputDev.h ../gfxpoly.h $(CC) -I ./ $(xpdf_include) CharOutputDev.cc -o $@ InfoOutputDev.$(O): InfoOutputDev.cc InfoOutputDev.h $(CC) -I ./ $(xpdf_include) InfoOutputDev.cc -o $@ BitmapOutputDev.$(O): BitmapOutputDev.cc BitmapOutputDev.h CommonOutputDev.h InfoOutputDev.h $(CC) -I ./ $(xpdf_include) BitmapOutputDev.cc -o $@ XMLOutputDev.$(O): XMLOutputDev.cc XMLOutputDev.h xpdf/TextOutputDev.h $(CC) -I ./ $(xpdf_include) XMLOutputDev.cc -o $@ FullBitmapOutputDev.$(O): FullBitmapOutputDev.cc FullBitmapOutputDev.h CommonOutputDev.h InfoOutputDev.h $(CC) -I ./ $(xpdf_include) FullBitmapOutputDev.cc -o $@ DummyOutputDev.$(O): DummyOutputDev.cc DummyOutputDev.h InfoOutputDev.h $(CC) -I ./ $(xpdf_include) DummyOutputDev.cc -o $@ pdf.$(O): pdf.cc VectorGraphicOutputDev.h CharOutputDev.h InfoOutputDev.h CommonOutputDev.h BitmapOutputDev.h FullBitmapOutputDev.h InfoOutputDev.h $(CC) -I ./ $(xpdf_include) pdf.cc -o $@ XPDFOK = xpdf/Gfx.cc ifeq ($(shell echo inject*xpdf.pl),inject-xpdf.pl) $(XPDFOK): Makefile.in inject-xpdf.pl xpdf-*tar.gz xpdf*patch @if test xpdf-changes.patch -nt $(XPDFOK);then perl inject-xpdf.pl xpdf-3.02.tar.gz;fi @if test '!' -d xpdf;then perl inject-xpdf.pl xpdf-3.02.tar.gz;fi endif xpdf/UnicodeMap.$(O): xpdf/UnicodeMap.cc $(CC) -I ./ -I xpdf xpdf/UnicodeMap.cc -o $@ xpdf/NameToCharCode.$(O): xpdf/NameToCharCode.cc $(CC) -I ./ -I xpdf xpdf/NameToCharCode.cc -o $@ xpdf/Annot.$(O): xpdf/Annot.cc $(CC) -I ./ -I xpdf xpdf/Annot.cc -o $@ xpdf/Function.$(O): xpdf/Function.cc $(CC) -I ./ -I xpdf xpdf/Function.cc -o $@ xpdf/BuiltinFontTables.$(O): xpdf/BuiltinFontTables.cc $(CC) -I ./ -I xpdf xpdf/BuiltinFontTables.cc -o $@ xpdf/BuiltinFont.$(O): xpdf/BuiltinFont.cc $(CC) -I ./ -I xpdf xpdf/BuiltinFont.cc -o $@ xpdf/FontEncodingTables.$(O): xpdf/FontEncodingTables.cc $(CC) -I ./ -I xpdf xpdf/FontEncodingTables.cc -o $@ xpdf/PSTokenizer.$(O): xpdf/PSTokenizer.cc $(CC) -I ./ -I xpdf xpdf/PSTokenizer.cc -o $@ xpdf/CharCodeToUnicode.$(O): xpdf/CharCodeToUnicode.cc $(CC) -I ./ -I xpdf xpdf/CharCodeToUnicode.cc -o $@ xpdf/CMap.$(O): xpdf/CMap.cc $(CC) -I ./ -I xpdf xpdf/CMap.cc -o $@ xpdf/GfxFont.$(O): xpdf/GfxFont.cc $(CC) -I ./ -I xpdf xpdf/GfxFont.cc -o $@ xpdf/Gfx.$(O): xpdf/Gfx.cc $(CC) -I ./ -I xpdf xpdf/Gfx.cc -o $@ xpdf/GfxState.$(O): xpdf/GfxState.cc $(CC) -I ./ -I xpdf xpdf/GfxState.cc -o $@ xpdf/JArithmeticDecoder.$(O): xpdf/JArithmeticDecoder.cc $(CC) -I ./ -I xpdf xpdf/JArithmeticDecoder.cc -o $@ xpdf/JPXStream.$(O): xpdf/JPXStream.cc $(CC) -I ./ -I xpdf xpdf/JPXStream.cc -o $@ xpdf/GlobalParams.$(O): xpdf/GlobalParams.cc xpdf/GlobalParams.h $(CC) -I ./ -I xpdf xpdf/GlobalParams.cc -o $@ xpdf/JBIG2Stream.$(O): xpdf/JBIG2Stream.cc $(CC) -I ./ -I xpdf xpdf/JBIG2Stream.cc -o $@ xpdf/Page.$(O): xpdf/Page.cc $(CC) -I ./ -I xpdf xpdf/Page.cc -o $@ xpdf/Link.$(O): xpdf/Link.cc $(CC) -I ./ -I xpdf xpdf/Link.cc -o $@ xpdf/Catalog.$(O): xpdf/Catalog.cc $(CC) -I ./ -I xpdf xpdf/Catalog.cc -o $@ xpdf/PDFDocEncoding.$(O): xpdf/PDFDocEncoding.cc $(CC) -I ./ -I xpdf xpdf/PDFDocEncoding.cc -o $@ xpdf/Outline.$(O): xpdf/Outline.cc $(CC) -I ./ -I xpdf xpdf/Outline.cc -o $@ xpdf/Lexer.$(O): xpdf/Lexer.cc $(CC) -I ./ -I xpdf xpdf/Lexer.cc -o $@ xpdf/Parser.$(O): xpdf/Parser.cc $(CC) -I ./ -I xpdf xpdf/Parser.cc -o $@ xpdf/XRef.$(O): xpdf/XRef.cc $(CC) -I ./ -I xpdf xpdf/XRef.cc -o $@ xpdf/Array.$(O): xpdf/Array.cc $(CC) -I ./ -I xpdf xpdf/Array.cc -o $@ xpdf/Dict.$(O): xpdf/Dict.cc $(CC) -I ./ -I xpdf xpdf/Dict.cc -o $@ xpdf/Decrypt.$(O): xpdf/Decrypt.cc $(CC) -I ./ -I xpdf xpdf/Decrypt.cc -o $@ xpdf/Object.$(O): xpdf/Object.cc $(CC) -I ./ -I xpdf xpdf/Object.cc -o $@ xpdf/Error.$(O): xpdf/Error.cc aconf.h $(CC) -I ./ -I xpdf xpdf/Error.cc -o $@ xpdf/Stream.$(O): xpdf/Stream.cc $(CC) -I ./ -I xpdf xpdf/Stream.cc -o $@ xpdf/PDFDoc.$(O): xpdf/PDFDoc.cc $(CC) -I ./ -I xpdf xpdf/PDFDoc.cc -o $@ xpdf/SecurityHandler.$(O): xpdf/SecurityHandler.cc xpdf/SecurityHandler.h $(CC) -I ./ -I xpdf xpdf/SecurityHandler.cc -o $@ xpdf/OutputDev.$(O): xpdf/OutputDev.cc xpdf/GfxState.h xpdf/Stream.h xpdf/Object.h xpdf/OutputDev.h xpdf/gtypes.h xpdf/CharTypes.h $(CC) -I ./ -I xpdf xpdf/OutputDev.cc -o $@ xpdf/FoFiBase.$(O): xpdf/FoFiBase.cc $(CC) -I ./ -I xpdf xpdf/FoFiBase.cc -o $@ xpdf/FoFiTrueType.$(O): xpdf/FoFiTrueType.cc xpdf/FoFiBase.h $(CC) -I ./ -I xpdf xpdf/FoFiTrueType.cc -o $@ xpdf/FoFiEncodings.$(O): xpdf/FoFiEncodings.cc xpdf/FoFiEncodings.h $(CC) -I ./ -I xpdf xpdf/FoFiEncodings.cc -o $@ xpdf/FoFiType1C.$(O): xpdf/FoFiType1C.cc xpdf/FoFiBase.h $(CC) -I ./ -I xpdf xpdf/FoFiType1C.cc -o $@ xpdf/FoFiType1.$(O): xpdf/FoFiType1.cc xpdf/FoFiBase.h $(CC) -I ./ -I xpdf xpdf/FoFiType1.cc -o $@ xpdf/GList.$(O): xpdf/GList.cc $(CC) -I ./ -I xpdf xpdf/GList.cc -o $@ xpdf/GString.$(O): xpdf/GString.cc $(CC) -I ./ -I xpdf xpdf/GString.cc -o $@ xpdf/GHash.$(O): xpdf/GHash.cc $(CC) -I ./ -I xpdf xpdf/GHash.cc -o $@ xpdf/gfile.$(O): xpdf/gfile.cc $(CC) -I ./ -I xpdf xpdf/gfile.cc -o $@ xpdf/gmem.$(O): xpdf/gmem.cc $(C) -I ./ -I xpdf xpdf/gmem.cc -o $@ xpdf/parseargs.$(O): xpdf/parseargs.c $(C) -I ./ -I xpdf xpdf/parseargs.c -o $@ xpdf/%.$(O): xpdf/%.cc $(CC) -I ./ -I xpdf $< -o $@ ../libgfxpdf$(A): $(XPDFOK) $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) rm -f ../libgfxpdf$(A) $(AR) r ../libgfxpdf$(A) $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(RANLIB) ../libgfxpdf$(A) xpdfapp_sources=xpdf/XPDFApp.cc xpdf/XPDFCore.cc xpdf/XPDFTree.cc xpdf/XPDFViewer.cc xpdf/PDFCore.cc xpdf/TextOutputDev.cc xpdf/xpdf.cc xpdf/CoreOutputDev.cc xpdf/UnicodeTypeTable.cc xpdf/PSOutputDev.cc splash_sources=xpdf/Splash.cc xpdf/SplashBitmap.cc xpdf/SplashClip.cc xpdf/SplashFTFont.cc xpdf/SplashFTFontEngine.cc xpdf/SplashFTFontFile.cc xpdf/SplashFont.cc xpdf/SplashFontEngine.cc xpdf/SplashFontFile.cc xpdf/SplashFontFileID.cc xpdf/SplashOutputDev.cc xpdf/SplashPath.cc xpdf/SplashPattern.cc xpdf/SplashScreen.cc xpdf/SplashState.cc xpdf/SplashT1Font.cc xpdf/SplashT1FontEngine.cc xpdf/SplashT1FontFile.cc xpdf/SplashXPath.cc xpdf/SplashXPathScanner.cc xpdfapp_objects=xpdf/XPDFApp.$(O) xpdf/XPDFCore.$(O) xpdf/XPDFTree.$(O) xpdf/XPDFViewer.$(O) xpdf/PDFCore.$(O) xpdf/xpdf.$(O) xpdf/CoreOutputDev.$(O) xpdf/PSOutputDev.$(O) xxpdf$(E): $(xpdf_objects) $(xpdfapp_objects) $(splash_objects) $(LL) $(CPPFLAGS) -DXPDFEXE -g -I xpdf -I . $(xpdfapp_objects) $(xpdf_objects) $(splash_objects) xpdf/parseargs.c -o xxpdf$(E) $(LIBS) -lXm -lX11 pdftoppm.$(O): $(XPDFOK) xpdf/pdftoppm.cc $(xpdf_objects) $(splash_objects) $(CC) -DXPDFEXE -I xpdf -I . xpdf/pdftoppm.cc pdftotext.$(O): $(XPDFOK) xpdf/pdftotext.cc $(xpdf_objects) $(CC) -DXPDFEXE -I xpdf -I . xpdf/pdftotext.cc pdfinfo.$(O): $(XPDFOK) xpdf/pdfinfo.cc $(xpdf_objects) $(CC) -DXPDFEXE -I xpdf -I . xpdf/pdfinfo.cc pdftoppm$(E): $(XPDFOK) xpdf/pdftoppm.$(O) xpdf/parseargs.$(O) $(xpdf_objects) $(splash_objects) $(LL) $(CPPFLAGS) -DXPDFEXE -g $(xpdf_include) -I . xpdf/pdftoppm.$(O) $(xpdf_objects) $(splash_objects) xpdf/parseargs.$(O) -o pdftoppm$(E) $(LIBS) pdftotext$(E): $(XPDFOK) xpdf/pdftotext.$(O) xpdf/parseargs.$(O) $(xpdf_objects) $(LL) $(CPPFLAGS) -DXPDFEXE -g $(xpdf_include) -I . xpdf/pdftotext.$(O) $(xpdf_objects) xpdf/parseargs.$(O) -o pdftotext$(E) $(LIBS) pdfinfo$(E): $(XPDFOK) xpdf/pdfinfo.$(O) xpdf/parseargs.$(O) $(xpdf_objects) $(LL) $(CPPFLAGS) -DXPDFEXE -g $(xpdf_include) -I . xpdf/pdfinfo.$(O) $(xpdf_objects) xpdf/parseargs.$(O) -o pdfinfo$(E) $(LIBS) gfx_objects = ../libgfxswf$(A) ../libgfx$(A) ../librfxswf$(A) ../libbase$(A) gfx_objects2 = $(gfx_objects) pdf2jpeg$(E): $(XPDFOK) pdf2jpeg.c ../libbase$(A) xpdf/parseargs.$(O) $(xpdf_objects) $(splash_objects) $(LL) $(CPPFLAGS) -DXPDFEXE $(xpdf_include) -I. -g pdf2jpeg.c xpdf/parseargs.$(O) ../libbase$(A) $(xpdf_objects) $(splash_objects) -o pdf2jpeg$(E) $(LIBS) pdf2swf$(E): $(XPDFOK) ../../src/pdf2swf.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects) $(LL) $(CPPFLAGS) -g ../../src/pdf2swf.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects) -o pdf2swf$(E) $(LIBS) pdf2pdf$(E): $(XPDFOK) ../../src/pdf2pdf.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects) $(LL) $(CPPFLAGS) -g ../../src/pdf2pdf.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects) -o pdf2pdf$(E) $(LIBS) gfx2gfx$(E): $(XPDFOK) ../../src/gfx2gfx.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects2) $(LL) $(CPPFLAGS) -g ../../src/gfx2gfx.c $(libgfxpdf_objects) $(xpdf_in_source) $(splash_in_source) $(gfx_objects2) -o gfx2gfx$(E) $(LIBS) install: $(mkinstalldirs) $(bindir) @for file in pdfinfo pdftoppm pdftotext; do if test -f $$file;then $(INSTALL_BIN);fi;done uninstall: clean: rm -f xpdf/*.o xpdf/*.obj *.o pdf2swf pdftoppm pdftotext pdf2swf.exe pdftoppm.exe pdftotext.exe *.obj *.lo *.a *.lib *.la gmon.out .PHONY: clean install uninstall check all xpdf swftools_0.9.2+git20130725.orig/lib/pdf/FullBitmapOutputDev.h0000644000175000017500000001627412216332640022744 0ustar gawaingawain/* FullBitmapOutputDev.cc Output device which creates a bitmap. This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __FullBitmapOutputDev_h__ #define __FullBitmapOutputDev_h__ #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../../config.h" #include "CharOutputDev.h" #include "InfoOutputDev.h" #include "PDFDoc.h" #include "CommonOutputDev.h" #define STATE_PARALLEL 0 #define STATE_TEXT_IS_ABOVE 1 #define STATE_BITMAP_IS_ABOVE 2 class FullBitmapOutputDev: public CommonOutputDev { public: FullBitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2); virtual ~FullBitmapOutputDev(); // CommonOutputDev: virtual void setDevice(gfxdevice_t*dev); virtual void setParameter(const char*key, const char*value); // OutputDev: virtual GBool upsideDown(); virtual GBool useDrawChar(); virtual GBool useTilingPatternFill(); virtual GBool useShadedFills(); virtual GBool useDrawForm(); virtual GBool interpretType3Chars(); virtual GBool needNonText(); virtual void setDefaultCTM(double *ctm); virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data) = NULL, void *abortCheckCbkData = NULL); virtual void beginPage(GfxState *state, int pageNum); virtual void endPage(); virtual void saveState(GfxState *state); virtual void restoreState(GfxState *state); virtual void updateAll(GfxState *state); virtual void updateCTM(GfxState *state, double m11, double m12, double m21, double m22, double m31, double m32); virtual void updateLineDash(GfxState *state); virtual void updateFlatness(GfxState *state); virtual void updateLineJoin(GfxState *state); virtual void updateLineCap(GfxState *state); virtual void updateMiterLimit(GfxState *state); virtual void updateLineWidth(GfxState *state); virtual void updateStrokeAdjust(GfxState *state); virtual void updateFillColorSpace(GfxState *state); virtual void updateStrokeColorSpace(GfxState *state); virtual void updateFillColor(GfxState *state); virtual void updateStrokeColor(GfxState *state); virtual void updateBlendMode(GfxState *state); virtual void updateFillOpacity(GfxState *state); virtual void updateStrokeOpacity(GfxState *state); virtual void updateFillOverprint(GfxState *state); virtual void updateStrokeOverprint(GfxState *state); virtual void updateTransfer(GfxState *state); virtual void updateFont(GfxState *state); virtual void updateTextMat(GfxState *state); virtual void updateCharSpace(GfxState *state); virtual void updateRender(GfxState *state); virtual void updateRise(GfxState *state); virtual void updateWordSpace(GfxState *state); virtual void updateHorizScaling(GfxState *state); virtual void updateTextPos(GfxState *state); virtual void updateTextShift(GfxState *state, double shift); virtual void stroke(GfxState *state); virtual void fill(GfxState *state); virtual void eoFill(GfxState *state); virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep); virtual GBool functionShadedFill(GfxState *state, GfxFunctionShading *shading); virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading POPPLER_RAXIAL_MIN_MAX); virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading POPPLER_RAXIAL_MIN_MAX); virtual void clip(GfxState *state); virtual void eoClip(GfxState *state); virtual void clipToStrokePath(GfxState *state); virtual void beginStringOp(GfxState *state); virtual void endStringOp(GfxState *state); virtual void beginString(GfxState *state, GString *s); virtual void endString(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen); virtual void drawString(GfxState *state, GString *s); virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); virtual void endType3Char(GfxState *state); virtual void endTextObject(GfxState *state); virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg); virtual void drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg); virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE); virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE); virtual void type3D0(GfxState *state, double wx, double wy); virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury); virtual void drawForm(Ref id); virtual void beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask); virtual void endTransparencyGroup(GfxState *state); virtual void paintTransparencyGroup(GfxState *state, double *bbox); virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor); virtual void clearSoftMask(GfxState *state); virtual void processLink(Link *link, Catalog *catalog); virtual void setVectorAntialias(GBool vaa); virtual GBool getVectorAntialias(); private: void flushBitmap(); char config_extrafontdata; SplashOutputDev*rgbdev; CharOutputDev*gfxdev; gfxdevice_t*dev; }; #endif swftools_0.9.2+git20130725.orig/lib/pdf/pdf.cc0000644000175000017500000004451112216332640017727 0ustar gawaingawain#include #include #include "../gfxdevice.h" #include "../gfxsource.h" #include "../devices/rescale.h" #include "../log.h" #include "../../config.h" #ifdef HAVE_POPPLER #include #else #include "xpdf/config.h" #endif #include "GlobalParams.h" #include "InfoOutputDev.h" #include "CharOutputDev.h" #include "FullBitmapOutputDev.h" #include "BitmapOutputDev.h" #include "VectorGraphicOutputDev.h" #include "../mem.h" #include "pdf.h" #define NO_ARGPARSER #include "../args.h" #include "../utf8.h" static double zoom = 72; /* xpdf: 86 */ static int zoomtowidth = 0; static double multiply = 1.0; static char* global_page_range = 0; static int threadsafe = 0; static int globalparams_count=0; typedef struct _pdf_page_info { int xMin, yMin, xMax, yMax; int width,height; int number_of_images; int number_of_links; int number_of_fonts; char has_info; } pdf_page_info_t; typedef struct _pdf_doc_internal { char config_bitmap_optimizing; char config_full_bitmap_optimizing; char config_only_text; char config_print; gfxparams_t* parameters; int protect; int nocopy; int noprint; GString*fileName; GString*userPW; PDFDoc*doc; Object docinfo; InfoOutputDev*info; pdf_page_info_t*pages; char*filename; /* page map */ int*pagemap; int pagemap_size; int pagemap_pos; gfxsource_t*parent; } pdf_doc_internal_t; typedef struct _pdf_page_internal { } pdf_page_internal_t; typedef struct _dev_output_internal { CommonOutputDev*outputDev; } dev_output_internal_t; typedef struct _gfxsource_internal { gfxparams_t* parameters; } gfxsource_internal_t; static const char* dirseparator() { #ifdef WIN32 return "\\"; #else return "/"; #endif } void pdfpage_destroy(gfxpage_t*pdf_page) { pdf_page_internal_t*i= (pdf_page_internal_t*)pdf_page->internal; free(pdf_page->internal);pdf_page->internal = 0; free(pdf_page);pdf_page=0; } static void render2(gfxpage_t*page, gfxdevice_t*dev, int x,int y, int x1,int y1,int x2,int y2) { pdf_doc_internal_t*pi = (pdf_doc_internal_t*)page->parent->internal; gfxsource_internal_t*i = (gfxsource_internal_t*)pi->parent->internal; if(!pi->config_print && pi->nocopy) {msg(" PDF disallows copying");exit(0);} if(pi->config_print && pi->noprint) {msg(" PDF disallows printing");exit(0);} CommonOutputDev*outputDev = 0; if(pi->config_full_bitmap_optimizing) { FullBitmapOutputDev*d = new FullBitmapOutputDev(pi->info, pi->doc, pi->pagemap, pi->pagemap_pos, x, y, x1, y1, x2, y2); outputDev = (CommonOutputDev*)d; } else if(pi->config_bitmap_optimizing) { BitmapOutputDev*d = new BitmapOutputDev(pi->info, pi->doc, pi->pagemap, pi->pagemap_pos, x, y, x1, y1, x2, y2); outputDev = (CommonOutputDev*)d; } else if(pi->config_only_text) { CharOutputDev*d = new CharOutputDev(pi->info, pi->doc, pi->pagemap, pi->pagemap_pos, x, y, x1, y1, x2, y2); outputDev = (CommonOutputDev*)d; } else { VectorGraphicOutputDev*d = new VectorGraphicOutputDev(pi->info, pi->doc, pi->pagemap, pi->pagemap_pos, x, y, x1, y1, x2, y2); outputDev = (CommonOutputDev*)d; } /* pass global parameters to PDF driver*/ gfxparam_t*p = i->parameters->params; while(p) { outputDev->setParameter(p->key, p->value); p = p->next; } p = pi->parameters->params; while(p) { outputDev->setParameter(p->key, p->value); p = p->next; } gfxdevice_t* middev=0; if(multiply!=1.0) { middev = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_rescale_init(middev, 0x00000000, 0, 0, 1.0 / multiply); gfxdevice_rescale_setdevice(middev, dev); dev = middev; } if(!pi) { msg(" pdf_page_render: Parent PDF this page belongs to doesn't exist yet/anymore"); return; } if(!pi->pages[page->nr-1].has_info) { msg(" pdf_page_render: page %d was previously set as not-to-render via the \"pages\" option", page->nr); return; } if(pi->protect) { dev->setparameter(dev, "protect", "1"); } outputDev->setDevice(dev); pi->doc->processLinks((OutputDev*)outputDev, page->nr); pi->doc->displayPage((OutputDev*)outputDev, page->nr, zoom*multiply, zoom*multiply, /*rotate*/0, true, true, pi->config_print); outputDev->finishPage(); outputDev->setDevice(0); delete outputDev; if(middev) { gfxdevice_rescale_setdevice(middev, 0x00000000); middev->finish(middev); } } void pdfpage_render(gfxpage_t*page, gfxdevice_t*output) { pdf_doc_internal_t*pi = (pdf_doc_internal_t*)page->parent->internal; render2(page, output, 0,0, 0,0,0,0); } void pdfpage_rendersection(gfxpage_t*page, gfxdevice_t*output, gfxcoord_t x, gfxcoord_t y, gfxcoord_t _x1, gfxcoord_t _y1, gfxcoord_t _x2, gfxcoord_t _y2) { pdf_doc_internal_t*pi = (pdf_doc_internal_t*)page->parent->internal; int x1=(int)_x1,y1=(int)_y1,x2=(int)_x2,y2=(int)_y2; if((x1|y1|x2|y2)==0) x2++; render2(page, output, (int)x*multiply,(int)y*multiply, (int)x1*multiply,(int)y1*multiply,(int)x2*multiply,(int)y2*multiply); } void pdf_doc_destroy(gfxdocument_t*gfx) { pdf_doc_internal_t*i= (pdf_doc_internal_t*)gfx->internal; if (i->userPW) { delete i->userPW;i->userPW = 0; } if (i->fileName) { /* will be freed by PDFDoc::~PDFDoc */ i->fileName = 0; } if(i->doc) { delete i->doc; i->doc=0; } free(i->pages); i->pages = 0; if(i->pagemap) { free(i->pagemap); } i->docinfo.free(); if(i->filename) { free(i->filename);i->filename=0; } if(i->info) { delete i->info;i->info=0; } if(i->parameters) { gfxparams_free(i->parameters); i->parameters=0; } free(gfx->internal);gfx->internal=0; free(gfx);gfx=0; if(global_page_range) { free(global_page_range); global_page_range = 0; } /*globalparams_count--; if(!globalparams_count) { delete globalParams; globalParams = 0; globalparams_count = 0; }*/ } static void add_page_to_map(gfxdocument_t*gfx, int pdfpage, int outputpage) { pdf_doc_internal_t*i= (pdf_doc_internal_t*)gfx->internal; if(pdfpage < 0) return; if(pdfpage >= i->pagemap_size) { int oldlen = i->pagemap_size; i->pagemap_size = oldlen + 1024; if(pdfpage > i->pagemap_size) i->pagemap_size = pdfpage+1; if(i->pages) { i->pagemap = (int*)malloc(i->pagemap_size*sizeof(int)); } else { i->pagemap = (int*)realloc(i->pages, i->pagemap_size*sizeof(int)); } memset(&i->pagemap[oldlen], -1, (i->pagemap_size-oldlen)*sizeof(int)); } i->pagemap[pdfpage] = outputpage; if(pdfpage > i->pagemap_pos) i->pagemap_pos = pdfpage; } void pdf_doc_setparameter(gfxdocument_t*gfx, const char*name, const char*value) { pdf_doc_internal_t*i= (pdf_doc_internal_t*)gfx->internal; if(!strcmp(name, "pagemap")) { int pdfpage=0, outputpage=0; sscanf(value,"%d:%d", &pdfpage, &outputpage); add_page_to_map(gfx, pdfpage, outputpage); } else if(!strcmp(name, "poly2bitmap")) { i->config_bitmap_optimizing = atoi(value); } else if(!strcmp(name, "bitmapfonts") || !strcmp(name, "bitmap")) { i->config_full_bitmap_optimizing = atoi(value); } else if(!strcmp(name, "asprint")) { i->config_print = atoi(value); } else if(!strcmp(name, "onlytext")) { i->config_only_text = atoi(value); } else { gfxparams_store(i->parameters, name, value); } } gfxpage_t* pdf_doc_getpage(gfxdocument_t*doc, int page) { pdf_doc_internal_t*di= (pdf_doc_internal_t*)doc->internal; if(threadsafe) { /* for multi-thread operation, we need to create a new PDFDoc instance for each thread */ di->doc = 0; } if(!di->doc) { di->doc = new PDFDoc(di->fileName, di->userPW); } if(page < 1 || page > doc->num_pages) return 0; gfxpage_t* pdf_page = (gfxpage_t*)malloc(sizeof(gfxpage_t)); pdf_page_internal_t*pi= (pdf_page_internal_t*)malloc(sizeof(pdf_page_internal_t)); memset(pi, 0, sizeof(pdf_page_internal_t)); pdf_page->internal = pi; pdf_page->destroy = pdfpage_destroy; pdf_page->render = pdfpage_render; pdf_page->rendersection = pdfpage_rendersection; pdf_page->width = di->pages[page-1].width; pdf_page->height = di->pages[page-1].height; pdf_page->parent = doc; pdf_page->nr = page; return pdf_page; } static char*getInfoString(Dict *infoDict, const char *key) { Object obj; GString *s1, *s2; int i; unsigned int u; if (infoDict && infoDict->lookup((char*)key, &obj)->isString()) { s1 = obj.getString(); if ((s1->getChar(0) & 0xff) == 0xfe && (s1->getChar(1) & 0xff) == 0xff) { s2 = new GString(); for (i = 2; i < obj.getString()->getLength(); i += 2) { u = ((s1->getChar(i) & 0xff) << 8) | (s1->getChar(i+1) & 0xff); s2->append(getUTF8(u)); } char*ret = strdup(s2->getCString()); delete s2; obj.free(); return ret; } else { char*ret = strdup(s1->getCString()); obj.free(); return ret; } } return strdup(""); } static char*getInfoDate(Dict *infoDict, const char *key) { Object obj; char *s; if (infoDict && infoDict->lookup((char*)key, &obj)->isString()) { s = obj.getString()->getCString(); if (s[0] == 'D' && s[1] == ':') { s += 2; } char*ret = strdup(s); obj.free(); return ret; } return strdup(""); } char* pdf_doc_getinfo(gfxdocument_t*doc, const char*name) { pdf_doc_internal_t*i= (pdf_doc_internal_t*)doc->internal; if(!strcmp(name, "title")) return getInfoString(i->docinfo.getDict(), "Title"); else if(!strcmp(name, "subject")) return getInfoString(i->docinfo.getDict(), "Subject"); else if(!strcmp(name, "keywords")) return getInfoString(i->docinfo.getDict(), "Keywords"); else if(!strcmp(name, "author")) return getInfoString(i->docinfo.getDict(), "Author"); else if(!strcmp(name, "creator")) return getInfoString(i->docinfo.getDict(), "Creator"); else if(!strcmp(name, "producer")) return getInfoString(i->docinfo.getDict(), "Producer"); else if(!strcmp(name, "creationdate")) return getInfoDate(i->docinfo.getDict(), "CreationDate"); else if(!strcmp(name, "moddate")) return getInfoDate(i->docinfo.getDict(), "ModDate"); else if(!strcmp(name, "linearized")) return strdup(i->doc->isLinearized() ? "yes" : "no"); else if(!strcmp(name, "tagged")) return strdup(i->doc->getStructTreeRoot()->isDict() ? "yes" : "no"); else if(!strcmp(name, "encrypted")) return strdup(i->doc->isEncrypted() ? "yes" : "no"); else if(!strcmp(name, "oktoprint")) return strdup(i->doc->okToPrint() ? "yes" : "no"); else if(!strcmp(name, "oktocopy")) return strdup(i->doc->okToCopy() ? "yes" : "no"); else if(!strcmp(name, "oktochange")) return strdup(i->doc->okToChange() ? "yes" : "no"); else if(!strcmp(name, "oktoaddnotes")) return strdup(i->doc->okToAddNotes() ? "yes" : "no"); else if(!strcmp(name, "version")) { char buf[32]; #ifdef HAVE_POPPLER sprintf(buf, "%d.%d", i->doc->getPDFMajorVersion(), i->doc->getPDFMinorVersion()); #else sprintf(buf, "%.1f", i->doc->getPDFVersion()); #endif return strdup(buf); } return strdup(""); } /* shortcut to InfoOutputDev.cc */ extern int config_unique_unicode; extern int config_poly2bitmap_pass1; extern int config_skewedtobitmap_pass1; extern int config_addspace; extern int config_fontquality; extern int config_bigchar; extern int config_marker_glyph; extern int config_normalize_fonts; extern int config_remove_font_transforms; extern int config_remove_invisible_outlines; extern int config_break_on_warning; static void pdf_setparameter(gfxsource_t*src, const char*name, const char*value) { gfxsource_internal_t*i = (gfxsource_internal_t*)src->internal; gfxparams_store(i->parameters, name, value); msg(" setting parameter %s to \"%s\"", name, value); if(!strncmp(name, "fontdir", strlen("fontdir"))) { addGlobalFontDir(value); } else if(!strcmp(name, "addspacechars")) { config_addspace = atoi(value); gfxparams_store(i->parameters, "detectspaces", "0"); } else if(!strcmp(name, "detectspaces")) { config_addspace = atoi(value); } else if(!strcmp(name, "unique_unicode")) { config_unique_unicode = atoi(value); } else if(!strcmp(name, "poly2bitmap")) { config_poly2bitmap_pass1 = atoi(value); } else if(!strcmp(name, "marker_glyph")) { config_marker_glyph = atoi(value); } else if(!strcmp(name, "normalize_fonts")) { config_normalize_fonts = atoi(value); } else if(!strcmp(name, "skewedtobitmap")) { config_skewedtobitmap_pass1 = atoi(value); } else if(!strcmp(name, "remove_font_transforms")) { config_remove_font_transforms = atoi(value); } else if(!strcmp(name, "breakonwarning")) { config_break_on_warning = atoi(value); } else if(!strcmp(name, "remove_invisible_outlines")) { config_remove_invisible_outlines = atoi(value); } else if(!strcmp(name, "fontquality")) { config_fontquality = atoi(value); } else if(!strcmp(name, "bigchar")) { config_bigchar = atoi(value); } else if(!strcmp(name, "pages")) { global_page_range = strdup(value); } else if(!strncmp(name, "font", strlen("font")) && name[4]!='q') { addGlobalFont(value); } else if(!strncmp(name, "languagedir", strlen("languagedir"))) { addGlobalLanguageDir(value); } else if(!strcmp(name, "threadsafe")) { threadsafe = atoi(value); } else if(!strcmp(name, "zoomtowidth")) { zoomtowidth = atoi(value); } else if(!strcmp(name, "zoom")) { char buf[80]; zoom = atof(value); } else if(!strcmp(name, "jpegdpi") || !strcmp(name, "ppmdpi")) { msg(" %s not supported anymore. Please use jpegsubpixels/ppmsubpixels"); } else if(!strcmp(name, "multiply")) { multiply = atof(value); } else if(!strcmp(name, "help")) { printf("\nPDF device global parameters:\n"); printf("fontdir= a directory with additional fonts\n"); printf("font= an additional font filename\n"); printf("pages= the range of pages to convert (example: pages=1-100,210-)\n"); printf("zoom= the resultion (default: 72)\n"); printf("languagedir= Add an xpdf language directory\n"); printf("multiply= Render everything at the resolution\n"); printf("poly2bitmap Convert graphics to bitmaps\n"); printf("bitmap Convert everything to bitmaps\n"); } } void pdf_doc_prepare(gfxdocument_t*doc, gfxdevice_t*dev) { pdf_doc_internal_t*i= (pdf_doc_internal_t*)doc->internal; i->info->dumpfonts(dev); } static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename) { gfxsource_internal_t*isrc = (gfxsource_internal_t*)src->internal; gfxdocument_t*pdf_doc = (gfxdocument_t*)malloc(sizeof(gfxdocument_t)); memset(pdf_doc, 0, sizeof(gfxdocument_t)); pdf_doc_internal_t*i= (pdf_doc_internal_t*)malloc(sizeof(pdf_doc_internal_t)); memset(i, 0, sizeof(pdf_doc_internal_t)); i->parent = src; i->parameters = gfxparams_new(); pdf_doc->internal = i; char*userPassword=0; i->filename = strdup(filename); char*x = 0; if((x = strchr((char*)filename, '|'))) { *x = 0; userPassword = x+1; } i->fileName = new GString(filename); // open PDF file if (userPassword && userPassword[0]) { i->userPW = new GString(userPassword); } else { i->userPW = NULL; } i->doc = new PDFDoc(i->fileName, i->userPW); if (!i->doc->isOk()) { return 0; } // get doc info i->doc->getDocInfo(&i->docinfo); pdf_doc->num_pages = i->doc->getNumPages(); i->protect = 0; if (i->doc->isEncrypted()) { if(!i->doc->okToCopy()) { i->nocopy = 1; } if(!i->doc->okToPrint()) { i->noprint = 1; } if(!i->doc->okToChange() || !i->doc->okToAddNotes()) i->protect = 1; } if(zoomtowidth && i->doc->getNumPages()) { Page*page = i->doc->getCatalog()->getPage(1); PDFRectangle *r = page->getCropBox(); double width_before = r->x2 - r->x1; zoom = 72.0 * zoomtowidth / width_before; msg(" Rendering at %f DPI. (Page width at 72 DPI: %f, target width: %d)", zoom, width_before, zoomtowidth); } i->info = new InfoOutputDev(i->doc->getXRef()); int t; i->pages = (pdf_page_info_t*)malloc(sizeof(pdf_page_info_t)*pdf_doc->num_pages); memset(i->pages,0,sizeof(pdf_page_info_t)*pdf_doc->num_pages); for(t=1;t<=pdf_doc->num_pages;t++) { if(!global_page_range || is_in_range(t, global_page_range)) { i->doc->displayPage((OutputDev*)i->info, t, zoom, zoom, /*rotate*/0, /*usemediabox*/true, /*crop*/true, i->config_print); i->doc->processLinks((OutputDev*)i->info, t); i->pages[t-1].xMin = i->info->x1; i->pages[t-1].yMin = i->info->y1; i->pages[t-1].xMax = i->info->x2; i->pages[t-1].yMax = i->info->y2; i->pages[t-1].width = i->info->x2 - i->info->x1; i->pages[t-1].height = i->info->y2 - i->info->y1; i->pages[t-1].number_of_images = i->info->num_ppm_images + i->info->num_jpeg_images; i->pages[t-1].number_of_links = i->info->num_links; i->pages[t-1].number_of_fonts = i->info->num_fonts; i->pages[t-1].has_info = 1; } } pdf_doc->get = 0; pdf_doc->destroy = pdf_doc_destroy; pdf_doc->setparameter = pdf_doc_setparameter; pdf_doc->getinfo = pdf_doc_getinfo; pdf_doc->getpage = pdf_doc_getpage; pdf_doc->prepare = pdf_doc_prepare; /* pass global parameters to PDF driver*/ gfxparam_t*p = isrc->parameters->params; while(p) { pdf_doc->setparameter(pdf_doc, p->key, p->value); p = p->next; } return pdf_doc; } void pdf_destroy(gfxsource_t*src) { if(!src->internal) return; gfxsource_internal_t*i = (gfxsource_internal_t*)src->internal; gfxparams_free(i->parameters); i->parameters=0; free(src->internal);src->internal=0; delete globalParams;globalParams = 0; free(src); } gfxsource_t*gfxsource_pdf_create() { gfxsource_t*src = (gfxsource_t*)malloc(sizeof(gfxsource_t)); memset(src, 0, sizeof(gfxsource_t)); src->setparameter = pdf_setparameter; src->open = pdf_open; src->destroy = pdf_destroy; gfxsource_internal_t*i = (gfxsource_internal_t*)rfx_calloc(sizeof(gfxsource_internal_t)); src->internal = (void*)i; i->parameters = gfxparams_new(); if(!globalParams) { globalParams = new GFXGlobalParams(); //globalparams_count++; } return src; } swftools_0.9.2+git20130725.orig/lib/pdf/CommonOutputDev.h0000644000175000017500000000661412216332640022132 0ustar gawaingawain/* InfoOutputDev.h Superclass for BitmapOutputDev, GFXOutputDev etc. This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __commonoutputdev_h__ #define __commonoutputdev_h__ #include "OutputDev.h" #include "InfoOutputDev.h" #include "../gfxdevice.h" #define RENDER_FILL 0 #define RENDER_STROKE 1 #define RENDER_FILLSTROKE 2 #define RENDER_INVISIBLE 3 #define RENDER_CLIP 4 typedef struct _feature { char*string; struct _feature*next; } feature_t; class GFXOutputGlobals { public: feature_t*featurewarnings; int textmodeinfo; // did we write "Text will be rendered as polygon" yet? int jpeginfo; // did we write "File contains jpegs" yet? int pbminfo; // did we write "File contains jpegs" yet? int linkinfo; // did we write "File contains links" yet? GFXOutputGlobals(); ~GFXOutputGlobals(); }; extern GFXOutputGlobals* getGfxGlobals(); extern void warnfeature(const char*feature,char fully); extern void infofeature(const char*feature); gfxcolor_t gfxstate_getfillcolor(GfxState * state); bool text_matrix_is_skewed(GfxState * state); class CommonOutputDev: public OutputDev { public: CommonOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2); virtual void setDevice(gfxdevice_t*dev) = 0; virtual void setParameter(const char*key, const char*value) = 0; virtual void startPage(int pageNum, GfxState*state); virtual void beginPage(GfxState*state, int page) = 0; virtual void setPage(Page *page) { this->page = page; } virtual void finishPage() {}; void transformXY(GfxState*state, double x, double y, double*nx, double*ny); void transformXY_stateless(double x, double y, int*xout, int*yout); virtual GBool interpretType3Chars(); virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data) = NULL, void *abortCheckCbkData = NULL) { this->setPage(page); return gTrue; } protected: Page *page; PDFDoc* doc; XRef* xref; InfoOutputDev* info; /* if set, will use a user bounding box instead of the PDF's bounding box */ int user_movex,user_movey; int user_clipx1,user_clipx2,user_clipy1,user_clipy2; /* movex,movey is the upper left corner of clipping rectangle (cropbox)- this needs to be added to all drawing coordinates to give the impression that all pages start at (0,0)*/ int movex, movey; int width, height; /* for page mapping */ int* page2page; int num_pages; }; #endif //__deviceinterface_h__ swftools_0.9.2+git20130725.orig/lib/pdf/BitmapOutputDev.h0000644000175000017500000002107312216332640022112 0ustar gawaingawain/* BitmapOutputDev.cc Output device which creates a bitmap. This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __BitmapOutputDev_h__ #define __BitmapOutputDev_h__ #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../../config.h" #include "CharOutputDev.h" #include "InfoOutputDev.h" #include "PDFDoc.h" #include "CommonOutputDev.h" #include "popplercompat.h" struct ClipState { ClipState*next; SplashBitmap*clipbitmap; char written; ClipState(); }; #define STATE_PARALLEL 0 #define STATE_TEXT_IS_ABOVE 1 #define STATE_BITMAP_IS_ABOVE 2 class BitmapOutputDev: public CommonOutputDev { public: BitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2); virtual ~BitmapOutputDev(); virtual void dbg_newdata(char*newdata); // CommonOutputDev: virtual void setDevice(gfxdevice_t*dev); virtual void setParameter(const char*key, const char*value); // OutputDev: virtual GBool upsideDown(); virtual GBool useDrawChar(); virtual GBool useTilingPatternFill(); virtual GBool useShadedFills(); virtual GBool useDrawForm(); virtual GBool interpretType3Chars(); virtual GBool needNonText(); virtual void setDefaultCTM(double *ctm); virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data) = NULL, void *abortCheckCbkData = NULL); virtual void beginPage(GfxState *state, int pageNum); virtual void endPage(); virtual void finishPage(); virtual void saveState(GfxState *state); virtual void restoreState(GfxState *state); virtual void updateAll(GfxState *state); virtual void updateCTM(GfxState *state, double m11, double m12, double m21, double m22, double m31, double m32); virtual void updateLineDash(GfxState *state); virtual void updateFlatness(GfxState *state); virtual void updateLineJoin(GfxState *state); virtual void updateLineCap(GfxState *state); virtual void updateMiterLimit(GfxState *state); virtual void updateLineWidth(GfxState *state); virtual void updateStrokeAdjust(GfxState *state); virtual void updateFillColorSpace(GfxState *state); virtual void updateStrokeColorSpace(GfxState *state); virtual void updateFillColor(GfxState *state); virtual void updateStrokeColor(GfxState *state); virtual void updateBlendMode(GfxState *state); virtual void updateFillOpacity(GfxState *state); virtual void updateStrokeOpacity(GfxState *state); virtual void updateFillOverprint(GfxState *state); virtual void updateStrokeOverprint(GfxState *state); virtual void updateTransfer(GfxState *state); virtual void updateFont(GfxState *state); virtual void updateTextMat(GfxState *state); virtual void updateCharSpace(GfxState *state); virtual void updateRender(GfxState *state); virtual void updateRise(GfxState *state); virtual void updateWordSpace(GfxState *state); virtual void updateHorizScaling(GfxState *state); virtual void updateTextPos(GfxState *state); virtual void updateTextShift(GfxState *state, double shift); virtual void stroke(GfxState *state); virtual void fill(GfxState *state); virtual void eoFill(GfxState *state); virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill( GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep); virtual GBool functionShadedFill(GfxState *state, GfxFunctionShading *shading); virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading POPPLER_RAXIAL_MIN_MAX); virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading POPPLER_RAXIAL_MIN_MAX); virtual void clip(GfxState *state); virtual void eoClip(GfxState *state); virtual void clipToStrokePath(GfxState *state); virtual void beginStringOp(GfxState *state); virtual void endStringOp(GfxState *state); virtual void beginString(GfxState *state, GString *s); virtual void endString(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen); virtual void drawString(GfxState *state, GString *s); virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); virtual void endType3Char(GfxState *state); virtual void endTextObject(GfxState *state); virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg); virtual void drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg); virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE); virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE); virtual void type3D0(GfxState *state, double wx, double wy); virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury); virtual void drawForm(Ref id); virtual void beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask); virtual void endTransparencyGroup(GfxState *state); virtual void paintTransparencyGroup(GfxState *state, double *bbox); virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor); virtual void clearSoftMask(GfxState *state); virtual void processLink(Link *link, Catalog *catalog); virtual void setVectorAntialias(GBool vaa); virtual GBool getVectorAntialias(); private: void flushEverything(); void clearClips(int x1, int y1, int x2, int y2); void clearBoolPolyDev(); void clearBoolTextDev(); void flushText(); void flushBitmap(); GBool checkNewText(int x1, int y1, int x2, int y2); GBool checkNewBitmap(int x1, int y1, int x2, int y2); GBool clip0and1differ(int x1,int y1,int x2,int y2); GBool intersection(SplashBitmap*boolpoly, SplashBitmap*booltext, int x1, int y1, int x2, int y2); virtual gfxbbox_t getImageBBox(GfxState*state); virtual gfxbbox_t getBBox(GfxState*state); char config_extrafontdata; char config_optimizeplaincolorfills; char config_skewedtobitmap; char config_alphatobitmap; char config_transparent; int text_x1,text_y1,text_x2,text_y2; int layerstate; GBool emptypage; SplashPath*bboxpath; SplashOutputDev*rgbdev; SplashOutputDev*clip0dev; SplashOutputDev*clip1dev; SplashOutputDev*boolpolydev; SplashOutputDev*booltextdev; SplashBitmap*rgbbitmap; SplashBitmap*clip0bitmap; SplashBitmap*clip1bitmap; SplashBitmap*boolpolybitmap; SplashBitmap*stalepolybitmap; SplashBitmap*booltextbitmap; SplashBitmap*staletextbitmap; gfxdevice_t* gfxoutput; gfxdevice_t* gfxoutput_string; CharOutputDev*gfxdev; gfxdevice_t*dev; //ClipState*clipstates; }; #endif swftools_0.9.2+git20130725.orig/lib/pdf/VectorGraphicOutputDev.h0000644000175000017500000001647012216332640023443 0ustar gawaingawain#ifndef __vectorgraphicsoutputdev_h__ #define __vectorgraphicsoutputdev_h__ #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../kdtree.h" #include "CommonOutputDev.h" #include "InfoOutputDev.h" #include "CharOutputDev.h" #include "PDFDoc.h" #include "GlobalParams.h" class GFXOutputState { public: int clipping; int textRender; char createsoftmask; char transparencygroup; char softmask; char softmask_alpha; char isolated; gfxbbox_t clipbbox; GFXOutputState(); gfxresult_t* grouprecording; // for transparency groups gfxresult_t* softmaskrecording; // for soft masks gfxdevice_t* olddevice; double *dashPattern; int dashLength; double dashStart; GfxState*state; }; void addGlobalFont(const char*filename); void addGlobalLanguageDir(const char*dir); void addGlobalFontDir(const char*dirname); class GFXLink; void drawchar_callback(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix); void addfont_callback(gfxdevice_t*dev, gfxfont_t*font); class VectorGraphicOutputDev: public CommonOutputDev { public: gfxdevice_t* device; VectorGraphicOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2); virtual ~VectorGraphicOutputDev() ; virtual void setDevice(gfxdevice_t*dev); virtual void setParameter(const char*key, const char*value); // Start a page. virtual void beginPage(GfxState *state, int pageNum); virtual void endPage(); virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data) = NULL, void *abortCheckCbkData = NULL); //----- get info about output device // Does this device use upside-down coordinates? // (Upside-down means (0,0) is the top left corner of the page.) virtual GBool upsideDown(); // Does this device use drawChar() or drawString()? virtual GBool useDrawChar(); //virtual GBool useShadedFills() { return gTrue; } //----- link borders virtual void processLink(Link *link, Catalog *catalog); virtual void setDefaultCTM(double *ctm); //----- save/restore graphics state virtual void saveState(GfxState *state) ; virtual void restoreState(GfxState *state) ; //----- update graphics state virtual void updateLineDash(GfxState *state); virtual void updateFont(GfxState *state); virtual void updateFontMatrix(GfxState *state); //----- path painting virtual void stroke(GfxState *state) ; virtual void fill(GfxState *state) ; virtual void eoFill(GfxState *state) ; //----- path clipping virtual void clip(GfxState *state) ; virtual void eoClip(GfxState *state) ; virtual void clipToStrokePath(GfxState *state); //----- shaded fills virtual GBool useTilingPatternFill(); virtual GBool useShadedFills(); virtual POPPLER_TILING_PATERN_RETURN tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep); virtual GBool functionShadedFill(GfxState *state, GfxFunctionShading *shading); virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading); virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading); //----- text drawing virtual void beginString(GfxState *state, GString *s) ; virtual void endString(GfxState *state) ; virtual void endTextObject(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen); //----- image drawing virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg); virtual void drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg); virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert); virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap); //----- transparency groups and soft masks (xpdf >= ~ 3.01.16) virtual void beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask); virtual void endTransparencyGroup(GfxState *state); virtual void paintTransparencyGroup(GfxState *state, double *bbox); virtual void setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor); virtual void clearSoftMask(GfxState *state); //----- type 3 chars virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); virtual void endType3Char(GfxState *state); virtual void type3D0(GfxState *state, double wx, double wy); virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury); char* searchForSuitableFont(GfxFont*gfxFont); void finish(); virtual GBool useDrawForm(); virtual void drawForm(Ref id); virtual GBool needNonText(); private: gfxline_t* gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed); void drawGeneralImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap*colorMap, GBool invert, GBool inlineImg, int mask, int *maskColors, Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert, GfxImageColorMap*maskColorMap); void strokeGfxline(GfxState *state, gfxline_t*line, int flags); void clipToGfxLine(GfxState *state, gfxline_t*line, char evenodd); void fillGfxLine(GfxState *state, gfxline_t*line, char evenodd); int currentpage; char outer_clip_box; //whether the page clip box is still on GFXOutputState states[64]; int statepos; int type3active; // are we between beginType3()/endType3()? GfxState *laststate; gfxline_t* current_text_stroke; gfxline_t* current_text_clip; gfxfont_t* current_gfxfont; FontInfo*current_fontinfo; gfxmatrix_t current_font_matrix; /* config */ int config_break_on_warning; int config_remapunicode; int config_transparent; int config_convertgradients; int config_disable_polygon_conversion; int config_multiply; int config_drawonlyshapes; int config_textonly; int config_disable_tiling_pattern_fills; gfxdevice_t char_output_dev; CharOutputDev*charDev; friend void drawchar_callback(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix); friend void addfont_callback(gfxdevice_t*dev, gfxfont_t*font); gfxfont_t*gfxfont_from_callback; int glyphnr_from_callback; gfxcolor_t textcolor_from_callback; gfxmatrix_t textmatrix_from_callback; }; #endif //__vectorgraphicsoutputdev_h__ swftools_0.9.2+git20130725.orig/lib/pdf/CharOutputDev.h0000644000175000017500000000641712216332640021560 0ustar gawaingawain#ifndef __charoutputdev_h__ #define __charoutputdev_h__ #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../kdtree.h" #include "InfoOutputDev.h" #include "PDFDoc.h" #include "GlobalParams.h" #include "CommonOutputDev.h" extern void addGlobalFont(const char*filename); extern void addGlobalLanguageDir(const char*dir); extern void addGlobalFontDir(const char*dirname); class GFXLink; class CharOutputDev: public CommonOutputDev { public: gfxdevice_t* device; CharOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2); virtual ~CharOutputDev(); virtual void setDevice(gfxdevice_t*dev); virtual void setParameter(const char*key, const char*value); virtual void beginPage(GfxState *state, int pageNum); virtual void endPage(); virtual GBool upsideDown(); virtual GBool useDrawChar(); virtual void processLink(Link *link, Catalog *catalog); virtual void saveState(GfxState *state) ; virtual void restoreState(GfxState *state) ; //----- update graphics state virtual void updateFont(GfxState *state); virtual void updateTextMat(GfxState *state); //----- text drawing virtual void beginString(GfxState *state, GString *s) ; virtual void endString(GfxState *state) ; virtual void endTextObject(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen); //----- type 3 chars virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); virtual void endType3Char(GfxState *state); virtual void type3D0(GfxState *state, double wx, double wy); virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury); virtual GBool needNonText(); private: int currentpage; int type3active; // are we between beginType3()/endType3()? gfxline_t* current_text_stroke; gfxline_t* current_text_clip; // state variables for space char detection int last_char; double last_char_x; double last_char_y; double last_char_x_fontsize; double last_char_y_fontsize; double last_char_advance; double last_average_advance; double last_ascent; double last_descent; char last_char_was_space; GFXLink*last_link; GFXLink*previous_link; kdtree_t*links; /* config */ int config_use_fontconfig; int config_remapunicode; int config_extrafontdata; int config_bigchar; int config_detectspaces; int config_space_between_lines; double config_fontquality; char* config_linkdatafile; }; class GFXLink { double x1,y1,x2,y2; int size; int buf_size; char*text; public: const char*action; GFXLink*last; void draw(CharOutputDev*out, gfxdevice_t*dev); void addchar(int unicode); GFXLink(GFXLink*last, const char*action, double x1, double y1, double x2, double y2); ~GFXLink(); }; class GFXGlobalParams: public GlobalParams { public: GFXGlobalParams(); ~GFXGlobalParams(); virtual DisplayFontParam *getDisplayFont(GString *fontName); virtual DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection); }; #endif //__charoutputdev_h__ swftools_0.9.2+git20130725.orig/lib/pdf/cmyk.cc0000644000175000017500000056214012216332640020124 0ustar gawaingawain#include #include #include #include "GfxState.h" static struct _rgb {unsigned char r,g,b;} cmyk2rgb[8*16*16*8] = { {255,255,255},{222,223,225},{191,192,195},{162,164,167},{133,135,138},{106,107,110},{73,74,75},{34,30,31},{255,254,241},{223,222,212},{192,191,184},{163,163,157},{134,134,129},{107,106,103},{74,73,70},{33,29,27},{255,253,227},{223,221,199},{192,191,174},{163,163,147},{135,134,121},{107,106,96},{74,73,65},{33,29,23},{255,252,214},{224,220,188},{193,190,164},{164,162,140},{135,133,115},{107,105,90},{74,72,61},{32,28,19}, {255,251,201},{225,220,177},{193,190,154},{164,162,132},{135,133,108},{107,105,85},{74,72,56},{32,28,15},{255,250,187},{226,219,165},{194,189,144},{164,161,122},{135,132,100},{107,104,79},{74,72,52},{31,28,9},{255,249,173},{227,219,154},{195,189,134},{164,160,113},{135,132,92},{107,104,72},{74,72,47},{31,28,5},{255,248,160},{226,218,142},{195,188,123},{165,159,104},{135,131,85},{107,103,65},{74,71,41},{30,27,2}, {255,247,147},{227,216,130},{196,187,112},{165,158,95},{135,131,77},{107,103,59},{74,71,35},{29,26,0},{255,246,133},{228,215,117},{197,186,101},{165,157,86},{135,130,69},{107,103,52},{74,70,29},{28,26,0},{255,245,117},{228,214,103},{196,186,90},{165,157,76},{135,130,60},{107,103,44},{74,70,21},{27,26,0},{255,244,100},{227,214,89},{195,185,78},{165,157,65},{135,129,50},{107,102,35},{73,70,12},{26,26,0}, {255,244,78},{227,213,72},{195,184,62},{165,156,51},{135,129,38},{107,102,22},{73,70,6},{25,26,0},{255,243,54},{228,212,52},{196,183,44},{165,155,36},{135,128,24},{107,101,7},{72,69,1},{24,25,0},{255,242,27},{228,212,27},{196,183,22},{165,155,18},{135,128,12},{107,101,3},{72,69,0},{24,25,0},{255,241,0},{227,212,0},{195,182,0},{165,154,0},{136,127,0},{107,100,0},{72,69,0},{24,25,0}, {253,241,246},{220,210,216},{190,182,189},{161,154,161},{133,127,133},{106,101,105},{74,69,72},{34,26,28},{254,240,232},{221,209,204},{191,181,178},{162,154,152},{133,127,125},{106,100,99},{74,68,67},{33,25,24},{254,239,219},{222,209,193},{191,181,168},{162,154,143},{134,127,117},{106,100,92},{74,68,62},{33,25,20},{254,238,207},{222,208,182},{192,180,159},{163,153,135},{134,126,111},{106,99,87},{74,67,58},{32,24,16}, {254,237,194},{223,207,172},{192,179,149},{163,153,127},{134,126,104},{106,99,82},{74,67,53},{32,24,11},{255,236,181},{224,206,160},{193,178,140},{163,152,118},{134,125,97},{106,98,76},{73,67,49},{31,24,6},{255,235,168},{225,206,149},{193,178,130},{163,151,110},{134,124,89},{106,98,69},{73,67,44},{31,23,2},{255,234,155},{225,205,137},{194,177,119},{164,150,101},{134,124,82},{106,97,62},{73,66,38},{30,23,1}, {255,233,143},{225,204,126},{194,176,108},{164,149,92},{134,124,74},{106,97,56},{73,66,32},{29,22,0},{255,232,129},{226,203,114},{195,176,98},{164,148,83},{134,123,66},{106,97,49},{73,65,26},{28,22,0},{255,231,114},{226,202,100},{194,176,88},{164,148,73},{134,123,57},{106,97,41},{73,65,19},{27,22,0},{255,230,98},{226,202,86},{194,175,76},{164,148,63},{134,122,48},{106,96,32},{72,65,10},{26,22,0}, {255,230,77},{226,201,70},{194,174,61},{164,147,49},{134,122,36},{106,96,20},{72,65,5},{26,22,0},{255,229,56},{226,200,53},{194,173,45},{164,146,35},{134,121,22},{106,95,6},{72,64,0},{25,21,0},{255,229,28},{226,200,28},{194,173,23},{164,146,17},{134,121,11},{106,95,2},{72,64,0},{25,21,0},{255,228,0},{226,200,1},{194,172,2},{164,146,0},{135,120,0},{106,94,0},{72,64,0},{24,21,0}, {252,226,237},{219,197,207},{189,172,182},{161,145,155},{133,119,128},{106,94,101},{75,63,70},{34,21,26},{253,225,224},{220,197,196},{190,171,172},{162,145,146},{133,119,121},{105,93,95},{74,62,65},{33,20,22},{254,224,211},{221,197,186},{191,171,162},{162,145,138},{133,119,114},{105,93,89},{74,62,59},{33,20,16},{254,223,199},{221,196,176},{192,170,153},{162,144,130},{133,118,108},{105,92,84},{74,61,55},{32,20,12}, {254,222,187},{221,195,166},{192,169,144},{162,144,122},{133,118,101},{105,92,79},{74,61,51},{32,20,8},{255,221,175},{223,194,154},{192,168,135},{163,143,115},{133,117,94},{105,91,73},{73,61,46},{31,19,3},{255,220,162},{224,194,144},{192,168,126},{163,142,107},{133,116,86},{105,91,67},{73,61,41},{31,18,0},{255,219,150},{224,193,133},{193,167,115},{163,141,98},{134,116,79},{106,91,60},{73,60,36},{30,18,0}, {255,219,138},{224,192,122},{193,166,105},{163,141,89},{134,116,72},{106,91,54},{73,60,30},{29,18,0},{255,218,126},{224,191,111},{193,166,96},{163,140,81},{134,115,64},{106,90,47},{73,60,24},{28,17,0},{255,218,111},{225,191,98},{193,166,86},{163,140,71},{134,115,55},{106,90,39},{73,60,17},{27,17,0},{255,217,96},{226,190,84},{194,165,75},{164,140,61},{134,114,46},{106,89,30},{72,59,8},{26,17,0}, {255,217,77},{226,190,69},{194,165,60},{164,139,48},{134,114,34},{106,89,18},{72,59,4},{26,17,0},{255,216,57},{225,189,53},{193,164,45},{163,138,34},{133,113,21},{105,88,6},{72,59,0},{25,17,0},{255,216,30},{225,189,28},{193,164,24},{163,138,17},{133,113,10},{105,88,2},{72,59,0},{25,17,0},{255,215,1},{226,188,3},{194,163,3},{163,138,0},{134,113,0},{106,88,0},{72,59,0},{24,16,0}, {250,214,229},{217,186,201},{188,162,176},{160,137,151},{133,112,124},{105,88,97},{74,59,66},{34,15,22},{251,212,217},{218,185,190},{189,161,167},{161,137,142},{133,112,117},{105,87,91},{73,58,61},{34,15,18},{252,211,204},{219,185,180},{190,161,158},{161,137,134},{133,112,110},{105,87,85},{73,58,56},{34,15,12},{252,211,193},{220,184,170},{190,160,149},{161,136,126},{132,111,104},{105,86,81},{73,57,52},{33,15,8}, {253,210,181},{220,184,161},{190,160,140},{161,135,118},{132,111,97},{105,86,75},{73,57,48},{32,15,4},{253,209,169},{221,183,150},{191,159,131},{162,135,111},{132,110,90},{104,85,69},{73,57,44},{32,14,2},{253,208,158},{221,183,140},{191,159,122},{162,135,103},{132,110,83},{104,85,63},{73,57,39},{32,14,0},{254,207,146},{222,182,129},{191,158,112},{162,134,95},{133,109,76},{105,85,57},{73,56,33},{31,14,0}, {254,207,134},{222,182,118},{191,157,103},{162,134,87},{133,109,70},{105,85,51},{73,56,27},{30,14,0},{254,206,122},{223,181,108},{191,157,94},{162,133,79},{133,108,62},{105,84,45},{73,56,22},{29,13,0},{254,206,108},{223,181,96},{191,156,83},{162,133,69},{133,108,53},{105,84,37},{73,56,15},{28,13,0},{254,205,94},{223,180,83},{192,155,72},{162,132,59},{133,108,44},{105,84,28},{72,55,6},{27,13,0}, {254,205,76},{223,180,68},{192,155,58},{162,132,46},{133,108,33},{105,84,17},{72,55,3},{27,13,0},{255,204,58},{223,179,53},{191,155,44},{162,131,33},{133,107,20},{105,84,5},{72,55,0},{26,13,0},{255,204,34},{223,179,30},{191,155,25},{162,131,18},{133,107,10},{105,84,2},{72,55,0},{26,13,0},{254,203,9},{224,178,7},{192,154,5},{162,130,1},{133,106,0},{105,83,0},{72,55,0},{25,12,0}, {249,201,221},{216,175,194},{188,151,170},{160,129,146},{133,105,120},{105,81,94},{74,54,63},{34,10,19},{250,199,209},{217,174,183},{189,150,161},{161,129,137},{133,105,113},{105,81,88},{73,53,58},{34,10,14},{250,198,197},{218,174,173},{189,150,152},{161,129,129},{133,105,106},{105,81,82},{73,53,53},{34,10,8},{251,198,186},{219,173,164},{189,150,144},{160,128,122},{132,104,100},{105,81,78},{73,52,49},{33,10,5}, {252,198,175},{220,173,156},{189,150,135},{160,127,114},{132,103,94},{105,81,72},{73,52,45},{32,10,2},{252,197,164},{219,172,146},{190,149,126},{161,127,107},{132,103,87},{104,80,66},{73,52,41},{32,9,1},{252,196,153},{219,172,136},{191,149,118},{161,127,99},{132,103,80},{104,80,60},{73,52,36},{32,9,0},{252,195,142},{220,171,125},{190,148,109},{161,126,92},{132,102,73},{104,80,54},{73,52,30},{31,9,0}, {252,195,130},{221,171,115},{190,148,100},{161,126,84},{132,102,67},{104,80,48},{73,52,24},{30,9,0},{253,194,118},{221,170,105},{190,147,91},{162,125,76},{133,101,60},{105,79,42},{73,51,19},{29,9,0},{253,194,105},{221,170,93},{190,147,80},{162,125,66},{133,101,51},{105,79,35},{73,51,13},{28,9,0},{253,193,91},{221,169,81},{191,146,69},{161,124,56},{132,101,43},{104,79,27},{72,51,5},{27,8,0}, {253,193,76},{221,169,68},{191,146,57},{161,124,45},{132,101,32},{104,79,17},{72,51,2},{27,8,0},{254,192,59},{222,168,53},{190,146,44},{162,123,33},{133,100,20},{105,78,5},{72,51,0},{26,9,0},{254,192,38},{222,168,32},{190,146,25},{162,123,18},{133,100,10},{105,78,2},{72,51,0},{26,9,0},{253,191,16},{222,167,12},{190,145,7},{161,122,2},{133,99,0},{105,78,0},{72,51,0},{26,8,0}, {247,187,214},{215,164,187},{187,141,164},{159,120,140},{132,98,115},{104,75,90},{73,48,60},{34,4,15},{248,185,202},{216,163,177},{188,140,155},{159,119,132},{132,98,108},{104,75,84},{73,47,55},{34,4,10},{249,184,190},{217,162,167},{188,140,146},{159,119,124},{132,98,101},{104,75,78},{73,47,51},{34,4,6},{250,184,179},{218,161,158},{188,140,138},{159,119,117},{131,97,96},{105,75,74},{74,47,47},{33,4,3}, {250,184,169},{218,161,150},{188,140,130},{159,118,110},{131,96,90},{105,75,70},{74,47,43},{33,4,1},{250,183,158},{218,160,140},{189,139,122},{160,118,103},{131,96,84},{104,74,64},{73,47,39},{32,3,0},{250,183,147},{218,160,130},{189,139,114},{160,118,95},{131,96,77},{104,74,58},{73,47,34},{32,3,0},{250,182,136},{219,159,121},{189,138,105},{160,117,88},{132,95,70},{104,74,52},{72,46,28},{31,3,0}, {250,181,126},{220,159,111},{189,138,96},{160,117,80},{132,95,64},{104,74,46},{72,46,22},{29,3,0},{251,180,114},{219,159,101},{189,137,87},{161,116,73},{132,94,57},{104,73,40},{73,46,17},{28,3,0},{251,180,102},{219,159,91},{189,137,78},{161,116,64},{132,94,49},{104,73,33},{73,46,11},{28,3,0},{251,179,89},{219,158,79},{189,136,67},{160,115,54},{131,94,41},{104,73,25},{72,46,4},{28,3,0}, {251,179,75},{219,158,66},{189,136,55},{160,115,44},{131,94,30},{104,73,15},{72,46,1},{28,3,0},{252,179,60},{220,157,52},{189,136,43},{160,114,32},{132,93,18},{104,72,4},{72,46,0},{27,3,0},{252,179,41},{220,157,34},{189,136,26},{160,114,17},{132,93,9},{104,72,2},{72,46,0},{27,3,0},{251,178,22},{220,156,16},{189,135,9},{160,114,2},{132,93,0},{104,72,0},{71,46,0},{27,3,0}, {246,173,206},{214,152,181},{186,131,158},{158,111,135},{131,90,110},{104,69,86},{73,42,57},{34,0,11},{247,172,194},{215,152,171},{187,130,149},{158,110,127},{131,90,104},{104,69,81},{73,42,52},{34,0,7},{247,171,182},{215,151,161},{187,130,140},{158,110,119},{131,90,97},{104,69,75},{73,42,48},{34,0,3},{248,170,173},{216,150,152},{187,130,133},{159,110,112},{131,89,93},{105,69,71},{74,42,44},{33,0,2}, {248,170,163},{216,150,144},{187,130,125},{159,110,106},{131,89,87},{105,69,67},{74,42,40},{33,0,0},{248,170,153},{217,149,135},{187,129,118},{159,109,99},{131,88,81},{104,68,61},{73,42,36},{32,0,0},{248,170,142},{217,149,126},{187,129,110},{159,109,92},{131,88,74},{104,68,56},{73,42,31},{32,0,0},{248,169,132},{217,148,117},{188,128,101},{160,108,85},{132,88,67},{104,68,50},{72,41,25},{31,0,0}, {249,169,122},{218,148,107},{188,128,93},{160,108,77},{132,88,61},{104,68,44},{72,41,20},{29,0,0},{250,168,111},{217,148,98},{188,127,84},{160,107,70},{132,87,54},{104,67,38},{73,41,15},{28,0,0},{250,168,99},{217,148,88},{188,127,75},{160,107,61},{132,87,47},{104,67,31},{73,41,9},{28,0,0},{249,167,87},{217,147,77},{188,126,65},{160,106,52},{131,87,39},{104,67,23},{72,41,4},{28,0,0}, {249,167,73},{217,147,64},{188,126,53},{160,106,42},{131,87,28},{104,67,14},{72,41,1},{28,0,0},{250,166,59},{218,146,51},{188,126,42},{159,106,31},{131,86,17},{103,66,4},{72,41,0},{27,0,0},{250,166,43},{218,146,35},{188,126,27},{159,106,17},{131,86,9},{103,66,2},{72,41,0},{27,0,0},{249,165,27},{218,145,19},{188,125,11},{159,106,3},{132,86,0},{104,66,0},{71,41,0},{27,0,0}, {245,160,198},{213,140,174},{185,121,152},{157,102,130},{130,83,106},{104,62,83},{73,37,54},{34,0,8},{246,159,187},{214,140,164},{186,120,143},{157,101,122},{131,82,100},{104,62,78},{73,37,49},{34,0,4},{246,159,175},{214,140,155},{186,120,135},{157,101,114},{131,82,94},{104,62,72},{73,37,46},{34,0,1},{247,158,166},{215,139,147},{186,120,128},{158,101,108},{130,82,89},{104,62,68},{73,37,42},{33,0,1}, {247,158,158},{215,139,139},{186,120,121},{158,101,102},{130,82,84},{104,62,64},{73,37,38},{33,0,0},{246,157,148},{216,138,130},{186,119,114},{158,100,95},{131,81,78},{103,61,58},{72,37,33},{32,0,0},{246,157,138},{216,138,122},{186,119,106},{158,100,88},{131,81,71},{103,61,53},{72,37,28},{32,0,0},{247,157,129},{216,137,113},{187,118,98},{159,99,81},{131,81,65},{103,61,48},{71,36,23},{31,0,0}, {248,157,119},{216,137,104},{187,118,90},{159,99,74},{131,81,59},{103,61,42},{71,36,18},{30,0,0},{249,156,108},{216,137,95},{187,118,82},{159,99,67},{131,80,52},{103,61,35},{72,36,12},{29,0,0},{249,156,97},{216,137,85},{187,118,73},{159,99,60},{131,80,44},{103,61,28},{72,36,8},{29,0,0},{248,155,85},{216,136,75},{187,117,63},{159,99,51},{131,80,37},{103,61,21},{72,36,3},{28,0,0}, {248,155,72},{216,136,63},{187,117,52},{159,99,41},{131,80,27},{103,61,13},{72,36,1},{28,0,0},{248,154,58},{217,135,50},{187,117,41},{158,98,30},{130,79,16},{103,60,3},{71,36,0},{27,0,0},{248,154,43},{217,135,36},{187,117,28},{158,98,18},{130,79,8},{103,60,1},{71,36,0},{27,0,0},{248,153,28},{216,134,22},{187,116,15},{158,98,5},{131,79,0},{103,60,0},{71,36,0},{26,0,0}, {243,147,190},{212,128,168},{184,111,146},{157,93,124},{130,75,102},{104,56,79},{73,30,51},{34,0,4},{244,147,179},{213,128,158},{185,110,138},{157,93,118},{131,74,96},{104,56,74},{73,31,47},{34,0,2},{244,147,169},{213,128,149},{185,110,130},{157,93,110},{131,74,90},{104,56,69},{73,31,43},{34,0,0},{245,146,160},{214,127,141},{185,110,124},{157,93,104},{130,75,85},{104,56,65},{73,31,39},{33,0,0}, {245,146,152},{214,127,133},{185,110,117},{157,93,98},{130,75,80},{104,56,60},{73,31,35},{33,0,0},{244,145,142},{214,127,125},{184,109,110},{156,92,91},{130,74,74},{103,55,55},{72,31,31},{32,0,0},{244,144,133},{214,127,117},{184,109,102},{156,92,84},{130,74,68},{103,55,50},{72,31,26},{31,0,0},{245,145,124},{215,126,109},{185,108,94},{157,91,77},{130,73,62},{102,55,45},{71,30,21},{31,0,0}, {246,145,115},{215,126,100},{185,108,86},{157,91,71},{130,73,56},{102,55,40},{71,30,16},{30,0,0},{247,144,105},{214,125,92},{185,108,79},{157,91,65},{130,73,50},{103,55,33},{72,31,10},{29,0,0},{247,144,94},{214,125,83},{185,108,71},{157,91,58},{130,73,42},{103,55,26},{72,31,6},{29,0,0},{246,143,83},{214,125,73},{185,108,61},{157,91,49},{130,73,35},{103,55,19},{72,31,2},{28,0,0}, {246,143,70},{214,125,61},{185,108,50},{157,91,39},{130,73,25},{103,55,11},{72,31,1},{28,0,0},{246,142,57},{215,124,49},{185,107,40},{157,90,28},{130,73,14},{103,54,3},{71,30,0},{27,0,0},{246,142,44},{215,124,37},{185,107,29},{157,90,18},{130,73,7},{103,54,1},{71,30,0},{27,0,0},{246,141,30},{215,124,24},{185,107,18},{157,90,6},{130,72,0},{103,54,0},{71,30,0},{26,0,0}, {242,135,182},{211,116,161},{183,101,140},{156,84,119},{130,67,98},{103,49,75},{72,23,48},{35,0,1},{243,134,172},{212,116,151},{184,101,133},{156,84,113},{130,67,92},{103,49,71},{72,24,44},{34,0,1},{243,134,162},{212,116,142},{184,101,125},{156,84,106},{130,67,86},{103,49,66},{72,24,40},{33,0,0},{244,134,154},{213,116,135},{184,101,119},{156,84,100},{130,67,81},{103,49,62},{72,24,36},{32,0,0}, {244,134,146},{213,116,128},{184,101,112},{156,84,94},{130,67,76},{103,49,57},{72,24,32},{32,0,0},{243,133,137},{213,116,120},{183,100,105},{155,83,88},{129,67,70},{102,49,52},{71,24,28},{31,0,0},{243,132,128},{213,116,112},{183,100,97},{155,83,81},{129,67,65},{102,49,47},{71,24,23},{30,0,0},{244,132,119},{214,115,105},{184,99,90},{156,83,74},{129,66,59},{103,48,42},{72,24,19},{30,0,0}, {245,132,110},{214,115,96},{184,99,83},{156,83,68},{129,66,53},{103,48,37},{72,24,14},{30,0,0},{245,132,101},{213,114,89},{184,99,76},{156,83,62},{130,66,48},{102,48,32},{71,25,7},{29,0,0},{245,132,91},{213,114,80},{184,99,68},{156,83,55},{130,66,41},{102,48,25},{71,25,4},{29,0,0},{245,131,81},{213,115,70},{184,99,59},{156,82,47},{129,66,34},{102,48,18},{71,25,1},{28,0,0}, {245,131,69},{213,115,60},{184,99,49},{156,82,38},{129,66,24},{102,48,10},{71,25,1},{28,0,0},{245,130,56},{214,114,48},{184,98,39},{156,82,27},{129,66,13},{102,48,3},{71,25,0},{28,0,0},{245,130,45},{214,114,37},{184,98,29},{156,82,17},{129,66,6},{102,48,1},{71,25,0},{28,0,0},{245,130,32},{214,114,25},{184,98,19},{156,81,6},{129,65,0},{102,48,0},{70,25,0},{27,0,0}, {242,121,175},{211,104,154},{183,90,135},{156,74,114},{129,58,93},{103,41,72},{72,14,45},{33,0,0},{242,120,165},{211,104,145},{183,90,128},{156,74,108},{130,58,88},{103,41,68},{72,15,41},{32,0,0},{242,120,156},{211,104,137},{183,90,120},{156,74,102},{130,58,82},{103,41,63},{72,15,37},{31,0,0},{242,120,148},{212,104,130},{184,90,114},{156,74,96},{129,58,78},{103,42,59},{72,15,33},{31,0,0}, {242,120,140},{212,104,123},{184,90,107},{156,74,90},{129,58,73},{103,42,54},{72,15,29},{31,0,0},{242,119,132},{212,104,115},{183,90,101},{155,74,85},{129,58,67},{102,42,49},{71,16,25},{30,0,0},{242,119,123},{212,104,107},{183,90,93},{155,74,78},{129,58,62},{102,42,44},{71,16,20},{29,0,0},{243,119,115},{213,103,100},{183,89,86},{155,74,71},{129,58,56},{102,41,39},{71,16,16},{29,0,0}, {243,119,106},{213,103,93},{183,88,80},{156,74,65},{129,58,50},{102,41,34},{71,16,11},{29,0,0},{243,118,97},{212,103,86},{184,89,73},{156,74,59},{129,58,45},{102,41,29},{71,17,5},{28,0,0},{243,118,88},{212,103,77},{184,89,65},{156,74,52},{129,58,39},{102,41,23},{71,17,3},{28,0,0},{244,118,78},{212,103,67},{184,89,57},{155,73,45},{129,58,32},{102,41,16},{71,17,1},{27,0,0}, {244,118,67},{212,103,58},{184,89,47},{155,73,36},{129,58,22},{102,41,9},{71,17,1},{27,0,0},{243,117,55},{212,103,47},{183,88,38},{155,73,27},{129,58,12},{102,41,3},{71,18,0},{27,0,0},{243,117,44},{212,103,37},{183,88,29},{155,73,17},{129,58,6},{102,41,1},{71,18,0},{27,0,0},{244,117,33},{213,103,25},{184,88,19},{156,73,7},{129,57,0},{102,42,0},{70,18,0},{27,0,0}, {241,106,169},{210,92,148},{182,78,129},{155,64,109},{128,48,89},{103,32,69},{72,5,42},{31,0,0},{241,106,159},{210,92,139},{182,78,122},{155,64,103},{129,49,84},{103,32,64},{72,5,38},{30,0,0},{241,106,150},{210,92,131},{182,78,114},{155,64,97},{129,49,78},{103,32,59},{72,5,35},{29,0,0},{241,106,142},{211,92,125},{183,78,108},{155,64,91},{128,49,74},{103,33,55},{72,5,31},{29,0,0}, {241,106,134},{211,92,118},{183,78,103},{155,64,86},{128,49,69},{103,33,51},{72,5,27},{29,0,0},{241,105,126},{211,92,111},{182,79,97},{155,64,81},{128,48,64},{102,33,47},{71,6,23},{28,0,0},{241,105,118},{211,92,103},{182,79,90},{155,64,76},{128,48,59},{102,33,42},{71,6,18},{27,0,0},{241,105,111},{211,91,96},{182,78,83},{154,64,69},{128,49,54},{101,33,37},{70,6,13},{27,0,0}, {241,105,103},{211,91,89},{182,78,77},{155,64,63},{128,49,48},{101,33,32},{70,7,8},{27,0,0},{242,104,94},{211,91,82},{183,79,70},{156,64,57},{128,49,43},{102,33,27},{71,8,3},{26,0,0},{242,104,85},{211,91,74},{183,79,63},{155,64,50},{128,49,37},{102,33,21},{71,8,2},{26,0,0},{242,105,75},{210,91,65},{183,79,55},{154,64,43},{128,49,30},{101,34,14},{70,8,1},{26,0,0}, {242,104,65},{210,91,56},{183,79,46},{154,64,34},{128,49,20},{101,34,7},{70,8,1},{26,0,0},{242,103,53},{211,91,45},{182,78,37},{154,64,26},{128,49,10},{102,34,2},{70,9,0},{26,0,0},{242,103,43},{211,91,36},{182,78,28},{154,64,17},{128,49,5},{102,34,1},{70,9,0},{26,0,0},{243,103,33},{211,91,26},{183,78,19},{155,64,8},{128,50,0},{101,35,0},{70,10,0},{26,0,0}, {239,89,161},{209,76,141},{181,64,123},{155,51,104},{128,36,85},{103,20,65},{72,2,39},{28,0,0},{240,88,152},{210,77,134},{182,64,117},{155,51,98},{129,37,80},{103,20,61},{72,2,35},{27,0,0},{240,88,143},{210,77,126},{182,64,109},{155,51,92},{129,37,74},{103,20,56},{72,2,32},{27,0,0},{241,88,136},{210,77,120},{182,64,103},{155,51,87},{128,37,70},{102,21,52},{72,2,28},{27,0,0}, {241,89,129},{210,77,113},{182,64,98},{155,51,83},{128,37,66},{102,21,48},{72,2,24},{27,0,0},{241,89,121},{210,77,106},{182,65,92},{154,52,77},{128,37,61},{102,21,44},{71,2,20},{26,0,0},{241,89,114},{210,77,99},{182,65,86},{154,52,72},{128,38,56},{102,21,39},{71,2,15},{26,0,0},{240,89,107},{210,77,92},{182,65,80},{154,52,66},{128,38,51},{101,22,34},{70,2,10},{25,0,0}, {240,89,99},{210,77,86},{182,65,74},{155,53,60},{128,39,45},{101,22,29},{70,3,6},{25,0,0},{241,89,91},{210,77,79},{182,66,67},{155,53,54},{128,39,40},{102,22,24},{71,4,3},{25,0,0},{241,89,82},{210,77,71},{182,66,60},{154,53,47},{128,39,34},{102,22,18},{71,4,2},{25,0,0},{241,89,72},{210,77,62},{182,66,53},{154,53,41},{128,39,27},{101,23,11},{70,4,1},{25,0,0}, {241,89,62},{210,77,54},{182,66,44},{154,53,33},{128,39,19},{101,23,6},{70,4,1},{25,0,0},{241,88,52},{211,77,44},{182,65,36},{154,53,25},{127,39,10},{102,24,2},{70,5,0},{25,0,0},{241,88,43},{211,77,36},{182,65,28},{154,54,17},{127,39,5},{102,24,1},{70,5,0},{25,0,0},{242,88,33},{210,78,27},{182,66,20},{154,54,9},{127,41,0},{101,25,0},{70,5,0},{25,0,0}, {237,71,154},{208,59,134},{180,50,117},{154,38,100},{128,22,81},{102,6,61},{72,0,36},{25,0,0},{238,70,145},{209,60,128},{181,49,111},{154,38,94},{128,23,76},{102,7,57},{72,0,32},{25,0,0},{239,69,137},{209,61,121},{181,49,105},{154,38,88},{128,24,70},{102,7,53},{72,0,29},{25,0,0},{240,70,130},{208,61,115},{181,50,99},{154,39,83},{128,25,66},{101,7,49},{71,0,25},{25,0,0}, {240,71,123},{208,61,108},{181,50,94},{154,39,79},{128,25,62},{101,7,45},{71,0,21},{25,0,0},{240,72,117},{209,62,102},{181,51,88},{153,39,73},{127,25,57},{101,8,40},{71,0,17},{24,0,0},{240,72,110},{209,62,95},{181,51,82},{153,39,68},{127,26,52},{101,9,35},{71,0,12},{24,0,0},{239,72,103},{209,63,88},{181,52,76},{154,40,62},{127,26,47},{101,10,31},{70,0,8},{23,0,0}, {239,72,95},{209,63,82},{181,52,70},{154,41,56},{127,27,42},{101,10,26},{70,0,5},{23,0,0},{239,73,88},{209,62,75},{180,52,64},{153,41,51},{127,28,37},{102,10,21},{71,0,3},{23,0,0},{239,73,79},{209,62,68},{180,52,57},{153,41,45},{127,28,31},{102,10,15},{71,0,1},{23,0,0},{239,72,69},{209,63,60},{181,53,50},{154,41,39},{127,28,25},{101,11,8},{70,1,0},{23,0,0}, {239,72,60},{209,63,52},{181,53,42},{154,41,31},{127,28,17},{101,11,4},{70,1,0},{23,0,0},{239,73,51},{210,63,43},{181,53,35},{154,41,24},{126,28,9},{101,12,1},{69,1,0},{23,0,0},{239,73,43},{210,63,35},{181,53,28},{154,42,17},{126,29,5},{101,13,1},{69,1,0},{23,0,0},{240,73,34},{209,64,28},{181,54,21},{153,43,10},{126,31,1},{101,14,0},{70,1,0},{23,0,0}, {237,37,147},{207,30,128},{180,26,112},{154,19,95},{128,11,77},{102,2,58},{72,0,33},{23,0,0},{238,36,139},{208,31,122},{181,25,106},{154,19,89},{128,11,72},{102,3,54},{72,0,29},{23,0,0},{238,36,131},{208,31,115},{181,25,99},{154,19,83},{128,12,67},{102,3,50},{72,0,26},{23,0,0},{239,37,124},{207,32,109},{181,26,94},{154,20,79},{128,12,63},{101,3,46},{71,0,22},{23,0,0}, {239,38,117},{207,32,103},{181,26,90},{154,20,75},{128,12,59},{101,3,42},{71,0,18},{23,0,0},{238,42,111},{208,34,97},{180,26,84},{153,20,70},{127,13,54},{101,3,37},{71,0,14},{22,0,0},{238,45,104},{208,35,92},{180,27,78},{153,20,64},{127,13,49},{101,4,33},{71,0,10},{22,0,0},{238,44,97},{208,37,85},{180,28,73},{153,20,59},{127,13,44},{101,4,29},{70,0,7},{22,0,0}, {239,45,91},{208,38,79},{180,29,67},{153,21,54},{127,14,40},{101,4,24},{70,0,4},{22,0,0},{238,47,84},{208,37,72},{180,28,61},{153,21,49},{127,14,35},{101,5,19},{71,0,3},{22,0,0},{238,48,76},{208,38,66},{180,29,55},{153,22,43},{127,14,29},{101,5,13},{71,0,1},{22,0,0},{238,49,68},{208,40,59},{180,31,48},{153,22,37},{127,14,23},{101,5,7},{70,1,0},{22,0,0}, {238,49,59},{208,41,51},{180,32,41},{153,23,30},{127,14,16},{101,5,3},{70,1,0},{22,0,0},{239,50,50},{209,42,43},{180,33,34},{154,24,23},{126,14,8},{101,6,1},{69,1,0},{22,0,0},{239,50,43},{209,42,35},{180,33,28},{154,24,17},{126,15,5},{101,6,1},{69,1,0},{22,0,0},{239,51,34},{208,42,28},{181,34,21},{153,25,10},{126,16,1},{101,7,0},{70,1,0},{23,0,0}, {237,0,140},{206,0,122},{179,0,108},{153,0,91},{128,0,73},{102,0,54},{71,0,30},{20,0,0},{237,0,133},{207,0,116},{180,0,101},{153,0,85},{127,0,68},{102,0,50},{71,0,26},{20,0,0},{237,0,125},{207,0,110},{180,0,94},{153,0,79},{127,0,63},{102,0,46},{71,0,23},{20,0,0},{237,1,119},{206,1,104},{180,0,90},{153,0,75},{127,0,59},{102,0,42},{71,0,19},{20,0,0}, {237,3,112},{206,2,99},{180,0,86},{153,0,71},{127,0,55},{102,0,38},{71,0,15},{20,0,0},{236,11,106},{206,4,93},{179,0,80},{152,0,66},{126,0,51},{101,0,34},{70,0,11},{20,0,0},{236,16,99},{206,7,88},{179,1,75},{152,0,61},{126,0,46},{101,0,30},{70,0,8},{20,0,0},{237,15,92},{206,10,81},{179,3,69},{152,0,56},{126,0,41},{100,0,26},{69,0,5},{20,0,0}, {238,16,86},{206,12,75},{179,4,63},{152,0,51},{126,0,37},{100,0,22},{69,0,3},{20,0,0},{237,19,80},{207,11,69},{180,3,58},{153,0,46},{126,0,33},{100,0,17},{70,0,2},{20,0,0},{237,22,73},{207,13,63},{180,5,52},{153,1,41},{126,0,27},{100,0,11},{70,0,1},{20,0,0},{237,24,66},{207,16,57},{179,8,46},{152,2,35},{126,0,21},{100,0,5},{69,0,0},{20,0,0}, {237,25,58},{207,19,50},{179,11,40},{152,3,29},{126,0,14},{100,0,2},{69,0,0},{20,0,0},{238,25,49},{207,21,43},{179,13,33},{153,5,22},{127,0,7},{100,0,0},{69,0,0},{20,0,0},{238,26,42},{207,21,36},{179,13,27},{153,5,16},{127,0,4},{100,0,0},{69,0,0},{21,0,0},{238,28,35},{207,20,29},{180,13,22},{152,5,10},{126,0,1},{100,0,0},{69,0,0},{22,0,0}, {215,240,252},{188,210,222},{162,182,193},{136,154,165},{113,128,136},{88,101,108},{59,69,76},{22,27,32},{217,238,238},{189,209,210},{163,181,183},{137,154,156},{114,127,129},{89,100,102},{59,69,71},{20,26,28},{218,237,224},{189,209,198},{163,181,173},{138,154,147},{114,127,121},{89,100,96},{59,69,65},{19,26,24},{219,236,212},{191,208,188},{164,180,164},{139,153,139},{114,126,114},{89,99,90},{59,68,61},{19,26,20}, {219,236,200},{192,207,177},{165,180,154},{139,153,131},{114,126,107},{89,99,85},{59,68,56},{19,26,17},{221,235,187},{193,206,165},{166,179,144},{140,152,122},{115,125,100},{90,98,79},{59,67,51},{18,25,11},{222,234,174},{194,206,154},{167,179,134},{141,151,114},{115,125,93},{90,98,73},{59,67,46},{17,25,6},{223,233,160},{195,205,143},{168,178,124},{141,150,105},{116,124,86},{90,97,66},{60,66,41},{16,25,2}, {224,232,147},{195,204,131},{168,177,114},{141,150,96},{116,124,78},{90,97,60},{60,66,35},{15,25,0},{225,231,135},{196,203,119},{168,176,104},{142,149,87},{116,123,71},{90,96,53},{59,66,30},{14,24,0},{225,231,120},{196,202,106},{168,176,92},{142,149,77},{116,123,62},{90,96,46},{59,66,23},{13,24,0},{226,230,105},{196,201,93},{169,175,81},{142,148,67},{116,122,53},{91,96,38},{60,65,15},{12,24,0}, {226,230,87},{197,201,77},{169,175,67},{142,148,55},{116,122,42},{91,96,27},{60,65,8},{11,24,0},{226,229,68},{198,200,60},{170,174,53},{143,147,43},{117,121,31},{91,95,16},{60,65,2},{10,24,0},{227,229,46},{198,200,41},{170,174,35},{143,147,26},{117,121,17},{91,95,8},{60,65,1},{10,24,0},{228,229,22},{198,200,21},{170,173,17},{143,146,9},{116,120,2},{90,95,0},{59,64,0},{9,23,0}, {214,226,243},{187,198,215},{162,172,187},{137,146,159},{113,121,132},{88,95,104},{60,64,73},{23,22,29},{216,225,230},{189,197,203},{163,171,177},{138,145,151},{114,120,125},{89,94,98},{60,64,68},{21,21,25},{217,225,217},{190,197,192},{164,171,168},{139,145,142},{114,120,117},{89,94,92},{60,64,62},{20,21,21},{218,224,205},{191,196,182},{165,170,159},{140,144,135},{115,119,110},{90,93,87},{60,63,58},{20,21,17}, {218,223,193},{191,195,171},{165,170,149},{140,144,127},{115,119,103},{90,93,82},{60,63,53},{20,21,13},{220,222,181},{193,194,160},{165,169,140},{140,143,118},{114,118,96},{89,92,76},{60,63,49},{19,21,7},{221,222,168},{194,194,149},{166,169,130},{140,143,110},{114,118,90},{89,92,70},{60,63,44},{18,21,3},{221,221,155},{194,193,138},{167,168,120},{141,142,102},{115,117,83},{89,91,63},{60,62,39},{17,21,1}, {222,220,143},{194,193,127},{167,167,110},{141,141,93},{115,117,75},{89,91,57},{60,62,33},{16,21,0},{223,219,131},{195,192,115},{167,166,101},{141,140,84},{115,116,68},{90,91,50},{60,61,27},{15,20,0},{224,218,117},{196,191,103},{167,166,89},{141,140,74},{115,116,59},{90,91,43},{60,61,21},{14,20,0},{224,218,103},{196,190,90},{168,165,78},{141,140,64},{115,115,51},{90,90,35},{60,61,13},{13,20,0}, {224,217,86},{196,190,76},{168,165,65},{141,140,53},{115,115,40},{90,90,25},{60,61,7},{12,20,0},{225,216,68},{197,189,60},{169,164,52},{142,139,41},{116,114,29},{91,90,14},{60,61,2},{10,20,0},{225,216,48},{197,189,42},{169,164,35},{142,139,26},{116,114,16},{91,90,6},{60,61,1},{10,20,0},{226,216,27},{197,189,24},{169,164,19},{142,139,11},{116,114,3},{90,89,0},{59,60,0},{10,19,0}, {214,213,235},{187,187,207},{162,163,180},{137,138,153},{113,113,127},{88,88,101},{61,59,70},{23,17,26},{216,212,222},{189,186,196},{163,162,171},{139,137,145},{114,112,121},{89,87,95},{61,58,65},{22,16,22},{217,211,209},{190,186,185},{164,162,162},{139,137,137},{114,112,114},{89,87,89},{61,58,60},{21,16,18},{218,211,197},{191,185,175},{165,161,153},{140,136,130},{115,112,107},{90,87,84},{61,58,56},{20,16,14}, {218,211,186},{191,184,164},{165,161,144},{140,136,122},{115,112,100},{90,87,79},{61,58,51},{20,16,10},{219,210,174},{192,183,154},{165,160,135},{140,135,114},{114,111,93},{89,86,73},{61,57,47},{19,16,4},{220,209,162},{193,183,144},{165,160,126},{140,135,106},{114,110,87},{89,86,67},{61,57,42},{19,16,1},{220,208,151},{193,182,133},{166,159,117},{140,134,99},{114,109,80},{89,85,61},{60,57,37},{18,16,0}, {221,207,139},{193,182,123},{166,158,107},{140,133,90},{114,109,73},{89,85,55},{60,57,31},{17,16,0},{222,206,127},{194,181,112},{167,157,98},{141,132,81},{115,108,65},{90,85,48},{60,57,25},{16,15,0},{223,206,114},{195,181,100},{167,157,87},{141,132,72},{115,108,57},{90,85,41},{60,57,19},{15,15,0},{223,206,101},{196,180,88},{167,156,77},{141,132,62},{115,108,49},{90,84,33},{60,56,12},{14,15,0}, {223,205,85},{196,180,75},{167,156,64},{141,132,52},{115,108,39},{90,84,23},{60,56,6},{13,15,0},{224,204,68},{196,179,60},{168,155,51},{142,131,40},{116,107,28},{91,84,12},{60,56,2},{11,15,0},{224,204,49},{196,179,43},{168,155,35},{142,131,26},{116,107,16},{91,84,5},{60,56,1},{11,15,0},{225,204,31},{196,178,26},{168,155,20},{142,131,12},{116,107,3},{90,83,0},{59,56,0},{11,15,0}, {213,201,227},{187,177,200},{162,153,175},{138,130,149},{114,106,123},{89,83,97},{61,55,67},{24,11,24},{215,200,215},{188,176,190},{163,153,165},{138,129,141},{114,106,117},{89,83,92},{61,54,62},{23,11,20},{216,199,202},{189,176,179},{163,153,156},{138,129,133},{114,106,110},{89,83,86},{61,54,57},{23,11,15},{217,199,191},{190,175,169},{164,152,148},{139,129,126},{114,105,103},{89,83,81},{61,54,53},{22,11,10}, {217,199,181},{190,174,160},{164,152,140},{139,129,118},{114,105,97},{89,83,76},{61,54,49},{22,11,6},{218,198,170},{191,173,150},{164,151,131},{140,128,110},{115,105,91},{90,82,70},{60,53,45},{21,11,2},{219,197,158},{192,173,140},{164,151,122},{140,128,102},{115,104,84},{90,82,65},{60,53,40},{20,11,0},{219,196,147},{192,172,129},{165,150,113},{140,127,95},{115,103,77},{90,81,59},{61,53,35},{19,11,0}, {220,195,135},{192,172,119},{165,149,103},{140,126,87},{115,103,71},{90,81,53},{61,53,29},{18,11,0},{221,194,124},{193,171,109},{166,148,94},{141,125,79},{115,102,63},{90,81,46},{61,53,23},{17,11,0},{221,194,112},{193,171,98},{166,148,85},{141,125,70},{115,102,56},{90,81,39},{61,53,17},{15,11,0},{222,194,98},{194,170,86},{166,147,75},{140,125,60},{115,102,47},{90,80,32},{60,52,10},{14,11,0}, {222,194,83},{194,170,73},{166,147,62},{140,125,50},{115,102,37},{90,80,21},{60,52,5},{14,11,0},{223,193,67},{195,169,59},{167,146,50},{141,124,39},{115,101,26},{90,80,10},{60,52,1},{13,11,0},{223,193,50},{195,169,44},{167,146,36},{141,124,26},{115,101,15},{90,80,4},{60,52,0},{12,11,0},{224,192,35},{195,169,28},{167,146,22},{141,124,13},{115,101,4},{90,79,0},{60,52,0},{12,11,0}, {213,189,219},{187,166,193},{162,144,169},{138,122,144},{114,99,119},{89,78,94},{61,51,64},{24,6,21},{214,188,207},{188,165,183},{163,144,160},{138,121,137},{114,99,113},{89,78,89},{61,50,59},{24,6,17},{215,187,195},{189,165,173},{163,144,151},{138,121,129},{114,99,106},{89,78,83},{61,50,54},{24,6,12},{216,187,185},{190,164,164},{164,143,143},{139,121,122},{114,98,100},{89,77,78},{61,50,50},{23,6,7}, {217,187,175},{190,164,155},{164,143,135},{139,121,114},{114,98,94},{89,77,73},{61,50,46},{22,6,3},{218,186,165},{191,163,145},{164,142,126},{140,120,107},{115,98,88},{90,77,67},{60,49,42},{21,6,1},{219,185,154},{191,163,135},{164,142,118},{140,120,99},{115,98,81},{90,77,62},{60,49,37},{21,6,0},{219,184,143},{191,162,125},{165,141,109},{140,119,92},{115,97,74},{90,76,56},{61,49,32},{20,6,0}, {219,184,132},{191,162,115},{165,141,100},{140,119,84},{115,97,68},{90,76,50},{61,49,26},{18,6,0},{220,183,121},{192,161,106},{166,140,91},{141,118,76},{115,96,61},{90,76,44},{61,49,21},{17,6,0},{220,183,109},{192,161,95},{166,140,82},{141,118,68},{115,96,54},{90,76,37},{61,49,14},{15,6,0},{221,183,95},{193,160,84},{166,139,72},{140,117,59},{115,96,45},{90,75,30},{60,48,8},{14,7,0}, {222,183,82},{193,160,71},{166,139,61},{140,117,49},{115,96,35},{90,75,20},{60,48,4},{14,7,0},{223,182,67},{194,159,59},{167,138,49},{141,116,38},{115,95,25},{90,75,9},{60,48,0},{14,7,0},{223,182,51},{194,159,44},{167,138,37},{141,116,26},{115,95,15},{90,75,4},{60,48,0},{13,7,0},{223,181,36},{194,159,30},{167,137,24},{141,116,14},{115,95,4},{90,75,0},{60,48,0},{12,6,0}, {212,176,210},{186,154,186},{162,134,162},{138,113,139},{114,92,115},{90,72,90},{62,45,60},{25,3,17},{213,175,200},{187,154,176},{163,134,154},{139,113,132},{114,92,109},{89,72,85},{61,45,56},{24,2,13},{214,175,189},{188,154,166},{163,134,145},{139,113,124},{114,92,102},{89,72,79},{61,45,51},{24,2,8},{215,175,179},{189,153,158},{163,133,138},{139,112,117},{114,91,96},{90,71,75},{61,44,47},{23,2,4}, {216,175,169},{189,153,149},{164,133,131},{139,112,110},{114,91,90},{90,71,70},{61,44,43},{23,2,1},{217,174,159},{190,153,140},{164,133,122},{139,112,103},{114,91,84},{89,71,64},{61,44,39},{22,2,0},{217,173,148},{190,153,131},{164,133,114},{139,112,96},{114,91,78},{89,71,59},{61,44,35},{21,2,0},{218,172,137},{190,152,121},{164,132,105},{140,111,89},{114,90,71},{90,70,54},{61,44,30},{20,2,0}, {219,172,127},{190,152,111},{165,132,97},{140,111,82},{114,90,65},{90,70,48},{61,44,24},{18,2,0},{220,171,117},{191,151,102},{166,131,89},{140,110,74},{114,90,59},{90,70,42},{60,44,19},{17,2,0},{220,171,105},{191,151,93},{166,131,80},{140,110,66},{114,90,52},{90,70,35},{60,44,12},{16,2,0},{220,171,93},{192,150,82},{165,130,70},{140,109,57},{114,89,43},{89,69,28},{60,44,6},{15,3,0}, {220,171,80},{192,150,69},{165,130,59},{140,109,47},{114,89,34},{89,69,18},{60,44,3},{15,3,0},{221,170,66},{193,149,57},{166,129,47},{140,109,36},{114,89,24},{89,69,8},{60,44,0},{15,3,0},{221,170,51},{193,149,44},{166,129,36},{140,109,26},{114,89,14},{89,69,3},{60,44,0},{14,3,0},{221,169,37},{193,149,31},{166,128,24},{140,108,14},{114,89,4},{89,69,0},{59,43,0},{13,2,0}, {212,164,202},{186,143,179},{162,124,156},{138,105,134},{114,86,110},{90,66,86},{62,40,57},{25,0,14},{213,163,192},{187,143,169},{163,124,148},{139,105,127},{114,85,104},{90,66,81},{61,40,53},{24,0,9},{214,163,182},{187,143,160},{163,124,140},{139,105,119},{114,85,98},{90,66,76},{61,40,48},{24,0,5},{215,162,173},{188,142,152},{163,124,133},{139,104,112},{114,85,92},{90,65,72},{61,39,44},{23,0,2}, {216,162,163},{188,142,144},{164,124,126},{139,104,106},{114,85,87},{90,65,67},{61,39,40},{23,0,0},{216,162,153},{189,142,135},{164,123,117},{139,104,100},{114,84,81},{89,65,61},{61,39,36},{22,0,0},{216,161,142},{189,142,126},{164,123,109},{139,104,93},{114,84,75},{89,65,56},{61,39,32},{21,0,0},{217,161,132},{190,141,117},{164,122,102},{140,103,86},{114,84,68},{90,64,51},{61,39,27},{20,0,0}, {218,160,122},{190,141,108},{165,122,94},{140,103,79},{114,84,62},{90,64,45},{61,39,21},{18,0,0},{219,159,113},{191,140,99},{166,122,86},{140,102,72},{114,83,56},{90,64,39},{60,39,16},{17,0,0},{219,159,102},{191,140,90},{166,122,77},{140,102,64},{114,83,49},{90,64,32},{60,39,10},{17,0,0},{219,159,91},{191,139,80},{165,121,67},{140,101,55},{114,83,41},{89,63,25},{60,39,5},{16,0,0}, {219,159,78},{191,139,67},{165,121,57},{140,101,45},{114,83,32},{89,63,16},{60,39,2},{16,0,0},{220,159,66},{192,138,56},{166,120,46},{140,101,35},{114,83,23},{89,63,7},{60,39,0},{15,0,0},{220,159,51},{192,138,44},{166,120,36},{140,101,26},{114,83,14},{89,63,3},{60,39,0},{14,0,0},{220,158,37},{192,138,32},{165,120,24},{140,100,14},{114,83,4},{89,63,0},{59,38,0},{13,0,0}, {212,152,195},{185,132,173},{161,115,150},{137,98,128},{113,79,106},{90,59,83},{62,34,54},{23,0,10},{213,151,185},{186,132,163},{162,115,143},{138,97,122},{114,78,100},{90,59,78},{62,34,50},{23,0,6},{214,151,175},{186,132,154},{162,115,135},{138,97,114},{114,78,94},{90,59,73},{62,34,46},{23,0,2},{214,150,166},{187,131,147},{163,115,128},{138,97,108},{114,78,89},{90,59,69},{61,34,42},{22,0,1}, {215,150,158},{187,131,139},{163,115,121},{138,97,102},{114,78,84},{90,59,64},{61,34,38},{21,0,0},{215,150,148},{188,131,130},{163,114,113},{138,96,96},{114,77,78},{90,59,58},{61,34,34},{20,0,0},{215,150,138},{188,131,122},{163,114,105},{138,96,89},{114,77,72},{90,59,53},{61,34,29},{20,0,0},{216,149,128},{189,130,113},{164,113,98},{139,96,82},{114,77,65},{90,58,48},{61,34,24},{19,0,0}, {217,149,118},{189,130,104},{164,113,90},{139,96,76},{114,77,59},{90,58,42},{61,34,19},{18,0,0},{218,148,109},{190,130,96},{165,113,83},{139,95,69},{113,76,53},{90,58,37},{61,34,13},{17,0,0},{218,148,99},{190,130,87},{165,113,74},{139,95,61},{113,76,47},{90,58,31},{61,34,8},{17,0,0},{218,148,88},{190,129,77},{164,112,65},{139,94,53},{113,76,40},{89,58,24},{60,34,4},{16,0,0}, {218,148,76},{190,129,66},{164,112,55},{139,94,44},{113,76,31},{89,58,15},{60,34,1},{15,0,0},{219,147,64},{191,128,55},{165,111,45},{139,94,34},{114,76,22},{90,58,6},{60,34,0},{14,0,0},{219,147,52},{191,128,44},{165,111,35},{139,94,25},{114,76,13},{90,58,2},{60,34,0},{14,0,0},{219,147,38},{191,128,33},{165,111,25},{139,93,13},{113,76,3},{89,58,0},{59,34,0},{14,0,0}, {212,140,189},{185,122,167},{161,106,144},{137,90,123},{113,72,102},{90,53,79},{62,27,52},{22,0,6},{213,139,179},{186,122,157},{162,105,137},{138,89,117},{114,71,96},{90,53,74},{62,28,48},{22,0,3},{214,139,169},{186,122,148},{162,105,130},{138,89,110},{114,71,90},{90,53,69},{62,28,44},{22,0,0},{214,138,160},{187,121,141},{163,105,123},{138,89,104},{114,71,85},{90,53,65},{61,28,40},{21,0,0}, {214,138,152},{187,121,133},{163,105,116},{138,89,98},{114,71,80},{90,53,61},{61,28,36},{20,0,0},{215,138,143},{187,121,126},{163,105,109},{138,88,92},{114,71,74},{90,53,56},{61,29,32},{19,0,0},{215,138,134},{187,121,118},{163,105,101},{138,88,85},{114,71,68},{90,53,51},{61,29,27},{19,0,0},{215,137,124},{188,120,109},{163,104,94},{138,88,79},{114,71,63},{90,52,46},{61,28,22},{18,0,0}, {215,137,114},{188,120,100},{163,104,87},{138,88,73},{114,71,57},{90,52,40},{61,28,17},{17,0,0},{216,136,105},{189,120,93},{163,104,80},{138,87,66},{113,70,51},{90,52,35},{61,28,11},{16,0,0},{216,136,96},{189,120,84},{163,104,72},{138,87,58},{113,70,45},{90,52,29},{61,28,6},{16,0,0},{217,136,86},{188,119,75},{164,103,63},{138,87,51},{113,70,38},{89,52,22},{60,28,3},{15,0,0}, {217,136,74},{188,119,64},{164,103,53},{138,87,42},{113,70,29},{89,52,13},{60,28,1},{14,0,0},{217,135,62},{189,118,53},{164,103,43},{139,87,32},{114,70,20},{90,52,5},{60,28,0},{13,0,0},{217,135,52},{189,118,44},{164,103,35},{139,87,24},{114,70,11},{90,52,2},{60,28,0},{13,0,0},{218,135,40},{189,118,34},{164,103,25},{139,86,14},{113,70,3},{89,52,0},{59,29,0},{13,0,0}, {211,127,182},{185,111,160},{161,97,139},{136,81,118},{113,64,98},{90,46,76},{61,20,49},{21,0,3},{212,127,172},{186,111,151},{162,96,132},{137,81,112},{113,64,92},{90,46,71},{62,21,45},{20,0,2},{213,127,162},{186,111,143},{162,96,125},{137,81,106},{113,64,86},{90,46,66},{62,21,41},{19,0,0},{214,126,153},{186,111,136},{162,96,119},{138,81,100},{113,64,81},{90,46,62},{61,21,37},{18,0,0}, {214,126,145},{186,111,128},{162,96,112},{138,81,94},{113,64,76},{90,46,58},{61,21,33},{18,0,0},{214,126,138},{186,111,121},{163,96,105},{138,81,88},{113,64,70},{90,46,53},{61,22,29},{17,0,0},{214,126,130},{186,111,113},{163,96,98},{138,81,82},{113,64,65},{90,46,48},{61,22,25},{16,0,0},{214,125,120},{187,110,105},{163,95,91},{138,80,76},{113,64,60},{89,46,43},{61,22,20},{16,0,0}, {214,125,111},{187,110,97},{163,95,85},{138,80,70},{113,64,54},{89,46,37},{61,22,15},{15,0,0},{215,125,102},{188,110,90},{162,95,78},{137,80,63},{113,63,48},{89,46,32},{61,23,9},{14,0,0},{215,125,93},{188,110,81},{162,95,70},{137,80,56},{113,63,42},{89,46,26},{61,23,5},{13,0,0},{216,125,83},{187,109,72},{163,94,61},{138,80,49},{113,63,36},{89,46,20},{60,22,3},{12,0,0}, {216,125,73},{187,109,63},{163,94,52},{138,80,41},{113,63,27},{89,46,12},{60,22,1},{12,0,0},{216,124,61},{188,109,52},{163,95,42},{138,79,31},{113,63,19},{89,46,4},{59,23,0},{12,0,0},{216,124,51},{188,109,43},{163,95,34},{138,79,23},{113,63,10},{89,46,2},{59,23,0},{12,0,0},{217,124,41},{188,109,33},{163,94,25},{138,79,15},{113,63,3},{89,45,0},{59,23,0},{12,0,0}, {211,114,174},{184,100,153},{161,87,134},{136,72,113},{113,55,93},{90,39,73},{61,13,46},{19,0,1},{212,114,165},{185,100,145},{162,87,127},{137,72,107},{113,56,88},{90,39,68},{62,13,42},{17,0,1},{212,114,156},{186,100,137},{162,87,120},{137,72,101},{113,56,83},{90,39,63},{62,13,38},{16,0,0},{213,114,148},{186,100,131},{162,87,114},{138,72,96},{113,56,78},{90,39,59},{61,14,34},{15,0,0}, {213,114,140},{186,100,123},{162,87,107},{138,72,91},{113,56,73},{90,39,55},{61,14,30},{15,0,0},{213,114,133},{186,100,116},{163,86,101},{138,72,85},{113,56,67},{90,39,50},{61,14,26},{14,0,0},{213,114,125},{186,100,108},{163,86,95},{138,72,79},{113,56,62},{90,39,45},{61,14,22},{14,0,0},{214,114,116},{186,100,101},{163,86,88},{138,71,73},{113,56,57},{89,39,40},{61,14,17},{13,0,0}, {214,114,107},{186,100,94},{163,86,82},{138,71,67},{113,56,51},{89,39,35},{61,14,12},{12,0,0},{214,114,99},{187,100,87},{162,86,75},{137,71,60},{113,56,46},{89,39,30},{61,15,7},{12,0,0},{214,114,90},{187,100,79},{162,86,67},{137,71,54},{113,56,40},{89,39,24},{61,16,4},{11,0,0},{215,114,80},{187,99,70},{163,85,59},{138,71,47},{113,56,34},{89,39,18},{60,15,2},{10,0,0}, {215,114,71},{187,99,61},{163,85,50},{138,71,39},{113,56,25},{89,39,10},{60,15,1},{10,0,0},{215,113,60},{188,99,51},{163,86,41},{137,71,30},{113,55,17},{89,40,4},{59,16,0},{10,0,0},{215,113,51},{188,99,43},{163,86,33},{137,71,22},{113,55,9},{89,40,2},{59,16,0},{10,0,0},{215,113,41},{188,99,33},{163,85,25},{138,71,15},{113,55,3},{89,39,0},{59,16,0},{10,0,0}, {210,102,167},{183,89,147},{161,76,128},{136,62,109},{112,46,89},{90,30,69},{62,5,43},{15,0,0},{211,101,158},{184,89,139},{162,76,121},{137,62,103},{113,47,84},{90,30,65},{62,5,39},{14,0,0},{211,101,150},{185,89,131},{162,76,114},{137,62,97},{113,47,79},{90,30,60},{62,5,36},{14,0,0},{212,102,142},{185,89,125},{162,77,109},{137,62,92},{112,47,75},{90,31,56},{61,5,32},{13,0,0}, {212,102,135},{185,89,118},{162,77,103},{137,62,87},{112,47,70},{90,31,52},{61,5,28},{13,0,0},{212,102,127},{186,89,111},{162,76,97},{137,62,81},{112,47,65},{90,31,48},{61,5,24},{12,0,0},{212,102,119},{186,89,104},{162,76,91},{137,62,76},{112,47,60},{90,31,43},{61,5,20},{12,0,0},{213,102,111},{186,89,97},{162,76,84},{137,62,70},{112,48,54},{90,32,38},{61,5,15},{11,0,0}, {213,102,103},{186,89,91},{162,76,78},{137,62,64},{112,48,49},{89,32,33},{61,5,10},{10,0,0},{213,101,95},{186,90,84},{162,76,71},{137,62,58},{112,48,44},{88,32,28},{60,6,5},{10,0,0},{213,101,87},{186,90,77},{162,76,64},{137,62,52},{112,48,38},{88,32,22},{60,7,3},{10,0,0},{214,102,78},{186,89,68},{162,75,57},{137,62,45},{112,48,32},{88,32,16},{59,8,1},{9,0,0}, {214,102,69},{186,89,59},{162,75,48},{137,62,37},{112,48,23},{88,32,9},{59,8,1},{9,0,0},{214,101,58},{187,89,49},{162,76,39},{136,62,29},{112,48,15},{89,33,3},{59,8,0},{9,0,0},{214,101,50},{187,89,41},{162,76,32},{136,62,21},{112,48,8},{89,33,1},{59,8,0},{9,0,0},{214,101,41},{188,89,34},{162,75,25},{137,62,14},{112,48,3},{88,33,0},{59,9,0},{9,0,0}, {209,86,160},{183,74,141},{161,63,123},{136,49,104},{112,34,85},{90,18,65},{62,2,40},{11,0,0},{210,86,152},{184,75,134},{162,63,116},{137,50,98},{113,35,80},{90,19,61},{62,2,36},{11,0,0},{211,86,144},{185,75,126},{162,63,109},{137,50,93},{113,36,75},{90,19,57},{62,2,33},{11,0,0},{212,87,137},{185,75,120},{161,64,104},{137,51,88},{112,36,71},{90,19,53},{61,2,29},{10,0,0}, {212,87,130},{185,75,113},{161,64,99},{137,51,83},{112,36,67},{90,19,49},{61,2,25},{10,0,0},{212,87,122},{186,75,107},{162,63,93},{137,51,78},{112,37,62},{90,20,45},{61,2,21},{10,0,0},{212,87,114},{186,76,100},{162,63,87},{137,51,73},{112,37,57},{90,20,40},{61,2,17},{10,0,0},{212,87,107},{186,76,94},{162,64,81},{137,51,67},{112,38,51},{90,21,35},{61,2,12},{9,0,0}, {212,87,100},{186,76,88},{162,64,75},{137,51,61},{112,38,46},{89,21,30},{61,2,8},{8,0,0},{212,87,92},{186,76,81},{161,64,68},{137,52,55},{112,38,41},{88,22,25},{60,3,4},{8,0,0},{212,87,84},{186,76,74},{161,64,61},{137,52,49},{112,38,35},{88,22,19},{60,3,3},{8,0,0},{213,88,75},{186,76,65},{162,64,54},{137,52,42},{112,38,29},{88,22,13},{59,4,1},{7,0,0}, {213,88,67},{186,76,57},{162,64,46},{137,52,35},{112,38,22},{88,22,8},{59,4,1},{7,0,0},{213,87,57},{187,76,48},{162,65,38},{136,52,28},{112,39,14},{89,23,3},{59,4,0},{6,0,0},{213,87,50},{187,76,41},{162,65,32},{136,52,20},{112,39,8},{89,23,1},{59,4,0},{6,0,0},{213,87,41},{187,76,34},{162,64,25},{137,52,14},{112,39,3},{88,23,0},{59,5,0},{6,0,0}, {208,69,153},{183,59,135},{160,49,118},{137,36,99},{113,22,81},{90,6,61},{61,0,36},{8,0,0},{209,70,146},{184,60,128},{161,50,112},{137,37,94},{112,23,76},{90,7,57},{61,0,33},{8,0,0},{210,70,138},{185,60,121},{161,50,105},{137,38,89},{112,24,71},{90,7,53},{61,0,30},{8,0,0},{211,71,131},{185,60,115},{160,50,100},{137,39,84},{113,24,67},{90,7,49},{61,0,26},{7,0,0}, {211,71,124},{185,60,109},{160,50,95},{137,39,79},{113,24,63},{90,7,45},{61,0,22},{6,0,0},{212,72,117},{185,61,103},{161,51,89},{136,39,74},{112,25,58},{89,8,41},{60,0,18},{6,0,0},{212,72,110},{185,62,96},{161,51,83},{136,39,69},{112,25,53},{89,8,36},{60,0,14},{6,0,0},{211,72,103},{185,63,90},{161,52,77},{136,39,63},{112,26,48},{89,9,32},{60,0,9},{6,0,0}, {211,72,96},{185,63,84},{161,52,71},{136,39,57},{112,26,43},{89,9,28},{60,0,6},{6,0,0},{211,73,89},{185,62,77},{160,52,64},{136,40,52},{112,27,38},{88,10,23},{59,1,3},{6,0,0},{211,73,81},{185,62,70},{160,52,58},{136,40,46},{112,27,32},{88,10,17},{59,1,2},{6,0,0},{212,73,73},{186,63,63},{161,52,52},{136,41,40},{112,28,26},{88,11,11},{59,1,1},{6,0,0}, {212,73,65},{186,63,55},{161,52,44},{136,41,34},{112,28,20},{88,12,6},{59,1,1},{5,0,0},{212,73,56},{186,63,47},{161,53,37},{136,41,27},{112,29,13},{88,13,2},{58,1,0},{4,0,0},{212,73,49},{186,63,40},{161,53,31},{136,41,19},{112,29,8},{88,13,1},{58,1,0},{4,0,0},{212,73,42},{186,64,34},{161,52,25},{136,42,13},{112,29,3},{88,13,0},{58,1,0},{4,0,0}, {208,43,146},{183,32,129},{160,25,112},{137,18,94},{113,11,77},{90,2,59},{61,0,34},{6,0,0},{209,45,139},{184,34,122},{161,26,106},{137,19,89},{112,11,72},{90,3,55},{61,0,31},{6,0,0},{210,46,131},{185,35,115},{161,26,100},{137,19,84},{112,12,68},{90,3,51},{61,0,28},{6,0,0},{210,47,125},{185,37,110},{160,26,95},{136,20,80},{113,12,64},{90,3,47},{61,0,24},{5,0,0}, {210,48,118},{185,38,104},{160,27,90},{136,20,76},{113,12,60},{90,3,43},{61,0,20},{5,0,0},{211,49,112},{185,40,98},{161,29,85},{136,20,71},{112,13,55},{89,3,39},{60,0,16},{5,0,0},{211,50,105},{185,41,92},{161,30,80},{136,20,66},{112,13,50},{89,3,34},{60,0,12},{5,0,0},{211,50,99},{184,42,87},{161,31,74},{136,21,60},{112,13,46},{89,4,30},{60,0,8},{5,0,0}, {211,51,93},{184,42,81},{161,32,68},{136,21,55},{112,13,41},{89,4,26},{60,0,6},{5,0,0},{211,52,86},{185,42,74},{160,33,62},{136,22,50},{112,14,36},{88,5,21},{59,1,3},{5,0,0},{211,52,79},{185,43,67},{160,34,56},{136,23,44},{112,14,31},{88,5,15},{59,1,2},{5,0,0},{212,53,71},{185,44,61},{161,35,50},{136,24,38},{112,14,25},{88,5,9},{59,1,1},{5,0,0}, {212,53,63},{185,44,53},{161,35,43},{136,24,32},{112,14,19},{88,6,5},{59,1,1},{4,0,0},{212,53,55},{185,45,46},{161,36,37},{136,25,26},{111,15,12},{88,6,2},{58,1,0},{4,0,0},{212,53,49},{185,45,39},{161,36,30},{136,25,19},{111,15,7},{88,6,1},{58,1,0},{4,0,0},{212,53,42},{186,45,33},{161,37,25},{136,26,13},{112,15,3},{88,6,0},{58,1,0},{4,0,0}, {207,15,140},{184,3,123},{159,0,106},{136,0,90},{112,0,73},{90,0,56},{61,0,31},{3,0,0},{208,17,133},{185,5,117},{160,1,101},{136,0,85},{112,0,69},{89,0,52},{61,0,28},{3,0,0},{209,19,125},{185,7,110},{160,1,95},{136,0,80},{112,0,64},{89,0,48},{61,0,25},{3,0,0},{209,21,119},{185,11,105},{160,2,91},{135,0,76},{112,0,60},{89,0,44},{60,0,21},{3,0,0}, {209,22,113},{185,14,100},{160,4,86},{135,0,72},{112,0,56},{89,0,40},{60,0,18},{3,0,0},{210,24,107},{184,17,94},{160,6,81},{135,0,67},{112,0,52},{89,0,36},{60,0,13},{3,0,0},{210,26,101},{184,19,88},{160,8,76},{135,0,62},{112,0,47},{89,0,31},{60,0,9},{3,0,0},{210,27,95},{183,20,83},{160,10,71},{135,1,57},{112,0,43},{89,0,27},{60,0,7},{3,0,0}, {210,29,89},{183,21,77},{160,12,65},{135,2,52},{112,0,39},{89,0,23},{60,0,5},{3,0,0},{210,30,82},{184,22,70},{160,14,60},{135,3,47},{111,0,34},{88,0,18},{59,0,3},{3,0,0},{210,31,76},{184,23,64},{160,16,54},{135,4,42},{111,0,29},{88,0,13},{59,0,1},{3,0,0},{211,31,69},{184,25,58},{160,18,48},{135,6,36},{111,0,23},{88,0,7},{58,0,0},{3,0,0}, {211,32,61},{184,26,51},{160,18,42},{135,7,30},{111,0,17},{88,0,4},{58,0,0},{3,0,0},{211,33,54},{184,27,44},{160,19,36},{135,9,24},{111,1,10},{88,0,1},{58,0,0},{3,0,0},{211,33,48},{184,27,38},{160,20,30},{135,9,18},{111,1,6},{88,0,1},{58,0,0},{3,0,0},{211,34,42},{185,27,32},{160,21,24},{135,10,13},{111,1,2},{88,0,0},{58,0,0},{3,0,0}, {175,226,249},{153,198,220},{132,173,192},{112,147,164},{91,121,135},{71,96,107},{45,65,75},{7,24,33},{177,225,236},{155,197,208},{134,172,181},{113,146,155},{92,120,128},{71,95,102},{45,64,70},{6,23,29},{179,224,223},{156,196,197},{135,172,171},{115,146,146},{93,120,121},{71,95,96},{45,64,65},{6,23,25},{181,223,211},{158,196,187},{137,171,162},{116,145,139},{94,120,114},{72,95,90},{45,64,61},{5,23,21}, {182,223,199},{160,196,176},{138,170,154},{116,144,131},{94,120,107},{72,95,85},{45,64,56},{5,23,18},{183,222,187},{161,195,165},{139,169,144},{117,144,122},{95,119,101},{72,94,79},{45,63,52},{4,22,13},{184,221,174},{162,194,154},{139,169,134},{118,144,114},{95,119,94},{72,94,73},{45,63,47},{4,22,8},{185,220,161},{163,193,143},{140,168,124},{118,143,105},{96,118,86},{73,93,66},{46,62,42},{4,22,3}, {187,219,149},{163,192,131},{141,167,114},{118,142,96},{96,118,79},{73,93,60},{46,62,37},{3,22,0},{189,218,137},{164,191,120},{142,166,105},{119,141,88},{96,117,72},{74,92,54},{45,62,31},{2,22,0},{190,218,123},{164,191,109},{142,166,94},{119,141,79},{96,117,64},{74,92,47},{45,62,25},{1,22,0},{191,217,109},{165,190,97},{143,166,84},{119,140,70},{96,116,55},{74,91,40},{45,61,19},{0,22,0}, {191,217,93},{166,190,82},{143,165,71},{119,140,59},{96,116,45},{74,91,31},{45,61,11},{0,22,0},{192,216,77},{168,189,68},{144,164,57},{120,139,47},{97,115,35},{74,91,21},{46,61,3},{0,22,0},{193,216,62},{168,189,54},{144,164,45},{120,139,36},{97,115,24},{74,91,12},{46,61,1},{0,22,0},{194,216,46},{168,189,39},{144,164,33},{120,139,24},{97,114,13},{75,90,3},{45,60,0},{0,22,0}, {176,213,240},{154,187,212},{134,163,186},{113,139,158},{92,115,131},{72,90,104},{46,60,72},{8,19,30},{178,212,228},{156,186,201},{136,163,176},{115,138,150},{93,114,124},{72,89,98},{46,60,67},{7,18,26},{179,212,216},{158,186,190},{137,163,166},{116,138,141},{94,114,117},{72,89,92},{46,60,62},{7,18,22},{182,211,204},{160,185,181},{138,162,157},{117,137,134},{95,113,110},{73,89,87},{46,59,58},{6,18,18}, {183,210,193},{161,185,170},{139,161,149},{117,137,127},{95,113,103},{74,89,82},{46,59,54},{6,18,14},{185,209,181},{162,184,160},{140,160,139},{118,136,118},{96,112,97},{73,88,76},{46,59,49},{6,17,10},{186,209,169},{162,183,149},{140,160,130},{118,136,110},{96,112,90},{73,88,70},{46,59,44},{6,17,5},{186,208,156},{163,182,138},{141,159,120},{119,135,102},{96,111,83},{74,87,63},{47,58,39},{5,18,2}, {187,207,144},{163,182,127},{141,158,111},{119,135,93},{96,111,76},{74,87,57},{47,58,34},{4,18,0},{188,206,133},{164,181,117},{142,157,102},{119,134,85},{96,110,69},{74,87,51},{46,58,29},{4,17,0},{189,206,120},{165,181,106},{142,157,92},{119,134,76},{96,110,61},{74,87,45},{46,58,23},{2,17,0},{191,205,107},{166,180,94},{142,157,82},{119,133,67},{97,110,53},{75,86,38},{46,57,17},{1,18,0}, {191,205,91},{167,180,80},{143,156,69},{119,133,57},{97,110,44},{75,86,29},{46,57,9},{1,18,0},{192,204,76},{168,180,66},{144,155,56},{120,132,45},{97,109,34},{75,86,19},{46,57,2},{0,17,0},{193,204,61},{168,180,52},{144,155,44},{120,132,35},{97,109,23},{75,86,10},{46,57,1},{0,17,0},{194,204,47},{167,179,40},{144,155,32},{120,132,24},{97,109,12},{75,85,2},{46,56,0},{0,17,0}, {177,201,232},{155,177,204},{135,154,179},{114,131,152},{93,107,127},{72,84,101},{47,55,70},{9,13,27},{179,200,220},{157,177,193},{137,154,169},{116,130,144},{94,107,120},{73,83,95},{47,55,65},{8,13,23},{180,200,208},{159,177,183},{138,154,160},{117,130,136},{95,107,113},{73,83,89},{47,55,60},{8,13,19},{182,199,197},{160,176,174},{139,153,151},{117,129,129},{96,106,107},{74,83,84},{47,54,56},{7,13,15}, {183,198,186},{161,175,164},{139,152,143},{117,129,122},{96,106,100},{74,83,79},{47,54,52},{7,13,11},{185,197,175},{162,174,154},{140,151,134},{118,128,115},{96,105,94},{74,82,73},{48,54,47},{6,12,7},{186,197,163},{162,174,144},{140,151,126},{118,128,107},{96,105,87},{74,82,67},{48,54,42},{6,12,3},{186,196,151},{163,173,134},{141,150,117},{119,127,99},{96,104,80},{75,81,61},{47,53,37},{6,13,1}, {187,196,140},{163,173,124},{141,150,108},{119,127,91},{96,104,73},{75,81,55},{47,53,32},{5,13,0},{188,195,129},{164,172,114},{142,149,99},{119,126,83},{96,103,66},{74,81,49},{47,53,27},{4,12,0},{189,195,118},{165,172,103},{142,149,90},{119,126,74},{96,103,59},{74,81,43},{47,53,21},{3,12,0},{191,194,105},{166,171,92},{143,148,80},{119,125,65},{97,103,52},{75,80,36},{47,53,15},{1,13,0}, {191,194,90},{167,171,79},{143,148,68},{119,125,56},{97,103,43},{75,80,27},{47,53,8},{1,13,0},{192,193,76},{168,170,65},{144,147,56},{120,125,44},{97,102,33},{75,80,17},{47,53,2},{0,12,0},{192,193,61},{168,170,52},{144,147,44},{120,125,34},{97,102,23},{75,80,9},{47,53,1},{0,12,0},{193,193,48},{167,169,40},{144,146,31},{120,124,24},{98,102,12},{75,79,2},{46,53,0},{0,13,0}, {178,189,224},{156,168,198},{136,145,173},{115,124,148},{95,101,123},{74,79,97},{48,51,67},{10,7,24},{180,188,213},{158,167,188},{137,145,164},{116,123,140},{96,101,116},{74,79,91},{48,51,62},{9,7,20},{181,188,201},{160,167,178},{138,145,156},{116,123,132},{96,101,109},{74,79,85},{48,51,57},{9,7,16},{182,188,191},{161,166,169},{139,144,147},{117,122,125},{96,100,103},{75,79,81},{48,50,53},{9,8,12}, {183,188,180},{161,166,160},{140,144,139},{118,122,118},{96,100,96},{75,79,76},{48,50,49},{9,8,7},{185,187,170},{162,165,150},{140,143,130},{118,122,111},{96,99,90},{75,78,70},{48,50,45},{8,8,4},{186,187,159},{162,165,140},{140,143,122},{118,122,103},{96,99,84},{75,78,64},{48,50,40},{7,8,1},{187,186,147},{163,164,130},{141,142,113},{119,121,96},{97,99,77},{75,77,59},{48,49,35},{6,9,0}, {187,185,136},{163,164,120},{141,142,104},{119,121,88},{97,99,71},{75,77,53},{48,49,30},{6,9,0},{188,184,125},{164,163,110},{142,141,95},{120,120,80},{97,98,64},{75,77,47},{48,49,25},{4,8,0},{189,184,114},{165,163,100},{142,141,86},{120,120,72},{97,98,57},{75,77,41},{48,49,19},{3,8,0},{190,184,102},{166,162,90},{143,140,77},{120,119,63},{98,98,50},{75,76,34},{48,49,13},{1,9,0}, {190,184,88},{166,162,77},{143,140,66},{120,119,54},{98,98,41},{75,76,25},{48,49,7},{1,9,0},{191,183,74},{167,161,64},{144,139,54},{120,119,43},{98,97,31},{75,76,15},{47,49,2},{1,8,0},{191,183,60},{167,161,52},{144,139,43},{120,119,33},{98,97,21},{75,76,8},{47,49,1},{1,8,0},{192,182,48},{168,160,40},{144,139,32},{121,118,24},{98,97,11},{76,75,2},{47,49,0},{0,9,0}, {178,178,216},{157,158,192},{136,137,168},{115,116,143},{95,95,119},{75,74,94},{49,47,64},{11,2,21},{180,177,205},{159,157,182},{137,136,159},{116,116,136},{96,95,112},{74,74,88},{49,46,59},{10,3,17},{182,177,194},{160,157,172},{138,136,151},{116,116,128},{96,95,105},{74,74,82},{49,46,54},{10,3,13},{183,177,184},{161,156,164},{140,136,143},{117,115,121},{96,94,99},{75,73,78},{49,46,50},{9,3,9}, {184,177,175},{162,156,155},{141,136,135},{118,115,114},{96,94,93},{75,73,73},{49,46,46},{9,3,4},{186,176,165},{162,155,145},{140,135,126},{119,114,107},{97,93,87},{75,73,67},{48,46,42},{9,3,2},{187,176,154},{162,155,135},{140,135,118},{119,114,100},{97,93,81},{75,73,61},{48,46,37},{8,3,0},{187,175,143},{163,154,126},{141,134,109},{119,114,93},{97,93,74},{75,72,56},{49,45,32},{7,4,0}, {187,175,132},{163,154,116},{141,134,101},{119,114,85},{97,93,68},{75,72,50},{49,45,28},{6,4,0},{188,174,122},{164,153,107},{142,133,92},{120,113,78},{98,92,61},{75,72,45},{48,45,23},{4,4,0},{188,174,111},{165,153,97},{142,133,83},{120,113,69},{98,92,55},{75,72,39},{48,45,17},{3,4,0},{189,173,99},{166,153,87},{143,133,74},{120,112,61},{98,92,48},{75,72,32},{48,45,10},{1,4,0}, {190,173,86},{166,153,75},{143,133,64},{120,112,52},{98,92,39},{75,72,24},{48,45,6},{1,4,0},{191,173,73},{166,152,63},{144,132,53},{120,111,42},{98,91,30},{75,71,14},{47,45,2},{1,4,0},{191,173,60},{167,152,52},{144,132,43},{120,111,33},{98,91,20},{75,71,8},{47,45,1},{1,4,0},{191,172,48},{168,152,41},{144,131,32},{121,111,23},{98,91,11},{76,71,2},{47,45,0},{0,5,0}, {180,166,209},{158,147,185},{137,128,162},{116,109,138},{96,88,114},{76,68,90},{50,41,61},{12,1,19},{181,166,198},{160,147,175},{138,127,153},{117,108,131},{96,88,108},{75,68,84},{50,41,57},{11,1,14},{182,166,188},{161,147,166},{139,127,145},{118,108,124},{96,88,101},{75,68,79},{50,41,52},{11,1,9},{183,165,178},{162,146,158},{140,127,138},{118,108,117},{97,87,96},{76,67,75},{50,41,48},{10,2,5}, {184,165,169},{162,146,149},{141,127,130},{119,108,110},{97,87,90},{76,67,70},{50,41,44},{10,2,2},{185,164,159},{163,145,140},{141,126,122},{120,107,103},{97,87,84},{75,67,64},{49,41,40},{10,2,1},{186,164,148},{163,145,131},{141,126,114},{120,107,96},{97,87,78},{75,67,59},{49,41,35},{8,2,0},{186,164,139},{163,144,122},{141,126,106},{119,107,89},{97,86,72},{76,66,54},{49,41,30},{7,2,0}, {187,164,128},{164,144,113},{142,126,98},{119,107,83},{97,86,66},{76,66,48},{49,41,26},{6,2,0},{188,163,119},{165,143,104},{143,125,90},{120,106,76},{98,86,59},{76,66,43},{49,41,21},{5,2,0},{188,163,108},{165,143,95},{143,125,81},{120,106,67},{98,86,53},{76,66,37},{49,41,15},{4,2,0},{189,162,97},{165,143,85},{142,124,72},{121,105,59},{98,85,46},{76,66,30},{48,41,8},{3,2,0}, {189,162,84},{166,143,73},{142,124,62},{121,105,50},{98,85,38},{76,66,22},{48,41,4},{3,2,0},{190,162,72},{166,142,61},{143,123,51},{120,104,40},{98,85,29},{76,65,13},{48,41,1},{3,2,0},{190,162,60},{167,142,51},{143,123,42},{120,104,31},{98,85,19},{76,65,7},{48,41,1},{2,2,0},{190,161,48},{167,142,41},{143,123,32},{121,104,22},{98,85,10},{76,65,1},{48,41,0},{1,2,0}, {180,155,201},{159,137,179},{137,120,156},{117,101,133},{96,82,110},{76,62,86},{50,36,58},{11,0,16},{181,154,191},{160,136,169},{138,119,148},{118,100,126},{97,81,104},{76,62,81},{50,36,54},{11,0,11},{182,154,182},{161,136,160},{139,119,140},{119,100,119},{97,81,98},{76,62,76},{50,36,49},{11,0,6},{183,154,172},{162,136,152},{140,118,133},{119,100,113},{97,81,93},{76,61,72},{50,36,45},{11,0,2}, {184,154,163},{162,136,144},{141,118,125},{119,100,106},{97,81,87},{76,61,67},{50,36,41},{10,0,0},{185,153,153},{163,135,135},{141,118,117},{120,99,100},{97,80,81},{75,61,61},{50,36,37},{9,0,0},{185,153,143},{163,135,127},{141,118,110},{120,99,93},{97,80,75},{75,61,56},{50,36,32},{7,0,0},{186,153,134},{163,135,118},{141,118,103},{119,99,86},{97,80,69},{76,61,51},{49,36,28},{6,0,0}, {187,153,124},{164,135,109},{142,118,95},{119,99,80},{97,80,63},{76,61,46},{49,36,24},{5,0,0},{188,152,115},{165,134,101},{143,117,87},{120,98,73},{98,79,57},{76,60,41},{49,36,19},{4,0,0},{188,152,105},{165,134,92},{143,117,79},{120,98,65},{98,79,51},{76,60,34},{49,36,13},{4,0,0},{189,151,95},{165,134,82},{142,116,70},{121,97,57},{98,79,44},{76,60,28},{48,36,6},{4,0,0}, {189,151,82},{165,134,71},{142,116,60},{121,97,48},{98,79,36},{76,60,20},{48,36,3},{4,0,0},{190,151,70},{166,133,60},{143,115,50},{120,97,39},{98,79,27},{76,59,11},{48,36,1},{3,0,0},{190,151,60},{166,133,50},{143,115,41},{120,97,30},{98,79,18},{76,59,7},{48,36,1},{3,0,0},{190,150,48},{167,133,41},{143,115,32},{121,96,22},{98,79,9},{76,59,1},{48,36,0},{2,0,0}, {181,144,194},{159,127,173},{138,111,151},{118,94,128},{97,75,106},{76,56,83},{51,30,55},{9,0,12},{182,143,184},{160,127,163},{139,110,143},{119,93,121},{98,74,100},{76,55,78},{50,31,51},{10,0,7},{183,143,175},{161,127,154},{139,110,135},{119,93,114},{98,74,94},{76,55,73},{50,31,46},{10,0,3},{184,143,166},{162,127,147},{140,110,128},{119,93,108},{98,74,89},{76,55,69},{50,31,42},{8,0,1}, {184,143,158},{162,127,139},{140,110,120},{119,93,102},{98,74,84},{76,55,64},{50,31,38},{7,0,0},{185,142,148},{163,126,130},{141,109,113},{120,92,96},{98,73,78},{76,56,59},{50,31,34},{6,0,0},{185,142,139},{163,126,122},{141,109,106},{120,92,90},{98,73,72},{76,56,54},{50,31,30},{6,0,0},{186,142,130},{164,125,113},{141,109,99},{120,92,83},{98,73,66},{76,55,49},{50,31,26},{5,0,0}, {186,142,120},{164,125,105},{141,109,91},{120,92,77},{98,73,60},{76,55,43},{50,31,21},{4,0,0},{187,141,111},{164,125,98},{142,108,84},{119,91,70},{98,72,54},{76,55,38},{50,31,16},{4,0,0},{188,141,102},{165,125,89},{142,108,76},{119,91,62},{98,72,48},{76,55,32},{50,31,10},{4,0,0},{189,141,92},{165,124,80},{142,107,68},{120,90,55},{98,72,42},{76,55,26},{49,31,4},{3,0,0}, {189,141,80},{165,124,70},{142,107,59},{120,90,47},{98,72,35},{76,55,19},{49,31,2},{3,0,0},{189,141,68},{165,124,59},{142,107,49},{120,90,38},{98,72,26},{77,54,10},{49,31,0},{2,0,0},{189,141,59},{165,124,49},{142,107,40},{120,90,29},{98,72,17},{77,54,6},{49,31,0},{2,0,0},{190,141,49},{166,124,41},{143,107,31},{120,89,21},{98,72,8},{76,54,1},{48,31,0},{1,0,0}, {181,133,187},{159,117,167},{138,102,145},{118,86,124},{98,68,102},{76,50,79},{51,23,52},{7,0,8},{182,133,178},{160,117,157},{139,101,137},{119,85,117},{98,68,96},{76,49,74},{50,24,48},{7,0,4},{183,133,169},{161,117,148},{139,101,130},{119,85,110},{98,68,90},{76,49,69},{50,25,44},{7,0,1},{184,133,160},{162,117,141},{140,101,123},{119,85,104},{98,68,85},{77,49,65},{50,25,40},{6,0,0}, {184,133,152},{163,117,134},{140,101,116},{119,85,98},{98,68,80},{77,49,61},{50,25,36},{6,0,0},{185,132,143},{163,116,126},{141,101,109},{120,84,92},{98,67,74},{77,50,57},{50,25,32},{5,0,0},{186,132,135},{163,116,118},{141,101,102},{120,84,86},{98,67,69},{77,50,52},{50,25,28},{4,0,0},{186,132,126},{164,115,109},{141,100,95},{120,84,80},{98,67,64},{77,49,47},{50,25,24},{4,0,0}, {186,132,116},{164,115,101},{141,100,88},{120,84,74},{98,67,58},{77,49,41},{50,25,19},{3,0,0},{187,131,107},{164,115,94},{141,100,81},{119,84,67},{98,66,52},{76,49,36},{50,26,14},{2,0,0},{188,131,98},{164,115,86},{141,100,74},{119,84,60},{98,66,46},{76,49,30},{50,26,8},{2,0,0},{188,131,89},{165,114,78},{142,99,66},{120,83,53},{98,66,40},{76,49,24},{49,26,3},{2,0,0}, {188,131,78},{165,114,68},{142,99,57},{120,83,45},{98,66,33},{76,49,17},{49,26,1},{1,0,0},{189,131,66},{165,114,57},{142,99,47},{120,83,36},{98,66,24},{77,49,8},{49,27,0},{1,0,0},{189,131,57},{165,114,49},{142,99,39},{120,83,28},{98,66,15},{77,49,4},{49,27,0},{1,0,0},{189,131,49},{166,114,40},{143,99,31},{120,83,20},{98,66,7},{76,49,1},{48,27,0},{1,0,0}, {182,122,180},{160,107,160},{138,93,139},{118,77,119},{98,61,98},{77,43,76},{51,16,49},{5,0,4},{183,122,171},{161,107,151},{139,92,132},{119,77,113},{98,61,92},{77,43,71},{51,17,45},{5,0,2},{184,122,162},{162,107,143},{140,92,125},{119,77,106},{98,61,86},{77,43,66},{51,18,42},{5,0,0},{185,122,154},{162,107,136},{140,92,119},{119,77,100},{98,61,81},{77,43,62},{50,18,38},{4,0,0}, {185,122,146},{162,107,129},{140,92,112},{119,77,94},{98,61,76},{77,43,58},{50,18,34},{4,0,0},{185,122,138},{163,107,122},{141,92,105},{119,77,88},{98,60,71},{77,44,54},{51,19,30},{3,0,0},{185,122,130},{163,107,114},{141,92,98},{119,77,83},{98,60,66},{77,44,49},{51,19,26},{3,0,0},{186,121,121},{163,106,105},{142,91,91},{119,77,77},{98,60,61},{77,43,44},{50,20,22},{2,0,0}, {186,121,112},{163,106,98},{142,91,85},{119,77,71},{98,60,56},{77,43,40},{50,20,17},{1,0,0},{187,121,104},{164,106,91},{142,91,78},{119,77,64},{98,60,51},{77,43,35},{50,21,12},{1,0,0},{187,121,95},{164,106,83},{142,91,71},{119,77,58},{98,60,45},{77,43,29},{50,21,7},{1,0,0},{187,121,86},{164,105,75},{142,91,64},{119,76,52},{98,60,39},{77,43,23},{49,21,3},{1,0,0}, {187,121,76},{164,105,66},{142,91,56},{119,76,44},{98,60,31},{77,43,15},{49,21,1},{1,0,0},{188,120,65},{165,105,56},{142,91,46},{120,76,35},{98,59,23},{76,43,7},{48,21,0},{0,0,0},{188,120,56},{165,105,48},{142,91,38},{120,76,27},{98,59,14},{76,43,3},{48,21,0},{0,0,0},{188,120,48},{165,105,39},{143,90,30},{120,76,20},{98,59,6},{76,43,0},{48,22,0},{0,0,0}, {182,110,173},{160,96,153},{139,83,134},{118,68,114},{98,53,94},{77,36,73},{51,10,46},{3,0,2},{183,110,164},{161,96,145},{140,83,127},{119,69,108},{98,53,89},{77,36,68},{51,11,42},{3,0,1},{184,110,156},{162,96,137},{140,83,120},{119,69,101},{98,53,83},{77,36,63},{51,11,39},{3,0,0},{185,110,149},{162,96,131},{141,83,114},{119,69,96},{98,53,78},{77,36,59},{50,12,35},{2,0,0}, {185,110,141},{162,96,124},{141,83,107},{119,69,91},{98,53,73},{77,36,55},{50,12,31},{2,0,0},{185,110,133},{163,97,117},{141,83,101},{119,68,85},{98,53,68},{77,37,51},{51,12,27},{1,0,0},{185,110,125},{163,97,109},{141,83,95},{119,68,80},{98,53,63},{77,37,46},{51,12,23},{1,0,0},{186,110,117},{163,96,102},{142,82,88},{119,69,74},{98,53,58},{77,37,41},{50,13,19},{1,0,0}, {186,110,109},{163,96,95},{142,82,82},{119,69,68},{98,53,53},{77,37,37},{50,13,14},{1,0,0},{187,110,101},{164,96,88},{142,82,75},{119,68,61},{98,53,48},{77,37,32},{50,14,10},{1,0,0},{187,110,92},{164,96,80},{142,82,69},{119,68,55},{98,53,42},{77,37,27},{50,14,5},{1,0,0},{187,110,84},{164,96,73},{142,82,62},{119,68,49},{98,53,36},{77,37,21},{49,15,3},{0,0,0}, {187,110,74},{164,96,64},{142,82,54},{119,68,42},{98,53,29},{77,37,13},{49,15,1},{0,0,0},{188,109,64},{165,96,55},{142,82,45},{120,68,34},{98,53,21},{76,37,6},{48,15,0},{0,0,0},{188,109,55},{165,96,47},{142,82,37},{120,68,26},{98,53,13},{76,37,3},{48,15,0},{0,0,0},{188,109,47},{165,95,39},{143,82,30},{120,68,19},{98,53,6},{76,37,0},{48,16,0},{0,0,0}, {182,98,167},{160,86,147},{139,73,128},{119,59,109},{98,44,90},{77,27,70},{51,4,44},{1,0,0},{183,98,158},{161,86,139},{140,73,122},{120,60,103},{98,44,85},{78,28,65},{51,5,40},{1,0,0},{183,98,150},{162,86,131},{141,73,115},{120,60,97},{98,44,79},{78,28,61},{51,5,37},{1,0,0},{184,98,143},{162,86,125},{141,73,109},{120,60,93},{98,45,75},{77,29,57},{50,5,33},{1,0,0}, {185,98,136},{162,86,118},{141,73,103},{120,60,88},{98,45,70},{77,29,53},{50,5,29},{1,0,0},{185,98,128},{163,87,112},{141,73,97},{120,59,82},{98,46,65},{77,30,49},{50,5,25},{0,0,0},{185,98,120},{163,87,105},{141,73,91},{120,59,76},{98,46,60},{77,30,44},{50,5,21},{0,0,0},{186,98,113},{163,86,98},{141,73,85},{120,60,71},{98,46,55},{77,30,39},{50,6,16},{0,0,0}, {186,98,105},{163,86,92},{141,73,79},{120,60,65},{98,46,51},{77,30,35},{50,6,12},{0,0,0},{186,98,98},{163,86,85},{141,73,73},{120,59,59},{98,46,46},{76,30,30},{49,7,8},{0,0,0},{186,98,90},{163,86,78},{141,73,67},{120,59,53},{98,46,40},{76,30,25},{49,7,4},{0,0,0},{187,98,81},{163,86,71},{141,73,60},{119,60,47},{98,46,34},{76,31,19},{48,8,2},{0,0,0}, {187,98,72},{163,86,62},{141,73,52},{119,60,40},{98,46,27},{76,31,11},{48,8,1},{0,0,0},{187,98,62},{164,86,53},{142,73,43},{119,60,33},{98,46,19},{76,31,5},{48,9,0},{0,0,0},{187,98,54},{164,86,45},{142,73,36},{119,60,25},{98,46,12},{76,31,2},{48,9,0},{0,0,0},{188,98,47},{165,85,38},{143,73,29},{120,60,18},{98,47,6},{76,31,0},{47,10,0},{0,0,0}, {182,84,161},{160,73,141},{139,61,123},{119,48,104},{98,33,86},{77,17,66},{51,2,41},{1,0,0},{183,84,152},{161,73,134},{140,62,117},{120,49,99},{98,34,81},{78,18,62},{51,2,37},{1,0,0},{183,84,144},{162,73,126},{141,62,110},{120,49,93},{98,34,75},{78,18,58},{51,2,34},{1,0,0},{184,84,138},{162,73,120},{141,62,105},{120,49,89},{98,35,71},{77,19,54},{50,2,30},{0,0,0}, {185,84,131},{162,73,114},{141,62,99},{120,49,84},{98,35,67},{77,19,50},{50,2,26},{0,0,0},{185,85,123},{163,74,108},{141,63,93},{120,50,79},{98,36,62},{77,19,46},{50,2,22},{0,0,0},{185,85,116},{163,74,101},{141,63,88},{120,50,73},{98,36,57},{77,19,41},{50,2,18},{0,0,0},{186,85,109},{163,75,95},{141,63,82},{120,50,68},{98,36,52},{77,20,36},{50,2,13},{0,0,0}, {186,85,102},{163,75,89},{141,63,76},{120,50,62},{98,36,48},{77,20,32},{50,2,9},{0,0,0},{186,85,95},{163,74,82},{141,63,70},{120,50,56},{98,37,43},{76,20,27},{49,3,6},{0,0,0},{186,85,87},{163,74,75},{141,63,64},{120,50,50},{98,37,37},{76,21,22},{49,3,3},{0,0,0},{187,85,79},{163,74,68},{141,63,57},{119,51,44},{98,38,31},{76,21,16},{48,4,2},{0,0,0}, {187,85,71},{163,74,60},{141,63,50},{119,51,38},{98,38,25},{76,21,10},{48,4,1},{0,0,0},{187,85,61},{164,75,52},{142,63,42},{119,51,32},{98,38,18},{76,22,4},{48,5,0},{0,0,0},{187,85,54},{164,75,45},{142,63,36},{119,51,24},{98,38,12},{76,22,2},{48,5,0},{0,0,0},{188,85,47},{165,74,38},{143,63,29},{120,51,18},{98,38,6},{76,23,0},{47,5,0},{0,0,0}, {182,69,154},{160,59,136},{140,48,118},{119,36,100},{98,21,82},{78,5,62},{51,0,38},{0,0,0},{183,70,146},{161,60,129},{141,49,112},{120,37,95},{98,22,77},{78,6,58},{50,0,34},{0,0,0},{184,70,138},{162,60,121},{141,49,106},{120,37,89},{98,22,71},{78,6,54},{50,0,31},{0,0,0},{185,71,132},{162,60,115},{140,50,101},{120,38,85},{99,23,67},{78,7,50},{50,0,27},{0,0,0}, {185,71,125},{162,60,110},{140,50,95},{120,38,80},{99,23,63},{78,7,46},{50,0,24},{0,0,0},{185,72,119},{162,61,104},{140,51,89},{120,38,75},{98,24,59},{77,7,42},{50,0,20},{0,0,0},{185,72,112},{162,62,97},{140,51,84},{120,38,70},{98,25,54},{77,7,38},{50,0,15},{0,0,0},{185,72,105},{162,63,91},{140,51,78},{119,39,64},{98,26,49},{77,8,33},{50,0,10},{0,0,0}, {185,72,98},{162,63,85},{140,51,72},{119,39,59},{98,26,45},{77,9,29},{50,0,7},{0,0,0},{186,73,91},{163,62,79},{141,51,67},{119,40,54},{98,27,40},{77,10,25},{50,1,4},{0,0,0},{186,73,84},{163,62,73},{141,51,61},{119,40,48},{98,27,35},{77,10,20},{50,1,2},{0,0,0},{186,73,77},{163,63,66},{141,51,55},{120,41,42},{98,28,29},{76,11,14},{49,1,1},{0,0,0}, {186,73,69},{163,63,58},{141,51,48},{120,41,36},{98,28,23},{76,11,9},{49,1,1},{0,0,0},{187,72,60},{163,63,51},{141,52,41},{120,41,30},{98,29,17},{76,12,4},{48,1,0},{0,0,0},{187,72,53},{163,63,44},{141,52,35},{120,41,23},{98,29,10},{76,12,2},{48,1,0},{0,0,0},{187,72,46},{164,63,38},{142,52,29},{119,41,17},{98,29,4},{76,13,0},{48,1,0},{0,0,0}, {182,49,147},{160,37,130},{140,26,113},{119,18,95},{98,10,77},{78,2,59},{51,0,35},{0,0,0},{183,50,140},{161,39,123},{141,28,107},{120,19,90},{98,11,73},{78,3,55},{50,0,32},{0,0,0},{184,50,132},{162,40,116},{141,29,101},{120,19,85},{98,11,69},{78,3,52},{50,0,29},{0,0,0},{185,51,126},{162,41,110},{140,30,96},{120,20,81},{99,12,65},{78,3,48},{50,0,25},{0,0,0}, {185,52,120},{162,42,105},{140,31,91},{120,21,77},{99,12,61},{78,3,44},{50,0,21},{0,0,0},{185,53,114},{162,44,99},{140,33,86},{120,22,72},{98,12,56},{77,3,40},{50,0,17},{0,0,0},{185,54,108},{162,45,94},{140,34,81},{120,22,67},{98,13,52},{77,3,36},{50,0,13},{0,0,0},{185,54,101},{162,45,88},{140,34,75},{119,23,61},{98,13,47},{77,4,31},{50,0,9},{0,0,0}, {185,55,94},{162,45,82},{140,35,70},{119,24,57},{98,13,43},{77,4,27},{50,0,6},{0,0,0},{186,55,87},{163,46,76},{141,36,65},{119,25,52},{98,14,38},{77,5,23},{50,1,4},{0,0,0},{186,55,81},{163,46,70},{141,37,59},{119,25,47},{98,14,33},{77,5,18},{50,1,2},{0,0,0},{186,56,75},{163,47,64},{141,37,53},{120,26,41},{98,15,28},{76,5,12},{49,1,1},{0,0,0}, {186,56,67},{163,47,57},{141,38,47},{120,27,35},{98,15,22},{76,5,8},{49,1,1},{0,0,0},{187,56,59},{163,47,50},{141,38,40},{120,28,29},{98,16,16},{76,6,3},{48,1,0},{0,0,0},{187,56,53},{163,47,43},{141,38,34},{120,28,23},{98,16,10},{76,6,2},{48,1,0},{0,0,0},{187,56,46},{164,48,37},{142,39,29},{119,28,17},{98,16,4},{76,6,0},{48,1,0},{0,0,0}, {183,28,141},{161,16,124},{140,3,108},{119,0,91},{99,0,73},{78,0,56},{50,0,32},{0,0,0},{184,29,134},{162,18,118},{140,6,102},{120,0,86},{99,0,69},{78,0,52},{50,0,29},{0,0,0},{184,29,127},{162,19,111},{140,8,96},{120,1,81},{99,0,66},{78,0,49},{50,0,26},{0,0,0},{185,31,121},{162,21,106},{141,9,92},{120,2,77},{99,0,62},{78,0,45},{50,0,22},{0,0,0}, {185,32,116},{162,23,101},{141,11,87},{120,2,73},{99,0,58},{78,0,41},{50,0,19},{0,0,0},{185,34,110},{162,25,95},{140,14,82},{120,3,68},{99,0,53},{78,0,37},{49,0,14},{0,0,0},{185,35,104},{162,26,90},{140,16,77},{120,4,63},{99,0,49},{78,0,33},{49,0,10},{0,0,0},{185,35,97},{162,27,84},{140,17,72},{119,5,58},{99,0,45},{77,0,29},{49,0,7},{0,0,0}, {185,36,91},{162,28,78},{140,19,67},{119,6,54},{99,0,41},{77,0,25},{49,0,5},{0,0,0},{185,37,84},{162,29,73},{140,20,62},{119,7,50},{98,1,36},{77,0,21},{49,0,4},{0,0,0},{185,38,78},{162,30,67},{140,21,56},{119,9,45},{98,1,31},{77,0,15},{49,0,2},{0,0,0},{185,39,72},{163,31,61},{140,22,50},{119,10,39},{98,1,26},{76,0,9},{48,0,0},{0,0,0}, {185,39,65},{163,31,55},{140,23,45},{119,11,33},{98,2,20},{76,0,6},{48,0,0},{0,0,0},{186,38,58},{163,31,48},{141,24,39},{119,13,27},{98,3,14},{76,0,2},{47,0,0},{0,0,0},{186,38,52},{163,32,42},{141,24,33},{119,13,22},{98,3,9},{76,0,1},{47,0,0},{0,0,0},{186,39,46},{163,33,36},{141,25,28},{119,14,17},{98,3,4},{76,0,0},{47,0,0},{0,0,0}, {132,213,247},{116,187,218},{101,164,190},{84,139,162},{67,114,135},{49,90,107},{25,61,75},{0,21,33},{135,212,234},{119,186,206},{103,163,180},{86,138,153},{69,114,128},{50,89,101},{25,61,70},{0,21,29},{138,212,221},{122,186,195},{105,163,171},{88,138,145},{70,114,120},{52,89,95},{25,61,65},{0,21,26},{141,211,209},{124,185,186},{107,162,162},{90,137,138},{72,113,114},{53,89,90},{26,60,61},{0,21,22}, {144,210,198},{126,185,175},{109,162,153},{90,137,131},{72,113,107},{53,89,85},{26,60,57},{0,21,18},{145,209,187},{128,184,165},{109,161,144},{91,136,122},{73,112,101},{53,88,79},{27,60,52},{0,20,14},{147,209,174},{129,184,154},{110,161,134},{92,136,114},{73,112,94},{53,88,73},{27,60,47},{0,20,9},{148,208,162},{129,183,143},{112,160,125},{93,135,105},{74,111,87},{54,87,66},{28,60,42},{0,21,4}, {150,207,150},{130,182,132},{113,159,115},{94,135,97},{75,111,80},{55,87,60},{28,60,37},{0,21,1},{152,206,138},{132,181,122},{114,158,105},{94,134,89},{75,111,73},{56,87,55},{28,59,32},{0,20,0},{154,206,126},{134,181,111},{114,158,95},{94,134,81},{75,111,65},{56,87,49},{28,59,26},{0,20,0},{155,206,112},{135,180,99},{115,157,85},{95,133,72},{76,110,57},{56,86,42},{29,59,20},{0,20,0}, {155,206,99},{136,180,86},{116,157,74},{96,133,62},{76,110,48},{56,86,33},{29,59,13},{0,20,0},{157,205,84},{137,180,74},{117,156,62},{97,132,51},{77,109,39},{57,86,25},{29,58,4},{0,20,0},{158,205,71},{137,180,62},{117,156,52},{97,132,42},{77,109,30},{57,86,16},{29,58,2},{0,20,0},{160,204,58},{139,180,51},{118,156,42},{97,132,33},{77,108,22},{57,86,7},{29,58,0},{0,20,0}, {136,202,239},{120,178,211},{104,155,184},{87,132,157},{69,108,131},{52,85,104},{28,57,72},{0,16,30},{138,201,226},{122,177,200},{106,154,174},{89,131,149},{71,108,124},{53,84,98},{28,56,67},{0,16,26},{141,200,214},{124,177,189},{108,154,165},{90,131,140},{72,108,116},{53,84,91},{28,56,62},{0,16,23},{144,199,203},{126,176,180},{110,153,156},{91,130,133},{73,107,110},{54,84,87},{29,56,58},{0,16,19}, {146,199,192},{128,176,170},{111,153,148},{92,130,126},{74,107,103},{55,84,82},{29,56,54},{0,16,15},{148,198,181},{129,175,160},{112,152,139},{93,129,118},{75,106,97},{55,83,76},{30,56,50},{0,15,11},{149,198,169},{130,174,149},{113,152,130},{94,129,110},{75,106,90},{55,83,70},{30,56,45},{0,15,6},{150,197,157},{131,173,138},{114,151,121},{95,128,102},{76,106,83},{56,83,64},{30,56,40},{0,16,2}, {152,196,145},{132,173,128},{114,150,112},{95,128,94},{76,106,77},{56,83,58},{30,56,35},{0,16,0},{154,195,134},{134,172,118},{115,149,102},{96,127,86},{76,105,70},{57,82,52},{30,55,30},{0,15,0},{155,195,123},{135,172,108},{115,149,93},{96,127,78},{76,105,62},{57,82,46},{30,55,24},{0,15,0},{157,195,110},{136,171,96},{116,148,83},{97,126,69},{77,104,55},{58,82,40},{30,55,18},{0,15,0}, {157,195,96},{137,171,84},{117,148,72},{97,126,60},{77,104,46},{58,82,31},{30,55,11},{0,15,0},{158,194,83},{138,171,72},{118,147,60},{98,125,50},{78,103,37},{58,81,23},{30,54,3},{0,15,0},{159,194,70},{139,171,61},{118,147,51},{98,125,41},{78,103,29},{58,81,15},{30,54,1},{0,15,0},{160,193,58},{140,170,50},{118,147,41},{98,125,32},{78,103,21},{58,81,6},{30,54,0},{0,15,0}, {139,190,231},{122,168,203},{106,146,177},{88,124,152},{71,102,126},{53,79,101},{30,52,70},{0,11,28},{142,189,218},{124,168,192},{108,145,168},{90,123,143},{73,101,119},{54,79,95},{31,52,65},{0,10,24},{144,189,206},{126,168,182},{109,145,159},{92,123,135},{74,101,112},{55,79,88},{31,52,60},{0,10,21},{146,188,196},{128,167,173},{111,144,150},{93,122,128},{75,100,106},{56,78,84},{31,51,56},{0,10,17}, {148,188,185},{129,167,164},{113,144,142},{94,122,121},{76,100,100},{57,78,79},{31,51,52},{0,10,13},{150,187,174},{131,166,154},{114,143,134},{95,121,115},{76,100,94},{56,78,73},{32,52,48},{0,10,8},{151,187,163},{132,165,144},{114,143,126},{95,121,107},{76,100,87},{56,78,67},{32,52,43},{0,10,4},{152,186,152},{133,164,134},{115,142,117},{96,120,99},{77,99,80},{57,78,62},{31,51,38},{0,10,1}, {153,186,141},{134,164,124},{115,142,109},{96,120,91},{77,99,74},{57,78,56},{31,51,33},{0,10,0},{154,185,131},{135,163,115},{116,141,100},{97,119,84},{77,98,67},{58,77,50},{32,51,28},{0,9,0},{155,185,120},{136,163,105},{116,141,91},{97,119,76},{77,98,60},{58,77,44},{32,51,22},{0,9,0},{157,184,108},{137,162,94},{117,140,81},{98,119,67},{78,98,53},{58,77,38},{32,51,16},{0,10,0}, {158,184,95},{138,162,82},{118,140,71},{98,119,58},{78,98,45},{58,77,30},{32,51,9},{0,10,0},{159,183,82},{139,162,70},{119,139,59},{99,118,49},{78,97,36},{58,76,21},{32,51,3},{0,9,0},{159,183,70},{139,162,60},{119,139,50},{99,118,40},{78,97,28},{58,76,13},{32,51,1},{0,9,0},{160,183,58},{140,161,49},{119,139,40},{99,118,32},{79,97,20},{59,76,5},{32,50,0},{0,9,0}, {142,180,223},{124,159,197},{109,138,173},{91,118,148},{74,96,122},{55,75,97},{33,48,66},{1,5,25},{145,179,211},{127,158,187},{110,137,164},{93,117,139},{75,95,115},{56,75,91},{33,48,62},{0,5,21},{147,179,200},{129,158,177},{111,137,155},{93,117,131},{75,95,108},{56,75,85},{33,48,58},{0,5,17},{148,178,190},{130,158,168},{113,137,146},{95,116,124},{76,95,102},{57,74,81},{33,47,54},{0,5,13}, {149,178,179},{131,158,160},{114,137,138},{95,116,117},{77,95,97},{58,74,76},{33,47,50},{0,5,9},{151,178,169},{132,157,150},{115,136,130},{96,115,111},{77,94,91},{58,74,70},{34,48,45},{0,5,4},{152,178,159},{133,156,140},{115,136,122},{96,115,103},{77,94,84},{58,74,64},{34,48,40},{0,5,2},{153,177,148},{134,155,130},{116,135,113},{97,114,96},{78,94,77},{59,73,59},{33,47,36},{0,6,0}, {154,176,137},{135,155,120},{116,135,105},{98,114,89},{78,94,71},{59,73,54},{33,47,31},{0,6,0},{155,175,127},{136,154,111},{117,134,96},{99,114,82},{79,93,65},{59,73,48},{33,47,26},{0,5,0},{156,175,116},{137,154,102},{117,134,88},{99,114,74},{79,93,58},{59,73,42},{33,47,20},{0,5,0},{158,175,105},{138,153,92},{118,133,79},{99,113,65},{79,93,51},{60,73,36},{33,47,14},{0,5,0}, {159,175,92},{138,153,80},{119,133,69},{99,113,56},{79,93,43},{60,73,28},{33,47,8},{0,5,0},{160,174,80},{139,153,69},{119,132,57},{99,112,47},{79,92,35},{60,72,19},{33,47,3},{0,5,0},{160,174,68},{140,153,59},{119,132,49},{99,112,39},{79,92,27},{60,72,12},{33,47,1},{0,5,0},{160,173,58},{141,152,48},{120,132,41},{100,112,31},{80,92,19},{60,72,4},{33,46,0},{0,5,0}, {144,169,215},{127,150,190},{110,130,167},{94,110,143},{75,90,118},{57,70,93},{34,44,63},{1,1,22},{146,168,204},{129,149,181},{112,130,159},{95,110,135},{76,90,111},{58,70,88},{34,44,59},{0,1,18},{148,168,193},{131,149,172},{113,130,150},{95,110,127},{76,90,104},{58,70,82},{34,44,55},{0,1,14},{150,168,184},{132,148,163},{114,129,142},{96,109,120},{77,89,99},{59,69,78},{35,43,51},{0,1,10}, {151,168,174},{133,148,155},{115,129,134},{97,109,113},{77,89,94},{59,69,73},{35,43,47},{0,1,6},{153,167,164},{134,148,145},{115,128,126},{97,109,107},{78,89,88},{59,69,67},{35,44,42},{0,1,2},{153,167,154},{134,147,136},{116,128,118},{98,109,100},{78,89,81},{59,69,61},{35,44,37},{0,1,0},{154,166,143},{135,147,127},{117,127,110},{98,108,93},{79,89,74},{59,68,56},{35,43,33},{0,2,0}, {155,166,133},{136,147,117},{117,127,102},{98,108,86},{79,89,68},{59,68,51},{35,43,29},{0,2,0},{156,165,124},{137,146,108},{118,127,93},{99,107,79},{80,88,62},{60,68,46},{35,43,24},{0,2,0},{156,165,113},{138,146,99},{118,127,85},{99,107,71},{80,88,56},{60,68,40},{35,43,18},{0,2,0},{158,164,102},{139,145,89},{119,126,76},{99,107,63},{80,88,49},{60,68,34},{34,43,12},{0,2,0}, {159,164,89},{139,145,78},{119,126,67},{99,107,55},{80,88,42},{60,68,26},{34,43,8},{0,2,0},{160,164,78},{140,144,67},{119,125,56},{99,106,46},{80,87,34},{60,67,18},{34,43,3},{0,2,0},{160,164,68},{141,144,58},{119,125,48},{99,106,38},{80,87,26},{60,67,11},{34,43,1},{0,2,0},{161,163,57},{142,144,48},{120,125,40},{100,105,30},{80,87,18},{61,67,4},{34,42,0},{0,2,0}, {146,158,208},{129,140,184},{112,122,161},{95,103,137},{77,84,114},{59,64,89},{36,38,61},{1,0,20},{148,158,197},{131,139,175},{114,121,153},{96,103,130},{78,84,107},{59,64,84},{36,39,57},{1,1,15},{150,158,187},{132,139,166},{115,121,144},{97,103,123},{78,84,101},{59,64,79},{36,39,52},{1,1,10},{151,158,178},{134,138,157},{116,121,137},{97,102,116},{79,83,96},{60,64,75},{36,38,48},{1,1,6}, {152,158,168},{135,138,149},{116,121,130},{98,102,110},{79,83,91},{60,64,70},{36,38,44},{1,1,3},{154,157,159},{136,138,139},{117,120,122},{99,102,103},{79,83,85},{60,63,65},{36,39,40},{1,1,1},{154,157,149},{136,138,131},{117,120,114},{99,102,96},{79,83,79},{60,63,59},{36,39,35},{0,1,0},{155,156,139},{137,137,122},{118,120,106},{99,101,89},{80,83,72},{60,63,54},{36,39,31},{0,1,0}, {156,156,129},{137,137,113},{118,120,98},{99,101,83},{80,83,66},{60,63,49},{36,39,27},{0,1,0},{157,155,120},{138,136,105},{118,119,91},{99,100,76},{80,82,60},{61,63,44},{36,39,22},{0,1,0},{158,155,110},{138,136,96},{118,119,83},{99,100,69},{80,82,54},{61,63,38},{36,39,16},{0,1,0},{159,154,100},{139,136,87},{119,118,74},{100,100,61},{81,82,47},{61,63,32},{36,39,10},{0,1,0}, {160,154,87},{140,136,76},{119,118,65},{100,100,53},{81,82,40},{61,63,24},{36,39,6},{0,1,0},{161,154,76},{141,135,66},{120,117,55},{100,99,44},{81,81,32},{61,62,16},{35,39,2},{0,1,0},{161,154,67},{141,135,57},{120,117,47},{100,99,37},{81,81,24},{61,62,10},{35,39,1},{0,1,0},{161,153,56},{141,135,48},{121,117,39},{100,99,29},{81,81,16},{61,62,3},{35,38,0},{0,1,0}, {148,147,200},{131,130,178},{113,114,155},{96,95,132},{78,78,110},{59,59,86},{37,33,58},{1,0,17},{150,147,190},{133,130,169},{115,113,147},{97,95,125},{79,78,104},{60,58,81},{37,34,54},{1,0,12},{152,147,181},{134,130,160},{116,113,139},{98,95,118},{79,78,98},{61,58,76},{37,34,49},{1,0,7},{153,147,172},{135,129,151},{117,112,132},{98,95,112},{80,77,93},{61,58,72},{37,33,45},{1,0,3}, {154,147,163},{135,129,143},{117,112,125},{98,95,107},{80,77,88},{61,58,67},{37,33,41},{1,0,1},{155,146,154},{136,129,134},{118,112,118},{99,94,100},{80,77,82},{61,58,62},{37,34,37},{1,0,0},{155,146,144},{137,129,126},{118,112,111},{99,94,93},{80,77,76},{61,58,57},{37,34,33},{0,0,0},{156,145,135},{137,129,118},{119,112,103},{99,94,86},{80,77,70},{61,58,52},{36,34,29},{0,0,0}, {157,145,125},{137,129,110},{119,112,95},{99,94,80},{80,77,64},{61,58,47},{36,34,25},{0,0,0},{158,144,116},{138,128,102},{119,111,88},{99,94,73},{80,76,58},{62,58,41},{36,34,20},{0,0,0},{158,144,107},{138,128,93},{119,111,80},{99,94,66},{80,76,52},{62,58,35},{36,34,14},{0,0,0},{159,144,97},{139,127,84},{120,110,72},{100,93,59},{81,76,45},{62,58,29},{36,34,8},{0,0,0}, {160,144,85},{140,127,74},{120,110,63},{100,93,51},{81,76,38},{62,58,22},{36,34,4},{0,0,0},{161,144,74},{141,127,64},{121,109,53},{101,93,42},{82,75,30},{62,57,15},{36,34,1},{0,0,0},{161,144,66},{141,127,56},{121,109,46},{101,93,35},{82,75,22},{62,57,9},{36,34,1},{0,0,0},{161,144,56},{141,126,48},{121,109,38},{101,93,28},{82,75,15},{62,57,3},{35,34,0},{0,0,0}, {150,137,193},{132,121,172},{114,106,150},{97,88,128},{79,71,106},{60,53,83},{38,28,55},{0,0,13},{152,137,183},{134,121,163},{116,105,142},{98,88,121},{80,71,100},{61,53,78},{38,28,51},{1,0,8},{153,137,174},{135,121,154},{117,105,134},{99,88,114},{80,71,94},{62,53,73},{38,28,47},{1,0,4},{154,137,166},{136,120,146},{118,105,127},{99,88,108},{81,71,90},{62,53,69},{38,28,43},{1,0,2}, {155,137,158},{136,120,138},{118,105,120},{99,88,103},{81,71,85},{62,53,64},{38,28,39},{1,0,0},{156,136,149},{137,120,130},{119,104,114},{100,87,97},{81,70,79},{62,53,59},{38,29,35},{0,0,0},{156,136,139},{137,120,122},{119,104,107},{100,87,90},{81,70,73},{62,53,54},{38,29,31},{0,0,0},{157,136,130},{138,120,114},{120,104,99},{100,87,83},{81,70,67},{62,53,49},{37,29,26},{0,0,0}, {158,136,121},{138,120,106},{120,104,92},{100,87,77},{81,70,61},{62,53,44},{37,29,22},{0,0,0},{159,135,112},{138,119,98},{120,103,85},{100,87,70},{81,70,55},{62,53,39},{37,29,17},{0,0,0},{159,135,103},{139,119,90},{120,103,77},{100,87,64},{81,70,49},{62,53,33},{37,29,11},{0,0,0},{160,135,94},{140,119,82},{121,103,70},{101,86,57},{82,70,43},{62,53,27},{37,29,5},{0,0,0}, {161,135,83},{140,119,72},{121,103,61},{101,86,49},{82,70,37},{62,53,21},{37,29,3},{0,0,0},{161,135,73},{141,118,62},{121,102,52},{101,86,41},{82,69,29},{63,52,14},{36,30,1},{0,0,0},{161,135,65},{141,118,54},{121,102,45},{101,86,34},{82,69,21},{63,52,8},{36,30,1},{0,0,0},{162,135,56},{142,118,47},{121,102,37},{101,86,27},{82,69,14},{63,52,2},{36,30,0},{0,0,0}, {152,127,187},{134,111,166},{116,97,145},{99,82,124},{80,65,102},{62,47,79},{39,21,53},{0,0,9},{153,127,177},{135,111,157},{117,97,138},{100,82,117},{81,65,96},{62,47,74},{38,22,49},{0,0,5},{154,127,168},{136,111,148},{118,97,130},{100,82,110},{81,65,90},{62,47,70},{38,22,45},{0,0,1},{155,127,160},{137,111,141},{119,97,123},{100,82,104},{82,65,86},{63,47,66},{38,23,41},{0,0,1}, {156,127,152},{137,111,134},{119,97,116},{100,82,99},{82,65,81},{63,47,62},{38,23,37},{0,0,0},{157,126,144},{138,111,126},{119,96,110},{101,81,93},{82,64,75},{63,47,57},{38,23,33},{0,0,0},{158,126,135},{138,111,118},{119,96,103},{101,81,87},{82,64,69},{63,47,52},{38,23,29},{0,0,0},{158,126,126},{139,110,110},{120,96,95},{101,81,80},{82,64,64},{63,47,47},{38,24,24},{0,0,0}, {158,126,117},{139,110,102},{120,96,89},{101,81,74},{82,64,58},{63,47,42},{38,24,20},{0,0,0},{159,125,109},{139,110,95},{120,96,82},{101,81,68},{82,64,53},{62,47,37},{38,25,15},{0,0,0},{159,125,100},{140,110,88},{120,96,75},{101,81,62},{82,64,47},{62,47,31},{38,25,9},{0,0,0},{160,125,91},{140,110,80},{121,96,68},{101,80,55},{82,64,41},{62,47,25},{38,25,4},{0,0,0}, {161,125,81},{140,110,70},{121,96,59},{101,80,47},{82,64,35},{62,47,19},{38,25,2},{0,0,0},{161,125,71},{141,109,60},{121,95,50},{101,80,39},{82,63,27},{63,47,12},{37,26,1},{0,0,0},{161,125,63},{141,109,52},{121,95,43},{101,80,32},{82,63,19},{63,47,6},{37,26,1},{0,0,0},{162,125,55},{142,109,46},{121,95,36},{101,80,26},{82,63,13},{63,47,2},{36,26,0},{0,0,0}, {153,117,180},{135,103,159},{117,89,140},{100,75,119},{81,58,98},{63,40,76},{39,14,50},{0,0,5},{154,117,171},{136,103,151},{118,89,133},{101,75,113},{82,58,92},{63,41,71},{39,15,46},{0,0,3},{156,117,162},{137,103,143},{119,89,125},{101,75,106},{82,58,86},{63,41,67},{39,16,42},{0,0,0},{157,117,154},{138,103,136},{119,89,119},{101,75,100},{82,58,82},{63,41,63},{39,17,38},{0,0,0}, {157,117,146},{138,103,129},{119,89,112},{101,75,95},{82,58,77},{63,41,59},{39,17,35},{0,0,0},{158,116,139},{139,103,122},{120,89,106},{101,74,89},{83,57,71},{64,41,54},{39,18,31},{0,0,0},{158,116,131},{139,103,114},{120,89,99},{101,74,84},{83,57,66},{64,41,49},{39,18,27},{0,0,0},{159,116,122},{139,102,106},{121,88,92},{101,74,78},{82,58,61},{63,41,45},{39,19,23},{0,0,0}, {159,116,113},{139,102,99},{121,88,86},{101,74,72},{82,58,57},{63,41,41},{39,19,18},{0,0,0},{159,116,106},{140,102,92},{121,88,79},{101,74,65},{82,58,52},{63,42,36},{39,20,13},{0,0,0},{159,116,98},{140,102,85},{121,88,73},{101,74,59},{82,58,46},{63,42,30},{39,20,8},{0,0,0},{160,116,89},{141,102,77},{121,88,66},{101,73,53},{82,57,40},{63,42,24},{38,20,4},{0,0,0}, {161,116,79},{141,102,69},{121,88,58},{101,73,46},{82,57,33},{63,42,17},{38,20,2},{0,0,0},{162,115,70},{141,101,59},{121,88,49},{102,73,38},{83,57,26},{63,42,10},{37,21,0},{0,0,0},{162,115,62},{141,101,51},{121,88,42},{102,73,31},{83,57,18},{63,42,5},{37,21,0},{0,0,0},{161,115,54},{142,101,45},{122,88,35},{102,73,25},{83,57,12},{63,42,2},{37,21,0},{0,0,0}, {154,106,173},{135,93,153},{118,80,134},{100,66,114},{82,51,94},{63,33,73},{40,9,47},{0,0,3},{155,106,164},{137,94,145},{119,80,128},{101,67,108},{83,51,89},{63,34,68},{40,10,43},{0,0,1},{156,106,156},{138,94,138},{119,80,120},{101,67,101},{83,51,83},{63,34,64},{40,10,39},{0,0,0},{157,106,149},{138,94,131},{120,80,114},{102,66,97},{83,51,79},{63,34,60},{40,11,35},{0,0,0}, {158,106,141},{139,94,124},{120,80,108},{102,66,92},{83,51,74},{63,34,56},{40,11,32},{0,0,0},{158,106,134},{139,94,117},{120,80,102},{102,66,86},{83,51,68},{64,35,52},{40,12,28},{0,0,0},{158,106,126},{139,94,110},{120,80,96},{102,66,81},{83,51,63},{64,35,47},{40,12,24},{0,0,0},{159,106,118},{139,93,103},{121,80,89},{101,66,75},{82,51,58},{63,35,42},{39,13,20},{0,0,0}, {159,106,110},{139,93,96},{121,80,83},{101,66,69},{82,51,54},{63,35,38},{39,13,16},{0,0,0},{159,106,103},{140,93,89},{121,80,76},{102,66,62},{83,52,49},{63,36,34},{39,14,11},{0,0,0},{159,106,95},{140,93,82},{121,80,70},{102,66,57},{83,52,44},{63,36,28},{39,14,7},{0,0,0},{160,106,86},{141,93,74},{121,80,63},{101,66,51},{82,51,38},{63,36,22},{38,14,3},{0,0,0}, {161,106,77},{141,93,66},{121,80,56},{101,66,44},{82,51,31},{63,36,15},{38,14,1},{0,0,0},{162,106,68},{141,92,58},{121,80,47},{102,66,37},{83,51,24},{63,36,8},{37,15,0},{0,0,0},{162,106,60},{141,92,50},{121,80,40},{102,66,30},{83,51,17},{63,36,5},{37,15,0},{0,0,0},{161,105,53},{142,92,44},{122,80,35},{102,66,24},{83,51,11},{63,36,2},{37,15,0},{0,0,0}, {155,96,167},{136,83,147},{119,71,128},{101,57,109},{83,42,90},{64,25,70},{41,3,45},{0,0,1},{156,95,158},{138,84,139},{120,71,122},{102,58,103},{84,43,85},{64,26,65},{40,4,41},{0,0,0},{157,95,150},{139,84,132},{120,71,115},{102,58,97},{84,43,79},{64,27,61},{40,4,37},{0,0,0},{158,95,143},{139,84,126},{121,71,110},{103,58,93},{84,43,75},{64,27,57},{40,5,33},{0,0,0}, {159,95,136},{139,84,119},{121,71,104},{103,58,88},{84,43,71},{64,27,54},{40,5,30},{0,0,0},{159,96,129},{140,84,113},{121,71,98},{103,58,82},{84,44,66},{64,28,50},{40,5,26},{0,0,0},{159,96,121},{140,84,106},{121,71,92},{103,58,77},{84,44,61},{64,28,45},{40,5,22},{0,0,0},{160,96,114},{140,84,99},{121,71,86},{102,58,72},{83,44,56},{64,29,40},{40,6,18},{0,0,0}, {160,96,107},{140,84,93},{121,71,80},{102,58,66},{83,44,52},{64,29,36},{40,6,14},{0,0,0},{160,96,100},{140,83,86},{121,72,74},{103,58,60},{84,45,47},{64,29,32},{39,7,9},{0,0,0},{160,96,92},{140,83,79},{121,72,68},{103,58,55},{84,45,42},{64,29,26},{39,7,5},{0,0,0},{161,95,83},{141,83,72},{121,71,61},{102,58,49},{83,45,36},{63,30,20},{39,8,3},{0,0,0}, {161,95,75},{141,83,64},{121,71,54},{102,58,42},{83,45,29},{63,30,14},{39,8,1},{0,0,0},{161,96,66},{142,83,56},{122,71,46},{102,58,35},{83,45,22},{63,30,7},{38,8,0},{0,0,0},{161,96,59},{142,83,49},{122,71,39},{102,58,29},{83,45,15},{63,30,4},{38,8,0},{0,0,0},{162,95,52},{142,83,43},{123,71,34},{103,58,23},{84,45,9},{63,30,1},{37,9,0},{0,0,0}, {155,83,161},{137,72,141},{119,60,123},{101,47,105},{83,32,86},{64,16,67},{41,1,42},{0,0,0},{157,83,153},{138,72,134},{120,61,117},{102,48,99},{84,33,81},{64,16,62},{40,2,38},{0,0,0},{157,83,145},{139,72,127},{120,61,110},{102,48,93},{84,33,76},{64,17,58},{40,2,34},{0,0,0},{158,83,138},{140,72,121},{121,61,106},{103,48,89},{84,34,72},{64,17,54},{40,2,30},{0,0,0}, {159,83,131},{140,72,115},{121,61,100},{103,48,84},{84,34,68},{64,17,51},{40,2,27},{0,0,0},{159,84,124},{140,73,109},{121,61,94},{103,49,79},{84,35,63},{64,18,47},{40,2,23},{0,0,0},{159,84,117},{140,73,102},{121,61,88},{103,49,74},{84,35,58},{64,18,42},{40,2,19},{0,0,0},{160,84,110},{140,73,96},{121,62,83},{103,49,69},{84,36,53},{64,19,37},{40,2,15},{0,0,0}, {160,84,103},{140,73,90},{121,62,77},{103,49,63},{84,36,49},{64,19,33},{40,3,11},{0,0,0},{160,84,96},{140,73,83},{121,62,71},{103,49,57},{84,36,44},{64,19,29},{39,4,7},{0,0,0},{160,84,89},{141,73,76},{121,62,65},{103,49,52},{84,36,39},{64,20,24},{39,4,4},{0,0,0},{161,84,81},{141,73,70},{121,62,58},{102,50,46},{83,37,33},{63,21,18},{39,4,2},{0,0,0}, {161,84,73},{141,73,62},{121,62,51},{102,50,40},{83,37,27},{63,21,13},{39,4,1},{0,0,0},{161,84,65},{142,73,55},{122,62,45},{102,50,34},{83,37,21},{63,21,6},{38,4,0},{0,0,0},{161,84,58},{142,73,48},{122,62,38},{102,50,28},{83,37,14},{63,21,3},{38,4,0},{0,0,0},{162,84,52},{143,73,42},{123,62,33},{103,50,22},{84,37,8},{63,22,1},{37,5,0},{0,0,0}, {156,70,154},{138,60,136},{120,48,118},{102,35,101},{84,20,82},{65,5,63},{41,0,39},{0,0,0},{158,70,147},{139,60,129},{121,49,112},{103,36,95},{84,22,77},{65,6,59},{40,0,35},{0,0,0},{159,70,139},{140,60,122},{121,49,106},{103,37,89},{84,23,72},{65,6,55},{40,0,32},{0,0,0},{160,71,132},{140,60,116},{122,49,102},{104,38,85},{85,23,68},{65,6,51},{40,0,28},{0,0,0}, {160,71,126},{140,60,111},{122,49,96},{104,38,80},{85,23,64},{65,6,47},{40,0,25},{0,0,0},{160,72,120},{140,61,105},{121,50,90},{103,39,75},{84,24,60},{65,7,43},{40,0,21},{0,0,0},{160,72,113},{140,61,98},{121,50,84},{103,39,70},{84,25,55},{65,7,39},{40,0,17},{0,0,0},{160,72,106},{140,62,92},{122,50,79},{103,39,65},{84,26,50},{65,8,35},{40,0,12},{0,0,0}, {160,72,99},{140,62,86},{122,50,74},{103,39,60},{84,27,46},{65,9,31},{40,0,8},{0,0,0},{161,72,92},{141,62,80},{122,51,68},{103,40,55},{84,27,42},{64,9,27},{40,0,5},{0,0,0},{161,72,86},{141,62,74},{122,51,62},{103,40,50},{84,27,37},{64,10,22},{40,0,3},{0,0,0},{161,72,79},{142,62,68},{122,51,56},{103,40,44},{84,28,31},{64,11,16},{39,1,1},{0,0,0}, {161,72,71},{142,62,60},{122,51,49},{103,40,38},{84,28,25},{64,11,11},{39,1,1},{0,0,0},{162,72,63},{142,62,53},{122,51,43},{103,41,32},{84,28,19},{64,12,5},{38,1,0},{0,0,0},{162,72,57},{142,62,47},{122,51,37},{103,41,26},{84,28,13},{64,12,2},{38,1,0},{0,0,0},{162,72,51},{143,62,41},{122,52,32},{102,41,21},{83,29,7},{63,13,0},{38,1,0},{0,0,0}, {157,53,148},{138,42,130},{121,29,113},{102,18,96},{84,10,78},{65,2,60},{40,0,36},{0,0,0},{158,53,141},{139,43,124},{121,31,107},{103,20,91},{84,11,74},{65,3,56},{40,0,33},{0,0,0},{159,53,133},{140,43,117},{121,32,101},{103,20,86},{84,12,69},{65,3,52},{40,0,30},{0,0,0},{160,53,127},{140,44,111},{122,33,97},{104,21,82},{85,12,65},{65,3,48},{40,0,26},{0,0,0}, {160,54,121},{140,44,106},{122,34,92},{104,22,77},{85,12,61},{65,3,45},{40,0,22},{0,0,0},{160,55,115},{140,45,101},{122,35,87},{103,23,73},{84,12,57},{65,3,41},{40,0,18},{0,0,0},{160,56,109},{140,46,95},{122,36,82},{103,24,68},{84,13,53},{65,3,37},{40,0,15},{0,0,0},{160,56,102},{140,47,89},{122,36,77},{103,25,63},{84,13,48},{65,4,33},{40,0,11},{0,0,0}, {160,56,96},{140,47,83},{122,37,72},{103,26,58},{84,14,44},{65,4,29},{40,0,7},{0,0,0},{161,57,89},{141,47,78},{122,37,66},{103,27,53},{84,15,40},{64,4,25},{40,0,5},{0,0,0},{161,57,83},{141,47,72},{122,38,60},{103,27,48},{84,15,35},{64,5,20},{40,0,3},{0,0,0},{161,57,77},{142,48,66},{122,39,54},{103,27,42},{84,16,29},{64,5,14},{39,1,1},{0,0,0}, {161,57,69},{142,49,59},{122,39,48},{103,28,37},{84,16,24},{64,5,9},{39,1,1},{0,0,0},{162,58,62},{142,49,52},{122,40,42},{103,29,31},{84,16,18},{64,6,4},{38,1,0},{0,0,0},{162,58,56},{142,49,46},{122,40,36},{103,29,25},{84,16,12},{64,6,2},{38,1,0},{0,0,0},{162,58,50},{143,49,41},{122,40,31},{102,29,20},{83,17,6},{63,6,0},{38,1,0},{0,0,0}, {158,35,142},{139,25,125},{122,10,108},{103,1,91},{85,0,74},{65,0,57},{39,0,33},{0,0,0},{159,35,135},{140,26,119},{122,13,103},{103,2,87},{85,0,70},{65,0,53},{39,0,30},{0,0,0},{160,35,128},{140,27,112},{122,15,97},{103,3,82},{85,0,66},{65,0,50},{39,0,27},{0,0,0},{160,37,122},{141,28,107},{122,17,93},{103,5,78},{85,0,62},{65,0,46},{39,0,23},{0,0,0}, {160,38,117},{141,28,102},{122,18,88},{103,6,74},{85,0,58},{65,0,42},{39,0,19},{0,0,0},{160,39,111},{140,30,97},{122,19,84},{103,7,70},{85,0,54},{65,0,38},{39,0,15},{0,0,0},{160,40,105},{140,31,92},{122,21,79},{103,9,65},{85,0,50},{65,0,34},{39,0,12},{0,0,0},{160,41,98},{141,32,86},{122,22,74},{104,10,60},{85,1,46},{65,0,30},{39,0,9},{0,0,0}, {160,41,92},{141,32,80},{122,23,69},{104,12,56},{85,1,42},{65,0,26},{39,0,6},{0,0,0},{161,42,86},{141,33,75},{122,24,64},{103,13,51},{84,2,38},{64,0,22},{38,0,4},{0,0,0},{161,42,80},{141,33,69},{122,25,58},{103,14,46},{84,2,33},{64,0,17},{38,0,2},{0,0,0},{161,43,74},{142,34,63},{122,26,52},{103,15,40},{84,3,27},{64,0,11},{37,0,1},{0,0,0}, {161,43,67},{142,35,57},{122,27,47},{103,16,35},{84,3,22},{64,0,7},{37,0,1},{0,0,0},{162,44,61},{142,36,51},{122,28,41},{103,17,30},{84,4,16},{64,0,3},{37,0,0},{0,0,0},{162,44,55},{142,36,45},{122,28,35},{103,17,24},{84,4,11},{64,0,2},{37,0,0},{0,0,0},{163,44,49},{142,37,40},{123,28,30},{103,17,19},{84,4,5},{64,0,0},{36,0,0},{0,0,0}, {76,202,245},{68,178,216},{56,155,188},{45,132,161},{32,108,134},{17,86,107},{5,58,75},{0,19,34},{82,201,232},{74,177,204},{62,154,178},{50,132,152},{35,108,127},{19,85,101},{5,57,70},{0,18,30},{89,200,219},{80,176,193},{67,154,169},{54,132,144},{38,108,119},{20,85,94},{5,57,65},{0,18,27},{94,199,207},{82,176,184},{70,153,160},{56,131,137},{41,108,113},{22,85,90},{6,57,61},{0,18,23}, {98,199,196},{85,176,174},{72,153,152},{59,131,129},{43,108,107},{24,85,85},{6,57,57},{0,18,20},{100,198,185},{88,175,164},{74,152,142},{61,130,122},{44,107,101},{25,84,79},{7,57,53},{0,18,14},{102,197,173},{90,174,153},{76,152,134},{62,130,114},{45,107,94},{27,84,74},{8,57,48},{0,18,10},{104,197,162},{91,173,143},{78,151,125},{63,129,106},{47,106,87},{29,83,67},{8,56,44},{0,18,6}, {107,196,151},{93,173,133},{80,150,116},{65,129,98},{48,106,80},{30,83,61},{8,56,39},{0,18,3},{109,195,139},{96,172,123},{81,149,107},{66,128,91},{49,105,73},{31,83,56},{9,56,34},{0,17,1},{111,195,128},{98,172,112},{82,149,97},{67,128,83},{49,105,66},{31,83,50},{9,56,28},{0,17,0},{113,194,115},{99,171,101},{84,149,87},{68,127,74},{51,105,59},{33,82,43},{9,56,22},{0,17,0}, {115,194,102},{100,171,90},{85,149,77},{68,127,64},{52,105,51},{33,82,36},{9,56,15},{0,17,0},{118,194,89},{101,170,78},{86,148,66},{69,126,55},{53,104,43},{34,82,29},{10,56,8},{0,17,0},{119,194,77},{102,170,68},{87,148,58},{69,126,47},{53,104,35},{34,82,21},{10,56,4},{0,17,0},{121,193,66},{104,170,57},{88,148,48},{70,126,39},{53,104,28},{34,82,13},{9,55,1},{0,16,0}, {85,191,237},{76,168,209},{64,147,182},{52,125,156},{38,103,129},{23,81,103},{7,53,72},{0,13,31},{91,190,224},{81,167,198},{68,146,172},{55,125,148},{41,103,123},{24,80,97},{8,53,67},{0,13,27},{96,190,212},{85,167,187},{72,146,164},{59,125,140},{43,103,115},{26,80,91},{8,53,63},{0,13,24},{100,189,201},{88,167,178},{75,145,155},{61,124,133},{45,102,109},{27,80,87},{9,53,59},{0,12,20}, {103,188,190},{90,167,168},{77,145,147},{63,124,125},{46,102,103},{29,80,82},{9,53,55},{0,12,17},{105,187,179},{92,166,159},{79,144,138},{64,123,118},{48,101,97},{30,79,76},{10,53,50},{0,12,11},{107,187,168},{94,165,148},{80,144,130},{65,123,110},{49,101,91},{31,79,71},{10,53,45},{0,12,7},{109,186,158},{95,164,139},{82,143,121},{66,122,103},{50,101,84},{33,79,65},{10,52,41},{0,12,4}, {112,186,147},{97,164,129},{83,143,112},{68,122,95},{51,101,77},{34,79,59},{10,52,37},{0,12,1},{114,185,136},{99,163,119},{84,142,104},{69,121,88},{52,100,71},{35,78,54},{11,52,32},{0,11,0},{115,185,125},{101,163,109},{85,142,95},{70,121,80},{53,100,64},{35,78,48},{11,52,26},{0,11,0},{117,184,112},{103,162,99},{87,142,85},{71,120,71},{54,99,57},{36,78,41},{11,52,20},{0,11,0}, {119,184,100},{104,162,88},{88,142,75},{71,120,62},{54,99,49},{36,78,34},{11,52,13},{0,11,0},{121,183,87},{105,161,76},{89,141,64},{72,120,53},{55,99,41},{36,77,27},{11,52,6},{0,11,0},{122,183,76},{105,161,66},{89,141,56},{72,120,46},{55,99,33},{36,77,19},{11,52,3},{0,11,0},{123,183,65},{107,161,56},{90,141,48},{73,119,38},{56,99,26},{37,77,11},{11,51,1},{0,11,0}, {94,180,229},{84,159,201},{72,139,175},{59,118,150},{44,97,125},{28,75,100},{10,49,69},{0,7,29},{99,179,216},{87,158,191},{75,138,166},{61,117,143},{46,97,119},{30,75,94},{10,49,65},{0,7,25},{103,179,205},{91,158,181},{77,138,158},{63,117,135},{48,97,112},{31,75,88},{10,49,61},{0,7,22},{106,178,194},{93,158,171},{79,137,150},{65,116,129},{49,96,106},{33,74,84},{11,49,57},{0,6,18}, {109,178,183},{94,158,163},{81,137,142},{66,116,121},{50,96,100},{34,74,79},{11,49,53},{0,6,15},{111,177,173},{96,157,153},{83,136,134},{67,115,114},{51,95,94},{34,74,73},{11,49,48},{0,6,9},{113,177,163},{97,157,144},{84,136,126},{68,115,107},{52,95,88},{35,74,68},{11,49,43},{0,6,5},{114,176,153},{99,156,135},{85,135,117},{69,115,100},{53,95,81},{36,74,63},{11,48,39},{0,6,2}, {116,176,143},{101,155,125},{86,135,109},{71,115,93},{54,95,75},{36,74,57},{11,48,35},{0,6,0},{117,175,133},{102,155,116},{87,134,101},{72,114,86},{54,94,69},{37,73,52},{11,49,30},{0,5,0},{118,175,122},{104,155,107},{88,134,93},{72,114,78},{55,94,62},{37,73,46},{11,49,24},{0,5,0},{120,174,110},{105,154,97},{89,134,83},{73,113,69},{56,93,55},{38,73,40},{11,49,18},{0,5,0}, {122,174,98},{106,154,86},{90,134,74},{73,113,61},{56,93,47},{38,73,32},{11,49,11},{0,5,0},{123,174,86},{107,153,74},{91,133,63},{74,113,52},{56,93,40},{39,72,25},{11,48,4},{0,5,0},{124,174,75},{107,153,65},{91,133,55},{74,113,45},{57,93,32},{39,72,17},{11,48,2},{0,5,0},{125,173,65},{108,153,56},{92,133,48},{75,113,38},{58,93,25},{40,72,9},{11,48,1},{0,5,0}, {100,170,221},{89,151,195},{76,132,171},{63,112,146},{48,92,121},{32,71,96},{12,45,66},{0,3,27},{104,170,209},{92,150,185},{79,131,162},{65,111,139},{50,91,115},{33,71,90},{12,45,62},{0,3,23},{107,170,198},{95,150,175},{81,131,154},{66,111,131},{51,91,108},{34,71,85},{12,45,58},{0,3,18},{110,169,188},{97,150,167},{82,130,146},{68,110,125},{52,91,103},{36,70,81},{13,45,54},{0,3,14}, {112,169,179},{98,150,159},{84,130,138},{69,110,117},{53,91,97},{37,70,77},{13,45,50},{0,3,11},{114,168,169},{99,149,149},{86,129,130},{71,109,110},{54,90,91},{37,70,71},{13,45,46},{0,3,6},{116,168,159},{101,149,140},{87,129,122},{71,109,103},{55,90,85},{38,70,65},{13,45,41},{0,3,3},{117,167,149},{102,148,131},{88,128,114},{72,109,96},{56,90,78},{39,69,60},{13,44,37},{0,3,1}, {118,167,139},{103,148,121},{88,128,106},{73,109,90},{57,90,72},{40,69,55},{13,44,33},{0,3,0},{119,166,129},{104,147,112},{89,128,98},{74,108,83},{57,89,67},{40,69,50},{14,45,28},{0,2,0},{121,166,118},{106,147,103},{90,128,90},{74,108,75},{57,89,60},{40,69,44},{14,45,22},{0,2,0},{122,165,107},{107,146,94},{91,127,81},{75,107,67},{58,89,53},{41,69,38},{14,45,16},{0,2,0}, {124,165,96},{107,146,84},{92,127,72},{75,107,59},{58,89,45},{41,69,30},{14,45,10},{0,2,0},{126,165,84},{108,146,73},{93,126,61},{75,107,50},{58,88,38},{41,68,23},{15,44,4},{0,2,0},{126,165,73},{109,146,64},{93,126,53},{76,107,43},{59,88,31},{41,68,15},{15,44,2},{0,2,0},{127,164,64},{110,146,55},{94,126,46},{76,107,36},{60,88,24},{41,68,8},{14,44,1},{0,2,0}, {106,160,213},{94,143,189},{80,124,166},{67,105,142},{52,86,117},{36,66,92},{13,41,63},{0,0,24},{109,160,202},{96,142,179},{83,124,157},{69,105,135},{54,86,111},{37,66,87},{13,41,59},{0,0,20},{111,160,191},{98,142,170},{84,124,149},{71,105,127},{54,86,104},{38,66,82},{13,41,55},{0,0,15},{113,160,182},{100,142,162},{86,123,142},{72,104,121},{55,85,100},{39,65,78},{14,41,51},{0,0,11}, {115,160,174},{101,142,154},{87,123,134},{72,104,114},{56,85,94},{40,65,74},{15,41,47},{0,0,7},{117,159,164},{103,141,145},{88,122,126},{73,103,107},{57,85,88},{41,65,68},{15,41,43},{0,0,4},{119,159,154},{103,141,136},{89,122,118},{74,103,100},{58,85,82},{41,65,62},{15,41,38},{0,0,1},{120,158,144},{104,140,127},{90,121,111},{75,103,93},{59,85,75},{41,64,57},{15,40,34},{0,0,0}, {122,158,134},{105,140,118},{91,121,103},{75,103,87},{59,85,69},{42,64,52},{16,40,30},{0,0,0},{123,157,125},{106,139,109},{92,121,95},{76,102,80},{59,84,64},{42,65,47},{17,41,26},{0,0,0},{123,157,115},{108,139,100},{92,121,87},{76,102,72},{59,84,58},{42,65,41},{17,41,20},{0,0,0},{124,157,104},{109,138,91},{93,120,78},{77,102,65},{60,84,51},{42,64,35},{16,41,14},{0,0,0}, {126,157,93},{109,138,81},{93,120,69},{77,102,57},{60,84,44},{42,64,28},{16,41,9},{0,0,0},{128,157,81},{110,138,71},{94,119,60},{77,101,49},{60,83,37},{43,64,22},{17,40,3},{0,0,0},{128,157,72},{111,138,63},{94,119,52},{77,101,42},{60,83,30},{43,64,14},{17,40,2},{0,0,0},{129,156,63},{112,138,54},{95,119,45},{78,101,35},{60,83,23},{43,64,7},{16,40,1},{0,0,0}, {110,150,206},{97,134,183},{84,117,160},{71,98,137},{55,80,113},{39,60,89},{16,35,61},{0,0,21},{113,150,195},{99,133,173},{86,116,151},{72,98,130},{56,80,107},{41,60,84},{17,35,57},{0,0,17},{115,150,185},{101,133,164},{87,116,143},{73,98,122},{57,80,100},{41,60,79},{18,35,53},{0,0,12},{117,150,176},{103,132,156},{89,116,136},{74,97,116},{58,79,96},{42,60,75},{19,36,49},{0,0,8}, {119,150,168},{104,132,148},{90,116,129},{75,97,110},{58,79,90},{42,60,70},{19,36,45},{0,0,4},{121,150,158},{105,132,140},{91,115,122},{75,97,103},{59,79,84},{42,60,66},{19,36,41},{0,0,2},{121,150,149},{106,132,132},{92,115,114},{75,97,97},{59,79,79},{42,60,60},{19,36,36},{0,0,0},{122,149,140},{107,131,123},{92,114,107},{76,97,90},{60,79,73},{43,60,55},{19,36,32},{0,0,0}, {124,149,130},{107,131,114},{92,114,99},{77,97,84},{61,79,67},{43,60,50},{19,36,28},{0,0,0},{125,148,121},{108,130,106},{93,113,92},{77,96,77},{61,78,61},{44,60,45},{20,36,24},{0,0,0},{126,148,112},{109,130,98},{94,113,85},{78,96,70},{61,78,55},{44,60,39},{20,36,18},{0,0,0},{127,147,102},{110,129,89},{95,113,76},{79,96,63},{61,78,49},{44,60,33},{19,36,12},{0,0,0}, {128,147,90},{111,129,79},{95,113,67},{79,96,55},{61,78,42},{44,60,26},{19,36,8},{0,0,0},{129,147,79},{112,129,69},{96,112,58},{79,95,47},{62,77,35},{44,60,20},{20,36,3},{0,0,0},{129,147,71},{112,129,61},{96,112,51},{79,95,40},{62,77,28},{44,60,13},{20,36,1},{0,0,0},{130,147,62},{113,129,52},{97,112,44},{80,95,34},{62,77,21},{44,59,6},{19,36,0},{0,0,0}, {114,140,199},{100,124,177},{87,109,154},{74,91,132},{58,74,109},{42,55,86},{19,30,58},{0,0,18},{117,140,189},{102,124,167},{89,108,146},{75,91,125},{59,74,103},{43,55,81},{20,30,54},{0,0,14},{119,140,179},{104,124,158},{91,108,138},{75,91,118},{60,74,97},{43,55,76},{20,30,50},{0,0,9},{120,140,170},{106,124,151},{92,108,131},{76,91,112},{61,73,92},{44,55,72},{21,31,46},{0,0,5}, {121,140,162},{106,124,143},{92,108,124},{77,91,106},{61,73,87},{44,55,67},{21,31,42},{0,0,2},{123,140,153},{107,123,135},{93,107,118},{78,90,100},{61,73,81},{44,55,63},{21,31,38},{0,0,1},{124,140,144},{108,123,127},{94,107,110},{78,90,94},{61,73,76},{44,55,58},{21,31,34},{0,0,0},{124,139,135},{109,123,119},{95,107,103},{79,90,87},{62,73,70},{45,55,53},{22,31,30},{0,0,0}, {126,139,127},{110,123,111},{95,107,96},{79,90,81},{62,73,64},{45,55,48},{22,31,26},{0,0,0},{127,139,118},{111,122,103},{95,106,89},{79,90,74},{62,72,58},{45,55,43},{22,32,22},{0,0,0},{128,139,109},{111,122,95},{95,106,82},{79,90,68},{62,72,52},{45,55,37},{22,32,16},{0,0,0},{129,138,99},{112,121,86},{96,106,74},{80,89,61},{63,72,46},{45,55,31},{22,31,10},{0,0,0}, {129,138,88},{113,121,77},{96,106,65},{80,89,53},{63,72,40},{45,55,24},{22,31,6},{0,0,0},{130,138,77},{114,121,67},{97,105,57},{81,89,45},{63,72,33},{45,55,18},{22,32,3},{0,0,0},{130,138,70},{114,121,59},{97,105,50},{81,89,39},{63,72,26},{45,55,11},{22,32,1},{0,0,0},{131,138,62},{114,121,52},{97,105,43},{81,89,33},{63,71,19},{45,54,5},{21,32,0},{0,0,0}, {117,131,192},{104,115,170},{89,101,149},{75,84,127},{59,67,105},{43,50,83},{22,25,55},{0,0,15},{119,131,182},{105,115,161},{91,101,141},{76,84,120},{60,67,100},{44,50,78},{22,25,51},{0,0,10},{121,131,173},{107,115,153},{92,101,133},{77,84,114},{61,67,94},{45,50,73},{22,25,47},{0,0,6},{122,131,165},{108,115,146},{93,101,127},{78,84,108},{62,67,89},{45,50,69},{23,26,43},{0,0,3}, {123,131,157},{109,115,138},{94,101,120},{79,84,103},{62,67,84},{45,50,64},{23,26,40},{0,0,1},{124,131,148},{110,115,130},{95,100,114},{79,83,97},{63,67,78},{46,50,60},{23,26,36},{0,0,0},{125,131,139},{110,115,122},{95,100,107},{79,83,91},{63,67,73},{46,50,55},{23,26,32},{0,0,0},{126,130,131},{111,114,115},{96,100,100},{80,83,84},{63,67,67},{46,50,51},{24,26,28},{0,0,0}, {127,130,123},{111,114,108},{96,100,93},{80,83,78},{63,67,62},{46,50,46},{24,26,24},{0,0,0},{128,130,114},{112,114,100},{96,99,86},{80,83,72},{63,67,57},{46,50,41},{24,27,19},{0,0,0},{129,130,105},{112,114,92},{96,99,79},{80,83,66},{63,67,51},{46,50,35},{24,27,13},{0,0,0},{130,129,96},{113,113,84},{97,99,72},{81,83,59},{64,67,45},{46,50,29},{24,27,7},{0,0,0}, {130,129,86},{114,113,75},{97,99,64},{81,83,51},{64,67,39},{46,50,23},{24,27,5},{0,0,0},{131,129,76},{115,113,66},{98,98,56},{82,83,44},{64,67,32},{46,50,17},{23,28,2},{0,0,0},{131,129,69},{115,113,58},{98,98,49},{82,83,38},{64,67,25},{46,50,10},{23,28,1},{0,0,0},{132,129,61},{115,113,51},{98,98,42},{82,82,32},{64,66,18},{46,49,4},{22,28,0},{0,0,0}, {120,121,186},{106,107,164},{92,93,143},{77,78,122},{61,61,101},{45,44,80},{24,19,53},{0,0,11},{122,121,176},{108,107,156},{93,93,137},{78,78,116},{62,61,96},{46,44,75},{24,20,49},{0,0,7},{123,121,167},{109,107,148},{94,93,129},{79,78,110},{63,61,90},{47,44,70},{24,20,45},{0,0,3},{124,121,159},{110,107,141},{95,93,123},{80,78,104},{64,61,86},{47,44,66},{25,21,41},{0,0,1}, {125,121,152},{111,107,133},{96,93,116},{81,78,99},{64,61,81},{47,44,62},{25,21,38},{0,0,0},{126,121,143},{112,107,126},{96,93,110},{81,77,93},{64,61,76},{48,44,57},{25,21,34},{0,0,0},{127,121,135},{112,107,118},{96,93,103},{81,77,87},{64,61,70},{48,44,53},{25,21,30},{0,0,0},{128,121,127},{113,106,111},{97,92,96},{81,77,82},{64,61,65},{47,45,49},{26,22,26},{0,0,0}, {128,121,119},{113,106,104},{97,92,90},{81,77,76},{64,61,60},{47,45,44},{26,22,22},{0,0,0},{129,121,111},{114,106,97},{98,92,83},{81,77,70},{65,61,55},{47,45,39},{26,23,17},{0,0,0},{130,121,102},{114,106,89},{98,92,77},{81,77,64},{65,61,49},{47,45,33},{26,23,11},{0,0,0},{131,120,93},{114,106,82},{99,92,70},{82,77,57},{65,61,43},{48,45,27},{26,23,6},{0,0,0}, {131,120,84},{115,106,73},{99,92,62},{82,77,49},{65,61,37},{48,45,21},{26,23,4},{0,0,0},{132,120,74},{116,105,64},{99,91,54},{82,77,42},{65,61,30},{48,45,15},{25,24,2},{0,0,0},{132,120,67},{116,105,56},{100,91,47},{82,77,36},{65,61,23},{48,45,9},{25,24,1},{0,0,0},{133,120,59},{116,105,49},{100,91,40},{83,76,30},{65,61,17},{47,45,4},{24,24,0},{0,0,0}, {122,112,179},{109,99,159},{93,85,138},{80,71,118},{63,55,98},{46,38,77},{25,12,50},{0,0,7},{124,112,170},{110,99,151},{95,85,132},{81,71,112},{64,55,93},{47,39,72},{25,13,46},{0,0,4},{126,112,161},{111,99,143},{96,85,125},{81,71,106},{65,55,87},{48,39,67},{25,13,43},{0,0,1},{127,112,154},{112,99,136},{97,85,119},{82,71,100},{65,55,83},{48,39,63},{26,14,39},{0,0,0}, {127,112,147},{112,99,129},{97,85,113},{82,71,95},{65,55,78},{48,39,59},{26,14,35},{0,0,0},{128,112,139},{113,99,122},{97,86,107},{82,71,89},{65,55,73},{49,39,55},{26,15,31},{0,0,0},{129,112,131},{113,99,114},{97,86,100},{82,71,84},{65,55,68},{49,39,51},{26,15,28},{0,0,0},{129,112,123},{114,98,107},{98,85,93},{82,70,79},{65,55,63},{48,39,46},{27,16,24},{0,0,0}, {129,112,115},{114,98,101},{98,85,87},{82,70,73},{65,55,59},{48,39,42},{27,17,20},{0,0,0},{130,112,108},{115,98,94},{99,85,80},{82,70,67},{66,56,54},{48,40,38},{27,18,15},{0,0,0},{131,112,100},{115,98,86},{99,85,74},{82,70,61},{66,56,48},{48,40,32},{27,18,10},{0,0,0},{132,111,91},{115,98,79},{100,85,68},{83,70,55},{66,55,42},{49,40,26},{27,19,5},{0,0,0}, {132,111,82},{116,98,71},{100,85,60},{83,70,48},{66,55,35},{49,40,20},{27,19,3},{0,0,0},{133,111,73},{117,98,63},{100,84,52},{83,70,41},{66,55,29},{49,40,14},{26,19,1},{0,0,0},{133,111,66},{117,98,55},{101,84,46},{83,70,35},{66,55,22},{49,40,8},{26,19,1},{0,0,0},{134,111,58},{117,97,48},{101,84,39},{84,70,29},{66,55,16},{48,40,3},{25,19,0},{0,0,0}, {125,102,173},{110,90,153},{95,77,133},{81,63,114},{65,48,94},{48,31,74},{26,7,47},{0,0,4},{126,102,164},{111,90,146},{97,77,127},{82,63,108},{66,48,89},{49,32,69},{27,8,43},{0,0,2},{127,102,156},{112,90,138},{98,77,120},{83,63,102},{66,48,84},{49,32,64},{27,8,40},{0,0,0},{128,102,149},{113,90,131},{98,77,114},{83,63,97},{66,48,80},{49,32,60},{28,9,36},{0,0,0}, {129,102,142},{113,90,124},{98,77,109},{83,63,92},{66,48,75},{49,32,56},{28,9,33},{0,0,0},{130,103,134},{114,90,118},{99,78,103},{83,64,86},{66,49,70},{49,33,52},{28,10,29},{0,0,0},{130,103,126},{114,90,111},{99,78,97},{83,64,81},{66,49,65},{49,33,48},{28,10,26},{0,0,0},{130,102,119},{114,90,104},{99,77,90},{83,64,76},{66,49,60},{49,33,44},{28,11,22},{0,0,0}, {131,102,112},{114,90,98},{99,77,84},{83,64,70},{66,49,56},{49,33,40},{28,11,18},{0,0,0},{132,103,105},{115,90,91},{100,77,78},{84,64,64},{67,50,51},{49,34,35},{27,12,13},{0,0,0},{133,103,97},{115,90,84},{100,77,72},{84,64,59},{67,50,46},{49,34,30},{27,12,8},{0,0,0},{134,102,88},{116,90,76},{100,77,65},{83,64,53},{66,49,40},{49,34,24},{27,13,5},{0,0,0}, {134,102,80},{116,90,68},{100,77,58},{83,64,46},{66,49,33},{49,34,18},{27,13,3},{0,0,0},{134,102,71},{117,90,61},{101,77,50},{84,63,40},{67,49,27},{49,34,12},{26,13,1},{0,0,0},{134,102,64},{117,90,54},{101,77,44},{84,63,34},{67,49,21},{49,34,7},{26,13,1},{0,0,0},{135,102,57},{118,89,48},{102,77,38},{84,64,28},{67,49,15},{49,34,3},{25,13,0},{0,0,0}, {127,92,167},{112,81,147},{97,69,128},{83,55,109},{66,40,90},{50,23,70},{28,3,45},{0,0,1},{128,92,158},{113,81,140},{99,69,122},{84,56,104},{67,41,85},{50,24,66},{29,3,41},{0,0,0},{129,92,150},{114,81,133},{100,69,116},{84,56,98},{68,41,80},{50,25,62},{29,3,38},{0,0,0},{130,92,143},{115,81,127},{100,69,110},{84,56,94},{68,41,76},{50,25,58},{29,3,34},{0,0,0}, {131,92,136},{115,81,120},{100,69,105},{84,56,89},{68,41,72},{50,25,54},{29,3,31},{0,0,0},{132,93,129},{116,81,114},{100,69,99},{85,56,84},{68,42,68},{50,26,50},{29,4,27},{0,0,0},{132,93,122},{116,81,108},{100,69,94},{85,56,79},{68,42,63},{50,26,46},{29,4,24},{0,0,0},{132,93,115},{116,81,101},{101,69,88},{84,56,74},{67,42,58},{50,27,42},{29,4,20},{0,0,0}, {133,93,109},{116,81,95},{101,69,82},{84,56,68},{67,42,54},{50,27,38},{29,4,16},{0,0,0},{133,93,102},{116,81,88},{101,70,76},{85,56,62},{68,43,49},{50,27,33},{28,5,11},{0,0,0},{134,93,94},{116,81,81},{101,70,70},{85,56,57},{68,43,44},{50,27,28},{28,5,6},{0,0,0},{135,92,86},{117,81,74},{101,69,63},{84,56,51},{67,43,38},{50,28,22},{28,6,4},{0,0,0}, {135,92,78},{117,81,66},{101,69,56},{84,56,44},{67,43,31},{50,28,16},{28,6,2},{0,0,0},{135,92,69},{118,81,59},{102,69,48},{84,56,38},{67,43,25},{50,28,10},{27,6,1},{0,0,0},{135,92,62},{118,81,53},{102,69,42},{84,56,32},{67,43,19},{50,28,6},{27,6,1},{0,0,0},{136,92,56},{118,81,47},{103,69,37},{85,56,27},{68,43,13},{50,28,3},{26,7,0},{0,0,0}, {129,81,161},{113,70,142},{99,58,124},{83,45,105},{67,30,87},{51,14,67},{29,1,42},{0,0,0},{131,81,153},{114,70,135},{100,59,118},{84,46,100},{68,31,82},{51,14,63},{29,1,38},{0,0,0},{131,81,145},{115,70,128},{100,59,112},{84,46,95},{68,32,77},{51,15,59},{29,1,35},{0,0,0},{132,81,138},{116,70,122},{101,59,106},{85,46,91},{68,32,73},{51,16,55},{29,1,31},{0,0,0}, {132,81,132},{116,70,116},{101,59,101},{85,46,86},{68,32,69},{51,16,51},{29,1,28},{0,0,0},{133,82,125},{116,71,110},{101,59,95},{85,47,81},{68,33,65},{51,17,47},{29,1,25},{0,0,0},{133,82,118},{116,71,104},{101,59,90},{85,47,76},{68,34,60},{51,18,43},{29,1,21},{0,0,0},{134,82,111},{116,71,98},{101,60,85},{85,48,71},{68,34,55},{51,18,39},{29,2,17},{0,0,0}, {134,82,105},{116,71,92},{101,60,79},{85,48,65},{68,34,51},{51,18,35},{29,2,13},{0,0,0},{134,82,98},{117,71,85},{101,60,73},{85,48,59},{68,35,46},{50,19,31},{28,2,9},{0,0,0},{134,82,91},{117,71,78},{101,60,67},{85,48,54},{68,35,41},{50,19,26},{28,2,6},{0,0,0},{135,82,83},{117,71,72},{101,60,60},{84,48,48},{67,35,35},{50,20,20},{28,3,4},{0,0,0}, {135,82,75},{117,71,64},{101,60,53},{84,48,43},{67,35,30},{50,20,15},{28,3,2},{0,0,0},{135,82,68},{118,71,57},{102,60,47},{85,48,37},{67,36,24},{50,20,8},{27,3,1},{0,0,0},{135,82,61},{118,71,51},{102,60,41},{85,48,31},{67,36,18},{50,20,5},{27,3,1},{0,0,0},{136,82,55},{119,71,46},{103,61,36},{85,48,26},{68,36,12},{50,21,3},{26,3,0},{0,0,0}, {130,69,155},{115,58,137},{100,48,120},{85,35,101},{68,20,83},{52,4,64},{28,0,40},{0,0,0},{132,69,148},{116,59,131},{101,48,114},{85,36,96},{68,21,78},{52,5,60},{28,0,36},{0,0,0},{133,69,140},{117,59,124},{101,48,108},{85,36,91},{68,22,73},{52,5,56},{28,0,33},{0,0,0},{134,69,134},{117,59,118},{102,49,102},{86,37,87},{69,23,69},{52,6,52},{28,0,29},{0,0,0}, {134,69,127},{117,59,112},{102,49,97},{86,37,82},{69,23,65},{52,6,48},{28,0,26},{0,0,0},{134,70,121},{117,60,106},{102,49,91},{85,38,77},{68,24,61},{52,8,44},{28,0,22},{0,0,0},{134,71,114},{117,60,100},{102,49,86},{85,38,72},{68,25,56},{52,8,41},{28,0,18},{0,0,0},{134,71,107},{117,61,94},{102,50,81},{86,39,67},{69,26,52},{52,9,37},{28,1,13},{0,0,0}, {134,71,101},{117,61,88},{102,50,75},{86,39,62},{69,26,48},{52,10,33},{28,1,10},{0,0,0},{135,71,94},{118,61,82},{102,50,70},{85,39,57},{68,27,44},{51,11,29},{28,1,7},{0,0,0},{135,71,88},{118,61,76},{102,50,64},{85,39,52},{68,27,39},{51,11,24},{28,1,5},{0,0,0},{135,71,81},{118,61,70},{102,51,58},{85,40,46},{68,28,33},{51,12,18},{27,1,3},{0,0,0}, {135,71,73},{118,61,62},{102,51,51},{85,40,41},{68,28,28},{51,12,13},{27,1,1},{0,0,0},{136,72,66},{119,62,55},{103,51,45},{86,41,35},{68,29,23},{51,13,7},{26,1,0},{0,0,0},{136,72,60},{119,62,49},{103,51,40},{86,41,30},{68,29,17},{51,13,4},{26,1,0},{0,0,0},{137,71,54},{120,62,44},{103,52,35},{86,41,25},{68,29,11},{51,14,2},{26,1,0},{0,0,0}, {131,55,149},{116,45,131},{101,33,115},{86,20,97},{69,10,80},{52,2,62},{27,0,38},{0,0,0},{133,55,142},{117,45,125},{102,34,109},{86,22,93},{69,11,75},{53,2,58},{27,0,34},{0,0,0},{134,55,135},{118,45,119},{102,35,103},{86,22,88},{69,11,71},{53,2,54},{27,0,31},{0,0,0},{134,55,129},{118,46,113},{103,35,99},{86,23,84},{69,12,67},{52,3,50},{27,0,27},{0,0,0}, {134,56,123},{118,46,108},{103,36,94},{86,24,79},{69,12,63},{52,3,46},{27,0,24},{0,0,0},{135,57,117},{118,47,102},{103,37,88},{86,25,75},{69,13,59},{52,4,42},{28,0,20},{0,0,0},{135,58,111},{118,48,97},{103,37,83},{86,26,70},{69,14,54},{52,4,39},{28,0,16},{0,0,0},{135,58,104},{118,49,91},{102,38,78},{86,27,65},{69,15,50},{52,5,35},{27,1,12},{0,0,0}, {135,58,98},{118,49,85},{102,39,73},{86,28,60},{69,15,46},{52,5,31},{27,1,9},{0,0,0},{135,59,91},{118,49,80},{103,39,68},{85,28,55},{68,16,42},{52,5,27},{27,1,6},{0,0,0},{135,59,85},{118,49,74},{103,40,62},{85,28,50},{68,16,37},{52,5,22},{27,1,4},{0,0,0},{136,59,79},{119,50,68},{103,41,56},{85,29,44},{68,17,31},{51,6,16},{26,1,2},{0,0,0}, {136,59,72},{119,50,61},{103,41,50},{85,30,39},{68,17,26},{51,6,11},{26,1,1},{0,0,0},{137,60,65},{119,51,54},{104,41,44},{86,31,34},{68,18,21},{51,6,6},{25,1,0},{0,0,0},{137,60,59},{119,51,48},{104,41,39},{86,31,29},{68,18,15},{51,6,4},{25,1,0},{0,0,0},{137,60,53},{120,51,43},{104,42,34},{86,31,24},{68,18,10},{51,7,2},{25,1,0},{0,0,0}, {133,40,144},{117,30,126},{102,17,110},{87,4,93},{70,0,76},{53,0,59},{25,0,35},{0,0,0},{134,40,137},{118,31,120},{103,19,105},{87,6,89},{70,0,72},{53,0,55},{26,0,31},{0,0,0},{135,40,130},{119,31,114},{103,20,99},{87,7,84},{70,0,68},{53,0,52},{26,0,28},{0,0,0},{136,41,124},{119,32,109},{103,21,95},{87,9,80},{70,1,64},{53,0,48},{26,0,24},{0,0,0}, {136,42,119},{119,32,104},{103,22,90},{87,10,76},{70,1,60},{53,0,44},{26,0,21},{0,0,0},{136,43,113},{119,34,98},{104,23,85},{87,11,72},{70,2,56},{53,0,40},{27,0,17},{0,0,0},{136,44,107},{119,35,93},{104,24,80},{87,13,67},{70,2,52},{53,0,36},{27,0,13},{0,0,0},{136,45,100},{120,36,88},{103,25,75},{87,14,62},{70,3,48},{53,0,32},{26,0,10},{0,0,0}, {136,45,94},{120,36,82},{103,26,71},{87,15,58},{70,3,44},{53,0,28},{26,0,7},{0,0,0},{136,46,88},{119,37,77},{104,27,66},{86,16,53},{69,4,40},{52,0,24},{26,0,5},{0,0,0},{136,46,82},{119,37,71},{104,28,60},{86,16,48},{69,4,35},{52,0,19},{26,0,3},{0,0,0},{137,47,76},{120,37,65},{104,29,54},{86,17,42},{69,5,29},{52,0,13},{25,0,1},{0,0,0}, {137,47,70},{120,38,59},{104,29,49},{86,18,37},{69,5,24},{52,0,9},{25,0,1},{0,0,0},{138,47,63},{120,39,53},{104,30,43},{87,19,32},{69,6,19},{51,0,5},{24,0,0},{0,0,0},{138,47,57},{120,39,47},{104,30,38},{87,19,27},{69,6,13},{51,0,3},{24,0,0},{0,0,0},{137,47,52},{120,40,42},{105,31,33},{87,20,22},{69,6,8},{51,0,1},{23,0,0},{0,0,0}, {15,192,243},{14,169,214},{11,147,187},{8,126,160},{5,103,133},{1,81,106},{0,55,75},{0,16,34},{18,191,230},{16,168,202},{13,146,177},{10,125,151},{6,103,126},{1,81,100},{0,54,70},{0,15,31},{20,190,218},{18,167,191},{15,146,168},{12,125,143},{7,103,119},{2,81,94},{0,54,65},{0,14,28},{22,189,206},{19,167,182},{16,145,159},{12,124,136},{8,102,113},{2,81,90},{0,54,61},{0,14,24}, {23,189,195},{20,167,173},{17,145,150},{13,124,129},{9,102,106},{3,81,85},{0,54,57},{0,14,21},{24,188,183},{21,166,163},{17,144,141},{14,123,121},{9,102,100},{4,80,79},{0,54,53},{0,14,15},{24,187,172},{22,165,153},{18,144,133},{15,123,113},{10,102,94},{4,80,74},{0,54,48},{0,14,11},{25,187,162},{22,164,144},{19,143,125},{15,122,106},{10,101,87},{5,80,68},{1,54,44},{0,13,7}, {30,186,152},{27,164,134},{22,143,117},{15,122,99},{11,101,81},{6,80,62},{1,54,40},{0,12,4},{40,185,140},{37,163,124},{27,142,108},{16,121,92},{11,101,74},{6,80,57},{1,54,35},{0,12,1},{49,185,129},{44,163,113},{32,142,99},{18,121,84},{11,101,67},{6,80,51},{1,54,29},{0,12,0},{57,184,117},{48,163,103},{38,142,89},{22,120,76},{12,100,60},{7,79,44},{1,54,23},{0,11,0}, {62,184,104},{52,163,92},{40,142,80},{24,120,67},{12,100,52},{7,79,37},{1,54,16},{0,11,0},{66,184,92},{55,162,82},{41,141,70},{25,120,58},{12,99,45},{7,78,31},{1,54,10},{0,11,0},{69,184,83},{57,162,73},{43,141,62},{27,120,51},{13,99,39},{7,78,24},{1,54,6},{0,11,0},{71,183,73},{60,162,64},{45,141,54},{29,119,44},{15,99,33},{7,78,18},{1,53,2},{0,11,0}, {19,181,235},{17,160,207},{14,140,181},{11,119,155},{7,97,128},{3,76,102},{0,51,72},{0,9,31},{21,180,223},{19,159,196},{15,139,171},{12,118,147},{8,98,122},{3,76,97},{0,50,67},{0,8,28},{23,180,211},{21,159,186},{18,139,163},{13,118,139},{9,98,115},{4,76,91},{0,50,63},{0,7,25},{30,179,200},{25,158,177},{21,138,154},{15,117,132},{10,97,109},{4,76,87},{1,50,59},{0,7,21}, {37,179,189},{30,158,168},{24,138,146},{16,117,125},{10,97,103},{5,76,82},{1,50,55},{0,7,18},{40,178,178},{33,157,158},{28,137,137},{19,116,117},{11,96,97},{6,75,76},{1,50,51},{0,7,13},{42,177,167},{36,157,149},{30,137,129},{21,116,110},{13,96,91},{6,75,71},{1,50,46},{0,7,8},{45,177,158},{38,156,140},{31,136,121},{23,116,103},{13,96,84},{7,75,65},{1,50,42},{0,7,4}, {49,176,148},{42,156,130},{34,136,113},{25,116,96},{14,96,78},{7,75,60},{1,50,38},{0,6,2},{56,175,137},{48,155,120},{38,135,105},{26,115,89},{15,95,71},{7,75,54},{1,50,33},{0,6,0},{61,175,126},{53,155,110},{42,135,96},{29,115,81},{16,95,65},{7,75,49},{1,50,27},{0,6,0},{66,174,114},{57,154,100},{46,135,87},{31,114,73},{17,95,58},{9,74,42},{1,50,21},{0,6,0}, {70,174,102},{60,154,90},{48,135,78},{33,114,65},{18,95,50},{9,74,35},{1,50,14},{0,6,0},{74,174,90},{63,154,79},{50,134,68},{34,114,56},{20,94,43},{10,74,29},{1,50,8},{0,6,0},{76,174,81},{64,154,71},{50,134,60},{35,114,49},{20,94,37},{10,74,22},{1,50,5},{0,6,0},{77,174,71},{66,154,62},{53,134,53},{37,113,43},{22,94,31},{10,74,16},{1,49,2},{0,6,0}, {23,171,227},{21,151,200},{18,132,174},{14,111,149},{10,91,124},{5,71,99},{1,46,69},{0,2,29},{26,170,215},{23,151,189},{19,131,165},{15,111,142},{10,92,118},{6,71,94},{1,46,65},{0,2,25},{29,170,204},{25,151,180},{21,131,157},{16,111,134},{11,92,112},{6,71,88},{1,46,61},{0,2,22},{40,169,193},{33,150,171},{26,131,149},{18,111,128},{12,91,106},{7,70,84},{1,46,57},{0,1,18}, {50,169,182},{41,150,162},{31,131,142},{20,111,121},{12,91,100},{7,70,80},{1,46,53},{0,1,15},{55,168,172},{45,149,153},{37,130,134},{24,110,114},{13,90,94},{7,70,74},{1,46,49},{0,1,11},{59,168,162},{49,149,145},{42,130,126},{27,110,107},{15,90,88},{8,70,68},{1,46,44},{0,1,6},{62,168,153},{53,148,136},{43,129,118},{31,109,100},{16,90,82},{8,70,63},{1,46,40},{0,1,2}, {66,167,143},{56,148,126},{46,129,110},{34,109,93},{18,90,76},{8,70,58},{1,46,36},{0,1,0},{70,166,134},{59,147,117},{49,128,102},{36,108,86},{19,89,69},{8,70,52},{1,46,31},{0,1,0},{73,166,123},{63,147,107},{52,128,94},{38,108,79},{20,89,63},{8,70,47},{1,46,25},{0,1,0},{75,165,112},{65,146,98},{53,127,85},{40,108,71},{22,89,57},{9,70,41},{1,46,19},{0,1,0}, {78,165,101},{68,146,88},{55,127,76},{41,108,63},{24,89,49},{10,70,34},{1,46,13},{0,1,0},{82,165,89},{70,146,77},{57,127,67},{42,107,55},{27,88,42},{11,70,28},{1,46,7},{0,1,0},{83,165,80},{71,146,69},{58,127,59},{43,107,48},{28,88,36},{11,70,21},{1,46,4},{0,1,0},{84,165,70},{72,146,61},{59,127,52},{45,107,42},{29,88,30},{12,69,15},{1,46,2},{0,1,0}, {36,162,220},{32,144,194},{28,125,170},{19,105,145},{11,87,120},{6,67,95},{1,42,66},{0,1,27},{42,161,208},{37,143,184},{31,124,161},{23,105,138},{13,87,114},{7,67,90},{1,42,62},{0,1,23},{48,161,198},{41,143,175},{34,124,153},{25,105,130},{15,87,108},{7,67,85},{1,42,58},{0,1,18},{55,161,188},{46,143,166},{38,124,145},{28,105,124},{17,87,102},{9,66,81},{1,42,54},{0,1,14}, {61,161,178},{51,143,158},{42,124,138},{30,105,117},{18,87,97},{9,66,76},{1,42,50},{0,1,11},{65,160,168},{55,142,149},{45,123,130},{33,104,110},{19,86,91},{10,66,71},{1,42,46},{0,1,7},{68,160,158},{57,142,141},{48,123,122},{36,104,104},{21,86,85},{10,66,66},{1,42,42},{0,1,4},{70,159,149},{61,141,132},{50,122,114},{38,104,97},{23,86,79},{10,66,61},{1,42,38},{0,1,1}, {74,159,139},{63,141,122},{52,122,106},{40,104,91},{25,86,73},{11,66,56},{1,42,34},{0,1,0},{76,158,130},{65,140,113},{55,121,99},{41,103,84},{25,85,67},{11,66,50},{2,42,29},{0,0,0},{79,158,119},{68,140,104},{57,121,91},{43,103,76},{26,85,61},{11,66,45},{2,42,23},{0,0,0},{81,158,109},{69,139,95},{58,121,83},{45,103,69},{28,85,55},{12,66,39},{2,42,17},{0,0,0}, {83,158,98},{71,139,86},{59,121,74},{45,103,61},{29,85,47},{12,66,32},{2,42,11},{0,0,0},{85,157,86},{74,139,75},{61,120,65},{46,102,53},{31,84,40},{13,66,26},{2,42,5},{0,0,0},{86,157,78},{74,139,67},{61,120,57},{47,102,46},{31,84,34},{13,66,19},{2,42,3},{0,0,0},{87,157,69},{75,139,60},{63,120,50},{48,102,40},{32,84,29},{14,65,14},{2,42,1},{0,0,0}, {49,153,212},{43,136,188},{37,118,165},{25,99,141},{15,82,117},{9,63,92},{1,38,63},{0,0,24},{57,153,201},{50,135,179},{42,117,156},{31,99,134},{18,82,111},{9,62,87},{1,38,59},{0,0,20},{64,153,191},{55,135,170},{45,117,148},{35,99,126},{20,82,104},{9,62,82},{1,38,55},{0,0,15},{67,153,182},{58,135,161},{49,117,141},{38,99,120},{23,82,99},{10,62,78},{1,38,51},{0,0,11}, {71,153,173},{61,135,153},{51,117,134},{40,99,113},{25,82,94},{11,62,73},{2,38,47},{0,0,7},{73,152,163},{63,134,145},{53,116,126},{41,99,107},{26,81,88},{12,62,68},{2,38,43},{0,0,4},{76,152,154},{66,134,137},{55,116,118},{42,99,101},{28,81,82},{12,62,63},{2,38,39},{0,0,2},{79,151,145},{67,133,128},{56,115,111},{44,98,94},{29,81,76},{13,62,58},{2,38,35},{0,0,1}, {81,151,135},{70,133,119},{58,115,103},{46,98,88},{30,81,70},{14,62,53},{2,38,31},{0,0,0},{82,150,126},{71,132,110},{60,115,96},{46,98,81},{31,80,64},{14,62,48},{3,38,26},{0,0,0},{84,150,116},{73,132,101},{61,115,88},{47,98,73},{32,80,58},{14,62,42},{3,38,21},{0,0,0},{86,150,106},{74,131,92},{62,114,80},{49,97,66},{34,80,52},{15,62,36},{3,38,15},{0,0,0}, {88,150,95},{76,131,83},{63,114,71},{50,97,58},{34,80,45},{15,62,30},{3,38,10},{0,0,0},{90,149,84},{78,132,74},{65,114,62},{51,97,51},{35,79,39},{16,62,24},{3,38,4},{0,0,0},{90,149,76},{78,132,66},{65,114,56},{51,97,45},{35,79,33},{16,62,18},{3,38,2},{0,0,0},{91,149,68},{79,131,59},{66,113,49},{52,97,39},{36,79,27},{17,61,12},{3,38,1},{0,0,0}, {62,143,205},{54,127,182},{47,111,159},{35,93,136},{23,76,113},{11,57,89},{2,33,61},{0,0,21},{67,143,194},{59,126,173},{50,110,151},{39,93,129},{26,76,107},{12,57,84},{3,33,57},{0,0,17},{72,143,185},{63,126,164},{53,110,143},{42,93,122},{28,76,100},{13,57,79},{3,33,53},{0,0,12},{75,143,176},{66,126,156},{56,110,136},{44,93,116},{30,76,95},{14,58,75},{4,33,49},{0,0,8}, {78,143,167},{67,126,148},{57,110,129},{45,93,109},{30,76,90},{15,58,70},{4,33,45},{0,0,5},{80,143,157},{69,125,139},{59,109,122},{46,93,103},{32,75,84},{16,58,66},{4,34,41},{0,0,2},{82,143,149},{72,125,131},{60,109,114},{47,93,97},{33,75,79},{17,58,61},{4,34,37},{0,0,1},{84,142,140},{73,124,123},{61,108,107},{49,92,91},{34,75,74},{18,58,56},{4,34,33},{0,0,0}, {85,142,131},{75,124,115},{62,108,100},{50,92,85},{35,75,68},{19,58,51},{4,34,29},{0,0,0},{87,141,122},{76,124,107},{64,108,93},{51,92,78},{36,74,62},{19,57,46},{4,34,24},{0,0,0},{89,141,113},{77,124,99},{65,108,85},{52,92,71},{37,74,56},{19,57,40},{4,34,19},{0,0,0},{91,141,103},{78,123,90},{66,107,78},{53,91,64},{38,74,50},{20,57,34},{4,34,13},{0,0,0}, {92,141,93},{79,123,81},{67,107,69},{53,91,56},{38,74,43},{20,57,28},{4,34,8},{0,0,0},{94,140,82},{81,123,72},{69,107,60},{54,91,49},{39,74,37},{21,57,22},{5,34,3},{0,0,0},{94,140,74},{81,123,64},{69,107,54},{55,91,43},{39,74,31},{21,57,16},{5,34,2},{0,0,0},{95,140,67},{82,123,57},{70,107,48},{56,91,38},{39,74,25},{21,57,10},{4,34,1},{0,0,0}, {73,134,198},{63,118,176},{54,103,154},{44,87,131},{30,70,109},{14,52,86},{3,28,58},{0,0,18},{76,134,188},{66,118,167},{57,103,146},{46,87,124},{33,70,103},{16,52,81},{4,28,54},{0,0,14},{79,134,179},{70,118,158},{60,103,138},{48,87,117},{35,70,97},{18,52,76},{4,28,50},{0,0,9},{81,134,170},{72,118,151},{61,102,131},{49,87,112},{36,70,92},{19,53,72},{5,28,46},{0,0,5}, {83,134,161},{73,118,143},{62,102,124},{50,87,106},{36,70,87},{19,53,67},{5,28,42},{0,0,2},{86,134,152},{75,117,135},{64,102,118},{51,87,100},{37,70,81},{20,53,63},{5,29,38},{0,0,1},{88,134,144},{76,117,127},{64,102,111},{52,87,94},{38,70,76},{21,53,58},{5,29,34},{0,0,0},{89,133,136},{77,116,119},{65,102,104},{53,86,88},{39,70,71},{22,53,53},{5,29,30},{0,0,0}, {91,133,128},{79,116,111},{67,102,97},{53,86,82},{39,70,65},{23,53,49},{5,29,26},{0,0,0},{92,133,119},{80,116,104},{68,101,90},{54,86,75},{39,69,59},{23,52,44},{6,30,22},{0,0,0},{94,133,110},{80,116,96},{69,101,82},{55,86,69},{40,69,53},{23,52,38},{6,30,17},{0,0,0},{95,132,100},{81,115,87},{70,101,75},{56,85,62},{41,69,47},{23,52,32},{5,30,11},{0,0,0}, {95,132,90},{82,115,79},{70,101,67},{56,85,54},{41,69,41},{23,52,26},{5,30,7},{0,0,0},{97,131,80},{84,115,70},{71,101,59},{57,85,47},{42,69,35},{24,52,20},{6,30,3},{0,0,0},{97,131,73},{84,115,62},{72,101,52},{57,85,41},{42,69,29},{24,52,14},{6,30,2},{0,0,0},{98,132,66},{85,115,55},{73,101,46},{58,85,36},{43,69,24},{24,52,8},{6,30,1},{0,0,0}, {79,125,192},{69,111,169},{59,96,149},{48,81,127},{35,65,105},{19,47,83},{5,23,55},{0,0,15},{82,125,182},{72,110,161},{62,96,141},{50,81,120},{37,65,99},{21,47,78},{5,23,51},{0,0,11},{85,125,173},{74,110,153},{64,96,133},{51,81,113},{38,65,93},{23,47,73},{6,23,48},{0,0,6},{87,125,165},{76,110,146},{66,95,127},{52,81,108},{39,65,89},{23,48,69},{7,24,44},{0,0,3}, {89,125,156},{77,110,138},{67,95,120},{53,81,103},{40,65,84},{23,48,64},{7,24,40},{0,0,1},{90,125,148},{79,110,131},{68,95,114},{54,81,97},{41,65,78},{24,48,60},{7,24,36},{0,0,0},{92,125,140},{79,110,123},{68,95,108},{54,81,91},{41,65,73},{25,48,55},{7,24,32},{0,0,0},{93,124,132},{80,109,116},{69,95,101},{55,80,85},{42,65,68},{26,48,51},{7,25,28},{0,0,0}, {94,124,124},{82,109,108},{69,95,94},{56,80,79},{42,65,62},{26,48,47},{7,25,24},{0,0,0},{95,124,115},{83,109,101},{70,94,87},{56,80,73},{42,64,57},{26,47,42},{7,26,20},{0,0,0},{96,124,107},{84,109,93},{71,94,80},{57,80,67},{43,64,52},{26,47,37},{7,26,15},{0,0,0},{97,124,97},{85,108,85},{72,94,73},{58,80,60},{44,64,46},{27,47,31},{7,26,9},{0,0,0}, {98,124,88},{85,108,77},{73,94,65},{58,80,53},{44,64,40},{27,47,25},{7,26,6},{0,0,0},{99,123,79},{87,108,68},{73,94,58},{59,80,46},{44,64,34},{27,47,19},{7,26,2},{0,0,0},{99,123,72},{87,108,61},{74,94,51},{59,80,40},{44,64,28},{27,47,13},{7,26,1},{0,0,0},{100,123,65},{87,108,54},{74,94,45},{60,80,35},{44,64,23},{27,47,7},{7,26,0},{0,0,0}, {86,117,186},{75,103,164},{64,90,144},{52,75,123},{39,59,101},{23,42,80},{7,17,53},{0,0,12},{88,117,176},{77,103,156},{66,89,137},{54,75,116},{41,59,95},{25,42,75},{8,18,49},{0,0,8},{89,117,167},{78,103,148},{68,89,129},{55,75,109},{42,59,90},{27,42,70},{8,18,46},{0,0,3},{91,117,160},{79,103,141},{69,89,123},{56,75,104},{43,59,86},{28,42,66},{8,19,42},{0,0,1}, {93,117,152},{80,103,134},{69,89,116},{57,75,99},{43,59,81},{28,42,62},{8,19,38},{0,0,0},{94,117,144},{82,103,127},{70,89,110},{57,75,93},{44,59,75},{29,42,58},{8,19,34},{0,0,0},{95,117,136},{83,103,119},{71,89,104},{57,75,87},{44,59,70},{29,42,53},{8,19,30},{0,0,0},{96,116,128},{84,103,112},{72,89,97},{58,74,82},{45,59,65},{29,42,49},{8,20,26},{0,0,0}, {97,116,120},{85,103,105},{72,89,91},{58,74,76},{45,59,60},{29,42,45},{8,20,22},{0,0,0},{98,116,112},{86,102,98},{73,88,84},{59,74,71},{45,59,55},{29,43,40},{9,21,18},{0,0,0},{99,116,104},{86,102,90},{74,88,78},{59,74,65},{45,59,50},{29,43,35},{8,21,13},{0,0,0},{100,116,95},{87,102,83},{75,88,71},{60,74,58},{46,59,44},{29,43,29},{8,22,7},{0,0,0}, {100,116,86},{88,102,75},{75,88,63},{60,74,51},{46,59,38},{29,43,23},{8,22,4},{0,0,0},{101,115,77},{89,102,66},{75,88,56},{61,74,44},{46,59,32},{29,43,17},{8,22,2},{0,0,0},{101,115,70},{89,102,59},{76,88,49},{61,74,38},{46,59,26},{29,43,11},{8,22,1},{0,0,0},{102,115,63},{89,101,52},{76,88,43},{62,74,33},{46,59,21},{30,43,5},{8,22,0},{0,0,0}, {90,108,179},{79,96,159},{67,83,139},{56,68,118},{43,52,97},{27,36,77},{8,10,50},{0,0,8},{92,108,170},{81,96,152},{70,82,132},{57,68,112},{44,53,92},{28,37,72},{9,11,46},{0,0,5},{93,108,162},{83,96,144},{71,82,124},{58,68,105},{45,53,87},{29,37,68},{9,11,43},{0,0,1},{95,108,155},{84,96,137},{72,82,119},{59,68,101},{45,53,83},{30,37,64},{9,12,39},{0,0,0}, {96,108,147},{84,96,129},{72,82,113},{59,68,96},{45,53,78},{31,37,60},{10,12,36},{0,0,0},{97,108,139},{85,96,123},{73,82,107},{60,68,90},{46,53,72},{31,37,55},{10,13,32},{0,0,0},{97,108,131},{85,96,115},{73,82,100},{60,68,84},{46,53,67},{31,37,51},{10,13,28},{0,0,0},{98,108,124},{86,96,108},{74,82,93},{61,67,79},{46,53,63},{31,37,47},{10,14,24},{0,0,0}, {100,108,116},{87,96,101},{74,82,87},{61,67,73},{46,53,59},{31,37,43},{11,15,20},{0,0,0},{101,108,109},{87,95,95},{75,82,81},{61,68,68},{47,54,54},{31,38,38},{11,16,16},{0,0,0},{101,108,101},{88,95,87},{75,82,75},{61,68,62},{47,54,49},{31,38,33},{11,16,11},{0,0,0},{102,108,92},{89,95,80},{76,82,69},{62,68,56},{47,53,43},{31,38,27},{10,17,6},{0,0,0}, {102,108,84},{89,95,72},{76,82,61},{62,68,50},{47,53,37},{31,38,22},{10,17,3},{0,0,0},{103,107,75},{90,95,65},{77,81,54},{63,68,43},{47,54,31},{32,38,16},{10,17,1},{0,0,0},{103,107,68},{90,95,58},{77,81,48},{63,68,37},{47,54,25},{32,38,10},{10,17,1},{0,0,0},{104,107,62},{91,94,51},{77,81,42},{63,67,32},{47,54,20},{31,38,4},{9,17,0},{0,0,0}, {94,99,173},{83,88,153},{71,75,134},{59,61,114},{45,46,94},{31,29,74},{8,5,48},{0,0,5},{95,99,164},{84,88,146},{73,75,127},{61,61,108},{46,46,89},{31,30,69},{9,6,44},{0,0,3},{96,99,156},{86,88,139},{74,75,120},{61,61,102},{47,47,84},{31,30,65},{10,7,41},{0,0,0},{98,99,150},{87,88,132},{74,75,114},{62,61,98},{48,47,80},{32,31,61},{11,7,37},{0,0,0}, {99,99,142},{87,88,124},{74,75,109},{62,61,93},{48,47,75},{33,31,57},{11,7,33},{0,0,0},{100,100,134},{88,88,118},{75,75,103},{62,62,87},{48,47,70},{33,31,53},{12,8,30},{0,0,0},{100,100,127},{88,88,112},{75,75,97},{62,62,81},{48,47,65},{33,31,48},{12,8,26},{0,0,0},{101,100,120},{89,88,105},{76,75,91},{63,61,76},{48,47,60},{33,31,44},{12,9,22},{0,0,0}, {103,100,113},{89,88,98},{76,75,85},{63,61,71},{48,47,56},{33,31,40},{12,9,18},{0,0,0},{104,99,106},{90,87,92},{76,75,79},{63,62,65},{49,48,52},{33,32,36},{12,10,13},{0,0,0},{104,99,98},{90,87,85},{77,75,73},{63,62,60},{49,48,47},{33,32,31},{12,10,9},{0,0,0},{105,99,90},{91,87,78},{78,75,67},{64,62,54},{48,47,41},{33,32,25},{11,11,6},{0,0,0}, {105,99,82},{91,87,70},{78,75,59},{64,62,48},{48,47,35},{33,32,20},{11,11,3},{0,0,0},{105,99,73},{92,87,63},{79,75,52},{64,62,42},{49,48,29},{33,32,14},{11,11,1},{0,0,0},{105,99,66},{92,87,56},{79,75,46},{64,62,36},{49,48,23},{33,32,8},{11,11,1},{0,0,0},{106,99,60},{93,87,51},{79,75,41},{64,61,30},{49,48,18},{33,32,4},{11,11,0},{0,0,0}, {97,90,167},{86,79,147},{74,67,128},{62,53,110},{48,38,90},{33,21,70},{10,3,46},{0,0,2},{99,90,158},{87,79,140},{75,67,122},{63,54,105},{49,39,86},{33,22,66},{11,3,42},{0,0,1},{100,90,150},{88,79,133},{76,67,116},{63,54,99},{49,40,81},{33,23,63},{11,3,39},{0,0,0},{101,90,144},{89,79,127},{77,67,110},{64,54,94},{50,40,77},{34,24,59},{12,3,35},{0,0,0}, {102,90,137},{90,79,120},{77,67,105},{64,54,89},{50,40,72},{34,24,55},{12,3,31},{0,0,0},{102,91,130},{90,79,114},{77,67,99},{64,54,84},{50,41,68},{34,25,51},{13,4,28},{0,0,0},{102,91,123},{90,79,108},{77,67,94},{64,54,79},{50,41,63},{34,25,46},{13,4,24},{0,0,0},{103,91,116},{91,79,102},{78,67,89},{65,55,74},{50,41,58},{34,25,42},{13,5,20},{0,0,0}, {105,91,110},{91,79,96},{78,67,83},{65,55,69},{50,41,54},{34,25,38},{13,5,16},{0,0,0},{105,90,103},{92,79,90},{78,68,77},{65,55,63},{51,42,50},{34,26,34},{13,5,11},{0,0,0},{106,90,95},{92,79,83},{79,68,71},{65,55,58},{51,42,45},{34,26,29},{13,5,7},{0,0,0},{107,90,88},{93,79,76},{80,67,65},{65,55,52},{50,41,39},{34,26,23},{12,6,5},{0,0,0}, {107,90,80},{93,79,68},{80,67,57},{65,55,46},{50,41,33},{34,26,18},{12,6,3},{0,0,0},{107,90,71},{94,79,61},{81,68,50},{66,55,40},{51,42,27},{35,26,12},{12,6,1},{0,0,0},{107,90,65},{94,79,55},{81,68,45},{66,55,34},{51,42,22},{35,26,7},{12,6,1},{0,0,0},{108,90,59},{94,79,50},{81,68,40},{66,55,29},{51,42,17},{34,27,4},{12,6,0},{0,0,0}, {101,79,161},{89,69,142},{77,57,124},{64,44,106},{50,29,87},{35,13,67},{10,1,43},{0,0,1},{102,80,153},{90,69,135},{78,57,118},{65,45,101},{51,30,82},{35,14,63},{11,1,39},{0,0,0},{103,80,145},{91,69,129},{79,57,112},{65,45,95},{51,31,78},{35,14,60},{11,1,36},{0,0,0},{104,80,139},{91,69,123},{80,58,107},{66,46,91},{51,32,74},{36,15,56},{12,1,32},{0,0,0}, {104,80,133},{92,69,116},{80,58,102},{66,46,86},{51,32,69},{36,15,52},{12,1,28},{0,0,0},{105,81,126},{92,69,110},{80,58,96},{65,46,81},{51,32,65},{35,16,48},{13,2,25},{0,0,0},{105,81,119},{92,69,104},{80,58,90},{65,46,76},{51,33,60},{35,17,43},{13,2,21},{0,0,0},{106,81,112},{93,70,99},{80,58,85},{66,47,71},{52,33,55},{35,17,39},{13,3,17},{0,0,0}, {106,81,106},{93,70,93},{80,58,80},{66,47,66},{52,33,51},{35,17,35},{13,3,13},{0,0,0},{107,81,99},{93,70,87},{81,59,74},{66,47,60},{51,34,47},{36,18,31},{13,3,9},{0,0,0},{107,81,92},{93,70,80},{81,59,68},{66,47,55},{51,34,42},{36,18,26},{13,3,6},{0,0,0},{108,80,85},{94,70,73},{81,59,62},{66,47,49},{51,34,37},{36,19,21},{13,3,4},{0,0,0}, {108,80,77},{94,70,66},{81,59,55},{66,47,44},{51,34,32},{36,19,16},{13,3,2},{0,0,0},{108,81,70},{95,70,59},{82,59,49},{67,47,39},{51,35,26},{36,19,10},{13,3,1},{0,0,0},{108,81,64},{95,70,53},{82,59,44},{67,47,33},{51,35,21},{36,19,7},{13,3,1},{0,0,0},{109,80,58},{96,70,48},{82,60,39},{67,47,28},{51,35,16},{35,20,4},{12,3,0},{0,0,0}, {104,68,156},{91,58,137},{80,48,120},{66,35,102},{52,20,83},{37,4,64},{10,0,40},{0,0,0},{105,68,149},{92,59,131},{81,48,114},{67,36,97},{53,21,78},{37,5,60},{11,0,36},{0,0,0},{106,68,141},{93,59,125},{81,48,108},{68,36,91},{53,22,74},{37,5,57},{11,0,33},{0,0,0},{107,69,135},{94,59,119},{82,49,103},{68,37,87},{53,23,70},{38,6,53},{12,0,29},{0,0,0}, {107,69,129},{94,59,112},{82,49,98},{68,37,82},{53,23,66},{38,6,49},{12,0,26},{0,0,0},{107,70,122},{95,60,106},{82,49,92},{67,38,77},{53,24,61},{37,7,45},{12,0,23},{0,0,0},{107,70,115},{95,60,100},{82,49,86},{67,38,72},{53,24,57},{37,8,41},{12,0,19},{0,0,0},{108,70,108},{95,61,95},{82,49,81},{67,39,67},{53,25,53},{37,9,37},{12,1,14},{0,0,0}, {108,70,102},{95,61,89},{82,49,76},{67,39,63},{53,26,49},{37,10,33},{13,1,10},{0,0,0},{109,70,95},{95,61,83},{82,50,71},{68,39,58},{52,26,45},{37,10,29},{14,1,7},{0,0,0},{109,70,89},{95,61,77},{82,50,65},{68,39,53},{52,26,40},{37,10,24},{14,1,5},{0,0,0},{109,71,82},{96,61,71},{82,50,59},{68,39,47},{53,27,35},{37,11,19},{13,1,3},{0,0,0}, {109,71,75},{96,61,64},{82,50,53},{68,39,42},{53,27,30},{37,11,14},{13,1,1},{0,0,0},{110,71,68},{97,61,57},{83,51,47},{69,40,37},{52,28,25},{37,12,9},{13,1,0},{0,0,0},{110,71,62},{97,61,51},{83,51,42},{69,40,32},{52,28,19},{37,12,6},{13,1,0},{0,0,0},{111,71,56},{97,61,46},{83,51,37},{69,40,27},{52,29,14},{37,13,3},{12,1,0},{0,0,0}, {106,56,150},{93,46,132},{81,35,116},{68,22,98},{53,10,80},{38,2,62},{10,0,38},{0,0,0},{107,56,143},{94,47,126},{82,36,110},{69,23,93},{54,11,76},{38,2,58},{11,0,34},{0,0,0},{108,56,136},{95,47,120},{82,36,104},{69,23,88},{54,12,72},{38,2,55},{11,0,31},{0,0,0},{109,57,130},{96,47,114},{83,37,100},{69,25,84},{54,13,68},{38,3,51},{11,0,27},{0,0,0}, {109,57,124},{96,47,109},{83,37,95},{69,25,80},{54,13,64},{38,3,47},{11,0,24},{0,0,0},{109,58,118},{96,49,103},{83,38,89},{68,26,75},{54,14,59},{38,3,43},{12,0,21},{0,0,0},{109,59,112},{96,49,98},{83,38,84},{68,27,70},{54,14,55},{38,4,39},{12,0,17},{0,0,0},{109,59,105},{96,50,92},{82,39,79},{68,28,65},{54,15,51},{38,4,35},{13,1,12},{0,0,0}, {109,60,99},{96,50,86},{82,40,74},{68,29,61},{54,16,47},{38,5,31},{13,1,9},{0,0,0},{110,60,93},{96,51,81},{83,40,69},{68,29,56},{53,16,43},{38,5,28},{13,1,6},{0,0,0},{110,60,87},{96,51,75},{83,41,63},{68,29,51},{53,16,38},{38,5,23},{13,1,4},{0,0,0},{110,61,80},{97,51,69},{83,41,57},{68,30,46},{53,17,33},{38,6,17},{13,1,2},{0,0,0}, {110,61,73},{97,51,63},{83,41,52},{68,30,41},{53,18,28},{38,6,13},{13,1,1},{0,0,0},{111,61,67},{98,51,56},{84,42,46},{69,31,36},{53,19,23},{37,6,8},{13,1,0},{0,0,0},{111,61,61},{98,51,50},{84,42,41},{69,31,31},{53,19,18},{37,6,5},{13,1,0},{0,0,0},{112,61,55},{98,51,45},{84,42,36},{69,31,26},{53,19,13},{37,7,3},{12,1,0},{0,0,0}, {108,44,145},{96,33,127},{82,22,111},{70,8,95},{55,0,77},{39,0,60},{9,0,36},{0,0,0},{109,43,138},{97,34,121},{83,23,106},{70,9,90},{55,1,73},{39,0,56},{10,0,32},{0,0,0},{110,43,131},{97,34,115},{84,24,100},{70,10,85},{55,1,69},{39,0,52},{10,0,29},{0,0,0},{111,44,125},{98,35,110},{84,25,96},{70,12,81},{55,2,65},{39,0,48},{11,0,25},{0,0,0}, {111,45,120},{98,35,105},{84,26,91},{70,13,77},{55,2,61},{39,0,45},{12,0,22},{0,0,0},{111,46,114},{98,37,99},{84,27,86},{70,15,72},{55,3,57},{39,0,41},{13,0,18},{0,0,0},{111,47,108},{98,38,94},{84,27,81},{70,16,67},{55,3,53},{39,0,37},{13,0,14},{0,0,0},{111,47,102},{97,39,89},{84,28,76},{70,17,62},{55,4,49},{39,0,33},{13,0,10},{0,0,0}, {111,48,96},{97,39,83},{84,29,72},{70,17,58},{55,5,45},{39,0,29},{13,0,7},{0,0,0},{111,49,90},{98,39,78},{84,30,67},{69,18,54},{54,6,41},{39,0,25},{13,0,5},{0,0,0},{111,49,84},{98,39,72},{84,30,61},{69,19,49},{54,6,36},{39,0,21},{13,0,3},{0,0,0},{112,49,78},{99,39,66},{85,31,55},{70,20,44},{54,6,31},{39,1,15},{13,0,1},{0,0,0}, {112,49,71},{99,40,61},{85,31,50},{70,20,39},{54,7,26},{39,1,11},{13,0,1},{0,0,0},{113,49,65},{99,41,55},{85,31,45},{70,21,34},{54,8,21},{38,1,7},{13,0,1},{0,0,0},{113,49,59},{99,41,49},{85,31,40},{70,21,29},{54,8,16},{38,1,4},{13,0,1},{0,0,0},{112,50,54},{99,41,44},{85,32,35},{70,22,24},{54,9,11},{37,1,2},{12,0,0},{0,0,0}, {0,182,240},{0,161,213},{0,140,186},{0,120,159},{0,99,133},{0,77,105},{0,51,74},{0,10,34},{0,181,228},{0,160,202},{0,140,176},{0,119,151},{0,99,126},{0,77,99},{0,51,70},{0,9,31},{0,180,217},{0,160,191},{0,140,167},{0,119,143},{0,99,118},{0,77,93},{0,51,65},{0,9,29},{0,179,205},{0,159,182},{0,139,159},{0,118,136},{0,98,112},{0,77,89},{0,51,61},{0,9,25}, {0,179,194},{0,158,172},{0,139,151},{0,118,129},{0,98,106},{0,77,84},{0,51,57},{0,9,21},{0,178,184},{0,157,162},{0,138,142},{0,118,121},{0,98,100},{0,76,78},{0,51,53},{0,9,17},{0,178,173},{0,157,153},{0,138,133},{0,118,113},{0,98,94},{0,76,73},{0,51,48},{0,9,12},{0,177,162},{0,157,144},{0,137,125},{0,117,106},{0,97,87},{0,76,68},{0,50,44},{0,8,7}, {1,177,152},{1,157,134},{0,137,117},{0,117,99},{0,97,81},{0,76,63},{0,50,40},{0,8,4},{2,176,142},{2,156,125},{1,137,109},{0,116,92},{0,96,75},{0,76,58},{0,51,35},{0,7,1},{4,175,130},{3,155,115},{2,137,100},{0,116,85},{0,96,69},{0,76,52},{0,51,30},{0,7,0},{5,174,118},{4,154,105},{3,136,91},{1,116,77},{0,96,62},{0,75,46},{0,50,24},{0,7,0}, {6,174,107},{5,154,95},{3,136,82},{1,116,69},{0,96,55},{0,75,39},{0,50,18},{0,7,0},{7,174,95},{5,154,85},{4,135,73},{1,115,60},{0,95,48},{0,75,33},{0,50,12},{0,7,0},{7,174,86},{6,154,77},{4,135,66},{2,115,54},{0,95,42},{0,75,27},{0,50,7},{0,7,0},{7,174,76},{6,154,68},{4,134,58},{2,115,48},{0,95,37},{0,74,22},{0,50,2},{0,7,0}, {0,173,233},{0,153,206},{0,133,180},{0,114,154},{0,93,128},{0,72,102},{0,47,71},{0,5,32},{0,172,221},{0,152,196},{0,133,170},{0,113,146},{0,94,122},{0,72,96},{0,47,67},{0,4,28},{0,171,210},{0,151,185},{0,133,162},{0,113,138},{0,94,114},{0,72,90},{0,47,62},{0,4,26},{1,170,199},{1,151,176},{1,132,154},{0,112,132},{0,93,108},{0,72,86},{0,47,58},{0,4,22}, {2,170,189},{2,151,167},{1,132,146},{0,112,125},{0,93,103},{0,72,81},{0,47,54},{0,4,18},{3,169,179},{2,150,158},{2,131,138},{1,112,117},{0,92,97},{0,71,75},{0,47,50},{0,4,13},{3,169,168},{2,150,149},{2,131,129},{1,112,110},{0,92,91},{0,71,70},{0,47,46},{0,4,9},{3,168,157},{3,149,140},{2,130,121},{1,111,103},{0,92,84},{0,71,65},{0,46,42},{0,3,4}, {4,168,147},{3,149,130},{2,130,113},{2,111,96},{0,92,78},{0,71,60},{0,46,38},{0,3,2},{5,167,138},{4,148,121},{3,130,106},{2,110,89},{1,91,72},{0,71,55},{0,47,33},{0,3,0},{6,166,127},{5,148,112},{4,130,97},{2,110,82},{1,91,66},{0,71,50},{0,47,28},{0,3,0},{7,166,116},{6,147,102},{4,129,89},{2,110,75},{1,91,60},{0,71,44},{0,46,22},{0,3,0}, {7,166,105},{6,147,93},{5,129,80},{3,110,67},{1,91,53},{0,71,37},{0,46,16},{0,3,0},{8,166,93},{7,147,83},{5,128,71},{3,109,59},{1,90,46},{0,71,31},{0,46,10},{0,3,0},{8,166,84},{7,147,75},{5,128,64},{3,109,52},{1,90,40},{0,71,25},{0,46,6},{0,3,0},{8,165,75},{7,147,66},{5,128,57},{3,109,47},{2,90,35},{0,70,20},{0,46,2},{0,3,0}, {0,164,225},{0,145,199},{0,126,173},{0,107,148},{0,87,124},{0,67,99},{0,42,68},{0,0,30},{0,163,214},{0,144,189},{0,125,164},{0,107,141},{0,88,118},{0,67,94},{0,42,64},{0,0,26},{1,162,203},{1,143,179},{0,125,156},{0,107,134},{0,88,111},{0,67,88},{0,42,60},{0,0,23},{2,162,193},{2,143,170},{1,125,149},{0,106,128},{0,87,105},{0,67,84},{0,43,56},{0,0,19}, {4,162,183},{3,143,162},{2,125,142},{1,106,121},{0,87,100},{0,67,79},{0,43,52},{0,0,15},{5,161,173},{4,142,153},{3,124,134},{1,105,114},{0,86,94},{0,67,73},{0,43,48},{0,0,10},{6,160,162},{5,142,144},{4,124,126},{2,105,107},{1,86,88},{0,67,68},{0,43,44},{0,0,6},{6,160,152},{5,141,135},{4,123,118},{2,105,100},{1,86,82},{0,67,63},{0,43,40},{0,0,2}, {7,159,143},{6,141,127},{4,123,110},{3,105,94},{1,86,76},{0,67,58},{0,43,36},{0,0,0},{7,158,134},{6,140,118},{5,122,103},{3,104,87},{1,85,70},{0,67,53},{0,43,31},{0,0,0},{8,158,124},{7,140,109},{5,122,95},{4,104,80},{1,85,64},{0,67,48},{0,43,26},{0,0,0},{8,158,114},{7,139,100},{6,122,87},{4,104,73},{2,85,58},{0,67,42},{0,43,21},{0,0,0}, {9,158,103},{7,139,91},{6,122,79},{4,104,65},{2,85,51},{0,67,36},{0,43,15},{0,0,0},{9,158,92},{8,139,81},{6,121,70},{4,103,58},{2,84,45},{0,66,30},{0,43,9},{0,0,0},{10,158,83},{8,139,73},{6,121,63},{4,103,51},{2,84,39},{0,66,24},{0,43,5},{0,0,0},{10,157,74},{9,139,65},{6,121,56},{5,103,45},{3,84,34},{1,66,19},{0,43,2},{0,0,0}, {2,155,219},{2,138,193},{2,120,169},{1,101,144},{0,83,120},{0,63,95},{0,38,66},{0,0,27},{3,154,208},{3,137,183},{2,119,160},{1,101,137},{0,83,114},{0,63,90},{0,38,62},{0,0,23},{4,154,197},{3,136,174},{3,119,152},{2,101,130},{1,83,107},{0,63,85},{0,38,58},{0,0,19},{5,154,187},{4,136,166},{3,119,145},{2,101,124},{1,83,102},{0,63,81},{0,39,54},{0,0,15}, {6,154,178},{5,136,158},{4,119,138},{2,101,117},{1,83,97},{0,63,76},{0,39,50},{0,0,11},{6,153,169},{5,135,149},{4,118,130},{3,100,110},{1,82,91},{0,63,71},{0,39,46},{0,0,6},{7,153,158},{6,135,140},{5,118,122},{3,100,104},{1,82,86},{0,63,66},{0,39,42},{0,0,4},{7,152,148},{6,134,131},{5,117,114},{4,100,97},{2,82,79},{0,63,61},{0,39,38},{0,0,1}, {8,152,139},{7,134,123},{5,117,107},{4,100,91},{2,82,73},{0,63,56},{0,39,34},{0,0,0},{8,151,130},{7,134,114},{6,117,100},{4,99,84},{2,81,68},{0,63,51},{0,39,29},{0,0,0},{9,151,120},{7,134,106},{6,117,92},{4,99,77},{2,81,62},{0,63,46},{0,39,24},{0,0,0},{9,151,110},{8,133,97},{6,116,84},{5,99,71},{2,81,56},{1,63,40},{0,39,19},{0,0,0}, {10,151,100},{8,133,88},{6,116,76},{5,99,63},{3,81,49},{1,63,34},{0,39,13},{0,0,0},{11,150,89},{8,133,79},{7,116,68},{5,98,56},{3,80,43},{1,62,28},{0,39,7},{0,0,0},{15,150,81},{11,133,71},{7,116,61},{5,98,50},{3,80,37},{1,62,23},{0,39,4},{0,0,0},{19,150,73},{15,132,63},{7,116,54},{5,98,44},{3,80,32},{1,62,18},{0,39,2},{0,0,0}, {4,147,212},{3,130,187},{3,113,164},{2,95,140},{0,78,116},{0,59,91},{0,34,63},{0,0,24},{5,146,201},{5,129,178},{4,113,155},{2,95,133},{1,78,110},{0,59,87},{0,34,59},{0,0,20},{6,146,191},{5,129,169},{4,113,147},{3,95,126},{1,78,104},{0,59,82},{0,34,55},{0,0,15},{7,146,182},{6,129,161},{5,112,141},{4,95,120},{2,78,99},{0,59,78},{0,35,51},{0,0,11}, {8,146,173},{6,129,153},{5,112,134},{4,95,113},{2,78,94},{0,59,73},{0,35,47},{0,0,7},{8,145,164},{7,128,144},{6,112,126},{4,95,107},{2,77,88},{1,59,68},{0,35,43},{0,0,4},{8,145,154},{7,128,136},{6,112,118},{4,95,101},{2,77,83},{1,59,63},{0,35,39},{0,0,2},{10,144,144},{7,127,127},{6,111,111},{5,94,94},{3,77,76},{1,59,58},{0,35,35},{0,0,1}, {11,144,135},{9,127,119},{6,111,104},{5,94,88},{3,77,70},{1,59,54},{0,35,31},{0,0,0},{12,143,126},{10,127,111},{7,111,97},{5,94,81},{3,76,65},{1,59,49},{0,35,27},{0,0,0},{12,143,117},{11,127,103},{8,111,89},{5,94,74},{3,76,59},{1,59,44},{0,35,22},{0,0,0},{13,143,107},{11,126,94},{9,110,81},{6,93,68},{3,76,53},{1,59,38},{0,35,17},{0,0,0}, {15,143,97},{12,126,85},{10,110,73},{6,93,61},{3,76,47},{1,59,32},{0,35,11},{0,0,0},{17,142,87},{12,126,76},{10,110,65},{6,93,55},{4,75,42},{1,58,26},{0,35,6},{0,0,0},{23,142,79},{17,126,69},{10,110,59},{7,93,49},{4,75,36},{1,58,21},{0,35,4},{0,0,0},{29,142,72},{21,125,62},{10,109,53},{7,93,43},{4,75,31},{1,58,16},{0,35,2},{0,0,0}, {6,138,205},{5,122,181},{5,106,158},{3,89,135},{2,72,112},{0,54,89},{0,30,61},{0,0,21},{7,137,194},{6,122,172},{5,106,151},{4,89,129},{2,72,106},{1,54,84},{0,30,57},{0,0,17},{8,137,185},{7,122,163},{6,106,143},{4,89,122},{3,72,100},{1,54,79},{0,30,53},{0,0,13},{8,137,176},{7,121,156},{6,105,136},{5,89,116},{3,72,95},{1,54,75},{0,31,49},{0,0,9}, {9,137,167},{7,121,148},{6,105,129},{5,89,110},{3,72,90},{1,54,70},{0,31,45},{0,0,5},{9,137,158},{8,120,140},{6,105,122},{5,89,104},{3,71,85},{1,54,66},{0,31,41},{0,0,2},{10,137,149},{8,120,132},{7,105,114},{5,89,98},{3,71,80},{1,54,61},{0,31,37},{0,0,1},{14,136,140},{9,120,123},{7,104,107},{5,88,91},{3,71,74},{1,54,56},{0,31,33},{0,0,0}, {18,136,131},{13,120,115},{9,104,101},{6,88,85},{4,71,68},{1,54,52},{0,31,29},{0,0,0},{21,136,123},{18,120,108},{12,104,94},{6,88,78},{4,71,63},{2,54,47},{0,31,25},{0,0,0},{25,136,114},{21,120,100},{14,104,87},{7,88,72},{4,71,57},{2,54,42},{0,31,20},{0,0,0},{29,135,105},{24,119,92},{17,103,79},{8,87,66},{4,70,51},{2,53,36},{0,31,15},{0,0,0}, {32,135,95},{26,119,83},{19,103,71},{10,87,59},{4,70,45},{2,53,30},{0,31,9},{0,0,0},{35,134,85},{29,119,74},{22,103,63},{11,87,53},{4,71,40},{2,54,24},{0,31,4},{0,0,0},{38,134,77},{31,119,67},{23,103,57},{12,87,47},{4,71,34},{2,54,19},{0,31,3},{0,0,0},{41,135,70},{34,118,61},{23,103,52},{12,87,41},{5,70,29},{2,53,14},{0,31,1},{0,0,0}, {8,130,198},{7,114,175},{6,99,153},{5,83,130},{3,66,108},{1,49,86},{0,25,58},{0,0,18},{10,129,188},{9,114,166},{7,99,146},{6,83,124},{3,66,103},{1,49,81},{0,26,54},{0,0,14},{12,129,179},{10,114,158},{8,99,138},{6,83,117},{4,66,97},{1,49,76},{0,26,50},{0,0,10},{13,129,170},{12,113,151},{9,98,131},{6,83,112},{4,66,92},{1,49,72},{0,26,46},{0,0,6}, {15,129,161},{13,113,143},{10,98,124},{7,83,107},{4,66,87},{1,49,67},{0,26,42},{0,0,2},{16,129,152},{14,113,135},{11,98,118},{7,83,101},{4,66,82},{2,49,63},{0,26,38},{0,0,1},{18,129,144},{14,113,127},{12,98,111},{7,83,95},{4,66,77},{2,49,58},{0,26,35},{0,0,0},{22,128,136},{16,112,120},{12,98,104},{8,82,88},{5,66,72},{2,49,54},{0,27,31},{0,0,0}, {27,128,128},{20,112,112},{15,98,98},{9,82,82},{5,66,66},{2,49,49},{0,27,27},{0,0,0},{32,128,120},{27,112,105},{18,97,91},{10,82,75},{5,66,60},{2,49,44},{0,27,23},{0,0,0},{38,128,111},{31,112,97},{22,97,84},{12,82,69},{5,66,54},{2,49,39},{0,27,18},{0,0,0},{42,127,102},{35,111,89},{25,97,77},{13,81,63},{5,65,48},{2,48,33},{0,27,12},{0,0,0}, {45,127,93},{37,111,81},{28,97,69},{15,81,57},{6,65,43},{2,48,28},{0,27,8},{0,0,0},{49,126,83},{41,111,72},{32,97,61},{17,82,51},{6,66,38},{2,49,22},{0,27,3},{0,0,0},{51,126,75},{42,111,65},{32,97,55},{18,82,45},{6,66,32},{2,49,17},{0,27,2},{0,0,0},{52,127,68},{44,111,59},{33,97,50},{19,81,39},{7,65,28},{2,48,12},{0,27,1},{0,0,0}, {9,121,191},{8,107,169},{7,92,148},{5,77,126},{4,61,104},{2,44,83},{0,20,56},{0,0,15},{15,121,182},{14,106,161},{10,92,141},{7,77,120},{4,61,99},{2,44,78},{0,21,52},{0,0,11},{21,121,173},{19,106,153},{15,92,133},{9,77,113},{4,61,93},{2,44,73},{0,21,48},{0,0,6},{26,121,164},{23,106,146},{18,91,127},{10,77,108},{5,61,89},{2,44,69},{0,21,44},{0,0,3}, {30,121,156},{25,106,138},{21,91,120},{12,77,103},{5,61,84},{2,44,64},{0,21,41},{0,0,1},{33,120,148},{27,106,131},{22,91,114},{12,77,97},{5,61,79},{2,44,60},{0,22,37},{0,0,0},{35,120,140},{28,106,123},{23,91,108},{14,77,92},{5,61,74},{2,44,55},{0,22,33},{0,0,0},{38,120,132},{31,105,116},{25,91,101},{16,77,85},{6,61,69},{3,44,51},{0,22,29},{0,0,0}, {41,120,124},{35,105,109},{27,91,95},{18,77,79},{8,61,63},{3,44,47},{0,22,25},{0,0,0},{46,120,116},{38,105,102},{29,90,88},{19,76,74},{8,61,58},{3,44,43},{0,23,21},{0,0,0},{49,120,108},{41,105,94},{32,90,81},{21,76,68},{8,61,53},{3,44,38},{0,23,16},{0,0,0},{51,120,99},{44,104,87},{34,90,74},{22,76,61},{9,60,47},{3,44,32},{0,23,10},{0,0,0}, {53,120,90},{46,104,79},{36,90,66},{23,76,55},{10,60,42},{3,44,27},{0,23,7},{0,0,0},{56,119,82},{48,104,70},{38,90,59},{25,76,49},{11,61,36},{4,44,21},{0,22,2},{0,0,0},{57,119,74},{49,104,64},{38,90,53},{25,76,43},{11,61,31},{4,44,16},{0,22,2},{0,0,0},{58,119,67},{50,104,58},{39,90,48},{26,76,38},{12,60,27},{4,44,11},{0,22,1},{0,0,0}, {19,113,185},{17,99,164},{13,86,143},{10,71,122},{6,55,100},{2,38,80},{0,14,53},{0,0,12},{26,113,176},{24,99,156},{18,85,136},{13,71,116},{6,56,95},{2,39,75},{0,15,50},{0,0,8},{33,113,167},{29,99,148},{23,85,129},{15,71,109},{7,56,89},{3,39,70},{0,16,46},{0,0,3},{38,113,159},{33,99,141},{26,85,123},{17,71,104},{8,55,85},{4,39,66},{0,16,42},{0,0,1}, {43,113,151},{36,99,134},{29,85,116},{19,71,99},{8,55,81},{4,39,62},{0,16,39},{0,0,0},{46,112,144},{38,99,127},{31,85,110},{20,71,93},{9,55,76},{4,39,58},{0,17,35},{0,0,0},{48,112,136},{40,99,119},{33,85,104},{21,71,88},{9,55,71},{4,39,53},{0,17,31},{0,0,0},{50,112,128},{43,99,112},{35,85,97},{23,71,82},{10,56,66},{4,40,49},{0,17,27},{0,0,0}, {52,112,120},{45,99,105},{36,85,91},{25,71,77},{12,56,61},{4,40,45},{0,17,23},{0,0,0},{55,112,112},{47,98,99},{37,84,86},{26,70,72},{13,56,56},{4,40,41},{1,18,19},{0,0,0},{57,112,104},{49,98,92},{39,84,79},{28,70,66},{13,56,51},{4,40,36},{0,18,14},{0,0,0},{59,112,96},{50,98,85},{40,84,72},{29,70,59},{14,56,45},{4,40,30},{0,18,8},{0,0,0}, {61,112,88},{51,98,77},{41,84,64},{29,70,53},{15,56,40},{4,40,25},{0,18,5},{0,0,0},{62,111,80},{52,98,68},{43,84,57},{31,70,47},{16,56,34},{5,40,19},{0,18,2},{0,0,0},{63,111,72},{53,98,62},{43,84,51},{31,70,41},{16,56,29},{5,40,14},{0,18,2},{0,0,0},{64,111,65},{55,98,56},{44,84,46},{32,70,36},{16,56,25},{5,40,9},{1,18,1},{0,0,0}, {37,105,180},{34,92,159},{27,79,139},{19,65,118},{9,49,97},{3,33,77},{0,9,50},{0,0,9},{43,105,171},{38,92,152},{30,78,132},{21,65,112},{10,50,92},{4,34,72},{1,10,47},{0,0,5},{47,105,162},{41,92,144},{33,78,124},{23,65,105},{12,50,86},{4,34,68},{1,11,44},{0,0,1},{49,105,155},{43,92,137},{35,78,119},{25,65,101},{13,50,82},{5,34,64},{1,11,40},{0,0,0}, {51,105,147},{45,92,130},{36,78,113},{27,65,96},{14,50,78},{5,34,60},{1,11,37},{0,0,0},{54,104,140},{47,92,123},{38,78,107},{28,65,90},{15,50,73},{5,34,56},{1,11,33},{0,0,0},{56,104,132},{48,92,115},{39,78,101},{29,65,85},{16,50,68},{5,34,51},{1,11,29},{0,0,0},{58,104,124},{49,92,108},{41,78,94},{30,64,80},{17,51,63},{5,35,47},{1,11,25},{0,0,0}, {60,104,116},{51,92,102},{43,78,88},{31,64,74},{17,51,59},{5,35,43},{1,11,21},{0,0,0},{62,104,109},{51,91,96},{44,79,83},{32,65,69},{18,51,54},{5,35,39},{1,12,17},{0,0,0},{63,104,101},{53,91,89},{44,79,77},{32,65,63},{18,51,49},{5,35,34},{1,12,13},{0,0,0},{65,104,94},{55,91,82},{45,78,70},{33,65,57},{19,51,44},{6,35,29},{1,13,7},{0,0,0}, {65,104,86},{56,91,75},{46,78,63},{33,65,51},{20,51,39},{6,35,24},{1,13,4},{0,0,0},{66,104,77},{57,91,67},{47,78,56},{34,65,45},{21,51,33},{6,35,18},{1,13,2},{0,0,0},{67,104,71},{58,91,61},{47,78,50},{34,65,40},{21,51,28},{6,35,13},{1,13,1},{0,0,0},{68,104,64},{59,91,55},{47,78,45},{35,65,35},{20,51,24},{7,36,8},{1,13,0},{0,0,0}, {50,97,174},{45,84,153},{36,71,134},{27,58,114},{15,43,94},{5,27,74},{0,5,48},{0,0,6},{54,97,165},{47,84,146},{39,72,127},{30,59,108},{17,44,89},{6,28,69},{1,6,44},{0,0,3},{57,97,157},{49,84,139},{40,72,120},{31,59,102},{18,44,83},{6,28,65},{1,7,41},{0,0,0},{58,97,150},{50,84,132},{42,72,115},{32,59,98},{19,44,79},{7,28,61},{1,7,37},{0,0,0}, {59,97,142},{51,84,125},{43,72,110},{32,59,93},{19,44,75},{7,28,57},{1,7,34},{0,0,0},{61,96,135},{52,84,119},{44,72,104},{33,59,87},{20,44,70},{8,29,53},{1,7,31},{0,0,0},{62,96,128},{54,84,112},{45,72,98},{34,59,82},{20,44,65},{8,29,49},{1,7,27},{0,0,0},{63,96,121},{55,84,105},{46,72,91},{35,58,77},{21,45,61},{8,29,45},{1,7,22},{0,0,0}, {65,96,113},{56,84,99},{46,72,85},{35,58,72},{21,45,57},{8,29,41},{1,7,18},{0,0,0},{66,95,106},{56,84,93},{47,72,80},{36,59,66},{22,45,52},{9,30,36},{1,8,14},{0,0,0},{68,95,98},{58,84,86},{47,72,74},{36,59,61},{23,45,47},{9,30,32},{1,8,10},{0,0,0},{69,96,91},{59,84,79},{48,72,68},{37,59,55},{24,46,42},{10,30,27},{1,8,6},{0,0,0}, {69,96,83},{60,84,72},{49,72,61},{37,59,49},{24,46,37},{10,30,22},{1,8,4},{0,0,0},{70,96,75},{61,83,65},{50,72,54},{38,59,43},{25,46,31},{9,30,16},{1,8,2},{0,0,0},{71,96,69},{61,83,59},{50,72,49},{38,59,38},{25,46,26},{9,30,11},{1,8,1},{0,0,0},{72,96,63},{62,83,53},{51,72,44},{39,59,33},{25,46,22},{10,31,6},{1,8,0},{0,0,0}, {59,88,167},{52,76,147},{44,64,129},{35,51,110},{22,37,91},{7,20,71},{1,3,46},{0,0,4},{61,88,159},{54,76,140},{45,65,123},{36,52,105},{23,38,86},{8,21,67},{1,4,42},{0,0,1},{62,88,151},{56,76,133},{46,65,116},{36,52,99},{24,38,81},{9,22,63},{1,4,39},{0,0,0},{63,88,145},{57,76,127},{47,65,111},{38,52,94},{25,38,77},{10,22,59},{2,4,35},{0,0,0}, {64,88,138},{57,76,121},{48,65,106},{38,52,89},{25,38,72},{10,22,55},{2,4,32},{0,0,0},{66,88,131},{58,77,115},{48,65,100},{38,52,84},{26,38,68},{11,23,51},{2,4,29},{0,0,0},{68,88,124},{58,77,109},{48,65,94},{38,52,79},{26,38,63},{11,23,47},{2,4,25},{0,0,0},{69,88,117},{59,76,102},{49,65,89},{39,52,75},{27,39,59},{12,23,43},{2,4,20},{0,0,0}, {71,88,110},{61,76,96},{50,65,83},{39,52,70},{27,39,55},{12,23,39},{2,4,16},{0,0,0},{72,88,103},{61,77,90},{51,65,78},{40,53,64},{27,39,50},{13,24,34},{2,4,12},{0,0,0},{72,88,96},{62,77,84},{51,65,72},{40,53,59},{27,39,45},{13,24,30},{2,4,8},{0,0,0},{72,88,89},{62,77,77},{52,66,66},{41,53,53},{28,40,40},{13,25,25},{2,5,5},{0,0,0}, {73,88,81},{63,77,70},{52,66,59},{41,53,47},{28,40,35},{13,25,20},{2,5,3},{0,0,0},{74,88,73},{64,76,63},{53,65,53},{42,53,42},{29,40,29},{13,25,14},{2,5,1},{0,0,0},{74,88,67},{64,76,57},{53,65,48},{42,53,37},{29,40,24},{13,25,9},{2,5,1},{0,0,0},{74,88,62},{65,76,52},{54,65,43},{42,53,32},{29,40,20},{13,25,4},{2,5,0},{0,0,0}, {66,78,161},{58,67,143},{49,56,125},{40,43,106},{27,29,88},{12,12,68},{1,1,43},{0,0,2},{67,79,154},{59,68,136},{50,57,119},{41,44,101},{28,30,83},{13,13,64},{2,2,39},{0,0,1},{68,79,146},{60,68,128},{51,57,112},{41,44,95},{29,30,78},{14,14,60},{2,2,36},{0,0,0},{69,79,140},{61,68,123},{52,57,108},{42,44,91},{30,30,74},{15,15,56},{2,2,32},{0,0,0}, {70,79,133},{62,68,117},{52,57,103},{42,44,86},{30,30,69},{15,15,52},{2,2,29},{0,0,0},{72,79,127},{62,68,111},{52,57,97},{42,44,81},{30,31,65},{14,16,48},{2,2,26},{0,0,0},{72,79,120},{62,68,105},{52,57,91},{42,44,76},{30,31,60},{14,16,44},{2,2,22},{0,0,0},{73,79,113},{63,68,99},{53,57,86},{43,45,72},{30,32,56},{15,16,40},{2,2,17},{0,0,0}, {75,79,107},{63,68,93},{53,57,80},{43,45,67},{30,32,52},{15,16,36},{2,2,13},{0,0,0},{76,79,100},{64,69,87},{54,57,75},{43,46,61},{30,33,47},{15,17,32},{2,2,10},{0,0,0},{76,79,93},{65,69,81},{54,57,69},{43,46,56},{30,33,42},{15,17,27},{2,2,7},{0,0,0},{76,79,86},{66,69,75},{55,58,63},{44,46,50},{30,34,38},{16,18,23},{2,3,5},{0,0,0}, {76,79,78},{66,69,68},{55,58,57},{44,46,45},{30,34,33},{16,18,18},{2,3,3},{0,0,0},{77,79,71},{67,68,61},{56,57,51},{45,46,40},{31,34,28},{16,18,12},{2,3,1},{0,0,0},{77,79,66},{67,68,56},{56,57,46},{45,46,36},{31,34,23},{16,18,8},{2,3,1},{0,0,0},{78,80,61},{68,68,51},{57,57,42},{45,47,31},{31,34,19},{16,19,4},{2,3,0},{0,0,0}, {72,68,157},{62,58,139},{53,48,121},{44,35,102},{31,20,84},{17,4,64},{2,0,40},{0,0,0},{73,69,150},{63,59,132},{54,48,115},{45,36,97},{32,21,79},{17,5,60},{3,0,36},{0,0,0},{74,69,142},{64,59,124},{55,48,108},{45,36,91},{32,21,74},{17,5,57},{3,0,33},{0,0,0},{75,69,136},{65,59,119},{56,48,104},{46,37,87},{33,22,70},{18,6,53},{3,0,29},{0,0,0}, {75,69,129},{65,59,113},{56,48,99},{46,37,83},{33,23,66},{18,6,49},{3,0,26},{0,0,0},{76,70,123},{65,59,107},{56,49,93},{45,37,78},{33,24,62},{18,7,45},{3,0,23},{0,0,0},{76,70,116},{66,59,101},{56,49,87},{45,37,73},{33,24,57},{18,7,42},{3,0,19},{0,0,0},{77,70,109},{66,60,95},{57,49,82},{46,38,68},{33,25,53},{19,8,38},{3,0,15},{0,0,0}, {78,70,103},{67,60,90},{57,49,77},{46,38,63},{33,25,49},{19,9,34},{3,0,11},{0,0,0},{79,70,97},{68,61,85},{58,50,72},{46,39,58},{33,26,45},{19,10,30},{3,1,8},{0,0,0},{79,70,90},{69,61,79},{58,50,66},{46,39,53},{33,26,40},{19,10,25},{3,1,6},{0,0,0},{79,70,83},{70,60,73},{58,50,60},{46,39,48},{34,27,36},{20,10,21},{3,1,4},{0,0,0}, {79,70,76},{70,60,66},{59,50,55},{46,39,43},{34,27,31},{20,10,16},{3,1,2},{0,0,0},{79,70,69},{70,61,60},{60,50,49},{47,40,38},{34,27,26},{20,11,10},{3,1,1},{0,0,0},{80,70,64},{70,61,54},{60,50,44},{47,40,34},{34,27,22},{20,11,7},{3,1,1},{0,0,0},{81,71,59},{71,61,49},{60,50,40},{47,40,30},{34,28,18},{20,12,4},{3,1,0},{0,0,0}, {75,57,151},{66,48,134},{57,38,117},{46,24,99},{33,11,81},{19,2,62},{2,0,38},{0,0,0},{76,58,144},{67,49,127},{58,38,111},{47,25,94},{34,12,77},{19,2,58},{3,0,35},{0,0,0},{77,58,136},{68,49,120},{59,38,104},{47,25,89},{35,12,72},{19,2,55},{3,0,32},{0,0,0},{78,59,131},{68,49,114},{59,38,100},{47,27,85},{35,13,68},{20,3,51},{3,0,28},{0,0,0}, {78,59,125},{68,49,109},{59,39,96},{47,27,81},{35,14,64},{20,3,48},{3,0,24},{0,0,0},{79,60,119},{69,50,104},{59,40,90},{47,28,75},{34,15,60},{19,3,44},{3,0,21},{0,0,0},{79,60,113},{69,50,99},{59,40,85},{47,28,71},{34,15,55},{19,3,40},{3,0,17},{0,0,0},{80,60,106},{69,51,93},{59,40,80},{47,29,66},{35,16,51},{20,4,36},{3,0,13},{0,0,0}, {80,60,100},{69,51,88},{59,40,75},{47,29,62},{35,16,47},{20,4,32},{3,0,10},{0,0,0},{81,61,94},{70,52,82},{60,41,70},{47,30,57},{35,17,44},{20,5,29},{3,1,7},{0,0,0},{81,61,88},{71,52,77},{60,41,65},{47,30,52},{35,17,39},{20,5,24},{3,1,5},{0,0,0},{81,61,81},{71,52,71},{60,42,59},{48,31,47},{35,18,35},{21,5,19},{3,1,3},{0,0,0}, {81,61,74},{71,52,64},{61,42,54},{48,31,42},{35,18,30},{21,5,14},{3,1,2},{0,0,0},{81,61,68},{72,52,58},{61,42,48},{48,32,37},{35,18,25},{20,6,9},{3,1,1},{0,0,0},{82,61,62},{72,52,53},{61,42,43},{48,32,33},{35,19,21},{20,6,6},{3,1,1},{0,0,0},{82,62,57},{73,52,48},{62,42,39},{48,32,29},{36,20,16},{20,7,4},{3,1,0},{0,0,0}, {78,46,146},{70,37,129},{60,26,113},{48,12,96},{36,2,78},{20,0,60},{2,0,36},{0,0,0},{80,47,139},{71,38,123},{61,27,107},{49,13,91},{37,2,74},{20,0,56},{2,0,33},{0,0,0},{81,47,131},{72,38,116},{62,27,100},{50,14,86},{37,2,70},{20,0,53},{3,0,30},{0,0,0},{82,48,126},{72,39,110},{62,28,96},{50,16,82},{37,3,66},{21,0,49},{3,0,26},{0,0,0}, {82,48,121},{72,39,105},{62,29,92},{50,17,78},{37,4,62},{21,0,46},{3,0,22},{0,0,0},{82,49,115},{72,40,101},{62,30,87},{49,18,72},{36,5,58},{20,0,42},{3,0,19},{0,0,0},{82,50,109},{72,41,96},{62,30,82},{49,18,68},{36,5,53},{20,0,38},{3,0,15},{0,0,0},{83,50,102},{72,41,91},{61,31,77},{49,19,64},{37,6,49},{21,0,34},{3,0,11},{0,0,0}, {83,50,96},{72,41,85},{61,31,73},{49,20,60},{37,7,45},{21,0,30},{3,0,8},{0,0,0},{84,51,91},{73,42,79},{62,32,68},{50,21,55},{37,8,42},{21,1,27},{3,0,6},{0,0,0},{84,51,85},{73,42,74},{62,32,63},{50,21,50},{37,8,38},{21,1,23},{3,0,4},{0,0,0},{84,51,79},{73,43,68},{63,33,57},{50,22,45},{37,9,33},{22,1,17},{3,0,2},{0,0,0}, {84,51,72},{73,43,62},{63,33,52},{50,22,40},{37,9,28},{22,1,12},{3,0,1},{0,0,0},{84,52,66},{74,42,56},{63,33,46},{50,23,36},{37,9,24},{21,1,8},{3,0,0},{0,0,0},{84,52,60},{74,42,51},{63,33,41},{50,23,31},{37,10,19},{21,1,5},{3,0,0},{0,0,0},{84,52,55},{75,43,46},{63,34,37},{50,24,27},{38,11,14},{21,2,3},{3,0,0},{0,0,0}, {0,174,239},{0,154,211},{0,134,185},{0,114,158},{0,95,132},{0,74,105},{0,49,74},{0,3,35},{0,173,227},{0,153,200},{0,134,175},{0,114,150},{0,94,125},{0,74,99},{0,49,70},{0,4,31},{0,172,216},{0,153,190},{0,134,166},{0,114,142},{0,94,117},{0,74,93},{0,49,65},{0,4,28},{0,171,205},{0,152,180},{0,133,158},{0,113,135},{0,93,112},{0,73,89},{0,49,61},{0,4,24}, {0,171,194},{0,151,171},{0,133,150},{0,113,128},{0,93,106},{0,73,84},{0,49,57},{0,4,21},{0,170,184},{0,150,162},{0,132,141},{0,112,121},{0,93,100},{0,73,78},{0,48,53},{0,3,17},{0,170,173},{0,150,153},{0,131,133},{0,112,113},{0,93,94},{0,73,73},{0,48,48},{0,3,12},{0,169,162},{0,150,144},{0,131,125},{0,112,106},{0,93,88},{0,73,68},{0,49,44},{0,3,7}, {0,168,152},{0,149,134},{0,131,117},{0,112,100},{0,93,82},{0,73,63},{0,49,40},{0,3,4},{0,167,142},{0,148,125},{0,130,110},{0,111,93},{0,92,76},{0,73,59},{0,49,36},{0,3,1},{0,167,131},{0,148,116},{0,130,101},{0,111,86},{0,92,70},{0,73,53},{0,49,31},{0,3,0},{0,167,121},{0,148,106},{0,130,92},{0,111,78},{0,91,63},{0,72,47},{0,48,25},{0,3,0}, {0,167,110},{0,148,96},{0,130,84},{0,111,70},{0,91,56},{0,72,41},{0,48,20},{0,3,0},{0,166,98},{0,147,87},{0,129,75},{0,110,63},{0,92,50},{0,72,35},{0,48,14},{0,3,0},{0,166,89},{0,147,79},{0,129,68},{0,110,57},{0,92,44},{0,72,30},{0,48,9},{0,3,0},{0,165,79},{0,147,72},{0,128,62},{0,110,52},{0,92,39},{0,73,25},{0,49,4},{0,3,0}, {0,165,232},{0,146,204},{0,127,179},{0,108,153},{0,90,127},{0,69,101},{0,45,71},{0,1,32},{0,164,220},{0,145,194},{0,127,170},{0,108,146},{0,89,121},{0,70,96},{0,45,67},{0,2,28},{0,163,209},{0,145,185},{0,127,161},{0,108,138},{0,89,114},{0,70,90},{0,45,62},{0,2,25},{0,163,199},{0,145,175},{0,126,154},{0,107,131},{0,88,108},{0,69,86},{0,45,58},{0,2,21}, {0,163,188},{0,144,166},{0,126,146},{0,107,124},{0,88,103},{0,69,81},{0,45,54},{0,2,18},{0,162,178},{0,143,157},{0,126,137},{0,107,117},{0,88,97},{0,69,75},{0,44,50},{0,1,14},{0,162,168},{0,143,148},{0,125,129},{0,107,110},{0,88,91},{0,69,70},{0,44,46},{0,1,9},{0,161,157},{0,143,140},{0,125,122},{0,106,103},{0,88,85},{0,69,65},{0,45,42},{0,1,4}, {0,160,147},{0,142,131},{0,125,114},{0,106,97},{0,88,79},{0,69,61},{0,45,38},{0,1,2},{0,160,138},{0,141,122},{0,124,107},{0,105,90},{0,87,73},{0,69,56},{0,45,34},{0,1,0},{0,160,128},{0,141,113},{0,124,98},{0,105,83},{0,87,67},{0,69,50},{0,45,29},{0,1,0},{0,160,118},{0,141,103},{0,124,90},{0,106,76},{0,87,60},{0,68,44},{0,44,23},{0,1,0}, {0,160,107},{0,141,94},{0,124,82},{0,106,68},{0,87,54},{0,68,39},{0,44,18},{0,1,0},{0,159,96},{0,140,84},{0,123,73},{0,105,61},{0,87,48},{0,68,33},{0,44,12},{0,1,0},{0,159,87},{0,140,77},{0,123,66},{0,105,55},{0,87,42},{0,68,28},{0,44,7},{0,1,0},{0,158,78},{0,140,70},{0,122,60},{0,105,50},{0,87,38},{0,68,23},{0,45,3},{0,1,0}, {0,157,224},{0,138,197},{0,120,173},{0,102,148},{0,84,123},{0,64,98},{0,40,69},{0,0,30},{0,156,212},{0,137,188},{0,119,164},{0,102,141},{0,84,117},{0,65,93},{0,41,64},{0,0,26},{0,155,201},{0,137,179},{0,119,156},{0,102,133},{0,84,111},{0,65,88},{0,41,60},{0,0,23},{0,155,192},{0,137,170},{0,119,149},{0,101,126},{0,83,105},{0,65,84},{0,41,56},{0,0,19}, {0,155,182},{0,137,161},{0,119,141},{0,101,120},{0,83,100},{0,65,79},{0,41,52},{0,0,15},{0,154,172},{0,136,152},{0,119,133},{0,101,114},{0,82,94},{0,65,73},{0,41,48},{0,0,11},{0,154,162},{0,135,144},{0,119,126},{0,101,107},{0,82,88},{0,65,68},{0,41,44},{0,0,7},{0,153,152},{0,135,135},{0,118,119},{0,100,100},{0,82,82},{0,64,63},{0,41,40},{0,0,2}, {0,152,143},{0,135,127},{0,118,111},{0,100,94},{0,82,76},{0,64,59},{0,41,36},{0,0,0},{0,152,134},{0,134,119},{0,117,104},{0,99,87},{0,81,70},{0,64,54},{0,41,32},{0,0,0},{0,152,125},{0,134,110},{0,117,96},{0,99,80},{0,81,64},{0,64,48},{0,41,27},{0,0,0},{0,152,115},{0,133,101},{0,117,88},{0,100,74},{0,82,58},{0,64,42},{0,41,21},{0,0,0}, {0,152,104},{0,133,92},{0,117,80},{0,100,66},{0,82,52},{0,64,37},{0,41,16},{0,0,0},{0,151,94},{0,133,82},{0,116,72},{0,99,59},{0,81,46},{0,64,31},{0,41,10},{0,0,0},{0,151,86},{0,133,75},{0,116,65},{0,99,53},{0,81,41},{0,64,26},{0,41,6},{0,0,0},{0,150,78},{0,133,68},{0,116,58},{0,99,48},{0,81,37},{0,64,21},{0,41,2},{0,0,0}, {0,149,218},{0,131,192},{0,115,169},{0,97,144},{0,79,119},{0,60,94},{0,36,66},{0,0,27},{0,148,206},{0,130,183},{0,114,160},{0,97,137},{0,79,113},{0,61,89},{0,37,62},{0,0,23},{0,148,196},{0,130,174},{0,114,151},{0,97,129},{0,79,107},{0,61,84},{0,37,58},{0,0,19},{0,147,187},{0,130,166},{0,113,144},{0,96,122},{0,79,101},{0,61,80},{0,37,54},{0,0,15}, {0,147,178},{0,130,157},{0,113,137},{0,96,116},{0,79,96},{0,61,76},{0,37,50},{0,0,11},{0,147,168},{0,129,148},{0,113,129},{0,96,110},{0,78,90},{0,61,71},{0,37,46},{0,0,7},{0,147,158},{0,129,140},{0,113,122},{0,96,104},{0,78,85},{0,61,66},{0,37,42},{0,0,4},{0,146,148},{0,129,131},{0,112,115},{0,96,97},{0,78,80},{0,60,61},{0,37,38},{0,0,1}, {0,145,139},{0,129,123},{0,112,107},{0,96,91},{0,78,74},{0,60,57},{0,37,34},{0,0,0},{0,145,130},{0,128,115},{0,112,100},{0,95,84},{0,77,68},{0,60,52},{0,37,30},{0,0,0},{0,145,121},{0,128,107},{0,112,93},{0,95,78},{0,77,62},{0,60,46},{0,37,25},{0,0,0},{0,145,111},{0,127,99},{0,111,85},{0,95,72},{0,78,56},{0,60,41},{0,37,20},{0,0,0}, {0,145,101},{0,127,90},{0,111,77},{0,95,64},{0,78,50},{0,60,36},{0,37,15},{0,0,0},{0,144,91},{0,127,80},{0,111,70},{0,94,57},{0,77,44},{0,60,30},{0,37,9},{0,0,0},{0,144,84},{0,127,73},{0,111,63},{0,94,51},{0,77,39},{0,60,25},{0,37,5},{0,0,0},{0,144,77},{0,127,66},{0,111,57},{0,94,47},{0,77,35},{0,60,20},{0,37,2},{0,0,0}, {0,141,211},{0,124,187},{0,109,164},{0,92,139},{0,74,115},{0,56,91},{0,32,63},{0,0,24},{0,140,200},{0,123,178},{0,108,155},{0,92,132},{0,74,110},{0,56,86},{0,33,59},{0,0,20},{0,140,190},{0,123,169},{0,108,146},{0,92,124},{0,74,104},{0,56,81},{0,33,55},{0,0,16},{0,139,182},{0,123,161},{0,107,139},{0,91,118},{0,74,98},{0,57,77},{0,33,51},{0,0,12}, {0,139,173},{0,123,153},{0,107,132},{0,91,113},{0,74,93},{0,57,73},{0,33,47},{0,0,7},{0,139,164},{0,122,144},{0,107,125},{0,91,107},{0,74,87},{0,57,68},{0,34,43},{0,0,4},{0,139,154},{0,122,136},{0,107,118},{0,91,101},{0,74,82},{0,57,63},{0,34,39},{0,0,2},{0,138,144},{0,122,127},{0,106,111},{0,91,94},{0,73,77},{0,56,58},{0,33,35},{0,0,1}, {0,138,135},{0,122,119},{0,106,104},{0,91,88},{0,73,71},{0,56,54},{0,33,31},{0,0,0},{0,138,126},{0,121,112},{0,106,97},{0,90,81},{0,73,65},{0,56,49},{0,33,27},{0,0,0},{0,138,117},{0,121,104},{0,106,90},{0,90,75},{0,73,60},{0,56,44},{0,33,22},{0,0,0},{0,137,107},{0,121,96},{0,105,82},{0,90,69},{0,73,54},{0,56,39},{0,33,18},{0,0,0}, {0,137,98},{0,121,87},{0,105,74},{0,90,62},{0,73,49},{0,56,34},{0,33,13},{0,0,0},{0,136,89},{0,120,78},{0,105,67},{0,89,55},{0,73,43},{0,56,28},{0,33,7},{0,0,0},{0,136,82},{0,120,71},{0,105,61},{0,89,50},{0,73,38},{0,56,23},{0,33,5},{0,0,0},{0,137,75},{0,120,64},{0,105,56},{0,89,45},{0,73,33},{0,56,19},{0,33,2},{0,0,0}, {0,134,204},{0,117,181},{0,102,158},{0,86,134},{0,69,111},{0,52,89},{0,28,61},{0,0,21},{0,133,194},{0,116,172},{0,102,150},{0,86,128},{0,69,106},{0,52,84},{0,29,57},{0,0,17},{0,132,184},{0,116,163},{0,102,142},{0,86,120},{0,69,100},{0,52,79},{0,29,53},{0,0,13},{0,132,176},{0,116,155},{0,101,135},{0,85,114},{0,69,95},{0,52,75},{0,29,49},{0,0,9}, {0,132,167},{0,116,147},{0,101,128},{0,85,109},{0,69,90},{0,52,70},{0,29,45},{0,0,5},{0,132,158},{0,115,140},{0,101,121},{0,85,103},{0,69,85},{0,52,66},{0,29,41},{0,0,2},{0,132,150},{0,115,132},{0,101,114},{0,85,98},{0,69,80},{0,52,61},{0,29,37},{0,0,1},{0,131,140},{0,115,123},{0,100,107},{0,85,91},{0,68,75},{0,52,56},{0,29,33},{0,0,0}, {0,130,132},{0,115,115},{0,100,101},{0,85,85},{0,68,69},{0,52,52},{0,29,29},{0,0,0},{0,130,123},{0,114,108},{0,100,94},{0,84,79},{0,68,63},{0,52,47},{0,29,25},{0,0,0},{0,130,114},{0,114,101},{0,100,88},{0,84,73},{0,68,58},{0,52,42},{0,29,20},{0,0,0},{0,130,105},{0,114,93},{0,99,80},{0,84,67},{0,68,52},{0,51,37},{0,29,16},{0,0,0}, {0,130,96},{0,114,85},{0,99,72},{0,84,60},{0,68,47},{0,51,32},{0,29,11},{0,0,0},{0,129,87},{0,113,76},{0,99,65},{0,84,53},{0,68,41},{0,51,26},{0,29,5},{0,0,0},{0,129,80},{0,113,69},{0,99,59},{0,84,48},{0,68,36},{0,51,21},{0,29,4},{0,0,0},{0,130,73},{0,113,62},{0,99,54},{0,84,43},{0,68,31},{0,52,17},{0,29,2},{0,0,0}, {0,126,198},{0,109,175},{0,96,152},{0,80,129},{0,64,108},{0,47,86},{0,23,58},{0,0,18},{0,125,188},{0,109,166},{0,96,145},{0,80,123},{0,64,103},{0,47,81},{0,24,54},{0,0,14},{0,124,178},{0,109,158},{0,96,137},{0,80,117},{0,64,97},{0,47,76},{0,24,50},{0,0,10},{0,124,170},{0,109,150},{0,95,131},{0,80,111},{0,64,92},{0,47,72},{0,24,46},{0,0,6}, {0,124,162},{0,109,142},{0,95,125},{0,80,106},{0,64,87},{0,47,67},{0,24,43},{0,0,2},{0,124,153},{0,109,135},{0,95,118},{0,80,100},{0,64,82},{0,47,63},{0,24,39},{0,0,1},{0,124,145},{0,109,127},{0,95,111},{0,80,95},{0,64,77},{0,47,58},{0,24,35},{0,0,0},{0,123,137},{0,108,119},{0,94,104},{0,79,88},{0,63,72},{0,47,54},{0,24,31},{0,0,0}, {0,122,129},{0,108,112},{0,94,98},{0,79,82},{0,63,66},{0,47,49},{0,24,27},{0,0,0},{0,122,120},{0,108,105},{0,94,91},{0,79,76},{0,63,61},{0,47,44},{0,24,23},{0,0,0},{0,122,111},{0,108,98},{0,94,85},{0,79,70},{0,63,56},{0,47,40},{0,24,18},{0,0,0},{0,122,102},{0,107,90},{0,93,78},{0,79,64},{0,63,50},{0,46,34},{0,24,13},{0,0,0}, {0,122,94},{0,107,82},{0,93,70},{0,79,58},{0,63,45},{0,46,29},{0,24,8},{0,0,0},{0,121,85},{0,107,74},{0,93,63},{0,79,51},{0,63,39},{0,46,24},{0,24,4},{0,0,0},{0,121,78},{0,107,67},{0,93,57},{0,79,46},{0,63,34},{0,46,19},{0,24,3},{0,0,0},{0,122,71},{0,107,61},{0,93,52},{0,79,41},{0,63,29},{0,47,15},{0,24,2},{0,0,0}, {0,118,191},{0,102,168},{0,89,147},{0,75,125},{0,59,105},{0,42,83},{0,18,56},{0,0,15},{0,117,181},{0,102,161},{0,89,140},{0,75,119},{0,59,99},{0,42,78},{0,18,52},{0,0,11},{0,117,172},{0,102,153},{0,89,133},{0,75,113},{0,59,93},{0,42,73},{0,18,48},{0,0,6},{0,117,165},{0,102,145},{0,89,127},{0,75,108},{0,59,89},{0,42,69},{0,18,44},{0,0,3}, {0,117,157},{0,102,137},{0,89,121},{0,75,103},{0,59,84},{0,42,65},{0,18,41},{0,0,1},{0,116,148},{0,102,130},{0,89,115},{0,75,97},{0,59,79},{0,42,60},{0,18,37},{0,0,0},{0,116,140},{0,102,123},{0,89,108},{0,75,92},{0,59,74},{0,42,55},{0,18,33},{0,0,0},{0,116,133},{0,102,116},{0,88,101},{0,74,86},{0,58,69},{0,42,51},{0,19,30},{0,0,0}, {0,115,125},{0,102,109},{0,88,95},{0,74,80},{0,58,64},{0,42,47},{0,19,26},{0,0,0},{0,115,116},{0,101,102},{0,88,88},{0,74,74},{0,58,60},{0,42,43},{0,19,22},{0,0,0},{0,115,108},{0,101,95},{0,88,82},{0,74,68},{0,58,54},{0,42,39},{0,19,17},{0,0,0},{0,115,99},{0,101,87},{0,88,76},{0,74,62},{0,58,48},{0,42,33},{0,18,11},{0,0,0}, {0,115,91},{0,101,79},{0,88,68},{0,74,56},{0,58,43},{0,42,28},{0,18,7},{0,0,0},{0,114,83},{0,101,72},{0,88,61},{0,74,50},{0,58,38},{0,42,23},{0,19,3},{0,0,0},{0,114,76},{0,101,66},{0,88,55},{0,74,45},{0,58,32},{0,42,17},{0,19,2},{0,0,0},{0,115,70},{0,101,60},{0,87,50},{0,73,40},{0,58,27},{0,42,12},{0,19,1},{0,0,0}, {0,110,185},{0,96,163},{0,83,142},{0,69,121},{0,53,101},{0,36,80},{0,13,54},{0,0,12},{0,109,175},{0,96,156},{0,83,136},{0,69,115},{0,53,95},{0,37,75},{0,13,50},{0,0,8},{0,109,166},{0,96,148},{0,83,129},{0,69,109},{0,53,90},{0,37,71},{0,13,46},{0,0,3},{0,109,159},{0,96,141},{0,83,123},{0,69,104},{0,54,86},{0,38,67},{0,13,42},{0,0,1}, {0,109,152},{0,96,133},{0,83,117},{0,69,99},{0,54,81},{0,38,63},{0,13,39},{0,0,0},{0,109,144},{0,96,126},{0,83,111},{0,69,93},{0,54,76},{0,38,58},{0,13,35},{0,0,0},{0,109,136},{0,96,119},{0,83,104},{0,69,88},{0,54,71},{0,38,53},{0,13,31},{0,0,0},{0,109,129},{0,96,112},{0,82,97},{0,68,83},{0,54,66},{0,38,49},{0,14,28},{0,0,0}, {0,109,121},{0,96,106},{0,82,91},{0,68,77},{0,54,62},{0,38,45},{0,14,24},{0,0,0},{0,108,112},{0,95,99},{0,82,86},{0,68,72},{0,54,58},{0,38,41},{0,14,20},{0,0,0},{0,108,105},{0,95,92},{0,82,80},{0,68,66},{0,54,52},{0,38,37},{0,14,15},{0,0,0},{0,108,97},{0,95,85},{0,82,74},{0,68,60},{0,54,46},{0,38,31},{0,13,9},{0,0,0}, {0,108,89},{0,95,77},{0,82,66},{0,68,54},{0,54,41},{0,38,26},{0,13,6},{0,0,0},{0,108,81},{0,95,70},{0,82,59},{0,68,48},{0,54,36},{0,38,21},{0,14,2},{0,0,0},{0,108,74},{1,95,64},{0,82,53},{0,68,43},{0,54,30},{0,38,15},{0,14,2},{0,0,0},{0,108,68},{2,95,58},{0,81,48},{0,68,38},{0,54,25},{0,38,10},{0,14,1},{0,0,0}, {0,102,179},{0,89,158},{0,76,138},{0,63,117},{0,47,97},{0,31,77},{0,9,51},{0,0,9},{0,102,170},{0,89,151},{0,76,132},{0,63,112},{0,48,92},{0,32,72},{0,9,47},{0,0,5},{0,102,161},{0,89,143},{0,76,125},{0,63,106},{0,48,87},{0,32,68},{0,9,44},{0,0,1},{0,102,154},{0,89,137},{0,77,119},{0,63,101},{0,49,83},{0,33,64},{0,9,40},{0,0,0}, {0,102,147},{0,89,129},{0,77,113},{0,63,96},{0,49,78},{0,33,60},{0,9,37},{0,0,0},{0,102,140},{0,89,122},{0,76,107},{0,63,90},{0,49,74},{0,33,56},{0,10,33},{0,0,0},{0,102,132},{0,89,116},{0,76,101},{0,63,85},{0,49,69},{0,33,52},{0,10,30},{0,0,0},{0,102,125},{0,89,109},{0,77,94},{0,63,80},{0,49,64},{0,33,47},{0,10,26},{0,0,0}, {0,102,117},{0,89,103},{0,77,88},{0,63,74},{0,49,59},{0,33,43},{0,10,22},{0,0,0},{0,101,109},{0,88,96},{0,76,83},{0,63,69},{0,49,55},{0,34,39},{0,10,18},{0,0,0},{0,101,102},{0,88,90},{0,76,77},{0,63,64},{0,49,50},{0,34,35},{0,10,13},{0,0,0},{0,101,96},{0,88,83},{0,76,71},{0,63,58},{0,49,44},{0,34,30},{0,10,8},{0,0,0}, {0,101,88},{0,88,76},{0,76,65},{0,63,53},{0,49,39},{0,34,25},{0,10,5},{0,0,0},{0,101,79},{0,88,69},{0,76,58},{0,62,47},{0,49,34},{0,34,20},{0,10,2},{0,0,0},{0,101,72},{2,88,62},{0,76,52},{0,62,42},{0,49,29},{0,34,14},{0,10,1},{0,0,0},{1,101,66},{5,88,56},{0,76,47},{0,63,37},{0,49,24},{0,34,9},{0,10,0},{0,0,0}, {0,94,173},{0,82,153},{0,70,134},{0,57,114},{0,41,94},{0,25,74},{0,6,48},{0,0,6},{0,94,165},{0,82,146},{0,70,127},{0,57,109},{0,42,89},{0,26,69},{0,6,45},{0,0,3},{0,94,156},{0,82,138},{0,70,120},{0,57,103},{0,42,84},{0,26,66},{0,6,42},{0,0,0},{0,94,149},{0,82,132},{0,70,115},{0,57,98},{0,43,80},{0,27,62},{0,6,38},{0,0,0}, {1,94,142},{0,82,125},{0,70,110},{0,57,93},{0,43,75},{0,27,58},{0,6,34},{0,0,0},{3,94,135},{2,82,119},{0,70,104},{0,57,87},{0,43,71},{0,27,54},{0,7,31},{0,0,0},{5,94,128},{4,82,113},{1,70,98},{0,57,82},{0,43,66},{0,27,49},{0,7,28},{0,0,0},{5,94,121},{4,82,106},{1,71,91},{0,57,77},{0,43,62},{0,28,45},{0,7,24},{0,0,0}, {6,94,114},{4,82,100},{2,71,86},{0,57,72},{0,43,57},{0,28,41},{0,7,19},{0,0,0},{7,93,106},{5,82,93},{3,70,80},{0,57,67},{0,44,53},{0,29,37},{0,7,15},{0,0,0},{8,93,99},{6,82,87},{4,70,74},{1,57,62},{0,44,48},{0,29,33},{0,7,11},{0,0,0},{9,93,93},{7,82,80},{4,70,68},{1,57,56},{0,44,42},{0,29,28},{0,7,7},{0,0,0}, {9,93,85},{8,82,73},{5,70,62},{2,57,51},{0,44,37},{0,29,23},{0,7,4},{0,0,0},{10,93,77},{9,82,67},{6,70,56},{2,57,45},{0,44,32},{0,29,17},{0,7,2},{0,0,0},{10,93,70},{11,82,60},{6,70,51},{2,57,40},{0,44,27},{0,29,12},{0,7,1},{0,0,0},{11,93,64},{13,82,54},{6,70,46},{3,57,35},{0,44,23},{0,29,7},{0,7,0},{0,0,0}, {0,86,167},{0,75,148},{0,63,130},{0,50,111},{0,35,91},{0,18,71},{0,2,46},{0,0,4},{0,86,159},{0,75,141},{0,63,123},{0,50,105},{0,36,86},{0,20,67},{0,3,43},{0,0,1},{0,86,151},{0,75,133},{0,63,116},{0,50,99},{0,36,81},{0,20,64},{0,3,40},{0,0,0},{0,86,144},{0,75,127},{1,63,111},{0,51,94},{0,37,77},{0,21,60},{0,4,36},{0,0,0}, {2,86,137},{1,75,121},{1,63,106},{0,51,89},{0,37,73},{0,21,56},{0,4,32},{0,0,0},{8,86,131},{6,75,115},{1,64,100},{0,51,84},{0,37,69},{0,21,52},{0,4,29},{0,0,0},{12,86,124},{10,75,109},{2,64,94},{0,51,79},{0,37,64},{0,21,47},{0,4,26},{0,0,0},{13,86,117},{10,75,103},{3,64,89},{0,51,75},{0,37,60},{0,22,43},{0,4,22},{0,0,0}, {16,86,111},{11,75,97},{5,64,84},{0,51,70},{0,37,55},{0,22,39},{0,4,17},{0,0,0},{19,86,104},{14,75,90},{8,64,78},{1,51,65},{0,38,51},{0,23,35},{0,4,12},{0,0,0},{22,86,97},{16,75,84},{10,64,72},{2,51,60},{0,38,46},{0,23,31},{0,4,9},{0,0,0},{23,86,90},{19,75,78},{11,64,66},{3,51,54},{0,38,41},{0,24,26},{0,5,6},{0,0,0}, {24,86,83},{22,75,71},{14,64,60},{4,51,49},{0,38,36},{0,24,21},{0,5,3},{0,0,0},{26,86,75},{23,75,65},{16,64,54},{6,51,43},{0,38,30},{0,23,15},{0,4,1},{0,0,0},{27,86,69},{24,75,58},{16,64,49},{6,51,38},{0,38,25},{0,23,10},{0,4,1},{0,0,0},{28,86,63},{24,75,53},{16,64,44},{7,51,34},{0,38,21},{0,23,5},{0,4,0},{0,0,0}, {12,77,162},{8,67,143},{7,55,126},{3,42,107},{0,27,88},{0,11,68},{0,1,43},{0,0,2},{13,77,154},{10,67,136},{8,55,119},{4,43,102},{1,28,83},{0,12,64},{0,1,40},{0,0,1},{14,77,146},{12,67,128},{8,55,113},{5,43,96},{1,29,78},{0,13,61},{0,1,37},{0,0,0},{14,78,140},{12,67,123},{10,55,108},{5,43,91},{2,30,74},{0,13,57},{0,2,33},{0,0,0}, {15,78,133},{13,67,117},{10,55,103},{6,43,86},{2,30,70},{0,14,53},{0,2,29},{0,0,0},{20,78,127},{17,67,111},{11,56,97},{6,44,81},{2,31,66},{0,15,49},{0,2,26},{0,0,0},{24,78,121},{20,67,106},{11,56,91},{6,44,76},{2,31,61},{0,15,44},{0,2,23},{0,0,0},{25,78,114},{21,67,100},{12,56,86},{6,45,72},{2,31,57},{0,16,40},{0,2,19},{0,0,0}, {27,78,108},{22,67,94},{14,56,81},{6,45,68},{2,31,53},{0,16,36},{0,2,14},{0,0,0},{30,78,101},{24,67,87},{16,56,75},{7,45,63},{2,32,48},{0,17,32},{0,2,10},{0,0,0},{32,78,94},{26,67,81},{17,56,69},{8,45,57},{2,32,43},{0,17,28},{0,2,7},{0,0,0},{33,78,87},{28,67,75},{19,56,63},{10,45,51},{2,32,39},{0,17,24},{0,3,5},{0,0,0}, {34,78,80},{30,67,69},{21,56,57},{10,45,46},{2,32,34},{0,17,19},{0,3,3},{0,0,0},{36,78,73},{31,67,62},{23,56,52},{12,45,41},{2,33,29},{0,17,13},{0,2,1},{0,0,0},{37,78,67},{32,67,57},{23,56,47},{12,45,37},{2,33,24},{0,17,9},{0,2,1},{0,0,0},{38,78,61},{32,67,52},{24,56,43},{12,45,33},{2,33,20},{0,17,5},{0,2,0},{0,0,0}, {28,68,156},{19,58,138},{17,47,122},{7,35,103},{0,20,84},{0,5,65},{0,0,40},{0,0,0},{31,68,149},{23,58,131},{19,48,115},{9,36,98},{2,21,80},{0,5,61},{0,0,36},{0,0,0},{33,68,142},{27,58,124},{20,48,109},{11,36,92},{3,22,75},{0,5,57},{0,0,33},{0,0,0},{33,69,136},{28,59,119},{22,48,104},{12,36,88},{4,23,71},{0,6,53},{0,0,29},{0,0,0}, {33,69,129},{28,59,113},{22,48,99},{13,36,83},{4,23,67},{0,7,50},{0,0,26},{0,0,0},{34,70,123},{29,59,107},{23,49,93},{14,37,78},{4,24,62},{0,8,46},{0,0,23},{0,0,0},{36,70,117},{32,59,102},{23,49,88},{15,37,73},{4,24,58},{0,8,42},{0,0,19},{0,0,0},{37,70,110},{33,59,96},{24,49,83},{14,38,69},{4,25,54},{0,9,38},{0,1,15},{0,0,0}, {39,70,104},{34,59,90},{24,49,78},{14,38,65},{4,25,50},{0,9,34},{0,1,11},{0,0,0},{41,70,97},{34,59,85},{25,49,73},{14,38,60},{4,26,46},{0,10,30},{0,1,8},{0,0,0},{41,70,91},{35,59,79},{26,49,67},{15,38,55},{4,26,41},{0,10,26},{0,1,6},{0,0,0},{42,70,85},{36,60,73},{28,49,61},{17,38,49},{5,26,37},{0,10,22},{0,1,4},{0,0,0}, {43,70,78},{36,60,67},{28,49,55},{17,38,44},{5,26,32},{0,10,17},{0,1,2},{0,0,0},{44,70,71},{37,60,60},{29,49,50},{18,39,40},{5,27,27},{0,11,11},{0,1,1},{0,0,0},{45,70,65},{38,60,55},{29,49,45},{18,39,35},{5,27,23},{0,11,8},{0,1,1},{0,0,0},{46,70,59},{39,60,50},{30,49,41},{18,39,31},{6,28,19},{0,11,5},{0,1,0},{0,0,0}, {37,58,151},{30,49,133},{25,38,118},{14,25,100},{5,12,82},{0,2,63},{0,0,38},{0,0,0},{40,58,144},{33,49,127},{27,39,112},{17,26,95},{6,12,78},{1,2,59},{0,0,35},{0,0,0},{41,58,137},{36,49,120},{27,39,106},{18,26,89},{7,13,73},{1,2,56},{0,0,32},{0,0,0},{41,59,131},{36,50,115},{29,39,101},{19,27,85},{8,14,69},{1,3,52},{0,0,28},{0,0,0}, {41,60,125},{36,50,110},{29,39,96},{20,27,80},{8,14,65},{1,3,48},{0,0,25},{0,0,0},{42,61,119},{37,50,104},{30,40,90},{20,28,76},{8,15,60},{1,4,44},{0,0,21},{0,0,0},{44,61,113},{38,50,99},{30,40,85},{20,29,71},{8,15,56},{1,4,40},{0,0,17},{0,0,0},{45,61,107},{38,51,93},{30,41,81},{20,30,67},{9,16,52},{1,4,36},{0,1,13},{0,0,0}, {46,61,101},{39,51,88},{30,41,76},{20,30,63},{9,16,48},{1,4,32},{0,1,10},{0,0,0},{47,61,95},{40,51,83},{31,41,71},{20,30,58},{9,17,44},{1,5,29},{0,1,7},{0,0,0},{47,61,89},{41,51,77},{31,41,66},{21,30,53},{9,17,40},{1,5,25},{0,1,5},{0,0,0},{47,62,83},{41,52,71},{33,41,60},{23,30,48},{10,18,36},{1,5,20},{0,1,3},{0,0,0}, {48,62,76},{41,52,65},{33,41,54},{23,30,43},{10,18,31},{1,5,15},{0,1,2},{0,0,0},{49,62,69},{42,52,59},{34,41,48},{23,31,38},{9,19,26},{1,6,10},{0,1,1},{0,0,0},{49,62,64},{42,52,54},{34,41,44},{23,31,34},{10,19,21},{1,6,7},{0,1,1},{0,0,0},{50,62,58},{43,52,49},{35,41,40},{23,31,30},{11,20,17},{2,6,4},{0,1,0},{0,0,0}, {46,48,146},{41,39,129},{33,29,114},{23,15,97},{10,3,79},{1,0,60},{0,0,36},{0,0,0},{47,48,139},{42,39,123},{34,29,108},{24,16,92},{11,3,75},{2,0,57},{0,0,33},{0,0,0},{48,48,132},{43,39,116},{34,29,102},{25,16,86},{12,3,70},{2,0,54},{0,0,30},{0,0,0},{48,49,127},{43,40,111},{35,30,97},{26,17,82},{13,4,66},{2,0,50},{0,0,26},{0,0,0}, {48,50,121},{43,40,106},{35,30,92},{26,18,77},{13,5,62},{2,0,46},{0,0,23},{0,0,0},{49,51,115},{44,41,100},{35,31,87},{25,19,73},{13,5,58},{2,0,42},{0,0,19},{0,0,0},{50,51,109},{44,41,95},{35,31,82},{25,20,69},{13,5,54},{2,0,38},{0,0,15},{0,0,0},{51,52,103},{43,42,90},{35,32,78},{25,21,65},{14,6,50},{3,0,34},{0,0,11},{0,0,0}, {52,52,97},{44,42,85},{35,32,74},{25,21,61},{14,7,46},{3,0,30},{0,0,8},{0,0,0},{52,52,92},{45,43,80},{36,33,69},{26,22,56},{14,8,42},{3,1,27},{0,0,6},{0,0,0},{52,52,86},{46,43,74},{36,33,64},{27,22,51},{14,8,38},{3,1,23},{0,0,4},{0,0,0},{52,53,80},{45,43,68},{37,34,58},{28,23,46},{15,9,34},{3,1,18},{0,0,2},{0,0,0}, {52,53,73},{45,43,63},{37,34,52},{28,23,41},{15,9,29},{3,1,13},{0,0,1},{0,0,0},{53,53,67},{46,43,57},{38,33,46},{28,23,36},{14,10,24},{3,1,8},{0,0,0},{0,0,0},{53,53,62},{46,43,52},{38,33,42},{28,23,32},{15,10,19},{3,1,5},{0,0,0},{0,0,0},{54,53,57},{47,44,48},{39,34,38},{28,24,28},{16,11,15},{4,2,3},{0,0,0},{0,0,0}}; // START #define PC (16*16*8) #define PM ( 16*8) #define PY ( 8) #define PK ( 1) #define RC (7) #define RM (15) #define RY (15) #define RK (7) static inline double clip01(double x) { return (x < 0) ? 0 : ((x > 1) ? 1 : x); } void old_getRGB(GfxColor *color, GfxRGB *rgb) { double c, m, y, aw, ac, am, ay, ar, ag, ab; c = clip01(color->c[0] + color->c[3]); m = clip01(color->c[1] + color->c[3]); y = clip01(color->c[2] + color->c[3]); aw = (1-c) * (1-m) * (1-y); ac = c * (1-m) * (1-y); am = (1-c) * m * (1-y); ay = (1-c) * (1-m) * y; ar = (1-c) * m * y; ag = c * (1-m) * y; ab = c * m * (1-y); rgb->r = clip01(aw + 0.9137*am + 0.9961*ay + 0.9882*ar); rgb->g = clip01(aw + 0.6196*ac + ay + 0.5176*ag); rgb->b = clip01(aw + 0.7804*ac + 0.5412*am + 0.0667*ar + 0.2118*ag + 0.4863*ab); } int check(float c, float m, float y, float k, float r, float g, float b) { GfxRGB rgb2; memset(&rgb2,0,sizeof(GfxRGB)); GfxColor col; col.c[0] = c; col.c[1] = m; col.c[2] = y; col.c[3] = k; old_getRGB(&col, &rgb2); double dr = r - rgb2.r; double dg = g - rgb2.g; double db = b - rgb2.b; if(sqrt(dr*dr+dg*dg+db*db) > 0.5) { printf("%f %f %f %f -> %02x%02x%02x / %02x%02x%02x\n", c,m,y,k, (int)(r*255),(int)(g*255),(int)(b*255), (int)(rgb2.r*255), (int)(rgb2.g*255), (int)(rgb2.b*255)); return 0; } return 1; } void convert_cmyk2rgb(float c,float m,float y,float k, unsigned char*r, unsigned char*g, unsigned char*b) { c = c<0?0:(c>1?1:c<=1?c:0.5); m = m<0?0:(m>1?1:m<=1?m:0.5); y = y<0?0:(y>1?1:y<=1?y:0.5); k = k<0?0:(k>1?1:k<=1?k:0.5); int cc = (int)(c*7.0); int mm = (int)(m*15.0); int yy = (int)(y*15.0); int kk = (int)(k*7.0); float rc = c*7.0 - cc; float rm = m*15.0 - mm; float ry = y*15.0 - yy; float rk = k*7.0 - kk; int pp = cc*PC + mm*PM + yy*PY + kk*PK; int pc = cc>=RC?pp:pp + PC; int pm = mm>=RM?pp:pp + PM; int py = yy>=RY?pp:pp + PY; int pk = kk>=RK?pp:pp + PK; int rr = (int)((int)cmyk2rgb[pp].r + ((int)cmyk2rgb[pc].r - (int)cmyk2rgb[pp].r)*rc + ((int)cmyk2rgb[pm].r - (int)cmyk2rgb[pp].r)*rm + ((int)cmyk2rgb[py].r - (int)cmyk2rgb[pp].r)*ry + ((int)cmyk2rgb[pk].r - (int)cmyk2rgb[pp].r)*rk); int gg = (int)((int)cmyk2rgb[pp].g + ((int)cmyk2rgb[pc].g - (int)cmyk2rgb[pp].g)*rc + ((int)cmyk2rgb[pm].g - (int)cmyk2rgb[pp].g)*rm + ((int)cmyk2rgb[py].g - (int)cmyk2rgb[pp].g)*ry + ((int)cmyk2rgb[pk].g - (int)cmyk2rgb[pp].g)*rk); int bb = (int)((int)cmyk2rgb[pp].b + ((int)cmyk2rgb[pc].b - (int)cmyk2rgb[pp].b)*rc + ((int)cmyk2rgb[pm].b - (int)cmyk2rgb[pp].b)*rm + ((int)cmyk2rgb[py].b - (int)cmyk2rgb[pp].b)*ry + ((int)cmyk2rgb[pk].b - (int)cmyk2rgb[pp].b)*rk); *r = rr<0?0:(rr>255?255:rr); *g = gg<0?0:(gg>255?255:gg); *b = bb<0?0:(bb>255?255:bb); int t; float r2=0,g2=0,b2=0; for(t=0;t<16;t++) { int p2 = pp; if(t&1) p2+=(pc-pp); if(t&2) p2+=(pm-pp); if(t&4) p2+=(py-pp); if(t&8) p2+=(pk-pp); float rrc = t&1?rc:1-rc; float rrm = t&2?rm:1-rm; float rry = t&4?ry:1-ry; float rrk = t&8?rk:1-rk; float f = rrc*rrm*rry*rrk; r2 += cmyk2rgb[p2].r*f; g2 += cmyk2rgb[p2].g*f; b2 += cmyk2rgb[p2].b*f; } if(r2<0)r2=0; if(r2>255)r2=255; if(g2<0)g2=0; if(g2>255)g2=255; if(b2<0)b2=0; if(b2>255)b2=255; *r = (unsigned char)r2; *g = (unsigned char)g2; *b = (unsigned char)b2; /*f(!check(c,m,y,k, *r/255.0, *g/255.0, *b/255.0)) { for(t=0;t<16;t++) { int p2 = pp; if(t&1) p2+=(pc-pp); if(t&2) p2+=(pm-pp); if(t&4) p2+=(py-pp); if(t&8) p2+=(pk-pp); float rrc = t&1?rc:1-rc; float rrm = t&2?rm:1-rm; float rry = t&4?ry:1-ry; float rrk = t&8?rk:1-rk; float f = rrc*rrm*rry*rrk; //printf("%d%d%d%d %f %02x%02x%02x\n", !!(t&8),!!(t&4),!!(t&2),!!(t&1), f, cmyk2rgb[p2].r, cmyk2rgb[p2].g, cmyk2rgb[p2].b); } }*/ } // END swftools_0.9.2+git20130725.orig/lib/pdf/VectorGraphicOutputDev.cc0000644000175000017500000015543712216332640023610 0ustar gawaingawain/* VectorGraphicOutputDev.cc implements a pdf output device (OutputDev). This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include "../../config.h" //xpdf header files #include "popplercompat.h" #include "VectorGraphicOutputDev.h" // swftools header files #include "../os.h" #include "../log.h" #include "../mem.h" #include "../utf8.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../gfxpoly.h" #include "../devices/record.h" #include "../devices/ops.h" #include "../devices/polyops.h" #include "../devices/render.h" #include "../png.h" /* config */ static int verbose = 0; static int dbgindent = 1; static void dbg(const char*format, ...) { char buf[1024]; int l; va_list arglist; if(!verbose) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } printf("(pdf) "); int indent = dbgindent; while(indent) { printf(" "); indent--; } printf("%s\n", buf); fflush(stdout); } GFXOutputState::GFXOutputState() { this->clipping = 0; this->createsoftmask = 0; this->transparencygroup = 0; this->softmask = 0; this->grouprecording = 0; this->isolated = 0; } VectorGraphicOutputDev::VectorGraphicOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2) :CommonOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2) { this->type3active = 0; this->statepos = 0; this->xref = 0; this->current_gfxfont = 0; this->current_fontinfo = 0; this->current_text_stroke = 0; this->current_text_clip = 0; this->outer_clip_box = 0; this->config_convertgradients=1; this->config_transparent=0; this->config_disable_polygon_conversion = 0; this->config_multiply = 1; this->config_textonly = 0; /* for processing drawChar events */ this->charDev = new CharOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2); memset(&this->char_output_dev, 0, sizeof(gfxdevice_t)); this->char_output_dev.internal = this; this->char_output_dev.drawchar = drawchar_callback; this->char_output_dev.addfont = addfont_callback; memset(states, 0, sizeof(states)); }; void VectorGraphicOutputDev::setParameter(const char*key, const char*value) { if(!strcmp(key,"transparent")) { this->config_transparent = atoi(value); } else if(!strcmp(key,"convertgradients")) { this->config_convertgradients = atoi(value); } else if(!strcmp(key,"textonly")) { this->config_textonly = atoi(value); } else if(!strcmp(key,"multiply")) { this->config_multiply = atoi(value); if(this->config_multiply<1) this->config_multiply=1; } else if(!strcmp(key,"disable_polygon_conversion")) { this->config_disable_polygon_conversion = atoi(value); } else if(!strcmp(key,"disable_tiling_pattern_fills")) { this->config_disable_tiling_pattern_fills = atoi(value); } this->charDev->setParameter(key, value); } void VectorGraphicOutputDev::setDevice(gfxdevice_t*dev) { this->device = dev; charDev->setDevice(dev); } //void VectorGraphicOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) {printf("void VectorGraphicOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) \n");} //void VectorGraphicOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, GBool inlineImg) {printf("void VectorGraphicOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, GBool inlineImg) \n");} void dump_outline(gfxline_t*line) { /*gfxbbox_t*r = gfxline_isrectangle(line); if(!r) printf("is not a rectangle\n"); else printf("is a rectangle: (%f,%f)-(%f-%f)\n", r->xmin, r->ymin, r->xmax, r->ymax); */ while(line) { if(line->type == gfx_moveTo) { msg(" | moveTo %.2f %.2f", line->x,line->y); } else if(line->type == gfx_lineTo) { msg(" | lineTo %.2f %.2f", line->x,line->y); } else if(line->type == gfx_splineTo) { msg(" | splineTo (%.2f %.2f) %.2f %.2f", line->sx,line->sy, line->x, line->y); } line = line->next; } } void gfxPath_dump(GfxPath*path) { int num = path->getNumSubpaths(); int t; int cpos=0; for(t = 0; t < num; t++) { GfxSubpath *subpath = path->getSubpath(t); int subnum = subpath->getNumPoints(); int s; for(s=0;sgetX(s); double y=subpath->getY(s); if(s==0 && !subpath->getCurve(s)) { printf("M %f %f\n", x, y); } else if(s==0 && subpath->getCurve(s)) { printf("E %f %f\n", x, y); } else if(subpath->getCurve(s)) { printf("C %f %f\n", x, y); } else { printf("T %f %f\n", x, y); } } } } gfxline_t* VectorGraphicOutputDev::gfxPath_to_gfxline(GfxState*state, GfxPath*path, int closed) { int num = path->getNumSubpaths(); int s,t; int cpos = 0; double lastx=0,lasty=0,posx=0,posy=0; int needsfix=0; if(!num) { msg(" empty path"); return 0; } gfxdrawer_t draw; gfxdrawer_target_gfxline(&draw); for(t = 0; t < num; t++) { GfxSubpath *subpath = path->getSubpath(t); int subnum = subpath->getNumPoints(); double bx=0,by=0,cx=0,cy=0; for(s=0;stransformXY(state, subpath->getX(s),subpath->getY(s),&x,&y); if(s==0) { if(closed && needsfix && (fabs(posx-lastx)+fabs(posy-lasty))>0.001) { draw.lineTo(&draw, lastx, lasty); } draw.moveTo(&draw, x,y); posx = lastx = x; posy = lasty = y; cpos = 0; needsfix = 0; } else if(subpath->getCurve(s) && cpos==0) { bx = x; by = y; cpos = 1; } else if(subpath->getCurve(s) && cpos==1) { cx = x; cy = y; cpos = 2; } else { posx = x; posy = y; if(cpos==0) { draw.lineTo(&draw, x,y); } else { gfxdraw_cubicTo(&draw, bx,by, cx,cy, x,y, 0.05); } needsfix = 1; cpos = 0; } } } /* fix non-closed lines */ if(closed && needsfix && (fabs(posx-lastx)+fabs(posy-lasty))>0.001) { draw.lineTo(&draw, lastx, lasty); } gfxline_t*result = (gfxline_t*)draw.result(&draw); gfxline_optimize(result); return result; } GBool VectorGraphicOutputDev::useTilingPatternFill() { infofeature("tiled patterns"); // if(config_convertgradients) // return gTrue; if(config_disable_tiling_pattern_fills) return gTrue; return gFalse; } GBool VectorGraphicOutputDev::useShadedFills() { infofeature("shaded fills"); if(config_convertgradients) return gTrue; return gFalse; } POPPLER_TILING_PATERN_RETURN VectorGraphicOutputDev::tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep) { msg(" tilingPatternFill"); infofeature("tiling pattern fills"); #ifdef HAVE_POPPLER // since we don't implement this method yet, // reduce it to a series of other drawing operations. return gFalse; #endif } GBool VectorGraphicOutputDev::functionShadedFill(GfxState *state, GfxFunctionShading *shading) { msg(" functionShadedFill not supported yet"); infofeature("function shaded fills"); return gFalse; } static gfxcolor_t col2col(GfxColorSpace*colspace, GfxColor* col) { gfxcolor_t c; GfxRGB rgb; colspace->getRGB(col, &rgb); c.r = colToByte(rgb.r); c.g = colToByte(rgb.g); c.b = colToByte(rgb.b); c.a = 255; return c; } GBool VectorGraphicOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading) { if(config_textonly) {return gTrue;} double x0,y0,r0,x1,y1,x2,y2,x9,y9,r1; shading->getCoords(&x0,&y0,&r0,&x9,&y9,&r1); x1=x0+r1;y1=y0; x2=x0; y2=y0+r1; this->transformXY(state, x0,y0, &x0,&y0); this->transformXY(state, x1,y1, &x1,&y1); this->transformXY(state, x2,y2, &x2,&y2); GfxColor color0; GfxColor color1; GfxColor color2; shading->getColor(0.0, &color0); shading->getColor(0.5, &color1); shading->getColor(1.0, &color2); GfxColorSpace* colspace = shading->getColorSpace(); msg(" radialShadedFill %f %f %f %f %f %f %02x%02x%02x->%02x%02x%02x", x0, y0, x1, y1, x2, y2, colToByte(color0.c[0]), colToByte(color0.c[1]), colToByte(color0.c[2]), colToByte(color1.c[0]), colToByte(color1.c[1]), colToByte(color1.c[2]), colToByte(color2.c[0]), colToByte(color2.c[1]), colToByte(color2.c[2])); infofeature("radial shaded fills"); gfxgradient_t gr[3]; gfxgradient_t*g = &gr[0]; g[0].next = &g[1]; g[1].next = &g[2]; g[2].next = 0; g[0].color = col2col(colspace, &color0); g[1].color = col2col(colspace, &color1); g[2].color = col2col(colspace, &color2); g[0].pos = 0.0; g[1].pos = 0.5; g[2].pos = 1.0; gfxbbox_t b = states[statepos].clipbbox; gfxline_t p1,p2,p3,p4,p5; p1.type=gfx_moveTo;p1.x=b.xmin; p1.y=b.ymin; p1.next=&p2; p2.type=gfx_lineTo;p2.x=b.xmin; p2.y=b.ymax; p2.next=&p3; p3.type=gfx_lineTo;p3.x=b.xmax; p3.y=b.ymax; p3.next=&p4; p4.type=gfx_lineTo;p4.x=b.xmax; p4.y=b.ymin; p4.next=&p5; p5.type=gfx_lineTo;p5.x=b.xmin; p5.y=b.ymin; p5.next=0; gfxmatrix_t m; //m.m00 = (x3-x0); m.m10 = (x1-x0); //m.m01 = (y3-y0); m.m11 = (y1-y0); //x3/y3 specifies another (the ending) circle, not the second radius of an ellipse m.m00 = (x1-x0); m.m10 = (x2-x0); m.m01 = (y1-y0); m.m11 = (y2-y0); m.tx = x0 - 0.5; m.ty = y0 - 0.5; device->fillgradient(device, &p1, g, gfxgradient_radial, &m); return gTrue; } GBool VectorGraphicOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading) { if(config_textonly) {return gTrue;} double x0,y0,x1,y1; shading->getCoords(&x0,&y0,&x1,&y1); this->transformXY(state, x0,y0,&x0,&y0); this->transformXY(state, x1,y1,&x1,&y1); GfxColor color0; GfxColor color1; GfxColor color2; shading->getColor(0.0, &color0); shading->getColor(0.5, &color1); shading->getColor(1.0, &color2); GfxColorSpace* colspace = shading->getColorSpace(); msg(" axialShadedFill %f %f %f %f %02x%02x%02x->%02x%02x%02x->%02x%02x%02x", x0, y0, x1, y1, colToByte(color0.c[0]), colToByte(color0.c[1]), colToByte(color0.c[2]), colToByte(color1.c[0]), colToByte(color1.c[1]), colToByte(color1.c[2]), colToByte(color2.c[0]), colToByte(color2.c[1]), colToByte(color2.c[2]) ); infofeature("axial shaded fills"); gfxgradient_t*g = (gfxgradient_t*)malloc(sizeof(gfxgradient_t)*3); g[0].next = &g[1]; g[1].next = &g[2]; g[2].next = 0; g[0].color = col2col(colspace, &color0); g[1].color = col2col(colspace, &color1); g[2].color = col2col(colspace, &color2); g[0].pos = 0.0; g[1].pos = 0.5; g[2].pos = 1.0; double xMin,yMin,xMax,yMax; state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); this->transformXY(state, xMin, yMin, &xMin, &yMin); msg(" userClipBox %f %f %f %f", xMin, yMin, xMax, yMax); xMin = 0; yMin = 0; xMin = 1024; yMin = 1024; gfxbbox_t b = states[statepos].clipbbox; gfxline_t p1,p2,p3,p4,p5; p1.type=gfx_moveTo;p1.x=b.xmin; p1.y=b.ymin; p1.next=&p2; p2.type=gfx_lineTo;p2.x=b.xmin; p2.y=b.ymax; p2.next=&p3; p3.type=gfx_lineTo;p3.x=b.xmax; p3.y=b.ymax; p3.next=&p4; p4.type=gfx_lineTo;p4.x=b.xmax; p4.y=b.ymin; p4.next=&p5; p5.type=gfx_lineTo;p5.x=b.xmin; p5.y=b.ymin; p5.next=0; /* the gradient starts at (-1.0,0.0), so move (0,0) to the middle of the two control points */ gfxmatrix_t m; m.m00 = (x1-x0)/2; m.m10 = -(y1-y0)/2; m.m01 = (y1-y0)/2; m.m11 = (x1-x0)/2; m.tx = (x0 + x1)/2 - 0.5; m.ty = (y0 + y1)/2 - 0.5; device->fillgradient(device, &p1, g, gfxgradient_linear, &m); free(g); return gTrue; } GBool VectorGraphicOutputDev::useDrawForm() { infofeature("forms"); return gFalse; } void VectorGraphicOutputDev::drawForm(Ref id) { msg(" drawForm not implemented"); } GBool VectorGraphicOutputDev::needNonText() { return gTrue; } void VectorGraphicOutputDev::endPage() { msg(" endPage (VectorGraphicOutputDev)"); charDev->endPage(); // link postprocessing if(outer_clip_box) { device->endclip(device); outer_clip_box = 0; } } void VectorGraphicOutputDev::setDefaultCTM(double *ctm) { charDev->setDefaultCTM(ctm); OutputDev::setDefaultCTM(ctm); } static inline double sqr(double x) {return x*x;} #define STROKE_FILL 1 #define STROKE_CLIP 2 void VectorGraphicOutputDev::strokeGfxline(GfxState *state, gfxline_t*line, int flags) { int lineCap = state->getLineCap(); // 0=butt, 1=round 2=square int lineJoin = state->getLineJoin(); // 0=miter, 1=round 2=bevel double miterLimit = state->getMiterLimit(); double width = state->getTransformedLineWidth(); GfxRGB rgb; double opaq = state->getStrokeOpacity(); if(type3active) state->getFillRGB(&rgb); else state->getStrokeRGB(&rgb); gfxcolor_t col; col.r = colToByte(rgb.r); col.g = colToByte(rgb.g); col.b = colToByte(rgb.b); col.a = (unsigned char)(opaq*255); gfx_capType capType = gfx_capRound; if(lineCap == 0) capType = gfx_capButt; else if(lineCap == 1) capType = gfx_capRound; else if(lineCap == 2) capType = gfx_capSquare; else msg(" Invalid line cap type"); gfx_joinType joinType = gfx_joinRound; if(lineJoin == 0) joinType = gfx_joinMiter; else if(lineJoin == 1) joinType = gfx_joinRound; else if(lineJoin == 2) joinType = gfx_joinBevel; else msg(" Invalid line join type"); gfxline_t*line2 = 0; int dashLength = states[statepos].dashLength; double*dashPattern = states[statepos].dashPattern; double dashStart = states[statepos].dashStart; if(dashLength && dashPattern) { float * dash = (float*)malloc(sizeof(float)*(dashLength+1)); int t; /* try to find out how much the transformation matrix would stretch the dashes, and factor that into the dash lengths. This is not the entirely correct approach- it would be better to first convert the path to an unscaled version, then apply dashing, and then transform the path using the current transformation matrix. However there are few PDFs which actually stretch a dashed path in a non-orthonormal way */ double tx1, ty1, tx2, ty2, tx3, ty3; this->transformXY(state, 0, 0, &tx1, &ty1); this->transformXY(state, 0, 1, &tx2, &ty2); this->transformXY(state, 1, 0, &tx3, &ty3); double d1 = sqrt(sqr(tx2-tx1)+sqr(ty2-ty1)); double d2 = sqrt(sqr(tx3-tx1)+sqr(ty3-ty1)); if(fabs(d1-d2)>0.5) warnfeature("non-ortogonally dashed strokes", 0); double f = (d1+d2)/2; if(!dashStart && dashLength==1 && !dashPattern[0]) { // zero phase and zero dashlength make the line invisible return; } msg(" %d dashes", dashLength); msg(" | phase: %f", dashStart); for(t=0;t | d%-3d: %f", t, dashPattern[t]); } dash[dashLength] = -1; if(getLogLevel() >= LOGLEVEL_TRACE) { dump_outline(line); } line2 = gfxtool_dash_line(line, dash, (float)(dashStart*f)); line = line2; free(dash); msg(" After dashing:"); } if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" stroke width=%f join=%s cap=%s dashes=%d color=%02x%02x%02x%02x", width, lineJoin==0?"miter": (lineJoin==1?"round":"bevel"), lineCap==0?"butt": (lineCap==1?"round":"square"), dashLength, col.r,col.g,col.b,col.a ); dump_outline(line); } if(flags&STROKE_FILL) { gfxpoly_t* poly = gfxpoly_from_stroke(line, width, capType, joinType, miterLimit, DEFAULT_GRID); gfxline_t*gfxline = gfxline_from_gfxpoly(poly); if(getLogLevel() >= LOGLEVEL_TRACE) { dump_outline(gfxline); } if(!gfxline) { msg(" Empty polygon (resulting from stroked line)"); } if(flags&STROKE_CLIP) { device->startclip(device, gfxline); states[statepos].clipping++; } else { device->fill(device, gfxline, &col); } gfxline_free(gfxline); gfxpoly_destroy(poly); } else { if(flags&STROKE_CLIP) msg(" Stroke&clip not supported at the same time"); device->stroke(device, line, width, &col, capType, joinType, miterLimit); } if(line2) gfxline_free(line2); } void VectorGraphicOutputDev::fillGfxLine(GfxState *state, gfxline_t*line, char evenodd) { gfxcolor_t col = gfxstate_getfillcolor(state); if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" %sfill %02x%02x%02x%02x", evenodd?"eo":"", col.r, col.g, col.b, col.a); dump_outline(line); } device->fill(device, line, &col); } void VectorGraphicOutputDev::clipToGfxLine(GfxState *state, gfxline_t*line, char evenodd) { if(getLogLevel() >= LOGLEVEL_TRACE) { msg(" %sclip", evenodd?"eo":""); dump_outline(line); } gfxbbox_t bbox = gfxline_getbbox(line); gfxbbox_intersect(&states[statepos].clipbbox, &bbox); device->startclip(device, line); states[statepos].clipping++; } void VectorGraphicOutputDev::clip(GfxState *state) { GfxPath * path = state->getPath(); msg(" clip"); gfxline_t*line = gfxPath_to_gfxline(state, path, 1); if(!config_disable_polygon_conversion) { gfxline_t*line2 = gfxpoly_circular_to_evenodd(line, DEFAULT_GRID); gfxline_free(line); line = line2; } clipToGfxLine(state, line, 0); gfxline_free(line); } void VectorGraphicOutputDev::eoClip(GfxState *state) { GfxPath * path = state->getPath(); gfxline_t*line = gfxPath_to_gfxline(state, path, 1); clipToGfxLine(state, line, 1); gfxline_free(line); } void VectorGraphicOutputDev::clipToStrokePath(GfxState *state) { GfxPath * path = state->getPath(); gfxline_t*line= gfxPath_to_gfxline(state, path, 0); if(getLogLevel() >= LOGLEVEL_TRACE) { double width = state->getTransformedLineWidth(); msg(" cliptostrokepath width=%f", width); dump_outline(line); } strokeGfxline(state, line, STROKE_FILL|STROKE_CLIP); gfxline_free(line); } void VectorGraphicOutputDev::finish() { if(outer_clip_box) { if(device) { device->endclip(device); } outer_clip_box = 0; } } VectorGraphicOutputDev::~VectorGraphicOutputDev() { finish(); delete charDev;charDev=0; }; GBool VectorGraphicOutputDev::upsideDown() { return gTrue; }; GBool VectorGraphicOutputDev::useDrawChar() { return gTrue; } void VectorGraphicOutputDev::updateFontMatrix(GfxState*state) { this->current_font_matrix = gfxmatrix_from_state(state); charDev->updateTextMat(state); } void VectorGraphicOutputDev::updateFont(GfxState*state) { charDev->updateFont(state); } void VectorGraphicOutputDev::processLink(Link *link, Catalog *catalog) { charDev->processLink(link, catalog); } void VectorGraphicOutputDev::beginString(GfxState *state, GString *s) { int render = state->getRender(); if(current_text_stroke) { msg(" Error: Incompatible change of text rendering to %d while inside cliptext", render); } charDev->beginString(state, s); } static gfxline_t* mkEmptyGfxShape(double x, double y) { gfxline_t*line = (gfxline_t*)malloc(sizeof(gfxline_t)); line->x = x;line->y = y;line->type = gfx_moveTo;line->next = 0; return line; } void addfont_callback(gfxdevice_t*dev, gfxfont_t*font) { VectorGraphicOutputDev*self = (VectorGraphicOutputDev*)dev->internal; self->device->addfont(self->device, font); } void drawchar_callback(gfxdevice_t*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix) { VectorGraphicOutputDev*self = (VectorGraphicOutputDev*)dev->internal; self->gfxfont_from_callback = font; self->glyphnr_from_callback = glyph; memcpy(&self->textcolor_from_callback, color, sizeof(gfxcolor_t)); memcpy(&self->textmatrix_from_callback, matrix, sizeof(gfxmatrix_t)); } void VectorGraphicOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode charid, int nBytes, Unicode *_u, int uLen) { int render = state->getRender(); if(((render == RENDER_FILL) || (render == RENDER_FILLSTROKE && state->getTransformedLineWidth()<1.0) || (render == RENDER_INVISIBLE))) { charDev->drawChar(state, x, y, dx, dy, originX, originY, charid, nBytes, _u, uLen); return; } msg(" Drawing glyph %d as shape", charid); infofeature("text rendered as shape"); charDev->setDevice(&char_output_dev); this->gfxfont_from_callback = 0; this->glyphnr_from_callback = 0; charDev->drawChar(state, x, y, dx, dy, originX, originY, charid, nBytes, _u, uLen); charDev->setDevice(device); if(!gfxfont_from_callback) { // some chars are ignored by CharOutputDev return; } gfxline_t*glyph = gfxfont_from_callback->glyphs[glyphnr_from_callback].line; gfxline_t*tglyph = gfxline_clone(glyph); gfxline_transform(tglyph, &textmatrix_from_callback); if((render&3) != RENDER_INVISIBLE) { gfxline_t*add = gfxline_clone(tglyph); current_text_stroke = gfxline_append(current_text_stroke, add); } if(render&RENDER_CLIP) { gfxline_t*add = gfxline_clone(tglyph); current_text_clip = gfxline_append(current_text_clip, add); if(!current_text_clip) { current_text_clip = mkEmptyGfxShape(textmatrix_from_callback.tx, textmatrix_from_callback.ty); } } gfxline_free(tglyph); } void VectorGraphicOutputDev::endString(GfxState *state) { int render = state->getRender(); msg(" endString() render=%d textstroke=%p", render, current_text_stroke); if(current_text_stroke) { /* fillstroke and stroke text rendering objects we can process right now (as there may be texts of other rendering modes in this text object)- clipping objects have to wait until endTextObject, however */ device->setparameter(device, "mark","TXT"); if((render&3) == RENDER_FILL) { fillGfxLine(state, current_text_stroke, 0); gfxline_free(current_text_stroke); current_text_stroke = 0; } else if((render&3) == RENDER_FILLSTROKE) { fillGfxLine(state, current_text_stroke, 0); strokeGfxline(state, current_text_stroke,0); gfxline_free(current_text_stroke); current_text_stroke = 0; } else if((render&3) == RENDER_STROKE) { strokeGfxline(state, current_text_stroke,0); gfxline_free(current_text_stroke); current_text_stroke = 0; } device->setparameter(device, "mark",""); } } void VectorGraphicOutputDev::endTextObject(GfxState *state) { int render = state->getRender(); msg(" endTextObject() render=%d textstroke=%p clipstroke=%p", render, current_text_stroke, current_text_clip); if(current_text_clip) { device->setparameter(device, "mark","TXT"); clipToGfxLine(state, current_text_clip, 0); device->setparameter(device, "mark",""); gfxline_free(current_text_clip); current_text_clip = 0; } } /* the logic seems to be as following: first, beginType3Char is called, with the charcode and the coordinates. if this function returns true, it already knew about the char and has now drawn it. if the function returns false, it's a new char, and type3D0 and/or type3D1 might be called with some parameters. Afterwards, all draw operations until endType3Char are part of the char (which in this moment is at the position first passed to beginType3Char). the char ends with endType3Char. The drawing operations between beginType3Char and endType3Char are somewhat different to the normal ones. For example, the fillcolor equals the stroke color. (Because the stroke color determines the color of a font) */ GBool VectorGraphicOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode charid, Unicode *u, int uLen) { return charDev->beginType3Char(state, x, y, dx, dy, charid, u, uLen); } void VectorGraphicOutputDev::type3D0(GfxState *state, double wx, double wy) { charDev->type3D0(state, wx, wy); } void VectorGraphicOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { charDev->type3D1(state, wx, wy, llx, lly, urx, ury); } void VectorGraphicOutputDev::endType3Char(GfxState *state) { charDev->endType3Char(state); } GBool VectorGraphicOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data), void *abortCheckCbkData) { this->setPage(page); charDev->setPage(page); return gTrue; } void VectorGraphicOutputDev::beginPage(GfxState *state, int pageNum) { this->currentpage = pageNum; int rot = doc->getPageRotate(1); gfxcolor_t white = {255,255,255,255}; gfxcolor_t black = {255,0,0,0}; laststate = state; gfxline_t clippath[5]; msg(" processing PDF page %d (%dx%d:%d:%d)", pageNum, this->width, this->height, -this->movex, -this->movey); if(rot!=0) msg(" page is rotated %d degrees", rot); clippath[0].type = gfx_moveTo;clippath[0].x = 0; clippath[0].y = 0; clippath[0].next = &clippath[1]; clippath[1].type = gfx_lineTo;clippath[1].x = width; clippath[1].y = 0; clippath[1].next = &clippath[2]; clippath[2].type = gfx_lineTo;clippath[2].x = width; clippath[2].y = height; clippath[2].next = &clippath[3]; clippath[3].type = gfx_lineTo;clippath[3].x = 0; clippath[3].y = height; clippath[3].next = &clippath[4]; clippath[4].type = gfx_lineTo;clippath[4].x = 0; clippath[4].y = 0; clippath[4].next = 0; device->startclip(device, clippath); outer_clip_box = 1; if(!config_transparent) { device->fill(device, clippath, &white); } states[statepos].clipbbox.xmin = 0; states[statepos].clipbbox.ymin = 0; states[statepos].clipbbox.xmax = this->width; states[statepos].clipbbox.ymax = this->height; states[statepos].dashPattern = 0; states[statepos].dashLength = 0; states[statepos].dashStart = 0; charDev->startPage(pageNum, state); } void VectorGraphicOutputDev::saveState(GfxState *state) { dbg("saveState %p", state); dbgindent+=2; msg(" saveState %p", state); updateAll(state); if(statepos>=64) { msg(" Too many nested states in pdf."); exit(1); } statepos ++; states[statepos].state = state; states[statepos].createsoftmask = states[statepos-1].createsoftmask; states[statepos].transparencygroup = states[statepos-1].transparencygroup; states[statepos].clipping = 0; states[statepos].olddevice = 0; states[statepos].clipbbox = states[statepos-1].clipbbox; states[statepos].dashPattern = states[statepos-1].dashPattern; states[statepos].dashStart = states[statepos-1].dashStart; states[statepos].dashLength = states[statepos-1].dashLength; }; void VectorGraphicOutputDev::restoreState(GfxState *state) { dbgindent-=2; dbg("restoreState %p", state); if(statepos==0) { msg(" Invalid restoreState"); exit(1); } msg(" restoreState %p%s%s", state, states[statepos].softmask?" (end softmask)":"", states[statepos].clipping?" (end clipping)":""); if(states[statepos].softmask) { clearSoftMask(state); } if(states[statepos].dashPattern) { if(!statepos || states[statepos-1].dashPattern != states[statepos].dashPattern) { free(states[statepos].dashPattern); states[statepos].dashPattern = 0; } } updateAll(state); while(states[statepos].clipping) { device->endclip(device); states[statepos].clipping--; } if(states[statepos].state!=state) { msg(" bad state nesting"); if(verbose) { int t; for(t=0;t<=statepos;t++) { printf("%p ", states[t].state); } printf("\n"); } exit(1); } states[statepos].state=0; statepos--; } void VectorGraphicOutputDev::updateLineDash(GfxState *state) { if(states[statepos].dashPattern && (!statepos || states[statepos-1].dashPattern != states[statepos].dashPattern)) { free(states[statepos].dashPattern); states[statepos].dashPattern = 0; } double *pattern = 0; int dashLength; double dashStart; state->getLineDash(&pattern, &dashLength, &dashStart); msg(" updateLineDash, %d dashes", dashLength); if(!dashLength) { states[statepos].dashPattern = 0; states[statepos].dashLength = 0; } else { double*p = (double*)malloc(dashLength*sizeof(states[statepos].dashPattern[0])); memcpy(p, pattern, dashLength*sizeof(states[statepos].dashPattern[0])); states[statepos].dashPattern = p; states[statepos].dashLength = dashLength; states[statepos].dashStart = dashStart; } } #define SQR(x) ((x)*(x)) unsigned char* antialize(unsigned char*data, int width, int height, int newwidth, int newheight, int palettesize) { if((newwidth<1 || newheight<1) || (width<=newwidth || height<=newheight)) return 0; unsigned char*newdata; int x,y; newdata= (unsigned char*)malloc(newwidth*newheight); double fx = ((double)width)/newwidth; double fy = ((double)height)/newheight; double px = 0; int blocksize = (int)(8192/(fx*fy)); int r = 8192*256/palettesize; for(x=0;x=width) tox = width-1; if(toy>=height) toy = height-1; for(xx=fromx;xx<=tox;xx++) for(yy=fromy;yy<=toy;yy++) { int b = 1-data[width*yy+xx]; int weight=256; if(xx==fromx) weight = (weight*xweight1)/256; if(xx==tox) weight = (weight*xweight2)/256; if(yy==fromy) weight = (weight*yweight1)/256; if(yy==toy) weight = (weight*yweight2)/256; a+=b*weight; } //if(a) a=(palettesize-1)*r/blocksize; newdata[y*newwidth+x] = (a*blocksize)/r; py = ey; } px = ex; } return newdata; } #define IMAGE_TYPE_JPEG 0 #define IMAGE_TYPE_LOSSLESS 1 static void drawimage(gfxdevice_t*dev, gfxcolor_t* data, int sizex,int sizey, double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4, int type, int multiply) { gfxcolor_t*newpic=0; double l1 = sqrt((x4-x1)*(x4-x1) + (y4-y1)*(y4-y1)); double l2 = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)); gfxline_t p1,p2,p3,p4,p5; p1.type=gfx_moveTo;p1.x=x1; p1.y=y1;p1.next=&p2; p2.type=gfx_lineTo;p2.x=x2; p2.y=y2;p2.next=&p3; p3.type=gfx_lineTo;p3.x=x3; p3.y=y3;p3.next=&p4; p4.type=gfx_lineTo;p4.x=x4; p4.y=y4;p4.next=&p5; p5.type=gfx_lineTo;p5.x=x1; p5.y=y1;p5.next=0; {p1.x = (int)(p1.x*20)/20.0; p1.y = (int)(p1.y*20)/20.0; p2.x = (int)(p2.x*20)/20.0; p2.y = (int)(p2.y*20)/20.0; p3.x = (int)(p3.x*20)/20.0; p3.y = (int)(p3.y*20)/20.0; p4.x = (int)(p4.x*20)/20.0; p4.y = (int)(p4.y*20)/20.0; p5.x = (int)(p5.x*20)/20.0; p5.y = (int)(p5.y*20)/20.0; } gfxmatrix_t m; m.m00 = (p4.x-p1.x)/sizex; m.m10 = (p2.x-p1.x)/sizey; m.m01 = (p4.y-p1.y)/sizex; m.m11 = (p2.y-p1.y)/sizey; m.tx = p1.x - 0.5*multiply; m.ty = p1.y - 0.5*multiply; gfximage_t img; img.data = (gfxcolor_t*)data; img.width = sizex; img.height = sizey; if(type == IMAGE_TYPE_JPEG) /* TODO: pass image_dpi to device instead */ dev->setparameter(dev, "next_bitmap_is_jpeg", "1"); dump_outline(&p1); dev->fillbitmap(dev, &p1, &img, &m, 0); } void drawimagejpeg(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey, double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4, int multiply) { drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_JPEG, multiply); } void drawimagelossless(gfxdevice_t*dev, gfxcolor_t*mem, int sizex,int sizey, double x1,double y1, double x2,double y2, double x3,double y3, double x4,double y4, int multiply) { drawimage(dev,mem,sizex,sizey,x1,y1,x2,y2,x3,y3,x4,y4, IMAGE_TYPE_LOSSLESS, multiply); } void VectorGraphicOutputDev::drawGeneralImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap*colorMap, GBool invert, GBool inlineImg, int mask, int*maskColors, Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert, GfxImageColorMap*maskColorMap) { /* the code in this function is *old*. It's not pretty, but it works. */ double x1,y1,x2,y2,x3,y3,x4,y4; ImageStream *imgStr; Guchar pixBuf[4]; GfxRGB rgb; int ncomps = 1; int bits = 1; unsigned char* maskbitmap = 0; if(colorMap) { ncomps = colorMap->getNumPixelComps(); bits = colorMap->getBits(); } if(maskStr) { int x,y; unsigned char buf[8]; maskbitmap = (unsigned char*)malloc(maskHeight*maskWidth); if(maskColorMap) { ImageStream*imgMaskStr = new ImageStream(maskStr, maskWidth, maskColorMap->getNumPixelComps(), maskColorMap->getBits()); imgMaskStr->reset(); unsigned char pal[256]; int n = 1 << colorMap->getBits(); int t; for(t=0;tgetGray(pixBuf, &gray); pal[t] = colToByte(gray); } for (y = 0; y < maskHeight; y++) { for (x = 0; x < maskWidth; x++) { imgMaskStr->getPixel(buf); maskbitmap[y*maskWidth+x] = pal[buf[0]]; } } delete imgMaskStr; } else { ImageStream*imgMaskStr = new ImageStream(maskStr, maskWidth, 1, 1); imgMaskStr->reset(); for (y = 0; y < maskHeight; y++) { for (x = 0; x < maskWidth; x++) { imgMaskStr->getPixel(buf); buf[0]^=maskInvert; maskbitmap[y*maskWidth+x] = (buf[0]^1)*255; } } delete imgMaskStr; } maskStr->close(); } imgStr = new ImageStream(str, width, ncomps,bits); imgStr->reset(); if(!width || !height || ((height+width)<=1 && (maskWidth+maskHeight)<=1)) { msg(" Ignoring %d by %d image", width, height); unsigned char buf[8]; int x,y; for (y = 0; y < height; ++y) for (x = 0; x < width; ++x) { imgStr->getPixel(buf); } delete imgStr; if(maskbitmap) free(maskbitmap); return; } this->transformXY(state, 0, 1, &x1, &y1); this->transformXY(state, 0, 0, &x2, &y2); this->transformXY(state, 1, 0, &x3, &y3); this->transformXY(state, 1, 1, &x4, &y4); if(type3active) { /* as type 3 bitmaps are antialized, we need to place them at integer coordinates, otherwise flash player's antializing will kick in and make everything blurry */ x1 = (int)(x1);y1 = (int)(y1); x2 = (int)(x2);y2 = (int)(y2); x3 = (int)(x3);y3 = (int)(y3); x4 = (int)(x4);y4 = (int)(y4); } if(!(str->getKind()==strDCT)) { if(!type3active) { if(mask) infofeature("masked pbm pictures"); else infofeature("pbm pictures"); } if(mask) msg(" drawing %d by %d masked picture", width, height); } if(str->getKind()==strDCT) { infofeature("jpeg pictures"); } if(mask) { unsigned char buf[8]; int x,y; unsigned char*pic = new unsigned char[width*height]; gfxcolor_t pal[256]; GfxRGB rgb; state->getFillRGB(&rgb); memset(pal,255,sizeof(pal)); pal[0].r = (int)(colToByte(rgb.r)); pal[1].r = 0; pal[0].g = (int)(colToByte(rgb.g)); pal[1].g = 0; pal[0].b = (int)(colToByte(rgb.b)); pal[1].b = 0; pal[0].a = 255; pal[1].a = 0; int numpalette = 2; int realwidth = (int)sqrt(SQR(x2-x3) + SQR(y2-y3)); int realheight = (int)sqrt(SQR(x1-x2) + SQR(y1-y2)); for (y = 0; y < height; ++y) for (x = 0; x < width; ++x) { imgStr->getPixel(buf); if(invert) buf[0]=1-buf[0]; pic[width*y+x] = buf[0]; } if(type3active) { unsigned char*pic2 = 0; numpalette = 16; pic2 = antialize(pic,width,height,realwidth,realheight,numpalette); if(!pic2) { delete[] pic; delete imgStr; return; } width = realwidth; height = realheight; delete[] pic; pic = pic2; /* make a black/white palette */ float r = 255./(float)(numpalette-1); int t; for(t=0;tgetNumPixelComps()!=1 || str->getKind()==strDCT) { gfxcolor_t*pic=new gfxcolor_t[width*height]; for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { imgStr->getPixel(pixBuf); colorMap->getRGB(pixBuf, &rgb); pic[width*y+x].r = (unsigned char)(colToByte(rgb.r)); pic[width*y+x].g = (unsigned char)(colToByte(rgb.g)); pic[width*y+x].b = (unsigned char)(colToByte(rgb.b)); pic[width*y+x].a = 255;//(U8)(rgb.a * 255 + 0.5); if(maskbitmap) { int x1 = x*maskWidth/width; int y1 = y*maskHeight/height; int x2 = (x+1)*maskWidth/width; int y2 = (y+1)*maskHeight/height; int xx,yy; unsigned int alpha=0; unsigned int count=0; for(xx=x1;xxgetKind()==strDCT) drawimagejpeg(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply); else drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply); delete[] pic; delete imgStr; if(maskbitmap) free(maskbitmap); return; } else { gfxcolor_t*pic=new gfxcolor_t[width*height]; gfxcolor_t pal[256]; int n = 1 << colorMap->getBits(); int t; for(t=0;t<256;t++) { pixBuf[0] = t; colorMap->getRGB(pixBuf, &rgb); pal[t].r = (unsigned char)(colToByte(rgb.r)); pal[t].g = (unsigned char)(colToByte(rgb.g)); pal[t].b = (unsigned char)(colToByte(rgb.b)); pal[t].a = 255;//(U8)(rgb.b * 255 + 0.5); } for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { imgStr->getPixel(pixBuf); pic[width*y+x] = pal[pixBuf[0]]; if(maskColors && *maskColors==pixBuf[0]) { pic[width*y+x].a = 0; } } } if(maskbitmap) { if(maskWidth < width && maskHeight < height) { for(y = 0; y < height; y++) { for (x = 0; x < width; x++) { pic[width*y+x].a = maskbitmap[(y*maskHeight/height)*maskWidth+(x*maskWidth/width)]; } } } else { msg(" resampling %dx%d to mask size (%dx%d)", width, height, maskWidth, maskHeight); gfxcolor_t*newpic=new gfxcolor_t[maskWidth*maskHeight]; double dx = width / (double)maskWidth; double dy = height / (double)maskHeight; double yy = 0; for(y = 0; y < maskHeight; y++) { double xx = 0; for (x = 0; x < maskWidth; x++) { newpic[maskWidth*y+x] = pic[int(yy)*width+int(xx)]; newpic[maskWidth*y+x].a = maskbitmap[maskWidth*y+x]; xx += dx; } yy += dy; } delete[] pic; pic = newpic; width = maskWidth; height = maskHeight; } } drawimagelossless(device, pic, width, height, x1,y1,x2,y2,x3,y3,x4,y4, config_multiply); delete[] pic; delete imgStr; if(maskbitmap) free(maskbitmap); return; } } void VectorGraphicOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, GBool inlineImg) { if(config_textonly) { OutputDev::drawImageMask(state,ref,str,width,height,invert,inlineImg); return; } dbg("drawImageMask %dx%d, invert=%d inline=%d", width, height, invert, inlineImg); msg(" drawImageMask %dx%d, invert=%d inline=%d", width, height, invert, inlineImg); drawGeneralImage(state,ref,str,width,height,0,invert,inlineImg,1, 0, 0,0,0,0, 0); } void VectorGraphicOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg) { if(config_textonly) { OutputDev::drawImage(state,ref,str,width,height,colorMap,maskColors,inlineImg); return; } dbg("drawImage %dx%d, %s, %s, inline=%d", width, height, colorMap?"colorMap":"no colorMap", maskColors?"maskColors":"no maskColors", inlineImg); msg(" drawImage %dx%d, %s, %s, inline=%d", width, height, colorMap?"colorMap":"no colorMap", maskColors?"maskColors":"no maskColors", inlineImg); if(colorMap) msg(" colorMap pixcomps:%d bits:%d mode:%d", colorMap->getNumPixelComps(), colorMap->getBits(),colorMap->getColorSpace()->getMode()); drawGeneralImage(state,ref,str,width,height,colorMap,0,inlineImg,0,maskColors, 0,0,0,0, 0); } void VectorGraphicOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert) { if(config_textonly) { OutputDev::drawMaskedImage(state,ref,str,width,height,colorMap,maskStr,maskWidth,maskHeight,maskInvert); return; } dbg("drawMaskedImage %dx%d, %s, %dx%d mask", width, height, colorMap?"colorMap":"no colorMap", maskWidth, maskHeight); msg(" drawMaskedImage %dx%d, %s, %dx%d mask", width, height, colorMap?"colorMap":"no colorMap", maskWidth, maskHeight); if(colorMap) msg(" colorMap pixcomps:%d bits:%d mode:%d", colorMap->getNumPixelComps(), colorMap->getBits(),colorMap->getColorSpace()->getMode()); drawGeneralImage(state,ref,str,width,height,colorMap,0,0,0,0, maskStr, maskWidth, maskHeight, maskInvert, 0); } void VectorGraphicOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap) { if(config_textonly) { OutputDev::drawSoftMaskedImage(state,ref,str,width,height,colorMap,maskStr,maskWidth,maskHeight,maskColorMap); return; } dbg("drawSoftMaskedImage %dx%d, %s, %dx%d mask", width, height, colorMap?"colorMap":"no colorMap", maskWidth, maskHeight); msg(" drawSoftMaskedImage %dx%d, %s, %dx%d mask", width, height, colorMap?"colorMap":"no colorMap", maskWidth, maskHeight); if(colorMap) msg(" colorMap pixcomps:%d bits:%d mode:%d", colorMap->getNumPixelComps(), colorMap->getBits(),colorMap->getColorSpace()->getMode()); drawGeneralImage(state,ref,str,width,height,colorMap,0,0,0,0, maskStr, maskWidth, maskHeight, 0, maskColorMap); } void VectorGraphicOutputDev::stroke(GfxState *state) { if(config_textonly) {return;} dbg("stroke"); GfxPath * path = state->getPath(); gfxline_t*line= gfxPath_to_gfxline(state, path, 0); strokeGfxline(state, line, 0); gfxline_free(line); } void VectorGraphicOutputDev::fill(GfxState *state) { if(config_textonly) {return;} gfxcolor_t col = gfxstate_getfillcolor(state); dbg("fill %02x%02x%02x%02x",col.r,col.g,col.b,col.a); GfxPath * path = state->getPath(); gfxline_t*line= gfxPath_to_gfxline(state, path, 1); if(!config_disable_polygon_conversion) { gfxline_t*line2 = gfxpoly_circular_to_evenodd(line, DEFAULT_GRID); gfxline_free(line); line = line2; } fillGfxLine(state, line, 0); gfxline_free(line); } void VectorGraphicOutputDev::eoFill(GfxState *state) { if(config_textonly) {return;} gfxcolor_t col = gfxstate_getfillcolor(state); dbg("eofill %02x%02x%02x%02x",col.r,col.g,col.b,col.a); GfxPath * path = state->getPath(); gfxline_t*line= gfxPath_to_gfxline(state, path, 1); fillGfxLine(state, line, 1); gfxline_free(line); } void VectorGraphicOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask) { const char*colormodename = ""; if(blendingColorSpace) { colormodename = GfxColorSpace::getColorSpaceModeName(blendingColorSpace->getMode()); } dbg("beginTransparencyGroup device=%p %.1f/%.1f/%.1f/%.1f %s isolated=%d knockout=%d forsoftmask=%d", device, bbox[0],bbox[1],bbox[2],bbox[3], colormodename, isolated, knockout, forSoftMask); msg(" beginTransparencyGroup %.1f/%.1f/%.1f/%.1f %s isolated=%d knockout=%d forsoftmask=%d", bbox[0],bbox[1],bbox[2],bbox[3], colormodename, isolated, knockout, forSoftMask); //states[statepos].createsoftmask |= forSoftMask; states[statepos].createsoftmask = forSoftMask; states[statepos].transparencygroup = !forSoftMask; states[statepos].isolated = isolated; states[statepos].olddevice = this->device; this->device = (gfxdevice_t*)rfx_calloc(sizeof(gfxdevice_t)); dbg("this->device now %p (old: %p)", this->device, states[statepos].olddevice); gfxdevice_record_init(this->device, 0); /*if(!forSoftMask) { ////??? state->setFillOpacity(0.0); }*/ dbgindent+=2; } void VectorGraphicOutputDev::endTransparencyGroup(GfxState *state) { dbgindent-=2; gfxdevice_t*r = this->device; dbg("endTransparencyGroup this->device now back to %p (destroying %p)", states[statepos].olddevice, this->device); this->device = states[statepos].olddevice; if(!this->device) { msg(" Invalid state nesting"); } states[statepos].olddevice = 0; gfxresult_t*recording = r->finish(r); dbg(" forsoftmask=%d recording=%p/%p", states[statepos].createsoftmask, r, recording); msg(" endTransparencyGroup forsoftmask=%d recording=%p/%p", states[statepos].createsoftmask, r, recording); if(states[statepos].createsoftmask) { states[statepos-1].softmaskrecording = recording; } else { states[statepos-1].grouprecording = recording; } states[statepos].createsoftmask = 0; states[statepos].transparencygroup = 0; free(r); } void VectorGraphicOutputDev::paintTransparencyGroup(GfxState *state, double *bbox) { const char*blendmodes[] = {"normal","multiply","screen","overlay","darken", "lighten", "colordodge","colorburn","hardlight","softlight","difference", "exclusion","hue","saturation","color","luminosity"}; dbg("paintTransparencyGroup blend=%s softmaskon=%d recording=%p", blendmodes[state->getBlendMode()], states[statepos].softmask, states[statepos].grouprecording); msg(" paintTransparencyGroup blend=%s softmaskon=%d", blendmodes[state->getBlendMode()], states[statepos].softmask); if(state->getBlendMode() == gfxBlendNormal) infofeature("transparency groups"); else { char buffer[80]; sprintf(buffer, "%s blended transparency groups", blendmodes[state->getBlendMode()]); warnfeature(buffer, 0); } gfxresult_t*grouprecording = states[statepos].grouprecording; int blendmode = state->getBlendMode(); if(blendmode == gfxBlendNormal || blendmode == gfxBlendMultiply) { int alpha = (int)(state->getFillOpacity()*255); if(blendmode == gfxBlendMultiply && alpha>200) alpha = 128; gfxdevice_t ops; dbg("this->device=%p, this->device->name=%s\n", this->device, this->device->name); gfxdevice_ops_init(&ops, this->device, alpha); gfxresult_record_replay(grouprecording, &ops, 0); ops.finish(&ops); } grouprecording->destroy(grouprecording); states[statepos].grouprecording = 0; } void VectorGraphicOutputDev::setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *rgb) { if(states[statepos].softmask) { /* shouldn't happen, but *does* happen */ clearSoftMask(state); } /* alpha = 1: retrieve mask values from alpha layer alpha = 0: retrieve mask values from luminance */ dbg("setSoftMask %.1f/%.1f/%.1f/%.1f alpha=%d backdrop=%02x%02x%02x", bbox[0], bbox[1], bbox[2], bbox[3], alpha, colToByte(rgb->c[0]), colToByte(rgb->c[1]), colToByte(rgb->c[2])); msg(" setSoftMask %.1f/%.1f/%.1f/%.1f alpha=%d backdrop=%02x%02x%02x", bbox[0], bbox[1], bbox[2], bbox[3], alpha, colToByte(rgb->c[0]), colToByte(rgb->c[1]), colToByte(rgb->c[2])); if(!alpha) infofeature("soft masks"); else warnfeature("soft masks from alpha channel",0); if(states[statepos].olddevice) { msg(" Internal error: badly balanced softmasks/transparency groups"); exit(1); } states[statepos].olddevice = this->device; this->device = (gfxdevice_t*)rfx_calloc(sizeof(gfxdevice_t)); gfxdevice_record_init(this->device, 0); dbg("softmaskrecording is %p (dev=%p) at statepos %d\n", states[statepos].softmaskrecording, this->device, statepos); states[statepos].softmask = 1; states[statepos].softmask_alpha = alpha; } static inline Guchar div255(int x) { return (Guchar)((x + (x >> 8) + 0x80) >> 8); } static unsigned char clampU8(unsigned char c, unsigned char min, unsigned char max) { if(c < min) c = min; if(c > max) c = max; return c; } void VectorGraphicOutputDev::clearSoftMask(GfxState *state) { if(!states[statepos].softmask) return; states[statepos].softmask = 0; dbg("clearSoftMask statepos=%d", statepos); msg(" clearSoftMask statepos=%d", statepos); if(!states[statepos].softmaskrecording || strcmp(this->device->name, "record")) { msg(" Error in softmask/tgroup ordering"); return; } gfxresult_t*mask = states[statepos].softmaskrecording; gfxresult_t*below = this->device->finish(this->device);free(this->device); this->device = states[statepos].olddevice; /* get outline of all objects below the soft mask */ gfxdevice_t uniondev; gfxdevice_union_init(&uniondev, 0); gfxresult_record_replay(below, &uniondev, 0); gfxline_t*belowoutline = gfxdevice_union_getunion(&uniondev); uniondev.finish(&uniondev); gfxbbox_t bbox = gfxline_getbbox(belowoutline); gfxline_free(belowoutline);belowoutline=0; #if 0 this->device->startclip(this->device, belowoutline); gfxresult_record_replay(below, this->device, 0); gfxresult_record_replay(mask, this->device, 0); this->device->endclip(this->device); #endif int width = (int)bbox.xmax,height = (int)bbox.ymax; if(width<=0 || height<=0) return; gfxdevice_t belowrender; gfxdevice_render_init(&belowrender); if(states[statepos+1].isolated) { belowrender.setparameter(&belowrender, "fillwhite", "1"); } belowrender.setparameter(&belowrender, "antialize", "2"); belowrender.startpage(&belowrender, width, height); gfxresult_record_replay(below, &belowrender, 0); belowrender.endpage(&belowrender); gfxresult_t* belowresult = belowrender.finish(&belowrender); gfximage_t* belowimg = (gfximage_t*)belowresult->get(belowresult,"page0"); //png_write("below.png", (unsigned char*)belowimg->data, belowimg->width, belowimg->height); gfxdevice_t maskrender; gfxdevice_render_init(&maskrender); maskrender.startpage(&maskrender, width, height); gfxresult_record_replay(mask, &maskrender, 0); maskrender.endpage(&maskrender); gfxresult_t* maskresult = maskrender.finish(&maskrender); gfximage_t* maskimg = (gfximage_t*)maskresult->get(maskresult,"page0"); if(belowimg->width != maskimg->width || belowimg->height != maskimg->height) { msg(" Internal error in mask drawing"); return; } int y,x; for(y=0;ydata[maskimg->width*y]; gfxcolor_t* l2 = &belowimg->data[belowimg->width*y]; for(x=0;xa; } else { alpha = (77*l1->r + 151*l1->g + 28*l1->b) >> 8; } l2->a = div255(alpha*l2->a); /* DON'T premultiply alpha- this is done by fillbitmap, depending on the output device */ //l2->r = div255(alpha*l2->r); //l2->g = div255(alpha*l2->g); //l2->b = div255(alpha*l2->b); l1++; l2++; } } gfxline_t*line = gfxline_makerectangle(0,0,width,height); gfxmatrix_t matrix; matrix.m00 = 1.0; matrix.m10 = 0.0; matrix.tx = 0.0; matrix.m01 = 0.0; matrix.m11 = 1.0; matrix.ty = 0.0; if(!config_textonly) { this->device->fillbitmap(this->device, line, belowimg, &matrix, 0); } mask->destroy(mask); below->destroy(below); maskresult->destroy(maskresult); belowresult->destroy(belowresult); states[statepos].softmaskrecording = 0; } //class MemCheck //{ // public: ~MemCheck() // { // delete globalParams;globalParams=0; // Object::memCheck(stderr); // gMemReport(stderr); // } //} myMemCheck; swftools_0.9.2+git20130725.orig/lib/pdf/pdf.h0000644000175000017500000000210612216332640017563 0ustar gawaingawain/* swfoutput.h Header file for swfoutput.cc (and swfoutput_x11.cc). Part of the swftools package. Copyright (c) 2001,2002,2003 Matthias Kramm 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 */ #ifndef __pdfsource_h__ #define __pdfsource_h__ #include "../gfxsource.h" #ifdef __cplusplus extern "C" { #endif gfxsource_t*gfxsource_pdf_create(); #ifdef __cplusplus } #endif #endif //__pdfsource_h__ swftools_0.9.2+git20130725.orig/lib/pdf/BitmapOutputDev.cc0000644000175000017500000020123612216332640022251 0ustar gawaingawain/* InfoOutputDev.h Output Device which creates a bitmap. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "BitmapOutputDev.h" #include "CharOutputDev.h" #ifdef HAVE_POPPLER #include "splash/SplashBitmap.h" #include "splash/SplashPattern.h" #include "splash/Splash.h" #else #include "xpdf/config.h" #include "SplashBitmap.h" #include "SplashGlyphBitmap.h" #include "SplashPattern.h" #include "Splash.h" #endif #include "../log.h" #include "../png.h" #include "../devices/record.h" #include "../gfxtools.h" #include "../types.h" #include "bbox.h" #define UNKNOWN_BOUNDING_BOX 0,0,0,0 static SplashColor splash_white = {255,255,255}; static SplashColor splash_black = {0,0,0}; ClipState::ClipState() { this->next = 0; this->clipbitmap = 0; this->written = 0; } static gfxdevice_t* device_new_record() { gfxdevice_t*dev = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_record_init(dev, 0); return dev; } BitmapOutputDev::BitmapOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2) :CommonOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2) { this->info = info; this->doc = doc; this->xref = doc->getXRef(); /* color graphic output device, for creating bitmaps */ this->rgbdev = new SplashOutputDev(splashModeRGB8, 1, gFalse, splash_white, gTrue, gTrue); /* color mode for binary bitmaps */ SplashColorMode colorMode = splashModeMono1; /* two devices for testing things against clipping: one clips, the other doesn't */ this->clip0dev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse); this->clip1dev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse); /* device indicating where polygonal pixels were drawn */ this->boolpolydev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse); /* device indicating where text pixels were drawn */ this->booltextdev = new SplashOutputDev(colorMode, 1, gFalse, splash_black, gTrue, gFalse); /* device for handling texts and links */ this->gfxdev = new CharOutputDev(info, this->doc, page2page, num_pages, x, y, x1, y1, x2, y2); this->rgbdev->startDoc(this->xref); this->boolpolydev->startDoc(this->xref); this->booltextdev->startDoc(this->xref); this->clip0dev->startDoc(this->xref); this->clip1dev->startDoc(this->xref); this->gfxoutput_string = device_new_record(); this->gfxoutput = device_new_record(); this->gfxdev->setDevice(this->gfxoutput); this->config_extrafontdata = 0; this->config_transparent = 0; this->config_optimizeplaincolorfills = 0; this->config_skewedtobitmap = 0; this->config_alphatobitmap = 0; this->bboxpath = 0; //this->clipdev = 0; //this->clipstates = 0; } BitmapOutputDev::~BitmapOutputDev() { if(this->gfxoutput) { gfxresult_t*r = this->gfxoutput->finish(this->gfxoutput); r->destroy(r); free(this->gfxoutput);this->gfxoutput = 0; } if(this->gfxoutput_string) { gfxresult_t*r = this->gfxoutput_string->finish(this->gfxoutput_string); r->destroy(r); free(this->gfxoutput_string);this->gfxoutput_string = 0; } if(this->bboxpath) { delete this->bboxpath;this->bboxpath = 0; } if(this->rgbdev) { delete this->rgbdev;this->rgbdev = 0; } if(this->gfxdev) { delete this->gfxdev;this->gfxdev= 0; } if(this->boolpolydev) { delete this->boolpolydev;this->boolpolydev = 0; } if(this->stalepolybitmap) { delete this->stalepolybitmap;this->stalepolybitmap = 0; } if(this->staletextbitmap) { delete this->staletextbitmap;this->staletextbitmap = 0; } if(this->booltextdev) { delete this->booltextdev;this->booltextdev = 0; } if(this->clip0dev) { delete this->clip0dev;this->clip0dev = 0; } if(this->clip1dev) { delete this->clip1dev;this->clip1dev = 0; } //if(this->clipbitmap) { // delete this->clipbitmap;this->clipbitmap = 0; //} //if(this->clipdev) { // delete this->clipdev;this->clipdev = 0; //} } GBool BitmapOutputDev::getVectorAntialias() { return this->rgbdev->getVectorAntialias(); } void BitmapOutputDev::setVectorAntialias(GBool vaa) { this->rgbdev->setVectorAntialias(vaa); } void BitmapOutputDev::setDevice(gfxdevice_t*dev) { this->dev = dev; } void BitmapOutputDev::setParameter(const char*key, const char*value) { if(!strcmp(key, "extrafontdata")) { this->config_extrafontdata = atoi(value); } else if(!strcmp(key, "skewedtobitmap")) { this->config_skewedtobitmap = atoi(value); } else if(!strcmp(key, "alphatobitmap")) { this->config_alphatobitmap = atoi(value); } else if(!strcmp(key, "transparent")) { this->config_transparent = atoi(value); } this->gfxdev->setParameter(key, value); } void writeBitmap(SplashBitmap*bitmap, char*filename); void writeAlpha(SplashBitmap*bitmap, char*filename); static int dbg_btm_counter=1; void BitmapOutputDev::flushBitmap() { int bitmap_width = rgbdev->getBitmapWidth(); int bitmap_height = rgbdev->getBitmapHeight(); if(sizeof(SplashColor)!=3) { msg(" sizeof(SplashColor)!=3"); return; } /*static int counter=0; if(!counter) { writeBitmap(rgbdev->getBitmap(), "test.png"); } counter++;*/ /*static int counter=0; char filename[160]; sprintf(filename, "test%d.png", counter++); writeBitmap(rgbbitmap, filename);*/ SplashColorPtr rgb = rgbbitmap->getDataPtr(); Guchar*alpha = rgbbitmap->getAlphaPtr(); Guchar*alpha2 = stalepolybitmap->getDataPtr(); int bitmap_width8 = (stalepolybitmap->getWidth()+7)/8; /*char filename[80]; sprintf(filename, "flush%d_mask.png", dbg_btm_counter); writeAlpha(stalepolybitmap, filename); sprintf(filename, "flush%d_alpha.png", dbg_btm_counter); writeAlpha(rgbbitmap, filename); sprintf(filename, "flush%d_bitmap.png", dbg_btm_counter); writeBitmap(rgbbitmap, filename);*/ ibbox_t pagebox = {-movex, -movey, -movex + this->width, -movey + this->height, 0}; ibbox_t bitmapbox = {0, 0, bitmap_width, bitmap_height, 0}; ibbox_t c = ibbox_clip(&bitmapbox, &pagebox); ibbox_t* boxes = get_bitmap_bboxes((unsigned char*)(alpha+c.ymin*bitmap_width+c.xmin), c.xmax - c.xmin, c.ymax - c.ymin, bitmap_width); ibbox_t*b; for(b=boxes;b;b=b->next) { int xmin = b->xmin - this->movex; int ymin = b->ymin - this->movey; int xmax = b->xmax - this->movex; int ymax = b->ymax - this->movey; /* clip against (-movex, -movey, -movex+width, -movey+height) */ msg(" Flushing bitmap (bbox: %d,%d,%d,%d %dx%d) (clipped against %d,%d,%d,%d)", xmin,ymin,xmax,ymax, xmax-xmin, ymax-ymin, -this->movex, -this->movey, -this->movex+this->width, -this->movey+this->height); if(xmin < -this->movex) { xmin = -this->movex; if(xmax < -this->movex) continue; } if(ymin < -this->movey) { ymin = -this->movey; if(ymax < -this->movey) continue; } if(xmax >= -this->movex + this->width) { xmax = -this->movex+this->width; if(xmin >= -this->movex + this->width) continue; } if(ymax >= -this->movey + this->height) { ymax = -this->movey+this->height; if(ymin >= -this->movey + this->height) continue; } if((xmax-xmin)<=0 || (ymax-ymin)<=0) // no bitmap, nothing to do continue; int rangex = xmax-xmin; int rangey = ymax-ymin; gfximage_t*img = (gfximage_t*)malloc(sizeof(gfximage_t)); img->data = (gfxcolor_t*)malloc(rangex * rangey * 4); img->width = rangex; img->height = rangey; int x,y; for(y=0;ydata[y*rangex]; Guchar*ain = &alpha[(y+ymin)*bitmap_width+xmin]; Guchar*ain2 = &alpha2[(y+ymin)*bitmap_width8]; if(this->emptypage) { for(x=0;x>((x+xmin)&7)))) { /* cut away pixels that we don't remember drawing (i.e., that are not in the monochrome bitmap). Prevents some "hairlines" showing up to the left and right of bitmaps. */ out[x].r = 0;out[x].g = 0;out[x].b = 0;out[x].a = 0; } else { /* according to endPage()/compositeBackground() in xpdf/SplashOutputDev.cc, this data has non-premultiplied alpha, which is exactly what the output device expects, so don't premultiply it here, either. */ out[x].r = in[x*3+0]; out[x].g = in[x*3+1]; out[x].b = in[x*3+2]; out[x].a = ain[x]; } } } } /* transform bitmap rectangle to "device space" */ xmin += movex; ymin += movey; xmax += movex; ymax += movey; gfxmatrix_t m; m.tx = xmin; m.ty = ymin; m.m00 = m.m11 = 1; m.m10 = m.m01 = 0; m.tx -= 0.5; m.ty -= 0.5; gfxline_t* line = gfxline_makerectangle(xmin, ymin, xmax, ymax); dev->fillbitmap(dev, line, img, &m, 0); gfxline_free(line); if(img->data) { free(img->data);img->data=0; } free(img);img=0; } ibbox_destroy(boxes); memset(rgbbitmap->getAlphaPtr(), 0, rgbbitmap->getWidth()*rgbbitmap->getHeight()); memset(rgbbitmap->getDataPtr(), 0, rgbbitmap->getRowSize()*rgbbitmap->getHeight()); this->emptypage = 0; } void BitmapOutputDev::flushText() { msg(" Flushing text"); static gfxfontlist_t*output_font_list = 0; static gfxdevice_t*last = 0; if(last != this->dev) { if(output_font_list) gfxfontlist_free(output_font_list, 0); output_font_list = gfxfontlist_create(); } gfxdevice_record_flush(this->gfxoutput, this->dev, &output_font_list); last = this->dev; this->emptypage = 0; } void writeMonoBitmap(SplashBitmap*btm, char*filename) { int width8 = (btm->getWidth()+7)/8; int width = btm->getWidth(); int height = btm->getHeight(); gfxcolor_t*b = (gfxcolor_t*)malloc(sizeof(gfxcolor_t)*width*height); unsigned char*data = btm->getDataPtr(); int x,y; for(y=0;y>3]&(128>>(x&7))) { d[x].r = d[x].b = d[x].a = 255; d[x].g = 0; } else { d[x].r = d[x].g = d[x].b = d[x].a = 0; } } } png_write_quick(filename, (unsigned char*)b, width, height); free(b); } void writeBitmap(SplashBitmap*bitmap, char*filename) { int y,x; int width = bitmap->getWidth(); int height = bitmap->getHeight(); gfxcolor_t*data = (gfxcolor_t*)malloc(sizeof(gfxcolor_t)*width*height); if(bitmap->getMode()==splashModeMono1) { writeMonoBitmap(bitmap, filename); return; } for(y=0;ygetPixel(x,y,c); line[x].r = c[0]; line[x].g = c[1]; line[x].b = c[2]; line[x].a = bitmap->getAlpha(x,y); } } png_write_quick(filename, (unsigned char*)data, width, height); free(data); } void writeAlpha(SplashBitmap*bitmap, char*filename) { int y,x; int width = bitmap->getWidth(); int height = bitmap->getHeight(); if(bitmap->getMode()==splashModeMono1) { writeMonoBitmap(bitmap, filename); return; } gfxcolor_t*data = (gfxcolor_t*)malloc(sizeof(gfxcolor_t)*width*height); for(y=0;ygetAlpha(x,y); line[x].r = a; line[x].g = 0; line[x].b = a; line[x].a = a; } } png_write_quick(filename, (unsigned char*)data, width, height); free(data); } static const char*STATE_NAME[] = {"parallel", "textabovebitmap", "bitmapabovetext"}; int checkAlphaSanity(SplashBitmap*boolbtm, SplashBitmap*alphabtm) { assert(boolbtm->getWidth() == alphabtm->getWidth()); assert(boolbtm->getHeight() == alphabtm->getHeight()); if(boolbtm->getMode()==splashModeMono1) { return 1; } int width = boolbtm->getWidth(); int height = boolbtm->getHeight(); int bad=0; int x,y; for(y=0;ygetAlpha(x,y); int a2 = boolbtm->getAlpha(x,y); if(a1!=a2) { bad++; } } } double badness = bad/(double)(width*height); if(badness>0.2) { msg(" Bitmaps don't correspond: %d out of %d pixels wrong (%.2f%%)", bad, width*height, badness*100.0); return 0; } msg(" %f", badness); return 1; } static inline GBool fixBBox(int*x1, int*y1, int*x2, int*y2, int width, int height) { if(!(*x1|*y1|*x2|*y2)) { // undefined bbox *x1 = *y1 = 0; *x2 = width; *y2 = height; return gTrue; } if(*x2<=*x1) return gFalse; if(*x2<0) return gFalse; if(*x1<0) *x1 = 0; if(*x1>=width) return gFalse; if(*x2>width) *x2=width; if(*y2<=*y1) return gFalse; if(*y2<0) return gFalse; if(*y1<0) *y1 = 0; if(*y1>=height) return gFalse; if(*y2>height) *y2=height; return gTrue; } static void update_bitmap(SplashBitmap*bitmap, SplashBitmap*update, int x1, int y1, int x2, int y2, char overwrite) { assert(bitmap->getMode()==splashModeMono1); assert(update->getMode()==splashModeMono1); int width8 = (bitmap->getWidth()+7)/8; assert(width8 == bitmap->getRowSize()); assert(width8 == update->getRowSize()); int height = bitmap->getHeight(); assert(height == update->getHeight()); if(!fixBBox(&x1, &y1, &x2, &y2, bitmap->getWidth(), bitmap->getHeight())) return; Guchar*b = bitmap->getDataPtr() + y1*width8 + x1/8; Guchar*u = update->getDataPtr() + y1*width8 + x1/8; int yspan = y2-y1; int xspan = (x2+7)/8 - x1/8; int size = (y2-y1)*width8; if(overwrite) { int y; for(y=0;ygetWidth(), btm->getHeight())) return; if(btm->getMode()==splashModeMono1) { int width8 = (btm->getWidth()+7)/8; assert(width8 == btm->getRowSize()); int width = btm->getWidth(); int height = btm->getHeight(); Guchar*data = btm->getDataPtr(); memset(data+y1*width8, 0, width8*(y2-y1)); } else { int width = btm->getAlphaRowSize(); int height = btm->getHeight(); memset(btm->getAlphaPtr(), 0, width*height); } } void BitmapOutputDev::dbg_newdata(char*newdata) { if(0) { char filename1[80]; char filename2[80]; char filename3[80]; char filename4[80]; char filename5[80]; sprintf(filename1, "state%03dboolbitmap_after%s.png", dbg_btm_counter, newdata); sprintf(filename2, "state%03dbooltext_after%s.png", dbg_btm_counter, newdata); sprintf(filename3, "state%03dstalebitmap_after%s.png", dbg_btm_counter, newdata); sprintf(filename4, "state%03dstaletext_after%s.png", dbg_btm_counter, newdata); sprintf(filename5, "state%03dbitmap_after%s.png", dbg_btm_counter, newdata); msg(" %s %s %s", filename1, filename2, filename5); writeAlpha(boolpolybitmap, filename1); writeAlpha(booltextbitmap, filename2); writeAlpha(stalepolybitmap, filename3); writeAlpha(staletextbitmap, filename4); writeBitmap(rgbdev->getBitmap(), filename5); } dbg_btm_counter++; } static void getBitmapBBox(SplashBitmap*b, int*xmin, int*ymin, int*xmax, int*ymax) { int width = b->getWidth(); int height = b->getHeight(); int width8 = (width+7)>>3; Guchar*pixels = b->getDataPtr(); int x,y; *xmin = *ymin = *xmax = *ymax = 0; for(x=0;x>xb)) { *xmin = x*8+xb; break; } } } if(y=0;x--) { int xb; for(xb=7;xb>=0;xb--) { for(y=0;y>xb)) { *xmax = x*8+xb; break; } } if(y=0;y--) { for(x=0;x Testing new text data against current bitmap data, state=%s, counter=%d\n", STATE_NAME[layerstate], dbg_btm_counter); GBool ret = false; if(intersection(booltextbitmap, stalepolybitmap, x1,y1,x2,y2)) { if(layerstate==STATE_PARALLEL) { /* the new text is above the bitmap. So record that fact. */ msg(" Text is above current bitmap/polygon data"); layerstate=STATE_TEXT_IS_ABOVE; update_bitmap(staletextbitmap, booltextbitmap, x1, y1, x2, y2, 0); } else if(layerstate==STATE_BITMAP_IS_ABOVE) { /* there's a bitmap above the (old) text. So we need to flush out that text, and record that the *new* text is now *above* the bitmap */ msg(" Text is above current bitmap/polygon data (which is above some other text)"); flushText(); layerstate=STATE_TEXT_IS_ABOVE; clearBoolTextDev(); /* re-apply the update (which we would otherwise lose) */ update_bitmap(staletextbitmap, booltextbitmap, x1, y1, x2, y2, 1); ret = true; } else { /* we already know that the current text section is above the current bitmap section- now just new bitmap data *and* new text data was drawn, and *again* it's above the current bitmap. */ msg(" Text is still above current bitmap/polygon data"); update_bitmap(staletextbitmap, booltextbitmap, x1, y1, x2, y2, 0); } } else { msg(" no intersection"); update_bitmap(staletextbitmap, booltextbitmap, x1, y1, x2, y2, 0); } /* clear the thing we just drew from our temporary drawing bitmap */ clearBooleanBitmap(booltextbitmap, x1, y1, x2, y2); #ifdef DEBUG if(intersection(booltextbitmap, booltextbitmap, UNKNOWN_BOUNDING_BOX)) { msg(" Text bitmap is not empty after clear. Bad bounding box?"); exit(1); } clearBooleanBitmap(booltextbitmap, UNKNOWN_BOUNDING_BOX); #endif return ret; } GBool BitmapOutputDev::checkNewBitmap(int x1, int y1, int x2, int y2) { /* similar to checkNewText() above, only in reverse */ msg(" Testing new graphics data against current text data, state=%s, counter=%d\n", STATE_NAME[layerstate], dbg_btm_counter); GBool ret = false; if(intersection(boolpolybitmap, staletextbitmap, x1,y1,x2,y2)) { if(layerstate==STATE_PARALLEL) { msg(" Bitmap is above current text data"); layerstate=STATE_BITMAP_IS_ABOVE; update_bitmap(stalepolybitmap, boolpolybitmap, x1, y1, x2, y2, 0); } else if(layerstate==STATE_TEXT_IS_ABOVE) { msg(" Bitmap is above current text data (which is above some bitmap)"); flushBitmap(); layerstate=STATE_BITMAP_IS_ABOVE; clearBoolPolyDev(); update_bitmap(stalepolybitmap, boolpolybitmap, x1, y1, x2, y2, 1); ret = true; } else { msg(" Bitmap is still above current text data"); update_bitmap(stalepolybitmap, boolpolybitmap, x1, y1, x2, y2, 0); } } else { msg(" no intersection"); update_bitmap(stalepolybitmap, boolpolybitmap, x1, y1, x2, y2, 0); } /* clear the thing we just drew from our temporary drawing bitmap */ clearBooleanBitmap(boolpolybitmap, x1, y1, x2, y2); #ifdef DEBUG if(intersection(boolpolybitmap, boolpolybitmap, UNKNOWN_BOUNDING_BOX)) { writeAlpha(boolpolybitmap, "notempty.png"); msg(" Polygon bitmap is not empty after clear. Bad bounding box?"); int _x1, _y1, _x2, _y2; getBitmapBBox(boolpolybitmap, &_x1, &_y1, &_x2, &_y2); printf("expected: %d %d %d %d <=> real: %d %d %d %d (%d,%d)\n", x1, y1, x2, y2, _x1, _y1, _x2, _y2, movex, movey); exit(1); } clearBooleanBitmap(boolpolybitmap, UNKNOWN_BOUNDING_BOX); #endif return ret; } void scan_bitmap(SplashBitmap*bitmap) { int width = bitmap->getWidth(); int width8 = (width+7)/8; int height = bitmap->getHeight(); int x,y; int x1=width,y1=height,x2=0,y2=0; for(y=0;ygetDataPtr() + y*width8; for(x=0;xy2) y2=y; int x8; for(x8=0;x8<8;x8++) { if((b[x]<=0;x--) { if(b[x]) { int x8; for(x8=7;x8>=0;x8--) { if((b[x]<x2) x2 = x; break; } } } if(x1>x2 || y1>y2) { printf("bitmap is empty\n"); } else { printf("bounding box of bitmap is %d,%d,%d,%d\n", x1, y1, x2, y2); } } //void checkNewText() { // Guchar*alpha = rgbbitmap->getAlphaPtr(); // Guchar*charpixels = clip1bitmap->getDataPtr(); // int xx,yy; // for(yy=0;yy>3; // /* TODO: is the bit order correct? */ // if(aline[xx] && (cline[bytepos]&(1<getMode()==splashModeMono1) { int width = clip0bitmap->getWidth(); int width8 = (width+7)/8; int height = clip0bitmap->getHeight(); if(!fixBBox(&x1,&y1,&x2,&y2,width,height)) { /* area is outside or null */ return gFalse; } SplashBitmap*clip0 = clip0bitmap; SplashBitmap*clip1 = clip1bitmap; int x18 = x1/8; int x28 = (x2+7)/8; int y; for(y=y1;ygetDataPtr()[width8*y+x18]; unsigned char*row2 = &clip1bitmap->getDataPtr()[width8*y+x18]; if(memcmp(row1, row2, x28-x18)) { return gTrue; } } return gFalse; } else { SplashBitmap*clip0 = clip0bitmap; SplashBitmap*clip1 = clip1bitmap; int width = clip0->getAlphaRowSize(); int height = clip0->getHeight(); if(!fixBBox(&x1, &y1, &x2, &y2, width, height)) { x1=y1=0;x2=y2=1; } Guchar*a0 = clip0->getAlphaPtr(); Guchar*a1 = clip1->getAlphaPtr(); int x,y; char differs=0; for(y=y1;y Strange internal error (2)"); else if(!differs && differs2) { msg(" Bad Bounding Box: Difference in clip0 and clip1 outside bbox"); msg(" %d %d %d %d", x1, y1, x2, y2); } return differs2; } } GBool compare8(unsigned char*data1, unsigned char*data2, int len) { if(!len) return 0; if(((ptroff_t)data1&7)==((ptroff_t)data2&7)) { // oh good, we can align both to 8 byte while((ptroff_t)data1&7) { if(*data1&*data2) return 1; data1++; data2++; if(!--len) return 0; } } /* use 64 bit for the (hopefully aligned) middle section */ int l8 = len/8; long long unsigned int*d1 = (long long unsigned int*)data1; long long unsigned int*d2 = (long long unsigned int*)data2; long long unsigned int x = 0; int t; for(t=0;tgetMode()==splashModeMono1) { /* alternative implementation, using one bit per pixel- needs the no-dither patch in xpdf */ int width = boolpoly->getWidth(); int height = boolpoly->getHeight(); if(!fixBBox(&x1,&y1,&x2,&y2, width, height)) { return gFalse; } Guchar*polypixels = boolpoly->getDataPtr(); Guchar*textpixels = booltext->getDataPtr(); int width8 = (width+7)/8; int runx = width8; int runy = height; if(x1|y1|x2|y2) { polypixels+=y1*width8+x1/8; textpixels+=y1*width8+x1/8; runx=(x2+7)/8 - x1/8; runy=y2-y1; } int t; unsigned char c=0; /*assert(sizeof(unsigned long long int)==8); if(((ptroff_t)polypixels&7) || ((ptroff_t)textpixels&7)) { //msg(" Non-optimal alignment"); }*/ int x,y; unsigned char*data1 = (unsigned char*)polypixels; unsigned char*data2 = (unsigned char*)textpixels; msg(" Testing area (%d,%d,%d,%d), runx=%d,runy=%d,state=%d", x1,y1,x2,y2, runx, runy, dbg_btm_counter); for(y=0;ygetAlphaRowSize(); int height = boolpoly->getHeight(); if(!fixBBox(&x1, &y1, &x2, &y2, width, height)) { x1=y1=0;x2=y2=1; } Guchar*polypixels = boolpoly->getAlphaPtr(); Guchar*textpixels = booltext->getAlphaPtr(); int x,y; char overlap1 = 0; char overlap2 = 0; for(x=x1;xx?ax2:x; ay2 = ay2>y?ay2:y; } } } } if(overlap1 && !overlap2) msg(" strange internal error"); if(!overlap1 && overlap2) { msg(" Bad bounding box: intersection outside bbox"); msg(" given bbox: %d %d %d %d", x1, y1, x2, y2); msg(" changed area: %d %d %d %d", ax1, ay1, ax2, ay2); } return overlap2; } } GBool BitmapOutputDev::checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data), void *abortCheckCbkData) { this->setPage(page); gfxdev->setPage(page); return gTrue; } void BitmapOutputDev::beginPage(GfxState *state, int pageNum) { rgbdev->startPage(pageNum, state); boolpolydev->startPage(pageNum, state); booltextdev->startPage(pageNum, state); clip0dev->startPage(pageNum, state); clip1dev->startPage(pageNum, state); gfxdev->startPage(pageNum, state); boolpolybitmap = boolpolydev->getBitmap(); stalepolybitmap = new SplashBitmap(boolpolybitmap->getWidth(), boolpolybitmap->getHeight(), 1, boolpolybitmap->getMode(), 0); assert(stalepolybitmap->getRowSize() == boolpolybitmap->getRowSize()); booltextbitmap = booltextdev->getBitmap(); staletextbitmap = new SplashBitmap(booltextbitmap->getWidth(), booltextbitmap->getHeight(), 1, booltextbitmap->getMode(), 0); assert(staletextbitmap->getRowSize() == booltextbitmap->getRowSize()); msg(" startPage %dx%d (%dx%d)", this->width, this->height, booltextbitmap->getWidth(), booltextbitmap->getHeight()); clip0bitmap = clip0dev->getBitmap(); clip1bitmap = clip1dev->getBitmap(); rgbbitmap = rgbdev->getBitmap(); flushText(); /* draw white background */ gfxline_t*clippath = gfxline_makerectangle(0, 0, width, height); this->dev->startclip(this->dev, clippath); if(!config_transparent) { gfxcolor_t white = {255,255,255,255}; this->dev->fill(this->dev, clippath, &white); } gfxline_free(clippath); /* just in case any device did draw a white background rectangle into the device */ clearBoolTextDev(); clearBoolPolyDev(); this->layerstate = STATE_PARALLEL; this->emptypage = 1; msg(" startPage done"); } void BitmapOutputDev::endPage() { msg(" endPage (BitmapOutputDev)"); } void BitmapOutputDev::finishPage() { msg(" finishPage (BitmapOutputDev)"); flushEverything(); gfxdev->endPage(); flushEverything(); /* splash will now destroy alpha, and paint the background color into the "holes" in the bitmap */ boolpolydev->endPage(); booltextdev->endPage(); rgbdev->endPage(); clip0dev->endPage(); clip1dev->endPage(); } GBool BitmapOutputDev::upsideDown() { boolpolydev->upsideDown(); booltextdev->upsideDown(); clip0dev->upsideDown(); clip1dev->upsideDown(); return rgbdev->upsideDown(); } GBool BitmapOutputDev::useDrawChar() { boolpolydev->useDrawChar(); booltextdev->useDrawChar(); clip0dev->useDrawChar(); clip1dev->useDrawChar(); return rgbdev->useDrawChar(); } GBool BitmapOutputDev::useTilingPatternFill() { boolpolydev->useTilingPatternFill(); booltextdev->useTilingPatternFill(); clip0dev->useTilingPatternFill(); clip1dev->useTilingPatternFill(); return rgbdev->useTilingPatternFill(); } GBool BitmapOutputDev::useShadedFills() { boolpolydev->useShadedFills(); booltextdev->useShadedFills(); clip0dev->useShadedFills(); clip1dev->useShadedFills(); return rgbdev->useShadedFills(); } GBool BitmapOutputDev::useDrawForm() { boolpolydev->useDrawForm(); booltextdev->useDrawForm(); clip0dev->useDrawForm(); clip1dev->useDrawForm(); return rgbdev->useDrawForm(); } GBool BitmapOutputDev::interpretType3Chars() { boolpolydev->interpretType3Chars(); booltextdev->interpretType3Chars(); clip0dev->interpretType3Chars(); clip1dev->interpretType3Chars(); return rgbdev->interpretType3Chars(); } GBool BitmapOutputDev::needNonText() { boolpolydev->needNonText(); booltextdev->needNonText(); clip0dev->needNonText(); clip1dev->needNonText(); return rgbdev->needNonText(); } void BitmapOutputDev::setDefaultCTM(double *ctm) { boolpolydev->setDefaultCTM(ctm); booltextdev->setDefaultCTM(ctm); rgbdev->setDefaultCTM(ctm); clip0dev->setDefaultCTM(ctm); clip1dev->setDefaultCTM(ctm); gfxdev->setDefaultCTM(ctm); } void BitmapOutputDev::saveState(GfxState *state) { boolpolydev->saveState(state); booltextdev->saveState(state); rgbdev->saveState(state); clip0dev->saveState(state); clip1dev->saveState(state); /*ClipState*cstate = new ClipState(); cstate->next = this->clipstates; this->clipstates = cstate;*/ } void BitmapOutputDev::restoreState(GfxState *state) { boolpolydev->restoreState(state); booltextdev->restoreState(state); rgbdev->restoreState(state); clip0dev->restoreState(state); clip1dev->restoreState(state); /*if(this->clipstates) { ClipState*old = this->clipstates; if(old->written) { gfxdev->restoreState(state); } this->clipstates = this->clipstates->next; delete(old); } else { msg(" invalid restoreState()"); }*/ } void BitmapOutputDev::updateAll(GfxState *state) { boolpolydev->updateAll(state); booltextdev->updateAll(state); rgbdev->updateAll(state); clip0dev->updateAll(state); clip1dev->updateAll(state); gfxdev->updateAll(state); } void BitmapOutputDev::updateCTM(GfxState *state, double m11, double m12, double m21, double m22, double m31, double m32) { boolpolydev->updateCTM(state,m11,m12,m21,m22,m31,m32); booltextdev->updateCTM(state,m11,m12,m21,m22,m31,m32); rgbdev->updateCTM(state,m11,m12,m21,m22,m31,m32); clip0dev->updateCTM(state,m11,m12,m21,m22,m31,m32); clip1dev->updateCTM(state,m11,m12,m21,m22,m31,m32); gfxdev->updateCTM(state,m11,m12,m21,m22,m31,m32); } void BitmapOutputDev::updateLineDash(GfxState *state) { boolpolydev->updateLineDash(state); booltextdev->updateLineDash(state); rgbdev->updateLineDash(state); clip0dev->updateLineDash(state); clip1dev->updateLineDash(state); gfxdev->updateLineDash(state); } void BitmapOutputDev::updateFlatness(GfxState *state) { boolpolydev->updateFlatness(state); booltextdev->updateFlatness(state); rgbdev->updateFlatness(state); clip0dev->updateFlatness(state); clip1dev->updateFlatness(state); gfxdev->updateFlatness(state); } void BitmapOutputDev::updateLineJoin(GfxState *state) { boolpolydev->updateLineJoin(state); booltextdev->updateLineJoin(state); rgbdev->updateLineJoin(state); clip0dev->updateLineJoin(state); clip1dev->updateLineJoin(state); gfxdev->updateLineJoin(state); } void BitmapOutputDev::updateLineCap(GfxState *state) { boolpolydev->updateLineCap(state); booltextdev->updateLineCap(state); rgbdev->updateLineCap(state); clip0dev->updateLineCap(state); clip1dev->updateLineCap(state); gfxdev->updateLineCap(state); } void BitmapOutputDev::updateMiterLimit(GfxState *state) { boolpolydev->updateMiterLimit(state); booltextdev->updateMiterLimit(state); rgbdev->updateMiterLimit(state); clip0dev->updateMiterLimit(state); clip1dev->updateMiterLimit(state); gfxdev->updateMiterLimit(state); } void BitmapOutputDev::updateLineWidth(GfxState *state) { boolpolydev->updateLineWidth(state); booltextdev->updateLineWidth(state); rgbdev->updateLineWidth(state); clip0dev->updateLineWidth(state); clip1dev->updateLineWidth(state); gfxdev->updateLineWidth(state); } void BitmapOutputDev::updateStrokeAdjust(GfxState *state) { boolpolydev->updateStrokeAdjust(state); booltextdev->updateStrokeAdjust(state); rgbdev->updateStrokeAdjust(state); clip0dev->updateStrokeAdjust(state); clip1dev->updateStrokeAdjust(state); gfxdev->updateStrokeAdjust(state); } void BitmapOutputDev::updateFillColorSpace(GfxState *state) { boolpolydev->updateFillColorSpace(state); booltextdev->updateFillColorSpace(state); rgbdev->updateFillColorSpace(state); clip0dev->updateFillColorSpace(state); clip1dev->updateFillColorSpace(state); gfxdev->updateFillColorSpace(state); } void BitmapOutputDev::updateStrokeColorSpace(GfxState *state) { boolpolydev->updateStrokeColorSpace(state); booltextdev->updateStrokeColorSpace(state); rgbdev->updateStrokeColorSpace(state); clip0dev->updateStrokeColorSpace(state); clip1dev->updateStrokeColorSpace(state); gfxdev->updateStrokeColorSpace(state); } void BitmapOutputDev::updateFillColor(GfxState *state) { boolpolydev->updateFillColor(state); booltextdev->updateFillColor(state); rgbdev->updateFillColor(state); clip0dev->updateFillColor(state); clip1dev->updateFillColor(state); gfxdev->updateFillColor(state); } void BitmapOutputDev::updateStrokeColor(GfxState *state) { boolpolydev->updateStrokeColor(state); booltextdev->updateStrokeColor(state); rgbdev->updateStrokeColor(state); clip0dev->updateStrokeColor(state); clip1dev->updateStrokeColor(state); gfxdev->updateStrokeColor(state); } void BitmapOutputDev::updateBlendMode(GfxState *state) { boolpolydev->updateBlendMode(state); booltextdev->updateBlendMode(state); rgbdev->updateBlendMode(state); clip0dev->updateBlendMode(state); clip1dev->updateBlendMode(state); gfxdev->updateBlendMode(state); } void BitmapOutputDev::updateFillOpacity(GfxState *state) { boolpolydev->updateFillOpacity(state); booltextdev->updateFillOpacity(state); rgbdev->updateFillOpacity(state); clip0dev->updateFillOpacity(state); clip1dev->updateFillOpacity(state); gfxdev->updateFillOpacity(state); } void BitmapOutputDev::updateStrokeOpacity(GfxState *state) { boolpolydev->updateStrokeOpacity(state); booltextdev->updateStrokeOpacity(state); rgbdev->updateStrokeOpacity(state); clip0dev->updateStrokeOpacity(state); clip1dev->updateStrokeOpacity(state); gfxdev->updateStrokeOpacity(state); } void BitmapOutputDev::updateFillOverprint(GfxState *state) { boolpolydev->updateFillOverprint(state); booltextdev->updateFillOverprint(state); rgbdev->updateFillOverprint(state); clip0dev->updateFillOverprint(state); clip1dev->updateFillOverprint(state); gfxdev->updateFillOverprint(state); } void BitmapOutputDev::updateStrokeOverprint(GfxState *state) { boolpolydev->updateStrokeOverprint(state); booltextdev->updateStrokeOverprint(state); rgbdev->updateStrokeOverprint(state); clip0dev->updateStrokeOverprint(state); clip1dev->updateStrokeOverprint(state); gfxdev->updateStrokeOverprint(state); } void BitmapOutputDev::updateTransfer(GfxState *state) { boolpolydev->updateTransfer(state); booltextdev->updateTransfer(state); rgbdev->updateTransfer(state); clip0dev->updateTransfer(state); clip1dev->updateTransfer(state); gfxdev->updateTransfer(state); } void BitmapOutputDev::updateFont(GfxState *state) { boolpolydev->updateFont(state); booltextdev->updateFont(state); rgbdev->updateFont(state); clip0dev->updateFont(state); clip1dev->updateFont(state); gfxdev->updateFont(state); } void BitmapOutputDev::updateTextMat(GfxState *state) { boolpolydev->updateTextMat(state); booltextdev->updateTextMat(state); rgbdev->updateTextMat(state); clip0dev->updateTextMat(state); clip1dev->updateTextMat(state); gfxdev->updateTextMat(state); } void BitmapOutputDev::updateCharSpace(GfxState *state) { boolpolydev->updateCharSpace(state); booltextdev->updateCharSpace(state); rgbdev->updateCharSpace(state); clip0dev->updateCharSpace(state); clip1dev->updateCharSpace(state); gfxdev->updateCharSpace(state); } void BitmapOutputDev::updateRender(GfxState *state) { boolpolydev->updateRender(state); booltextdev->updateRender(state); rgbdev->updateRender(state); clip0dev->updateRender(state); clip1dev->updateRender(state); gfxdev->updateRender(state); } void BitmapOutputDev::updateRise(GfxState *state) { boolpolydev->updateRise(state); booltextdev->updateRise(state); rgbdev->updateRise(state); clip0dev->updateRise(state); clip1dev->updateRise(state); gfxdev->updateRise(state); } void BitmapOutputDev::updateWordSpace(GfxState *state) { boolpolydev->updateWordSpace(state); booltextdev->updateWordSpace(state); rgbdev->updateWordSpace(state); clip0dev->updateWordSpace(state); clip1dev->updateWordSpace(state); gfxdev->updateWordSpace(state); } void BitmapOutputDev::updateHorizScaling(GfxState *state) { boolpolydev->updateHorizScaling(state); booltextdev->updateHorizScaling(state); rgbdev->updateHorizScaling(state); clip0dev->updateHorizScaling(state); clip1dev->updateHorizScaling(state); gfxdev->updateHorizScaling(state); } void BitmapOutputDev::updateTextPos(GfxState *state) { boolpolydev->updateTextPos(state); booltextdev->updateTextPos(state); rgbdev->updateTextPos(state); clip0dev->updateTextPos(state); clip1dev->updateTextPos(state); gfxdev->updateTextPos(state); } void BitmapOutputDev::updateTextShift(GfxState *state, double shift) { boolpolydev->updateTextShift(state, shift); booltextdev->updateTextShift(state, shift); rgbdev->updateTextShift(state, shift); clip0dev->updateTextShift(state, shift); clip1dev->updateTextShift(state, shift); gfxdev->updateTextShift(state, shift); } gfxbbox_t BitmapOutputDev::getBBox(GfxState*state) { GfxPath * path = state->getPath(); int num = path->getNumSubpaths(); gfxbbox_t bbox = {0,0,1,1}; char valid=0; int t; for(t = 0; t < num; t++) { GfxSubpath *subpath = path->getSubpath(t); int subnum = subpath->getNumPoints(); int s; for(s=0;stransform(subpath->getX(s),subpath->getY(s),&x,&y); if(!valid) { bbox.xmin = x; bbox.ymin = y; bbox.xmax = x; bbox.ymax = y; valid = 1; } else { bbox.xmin = fmin(bbox.xmin, x); bbox.ymin = fmin(bbox.ymin, y); bbox.xmax = fmax(bbox.xmax, x); bbox.ymax = fmax(bbox.ymax, y); } } } return bbox; } void BitmapOutputDev::stroke(GfxState *state) { msg(" stroke"); boolpolydev->stroke(state); gfxbbox_t bbox = getBBox(state); double width = ceil(state->getTransformedLineWidth()); bbox.xmin -= width; bbox.ymin -= width; bbox.xmax += width; bbox.ymax += width; checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->stroke(state); dbg_newdata("stroke"); } char area_is_plain_colored(GfxState*state, SplashBitmap*boolpoly, SplashBitmap*rgbbitmap, int x1, int y1, int x2, int y2) { int width = boolpoly->getWidth(); int height = boolpoly->getHeight(); if(!fixBBox(&x1, &y1, &x2, &y2, width, height)) { return 0; } gfxcolor_t color = gfxstate_getfillcolor(state); SplashColorPtr rgb = rgbbitmap->getDataPtr() + (y1*width+x1)*sizeof(SplashColor); int width8 = (width+7)/8; unsigned char*bits = (unsigned char*)boolpoly->getDataPtr() + (y1*width8+x1); int x,y; int w = x2-x1; int h = y2-y1; for(y=0;y fill"); boolpolydev->fill(state); gfxbbox_t bbox = getBBox(state); if(config_optimizeplaincolorfills) { if(area_is_plain_colored(state, boolpolybitmap, rgbbitmap, bbox.xmin, bbox.ymin, bbox.xmax, bbox.ymax)) { return; } } checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->fill(state); dbg_newdata("fill"); } void BitmapOutputDev::eoFill(GfxState *state) { msg(" eoFill"); boolpolydev->eoFill(state); gfxbbox_t bbox = getBBox(state); checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->eoFill(state); dbg_newdata("eofill"); } POPPLER_TILING_PATERN_RETURN BitmapOutputDev::tilingPatternFill(GfxState *state, POPPLER_TILING_PATERN_GFX Object *str, int paintType, Dict *resDict, double *mat, double *bbox, int x0, int y0, int x1, int y1, double xStep, double yStep) { msg(" tilingPatternFill"); boolpolydev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat, bbox, x0, y0, x1, y1, xStep, yStep); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->tilingPatternFill(state, POPPLER_TILING_PATERN_GFX_ARG str, paintType, resDict, mat, bbox, x0, y0, x1, y1, xStep, yStep); dbg_newdata("tilingpatternfill"); #ifdef HAVE_POPPLER return gTrue; #endif } GBool BitmapOutputDev::functionShadedFill(GfxState *state, GfxFunctionShading *shading) { msg(" functionShadedFill"); boolpolydev->functionShadedFill(state, shading); checkNewBitmap(UNKNOWN_BOUNDING_BOX); return rgbdev->functionShadedFill(state, shading); } GBool BitmapOutputDev::axialShadedFill(GfxState *state, GfxAxialShading *shading POPPLER_RAXIAL_MIN_MAX) { msg(" axialShadedFill"); boolpolydev->axialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); checkNewBitmap(UNKNOWN_BOUNDING_BOX); return rgbdev->axialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); } GBool BitmapOutputDev::radialShadedFill(GfxState *state, GfxRadialShading *shading POPPLER_RAXIAL_MIN_MAX) { msg(" radialShadedFill"); boolpolydev->radialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); checkNewBitmap(UNKNOWN_BOUNDING_BOX); return rgbdev->radialShadedFill(state, shading POPPLER_RAXIAL_MIN_MAX_ARG); } SplashColor black = {0,0,0}; SplashColor white = {255,255,255}; void BitmapOutputDev::clip(GfxState *state) { msg(" clip"); boolpolydev->clip(state); booltextdev->clip(state); rgbdev->clip(state); clip1dev->clip(state); } void BitmapOutputDev::eoClip(GfxState *state) { msg(" eoClip"); boolpolydev->eoClip(state); booltextdev->eoClip(state); rgbdev->eoClip(state); clip1dev->eoClip(state); } void BitmapOutputDev::clipToStrokePath(GfxState *state) { msg(" clipToStrokePath"); boolpolydev->clipToStrokePath(state); booltextdev->clipToStrokePath(state); rgbdev->clipToStrokePath(state); clip1dev->clipToStrokePath(state); } void BitmapOutputDev::beginStringOp(GfxState *state) { msg(" beginStringOp"); clip0dev->beginStringOp(state); clip1dev->beginStringOp(state); booltextdev->beginStringOp(state); gfxdev->beginStringOp(state); } void BitmapOutputDev::beginString(GfxState *state, GString *s) { msg(" beginString"); clip0dev->beginString(state, s); clip1dev->beginString(state, s); booltextdev->beginString(state, s); gfxdev->beginString(state, s); text_x1 = INT_MAX; text_y1 = INT_MAX; text_x2 = INT_MIN; text_y2 = INT_MIN; this->gfxdev->setDevice(this->gfxoutput_string); } void BitmapOutputDev::clearClips(int x1, int y1, int x2, int y2) { clearBooleanBitmap(clip0bitmap, x1,y1,x2,y2); clearBooleanBitmap(clip1bitmap, x1,y1,x2,y2); } void BitmapOutputDev::clearBoolPolyDev() { clearBooleanBitmap(stalepolybitmap, 0, 0, stalepolybitmap->getWidth(), stalepolybitmap->getHeight()); } void BitmapOutputDev::clearBoolTextDev() { clearBooleanBitmap(staletextbitmap, 0, 0, staletextbitmap->getWidth(), staletextbitmap->getHeight()); } #define USE_GETGLYPH_BBOX static void getGlyphBbox(GfxState*state, SplashOutputDev*splash, double x, double y, double originX, double originY, CharCode code, int*_x1, int*_y1, int*_x2, int*_y2) { #ifdef USE_GETGLYPH_BBOX /* use getglyph to derive bounding box */ if(splash->needFontUpdate) { splash->doUpdateFont(state); } SplashGlyphBitmap glyph; double xt,yt; state->transform(x-originX, y-originY, &xt, &yt); int x1 = (int)xt, x2 = (int)xt+1, y1 = (int)yt, y2 = (int)yt+1; SplashFont*font = splash->getCurrentFont(); int x0 = splashFloor(xt); int xFrac = splashFloor((xt - x0) * splashFontFraction); int y0 = splashFloor(yt); int yFrac = splashFloor((yt - y0) * splashFontFraction); SplashCoord*matrix = font->getMatrix(); if(font && font->getGlyph(code, xFrac, yFrac, &glyph)) { x1 = floor(x0-glyph.x); y1 = floor(y0-glyph.y); x2 = ceil(x0-glyph.x+glyph.w); y2 = ceil(y0-glyph.y+glyph.h); if (glyph.freeData) { gfree(glyph.data); } } #else /* derive bounding box from the polygon path */ double x0,y0; state->transform(x-originX,y-originY,&x0,&y0); int x1 = (int)x0, x2 = (int)x0+1, y1 = (int)y0, y2 = (int)y0+1; SplashFont*font = clip0dev->getCurrentFont(); SplashPath*path = font?font->getGlyphPath(code):NULL; if(path) { path->offset((SplashCoord)x, (SplashCoord)y); int t; for(t=0;tgetLength();t++) { double xx,yy; Guchar f; path->getPoint(t,&xx,&yy,&f); state->transform(xx,yy,&xx,&yy); int px = (int)xx; int py = (int)yy; if(!t) { x1=x2=px; y1=y2=py; } if(xx=x2) x2=px+1; if(yy>=y2) y2=py+1; } delete(path);path=0; } #endif *_x1 = x1; *_y1 = y1; *_x2 = x2; *_y2 = y2; } void BitmapOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen) { msg(" drawChar render=%d", state->getRender()); char render_as_bitmap = 0; if(config_skewedtobitmap) { if(text_matrix_is_skewed(state)) { render_as_bitmap = 1; } } if(config_alphatobitmap) { double opaq = state->getFillOpacity(); if(opaq < 0.9) render_as_bitmap = 1; } if((state->getRender()&3)) { render_as_bitmap = 1; } if(state->getRender()&RENDER_CLIP) { //char is, amongst others, a clipping boundary rgbdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); boolpolydev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); booltextdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); clip1dev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); } else if(rgbbitmap != rgbdev->getBitmap()) { // we're doing softmasking or transparency grouping boolpolydev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); rgbdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); } else { // we're drawing a regular char int x1, y1, x2, y2; /* Calculate the bbox of this character (relative to splash's coordinate system, which is offset from our coordinate system by (-movex,-movey)) */ getGlyphBbox(state, boolpolydev, x, y, originX, originY, code, &x1, &y1, &x2, &y2); if(x1 < text_x1) text_x1 = x1; if(y1 < text_y1) text_y1 = y1; if(x2 > text_x2) text_x2 = x2; if(y2 > text_y2) text_y2 = y2; /* only clear the area we're going to check */ clearClips(x1,y1,x2,y2); clip0dev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); clip1dev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); int page_area_x1 = -this->movex; int page_area_y1 = -this->movey; int page_area_x2 = this->width-this->movex; int page_area_y2 = this->height-this->movey; char char_is_outside = (x1page_area_x2 || y2>page_area_y2); /* if this character is affected somehow by the various clippings (i.e., it looks different on a device without clipping), then draw it on the bitmap, not as text */ if(char_is_outside || render_as_bitmap || clip0and1differ(x1,y1,x2,y2)) { if(char_is_outside) msg(" Char %d is outside the page (%d,%d,%d,%d)", code, x1, y1, x2, y2); else if(render_as_bitmap) msg(" Char %d needs to be rendered as bitmap", code); else msg(" Char %d is affected by clipping", code); boolpolydev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); checkNewBitmap(x1,y1,x2,y2); rgbdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); if(config_extrafontdata && render_as_bitmap) { /* we draw invisible glyphs on top of the bitmap text for text selection. We don't do this for clipped text, though- there's no way the pass 1 font logic would know that the text will end up being clipped */ int oldrender = state->getRender(); state->setRender(3); //invisible gfxdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); state->setRender(oldrender); } } else { /* this char is not at all affected by clipping. Now just dump out the bitmap we're currently working on, if necessary. */ booltextdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); gfxdev->drawChar(state, x, y, dx, dy, originX, originY, code, nBytes, u, uLen); } } dbg_newdata("text"); } void BitmapOutputDev::drawString(GfxState *state, GString *s) { msg(" internal error: drawString not implemented"); return; } void BitmapOutputDev::endTextObject(GfxState *state) { msg(" endTextObject"); rgbdev->endTextObject(state); clip0dev->endTextObject(state); clip1dev->endTextObject(state); booltextdev->endTextObject(state); /* the only thing "drawn" here is clipping */ //checkNewText(UNKNOWN_BOUNDING_BOX); gfxdev->endTextObject(state); dbg_newdata("endtextobject"); } void BitmapOutputDev::endString(GfxState *state) { msg(" endString"); clip0dev->endString(state); clip1dev->endString(state); booltextdev->endString(state); gfxdev->endString(state); dbg_newdata("endstring"); checkNewText(text_x1,text_y1,text_x2,text_y2); gfxdevice_record_flush(this->gfxoutput_string, this->gfxoutput, 0); this->gfxdev->setDevice(this->gfxoutput); } void BitmapOutputDev::endStringOp(GfxState *state) { msg(" endStringOp"); clip0dev->endStringOp(state); clip1dev->endStringOp(state); booltextdev->endStringOp(state); gfxdev->endStringOp(state); dbg_newdata("endstringop"); } /* TODO: these four operations below *should* do nothing, as type3 chars are drawn using operations like fill() */ GBool BitmapOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen) { msg(" beginType3Char"); /* call gfxdev so that it can generate "invisible" characters on top of the actual graphic content, for text extraction */ return gfxdev->beginType3Char(state, x, y, dx, dy, code, u, uLen); } void BitmapOutputDev::type3D0(GfxState *state, double wx, double wy) { msg(" type3D0"); return gfxdev->type3D0(state, wx, wy); } void BitmapOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { msg(" type3D1"); return gfxdev->type3D1(state, wx, wy, llx, lly, urx, ury); } void BitmapOutputDev::endType3Char(GfxState *state) { msg(" endType3Char"); gfxdev->endType3Char(state); } class CopyStream: public Object { Dict*dict; char*buf; MemStream*memstream; public: CopyStream(Stream*str, int len) { buf = 0; str->reset(); if(len) { buf = (char*)malloc(len); int t; for (t=0; tgetChar(); } str->close(); this->dict = str->getDict(); this->memstream = new MemStream(buf, 0, len, this); } ~CopyStream() { ::free(this->buf);this->buf = 0; delete this->memstream; } Dict* getDict() {return dict;} Stream* getStream() {return this->memstream;}; }; gfxbbox_t BitmapOutputDev::getImageBBox(GfxState*state) { gfxbbox_t bbox; double x,y; state->transform(0, 1, &x, &y); bbox.xmin=bbox.xmax = x; bbox.ymin=bbox.ymax = y; state->transform(0, 0, &x, &y); bbox.xmin=fmin(bbox.xmin,x); bbox.ymin=fmin(bbox.ymin,y); bbox.xmax=fmax(bbox.xmax,x); bbox.ymax=fmax(bbox.ymax,y); state->transform(1, 0, &x, &y); bbox.xmin=fmin(bbox.xmin,x); bbox.ymin=fmin(bbox.ymin,y); bbox.xmax=fmax(bbox.xmax,x); bbox.ymax=fmax(bbox.ymax,y); state->transform(1, 1, &x, &y); bbox.xmin=fmin(bbox.xmin,x); bbox.ymin=fmin(bbox.ymin,y); bbox.xmax=fmax(bbox.xmax,x); bbox.ymax=fmax(bbox.ymax,y); return bbox; } GBool invalid_size(int width, int height) { if((U64)width*(U64)height > 0x7fffffffll) return 1; return 0; } void BitmapOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg) { msg(" drawImageMask streamkind=%d", str->getKind()); if(invalid_size(width,height)) return; CopyStream*cpystr = new CopyStream(str, height * ((width + 7) / 8)); str = cpystr->getStream(); boolpolydev->drawImageMask(state, ref, str, width, height, invert, POPPLER_INTERPOLATE_ARG inlineImg); gfxbbox_t bbox = getImageBBox(state); checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->drawImageMask(state, ref, str, width, height, invert, POPPLER_INTERPOLATE_ARG inlineImg); delete cpystr; dbg_newdata("imagemask"); } void BitmapOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg) { msg(" drawImage streamkind=%d", str->getKind()); if(invalid_size(width,height)) return; CopyStream*cpystr = new CopyStream(str, height * ((width * colorMap->getNumPixelComps() * colorMap->getBits() + 7) / 8)); str = cpystr->getStream(); boolpolydev->drawImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskColors, inlineImg); gfxbbox_t bbox=getImageBBox(state); checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->drawImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskColors, inlineImg); delete cpystr; dbg_newdata("image"); } void BitmapOutputDev::drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE) { msg(" drawMaskedImage streamkind=%d", str->getKind()); if(invalid_size(width,height)) return; CopyStream*cpystr = new CopyStream(str, height * ((width * colorMap->getNumPixelComps() * colorMap->getBits() + 7) / 8)); str = cpystr->getStream(); boolpolydev->drawMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskInvert POPPLER_MASK_INTERPOLATE_ARG); gfxbbox_t bbox=getImageBBox(state); checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->drawMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskInvert POPPLER_MASK_INTERPOLATE_ARG); delete cpystr; dbg_newdata("maskedimage"); } void BitmapOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE) { msg(" drawSoftMaskedImage %dx%d (%dx%d) streamkind=%d", width, height, maskWidth, maskHeight, str->getKind()); if(invalid_size(width,height)) return; CopyStream*cpystr = new CopyStream(str, height * ((width * colorMap->getNumPixelComps() * colorMap->getBits() + 7) / 8)); str = cpystr->getStream(); boolpolydev->drawSoftMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskColorMap POPPLER_MASK_INTERPOLATE_ARG); gfxbbox_t bbox=getImageBBox(state); checkNewBitmap(bbox.xmin, bbox.ymin, ceil(bbox.xmax), ceil(bbox.ymax)); rgbdev->drawSoftMaskedImage(state, ref, str, width, height, colorMap, POPPLER_INTERPOLATE_ARG maskStr, maskWidth, maskHeight, maskColorMap POPPLER_MASK_INTERPOLATE_ARG); delete cpystr; dbg_newdata("softmaskimage"); } void BitmapOutputDev::drawForm(Ref id) { msg(" drawForm"); boolpolydev->drawForm(id); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->drawForm(id); } void BitmapOutputDev::processLink(Link *link, Catalog *catalog) { msg(" processLink"); gfxdev->processLink(link, catalog); } void BitmapOutputDev::flushEverything() { if(layerstate == STATE_BITMAP_IS_ABOVE) { this->flushText(); this->flushBitmap(); } else { this->flushBitmap(); this->flushText(); } } void BitmapOutputDev::beginTransparencyGroup(GfxState *state, double *bbox, GfxColorSpace *blendingColorSpace, GBool isolated, GBool knockout, GBool forSoftMask) { msg(" beginTransparencyGroup"); #if (xpdfMajorVersion*10000 + xpdfMinorVersion*100 + xpdfUpdateVersion) < 30207 GfxState*state1 = state->copy(); GfxState*state2 = state->copy(); state1->setPath(0); state1->setPath(state->getPath()->copy()); state2->setPath(0); state2->setPath(state->getPath()->copy()); #else GfxState*state1 = state->copy(gTrue); GfxState*state2 = state->copy(gTrue); #endif boolpolydev->beginTransparencyGroup(state1, bbox, blendingColorSpace, isolated, knockout, forSoftMask); rgbdev->beginTransparencyGroup(state2, bbox, blendingColorSpace, isolated, knockout, forSoftMask); clip1dev->beginTransparencyGroup(state, bbox, blendingColorSpace, isolated, knockout, forSoftMask); delete state1; delete state2; dbg_newdata("endtransparencygroup"); } void BitmapOutputDev::endTransparencyGroup(GfxState *state) { msg(" endTransparencyGroup"); #if (xpdfMajorVersion*10000 + xpdfMinorVersion*100 + xpdfUpdateVersion) < 30207 GfxState*state1 = state->copy(); GfxState*state2 = state->copy(); state1->setPath(0); state1->setPath(state->getPath()->copy()); state2->setPath(0); state2->setPath(state->getPath()->copy()); #else GfxState*state1 = state->copy(gTrue); GfxState*state2 = state->copy(gTrue); #endif boolpolydev->endTransparencyGroup(state1); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->endTransparencyGroup(state2); delete state1; delete state2; clip1dev->endTransparencyGroup(state); dbg_newdata("endtransparencygroup"); } void BitmapOutputDev::paintTransparencyGroup(GfxState *state, double *bbox) { msg(" paintTransparencyGroup"); boolpolydev->paintTransparencyGroup(state,bbox); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->paintTransparencyGroup(state,bbox); clip1dev->paintTransparencyGroup(state,bbox); dbg_newdata("painttransparencygroup"); } void BitmapOutputDev::setSoftMask(GfxState *state, double *bbox, GBool alpha, Function *transferFunc, GfxColor *backdropColor) { msg(" setSoftMask"); boolpolydev->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); clip1dev->setSoftMask(state, bbox, alpha, transferFunc, backdropColor); dbg_newdata("setsoftmask"); } void BitmapOutputDev::clearSoftMask(GfxState *state) { msg(" clearSoftMask"); boolpolydev->clearSoftMask(state); checkNewBitmap(UNKNOWN_BOUNDING_BOX); rgbdev->clearSoftMask(state); clip1dev->clearSoftMask(state); dbg_newdata("clearsoftmask"); } swftools_0.9.2+git20130725.orig/lib/pdf/fonts.c0000644000175000017500001037615412216332640020160 0ustar gawaingawain#include "fonts.h" int d050000l_afm_len = 9381; char* d050000l_afm = "StartFontMetrics 3.0\nComment Copyright URW Software, Copyright 1997 by URW\nCom" "ment Creation Date: 10/19/1999\nComment See the file COPYING (GNU General Public" " License) for license conditions.\nFontName Dingbats\nFullName Dingbats \nFamily" "Name Dingbats\nWeight Regular\nItalicAngle 0.0\nIsFixedPitch false\nUnderlinePos" "ition -72\nUnderlineThickness 36\nVersion 001.005\nNotice URW Software, Copyrigh" "t 1997 by URW\nEncodingScheme FontSpecific\nFontBBox -1 -143 981 819\nCapHeight " "691\nXHeight 567\nDescender -143\nAscender 691\nStartCharMetrics 203\nC 32 ; WX " "278 ; N space ; B 0 0 0 0 ;\nC 33 ; WX 974 ; N a1 ; B 35 71 939 617 ;\nC 34 ; WX" " 961 ; N a2 ; B 35 81 927 611 ;\nC 35 ; WX 974 ; N a202 ; B 35 69 939 615 ;\nC 3" "6 ; WX 980 ; N a3 ; B 35 0 945 691 ;\nC 37 ; WX 719 ; N a4 ; B 34 138 685 566 ;\n" "C 38 ; WX 789 ; N a5 ; B 35 -13 755 707 ;\nC 39 ; WX 790 ; N a119 ; B 35 -14 755" " 706 ;\nC 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;\nC 41 ; WX 690 ; N a117 ; B " "35 137 655 556 ;\nC 42 ; WX 960 ; N a11 ; B 35 122 925 568 ;\nC 43 ; WX 939 ; N " "a12 ; B 35 133 904 559 ;\nC 44 ; WX 549 ; N a13 ; B 29 -10 516 706 ;\nC 45 ; WX " "855 ; N a14 ; B 33 59 820 632 ;\nC 46 ; WX 911 ; N a15 ; B 35 51 876 641 ;\nC 47" " ; WX 933 ; N a16 ; B 35 141 899 550 ;\nC 48 ; WX 911 ; N a105 ; B 35 49 876 636" " ;\nC 49 ; WX 945 ; N a17 ; B 35 139 909 550 ;\nC 50 ; WX 974 ; N a18 ; B 35 103" " 938 588 ;\nC 51 ; WX 755 ; N a19 ; B 34 -14 721 706 ;\nC 52 ; WX 846 ; N a20 ; " "B 36 -14 811 706 ;\nC 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;\nC 54 ; WX 761 ; N " "a22 ; B 35 0 727 692 ;\nC 55 ; WX 571 ; N a23 ; B -1 -69 572 660 ;\nC 56 ; WX 67" "7 ; N a24 ; B 36 -14 642 705 ;\nC 57 ; WX 763 ; N a25 ; B 35 0 728 694 ;\nC 58 ;" " WX 760 ; N a26 ; B 35 0 726 691 ;\nC 59 ; WX 759 ; N a27 ; B 35 0 725 690 ;\nC " "60 ; WX 754 ; N a28 ; B 35 0 720 685 ;\nC 61 ; WX 494 ; N a6 ; B 35 0 460 691 ;\n" "C 62 ; WX 552 ; N a7 ; B 35 0 517 691 ;\nC 63 ; WX 537 ; N a8 ; B 35 0 503 691 ;" "\nC 64 ; WX 577 ; N a9 ; B 35 96 542 595 ;\nC 65 ; WX 692 ; N a10 ; B 35 -14 657" " 702 ;\nC 66 ; WX 786 ; N a29 ; B 35 -13 751 705 ;\nC 67 ; WX 788 ; N a30 ; B 35" " -14 752 703 ;\nC 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;\nC 69 ; WX 790 ; N a3" "2 ; B 35 -14 756 707 ;\nC 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;\nC 71 ; WX 79" "4 ; N a34 ; B 35 -14 759 705 ;\nC 72 ; WX 816 ; N a35 ; B 35 -13 782 707 ;\nC 73" " ; WX 823 ; N a36 ; B 35 2 787 719 ;\nC 74 ; WX 789 ; N a37 ; B 35 -13 754 706 ;" "\nC 75 ; WX 841 ; N a38 ; B 35 -14 807 706 ;\nC 76 ; WX 823 ; N a39 ; B 35 -12 7" "89 706 ;\nC 77 ; WX 833 ; N a40 ; B 35 -14 798 706 ;\nC 78 ; WX 816 ; N a41 ; B " "35 -13 782 705 ;\nC 79 ; WX 831 ; N a42 ; B 35 -13 796 707 ;\nC 80 ; WX 923 ; N " "a43 ; B 35 -13 888 706 ;\nC 81 ; WX 744 ; N a44 ; B 35 0 710 691 ;\nC 82 ; WX 72" "3 ; N a45 ; B 35 0 688 691 ;\nC 83 ; WX 749 ; N a46 ; B 35 0 714 691 ;\nC 84 ; W" "X 790 ; N a47 ; B 34 -15 756 706 ;\nC 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;\n" "C 86 ; WX 695 ; N a49 ; B 35 -16 661 706 ;\nC 87 ; WX 776 ; N a50 ; B 35 -7 741 " "698 ;\nC 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;\nC 89 ; WX 792 ; N a52 ; B 35 -" "1 757 720 ;\nC 90 ; WX 759 ; N a53 ; B 35 0 725 693 ;\nC 91 ; WX 707 ; N a54 ; B" " 35 -11 672 704 ;\nC 92 ; WX 708 ; N a55 ; B 35 -14 672 704 ;\nC 93 ; WX 682 ; N" " a56 ; B 35 -3 647 694 ;\nC 94 ; WX 701 ; N a57 ; B 35 -13 666 708 ;\nC 95 ; WX " "826 ; N a58 ; B 35 -18 791 716 ;\nC 96 ; WX 815 ; N a59 ; B 35 -16 780 705 ;\nC " "97 ; WX 789 ; N a60 ; B 35 -14 754 704 ;\nC 98 ; WX 789 ; N a61 ; B 35 -14 754 7" "04 ;\nC 99 ; WX 707 ; N a62 ; B 33 0 674 717 ;\nC 100 ; WX 687 ; N a63 ; B 36 0 " "651 688 ;\nC 101 ; WX 696 ; N a64 ; B 35 0 661 693 ;\nC 102 ; WX 689 ; N a65 ; B" " 35 0 655 681 ;\nC 103 ; WX 786 ; N a66 ; B 34 -14 751 703 ;\nC 104 ; WX 787 ; N" " a67 ; B 35 -15 752 704 ;\nC 105 ; WX 713 ; N a68 ; B 35 -13 678 709 ;\nC 106 ; " "WX 791 ; N a69 ; B 35 -14 756 707 ;\nC 107 ; WX 785 ; N a70 ; B 36 -14 751 701 ;" "\nC 108 ; WX 791 ; N a71 ; B 35 -14 757 708 ;\nC 109 ; WX 873 ; N a72 ; B 35 -13" " 838 705 ;\nC 110 ; WX 761 ; N a73 ; B 35 0 726 691 ;\nC 111 ; WX 762 ; N a74 ; " "B 35 0 727 691 ;\nC 112 ; WX 762 ; N a203 ; B 35 0 727 691 ;\nC 113 ; WX 759 ; N" " a75 ; B 35 0 725 691 ;\nC 114 ; WX 759 ; N a204 ; B 35 0 725 691 ;\nC 115 ; WX " "892 ; N a76 ; B 35 0 858 706 ;\nC 116 ; WX 892 ; N a77 ; B 35 -14 858 691 ;\nC 1" "17 ; WX 788 ; N a78 ; B 35 -14 754 705 ;\nC 118 ; WX 784 ; N a79 ; B 35 -14 749 " "705 ;\nC 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;\nC 120 ; WX 138 ; N a82 ; B 3" "5 0 104 691 ;\nC 121 ; WX 277 ; N a83 ; B 35 0 242 691 ;\nC 122 ; WX 415 ; N a84" " ; B 35 0 380 691 ;\nC 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;\nC 124 ; WX 392" " ; N a98 ; B 34 262 357 705 ;\nC 125 ; WX 668 ; N a99 ; B 35 263 633 707 ;\nC 12" "6 ; WX 668 ; N a100 ; B 36 261 634 705 ;\nC 161 ; WX 732 ; N a101 ; B 35 -143 69" "7 805 ;\nC 162 ; WX 544 ; N a102 ; B 56 -14 488 705 ;\nC 163 ; WX 544 ; N a103 ;" " B 34 -14 508 704 ;\nC 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;\nC 165 ; WX 667" " ; N a106 ; B 35 -13 633 706 ;\nC 166 ; WX 760 ; N a107 ; B 35 -13 726 705 ;\nC " "167 ; WX 760 ; N a108 ; B 0 121 758 570 ;\nC 168 ; WX 776 ; N a112 ; B 35 0 741 " "705 ;\nC 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;\nC 170 ; WX 694 ; N a110 ; B" " 35 -14 659 704 ;\nC 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;\nC 172 ; WX 788 ; " "N a120 ; B 35 -13 754 706 ;\nC 173 ; WX 788 ; N a121 ; B 35 -13 754 706 ;\nC 174" " ; WX 788 ; N a122 ; B 35 -13 754 706 ;\nC 175 ; WX 788 ; N a123 ; B 35 -14 754 " "705 ;\nC 176 ; WX 788 ; N a124 ; B 35 -13 754 706 ;\nC 177 ; WX 788 ; N a125 ; B" " 35 -13 754 706 ;\nC 178 ; WX 788 ; N a126 ; B 35 -13 754 706 ;\nC 179 ; WX 788 " "; N a127 ; B 35 -13 754 706 ;\nC 180 ; WX 788 ; N a128 ; B 35 -13 754 706 ;\nC 1" "81 ; WX 788 ; N a129 ; B 35 -13 754 706 ;\nC 182 ; WX 788 ; N a130 ; B 35 -13 75" "4 706 ;\nC 183 ; WX 788 ; N a131 ; B 35 -13 754 706 ;\nC 184 ; WX 788 ; N a132 ;" " B 35 -13 754 706 ;\nC 185 ; WX 788 ; N a133 ; B 35 -13 754 706 ;\nC 186 ; WX 78" "8 ; N a134 ; B 35 -13 754 706 ;\nC 187 ; WX 788 ; N a135 ; B 35 -13 754 706 ;\nC" " 188 ; WX 788 ; N a136 ; B 35 -13 754 706 ;\nC 189 ; WX 788 ; N a137 ; B 35 -13 " "754 706 ;\nC 190 ; WX 788 ; N a138 ; B 35 -13 754 706 ;\nC 191 ; WX 788 ; N a139" " ; B 35 -13 754 706 ;\nC 192 ; WX 788 ; N a140 ; B 35 -13 754 706 ;\nC 193 ; WX " "788 ; N a141 ; B 35 -13 754 706 ;\nC 194 ; WX 788 ; N a142 ; B 35 -13 754 706 ;\n" "C 195 ; WX 788 ; N a143 ; B 35 -13 754 706 ;\nC 196 ; WX 788 ; N a144 ; B 35 -13" " 754 706 ;\nC 197 ; WX 788 ; N a145 ; B 35 -13 754 706 ;\nC 198 ; WX 788 ; N a14" "6 ; B 35 -13 754 706 ;\nC 199 ; WX 788 ; N a147 ; B 35 -13 754 706 ;\nC 200 ; WX" " 788 ; N a148 ; B 35 -13 754 706 ;\nC 201 ; WX 788 ; N a149 ; B 35 -13 754 706 ;" "\nC 202 ; WX 788 ; N a150 ; B 35 -13 755 706 ;\nC 203 ; WX 788 ; N a151 ; B 34 -" "13 754 706 ;\nC 204 ; WX 788 ; N a152 ; B 34 -13 754 706 ;\nC 205 ; WX 788 ; N a" "153 ; B 35 -13 754 706 ;\nC 206 ; WX 788 ; N a154 ; B 35 -13 754 706 ;\nC 207 ; " "WX 788 ; N a155 ; B 35 -13 754 706 ;\nC 208 ; WX 788 ; N a156 ; B 35 -13 754 706" " ;\nC 209 ; WX 788 ; N a157 ; B 35 -13 754 706 ;\nC 210 ; WX 788 ; N a158 ; B 35" " -13 754 706 ;\nC 211 ; WX 788 ; N a159 ; B 35 -13 754 706 ;\nC 212 ; WX 894 ; N" " a160 ; B 35 58 860 634 ;\nC 213 ; WX 838 ; N a161 ; B 35 151 803 537 ;\nC 214 ;" " WX 1016 ; N a163 ; B 34 151 981 537 ;\nC 215 ; WX 458 ; N a164 ; B 35 -128 422 " "819 ;\nC 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;\nC 217 ; WX 924 ; N a165 ; B " "35 140 890 551 ;\nC 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;\nC 219 ; WX 918 ; " "N a166 ; B 35 167 884 526 ;\nC 220 ; WX 927 ; N a167 ; B 35 28 892 664 ;\nC 221 " "; WX 928 ; N a168 ; B 35 129 891 562 ;\nC 222 ; WX 928 ; N a169 ; B 35 129 893 5" "61 ;\nC 223 ; WX 834 ; N a170 ; B 35 154 799 537 ;\nC 224 ; WX 873 ; N a171 ; B " "35 97 838 594 ;\nC 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;\nC 226 ; WX 924 ; " "N a173 ; B 35 82 889 610 ;\nC 227 ; WX 924 ; N a162 ; B 35 82 889 610 ;\nC 228 ;" " WX 917 ; N a174 ; B 35 4 882 688 ;\nC 229 ; WX 930 ; N a175 ; B 35 83 896 608 ;" "\nC 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;\nC 231 ; WX 463 ; N a177 ; B 35 -1" "00 429 790 ;\nC 232 ; WX 883 ; N a178 ; B 35 70 848 621 ;\nC 233 ; WX 836 ; N a1" "79 ; B 35 43 802 648 ;\nC 234 ; WX 836 ; N a193 ; B 35 43 802 648 ;\nC 235 ; WX " "867 ; N a180 ; B 35 101 832 589 ;\nC 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;\n" "C 237 ; WX 696 ; N a181 ; B 35 44 661 651 ;\nC 238 ; WX 696 ; N a200 ; B 35 44 6" "61 646 ;\nC 239 ; WX 874 ; N a182 ; B 35 75 840 613 ;\nC 241 ; WX 874 ; N a201 ;" " B 35 75 840 613 ;\nC 242 ; WX 760 ; N a183 ; B 35 1 725 690 ;\nC 243 ; WX 946 ;" " N a184 ; B 35 159 911 532 ;\nC 244 ; WX 771 ; N a197 ; B 34 36 736 655 ;\nC 245" " ; WX 865 ; N a185 ; B 35 209 830 483 ;\nC 246 ; WX 771 ; N a194 ; B 34 36 736 6" "55 ;\nC 247 ; WX 888 ; N a198 ; B 34 -18 853 711 ;\nC 248 ; WX 967 ; N a186 ; B " "35 123 932 568 ;\nC 249 ; WX 888 ; N a195 ; B 34 -20 853 710 ;\nC 250 ; WX 831 ;" " N a187 ; B 35 113 796 578 ;\nC 251 ; WX 873 ; N a188 ; B 36 116 838 576 ;\nC 25" "2 ; WX 927 ; N a189 ; B 35 149 891 542 ;\nC 253 ; WX 970 ; N a190 ; B 35 75 931 " "615 ;\nC 254 ; WX 918 ; N a191 ; B 34 99 884 592 ;\nC -1 ; WX 334 ; N a95 ; B 35" " 0 299 691 ;\nC -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ;\nC -1 ; WX 234 ; N a87 " "; B 35 -14 199 705 ;\nC -1 ; WX 410 ; N a86 ; B 35 0 375 691 ;\nC -1 ; WX 410 ; " "N a206 ; B 35 0 375 691 ;\nC -1 ; WX 509 ; N a85 ; B 35 0 475 691 ;\nC -1 ; WX 3" "34 ; N a96 ; B 35 0 299 691 ;\nC -1 ; WX 276 ; N a91 ; B 35 0 242 691 ;\nC -1 ; " "WX 317 ; N a94 ; B 35 0 283 691 ;\nC -1 ; WX 317 ; N a93 ; B 35 0 283 691 ;\nC -" "1 ; WX 390 ; N a90 ; B 35 -14 355 705 ;\nC -1 ; WX 390 ; N a89 ; B 35 -14 356 70" "5 ;\nC -1 ; WX 276 ; N a92 ; B 35 0 242 691 ;\nC -1 ; WX 509 ; N a205 ; B 35 0 4" "75 691 ;\nC -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;\nEndCharMetrics\nEndFontMetric" "s\n" ; int d050000l_pfb_len = 45955; char* d050000l_pfb = "\x80\x1\xb6\x12\x0\x0%!PS-AdobeFont-1.0: Dingbats 001.005\n%%CreationDate: Tue O" "ct 19 1999\n% Copyright URW Software, Copyright 1997 by URW\n% URW Software, Cop" "yright 1997 by URW\n% See the file COPYING (GNU General Public License) for lice" "nse conditions.\n% As a special exception, permission is granted to include this" " font\n% program in a Postscript or PDF file that consists of a document that\n%" " contains text to be displayed or printed using this font, regardless\n% of the " "conditions or license applying to the document itself.\n12 dict begin\n/FontInfo" " 10 dict dup begin\n/version (001.005) readonly def\n/Notice (URW Software, Copy" "right 1997 by URW. See the file COPYING (GNU General Public License) for license" " conditions. As a special exception, permission is granted to include this font " "program in a Postscript or PDF file that consists of a document that contains te" "xt to be displayed or printed using this font, regardless of the conditions or l" "icense applying to the document itself.) readonly def\n/Copyright (Copyright URW" " Software, Copyright 1997 by URW) readonly def\n/FullName (Dingbats ) readonly d" "ef\n/FamilyName (Dingbats) readonly def\n/Weight (Regular) readonly def\n/Italic" "Angle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -72 def\n/UnderlineTh" "ickness 36 def\nend readonly def\n/FontName /Dingbats def\n/PaintType 0 def\n/WM" "ode 0 def\n/FontBBox {-1 -143 981 819} readonly def\n/FontType 1 def\n/FontMatri" "x [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding 256 array \n0 1 255 {1 i" "ndex exch /.notdef put} for \ndup 32 /space put\ndup 33 /a1 put\ndup 34 /a2 put\n" "dup 35 /a202 put\ndup 36 /a3 put\ndup 37 /a4 put\ndup 38 /a5 put\ndup 39 /a119 p" "ut\ndup 40 /a118 put\ndup 41 /a117 put\ndup 42 /a11 put\ndup 43 /a12 put\ndup 44" " /a13 put\ndup 45 /a14 put\ndup 46 /a15 put\ndup 47 /a16 put\ndup 48 /a105 put\n" "dup 49 /a17 put\ndup 50 /a18 put\ndup 51 /a19 put\ndup 52 /a20 put\ndup 53 /a21 " "put\ndup 54 /a22 put\ndup 55 /a23 put\ndup 56 /a24 put\ndup 57 /a25 put\ndup 58 " "/a26 put\ndup 59 /a27 put\ndup 60 /a28 put\ndup 61 /a6 put\ndup 62 /a7 put\ndup " "63 /a8 put\ndup 64 /a9 put\ndup 65 /a10 put\ndup 66 /a29 put\ndup 67 /a30 put\nd" "up 68 /a31 put\ndup 69 /a32 put\ndup 70 /a33 put\ndup 71 /a34 put\ndup 72 /a35 p" "ut\ndup 73 /a36 put\ndup 74 /a37 put\ndup 75 /a38 put\ndup 76 /a39 put\ndup 77 /" "a40 put\ndup 78 /a41 put\ndup 79 /a42 put\ndup 80 /a43 put\ndup 81 /a44 put\ndup" " 82 /a45 put\ndup 83 /a46 put\ndup 84 /a47 put\ndup 85 /a48 put\ndup 86 /a49 put" "\ndup 87 /a50 put\ndup 88 /a51 put\ndup 89 /a52 put\ndup 90 /a53 put\ndup 91 /a5" "4 put\ndup 92 /a55 put\ndup 93 /a56 put\ndup 94 /a57 put\ndup 95 /a58 put\ndup 9" "6 /a59 put\ndup 97 /a60 put\ndup 98 /a61 put\ndup 99 /a62 put\ndup 100 /a63 put\n" "dup 101 /a64 put\ndup 102 /a65 put\ndup 103 /a66 put\ndup 104 /a67 put\ndup 105 " "/a68 put\ndup 106 /a69 put\ndup 107 /a70 put\ndup 108 /a71 put\ndup 109 /a72 put" "\ndup 110 /a73 put\ndup 111 /a74 put\ndup 112 /a203 put\ndup 113 /a75 put\ndup 1" "14 /a204 put\ndup 115 /a76 put\ndup 116 /a77 put\ndup 117 /a78 put\ndup 118 /a79" " put\ndup 119 /a81 put\ndup 120 /a82 put\ndup 121 /a83 put\ndup 122 /a84 put\ndu" "p 123 /a97 put\ndup 124 /a98 put\ndup 125 /a99 put\ndup 126 /a100 put\ndup 161 /" "a101 put\ndup 162 /a102 put\ndup 163 /a103 put\ndup 164 /a104 put\ndup 165 /a106" " put\ndup 166 /a107 put\ndup 167 /a108 put\ndup 168 /a112 put\ndup 169 /a111 put" "\ndup 170 /a110 put\ndup 171 /a109 put\ndup 172 /a120 put\ndup 173 /a121 put\ndu" "p 174 /a122 put\ndup 175 /a123 put\ndup 176 /a124 put\ndup 177 /a125 put\ndup 17" "8 /a126 put\ndup 179 /a127 put\ndup 180 /a128 put\ndup 181 /a129 put\ndup 182 /a" "130 put\ndup 183 /a131 put\ndup 184 /a132 put\ndup 185 /a133 put\ndup 186 /a134 " "put\ndup 187 /a135 put\ndup 188 /a136 put\ndup 189 /a137 put\ndup 190 /a138 put\n" "dup 191 /a139 put\ndup 192 /a140 put\ndup 193 /a141 put\ndup 194 /a142 put\ndup " "195 /a143 put\ndup 196 /a144 put\ndup 197 /a145 put\ndup 198 /a146 put\ndup 199 " "/a147 put\ndup 200 /a148 put\ndup 201 /a149 put\ndup 202 /a150 put\ndup 203 /a15" "1 put\ndup 204 /a152 put\ndup 205 /a153 put\ndup 206 /a154 put\ndup 207 /a155 pu" "t\ndup 208 /a156 put\ndup 209 /a157 put\ndup 210 /a158 put\ndup 211 /a159 put\nd" "up 212 /a160 put\ndup 213 /a161 put\ndup 214 /a163 put\ndup 215 /a164 put\ndup 2" "16 /a196 put\ndup 217 /a165 put\ndup 218 /a192 put\ndup 219 /a166 put\ndup 220 /" "a167 put\ndup 221 /a168 put\ndup 222 /a169 put\ndup 223 /a170 put\ndup 224 /a171" " put\ndup 225 /a172 put\ndup 226 /a173 put\ndup 227 /a162 put\ndup 228 /a174 put" "\ndup 229 /a175 put\ndup 230 /a176 put\ndup 231 /a177 put\ndup 232 /a178 put\ndu" "p 233 /a179 put\ndup 234 /a193 put\ndup 235 /a180 put\ndup 236 /a199 put\ndup 23" "7 /a181 put\ndup 238 /a200 put\ndup 239 /a182 put\ndup 241 /a201 put\ndup 242 /a" "183 put\ndup 243 /a184 put\ndup 244 /a197 put\ndup 245 /a185 put\ndup 246 /a194 " "put\ndup 247 /a198 put\ndup 248 /a186 put\ndup 249 /a195 put\ndup 250 /a187 put\n" "dup 251 /a188 put\ndup 252 /a189 put\ndup 253 /a190 put\ndup 254 /a191 put\nread" "only def\n/UniqueID 5020164 def\ncurrentdict end\ncurrentfile eexec\r\x80\x2\xa5" "\x9e\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2\x35\x93" "\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r\xde\x9f\x8em\xf9%\xf6" "\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff++\xde`[\x8e\xe3&N\xdd" "fA-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e" "\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9d" "n\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13" "\x1d\xee\x0[AX\x5\xa1m\x8a\x12\x36\xdc\x4\xce\x1a\xf8,\xb5\xf0\xbf\x35\xab\x8b\xe7" "\xfc\xffr\xacm`o!VUt\x85\xf5\x0\x30-\xaf\xf8\xef\xe1Y3y\x17\x38\xf1\xd6\x15\x31\xd6" "\\\x16V\xd8 \x9f#\xf0\x9e\xd1\xc0u\x93\xc6\xdd\xd3L\xf9\xf8\x15\x6&~D:g\xa9\xbc\x95" "Y\xb7\xcf\xdcn\xf0\x31\xe7\x90\xc4\xdf\xf2\x7\xae\x44\x18\xd0\xc6\x1f\xa0\xbe\xbd" "\xb2\x9d\x14\xe6\x86\xe3\xd8\"O\xe9\xf4\xf6\xe6\x32\xadU\x7f\x43\x1e\xb5 \x95\xb1" "\x1f\x92I\xb5'\xfcK\xf8\xe0\xcd\x41\xaa\xbe\x44\x8f\xb\xa0m\xb\xe3u\xcb\xa2\xffp" "\x8b\xeai\xd1\xe2\x1e\x8a\x9b\xad\xc1\x34\xdc\x82\x61\xdb\x9e\xe\x44\xf\xf6/\x8b" "\xa7\xcb\x31Ky\n0\xefs=\xb5\xe3\xc4\x9f\xfa\xc9gR|\x92Zb\xeb\x4\x8d\xec\xc0\xa6\xc2\x44\xf9\\p\xe3\x3\x99t!\xef" "\x88\r\xcd\x9c\xf1\xd1+\xb3\xd0\x96\x7f\x33\xb2\xff\xae]\xb6\x16o\xfd\x1au\xa2\x95" "5\x12\x65\x8c\x95\xc2g\xc6\x15S:\xfd\xca\xb1\xe5\x96\xbf\xea\x46, 1\xd1\x7f\xdc\xef" "R\xb4\xabZxv\x84\x95q\xce\x1b\xafv\x97M\x0\xc8\x65\xf5\x64\x80\xcb>\xc4\x43\xc4\xff" "\x6\xdf\xf1\x90W\xbc\xdc\x87\xed\xf8\x9dnK\x6Y8\xdb\x92\xfc\xc9\x91\xdf\xf2\xb1\xd7" "\x10\x19~|\x1f\x9f\xa4\x15\xbf\x10\x9dm\xaf\x7\xaf\xd7>\xc2\x8f\xfb\xf4\xc3\xd1\x13" "\xdf\x45H\x8c\x62\xd0\xf2X6\xe0t\x17\xf\x62\x33\x9e\x9c\xc0\r\xe9\xc\xcb\n%y\x1b" "\xda\x7W\x2\x1\x30U&\x6\x33\x5\xde\x8c\x5\xe5\xde\xey\xe3tN\x11\xac\xc2M`\xf3\xb8" "\xf2hJ3\x18\x61\xa5hK\xc6\x8e\x84w\xe5\x30\xb8\x8b\xa5\x8cn\x8\x11\x8d\xc5\xd4u\xa1" "\xf8\xb2\xc2 /\xf8\xce\xa6I\x11\x41#V\xb9\xe9x\xba\xdc\x35OGhw\xa6y\xbd\xb3;\xa0" "\xf9\xfb\xda\x11l\xbe\x4\x8c\x2\x6\xb3\x9c\xeb\x34h\x9c\xc6\xef\nG\x93\x6\xc7@\x17" "\xd2\xa8*\xb7'\xbe\x61\xfb\xf1Z36\r\xea\x36\xdd=\x87\xf3\x32\x19\xfb\x41\xe8\xc6" "\xa9\xb6.\xd0\xae\xc1\xb\xad\x41\\\x3\\\x89o\xd5!\xa3\xff\xc2m\xba\xcc:3_\x8\x1e" "\xa6\x9d\n\x80\x89?\xc9\xd9\x12Y \xf1\xa1\xd5\x81\x9e]\xf6\xee\x87'-]O\x1e]i\xd9" "\xc\x2\x35'\xe\xa6xzBW\xa8\xd2\x16\x8d\x12\x99\xca\x31\xbau\xb1\xdbx\xec\x42\x35" "\xbd\x83\x87\x37G\x80\x1f\xc6\x14\x1d^K\r\x10\xba\x8c#I\xcc\x3\xf4\xb7i\xa9\x8g%" "n\x8b\x84g2.\xb6Z/\x8b\x35\xab \xc9\xa4\xc9_\x5\x91\xf8\xf5\x97o\xcb\xb6\x94\xc5" "\x18\xec\xa7\xa9s\x94\xce\x61\x44\n\x19\xce\xe3\x16\xeb\xd8\x12\xd5P\"|\x6\xbe%\xc" "\xfd\xbc!(\x11\x0+0&A\xd3\x35\xaa\xe3\xd0\x38\x91-ly\x11\xdf\xd6\x98N\x95\x89/\x8a" "\xb2$`\nK\xf7\xe4\\\x90\x4N6\xaaY\xf3Mp3\x86\x44)2\x82\x95\xd6_\"\xd3\x15\xbe\xe2" "\xe7\x84\xf4\n\xbc\xb5\xdaK\x99\x94\xb7L?\xc2u\xfe\xb7\x37\xc0\xc\xa2@\r\x4\xa1|" "\xe6|:U\xec<\xe3\xcf\x62\x65\xa1\xe9n\xed\xe\x9f\x43\xe9\x61\x12\xddptQ\x1cW'\xe1" "5\xc7(\x8bq\x3\xb4\xff\xb\xcf\xa0\xd1\x96\x17\x9a\xd3\x5n'4I\xeb\xad\xf2\xb9\x82" "X\xabT\x9f\xbe\xae\xf5/\x94L\x6\xb5n\x93H;5(\x82!\xabS\xa1\xeb\xdc\xe9x\x9d\x82\xc3" "1\x9d\xfe\xe8\x8b\x39\xdc\xe8l\xbZ_\x1b\x62,8[`e\xe5\x94\xb2-\xbb\xc1qP\x16\xad\\" "\xca\xb5\xe6\xe4;\xbb` \xf9;\xfd\x65\xba\xe2j\xe4\xa2\x39q\xe7g\x95\x18\x61\x99\x98" "b\xb6\xe\xe5(!t:D\xba\x98)\x90\x89Hi}\xfe[\xfa/\x8d\xa0\xc6\\\xe7\x46~6\x9a\xc6W" "$\xe0\xe2\xe9\x44\x18[\x19Z\ra\xa2\xe5\xcf\xc7\xedK3\xb3\xbc\xb7\xc0M\xb1\xfa{y\x84" "O\x10V\xf7\x1a\xd5T\x8e|*\xb2\r\xf5\xb4\x30\x37\xc8\x8\xbd)Q\x95\xe7\xd9\x41\x7\x90" "\x16{\xe5\x42[\xeb\xfc\x84u\x91`R\x9bo\x97\x15\xbb&0\x1fs\x1\x2s\x93V\xf4\x90+\xf4" "mh\xc5\xd3\rqz\x7\x18\x8avI\xd8\xd1\x43p\xb9\x9\xfe\xb2u )\xfb\x91%\x86\x7f=i\xcf" "\xc\x43=,v\xa2:3\xaa\x83\xe9\x99j\x81;\xb4\x34\xd0\xff\xb0\xde\xb4I=+\xee\xda\xed" "\x9a.Ih\x82R\x6\x11\x16Z\xaf\xb7\xfb\x9Q\x1f\x1e\xf1\xa3\xe3\xbd\x33\xd2\xddV\xba" "\xa0\xceN\xa1X('*(t\xc2\xe7\x36l&\x13V\xd1\xf3\xe2\x8\xccP\xab\xb3\xf1\xc3\xaa\xbd" "\xce\xda\x35_O\xdf\x1b\xb7{\x89\xab\x8f\xcb\xd3\x62W\xfc\x8a\x18\x92\x8cHTQx\xcd" "X>\x9\x8b\xe0\xf1h\xd4\xd1)P\xfa~\xdc\x32\xf7\xab\x66\xe9\x88\xd7K5\x2\xcc\xfc@\x8a" "X\x14\xc4\x36\xb9\x38\xac\x2\x1e\x39\xf6\x0\xf6\x1c\x14$~\x8a.\xe9\xdf\xf0\x10\xef" "\xad\x42\x8b\xf3\xfd\x1\xcd\xe7M;\xa1\xe9(\xf2\x30\x89Ou\xf8\x11\xf\x32\x96\x1c\xd8" ".\xc6&\xc9\x36 \x9aR\xf3q\xf2.\xc2\xa6\xb9\xf7,\x9f\xfb\xf0I\xf4P\xabZ\xa8\xca\x30" "\xec\xc8\xb0\x14\x41^\xcb[\x3\x97\xf7(1=+\x1c\xae\xc\xb\x38\xf2\x85\x9b\xc7\x2h\"" " S\x95\x5\xa9\\\x9b\x0\x1c\xee\xf1l*\xa5\xc8\xbc\xdd\xdf\xcbj\x87\xc5\x32n\xa5\xa7" "\x91\x82w\xf6\xee`|\x91\x85\xc4\xd1\x65\xcc\x9d\xaf\x31v\"x\xa0\x89\xacM\xfe\x64" "\xb\x9a\xc8\x41W\x1e\x9c\xd2\x86\xf6\xcf\x7f\x83\x66R\xd6'\xb5\xd7pg\xb5\x1e\xa7" "\xeeZ>\xfd\x38\xc4\xb\xc3Mu\xf5\xbc\xcdG\xa2~U\xf2\x1b\x8a\xb0\x99\x41\xfc\xaa\x91" "\x1e\x1b\x9b\xd3.\xcd \x90\x8fw\xc0\xacu\x95\x65\xa6`\x83\xf0\xb\x33\x1d\x85=,T\xe5" "\xee:\xb6\xac\x97\x13\x39#\xe9\x65>0\xde\xaf\xd7\x65l\xa4\x9cmrV\xeb\xe0\xdf\"\xd9" "\xc\x1a\x82\x7f\x8a\xc8z\xc0\xdf\x39\xb1\x5\x7f\xfb\x92-\xf5\xf0\xce\xf8;\x5Z\xb5" "\xd5\xce$\xd4\x8d\x85\xf6i/\x9\x89\x14\xaeX\x93#\xa3\xe2\x87k\xef\x80\xc0\x1c*[\xb1" "\xc8>\xc6\x7f_\xdb\xcc\x44\x45\xb\x9f\xd1\xd9\xe7\xde\x97\x35\xbb\xf8y\x9a\x87\xd6" "*Q\xb/|[\\\xfc\xfa\x41\x89\x93\xf5\x64<\x9\x99\xfcj\xfe\x2\x85>6\xdaq]x\xaa\xb0\x11" "\x11\x39\x92\xe2\x14\xba\x10&I\xf1\xe5\xaa\xa0W\"\x1c\xe6 w5\xa6\xe4\xf8\x12\x45" "H34c\x8cG\xd7<\x13\x93M\x10kVS\xd2\x37\x8d\xd5\xc\x44\x37\xbL\x1e\xdc/]\xf5Y\x97" "v\xee\x91\x0\xf2\xa5\xa3\xdb\x81v\xf9\xc2qQ\xa8\xb3%\xef\xe4\xeb\xa4\xa9\xa2\xf2" "\xf9\x30\x10+c\x8a\xb9\x1dSm\xbcp|\x8d\x0\x9a\xda\x89\xf1K\xd6\xd4\xe3\x83\xff\xd4" "\x94\xcazD\"*\xe2\x8aqEZp\x14I\x97\x6\xf3\x3`kF\xe3\x9\xe5R\x91\x8d\xd7\x91\xb2\x92" "\x4\xe5v\xc5\x8c\x9b\x3\xca\xad\xf1\xc1\x9\xb2\xe7Z\x9e\x9c\xdf\xe1Md\x89\x36it\xc7" "\xb9\x63\x1\x98\x7Y\x6\x32\xe9\x84R\xdb%\x62k\xb2\xcb\x63U\xdd\xa8\x87\xa3\xd7\xda" "A|\x90l\xba\xf5\xac\xb5\xf8\x32\x32\xe6*\xcc\x1\x16\xb1\x34\x99~\xd1" "\x8a\xdd\x64\xa0\xa7\xafN2=\xdc\xb\x91\xe7:*\xfd_\x8d\x9\x9Iks\x88m\x86\xfd\xaa\x80" "S8\xe4\x43$\xf9G\xb2\x46\xd4n\x7V\x85\x86\xaf\x8fh\xc0?qX\xc4\xe8\r\xf2\xa5\x46\xbe" "m\xd1\xd5<\xfe\x80\xb0n\x9d\x85\xf8\xe1\xa4\xb3\"\x2\x13,\x0\xc3\xe6\x9d\x1c\x8e" ",\xe1\xf2S\xfd\x41L./\x1f\xb1\xf9\x86\xa5\xe6-\xeM\xb5\xa4X\x9+L\x9f\x8b\xe6\xb6" "l\xe5\x93\xb2\xf\x41Z\x91\x1f\xc1k\x92\x8d\x96\x43\x3-,\xc3\x90\x85\x12+\x8d\x39" "\xbd\x7f\xaf,\x18\xb\"\x97`l\xba\x1a\x65\xd9;M1Rq+\x84ol\x84\xc5 9 O\xc7\xde#\x92" "\x90X\xb8\xc9\x10?*\xa2\xce\x97i\xedy\xd4\xec\xa8Hk\x14\xd0\xa5\x66H\xf5\x9c\xd2" "\xfc\x88N2\x84\x1ek\xe1\xa4]\x8e\xbd\xf9\xa5\x0^\x89\xba\xf\xf6\x86\x61\xdc\xba\xea" "\xc6\x66\xfa\x99\x1d\x93\"\x9\xb3\xf4\xc8\x62\x87Un\x9d\x1a\x13\xd2\xfc\xff<\xe5" "\xf\xea\xbf\x3\x82\xf7\x80\xce\xe3\xb7\xc9\xa8[\xa4\xfc\x6\xcf\xb3\xa2\x30\xe7\xb2" "\xea\x65\x18Y\xc7s+\xd5\x7f\x5\xbd\xc1\xc6i\x1c\x18\x38y\xcb\x39v\\\xad$\x6\xb1\xc2" "/J\xd2\xb3\xdb\x11\xfa\xf5\xa5\x42\xd4\xdf\x16\xbb\xa1\rn\xab<\xfd\xf7G\xe\xc\xcf" "\xcb\xc5lTL\xb8}(C\x84\xd6\xad\x8\xe2\x88\xd3}o\xcf\xea[\xcb\xa2\xbb\x82\xfa\xd0" "10\x3\xaf[\x1d\xa4\xe6\x0\xad>\x1a=[G\x1c\xad\x46r\x80\x1en,F\x1d\xbaxP\x8cS\xf5" "\xc3\xa0\x1b;\xd2\x43\x94\x13\xed\xf1\xd3o\xff\xa1,\xfd\xe\x92GO\x80yjR\xd0\x8d-" "\x81\xc7\xbf\xae\xa5(\x90\xaa\xf0\x8a\x94\x35\x93\x62\xf2G\xb\x36\xb6\xdc*\xa7\x84" "\xf0\x64\x7f\x18\xe3\xc3\x61\\\xa7\xdap\x97\x1f'd!]P\x97\xfc/\xd9\xac\x2\xb2>9\x8e" "\xa4\x9f\xcd\xd4\x12\xcb\xb8Z\xdd!\xd5\xa5\x30\x31\xf8X\x9e\xf\xb\xa5\x9c\xcc\xfb" "\x9d\x3\x33\xdb\xf3\xf2\x94\xebVm\xda\xb5?k\xc1\xfb\xc1\x1b\xca\xac\x98\xbc\xddu" "\x98\x44\xc5\xa0\x1aG~+\x0\xe\x96\x7\xfc\x16\x84\x87\xee\xab\xce\xa0\x1\xa3v\x93" "\x99\xde\xe4\xab\xc6\xc3\xb8\x38\xd8\xc1kq\x8\x2\x18\xa0H\xb0+\x9d\x10\x42\x35\xc8" "_\x8f\x86\x13j,\xa7\x15O\xc8\x97\xaah\xdb\xd9\xd6\xd3s\xc2\xf0\xfa\x45\xe\x13\xdf" "q+\x96X\xd0\xc1\x15\x9e\xe3\x0\x84\x94`\x8\xa8w8\x9c\x96\xceT\xd4\x8M\xb5\xfb\x80" "5\r\xbb\xb5[\xc4\xb8\x1d\xf6\x3`\x96\x39\x8d\x8d\x10\xd8\x8eMb\xcf+\xea\x44\x96<" "\x15\xd4\xc9H,\xd2<\xf1\x35\x80\xfa\x1e\x62\xe1\xeb\xe1\x99\x38\x45\xc1\xb2:\xb5" "\x1b\xc3\xa3\xf2\x18\x9d\x97\xab\xb9\xcc\x66\x63\xc7\x17Sj\xcc\x41\x8\x4*\xc6:\x94" "\xd6\xad\x81\xca\xe1\x93o'nm3o\xcc\xec\xf0\xbd\xf6\xd9\x42\xc4Y#\xa9^$Ez<\x8a\xcb" "\xd7\xfe\x39\xf3\xbb\xfa\xb3\xe0\x84\xb9g\xce\x31\xc5\xf1\x9dn\\JR\xcf\xcb\xe3\xe6" "\x14\xc7\x90\xf6:\xef\xf1\x35\xa7\x96\x99\xf3\x92\x15\xfb\xf5\x2\xbb\xf4\xa5\xbd" "m\xd4PDz\xc4\xed\x46Q\xdc\x9d\xa3 \xf7\xe3Zy\x89'\xc2\xfa\x66\r\x43\xcf\xf5z\x8e" "N\xeaq\xa8\xb?\xe2\x33\x1\x90\x80\x32\xa4(P\rQ\xed$\xbd\xe\xc1\xb3\x90\n\x8aj\xb" "\x93\xfdy\x98\x95!T\xd4\xd3\x99\x41u~[\xd1\x38\xeb\x39\x35\xf8\xc3\xb1\xa2\xf6\x17" "\x5\x9b\x1d#\x17\xe4\xb2\xcb\xa2/%\xad\xa5'\x1e\xcf\x63)\xa7\x85\xa0|\xd1?O2\x3\x8f" "\xc8\xcfPq\xc\x1dix\xe2\xf4\x97n\xd7\x1b\x94\x63x\x9b\x81\xd3\x65Y\x16\x46\xda}7" "0\x1b\xb7\xab#\xf1\xe3\xe1\xa4&\x9e^D\x1b\xb8(a\xe4l\xc1\xe5}\xd4\xb2\xa8\xf7\xbc" "\x10)\xb3@\xf\x90\xed\xc3\x99s\x1ct\xfcq\x1f[D\x9c\x37\xab\xf6r\x15`\xc8\x86%\xe4" "\x94pY\x9a=$\x87\x80h\xa9\"M\xbe`\xd4\x14\xa3\xb4~\x11\x94\x13\xdd\x95V\x8a~\x17" "\xac\x44K\xee\x95\x9b\xa6\x66\xca:\xd0icg\x85\x16T\xd8&\xfb\xc6\xee\x66\x85\x80\xde" "\xf3\xe0\x30\xbf\x81\xd1\xa1\x89}\ry\xe3p\x84-\xfc\"\x10\xaf\xabO\xfb\x97\x30V\xf6" "/\xc1\x45\x93\xfb\x10\x41\xf1QBK|\x7f\xf6\x9d\xabvMRk\xe0n\x95\xc9\xd5\x9a\x9a\xfd" "f\xa8j\x92\xd3\x35iY\xdb\x61\xe2\x64\xd8\xd0\xe4\x46P8\x1e\x96\xd9G~\xa4\xc4\xa2" "\xa9\xd9\xde\x8a\xd2]K\xffpw\x0\xa5\x17\xe0~^\xc7\xd4\xfS\xac\x32\xb6\x82\xe\x64" "\x99\xeeTL\x1c\x96\xd8sJM\xa1\x83\xdb'5c\x93\xe2<\xb3\xbf\xe7\x9fv\x95q\x16e" "\xda\xc3\xcb/\xe2\xa6\xe9t\xd9[\x8\"\xa0\xce\x31wHjn\xce\x97\xd1?\xcc\x1b\xef\xe2" "\x83\xabv\x9f\x1a\xe0\x7f\xf5\xc8\x13\xb4\x30'\xbc\xb2\xa2\n\x13x\xce\x89\xbd\xde" "\xa4\xdcraJdg\x7\xcd\xed\xa6\x19\x91-nS3\xfe\x35\xe0\xa6|.\x97(\xab\xac\x39\x10\xb8" "\xb8\xe9*\xf0\xb9\x18?%\n\xc5\xcc-\"dn\xaf\x82\x39\xa0\xe2\xdf\xc1=[m\x1a\x9f\xf7" "\x1a,\xf3k\xbb\x1\xc5\xa6\xf6\x99P\xc2$\\Om\xfc)\"\xccy`\x16\r\xb9s\x1e\xads\xf2" ":\xda\x9\xae\xb3V\x98K\x3\xe1\xb3\xc9\xd0\x10(\xe6\xf0\xab\xe2k\x1c\xd0hX\r\\\xf5" "\xd7\xce\x87\xfe\r>0\xfd\xc~\xa0\xed\x92\x39\xa9\xc9G\xb3:R\x86\x87\xef\x42l\xba" "/\xfa\x96\x16?0qE6\xda\xf9\x80\xdb\xa6p\xe4\xeb@H\x90-\xd3\xd9\xe9\xf3\n\xedn\xba" "s\xa6\xf9GcH\xc5M\xd3>\xf3\x19Z\x82!\xfdQ\xa1\x90\xc8\xfc\xf9\xe6\x93\x9f\x8,W\xb1" "\x97i\xb4\xd1&\x1aX\x9a{\xa8\x41\xa1 zKP\x8aL\xcex\xb6\x13\x11\x13I\xa6\xa0\x36\x10" "X#\x80\xb3\xef\x30\x30~\x90\x66^W\xa5\xedlg/\xa1Gnw\xb2'\xef\x98:\x19\xc3!9\xe9\x90" "\xf8 \xe2\xe4\xa2\x33\x16\xe9s\xebN\xec\xe\xba\xe1\x1a\x1c\xe5Ro7\x95\xae\xaaO\x8f" "\xb7N(\x94\x19&\"\xd4j\x9bLY\xba\xe5\xf3\xd9\x35\xbc\x97G\xb6\xbf\xa7\xea\x5}\xfd" "bJ\xb2>\xed\xf3\xee\x8f\xc0\xdf+s9I\xc5#\x1f\x12\xee\xe3\xfc\xef\xf2'\xa5\xa2\xec" "\xb3\x9e\x3\xeb\xb5w\xd4-\n\xacJ\xbe\x8\x86\x38[\xf9\x5\xc7\xd8lX8\xc4\x45\xb5Q3" "\x16\xc8\x1fN3X\x3\x86\x1b\x80?\x90\xcfn\xff\xa7\x86T\xa5+\xa8\x16\xc3\x45@\xc7\x1d" "\xecS\xe9\xcfM!f\xec\x4\x82\x5\xe5\xc2\xbe\xb7\xc2\x39\xec\x95\xda\xf1\x8b\xcd\x9" "\xc3=\xe8\xf1}\x8c\x39\x0\x83]==f\xc\x84\xe\x12\xb\x95\xbe\xc9}49\x17\x85\xdeO0T" "\xcc\xb=\xae\xd1\x81\xb6k\\\xb3\xae\x13\xff\xd8\xf7\"\x83\x34\xd8\xe3L\x8d\x98S\xfe" ":\x11\x8e \x97\x9a\x39*\xa3\xc3\xfcL\xf0\xd7\x95Yp&\x8\x30\xcf\xf7\xb2\x30\x91-\x11" "\xbcR\xc6\x16\xba\xfb`\xd8r\xbcNT\xb4J\x14\x90S\x89\x14S\xa6&\xafVR9\x8d*\xa9\xfd" "s\xf5{\xaa\x4W\xfd Ma1\xd3\x66\xd2\xb8\x8d`\x85\x91\x8d\xf5-\xdbmg\xe0\xde\xd4P\xaf" "\xc9U\x98i3\x92\xd2\x96\x34w\x19\x33\xcf\\P\xeal\xcc\xd9\xd2\xb4\x13\xdc\xb\xed\x36" "I\x8a\x16@y\x99\x18\x13\x99\xac\xf1\x38\xb\x9f\x19=\xf0\x8a\x93\x63\xa9\xdd\xd5\xb5" "\x8b\xc8\x93\xa2\x32\xf8\xfa\xe3\x93'p\x11\"\x31M\x8\x92\xa6\xad\x31\x11\xc1k\x90" "CI\xc2M!ux\xf9}nS\xee\xf5\xb2x\xafO><)\xb7\x62\xd6\xd0I\xa7:\xc9K;\xe0\xe1K\xf5\xe9" "\xaa\xa0gnu\xb8\x64\xcf\x8a\xcfX\xa9\x9e\xed\x91\xc4 \x8f\xb3&Hv\xcd\x46\xcd\xdb" "\x8S`\xe9]e&\xa8/\x84\xff\xf0\xf3y[5?\xc\xef\xc5Q\x1\x8bK\x8f\x64\xf9\xce\xc0/x[" "*]\x9b\x6\xc7\xc0\x8a\x12\x87LO.5\x92\x8a\x1\xca\x0\"\x9c\xb0N\x92\xe3)&T@\xceo\x5" "\xbanh\xfe\xb9\xd1\x2lU\xb2\xbf\xdb\xe0\xfe\xa8\x9dN\x93\xb\n\x1a\xc0\xbd\xccY\xe" "\x5ZS\xfe\x97\xb9G\x84\x45\x94rLr\x7\x43\xb4\x5\xcd\xb1\xdb\xad\xa2\x1e\x45\xb9\xf3" "v\x13\xc$\xd8\x86\xcd,\xab\xab\xd8\x62W\x16\xec-\xa6rA\xac\xfe$\"\xa9]\xe6\xa7\xdd" "\x94z`p\x9b\x90\x4\xa3\x7\\u\xb8\x15U\xa1\x9f\"!\xb2\x90\xb3\xba\x43\x39\x96\x8e" "\x95\x97\xee\x64w\x15\x84\x4\xde\r\xd7g3\xcelI\x4\xcf\xc2\xa1\xdb#\x80\xf8\xbc\xee" "\xa1\xc7\xc0z\xf\xdb\xe9\x36\xf2_\xfa\x83to!\xa7\x4\xbb\x31M.\xa8\xa3{\xc2]\x9e\xf0" "\"\x94\xf2\xfd\xd7\x31]'\xae)ag\x18\x64\xac\xc2\x9W\xddsw\xc4\xd4\x9d\x89\xad\x10" "\x8\xe8>\xd7\xff\xcd}\xa3\xb5\xd3_\xdf\xfd$|\x11\xaf\x85t\x94qQ\xd5\x45\xbb\xd8g" "\x1f\xe6>\xc9x\\j\x94\x90Y8\xc9\x9d\x8a\x93\xdc\xd8\xdc\x1a\x83\xf6\xbe\x81\x8e\x8a" "\xa4\xf8\xe6\xe3\x82R&dv\x95\x14\x1e\xa4\xbcL\x3\xe6\x11\xce\xd3\x8e\x7\xd9NFh\xb1" "\xfH\xb1&\x83\x96[\x97\xe7\xe5\xdd\xb2\xc0\x99\xa4\xb8\xac\x88.1\x9a\x14\xacH\xcd" "z\xf1\x19\x45\x98v\x17\x14NI\x9e\x1a\xb7\xf1!K\x93(\r\x97'\xf8\xa9Go\xaf&\xae\xe3" "\xcd\xd2Q\xce\xffiS\xfd\"\xea\x8b\xf6\xbeM\xd7\x9c\xa1,5\x84meMG3\xe2\x9c\x64\xcc" "\xc5\xce\n\x9d\xba]\xb0\xa3\xf7U}2\xb1\x87ic\xc5:\xe0\x8eR?r\xe5\xe3\xe2\x44\x9\x9d" "\xdc\xb5\xba#\xa0\xaf{\xb4x%\xdd\x9a\x87\xae\x61\xf3K\x98\x95\xac\"\x31\x80\x62\x0" "s1$\xb1\xac\x10\xb4@\x87\x19\x66\x43\x37!0\xf0\x97\x8e=\xbc\xba\xa2\x36\x42\xe1\xa4" "}\xe0\xf4\xf1,\xbf!=\xc2\xbd\xf6\x43\x81\xd3W\xe.V;J\xef\xc9\x65\xe6\x32\xf8\xbb" "Z6t\x11i2\x9aj\x15\xa0Q\xa5\x82\x17.\xe1\x8c\xc3\xea\xd5\x11~\xd6\x1dGr\xdc\x89\xfa" "M!\xdb\x8c\xf6?\xcc~\xcb\xbd\x8\xc5i\xba\xc5\x10\xb8\xe9\xf0: ,\x98J\xb0\xeb\x9d" "I\x10\x0mPr\x87HE\xf2\xae\x98\x3\xd8lH\x9a\x4\xa4_\xdf\x85\xff\x62g\x3.<\x9b\xfc" "\x80\x61'\xef\xa5[5\xfc\x64.\xa9\x95\xd8\x9e\x41\xee}g\xdb\xa1\xea\xf2\x9e\x1f\x36" "\x1c\x94\xd6\xa4\x30UE=g)\xd6\x88\xc8\x87*q\xf4KL\x9\x8f\xae}\xa6\xe4~4\xb1\x63\xa0" "\xf9\x9f\x7\xa3\x33\x81\xdc\xd6\x96R\x11\xa7\xc3\xfd\x1a\xf\x32\x98\x8f\xc2\xfbr" "\xddz\xe8 \x95\xd6Y\x4'\xf8\x0NN\x2\x8d\x61\x1d\x45G\xd3\x9a\x87}\xdf\x1a\x8f\xe8" "u\xe\x6\x44u\xc0\xc0,\xb\x44vr#l\x8f>\x93\xa2\xb5I\xe\x44#X^'\x8]\x15\x86\x5x\xb1" "l\x0O\x5\xeeU.\x1\xfd\xc6\x1c\xde\x89\xc5\x9c.\xc9\xcap\x4\x1\x9aG\xcd\x9c\x8\xa6" "@\x83\xab\xd1\x1/x{\x7f\x83\xf6\x1aO\x84\x1dV~O\xb5\x46\x13\xd6\x0gKF\x9d\x1c*_\xff" "B\xaaz\xb2o\xcb\xaf\x9d\x5\x44\xc1\xa6m\x94Q%\x8b\xdes`\x6\xc5\x88\xb0\x62!\xc0\xd8" "\xb4\xaaTh}\x8\x9f\x8bH\xb2\x65\x34PB\xe\x82\x13\xae\r\xe9\xb7\xc8\xcc\xe4\xd1\x9d" "l\x86l\x14\x42\x30\x8fI<\xc1\x1f\xf6\xcc\xb3>]\x95\xc8;$\xb1\xee$\x9d\xce\x93 w#" "\xa7\xb1\x97qQ\xe3O\x18.\x9by4\xf4\xbd*&\x97\xc0\x64\xe6w\x13\xc\xf1\xe\xa3W7\xe2" "q\x17\xc7\xe5\x96IS\xc0\x41\x39\xec\xcf\x1f\x1e\xc9\xdd\xce\x1b\x30@\x90\x41\x9a" "C\xb4\x12\x1\xb2:\xa1\xd7\x9b\xf8^\r\x0\xe\xccN\xdf\xdfI\x9c_\x1d\x37\xc\xd1&\xe7" "\xda\xdb\x7f\x81\x9c&\xdb\x98\x8M*\xf6\x84\x42\xf3\xe8\x45\x34\\Z\xf2\x37+7\x8e\x11" "G\xb7\xb4\x8f\xf0\x9c\x9a\x92\r\x83\x97\xf8\xac\x8az\xa2\x35\xe0\xc6\x98\xe7\xf1" "V\xb8\xeaw~\x8f\xe6\x39\xd2\x6\x7^\xcdw\x8c;x_\x6\xb2\x16p\x90Q*H\xf8\xbc\xb2\x9b" "J\xf7w\x11\x87M\rl\xc2\x95P\xed\x81\xb8\xc6\xca^q6\\\x19\xc0\x97\x0\xe9\xee\x30\x39" "U\x7f\xf2\x8f\x1dG\x93\xe5Z\x8a\x45m\x80+\xa8\x41&\xff<\xc6\x12q\xe2\xe9`\xc7IB\xf5" "cj!ob\xac\x80\x16\xc9RB7\x87\x83\xd2\xc9\xce=\xcd\x37\r\x9b\x10\xb4\\O\x9at<\x2j" "6\xab\x99XG^\"]\xc4\x64\x3\x3O\xd2\xbb\xae\xa0\xcf\x1b\"\xb9\x31\x0\x83qi\xb5\x16" "\xef\xf5\xf6\xc9\x95R0\xc0P6\x8a;\xaf\x10\xd3\xe0l(\x5\xb8\xefq]\xfdU\xaf\xc\xd6" "Pa\xe7\xa1\xbc_|\xc7\xb8\x2\x6\xc9>I(V\xa4\x1b`/\x1b\xa1\xe9\x8c\xfe\x15+\xd6y\x98" "]\xef\xf5\xb8r\xb8\xdd\xe0\x37\x5_\xf9\xc\xfe\xej\xe6\xecn-\xde\xf9\xc3\xc5\xff\x32" "\x5\x4\x8c\xe7uD\xa1\xcd\xd7\xea\xe4\xb6<\n\x13_\x81t\x7f\xf1\x99\xa8&g\xee\xe4\xd8" "0\xae\xa2\xa2\xd9\x19<\x94\xed\x9d\xd0\xe\x9f\xb2\x6:\x96\x18r\x99=\xa8L\xbf\x61" "\xa0\x89o4\r\r\xeb\xadi\x1a\x31\x85\xa6\xcc\xfc\x97\x38:h\x3\xa1\x7f<\xa5\xa0\x13" "\xd9\x33\x99R9`\x1b|?H\xaa\xdf\xb4\"\x1b]\xd7\xe4\xaf\x86\xa7^\xbb\x8b\xc9P^\x82" "\xe7\"\x95\x1\x8b,'\xfa\xf3\x92\xf6\x86\xc0\xd3uc0\xa2jc\xb%\xae\xd6@6\x5P%1\x9e" "\xa2\xfc\x1ar\xad\x14\x9f]_u\x15=\x84\x80\x41>\x14\xa2'^\xf0\xa1\xef\x39\x17\x44" "\xe3\x43\x88\x6\x17\xd1\xce\xb7\xb0\x2Q\xacys\xde%R\xcb\xb8{\xae\x7f\xad\x10\xb8" "N\xb3\n\x4\x9\x5\xd3\x42\x83\xd9\xf\x43y\xc2'&\x80\x1=\xf1M\x6\x65\x1e\"X_\x80\xcf" "\xb6\x9c\xea\x1b\x10\x1d*\x7f\x7G\x92\xfc\x8e\xb6\xeb\x8f \x8c&\x80&\xa5\xc3\xdf" "a;\x8f\xf1\xa3;A\x87\x1f\x64x\xfbq\xc8\x9\xcc\x32\xc7\xbz\x1e\x83%O\xfa\x8\x9f\x35" "\xd5\xa1+\xc3\"\x7\xa6\x1b\xc4\xbbTI\xbc\xf4-\x8f\x8f\xa3\xe9\"\xa1\xda\xc8%\xab" "a|\xaduwx\xe0n\x98\x36g\x94(\xf7%=e-\xd8\xf4\x14\x97t7\xce\x7\x9qe\xe8\x9\xbf\x45" "k\x99\x1c\xe9\x9a\x9c\x9e\x8f\xe2{B'K\xae\x39\xec\x88\xba\xc9\x8e\xea\xc9\xf8\xf3" "H\xff\xef,^):\xe7I\xf0%\xcb\xf2\xd8W\x1c]V\xec\x1f_r7\x13\xacX\x16\xc4\xe\xacJr\x89" "z\xf0~\xaa\xe3{\xf4\xf0\x8dW\x80 \xce\xc4\xb2Gl\x9d\xf8t\xb6\x14\xeaP\x15\x63S\x9e" "\xd8\xbdRA\x19r\x1c;\x1f\x46\x1c\xf4\x87\xce\x8\xf8\x84\x8c\xc*\xd0\x9aPJ\xe8\xe0" "e\xc8Z\xc1\x98\x81(\x8e\xc6\x19\xd4\x15\xb8\x62g\x84>\xb9\x19\xac/\xf1\xfe\xe2\x11" "_\x1d-\x1fU7\x15\xac\xfc\xfb\xea\x18\x87\x9f\x9d\x8b\xa6\x99\xa1&\xde\xf7\xa3\xfb" "\x1d\xb8`\xb3\xab$3\xe3\x66u\x1b\xc0\xb6 p\xa3\x6\xf\xc7jr\xeau\x80\x44\xb2\xde\xf" "W\xd9\x39\xe\\\xfryO\xb3\xde\xbe\xbe\x9e\x41\xa0\xb1V\x80\xe3\xa1\x62G8\xbb\x66\xfd" "F\xabx\xd7|zL\x14\x1f\xfbWpvC\xc9\xb7\xdd\xd5L\x8b\x1d\xc1\xe5\xae\x9d\x8fs\xee\xaa" "\xd2\\\xfd{\xca&\xe9R\x84s\x19\xef\x6\xb2\xe\xbbq\xba\x9bVz\x9f)\x97\x63\xf7\x37" "\xaa\xcf\xa9z\xce\x6\xfcg]\xbe\xc0\x11\xec\x44\xba\x9d\x6\xf2m\xcdr\x9f\x93Yr)\x8e" "\r\x94\xdf\x8\xf5_\x93\x62\xdf\n\r?O\xe7\x9bl\xb3\x15\x1c\r\x43\x45\xe5\x31\xd0Q" "\xa9'\xb9\x46\x7f\x31\xa2\x4`,\xdem\x98\x1b\x9c\x6\xe1\x1c\xe\xc3z\x82\xe1\xe8\xbf" "\xc4\xaa\xd0\x6\x43\x90\x12?\x0\x33\x97\xa4+\xbe<\xd9\xbb\xf3\x36\xf1\x31\xe9\x41" "\xf2#\xb5\xab\x34\xec\x37Q/\xba*w\x90Q\xad\xc9\xc2\xf3\xc\xb\x9x\xa2#\x14\xd4\xcc" "wo\x11h\xabY_~\x6\x98@\x81\xe2\xf1'}\xbf\x12\x1f\xf0\xe0\xb\x45\xeb\x30\x1e x\x95" "Pt\x85\xc1R\xd5Q\xd8\x83+\x88\x1a\xc3\xbcU\x8a[\x15n~\xfe\x86\x80\x10\xeb\x14#{\xd9" "D\xe5\x41\xb2\x19\xc\x1f\xcM\xa4\xa6\x9d\x90\x80\x38\xf9\x8b\x31\xa2\x9fw\xa4T\xef" "s\xe0qZ\x9a\x44N\xb6\xa3\x92\x1c\x33\xa0\xff\xb2N\xf4\xf1\xe0\x38+\xb8\xc1Q\x7f\xc6" "\x14\xb0\xb7\xa0\xf3\xf0\xab\x1d\x30.m\x96VBl\xdb\x1\xb4\xd3:\xf9\xef\x7f\x44\x34" "\xfe\xbd\x1d\x63\xcf(\xae\x64\x81\x80\xd0\xd0>\x9a^\x1e\xa5\x81|V\xf3\xc5\xc7H]\x95" "9\x95\xbc\x93\x32\xa3\xf0\xbc\xbb\x32l\x9e\r\xefYJ0\x7\x37*\xf8\x0-e\xd1\x91\xe5" "c\xa8\xc7\x9cW\x8a\xf2\x18Q\xbe\xbe\x91\x82?.\xc4\xed>U\xb6S\x16U\x6\x13\xa1*\x8" "r\xdaJ\xb5\xf\xca\x44\xffO%|\xc4\x9\xe6\xe2\x99[\xc4?\x99_6\x7f;\x95\x41\xb\x34\x5" "\xb4\xf7K>j\xd4\x93\x6y\x8b\xc4Q\xf4\xba\xaf\x13\xcdI\x86\xd8u7\xf=J\x1aW\x82\x8" "=Q\xeb\x91[\x7f\x32\xa4\x61\xb2\xb8\xfc%n!)_\n\x1b\xac\xb1s\x98L,\x88\x9eL\x1dv\x0" "\x5\xaa`\xe7G\x14\x11\xd1Q\xd3z\x94\xed\x8d\x14\xbf\xf0\xa0\xa8\x38\xb7=\xeet\\\xc2" "\xf0\x17\x15w\x8cW\xd1\x45(\x5_\xb2\xd0\x31j\x8b\xe\xe9\xfb\x1f\xba\x6\x3\n\xa7\xed" "\xc4\xcY\xe7\x11>\x95\x89\xb6\xd0\x88\x1f\xb3\x99\x61J\xfI)\xaeK~\x91/8i\x89\xce" "\x13\x7\x2)\x18\xfP\xf4\xccZq\xf0\x14.\xe6T\xc2\n\x45\xf\xb5q\xa7LY\xfc\xc2\xdd\x42" "\x8e\xe3\x14\xde\x30\x90\xf7\xff\x12\x5\xe7\x1e\xc4\x96g{\xcdV\xfc\x9c\x91\xd2\xb5" "\"\xf4\xdc-\x14\x82\xae\xfe\xb6\x81\xd7\xab\x87\x36\xe5\xeb@~~\xfe\xf4\xc0 \xe4W" "{P\x1c\x9fT\xd7\xde\x19\x45qQi\xaco\xc7\xf5R\x92\x6T\x8a\x62\x2\xde\x12n\x87\x9\xe0" "\x1eo+\xc3\xe8M\x9c\x81?sgK\xc9\xdbTo\xb7\xab\xbaR@\xc4\x16m9\xa6\xbbk>\xdb\x88\x98" "\xcf\xek\xa8\xa5[#\xc0\x33\x7f\xf1\x34\xc5\x5m\xeKN\xa1\x7f\xbf$\xdas{'\x1\xd7\xa4" "\xda|\xba/\xa4\xa1\x39\x46K\x8=l}\xae\xd6\x30\xfa\x6\xc2\xb5\xe2\xc2\x6\x81\x1a " "\xdc\xc4\xbu\x88\xb4_\x95^\xa6\xb6\x33\xc6,\xbf\x36\xcd\x93\xb\n\x38\xda\xf0\x9b" "Cc\xcb\x6\xa5u\x92\xb0\x7\xdd\r\xc2\x14\xc1\xect(^\x9e\x9c\x6\xf2 \n\xc0\xf6\x9\x90" "#\x4T\xee\x0\x1a\x85\xebr\x10\x11\x30Pi\x9a(\xc3\xe3\x1Q\xf\xfa)\xde\xb0\xc6\x4\x84" "\xd3\x11\xe3KWRm&\n\x94\x31\xbc\x80\xe1\xd9\x18\x3\xdeR\xecY\xed\x35[\xd5\xfe\xc" "`\x86l\x1d\x38/\xce\"\xe0\xb6\xd8\xc1G\xeeQ\x1c%\xaf\xb0q\xd6\x95\x8e`\xea\x18\x45" "F\x96\x83\x46|\x1a\xa7\x0vb\x9c J\x3=\x94\xe2\x94\x8b\xb0\x45\x88\xb7~\x99\xdd\x13" "\xe0u\xfa\xeaq\xfc\xf1\xb7ST\xdc\xe0TsB\x9d\x8fk\xbe!\x8e'\xe3\x8e\x33\x13\x83:1" "\x9a\x84\x42\x95\x5\x88HK/\x9bH\x81\x80\xf3\xc2\x92\xa4\x8dpF\xcfx\x1es&\x7f\x88" "\xba\x64\xadJ:g\x95\x34\x8al2\x1d\xd5\rP\xba\x99\\T\xda\xf\xf8VW\xe\x1f\xc1\x18\xe9" "\xbb<\x10K\\m\x9e\x11!\xdfK\xda\x33\x66 /1\x97\xcc\xa7\xb3\x65\xa9\\\xdf\xf6\x97" "{\xa9\x65\xe2\xa6\x86x\x9\xf4\x8a\xfd\x63{\xd4UZ\xdf\xce\x32,\xce\xe9n\x9d\xe2.w" "\xd8\xf6\x32-\xd8+\xf\x62~\xc2'?(\xdf \xa2\x1\x19*\x1d\xea\xfd\xb8\xca\xbe\x17\x98" "\x12Q%}\xcbq\xb4\xb1\xa6r7\x86\xe4\xac\xbc\xc1*n\xd6\x61\xfa\x1c\xdc<\x8dN\xdcP)" "ldf!\xfd\xfdW9\x8c^\xe4\x8eh\xc5\xce?\xa7\x9dP\xb6\xd6\xcd\xcd\x65;I\x12\xff\xaf" "\rTSP\xe\x65\x97\x1\xfd\x8\x11\x93\xf4x\xae\x9b\x88\xef\x15\x98\x33\x85\x97\xd9\xcf" "'\xabh\xbb\xe7\x89\xa2\xce&?\xbfJ1\x87\x81\x1\x37\x92\x36\xa3\xc9|\xfe\xfd\xadr?" "I\xd2L8&Mn\x1e\xa8\xc3\xc5\xc9\x5o%\x1\xe5\x37\x90\xa0\xf6O\xe5\x91\xd5\r\xe4\nm" "\x9f\xd0(N8\x96U\x1e\x96\xb7\xc5\xc0&\x96&\x1b\xcz\x99\xa4\xc7)a\x90)\xe0\xae\xdf" "6\xc1\xed\xbe\x42\xd6\x99\\\x1aJ\xcb\xb1\xea\xcc\x9f<\r\xeb\xb9\xedX+\x81\x1f\xec" "U\xf2\xfe\xaa\x37G\xe5\xe2\x83?-\x98\xfb\x1dXq\xa0'\x83xA\x91:+P\xcdQe\xc3\x1c\x9a" "\xf\x1d\xecZ\xbK\xf1\x85\xd2\x3\x7f\xd0K'\xc4\xbfpz\x92=\xe0\xc2\x8bo\xeb\xae\xbc" "\x9fx\xbc\x9c\x11\xccGi\xc1\x8b\xae\x18\xbc\x42\x32\x95z\x1\xa4\xb8\x85\x91\x10\x64" "l\x86\xcf\x34\x99\\\x82\xdb\xf0\n@E\xec\xe0\xc3\xb5\xb9\xb3:z\xbdW\xab\x87:of\x14" "\xb6@\x91n::n8\x88\r\xda\x39\x98\x9c\xe4$\xad\xb9\x66\x1g)\x8eu\x86?\x7\x5/\xfb\x99" "\xa8\x5'\xc4\xa8\x3Iu6\xae\x17\x45\x98\xb8\xba=%g.\x16\n\x3\xc4\xfc\xb0\x66\xb3\xc3" "\x14\xfez4\xa0\xa7\x11?\xa9/s\xef\x44n!\x8d\xc9\xfd\xa4L\x93y^\xcd\x9\xe6\x1a\xfd" "\xde\xb3sZl\xd9\x3\xa7\x89\xcb\x9c\xb4\xfdxQB\x85\x0:~4\x97r\x81k\x0\x37\xb8w\xd5" "\xfe\xe\x15:\xf7i5kn\xa5\x9f\x7fk\xc4\r\xf9\xfe$5\x15< \x1ajkOR\xc8\xe3\xb1\x10\xb6" ",Z\x8e\x89\xa5\xf8{\x8b\xbf\x9b\xbb\xccPZ\xba\x8a\xc0\xaej\x8m*D\xf2\xcd\xa0\xeb" "\xd6\x41#\x1bO\x7f\x8e?oO\x19\x0\xbe\xacP\x14[.\xa9=$\xb6\x8a\xc1\xd2l\x95\x94u\xca" "5x\xc7\x99\xb8R\r\x12\xb3\xce\xe5\x93\x19L\x1c\x4\x66Q\xb0\"G#i3\xe2\x5\x42[p`\xf5" "\xb4r\xb5\x1\xbc\x31\x90\xaf\x11\xf0\xb4\x91\xcc\xb7\xe\x44\x88\xa0\xbc\xb0\x63H" "\xf1\x7\xfa:\xb8\x66\x66\xa9Rk\xa1\xd3r\xb4\x1\x66Jb\xe2\xa5\xf9SJ\xf5\x3\xd0\xab" "\xa0\xb1\x12\x97\xd3\x36+\xca\xf7\x9b\xde\x1em:\x13\xbb\xaa\x39\xdc\x8e\x83\xc4\xe9" "\x1b\x98\xba\xb3\x0y\n\xfb\xf3[@\xf2R\xe1\xdbyQ\xe1\x7\xbb\x39^\x9aj\x96\xe5\x46" "\x96\x81\x3\xa0\xe\xae\x92\x30\x44L\xee M\xa9\x91\xa6\xd3\xf1\x6\x3%\x0*\x11\xd1" "\x10\xb8\x14\x19\x9c\x8d\x45\xf6\xf6\xa1\xf6\xe1\xd6\x13\x89\xf1z\r\xfeS\xbem\x3" "n\xce\x85\x1f\xa2\xe2\xe\x1a\x41+\xe7\xa3\xb5\xb4O\xdb\x9f\xa7\x7\xf4\xff\xfd\xab" "3\x6\xdd\xce&\xad\x2\x95\x38(\x87\xf9\xd5'\xcd\x4|\xb5\x83\xd2\x0?A\xae&\xfa\xd6" "U\x9b=:\xea\x92/\xda\xf6\x91-\xcc\xf1\x86\xeb\xde\x3\x17\x82\xcd\x14Z7\xaf\xbc\x30" "\xb6\xe]\x9d\xfc\x10VkV>W\xb8p\x96x\x8mlHdY\xf9#GN2\x1d\x7\x37\xf9W\xb9\x42\x96}" "\x4\r\xca\xad\xd8\x32\xd4\x9f+\x82\x16\xd1\xda\xa3\xa4\xee(\xb\xaa\xf8\x63\xcc:\xea" "\xae<\xb8TI\x0\x84\x8d},\x90\xb2\x1aL\xed\xab\x9e\x61|\xf7\"\x14\x0\x35\xc6*\x9c" "\xcf>[7Uv\xe8\x12>K\x1\x9e\x9#\xd2\xe8\x15\xff\x36\ny\x8b#0\x8a\x32\xa9\x19\x42\xe4" "X\xa0\xf1\xaeM\xb8\xcf\x31)\xcc\x33\xc8\xaaJ\xb8\xf3\x33\x61\x66\xae\x1d\x14k\x7" "c\x12\x1bM~)\x90\xf1\x92\x6M\xb7\xfb\xd9\x64u3/\xf7\x0 \xcd\xe6\xf\x0\x14\x9c\x35" "QWT\xd2$\xd1\x91u\xcf\xa7\x91\x64#H\xce\x9b\x8b\xa3\xde\xe2\x10\x63*i\xd7\x8e\xb4" "U\xf5\x87\xf8\x96J\x9fL\xeb\xe1\x1b\x9d\xc6\x14\x9b\xef}\xf7\x81\xb1\x97\xec\xbf" "K\x9a\xdax\xf1x\xc0\xce\x1a'\xd7\x7f\xac\xce\x96\x32\xc0\xf8u-\x88R\xfe,Z\x6\xe1" "G\xd1@\xf\xf5\xb4\xb9\xffK\xf0\xc5\xc4\xbe\x13P\xd9\xd2\xfd\xe1\x7f\x12w\x90zl0\x88" "\x4*Cr\xca>k\x82\xb6\x88\xe3 /D\xf\xfc\xc1j~\x10U\x1c}\xdd\x34\x35\xb9\xb5\x9e\x9a" "\xda\xaf\xe3\xb8}\xe1O=\xc3\x1d\x1b\x87%\x1d\xd4<\x94\x83\xf8\xa4\xc6\x12@\xed\xac" "\x88\xeP\x87\xdd\xdf\xcd\x8_\xf\xcc\xfd\x1b\x16\xde\x94\x63&\x2\xf1L\xbf\xe7\x6\x31" "b\xfe\x66Ph\x8f\x93\xeb..\x9e [7\x86\x9b\x15\x6U\xf2*\xcbO\xb3\x44\x63v\x99y\x1b" "\x94r+\xc3+\xb7\xb4\xf6\x3\x90\xe4\xd1K\xa4\x92\x45&\x84\xca\xdd\x33\xe5p\xac\xb3" "\xaa\xdd\x96\xf\x89#\xff/:)\xe4G\xa0)\xa3\xb9.%\xfc\xa0\x17\xa1\xc5\xbdO\xaa\x8c" "\xab$\xe9\x14\xf5\xf\xabY\x6\xfaP\xb3\x39\xa0\xd5\xa8\x39\x89w\x1f\x41\xa3\x91\x3" "\xa9#\xd5\xc9V>[\xean\xe3n\x1bJ6$\x18\x4\r\x35\xc6\xb0\xdb\x2\x38\xce\x97/\x95\x15" "\xc6/=eapL\xa5p\x81\xca\x41\x98_\x17\xdd\x86\x13\xa2\x92\x9b\xa1s\x99\x31\xaa&\xc" ">d\xebM\x94\x98\xd6\xcc\x14\x80\x13\x66\x9e(.\x96\xf5]\xa0\x1a\xed\xa6\x94\x99Q~" "\xdcLR\x0\n\\t\xd2\x93\x8d\xfa\xf7`_&\xf7\x99\xdf&zX\xa0\xb9\xfb\x30z\xc2\x6\x83" "k\xf7\xe0\xb1X\xcb\xd3i\x95v\xdegq\x7f\x0\xdd\x38\xc3\xcd\x8Yd\xe8\xc5x\x7f\x9d\x32" "^\xb2\r\xc0\xb2\xea/\xc8y\xe7\xa4|\x14\x9e\xd8\xfa\x8e\xde\x30\xfb\xf1|\xfc\xd3\x9d" "\xe5\x16% \x1f\x90G\xc5\xc\xa3\xc4\xefZ\xe0]\xb8\x1c\xda\x36\x34\x93NH:\xaf~\x9{" "\xdf\xe3\x88\xcc\xc6X[\\\x92\x8f\xfa\xb4\x13\xc7v\xa8\xb5\xa7\x9f:\xa7&\x89\xde\x1d" "G\xf0\x2\xda~\xfa\x84\xd8\xea\x99\x36\xc2\x32\x12\xd7\xf0@\x98\xdf\xca\x1c\xf1\xe0" "GdW3\x85\xd4K\xe7\xde\"+\x80\xe1\xe\x11Hm,\x12\x18\xe9+n\xbf\xd1KI$\xd7\xedrfK\xf3" "Ec\x99j\x96\xe5\x63\xef\x62\xec\xad\x11\x81\xf8\x44@\xf5\x8f\x41\x16\x34\x9\xd3\xf1" "\x1+t'\xaf\xaf\x31\x37\x97\xcc\x10\x9f\xda\x1\x7\x39\xb4\x44Tq\x7\x93\x10R\x5\x44" "\x19\xe\x6\x15\x8aX\x86\xd2\x97\x39\x33\x85\xbbX|pA\xca\x2\xe4\xd9~74}O\xdf\xa3\xcc" "\x1c\x42\x30\xac$u\xe5\xb2\x81\xbf\x84N\xa7\xa9\xb1M_\x8a\xb4\xed*\xa0\xe9\xe2\x91" "\x80Z\xfa\x66HA\x1b]\xeb\x86\x35sg\xc3t\x99\xc8\xcb\x91\xf1\xcb\xeb\x2\xbf<\x10\x8e" "\n\xcf\xa1\x11\x8aS\xbcv\xf1\xd3\xa6\x5/\xf8\x17*\x8\xe4&\xa4r\x89\xd1\xe8\xc1\x35" "\xf8\xb2\xdc\x9e\xa5\"\x99\xf3\x7\x43\x99z^u!fP\x7f>\xae\x9f\x9b\x9f\xd7\x94\xef" "\x1e\x89\xcc\xff\"\x42\x87|\xc1\x80\xf9\xab\xb\x8c\xc0\x64%\xc6\x93\x5\x45W\xa3L" "\xaa\xab'\xa6\x81\x8\x1\x82\xb4\x8c\xae\x13^ \xf9\xb6\xf6ht\x1e\x35m1\xb4\xdcY\xc4" "z\xc1\xe6\xdd\xfb\xcb\xa4&FlM\xdf\x89\x1c\xd4\xf3\xd2#\x6\xfd\x86p%6XFQ\x1\x17\x19" "\x1N\x9e\xfe&\x8bLdb\xa8\xf4\xef\x97v8\xef\x31[\xff\xd8\xa8 \xd6/\xbb\xbe\x63L\xfa" "2 \xb3\x66Ws\xe2W'\x9\xc6l\rOL\xd7\x8d\xe4\xc0.\xab\x9L\x9aN\xdc\x9aY\xaf\xa4\xb3" "\xb0\x8\xb0'\xb0\x8b>\xfc\xba\xe6\xe8\xa5\xd9\xe6\xd9\x18jT)$}|\x9d\x82\xdb\x9e\xca" "\xe8H\x13\xae\xc3T\x18y\x18\xd9\xee\x11\x86\x1d\x61,e\x3`\xb3\\\xba\xe9\x97G\xd7" "\xf8k:!\xda]?.D\x84\xd8)\xcfx\xa7\x1e\xe7\xab\x1ei\x11\x18\xcb\x9c}A\x18M\xe1\xa0" "\xed\x91PAh\xff\xeaVe1tMA^\x92\xda%\xc6\xb6z\xfa\x98O\xeb\xd3*\xc8,<\xc2\x11S\x87" "\x93Y\xec\xad\xf3Ma\x0\r\xd7$\x10&\xfd\x97\xed\x95\xe\xb4\xe2*U\x8a\xa4g9\xc2\xee" "\xf2\x33>\xfc\x88\xa8\x32q\xebX\x8c\xe1'\xe2\xc9\x18o\xac\xd7Pl\x8f\x31<\x9f\x98" "\xc3p\xdeU~c\xe6>D\xfbO\xfd\x9c\x85\x39\xf0j#RZ\xcb\xbc\x91\xe9\x2\x66\x94@\xebU" "\xc5\xff\x1a\xe\x34\xb7\xb9\xe1\x12\xeR\xf3\x91\xb2\xf8\xbe\xf7\x63\x8c\xc2\xf4\xca" "\xb7\x94\xea>\x8c?\x14\xc2y\xec\x36\xfd\x9c\xa3\xa0\xe9\x7JjY\xe6\xf8\xd2\x90\x94" "\xcbV}\xb1\xf7:\xb5\xf4\xee\xac[\xeb\x31\xe8\x37\xe4\xafG\xe8|\x98\xd0H\xc3\xd5\xd7" "S\xf2\x30\xbb=\xb5'C/N\xdb\x7\xa6\x36\xa1\x45\xb2\xe\xcb+5d\xee\x9c\x6/\n(\xc7\xd3\xa3\xaf\xd1\xa9\x1b\x37N\xb5, \xc8\xfb\x18/\xdd,\xbe" "}\x88\x18\x82(.\xdd\x9cG\x86V\xdd\xb5\x9c{\xb2\xff\xa4\xc4@{SV\x9e\xc2*\xaf\xba\x9e" "\x19xI@\xf5\xc6t\xce`s\xbe\x8f\xd3u\xcf\x15\xc0\xcc\x88\xab\xc9! \xba\x2\xec\x83" "tdd\xfdrm\x9c\xb{\xb9X\x9f\xcc\x34\xaa?F?\xbb\xe0(\x7f+<\xbfz\xfe\x3\xce\xc2\xc7" "*\x4I\x3\xc3$n\x94K)#\xdf+L|X\xed\x5\x66H\xb5)VJ\xeb\x1c\"\x87\xd5\x62\x98\x8\xb0" "\xce\xa3sN\xdb\xeeM\xb3I8\xda\x8e#\xc0\xd4\x39\xae\xa4\xbe#\x87\x96\x42\xe7UH\xdc" "T|\xfe\xa6\x94\x13\xfc\x9d]D\xf0\xb6%\x18\n\x8\x35|\xe4\x85\xdc\xfcw\x85\x36\x9f" "%\x8e\xeer=~/\xcaq-\xb0\x95[Y\xbc\x94\x88\xf4\xeb\x9e\xab\x1d\xe\x8b\xe8)/\x91\x1" "\xce\xae\xd0\x86\x80\x92\xba\x9et=R\x83L\xd4\xaa\x1a\xf0\r\x95\x91:\xfaO\x1d\xba" "\xef\x9dh\xb0\x1b\x63\xd0N\n\xd2X\x8bL\xc2\x3\xee\xe7\x18s\xad.W\x92\xbe\xb3\xcb" "i\xad\xde\x9f\x99Z{6\xf1\x3\x94?\xc4\x93\x66\xaf_\xee\x96\x8dj?\xaf\x39\x36)\x95\xa2\x2\x9ext\x9e" "\x89os\x94\x86\xb2/\xce\x11\xa4:hUF\x8e\x7V%\xd5\xe8\xc4\x89\xebX\xb0\xfc^\x1a`\x94" "[\xf5\xa6\xea\xa0\x19\xf8>\xbf\xacTs\xfa&B5\x8e\x16/\x1d\x8b\x30L]\xc0Y\x89K\x85" "\xf1\xfb\xf5\xc7\x1e\xcb Mm\xf\x1d\xcf\xf0\x90\x9\x91\x6\x1ez\xc4\x92>\x80\xe6Q|" "`><\xa4\xf8X\xbd\xb7t\xa0\xc6/W\\1_{g\xa6\xfa;\x4\xdc\xb2\x92\x32\xfd\xb5\x94^\xf2" ",E\x1a\xa2\x1e\xa4\x8b\x98%\x42ys\xc\x87\x96O\xb\x45\x8fG$\xbf\xd9\x8f\xe2\x9e\x46" "\xa3\x63]*b\x8e<)\xcf\x87\xb1\x34\xe0l\x97x\xcc\xdc\xb2z=\xd5\xe5&\x16W\x90%\xd8" "B-\xb7\x85\xab\xc7\xa4M\xad\xa4\x5\x99Y!`j#\xa6\x1a\x36\xfdh\xa3/\xae\x31\xdd\x66" "\x1a\xeb\x31\x33\xc5\x1a\x86\xed\x85\x16\x94&\xa9\x90\xe\x82\xd7;\xfd\xd8\x5$^\xe6" "6\xccwy\x85\x46\x39O\xf1j\xb4\x1cp\xdfh\xa2\x7\x8a\xfd\x14\xewH:2bo\xf\xff\x30H\xf6" "|\xff\x6q\xcd\xbf\x64;d;\xf4\x3\x7\xb8S\x8b\"<\r)\xd3$\xbf\x80\xbc\xce\x8\xa2\x9c\x63\x9e\x92\x89# \xb6z\x98\xbb" "\xd3^\x9\xa0\x30k\xaaY\xbc@\x1c?\xbe\x9a<\xf8\xa4\x45\x1f\xcc\xb7o\xae\x8c\x91\xb7" "\xb?\xff\xac\xd3\xb5\xa1\x62`x\xe4\x4`\xb3\xec\xe5X?*\x97\xf9=\x8f\xca\xdf\x61W\x1a" "[p\x8b\xdb\xa5\x88\x1c`#\x7\x19\x7f\x96\xfb\xeb\x14\xaa\xc5\xb1\x1f\xc0\xe9\xe7t" "Mnj\xf2\xdd\x97\xd0\x0W\xdf\xe7\xf9] \x15\xae&9\xf9\xdc\xb9\x9c|\x10\xf0\xb4\xb6" "J\xd6\xe1~O\x2\x8b[\x11h\xe4\xebJ\xea\x96\xf3\xd2v\x92\x9b/\xd2\xa4\xffl\xb2\xde" "\x3\x8\xd2\xfa\x7\x33\x1d\x35\x62\xfd\x18\xd7$\xfZu\x86t\x83\xb0\xe0V\xbd\x9f\xec" "w\x82\xd6}\xdf%\xe:\xab\xac\x1-y\xd2O\x15,\\\xd0\xbs\x90\xcd<\x87\xdb\x8bq\xb2}M" "-G\xac\x82\x43\x44\"*u\xa4\xfe\x12\xad\xd4\x80v<\x91\x17\x95s\xa7\xd0\xb8pc\xc7\x8" "\xce\x1\xf2\\U-\xc1\x0\x30\xb4v\x19P\xfe}\xf2\xcf\xc3\xd8h\xa2!a\x1}\x1e\xd6]\x11" "\xa9\xadN\x7fL\x91\xc8\x7\xf1\xa3\xb2\x9e\x36\xe6\x8c:\xdb\x98\xb8\xe7\xcf\x30o_" "Z\xbcT\xe3\xfd\x83>\x8d\x86\x42\x1f\x5\x0*\x9f\xcf+O\xef\x30\x45w\xda\x43M\x9e\xab" "\xbb\xef\xcb\x98\xde\xb0\xa4\xb4@\xe7_&~\xa7\xeb\x92Zq\xca\x94x\xc7\xd6~Y/\xdf\xea" "h\xb6\xb4\x35Y\xf4\x9e^\xde\x82\xed\x83\xb2\n\x8b\xb1\xba\x96\x86\xbb\xee\xef\x33" "E\xcf\xa4\x46\xc5\x41|\x12;\x9f\xa7\x9d\xc6\xcb(\x94%\x65 \x94\x35^\x12\xe4\xbf " "\xd2\x42\xe0\"\xf0\xa3j\x1c\x19.{\x81\xcc\xd2\x92\xc5\x0\xab\xc0\x19\xepM\xe2m\x93" "\xaf\x82\xd4\xe1\x61*\x7f\x34\xb3\xe9gO\x90\xcc\x8c\xd1h\xfc\xc5\x9d\x37\xbd\xbe" "-9\xd0\xa3\xde\xba\r\x94}\n\x4\xeQ\xc6mj\xb1WP60Mgt)\xb2\xd7x\r`\x6\x5%\xff\x34\xc8" "\xf4g\x10.\xe4\x64\xe2\x42\x8R1L\r\xb2\xe5\x17t\x4&Z\xe\xcd\xd0\xea\x2<\xd5\xc3\xe3" "\xeb\xc5\x1\xb6YsW\xf3\x1e\xf1on\x8d)\xcd\xe7\x0\x13\x1el\x87\xa6\x18\xcb\xc2\xba" "\xfa\xda\xee\x8f\x9d\xces(\xdeG\xf4L4\xf2\xdf\xc7\x90_KUKO\x10 \x2\x8cK\x94!<\x0" "\xa3\xdb\xb\xd2\xabj\xd9\x13'\x86\xba\x38M\xa8\xc0\xd1\xc\xb\x97\xb5\x3U}\xba\x7" "\xeb\xe9|O?\x88\xf2\xbe\x1d\x88\xbf\x8b.'lm`\x9d\xf7\xe2\xb7m\xfa\x33\x8d(\xa9\xd3" "\xd6%!T\xd9\xd0\x30\x85\x16\xcf X\xc0Y$m/\xb\xbc\xd1\xc8`e\xf6\x41\x33\\Z\x1b\xfc" "\x1b\x66\xbd\xc9\xd2?n\x82\xb8 \xb1\x80nq\xafO\xc2\x44\x33\x8aK\xa0{\xe5\x19l\xa9" "c\xc1\x1eq\xe2\x99\xcQ\xaa\xf5\x8d\x31\xc4\x8d\xfe\xb2\x0\xb8\xa1\xff(b\x1a\x9b\x15" "\x8e\xbbU\x85i\xd6\xc2\xc8\xf8\x33\x46!\x83\x7f\x9c_\x19\x32\xc0\xeb\xc5\x1a\xe4" "\x1aPF`\xde\x31H\xe8I\xf1\x32G\xdcs~\xbd,\x8\x15\x61t\xc0\xf9\xffx\xbb\xf6-\xd5\xd2" "\x0\x2\xb6OIhT\x8aZe\xcdl)\x1d\xe4\xef\xde]\xb8\xf7v\xec\x93\x13\xd7v\xd9\x36\xdc" "\x2\xc5\x61K1;\xfe/R\x82\xb2\xc2\x2l\x4\xca\x93\x1\x99\x62\x9cs\xa2V\xb8\xc5\"\x94" "\xc3\x63\xf4\xa7@J\xdbm\xcb\xf2x\x13\xea\x8d\x8d\x95\x12\xdf\x10\xc7\xec|\xbd\xce" "F]\x9dLx\xe7/:.\xfa\x66\x14\xf0\x1e\xde\r#\x4\x1cO\xc1l\xe4PK\xeb\x17\x6:\x97\x5" "-\xec\xe3\x1b\xec\xe5\xba\xa5\x82\x14\x44\x7f\xa9*u\xb9\xae\xe8\r\xe8\xc5\xae\xb8" "D\x16\x10\x6\xb4P\xc2\x9bul\x1d\xe7q\xb3\xff\xd0\x92\xbb\xed\x88\xc1\x31\xe5N0\x91" "Z\xf3\x1a\x12\x9a\x15\x42o7k\x7M[\x85^\x19\x99Z\xb0\xbe\x1c\xb2\xbd\xe4#h\r&\x87" "\xbb\xfa\x66G\xc3\x96pA/yR7:F\xc1\xf1\xad\xf9\xc2\xdc\xca\x37\xb3`#C\"\x6\xb\x38" "\x18\xca\xcdP\x99\xc3\x80\x14\x96\xc2\xf0\xd6\x5\x61\x84$\x10\xba\xfd\x9e\xf4\xa0" "n\xf\xa0\xbf\xb1\xae\xf8|\x81+d\xda\xae\xf7\x1\xad\x1f\xd5\x38\x10\x86\xf1\x1&28" "\x1d\x7\xab\x95T\xd0\xac\xa3\xe\xd1\x1a \x8[\x14\x1f\x8d\x94m\x91\x83L\xbe\xce\xb0" "\x92zp\xaa\x62\xc2\x92\xec\\'E\xa8\x1b\x9c\x8b\x9a\x90\x13 \x17*\xe1t\x1f\xaaR\xdc" "\x9f('\xba\xc1\x8b\x1b\x5\xeb%{8\xb8\x44\xf5\xff\x4\x42\x41Y\x1f\x5+\x91h\"\"\xb3" "\xcc+?n\xe1r\xb\x1c\xf9\xa2\x8e\\\x9b\x91\x15\x18\x45\xab[\xffte\xe1\x8f\x35\\\x0" "\xd6W\xce\x61\xb0\xf2&\xa5\xcd\xda\xd9O\xf\xdd\xfa\xc9P>\x16\x87\xb2\xbb\xf7w\x1f" "m\x8e\xec\x8e\xc5\xa3\x37}\xdc\xc7'X\x5\xa6\xc\xe2l\x1a\xce\x8b\xcd\x8f\x64\x6\xcb" "\x0\xad\x46\x45]\xf9\xdf\x46\xde\xfe-\x8b?\xf7\x33\xdd\xb1\x4\x96R\x9a\xad\xee\x8b" "\x9\xb9\xf9\xd8r\xbe\xfb\x9b\xbb(\x98X[\xf4N\xfe\"}\xf\xa9\xec\xf6\x34\x30!6`T\x89" "\xec-$dj\x1|^\x82|\xc7\xe6\xb5'\x17{H\x1\x9c\x91\xe8,\x80\xe0\x64\x8\xccRM\xbe\x12" "U\xdf\xab\x32\xe9\xa2\x1f\x39\x38\x32\xf1\xc7|\xdbt\xdc\x11)\xe3\xe\xb8r\xea\xf8" "\xc0\xb1O\xbc\xb4\xc7\x7jR\xf2\xb2\xfdK\xdd\xd6%\xb1\x1f\xc2\xd7\xd7\x90\xff\x4\x15" "\x19\xb6\xf8\x31m\xc1\x8f\x89\n\x8e\x80\xc2\xe5\xce\xe9\xfd\x19\xec\x9b\xa6;\xa9" "\x17v\xdb&\xeb" "\xb9`\xd3R&Z\xfa]`)w\xe9\xc\xf\x9d\xe8)\"\xa6\x9e\xe6\xaf\xfb\xd7R\x16\xc7\xf5:\xc" "n\x11\x9bR\x4\xce\xaeJ\xd9\x94\xdb\xdb\x65\xf0i\x99\xe0`E\xdaV\x86\xe0\xf3\xd2\xbd" "!\xbd\xd3\xf9\xce\x1c\xbc\x9b\xb6U\xf0\xd2\x95\xa7\xa4\x98qc9\x81\xd1w\xc9\xc8i4" "Ps\x89$\xd9TG\xb9)\xb4\x63X5\xe9\xcd\xd9 \xb0\xf7\xe2\xc3*\xf5\x85\x34\xe2\xe4\x38" "\x96\x7f\x1c\xfe\xf4\xfc\xc3l\xe\xf7?I\x99\x8c\x14\x97\xb7N\xd2\xd4\x37G\x9d\xc7" "X\xb2\r\x8b\x8e\xcaO\x89\x36\x8b\x8dJ\xb3\xdaS\x8fo\x88\x12\xd4\xf8Z\x15\x7P%\x80" "fvy\xf2\xb0\x65\xe3\xe8\r\xa2\xad\x87\xafZo\xc7\xe\xa1\xfd\xd2\xf2\xab\x91v\x92\xb7" "\xb2\x92\x89v\x1Y\xa2\xcf\x95\x88\xc5\x87\x91\x10\xd4\xb2\x1e $\x1c\xc3\xb\x37\x9d" "\x13\x85SH\x97\x0\xa0\xff\xf3\xf6\x35\xe2 w\xff\xaa$W\xa3\\\xf1\xab\xf7\xc6$\x82" "\xf1j\xa5\xad\x99<\x8c\x1e\xfc\xa7\x9c\xf5\x18o\x1e\xe2\x82\xd3\x0\x8b\x80Z\xf\x17" "\xed\xaa\x33\x0.iI\xa0\xb8\xc4^\xb5u\xc3\xf4\x8f\x9b\x83\x39.\xeb\x37\x96\xdf\x6" "l\xb6\xf4\x1c.,\xdb\x39H\xd0\xab\x8a\x12\xd2\x1f\xf1qxL\xc1\r\xafJ\xf5\x38\xceg\xff" "C\xf3\xc5 X\xedi\xc9\xea_\xe9\xcay\x94\xa9\x87\x9\x45|\x80\xdak1\xfb\x63O\xf4zZ\xa2" "K\xe0\xcb\x39\xf9\xe\xc4\xb6\xb1\xb8\x82\xaa\xd8)\x9f\x11?\xa4\x88\x1e\xa0\xc5\xc1" "\xae\xe1\xeeH\xc4\xed\x37\xe7\x3\xd4\n\x41\xc6\x8e\x1c\x8f\xf8\xee\x17\xdfy\xb7\xc4" "Jv\x1a>\x94\xcdO\xcg\xddZMp\xce\xb2\xc3\x9cU\xc0\x0\x15\xb\x32\xed\x99\x38\x1c\xae" "'n\x88\xf4\x39(\xe1\x13\xdd\xfc\x95\xd9S\xee\x30\x46\x1fY\xa2.\xb8(\x9e*BJ\x95\xf1" "\x95\x5\x1chp\xbb\x90\x38WY\x9\x15\xc4\xca\xdb\x39\xa8\xad\x9e>8\x9d\x1a\xec\x37" "W\x84]\xa5\x17\x65S\xc6\x1d\x88\x99l\x9d_\xe1P\x87\xd5\x1\xbd\x6\xfe\x44\x9b\xb7" "\x85\x1cs|\x96|\x9dLT\x9\xa2\x7fp\xdb|,\xb6]?\xd0\x35(\x8eZ\xe0\xfd\xf2\xe4\rRj|" "\x80Y4]\xda\x30\x6\x45\xa4\x5\xa5\xfd\xc\xcf\x1f\x9\x41)\x80\xff\xb/\xfbn\x81N)x" "S\xeb>$\x3(\xcJ\xfe\x1e(~]}2\x18\xe2\x98\x62Y\x86\xfco\x7\x8b\xec\xdf\x95\xc4\xba" "!+\x87}e\xae_a\x92\xf5\xd0\x99\x1a\x9a\x35v?\x97y>a\xa7\xf1\x2\x9f\xa5\xe9[\xdbl" "\x9c\x8aQ\xa1~_\xa7\xe2\x8f\xdbG\xedX\xbd\x17\xf4|d5\xc9\xb4\xd9L\xab\x9bo\xe9\xaa" "\xd8\x86n\xb4\r\xf2\xd1\xd1\xf2,\xaa\x96q&\xdf\x87\xa4\x35\xc3\x18\x6J\xa0\xb4;1" "F$\xd6\r\x43_x\xc0\xf0\xe\x62\x39\xfe\x9OANg\xc2\x9b\xdf\xd5\x95\x8a\xf8\x3\x91\xc5" "X+nd\x91\xf2\xd4\x89M\xa1\x15\x6\xa1\xfb\xde\x3:\xc9\\\xde{\x1d\x37k\xf5\xc2\x63" "\x98\xb9\x9b\xf9\xdd\x95#\x85I\xee\x8b\xa1\x11\xfbx\xbd\xfcI\xd0\x5\x99\x81\x63\x64" "P%v\xb5\x83\xc\x46\x90\x36\xac\xdd\x1f\x2\x5\xdd\xb5\xadh\xcf\x9b\xaa%vzh[\xb0S\x6" "\x1a\x0\xd9(\xd7\x1e,B\xad\xe1\x61\xb7\xfa\xc0\xcbM\xd3\xb9&2\xd0\x93\xe2\xed\x95" "\x90\xa2\x14\xb8\x41\xe5\x33\xc2L:\x8dg\x17\xb8\xc\xb6\x1a\x1e\xa6I9=\x83\xc0\x90" "(\xb1\x16\xa2\xda\xd7\x14\x9b\x17z\xc0\x0\xbf\xf1\xcf\x31Sj\xee\x64\xc8\",\xf7v " "\x86\x84\x95)\xf4\xd9\x43\xbd\xb5H\xeb\x1c(\xf1{u\xf9\xb1\xcdt\xdc\x93\xefL\xfb\xb9" "2\xa2[_\"\xe7p\xd2p\xc7\xde*\xd9v\x92{\x8fu\x5\xc3\xfal\xc8\xba\xec\x8\xf6\xb4\x84" "\x1f\xa8\x1d\x16`\xc7\x11\xa4\xf\xe7\xfeP)\x10)\x7\x37\x44\x41\x31\xeb\x93\x19~\xea" "\xe8\x0\x89\xfc]2D\x0\xf2\xdcKC\xd5M5`\xbe\x9e\x8b\x9c\x1f\x96\x13<\xaa\xe4\xa4\xa1" "P \x7f\xb\xa3+jm\xdb\xcc\x9f\xe2\xc3\x31\x3\xb1\xf7\xcc\xde\xab\xa1x\n\xf8\xfe\x61" "c\xc5\x14?[\xa8s\x2\xde\x83\x97\xee\x8b\xde\x46\xe2\xd9\xe9\xa9:\xc8\x83\xc6xb\xc1" "\xcd\x9a\x94j\xe0\xd5\xcdu\x9\xcdY\x14\x1d\"\xb9\xedR\xaf\x36w\xaf#\xeanC\\PU\xed" "F\xad\xd9-+\xc6\x88\xc0\xc7\xab\xf\xe1n\xd2\x84\x98n\xe4\xa4\x18\xe5\xda\x8\xa2\xc5" "\xc0\x63\xff\xd3NG\x2O\xd2\x83KC\x1\x33\xfe?\xa7\x86\x1e\xda\xf9%\x1a\xce\xf0-\xb3" "\xf2\x65\x1\x12G\x5WGz\x15\xa5\x85\xa4\rRe\x1L\x12Oc\x99ye\x89\x90v\xd9\xd1!.\xeb" "\x16J\xb0\x9e\x95\xff\x84\xc9#=\xb6uB\xad\xa3|\xe7\x9c} \x17\xe0~]=KD\x3`\xe4\x98" "\xc1\xe\x33\x31\xda)\xfb\xff&\xde\x8c\xa7\xc5>0j\xef\xee\xbb\xc5\x15\x1a_\xa1\x90" "Z\x94\xed\x81\xc0\xdav\x8f\xee\xc1\xb9.0f\xc3\x39\xff\xb5#$_q;\x93\xdb\xda\xb6\xa4" "8\xfe\xbe\xfb\xa3\xa0\xd0\x86\x18n\x1d\xff\xf2\x95\x35\xe9\xa7\x13]\xb1\x1d\x34\x6" "\xe8\xc9H&:\xac\x97\x94\xf2\xa5L:\xc3)\x86\xb5\xe3\x11\xf9\x92(NS\xee\x6\x9b\x8e" "\xf2\xd8m\xb6\x39\xd1\xf7\xa0\x3\xcb\xbe\xdb\x1c;\xd9\xc2^\x1c\x15Vx\x12\x4o\x82" "H\xdd;\xd7\xbo\xb4\xd0\xddoNX\xde\x66\x19\x96\x85\x81\x13(o\xcf\x45\xf7.\xa9\xd1" "\xf1~|\\\xc9\xbfu/T\xc0M\xbd\x85\xa7-\xf2(\xed\xb1?\xb0\xd4\x99\xa0\x82\xa7/r-\x9b" "\xacV^\xdf\xdb\xdb\xab\x1aZ\x7l\xb\x92zW,\xba\xf0\xd1\xe6Z\xeR\xac|\xa7\xea\x91\xc1" "r\x8c\xd3\xa0\x82>\xa3M(S\x8cu\x1e\x1Nka\x19\xdbo2A\x7f\xbc\x37\xdd\x39\xf8yi\x7f" "\xb3\x95\x3PD\xef\x92n\xe9\xb2\xf0x\xdf\x8d\x9eK\xf7\x14\x36\xe1\x90\x89\xaa\xfb" "R\xc1\xb9i\nc\xc4!\xf0\xc2\x66\xdc\xa9\xdc\x1c\xd5\xc5\xea\xae\xf1\xb6\x63\xf=\xc1" "\x81\xfc\x9d\xf0\x43\x9fQ)\xad\xe1\x37\xed\xf9\xaf\x0X\xec\xdb\x46\xd9M\xe2t\xae" "\x8e\xbf\x91\x7\xaf\xb5RaV\xed\x35\x64\xfbU\xb7iu\x1c\x92\x9cX7\xf2\xd0\x17\xf6\x12" "\"IPa]\xa2\x3\x38\xca\xe6\x36\"l\xcf\xe5\xbf\xeeL\xc1\x93UJ\xc1\x63\xe4\x93\\\xea" "\x9b\xd1\xa7\x1apNb.\x2\xfe:eD'\x2\xf2\x46\x31\x98\x42k\x1d\xf8\x39\xeai\xc4\xaa" "\xf9\x30\x18\x41*z\xd0H8\xf2\x0\xde\xad\x98\x17\xe1yl\xcb\xe4\xf0\x1\xe4\xec\x3\xef" "\x16\xef\x9dkP\x18\x17\xac\xf4\xcd\x12.\xb7v\x8f\xd6\x32\xf7\x98\x92\x13\xdd(\xfd" "\x19M?\xf8J;\xff\x1\x37s\xa7\x7f\xc\x8e\xf7\x83\xa8\x1a\xb5\xbf<\xba\xc9\x4\x19\x88" "\xdd\xe3>\xe#\xa9\x11\x84`\xae\x8b\x14\x93q\xddN1\xcd\xee\x3\x16\x1b\x36\xa0\x85" "\xdewO\xb4\xb7\xa2\xbf\x14\xee\xc9\xd5\x99\xf3\x99\xa8Y\x9f\x86_\xe0\xb3}\x8e" "T]\x88=?\xc8\x33\xd9\xe6\x97\xe9+g\x19\xfeJ\xf3\xef\xaf\x93\x82\x82JK\x99\x12#\x90" "\xb7Zo3/\xd6R\xe7\x46\xafg\xe5\xdb#\xb2:g\xe4\xb3\xb0@\xa7\xda$\xecQ\xe8\xf\xbf\xc4" "\xf2\xf9\xe3\x62&pdO\xe1\x11\xffG\xa8 \xfe\xc5\xb7!\xb9\x44\xbb\x31\xe0\xd4\x81\xc1" "T\xde\x1bz\xe0\xe5\x3\x8b@\x18\x38\x33\x34\x81\x81\xa7\x17|J\x2u\x1b_x\xe6\xc2\\" "\x1d\xa2\xc1j\xe4\xf0\xc6\xdb\x5\x7f\x1cP\n\xdf\xe3$\x83\x38\n\xad\x8e\x98\r\x43" "U!N\\?\xf2\x2\x17\xf4P\\\xf7\x8d\x9a\x39\xeb\x87\xfc\x9aG1\x16\x42\xec\x8f\xf7\xcc" "\xa0\xf2\xe3\x8e\x99;\x4\x9c\x1e\xb3;\xaan5Q\xb5;\xa6\xf3\x39\x44'`8JEb\xc0\xd4&" "a\xbf\x62[\xa8\xeMY1\xcb\xb8\x97\x94\x85\xa3;Xoxs0\x0\xab\x4Z\xe5J\xa1\x1b\x31\x88" "U\x98`\x9a\xec\xf-LE\xb{\xc6\xac \x91\xc4\x85\x9b\x83\xe8\"YOYy\xda\xbb:\x6\xd1\x9a" "d8\xf5\xf5\xdc\xd2\x6o#\xae\x1\x11\xd7t\x1f\xcd_};9\x15\xd5\xeb\x9fuEc\xda\x1/\xdb" "\xacL\xe4?\x18\xbfm{\x5\x9aK\xee\xa6s\xf3\x1e\x8e\x7\xae\xf9\x8\x38\xf2\xe9\x8a!" "L%\x10m]\xcd\x15\xdb\xef\x8b\x7f\xe1})~7P$\x9\x1c\xa8k\xd9\x9c\r\xe5\xa4\xbe\x1b" "\x90\xa6q\xc4Q>\x82\xed\xd9\x42\x96\xf3\xf5\x91\x8e\xe1\x88\xe4\xc9\xc2\xdd\xd0\xf5" "y\xfc\xa3&\x14\xbaV\xb4\x84\xbf\xf5\xa3\xea\x11\xf5\xb7n\xe7\xf5\xbf\xb1\xb8\xe1" "\x0\xcc|I\x95s\xb9\x61\x46.VDT\xb7\xb2h\x93\xf0\xf9\x92\x9a\x9f\xde\xfa\x2\xfd\xa1" "B\xc5.\xdb\xb9_x]\xb3\x86G\xd8vg\xc8\xe0\x95\xacw\xd9\xda\x34\x18\x7f\x84j\x16KS" "\x7f\xec\x8c\x99\x1d+\x0\x9a\xcc,F\x88G\xf7\xd5\x98\xe1\xbe\xc5I\xb6\x81\x64\x42" "\xd7\xb6H\x96\xd0pj\xad\x33w>\x91h;\r\x9a\x12z\xa2h\x18\x84H\x89\xdd&\xe0\x86\x9f" "\xae\x9$\xa4\xe2\x89?b\xb\x34.\xec\xfd\\\x3.\xec\x31\\\x1b\x92\x97\xe7\x33\x81\x9b" "\xeb\x4mP\x91p3\xe4k\x1dqqQ\x8d\xa1\x1c\xdd?k\xc0jN{0\xe4$\x2\xda\x19\x1\x30\xa7" "\xd4\xd7\xa9\x30\x84\xdaY\xfd\xe4\x98\xf0U\x84&\xb7\xbe\x30\x1er:\xca\xfa\xa1T\x9f" "\xa3\x41\x90Zjj\xa3m6\xcfLgx\xeb\xbd\xc7q\xc5\x33\x35~\xca]R\xa8\xe7\x87\x32\xdc" "4\x18:\xb9\xd6\x41\xf0K\xf0\x37\x38\xa4\xbf\xa3l\xd1%s\xcb\x63U-?\x8b\xef\x43[H\x8b" "\x7f\xfa\xec\xa0\xfbg\x13\x46\xb8\xaf\"\xbf\x63\x4\xa8\xb8\xb0v\xe5\xe0\x6\xe2\x30" "\x9\xc9>\x7=\xf2\xa0\x1e\xbci\xc5\xbb\x80\x84\x9b\x85\xfc\x63]\xcdG\xfb\xfd(v9,\xd1" "\xb6\x9c\xc2\x38?F\xef.\xc5/\x1e\x44\x7\x86\xe0\\\xd2\xc6g\x88\xd3\x5\xe1h\xb\xe" "\x9f\xeb\x94OH\xa7Ph\xae\xcc)\xac\x0\x15#|4Kz\x16\xd7\x66\xf0\x45\xb1\xdc\x34\xb1" "\x16h6@Ne\xc7\xdeP\xf3\x30\x39\x83\xf0\xb1Y\xdb\xe8\x83\xbc\xd9\xf1]\xd4\xb0\xf3" "O\xe1N?Ee\x92<\xaaz\xd7\x10p\x10Q\xb3\x86\xf8g\x19\xb3H\xc5\x9c\x9f\xe2\xee\xf3J" "\x16\xfe\xe\x33\xb0?\xe5m\xf6\x65S\xbc\xb\x30\xdb;\x96\xa1\x1a\xe8\xe2\xcc\x36u\x4" "\xe9\xf9\x11)\x1e\xea+\x92\xf6\nZ\x9d\x92\x2\xc1R\x9f\x39\xbc\xa8\x61\xbc\x37\xc5" "`)\xbf\xbcp\xd3\x9e\x66\x34\xb1\x1b\xad\xcamx\xf7\xb8\xc7\xce\xfb\xf8\x1\x32wp=\xfb" ";\xbn-?\xef\xc6\xa5W\xe1K\xfe\xd0*8\xd6\x13\x43=\xbd\"\xfd\xa5\xa8\xe7\x9e\x0\x98" "\x82\x62>\xb8im\x9dr\x9f\x92\"\x1c\xf0\xde\x45\n\x97\xd5\xe5\xbd\xf4\xc2\x6=\xd5" "\xbc\x62\x15#\x8\x94\xacoe>\x99]\xc6\x1a\xd8\xc\xc5U\xa9G\x96\x5\xd2\xfc\x42Vi\x8b" "\xd3\x17u\xf9\xff\xee\xfb-\x8aR\xa5\x15=Z\x92p\x11\xcb\xc-\xcck8\xe\xad\x6RtKL\xdb" "W\xcd}\x98\x81\xe8\x5i\xff\\\x83\xe9\xabT\xf8I\x16]z\xef\x96\x7i\xf0\x92\xc0\xc1" "\xe4@\xc3];\xe6W\xe7\xbb\x88\xcd\x61\x19\x31\xbJwu\xe7\xe5_\x13\xd8\xc2\x81(\x1b" "\xaa\x65\x16\x43z\xbe\x9d\x90\x2\xc6q7#\x9d\xae@\xd9\xe4\xedlj\xde#\xbcnk=,\xb0g" "=\x18y\xf8\xb3\xe5\x89\x85\x9c\x9d,#\x89\xdb\xed\xd2p\xe6J\x3(\xb7\xad\x43\xe4Z\xea" "\xe5\xac\xea\xe5S\x9e\xc0\x18\xbb`\x3\x92\xba\xaa\xef\xd5\xf\xc1m\xe0\x1a\x18-\x94" "z\xef\x11Z\xa3\xd5\x32\xbfW\xb7\xc1\"R\xe8\xf0\xda\x91\x8f\xbfqh\n\xb5\xc\xff\xcd" "a9u'\xf2\xcc\x1\xed\xef\xcbG\x6\xf3\x4\xed/\x8f\xb4`\xc2\xf9)yv*}\x98\xc8Q%i\x9f" "\x14\xec&C\xf6\x90\xe6\xe5\x1d\x94|'\xca\xe3n\xc6G\xe1\x82\x3\x99\x86h\r\x2\x90v" "\xf|\x95\xf8+\xb0.\xe9%TH\xb7\xa2_o\x80\xd5\xb5\r\x31\x39\x82~\xc5\xc1\xab\xe6_\xda" "\xe\xfaS]<\xf2\x1b\x4L\xe9\xc\x8b\x7fK\x8d\xa3\xca\x38$\xab\n~\x87\xf3\\\xdb\x35" "\x1du\x85\xbf\xa7\xaf\xfc\x1cM\xev\xec\xfan\x3\xdf\x84\xe2gN,@\x1\xa3\x18?\xbc\xfa" "\xe9\xc9\xb9\x6\xd2\xc2o\xbc\xd0OpL.\xad\xa7p\x12\xfb`\xc5\xe2\x92L\xa2\\\x19\x8b" "Qf\xf5n\xe9\xe3L\xb6\xe7G\x89\xd8 \xec\x41\xc3\xe1\xd1\xbf\x38\xc7Q\xba\x9d\xa7\xfd" "\xb9\xcc\n\x38\xcdO\x8a\xa4\xa1\x9f\xf3Geh\xe8&\xcb\x9d\xf6\x10\xbf\x96\x9c\x3\xea" "SNm\n-\x97}\x81\xf5\x66\x32\x43\xd5\xba\xe8'\xf8\x5\xb\xeek7\xe1\x1f\r\xfd\xfe %" "S+\x6\x39G\x1a\x46Y\xba B\xc4lD\xe3[\xb1\x34\xf3\xe6\xcf\xf4 ,\xcblg\x83\x61i\x9" "(\xe6\x99\x83\xac\x90\x7f\xfbi\xbe\xdahg\xf5-%<\x12\x63'5\xc9\x9c\xd1qoF\xe8\xb9" "\xb5\x96\xfc\x1b>l\xda\xe8\xbe\x34\xac\xe2\x98|eF\xebN\xdf\xc0\x9d\xabH\x9eO\xaf" "\x9eN\xff\x9eP\xfb\x89\x5\x96g9\xae\x94\xfdP\xe3\xfaz\x8ak\xe0T\xb8\xb2U\x9\xbc\xc5" "B\xf8x0\xc6\x1d\x38\x5\xd5\x98\x93\xaf\xb5\x96\xc5W\x8d}\xee`\xf1\xe6\xc9\xc8,`7" "b6\xc2\x12\xc4\xb1\x36h(\xb8\xac\x8d\xa8\x9fN\xf1|8\xd8\xb0\xfe\xb4\x65|\x95\xd7" "c(QqW\x3\xdb\xbf\x11\x63y\xa3\x38R\xf8\x85LH\x8a\x1\xe7\xad\x81l0B\xf\\\x12O+\xf1" "`\xfeH&\x16\x9b\x97\x85\xb5GX\x0\x33\x64\xe1\x32\xd2<1\xa2vr\xb7u\xb5\\\x89;\xac" "B\xd0X-tc!\xac{a$r\xa8\xb1\xa6\x37\xcc\xd0h\xa8gs\x6u\xeb\xd1\xb6\x0\xf2\x37\x65" "T\xdd\xdb}\rt#\xf8\x4\xb3\x4T\xd4\xddz\xaa\xa8\xd7\xf9}S\xd8\xce\xe2\x36\x37t\xd7" "\xe6\xb2\x81=\xa6\x4!Z\x8b>a\xcf\xf1h\x1rviT\xc2\xc5\xbf#N\x98M\xd8\x9b\x18\xfb\x95" "}\x81~\x89\x95LE\xf1\xff\x8aT>\x84\xfa\xc6\x31q\xc6\x9a\xda\x1TLn\xd7L\\\xa2\x84" "\xbb|\x96\x82\x8a\xb2\xc3s\x8\xd9#rw\xb2\x1esW\x14UM\xc0\xb9\xcb\x96N[8\xfxW\xe9" "\xe1rO?\xf6,\xd5\xe1r\xa3\x62\x18\xf1\x1\x7fT\xe2\xf2\x7f\x8\x1bN\x7\xa8\xa3\x6\xd4" "\x99K\xef\xc3\x37K\x7\xd7&\x14X\xc7\xa6)\xdd]#i \xdf\x81\xa8\xcd&\x98Y\x19\xaaY\x8f" "\xa2u^\xec\x82\x12\xf9\xd2)\xb3.\xd5\xaa\x83U\x1f\xc4\xd6\x97\xef\xc\xfaTa\x16\x1e" "i\xd1\x6\x7\xf4^\x84$Jy\x9b\xad\x91\x31#[\xc6\xf7\xb1\xa3\xb6\xcc\r\x85+\xd5\x99" "\xd8Ti\xbb\x9a\xa6\x16\x61\xd8\n\xf8\xd4n\xc1\x1e\xb4\x91Z&Q,\x0\x8\xc4\xca\x38." "\xb6\xcd\x1aRa|\x93\x16]\xed\xc\x90\xcdt\x7\xfer*\xfc*[\x92j#\xf5\x4W\x85\x96+;w" "I\x95\xe4\xe3\x8b\x64!}\xcbP\x17\xfd\x38\xb2W_\xa0L{<\xc0\xb5\x1f|\x90\xd7\xe8\xfe" "\x89\xb3^So\x6\xb4\xf3\x1b\xdb\xcc\x31\x6[\xdd\xc8\x9a\xb\n\xbck\\*+\x8M\xee\xd7" "t\xdd\xc0\xf2X\xca\x9a\x9\xa7\x95\xe5\x32\xe6\x62\xd7hR\xc7\xc2[\xeb\x9bqU\xf1*\xab" "\xd7V\xb3\xee\xe3\xaai?\x7f\x96\"\x8a\xca\x62\xef;rP\x85\xb3\x9c\xa0\x35\xa8P\xf" "D\xd4\xcf\xb2\x10\x64\x6\xc1N6\x1f\x85\x3\xc2\xcd\xffN:v\x1d\xf6\xd6\xfd\xdb\x90" "\xfd\xb3\x94\xc6\xee\xe6\xa8\x34\xba\x66\x3>Y^\xd5\xdd\xec\xb4\xf4\xa6z\xe6\xb9\r" "\xea\x98qbp\xbe\x19\xd8\x16\x7NNO9\x84q\xfd\xbe\x9c\xb0\x95\x41\xaa\x96\x8d\xdc\xba" "\x9e\xe6\x34S$6`[hF\xfe\x94\xae\x1(DfHo\xe3X\xa3\xd7v$\x8f\xd5~\x5\xdf\x94\xe8\x44" "w\x1ak\"\xab\x13\xd3N\x96w,A\x93\xeaN\xe2sM\x9tQb\xb5\x33i\xc5\xcdg\xad:}\x85\xac" ":\x1f\xe8\xbf\x3\xf\x62pu\xb1\x41\xd3\xe\xf2\xf3H\xf0\x32\x38X\xb2=\x9d{\xa8\x8b\x9a\xa2\xaa/%<" "\x12J\x1f\xd2\xab-+\x9b\x1b\x8d\xf9\x8b\x84};\xfb\xd8\xbb\x13\x14\x65\x88\x9b\x19" "P}\x85\\\xac\x90\x33\xb\xcb>\xd2\xc\xb5\xf\xbe/\xb9\xf3\xf3[j\xcao\x90\x9e\xf4&x" "\xa3\xd4s\xbet\x15\x4\x90TiO\xbfg\x1e\x38\xfe\x65\x64\x1e~$\xc0\x14N\xa2\x8d\xe8" "\xb8Q\xf5\xefG\xe5<\xc1\xad\xed\x9a;\x94L&!3\x87\x89\xd0\x38\xa1\xec\x95]\x93k\xba" "aw\x95\xfdO\xe5\x17\x17\xdf_\x8a.9\xf4\x15\x35\xf6\xc7\x87\xbe\xdf\xc2\xae\xd4\x37" "\xd0\xeb\x81\x1c\x91\xcd\x1a\x14_\x4?,\xe7\x6\xe3\x9f\x30j\x92\xb1P\x1c\xd2\x39t" "\xe7mD\xdc\xe1\xac\x81\xce\x96\xfc\x8bX>V\x5\x33\x35v\x12pe.K\"\xa3\xd7\x12\xb2\xe6" "\x1e\xa2/N\xdd/\xe0K\xe1\\>\x9a\x8e\x9f\x44\xd4\xfe\x90\xf3\xf7P\x9a\x62\x8a\xf4" "\xb4\xde\x43\x15h> M_H\xf\x8f\xc9\x14\xbc\x96>\x12\xf\x1d\x16\xben\xcc\x92\xa7\xe3" ")s\xcc\xb5\xbaq]pj\xc8\x6^\xda\xfb\xbe*\x91\x64\xe9\x8a\x8bpa\x87\xb3\xbe\x7|\x9" "\xf7G\x82\x85\xbe\x1b\x1b\xa0\x89\xec\xeblbk\xcd|\\L\x2\x62\x9d\x7\x8e\x9a\x93\xf4" "\xe2\x2)\x12\x1frz\xa8\x1c\xa6\xac\xca\xe5\x86\xab\xb3\xc0\xae\x2\x16\xf6\x1e\xb0" "\xb1^\xfa\x96\xfaPaj\xb0\xa2Y\x1e\xdd{J\xb0\x9a\xc8}\\$\xde\x37H\x92\xa6\x8e\x2j" "y\x1b\x45\xef\x30\x8\xff\xcc\x6R_\xf8\xb5\xf5\x46]\xeb\xcd\xd0\xc6w/3vW\x17W\x1d" "\xc2\xaa\xb6\x61W\x99R\xcb}\\JIF\x14\xbf\xe5\\\xb5\x1b\xfc\x82\n\x9'\xae\xc3\xf4" "\xca\xfaSm\x98-\xd9m\xbeG\x88\xb8&.j_\xea\x61\xbf\xbdj\x80\x94|\xfb\xe5\x38\xc7\x17" "\xd4p\x1fu\x80\x31\xb9\xeb\xf8Y\xcaq\x97\\q\x14\x84\xb3*\x6GW`};\xe6\xfa\x32\x1a" ">\x1\x89\xc3\xd5\xf9\x16\xd6\xc1'Q\xc0\x64\x41\xfd\xd8\x33\x14\xe3\xeb\xa0\xa2)\xa2" "\xa6v0Z\x13\xe1\x9e\xb6#\x93\x8\xdd\xbb\xdb\xbd\x38\xa5V\x17\xbc\xd4\x82>G\xb0y\x3" "\xe1\x8cn\x83\xf8]U}\x1f\x15\x9d\xf6\xce?\xcd\x63\xf1\x82\xbc\x45\xd0\xb6\x8f\xe3" "\xab\xf1\x19\x7f\xb2\xb0xI\xc5\xa5Q\xacJ}3r\xd3o\xd0\"\xe\xf3\xeb\x16{\xcd\x95Xi" "\xb8\x5\x87\xd1p=\x8f\xe7vA\x18\xbd\xd2t\x8\x1c\x8d\xd5\xad\x8d \xda\x66\xa4k\xc2" "\x96\xc7\x80\x7\x88\xff\xe2\x1eR\x10\xa7\x8f\x16\x7f\x38r\xde\xfa;\xe5;\xf\xd0\xd4" "7\x18\x7\x16\x1b\xe1/\xae\x19V\xe2\"\x45l\x99|\xe5. \xf3\x65H\x8e/h+}\xce\xde\xa4" "\xff\xd4v\xb1\xfc\xe\xff\x1fL\xacVS\nE\x9f\xbfm*\x80V\xed\xdc!\x1e\xd4k1Q\xbd\xa1" "\xda:\xb\x81\xa3Z8C\xf0vL\x9c\xe8\x36i\x11q\xe3v\"\xda.\xe\x8e\xd2~\x9c\x66\xef\\" "\"\n\xc2\x31\xb2\x8b/V6#\x1f=\x7v\x95\xd8\xfa\x5\xbc\x3K\x13\x90\xd7\xdf\xe1KuG\xc2" ",>\xff\x1b\x8d\xa0\xed\x34\xa1\x3\x64\x15\xfa\x35\xc8:A\x1c\x88\xfb\x5\xa2\xb4\xaf" "7\xc2 \x94->\xferF\xa1qH\xdd\x97\xbf\r\x1dN\xe1\xee\x89\xb5W8\xb7\x16\xee\x1\x1a" "3(3\x82 D-\x84|i\xd6\xaf\x46\xe8]\x17~0\xc7\xe9\xc5\xd9-\xe6\x1a\xde\xc5\x65\x10" "1R\x80\xf3\xb7\xf4\xb0p}7\x9b\xde\x95U\x8d\x16\x8cP\xfa$\x2\x15\x9a\xe8\x9a!\x8a" "\xc9_\xb9\x82\xfc-N\xe8w\x9f\xb0\xb9i\xd9N\x97\xc4\xce\x94\x93p\x94\xd2\xc3\x0\x96" "\xcd\xb4;5\x7f\x11\xdc\xba\xc4\xd8\xe0\x2\xe3\xa6\xeb\xa6=\xaa\x9ew\xf1\xdc\x14\x88" "0\x86\"W\xa1\xb0~\r\xbf$\xc6\x8\xf3x\xf9!hj\xe2\xc6|d\xc6\xc3|d1\r\xd0\x84\xe\xe5" "\x94\x9d]\x1a~$p\x9\x19\xee\xdfx\"[F\x12p\xd1\xf1\x6]\xe7'J\x17J\xc4\x98\x1e\x93" "\xa8\xd6\xb#\xa7\x31\x96\x39\xdf\x9d\xe8\xce\x8c\xe5\xde\\\x3I\xdb\x11\xa9\xd5\x84" "\xc5\x8d\xc5\xd5>\xeb\x44\x9\x10\x36\x1e\x8b\x43\x44\xa1\xc8\x1d\x99\x38\x94\n\x90" "f=\xcd)\x1a\x16+xd\xb9\xc0R\xe4]M\xa7\x11+\xd2\x44\x99\x0gp@\xd3\xce\x35\xc1\x8\xfa" "Y\xb2\xa1\xa5\x10\xc8\xa2\x81\xbd\xb3hx\xb7\xf8\xf3\x9bJ\xa8\xa1\x1\xd9#GBI\x85\x87" "7\xf2T\xe3\xcdut\x90Z=\x6\xf3\x17\x3(K\xf3\xe3\xbd\xb1X\xae\x44\x8esh>\x1b\x14h:" "u\x9d\xb6Z\xca]\xf\xe6!P5,\x9dG\xd8\x61\\\x65\x97\xd8GT\xbf\x2\xf2\x1\xb7\x65\xcc" "x\xf3\xa0O\xe0\xa7\x97\x8\x44/\xb2\xf6\xda\x97\xc5\xfc\xa3\xc0\xdbP\xb8\xeb;\x82" "\xee\xbcPO\xb0\xcc\x42\xb&~.\xe5\x1d\x82\xef\xbc\x8f\x30\xd4\x38\xa0\xc0\x2]\x8a" "\xdf\xb)\xed\xdf\x42\x16m\x95\xe8\xc4o\xeb\x63,\xfb^\xfd\x96\x80\x11\x9d\x1e\x38" "\x8Q\xd2\xde\x3\xea\x38]\xc0(U!\xb9\x85\x9d%\xd8\x43\x15\x15\x19\xc5\xfaK~\xed\xdc" "\x81\x96H\xdd\x8f\x9c\x17\x19\xd1\x8f\x34\xd0 U\x85\x84\x8c\x95(=H\xc5;\xee\x86G" "\x1c\x81\xd4\xf0U1\xfb\x44v\xfe\x8W\xd7\x1cW|\x13:%\x84\x38\x43p8#R\xec\xe2y\x8f" "\x16`\xa2T6\xdd\xc4\xb\x94\x7j\x9d\x14\xba-\xf0\x4n\xd9\x16\xe8\xf0v\xe8\xe7\"`e" "E\xf9\xc4J6Y\x1b\xb1\xbd\xe1\xa2\x3\x8c\xcc\x14\x1f\xab\x66P\x86:\x10\x1d\xb6\xbd" "\xcb\x95\x8a\x1f\x42\xe5\x96\x1c\x10\xc9x\xc0\xa6\xb6/\xfe\xd9kL\xf7_T\x82>\x9a\xb5" "{! \xbe\x1f\xbb\x8f]\xe4\xc0\xf1N\x16\x9H\xa5K\xd0\xa3\xe9\x8\xca\xeb\x64\xb5h\xfc" "*\x4\x39\x83\xe6\x61\xd7]\xad\x80\x65\x1fj\xb9\xdb/\xc\xae\xb\x81#\xa7\xfe\x9dj$" "\x2\x99\r\"i\x2X\xfbjd\x97\xa1\x35*V\x8f\xb7\x8c\xcd^`\xae" "\xca\x9\xf9\xcc\xccY\x11v\r\x82\\Y]\xdf_8\x91\x61\r\xe8\xeb\x35\x13\xdeGRmk\x88\xee" "\x8e\xff\xd3\\\x16*\xe7\xd0\xfc/k\xb5\xfd\xeaO\xdb\x0y\x2\x7\xd7y_\xb3\xba\xa3\xf8" "B\xa5\xd0\x1a}\xfc\x41\xea\xf3R!\x91\xb8Zd\xe6u\xd6\xcc\xf6y\xb6]\xf5\xe6Y\xc3\xcb" "\xbe\x3\xfb\xe7M\xc0\xb8XS\xd5\x63\x92\xbe\x16^L\x8e\x8f\x9b\xfb\xe6G|\xd9\xa3g\x8f" "P\x89\x44\x99\xd5\x1c\x15\xb7\xed\xd4\xf4\xec\xdfy\xa1R\xa9#;\xfc\xb1!=\xcb\xab\xa9" "\xbd!k\x83$\x1e\x9c\xd5\x9\xaa\x1d\x8a\x34=R7\xa5\xb0\x91M:\x84\xd3\xb9lW$\xbe=r" "\xe5\xf5/\\\xb\x82d\xc1*\xc9" "3\x5\x95\x7\xf9gDS\xdc\x18v\x11\xd9{\x8c\xcbs\x1e\xd5\x91\x9d\xda/\xa9\xca\xdc\x16" "\xae\xec,\xc1\xa4P\xc0\xf5\xd1tN\xc3\xcb\xbb\xb2\xe3\x13\x36\xe9\x8ez\xa2\xd9\xb1" "'zy\xd9\x42\x39\x16\xc9\x15\xe6\xc6\xb5\x1/\xd5\x7\x92\x44#\xdc\xd5\x5K\xc4\xe3\x95" "-B&Ji\x85k\xe4\xbf\xd2\x66\x88T\x93\xab\n\xae{W-\x17\x1)5\xca\xf8;\xfb\x88\x1d.x" "\xd0i\xd8ji`\x81\xd3\x1f\xc3#\xe1\x87\x1e\xe4\x41\x97rj=k\xc3:\x1c\x95\xe5%\xcd\xb5" "Z\x91\r\x6\xe6\x8f\x90\xe4R\x5#\xad\x8c\x1e\x82\xc5\x42\xc3\xc3\xd6\x85!<\xda\xde" "\\\xcc\xeb%\x92\x98v\x8ct-\x7\x98\x1e_\xed\xc1\x42\x4IZ#t\x92\x10\x37\x35\xda\xe" "\x99\xe1\xf9\xc7>\xee\x0\x33\xcd\x36\x9f\xac\x43\xa2\r\xb2y\xca\xaa\x91\x37\x88\xcb" "W\xcc\x87\x93\x83\x14\xcf\x80\xf4#\xfc\xfd^\x87\x1f\x31\x83/A\xc7\xa4z\x84\xaa\x15" "\xf1\x1\xf4\x1c \xf\xea\xd5\n\xc4\x35[\xa8\xa3\x0Q\xb\x8c\x9e\x9c\xa6\x80\xda\x9a" ")9\xd1(\xe6j\xe1&\xb9\x18\xd5\x62\xbf}\xdf\xcbqC4\xc3\xb5\xb\xf9 \xc\x17\xe7P7\x9b\xa9\xaf" "h\x98\xe4SG\x7f\xb3\x38W\xa3v\xc6\xb3=\xe0\x1c\xf8|-\xcd\xe5\xaa\xe6\r\x1\xc5\x91" "\xdd\xa0\x87SA5\x8dv\xb0\xc5V[o\xf9\xa6N\xc3}\\\xa4\x1b\x98\xa4\xc4\xe7\x87\x9fR" "%a\xcbZ:\xe9&2m?\x8dr\xa6t\xc3\xd6\x61v\xcc=\xd4\xdf\xec\xb4\x44|2\xa8\x8c\x9c\xc7" "W\x91]\x1c\")\x18r\x0)T\x1c\x41\xa7\x65\xabR0\xb6\x17s{\xdb,\x7f\xce\x42\x12\x5g\xb\x90\x9a\xb7\xd6\xd7NTq\xaf" ".d\xa4\xb8\xf5\x6[\xe3_\xc8\xb\xd6\x42\xf3[7ia\x99\x8L\xf8\xeb\xb3\x81\x41!\xa2\xb9" " |\x12\x32\xfcz\x1f\xd5\xa4\xc1\xc5U\x89\x17\xc6\xba \xc2\xe6\xc9\x1d\x13\x63\xa3" "\xe1K\xc9+\xb6\xc7\xfb\x61\xc0\x3\xdf`\x14\xe1\xf1\xbf\xe5\xe3\xa2\xf0\x87^\x8f," "\xf4.\x6i\xd9O\xd4|\xa6\xc1\xe6\xb6\xe3uW4@\xd9q=\xac\xefi\xed\xd2\xe5\xc1\xbe\xc8" "[I\x93\xed\xb4tY+\xbf\x15\x93\xdeO\xe4\xe9\xc9\xff\xf7\r\x1ck\xefo\xa3\xcfM\xb2\x13" "\x95\x89g\xa9\xf\n\xd2\x64\x81\x85\x94\xa1\x92\xb8\x83\xa2U\xd8O\xc5\xca\xa8\xc5" "\xdf\x35Y\xa8\x15\x8a\xc9\x11\xcd#\x9f\xd1m\x19\xc9\xfe\xb4\x1b\x1bK\xee\"\xc9\x9c" "\xa2\xae\xf4\xa9\xdc\xa9\xcd|1\xa8\xd8\xbb\x1h\xc0\x31G\xc1\x90\x89\xf3\x93!\xfd" "\xfd\xe1J\x97{5rsU\x84\xb3\x6\x82<\xc3\x65t\x3\x43\x31\xf0hz\x89\x81\xc2\x12\x1d" "\x1b\xcfn\xa5\x9a\"?R\xeaq\x95\xb7\x3\xc\x9c\xe\xdb\x31\x9b\x85%\xb9\xe9%\x38_\x7f" "\xfft\x13QQ\x8d\xb7\x14s\xbcYFX\xdc\xf4M\xf7l\xf2]\x11\x8d\x44r&3q`\xf\xfc\xb3\xbf" " \xc6\xa3{\xbcj\x13\xf0\x99\xfe\xa7\xe5r)\x8e*\xf1\xea\x1c\xfe\xca\x85\xe7x \xea" "p\x1f\xc4@\xf2-\xd8\x7fo\xe0\xb0\x96\xb\xf0\xaa\xaa\x12\x9b\x10\xdaN\xd2\x7f\xb2" ";\xd8YMSJ\xb7v\xa6\x36\x42\x93K\xb\x6\xa6\xdb\xb7\x85$r\xe3\xc5\x82\x90\xb7\x8f\xe4" "\xca\xfe\x84\xeb\xb9{\x89\x94\x98\x99\xa7\xed\x18\xcf\xeeP\xb-\x13\x81\x90\xe8\x9" "\x84\xfbU^\xcb*O\xbd\xdaL$ a\x94\xd5\xaa|A,\xc9!\x13\x39\xf8\xf6x\xb1\xad\xc9N;\x8" "\xd6*\xb5\x0\xb9\x92\xb9\x35\xf7;\x9ct\x12p+\x6\xd6\xd0\x36\xb6\x8\xb3YHI'\xefV)" "f\xae\x7f&\xb9\xce\x37\x9f\x97W\x10\xcc#\x16P\xe\x37W\xc\xa2\x1a(\xe9`\x19\x5\x39" "\x85P\xc2\x1d\x13\x12_\x9f\x46\x65\xec\xbd\xba\x9a'\xb0o\x9b\xca\x8\x61\x1b\x1c\x86" "DE\xe4u\xc5\x91\x66\xfa{\xfc\"\xc4\xbd\xdau\xf3\"w\xa9=-\x90\xd3\xf7Rpq\xfa\xe6#" ",\xd8\xd4\xb0\xac\x81\xe9\xfek\xf6I\x80\xe3\xe5\x82\xa7\xa1\xddg\x92\x9e(\x17\x9a" "\xe7t\x4w?\x92\xb7\x41\xcdM5\xea>\x7fZ`v\x9\xeum^/\x1bQ\xce\x99\x88s\x6z\x15\xfb" "\x14\xb2\x16\x4\x18\xcf\xd0%\x97t\xb3\x32\xac\x12K\x90\x8d\xe7\xa3\xae\x62\x8b\xf9" "|.\x9a\x86xu\xe4\xb2\xd8X\x4\xfe\xfbZ\x88\xfeZ\xce\xfe=[\xa2\xc5:\x1f\xf9\x83\x81" "\x16k|\xbd\x1c\xcf\x90\x15\xd9:\x7L\xfh\x88\x32^\x2\x90^rs\x91t\xf0\x1d\xdb\xa1\xff" "\x1f\x66\xfbh\x1e\xf2\xa2\xfb\xd2:\xf6\xb8\xaf\x8cvk&\x94\xbb\xce\x32\x39\xb9t\x82" "X\x9d\x31\x99\xb1\x36\xe4LT\xec\x34\x8a\x1b\x9dV\x99\x93\x81sN\xfaJ\x8c\x8a\x39\"" "yWX\xd9\x9b\xb0\x1c^z\xc7\xc9\xe0GA\xb9\x36\x96\x9dw\x16\x12\xbc\xf9)\xe7\x0\x34" "\xef\x9dx\x9a\x66\x87\xee\x9dq{\xca\x31\x39\xe1\xb1\xae\xfb\x9e\x13#\xe9\xb8\xbe" "uP\xf3H\xe\xeeJ\xf7\"\xbc\xd7\x80\x8e!\x10@+\xc1\xdf\x63\x1a\"\x88\xe9n\xf8\xd8\xc1" "Z\xde\x87\xf2\xe2\n\xee\x9ejW\xd4\n\xc4\xda\x8!V$\xc7\x65\x6N\x9d/F\x89\xf6\xb6\x41" "\xf0\xeb\x32\xc0\r=M\x93\x62\x98\xe9\xfb\x0\x10\n\x93\r\x9\x32\xf2\\\x19O\x9d\xfd" "\xa3\x96\xe\xd8\xd3\x15\x86_\x17:Q=L\xfa\x9e\xd3\x9a\xaa\x9\x90\x35\x85!\x89\xd2" "`\xeb\xcG\x7\xb;\x8f*|\xa3k\xfd\x7\xc1%M\x90\x95\xde\xa7#8\xc7]\xbd\x8bj\x0\xf0*" "io\xe6o\x85\xc8\n=ZU\x19\x4Q6\xcc\xb4S(\xf\x91V\x8j;\x8f\xb4\xd3\x63\x94\xa2h\xa0" "yBK\x1d/\xb7\x85\x36\r\x7\xaaH\xda\xd4\xdf\x45\xe5\xa8\x86\xe6\xad\xc9\x9c+9Ph\xe4" "\xdf\xa3\xf3\x1f(\xcd\x81\xe2\xe4L\xf\x35\xc5#\x0\xb1\x8f\xbd\xdc\xd8\xcd\xe4\x82" "\xb7\xba\x91\x38G\xf5\x1\x89\x10\xbaZ\xa8\xd6\x8a\xbe\x46Y\xa2\xdd_\xfd\xa1\x2\x99" "\xc\x1\xcf\xb2\xdd\x16\xc9\xedpa\xf5[\x12\x42\xafn\xfa\x7f\x61\x7\xa3\xf\x4\x96w" "\xfe\xc3vM\xe4\x94\n\xc6\x62?\x3`\xfZ\xe\x17\x3\x98\xbd\x9-\xcb,t\xea\x9c\x9d\xd1" "Ii\xcb\x63\"\xd3\xcb\xd3\x9c\xb7\x32\xbb{\xf3\xa0\xe8R0\x9\xb3\xbd\x1e\x39wB\xde" "\xa6\xfe\x12PW.\xfb\xdb\xe4\x15\xab\xa3V\xea\x92\x9f\x6\xda\xb0\xb6\xb3\xa2\x8f\x65" "e\xb6\xed/\xe7\xa4\xfd\xen*\xd2\xa4\xc2\x7f\xb9\xc0\x39M/'\x18\xc5.|\xfc\xce\x39" "\xc5\xce?\xbe#\xf2\xac\x7\xc6\xbax\x17\x44\xa1\x6\x12\xf2\xdcM\x8a\x93\x83\xe\x43" "\x17>\xd5I]-\xf\x1\xccL\\3\\\x14\xfa\x7\xd4q\x1e\xea\xd4I@\xbf\xd7\x88\xf2\x95N\xc9" "\"\xac\x32\xe3 \xc6\xf2\xec#\xd5\x11M\xd2\x38\xd2o\xf2\x9fN[\xf6:\x1f\x3\xbb\xde" "\xb8&\x9f\x36\x8\xc3\x45\xe2\x15l\xd3\x42rc\xe4\x43}\xcc`\xd7\xc9T\x3\x5K\x84\xd5" "\x9c\x83\xeb<\xe9\x7f\xebV\xa6\xd2l\xf5\xa0`w\xa2\xdf\xdb$\x0\x37\xac\x30\xd4\x33" "|\xf1\xd0\xd6\x1b\xa6\x1a\xd8\x8a+\x90,q^\xcc\xdd\x8e\x80\x11\x8b\xf9\xce\xb6\x88" "%\xf3\xd4\"\x93\x12\x99X\x17\x96\xf7u\xc3\xd1\xd4\xda\xb0\x2)j\x9fmC\xc7\x89\x5\xba" "NH\xd8h\xe1\xdf\xcd\x61y$3\x99\xafPL\xb\x61\xdd\x32\xfa\x99K\xc6\x39\x1b\\\x35-F" "\x16\xfn\x1f|\"\x19\xd3\x87\xe0No\xa6\xdc\x8c\xb\x84\xed\xb8\x94\xb\xb2\xaa\x1c\x3" "\x7\x7f\xae\xbb\xba\xa2\x36\x11\xa9+^\xeeN\xe6\xfbv\xf1v\xb8\xfa \x1dk\xdb;\x8e\xec" "fA\xd9\xb7w\x17'\xfeq\xd1&\xe0\x7\x9c\xc9\x14\x8a\xa4X\xea\xd2\xf0|/f9\xa8s\x9a\xe9" "\xb1\xc6\x89#\xa9%\x14\x91\x4+\xbb\xe9\x9f\xafkP\xd6q)\xd2s\xf1k\x9~\xab\xe8\x81" "~=\xaeO \"\xf8\x63\xd8\xec\x96J\xac,'\xbd\x99\x9a\x85\xa5\x7\x91\xa7&\xbbt\x8c\xe9" "\x2\x98U\x80\xe8\xb5;=\x1b\xbd\x99#;}T\x1f\x8c\x9e\xdc\x8d\xe0\x4kWh\xd6\xc8\xb1" "\xff\xd2\x12\x97\x14\x82\xd5\xa3n\xb1\x43\x32\xb3\xd6\xd7\x1b\x96\xf2\x8c\xe6\x9b" "\xb1zZQ\x8a\xd5\xde\xdazG\xe2\x10n\xa3R\xe9$\x8c!\x91(\xfc^\x97O\xe4\x12\xb7\x84" "\xf\x1d\xfc\x5\xac\x9a\x8c\xc3$\x2\x14\x6Q\xe5;\xf\x9d\x94V\xf0N\xfbY\xae\xba\x33" "\xdd\x8[z.\xf8\xd4N\x14\x1b\xb8\x62\xc6\xbd?\x95\x8d\x5o\x9d\x61\x30\x98\xd9\xe\xe8" "\xed\xbc\x9:\x1f\xd2\x66\xa5\x1b\xb8N\xc\x6#+\x8c\\I\xe3\x3\x8e\x89\x64\x96\x1\xe3" "\xe5?K\xff\x8b\xca\x4\x0^rz\xd0K*\xfbS\xcbY\x8O\xe6\x98\x7\xbc_7\xc3\xda\x82K\x93" "&\xfbS\xc7\x90\xc5\xf8p}g\xca\xd2\xbd\xb7;\xf1V\x1\xed\xa8\xc6<\xa0q\x9a\x42\x9d" "+\xda\xe4)\x14\xbq\x6\xee\xe3%\xbd\xc4\xcf\xa1\xdbG\xf1\xe7\x90Y\xc6\x45'\xa2\x62" "\x86\xadt\x8ay/\xf5\xce}\xdc\x9biaV\xef\x3\xfb~\xf7\x34\x37\xee%\xd5\x37\xb8K!\x8a" "\xe2z{\xc7\x42\x16\xb4\x90\xc3\xa0\x83\x36k1\x14\xe9\x99\xca[\x80Ml\x16\xca\xef\x84" "\xf7\x12\x88yS;\xf5\xa0?\x88\x41\x8f_\x19\x8a\xc0o\xd9\x35\xc5\xf0\r\xf6\x45\x6x" "=\x84\x81\xccG\x8x-\x95\xf5\x7f\xc8\x8e\x1b\xbb\xe7\\\x4\xda\x44 \xc\xc5\x1\x44\x19" "\xad:\xe2\xb9#\xe7\xb2\x8eY\x89\x11,\xefH\x88\x41l0s\xb4\x1a*\x81N\xad\x6\xeb\xe" "\xe1\x9b\xe2\x96\xfb\xcc\x1d\xbe\xfaY,\xc\\\xa0\xfc\xf1#\x7f<\xab\xb\xc6\xdf\x38" "1\xd4\xe2#\x96\x83\x8f-#jW\xd8:\xe7jJ\xf7\xf\xd1\xd5\xcd\xb3\xc9\x9c\xc0" "\x81}x\x14r\xcf\x7f\xc6\x1\xa1+,\xa1\xc8\xf5\xa1\x30\xa1|h\x80N\xe4\xb5\x19\x0\xbd" "!8\x97\xb\xe7\xb1\x36\x43\x62\x90Q\xd6\x44\x4\xb0\xda\xfc\xce?\x8b\xb9K\x8e\x41\xc7" "\xe3\xbf>\xea\xc3I\xc7l\xcc\x13,\x83\\ P\xc6\xe4\x65\xddR\xd5\x63\x1f\xbaY:\xa9\xee" "a\x0\xa9\xa3?\x1c\x12\xa3\x92u\xaa.x\x99\xbaZ\n`\xac\xd9\xc3\x91\x9b\x8\x66\x65i" "d\r>\x82\x65\x0\xbf\xb1\xce\xec\xc8\xe0^!s\x1\xb6\xa6N\xe8\xec\x8f\x89G\x0\x87\x82" "\xf0\xf1}2?\xb6\x17\xd2\x1d\xbc\xd3)lw\xcb\x6R\xc0\xc0\x19\xe8z#\\F=`\xf8\xde\x9b" "\x80:{\xfd\x30\x97#\xd2\xde+\xb5O\x84\xb5\xd1?R{\xcd\xe9\xae\x18t\xea\xfc\x95T\x88" "\xed,Z.\x88\x1d\x9a\x8e\x94\x90\x9d\x81\xac_\xbd\x16\xf2\x98\x92\xb6\xd8\x18\x65" "\xdeR\xfcg=\x8d\xc4` \xc1t\xb6g\xf1\x84R\xebq\xe2$~N\xe5\x4[\xf5\x85za\xd1g\\y\x13" ";\xb6\xdd;9A\x1c\x98m?F\xc7\xa2\xda%\xe5\x9\xca\x89z\xe1\xde\xf8\x90\xb7)\xe4\x8f" "\xe3\x94\x8e\x97\xa3\x62\x95\xb\xf2\x8a\x61\xf0\x83@(\xdb\x36\xecN\x90Y\xdd&\xaa" "\xc4\xff\xf5\x83\x90\xf0\x7;\xf4\xbf\xb4\x86\x45\x6\x1a\xa5\xe2\x94\xbc\x11\x66." "\xc9\xfi\x5w\xca\xc4l~'\x8d\xd7\x87\xd6\x6\xac\xbf\x43\x0\xb9W\xc0`\xe0\x81\xecm" "\x19;m`\x8bxR\x99\x18\x41\x41\x18\x9f\x11\x3\xeen\xa5\xd7\xfbi<\x9a|{\xfcy\xb\xf0" "\x14!\x8d\xfd\xa2\x7Y\n.\x98\xf5=yOY\xd7\xf2\xa9\x8\x18\xa4_\xe0\xb6/\xb2\xac]\xd0" "\xd3I\x1e\xe9[\xb0;\xeb\xc\x80^\xc5\xc3\xcc\x62\x6\xec\xc1\xbe\x90)\x96I$k\x7f\xd0" "\xe5\xfe\x16\x63rO1\x9\x32\xf4G\xa9T\xf7\x92H\xbf\x7f|\xba\x8e\x0\xdf%\xcf\x43\x1b" "y\x7\x44S\xed\xf5\xe3L\xef\x8f\xc2\xbbSZ\\?\xf6\x9\x34 \xdc^\x91\x19\x62\xac\xdb" "\x83\xfb#\xfa\x93\xcb\xee\xb7\x8a/\x8eT7?\x97\x18\x87}\xa7\xfc\x1a\xe8\x8as=W\x1d" "\xe6\xf0\xa4u\xa3=\xb9Sb\xdcr^\xcf=\xdcK\x80\x91\x4\xcf\x9c'y\xa8\x19\xc9\x12n\x8c" "\xbd\xa4\xe7\xab\xaa\x1e\xce\xf5\xc\xca\x61\x33\xf2\xe5\x37\x81\x1e\xee\nJ\x92jM" "\x5K\x83\xba\x87\x31\x30\x7\x39Q\xc5\x9f>\x9\x15\x7f\"M\xe0\xd4I\x80\xe>*\x81\x9d" "\xc9[\x81\xce\x93N\xe7\x31\x33{\x90\xeaS\xa0\x19%\x9e@\xb4\xad\x31\xe6\xc8)\x91\xbe" "\xd5\xe7~\x7\xc3niGI\x8b\x34\x64\x46!\xa3`\xc2\x14Ye\xc1\x9f \xaal\x98\xce}\xc2q" "\xa2u}\xb5q\xf6\xf3\x8e\x80\xc0\x87q<\x8c!\xd9\xcc\x4\xe1\x87\xbe\xf6\x7f\xfa\xe" "\x13?)w\xb0u\xf6\x82\x1a\x8c\x8bO\xd8[\x81\x16Zo\xa3|\xb7N.\xc\x62\xbb\x8f\xf6|\x18" "x\x9fyK\xa2xG\x81\x2\r\x31\xe6\xfc`\xf8\xc7\x96\xbe\xcf\xbb\x99|\x9_p0\xc1\x95\xdd" "\xd8\xd6\xab\xdd\x91\xdd\xb0\x11yq\x2\xf5\x7\r\x9\x86\xd4\x63\xaa\xa7\xfb\x12pBf" "1\x0\\{\x91\xe5\x46\rI\x8f\xbf\n\x1\x42\x42\xb\\\x96Iv\x5\x1\xb0;\xfd\x85\xd7\x4" "\xc8~\xce\x8e]\xbb\xb3.\xc4\xa3\xdb\x90$\xb0ZK\xe4\xc9\xe8\xc8@\xc3]8h\xe2\x34\xcd" "\x80\xac\xf8\x1d\xe8\xb6\xc8\xa3W\x81\x17\xd8\x9aG]:\xf3gIn4\x7\xfc\x96\x86o\x1d" "f\x8e\x90\xc7\xe6\xe6\x8e][\xb8R\xba\xf\xb2\xdf\x43\xf2\xbe\xb8\xcb\xb4\x66\xd7\x45" ":7x\xb5\xb2\xa7,\xcc&w\r\"\xc0?@\xd6\x80\x2\xf7g\x82\xb4\xe0\xa6\xa3\xfd,<\x0 \xfc" "p\xbes%\xae`\xbe\xf3\x5\xad\x89\x1b*\xdd\x61m\x1b\x37\xfY\xb2\x99\xd9\xc\xd4\x5\xbe" "\x1al\x2\x81\x7\x80\xcdQ\x80\x80\xf9Vw\x1c{Q\xfa\x8f\x32\xfb\xb5\xc0!\xe5\xd9.\xfa" "\x14\x1f\xbd\xd2\xb8\x91\xa8\x43\x61t\xb4Z\xee\x93\x80\x8c\x66\nO!\x81#\x8b\xc2\xd7" "\xf5z\xf3\x7f&L\xb6\xca\xad\x8c\xf4\x85\xa5\xab\xb5X\r\xed\xc0\x2\x89\xc5\xed\r\xce" "~\x4\xd0\x2Y+\xbb\xee\x15\x81\xba\xe2\xf7\x98)\xb5ke\xc4\xe9P\x80\xe8\xddY\x7\xf4" "D\xb9\x9I1\xcbX\xd7\x62\xaa\xfdqY3P\xda\x9b\xbf\x8\x34`\xfc\x87\x88p\xb6\xb4~\xc8" "\xf1\x41\x0Zc\x83\x30~\x4:\xe8\x8e\x1dG\xb8]\x80\xc\xc1|0\x9f\x36g\xba\xbS\x99>S" "\x96\xdd\x9d\x10\x8c\x35\x11t,\x9f\xf6\xf2\xb3\x1c\xda\x90\x44\xb2\x9e\xd3;f\x2\xea" "R\x97\xaf\xf7'3y7\xf5Z\x98\xaa\xd0x6x\xcb\x7f\xce\x87\x82\xdb\xee\xfaJ\xe2\xfc\x39" "\x8ft*\r<\x85\xdeY\xf1\xc4 n:\x19\xcO\x1b\xe2Y\xff\xaeX\xe9<\x2\x96@\x97\x14r\xf1" "\xe2\x91&\xbb\xe1\x98k\xb2Vm.\xa7\xd5\xd3M\xca.\x1d\x16\xc\x99\xfa\x0\xce\xb4p\"" "6\xdd\xbcn\xd3\xba\x0\x92\xa2\xaa\xed\x18\x11\xbf\x45\xda\x9d\xeb\x45\xde\xa4\x66" "9\xa7Z\x4g\xc\xd6\x96\xe8J\xe2\xebh\x98\xd3\xc7\xb5\x45\x33\\\xa2\xc4\xdb\x65\x97" "\x4O\x84\xeb\x90\xee\xaerl<\xa7/\x88\x64U\xbd\xd8\x4>\xb2\x18\x17\x90\xae/\x83\x1c" "74-\xe2\x44\xa5\xb3\xba\r\x19Jw\x8czJS\xc5\xe\xd3\x8e\xed\xfd\x15\xbdR\x85\xff\xa9" "F\x8e\xe0\xa1P\xbb\x81\xfb;\x8f\x93\x16\x95\x18\xe6\x17j\xe4Y\xf5\xea\xaf\xa7\x81" "\xc5\x4\xec\x83\xd9`\x99\xeb\xcf\x89%K\xb6&\x1c\xc7\xfb\xf0\x94\xd0\xf6n\xa3\xe5" "\xb2\x42\x9d\x8e;\xec\x8c*{\xc1|\xd7\xe6\xf4?\x3\xdeG.Q\x5\xf4\xfa\xc\x1d\xb4\x16" "?\xfd\xck)\xf9\xe2n\x8f\xcf\xb9Ie$yI\x6\xac\xd8M\xbb\x89\xebv--\x83\xa4\xce\x1b\xe9" "\xcc\xbb\xcb\x19\x9/\xa5\xd8\x1f\x96\xeeY\xbe\xf0" "\xe\x64{\xfbU\x84\xc4\xb8G(\xef@Q\x96\xb6\x3u$\x19\xee\x12\xcdp\x8e\xb7\x46\x9e\xac" " \xc6\xa7\x62\xc3n\xec\xf1<\xb9\xf6(\x82\xd3+\xcf\xb0\x92\x9d\x94\xf5.\xf7\x42\x94" "\xfbwpx\xba}8J\x1.k\x5\xbb\x3U$\x16\x81\x99\xfcH\xeb\x5\xdf\xcb\x45\xc0\xbe\xa3:" "\xbb\x42\x36~l\x86\x38\x8f\xdc\xb3\xbe\x18\xbfs~\x98\xf1\x14m)\xa8(7\xf5\xf9\xcb" "\x7f\x11\x30\x9an_\\\xa8+i[\x94\x1aY\xcb#m\xb4\x1d\xad:\x96,\xac\xc4\xf7\xaei`Av" "\xb6=\xa4\x16\xba\xc7\x1f\x6h\x8am\r\xce\xbc+e@\x1aMzdI\xd7Q\x88V\xbh\xe7\xd4\xed" "S\x83!\x9c\x33\x6/\x85\xf0\xd8\x1b\xa3l\xdd\xc2\x87\xbe\xb0\x87\xee\xfd\xf7\x91\xd9" ",\xb3\"U\xb5?\xde\x3\xa0@\x80\xcfN\xf1\xf9\x42\xdb\x43.\xb4\x8\x19\xa1\xcc\x5\xd5" "\xb7\x85\xd5_\x9c\x99\x91\x80\x87\xbehI\xff\x2q\xa0\x14$\xaa\xeX\xff\x89\xcb\xf0" "\xbd\x95*P\xbak\xfc\x91\x8f\xc6\x8\x43\xd1u\x1duC\xec\xb0\xc5?\xe2U\x7\xef\x33\xb7" "Fi\xba\x1b\xd1\xd6,\x95\x37J\x99\xaf\x32\xec.\x9a\xfd\xe9T\x8fk\x9a\xf7Su\xc7\x88" "s\xe5\xe4\x85z[\x13gj\x9d[[\xd1\xf6\xf1\x45OHE\x1a{\x85uK\xfd\x62Vm\xee\x12`\xd4" "B\\&\xa6\x1x\xb8\xe8\xf8\xb9\x39;\xbc\x4\x0I\xe7h\xb2\xf7\x45,\x96\xeb\x8a\x9ez\x96" "\xf7;\xf2\xca\xad\x83l\x98\x1c\x34m?\xed\xa0\x42*(\xfb\xf8\x9a\x0\xa9\x9a\xf0\x34" "\xcf\r]X\xd2\x41\xee\x8fOIY\x9b+=i\x16\xd9\xdb\xda\xb6\xa4\x38\xf4G\xff\x9c\x14\xc3" "\xe4\xe6\x81\x9a\xfd\x4\xf0\xbd\x32\xb\x92Pf\xfc(Y\xeb\xe6\x43\xad\xd4H\xf6\xa4\xe6" "\xd2\x9f$\x8a\xf5,\xd0\xcf\xfa\xfe\xbf\x5\xce\xb4\xec\x46y\xd4\xf2\xd8\rg\x19\xe9" "\xd9\xe2\x34$)\xcf\xba\xd1\x9d\xf8\x1d\xa3\xda]\x95\xed\xee\xd6R!^4l\xadoF\xb5\x88" "\xd8\xe4\x81\x9f$r'H\x91\xf2\x17\xdb~\xd7\x89M\x9f\x1b\xfa\xdcK\x8d\xd7\xec\x9dY" "\x87\xb\xe7\x9f^\x8$\xaf\xb0\xb5>\x12\xe0\xf2yJ\x5\xe0\xb\xe4r\xc3\xad\xb5_J\x80" "4\x86xt\xe\x99$\xf8H\xdf~\xda&\xbb\xeas\x81\xc8i$,\xd2\x8f)R\x9a\x35\xf4\xb\x14<" "_o\xad>J?%\xb7\xeS\xc4\x85R\x9f\xc0\xef\x13\xb1\x9f\x35\xeb\x44\x37\x46t8\xdc\x1b" "a\xca\xa4\x34\xaf\xa2ZD\x9c\xee\x8b\x19\x8e\xc7\xcfJ!\xe9Vp\xf5\xac\r\xd5M\xfa\xe0" "\xd4\x63\x9b\x61j\x81\xb2\xe1\x83\xec\x63\x1c<\x90;\x11W`\xa2V\xec\xe5\x12\x87\xc3" "V\x91\x90\xa9\xe9\\\x94\x36\x8a\x8c\xff\xf6\x66\x1a\x46\xf7qCfb\xebr\xab\xb4 7B\x88" "\xb3\xd4Y\xbcP\x86\xcf\xe6\xd1\\\xe9\x41\xdb\x96Uh@\xfb\xc9m\xa4w\xc5\x9a\x15H\xd5" "\xd1\xec\x1e{\xbf\xdah;w\x1f*\x9f\xb4m\xd7\xba\xf0\x17\x2\xc9X\xf4\x30\rz\xea\x36" "\x8\xfb\n\xa5Vb\xd1\x12w/\xd7m\x1e\xb5\xb3\x8a*-\x84\x96\xe9\xb8\x30\x90-x\x2\xfe" "5\xb3\x34\xb4t\x9b;\xa2n\xc5\x8b/5Et\xae\xa8\xf4\xd7\x65;\xce\x99\x19\x8d/\x9b\x6" "\xbb\x81\xa4\xf7V\xb8\xe5\x89\xca\xc5}r\x7\x30\xa2\x17\xc1Y\x87\xb5\x9e\xe5M'\xaa" "Ak\xb6\xeeQ\xfa\xa8\xdcq\xcb\x7\xa4\xda\xb5\xf2\xa4\x64\xb\x82\x61\xdb\x1c\xads\x83" "N\x93,f\xe4\x12y\x5\xaa\xea\xe7\x99\x43$6\xdc\"\x85}\xc`\xd1\xd9\x7[\x1c\xe7\x81" "\x89\xe5/R\x9d\xed\x81\xf8\x7fx\x19;\x16i\x17\x38\x97\xd7\x9a\x3\x97\x97YZ`+jH;I" "\x0\x17\xa2\x87Y\xf9\"\xe2U\x1d(\xde\x9b\x19]\x81\xa4\xbc\xf1\xd8\xcc\x1b$3\xc0`" "*z\xa7\xa8\xd2\x8e\x88\xff\x9f\xf2\xac\xb5\xc7v\xe5T|\x9b\xef\n\x81\x44\xfe\xe9\xc7" "5)F1\x1\xc7\xcf\x19\xe\x64\x1c\xe3\xe0X*\x5\x96\xfd\xda,\xd3\xa8 \xbb\x37\x86\x0" "\x81%\xa5\xc2vBM\xb\xbc\xa5\x7f\xc4\xe9\xf1:b+\x95\xa5\xf1-/9{\xf7\x16\xcf\x2\xf9" "\x81\xe0r\xe3\xeb\xd3/\x0\x90\xd2x\x88[\xf5\x19\x6{\x9e)\x9f\xe9\xee\x12V\xc3\xcc" "\xad\x63\x9b\xb1\xa6\n\x18\xb7\x3\x31\xbaKt\xb0\x98\xfe\xa7\x3j\xcfh\xd8m#\xco\xfb" "\x9\xb3\x1a\x8b,\xe6\xa4\xa2p|\xc7\x93\xc3;\n;\xec\xb8\x1a\xc7\x93K\xe0\x86\x0\xba" ":\xf5\x97\xbd E\xe4l\xb5\xd9\xb9\x34\xfd\xe3\xcc\xb6&P\xc7\x87\x85\xb1\xb9\x0\xf7" "6|\xd7\xbb\xd7\x31)\xbf\xfe\xcd\xfbX\xbaP\x97\xf0\x89!\xe8\x14\x9a\xce\x1c\xe0\x19" "\xf9\x98\xf2\xa5\xf3\xf7\xcd\x81!\x97\x11\x7\xb9\x1b\x12^\xcdP\x1a\xd5\xbd'\x4\xb7" "\x8e^\x81$\xf3\xfc\xca=\xe9\x61\xbe\xa4\x39\xf7%\xe8\xc5\xe6\x9d\xb9n\x99\x38\x81" "\xad!\xcc\x9e\nK,\xfc\x91\xc\x86\xe2\x83\x9b\xf\x32\xb7\x97\xe1o{Eq\x88\x11*\xb8" ";\x94\x86\x96\xfdu\x4}\xf2\x12\xc0tf\x7f\xe1\xa1\xdam\x83}~\xc5\xdd)\x8c\xf4\x0\x11" ":4\x91\xf5\xe0\xd9\xaf\x1\x16\x9d\xbc\xf0\xf2\x36\xc2q\\\xc5\xa4\x8a\x13\x37\xb1" "\x1e\x9c\xaf\x6\x37\x2\x8\xae\xffk\xd4\x16g;\xe6\x17\xaf\x15\xc6j\x90\xc9={\xcb\xcb" "l9\xc7J\x19\x1evz\xe2w\x13\xa8\xee\x1b\xf6\xb8\x8c\xd3\x10\x9b\xb6\xfb\xdc\x85\x61" "$1\x81h\x91\x9d\xf1u\xed@\x10/\x8\xc7Oh\xdd\xc7\x1e\x8a\xf1\x31\xc9\xd1\x93P\xd1" "\xfe\xdbT]9l\xe3=\xe4\xc7\xe6\x83\xbc\xad<\xd6? u&P\xf2\xb1G\xbe\xc5\x1b\xcf\x9a" "?\xe\xea\x1aO,\x2\x5\x8\xdb_\xaf\x8a\x6\xda\x9b\xa2\xd6\xbb\xb0\x8c\xc1\x62\xabo" "p\xf0\xde\xcf\x45\x9fX\x94\xe7`!a\x91\x42\x42\x31\xbe\xd5U\x1f\xf3\x15S3\xf8\x8f" "=\xf9o\xe0:\xf7\xae\x41\xda\x8eJ\xe4\x10\xc\x13s\x9\xe2\x61\n\xad\xa9\x13`\x82\x1a" "\xca\x30\x9en\x99 \xe5\x8e\x81\xb5\xe5^w\xf2i\x7f\x39\xa0Y\x12w\x0\xfd\xdf\x31 \x11" "\xf1\x9f\x94\xf8\xbd\xab\xcd\xf7\xa3\x83\x66\x61\x46W\xa5{\xb0\xaa\x1\x84)\xb7\xbc" "hk\x1f\x44\xb6\xbbL\x2\x6\xeaO.\xb4@\x4\xae\xe8\x10\xbd\xd9\x1f\x1b\x8f\xfa\xa6+" "\xf3\xb4\x89\xd5\x46\x98\xf1\x85\xf1]aK8S\"N\xd2M\xe3\xaa~\x9d@r\xfc\xad\x9b\x9\x88" "\xa7\x94\xf8\x16\x7\xf0\xdb*\xe2\x43\x61\x62\xda\x63W\x89\xe3;\x98\xb6\xb5\xa2me" "\xc8p\x8e\x9f\x99\xac\x8d\x9b\x46)\xe1i\x17\xeO`\xbeW\xb8i\xf0H\x17\x96\x2p\xb5\xfa" "\xfehtN8\x3\xd4|\x96\xa2tU&\xfa^41G\x8a\xdfi\xab\x30\xb5\x90up\xa9\x81@\x80\xb0=" "\x81\x10so\x86s\x8d\x98\xc6\xc6Y$\xf%\xe6\x89\xfb\x19z\n\xe7\xd0?N\xf\xb7.\x86\xc4" "5<\xfa\x44\xd2\x44\x89\xd4\x15!]\x92\xa0|79\n\xeb\x43\x44\xc4\xa7\xe\x0)-\xcc\xb3" "g2\x15\x92\x9a\x36\xb9g{&\x9?\xa8\xe5\xb1\x36nq\\\x1dy\x1f\x62\\\x18\xaf\xad\xce" "1\xbc-\x96Ijh\xef\x32@\xca\x91\xac>+\xcd\xbe\xfe\x31q\xcb\x6\xc9\x3zu\xf1Z\xb9\xd3" "\xb1\x91\xfa\x3$\xdc\x95>\x18\xe8\xc8\x35\xf8v\x91\xf0\x33\xf2\x8a\xda\xbe\x15\x36" "\xb5\xdd\xf0T9\xf6.[\x15\xd8\xa9\x34\xd2>N,\xaa\x85\x8\x62\xa4\xae[\xb8)\x13\x16" "\x1\x62\xf9[\xb5\xc\xbcX\xe9\xca\x95\x13\x7\xacW\xa7\xe8q\x97\xa9(\xa8\x8e/\xec\x42" "\xfe*6\x81\xca\x39\x37u\xfc\xf\x39*@b\xb1\xf6@\x9e\x36\xcd\x45\xa5\xfb\xd9$JSX\xf8" "#V\n\xb3\x3\x87\x42h\x15Z\xe1\x84~B\x11S7\x89\xa7{!\xa4\xb5\xb8\xfb[\xeew\xcL\xdd" "\xeb\x88\xf3\x41\xf1Z\x9\x5\xab\xdfZ\xc8\x38P\xc4\x64\xfaY`N\xc0\x34+-\xea\x0'@\x87" "R[\x7f\xeb\n\x3\x83\x18\xb0\xe6\xf6\x8b\x88\xc7\x61\xb6\xbf*,\x12\xb1\xae\xc7\x3" "\x91\xb4\xc9Y\x8?L\xda-\x8f\x33UR\x1a\x8a\xd2q\xef\x93\x8f\xf6\x64\xfc\x80\x64\x12" "Z\xb0x\xeJ\x18\\\x1e\x80\x4\x0\x1f\xd2\xd5\x13\xac\x9e\x1b\x18\x80\xa4\xc6\x62\xee" "_\xe9\xee\x7f\r\x1d\x98\x13\xf2\xd6\xe2\x2q`\xdf\xf),G\xe0\x66\xae\xb0\xed\xd0:\x16" ">\x83XE\x12\xc0\xe1\xcd(\xdd\xce\x95\xa6\x37\xd6\x34\xfb\xdb\xa3z)#\x9c\xcd\xb8\xa2" "TO\x18Zs=\xad\x41q\xb3Zi\xd3\xd8s\\\xd9\x14\xda%~U[\xac\xf6;m\x9f\xdc\x8\x8f\x9b" "\xb6\xed\xa9\xd7\x9e\xe7\x66@?|\xd1\xd7R}\x8a\xca\x91k\rx\x98K\x8dO>F\xdd\xf\x8a" "\xd8=\x15\x37\x35\xfe\x95\x63\x8\xc2\x98\x7f\xff'\xc6X\xe9\x96\\\xd0\xbd\x12N>>V" "\xc6\xcb\x13$\xb3\xc\xf3\x1b\x64,\xc8\x6i\xab\xba^\xc9k\xf\xe3\xff\xb9g\x1d\x92\xac" "\x99k\xeR\xb8\xcf+ \x10\x64\x83k\x9\xcN\xc4\x8d\x13\xca\x17v\xeb\x11\x89\xbd\x83" ",\xd7\x19\"\x9b\x62R\xd8\xd1\xcf;\xbc_K\xfaRd\x86L\xd4\x8\xa0\x8d\xcf\xdc/\xcb I" "\xc5\xca\xc6\xa5L\x7fT\xa6\x17\x61\x88\xd5R\x13\x12\x81\xc7U\xa4\xb4\xf8\xa4T?\xf7" "r@\x8b\x93\x5\xfe(\xfa\xae\x97OZ\xae`k\";\xb2\xdf\x83k.\x9\xe7\x13\x34\x81Oe\x19" "d\x9b\x8c\x42\x99\x93\xa8\xadz\xeb:\x19\xb4\xfei+\xef\xa9-\x96\x44\x16\x84\xe6O\xf2" ";\xd6\x61`\xd3\x1b\xf\x41\x1\xe0\xc8\xee\x46\xde\x8c\x5L\xfaS\xb\xf5\"u=Al\xcf\xdc" "%\x89\x35\xc5\x63\xb5\xc9\x63rf\xd5\xf5 \xad&\xbe\"\xb3t\xc7;N\x9\x61\x62/\xde\x1" "\xb6i3\x19\xc8\xbc/\x81\x1fw\x13w-\xc0\xc5\x88\x9b\xf6\x8a\xf5\xa3\xe7o\x8fkkNu\x11" "S{9\xf\x87\x83h\xbf\x41\x8b|\xd9_\xea|\x19\x88\x18\x84\xae\x65\x18\x2t\xe0\xe9\x80" "\xb0\x37\xb9\xcfh6\x9\xf2L\"\xd4\x9b_f\xf3\x83\x94\xb6\x8aP\x95\x45\xac%!\xfai\x10" "\xf\xf1\x9bIv\xf8'K\xa6 \x9e\x1dH\x8f\xfc\xf2\xf8\xed\xca\xae\xffy\xf\x1b\xff\xb1" "w\x9e\x3\x1\x10\xad\xab\xca\xbb\x37>ri\xbf\xb0\xfb\x8a\x8aY\xc\xc5\x36\x86\x18\xda" "\x2)\xee\r\xeb`\xfpY\xde\xb0\x94h\x9\x3\x17{b\xcc\x1a$\xbf\xa6pe\xe4\x1e$\xb1uKJ" "\xc2>Y\xf4V!\xdf\xfb\xab\xbb\x83\x10\x94\xfu\xd4\x8\x8&q\xdc\xf6\xb6\x12\xb5\x4\xd3" "\xc0\x10\xf\xb6\xb1\x93\x1cG\x1a\xfb}A8\xaa\xb9\x1fp\xb2\x8d\xca\xa3*\x8a \xa3\x5" ":|k\xaf\xd2\x93\xaf\x2\xf\xfc\xf4>\x97W\x8fp\x13\xca\xdb\x61\x32)\x85\x8a\xe5o\n" "I\x1a\x9\x1fl\x9\xb\x82\xc9\xf9\x88\x8a\x83\x31:\xd6\xc6\x7fo\xaa\xf3\x7fS\xdd\xbd" "\xf6\x8cv,\xf3\x2\x12\x7\xaeL3\xaf\xe2^\x7\xdd\xf3\x41'\xd5\x12<\xa7\xcb\x45\xcc" "<\xa9\xcd\xe4\x15\xc5 Y\xc2\x39\x3s\xfd;C\xa1x\xc8o\x9a\x32\xc6Z\xf5\x17\xc4:#\xf8" "{L\x14\xd1\xad;\x16\xef\xfe\xa2\x43\x6[\xdd\xa8u\x13#4H\x1dh$[\xb6\xc5' \x7fS\xb2" "\x1\xee\xd4\xf5N\xf4\x80\xae\x5\xa6QlIzs\x82!\xd8Y\xb2xSIx\x3)ES\x12\xf8\x6uT-m\xe5" "\xa1\x62\xe6\x62k\x82\x1\x1e\x1a\x31\x30\xc2\x8eMlf\xbe\x1d\xc\xe3\xe:\xf0PK\xcb" "\xc6>IVN&\xa7\xc1]\xe8\x85\xb0\x7)\x85g\xb8\x83\xb4yq\xe8\xa5\x8f\xf1\xca\xdb\xd1" "z\xdc:\x3\x19~\xca/K\xf7\x9b\\\xcd\xa3\xba\xd8\xde\x41\xb3\x7\xa8\x8\xdd\xb5\x94" "ka;\xf6\x64\x7f\xed\n\xff\x1f\x33\xfb\xb5\x86\x87\xdd\xcb*qg7G72F\x9c\x3\x4\x9c\xe7" "O\xb7\xa3\\\xbr\xcf\xb1%\xce\xcf\xf3\x9e\xf7\xbf\x94\x87\x33\xd7sx\x10X\xc5\xf2\xc1" "\xc0\x34&B?b>\x1f\xfc/\xca\x7L3\x10\xd4\x7f\xe5\x66&\xa0\x91\x41\x9b\x9b\x15k\x1e" "\x15\xa5\x1d\xad\xe4\xad\xfb\xaa\x1f LP\xb7T?\x9e\x33\x12\x9\xdf\x33\xb7@j\x80\xc" "\xe3\x81\xf7=\\\xd9\xb0\x85M\xc8\x44\\\xda\xe9\x88i\xbe\x15\x7f\xc0\xa8\x14\xbcL" "\xde[D\xa2&\xf9xbh\xd0PJ[X\xac\x4Z \xf9TB^l\xcd\xd1\x43\xda\xfd\x30\x88\x95m\x9b" "\xb6u\xdd\xd5\xee&\xf9\x97\x33\xa2\x1c\xddp\r+i\xa1\xb0\xc8nR_\x9a\x1z4\xa1\x8a\r" "\xf6\xcf\x33\xf2\xeb.\x91u\x99\xf4@\xaf\xfaw6\xee\x34\x61\xca\xed\x83\xef\x66\xfe" "2p9\x90\xca\xef\xf9\xcf\x44\xdf\xd1 L\x93\xf2\x8a\x8d\xfa\xd8\n*dV\x98x\xde\xf5\x86" "WN\xeag\xc8\xf0\x13\x1dM\xd0\x38\xeeSx\xff_\xd5QL\xd0hI\xa8@\xb6\xc8\xe9\x1c\x63" "\xa5\xb\xc6\xcf\x92Y\xf3\xf4\x90s\x7f\x8dN\xf4\x93\xf2\x16\xc\x9e\xf2\x99\xff\x98" "8\x8c'L\x9e{8_\xb5\xf0\x45\"\\\x94\xbb\xf3\xccIvu\xc4\\u\xdfJ{X\xdc\xaf\xac,\xeH" "Y\x17r\x97+/`}\xbe\xed\xc\xd7\xb2i\xddi+\xb4\xfb\xeex\x1f-\r\xd6\x31\xeftb9\xbf\xcc" "|a\xdc\xd1\xb8Xk\xce\xd1*N\x1awe\xb2\x31\x46\x87\x65|\xe6VW\xb3\x37H\x82o\"a\xa0" "\xd9\x7)C\xae\xe\xaf)B\x16\x66\x9bX=';>\x9<\x94\xf1\xc5\xa1(\xb8\x13y\x1c\r\xb7\x93" "\xe0\x17Uk\x9c\xff\xdb\x84\xcf+\xc5#\xb0w=|YT\xa3\xd7\xb4\xe4\x39\xec\x66\xc9\xda" "\x84Y\xfc}Z\x9ej\xe7\xf6[\x84\x11\xa8\x1d\xc3l\xbe\x3\x12\x9cG]?*\x90\x96\xe6\x8d" "\xa4\xd3\xae\x1d\xbc\x85\x89=(\xe4\x83\x86\x1p\x98I7z\xb2\xb2\x2\x87\x5\xc7\xac\x13" "\x0y\x7f\x16\xc5\xea\xf1,\x1b\xab\xed^\xcd\x5\x93i\xab\x32o\xe5\xa3\x46\x43\x10\xb0" "\x8b\xa0\xc\x92\xff\xe7\x14\xc3\xb9R(#\x1b\x82\x9ex\xf5\xd7W\xc8\x9>?\x8e,)\xfd\xd5" "9\\]\xac\x93\xf{\x89,i\xc4\"\xc\xe3\x91\x61\xa6\x11J\xd9\xfaOu\x15'\xaa\x1\xfev\x5" "WPH\x83R8\x3\x0'\xff\xbb\xb2\xef\xd4\xbc\xd2 \xbb{\xd3\x94X\xa2\xa1\x14\x1exq\x6" "7\x8\xc6tQ\x87\x41\x17\x9a\xc9\x39\x8e\x36\xe3\x9a\x8e\xe5\xadV\xefutw\\>,\x95\xa0" "\xb9.\\\xc7\xeu\xbc\xd0X\xd3\x4\x9\xf4\x31\x34\x99\\\x8f|\x11\xa6\x13\xfd\x80\xab" "?c)\x9e\xaa\xc3\x44\x12\xd1\x62\xa9\xd3\x86\xf3\xe9m\x98\xa2\xe7\x14\xce\xa6\r\xa8" "\x9e\xd2\x90i;}\xa7\x8b\x92\xaf\xbd\x9c\x7\x16*\x3pb\x97\x8fs\xa9\x64\xbb@\xaao$" "\xfc\xf0\x44$\\\xdc\r\x81\x89Q\xd3h@\x15\x15.\xee\xbfn\x1\xc4\xc4\xf6\xd8RR\xa1\xea" "(\x4\x18\x2\xfc<\xc3\xc6\x1e\x1f{\xb6\x6Ww\xeb\xc4\xc7G~\x89\x9aZ\xf5\x10\x82GJ\xda" "\xdc\x99\x8e\xca\xca}\x14\xe2h\xc6\xe3\xe\xcb\x66\x36\x45\xfe\xa3[o6\x89\xeb\xfb" "\\\xa2\xa1\xc4Mz\xddM\r\xd2\x2(\x9f\x33\xad\xdf\xe2\rH\x99.\x9dib\xba&6\xb6\xc3\xc8" "$\xbd\x63k\xb\x37\x1a\x9f\xb1\xe5\xaa\xc4<#\xe0\xa8\xd5\x1f\x96\xed\xf6N\xf1\x66" "\xb\xa7\xed\x81\x1b\xa3~\xd4(\xe\xc3\xe0\x9fh}\xc7\x87\x31\x1a\xd8\xcc:\xcd}\xf4" "A\xc0\xaf\x33\x86\x32\x66\xfa\xc\xca\x34\xf3\x0tm9\xe8\xc4^\xe1\x12\n\x1d\xdb\x1f" "\xb9U\xe3\xcf\x87G\xaf|6\x10&\xcbV\x10\xee\xc4>\xbc\xdd\xd1R{\xdc\xe2>^\xdf\x45\x98" "\xf1`)P\x5\xcbK\xe6\xe2\x1c\xeb\xa0t\x94\xc1\x2\x34\xf7\x82\xf2n\xe3\x5Z3P\xadP3" "\xc}AZ\x80H\x86\xe9\xefn\x84\xae\xdf&%\xa2z\xc2\x43\xc7\xe1\xbf\x1d<\xa6\x97\x35" "\xf\x88\x1b\x89\xe1\x9k_II^\x9\xe1vS\xbd\xa2\x8e\xca\xba~\xb7\xd8\n\x35\xbb\x98\x42" "w\xf7;4\xdf\xd1\x8e\x32\"\xbd\xc9v\xa1\x8e\x0\x35\xd7\x33\xb1\x9d\xa7\xeb!\xe9j\x7" "A\x84G\xfe\xdd'7\xc,~\xe3M\xa3\xf2\xf7@\x87\xb9\x99#\xc8\xc0\xee^\x1c\xde\xc\x36" "\x1d\x41\x8f:\xa9J\x1b\xbf\xd1\xe1\x89\x66\x96\xff\x32{\xbe\xb0\x6\xd8~\xf9g\xc6" "Z\xc7\xc7\xed\xb5\xbf\xc4\xa5\xb1\xa2\x1e\x9\x8a\xad\xcc\xf5s I\xa7\xdc?%\xd4\x1f" "\xd4<\xef\xc2\xfe\x1c\xfe\x44\xc9\x41\x1a\xac\x1b\xd7]\xb5\xa4'\x15\xfd\r\xbb\x38\xd6\xf6\xd6\x10" "P\xf8`\x9e\xe4\xcd\x84\xcd\xa6\xd2\\\x17\x65za\xab'F\x1e\x33\xf4)\x94LS\xb9X\xbf" "\xde\xf1\xb4\xa2\xa6+\xaa\x33^\x92*\x1p\x7\xcd\x8e\x38\\\x99\xb4\x31\xab\x13\xb6" "|\xcd\xc1\xd3#\xcc\x46\x30\xa8\xbc\xdd-\xd7\x32\x8d\x91,\x9e\xd0\xdf({]k\xe6\x64" "F\xcb\n\xa0\xc2\x62\xa4\r?\xa7g\x15\xcd\xa7O\x19\xd3Z\\\xfb\xa5P<\x8e\xf8k\xd5\xcb" "\xd9\n\xaa\xc5,\x4\x1bQI\x11\xab%\xd3/\xabLO\x97\x16\xc7OVViI\x9c/\xdd\xf2\xcf\xdd" "q\xbd\xcb\xaeV\xcf\x9v\x85\xb6ku\xb8\x14\xbe\x9a\xe\xc6:\xb1\xe6G%\xe1\x95\xb8*<" "\xab\xc6\x13\xe1\xf3l\xfe\x65\x2\xa2\xb3\x11W\x14\xf6v\xf4x\xa2u\x96>\x9f\x66QO\xd1" "\xaf\x33\xa7$\xa5\xd4\x65\x88\x18;\x8e\x30KO\xc=\x95\xc2\x9QR\xac\x35V8\x96}\x9d" "\x93\x34\x89\xfc\x1a\xfe\x9a=L\x8d\xfdk\r\x11U\xeb\x19\x8f\xaf\x5\xbe]\xe4\xb5?\x84" "v\x94hn\xeQ\xbd\xb8\xe8\xd1\x18\xf9\x88N\xad/'\"\xd5 \xba\xdbk\x0\x96?\x1e^\xd5\x35" "\x7f\xe5\x5\xe2\xbfY\xa3\x84\xbao'\xactep&\x10\x66\x37\xb4N\xdd\x9e\x14\x8b\xda\xb8" "\xcbJ\x9b\x9e\xe7T\x16\x88X\xc6\x44\xec\x63GY\xc8V\x7\xb4\x8\x1\xe9\xda\xe3\xb0\x1b" "x\xeb\xf\x65v\x90<\x12}\xb5\x93}\xeh\xe8\x18R3`i]C\x14\x18\x85k5E6\xd0\xa1\x1\xcf" "\xa1\xbd\x9f\xd6\x9c\xea!,\x1\x1a]\xc3g\xb1~\x1e\xb>\xdc\x32\xfa\xfeX\xd1\xc3\x8" "o7\xfc\xbc}\xfb^\x19\xad<\xae\xc8\xe\xd1\xd0j\x97\x9e\xb1\n\xf9\x31\xf3z\x98\xc3" "\xce\x15\x8\xfc{\x8c\xc9M\x16%\xd0m\xcb\x96\x1e\x8d!\xf9:\xfe\xf3\xacq\x1\x10&\xcd" "\xf8\x62\xdb\x89V\xf7\x1e;;acu\xda[\xa6kp\x1e\xdf\xac\xe0\xc8\xbb\xe6\xe5\x1f\x9b" "\x99\x1a\xeeGi\xd9\xe6\x17\xfd`\xfe/\xb9\x30\x93\xf7\xf1p\xe5\xcc\xb6\xb0\xa1\xa9" "\xb1\xc8U!\xf\x96\xff P\xb5\xe7Gh\xc7\x65\x1e\xceo\xce\xc2\xa2\xa6$yy\xed\xbb\x65" "\xd1sZ\x5{\xe8&\x82\xdc\xca\x16\xb1\x90i\xf8\xb5\\\xec\xdf\xf9GSi\xf8\xb0\xc1\xcc" ";\xfc\x45\xad\x8a\x5m\xd6\x65\xee\"\xc7\xa2O\xc\x8c\xaa\x97&o\x93\xe9\xf0\xdd)^\xb5" "\xf9}\xdetMR\x8a\xf7\x99X^\xed!o\xd3\x1 \x7\xaa\x39+\xff\x33\xcb\x2k\xfe\xc0\xac" "\x7-AA\xfc\xa8\xc\x15\xeb+-0J\xb7\xcd\x5?R&6(\xb9\x8f\xd4s\xda\x93\x41_b\x8bM\x0" "wzp\xbb\x41 \xa5\xd1mF\x9a \xce=\x4\xa4\xc1\xd2\xde\x84\xc7\xe3\xde\x14\xd4\xe0\xa2" "I\x16\x7f\x32\x9\xcf{v\xbb\x9c<\xc4m\xa4\xd6\xc7\x63%P\xe2\x62i<\xd4Q\xb7\x12\xdc" "\x1\xc8\x89\x61\x9a\x8<|7\xb6)\xed\xf1/\xc4\xb4*#\x1d\xc5\x6\x15\x8a\xa0\xc8:\x1c" "\xe4}\xdd\xa9\x1yJ\xa1\xe9\xc1\x97J\xf8\x18\xefZ\x19\xc4\xf7?\x89\x88\x3\x46O\xd6" "|\x8a\x1b\xf0\xcb\xb2\xbe\xd5\x16\x1e\x9c\xca\x12\x30\x19\x91\xd0W\xe5\xe9?Ux\x87" "\x8c\x98Q\x80+\xe4\xff\x9e\x45n\x1_\x17\x32\xd3<\xd2\xc6\x5\x86\\\x90i\xef\xc4\xb5" "\xf7\x2\xe2jUlb\xd4uId<^>Q\xf6\r\x61\xe4\x88\x39J\xc1\xb4\x5\xa0\xcc\x30\x91\xa8" "\xc1+\"D\xec'\xb\xb2\xa6\xc5\xa6\xf\x43\xb)X)h\xd2\xf6\\\xfb\x9bj\xd2\x92\x1c\xfd" "}^\xbd\xbc\x33,\xfdV\x8a\xde\xc5Oa\x0j\xdd\r\x64|S\xff;\xd3\xa0\xc5H\x98H\xc5\xfc" "\xee\xc0\xbch\x95\xdcj:\x8c\xfd\x64\xc9Qc\xab\xb5\xf8\xac\x5\x38\xa8\x80\x8d\x19" "\xe6\x1b(\xfax\xfa\x1a\xe2&\xb4\x8f\x38\xfd\xc4\xbb\x38\xc5&]\xa7s$\xbe\x5s\xbf\x86" "\x9b\xa5\xe3`\xe4\nq\x8\x9a\x1c\x8cm=\xaa.\xecr\x7\xcbiF~\xea\xb3rB\x89-\x8c\xd5" "\xb5\xed\xb3\xf2\xf7\xb0\x11\xd9\x15\xc0\xe8\xbc\x3\xc6\xdf\x4\x99\xea\xff\xb6\xb5" "\xc6\x41\x80j\xcaI$`\x87\xc0\x38\xad&E:\xf2\xaa\x39R\xf2+\xce\x83\x5j\xe\xb7\xf5" "s\x8e\xc1\xb5\x63\xc4\xd5z\xc2\x8e\xea\x8\xc4\xe4\"r\xbe\xb6\n\x8\xbe\xd0m:\x80\xaf" "\x90\x45\xa9\xd6\xec'\xe2\x65\xc2\x64\xb2\x7f\x92\xe6.\xe2\x43\xd4\xdb\xb1\x62:\x15" "\xff]" "\xd0\xf6\x10\xc4\xffrm\x84V\xcd\x88\xda\xba^\xfa\xdf.Y\x1dg\xe9\xdc\xb4\xfdMEuy\\" "\x1a\"~\xe9\xd2\x98\xbfM.\x4\xb6\xe1\xf5\xd8\xc3\xb5j\xa9\x8f\xea\xaa\xfOxl\x15\xd8" "#i\x12m\xfd\x7f\x84J\xf6\x62\xfb\x62\xafn\x0\xd3\x9f|[\xae\xd5I_\xe\x66\x81\\\xbe" "\x9d\xff\x82O\xbeJ\xd0\xd2\xa3\x37\xd2M\x91u\x4\x8d\x5\x35\x81\xd7!j\xac\xba\x90" "\xab\r\xd7_X\xa8\xaeL-D\xf1!$#\xab\x1d\x0\xd0)\x19P\xab\x4\xac\x34\x1c\x16\xef\x66" "\x93\xa4\xc4\xce\x8e\\\xa5\xa7%\xdcg\xd8\xe7\xa2\xbb{s\xea\xde\x64\xe4\xd7 \xd8\xcb" "\xa7\x1\xb6\xe9\xba)-\xc4\xf7H\xbe\x14\xba#\x90\xb2\x91\xe4K\x99\xc\xa0He\xf7T4\xf0" "\x94\x85\xaa\x34O.\x86\xd3\x6(\x9e\x90\x94*\xca\xf8J\xe6hn\xeb\x6\xa1}H\xdeH\xf8" "\x88\xa5\x9W\xf9\xb1\x18\xa8\xa7\xf2\x82\xf4h\xa9\xe1\x0,\xb5\xa0o\xb7N`\x98Ht\xe9" "\xf3\x43\x63\xd2\xe8\xc5\xe5\x63\x7f~\x18\x42\x34J\xbb\xbf\xa0\x35j\xc8\x19\xf5\xad" "\x8d.\x92\xbf\xec\xa9\x1d>y\x8dz(\xaa\x8l;\x19\xf0\xd2\xf4\x8a\x97\xd0#4\x8\x38\xdb" "\xa5\x5U\xc\xb3\x8e~\x7f%qT\xa1\xf0I\x8f?\xc8\x96\x35\x9f<3l`\xa9\xa4\xff\xd7\xbb" "Q\x8e\\Q\x91\x3\xb0/\x84\xf\xb0`\x91m\xe-\x89\x33\xb9\x64.}\xa8\xd6\xc1\xaf\x1b\xe1" "\xfd\xd5\xd0\x2?\x97\xdf\xc9\xd6\x94\xf2\xe8\xcb\x91\xa4R\x89\xc0\x1b\x46\xf4\x94" "\x15\x45*o[9\x83\x6}\xe6\x97\xd2'\xceTx`\xf5\x16\x8fke\x9c&g\x6\x9f\xcc\xd0\x11o" "\xa9\x2\x8b\x9c\xa6\xdc\xba\x81vn\x83\xf5\x1c\x94\xaaR\xba\x98\xc8\xdf\xfc\xcd\xef" "#\xa2\xab\xda\x1c\xa9\xf5)\x8d\xc3\x9a\x95-\xd1\xb\x93\xb2\x43\x34\x36\xbc\n\x13" "\x85\x8c\x8c>.\xd3K\x9f\x6\x0\xa0\x96\x87\x16|B\x15\xcesHC\xd1\xa2M\x8f\x12}M\xcd" "53\xea\xd3\xd1g\xd3=W\xeb:\xb9\xe2\x90\x83X6:\x9f=\xf1TW\x1b\xd9\xbdN\x90\xca\xf4" "*\x0\x8fL!\x8a}\xb0\x96Gp\xa3p\x0|L\x93\x1'\x1d\xa1\x89\x19\x1f\xbb\x8b\xb3\xf2\x89" "M\xc\xcd\xd5\xb4\x44\xaf\xe4\xa0\xa5\xefG\xfd\x8d(\x5\x83\xfb/\xb5\x94\xb0\x46\xbe" "\xfa\xe4\x0\x80=gB\x9c\x8d\x15\xf5s\xae\x18\xd1\x8c\x10\xac\xfb\xc0\x1d\xf9\x11@" "\xb3\x96o\x5\xb4\xe0m\x1e?\x7\x42\xb8\xa8\xabM'J\xa6\x81\xa7\xd1-5\xbf$\xe9\xfa\xc4" "\x8cp5S[\xe0\xd4\x19\xbc\x9a {w9ads8\x82s\xf6H%\x9c\xe\xa5\x9cum\xc\xe1V1\xf6\x9b" "\x90\xf4\x31\xbd#\xfd\x8f\xe5\x96\x0-\xab\xab\xc7\xf5n2\x9fSjq\xd2\x89Q\xebR\x8b" "r!^\xa3WwZ*\xc6\x93\x98\x8bk\"\xc3\xfc\xa3!U*\xdc \x93\x1c\xb4\xdbIq\xd9\xec$\xd2" "t\x0\x46\x46\x62z\xa1\xc1 \xe&%\xff\x96!\x9c\xcc\xe1\xa1*\x8di\xef\xd1\xe7\x34\x13" "!\xf\x91H4\xe8Mm\xed\x8d\xe9m\x3\xf5\x8cIb\x17\xa7\xb7/\xb1\x0Y\x5\xe7\xcag~\x9G" "4=6\xdc\x17\x86\x86\xb1\xfe\xde\xe4\xc4\xb5\xb3P\xf2 \xbe\x8e\x5\xd5L9\x9d\x86\xbe" "2\xef\x11!\xbd][\x1c\xa5\xbb\x11\x90\x13\xdf\xb6\xaf\xf9Nk\\\xaaQ\xe3\xdc\x1a\xe" "\xac\x95Mu/\xf3\xb3\x12Q\xcd\x17\x97ly\x8b\xfd\xcbk[\xfa\x1aJD\x9d\xea\xa4/\xf7\x1a" "\xc5\xb3\x97\xdb\xdb\x64\xab\x9a\x9ax\xf7U\xa0\x14\xca\x44\xa3\xa2\x82@\xc7\x8=\xa7" "\x16\xe7\xa9GP\x8c\x5\x1aKp\x2G\r\xd2\x9b\x65\x37\n\x1f\xe0\x31\x1b_\xaa\xcf\xda" "n\xa7\"\x97\xecz\xa4,0^\x7\x98.^\xado\xcfZe\x9\x10\x1s\\\xb1\xd0w\xc8\xc5\xd5\x64" ":\xb0\x86\x82\x9ej\xf2]\xa5{7G\x99\n\x61\x8b\x98\xa2\x8b\xa3\x95|\x95?\xf9\x9a\xdb" "Q\xb9\xab\xd2M\xb7\x87\xda\x85\xb0\x30\xed\x64$\xe3k\x87\x38K\xa9\x1b\xf5\x44[^2" "5\xb5\xf3\x38\x39\x86\xc4\x13\xcb\xf2\x83\xf\x45\x3_\xd1(-\xc6\xf6\xc0\x90&\xbe\xe8" "\x1c\xc2\xd3[\xbb\x86Z\x13g\x17X\xd4\xc3\xb8G\x84\xf9R\xa2\x42\x44\"\x39s\x8e\xea" "%\xcf\xa9\x9b\xc1\x8e\xc4\xd1\x35\xc5\x35r\x89S=\xcb\"_\xd5\xab\x33M\xb7\xbd\x7f" "\xc9\x39\x64\x46\x9cJ\x6\x37\x65\xc1\x7fn\x2\x99\x38\x98\xe6\x39\xb6\xf3\xc7#\xcf" "\xbb\x5\x0\x97\xa7:\xf9\x94/M<\x11\xeb\xa1{)KV\xb\xce\x19>.9\xb7\xa0\x17\xf5M\x85" "\x92\xd6\x35 \xe5(\xf5YW\x8en\x95\x0~\xf6\xe6\xbe;\xdf|G\xc\x18s\xe9X4.\xca\xb9/" "\x2\xae\x42\xb4\x5S\xef\xb4\xebOY\x8e\xc8\xcaq\xad&\xea\x1a\x17\x46QA#q\xe6\xcb\xba" "\xd5\x82\x96\xc7:\x12\x63\x14\xc1\xbc$x|\xf9LtsF\xb6pC's\xb9\x9a\x87\xc4\x9f( \xb1" "\x1e\xa1\xff\xad\x64\xa3Y)\x82\xe9.\x91\xe1\xb8\x8c\x32Sx\xf6\xddm\xcf\xa8\xe7\xb7" ":B6%^\xe9!\xb4y\xa0\x1a\xf6\"\x9b\xce\xf6[\n\xf2\xca|L\xb1^\xc5\xf8\xfd\xa4\xd1\xa7" "\xd7\x42\xf7\xb9\x1ch\xaa\x61\xf8z\x86I\x93\x8e\x8b\xa9*Ku\xc9?\x81\x9\xb3w\x8e\xe2" "#\x92_\x81\x19\x17\\\xbe\xab\x90&@\xb7P\xd8\xc2\x30\x8\xf2<\xc\x10\x96\x13\x35\xb8" "\x7\xcf\x83\x30\xfd\x41\x8e%\xe1\x84\x8f\xcd\x8d\r\xb1\x84\x18\x11\xb3\xb0\x39\x1d" "9\xebVkz\xb8\xc2R`\x9d\x13N\xb7\x92\xba\x36\"\xe6\x30K_\xe7Y\xb3\"H\xdf\x9d\xda\x84" "*\xa0\x8m6\x8c\xc8G\x88+\x1d\xf\x95\x16\xb5\xb6\xaa\xdd\xc1\xa8 \xb4\x86\xaf\x34" "\x88rI\xb2Q\xe7\x8d>\xd2\x85\x65t\xc7\xb2\xb8\x1c\xaao\xccq\xdb\x34\xa2\xcc\xfc&" "\xaf\xb1\xbd\x12g\xf2\xad\xb1\x42\x9cM\x93K\x10\xcb\xfd\x38\"\xa1\xdd\xc5\x8a\xe7" "_\xb1L6\x17\x8e\xf5\xae\x4\x7\xe1\xbb\x99\xe4gt\x17\xba\x7f\xe6\xe5\xfc\xb9\xe6\xf4" "-\xc3\xf4ou\x0\x62\x90j\xb9H\xe0\xd6\x96\x18\x8b\x19\xe1\x6\x10\xa8\xab\xdf(s\x9c" "Nh9\xaf\xf3H2\x19\xf3\xb2\xdd\xdc\xaa\x9d\x0\xf6z\xfb\xf1\xbbo\x1d\xfa\x7\xa5*\x85" "(\xe7\xf5\x97\xc1\xbaiH{\n\x9b\x13j\xfd\xd7\xe0\xcc%+\xeW\x85\xec\xc1\xfe\xc\xab" "\xcf\xb9\x90m\xb9\x32\xa9\xa7\x66\x89\xd1\x62\x18\xd6\x95?\xc\x37H\xda\xee\xcdo\xf7" "\xa5\xe5\x85\xab\x34\x62\xe\x1b\x7\xdb|\x1d\x66O\xf1v\xf4M6!6\xd3o\xb\x7\xf0\xa1" "Yc]?\xe3\x15\xedv\x10\xc5\x5\xb9j\xf2\xc4\xed%\xf6\x13\xdf\xc4?\xee\x39\x1d%\x43" ".k\x8a\xa1\xefr\xb0\x8f-F\xc7\xc4\x84\x8f\x32{U\xa9_\xea\x83y\xd9+\xb3\xd0\xd9\xd7" "v\xb7\x8\xec\xa6\xeb\x3\x9b\x45\xa0\xb5\x64Jz\x9dm\x4\xcf\xddL\x13\xf6\\\x82`\x1d" "}|\xeet,L\xf1\xf8\xe5\xea\x12\xc1\xc\xeeQ\xf0\x41\x7\x6\xc7\xab\x9f\x4\xe7\xd1\xb8" "\x81\x5\xa6\x9bH\xb3\xa0\x45\xf3\x1d\x36\xdf\xb8\xf3S\xac/\xd6:\xad\x15\x66\xe7m" "$u\xb7\xca\xb4\x98m\xe0\x8d\x95\x1\xf0\xfa\xa0\x41\xb3\xd2x\xa9\xcf\x63v\xaa\x89" "\x95\xc0\xb0\x39\x30\xfd\xeb\x8b\xcb\xaa\x1dz\xad\x34\x9a\x31\xdf\x1dRY\x93\x1bT" "h\x8d\x95\xcb\x36\xe4\xe0@A\xf9zrm'\x8H\x8e\xd6\xdb\xe3\x1e\x92g\xc9\x46`\x8a\xe7" "H(\xc8\xefK\xa3@#\xe8N\xa8\"\xbb\xcc\xab\x19\x63 MY\x91\x9a\x82\x99\xca\xe9\x88\x14" "/Bp\x84\xe9\xb6\x32\x9b(:]\xbbJli\x9a\x94\x6\xcZ\xd6^\xbb\xaf\x44\x9d,\xea\r\xcb" "\x9c\x99\x66\xfa\xa6\x39~\x8f\x99j\xdf\xaa\xfc*\xaf[+\x93\xb6\x7f\x41-%M@\x8d$.\x1c" "\xc7\xc8/\xc6\x18\x94v\x88\x34.\x82[\xacn: `\x84P\xd6\x31*\xc5\x8c\x8c^\xc0-\x1\x9" "4\xbb*\x92\x32\xd9\x1f\xe4V\x83l\x15\xbe\x3\xc5\x6kW\xe5\x18\xae\xa7\xec\x9\xd0J" "1P\x8cm\xc\"\xb7\xfe\xe3Mw\x92\"\x1\x65\x85\x1\xa3\x9\xc8\xdc\xcfOM\xef\xdc\xf9\xa8" "j\x8b\xd4N\x18h\xee\xa7I\x86\x82,\xb9o\xc7\xd0\x17\x82\xe7ME\xddLh\xed\x64\x8e\xdd" "\xd1!\xb7'\xe8\x9bU\xdb\xce\x35\xc3\xeeMh\x98\x9f\x1e\x90\xbb\xbe\xabo\xcd\xa7\x85" "\n\xeb\xfev\x12\xa1\xc6\xb3\x9b=0\xb0\xb4\xe5\x3\x1d\xd2\xc7\x88\x32J\xf5\xca\xf7" "\x97Q\xe2\xda\xa2\x32\xcbr\x91\x96:\xaeO&\xe\xc6ju\xcaY\xa7\xb\x91\xf9\x9T\xc7\x45" "\xd8\xe`H\x8a\xb1\xf3\x1c\x1cv\xd6\xe6\xc7=\xea\x17\xd1(4\r\xac\x0\xbe\xce\xeb\x64" "|\xe\x90\xd5\xd3\xac\xd4\xd1\x16\xfd\xe7w\xb6)\x19\x64\xe6\x12\xda\x14\x65\x9e\x9f" ".|\x18\x42\xd8\x9e,\xe5;\x4\xa6\x1d\x80\x18\xd1\xa0x\xd4\xd4\x44\xaa\x15\x5q\xca" "\xbfi\xe5R,\x99\xb0jS}\xa3\xe7\x31R\x1fK\x14O@;\xcb>\x93X\x1c\xc3\x66\x94\xe3\x9b" "\xec\xc\xae\xc\x3\x65V\xa3\xe1\xd4\xbb\x33\xd9\xdb\xac\x66\x45\xabXb\x10\xbd\x9f" "\xd2\xbe\x62\xe9x\x9b\x1dR\x9d\xcd \x95\xe6\x1l\xdd\x80\x91s\x9c\xdf\xc\xb2\x12\x82" "\xa2?\xe9V\xe5\xa4\x8c\x12\xfb=\xc7\x63\xe7\xb6g\xe5(\x92\xb3\x95\xd3\xad\xeb\x82" "\xc3\x8fx\xdd=\\\x10\xbf\x9f\xcc" "\xea\x1c\x19\xb\xc8i\xdcm\x1e!gmj\xfe\x8\xe9\x8bO\xc2\xd2Z\x14(\x95I\xc7\x90\x9f" "vp\xbc \xb3\xcfU\x9c\x30p\xa9)\xb1\x5\x83\x94\x87M\xd9\"\xaa\xc1\x93\xce\x97\xc7" "E\xac\x17\xb9*]e/\xa7od\xd1\xa9\x62\xe3\x98U\xb3\x4\x96\x1f\xdc\xc6\xf\xee\x9d\x3" "\xf8Va\xf0\xe1\xde\xe5 &s\x11\x38Y\xa5\x9dx6(\xc8\x1fq\x5\xa8\x5g \x80\xd0\xd0\x87" "\x93\x1d\x39]\x86\x66RA\xf8<5\x16\xe8\xd0\xb4\x96\x0\xecs\xe5\xf3\xc9\x66\x0\x92" "\x12w\xfc\x9c\x45\x94\x86\x91\xf9\xab`i1B\xd0\xb1\xc4\xaa!\xa3\xbe\xe9\x5+\x7\xb8" "\xb:|\xd6\n\xe\xe9$[\xdb\x61\x10\x1b\x63\xc9\xf7\x63\xe5\x43\xf0\xda\x90\x16QM\xcc" "\x12\x86\x12\x66\x4\x18\x9\xa3\xc8[o,)>\xa3\x1e\xd8\xc0\x7f\xe\xf8\x84\xd7\x1b\x90" "\x7f\xcc_U\xfd?\xa5\xb1(\xd0w}@c\\\x86\xd2\x88\x66ih\xef#\xde\x31\xd1\x1\xca\xd7" "\xd5\xbd\xff\xe1W\x9b\xca\x42\xeeK\xaa\x92\xe1z\x80S\xc2\xd5i?\x95,\xa2\xf9\xc8\x46\xd3" ")\xdf*\xaa\xec\xe3v,'\xef\xa0\x14\x9e\xe4?\xbb\x38\xf6r\xfa\xb2jK\xc3\n\xc4\xb5\xc2" "\xf6\xc9\xa5\xc2!g\x9b\x87\xb3\xe9\x11\xa5\x61\xc1\xad\x62IdPJ\xce^7\xf9+a\x4\xba" "\xa2Q!\xc8\xce\x7f\x86\xb4\x98'\xc9\xfao\xf4\xc3\x96\xc8\xba{$J\x8c\x8e\xf6\xbfv" "\x84<\xa8\x3\xdeyc\x9dh\xfa\x81\xf7\xfb\x12\x43\xd7.\xa4\xde[\\\x83\xd8s\x17|f\x8d" "P\xe5~\xc6\"\x1\xa0v\x9bL\xf3\xa8\xdf\xc2\x15\xec\xb7\xae\x65q\xbb\x33|\xff\xb0\xb3" "\x8b:LPoOJZ7\xc0\xba\xb7\xb7\xac\xb9]\x5+\xc0\xf\x7\xb5\x5\x9\xdb_\xc5\x19\xd0lX" "\xc3\xfb\xfc\x97\xce\xb0\x31\x88\x7\xaa\xeb/t\x11\x65\xb7\x9\x1e$o8f\xdb\x42\xed" "\xf7\x35\xc0\x39\x83>\x18-\xc9\x4\xb8\x1b\x87)\x17\xdc)\xd0\xd1\xef\x36?~ \x7Z\r" "\xe6=\xf9\xe0\x9br\xc1\xa7{\xcd\xdf\xb\xaf\xaa\x3\xc9\xcdg\xe7\xa0\xad\x8\x99\xe5" "%\xea\xaa\x0GW\xf8,h\x80\x9c\xe4\xda\x96\xdfP\xb7\xd8@\x1u$\x88nc\x2<%\xb4N\xaf\xa9" "\xf2\x9c+\x12Z8\xe8\xebh\x86\xdf\x9f\xb9\xc8\xf8\xeb\x42\x64\xc1G\xaa\xd9~\xbf!6" "\xde\x44\x13\x1f\xc6\x33J\x89\x9f\xc\xb3\xd8\xaf\xa5\xf0\x9c\x89\xc6\x4\r\xd6\xc8" "~\xa2;\xd1:1\xe6~\x93\xaf\x3gzH\x1\xc7ix\x90\xcc\xf8\xfc\xbdV%\xb/\xe0\xc9\xc9\xd3" "K\xff\x1c\x85\xc1\x9f\xa5\xb3\x80 6\xb2\x9eYY4\xe2R\x8a\xb9\xeb\xedT\xcc\xe7\x6\xa9" "\x99&\x16k\xc1\xbc\xb0\xf1\x34\x44\x9e\xd1\x86\x6\xb8yE\xf5\xfd\xfc\xa8\xbe\x38T" "\x9a@$d\xcd\x8e@w\xe6\xb\xcdn \xd5\x11\xb0\xe2w:\xe2\xd3\x1f\xe9\xb5\x17\x93\xb8" "}\xac\xcc\ny-\xfc\xbd\x9c\xd8\xa6\x8b\xd7\x41<\x8b\x5\x9e\xe6z\x10y\xef\xf8\xbd\x8c" "p\xf2\x8a\x0$\x8a\xfe:\x8a\x8cn\x82\x9b.\xc8\x1cx\xb5\xf3\x4Y\xc2\x1bG/\x87\xc7\x8a" "\xac\xd1\xf2x\xdeT\xe4z|.\xa6\xa9\x8a\x8f\x8e&\xbf\x82t\xa2\x7\x33\x3\x34\xea\x94" "\xbf\x9d\x12\xf0\xb9\xba\x9e~\x8eq\xb5\xd9\xb3Y\xa4o\x9\x43\xf2U\xb5\x1a\xbd\xd8" "\xa6\x1\x14(C\xcd\xf2\x12\xde\xca\xa5\xe7\xa5?\xa8Ig^\xa5\xd5\xa6\x44\x46\x9d\x36" "\xb8\xb0\xab\x9e 6`\x9b\x81O\xf8mbb\xb3\x96WV\xce\x64\xdb\x39,*\xe3\x9dti\xed\xec" "\x93\xa0\xca\x86\xdfs\x0}\x19\x9f\xf7\xd5\x1fXL\x12P\xe4\x33\x0N\x2\x80\xde\x93\xfd" "\x13}\x80\xa7um\xe6Y\x95}\x9b\x39g'\x2\xd5\x80\x92>\xf7|\x81" "\x92\xcdX\xc9\x5\xb9\x6\x86M.@\x13\x84\x37+\xc7\xac]\x3\xea\r<\x7f'`q\x1\x8c\xae" "\x13}\xe4'\x1a\xf9\xf9\x8V\x7\xd9\x8e\x65\x87h\x9a\x44\xdd\xbd\xb0\x88\x3\x11\x82" "I\xb2\x7f_{\xae\xef\xa8\x10\xea\xe6\xf6\x2|\n\xa7\x2\xcb\xc1\xe7\x10\x35l\xd6\x81" "F#\xb3\x35\x91\x90\xc3\xc2%,)\xe9\xbf\x86\x8d;\xa4\x1e#[\xa1\x89\x87\xbeH\x9a\x9d" "\xdb\xc3|\xf0*\x1\x1fV\x19M\xd0\xb4\x7f{\xe5\x17\xda\xb\x37\xa2\xc0\xf9\x16s\x10" "\xe\x8bZP\x94j4\x2\xcd\xca;\x95\xb3\x11\xd1\xbf\xa1\xa3\xc7\x18\x0\x61\x90\x19\x15" "\xc0\x9cL\xd0M\xe1\x44\x80\xceX\xc3\xf6n4o~R\x9e\xa0{Ra\x85\xa6\x46\x43\xa2\xf8\x1c" "\x9c=x|&U\xfa\x31\xe8\x43Q\x92\x95\x11\x6@\xab&\x85<\xc\xfc\xc\xeb\xbcU\x16\xb4\x1d" "\x98\xba\x5\xac\xfe\xb\x96\xe5\xd6\x9c'\xd8\xbd&!AR\x9e]q\"/\x1e\x82}G\x9b^\xac\xbd" "\xee/\xef\xc9IK\xc8\xd7\xb3\x8c]X\xd5\x13\xed\xceVgDU\xb0\xe2g\x11\x65\x8e\x36\x36" "6+k\xa2\x1e\x66S=\x88\xfb-\x17\x5%H\xbf\xb0\xd7\x18\xc<\xe0\x80\x1a\x9d\xaa\xa4\x8d" "p\xb3\xec\x94\\\xdb\xabJ\xf1t\x3\xaf\xd5\xc0\x1cM\xa0\x9b\xef\xc3s\x84\x12\xf3\xd2" "\xa9\xf4\xd2\"^`\x8d\x11/\x94\xd0\xb6\x33\x65\x80\x61\x39\x15Z\xe0\x80N\x1f\x1X\x14" "\xbf\xae\x85\x38\x64]\xfd\xbe\x1d\xd9\x37+=\x1a\xf4\xf5\xd1#\xae\xba\x34\xb2\x42" "\xcf\x11\x41\x9\xadL?\x5\xb\xdbv\xff\xbcw\xae\x8I\n,\x1c\xf9Ve%c\x7\x1f\x9fH\x84" "\xbb\x2\xe7\xfb\x1eg\x1a\x7\xc0\x94\xd7|z\xe5/\x92\xc6\x1b\x8f\x30\xe8\x85,Y\xbd" "\xdb\"\xae\x5$\x1c\x8/\x91\x9fG\xc5\x8c\x35\xcM\x13Uz\xf1\x35\x33\xfd\xca,\xfe\x12" "\x9c\x94\x14\xd6H\x92\xab\x1b\xa5\xa6h\xe9kJ\xc5\xc8\xda\x0\xee\xe\x16\x97\xc2\"" "\x1ZM\x1G\xae\x18\x99@\xbU&\x97\xa0n\xe6\xa9\xd8$G21\xfch\xf6\x9b\x35\xd7\x8b\xe9" "\x8c\x39\x1d\x83H\xb\xcd'\x95-\x96\xf5\xe0\xb4\x42\xec.\x6[,\xcf\xaaR\xb2\r\xfe\xe1" "\xc4\x9b\xea\x41\x81\x14i\x96\xd9/\xc5\xcc\xd8H.\xc7\xc\xa6\xa0\x1%Jd\xc6=\xf0\x1" "t\x91%\xcc\x66\x85H\x8d\xcd\x13\xca\xd4\xa4\xe0\x38`\xf9\xe1o\xfc\xa4\xf4v\xc7W\xf5" "\x16\x8e\x99\x6%\x9b\xfc\xcb(\x8\x36\x9fy\x85\x8a\x88\x87V(yOG\xc6\n\xb1\xb9\\.t" "\xd1\x30\xdaPj\x92\xb2P\xa4?\x82\xce\x1a\x5#b9\n/\xefI\xcb\xdaN\xbc\xa4?\xa9)\xb3" "\xadP\x9d\xce\x91\x8f]\xc3\x9d\x65x\x14]\xff;+\xbb\xd1\xe9'|\x80\x81\x8e\x13\xb6" "\x19\xf1\xe\x82Y-\xf3L\x88\xe3\xa6\n\x66\xd0x\x1b\xd7\x63\xfag\x1c\xca\xa7\xc6\xc" "\xb2\xd5 \xce\xd2\xda\xe8\xdd\xf1\x95\x96\x1c\xaf$1\xb5nO\xb5w\xaa\xb3\xeID\xa1\x39" "\xea)\xf3\xa4JG\x19\xe4\xe1\xd8w)\x98\xf2\xbft\xaa)\xc1\xc4\x1aG*\xfc\xd1\x34\xaf" "ra\xe1\x9e\xbx\xb3N;\xf2:\x90\x8a^\x96\xad\xc3\x41\x15g\xbf\xd0N\x16\x9e\xcc\xa0" "@\xb2\xb0\x41\\\x2l\xe6\xd0\xc9\xe1\x5\x8e!s=\xa3\x8d'o\xad\x38\x10\xea\x1e\xdf\x96" "\xee\xfa\xb9\xa0z\x99\xeb\\\x9d\xda\x97.\x1e\xb\x83<\x8c\x45\xf4`g$9\xe7N\xb8\xfa" "\x1c\xd0\xdc\x93\x13\xb\x9eY\xb9&{J\x9d#\xc2]\xe6\xcd\x9c\x38\x0\xfb\x33\xa5\x17" "\xb5\xebJ\xd2\x37\x9c\xb7p\xe0\x83\xa7" "\xcd:\x93\xee\xe6\x15sD\xe5g-\xa5\xee\x42\xab\xfbNj\xf4\x98\xb5\x43Q\x8aj]1;\x1a" "\x85\x45#0\xb0g\xd9Ln\xc2\x9\xf2/\x7f>\x9c\x10\x9a\xd7\x8f\xdd\xa9 \x14\xd8\x46\x98" "\x87K\xb8\x33\x1f\x97,F\xa3\xda\xb9\x43<\x6\x34\xee\xd2\xa9&\x17\x4w]\xe2U\x10\xf1" "\xe1?\xf8\x92\x8cJ\xa2\xf\xc4\xbbY\x16\x43\x80t\n\x86\xbdL\x9a_\xfd\xe\x35\xbe\x9a" "K\xe*\xa4\xc6j\xe1}\xe8|\xf4\x4\x9b\xd7\xa4\xa2x\xe6\x88\x90\xday\x1f=\x0*\xb1\x12" "\xeb(\xf7UM\xfd|M\xc3\x98\xbe\xd5\x93^(P>-\xc4\xe7\x10Yqp\xbf`\xae\xc8\x8fh\xe7l" "\xc3\xbc=\x12\xd9NYa\xe0\xdd\x1d\n\x92\xc4\x38[)?g9\xe5\x8\xf1%(w/\xf5o|H*xy\nV\x89" "Xh\x18;)\x9e\xbe\xad\xce\xf9\xe4\x99\x36\x31\xf1\xa7\xcb\xf3V#\xd7\xd8`\x1e!\x8c" "\x2Q\xf2\xf8\xdf\xd8\x1b\x92\x8#\x91\x7\xc2v\xa5V\xe\xf7k\xaf\x91ZI\xeI\x4\xe4\x97" "\xf1\x9c\x3\xf7\x1\xfb\xeG\xec\x38\x88\xc0:u\xb6$Z\xdb\xe\x87\x8b\x4}}\xeb\x88T\xfd" "\xfc\xaf\xac\xd0m4\xe9}\xcc\x43\xd2\xfb\xf3\x81\xcf\x19PJ\r\x96\x84\x64@JF\xc7!\xee" "\xd8m\x1fv<1\x1\xeck\x83\x8e\xa6\xa3\x94'\xf4\x7\x1c\xee\x96\x12\x1b\x1a\xf6\xab" "t\xdd\xeekNK\x15\x66|\x96\xf1\xcd\x1d\x1\xdc\xef,\xd5\x30\x36\x7f]*\x97\x88^&i\xda" "R\x17\x9d\xc4\xd7.K\xa7Q,aY\xb7\x1fO\x93\xeb!\xbdOb\x1cV./H\xbf\xda\xb3\x9eq;\xd6" "N\xb1z\xf6I\xef}\xf8@\xa4\x39\xdf\xb\x1.\xfa\x81\xf1\x66\x62\x14\xc5\xb4P\xf0\xa4" "\xf7\x6Z\x97\xbl\n\x84\x6yp0\xd6\xee\x94}\x97\x1dx{ba]hZ'\xd3\xae\x3\x85.\xf8.\x1e" "Qzv\x12S\x84\x8\xcai\x83\x14\x19\x33\xc4\x85\x2\xfb\x2\x36\x62\xe2)\xfd@w~>\xd9\x96" "\x8dM>\x99\x44_\xc\xdd>\xbe{\xe5.\xd2\xcb\x83y\x5\x41\x64\xf0\x0\xb2\xec\xba\xc4" ">\x1\xc8\x81K@\xfaK|\xb4P\xa9\xc4_\xcc\xb6\x11,\x9f\xc8\x9\xea\x18\\\xd9\x15g\xcd" "h\xa4\xe8\xf\n\x35W\x86(\x8eO\x8e\xdc\xa8\x16m\\\"\xe1\xdd\xf4\xde(kA|\xf7\xf3t\xa4" "\xb0\x99j\x13\xf6GD\x95!\xcb\xc3z\xec\x62T\x1c\xabm\xab\xdc.\xc9\xf4q\xdaT5\xea(" "\x9a\xfd\xf2\x34\xefI\xa2\x0\x43\xa7\xfe\xa4\x38\xed\xa1\xd8\x44\xd3P\xf0\xdeI\xc" "\xb4\x36\xe7\x14\xb5\x65\x5\xdd\xff\xa9\x9ajw:\\\x92\x42\x8\xad\xb8\xa8\x65\x90\x1b" "\x9b\xfd\x16k\xd9H\x8a\"\x8d\xb8VC\xf1Y\x81\x8f>\xb9\x38O\x83\x9d\xc4mK\xd7\x9a\xcf" "~c\xe\x99\xeb\xf0\xb2\x5\x85O\x9b\xf1\xf0z\xd8\xc2\xce\xd1\xbf 5\xaekD\xbc\"\x81" "\xfe\xda{\xff\x65\xaf^C\xb6R\xee\x17!1IG&\xdam7\xcbJ\xce\x43\x9d\xe1\xcb\xee\x9a" "\x7\xb\x1f\xb9T\xe\xa4\xf7\x13\x8c\x37\x10\xd0Hg\xed\xb8[\x95\xdd\xdc\xea<\xf2\x33" "\xc7\xb8;\xeb*\r\xfe\x43\xc7\x8?\xb9\xde\x10[m3\x88\x8f\x1bk\xf8I\r\xa0\xc2=\xa2" "S\xb\xc2\x43\nPj\x97\xe8\xcd\xcf)#D\x8a\xb2\xabN&\xc3\xc5\xbf\xbar\x1d\x65\x8c\x80" "\x9c\x1\xf0\xa8Jb\xc1\xb7#d~K`&`k\x8e\x43\xea\x1e\xaf\xd3\x12\x1d\x85w\x93U#\xa9" "~\x7f\xd1\xd2\x98l6\xb2P\x96\x97T`\xc8\x91\xe8\x11If\xd4\x39}\xd8\xcc/\x1d\xd5H\xee" "\x2\x45\x16U\x9c\xcct\x7f\x91$\x8a\xae\xfb\xbfW\x83VX\x84\xb3\x38\x97\x1T\xc5\xe3" "1\xe2\x94/L\x94\xed\xbc\xd3:\xd1\xb9W\xf2\x98\xc4\xf9\x7f\xf\xe\x11\xf2$\xdei\x86" "vR~\xb0wmo/4\xe9\xb7,\xdc\x1c\xf8v~\xa1 \\x\xc5\x19+\x97\xbb\xe8gQn\xd4\xcd\x32#" "\xb3\x96\xb3!\x8b\xe1\xf8\x8e\x97o\xeew\x4\xa2\xdb\x84/\xb1\xaf^Ne\xbb\xcb\xa5t\x8a" "\xfc\x1bow\x96\xce\xda\xaag\xd7t\xb\xc9\rU\xac\xbaI\xf\x8d~\xc9~\x16\xdbo\x4g?" "\xdc\x89\xf3X\xbb\xed`\xce_GS\xa9\x86z\xe6\x61\x66\xc6$\xcf%\xe3\x9d<\xd1\xc1\xad" "w\xe9&P\n.\x14\xe7\xe6\x15\x46\x94\x44*\xad\xdb\xb4\xde\n\x1\xc4\xbb\x1a\x66\xbd" "\"\xa5\xc2rn\x8\xf7\x31\x85T\xa2\x96\xc9\xc9\x44\xbb\x1f\xeb\xd6y+_\x99g[?I\x4\xb8" "p\xf3%\x1fk\x86\xfc>\xdaRL\xda\x9e>\x11\x4\xf4`;e\x5\xaa\n[\x14\x8f\xd5?T\xf6\xc4" "F\x8ahf\xepP\xc8\xbe\xeb\x63\xb/(\x98@m\xc2\xa3\x16\x9a\xc1y\x9\xa5\xbb\x9\xe4mF" "\xf4\xeb\xc1L\xed\xd8\xd7\xe1?_\x7!\xb3\x96\x37\xde\xf0h\x89\xcd\xdd\xd2Rc\x8f\xe8" "\x89\x99\xc3\xd7\x1_\xeb\x37\xdf\x98\xc5|\x17O\xd4m\xa3k\xea\xc0\xd8\x7\xba\x9c\x39" "\xb2\xb9\xf\xfb\x91\xc8\xa8\x63\x66\x37\x8e\xc\xed\xda\x99\xa9\x82\x1e\xb4\x61\x17" "\x9d\xd3w\x90\x43\x98\x13\xf1\x31\xe0\xac\xf0\xa7\xee\xd5\xa6}\x88\xe4\x35\x12\x93" "\xdc\xd4M e\xf0\x19\\S\xd7\x7V\xaf\xd5L\rV$\x1\xa0\xf2q\x7\x8f;\xe7\x34Y\nW\xad\x46" "m\xde\xf0R.%\xf0\xf8^\x9\n\n.N7Lm\x10X\x8e\xbc\x32\xc9\x90\xe\xeb\xb6\x2\xd5\x44" "\xb0y@6\x12\x0\x8a\x39\x33\x5\xc8\xb0\xc5\x36\xcb\x8\xa3\x9c$`5\xbaV\xd9\xcb\x35" "\xa2\xd6u\xfd\x33\x98\x9c\x13\x3\x43\xc2\xa1\xaf\xd1\x9e\xf6\xf7u\xb8\x10z>\xb3\x1b" "\x9an\xd3\x85\xa4\x86\x84\n\xb\xd0\x15-\xa1\xa6NF\xcfG\x1e\xd8\x11'\x86>\xb7\x1a" "!\x8\x32\x97>\xa6\xfa\x32\x65\x99\x90\xe9?\x7H\xdaz\xd2wO\x81\x63\xfa\xed\xf1S\xf1" "v\r\xc9\xeaW\xe\xc0\x34zD\xf6\xf8\xee\x44\xa9J\xc\xd0\x94\x8f\x34\x1a\xe2\x33\xf3" "\x19|\xab%\xb\xd9o\xa7`\x92\xe8x`\xb5\x18\xb8Qj$\xa3\xe2zI\xce\x8c\xe9\x36\xd5\x91" "S\xe_0\x94`\n\x19\xe9\xebq\xad+\x14\x8e\\\x0\x95\x96\x97w\xf4\x63\x1\xf5\xce\xd7" "\xb3\xba\xb5\x96\x65\x94?\xec\xa8\xb8\xd5~\x15\xe3\x39h%#t\xdd^@}I\xf2,:\x14\x84" "^s\x98\xaa\xa2\x1fs\xef\x80x\xd7,\x94\xf2\x91\xda'\xbd\x8a(\xe8\x83\xe1r\xf8&\x80" "|\xb4}\xa3#=\r\xef\xe\xfb\xf9\xf1\xa0\x7\xe3U\x8fo\xfcR\x1d\x66\x9a\xb8\x45VX\x4" "e}\xa8\x31S\xd6:\xd0\xed\xb4\x43\xc$\"\x91\xf\x91\x14[\xa3\xd6\x92\xbe\xac\xd4\x46" "\xae\xf8\x14 U\xfa\xb1\x36V\xba\x9b\x33I\x1b\xd1)>\x16\xbc\xbd\xdb\x62HJ\x99\x92" "\xdf\x98n\x89,X\x93\x1a\xd5X>\x1a\xc3\x80u\xf8o\xeb%\xc1\xac\xb3\x94\xbd\x1c\xbd" "\x8f-{8\xc5\xa9\xd8\x82K\xd0\x81\xeesW\xf7\xcd'\xad\xa7\xea@2\xee\x1d;\xee\x65\x91" "\"\x11{\x87\x4\x66\xfb\xc7\xa1\xe5\xc%\xffP\x6\x8d\xb3N\xce\xa6\xf1\xef\xa1\x9^e" "\x12\x42\x18\xaf\x0\x44m\xa1\xb9\x8f\xcbo\x9a\x32IM\x7f\x13\x12\xeb\xef\x41\x32x" "\xbe*\xcbLp\x15p\xd9V1h\xf0\xc9i\xba&\xb7\xfa\r\x34\x86*\xa4\xa0\xa0\xf2\x1fk\xdd" ";\x98\x95\xc5\x9f\xfd(\x95\xde\xd8\x1f\xc5\xa1\x33\xdc\xd2\xdb\x30\xfe\xd8i#\x8f" "\x1\x9a\xc\xc4O5\xc6N\xf2\xd8\x42\x85\x3gv\xd6P\x93\xeal\x82\xa8W}z\xb2\xc8\x96l" "(\xb\x6\xd5\xf0\x66\x5Mlkd\x83\x33\xf5\xcf/'\x1bjK2\xb3I\x1b}N\x7\x94\xc2t\xf8\x9e" "M\x91\x91\x34\x1c\x85\xc7\x8f\xa7yq\x8a\xd5\xdc\xe5\xe3\r\x44H\xd3}%\xc7\xc4\xc1" "w\x9e\xeN\x16\x9b\x8al\x9a\xe4TJ1'\x1f\xc6&\x91\xc7\x9b)\x8f\x31\xc4\xc4}\xc\xfd" "hhq\xf0\xc3\x9f\xec\xb\xfa'Dy\xf\x90[X\xd2_\xbf\xb1\xdc\x98\xf\x11\x85\x17\xc2\x19" "W\xc9\x8cMnYk\x9b\xc2\x46\xfd\x9a\x96\x1e:\xb2\xd3\xf4\xd7\x37\x9\x92\x93Q\xee\x13" "\xf3\x64\x8d\xc\xac\x93_\xf9\x8b_#\xff\x86:\xefM\xb9$\n(\xad\x1\xa0\xbe,7\xa7\xe7" "\xe\x34\xc\x91\x14\xb2,\xe7GU\x96\xa1\x32\x3\x87y\xd9%\xf9\x19\xe9\x30\xf4\xa8\xb8" "\xa2\xf7_\x6\x1d\x5\n\x92\x18YM\xf9\x9e\x8fz\xd8\x85\x46Y<\x94Ir\x88OllI\x7f_\xff" "\x1f\xe0\x9#\xcd\xf5\xd1\xe3\xb9\xa2\xcc\xce\x3\xe8\x15s\xe0\xb6\xf8\x11/Y\xa9\x12" ")\xf2\xf2\x1b\\&i\x7f\xc4\xc6.\xdc\xe9\x35\x65\xeV\xb1\xaf\xc7u\x7~\x8c\xbe\xb1\xdf" "\x1b\x1b\xe5\xd1\x38\x8e\x33\x12\xabG\x1cH\xf8\x42\xb5\xb8%%\xd0\x39s\xba^\xbd\xa3" "\xf1\x37y\xa6\xc1\x9d\xda\xcb\xc8-_AVJ\xfc*\xae\x90\xde\x85(\x1bt\xf8\xf2\x86\xe8" "\xf`j\x9e\n\xdd\x5\xbf\x90[\x9a\x3\xffN!L\xb4\"\xed\xc\x8c]\xa7\x65\xcfpWtbQM\r>" "z\xfb\xc5\xa0>\xc5\x35\xd5\x42\xd3\x8d~\x9e\xe6\x9g\xaa\xd3\x8e\xcf\x18\x94\x44`" "_7w\xac\xbc\xbe\xce\xf6\x19}o_0W\x8b\xd5\x89~\xf2*|V/T@z\xb1\x0S}\x12\xb3r\xecy\xbe" "\x1b\xe6\x15\xbc\x1c\x89&> \x8a\\\x16\x96\r)5\x87\xac\xbb\xd9\xa0\xd4\x95\xfe\xa8" "\x14\x8b\xe7\x43q\xc1\x39\xeb\x1a\xf1*\xa1\xcd\xb9\xb6\xfb\x92\xb6trx\xf4\xaf]\xf4" "\xe2/\x9fq\xee\xb3\xa5Irg\xc4\xf9xB\xa4\x91\xe5\x66\x8e_0y\x8\x13\xadK\xed\x38\xca" "\xfa\xa4Lr]#\x9b\xf2\xc6\xf\x83\xec\xde\xe4\xabj\xed\xd7G\x1b\xa4\x99t\xae\x3\x16" "F\xc6\x37\xd5\x43\x66\xae\xa0\x87\r@{Y\xf1\x9e\xa2\x81\xf2\x12\x35\x1f\xb4.m\x98" "\xb7\xa1\x36\xdb\x8a\xd9\xf3\x5Or\xed\xc\xa0\x45\x1e\xfb\xd1N3\x8\x94\x0T\xfd\xfe" "\xc9\xaa\x8\xef\xe9U\xcf\xaa\x42\x16\xd8.\xc6vt2\xc1Q^\xbaP\xe7\x30\xffX\x1e\xc1" ":\xfd\xd9\xfb\x9bI\x15\x7f\x95\xae|\xad:\xf3~]\x1\xc3\x17\x7\n\x5\x66J4\x9a\xe1r" "\xb2\xd3\xc4\x98\xab\xbc\x82\x1b}\xad\x91\xfa\x8cG\xe3\xd2\xc2\xba\xb3\x1d,&I01!" "\x84\xc\xe=\xf0\xee\x1\xf0\x1|\x88\xe5\xc9Y\x8b\xca\xa0\x98\x91\xab\x36Z\xf9\x6\xca" "\xec\x82\x9c\xa6\xd2j\xe4\x1cM\x84\xc7\xb6Hz#/ `\x3\"\xc1hF\x7\xdd\\P\xeaO\x94o\xd0" "\n\xae!\r\x1fM\xea^\xd7\x9\xfd\xeaz\xe7.\xaa\xfd\x14\x7\xf0\x8d\x8b\xbe_\xaa.\xc2" "e\xf5\xff\xeZ\x1d\xcK/ H\xe9_\xffjX\x1b\xd0{-\x81\xc4Uj\x15\xf\xf8\xf8\xbN\x96\xa3" "\xbb\xb4$\x12\xeb\x37\xd1\xc9\x1b\xca\xc4\xfcs\xbd!\xdf\x9e\xf4k\xc2\xd0\xcat\x3" "'b\xfb\xef\xfVY(\xe7\xa0\x8bh\x1b\x86\xcew\\\x9c\x87\xd7\x98S\xa0Y\xff\xb2\xb2r\xee" "\xab\x39\x8b\n\xc4\xe0\xb8\x92\x1f\x89\xab\xf2\x41)A\x8c\xaf\x9f\xed\x0\x45\xd6(" "\xf8t\xd7I\xbe\xd0\x9f]y\xf1\xed\xc8T\x7\xcc\x1a\xb6{1\x3\xfb\xd2\xc4?\xd0\x66\xf2" "\r\x91\xb5\xe9\xed\x86\xe9\xe3!\xe0\x8a\xd1\x13\x5\xff\x83G\xaa\x9\xeb\x31\x80\xf9" "Qj\xbe\r\xf5X\xa5hVD\xf4T_s\x89(\x8e\x5?41\xd0\x8a\xfe\xbd\x84\xb0\x5\xb5\x9b\x18" "\xe7\x43\xed;\x1c\xa4\x43\x88\x1f\xb9\xbd)\x9c\xa0=\xa3v\xe4\xe8\x1f\xe2\xc3\x91" "\xfdH\x6\xc3\x9a *_)\x85\x91\xa9@F\xa0'\xe3\xd6\xd3\x1b\xfb\xfa@\x6=\xd5\xd2\xd8" "\x98\xd7\xd0*\xa1\x45\x63-8\xb\x33s]-\xf5\xf\x45\xc\x8\x1d!z\x9b.\xd6\xf\x81\xec" "2\xd6\xf1\x9f\x9d\x64\x1\xf9\xb6-\xa0\xad\xc6\xe7\x5\x85\x89P\x1c\xd3\x13\xe9\xcf" "X\xb5\xdc\x34\xe1 G\xe2P\x12\xa8\xac\x95\x85\x2\x62\x81\xbe\x33\x44\xdb\xce\xaa\xc5" "\x98\x33\xe5\x31M\xc4\xd4\x45,\xb\xbc%\xc6\x65\x8c\x35K\x1c\x4\x16I\xccq\xd3\xe2" "\xacw@n\x19\x3\xed\xd2\x1a\x91\xd2\\*e\xb1\xb2\x16g\xba,\xa4:\x11\xec\x43\xf3\\L" "c\xae\xc3\x97\x91\x1c#h&\xbb\x7f\xb9\xab\x86\xfa\xdf\x9c\x9e\x18t\x7\xca\xed\xa7" "\x82\x2\xb0\x97\x95\xed\xf2m\xad\xdfWH\x0\xc3\x92\xbeQt\x8f\xc2\xbdg\xe4l`\xe8;\xec" "^\xf8T%K6X\xe2T[\x1b\x62\xa5\xda\xc0\x8e\xa0\xaa\x8a\xe3\xc4\xc1\xcb\xb1\x89\x64" "\xba\xf7\xa0?\x93\xeb\xeb\x8a\x61j\xdc\xe5\xc5\xcf\xfb^\x1d\xa8\xa1L\xe1\xbb\x43" "\xf7\x1c\xb8\x98\xda\x1\xb2t1q\xe4\x99N\x7f\xf0,\xa8\xef\xdd\xffH]\xd1\xfd\xab?\x9f" "\x1f\x38\x87\x3\x33:?\xee\xb7\x99\xc4\x1a\xffw\x0\x0\x1f\xc8\x9e\xc4\xb4\xba\x45" "\xa2\x98\xbc\xf8\x12\x12vI\x8c\x9f;\x19:\x16\x10\x94'\xdc\xd7\xa1Z\xf2S}\xa6\x15" "lE}\xe6\x18!S\xf8\xd0\x91\xa8\x94\x65Mn\xe3#\x82\x81\xe\xb8\xf0^\n\xb0\x99q\x3 \xd3" "\x19\xad_\x97\x9aJ\xb8M\xef^\xf1\xea\xf1RK\x90#\xbbI+\xbc\x89\x5\xc5\r\xdf\x45\xe6" "\xd1v\xed\xb2\xc8\xc7\x9bMN\xc\x84\x83\x98\xcd`\xdd\xa8\xf3\x46\xe1\"\x31\xbf\x95" "\x7f\xee\xdd\xbe\xd7\xa4\xbd\x91\xac\x45s$\xfd\xb2\x86\x66\x86\xfb\x18@U\xe7\xf\xf5" "\x87\x1e\xdd\x1\xcaO\xc8\x45{\x87\xbdw\xe2\\:x\xe6V~\x90Z\xc3U\xd9\xa4\xe\xd2Y\x84" "\xb2p&\xb7\xca\xd4\x30\xc\x88=\xee\xc8\xd4\x9@^;\xb5 A\xd5\x1aU\xee\x10\xfV\x5\x37" "O\xb0\xa5\x35\xe6\xba\xff\xb9\x86.@\x9a\x43q\xae\x2\x12\x1n\x8bi\xe4\x8a*\xdd\xb7" "\xa3&f\x1\x86\xa3\" " "h\xa9:A\x17\xc4;2Yt\xd4\xf+U-\xfd\xe5\r\xb7g\xcc\xa8\x9e\xa3(\xdapG\xbeL\x90-\x1e" ".vb\xb5\xba\x30(\xc7\x8a\x95\xe3\x15\x64\x1d\x89\xb0\x35R%\xdf\xc3\xac\xc6\x9f \xca" "9x\x96\x15\xcf|\xa7\xe\x30\x9b\xddVn)\xfer\xba;L\x1e\xab\xc1\x37T\x5\x8e}K\xc9\xe4" "\x8\xf8\xec\xec\xb5\xe1\xceU1\xa4g\x80y\x9f)\xed\xd0=oV|w\xc1\x93\x13\xe2\x90J\x8f" "\xc0\xd8\xcc)\xf8\xbc\xb6\x9dNq}\xf7\xf5\xf2-\x92\x1e\xbb\x43zl\x1d\xe1\x2\xeb,\xf2" ">0\xe9H%\xd2;\x1d\xc0\x62\xcf\xd3_W\xc0\xaf\x1f\xd0\xe4\xdd\x11J\x83\"\x8fS6u\x9e" "@\xa4Qh\xb\xe6\xe5\xd6\x9e\xce\xa3\r\xb8\xb6\xbf\xa1*\x94\xb8\xe5?\x1d\xfb\xc2\xe5" "\x98:\xe3\xb2\x11\xb3\xd1\xe9\xd7\xae\xec'\xee\xf3\x98\x66MNB\x9fP[\xc2\x1\n\x1d" "\xa8L\xea\x64\xb9G\xda\xdf\x34\x94\x61\x97\x33=\x1a\xf4\x39t\xac\x64\xb\xa0|\xba" "/bp\xc1\x1b'\xb7\xbc\x9d\xf4\x1dNv\xcd\xcf\xf5\xe5\xf3\xedN\xbc\xfW=1\xfe\xe2\x89" "\x5\xb1\xbc\xf\x61p8p%+\xda\xba\x64\x4\xd5\x9J\xedh\xfaL\xa0k \xacya\x99\xce*\xc4.\xa2\xe8\xcf\xe7" "\xae\x6\x19\xb1\xde{<\xc9{\xb5\xb3@s\xe1\xa4y\xaf\xc4\xa0\x92&\xed\xb4\xc7\xfe\xa4" "\x90\xee\\\x83&\xb6\x34\xbb\x93\xf\xfc\x95Q\xba%\xcf<\x88\xa6\x8d\x8a\xa8JY\xf2S" "$W\x84\x46/\xe4J\xe\xb3\"R\xbb\x38Q\xb9]A<\xb5\xbfX\x1a\xfd##y\x16\x32\xc7\x65\xc0" "\xa3y\xd1\x84\x9c;\xedKf\xe1N\x9\x1b\x1fi\xd3\xf\xea\xd1\xc3\x95\xc1\x95Y\xb?<6\xe7" "\xde]=\x1b\xe1\xc7\xa6MI:\x1b\xde\xe9*\xb3\xe3M8\x9d\x8f\xc3\xbf\xbcv\xe4\xab\x62" "<\xa7\xb7\xfe\x1f\xc9\x5\xbc\x8dq\xeb\x1c\xe6\x63\x9a\x61L\xf\xcc\x35|\xcc\x1b\x61" "M\xbc\xf5qr\xe8\xf5R\xd8\x43\x9\x7fZD\x90\xeTu<\x1a\x90\x5\x32':>\xc4=f+P\x11\xce" "A\xe7\x30\x35N\xec\\,\xc2!\x9f}X\xac\xde\xa6\xab\xa7Hu--v\x85t\x95\xf5)b\xe5\xf8" "\xc1\x65\xcd\r%M]\x84\x37\xb5\xd5\xbf\xe6\xc9[\xc8\x88*O\xd2\xeb\x86_\x9a\xb5L\xc3" "\xf1J@u\xd0\x7f\xd4\xb3\xaf\x98\x17\x1f\xb7>\xc2\xd7\x64z$n\x16\x1b\x98t\rtCq\xf3" "flz}\x12\xf6\xd7\xd1Vm\x11%\x42$U\x82\x44\xc8\xc\xf1\xfa\xc5\x1\x96L\x97\x62\x61" "\xdb\x85\xf6\xf7St\x1b\x8bZ&\x8aV\xa5\xc5\x8e!B\x1b\xa9\x84\xda\xda\x83\x8c\xdd\xd8" "l\nr\r\x1d\xe4\xb0\x8f\xb9\xf4\x9e\x7<\xc5\xc1\x92\xb9\x9o\xc4\x30\r\x3\x8c\x1f\x32" "\n\x3\x95\xfc\x11\x37\xd5\x8c\x82\x62\xbc\x41\x12\x9b\x14-\x87\xf4\x35\xc5\x88\xee" "\x1cx\x2\xe7\x42[9\x91\xf8Ox\x80/\xb1\xbfg\x94\xeb!\xe\x41\xcdMiQ\xe1\x45\x7f\xb3" "\x1a\x85\xbc\xda\x84\xf7\xd6\xde\x8cWb\x87+\x9\xe\xcf\xech\x1d\xe4\xe7\xc1{\xa1\xd3" "\xc0\xc7\xcf~\xac\x95\xe9\xc2,X\x7f\xf7\xab'\n\x8e\x85\xdd\xb4\x82\xef\xec\xd6\x85" "\x9dn\xcVe\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" "000000000000000000000000000000000000000000000000000\r000000000000000000000000000" "0000000000000000000000000000000000000\r00000000000000000000000000000000000000000" "00000000000000000000000\r0000000000000000000000000000000000000000000000000000000" "000000000\r0000000000000000000000000000000000000000000000000000000000000000\r000" "0000000000000000000000000000000000000000000000000000000000000\r00000000000000000" "00000000000000000000000000000000000000000000000\r0000000000000000000000000000000" "000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n019003l_afm_len = 31763; char* n019003l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusSanL-Regu\n" "FullName Nimbus Sans L Regular\nFamilyName Nimbus Sans L\nWeight Regular\nItalic" "Angle 0.0\nIsFixedPitch false\nUnderlinePosition -151\nUnderlineThickness 50\nVe" "rsion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Development\nEncod" "ingScheme AdobeStandardEncoding\nFontBBox -174 -285 1001 953\nCapHeight 729\nXHe" "ight 524\nDescender -218\nAscender 729\nStartCharMetrics 316\nC 32 ; WX 278 ; N " "space ; B 191 0 191 0 ;\nC 33 ; WX 278 ; N exclam ; B 124 0 208 729 ;\nC 34 ; WX" " 355 ; N quotedbl ; B 52 464 305 709 ;\nC 35 ; WX 556 ; N numbersign ; B 14 -20 " "542 697 ;\nC 36 ; WX 556 ; N dollar ; B 26 -126 518 770 ;\nC 37 ; WX 889 ; N per" "cent ; B 29 -20 859 709 ;\nC 38 ; WX 667 ; N ampersand ; B 52 -23 637 709 ;\nC 3" "9 ; WX 221 ; N quoteright ; B 64 497 157 729 ;\nC 40 ; WX 333 ; N parenleft ; B " "73 -212 291 729 ;\nC 41 ; WX 333 ; N parenright ; B 38 -212 256 729 ;\nC 42 ; WX" " 389 ; N asterisk ; B 40 441 343 729 ;\nC 43 ; WX 584 ; N plus ; B 50 -10 534 47" "4 ;\nC 44 ; WX 278 ; N comma ; B 87 -147 192 104 ;\nC 45 ; WX 333 ; N hyphen ; B" " 46 240 284 312 ;\nC 46 ; WX 278 ; N period ; B 87 0 191 104 ;\nC 47 ; WX 278 ; " "N slash ; B -8 -20 284 729 ;\nC 48 ; WX 556 ; N zero ; B 43 -23 507 709 ;\nC 49 " "; WX 556 ; N one ; B 102 0 347 709 ;\nC 50 ; WX 556 ; N two ; B 34 0 511 709 ;\n" "C 51 ; WX 556 ; N three ; B 32 -23 506 709 ;\nC 52 ; WX 556 ; N four ; B 28 0 52" "0 709 ;\nC 53 ; WX 556 ; N five ; B 35 -23 513 709 ;\nC 54 ; WX 556 ; N six ; B " "43 -23 513 709 ;\nC 55 ; WX 556 ; N seven ; B 46 0 520 709 ;\nC 56 ; WX 556 ; N " "eight ; B 37 -23 513 709 ;\nC 57 ; WX 556 ; N nine ; B 38 -23 509 709 ;\nC 58 ; " "WX 278 ; N colon ; B 110 0 214 524 ;\nC 59 ; WX 278 ; N semicolon ; B 110 -147 2" "15 524 ;\nC 60 ; WX 584 ; N less ; B 45 -9 534 474 ;\nC 61 ; WX 584 ; N equal ; " "B 50 111 534 353 ;\nC 62 ; WX 584 ; N greater ; B 50 -9 539 474 ;\nC 63 ; WX 556" " ; N question ; B 77 0 509 741 ;\nC 64 ; WX 1015 ; N at ; B 34 -142 951 741 ;\nC" " 65 ; WX 667 ; N A ; B 17 0 653 729 ;\nC 66 ; WX 667 ; N B ; B 79 0 623 729 ;\nC" " 67 ; WX 722 ; N C ; B 48 -23 677 741 ;\nC 68 ; WX 722 ; N D ; B 89 0 667 729 ;\n" "C 69 ; WX 667 ; N E ; B 90 0 613 729 ;\nC 70 ; WX 611 ; N F ; B 90 0 579 729 ;\n" "C 71 ; WX 778 ; N G ; B 44 -23 709 741 ;\nC 72 ; WX 722 ; N H ; B 83 0 644 729 ;" "\nC 73 ; WX 278 ; N I ; B 100 0 194 729 ;\nC 74 ; WX 500 ; N J ; B 17 -23 426 72" "9 ;\nC 75 ; WX 667 ; N K ; B 79 0 658 729 ;\nC 76 ; WX 556 ; N L ; B 80 0 533 72" "9 ;\nC 77 ; WX 833 ; N M ; B 75 0 761 729 ;\nC 78 ; WX 722 ; N N ; B 76 0 646 72" "9 ;\nC 79 ; WX 778 ; N O ; B 38 -23 742 741 ;\nC 80 ; WX 667 ; N P ; B 91 0 617 " "729 ;\nC 81 ; WX 778 ; N Q ; B 38 -59 742 741 ;\nC 82 ; WX 722 ; N R ; B 93 0 67" "9 729 ;\nC 83 ; WX 667 ; N S ; B 48 -23 621 741 ;\nC 84 ; WX 611 ; N T ; B 21 0 " "593 729 ;\nC 85 ; WX 722 ; N U ; B 85 -23 645 729 ;\nC 86 ; WX 667 ; N V ; B 30 " "0 645 729 ;\nC 87 ; WX 944 ; N W ; B 22 0 929 729 ;\nC 88 ; WX 667 ; N X ; B 22 " "0 649 729 ;\nC 89 ; WX 667 ; N Y ; B 13 0 661 729 ;\nC 90 ; WX 611 ; N Z ; B 28 " "0 583 729 ;\nC 91 ; WX 278 ; N bracketleft ; B 64 -212 250 729 ;\nC 92 ; WX 278 " "; N backslash ; B -8 -20 284 729 ;\nC 93 ; WX 278 ; N bracketright ; B 23 -212 2" "09 729 ;\nC 94 ; WX 469 ; N asciicircum ; B 44 329 425 709 ;\nC 95 ; WX 556 ; N " "underscore ; B -22 -176 578 -126 ;\nC 96 ; WX 222 ; N quoteleft ; B 65 477 158 7" "09 ;\nC 97 ; WX 556 ; N a ; B 42 -23 535 539 ;\nC 98 ; WX 556 ; N b ; B 54 -23 5" "23 729 ;\nC 99 ; WX 500 ; N c ; B 31 -23 477 539 ;\nC 100 ; WX 556 ; N d ; B 26 " "-23 495 729 ;\nC 101 ; WX 556 ; N e ; B 40 -23 513 539 ;\nC 102 ; WX 278 ; N f ;" " B 18 0 258 732 ;\nC 103 ; WX 556 ; N g ; B 29 -218 489 539 ;\nC 104 ; WX 556 ; " "N h ; B 70 0 486 729 ;\nC 105 ; WX 222 ; N i ; B 66 0 150 729 ;\nC 106 ; WX 222 " "; N j ; B -18 -218 153 729 ;\nC 107 ; WX 500 ; N k ; B 58 0 502 729 ;\nC 108 ; W" "X 222 ; N l ; B 68 0 152 729 ;\nC 109 ; WX 833 ; N m ; B 70 0 762 539 ;\nC 110 ;" " WX 556 ; N n ; B 70 0 487 539 ;\nC 111 ; WX 556 ; N o ; B 36 -23 510 539 ;\nC 1" "12 ; WX 556 ; N p ; B 54 -218 523 539 ;\nC 113 ; WX 556 ; N q ; B 26 -218 495 53" "9 ;\nC 114 ; WX 333 ; N r ; B 69 0 321 539 ;\nC 115 ; WX 500 ; N s ; B 34 -23 45" "9 539 ;\nC 116 ; WX 278 ; N t ; B 14 -23 254 668 ;\nC 117 ; WX 556 ; N u ; B 65 " "-23 482 524 ;\nC 118 ; WX 500 ; N v ; B 10 0 486 524 ;\nC 119 ; WX 722 ; N w ; B" " 6 0 708 524 ;\nC 120 ; WX 500 ; N x ; B 17 0 473 524 ;\nC 121 ; WX 500 ; N y ; " "B 20 -218 478 524 ;\nC 122 ; WX 500 ; N z ; B 31 0 457 524 ;\nC 123 ; WX 334 ; N" " braceleft ; B 43 -212 276 729 ;\nC 124 ; WX 260 ; N bar ; B 100 -212 160 729 ;\n" "C 125 ; WX 334 ; N braceright ; B 29 -212 262 729 ;\nC 126 ; WX 584 ; N asciitil" "de ; B 75 268 508 438 ;\nC 161 ; WX 333 ; N exclamdown ; B 121 -205 205 524 ;\nC" " 162 ; WX 556 ; N cent ; B 52 -120 510 628 ;\nC 163 ; WX 556 ; N sterling ; B 26" " -23 535 729 ;\nC 164 ; WX 167 ; N fraction ; B -174 -20 336 709 ;\nC 165 ; WX 5" "56 ; N yen ; B 11 0 545 709 ;\nC 166 ; WX 556 ; N florin ; B 11 -212 542 738 ;\n" "C 167 ; WX 556 ; N section ; B 43 -213 506 729 ;\nC 168 ; WX 556 ; N currency ; " "B 67 133 489 551 ;\nC 169 ; WX 191 ; N quotesingle ; B 48 464 142 709 ;\nC 170 ;" " WX 333 ; N quotedblleft ; B 48 477 299 709 ;\nC 171 ; WX 556 ; N guillemotleft " "; B 98 106 455 438 ;\nC 172 ; WX 333 ; N guilsinglleft ; B 91 106 243 438 ;\nC 1" "73 ; WX 333 ; N guilsinglright ; B 85 106 239 438 ;\nC 174 ; WX 500 ; N fi ; B 1" "2 0 436 732 ;\nC 175 ; WX 500 ; N fl ; B 17 0 430 732 ;\nC 177 ; WX 556 ; N enda" "sh ; B -5 240 561 312 ;\nC 178 ; WX 556 ; N dagger ; B 38 -177 513 709 ;\nC 179 " "; WX 556 ; N daggerdbl ; B 38 -177 513 709 ;\nC 180 ; WX 278 ; N periodcentered " "; B 87 302 211 427 ;\nC 182 ; WX 537 ; N paragraph ; B 48 -177 522 729 ;\nC 183 " "; WX 350 ; N bullet ; B 50 220 300 470 ;\nC 184 ; WX 222 ; N quotesinglbase ; B " "64 -128 158 104 ;\nC 185 ; WX 333 ; N quotedblbase ; B 47 -128 300 104 ;\nC 186 " "; WX 333 ; N quotedblright ; B 49 477 302 709 ;\nC 187 ; WX 556 ; N guillemotrig" "ht ; B 98 106 451 438 ;\nC 188 ; WX 1000 ; N ellipsis ; B 115 0 885 104 ;\nC 189" " ; WX 1000 ; N perthousand ; B 9 -22 993 738 ;\nC 191 ; WX 611 ; N questiondown " "; B 95 -217 528 524 ;\nC 193 ; WX 333 ; N grave ; B 22 592 231 740 ;\nC 194 ; WX" " 333 ; N acute ; B 92 592 301 740 ;\nC 195 ; WX 333 ; N circumflex ; B 20 591 30" "7 741 ;\nC 196 ; WX 333 ; N tilde ; B 5 613 319 717 ;\nC 197 ; WX 333 ; N macron" " ; B 28 631 302 701 ;\nC 198 ; WX 333 ; N breve ; B 15 597 316 732 ;\nC 199 ; WX" " 333 ; N dotaccent ; B 115 612 219 716 ;\nC 200 ; WX 333 ; N dieresis ; B 30 612" " 296 715 ;\nC 202 ; WX 333 ; N ring ; B 79 579 255 754 ;\nC 203 ; WX 333 ; N ced" "illa ; B 39 -214 287 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B -35 590 348 740 ;\n" "C 206 ; WX 333 ; N ogonek ; B 57 -205 265 0 ;\nC 207 ; WX 333 ; N caron ; B 19 5" "91 306 741 ;\nC 208 ; WX 1000 ; N emdash ; B -9 240 1001 312 ;\nC 225 ; WX 1000 " "; N AE ; B 11 0 950 729 ;\nC 227 ; WX 370 ; N ordfeminine ; B 37 303 333 742 ;\n" "C 232 ; WX 556 ; N Lslash ; B 0 0 552 729 ;\nC 233 ; WX 778 ; N Oslash ; B 30 -2" "3 744 755 ;\nC 234 ; WX 1000 ; N OE ; B 43 -20 959 741 ;\nC 235 ; WX 365 ; N ord" "masculine ; B 40 303 324 742 ;\nC 241 ; WX 889 ; N ae ; B 34 -23 845 539 ;\nC 24" "5 ; WX 278 ; N dotlessi ; B 94 0 178 524 ;\nC 248 ; WX 222 ; N lslash ; B 0 0 21" "2 729 ;\nC 249 ; WX 611 ; N oslash ; B 18 -30 529 539 ;\nC 250 ; WX 944 ; N oe ;" " B 40 -23 899 539 ;\nC 251 ; WX 611 ; N germandbls ; B 126 -20 566 729 ;\nC -1 ;" " WX 722 ; N Udieresis ; B 85 -23 645 914 ;\nC -1 ; WX 722 ; N Uacute ; B 85 -23 " "645 939 ;\nC -1 ; WX 667 ; N Scedilla ; B 45 -214 621 741 ;\nC -1 ; WX 611 ; N T" "caron ; B 21 0 593 940 ;\nC -1 ; WX 667 ; N Scaron ; B 48 -23 621 940 ;\nC -1 ; " "WX 722 ; N Rcaron ; B 93 0 679 940 ;\nC -1 ; WX 722 ; N Racute ; B 93 0 679 939 " ";\nC -1 ; WX 667 ; N Sacute ; B 48 -23 621 939 ;\nC -1 ; WX 778 ; N Otilde ; B 3" "8 -23 742 916 ;\nC -1 ; WX 556 ; N ucircumflex ; B 65 -23 482 741 ;\nC -1 ; WX 7" "78 ; N Ohungarumlaut ; B 38 -23 742 939 ;\nC -1 ; WX 722 ; N Uhungarumlaut ; B 8" "5 -23 645 939 ;\nC -1 ; WX 666 ; N Yacute ; B 13 0 661 939 ;\nC -1 ; WX 722 ; N " "Eth ; B 20 0 667 729 ;\nC -1 ; WX 722 ; N Dcroat ; B 20 0 667 729 ;\nC -1 ; WX 6" "11 ; N Zacute ; B 28 0 583 939 ;\nC -1 ; WX 722 ; N Uring ; B 85 -23 645 953 ;\n" "C -1 ; WX 556 ; N gbreve ; B 29 -218 489 732 ;\nC -1 ; WX 556 ; N eogonek ; B 40" " -204 514 539 ;\nC -1 ; WX 556 ; N edotaccent ; B 40 -23 513 716 ;\nC -1 ; WX 55" "6 ; N ecaron ; B 40 -23 513 741 ;\nC -1 ; WX 722 ; N Ugrave ; B 85 -23 645 939 ;" "\nC -1 ; WX 666 ; N Thorn ; B 91 0 616 729 ;\nC -1 ; WX 556 ; N eacute ; B 40 -2" "3 513 740 ;\nC -1 ; WX 556 ; N edieresis ; B 40 -23 513 715 ;\nC -1 ; WX 635 ; N" " dcaron ; B 26 -23 648 729 ;\nC -1 ; WX 500 ; N ccedilla ; B 31 -214 477 539 ;\n" "C -1 ; WX 500 ; N ccaron ; B 31 -23 477 741 ;\nC -1 ; WX 500 ; N cacute ; B 31 -" "23 477 740 ;\nC -1 ; WX 556 ; N aogonek ; B 43 -205 596 539 ;\nC -1 ; WX 556 ; N" " aring ; B 42 -23 535 754 ;\nC -1 ; WX 556 ; N atilde ; B 42 -23 535 717 ;\nC -1" " ; WX 556 ; N abreve ; B 42 -23 535 732 ;\nC -1 ; WX 556 ; N egrave ; B 40 -23 5" "13 740 ;\nC -1 ; WX 556 ; N agrave ; B 42 -23 535 740 ;\nC -1 ; WX 556 ; N aacut" "e ; B 42 -23 535 740 ;\nC -1 ; WX 556 ; N adieresis ; B 42 -23 535 715 ;\nC -1 ;" " WX 722 ; N Uogonek ; B 85 -205 645 729 ;\nC -1 ; WX 556 ; N ugrave ; B 65 -23 4" "82 740 ;\nC -1 ; WX 556 ; N uacute ; B 65 -23 482 740 ;\nC -1 ; WX 556 ; N udier" "esis ; B 65 -23 482 715 ;\nC -1 ; WX 308 ; N tcaron ; B 14 -23 321 800 ;\nC -1 ;" " WX 500 ; N scommaaccent ; B 34 -285 459 539 ;\nC -1 ; WX 611 ; N Zcaron ; B 28 " "0 583 940 ;\nC -1 ; WX 556 ; N ecircumflex ; B 40 -23 513 741 ;\nC -1 ; WX 722 ;" " N Ucircumflex ; B 85 -23 645 940 ;\nC -1 ; WX 556 ; N acircumflex ; B 42 -23 53" "5 741 ;\nC -1 ; WX 611 ; N Zdotaccent ; B 28 0 583 915 ;\nC -1 ; WX 500 ; N scar" "on ; B 34 -23 459 741 ;\nC -1 ; WX 667 ; N Amacron ; B 17 0 653 900 ;\nC -1 ; WX" " 500 ; N sacute ; B 34 -23 459 740 ;\nC -1 ; WX 611 ; N Tcommaaccent ; B 21 -285" " 593 729 ;\nC -1 ; WX 667 ; N Ydieresis ; B 13 0 661 914 ;\nC -1 ; WX 555 ; N th" "orn ; B 54 -218 522 714 ;\nC -1 ; WX 667 ; N Emacron ; B 90 0 613 900 ;\nC -1 ; " "WX 778 ; N Ograve ; B 38 -23 742 939 ;\nC -1 ; WX 778 ; N Oacute ; B 38 -23 742 " "939 ;\nC -1 ; WX 778 ; N Odieresis ; B 38 -23 742 914 ;\nC -1 ; WX 722 ; N Ntild" "e ; B 76 0 646 916 ;\nC -1 ; WX 722 ; N Ncaron ; B 76 0 646 940 ;\nC -1 ; WX 722" " ; N Nacute ; B 76 0 646 939 ;\nC -1 ; WX 556 ; N Lcaron ; B 80 0 533 729 ;\nC -" "1 ; WX 556 ; N Lacute ; B 70 0 533 939 ;\nC -1 ; WX 278 ; N Idotaccent ; B 92 0 " "196 915 ;\nC -1 ; WX 333 ; N racute ; B 69 0 331 740 ;\nC -1 ; WX 278 ; N Icircu" "mflex ; B -1 0 286 940 ;\nC -1 ; WX 556 ; N ohungarumlaut ; B 36 -23 526 740 ;\n" "C -1 ; WX 556 ; N otilde ; B 36 -23 510 717 ;\nC -1 ; WX 556 ; N Euro ; B 2 -23 " "543 709 ;\nC -1 ; WX 556 ; N ocircumflex ; B 36 -23 510 741 ;\nC -1 ; WX 351 ; N" " onesuperior ; B 61 284 222 709 ;\nC -1 ; WX 351 ; N twosuperior ; B 19 284 326 " "709 ;\nC -1 ; WX 351 ; N threesuperior ; B 16 270 322 709 ;\nC -1 ; WX 278 ; N I" "grave ; B 1 0 210 939 ;\nC -1 ; WX 278 ; N Iacute ; B 71 0 280 939 ;\nC -1 ; WX " "278 ; N Imacron ; B 20 0 274 900 ;\nC -1 ; WX 278 ; N Iogonek ; B 66 -204 234 72" "9 ;\nC -1 ; WX 278 ; N Idieresis ; B 9 0 275 907 ;\nC -1 ; WX 778 ; N Gbreve ; B" " 44 -23 709 931 ;\nC -1 ; WX 722 ; N Umacron ; B 85 -23 645 900 ;\nC -1 ; WX 667" " ; N Kcommaaccent ; B 79 -285 658 729 ;\nC -1 ; WX 556 ; N ograve ; B 36 -23 510" " 740 ;\nC -1 ; WX 667 ; N Scommaaccent ; B 48 -285 621 741 ;\nC -1 ; WX 667 ; N " "Eogonek ; B 90 -205 652 729 ;\nC -1 ; WX 556 ; N oacute ; B 36 -23 510 740 ;\nC " "-1 ; WX 667 ; N Edotaccent ; B 90 0 613 915 ;\nC -1 ; WX 222 ; N iogonek ; B 25 " "-204 190 729 ;\nC -1 ; WX 556 ; N gcommaaccent ; B 29 -218 489 817 ;\nC -1 ; WX " "556 ; N odieresis ; B 36 -23 510 715 ;\nC -1 ; WX 556 ; N ntilde ; B 70 0 487 71" "7 ;\nC -1 ; WX 556 ; N ncaron ; B 70 0 487 741 ;\nC -1 ; WX 667 ; N Ecaron ; B 9" "0 0 613 940 ;\nC -1 ; WX 667 ; N Ecircumflex ; B 90 0 613 940 ;\nC -1 ; WX 500 ;" " N scedilla ; B 34 -214 459 539 ;\nC -1 ; WX 333 ; N rcaron ; B 48 0 335 741 ;\n" "C -1 ; WX 667 ; N Egrave ; B 90 0 613 939 ;\nC -1 ; WX 667 ; N Eacute ; B 90 0 6" "13 939 ;\nC -1 ; WX 778 ; N Gcommaaccent ; B 44 -285 709 741 ;\nC -1 ; WX 722 ; " "N Rcommaaccent ; B 93 -285 679 729 ;\nC -1 ; WX 667 ; N Edieresis ; B 90 0 613 9" "14 ;\nC -1 ; WX 556 ; N nacute ; B 70 0 487 740 ;\nC -1 ; WX 556 ; N uogonek ; B" " 65 -204 521 524 ;\nC -1 ; WX 556 ; N umacron ; B 65 -23 482 701 ;\nC -1 ; WX 72" "2 ; N Dcaron ; B 89 0 667 940 ;\nC -1 ; WX 292 ; N lcaron ; B 68 0 305 729 ;\nC " "-1 ; WX 722 ; N Ccaron ; B 48 -23 677 940 ;\nC -1 ; WX 722 ; N Cacute ; B 48 -23" " 677 939 ;\nC -1 ; WX 722 ; N Ccedilla ; B 48 -214 677 741 ;\nC -1 ; WX 606 ; N " "degree ; B 151 383 454 686 ;\nC -1 ; WX 667 ; N Aogonek ; B 17 -205 692 729 ;\nC" " -1 ; WX 584 ; N minus ; B 40 197 544 267 ;\nC -1 ; WX 584 ; N multiply ; B 95 3" "4 488 427 ;\nC -1 ; WX 584 ; N divide ; B 50 0 534 472 ;\nC -1 ; WX 667 ; N Arin" "g ; B 17 0 653 953 ;\nC -1 ; WX 1000 ; N trademark ; B 63 292 938 729 ;\nC -1 ; " "WX 333 ; N rcommaaccent ; B 65 -285 321 539 ;\nC -1 ; WX 222 ; N lacute ; B 63 0" " 272 939 ;\nC -1 ; WX 556 ; N omacron ; B 36 -23 510 701 ;\nC -1 ; WX 667 ; N At" "ilde ; B 17 0 653 916 ;\nC -1 ; WX 278 ; N icircumflex ; B -7 0 280 741 ;\nC -1 " "; WX 278 ; N igrave ; B -5 0 204 740 ;\nC -1 ; WX 556 ; N ncommaaccent ; B 70 -2" "85 487 539 ;\nC -1 ; WX 222 ; N lcommaaccent ; B 63 -285 163 729 ;\nC -1 ; WX 58" "4 ; N plusminus ; B 50 -11 534 623 ;\nC -1 ; WX 869 ; N onehalf ; B 61 -20 844 7" "09 ;\nC -1 ; WX 869 ; N onequarter ; B 61 -20 849 709 ;\nC -1 ; WX 869 ; N three" "quarters ; B 16 -20 849 709 ;\nC -1 ; WX 278 ; N iacute ; B 65 0 274 740 ;\nC -1" " ; WX 667 ; N Abreve ; B 17 0 653 931 ;\nC -1 ; WX 500 ; N kcommaaccent ; B 58 -" "285 502 729 ;\nC -1 ; WX 778 ; N Omacron ; B 38 -23 742 900 ;\nC -1 ; WX 222 ; N" " imacron ; B -16 0 231 701 ;\nC -1 ; WX 556 ; N emacron ; B 40 -23 513 701 ;\nC " "-1 ; WX 556 ; N amacron ; B 42 -23 535 701 ;\nC -1 ; WX 278 ; N tcommaaccent ; B" " 14 -285 254 668 ;\nC -1 ; WX 500 ; N ydieresis ; B 20 -218 478 715 ;\nC -1 ; WX" " 500 ; N zdotaccent ; B 31 0 457 716 ;\nC -1 ; WX 500 ; N zcaron ; B 31 0 457 74" "1 ;\nC -1 ; WX 500 ; N zacute ; B 31 0 457 740 ;\nC -1 ; WX 500 ; N yacute ; B 2" "0 -218 478 740 ;\nC -1 ; WX 556 ; N uhungarumlaut ; B 65 -23 530 740 ;\nC -1 ; W" "X 556 ; N eth ; B 36 -23 510 743 ;\nC -1 ; WX 556 ; N uring ; B 65 -23 482 754 ;" "\nC -1 ; WX 778 ; N Ocircumflex ; B 38 -23 742 940 ;\nC -1 ; WX 333 ; N commaacc" "ent ; B 116 -285 216 -60 ;\nC -1 ; WX 737 ; N copyright ; B -13 -22 751 742 ;\nC" " -1 ; WX 737 ; N registered ; B -13 -22 751 742 ;\nC -1 ; WX 667 ; N Acircumflex" " ; B 17 0 653 940 ;\nC -1 ; WX 278 ; N idieresis ; B 3 0 269 708 ;\nC -1 ; WX 48" "9 ; N lozenge ; B 16 0 462 744 ;\nC -1 ; WX 711 ; N Delta ; B 10 0 701 729 ;\nC " "-1 ; WX 548 ; N notequal ; B 32 -25 516 486 ;\nC -1 ; WX 542 ; N radical ; B 7 -" "36 512 913 ;\nC -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;\nC -1 ; WX 667 ; N Aac" "ute ; B 17 0 653 939 ;\nC -1 ; WX 584 ; N lessequal ; B 45 -11 534 639 ;\nC -1 ;" " WX 584 ; N greaterequal ; B 45 -11 534 639 ;\nC -1 ; WX 584 ; N logicalnot ; B " "40 86 544 375 ;\nC -1 ; WX 711 ; N summation ; B 17 -97 694 760 ;\nC -1 ; WX 490" " ; N partialdiff ; B 22 -15 458 750 ;\nC -1 ; WX 722 ; N Ncommaaccent ; B 76 -28" "5 646 729 ;\nC -1 ; WX 556 ; N dcroat ; B 26 -23 557 729 ;\nC -1 ; WX 260 ; N br" "okenbar ; B 100 -212 160 729 ;\nC -1 ; WX 556 ; N Lcommaaccent ; B 80 -285 533 7" "29 ;\nC -1 ; WX 667 ; N Adieresis ; B 17 0 653 914 ;\nC -1 ; WX 556 ; N mu ; B 6" "5 -220 544 524 ;\nC -1 ; WX 278 ; N .notdef ; B 191 0 191 0 ;\nEndCharMetrics\nS" "tartKernData\nStartKernPairs 998\nKPX A C -36\nKPX A Ccedilla -36\nKPX A G -35\n" "KPX A O -33\nKPX A Odieresis -33\nKPX A Q -32\nKPX A T -93\nKPX A U -37\nKPX A U" "acute -37\nKPX A Ucircumflex -37\nKPX A Udieresis -37\nKPX A Ugrave -37\nKPX A V" " -75\nKPX A W -51\nKPX A Y -99\nKPX A a -4\nKPX A b 4\nKPX A c -11\nKPX A ccedil" "la -10\nKPX A comma 5\nKPX A d -8\nKPX A e -16\nKPX A g -10\nKPX A guillemotleft" " -44\nKPX A guilsinglleft -40\nKPX A hyphen -3\nKPX A o -13\nKPX A period 5\nKPX" " A q -8\nKPX A quotedblright -56\nKPX A quoteright -65\nKPX A t -16\nKPX A u -12" "\nKPX A v -31\nKPX A w -21\nKPX A y -34\nKPX Aacute C -36\nKPX Aacute G -35\nKPX" " Aacute O -33\nKPX Aacute Q -32\nKPX Aacute T -93\nKPX Aacute U -37\nKPX Aacute " "V -75\nKPX Aacute W -51\nKPX Aacute Y -99\nKPX Aacute a -4\nKPX Aacute b 4\nKPX " "Aacute c -11\nKPX Aacute comma 5\nKPX Aacute d -8\nKPX Aacute e -16\nKPX Aacute " "g -10\nKPX Aacute guillemotleft -44\nKPX Aacute guilsinglleft -40\nKPX Aacute hy" "phen -3\nKPX Aacute o -13\nKPX Aacute period 5\nKPX Aacute q -8\nKPX Aacute quot" "eright -65\nKPX Aacute t -16\nKPX Aacute u -12\nKPX Aacute v -31\nKPX Aacute w -" "21\nKPX Aacute y -34\nKPX Acircumflex C -36\nKPX Acircumflex G -35\nKPX Acircumf" "lex O -33\nKPX Acircumflex Q -32\nKPX Acircumflex T -93\nKPX Acircumflex U -37\n" "KPX Acircumflex V -75\nKPX Acircumflex W -51\nKPX Acircumflex Y -99\nKPX Acircum" "flex comma 5\nKPX Acircumflex period 5\nKPX Adieresis C -36\nKPX Adieresis G -35" "\nKPX Adieresis O -33\nKPX Adieresis Q -32\nKPX Adieresis T -93\nKPX Adieresis U" " -37\nKPX Adieresis V -75\nKPX Adieresis W -51\nKPX Adieresis Y -99\nKPX Adieres" "is a -4\nKPX Adieresis b 4\nKPX Adieresis c -11\nKPX Adieresis comma 5\nKPX Adie" "resis d -8\nKPX Adieresis g -10\nKPX Adieresis guillemotleft -44\nKPX Adieresis " "guilsinglleft -40\nKPX Adieresis hyphen -3\nKPX Adieresis o -13\nKPX Adieresis p" "eriod 5\nKPX Adieresis q -8\nKPX Adieresis quotedblright -56\nKPX Adieresis quot" "eright -65\nKPX Adieresis t -16\nKPX Adieresis u -12\nKPX Adieresis v -31\nKPX A" "dieresis w -21\nKPX Adieresis y -34\nKPX Agrave C -36\nKPX Agrave G -35\nKPX Agr" "ave O -33\nKPX Agrave Q -32\nKPX Agrave T -93\nKPX Agrave U -37\nKPX Agrave V -7" "5\nKPX Agrave W -51\nKPX Agrave Y -99\nKPX Agrave comma 5\nKPX Agrave period 5\n" "KPX Aring C -36\nKPX Aring G -35\nKPX Aring O -33\nKPX Aring Q -32\nKPX Aring T " "-93\nKPX Aring U -37\nKPX Aring V -75\nKPX Aring W -51\nKPX Aring Y -99\nKPX Ari" "ng a -4\nKPX Aring b 4\nKPX Aring c -11\nKPX Aring comma 5\nKPX Aring d -8\nKPX " "Aring e -16\nKPX Aring g -10\nKPX Aring guillemotleft -44\nKPX Aring guilsinglle" "ft -40\nKPX Aring hyphen -3\nKPX Aring o -13\nKPX Aring period 5\nKPX Aring q -8" "\nKPX Aring quotedblright -56\nKPX Aring quoteright -65\nKPX Aring t -16\nKPX Ar" "ing u -12\nKPX Aring v -31\nKPX Aring w -21\nKPX Aring y -34\nKPX Atilde C -36\n" "KPX Atilde G -35\nKPX Atilde O -33\nKPX Atilde Q -32\nKPX Atilde T -93\nKPX Atil" "de U -37\nKPX Atilde V -75\nKPX Atilde W -51\nKPX Atilde Y -99\nKPX Atilde comma" " 5\nKPX Atilde period 5\nKPX B A -21\nKPX B AE -21\nKPX B Aacute -21\nKPX B Acir" "cumflex -21\nKPX B Adieresis -21\nKPX B Aring -21\nKPX B Atilde -21\nKPX B O -7\n" "KPX B OE -5\nKPX B Oacute -7\nKPX B Ocircumflex -7\nKPX B Odieresis -7\nKPX B Og" "rave -7\nKPX B Oslash -1\nKPX B V -41\nKPX B W -25\nKPX B Y -44\nKPX C A -32\nKP" "X C AE -33\nKPX C Aacute -32\nKPX C Adieresis -32\nKPX C Aring -32\nKPX C H -12\n" "KPX C K -10\nKPX C O -8\nKPX C Oacute -8\nKPX C Odieresis -8\nKPX Ccedilla A -31" "\nKPX D A -42\nKPX D Aacute -42\nKPX D Acircumflex -42\nKPX D Adieresis -42\nKPX" " D Agrave -42\nKPX D Aring -42\nKPX D Atilde -42\nKPX D J -5\nKPX D T -45\nKPX D" " V -51\nKPX D W -29\nKPX D X -53\nKPX D Y -63\nKPX F A -69\nKPX F Aacute -69\nKP" "X F Acircumflex -69\nKPX F Adieresis -69\nKPX F Agrave -69\nKPX F Aring -69\nKPX" " F Atilde -69\nKPX F J -51\nKPX F O -22\nKPX F Odieresis -22\nKPX F a -33\nKPX F" " aacute -33\nKPX F adieresis -33\nKPX F ae -29\nKPX F aring -33\nKPX F comma -10" "8\nKPX F e -24\nKPX F eacute -24\nKPX F hyphen -14\nKPX F i -10\nKPX F j -12\nKP" "X F o -21\nKPX F oacute -21\nKPX F odieresis -21\nKPX F oe -23\nKPX F oslash -21" "\nKPX F period -108\nKPX F r -35\nKPX F u -33\nKPX G A -6\nKPX G AE -3\nKPX G Aa" "cute -6\nKPX G Acircumflex -6\nKPX G Adieresis -6\nKPX G Agrave -6\nKPX G Aring " "-6\nKPX G Atilde -6\nKPX G T -44\nKPX G V -50\nKPX G W -28\nKPX G Y -62\nKPX J A" " -32\nKPX J AE -31\nKPX J Adieresis -32\nKPX J Aring -32\nKPX K C -51\nKPX K G -" "51\nKPX K O -48\nKPX K OE -45\nKPX K Oacute -48\nKPX K Odieresis -48\nKPX K S -3" "8\nKPX K T 20\nKPX K a -11\nKPX K adieresis -11\nKPX K ae -7\nKPX K aring -11\nK" "PX K e -32\nKPX K hyphen -47\nKPX K o -29\nKPX K oacute -29\nKPX K odieresis -29" "\nKPX K u -19\nKPX K udieresis -19\nKPX K y -62\nKPX L A 17\nKPX L AE 20\nKPX L " "Aacute 17\nKPX L Adieresis 17\nKPX L Aring 17\nKPX L C -41\nKPX L Ccedilla -37\n" "KPX L G -42\nKPX L O -41\nKPX L Oacute -41\nKPX L Ocircumflex -41\nKPX L Odieres" "is -41\nKPX L Ograve -41\nKPX L Otilde -41\nKPX L S -19\nKPX L T -105\nKPX L U -" "35\nKPX L Udieresis -35\nKPX L V -105\nKPX L W -68\nKPX L Y -121\nKPX L hyphen -" "125\nKPX L quotedblright -141\nKPX L quoteright -149\nKPX L u -7\nKPX L udieresi" "s -7\nKPX L y -56\nKPX N A -9\nKPX N AE -6\nKPX N Aacute -9\nKPX N Adieresis -9\n" "KPX N Aring -9\nKPX N C -3\nKPX N Ccedilla -3\nKPX N G -2\nKPX N O 0\nKPX N Oacu" "te 0\nKPX N Odieresis 0\nKPX N a -5\nKPX N aacute -5\nKPX N adieresis -5\nKPX N " "ae -2\nKPX N aring -5\nKPX N comma -7\nKPX N e 0\nKPX N eacute 0\nKPX N o 2\nKPX" " N oacute 2\nKPX N odieresis 2\nKPX N oslash 4\nKPX N period -7\nKPX N u 0\nKPX " "N udieresis 0\nKPX O A -35\nKPX O AE -39\nKPX O Aacute -35\nKPX O Adieresis -35\n" "KPX O Aring -35\nKPX O T -42\nKPX O V -45\nKPX O W -23\nKPX O X -46\nKPX O Y -59" "\nKPX Oacute A -35\nKPX Oacute T -42\nKPX Oacute V -45\nKPX Oacute W -23\nKPX Oa" "cute Y -59\nKPX Ocircumflex T -42\nKPX Ocircumflex V -45\nKPX Ocircumflex Y -59\n" "KPX Odieresis A -35\nKPX Odieresis T -42\nKPX Odieresis V -45\nKPX Odieresis W -" "23\nKPX Odieresis X -46\nKPX Odieresis Y -59\nKPX Ograve T -42\nKPX Ograve V -45" "\nKPX Ograve Y -59\nKPX Oslash A -33\nKPX Otilde T -42\nKPX Otilde V -45\nKPX Ot" "ilde Y -59\nKPX P A -78\nKPX P AE -86\nKPX P Aacute -78\nKPX P Adieresis -78\nKP" "X P Aring -78\nKPX P J -78\nKPX P a -28\nKPX P aacute -28\nKPX P adieresis -28\n" "KPX P ae -24\nKPX P aring -28\nKPX P comma -135\nKPX P e -31\nKPX P eacute -31\n" "KPX P hyphen -40\nKPX P o -27\nKPX P oacute -27\nKPX P odieresis -27\nKPX P oe -" "28\nKPX P oslash -27\nKPX P period -135\nKPX R C -16\nKPX R Ccedilla -16\nKPX R " "G -15\nKPX R O -13\nKPX R OE -11\nKPX R Oacute -13\nKPX R Odieresis -13\nKPX R T" " -23\nKPX R U -17\nKPX R Udieresis -17\nKPX R V -39\nKPX R W -27\nKPX R Y -43\nK" "PX R a -15\nKPX R aacute -15\nKPX R adieresis -15\nKPX R ae -12\nKPX R aring -15" "\nKPX R e -12\nKPX R eacute -12\nKPX R hyphen -2\nKPX R o -9\nKPX R oacute -9\nK" "PX R odieresis -9\nKPX R oe -11\nKPX R u -9\nKPX R uacute -9\nKPX R udieresis -9" "\nKPX R y -8\nKPX S A -22\nKPX S AE -22\nKPX S Aacute -22\nKPX S Adieresis -22\n" "KPX S Aring -22\nKPX S T -28\nKPX S V -42\nKPX S W -28\nKPX S Y -48\nKPX S t -3\n" "KPX T A -95\nKPX T AE -97\nKPX T Aacute -95\nKPX T Acircumflex -95\nKPX T Adiere" "sis -95\nKPX T Agrave -95\nKPX T Aring -95\nKPX T Atilde -95\nKPX T C -44\nKPX T" " G -45\nKPX T J -100\nKPX T O -42\nKPX T OE -35\nKPX T Oacute -42\nKPX T Ocircum" "flex -42\nKPX T Odieresis -42\nKPX T Ograve -42\nKPX T Oslash -41\nKPX T Otilde " "-42\nKPX T S -24\nKPX T V 12\nKPX T W 16\nKPX T Y 20\nKPX T a -100\nKPX T ae -97" "\nKPX T c -90\nKPX T colon -133\nKPX T comma -100\nKPX T e -95\nKPX T g -89\nKPX" " T guillemotleft -121\nKPX T guilsinglleft -117\nKPX T hyphen -77\nKPX T i -3\nK" "PX T j -5\nKPX T o -92\nKPX T oslash -87\nKPX T period -100\nKPX T r -92\nKPX T " "s -92\nKPX T semicolon -129\nKPX T u -91\nKPX T v -95\nKPX T w -93\nKPX T y -100" "\nKPX U A -36\nKPX U AE -39\nKPX U Aacute -36\nKPX U Acircumflex -36\nKPX U Adie" "resis -36\nKPX U Aring -36\nKPX U Atilde -36\nKPX U comma -27\nKPX U m -4\nKPX U" " n -4\nKPX U p 3\nKPX U period -25\nKPX U r -4\nKPX Uacute A -36\nKPX Uacute com" "ma -27\nKPX Uacute m -4\nKPX Uacute n -4\nKPX Uacute p 3\nKPX Uacute period -25\n" "KPX Uacute r -4\nKPX Ucircumflex A -36\nKPX Udieresis A -36\nKPX Udieresis b 3\n" "KPX Udieresis comma -27\nKPX Udieresis m -4\nKPX Udieresis n -4\nKPX Udieresis p" " 3\nKPX Udieresis period -25\nKPX Udieresis r -4\nKPX Ugrave A -36\nKPX V A -71\n" "KPX V AE -78\nKPX V Aacute -71\nKPX V Acircumflex -71\nKPX V Adieresis -71\nKPX " "V Agrave -71\nKPX V Aring -71\nKPX V Atilde -71\nKPX V C -43\nKPX V G -42\nKPX V" " O -40\nKPX V Oacute -40\nKPX V Ocircumflex -40\nKPX V Odieresis -40\nKPX V Ogra" "ve -40\nKPX V Oslash -33\nKPX V Otilde -40\nKPX V S -35\nKPX V T 15\nKPX V a -59" "\nKPX V ae -55\nKPX V colon -66\nKPX V comma -89\nKPX V e -57\nKPX V g -50\nKPX " "V guillemotleft -83\nKPX V guilsinglleft -80\nKPX V hyphen -38\nKPX V i -5\nKPX " "V o -54\nKPX V oslash -50\nKPX V period -89\nKPX V r -42\nKPX V semicolon -66\nK" "PX V u -41\nKPX V y -20\nKPX W A -50\nKPX W AE -56\nKPX W Aacute -50\nKPX W Acir" "cumflex -50\nKPX W Adieresis -50\nKPX W Agrave -50\nKPX W Aring -50\nKPX W Atild" "e -50\nKPX W C -23\nKPX W G -22\nKPX W O -20\nKPX W Oacute -20\nKPX W Ocircumfle" "x -20\nKPX W Odieresis -20\nKPX W Ograve -20\nKPX W Oslash -13\nKPX W Otilde -20" "\nKPX W S -24\nKPX W T 19\nKPX W a -38\nKPX W ae -34\nKPX W colon -52\nKPX W com" "ma -56\nKPX W e -32\nKPX W g -25\nKPX W guillemotleft -58\nKPX W guilsinglleft -" "54\nKPX W hyphen -13\nKPX W i -1\nKPX W o -29\nKPX W oslash -25\nKPX W period -5" "6\nKPX W r -28\nKPX W semicolon -53\nKPX W u -28\nKPX W y -6\nKPX X C -48\nKPX X" " O -45\nKPX X Odieresis -45\nKPX X Q -44\nKPX X a -15\nKPX X e -36\nKPX X hyphen" " -51\nKPX X o -33\nKPX X u -24\nKPX X y -61\nKPX Y A -96\nKPX Y AE -103\nKPX Y A" "acute -96\nKPX Y Acircumflex -96\nKPX Y Adieresis -96\nKPX Y Agrave -96\nKPX Y A" "ring -96\nKPX Y Atilde -96\nKPX Y C -58\nKPX Y G -58\nKPX Y O -56\nKPX Y Oacute " "-56\nKPX Y Ocircumflex -56\nKPX Y Odieresis -56\nKPX Y Ograve -56\nKPX Y Oslash " "-54\nKPX Y Otilde -56\nKPX Y S -41\nKPX Y T 23\nKPX Y a -88\nKPX Y ae -84\nKPX Y" " colon -87\nKPX Y comma -111\nKPX Y e -89\nKPX Y g -83\nKPX Y guillemotleft -123" "\nKPX Y guilsinglleft -119\nKPX Y hyphen -84\nKPX Y i 3\nKPX Y o -86\nKPX Y osla" "sh -82\nKPX Y p -54\nKPX Y period -111\nKPX Y semicolon -88\nKPX Y u -63\nKPX Y " "v -36\nKPX Z v -33\nKPX Z y -38\nKPX a j -4\nKPX a quoteright -23\nKPX a v -21\n" "KPX a w -13\nKPX a y -26\nKPX aacute v -21\nKPX aacute w -13\nKPX aacute y -26\n" "KPX adieresis v -21\nKPX adieresis w -13\nKPX adieresis y -26\nKPX ae v -16\nKPX" " ae w -10\nKPX ae y -20\nKPX agrave v -21\nKPX agrave w -13\nKPX agrave y -26\nK" "PX aring v -21\nKPX aring w -13\nKPX aring y -26\nKPX b v -11\nKPX b w -3\nKPX b" " y -15\nKPX c h 1\nKPX c k 7\nKPX comma one -100\nKPX comma quotedblright -41\nK" "PX comma quoteright -50\nKPX e quoteright -18\nKPX e t -10\nKPX e v -15\nKPX e w" " -9\nKPX e x -27\nKPX e y -19\nKPX eacute v -15\nKPX eacute w -9\nKPX eacute y -" "19\nKPX ecircumflex v -15\nKPX ecircumflex w -9\nKPX ecircumflex y -19\nKPX eigh" "t four 1\nKPX eight one -48\nKPX eight seven -33\nKPX f a -9\nKPX f aacute -9\nK" "PX f adieresis -9\nKPX f ae -5\nKPX f aring -9\nKPX f e -15\nKPX f eacute -15\nK" "PX f f 22\nKPX f i -2\nKPX f j -4\nKPX f l -3\nKPX f o -10\nKPX f oacute -10\nKP" "X f odieresis -10\nKPX f oe -12\nKPX f oslash -9\nKPX f quoteright 0\nKPX f s 0\n" "KPX f t 24\nKPX five four 1\nKPX five one -76\nKPX five seven -26\nKPX four four" " 5\nKPX four one -84\nKPX four seven -56\nKPX g a -5\nKPX g adieresis -5\nKPX g " "ae -1\nKPX g aring -5\nKPX g e 0\nKPX g eacute 0\nKPX g l 0\nKPX g oacute 3\nKPX" " g odieresis 3\nKPX g r 0\nKPX guillemotright A -50\nKPX guillemotright AE -54\n" "KPX guillemotright Aacute -50\nKPX guillemotright Adieresis -50\nKPX guillemotri" "ght Aring -50\nKPX guillemotright T -126\nKPX guillemotright V -93\nKPX guillemo" "tright W -66\nKPX guillemotright Y -133\nKPX guilsinglright A -44\nKPX guilsingl" "right AE -48\nKPX guilsinglright Aacute -44\nKPX guilsinglright Adieresis -44\nK" "PX guilsinglright Aring -44\nKPX guilsinglright T -121\nKPX guilsinglright V -88" "\nKPX guilsinglright W -60\nKPX guilsinglright Y -128\nKPX h quoteright -15\nKPX" " h y -18\nKPX hyphen A -7\nKPX hyphen AE -11\nKPX hyphen Aacute -7\nKPX hyphen A" "dieresis -7\nKPX hyphen Aring -7\nKPX hyphen T -80\nKPX hyphen V -46\nKPX hyphen" " W -19\nKPX hyphen Y -92\nKPX i T -7\nKPX i j -3\nKPX k a -2\nKPX k aacute -2\nK" "PX k adieresis -2\nKPX k ae 2\nKPX k aring -2\nKPX k comma 0\nKPX k e -21\nKPX k" " eacute -21\nKPX k g -16\nKPX k hyphen -41\nKPX k o -19\nKPX k oacute -19\nKPX k" " odieresis -19\nKPX k period 0\nKPX k s -3\nKPX k u -11\nKPX k udieresis -6\nKPX" " l v 0\nKPX l y -5\nKPX m p 5\nKPX m v -13\nKPX m w -7\nKPX m y -18\nKPX n T -96" "\nKPX n p 5\nKPX n quoteright -14\nKPX n v -13\nKPX n w -7\nKPX n y -18\nKPX nin" "e four -3\nKPX nine one -43\nKPX nine seven -37\nKPX o T -99\nKPX o quoteright -" "21\nKPX o t -10\nKPX o v -18\nKPX o w -10\nKPX o x -27\nKPX o y -22\nKPX oacute " "v -18\nKPX oacute w -10\nKPX oacute y -22\nKPX ocircumflex t -10\nKPX odieresis " "t -10\nKPX odieresis v -18\nKPX odieresis w -10\nKPX odieresis x -27\nKPX odiere" "sis y -22\nKPX ograve v -18\nKPX ograve w -10\nKPX ograve y -22\nKPX one comma -" "74\nKPX one eight -65\nKPX one five -67\nKPX one four -81\nKPX one nine -65\nKPX" " one one -118\nKPX one period -74\nKPX one seven -90\nKPX one six -62\nKPX one t" "hree -67\nKPX one two -69\nKPX one zero -62\nKPX p t -4\nKPX p y -16\nKPX period" " one -101\nKPX period quotedblright -41\nKPX period quoteright -51\nKPX q c 8\nK" "PX q u 4\nKPX quotedblbase A 30\nKPX quotedblbase AE 30\nKPX quotedblbase T -75\n" "KPX quotedblbase V -69\nKPX quotedblbase W -34\nKPX quotedblbase Y -91\nKPX quot" "edblleft A -52\nKPX quotedblleft AE -64\nKPX quotedblleft Aacute -52\nKPX quoted" "blleft Adieresis -52\nKPX quotedblleft Aring -52\nKPX quotedblleft T 9\nKPX quot" "edblleft V 15\nKPX quotedblleft W 27\nKPX quotedblleft Y 5\nKPX quotedblright A " "-53\nKPX quotedblright AE -66\nKPX quotedblright Aacute -53\nKPX quotedblright A" "dieresis -53\nKPX quotedblright Aring -53\nKPX quotedblright T 11\nKPX quotedblr" "ight V 15\nKPX quotedblright W 26\nKPX quotedblright Y 7\nKPX quoteleft A -67\nK" "PX quoteleft AE -79\nKPX quoteleft Aacute -67\nKPX quoteleft Adieresis -67\nKPX " "quoteleft Aring -67\nKPX quoteleft T -5\nKPX quoteleft V 0\nKPX quoteleft W 12\n" "KPX quoteleft Y -9\nKPX quoteright A -72\nKPX quoteright AE -85\nKPX quoteright " "Aacute -72\nKPX quoteright Adieresis -72\nKPX quoteright Aring -72\nKPX quoterig" "ht comma -60\nKPX quoteright d -20\nKPX quoteright o -26\nKPX quoteright period " "-60\nKPX quoteright r -18\nKPX quoteright s -18\nKPX quoteright t -7\nKPX quoter" "ight v -2\nKPX quoteright w 2\nKPX quoteright y -6\nKPX r a -5\nKPX r aacute -5\n" "KPX r acircumflex -5\nKPX r adieresis -5\nKPX r ae -1\nKPX r agrave -5\nKPX r ar" "ing -5\nKPX r c -6\nKPX r ccedilla -9\nKPX r colon -22\nKPX r comma -69\nKPX r d" " -1\nKPX r e -11\nKPX r eacute -11\nKPX r ecircumflex -11\nKPX r egrave -11\nKPX" " r f 26\nKPX r g -4\nKPX r h 0\nKPX r hyphen -47\nKPX r i 1\nKPX r j 0\nKPX r k " "6\nKPX r l 1\nKPX r m 0\nKPX r n 0\nKPX r o -6\nKPX r oacute -6\nKPX r ocircumfl" "ex -6\nKPX r odieresis -6\nKPX r oe -8\nKPX r ograve -6\nKPX r oslash -6\nKPX r " "p 8\nKPX r period -69\nKPX r q -3\nKPX r quoteright 1\nKPX r r 0\nKPX r s 4\nKPX" " r semicolon -22\nKPX r t 28\nKPX r u 2\nKPX r v 29\nKPX r w 31\nKPX r x 20\nKPX" " r y 24\nKPX r z 9\nKPX s quoteright -22\nKPX s t -3\nKPX seven colon -77\nKPX s" "even comma -119\nKPX seven eight -28\nKPX seven five -30\nKPX seven four -93\nKP" "X seven one -53\nKPX seven period -119\nKPX seven seven -4\nKPX seven six -40\nK" "PX seven three -23\nKPX seven two -28\nKPX six four 1\nKPX six one -43\nKPX six " "seven -30\nKPX t S -8\nKPX t a -1\nKPX t aacute -1\nKPX t adieresis -1\nKPX t ae" " 2\nKPX t aring -1\nKPX t colon -28\nKPX t e -14\nKPX t eacute -14\nKPX t h -3\n" "KPX t o -12\nKPX t oacute -12\nKPX t odieresis -12\nKPX t quoteright -1\nKPX t s" "emicolon -28\nKPX three four -2\nKPX three one -49\nKPX three seven -33\nKPX two" " four -37\nKPX two one -36\nKPX two seven -25\nKPX u quoteright -8\nKPX v a -18\n" "KPX v aacute -18\nKPX v acircumflex -18\nKPX v adieresis -18\nKPX v ae -14\nKPX " "v agrave -18\nKPX v aring -18\nKPX v atilde -18\nKPX v c -16\nKPX v colon -23\nK" "PX v comma -69\nKPX v e -21\nKPX v eacute -21\nKPX v ecircumflex -21\nKPX v egra" "ve -21\nKPX v g -14\nKPX v hyphen -12\nKPX v l 0\nKPX v o -17\nKPX v oacute -17\n" "KPX v odieresis -17\nKPX v ograve -17\nKPX v oslash -17\nKPX v period -69\nKPX v" " s -9\nKPX v semicolon -23\nKPX w a -15\nKPX w aacute -15\nKPX w acircumflex -15" "\nKPX w adieresis -15\nKPX w ae -11\nKPX w agrave -15\nKPX w aring -15\nKPX w at" "ilde -15\nKPX w c -7\nKPX w colon -23\nKPX w comma -50\nKPX w e -12\nKPX w eacut" "e -12\nKPX w ecircumflex -12\nKPX w egrave -12\nKPX w g -6\nKPX w hyphen -1\nKPX" " w l 0\nKPX w o -9\nKPX w oacute -9\nKPX w odieresis -9\nKPX w ograve -9\nKPX w " "oslash -6\nKPX w period -50\nKPX w s -5\nKPX w semicolon -23\nKPX x a -17\nKPX x" " c -23\nKPX x e -28\nKPX x eacute -28\nKPX x o -25\nKPX x q -20\nKPX y a -22\nKP" "X y aacute -22\nKPX y acircumflex -22\nKPX y adieresis -22\nKPX y ae -18\nKPX y " "agrave -22\nKPX y aring -22\nKPX y atilde -22\nKPX y c -19\nKPX y colon -27\nKPX" " y comma -70\nKPX y e -24\nKPX y eacute -24\nKPX y ecircumflex -24\nKPX y egrave" " -24\nKPX y g -17\nKPX y hyphen -14\nKPX y l -4\nKPX y o -20\nKPX y oacute -20\n" "KPX y odieresis -20\nKPX y ograve -20\nKPX y oslash -19\nKPX y period -70\nKPX y" " s -12\nKPX y semicolon -27\nKPX zero four -2\nKPX zero one -46\nKPX zero seven " "-39\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n019003l_pfb_len = 36026; char* n019003l_pfb = "\x80\x1]\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-Regu 1.05\n%%CreationDate: Wed D" "ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n" "% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING" " (GNU General Public License) for license conditions.\n% As a special exception," " permission is granted to include this font\n% program in a Postscript or PDF fi" "le that consists of a document that\n% contains text to be displayed or printed " "using this font, regardless\n% of the conditions or license applying to the docu" "ment itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readon" "ly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the" " file COPYING (GNU General Public License) for license conditions. As a special " "exception, permission is granted to include this font program in a Postscript or" " PDF file that consists of a document that contains text to be displayed or prin" "ted using this font, regardless of the conditions or license applying to the doc" "ument itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (UR" "W)++ Design & Development) readonly def\n/FullName (Nimbus Sans L Regular) reado" "nly def\n/FamilyName (Nimbus Sans L) readonly def\n/Weight (Regular) readonly de" "f\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -151 def\n/" "UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusSanL-Regu def\n/Pa" "intType 0 def\n/WMode 0 def\n/FontBBox {-174 -285 1001 953} readonly def\n/FontT" "ype 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding Sta" "ndardEncoding def\n/UniqueID 5020902 def\ncurrentdict end\ncurrentfile eexec\r\x80" "\x2\x35\x84\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2" "5\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r\xde\x9f\x8em\xf9" "%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff++\xde`[\x8e\xe3" "&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed" "\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95" "\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff\x9c\xdcz\x1b" "\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>nc5+\\3v,\x8eI\xd4\x35L\x99:v\xa0L$" "l\xa4\xdb\xac\x98\xba:\xd1s\"\xce\xf1\xde a\x93\xe6\x94S\xd9\xfc\xc7\xe3\x98\xa7" "\xc4\x9c;\x93@QcIzL\xa8\xfd\xe2\xea\x36kGy\xe5\xa7\xbd\xf2\xb1\xa0\xa7\xb\xe8\xa3" "\xb3Z\x90\x66\x63\x85Y\xed\xba\xb5\xc0\xb\x30@\x1f\\\x64\x9b\xd8\xcf\xe0\"\x83\xd8" "\xf2\x19\x5\xac\xfc\xed\xcc\x43\x81K\xe7\x17#\x80\xe6\n\xd9\x92\xbc:\xcb\xa3\xf3" "n\x7\xfets\x89gA\xb4\x19h\xe0\xd0x\x1c/R\x1c\x9\xd2\xc8\xf5\x8\x5\x65\xbd\xe4\x81" "'R>{q\x95\xc2\xb9\x7f\xc3\xb1'\xd3\xf1\x1\x8f\x89\x12\xf8X\xf9\xec\xe9\xe3\x92J<" "2\xa6\x1e\x11u\x90\x97\xec_l1H\xda\x35G\x87\x82\x83\xado\xa5q\xb2\xad\x41\xf0j\xe8" "\xe9L\xfc\xdd\xe0.\xa6=\xf9\xcd\x31@\xeb\x88\x92\xf0\x0u:l\x9bN\xbc:\x8f\xd8\xc7" "\xdd\xb6\x8\xaf\xa7oW\x12\x88\xbb\x4o\xc5O\x84)\xc3\xc5z\x5\x8b\xfcX&\x93\x11wf\\" "\xbcRsR\xec\xf3\xb8\xfe\xd5\x37N\x8c\xd2p\x8a\xc2\xa2_[\x87\xf\xe6\r\x64+\xa5\xee" "\x18m)\xdf\x66\x8d\x9f\x7f\x8b\xae\x34\xa0\x64I\xc3m4b\x8b\xc3}\xe7\x8a)\xf2\xe5" "\xc6y\xad\xf2\xecV\xa6\x9a\x45\x12\xf5\xea\x8d[\n\xf8\x82\x1\x43\x1f\x31\xb9\r+\x1a" "\x91\x82\x7f\xedN\xe4\xe9y\xac\x99\x10<\xbb\x16:\x93Pa\xc\xe6\xa4\x34\x63\xdd\x66" "\xcf\xa4\xa1l4\x10\x63\xbb\xc3\x84\x9c\x63\xa7h\xb7hU\xb8\xac\xe8\xb8\xc5\xe9\x88" "n\xbb\x98\xf7\x85\x8d\xdf\x94\x44J,\xb3\xfb\x4\x96\x8dkM\xf5j\xc4\xc8\x8d\x1er6q" "\xb1t\xb8L\xdc\xf9\xab\x41\x94\x1b\x63\x96$\xa2\xc2\x5\x33T\x19Q2\xce\xdb\xcb\x91" "\xe9\x32x\xf8gt7\xf7Q\xdcl\xa2\x1b\xf7\x46\xf6x 3\x18\xf4\xf4\x8b\xf\x41\x34IF\xfc" "\xdc\xdb;\xe6\x12\x80\xc1@4i]\x81\xc6=\x91\x83UW\xa3\x32}_S\xec\x95\x45\xb5\x9\xf8" "\xcc\xfe\xd3\xefi\x1a\xff\x90\x8a\x99m\xaf\x16\xf7\x8ag\xe1\xb5@\xe4H\r\xdcK,\xaa" "\xfe|z\xfa\xd2l\x98\x88m\x83r+\x90\x88\x45\xe4\xeiP\x7f\xfa\x1d\x13\xb7~\xeeW\x11" "439\x98\x9\xe1>P\x9d*U\xfe\x8cz\x1b\xf1\xfbl\xc6\xd8\xccW?g\x88\xca\x66\xa5^\xeb" "b\x11\xfc\xfc\xfe\x92U\x8a\xb7:8\xef\xff\xe1\xd6\xd3\xcb\x62n\xe8s\xe\x89\xcc\x42" "\xa5\xfd\xce\xb3\xdd;L\xd6\xf0\x13\x15\xe0\x83\xa0\x1a\x8f\xf1\x17\x64\xe1\xc4\xc6" "\x1f\x62\x89;\x17\xe0\x1\xecx\xc5\xf3\x9a+[D*@d\xc4?\x5\xd9\xf9\x1a\xea\xb9\x99\x8d" "i\xc8~\x9e\xda\xd3\xbdZ\xe4\x96\x86\xc9\x63\xa8\xa0&\xe3\x43\x9a\x96\xd9\x9b\xe4" "\x5p\xd6\xe0\xfa\x1c\x33\xda\x80\xa9\xa9\xb9\x44\x11\xdbO\xb4\xc9\xae\x85h\x5\x8f" "\xb2r\x8f\x2\x61\xa3\x1d.\x89j\x9d\x33%\xb0*Q\x98\xce\xa9\x94\xb8=\xe6\xcd\xbdpx" "\x8d\xa3\xc\xb7\x90\xe0P)x\xf1\xaa\xee\x7;\\:\xb\x93\xd8\x43\x65\xfe\xe2v\xbbT\x96" "\r??G\xb8HBo*\xe9\xdf\xf9\xba\x4\x31\xe3\x38\x8e\xcd\x15\xf4\xd2\xee\xcb<\xa8\xe1" "\x8d\xf7\x64\x2\xa8\xd7\xfc\x1\x85\xf9/w[\xfdJr\rb\xff\xed\xb3r`\xe8\xad\x89\x4\x1b" "\xee.\xf\xc5+\xd9&H\x8a~\xf1Y\xf7l;\xe4\xfdI\x1dx\xd1\xf9\xa5\x36@\xbd\xbaU\xbb\x80" "I?\xd6l\xa1T\xa6O\xfa\x1e\x87\xca\x93v\xbc\x18\xf9\x63\xebW\xae\x8cjK\xf7W\x9e\xac" "\x8e\x10\xbfl\x80\x9c\xf5J\xe7w,\x11\x9b\x88\xb0nX\x86Q\xfb{\xd1\x82oFh\x8b\x1d\x87" "\xbcG{\xc1?\xb3#_Q\"P|p%B\xdc\xc4\xf6-T\x4\x41J\x81`\xc0\x8dSM\xe9\xb4\x18\xe\xe8" "\xc8\x35\xb0W\xd5\x95;\xa5\xc9\xaav\xb1\xb,^E\xe5\xd0\xcd\x32\xfa\x8flO?\xb2\x8a" "\xf3-\xfc\xd7\x9b\xe5\xf\xd7\xae\xd0T\xee\xea\xc8\xf4\x90\x7\xcc\xe2\xc1\xb9\x9b" "\x8f\xf8U5 e\x1aK\xf1\x63\xe4\x8dq\xac\x12\xf4\x18\xae\xc1\n\x9\xf7\xb7\xd4g.\xa0" "p\x14`\xb5\x61\xc2\xa7<),\xdb\xe3\xa6u\x14\xa0\xe9\xfb?hN\x85\x1f,\xb4\x9a\xbd\xf" "e6\x84\xf0J\xb4i\xbd\xa3m\x80t%\xda\xef\xbf\x9a\xfd\x80\xb7myG\xef\xf8\x35\xa0\xad" "\xb7ve\xee\xd2t\x86\xc;\nu\xa3\xc7\x17\xaa\x5\x95\xd5\xefZ\xa5*\xccp\xc9\x1b\x87" "jH\x7\x8\xb0\xb\xf4\xd8\xb3\xaf\xd0\xa0\x2\x9b\xf\xe5 \xdd\x3\x36S\x9d\x94\xfcV\xdd" "\xf3\x41y\xd6\xe8\x89\x9a<\x1a\xa5W(\\\x85\x81uJ[U\x1b\x90\xe4\xc1\xc4\x9e\xd4=p" "R\xf0\xa8$'\xfb\x83\x83\x1bp\x89S]P\xf3\xc7;X\xf4\xbc\x92=\xde\x9f;\x4\x1\x9c\xe0" "'\xfc\xeeS\x8c\xee\x80\xb2\x80h\x80pC\xa6\x87\xf9\x1\xb1\xd0\x7\x42R$\xa8\x8a=\xf4" "\xd1T\x17\x66s\x80\x37\x9\xc6P\xc3\x38\xf2^\x97\xbbJ@\x8c\x9c\x88\x30\x8f\x0\xa1" "S\xbd(\xb7\xd7\x31R5\xcd\x9c\x81$0gHA\xe8\"\x61\xd1\x65\xeb\x46{\x0\xb0\x38s\xb\xea" "9\x12\xf7\xef\xe2\x43\x16\x36\xe1\x9b\xc9\xce\xa7\x95(y,t\xf9U.Z\xe8\x8\xaaJ(\xdc" "r=\x86\xf3/\x81[H\x12\x8d\x1b[\\\xf6\x83\x62^g4\x8a(\xcc\x8a\x65oL\xa5\x19\xc9\xe8" "\xb2N\x10\x36#g\xdb\x7f\x6\xb8`\x95wK\x86\x85$q\x17v\x82\xa9\x1c\xcd\x93\xa6\xe8" "V8s\x9\xe2\x41\x44\xce:H\xb8\xf0pt,\xd5\xe4N\x80\x10\xf5\xd4\xd8\x99&2x\x11(\x94" "\x8a!\x8e\xda\x86\x1\xbf\x9fU\xd2\x13q\xe8\xf7\x88\x98\xe7\"\xb9\xae\xb3oc\xa6\xf7" ":\x85\xd5YQ\x3T>\x88)\xb\x8a\xb6\x38\x8d\x30\xfc.#\x9c`\xcc\xfc\xd6l\xef\xfeY\xe" "!\xa8\xc2\xc6\x64\xab;0\xda\xc1uT\x6\xb7\x93\xaa\x65\x93\x41\xedr\x1e\x39Xh\x11:" "\x90\xbb\xbfm@\xf3\x94O\x97\xb9\x8a\x94\x15\x9f\x18\x9\x17\xe8\x9c\xd5'\xb9\xc6\xcc" "\x82\xcby\xb6tn\x85n\xdf\xe \xb2\x12h\xe\xfd\xb\xa3\xa1\x14\xdb\x98@\xfb\xea\x18" "\xa1\xa6\xd6\xe8mb\xb3\xc3\x0\x19\x1\x85\xf8\x46-\xc\xda\x1dLRP\xd0\xd3\xcd\xa8\xb1" "2\x98\x36\xcc\x61\x66\xf2!\xf3.\x8a\xfb;\x88\x42*\xa7\x2\xf0\xcf;\x9d\r\x97\xf7\xf1" "\xffG\x8\x1\xb1\xd1P'\xfa\xb3\x94\xa1\xcbK\xc5(\xffw\xca\x9e\xf3?\xf4\x9b\xa3\x80" "Y\rh\xc^\x99\xd1\x66(\xc2\x39\xc4\x96\x14^}\xd8O\xa5\xc3\xa7\xf8\x15z\x1e\xc7\x8f" "\xa6\xee\xa9\xa9\xc2\x80_F\xdd\x32\xa4\x35\x88\x89\xf6\xec\x66\xfa\xbr\x7f\xc6\xae" "v\xdem,G\xa1y%M\xcd\x90\xe4\xa0\x89\xa5\x16q\xbf\x1f>\xca\xca\x66\xa1\xef\x91\x8" "\x1]\xc0\x37^\x15\x93\xf4pCQ\xe7z4\x1c\x2\xb8\xf6\xf7\xbe\x63#\xa0P\xf1\xa6\xb8\xb6" "\xeeW\x1e\xc6MN\x18\x97\xab\xfd\x9b\xe6\xa7\xf0\xac\x61\x1e\xe0\xb7\x17\x9b\xcf\x8d" "te\xff\xce\x87\xd8j\x9c\xab;\x8f\x86\xc9\xc9h\xec\x8c\x9e\x80\xaa\xd1]\xd2X\x1b\x13" "Q\xfd_\xa4@\xf5\x81\xec\x92\x93\xdb\xb7\x44[\x93\xa8m9\x85\xc0\xf8\xcc).\xb\xd3)" "C\xa5:\xbb<:\x5(\xc0\x13\xa3\xbf\x81\x1d*\xfe\x61\x8co\n\x94\x18\x85\xa6\xd4x3\x14" "p\xd5\x31\xa4\xd0r\x1b\xd4P\xa2\xf2\x61\xca|\x1a\x30\x14\xcd\x89\x8e\x9aR\xe0T^\xf3" "\x80\x95\x8d\xb0I\xbf\xf\xed\x1c\x92\x82\n\xe8\xe8(\rn\xa1+\xa4\x11\xa0\xe1\xae\xe0" "\xa5!\xc2\xca\x12\x63\x80@\x10YSs\xabU\xd2\xdb#\xd2;\x84\x9f\x64w\r|\x95m\x8b\x1" "7\xec&\x9et\xf4\x1b\x61\xff\xdf\xcb\xe\x66\xd1\x19V\xef/\x1d\x0\x8\xda\xbb\x61\xc5" "\x97\xc6\x7f\x9b\xf\xf1\x82\xa0WE\xd0UqZ\xa9\xd1^\xb6\xa4Y\xa1\xb2+\x9eu\xad\n]." "#i}\xc5,\xc}\xadQ$H\x90\x1f`D\xd5\xaf\\,.\xb\xaa\x8c\xfa\x9ci\xdf\xf4\xee\xf4\xbb" "\xd9+*\xe0N;\x7S\xe0\x44\xc7\x84\x7;HvF\xce\xba\x92\xd6\x92\xfd\xb9\x46*-o\xa3\xe" "|\xed\xf6\x89\x1f\xc8\x7\xdd\xc7\xf0\xa7\x8b\xc5\x41\xc7\xdd\xc6\x8a&\xe1\x1dz\x9e" "\x1\xc9]\xf\x8e\xd6m\xd9\xff!\xb8M \xbf\x83\x11\x16\xb7\x9d\xa7\x99\x1a\x1e\x99\x9a" "\xf4tG\x99\xa4o\x92\xaak\xff.5\x15\xee[N\xc9\x97\x19\x63\x9f\xdaw\xaa\xa0\x35`\x8b" "\xb2\xf5\xdf\x7f\xac{\xf2|\xca\xea}I\xcf\xc0\xa6\xcd\xa9*\xe2\xa4\x9f\xce\xa4:\x89" "\xd5\x9s\xa6\xab\xbd\xe5\xe9\xe5\xda\xc5\x98\x98\x32}\x89`\x9a\x9\xc3:\xf\xe5\xa1" "\xe7&\x17\xc8{\x7fZ\xf3\x19;u\xf2\xdaUb\x17\x9\x10K\xdb\xf\xfbw+\xa2V\x15\x37S\x9a" "\xb\xed\x90\xdb>\\\xcd\x88\x45\xb6\xba\r\xe\xa2\xec\xd7\x10^\x8O\xdf\x9ai\x81\x2" "\xffG-x\x8f\x18\x14\r@f\xc9\x61\xbf\x46\x8f%\xaa\x88\xd5SU\x80\xe1\xd3\x46X,.q\x1a" "\x1a\x32Sz\x8\xed\xb3\x62\xc\x87\x1\xe\xa3\xe5\x63o#\xed\xe4O\xacK\x2\x88\x33\x90" "\x8aS{d}\xb2\x99\x85\xa7\xba\x95q@\x5o9\x10\xbd/\xb1\x10u\xd5k\xe3\x8fp#\x9f\xd5" "\"\xed\xad\x8a\xe8\x82\xa5\x9f\xbc\x9d\x5g\x9d)\n5jh\xc1\xf9\xcf\x39\xf2\x95\x9c" "\xa7\xc6\xfa\xb6\x16\xf9\x35\xe\xac\xaa\xaa\xbd\"\xf8Sv\xb3\xdc'\\\x95\xee_\x8a\x46" "7\xef\x45\xb\xdcy\xd1\xfd[\xa0\xa7\x80;\x7\xd5N`=\x88!\x1c\x31\x85QK_9&\xcdG\xf8" "\xcd\xcd\x18\xd1\x8ww\xb7\xe2\r\x38\x90\x37\x65SxZ\xdb\xed\x4Q\xc0\x1d\xcc\x92\xb8" "\x88\xd5\x44\xfd\x87\xa7\xb8\xb4\x9f\x9c\"\xf3\xd9sq4\x19\xbc\x4'\xb9\xd9\xaf\xab" "iAoQ\x8b\r\xc2Q\x5\xab\x8f\xa5\xa3\x8a" "*{\xed|\x19\x7\xdd\xf5J;\xa9\xec\xc4v\xb5!h\xf4T\xd2\x98\x1\x12\xae?\xb7\x9b\x6\n" "\rW\x3\x6\x63$\xcc\xe8\xb4\xd3\x44\x83\x38\x9\xcb\xec\xd4\x1d\xe5\xae\xc7\x45_}\xf" "\xd0\xda\x63\xbaj\xc3\xdd\xf9\xaf\xa8\xd2\xd9\xa3\nu\xc\xba>\xa0\xcd\xce\x97s\xca" "\xedkX\xb5q\xc9\x30\xf7m\xd4\\\x1f\x88\xbe\xc8'\\\x13\x9c\x39\xb\xc2@\xda\x6\x1c" "\xbd#\x8[\xe7_\xe2\xfc@P(\xf9\x63q\xdf\xcU\xc9\x42\xac\xa5u\xdb\x86\xd6\x33)\xa0v\xaf\x0\x93V\xde" "\xb6\xf2\n_TSZ\xb1\xe1\xfds\xaf\xb4\xd9\x35\xb0\x9f\x36\xa2Y=\xfe]\xd9\n\xac|\xec" "\x8e\xed\xaa\xf2\xa3\xfb\x63\xb\x42\x8d(\xa7\n>s2\x8f\xe5\xb9:\x87|\xf5\x41\xbc\xb0" "\xd3\xb4p\xa6\x88\x64\x83\xc5\x8f/'\xb7\x6\"\xc6\x1d\xedK7\xcc\x1f$\xc7\xfc\xcd\x88" "\xd6\x91\xaf\xcbQD\xd5\x41\x2\x93\x87g`R\x8e'\x93\x3mc\xf3`aM1UmI\x9b\xf4\x9f\x8c" "\xc2\x30\xe5\xc1\xd2\xee\x65g\xb1\x11\x9\xe0<\xaf\x96/\xa6\x90\xd6\x37\xc2\x13\xc7" "\x95\xb4\xdbH\xc0k\xb9(@\xa2\xa0\xa0\xd6&*{$\xea\xb5\xaf\x9e\x96\xac\xf6x\xd6\xf5" "\xeaoJ\x87)\xec|;N\xc9\xbb\x6\x37U:5\xa7.\xc7Kg\x88#*C!\xe\x9f\xd1\xb3\x8a\x30\xde" "\xef^\x1a\x8a\xbd\xd4\x37\x11\xf1\xe5\xb7\xda\rH\xa6\xc4\x41V\x8ez\x87\xe9U\xcb\x14" "\xbe\xf7\xcbn\x95\xfd\x9e\xd4O\x9b\xdf\xafi\xb4\xec\xf9&YS\xe2\"\xc1\xab\x7f\xd8" "SG\xb7\x9a\x61U\x8b\xf7\x9c;\x10O\xed\xad\xa1\xe8\x93\xbej\x1)\x1fX\x11\xa8\x9f?" "\x1dY?2\x8^\xc2\xa8\x43}\xf5\xf0*\x16\xa5n\x81\x1ek\xca\xf1\xcf\x41\x92*\x8c\xf8" "F\x10\x81\xe6~]\xcfND\xb\xbe\x8f\x4\n\x96\xbd\x14\xa3t(\xf`Ge&\xb2o\xca'\xccm\x88" "\xcc=\xa1\xaa\x92`\xce\xf5K\xdc\x18\xdd\xa1\xa6PX\xa7\xef\x9\xdf\xba\xe\xf6S\x8\xe7" "\x5\xdb:\xfa\xe7\x12{\x1\x90y\xee\x85\xa8\xca\xba\xb1\xd3\x82\xce\xc2r\xb&\xe8\n" "~\x2\x7\xbdH\xfe\x80g\x16\xc\x82YwR\xae\xde\x88\x95\x3\x95\x80\xce\xa9\xa3\xb\xd8" "X\x17P\xd8\xa0\xa6\x12\xa8.\xf3\xca\x87\x62\x0\xd5\xfbK\xecO\xe2;\x94j\x85[_\xf4" "\xec@\xef\x1\xe1H,\xc1\xb4,\x7f\xab'\xb8" "\x6\x43\xca\x89\x8b\xaa,\xfa\xd8g`O8}\x86n0H\x84y%\xf2\x9e\xab\xb4\xe8\x61\x85\xb2" "\x1\x8ex5\"P\n\xf2~\xc'\x93\xf2\x38\xd8\xcc\xad^\xbbi\xdb\x66j\x1bl\xfe\xd9\xbe\x86" "\x19\x1d\xf3@\xea\xf1\xd6\r\xa4v\x9b\x34\xd1!w\x83\xc;[D\r%\xa9i>\xc3Ju\x98[\xca" "(\x80\x85Q\xfe\xb3\xc6\x3\xfc*\x13\x7f\xc9\xc4\xb0\xc0\xb8\xa6\x18\x1d\xe0g\x9\x15" "\xc2i4>\xc7\x94\xa2\x84\x8a\x42\xb4v\x95/\xd2\xf0QZb\xdb \xd0\x65\xca`\xd0\x35\xe6" "\xacp\xe1\xb1\xb5\xc\x99qX'qX\xab\xben\x9fU4G\x17\x10\xb6\xc\x89Mx\xb5\xeb\x1c\xea" "\xb4\xe6;{\xb4\xae\x81\xd8\x86\xc9M\xf8\x7f\x39\x63\x42\xba=\x13\xd2\xf6\x97GL\xbe" "Q_\xde\xeb\xaa\x19\x39<\xe6io\xe4\xcf.ts\xd0$\xf\x30\x8e !\xfd\x8d|#\xa1\xa9\x39" "\x1c\xad=K\xact^\\\"\xf0\xb6\x19\xc\x1f\xcM\xa4\xa6\x9d\xbcU\xa4\xd4\xa7\x11/\xb4" "\xa4\x32n\r\x8dNd\x8e\x30\xb8g\xf5sC\xbd\xa8\x9\x62\x34_\xd4\xef\xf8TX\xc3.H5\xe6" "\x12\x9b\xb6U\xce\x15\x81\x1\x61\xb3p\xd8\x8f\x94\xfeho\x10\xb1\x1aW\x1e\x46\x1f" "\x8c_\x82\xc1&\x9cO+1\x16\x9\xff\xf4\xde\r\x61\xac\xc9(?x\xd9\x82\xda\xff\xca\x89" "\x9e\xdd\x64\x93@\xe\xa4\x0\xe1\xe5\xa2ta\xdb\xf9\x1c\xd4l:8\xfdt\xcan\xbeT[\xec" "\x2\xc1\x45\xecz\xce\x1b\x8a\x4K\xd7\xdd\xa3\xb3\x37\xc0\xe0\xf4~\xba(nOSp\x6\x63" "\xa8R)<\x93\xc0\xa0\xb\xd1\x9bU3\xbb\xd3^\xafu\xf5\xcaW\xfe\x80~f&\xc1%\x30\x3W\xe3" "^\x18\x5\x17K\xac\xca\xbc{\\3)\xfc\xbf\xd8\x94\xd1\xda\xa7\xa8\x13\xe3\xdaU\xb0\x9" "\xeb\x4\xb7\xdb\x9fh\xc%\xeeQ\x85\xe6<\x14\xb5\xaf\x66[\x13\xadk\x15\x11\x84\xdb" "_\xa0\xb2~\x8e^}\x95\xc5\x16\xbd\xea\xe3-\xd4g/{>\x0&\xde\xe4\xed\x90\xaf\x97 \n" "0\x3^8\x8a\xfej\x12K\xbb\x18\xa4|}s\xbc\xaa\xfc~\xa1 :hk8\xbc\xb6\x1b\x3\xe6\xde" "\x12\x91W\x92\xc4X\xc4'Kl\xf\x87\x89L4a{6\xb8\xea\xbf-p;\xe3\x82O\xdek5\xf1\x8\xfe" "\x1c\x1e\x1i)\xd6\xcc\x83\x8\"\x1Q\xcd\xd7l1\xb2 >\xd9\xbf\x9f\x14\xdas\x95\x43G" "\x83^\xa4^\x16\xda.\x1f\xdc\xd6\x3\xcev\xf7$\x16\x81\xd3\xea\xa0\xc8;!\x85\xb\x63" "\xf7\xe9\xe9\xb5\x15\xe6\x39`\x87\xe2\x93\x8c,9p\x10\xa1\xc0\xe5\xbb@j\xc7\xf9\xfe" "ht\\0\xb\xa2\xfb\x19\xa6\x3\x1f\x1g\xb0\xe5\xb6o\x9c\xb3\x15\x46\xf4G\xf\x8d\xc9" "\xa0\x36\x38\xe2\xe4u\xc0\x97rR+\xde\xa3\xc\x9a\x31\x41\x9d\xe0h\xd3\x1e\xdd\x32" "\xdd\xfe\x93\xc8l?mS\x1M14\xb2y7\xc3@\xa4zs\xc0\xc2\x35NFK\xd5\x8b\xff\x62\x9c\xfe" "\x81\xd0\x98\xbe\x34\xf1\xff\x36\xb7\xde\x1c\x16h[\x3\xb\xbf\x8d\x97\x1b\xe9,\x14" "\x2=j[\xd1\xcd\xbf-\x84\xfa\xc1g\x5Q\xcb^\xff\xe>\xc7\xcc\xfdw\x92\x1cy\xf5u\xfb" "\xe4\xd2.\x0_!\xbf#\xb5\xa4~&\xdc\x9\xe8\xf7U\xc1\x9d\xbc\x80\xfd\xe4\xc8\x1aI \xad" "\xdeh\xcc\xae\x80\xb0\xff\xf8\xf6\xfb\x83\xdf=\xf6\x1\x85\xc2?A\x99\x38\x8cI7-\xda" "\xef\xf\x8b\xe\xff\x13p\xc7\x1a\xa1\x8e\xc6\x95\x8bz\x8d\x87\xaa\x41\xdd\xdc\xb9" "\xb9Q\xdf@\x4\xa6\xed\xc2\x86Z\x7f\x42[\xb0\x1c\xbf\x93\xdd\xcfv\x5.&\\\x6\xce\xdd" "\x98\x85\x62\xc3\xc4U\xbd\xe3\x31\xa7\x7\xde\x15\x19t\xed;\xcb:\x9c\x7f\x3>\x87\xdf" "\xab=\xca\xaf\x9\xcc\xe2\xe3\xe1\xfc\xcb%\x92\xc\xb8\xd9\xd2\x87^\x9fl\x7\x98\xf5" "\xc4\x81\xe2\xdf}\x8s\xa4\xee\x4P\xe4\xc4\x46\xab\x5>\x2\x64\x8c\x2\xbc_v\xdf\x83" "D\xe0\x5\x2\xd2\xbe\xe6\x41\xabS\xa4\xf5\x3\xc0@\\E\x5\xb0 \x7\x97\x84\x17\xac\xfb" "\x86\xdc\xa0\xd8\xf7`\xe8\x8e\x9f\x35\xb7\xa8\x3N\xdfy\xdd\xfd\xc6\xb7\xc2\xea\r" "\xb3IH\xe\x8e\xfbw\xf8\x65\xa5Z\xb\xd0\x9d:F\xd8\xfc\xcd\x2,\xf\xcd\\\xed\xa5\xec" "\xea\x12\xe\xe0>\xab\xfa\xeb)\x6\x99\x85\xf2\x62^\xa0\xb5\xb6+\r0\xae\x17\xa1\xf0" "\xd3\xf7\xc4s/\xdd\x42'n]\x9\x64k\xb6\x2{^\x3^\xbcH/\xed\xe\x63\xf9\xb\x8d\xf6\xa0" "\x9|\xa8\x97\x82sw\xec\xfc\x18\xac\xe8!a\xd3\x14\xb3,\x1\xa6L\x1b[\xddW\x92\x1e\xb" "\x1c\xf8n\xd8?=9\xbb\x92\x8c\xb6\xa4\xb5-\x88\xcf\x16\xa5\x9b\x3zD\x7f\x8c\xc8\x8b" "\xd9\x8a\xf4\xdd\x30\x62\xcd\x98\xa8p\xc1=\xbc\xe5 N\xed\x82Wx\xa2\x1b\x7\x31\x10" "\x8e\xab(\xd1$\xa8\x89o\x91\xe7\xde\xb2\xf3\xa5\xa8y\xba\xc5S\xf3\xe1\x98(\xbd`Q" "\xc8\x39\xb0\x94X}R+L\x1\xfc\x9axp\xdf\x64\xb0n\x1a\xa5P\xd6'\xea\xef\xa5-\x9a\x99" "\xa4}\x10p\x8a\xc3-\xd4s\x9f>\xdc _\xaez\xd9\xf4Y\xc5@\x82/\xday%\xd2\xad\x1a\xae" "\"]Q%\xa3\xce\xf2\xb6I9>S\x1\x39\xbe\x17\xdb\x8a<\xb @\x18\xa7\rqY\xc\x4\xd5\xf8" "\x97\xd3s\x1e\xc2\xe0\n\xc1\xf0\xf5\xf4X\xf5\xf\x1e\r\x87\x10'\x83W\xd8\x65\x9b\xcc" "\x81\n\xa0\x10\xaf&\xac|\xeb\x42\xbf\x31\x94i\x11\xae\xd6|\x12\x9b\xbc\x0/\xe5\x37" "\x90\x99g\x19+\xdc\x1b\xb2\x8a\xe2\xbf\x8e\x9f&}Q\xfU%Pq\xf5N\x82\xbe\xa4\xfb\xe2" "u\x7f)\xe5\xb9\x45\x44\xee;\x11\xf2iN/n\xe9\x0\x6\x64\x98!0\x7f\xfe\x1x\xf6\xe6\xca" "4\xb9>\xc9\xef\x1U;\x8a\x4\xc9_\x12\xa5\xbd-\xbd^A|p\x8f-\x12\x8e\x2\x86\x17\xdc\xcc\xc3`\x8e" "\x84i\x8d\xce\x1a\xe9\xf0y.\xd1\xc5T\xcd\xde\x8f\xaa\x8b\x86|\xf4\x9a\xd3q2\xbf+" "\x11wY)\xb1$bdSO\xce\xc4\x34\x91\r\x8a\xea\xa2\x87{X\xcf\x1f\xf9>\x9d\x92\xd8\x15" "\x1fl\xc3\x2)\x87\xf1\xd6\x1e\x8d\xc9\xd0\x91\xf6z\x9b\x83\x44'\x9e(&\"\xfalv\xf0" "D\xd1X]o\xcd\x93\xdaV\xd7\x32\x90]\x9\xb1\xa8tx\x9a\xe6\xc7\xd9\x18\x80\x14\xc5\xb1" "\x84\xb4.\xa5\x14n\x17\xc1\x91\x9\x82\x81\x3/%\xd2S\x82\xe0z\x3:\x9a\x3\x3\xff\x19" "(:\x82\xe3\xb8oo%M*\xf6\xf7tg\xc2\"\xc0\xc2\x36\xad\x5\x85\x61\xb4\xe0\xc\x44\x8f" "&;$\xf5\xbaU?V\x97\xefo\x2\x9e\x65\rH\r!\x1>\xd9\x9\xfa\xb7\xbc\x13U4\xb7\x39\xbb" "U\xd8N\x2\xf4\xd6%\xa8\x9Hd\x99\x88\x11\xce!$\x97\x1a\xa1\x1b)c\x1f ,7\xb4_GR+\xd9" ":\xd9\x6\xc7\xac\x13\x9b~\x94\x41\x9cu+\x92\xe\xd9I\xe7\x0\x14\x9\x8b.\xbb\xd9|\xa8" "4\x99\xd5\xb6P\xde\xa3\xa1\xa3\xf7\x1c\x17x\xce\x30\xce\x36\xc7\xab\xa3i\xf9|\x9" "\xbb\x87\xef\x99\xdb\xe3l,i\x89M.l[\xf5\xc1\xfa\xf8\xd9N\xac\xe7\xc4\x1z\xdd\xc3" "\xd3\xbc\x7f\x1e^\xcf\x66$\xba\xa6\x32\x82UC\xd0\xf6\xda\xd2\x80$F\x15\xb3\xe3\xe5" "fV\x9c\"\xed\xf3\xc9\xb6\xe9[\xa1HP\xe2U\xfc\xek\xcf;\x98\x12\x8f\xce\"\x1a\xb5\x9b" "\xbc\xef\xf\xff=(\xb3\xe5qV&\xd7\xaf`\xd9/\xe6\x9e\xba\xa3\xd2\x8b=T\xb4\xe8\xa0" "Jr\xb0n\xc9\x37XU{\xb0\xf6\x7\xa1\xa8\x88K\x95\x94\x46\x83\xda\x89\xb7;d\x92\x16" "L2/\"\xc4\xbb\xca\xe2\xf1L\x0\xea\xe1 f\\\xea\x6={\x15\x88\x9a\xea:W\xc9\xae\xb3" "d8\xb9M\x2\xf5\x61\x94\xcb\xb7\xae\x97Hz}\x1f(\xce\x39\x1b\xef\xcd@v \xe2\xe1_\xa4" "\x91\x8b\x8b\x96\xd0[Dl\x95\x46\x8a;\x82Z\xb8\x41\xda\xc4g\x94\xa3\xca\x9c\xf5\xce" "s?\xd0\x8er\x14\xfc\xc5;\xe2|\xee\xe5i\xef\xd0\x96\xd1\x63\xfe\xb3\x81\x65\xbf\x13" "\xed\xb~E\x5 ;\xa1\x1e\xe0\xb1t\x92\xa0)\xf7\xcf\xae\xc6\x11\x94\xca}\xb4\xc6\x90" "\xe3[\xf3*CR\x9a\x89H\x1\xef\x34\x96O\x3\xa2t]`k\xbet-\xcd\x35\xe8\x1f*\xcf\xf1g" "\x9f\x17\xd2\xf5i\x7\xc\x62\xef\\\xb3}\xc5_m\x1e\xd1\xe3\x81\x87.\xfd(\xad\x5\xef" "\xd4\xf?\xe5T\xcf\xc\x9a\xa1\xe9\x35\xa6\x80p\xfc\xf5\x8a\x92\xe5\xeb#\xee\njh\xf2" "\xc0`\xaa\xe7\x8d\x1c\xee\xc8}\x11\xe6\x17K\xfa\xc1\x8d\xec\xc5pSE;S\xe2N\xfc\x9c" "&\xc8q\xd9Y*\xfe\x1d\x64\x88\xfb\x66<\x99@)\x9f\x92\x1d\x81\xe\x1\xb5\xc7o\x16h-" "\x9f\x2~\xe6\x30\x10\xe6\xa4~\x9b\x89\x1c(\x93\x95\xd9\xd2\x83u\xe6\x9f\x94'\x81" ".1\xda\x8d\xd0\xdf\xdf\x35\x81;\xd9\x7\xd1\"\xf3\x2\xff\xb6\\\x16\x18\xc7\xbb\x46" "\xf5\x65\xac\xe8>\x1X$\xa4KA9\xe8\x9b\xfe\xa5\xea\x41:?\xd8\xa4'\xcd\xb7\x15\x66" "\xc\xc2\xdd\xacU\x9dN\xf2Zn%\x8e']`\xbc\x89\xe9^\xbd\x86\xb3\xb9\xf0\xa9\x1f\x62" ".V1j\xf9\\p\x1f\x92\xd6\x15J\x8a\x9bI\x91\x42\x92m\xbe\xc4(\xb7\x6\xa1\x17\x86Y4" "]6\xddV\xee\xf7|\xe8\xceo\x4\xdd\xbb\x3,\xf0\xdd\xa9\x7f\xd7\x33\x81HI'\x89\x39j" "D\x89\xd0\x46\xc4\xd4\xa7Y\xebH\x1c\x5\xba\xeb\xc8\xf(\xb6\x86\xbL;7C\xaa\x8a\xb5" "\x95}\x0\xa6\x1f\xc6\xcb\xb1H\x1\xba!\xe3\x62\x1c\xe9`\xb8\xd9i\xb2h\x8\xda\x97j" "]\x12\x9f\xe9\x82\xd4\xb2\x9d\xf4\xc2\x37\x8d\xf<\xfc\xaa\x17\x63\xe6\x43\x9d@\xd3" "E\x98m\x96\xb7\xa5\"\xf8\x66UK\"<\x1c\xc6\xa8\x66\xaf\xb\xfd\xc5\x1e\xd5\xbbKj\xcd" ".\xd8[\xb0\xab\xe1`\xdc\xdd\x39\x66t\x1\x13\xc2_b\xb3\xbd\xfbY\xf5\xff\x1e\xdai\x17" "\xfa\x9e\x2j^\xa7\xb1\x43u@F\x80\xf4@\xd9\x93\x85|pn\x11\x42Y\xf9\x94.;\x7f\x33&" "-\x95\xe3@\xa0\x32\x9b\xc\x87\xeb\xfap\x97\x65\xb6SC\xf8x\xf2-\xa7\xb0\xa9\x39\xc3" "\xa8+\xfd\xb4NU\x8a\x80\x18\x9?\xa3\xe8\xba\x66\xa3/xFG\xb0<\xa1X\x12\x94\xa0Y|\xc" "\xeb \xe6\xcfRe\x80\xddK\xa7\xc4{hg\xac\x61,J{\xa3\x9f^\xcd\x9a\x12\xbbT_\x8d\x85" "5\x96\\\x35\xc2\x38\x1eYC\xf4\r>9\x83)\xef\xdbR|\xe7\x62z?,\xc9/\x86\xbe\xdd\xd1" "\xbc\x9e 1\xe\x7f\x9a\x81\x7f^\xb7$\x16\x8a\xda\xe8\xa1qk\xc8\xd9\n\xdb\xfasSs\xcc" "\xf3\xc5\x1\xc3\xd5\x99\x0\x66sQ\xd9\xe7\xd3\xeb\xb4G\xfd\xca\xc6_\xd5\xeaW*\xb8" "\x89\x43\x38\x0\x36\xec`S\x13\x95\xd3\xf4\x34\x38wq\x96mo\xe\xd7\xf6\xedl\xb3~T&" "\xdb\xb7\x1e\xeb\x10\x9\x0W\xc0\x13\"-\xcc\xedJA\x96\xb5\xdds\x8e\x61 \xb4\x95\x15" "\x1em`\xec\xed\x35\x9b\x93;\x9f\x46\xf8\xe7(\xa7\x98\xa1\xfe@\x1a\x9e\x37\x83:\xfd" "\xb4\xbb\xaa\xb0|O\xf3\xf4\xae\x19\x1a\xdf\xf9\xf5\xdb\xfw\xd4\x61\x36\xcb\x46\xba" "\xa9\x42\xd6\xfb\x17\xdc\xae\x0\x7f\x61\x36\xe6\xce]\x7}\xaa\xe4~k\x8f\xb0\xe3\xa7" "n\xff\x9a\x96>\x9d\x1c\xe2\x0\xc5J`\xbd\x31O1\xda\xc2\x15\x10\xab\x1d\xd5\x81#\x94" "\xb3\x15\x86\x2M?\x85\xed\x15\x99\xfd)\xb9\xe2_f\xe3\xe\xbc\x30\xc6\xbd\xf1j\x0\x34" "\xbd\xf4l\xfb\xc3\x80\xc:\xb9\xe1\x65Z\xbb\x19\xa5\x84\x9c\xb4\x88\x8a\x35\x30p\xe6" "\xbe\xe6\x1\xef\x9f\x95\xe9\xd8\xc6;\xd7L\xe9PE1\xa4\xc8\x14\x82xY\x90\x15p\xf6\x0" "\xfa\xf4\xb4\x93\xc2\xe5\xd4\xb3,$\xdc\x19\x1ah/\xbd\x83\xf2\xd3\xdb\xf6\x37\x15" "Oq\x99\xba\xe1\xf4\x36\xe1\xe7\xe8\x1c\xde\xc1\xdb\xa0\xb6\xb4\xf5\x93\x33y\xe6\x31" "\xfa*\x9d\x8dO/\xef\xbb\xd3\x97\x15\xf3\x88wr$\xfa\x90\x90\x19/\x17-\x5\xba\x3\x9a" "GGJ`s\x88\x8e\xee\xbd\xa7\xc8+\x19\xd1\x1az\xadN\xe2j%\x82\x9f+\xfeWJ\x12\xc1\xc0" "t\xd5\xac\x15\x1bn3\x1d\x99\xee\xea\xc4\x30\x92\x45\x93\x97J<\xca\\\xcb\x89\xba<" "s\xf2\x19\x9f\x43\x43\xe6\xdd\x62\xba\xa5\xde\xf2\x96\xce\x31w)~\xfa\xe9j\xfcv\xfd" "\xe5K\xe1\x95k\xf9\xa8\xed\xbd\xa1\xa3\x97\xb8\xbfu\x7fJ\xb6\xe2\xb\x19\xa0\x3\x9d" "\xef\x9f\xd7\r\x90\x16G\x9f\xe9\xd9\x84\x42-B\x82\x0r\xb6\xa9\nx\xd7\xfb\x8e\x83" "\xcd\xc4\xad\xa7\x9f|\x85\x3_j\xc8>I%\x95\x32]-\xef\x98Q\xea\xd2\xd9\xa4\xc9\xc6" "\xb4n\xb9\xbf\x9d \x81\x36V\xfb\xd8\xf2\x92\x8a\xb2u|3\x13gB_\x83)o\x85H?\xe3\x43" "\xd5\xbe]b\xbbnw)\xc3\x80\xc8\x1d\xe5\x89[\xf5\x19\xfc\x93u31\xe3\x0\xc2x\x14SI\xca" "\x83\xa6\x88\x37\x6\x88\x8c\x8b\x15Gh;\xb6w?%\xb8\x1e\x95\xe1\xb0\x42\x9a\xf\x9d" "\xc8W\xb0\x8\x35\xd6\xd2p\xd5\x45m\xd5 C^\x19\xbaY\xad\x8a\xef\xc9T\xb2P\\\x13u\x1a" "`p&\xd2\xb3\x18v \xfa\xb9\xa5\x9d.F[\xa8\xfc\xdc\x85\x46\x35\x94\xba\xe9\xa6\x89" "\x9d\xfd\x15\xf6$'S\x1aP\x95\xf9\xf6\xf3o\xbb\xc\xfax\xa1\x19\x8c!\xe0\x44\xed\xb5" "\xad\x85,\xbd\x82\xc7\x85-z\xdf\xbd\x10\x9bQK\x7~I\xce\x66\x45\x87\xd7HRc\xa2\xc9" "T\xcd\xd8\x88\x90\xa6\x14\x42\xcf\xe2\xfb{\xc3\x65\x5Q&\x7\xe0\x85\x9a!\xaf\xad\xee" "\xdb\xab\x15\x5l.\xae\x8c\xfb\n\xa1\xc0\x9f\xeb\x38\x84x\x84Z\x8f\x85\x15{\xb\xe0" "Z\xa3:?\x84\xce\xee\xc3\x97\xf6)\xd2Y\xad\xe5\xc4\xf\xf0\xc0\xfa\x10\x96\x31+7l\xf7" "iSZs\xf0\xa3:\x12\x1f\xd8\x98\x30Ln\xae\xf0\x43\xa5\x8a\xf3\xdb\x31\x91\xdf\xd0\xc1" "\x5\xcboEr\xc5\xea\xbe\xf8U\xcd\x86\x9?\xc6\xac\x7f\x36p\xe6\xd9\xa4\xad\x9c\xb2" "\x86\xc8\xb6\xc0u\xde\n\xdd\xcf\xc4\xdd\x17\x35%s\xc9\x1w\xc8KW&\xca\xa6[\xf5\xd2" "\xc3Y\xc9Z\xe3K\xa8\x9b\x96\xd9\xdc\xe2\xb6\xf2\x2\x66\xf1\x10\x11\xc`\xac\xd2\x91" "\xb5\x80>N2\xd2O^[\xff\x0\xff\x62\xa4U\xb7Q\xe5\x41\x81\x8\xa6\xab\x7f\x6^\xd7\xee" "\x94\x5\xcb)\xe4\xc\xfb\xcfj\x1f\x5\x8d\xcd\xd3-P\x19m\xb5'\xfa\x62\xf2G\xbc\x65" "\xd8\x99q\xbbU\x10\xad\x93\x34 \xd2\x64G\x97M]\xef\xd3xq\x91\x99\xf2!\xf2\x16\x5" "9\xa2'\xa2;]d3u2\xedSO\xa5|P\x1e\xea\xb8*\xef\x37O\xb9\xbf\xab\x43\xb2\xe\xcf\xda" "\xa1\x0\xber\x83\x39\xda: \xfb\xfb\xefG$\xc1\x8/\x9c\x7f\xea\xdd\x36\x16T\xad \xd7" "\xcf\xb9VOf\x18\x3\xe8\xb9\x93\x61p\x95\xe8\x13\x16\xe0\xc3\r\x8d\xb\x39p\x86\x8b" "\xea\x64\x12&!\xc2\xeene@\xd5\xa2`,\x82l\x97\x63\x16\x9dk\xa9(<&\x9d.;\xc9\xc\xc6" "M\xb3z>\x1b\x1f\xee\x1c\x11\x9aX\xc9\x1e\x9e\x8b\x99L\xb6\xce\x8d\x1a\x64\xcd\xd9" "\x1a\x97\x18\x63\x11\x33\x66\xed\x45\xfc\xc8\xef\x9bs+\x10L\xf2\x4\xb5\xdc\xd2\x32" "\xeb\xe8\x2\x1ezI\xb6\xf\x41\xbf\x15\x63~\x8d\xa8\xcd\x1c\xbc\x87\xe8<\xf7!A8]\x80" "\xd5\xb2\x1a\xd4\x8d\xe9\xa3\xf5\xb5\xdc\xae\xb2\xca\xb8\xcbw\x82\xfb\x6\x9a\xa6" "\x9cs\x14\x63\x16\xe7\x97\x98\x8az\xbf=}-\xcc\x9f\x88\xd8\x85m\xa7h\x9f\xfa\x32\xf2" "\xc8\xe3\x83\xd6\xe6\xaa\xd7\x19\xa8 \xf2&\xda\x64\x95\xf7\x82_\xaf+\xaa`\xee\xa7" "h4\xc0h\xczi\x96<\x4x\xd7+b\x19{\xf5[\\\x87\xb\xe7\x9f^\x8$\xaf\xb0o\xee\x63\xb7" "d8\x17\xf0\xcey\x8d\xc5\x46\xa5\x7\x91\xb8\x9f\xbc\xa8\xce\xc9\x3\xe9\xab\xcbj\xdf" "\xdbQ\x8a\xb1\x86\x41\x1fI\x9b\x9\xcd\x8f\x12\x66\xa3\xf2OR\xf2\xcc\xeby\x84\xd2" "\xacL\xcf\x96\x9:T\xda\xc7M\x80\x13\xa5\x4W\xc1\x6\xe9U\x82\xec#G\xa9\xd9\xd5\x34" "gAdV:+\x85\x38\xfd\x37\xad\xf9\x36*\x12\xcd\x64\xb0}\xe1\x32\x2\x32\x9b\x0#X\x96" "\xc0\xaa\x65\xdd\xc2R\x83\xd8\xe\xe\xeaJ^\xf1\xba\x94W\x1.S\xe3\xbd\x11\x44U\xac" "\xfd\x98\x82\x83\x8\x83\x1e\xdf\x89y\xc2\xc7r\x91\xac$\x18\x6g\x95_pQ\xf0\x16\xb7" "\xb2t\xaf\xf0\x1fzB\x8e\xe\xc8\x36,\xa4_\x5\xa9\xc4\x98wG[\xd1Q\xe\x15\xbdS\xa4\x19" "1\xb1\x5\x86\xab\xeb\x98\x7fq\xf3'\xc7\xc7\\\xae\x19\xd2\x92\xbc\x1c\x0\xadX?li\xaa" "\xc1\x89\x1f\xbe\xbb\x1e\xa9\xc8\x8\x9cK\xc9\xe3\x9fV4\xd5\xc5\xb8-x\xc9\x8c\xfd" "\xf3\x8f\x61\x1c\xd6PC\xac\xd4\xc6 R\xcdG\x18\x1cR+\xf2\xfd\xa6\xb3 \xf7\x45\xe1" "\xd1\x89}3O\xaa~\xb7\x16\x30'\x1d:!\x94*g\x9aJ\xe0\xb0\x1e\xfc\xec}\xde\xc7\x89\x19" "]uf\n)\xec\xc9\x45\x82\x17\xbaQ!\xcc\x66\x84'\xca\x1\xeeg\x98-`,sQ\xac\xf9\x94\xa9" "w\xeb\x9a\x8c\x85\xb0\x7\xd1\x13]\x87\x32\x33\xd3q\xb2+\x80\x1eJ\xf8\x93\x19\xf6" "\xb0\xca\x89%\x89\xa6N\xc0\x2\x17\xea\xa5\x1fz\xc3:\x81\x94\x7f\xae\xb4\x4\xa7\x8b" "\xd7\x65\xa8\xfc\x80i\xd4\xd1\xf6\r_\xe9+:\xf=\xe3\x8b\xb\xad\xe7kFh\x80|#\x8b\x11" "\x16\xf2\x34\xa8\xde\x90\x1a(-\x95\xe3@\xa0\x32\x9b\xc\x4\xf4\xf7\xe9\x97\xe2/<\x11" "O\xdc[\xb7 P\xcfP\x99" "\x8\x1b\x3\x8b\xb1\x18\x11\x34\xcb\x88Gn2*\xbS\x6v\xb7Z\x9a\x81\x17\x97ZU\xaa\x95" "\x94\x1f\x1b\x86\"\xa7\xa5\xd1\x9a-^\xc3\x42!\x90\x8f\xc6U\x0\xc9Z\xf2.\xd4m\xc\xbe" "\xf0\xdc\xab{XZaR\xabQs1&p\x9f\xf0\x83\xb8k\xd3y\x1e\x18)\xafx\xde\x86\xa4\xe\xd5" "\xdb.I;\xd3\x18\xb3z\xb9\x83\xd6\x87\xad\xc5\xee\xc6\xfc\xddKN\xa0=\xe7,;\xe2\x88" "!\x90\x61oy=\xb3\x13\xe0\x81\x31\x1c<\xbc\xd1/KXv\xf2$VD\xa1v\x8\xf7w\x1a\xd5\xba" "(\x1f,\xadQH\xcfT\xc8\xe0\xa9\x82\xc4W\xce\xbd'S\xed\xfc\xc3+!-\xd9\x94R+\x19'\xd0" "\x8\\\\x~\xde\xc8\xde}\xed\x88\x66" "\xc4`\xe3\xb1\x8a\x45\xd6\xf5\x16\x7\x8crW\xf7\xf3\xe4\xf5J;!\x86\xcaw?>\xdf\xae" "\xcb \xd4\xb6\xeam\xa0Q\x1\xea\x98\xca\xfct\x91\x1\x9d\xab\x30\x8d\r\x61" "\xf9\xe9\x9a\xb2Y\xd5y\xe4\x18k\x95\x1d\xf7J\x82 Rp\x1bH\xb8\x1f]\xf1\xa4u\x1a\x41" "\xea\xbbz\x16\x44XdI7Z\xaa`\x87p^\xa9n\xa7\x98\xb8\xaa\x66\xb4\x93\xf5\xa9\xcb]\x15" "\xa8\xf\xb6RF\xd9>6\xa7'g\x93\xd1\xa9O\n\x8c\x99\x85\x14\x9d\x4\xc^\x94\xc3 \x7f" "h\x9e\xba\xc3Q\xd1K\"\x11\x80h\x83\x82?C\xd2\r\x1fL\"\x9c\x62\xe6\x8c\xa7\xcc*\xf1" "$\xf2\xb7\xfd\xd2\x7f\x19\xe6\x35x\x11t\xa4\x16\x3I\xf8}Q\xacv\xaaT\x88%\xaeuv\xf9" "\x3U\xdb\xde\xe\x80\xa6\x9c\xe9\x32k\xff\x63\xa7^\xe3\x35\x39u]\xa7\xaaQ\xcck!\x11" "x\x9 \x2\x9e\x8c\x9e\xca\xbe\x45\x8e\x13\xae\xfb\xad\xce\x66\x36\x87lJ\xf1\xfc\xb5" "\x1d\xfb\xf3?\x12.\xf9\xd7\xed\xe3\xa6\xf2,\xa7\xed\xb6\x65\xef\xee/X\x97\r\xf\x81" "V\xbb*\x10\x44\xb6\x16\xc6\xa5\x39\x65\x30\x37\x98\xf6O\xf\xe4+n\xfa\x32\xee\x0\xb6" "Fy\xe1_\xfe\xa9O\x1bV\xfc\xb6\x1e\x39\r\x7\xfc\xafl\xe0\xb9\xdeY\xb1W5=\xad\x9a\xe4" "\x3`i\xb8++\x80\xfd\x4n\x86\xe8\xe6<\x83\xba\x87Z1\xda\xde\x2\x98\xfa\x44X.ypx\xf9" "d\x9c\xf3\x86\x85\xadz\xfc\x36\x1d\xae/\xfe]\xad\x9d\xa0\xb4Y\xa2\xb4\xe6\x1a\xe3" "d\x9e\xce\x9fyH\xcdy|\x93\xe5\xc3\xc3\xac\x32\x8c\"}\xf1\x98\xaa\xb9=\xf3\xf\xb2" "\xc3\xc2H\xa2\xee\xf7Vg\x92\x98=v-\xf5\x97\xe1)\n\xb8J\xfa\x62Z\x99\xe9\xdb\x89\xc4" "1Q\x9d\xfb/\xd0S\xb3W\x8d:lRu\x8b\xbap\x8a\xaa,-s\xed\xc1\xe2\xc2\x1\x81mC\xa0k\x82" "\n:\xe3qwP\xcb]x\x9b\rL\xe1%\xe1\x43\xa3\x85\xd8N\x10\x32\xf6\xa2 p\xe\xa7\x8\x41" "h4\x9f\xea$W\x83\x1a\x92\xa9#\xc7\x9dTi\xbbV\x91\x46\xd8\xb6\n\xf1g\xd5\xdf+\x84" "\xde\xde\x37\x65%\n\xdal\xd0HQ\x8c\x6\xbe\xc3\x81\x94\xd7q;\xe1\x5K\xae\x98\x61\xf5" "EB w\xa2#G\x8f\xce\x39\x13\x64\xee\x8e\x9c\x8@\x3\xe9\x8f\x63\x87\xd0\xc8\x64\xea" "\x81V\x8[\x18\xb2\x44\x12\xac\xc8g\xec\xa2\x8\x32\xc2\xc0\xbd\xb2\xb6tB\xbdlw\xf2" "\xed\xe3\x8fW\xe*O\xb0\x15!*J\x16\x9e\x42x\xfd`\x11\xd0\x0\x39\x97\xae\x80\xab\xf3" "%\xa1W\xad\xc6X\xd4\"\xe3\x6\x83\xa7Z\x8c\xac\xbd^\x8a\x35\x7f\x1a:\x92\xf\xf1\x63" "\xe2\x8a\xbb\xaa\xec\xac\xffum9G\x0\xa3\xfb\xbap\xb8\xf8+\xe3\xd3\x5\x0\x9dJPL.\xb8" "\xd9\xe6\xf7\xeco\x9b\x1b\x31\xf1v\xeL\xdc\xf1\xcb\xd9L\x92W\xe1\xfbM\xa3o\xc3\\" "dc\xa1T\x98\xa0\x12\x1dU\x8f\xa5\x39\x4\xa1\x93G\x16\xd3r\xfd\xc2)nq\xd5\x66\x65" "\xf1\x90\xe7\xc0\xbd\xb7\\<\x98\xb1\xbb\x88`?\xa1_\x9\x65\x1\x10-O\xcf\xd4\xb6\x98" ":\xed\x12\xa6`,\xc2\x43\xa6Q\x8e\x66\xfcX\xa2 \x89:\xb4\xa3\xd4S\xb7\x81\xa7\xb9" "\xd5\xc8\xe\xab\x66(\xfc\x1e\xdf\xa5\x36r\xf8\xb5\x14\xb\x82\x4\xb2)\xc8\x44\x9y" "R\xaf\x18\xd3G\x89\x37\xc2\x31\r\xf2\xd0\xe6\xe8\xbcMZAU\x18\x9f_fI\x16\x13\x87N" "<}\xf0`\xcP\x1b\xcd\x32}\xbc\xbf\x66[\x0\x89gv|N@\xf1\xef\xa4\xbf\xc6\xee&\xb2V\x94" "b\x8a\xc4\x8e\xb4\xfe\xa0\x85\xb8\xf6\xe9\x7f\x1b\x97\xb\xdd\xa2&)\xd8*\xa5\x33\x46" "\xa5\xa4\xf9\x14})\xe2\xa6\xb5\x96).\xb1#\xba\x88\xf4\xbcn\x8b\xe8\xb\x33\xb2 \xf" ".\x8f\xd5\xa7\x10\xe3\x61)\xc6\x33\xd1\xab\x42\xbc\xcb\xa1(\xfb\xe4\xae\xa4R\xaa" "\xb5\x1a\x81\x87\xff\xf6\xc1\xfc#\xbb\x1a\xb5/o\x9a{\x88\xc2\xc1S\xf5Ne%\n\xd9\xf" "\xf1\xbd\xe5\xc1\x42\x8d\x62\xa3-\x7f\x99y\xbe$\xa6\xa4\x44\xd0\xf7\x31%g\xc9\xfc" "\xdb\xc6\xe5\x97\x43\xfb \x1b\xefV\x14p\xe5\x81v\xe8!\x1c\xecsL\xd0\xd2\xab*aom\xdb" "\xaa\x11r\xa0NDZ(\xf5\xcc\x7f\xb3\xa5\xa8>\xf4:\xf4\xe2\x9aI\xd2\xce\x41\xfb\xdf" "\xd6T\xed?\x85\x63{\x17\x12\xef\x12\x44\xbc\xa7\xaf\xfe\x83v~\x8a]\x9e\xb3\x31x\xa7" "\xcc\xc6\xf5\x33WF\x1e\xaaO-\xda*M{\xed\x8a\xa1\xd0\x64\xaf\x91>\x1f\x8d\x6M\xf1" "/7\x95\xa0\x89\xc5>I\xed\x8\x30\xc0\x1e\xe0\x1e\xf5\xea\x9a\x35\x95\x34\x1\xd6%\xeb" "\xb2\xe1\xb2-\xcd\x30\x1b\x45\x1cY\xfc\xe2\xbcX\xd0\x9f\xef\x36%\x37U\xdc\x95\xba" "!\xf6>!2m\xfc*EQW\xb1Q\x15\xa7\x95~\r\xd4\xb1\xf3gxg\xd4^X\x14\xb4\x93N\xc7\xe`V" ";\xc1\xab\xb7h\xa2\x16\x63\x30%\xd7\xfkF\xaas\x1d\xee\xdb\xe7\x88\x43\x30\xef\xb2" "\xbb\x66Y\xa1u=41\x93\x9f\xfe\x93P\xe\x91{\x9a\x4L\xfc\x44\x8d\x85Y`\xc6\xe0\xe1" "\xd8\xaf\xd0i[H\x15\x38N\xfe )\xd7\xcbK\x4\xf1\x98W\xbf\x36v\xd6;\xb6\x34\xa5\xad" "\x86\xb6oLp\x85z\xc5\\w\xc7{\xd2s\xc4\x7f\xf9\xb0\xf0oG\xa1UVq\x2\xc6]0Qr\x19\x1d" "\xcb\xc9\xa4U*\xf1y\x6\x93pA\xdc\xe5\xd2[\xe8\xf7\xb8\x9e\x34\x63m*\x96\x16\xc9\x0" "F\xc3x\x8\x5\x8f\x86\x9a\xe9\xc3\x99\xb8\x12h\xf3\xa0\xb7\xf1RG\x17\x6\x35\x96\xdd" "\xf8\x16]%5\xe1\xfe\xef\x13\x1\xdf)\x18\xb6\x8cXZ\x1e\x9b\x1d\xc7\x7<\x80\x87*\x9PQ\x8eL\xe7|\x8\x90\xa1\xc7\xc8" "\xa0\xe4\xfe\xb3\x13\x89\x91\xe\xa6\xbc`M}\xd5\xc6\x10\xab%}\xb7\x64}\xfb\x88\xc7" "\x8\xe1\x1b\"\x63\xbb_\x7f\xb3\xe9\xb\xd8\x8e\xa0 B1\xe9$\xf9\x35\xa7\x39\xf0\xf9" "\xce\x5n\xc9m\xc1\xa2#Q\xa4\xdfNr\xb9\xa4o\xcb\x41\xbaz_\xca%\xdaN\xe3\x17\xa0\xa1" "\xb5)\xcf\x94\x61\x14q\\\xc3\xbb\xe5\x61\nv\xa7\xb7\xafLA\xdd\x31WL\xa3\xe5\xab\xc3" "U\xc6\xbcU\xec\x16sp\xdcn\xd5\x31\nT\xef\xbb\xe3\x36\x11\xde\xc1\xad$\xf4\x91#N\x8e" "w\xa7\xca\xac\xb6\x8b\xc3\x64\"Y8y\xfc\xdc\xd1\xeb\x9d\xf7Gz\x18\xf\xf3QV\xa4u\x7" "\x8a\xd3\xf5]7\x80\x98\xcf\xc0\xea\x10\xcb\xb4\x83/\xea\x38W\x1%\xb?\xc5\xf2\xb4" "\xc6w.j\xb\xd0\xb\x81HR\xbb\xae\xc1\x82r\xc\xe4\xa8W\xd9\x1d\xf1\x64r\xd7\xab\x94" "f\xdfI\xc0#\xe7\x33p[\x97\xd3\xefw\x15\xa2\x11\x45Rz^\xd3\xff\xb7\x33\xde\xe9\x11" "\x1a\xb5i\n\xae\xc2\x35\xe2IYF\xbd\xe6\x45\x85\xa5]\xdf\x31~nC\x8R\x90Y.\xb6Z;l\xbe" "KI\x89\xf0\xee\x44\xaf\x66\xad(\xe7\xd9\x9e$\xe5\x1c#\x8a\x97\xeaMdE7\n?\x1e\n\xe7" "\x1bsq0\xc3@%\xaa\xa0y\x1b\x11@\xe4\x81?\xae\x17Z\x84^ZA\xd7\x9c\x6\xcdl\x81\xca" "\x88S\x17 m6hD\xafP\xf9.\xc6O\xbe\x64\xb7,\xe1\xed\xb\x8a\x34%ox\xa7\xd4\x94r\xbc" "Hg\x1a\x35\xff.\x1f\xb5\x1f\xbf\x1dR\x96%&T\xcb\xef\x34\x43\x4~Z\"\xc3\x42\x83\x16" "\xf7\xfe^#\x4\xf4\x96\x8f\x93\xbb\x13\x84\x64\xfbU\xa9\xfI\xa6\xd4\x17\x42\xbb*\x2" "\xd8\xc5O\x0\xc9\x37.\x9e\x95\xac]}#\xed\xf9\nl\xb7G3/\xe1\xe3\xfc\x91\x86LZ@\x95" "\x86\xbb\x85,y\xc2\xde\r\xbc\x1f\x83k\x17\xb7\xfc|\xdb\x15\xac\x81\x81_\xecX\xfe" "\xb6\xc6\xdd\xb6\x35\x3\xcf+\xe5\x46\r\xf2\x95\xc9\xcd\x39\xd9}\xf7\x8a\x45\xf3\x1b" "\xdaM;\xcc\xc2\xe0,\xd7\xd6\x90\xd2s!\xdc\x5T`\x88T~A\x8\xb7\x1c\x84\xeam\xccU\xf5" "\xd5\x12!7\xbd\x1bn\xe5\x30?Yy\x9d\x8a\xe0\x8f\xba<\xdb\x93\xc7\xf7\xbf\xf9)\xba" "\x97\x12\x80\x9f\x85\x86^N\x81v\x98\xa4\x62\xc1\xe\xc8\xf9\xf7\xaf<\xda\xdc\xe2\xfe" "m\x87U\x9d\xc0\xeb\x9eL\x86\xd2\x92\xb1T\n\x8e\x39\x8c\x37\x15\xa1\x63\x42\xd8\xf8" "<\x8\x93G\x8b\xf7\xbe\x85\x94p$\x8a\xeT\x94g\x92_\x7f\x82\x45\x1fq\x1c\x7J\x9c\x5" "\xa1|\xbb\x38\xe7{\r\xe7\xb4n\xb9{\x9d\xca..A\xafKY\xbey_p\"@m\xf0\xe3\xc3Up\x9d" "\x9b\x89\x8a\xc6\xbf\xef\xe0\xc8\x62JS\x8e\xef\xbag\x88\xa8Z \xb3w\xd5-\x90\xe3\xe1" "\xce\x94\xb2\xf1mp\xe4\x16\x89\xa9\xcc\x36;Y\x4|\x12\x8b\x83\xae\xbb\x9c\x64\xf " "''\x8bK<\xd2%Q\xee\x8c'#\xde+n\xef\x14\xcaz7^3\xbd\"\xc8\x9f\xafl\x8\x30\xee\x37" "\x1c\x30\x16\xf1\x9d\xbc\x35\xe4\xbc\x80\\\x8e\x80\x44q\xeb\xb8\x95L:\x90\xeex\xc5" "\\\x97\\^t\xa9\x9b?@nE\xff^\xe4\xfb\xe\xb9\x13\x81\x13pk\xf4\xf\x13\xc1\x98Yy\x12" "x\xfe-\xa4\xb5\xbe\\\xffW\xc7\xa4\x65^\xecp\x83/1\xd1\xcb\xcfr\xa7W\xee\x4\x6\x15" "Lt\x14M\x88\x90\xc4j\xf6S\xd8\x7\x64O\xa8\xedi\xe3\xb4\x81\xb6\xd7\xc9\x45\xc0\xce" "'\x86\x97\x1d\xd0\xed\xce\xe6\xce\x7fjj\x89\x41l\xcc\xc5\x42\x89K\xfa_\xab\x8f{\x9e" "m\xbdi_\x9a\x1a\x94O\x17\xea\xb9\\\x82\x44Q\x82\x15\xb&\x93\xb6\x7\xa6~\n\xea\xb7" "\x81\x7f\x18\"~\xb\xfd\x2\xce\x8d\xf3J\xdb\x2Z\xce\xe6\xaf\xc4\xe2\x82\xd2\xbaR\xe" "\xed\x98~\xc8\xe7\x0\xb1\xeb,\xce-p\xa8*`b\xb5\x9d\xf6\xb3\xe2|\x9a\xfe\x46\xef\x1f" "X\xa1\xf9M\xfc\xf5w\xc4n\xcaQD:\xed\x42'\xc2\x97\x2\xbf\x81\x4\x80\x11lB\xee`\xca" "\xf8`3QA\xb8\x39\xf3\x35\xf8\x86\xdb\x61l\x8f\xbe\x4w\xc2\xa6\xb9%\xb9\xae\xe8\xfb" "Y\xfb\xf0[\x8e\xa3\xe4\xfe\xb3\x13\x89\x91\xe\xa6\x93\xbfySl\xfe\xc3\x30L\x89{\x8a" "P\x8e\xd3\x83\\|\x4h\xd1\x30KZ\x92\xe8\x9a+\x81rv\xab\xa0 a\x9\xc8\x89u\xb\xe5\xbd" "eC\xbe\nt\xbd\x41\x35?\xac\x87\xb0\xcd\x86\xa9\xe3L\xc5\xec\x9c\xd4u\xab\x6z\x3\xea" "[\xb5>1\x7f\x17M{\x18\xfa\xd3`\xcd\xca\xc5\xaf)KbNzR\xb6\x38\xdb\x1c\xb1#\xcc\xff" "iW\xa5\xba)9U\x9f\x96\x9e\x9c\x38\xdb\xa8\xfc>\x81\xd5\x66\x3\xee\xd0,$\xc7}\xbf" "\xcf\x3\x8aY\x16\xc3Q\x88\x1c\x62~\x7fg\xdf\x63\xb1X,\xe2\x1\xe7\xc1\xcb\x8c\x35" "\xeb\x8b\xaa\nO\x8\xe1-q\xe9\x64\x95@\xc8\xd3\xc4\x41\xc6\x99\xdb\xad\x87z\xd5\xa5" "\xe6\xd5K3\xa5\xe7>\xdbG\xa4\x96\x1cQ\x0\xb6\x6\xa2\x31\x9c\xe1\xf3\xfd#\xb0h\xac" "\x13\xe8\xde^D\xd2>\xa6\x46\xe6i2*\x81\xd4_H\xcd@\x9a\xe9\xf4\x8f\x7f\xda\xf4\xb9" "\x98Nj\x9fIl\x9fJ\x4\xa6\xa2\x63\x9e\xb0\xb1\x97:\xc9S\xe1\xf7\xab\x95\xdd\xf3p7" "\xd4$\\\x0\x11\x9b\x9d\r\xe9>\x17[\xe8\xcd\xce\xbe\x33\x82\xe\xa5\xd7x\xe1\x0\r\xbc" "`\xab\xb1^\x8b]l4\xdf\xb9\xe7\xf\x63\xc5\xd6:\xee\xe5I\xcb\xc8v\x1e&!\xcfJ\xa7.<" "u\xd3+\xdf\xc\x1d\x1d\xb\xc8\x1a\x8e(\x9c\xbc\xfe\xd7\x2}\x94\"\x8d\xd8\xe1\xb5\xaf" "f`\x98\xf7J/X\xa0\x33'\x7f`K\x87\x10\\\x0\x38\x10\xf1\xf8\xfb\xaf\xcb\xac\x13<`%" "\xd1.\x13\xd9\xde]j\xaf\x9e\xfcO\x8b\x89\x6\xc6\xa7\xe3\xd7\x17}\xfb\xe2\x83\x11" "\x7}\xa0\x30\x93\x8ehE\xd6\xaa\xb4:\x1d\x1c|%\x0-\xd1\x32\xb4\x12\xfaV\xf0\x8cm\xdf" "\xbfL\xc6\xe0o\x7fN\xc9\x38\x65\xbf\x90\x90\xc7R\xb1\xfc\x34\x10\xdb\xc4\xc8\xc7" "\xe9\x1e\x13\xf6\xa3\xe7#\x9\xa6\"Y\xf2\x1d\xe4\xdc\x84HFBp\xd9\x0\x9f\xaf\xff\x15" "e\xde\x45[\xaa\xea\xe1\xa2\x11\xe9\xc1w\x1f\xdf\x46\xd3\x13\xb7\xcb\x4\n\xd1\x61" "~\x1e\xc0`wB=x\x86\xb2P\x9c\x8a\xa0\xf9']\x1f\x36\x7\xdd\x9e\xd1x\x13\xf9\xd2\xe" "\xa2\xdd!\x93^bc\"\\MKu\xd9\x7\x19\xf1\x14\xa6\xb7\xb7\xe3\xe6\xb4.\xa4\xdb\x97\xe7" "\x12*\xd2\xbb+\xf6\xf2\x98\x0={\xe5pg\xe\x9f\xce\xa4|@!\xa7\x8bQ\x94\x18:M\x1c\xa1" "V\xa3\xbav\x98\x42\x82r\x2\xfa\xab\x9b\xad\xa3\xa1\xc7\x64&\xcb\x9d\xe3\xe1\xbd\x16" "\x15\x83\x80%u\x2t}oL\xa1\xba\xe3\x9\x17\x14:\xd3\xf9\xc8\x1a\xfc\x9e\x99+\xb9\xb2" "G//\xb1\xda\xb\xd6?\xf4\xb8\xa2]\x1b_2\xcc\x9e\xc7\xa4\xaf\xbbQm\xab\xb8%\xafhS\x7f" "i\xd2$\xa3\x5\xecj\x1f\x2\xdd\x9b\xa9V\xae\xb2\xe2u\x9d\x4\xaa\xf0\xa3 z\xc0\xb7" "\x9du~kou\x9f\xdb\x45.\xfa\x0\x85\xe3Z\\\xed\x65\x12\xe4)?,\xfb\xc6\xa3\x82\xa2\xb6" "\x96+\xf1\xe3\xc1\x9f\x13\x16\x8f\x37\xc1\x90h\xbz\xae\xc1\xde\x17\xe\xda'\x94\xd4" "\xa9\xa3\x30\xc3\xe2IC9\x7\xc8?yNz\x8\xe1\xf3\xf0\x38\r\xfe\xf3\xb4HL\xe6t89\xed" "r\xee\xe4-\xc4\xc9\xc\xa1}\xfew\xef\x90\x3\xaa\xa5\x8a\xe0\xc1X\x94\xc\xc8l>\x98\xb1\xa1\x7m&\xdb\x35\x13V\x95\xae" "\x98\x83\xf6\xfe\x4\xd9\xf6\xbcZK\xb9\x35&y\x16\x18\xbf\xd2\xd2q\xe9\xe6)\x11\xf" "\xe\xea\xb1\x84\r\xbe\"\xb4\xea\xca\xbf\x1b\xf5\x81\x12i\xdc@\x8e\x12\x16\x8pb\x19" "Pv?\x9c\xf7o?\xb1-1\x15\x84\xf4p\xc5\x1d\xb5\xd7s6]\xf2n\x91#\xb\x19\xa8\xb1&\x89" "\x85\x33o\x8c;\xfd,\xaa\x33_\xb4\xc1\xf2@\x1b\x8e\x19\xee\x30kO\xf4\xaf{\x8e\x4\x99" "\x8c\xedgK\xaa\x9a\xcd\xe7\x9e@\xc5\xd8\xee\x9d\xd5tV\xca\x8d\xd6\x9f\x8d\xcdQ\xbb" ">\xd0\xce+A\xa5\xb4\xd8+fGo\xb9\x1e|$h\xfd\xa2\xd2\xad\xcf+X@(M\xe5\x97\xfdj8\x7" "d\x89\xb6\x1f\x3\x6l\xde\x17\xed$\xc9\xccq\xb4\x1dJR#~\x1b\xbc:\r8PDhf\x1f\x39\x1b" "\xa4\x45\xb2\xe\xbf\x3\xb0\xad\xea\x11\xafPL\xa9\xf8o\x9\xe9\x43\xde|{\xe9\x1c\x4" "\xd7F\x81r+wE\xad\x16\x1a\xf3\x9e\xf2@z\x18\xc5\xfa\x93\x1a\xca\xe3\xc0" "\x89\xe8\x1b\xdc\x35\x94\x17\xa8\x16\xd3\x18\xdc\x35\x42\x9cz\xab,\x83\x8f\x31)\x6" "\xca\xa0\x5n[\x12pjuru\xee\x10\xb3H\xe8\xda\xb8\xfa}\x93ZO\xd7mz&\xf6\x18\x1e\xb8" "U\x9e\xcf\xa8\xab\x64(\x8b\xeb\xfbo\xe9\xa0vn'\x98yA\xde\xc9W\x9aK\n\xe7K4\xdd \x91" "\xdd\xf7\xc5\xf8\x19\xe4\x30\xb4\xc4+#\xd1\x33\x1e\x93_\x94\xf2\xa5\x8aJ\x11\x8d" "D\xce\xb6\xe1\xfev\xa5WFw\xe4\xe9[\x1f\x84\x92+\n8\xf0~AU:\xa7\x46\xfc\xa8[\x9\x1e" "\x8d\xc\xaf\xac\x81\xa3\xbdH\xbf\xe2\x5G\x8f\xb0\xaa\x8e\xb4\x82q#\xef\xc2\x8b\xd7" "\xe4\xbe\xe5\x90\x97U\x0$@\xd2]\xb3\x3+\xd1\nG\xc7\xbb\xc0\x32\xdb\xc8`\xf4m\xdb" "_Ot\xbf\x37\x87\xc6\xc5\x8d-\x93\xbe\xda\xbc|GS+Kk3\xc0)5\xb\x42\x46\x8\x43\x93J" "\xad\x10\x84\xa9`\x92G~\xa4\x9e\xd8\xca\xa1.\x8\xa4!\xea\x86\xa8.a\x18\xd5UpOe\xc8" "\xe7\xf9\x9d\"\x80\xbcU.\xcd\x4\xe2(\xc4\x8c\xb1\xbev\x85\x63n\xbb\x30 \x94\x93\xc3" "e\x1a\xe9U\xa4\xdb\xfdz\x6O\xe6<\x5\x3\x9\x38\xc1\x8aK\xe5X\xd0\xbd,\x85\xcb\xd6" "l\x96l@\x88;gL/9\xb9:\xaa\xc7\xe7y\xd6\xb5\x0\x80;m$\xe7$\xf2\x61J\x80+/l\xaf:\xb" "\xc0\xcc\x1d<\xcf\x82<\xa5\xe9\x64\xc8\xf7'\xf0(\xb\x64r\x99\x99\xbex\xb4\xc2\xe6" "~\x0X\xfb\x9b\xe3\xf4\xd7\x8e\xbbY\x13\xaaS\x18\x99\xd8\x62\xb\x97\x65\x87w\x16'" "\"\x1b\xae\x17\n\xd5\xa2\x33\x80m\x9c\xd1\x36\xef\x65\x64\x84\x64!R\xea\x3{nq8\x83" "{vN\\\x85\xd8\xc2}\xc1;\x8e\x42\xe4Pd\xb6\x9Uy8\rC+x\r\x10\xd8\xb9\x1c@\xa4\x35\xa1" "\x5R\x9b\x0M`\x84\xe9L\xc9\xf4\xa6\xd9\xebk\xcf\xf\xf7@e\x89\xd4\xf6\xb5\x33@\x8f" "=s2Yk {JdY:=y\xd8ZL\x9e\xc2\x10\xe5\x8\xbf\x1b\x9b\x61\xd9\xdd\xfe\xde\x31\xae\xc9" "w\xf1\xa7\x19o\x19\xb2\xc6^?]\x80\x32\xfc\xe0\xb5\xc\xb7\r\xf1\xd8\xd5\x31\x16\x8a" "\xc0\xc6\xd5uw\x8b\x0\x8ck\xa6\x16\xab\x12\xb6\xfa\xc2\x9b+5\x1\x87\x8d\xba\x0\xe1" "\xdb\x9bK\xef\xa0\x8a\xc0\x91\xf4\x93\x7ov(\xde\xe0\xe6\xe7\x9f\x86\xdf\xba\x81H" "F\x9e\x14\xbf\xd5\x84\x9<\xce)@\xf3\x37\x90\xdd|\r\x19=\x8a\xdd\xd2\xad\x66ub%PN" "v\xc4\x30\x1b\x2\xcd[\x10\x89\x91_\xf3NBn\x86]\xc8\xba\x1e\x64\x7fJ\x8b\x8b\x4\x2" "\x8f\xcc\x1\xcc\xfc\x8b\x19j\xeb\xf4n>!.*E<6s\x83;\x9bP\x16\xee\xc4\xcf\xf0\x89>" "\x8d\x65\xa7\xcHN\xec\x8f\xef&na(9\xb8\xfaU1]\x6\x17u\xc5\xbe\x4\x87\x8a\xa5=\x6" "X\xc1\x11\xd0\xcfV<\xe4_wI\xb4\x7f\x16\xa7\x36g\xe4\xfb+\x19\xdc\x9b\x35\xc2\x36" "R\xc1\x33\x39\xe2\xb5\x41\x45\x5\x7\x9f|\x8c\xc-\x14\xc3\x88\xf2\xbd\x36\xf1\x7f" "3\xe8m\x81pfZ\xbb\x36S\xa4Y6\r\x9kOn\x6\x94\xb7\xd8?y\xc1K\x2\xf0$\xebS\xb=J\xc1" "\xb0W\xb7m\xb0\xc0\x61\xcb'\x96%\xfeNI\x9f \xc2\xce\xcd\x5\xc5\xb9\x4\xf4&\xe\xe1" "Sg\xd7!):\x96\x9c\xe1\xea\xc3+\xba\xe0\x9c\xec\xa9\xd9\x93\x39\x8c\xb3\x41'\r\xb5" "\xea\r\xfa\xd4nn\x1cj\xb4\x1d\xa9%\r\x62\xf5\xa9H\x9dv\xb8\xdc\xa7&\x9a\xdc\xdeQ" "y\x7\xe3\xf7\xd4T/\xac\xf0\x1f\xccw\xa8\xa5\x12?\x7\xe7\xa1\xfa\xb7\xf1$\xdc@\xb" "\xcc\"k\x85\x81\x1c\xd3\xa6\x30p\xee\xe2\x1e\xa7\xa4lBw\xb9\x61\x64O%\xb4z#\x87X" "\xc3\xc8\xbd\xd1\x39\xd5\xc0\xf2\xa9\xc6\xb2\xcb\xda\x1e\x9bvH\x8a'\"$\xdb\xffY\xa2" "h9\x14\n Tg&ZOYT*\xb1H\x88\xe7\x1a\xc7X\xd6)\x13\xff+\xb1}/'\xf1-\xba\x82:9\xf9%" "(\x9c^\x9d\x1\xbdO4\x4\x19w\xdaI%\xcfI\xf7Q\x83>\x83\x30\xaaL\x98$\xcc\xac\xac%\xff" "\xe6\xea\xef\x9a\x98\x92\x9e\xa4n\x1e\xff\xb1,p\xff\xed\x18\x6\xb0\xf6\x8c\xcb\x14" "\x16\x62#Rio\xe4np;*\xe6\xe3\xaf\xdb\xe2\xf1xP\x3Oy\xaf\x30\x8f\xda\x1f\xcf\xbc\xd7" "[\xf2\xc1j$\xe1\xf4\x5\x9bvL\xab\xe2\x82\x1d\xf0\xd3\x7f\xac\x84\x9\xff\x31h\xd4" "S\x4\x44\x95\xd2k\x10\xa9\x9e!\xcy)\xe2/z\xa9\xa4\x17\x32\xf5\x1\xee\x1c\x9f\xec" "j\xc0\x5o\xe6(\xc2\xde\r\x43\xf5$\x8c\xd7\xca\x86VV\xddsb)O\x95Q>T\xbb\x9b\xfdO\x19" "\xd7\xf\xca\x64G\x90\xa9\x1e\x44\xee\xef\xad\xfc\xc3q\x7f\xba\x1d\x12G5\xf\xe9\x87" "\x8c\x86\x0\xe8}~+f\xb9T\xa2\n\xbd\xad\xa4\xe5\x1b\x1d`\xc5\xbdX^\x9aH}\x8aR\x6\xa5" "\xfe\xfb\xb5\x13\xd1P\xdcu\xde\xb\xd0\x9c.\xdc\xc2\x92\x11\xea\xf6\xa5L\xe\x9\xd5" "\xa4j\xb7#S\xc4\x9a\xc8\x1a\x65\x1f\xf7\x1\xe4\xd5\xf3\xbc\x35K\xe0=\xfa\x8d'z\x3" ">\\.Q\xf2\xfo\xc2\x19K\x11\x92,\xc2-@,\x98\xe0\xbe\xe3\x4\xe3\x0\xde\xc3\xa0iC\x14" "B\x19\x64\x2\xce\x82\xb9\xa3\x93\x18\x8d\xfc\x15\x89QW\xfb\xe6*\xaf\xb6\xceg\xf\x4" "\xf1=\x16\xfb\x82\xbc\xb6\xbf\x1a\xb8&4\xac\x16\x89N\x94\x5\xea,\xb2\xc5 aD\xc2\xaf" "\x1b\xb&\xd4R+\xf5\x89\x8c\xecK\xe1_\xb0\xd9\x83\xf4\x64\x8e\x35\x87|\xcf~\xcc\xa0" "\x6\xc4\x9e\x10\x9\x1f\xaeqO\xdb\xb5V\xf0\x16\x1f\xc7p\xe5\x1f\xa4\xec\xfa\x97\xed" "\xaaHC\xc7\xfc\x30\xdc\xb7kF\xd4\xf2\x1e>a\x8b\x8\x11\xf6\xc3\xd7\xa6T:\x98-x[\xa5" "\x9d\x46\xa4H\xd6\xc\xfc\x65\x96\xf%W\xb4\xb8v\x2\xb7\x85R\xeb\x5?(\xd9\xfb\x9a\x1b" "i\xf7mK~\x6\x30\xe8\xaa\x81\x31\x92\xd5\xdc\x9c\x9e\xc5\x10\x11\xe\xde\xe3T\x19Z" "%cu\x9d\x46\x33\xc2\x8d\xd6\xe0\xb4lw\x8fZ\xa3\xc2\x8b\xf5\xeb\x9e\xbc\x88~\xee\xb5" "]\x0>\xb6\xbc\xe8\xd1\xf4\x2n\x7\xe5\xc5\x13|\xea\x82$\x14\xd8\xf5\x61\x98\x31pj" "\x1b\xb3\x32\x98\x84\r\r\xdf\x9f\xb8\x9cR\x9f-\xa5&\xc7\xe8\xe4\xe0\xec\x42\xd5\xb1" "\xf4\x5\x86x\xb6\r\x13\xe4\xde\xc5\xe1\x1d^\x8c\xba\x8e\x6G\x89\x61\x30$\xfe\x1\xf2" "tr\xf2{\xc0\xd1\x11H\x94\xab\xdaU\x91\xf3\xba\x82\x1f\xd9\xec\xe0%\x17\xf\xba\x66" "I\xf1ZO5\xc4Sz#C}\x3\xde\x7\xb5\xf4\xf4\xf9\xcf\r\x41\xb5_\x8c\x18\x93\x97\xb9`\xe7" "\xa2\xf5\xdc\x16\x9b\xf1\x84u\xe5\x92\xce!\xd1.>0\x2\x38/l5\xef\x97n\x9c\xb0\x8k" "@\xc2o\x97_\xe9\x85\xadJG\xed\xe5\x0\xa9\x81\x80\xb7\x18X\xeb\xa0{K~l0oQ\xb9Nvg\xfb" "(E*\x7f\x8\xb9\xf6Z\x16\xb3\x7\xd9\xb1\xa5\x90\x90\x4S\x18\xbe\x64\xa1\x13L\xd9\x62" "U\x81\xaf\x37\xa2\xdd?\x8dh\xe6{4\x98\xa8i\xc4\x94\xb6(4Y8M,A\x98\x34#g\xa9\x15\x17" "d\xc0m\xf1\xe5\xcf_\xce\xeb\xa9\x7f\xbe\xc3\x8cN\x18\xb6zN\x8\x13\x8aW\x80.\x7\xbd" "B\xd3\xbb\xdf\x1ay\x9b\x42iA2\xea\\\xf9#\x14\x89\xfc\xf0J\x15\"\xbe\x1b\xd6\xb8\xea" "\xda\xb4\x17,t.`d\x10\x11\xf3\x1b(\xf9\x1b\xe3\xd8\x19\xe4\xc3\x8\xb4\xf4\xaf\xde" "\xfc~\xb5\xd1\x82\x81\x45\xeb\x1c)\x14Tx\xa0\xcc\x13\xe5V)`\x9c\xdb\xfb\xa2\xdf!" "\xfc|\x8b\x32\xaa\\\xf9\x33\x9d\x44H\x8dX\xdb\xd6\x98\x7f\x9k\x6\xa9!u\x98~4\x17" "\xf0\x1e\xd4\x66{\x4JC\x19VY\xab)\x9-~\xca\x93\xadjV\xa8\x39\x83\x1f\x1a\x8d\x11" "\xe]\x98Z\xac\xd1\xc5\xd1\xe2\xbc\xe0\x2yGA\x8c\x41\x8\xa0\xa4\x88\xfe\x38\xa2\xbf" "\xcf\\\xa0\r+\xf4\xad\xf3\xb1m\x99\x8c\xefO\xe5yz]\xda\xb0\xae\xbcv\xb9@{\x7\x46" "\xe9\xb\xef\n\xc1\x85\xa4\x91\xf9\x94\x96\xda\xdeW\x88\n?\xca\xa2\xbdT\xc9Y7]\xe0" "\xd2 \xa2\x37\xe7\xa2#k?\xd5\x9a\xf8\xe2y{\xb5,\xa0V\xc4\"\xd6'\x91\x1e\x85\xb3u" "\x18:\xd9\xed\x1f\xdb\xeb\x5\xd7H\xe1\xe8q)?a4\xd3j:\x83`\x1\xcb\x63Y\xfc\xba\xf" "\xf7\xe9\xf8\x95\xdf\x64\x9f\xe5\x99\x1b\xa0\xf2\x92\xd5\x13\xb3Y\xfe\x34I\xf3V\x86" "\xddu\x83\xfeK\xc0\xa3\xa3\x8bw\xd3\x83k\xc2\xd6\xc4\xfc\xcdo\xed\x37\xb0\x7\xa5" "\xb\xad\xb9\x1dg|\xd9\x45\xc3h\xbf\x89xL\xa0\xda\xdb]\xeh\xcOg\x9\xd6-\x2\xddW\x8e" "^\x19\\\xaf\xb0\xee\xa9Oa\xae\xee\x5\x10\xd8$|\xff\x7\xac\x13%\xa5$\xd6v\x16\x1b" "\x9b\xfd\xcd\xddVFCk\xcc]\xba\xc1\x84\xdc^\xb9\xae\xaa:\xb5\xa5\xf4\x6\x8b\x93\xdf" "\x1aJ\xcf\xa1\xba\xc5\x82\x82\xb3\x8a\x92\x3\x46\x6##cS\x8f\xf4\x8e\x7\x93M\x1a\x9f" "p \xf2\x95\x99\xff\xdd\x37\xd6|9\x8e\n\x86gg\x83\xa9\x1\x94\xb8\x18\xc8}\xdc\x44" "\xbf\xf8\x19\x66\xe8\x45!\xfe-\x1a\x11\x98M\xed\x9eoH\xcb\xd6\xa3\xfc\x15K\xdf\xac" "a\x16\x8d\xa2O1\xd5\xce\x10\xb1\xe>\xcey\x11v\x8b\xf9IA\x13|\xef[V\xa2&\xc0\x90K" "\x9e\x99l\xbfY{\xfcPZ\x8f\x1c\x9b\xc\xac\xdd\xc0q\x12,\x99\x87\xef\x9b\xe5\xcb\xd1" "2\xbf_{\xa9\xcf(&\x88T\xf3\xf8\xb3\x8e\x9(\xc7S\xdf\xb\x90\x2\x9b\x34\xe0\x9b\xaa" "U\x9e\xfa\x99\xd5sED%\xbb\xc3q\x14\xdb\xe9&\xac\xd1\xc2\x8e\x98\xc2\xad\xb2\x99\x1f" "\x86\xd5\xee\x1\nu\xc4\x85\x19\xce\xa7\x1f\xf1\x8b\xd3\xeN\x81\x85\xe9\x8e\x95w\xde" "\x92\x9\x2 \xa9\xf5\xd8@#\x95^h\xc3t\xa1\x8\xe9_\xae\xc5\xe1\xcfs\xf2\xe2V\x1aT\xe4" "\x87\xb0\x1cq\xec\x34\x1f\x8fP%\x94)\xa2\x8f\x66W\xc7ow\xb6\x97\xc4\xf4\xb9p\xe0" ";\x8b\xbaS^\xca\x15vz\xc0\xa0\x35\x9b\x8e\x93\x99\x39\xe7?i\xfd\xf+z\xa7h\xfb\xc0" "\x8b\xdfo\x82\x0\xd6\xac\xfb\"\x32\x80\xc6\x18\xc1\x81O\x11.\xe0.\xf3\x32\xa5(\xb6" "\x0\x9a\xa9~.2\xb7q\xf9\x9\x15\xe7\xe0\x94\x90qST(\x18~(,\"l\x19#v(\x9a\x94\xa3\xa6" "\x16\x7\x95%\x1c\xeb\xe0\x1d\x7f%\xa3!n\xa2\xf6\xfcx+/\xc8\x8d\xdc\xa7\x35\xf5\xc2" "@\xaar\\\xad\xa2W.nT^\xc3\xfb\xb6\xdc\x6\x33\x33\x98\xf1\xcf\x9a\x89R\xad\x42\xf3" "I\x8e\xac\xf1\xbeT\x94\xdc\xf_=\x1a\x7f@\xa6\xf8Tf\xee\x12Z\xe9\x42\xe3\x99\xde\x39" "\x9a\xbd:X\xe5\xeb\xba\xda\xea\x91\xd4\xbb\xe5\x16.\xa7\xbd\x1dw60e\\\xa2\xe2\x94" "am\xf4\x35\xdf\x85\xb1\xa0z\xa2*\xac\x98'\x2+\xe2\x8d\x12\xb6\x8\xc1\x99\x8V~\x15" "N \xc7\x39\xc2\xdf.\xeb`q`z\x87=\xba\x37\xc8\x1c \\\x13\x41\x19\xf7mY\x8\xb9\xf7" "\x3\x9\xdb\xaa\x33\xd0\x6\nj\xeew\xcaN\xee$\xa9\x8f\xd6\x3\x44R\xb4\x33\xfc\x32\x8f" "M\x83m \xfc\x9c\xbfM\x18rS\xecUs\xb7\xc9z?\x8\xa7\xd6T\x9bs\x3t\xf5%\x1c\xa0\xf5" "a\x96-\xee)\xe1hy!w\xd1\xc3`\x14\x80:\xfe\x98\xf5\xb2\xee\x9b\xa6/\x3\x15k`_\xb0" "\xb2\xe4\xb5x\x0\xdb\xb9T\x19\x16\x1a\xc6\x65\xcfU\x92\x32\xaf\xb\x33=1\xc6l\x9\xba" "\xf1\xd2v\xf6\x61\x61\xd8\xaa\xb2\xa1\xae\x5\xab\x98L\xea\x2\xcf]`T\xc0\x16~~\xce" "%\xaa\x17p\xaf\x8b\x35IX^\x94$]\x9e\xd8\x17~\xe5\xb0\xa8\xfdMC8%\x90w\x13\n\x31\x36" "\x8ah\xf9L\xe1\xc2\xc8\x9b\xc5+\xfd\xa3\x30\xf8\xa2\xdf\xee\x31\x15\x37\xcd\x8b\x35" "\x9eSm\x7\x86-0\x90\xac\x8a\x81~Nx\xde@Ab\x86R?\xa5S\xa1\xf1J?\x87&\xce\x87j\xfa" "\x8e\xbc!`\xcf\x0t\nF.1e\xe7Vwn\x89\xbdn\xcd\x44\x19\xc8\x9c\xabS\xcb\xb3\xb0r0a" "\xcdt\xec\xce+'\x8e\xc1\x80\xdf\x0oQ\xaan03m\xd2\xe0\x4h\xe2\xca\xa5\x2\xda\x1e\xf2" "1Y\x96\xc8\x9a\xe6Hb\\I\xcd\xf7\x96\xb2K\x19\x8d\x64\x0i}\xc0\xc5\xd4\x96@&'i\xed" "\xe6\x11\x9a\xa5\xdb\xc4\xfb\xbbyzUTH\x85.\xc2\x87x7\x1\xb3o\xcf\x90\xabl\xf9\xe7" "\x1a\x93'\xc9\xb4\xb3\xa1\xf6U\x12\x42\xd7\x87\xb\x10\x1\x31\x88]\xb8\xd0\xb7*\x2" " \x2k\xa6\x0(\x6\xe4\xf0\x45\xd5\x89\xc4\xe1y\xfai\x80X\x16\x98\xf7\x8dJ?\x8a\xf5" "\x6l\xfbG\xcd\xef\xa4\xc9\xe5:\xce[\rI\xe5=\x7f\x3\xbc\xbc\xd5\x62u\x9c\xd5\xb4r" "\x9c \xbf\x45\xa8\xf2/\xce^\x7\xf9)\xf5>V\x9c\x7z\xcb\xc2\xe0\xf5\x15\xa4o\x8c]\xb0" "\x13\x86\x8b\xcz\xda\x83\x81\x8a\xa5(\xca\x62\xe7\xa0\xbe\xe1mzpbk2\xf7>\x96UC\x95" "24\xcf\xc8\x9f\x1bZ\x8e\x83\xcf\xdf\xeawAP\x96!\xe0\xe5\xc1\x9d\x61\x11l\xae '\xe9" "\x97\x8b\x37\x92\xaa\xd7\x88\x85 \xef\x14\xd1\x34\xd8\xbb\xef@g\xae\xccv\xa3\xbM" "\xcf\xfb'\x12\xbdlU\x83\xf\xb3\x64\x45\xc7!X\xd8N\xa9\xb7)\xf9\xbsc\x95!{\xbc\x86" "Xx\x98\xd2\x42\xea\x65\xd5\x43w=T\xe6\xa1;I+p\xb2\xda\xd0 I\xb1\xb4\xc3\x11\xb\x9a" "\xea\x4\xb\xda\xf4\x17Y\xd8X\x12\x35\x93p`v\xd6/L@\xef\x30Wm\x1c\"\xef\xf\xa5\x15" "\xa0\xf6\xaaz\x80\x91\x42.\x99;Wx\x95\x9a\xb5\x1eu)TT\x8c{G}\xea\x63\x5\x7f~\xb\xef" "8\x9e\x94\x1b\xcb%\xfb\xf9)\xf4\x90\xc9\x93\xa8\xfe,\x1KY]\x99\xefk\x7\xe7\xe8\xf4" "\x89\x4\xcc\xb4\x16\xe8q8\x1a\xd3\x6\x36}\xf7\x96\xa4i \xfe\xd2\xc7\x81\xb0S\xaa" "S\xcb)\xc4%\\\x89?wI\xc4\x46\xafn\xd1\xfc\xbb\xc0\xac\x90\x19\xbe\xa7\xedu\x8cz\xf6" "\xc5\xf\x63\xa3X\xae.\x88S\x1d\xd7\xae\x95\xc1\x98\x8b\x87\x17\xa8#9>I\xd2\xf\x5" "\xe\x31\x1cp\x8e\x1c\xef$\x6wW\x1c\x65\xc5\x36\xcf\x1d\xf6[_e\xcc\xbc\xc5\xf4.\x14" "\xa7\x11$23\x18M}\x99\xec\x3L\x9e\x8d\xf2\xc3$S\xfe\xd3\xae\xa9\xf0\"\xf9\xc9\xf4" "6\xcb\x62\n>\x1d\xe8\xc9\xa6\xf3Yw\xb1\x37\xdcH\xe1\xa5\x8e|\x97\x17Qd\x7fNS\xe3" ".\xb4r\xa6\x8f\xb7`\xd8J\x94w\\\xd7\xc0\xda\x45i\x8\x8b\x6\x10x\xc9\xd5 !\xd2\xdb" "\xb2\x82Zf\xd1\x41).L3\x81\x44\x61\x88\xac\x97Pc\xb1:\xad\xe4)\x15Q\rk\xdcm+\xae" "\xc1\x1c\xbb\x9e\xab.\xca\xae\x98\xe9\x98\x89\x15&gZ\x97\x62\x90.\xd2~3=\xa7\x98" "\x85^\x16\x44i\n\xb4Z\xff\xca\x84\x82\xa6\xd3\xdf\"\x30\xf0\x16\xact\xa8\x19\x3r" "\x12\xafo\xf++S}\x84\xff\xc4\x1awc\xac\r\x63\xe\xa1W\xf7lv\xac\xa4\xdc\xbb\xa1\xcf" "\xa4\xda\x15\x16\xc9\xebV/e\xc3\xdb\xc2\x89\xd2\x15\xb\x81\x41\xc9\xcc=Kn\xd2\x8" "\xf2\x37\x8f+@\x9f!!R\x8d\x42\xbf'\x18\x80\xfb\x46\x89m:\xc7!C\xdf\x3\x42\xe3\xac" "=\x94\xc8\xe6\x10\x0lZ\x8a\xae\xf3Z\x1a\xc2\x83t0:f\n\x89@c\x83,\xd5\xd9\xf7\x39" "\xeb\xbd\x30-\x14\xf2\xab]\x83\xee;\x12~\xd2\xf4\xa2\xf\x91\x14\x84<\xdd\xf1\x93" "*&\xb6\x99\xa3\x5\xcf\xc\xeeH\x90?\rU\xcf\xe7\x3\xa8\x1f\x0I\x4'\xb8O\xccS\xc9\xc9" "\xd4\xe1v\xb5\r\xb9\x83\x41\xc8\x1a\x66\x8f\xea\x1b\xed\x8c\x66\x5\xef\xdf`2U\xb5" "\xa8*j\xdf\xa8\xc0]\xee\x3\xa4\x5\x5\x46x(F\xc3#\xf7'\xd5\x46\xb3\xd5\x1b\x38\xa2" "\x8\x19\x10\xae\x9d\x8e\xc1\xac\n\xb6\x93\x41;\x1a\xb7\xa3\x9a 0\xf9\xd9S3\xc8\xb1" "\x6\xde@\xd7'\x1e\x9f\x37?s\x1c\x4\xcb|\x6&\x1aTN\xab\\\x4\xc0R\x7\x90\x66U\xcm\xc8" "\xaf\xe0<\x88\xfe\x41\xc5\xc8\xd8\xb9\x8f\x18\x7f\xceQ\xab\x8fr\xb\xc9@\xfb[\r\xf8" "\xd8\xc8\x14\xe6\xe6\x19\x8a\x8f\xf2\x9b\x1e\xfe\xca\xff\x31\x92\xf0\xf1#\xf\xcb" "\x97\x6\xb\x82\xe4}\xc1\x80\xd7\xdaV\x10\x62\x98\x12\xbc}\xcf\xb9\xc6\x85\x42v\xff" "t\xb1u\xd6\x9cQY \xfa\xcf\xa0\x2\x18\xca\xcb\x9f[\x9a&\xdc\x3\x42\xb2R\xc\xe2\xe0" "\xb7T;-\xa2\xa6+\xea,,\x9c\xec\xa0U\xdaT\r[\xa6]\x13\x9a\x3\xa1\x61," "\xdc\x4\xd4\x44\xa1v\x88\xe6\xa3\xba\xfe\xa5\xb2\x1a<\xc6\x88\xc2\x33\xe5M\xb6(\xba" "U\xbe\x66\xb8\x82\x8b\x43\xdf\xb8\xd3\xc0J\x1e\x96l\x84\xcIk\xd1\xa8\xb2X\xeb\xe3" "\x19\x87\x9b]\xbd\x7f\xf3\xfd\x8d\xb5\xf9Ra\x1bp\xef\xea\xed\xd5|\xb6\xf1\xd5\x8a" "-\xed\xdb\xa0\x33\xf1y\xf9\x9c\xc0\x1d\xcb;rC\xb3\\:\xf6@\xab\xf4\xb5W\xb4\xcd\x94" "\xfbl\x1d\xff\xb4\xff\x15pWN\xac\xb9\xafM\x10#M#[_\xf7\x1b\x18\xe2K#\xf8\xbf+F\x91" "%\x15i\xc4{\xa8/\xc4&\x6\xd9\x83\x45\xfe\x9d\xe6\xc0UA\xc0\xdb\x42>\x7\xe5\x5\xc4" "T\x1a^y\xf6\x14v\x16\x34\xe7\xa0\xc1\x82\xfb\x17\xf1\x84\x65y\xdb\x2\x42\x1c\xca" "O~\xbc&M\x1\xder:E\xbcI\x84\x1f\xd8[\xf4\xfdQ\x8c-\xc8\x1d\xa5\x33Y\xde,\x2\xd8\xbe" "\xd0\x1c\x9e\x96\x96o\xa7\x4\xb\x8e/\xf3\xfb\xc1p\xddN\xbc\xdd\n\xfcnh\xc5 \xf7\x15" "\x14?\xc0\x98\xeb\x8a\xbaT\x9e?oj9}\x87!\xbe\xf6j\xe0,\xe1Q\xc9\x32\xb7\xda\x39\xc0" "\x83\xd8\xf1k\xe6^'\x3\xe2\x12\x87v\x1as\x86\x84\x8eQ\xb2\x2\xe5\xe7^\xc3\x12\xca" "\xde\x18[\xd3\x8b\xcf.d\xceJ\xc0z\xa3\x96o\x96\x7f\x94\x1bU\xc4\xb1\xe8>Z\xb\xd1" "\xc7l\x15\x6\x8e\x0\x8f\x2\x5\x9a:\x7\x8c\xce\x80\x65\x83\xbc\x8bT\x8c=\xe8\x98\xf0\x9f\xe2~n\xfb\x85y." "x\xe8\x1d\x9c\xe0L\\6\r\xd0(\x9e\xa0\x81.\xecy\xab\xae\xac?\xe7?\xbc=\x7'A\x14\x1a" "\xec\x9a\xbe\xb2\xbd\xe1\xf6\x85\xa2\xe\x8e\x85\x8a\xab. \xc4\xc3\xa2\x86\xdf\xf5" "\x6\x1f\x34\x8c\x94\x33\xf2\x13S]C\xe\xb9\xddx\x5\xdb\x99.{\xef\xa8{\x9e)\x90\xa8" "ow\xbc<\xf6t\xa8\x38\x96\xe6)<\xfa\x0\x90'\xc4\xdd\xa0\xecV\xd3\xf2\xb7\x1c\x38\xba" "\x12\xb8\xe\xb2+\x11\x82\xa3S\xc3\x98\xf7\x42\x87W|\xfb\xb1\x42\x19\x8a\xdd\x8a\x9a" "\\\xdb}\xe8\x63\xa3\x94\x2\x80]8~\xec\xad\x3\x7o\xd2\x6^f\xec\x82=\xd3\x31\xdbY\xb8" "\x8b\x8d\")#FX:\x8a\xbf\x35\xd5\xa1z\xff\xe4*`]r\xf8\x15\x8f\x80\x33\xfc\x13\x9f" "*\xe\xd3\x99\x1b\xbbHjB\x5\x87v\xc0\x92\x9di\x1b\xd0\x82\x91\xde\x41\xfdH{\x96O0" "sn\xf9\xfc\xbb\xdfj\xc4\r\xbdgM\x6w\xd9\x7\x5VP\xb8\x9f\xfdr\xcb\x64\xc9\xc5v\xc8" "*\n?Y|ry\x95X#\xf2\xb8S\x19\xf0\xbb\xe5\x66\xb1\xf3\x41;\xf0i\x1c#c~\xe8\x1a\xb4" "\xd1\xd0\x1f>*\x10\x1f}\xee\x65S\xbaG\x9b\xc4=vkd\x9b\xda/\x95\xc6\xae\x83\xbe\x1c" "{\x95\xc8\xe\x86\xb1\xd3\x94\x82\x44}z\x0\xd4\xbf\x10(\xc2\x9a\xde\xf2W\x3\xdd{\xe6" "\xd7[\xe9\\q*\xca?\xc5\x87\x92\x34\xad\x61\xf8\x86\x36\x9c\xbf\xf0\xda+B\xa1\xf8" "\xaa\xf4>SLJi\x7fzp\xc6Q\xb2<\xc3\xbT9\xe4\xaf\x1a\xe\x13)v<\x8a\xa4\xbeg\xcf\xca" "*X\x92\x36T\rNn\xfc\xb5\xb0/CG\xfbJ)<\x8e\x35O\xcaui\xed\xcctH\xc8]\x8a\xb3\rM\xd6" "\xc5{\xff\xc3\x36\x62O\xba\xd2\x98\x15\x61\xa9\xb1\xbe\xc2\xc1\xdd/!& l\x97\xb3Q" "\xct\xb9]\xda\xcb\xac\x16 \xbc\xe6\xd6\x81\xea|\x9b\x12\xad\xca\x34?A\x16\x1c\xe4" "\x1x\x14\xd6\x93p\x8e^\rc\xdf\xedm\xab\xf4gal\xa0\xa5\xe3\x4\xc7\x9a\x8b\xc0\xad" "\x86\x1c`\x15\xf2\xc1\xd4\xe2\xb4\xe4\xfbn \xee\x42\xc2\xd1\x82\xee\r,}\xf2\xc5\x8a" "'B\xf0\xdf\x5\xc1<\x1a\xfcYa3${\xd8\x42\xdc\xb6S\xb3\"\xe3\xa9\x7\xe4X\x5SE\xf5*" "A\xa4S\xe6$\xc6\xca\xed\xf8\x8e\xaa\xda\x98\x45\xf7\xd4\x4\xc8\x18}\x15\x8b,\xb4" "4\xc4V/\xea\xf\x8b\x1d\x83\xba\xc8\x13\xe5\x8b\x12\x9fO\xb8\x1\xea>\xc1r-#\xe8\x92" "\x3\x8f\xa9\xfb\xc\x1a\xa9$M\x91Z\xca\xe5H\xb4\xa3\xec\xf8\xc8%\x4\x95\x8;z\xda\x61" "\x14\x94\x61\xf0%y\xf1\x98\xf0j?+]\x84\x1e\x34\xae\xf7(\xdd\xf4\xeb\xee.\xf0\xdf" "&<\x5\xe5\xb2\xaf\xc(~D\x96\xcd\x0\x6q\x17>Hd\xbc\xc2u\x11\x81\x89\x95i\xacj\xf9" "|%\xd7\xd3T\xf4\x1\xde\xf4\xcb\xdf+\xd4\xe0QG\xad\xdevL\xe4\xe6\x65\xf2w\xb8\xed" "[\xb0m\xf6\x91\xc2Q\x6\xda:\xc2\xf5u\xf4\xa9y\xff\x4\xf1][]\xa7@a\xfe\xc5\xb0\x80" "\xc5\xe\xdd\x9\x0n\x6\n\xe1\xc6i(\xfe%\x14\xc1\x9a\x90\xb.\x80\x33(\x9\x0\xd2-1Z" "G\xe4m\x1b\xa2\x2.\x92\xc0\xfe\xcc+X\xb2\x8f\x85P3m\xa1K\x9e\xc1g?\xab\x4\xbbzR-" "z\"\xe0\x1d\x85\xed\x8f\x1cV\x8\x87|_f\xa7\\v\x91\xb7*\xd4\x42\xbd\x66\xd3\x36\x39" "\xc;\xa5\x88{\xb4\xcfk\xe8\xa6\x8a\x17\xd9\x31v+p\x1d',m4\xdf\xba\x9c\xda`\x11\xa5" "\xd3\xfc\xa2M\x9\x9\xf6\x8b\xed\x66)\x8c\xa7o0\x12\xd7\xfe\x83\x3^<\xf5\x8eM,\x2" "\xee\x80^\x8f$;\xd3\x2\xa0\xee\x32\xe9or\x10\xce$g\x13\xe3\xee\n\x9a\x87\x14K\xa2" "3\x80\xd6\xd2\xc3\xc2\x1d\x9a@\x84\x12\x87\xae^\xcf>\xc3\x1c\x30\x91\xae\x41'\xb4" " \xb2\xf7z\xc3U\x1\xb9\xb0-\xe5\xb2\x99\xe0\x2\xcb\xd3{\x91I\xd3\xae\x62\xfe\x94" "(\xd4\x85\\\x15\xa3\xc0\xfa\x87\x9a\x16\xc7m\x86\x8b\xaf\x4R\x1e\x39\x0\xb8\xf9\xb2" "Tz(\xef\xd0{\x9c\\\x65\xde\xaf>\xf5\xde\xe9W\xa1\xa7\x33\x86\xc1\x11\xfdX\xesV~\x15" "\x8e\xb8\x11g\xd5\xf3*[\xcd\x45\x91\xa2\xff\xca\x88z\x84\xddP}\x99\xfc\xc5\xa9NH" ">\x9f*\x1c\xf1x4\xe\xcc\x9a\\\x32\xbat\x12u\xd3\xceRX\xfe\x9b:\xb9\\\xe0-\xa4\x9a" "\x1\x19\x9c\x62\x35\xb9\xa0\x10\x9\x11%\xf8\xe8\xd7\xbc\xf7\x8e\xd3\x1f\"\xf8\xb0" "\xc1\xd0\x9eze}q\xeb\x97\x36g\xcb\x33n\x98\x45\xa9\x44q\xb2\x92IM\x9\xa1{\xe0yPB" "\xa5\xdc=\xba\x96l\x91\xbf\x83\xaf\x46\x32\xc6\x91_\x9c~G\x8eIC\x9aV\xa3\xcf\xf5" "\x6n\x8e\x38\x3\x14Y\xe9\x1c\xea[\xb7\xc1;\xe8\x7\"\x93\x94zD\x5\xd2\xc2\xc4\xef" "do\x14\x9b\x61\x41q\xda\x10\xb8\xf8\xa5\xcb\xad\x8a\xb3$\xc8\xda\x19\x18g\x3\x8b" "\xf6\xa2\x97\x93\x8a<\x98n\xd1\x87\"\x1e\x2\x9e-\xc8.\x91\x19)\xd2\x3\xf2\xf8\x64" "\x87\xd0\xad\xb8\xce\xc9\xba\xc1O3\xbf\x97\x87\xb1\x18\xfb\x8c\x42\x87,B$^#\xfcg" "^h\x9d\xc\x1d\x1f\x97\xd9@\xb7\xab\x12\x94\xcc\x34\xa4\xe8\xe3$\xbe\x44\xc4q\xf9" "]\xcd\xeb\x95\xb9^>\x94~\xe0\x94`\xe3=\xb0\x66\xb8\x9d\xe8\x84\x16\xba\x10\xa8\xa0" "\xa1\xfcZ\x1b\xae\"H\xf8H;4\xf0\xe\x9ck\x85\xba\xfa\x1c\xb8\x34\x63L\x9\x97\xf1\xae" "\xc9t8L\xfa\xf2\xe4\x66\x84\x19\xfb\x14\xb3\xf3Y\xa9\x63\x9c\xc0\x98\x81@\x17\x13" "G\x7f\x1f\xdb\xe3/\x94t;w&\xd3\xca\xe5\xbcib).\xbagU\xe3X\xf0\xedJ\xfb\xb8\xb9\x1c" "1\x87\xa1!~\x4\x9a\x9e\x32\x9c\xb5\x9aQ\x98`^y\xb\x45\x88Zd\xe3=\x85\xe0\x9c\x88" "\xad\xeb\xad\xb5\x12\xe\xde\x63Qm\xa8j(\x9e\x93\xf2\x1b\xdb,W\xf\x99\x15\r\x33w\x96" "\x4\x96}Qp\xb7\xf9\xd2T\xc3mL\xbcY\x14\x1a\xba\x5\xdb\x9f\x32\x65\xc2\x2-\xb5\xf9" "05t\xf2\xf3,\x94\x62m\x11\xf6\xb6+{\x85\xf3\x91\xe8\x80S\x95\xc7\x0(RA9\xb6\x97\xc0" "t^1\xce\x16&\xd8\xf3N\x8cg\x19\xf0\x8f\xb0\xb6.\x88`Gc\xce\xb7\x37\x1a\x18M\xb1\xd3" "\xbd\xe4,\x12\xb2j\"\x95\xe9\x0g46}?\x81\xb6\xc9\xb8x\x90~\xb6_\xa7\x43P\xb1\xa4" "tN\x92\xfd\xd5K\xdd\x8c\x7f\x84H\xeb\xb1\x84\xbeK\xcf\x1f]mX\x9e\xb9n\xbd\xbb\x3" "7{\xbb\xc0\x99\x32Nn\x81\x91\xf1\xb5\xff\xfc\xe4i\xf4\x96\xc1\xde\xe5\xd0\xa3\xfd" "\xa4\x10\x97H\xf2Uc%\xd3\x1a\x1e\xa5\x7f\x8a\xa0r\x8d\x1e\x8b\x86\xa2y\xec\x9c\x2" "\xe4\x30\x5(\x7\x8?\xdc=\x98\xacX\xa1\xd8R\xd9\xe9\xdf\x35\xaa\xa9nN9\xdb\x16\xab" "\xb_$L\xee\xa4\x18xqS\x7\xed\x9a\x92\xc1\x41\x80\xed\x8f\x1c\xda-I\xd7\xcd\x38\x34" "\xa2\x0K6N\xda[r\xde\xfd\xcc\xdc\x1d\x15^X\xbb\x6\xb5!\xd5\x39\xf6\x2Q|\xe8\xb5\x9a" "\xa5\xca\x83\xd1R\x8d\x8e\xf5\xb4\x33\xf3@\xe3\xb\xc8\x87\xee\xa6\xb0\x88T\xdf\xc3" "\xd1\x32\xb3V\x98\x9c\x61\x94\x18'(+\xe3?\xdeL\xfe\xf2u\xf6.r\x4\x9d\x10\xab\x37" "\xbb/(\xee\x17\xed\xff\x43P\x90\xd4\x8f=o_[\xba\xca]d\xc9OS3>o\rm\x93\x1a\xa4\xe5" "\x1f\x41\xd8\xc\x85\xf9K\xd0R#9T\x80Pf7]\xb0-^\x82\xe\xf3\xf9T\x7fM\x9a\xa4\xdf\x99" "\xbf\xc3\xee_*\x3\xe2v\xda;\xfbu\x99\xb0.Z\x81\x30\xf4\x33\x95\x45 \xadM\xb9\xc6" "\xa7\x34\xfc\xdf\xde}\xda\xa7)\x92\xc1\x98\xac\xb4~>\xf8\xbb\x1a\xa7\x9d\xf9\xcb" "\x13v\x90<\xd8\x97\xc7\xfc\x46\x33\xd0\xe4\x1e\xa4]A\xc5\xee\xf2Z\x7*m\\\xf9\xf2" "\x91\xc9\x36\xcfL1\xe4]]\xe2\xae\xbe\x84\xe9\xe4t\x1d\xb6\x98T7a\xd5\"x\x15\x9d\x13" "4\xe5\x8a\x8c\x82\x37\x8d\x0\x87\xdc\xc9\xf0\x33\xe8\xc4\x62\x84\xc5\xdb\xd5.d\xfa" "\xa4\x37\xce\x8f\xaa\xe9U\x93/\xcd\xb5\xe0\x85\xc1\xcet\xd5\xd8\x98l\xc\xa5\x38\xc8" "W'\xc6OVDg\x16\x64\xd0\xbd\x1d\xcd\xc2V\xcd\xdd\xf5\x39@\x11\x42^\x5\x43\xb4!\xd0" "y\xf3t\x1b)\xd7\xd5\xd6:\xecV\x1b\xd8\x63-\xc2\xae\xd5\x17&~\xb0\x64\xff\xcb\xba" "\xb2Iz\xb9P\\v\xee\xbc\xe\x6\xdf\x31\x34\xd9(\xaa\xb9\x5\xbb\xfd\xf6\x83\x4\x97\x83" "D8\xb0`=\xbeu2\x92Y\xc7i\x93\xaa\x30\xd1\xab\x32\xb7\x15\xef\xa6\x1\x9djX#\xe1=\x83" "\xcc\x84\x3\x9aq\xbd\xa6\x9\xb8\x41\xa6\x86q\xb3%\xb2\x1d\x93\xe7yE\x95\xeb\x39@" "\x3\xf\\\xad\x84\x36\x92\xe9\xa4\x8b\xd9\xe7\x8a\x85\x17\xc2\xd2\xcc\xa0T\xc8\xab" "{_\x9b\xac\x1a\xe8\x1e\xa6\x64\xb4\x99\xd0\x8c\xf5\xf5\xf0Pm\x98\xd7\xfb\x8f\xa7" "\x9e\x90\x5\xc\xe7\xe1 bf\xd5t\xd9\xdf\x32-\x2M\x1f\xe0\x1\xad\xf7\x61\xf3!SKH7\xc5" "\x1e\x36\xcI\xb9\xcc\x86\xd2\xff\xe4\xc4\x12\x9c-4,\xa7T\x1a\xd7K& \x0\x32Z\xe8\xea" "_\x19\xa7\xda\xee\xff\xce\x8b\xc\xf0\xe7\x43\x44L?\xb0\xb0?\x82\xf9\x91M\xdb\xce" "\xe8\xed\xba!7\xef;o\x9a\\o\x19\x8\x30L\x7\x64\xc7\x64\rN\xb4y\xee\xee f\x88\n\x1f" ")M\xbc\x38\xc8_\x99\x17\xd2\x32\x8a[\x8b\xc8\xbb\xa4\xec\xa7\x90\xab\xef\n\x95\x33" "4\xb0\xb4\xac\xc0\xad\xbfL1o\x86!\xbc\rPg{GD4\xd0L2\xf4\x90>\xf6\xe8\xd8Ol\xea\xd3" "\x1e\xe9\x19\x8a\x31\x1\xc3O\xd1\x80\xb3?dTi\xfcGk2%\xa3SL\xadX\xe8\x9c\x37P\x80" "\x8f-\xf6\xa3\xb6h\x1c\x63\xbch\xa7\x42=F\x1c:\xa8\xc1\x62\xc6\x93\xb0\xf3\xa4\x43" "eh\xe\xd2\x38|\xe0\x91\xd0\x63Pw\xf\xf4\xe1\xed\xeQ\xe7\x96\x44\x37 WC\xe9\xb1^\xde" "\xbbx\xa1@`\x13\xa2TQ\x7ft\xac\xcd}\xd0\x84\x9cK\x1e\x13\xfa\xc4\x18\xe0Y\xdc!\xae" "\xec;j\x87\xc1\xab\xa0\x88\xd6\xd5\x1a\xbe\xeer\x3Ko\x85\xd0\x64\x1f\x30\xfcR\xc2" ".\x1b\x4\xc0`\x1a\xec\x8d\x34|\x8e\xf6JK5\x88O\xf9\xa9\x65\xbcikm\xbf\xdc{\xfd,\xe0" "\xb6\x5\x90;B\x8f\x95U\xc3,\r\x18\x94Yl\x80\xc\xf4j|i\xb6\xbc\xb0\r\xf2\xc0\xa1\xc7" "h\xfc\xf2:\x8d\x8e\xff\xf3\x85\xd9xln8\xb4O3\xd3\x7f_\x16\xdb\xdf\xc9\xee\x13\x6" "Q\xc\xf7U\xfd\x1e\x8\xfd\xb2\x11\x8e\xe4\xc9\xca\x8b\xf0\x7f\x12\xae\x9d\x82\xfe" "v\x15\xe9\xe8\r\"\xe8^\xda>O\xd8\xc\xc5\x14\xef:\xee\xc6\x37]\xe2=]\xedS\xc6\\\xcb" "\xed\x35\xe7\xb9\x8d\xc0\xd7\xa0\xd0\xfe\xf9p`\x81,;v\xdcy[TZbU\xed'\x89\xbd\xd3" "\x90,+#\x84\x31\x9f\x8a&\x4\xa8\x36\xf2\xe5\xd9;\x8a\x4-\xb6 \x10V\xc6Tv^\x10\xa1" "4H\x9a\xf\xbd\x61QB\xe5\x31jzF\xaf\xcb\xa9\x1br\xd7\x44\n{\xc\x1e\xca\x62\x94M+\x91" "T\xa2\xa9O|?A\x86\x95\x1c\xd1\xdd\x97p\xad\xd3Z\x6L\xb1\xa6JE*\xc9\n\xdc\xd3G\xc2" "\x0&\xe1\x36\x89t\xac\x34\xe2U\x2\xb8n\x8f\x9a\x5\x62\x66\xbcj\xb5\x96tYO\xefu\xbb" "\x3\xe3\xe3\x89\xddQ6\xd9\xb9\x80p';\\2ik\x0\xa5m\x1e\xbc\xaa\xb5(C\xb9\xb3?\xcf" "\xed\x37\x64\xd1\xfc`T\xe4\xca\xde&\xe8\r\x96\x10\r\xc\xe9Nf\xf7\x39\xba\xd1\xf7" "\x1\x65\xa8\xdb{>\x80\xf8\xb1\xc1\xbaX4\xf6\xa2x\xd4px\xd6t\x18-V\xa8HH`\xa7\x4\xee" "\xd5\x1d\x8c\xb0Il\x8f\xf6\xad\x38\r\xfb\x3\xe4\nQ\xc7J\xfa\x66'\x7fv\xe2\x8e\x63" "\xb8\x39\xb8\x2Yd\x87pUE\xc9@\xd3\xf4Y\x18\xd8\xd6G\x7\x61\xe1/\xae,\xfa\xe2m\xb2" "\xcb:\x80W\x8d\x7%\xa5\n\xda(\xc2\xdc\x35O|r\x2\xebkx\x8\xd9\x62\x36\x45\xf5\x31" "Od\x8a\xaf\xd0\xac\x97\x91\xf9\x61(\x10\xdbL\xc7\xa3\xcc\x34\xf8R\xa6\xa6\x96\x81" "\xca\x9b\xd6<\xdb\xcd\x9e\xd0\x5\xae\x85s\xab\xa5\x8a\x12\x31\x63;\xe4\xe0Z$3\xbd" "i\x8e\xfb\xf2\xa6[A\x1e\xef\x14\xb6\xde\xa2\x1d\xa0\xf2\x98\x12\xb\x97\x14\x37*\xce" "\x81\xbf\xecM\xc6\xda\xcf\x82?\xc5\xd1k\x1a\xd1\x15'\xa7\x1c\x30\xca\xc8:\x14\xd2" "_\xc0m\x8d\"\x86\x1a\x12\x30\xeb@\xc0\x1c\xda\xa7\x7\x1eM]N(\x7f\xcc\xa3J\x94\xa1" "\xaf\xab\xd1\x9f\x84\xc2\xd2\xdb\xcd[\xf0\x2\\\x1d\x14\x37\xee\xcb\xf\x96T|:\xb5" "\xf0\x43\x5|\xf\xe7n\xa0\x88\xc0+\xdc\x8\x97uFgC\"\x1e\x36\x4sw\x95\x9b\xc1W0.\xcf" "\xb9\xb5\xf1\xf9rR\xdc\xdd\x9\x1\nq\xf3\x7\x9w\xaf\x8f\xcf\x42\x64\xf\xbd;\xea\xb9" "b\xc2\xad*\xf6~\x91\xec+\x91\x82\x44\xa0\xfc\x9b\x37\x4*\xc3\xdb\xe8Z\xdf\xcf/\xd2" "C,\x8d\x84\xe3\x16'\xf1^\xf9'\x9+[\x16\x8ex\x6\xaf\xf1\xe7\xf1\x61\x7\xa7\x16Q\xca" "n;\xac|*\x3\xcf\xf5\xa9\x8e\xb9S\xc8\x19\xfd(3\x9\xe9\x6\x64W\xa4VZ\xbd\x42+\x2\xc7" "\nT\xe\xd6\x32\xbb\xc4M\xce=g\xbb\"u\xd8\xaa\x11\xb3\x90\xe5\x80\xe8\x9c\xdd\x31" "NX\xe9\xe9\xc6\xe\x98\xc5\x13Vk\xc6\xa9\xa2N/\xc5\xba\x1e\\\x31H\xee\x12\xb0\x84" "\xbb\xc5\x1aY\xd2\xa6\x42\x30\xacm\x14\x83\x41\x63T\xc1z\x9a\xfe\x88M\x9\x93\xe3" "D|\x92n K\xec\xce\xf2\x85\xe2\xc6\xc9H\xaf!\x8a\xa8\x45\x83_\xa5\xe2\x91\xe0\x89" "<_\xa3\"\x8d\x1c!\x82R\xdfTe\xd7\x33\xc3\xecx\x5\x62\xb3\xbb\x18t\x95\xdd\xb8\x93" "\x9d\x15\xf6\xc9\r\x6V\xdb=\x8\x1c\xe9\xcdx\xaf.\xea\x94)\x95\xe\x41\x36\x98\x4O" "w\xc9\xef\x13\xc7\x7f\x19\x8b\xdc\x2\xa8(\xde\x5\xc3\x9b\x7f\xe2?/<&\x99$\n\x90\x64" "\x1b\xe7/\xc8\xae\x9d\x83[\xe3Y;\xd5\xf7\xc4\xc3\xcboqy`\x3K\xef\xd8\xe9\x9\x31\x1e" "\xb2\xf7\xe&=`NS\x9\x1f{MC~\xef\x80\x31\xb4\xf9\xcbKF\xd0*\xb0^!\xaf\x93\xa4\\\xbb" "P^\xee\xbd\x41k\xe6\x41\x7\n\xe1\x81\xb4,7\xaa{\xa9\xa0\xb4\xa8v\xc7\x11\x88RN*W" "\xe9\xdd\xbe\x1eV\x1e\xa0\x8cVU\xdf\xf9\xc5\x93+\n}\xc7n\xb9\xfepj1ts\x1f>\x18\xad" "\xba\x33\x8\xa7\x87|\xef\x16v_\xe5\x36\x46\x8d\x99\xbe\x7t\x8b\x8c\x87-\xb8\x39\x88" "\x1d\xa2V\\{R#z7Rs\x1f\x35\x15?@\x80sT\xec\xa1UI\x80\xe1;7\xfe\x19&\xe\xb8W\x2P\xe4" "s*\xfb\x80\xbf\x45$7s\x10y\xe8v\x88s\xd2\xe9\xc0\x85\xbb\xb0\x83\x1a\x14\x90\x18" "\x90\x30\xf2o}<\x13\xad\xe4\xe2\xf6\xee\xaa\x7\xe4\xc4g\xac\x96\x4Hm\xcc\xfaI\xac" "\xea\x33G\xb3%\xca\xbc\x42\xec\r\xf3\xe3\xa3t\x83\x35|\xb9;\xf\xfe\xe1\xd0#)*\xa1" "!\xe1{\xc5\xef\xae\x9b\x9b\x95\x2\xf4\xa0\x1fS\xf8\xb7\xb6\xea\xb1n\xa4\xb6\xb1\xc1" "SXz\xc\xd1<\x90\rK\xde\\\x2~_\xfa\xe7h\x13\x9c\xc9*2xd\xac\x85\x64\xa6\x0\x86\x9a" "`\x86\x32\xd9.\xd9\x84\xc4*W\xa5\x89\x8a\xe0\x97G\xd3w\xec\x9\xec\xd5\x18:\"\x94" "\xcd\n\xca\x19\xbe:\xa7\x80\x99\xc2\xcf\x8fJBb`?{\x3\xb0\xc2\x9a\xc8u\xf9\xccv\x99" "\xf7ZqS\xf5&\x0\\`\xd3\xbb\xc0\xf9\xec\x5\x80\x9d\xddkf\xc3X\xc0\xb1\xfa\xb0\x12" "bK\x83\x4\xf3,X\xd9r\xd7\x81-R\xa2\xa7Y~\x7f\x19\xeZ}\x3-\xd6\xd5hG\xeb\xf5\xfd\xdc" "d\x5\x8e\x1c\x9f\xfa\xb5*\x13\x96S4^\x17\xeb\x87;7\xdd\xf0\x61\x8\x19p\xfb\xca\xcb" "|\x1\xaa\x43\xdb\x93\x66\x8.\x9a\x64\x82\x13\xf4;\xea\x64\x1e\x4\x9akj\xf7\xd4k\x87" "E}`\x9d\x61\xf9\xbd:\xe1\x81\xae\xe3\x11\x7\x14\xe6\xe3 I3P\x2\x84\x43\xc6\xea\x1c" "\xb1me\xe7\xc0\xfbU\xd3*\x83O\xb0\xa6\xaav\xd9j\x8a\xdb_\xc~\xcb\xcd\x6\x8a\xba;" "\xf\xeeu\xf\x30)cn\xf8\x17\x8fKr\xde\x7\x1d\xeb\x39w\xa5\x13\x8axW\xa8\xfaO\x81x" "\xb0(\xca\x1b\xc3\xee<~}a\xff\r\xd6\x80\xcfR\xd4\xde\xec\x45\xe3\x93\xc9\xc7\xc1" "\x94\xe8\xb4\x86\x13.{\xf1\x95\x90T\x4\n\x62\x31s\x14%\x84\xbd\xb1O\xd6R\xbe\xe4" "\xa6\x1e#\x1e\x13J7~\x16\x30\xb7\xc0\xe7\xee{5m?\xee\xc8\x17\xfe\xc4\">\x98\xafO" "#\xc3 \xdaU\xab\xd7|0\xfbR\xa5#\xa6\xa4\x38kr\x94\x87w+\x91\xbe\x94\x8bz\x9b\xf6" "\xf4\xc\x9eqfP\xbc\x16R\xde\xf7\xff!i6\xee\xcb\xd4-\x82\x42!n\xc4\xde|\xd3)\xd7\xbb" "z\xbb\x90\x19\x80\xe\xb8\xb8yG)\xd6\xe1k\xadm3\xb\x7f\x17{\xeb\xbc\x9e\x1\xaaqr\xa8" "a\x9d\xe^8\xa9\x97h\xbe\xe2\xb9\xbf@\xc0nKWop\x18\xfeU\x0\x19\x95\xfa\x1c\x45U'\xbb" "\xa9P\xe5j2\xf6\xd4:\xb0\x84\x96v\xfb\x42\x9\x3\x1\xd5\xdd{\x8\xd2\xea\xd9U{\xb5" "\xab\xa3Xf\xffYq\xaa\xc3s&U\x11\x9a\xf\xc4\xa9\xcd\x66\xca{v(\xe4/\x87\x14\x87\x63" "\x9f\x82M\x7\x82\x7\xdd\x92t\x9\xf0\x4w\xf\x8e\xeb*MQ\x8d\xf5\xfe\x96\xdb\xbb\x62" "\xdc\xb6\xb9Y\xd8\xc4\x7\x43\x2\xd6\x34\x9c\xed\xfb\xcf\x94\x8b\xad\xba\x1d\x36@" "\x10L\x87\x15\x1e\xec\x9c\xb0\xcd\xde\xf9\xb7\xee)\xf4\x44\x7f\xd8\xa6P\xcd\x1\xc3" "\x94U\x0\x19Y\xfd\xff\x63\x93\xcd\x85mg~\xc8\xa7\xd1x\x2\x1a\x83\xfesy\xa2gB\xfc" "\xf7\x85\xc8\x94\x0\x8.\x1a\x90\xee\x8b\xb\xd2\xf0Q\x84\xed\xcc\xb5<\x9e\x11n\xc9" "0\xbf\x19\xd9\xe6\xfej\x1f\xf3{\xbfY\x95\xef\x30\xe9\xd1\xca\x1d\xd6\x61?:\x11\xf0" "\xc6\x95'\x1c\xeb\xd2J9\x99\x8b\x88\xed\x8d\xce\r.\xbdK\xb3Txu\xbaO\xa0\x93q\x1c" "[\x1f\x6t\x15\xd8\x90\xfeY\xd5\xa3\xad'G\xea\x32\xfe\xb4\x1c\x61\xf6\x8eH\xd8Kl\xff" "\xe2\xb8\"\xd9$\xe6{\x10\xf1yzF\x86\xb2\x82_\xfe\xee\xb7\xdb\xb8]~Dd\x88s\xd6WO\x16" "\xc9J\x8e\x88\xb3\x2\xd0n\x12+\xf8g\xaa\xb\x45\x8d\x8e\xf4\x82\x41\xa7\xcb\xc3\x11" "7{y\xdfU\xe6#\x9a,\xe7\xa9\xe7\x87\xc>\xec\xc6\xc3\xec\xf5\xcf+\x9c\xa9'\xfc&\xad" "\xc1\xce\xc5\xd5\x85\x84\xc5\x0\x9c\xab\xc2\x14\xa3\x89\x16\xee\xa2\x11p\x10\xdf" "\xc2\xb9\xe1\xef}o\xf0\x0U\x85l\xc1\x1\xef\xe2Mh\x1ew\xb4U\xa2}\xaa\xe1\x43*\x12" "\xd1sv\x92R8\xb0>\x88\xe5\xd1\xf0\xaa\x19\xff\xe6\xa2MY6\xaa\xa0\xce\xb6\xdf\xfe" "po8\x1ag\x8e\x36qx\r6\xf4\x66\xc4\xfa\x80\x87\xa3\xf4\x8d\xde\xe3\x9a\x65\xd2\xbb" "L\xf\xa7\x80m\xac\x99\x1\x99\x83\xf7z\xcb'\\_\xf1z1$\x8c\xc7X\xc4\x42\x1b\x13\x8d" ",<\x97`N\xd3\x1\xad?\xa9\xe2\xb8\xa3\x31\xf6:\xf2VO:\xcc\xd5\xcd\xfcM;\xc5\x89\xe6" "\xc7\xbc~\xfc=\x8\xc9\x97\xfa\x9e\xf7[<\x1a\x36\xc9\x99o\xf5\x46%\xd0Sc>\xa3\xe5" "\xc2\x80\xa8V\xdf\xe7\xa0\x84\x12g/\x6\x30\xa6\"\x15\x86l\xacw\x8fx>\xd6\xc2 {\x1a" "B\x95wC\xe7\xa3k\xf7\x10\xd4\xa3\xe5\x6>S\xd9$\xe9\xb9V\x82h\xfc\x30)\x13\x10\xa5" "\xf5[\xc7r\r6\xf2\xa2)I\xedo\xa9\xfc\xdc;'\x5\xa3w\x8e\xfbz6\xe4\x12%\x9e`\xbP\xad" "\x95\x9a\xc1}V`\x8dm\xfb\xd6\xb9ZuM\x7f\xd5\xdb\xc8\xc6\xf6\xc7\xdb\xc7j\x1c\xf2" "\x9a\xba\xba\xff/U%\x14\xc3\xb4\x46\x9c\xd9W\x9a\x46\x99=\x1b>\xca\xd5?e\xc8}P\xd5" "\xcf\x33I\x95n\x83\x39\xe6\xdb\x3\x80\xa0\xd9\xc1\xf7\x1fZ\x15\x1aG\xb\x7\xae\x87" "\x81s.\xa4\x88]1)\x18\xa7M\x84\\\xd1\x8f\xab\xec\xf6%>\xfe\xe2\xec\xc1\xa3+TE\xed" "w\xfb/\x98\x8fgF\xfb\xeb%\xbb\xbe\xd1\x63\xea\x44\xe5\xcd\x4\xa3\xc7\xd1TL\xf4\x18" "\r\xbf\x44\x8j>_S\xa3\xacq\xd6\x2\xc0W\xe9!\x1d%\xc7-\xf3thsN\xa3`\x1b|F\xc4\xbf" "\x2\xf0r\xeb\xdc{\x91\xb\xbb\xab\xa8\xf0T\xc7g\x18\xd2|U!\x16\xda\xd8\xd2`\x6\x35" "\xba=\x6\xd3mQ\xf9\x14\xd0\xce\x9a\xe6\xffk\x99o\xf3\xbe\xee;\x5^\xf0\x44\x33\xa2" "\xeaV'^\xa8\x37\x30\x1e\x9f\xed<\xf0\xf6\xfb\xfb\xd7\xf9\x1bW\xf8^G\x8b\xcf\xe2\x66" "F\x89\xbd\x1dVG\xa8\x0\xda\x91\x9ep\x7\xe5\x1e\x18\x35\xd9\xe\xd1\xd6\x12G\xb1\xcf" "s$R:\xa3\x3\xc8\xf4\x31\xdd*\xb4t\xcf%\xa4\xca\x90\x8fV\xd9\xf7\xedu\x90\x91\x6." "q\xfa\x43\xa7\x8e\xe8|%\x91+E|\xc4qL\xa5U\xb:\xf9\xf3\xb9\x64\xd4,\xc8\xfe\x83\xc4" "O\x18\xad\x5[Kof\xcc\xa3\x95=C\x4\x13P\xed,!\xf9\x1f#FX\x11\xfcq\x1c\xe0x\xd4\x13" "\x6\xec\xc7z\\<\x97\x33\xc6\xd4\x11\x42/\x2\xa1\xcd\x89\xf6\x8d\x91\x33\x1d\xadv" "q\x1c\xdfR\xd9\xb6-D\x2\xf1\xa1\xe0\xf\x9c\xa3@w\x14\x30\xefT\xa5R\xed mi\xca\x42" "\xb7\x9eR\xfaW0\xe4x6\x9e/\xc8\x8\xe5\x99#\xd8\xfd\xa9\xf6\x1aYX!\xb\xfe\xd7\xd6" "%yr\xe7R\x9c\x8f\x15\xc4\x1/\xc2\x8f-\xd6\xb4\x1e\x82\xee\xc7\xd8\x5\x8a\x83\x91" "h\x19`\xa4T-D\x1c\xb3\xaa\xd0\xf2\x42\xa8\",\xe\x1f\xd8G\xb1\xf2\x8b\x36V\xbb\xc2" "~\x84\x4\xb4{\xe4\xc2\xad\xce\xc6\x30\x6\xdd\xba\xe4\xa2\xc5\xb5\xd4\x1d^\x3\xe\xfd" "\x88\xcc%(,\x4\x7f\xc1}W\xa7\x8;\x95\xec\xa7~\x9b\xc8W*Gj\x1fY\xb\x80[4Q&M\xd2\xcd" "S\x83\xa6\x92\xffH\xc1\x42\x14\xfa\x9\x64)m\x9c\xb1\x16\xee\xaa\xe9\xdf\xca\x13\xb8" "\x5\xf2\xbb\xe2\xc5\x14\xd5\x34\x80_\x82\xc1\x91>\x85\xb9V\xa7g\x15\x9d\x85\x98s" "`\x1d\x9)\xcd:\x4\xbaq\xe2\x6\xf|\x16x\xe8\xa9\xae\x44\x9e\x93[\x87\xbb\xb8\xceL" "\x1\xd7~\r\x15\xc3\xaa\x7}\x98\x19\xac\x95\x41\xc4==\x9d\xe2|k\xb8\x65\xf2l\xd0\xa5" "\xdf\x8e\x87\xc9/f\xd8\xbc\xbd\xa9;hm\xf8\x18\x14\xbe\xcb'\x1f\x44?R\xfc.h\xef\xab" "P\xa6\x84\x88/Z\xfa\xe7J\x1-+\nC\x8\x31.\xbcj\x9c\x99\x61\x64/S\x95\xe\x90\xcd\xa1" "\x2V)\xc5p\xebQ\x19\x80\xb3\\V&\xc1\xaf\xc3@\xb9\x9f\xed@c\x97\xed\xff\xee\xde\x32" "\xf7\xab\xec\x18$\x97\x10\xc2\xd8\xe3\xe1\x9a\xa0\xd7Vc\xaf\\\x17\x37\xc8\xf3^\x85" "\xd8\xba\x7f\xdf\x2\xa6Mj\x5\x1f\xf8\x64]\x91\xda\xb1\xa7\x2\xc9V\xb5(\xe0\xd6\xd9" ",\x89\xbcU\x81\xeek\xb3ug#\n\xe0\xd7X1\x7f\x66?\xb4w}F\x1e\x98\xa1\x97\x33\xa1\xd3" "\xc8N\xc1\xc9\xc7\xfe\xd0<\xc0k\xef\xb\x8a\x6\x8d\xf4\x45\x16\xd0\xa6~\xd1\x97\xc8" "$\x7f\x8f\xa1y\xd2\x1d\xd1\x41\x34\x9c\x64\x7\xed\x42\xff\x1f\x33\x31\xbbT\xa3\x11" "\xb5\x9c\x93\x30\x63\x9\xdc)d\xa3Q*\xc0\x1e\xd1\x65\x98\x9aKt\x10%\xc3\xc2\x4\xe7" "\xb1\x35\xa1\x88\x42\xe2\xeb\xb4\xf6L\xf6\x63\xc8\xe3\x17v*\xbe\x99\xb8\x90\xeb\xc3" "\x1a\x1e\x86\x1c\xed\xef\xb4\x94\x1a\xcb\x64\x42\x36\xbf\x37;\x11=K7]\xdaV>)\xd3" "7\x3J\xfd\x2\x32\xf0\xb4\xfc\x80Q0$\xc\xb6\x1fV\xf6V\xbe\xb2\x37\xde\xcd\x9d\xb5" "\xaa\xc7\x43\x1\xf1\x31V'P\xb5@\xccKz\xa6\x1\x45\x45\xcb\x85\x38rU\xe\xa0\x42\xca" "\x81\xf5\xc\xfa%\x1a\x8a\xbcw\x89\x81\x5\xc6\xef\x10\xc\x84\x9_\xaf\xd2\x1eQHw/Y" "\xb5!\x7f\x9a\xdf<_\xdc\xa1\x8b\xda\x91\xf6/\xac/.\x1f)\xef\xd2Zx\x18X\xc3]\xe\x9f" "\x18\x9b\x87}\x5\xd8\xa6\x37\x63\xce\xc\x80\x39\xca\x8\xb4\xc7?'\xa6hD/]\rlV\x7f" "\x9d[\x15R\xa1\\\x45\xeQ\x88\xf7\xe\x33\xbd\xde\xf0\xd2\x0 \x8\x11\xc7\x81>\xaf\xb9" "\xad\xfd\x82\xf5\xcf\x85\xf8<\xc2\xbe\xf6\xcb\x1\x97\xa1\xe7\xdd\xa4\xbc\xfa.\x92" "a\xa3%\x9f,\x14\xf2nf\xb\x17K1\xe4\xae\x8f\x42u=u*\x8f\xdd\x0\xcd\xeb:>\x88\x88$" "w8\xa6\xf7\x7f\x8a.\xd4,\xa1\x9b\xfeg\xf4\x88\xd8\x93\xc7\x32\xf2\x19\xac\x1c.\xed" "D\xe5\xb4\xe3\xce^a?\xcb\x8ex\x96^\x9c\xd3\xc5\x38&G\x11\xbd\x8f\xc3\x9d[\xad\xb6" "\xdf~\x1\x19\x9e\x9e\x38\x37\xdc\x31hHv@\"\xb8\\\x36\x41\x1b\xab=r|UI\x88\x83p/^" "k)y8S-\xb\x0\xc8\x9co\x11{$\xde\x43\xee>\xa0]\xb5\x90l\xc}i3N\x0\x1a\xa2\xe7Y\xe3" "J\xa7\xbb\xab\xde\x81\xfa\xd7|01\xb5\xb9\x62\xb2:\xc6\x9d\xf5=\xd7\xc2\xc3\x2?\x84" "\x1c\x17\x2{\xb6\xed\xe6\x8d\xb4\xaf\x1d\xd1\xc2\x38\xe1\xc8_W\xfa\x15\xa7\x89\xbe" ">$\xea.\xbf\xdfl\x13\x65\x90Gq\x92\x8\x85l\x4\x45\xc4-\xb3\xc0]\xa7_\x83\x14\xd4" "(\x7\x2+#\x94\xc4\x90\xa3\xa0\xb2\x46\x43\xcmp\xed\x9e\x61\x2\x90[\xd7Y~\x9c\x86" "I2F;\xbf\xc3\x38)\xa7\x18t\x1dK\xf6\xde\x8c\xf9\x39\x3\x63\x9c 4:_\xca\xf8 Zf\xd9" "Y\xbe\x1f\x39:\x1b\x90\xc2\xea\xef?\xf2\xfg\xeb\xe3\x13\x9b\xeb\\\"\xa8 ^\x9e\xb6" "8\xfd\xe2<7\xd8Y\x1aJf\xeb*l\x85|Z\x1e\xf9\xf\x6\xfbyGa\x93S/d\xadZ\xee\x17U\x1d" "_4\xbb\xf7^\x18\xd2G3?\xf6\xf0\xb5\xd0\xcc\r\x10G\x92\xd2\xa6I\xe6-\xf9\x13\xb1\xc2" "\x1c\xd6\x90\x9c\xd9\x3:E\x11\x87\xa0\xdb~<\x97\x19,\xe6]\x6ZU\x8d\xe7nM\xbc\x98" "}\x92\xccI*\xb7\x91\xf0\xab\x65\x32\xc7\xf1\x45\xf9\x30\x66\xc2g\x15\xa1[M\x6\xed" "uo\x17\xf6sS40b\xea\x9(\xd0\x8d,\x11\xf7i\xc3\x88\x30-\x0\x6\x43\x1b\xbf\x8a&\xfe" "\xd4\x9d\xe9\x6\x1b(\xbf\xb0@\xf7\xf2\xcq\x82`\n\xd8\x46\x0\x15\xe6\x96U\xc0\\\xfd" "j\xf7\x5t\x8b\xef\x83NM\xfc\xe6\xf8\x8e\x9a\xc4\xa6r\xbd\x63\xc7\xeQ]\x0\x32 \xb0" "z0\xe0\xeS\x3\x82:/\xdf\x86\xaa\x30\xb8\xc1\xf7\xe1U\x88\xf3\xac\xc1\xf5\x2X\x94" "\x1d\xe4\xcfi\x8b\x42\xe8<7\xf8(\xd4\xd7\xc4\xf0Z\xeb\xf4\x1e\x8d\xb6\xf7=\x19\x5" "v\x8c\xc4\x8e\xd0\xcaY\x4\x9b\xd1\xfb\xe4m\xa6\x87P\x9R(\x3\xde\x13\x96\xec\r\xf8" "\xdeV\x1e\x1f=\xb2\xf3`\x1d\xa2\xf9\rG\x19Q\xb3\x92\x44v.Kf\xfe\xd7\xd4q=\xfe\x41" "\xa0\x30\xba\xed?\xd7\x85\xb8V\xfe\xa6\xb1\xb5\xab\x85\xf5V\x94\xb8\x8bO\xd7\x31" "\xce\xa4\x35\x45\x39\x8b\x9e\xae\x1du\x8c\x35.\x87\xf5\x32\xb1t\xfbu\xa1\xae\x1e" "\\\xa5\xd5\xf9\x33L\xc4pM1c\xf3+\xcc\xff\xb0\xf5\xe\x4\xcb\xa9\xa2\x91\x12:'o4\x83" "\xab\x90l\xab\xc9\xe4=\xe1\xf6.\xec\x4\xfa\xb3\xde@\x98\x83\x64\x9f\xa1\xba\x35`" "\xc6]\xda\xf0\x84Z\x1dZ\xe9\x63\x37\xad\x96\xbd\x64m\x8c\xfa\xe4\xf9\xd4\xb7\xb8" "7\x6nb\x16\xf9J\xf8\x14i\xca\xf8\xc2,\xac+\xdd{\xd9\xb5\xc9L\xc4q\xeb\xca+\xa9\x90" "\xfa\xd7\xf2~\x3\xb0\x9f\xbe\x86\xfb\xe3\xcf\xab\xf4kZ\xcdY\xdf\xb4\x36\x16\x8fK" "N-\xca\x9e\xf9W\xa6~\xc9\x86\x43\x8a\xcd~\n\xa1\xc\xe6j\xbd\x32\xc9\x88i)\x9d\xba" "E!\xdf\xe9\n\x8aw\xd4\x8d\r\x8e\x43iV\xc3\xc8\xba?s\xb4r_uw\xb7\xbd$\xe7\x8bn3L\xb8" ";@V\xc1\x99\x17\xd5\x45\r`r~\xa7\x85\x9e\xfejIn|w\x17:\xc`\x96\xci\x9dK{\x99\xe5" "%J\x83\xdb\x0\xc3\xb8\xc2\x8\x14\x9b\x80\x0\xcf\x30\xbd\x45\xeb}\xf7\xc8\x31\xfd" ":\xd2\x35^\xef\xdc\xdd{\xbb\x62\x0T\xa3Uv:C\xee\xfa\x17\xe0}\xc6\x6\x9dV\x7\xc0\xe5" "\xa0RY\x86\xd5J\xe9\xbel\xb3y\xcd\x84\x11\x14sJQ\x9O\x9b\x45\xbaj\xa6z{Z\x97\xb7" "\xbfx\"lj58\x1bPE\x97\x39\xf3\x4\xb7\x33v\x1\xc4Z\x10h\xb0i\x5:\xaal=\x98\x42\x2" "\x17\xa5\x32\x63\x65\x7\xcd\xc7\x17\x1d\xbb\xf0O\x18\x32P0%\xa8M\x10\xcf^\xe6n\xc1" "\x87\xec\xa1\xcc\xe4R\x98\x8d\x63\x1f\xf!&np\x7f\x8\x90\x10\x16\x16]h\\Evg\r\xc2" "\x1a\xf\x8\x16u\xafw/\xdd\x46\xb1#\xf8#C\xae[e\xae\x45\x18\x9f\xb9\xc5$d\x90P\xb3" "V\x84\x89RJ\xd8\x34\xd4UD\xb&K\xbf\xb9\x8f\xf1\x83Tt\xcd\xd9\x33\xb3\xcf\xff\x87" "\xd8\xcb\xb2\xb0I\xb0R\x9f\xc0\x98\xabj\xd5\xd1\xed\xad\xff!\x87u\xdb\xcd\xe8\xb8" "\xaf\xb=\xc2\xb\x64\xf9?\xf3i\x92\x8c@\xb8\x62\xad\x44\xef\x9a\x42'\xf3\xf1\x38?" "\x9d*\xe6\xeaU\xcd\xb0\xa2NP\xaf\xf0\xf2\xd0\xcbv\xa6\xfcYX\x0\x38\x80\xd0j\xc7\xe5" "\xe7\x97\xf9\xd1\xfd\x99M\xfe\x84\x62\x1a\xfb\x7\xa5\x9d\xc1\x1c\xc9\x1b\x95\xb5" "\xd3\xf7\x9f.P\xba\xdc\x86&wJ\x1d\xdbL\xa3\xe8)\xe5, LK\xcf\x99\xdd\x85\xb8\xb5\xed" "\xea\xd2P\x12\x14\xb9y\xba\x35y\xbe\xb0QEr\x9e\xf9\xd7\x86\x9f\xc4\xb3\xd8\xb1) " "\xd5\x12\x9f\xa2\x8a\x43T)n\xd7\xb1\xe4\xcf\x1e\xf3\xae\x94zY\xfc\x1f\xdb\xb5\x37" "54\x9f\x85\x66\xd0\x1f\x82\xe7\x9d\xfa\xf\x90\x98?l\xbf\xe2\x44\xb1\xa9\xc0\x83\xd0" "\xde\xd2\x42\x1e\xcc\x1d\xe0\xec\xc3\xc5\x37\xb0z4\xa7\xf1\xa5)\x1d\xe9\xbe\xbb\xea" "B\xe2\xf6\x82\x0\x8bp\x88\x12\x9e\x46<\xc5\xec\xb5\xbb\xea\x8d[\x1d\xe8r \x94\x46" "\x90r\xb\xf9j\xd6#\r\xc7\x8\x43\xa1\xbf\x15\xe\x37\x35&\xcfU\x9\xda\xf3\xea|=z4\n" "\xf5\xd4)\xdc\x18\xfd\xb3N\x8c\x12\xe4KCM/\xe6\x63<~Q\xd0\x38\xf8\xe5\x65ZS`\xb8" "[\x9d\x38\xc\x9d\x8d\x42Wj\x9c\x16\x94\xa6`h\xce\x66K\xcc^\x9e\xc4\x8f\xb5\x7\xa3" "\x11z\xf1\xc2\xa1\x61\x9b\r\xd8 D\xb3\xc4\xe8Lou\xe4\x7\x9\xdc\x14JP\x8a\x41\x1c" "-\x9f\xd1\xc4UJ`\x89+\xb9\x0\x13\xab\xb1\x61\x89\xe4\x8c\xf1\xd3\xc9\x45\xc8\xb5" "\xcaKln\xe7@3\xd6\xb8\x9d\xa0\xe2,\xf2k\xa9H\xa8\xc2`\x92\x9[\xd4\xa0\xf\x66\xe1" "\xcc\xd0\"\x41\x92o\xe2\xae\xcd\x14\x65\x89\xdb\xc3\x17\xa5\xa7ytE\x9axxFz\xe9_<" "\xaa\x46;\xac\x4\x33\xf6:W\x8b\x4\x62\xa1(\x18\xa1\x4\xc5zO\xb2\xc2\xcaN\x89\xf6" "\xb4{\x87+\xfax\x5\xa5`\xae\xab\x17\x85\xf3\xe\x83\xa4\xabrQ9X\x10 \xc8\x10\x6\xc7" "\n\xe4\xd0\xfa\x11}\x8M\xa7\xe7\xb6\x65\xac|\xd4\xbe\x94\x9b\x37\x1\xdd\x8b\x38s" "\x10\xa8J*|a<\xb4M,\x84\x18i\x8bS\xcc_\xe9\x1b\xd6z\x19\x33\x37\x9c\x99\x9kS\x89" "\xb9\x8d\xda$LN\xb\xb7v\xfe\x61'\x97\x8a\xba\x66R\xbb\xdb\xc6\xb4\xc8\xc4\x81\xeb" "\x8f\xdf\xb9\xd8\x32\xa9pX\x6\x86\xbc\xb7\xe9z\x1f>\x9e\x98\xb0G\xea\xce\xc3{\xc8" "\x10xQr\x1f\xf9\xa8?\x9e/\x9e\x62\x31\xe2l\x98loJ\xcdwf\xa6\xe3\xab \xfe\xe2ihkY" "\xdaiCO\x1bG\xcc\xbe\xcb\xad\xab\x81p\x6\x92\xc5n\x8b\xcc\x5#6\xc0Q\x0!\xbZ/~j\xfa" ",\x8d\xc4\xb6\x85\x12\x90\x16\x42`\x2Ww\xa4\x93\xf5\xdez\xe5M>\xd7k\xcc\xb0\x8@\x3" "\xeb\xb5\x45\x64p\xb9V\xca\xe5\xb4\x99\xaeXk\xcf*\x7\x80Z\xb9\xdew6\x1a\xf5\xfb\x44" "\x8f\xb8\xbb\xd7\xd7\x1c\xf1\xb0H0\xbe\x43\x82w\rA\xa9\x9e^\x9\x8z\x89\x64$/\x91" "\xbf\xae_\xf4\x39\xefS\x19L]9\x80\x1a\xf0!\x9bi\xe2\x66P\x10\xd9(/\xc6\x89\x8a\x8f" "\\\xb1\x88\xee\x9f(\xf\xc6\xba\x62\x66\xe7@\xc5qO\x81\x36\x87\xdfT\xedz\xe\xd2VX" "\xef\x9d\xaf\xec\xa9X:\xc9\xde\xff\x89\xf7\xc3\x8a\xb4P\xb5\xe\xcf\x17N\xaa\x4P\xf1" "\xa4\xc6m\r\xd8\x1b\x8f\x1b}\xd7\xd5(\xed\xca\xa2\x8c\xdb\x10\xbeQ\xc5,a\x9f\xad" "\xef\xf3\xf7\x9d\x9fI\xfbX^\xb5\x18\x2P\xda\x39\r\xce\xfa\x8f\x16\xe2\x84\xea\xe4" "\xc9\xd9\xa2\x36\xb2\xc0\xbb\x33n$P\xbdwz\xe7\x11\x5\xad\x93\x92>\xb0#\xbd\x42\x2" "$\xa3\xa1n\xfe\x6\x64\x33*\x9f]\x4|\xaf\xdd\x8\x82\x1rB64\x1b\x14\xd1\x8a(\x8b\xe5" "\xb2\x41\xa8\xa4=i>\xf5\x16`\x6\x44\x8d\xbaz\xa5\xb8\x99\xdcvW\xa2\xf8\x63<,A\xcc" "\xa9\xf5\x63\x99\x98\xc9\xb0\xb5\xc6\xd7\xb2w\xf9\x81Oi\xa0\xb8\xf7\xbfgK\xb2\xb3" "\x12p\x93\x37\xe\x94\x9b\xe7\x1a\xfe\x30\xd1P\x1b\xf7}6%\x1c\x9\xb4\n ,\x8dk_\x19" "\x91\xdb\xfb\xe7\x63\xe0`\xdd\xda\xbd\xf6\xa5w\xc2\xd6\x88\xab\xffx\xd8\x63\x34\xc0" "\xec\xc0mm\xb6i\xc5H\xf3(\xfVP\x85\xaaL\xfa\x9^8g\xc6\xfd\xbcm\x4\xfa\x93\xbby]\xff" "J\x16\x35t\xeer\xf2\xff\xd8\xfd\xc5\xe\xb\x10\xb3q\x8b\x17\xb1i$\xcf}\x8d\x32\xe1" "u\x13\x1c\x8c\xc4\x87\xf7z\xe\x8c\x9c\x7f\x9dZ\xf3\x97\xb\x63s\xcf\xadZ^X\xd4\xa6" "\x92\xa4;\xba\xd6T\xbc\x61t\x9d\x98\x19|\xfb\xba\x93\x44\x64\xbcx\xa7\xfe\xe6/\x8c" "5c\x4\x87\x41#z\xdbw5\x9#\x87\xc9\xaest\x4\x94\xedy\xf5\x0\xc8tsvmLf5}|x\xe1\xcc" "\xc5\xb1\xdd\x3\x19\xaa\x66\xc7\xb9\xe.\\\x1c$\x88 \x86\x1e\xd5\x37\xd7\x90\x95:" "\x9c\xb\xb3)\x14\xb0\x19\"\xf1\xceuu\xc4g\xb3xp\xcb\x66\x62(\xe4\x2\xf\x98\xc8:k" "\x94N\xa0\xd0/IX\x1fhL5Gf1-z\xf3\x39\xd4\xf8\xa7Y\xed\xc\xfc\x91Vs\x7f m\xacp\xab" "CUOl\x11z\xae\x98\xe4\xc4\xc8g{\xe2\x87Q\x4\x8e\x86\x39\xc4SN\xab\x38;u\x94|Y\xf6" "\xc6\x1a\xad\x10\x10/*\x9d\x7\xb7\xf8\xfa@\xcf\x8c\x6g\x8f\xb8\xc4J!3\x91\xcdv\xda" "\xf8-\xb6\x1b#c\xd5\x16\n\xe3\x45\xb2\xf5\xdb\xd0\xca\x96i:\xd1\xd6\x65\xf2\x97\xef" "\x96%\xe5\x1dX\xad\xea\x39\x1\xa0\xc2\x64m?%\x0\x14#(18\x10\xbcx\x1c\xf1\xd1\xdc" "t\xc5\x1e\xf2\xeaWm&\xaa)\x89\x82\xda\xbfSq\xe1{\xe8Ue{\xa1Z\x19\x7\x46\xe5\x86\xb0" "Lz\x1e`\xdf\x89m\xd8\xdcw\xb6\xcd\x1d\xc2\xbd\xa2\"[\xab\x8dT\xb5>\xa4\xb0\x1c\x13" "{!\xb\x8a\xc0/\xfaMZ[\x1d\x1f\x95\xba.\xe0$\xee\x17r\x80\xc2\x5\x0oS\xbd\x35I\\\x9b" "\xb5\x14\x64\x9e\x1bH\xed\xcb>'\xc3\xae\x4\xf4\xef\x8b\x81/\x13\x63{\xe6N\x13Ut\x13" "?\xc2\xc4%\xdd\xeb\x38&\x10!\xdd\xbc\xde\x93r\x15\x9fMc\x19\xc3\x1a\xda\xd4\xdc\xbc" "Y(\xaeh@:\xc7\xd2\xeb\xfd\xde|\xbf\xdf\x90's\xe9\x9f\x89Z\xe1T-\xf9\xba\xe5\x9a\xea" "x\xeb\xe1\xaa\x43\xfc\xde\x9f\xf2)e\x9e\x9d\xbe\xaf\xabq\x14o\x12\xffz\x17\x92\x42" "\xa3\x1bi\xb4\xd8.\xc7\x63\xa9yn\x96u:\xa8\xb9\xd4\xf\x63\x4\x31\x96\xba\xa2W\x4" "n\x13_\xb2\xff\xaf\xfd\xb6\r\x1\r\xe4;\xb2 h\xf6\xaf\xe4\xc3\xbb\xef\x8bm\x13\x44" ",\x84T\xc0\xd6[\xe9:S\x11\xdc\xfe\xf6\x7$\x12\x15\x86;\xe2\x2\x8a\xf6\xec\xb3V\x17" "K\xfd\xe7\x32J<\x9d\x80\xc9q\x17\xcd\xb1\x14\xd1\xed\xfb\x8a\x38[7\x89\xe7\xcf\xb7" "AP\x95\xb6\xda$i\xfe\xedS\xbf\xc5T\x12\xa2\xef\x7\x0o\xe1\x1e\xff\xf0\xde\xbe\x15" "f\x6\x82@\xfe\x1e\x66\xbc.\xa7\x38\xe7\xb7/\xfa\x8\xd9\x63}A\x94\xccK]\xef\x32\x8e" "\x90\x65\xb5|3\xdbh\x87\xfc(\x16\"\x3\"\xc\xd4i\x1b\x8e\x8c\xdc&\x86\x9cI\xef\x34" "\x1aq\xb4\x1d\xd8Q\xe0\xa7\xe7%V\xbb\xff\xcc\xab\xc4\x96\x1f`\xbc\xe2\x15\x9e\xcb" "\xf1.\xc4\xe3\xa3QB\xbb\xb2\x9clmX\xb2\xc6\x44\xda\xb0&\x16*\xfe\xd9\xe2\xbc\x93" ",c\x9c\x9a\xdc|\xbf\xb3\xdd\x15\x1f*8\x97\x46\x7v\xa4\x64\x1c\xd4\xcaP5\xfc\x45\xa0" "m\xf4WK\x90\x1f\xf5H=\x8r\xcb\xb7\xbb\xceM\x19\x46\x2\xa2}8{@\xb3\xbj\xbcr\xc7\x9d" "'\xeb\x36\x9b\xae\xa9\x99\xf2 @QJ#\xb3\xfc\xfe\x86\x39\x92\xef\xbb\xf\x88(\x9d\x66" "\xed\xd3\x9\x65\xd9',l\xf0\xd1}\x1b\x1b\x16\xc\xbb>\xcd\x1d\xab\x7f\xc8\xfb\x30\xae" "1\x88\x82\xe1\xf3\xd8\x41\xa9\xad\x8d\x65\x84wt\x8c\xfe\x36|\x1e\xb8MA\xe0SH\x7f" "\xae\xbc\x18\xb2\xa1\xa1\x97\xcfH\xe8\x11\xfn[\xc0\xbe\x80\x65L\x7f\x14\xcb\x2h\xb5" "\xd4\xf0\xc5~\xc1\xbd;\xa6\x36Lp\xfd\x44O60%'\x84\xf5\xfe@\n<`G\x10/e\xc5I\x8a\xd6" "g\xb9^%N\xbd\xb0\xbf\x64mF\x99\xc1=\xbc.\xb4H\x8e\xd4\xe0\x8bw,\xbf\x1d\xaeyQ\xa8" "\x19\x38+q/\xb3;\xfc\x34\x13\x8d\x10\xb1P\x7\xfe)\xaf\x41\x42t\xbc\xc2\x84]\xda\xaa" "\xaehh\x80\x15\xc1\x41\x80\xc3\x44\x98h][\x1e\xe3\x16`\xb7\x62\x19\x12\xb1-\x88\xfc" "V\xf3\x9d\xcf\xb3\xeb^\xdd\x8fL\x1f\x64\xa0\x8\xd4\xb9\xcfH\xdc\xe4\xb6P\x16\x80" "\xf7\x8\xd6\x9\x9\xcb\x18)P\x89\xb0\xb0\xc\xf5\x9b\xb6\x8c\xa7\xae\xec\xe2k\x1c\x16" "^r{\xde\xe\xc2\x15_\xb7\xf3\xc1\xb6\xd6\x46\xc7Q\"\x86n\x9cyS\x95t\xc2\xc4\x9e_\x4" "\xa4`\x17\xa2\x99\r\x88\x46h\xc1nWA\x86\xee\x44\xf4\xfc\x33\x9e\xa2\xf0\x10\x88\xf3" "\xed\x31\xa4\xd4S \xbd\x10\xd9\xcfX\xc7\x1e\x8d\xa3\xd4GQw\xbd\x5n#]R5hqT\x96m\x8b" "B\x87\x8f\xa1(\x91\xda\x91\xab\x87v\x1a|\x7\xe\xa7Q@\xe0\x39\xcd\x8b\xe4\x1d\xb3" "D9\xd1\x7\\\x8d:y\x90\xf9\xfa\xc5V\xc0[\x6\x7\xa7-\x14,\x84K\xaa\r.\xf7\x32\xfa\xd3" "\x81\xd2\xe4\x61\xc8\xb1\xd3\xe8U\x80\xba\xd0\xc2P\x81OU$\xdc\xf3\x38\xfa\xea\x1a" "|a\xc3\xa6\x18\xf1\xae\x94\x89\x1a*/P:!\xb3\xf0\x14n\x17\x95\x17\x88\x98I0C\x91x" "\xcc\xcaY3\x83\xba\xa4J!\x3\x95\xeb\xa8^m(\xc2\x37\x82\xf1\xc6Q\xa8\xe8\xb4\xd7\x80" "\xb7\r\xcbN\xaa\xde&\xd6=\xe3\x17\xc1\n\xc1\x8b\x93#\xeeL\x86\xf\xe6\xf6X\"\x19%" "\xb4qUi\x7 \x9e\x81\x94\xaf\xf8\x99Mc\x8t\xb8\xf8\x1iR\xe9{'\xfc\xaaNuQ&\xc3\x15" "\xc2\x8ey\x2V\x1d)\xc2\xa7\xf5\x86\xda\xf4xg\x2\xc6\x17\x65/nn\xc6w\x8a\xb5\xd0M" "\x8eI\x1e\x6`\x13`\xb8r\xfa+\xc1\"\xed\xf6l\x18\x9\x37n\xebK\xcd\x17\x85\xd1i\x85" "\x14\x5J\xf5S\x5\x9e\xd6\x1\xff\xae\x5#Q\xe9\xfe:Ej,\xa1.}\xd1\xa7\xf2\x3*5HL\xbe" "\n\xa4\xa8\x32\xaf{\x9bj\xfdM\xbb\x80\x96g\xfas\xf9\x1fir\xf8\xcfH\x97\xbb\xbbv\xa0" "\xb0\x61\x5q\x16\x80\x11\x87[y!\x88\xb7n\xfenk\xf2slL\x8ftV6\x84\xa5\xa8\x34\x39" "\xc1\x1e\x8\x94\x34\x9c\xcd\xfb\xa8Z\x97\xc4Z\xa1\xd9\x89\x46K\xa2\x1c\xe0R+\x8b" "r\xfa\xc4\xa5\x66\xda.\x2\x93\x65\x11\xf2\xc5\xc1\x1a:\x9aR\xe0|\x89\x1d>\x94\xd3" "\xedK\xbd\x1b^\xb3\xf1h\xe3\x2^\xeb\x8d\xe0>\xd1\xab=\x80\x39pv\xb2\x10\xd9\xf9\xf2" "\x14\xf8\xba#\xd1\x35\xd4\x9fq=K\xe5\x8b\x1g\x18}%HWbb)\x2\x8a\xbc\x8\xfb'\xfe" "*!\xf9r\x5\xb\xf2\x91\xc2\xc9\xe8W\x9d\xc3\xd7\xe7\x9c\x31\xe\xe7+J\x8c\x61\xf5]" "\x8f\x95S\xe9\x1d\x61\x6\"\xac\xc8\xbc\xf8!\xf9\x43\xe7\xde\xb\xbf\x8e\xf4~\x81\xd0" "\xe\xbd\xdc\xd9 7+\xe4\x61\r\xe3p\xb4\xd6;x\x0\x18\xdd\xb4\xc8\x0\x88\x18#\xba\x11" "\xfe\xff/\xea\x80#]\xec\xb3\xf2\x12^\xc6\xe9\x41x\xcc\x13\xdd\x87\xbe\x8c\x93We\x89" "\xd5*\xa1J!O\xb4\xe8G;B\x9b\r@s\xa5\x63\xc4\xa7\xd9s\xff\x36><|\nui\xd4g%\x18\x91" "/\xa8\xad\x98\x64\xb8\xab\xdc\x8a\xc9\x15{1\xf3\xf3k\xdd\xa1\x9(\x9\x61#\xfd\xd8" "\xc1\xe2\xbd\x1dK^\xd2\x9c\x1a\x46\x19%j\xeb\xbax(l\xdfG\x95\xb8\xc1\x1d\x95\xdf" "+C\xc2H\x1c#\x88\x3\xc4\x3\xc3\xc9\x91\x6\xc0%\x37.\xce\xbd\xd1\xdcw&~w\xe3\x1a+" "\r\xa0\x83)w\"\xa8Ww:'\xd0\x35\x63\xd0\x1c\x1f\xfe\x63\x19\r\x63'\xf1_G&5$E\x8b\xfc" "\x6\n\x84\xdf\xe0\x1a#\n\xc6\x7f\x14$\x5\xedq;5=\xcf\x88\x5\x81\xbf\xd0?g\xe7;\xc1" "r\x1e\xbb\xbd{\x9a\x81\x65\x98L\xc9\xb9v\xe3\x1_r\x0\x11\xcvD\x8d,\x8\xdbg\n\xc3" "Kx\xad\x8eyq\xae[\xa8\xc7+\x2\x17T\xe2\xff\x6\xbd`~E\xb0\x5\x46\x98\x8e?8\xb3=\xe9" "\xa4j\xc9q\x10\xd0\xe3.o\xa5\x66h\xa6\x7f@\xed\x84w\x96\xebKx\xb9\x3\x14\xaf\x95" "\x88\xdf\xe8\r\xa2\x37\xa1\x15\x4\x9d\x4\x8eUI\x8c-\xf7\xfe\x31\x32-\x1e\x8d\x13" "}\xc\x93!C\x8a\xc4\xc8\xeb\xe7\xcd\xffiS\xd1\x8a\xd1\xc2W3\xd4\x3Q\x16\x9e\xe2\"" "_\xcd\"Z\xb1\xfc\x4\xd7\xee\xcc:\xe6\xee\xd0\x44\xc6#~\x9d\x88z\x19\x19\xdc\x94\x97" "\x8e\xaa:\x1e\xac\xcb\x46\x7\x66O\xd1(\xd5\x8fH\xcfI\xd3>\xbf\xca\xc7\xbd\x30\xc4" "\xad\x14md42\xf7\x9a\xadT\xaa\xb6)\x12\x13`\x85\x98\x88\n\xc\xd1Uv\x90,h\x9cSZF`" "\x9d`]8\xa6M\x80\xbb\x0\xf4\x8cQ\xa6\x7\x17\xf5\xf5\xdd\xd2\x9f\xfd\xd5\xb\x10V," "\xa6reo\xe3p\xb9l`}\xc4\x97Ys\xf9,5\x83\x82\xb9L*\x4\x8b\x63\x36\xa8!\xchuW\\\x8" "\xe2\xc\x2?\xf3\xa5\xc1'\x10N\xab\x17\x6\xe3'\x7f\xcf\xcf\xe8\x6\xce\xf2?\x8eL\xf" "V\xb1\x91\x99X\xa2\xdf\x6\x9a\x1R\xadW\xc\xe\xf8\xf0\xe3\x85tQ4\x15n8\xac\x65n\xcf" "\xa1\x61\x98\x93\x66\xcd\xd3\x38\x41\x17\x82\x63P\xe\xff\x95\xe2\x9\xee\x41Y\xca" "\xc1\x86\x35\x7f\x1b<0\x88ON\xd0\x3\x8\xa8\x36\x6\x63\xd2\xb\xf5\x85>]\x9aY\xf\x38" "\xa0\r\x98\xd7\xe2\x8e \x8f\x34\x2\xd4\xa0\xc4\xea\x38\xb0\x14\x83\xaa\x42\xd9\r" "\x10U\xf0m,\xe7\xf4\x30\x98\xde\x1a\xd9\xc9\x66\x95\xfeP1\x95\xda\xdf\xc\x97\xf4" "a\x89\xbdY\xfci;\x2:\x14\xc3\xe0\x88\xa5\x41_2\x19\r\xd9\xae\x46\x9b\x88\xd3\x95" "\x15\xe\xc2\xd0X\x12\x80\xbf\x1d\x9bmZ6i\x93\x1bR\xd8\x85\xa0p\xea\xb2?A\x80O\xad" "_\xdd\xec\x32\xd6\xd7\xc5\x9cL\x1f\x7f\x8\x83\xe0\x90\x66l\xb0\x16\xda\x80\xc3\xab" "\xfa\x62I\x2>AE\x7f\x98,S\x1\x95\x1f\xcc\x8f\x81\xe5\x30\x80\xa2\xa9\xf1)\xbc\xd1" "\x8e\x80\xb2\x16\xc2s'\xdf\xf8Z\xc5\xd7\x44\xb5\xb0\x61z\xd7\xf\xe8\x82\xb9\xeb\xc9" "yg\xcd\xbd\xae\x1e\xae\x9f\x1f\x1\xe!\xf3\xa0\x64\xd9r\x88\x9d*\xb9Z<\xb6\xdd\xa5" "\xb9 \xfb!\x8\xc1\x99\xd5\x8b<\xefk\x95\xfeZ$\x9bY\xfaP\x1b\x63\xf7Z2l@\x90\xc4\xde" "g\xa1\xc6;\xe\xb5\x44\x89\x36\x17\xd9\x39\x88!@\xffpnu.\xe3\xa9\xde\\v\x8\xa1x\xf2" "\xc7\x5\xef\x34\x42\x11\x92\x9c\xc5J\x15\x94\x16\xe4\xb1O3\x8b\x45\xf4:\xec\xfa\xa2" "\x0\xf1\xdf\x91\x1c\xe5\x7f\x89\x35\xde\xf6jd\x9b\xdc\xc5\xa4\x39\xcd\x98\x95?g\xc1" "\xe4\x38K\x8d\x9b\x8e\xf8)\xc9t\xa7v\xaa\x3(\x1b\x90R\xc5\x90\xbb L\x96\xbeH%\x91" "I\xc8\xf6wU\xeb\xa2\xf1\n\x97\xca\xd7\x10\xa0\x33o\xc6\xab`\x8a\\\xd3J\x9f\xef\xf4" "\xdf\xdbM\xdf.\x4n|{5\x86;;\x93\x16\x61\x90\x1b\xf2l\x87\xf:hH\x9d\xed\xef\x1d\x34" "\x1d\xd9\xba\xdcka%a\x83\x33\xf!\xb\x8b\xf\xedJ9@w\xaf\xcc\xcd\x82\xcf\xc2\x33\xc6" "\xf\x97i9Qb\xd0\x39\x6\x39\xf3\x19Ql\xe2\xb8\xd1\xf2v\xcfO\x99\x92j\x87+\xf\x1bs" "\xea\xbf\xf6\x19\xc9\xb3\xf7\x95\x9b\xe8\x9a\x43\xd3\xf0\xd6\xd9\xac\x1d\xa4\xfb" "\xfI\xde\x66\xf0\x6\xa7\xc3I\xb0\n\xddv\x84\x36\xf7\x8e\x9b\xc1\xd2\"\x1e\xd4\x17" "?\x7\xb9(\xf9nE\x13\x44\xbc\xec\x1f{\xba\xb4\x81\xd0\\i\x8\x8a\xe\xa1\xdb\xe8\xb6" "\xa2}\x8/\x1b\x87\x87\x61\xc6\x8a\x1f\xab\xb2j!s\x14\xc7.\x16N\x89\x34\x13\xdb\x1b" "\xa3\x62\x64\x63kp9\xbe\x13\xd7HfJ\xfc\x66t;A\x93\x10 \xe\x80\xbb?>`\xc2qW\xec\xa0" "nZ\x80\xf\x9\x42\x35\xcf\x2\x15\xed\\\x1e\xf3\xdc\xf4\xec|\x3l5\xf8\x86\x17\xe$\x17" "\xcd\x39\x17\x1e\x17)\xdc\x32\xcb\xdf\\\xf8\xee\n\x86\xfd\x9\x36\xe8\xdd\x64\x99" "\xaf\x39J?\xf5\xf7\xea$i\x14^\xca\xd6\xe9(\xea\xe8:U\x1dnP\xc4\x91\x10;l-L\x14\x39" "\x8f\x32\x92\xc2\xe3\xe\x9\x1b\xc=\xbe\xca\xed\xee\xa3&\xe2\xa4=\xbf\xc8\x61\x0\xfe" "\x99O\x12\xcb\x65\xd0\x44\x94\xac\xa0\xa7\xb0\x61\\\x36\x9dR}\x87\xd3\xcN\x18\xa2" "\x92\"\x9b\x62\xe1\xf6ut\xbc\x34\x9e\x97\xbc\xe\xf1\x3V\x7f\x98\xfb\xa5\x1c\xeeP" "\xfa\xcbI\x8d\xd0\\w'\x5\"\xf1\x44V\x97\xad\xc6\x36\xd4\xbd\xc3\xf5O\x11\x61W\xa9" "Y\x1e\x10*s\xb5\x62\xb3\"\xf9\xc3jVP\xb8\xc7}$\x19\x64\x8e\x84Q\xb3\xa9\x33$\x8c" "\x90\xa7\xce\xd7Q\xc5\xeb\x61-\xef\x45\x9f\xd8\xf8\xc3\x86\xb1\x66\xa1#J\xdf\x39" "\x11\x82\xff<\xb8}\x13T4\x86|e\x9?\xb7g\x89\x5\xea\xd5\xd4x\x1dkN.\xaf\x9r\x1q\xca" "\xa9\x98\xeeK\xa3\xf4\xfb\x61\xb1\x19\xc2\x32\x15K?J\xeb\xd0\xafv*1\x1eh\xd2\xf3" "S.\x85\xb7\xbb:\xe9\x0\xb3\x0\xfd\xbe^w\xec\x41\x14\xdc\x91\x8b\xd1\"\x9f[\xd8T\x94" "\xc2\xa6\xbc\x91X\xaf\x99\xc6\x1f\x98\xcb\x90\xc7\x12#\x84\x64Uy\xc8\x8f\x88\x8e" "n\xf5\x39^\x7sA\xb5\x19#lk,Q\xe1\xb5\xe4\xb7\xfb\\\xa6i\x8aRb7^\x86\xf9\x9e\xe/\x86" "h\x91\xe0\x13\x33\x36\x3\x80\xc6\xb4\xe3X\x8b\xee}\x1b\x93\xb2\xe1\xfd\xfb\xad\x36" "C\xc9\x63\xc7\x1ci{\xab\x8d(\xb1\x30\"\xbe\xac\xac\xc7\x18\xf5\x90^\x14\x9e\xc8\xc9" "\x84\x81\x8b\x66\xc9\x8a`\xb5\xbe\xed\x90\xd7\xe\x96\x66\xc9\"\x34\x1d\xd5\x3\xf5" "/!\xf6\x9f\x46\xcf\xd4\xb0\x44\x31#f\xd9O;-\xc0^y\xf6\x94\xfc\x46\x35\xde\xfek\x8b" ")\x8\xc5\xab\xeb\xe9\x66\x11\xe7\xde\xeb\xdb\xc3\xe6\xc3W\xcd;s\x96\r\xd4\x1b\x97" "a\x99\x9c\xbc\xa7\xa5%\xe3\xf5\xf3+P\x1d\x9d\x86#\xb7\xe7\xdc@$y\xe1\xd5\xe5\xd1" "\xff\xf0\xdd\xa4=Qs:j\x84\x8fU\xdd\xeb\x5\x97 `B\xc0\x38v\xb3\xdd\xad\xc4\n\x8U;" "(\x15U\xf5\x30%\x31\x0\xa1\xc5\xc9\x80\xcd\x41\xab\xbd\xc0\xe8\x32\x44\x37\xd2\xe6" "4Rx\x1b\rZA\"#\xaf\xad\x4\xe2'\xaf\xf0HA\xc\x12\xeekB\xd3\xeey\xa5\x65\x93\xe3\xf1" "YV\n41-\xa0\xfb\xc0\x1a\xbd\xeb\xa1\x15TI\xaeG\x91\xfd\x9-\xa6s\xb7<\x8q\xfd\xe5" "\x87'\xef\xa4\xaby\xc5gWj\x93\x1f\xb5\x41\x9d\xe3\xd0\x39\x0+\xf0\xfe\x11\xf1x\xa9" "\xacZ\xc7 \x89\x83\x66\x13\x89\xab\xaaW2\x14k\xdf\xea\xdc\xc2\xf5\x3\x8aHJ\x2\xe7" "\xa0\x99{\\\xbe\x1a\x42\x62\x81\\q\xe9\x6\x9f\xfd\x85H\xc2O\xce\xb4S\xb8\x1e\xcb" "\x10\xc3\xcc%\xac\x61\xdd\x97[!\x95\xcf\xf8\x66\x0\xc6\x44\x8\x98\x1b\x94-\"\xf2" "\x1c\xac\x10\x39\x80\x33=s\xf8\xb8(\xd9\xdcZy\n%\x6\x93\r\xff\"\xb4\x1d\x8d\xf0N" "\xcen$\x9b\x44I}\x16\x46O\x0i\xa7\xdd\x4\xb4\x16'o\x98p\x90G\xc3\x66\xd0\xe3\x5\x1b" "\xb1;\xa2\xfa\x8b\x9b\xab~M\x17\xadUD\xd3\xf9\xbate5\xf6&(p\xb2\xf3_\xcc+\x81\x9c" "\xec\x1a\xae\x1\xed\xae\x61Y\x98\x82\xb0\x2]%v$\xb3\xeeZ0\xbd\xe\xd5y\x2\x81\xde" "\x88\xf0%\xdc\x3>\xe7\x42R\xca\x15\x32\xb2Tp\x1c\xd1\xd3\x65\xe2S\x1c\x30j'g\x6\xe8" "2\xbo\xf0\xfb\\\xb3\x34-\xe8\xfe\x95sX\xa3^\xb8M\xb7R\x83\xb8[\x1e\x44\xcc\xacy\xc3" "\x93\xf3\x8fs\\\x17\xdf\x38\xadg\xcb\xc5\x18\x46\xbf\xdc\xd2\x94o\x8_\x86u\xd0=S" "\x16\x90\xff\xf2\xc1}c\xf9\x9\x12\x46\xb2\x66I\xba\xd6\x12\x36w\xa7\xac\xea\xf4\xb8" "\xb9\xa1\x89Z\xe9i\xc5\xf8X\xadL\xa3M\xd7z)>\xf8Y9\x96\x4K\xc1\xf6&{\x9fN\xa0\xdc" "O\xaa\"s\xef\xac\xdd\xb9\xdb\xae\x1a\x18 \x1b\x9e\xe1\x4\xd1\x83J\x6\xc5\x30\xe1" "\xec+\xc0\xd7`\xdap\xab/\xf8\xd6P\xce<\xe4\xdf\"\xcf@\xceu\xb7\xd6\x9d\x2\x1a\x37" "\xc7\x9b\xb6\xaf\xb9\xf9\xea\xaf\x62\x1c[\xf1 \x99\x4\x8b\x92\x64\xdb\xa6-\xe5\x46" "1\xd7\x97Mh\xa4\xf3\xbc/\xb0\x38\xfc\x2\xb9\x96\x90\xed\x8f\x35HWb\xd4P\xf5\xce\xf0" "c#\xff\x63&M\xc2\xf6\xc6u\xc1\x8a\x9f\xfeM)\x83\x3\xa6\x11\xa3\x14\x36\x6 \xc\xae" "L\xc5\xa9\x3\x43\x11\\iH\x11\x16\x3)\xb7Hq\xe5+\xb3\xa9\xd6\xa7Yc\x1aU\xe7T1M\x1c" "\x0\x35\x85\xe8\xbe>\xc0\xe;\x9\x94vh/5i1\nb\x1f\xb6{\xb3K\x1e\x45\xd7\xd3\xde<\\" "c{\xab\x17\x91\xc3>\x9azWcQ<} \x5\xa8\xcd\xfe\x96\x9\xb6\xa1\xdd\x64\xe3p\xaa\xbd" "&\xa6\xe0\x39Pig\xd8\xd2\x1\xf9\x3\x9f=\x7\xeb\xdc\xad-\x1c\x45\x9f\xb8\x82N\xba" "\xf0\xec=\xc3\xac\xa7JS\x1e:\xac|\x8a!\x80\x10X:p\xf\xbe\xf6\xe0\xc7\xa8\x8a\xaf" "\xc7\xf1\x97\xeb\xbf\xc0\x9c^s\x91\x1f\x11\x12\x2u\xf4\x8\xda\x8f^\xe8\x62u\x1f}" "\xf\xd1\xb8\x31\x6\x96\xcc\xab\xe\x36\xaa\x42\xaa\xdbv\x98-\xed!2I\xd1\xf\x7:F\x13" "\x85z\x8d\xc5?\x4\xb5\xe2\xa4){@)\x1d\xba\x7\xa7\x89\xc6\x8b<\xe3\x62\x62\x18|\xf4" "\x9a\x85\x45\xa7\x62\xcf\x1dx>\xc7\xb1[C\xf0\x37Ue\xc5s\x1b`\xcc\xa3\xac\x62[z\xa9" " \xc7`\x1ds6\xf4\xbd\xfan\xaa\xa3\x66\xbar/y9\xb7R\xd9,&%\xc1\x33\xe2\xb9=\xa3p\xc5" "hd\xa2\xdfy\xd9\x41\xf7\xd5%\xa2\xe8\x97\xfe\x7f<\xaf\xb1w\xbc\x18\xa9_\x9c\xa8\xfd" ":\x9dn\xa2n\xcc\x36\xf1\xc7\x8b\xd0\xfe\x32\xb2\x62x\xfd\xbe\\\xf7-K\xf0\xafx\xee" "MY\xd0\xed\xc8\xb5\xb8\x66\xbf\x5G\xc5\xffV\xf8\xe2\x1X\x18}\xd4|\xde\xc4\x45\x97" "d\xf8\xd6\xb0\xd3\xe1X\xc8/\x16p\xe3 \x81\xa9\xf4\x83\xe8\x92\x6'\xbbi&\xd1\x6\xa8" "\x9a-\xed\x36\x91W\x14\x15\x1d)\xce\x9d\xedH9+{\xf2\xe1}!\x94\x36\xcb\xda\xd6\xae" "\xe2\xcd\x99\x41\xe4U\x92\xaa\xb1M~\xc9V\xe5\x43\xb1\xe2\xc3\xe4\xbd\xcd\xf4\xfc" "\x6Z\xed\xbe\x8c\x3uu\xd0\x10\xf5\x81\xb0\xe1\x97\x66\xaeOG<\x8e\xfb\xd7" "\"\x8a\x8e[\xa2\xfa\x2\x7f\\?\xa6\xc3\x35\xe9\xc6\xe3/\xbcU\xc9\x13\xa1\xe9\xb\xe6" "\x81\xeb?$\xb6\r=\xa7\x96\xc6]?\xb6\xe9z\xc4\x89Q\xf5\x1cH\xf6h:#\x99+\xae\x3\x95" "Un\xf2\xbe\xae!\xc2\x8+\x96V\xe7\x63M\xaf\x1d\xf9\xb9\x2O|\xb9 \xe9\x97L)\x9b[\xb8" "\xf4\xd9\x18\xd1*&i\xd6)\xe6{\x17\x43\xe4\x9\x13\x16\xf\x18\x43\x9a\xb0\xd8\x43\x8f" "\x18\xc1\x8a\xd6\xf0y$\x8do\x1dYq\xe5\xeb\xa6\x7f\xecGQ\x1f\x30\xc1L2\\j\xe\xd5$" "#\x1c\xf0\xca\xf\x98\xb0\"\xa9m1\xa3\x8e\xe4\xe8\x9c\xd1\x98\x39\xf3\x8f\xa9\x41" "\x86\x5\x95\r\xea\x62w\"`p\xad\x65\x83!\x9fh=p\x81\x9c\xe0\x14\xb2\xd5\x61r\x99;" "\xf2\x1d\xa9\x39\x35O\xbb\xee\x33\x45\x10\xde<\xca\x9f\xb5OrQ\xdd\xc3S\x12o \x89" "\x96\x3\xa7\x1e\xb\xab\xef\xb6s\xa7\xc4H\x8c\xe3\x0\x7\xc9}f\x8f\x36\xecOg\x8c'\xb1" "J\xfd\x6\x44\xf8L\xb9>%}DkG\xcc}\xbd\xdc\xcd\x66\xf9\xb4M\xf9?Sf\x84\xc8\x44\x18" "\x9c.\xe1 /\xa5\"K\xa7\x89\xf8=\x8e\xfd\x62P,\x1c%.V\xba;+.\xc4\xe3\x38\xa7Zoz!\xae" "\xda\xf1\x8b'\xdd\xed]\xf1\x9c=\xca\xd3K\x11\x9d\xee\x44\xd4\xa3R\x9d\xf1\xe9\x7f" "\x1c(\xce'\x8d\n}\\|^~\xb1\xe5\xb9\xfb\x17Z9u\x80t*p\x2\xe8\\\x83\x7\x18\xd4\xc5" "'=<\xec\x99\xde\x4\xfb,\xbb\xe0\x90\xd9\xee\x85\xde\xe7*{x\x3{\xaf I(\xde\xca#!Q" "\x9f\xc8\x11\x5\x66Z\xc\r\x8d-\x1b=\x95q\xd0\xf3x\xe0\x9as\x7f\xcd\xa1\xd1\xa1G," "\x87?\xb0\x9gk<\xfa\x42\xe8^w/L\xc4\x1a<(\x1\xdbI \xb8\xfa.K\x8bz\xe7\x1a?C\xe9`" ";\xb5\r\xcb\x1c;e\x10\x88:o\xbf\xd1\xf1R9\x1e\x98\x1c\xdd\xa2\xeb\xa6+\x1a\xa3\xde" "\xf1g\xa1\x8b<\x7\xb3!\xcf\xa0\x8}(\xc8\x82\xe7\x37gF\xc9\xcf\x9fw\x9a\xef\x91\x1b" "\x81\xf4\xff\x34\x1e\x45S\xa8S\x9d\x9f\xe]\x88o\x10\x63\x96\xc8\x8b<\x9[\x96\x17" "\xb7\x84/{\xed\xealK?\x5\xc2\xb6\xf6\x38\xa9\x15\x80\xe7\xac\x33\xc5P\xbd\x7\x62" "q\xed\x8\x44\xfbR\xb5\xd3\x2\x9\x0\xd8I\xa3\xe2\x8d\x65\xbe_\xe6\x45j\x8\xa3\x1d" "\x7\x97\xc7\xd0\xdf\x8d-\xe7\xfb-\xf4\x17\x43\xc0Pd\x93\xc4\x64\xb2\x44V\xad\xa7" "\"\x9c\xe3\x14\x61\xcf\x31\x32\xb3\x62S\xe2\xa5W\x7f\xbc\x45\x8b\x38\x9f\xce\x42" "#Ewo\xeU=\x1b\xed\x9c\xe7\xdc\x5\x7f\x96\x19]\x4`gE.#\xe5\x66\x62\r\x7\x9b\xc4\x86\xc5\xb7" "K\xea\x18\xf4RGAXo\xe6k\xa6.5\xaa\xd6|Q\x15\xadl\x9b\xb3\xc3V\xf3\x6.\xe8\xb5\xfd" "\xa3\x7\xf8\xfa\xfe\x31\xdd\xbf\x41\x64\x1e\xbc\x87\xfa\xc\x95\xc7l\xdd\xce\xa9\xff" "\xb2#\x9b;\xbcJa\x2\xa8\x8d \x2\xca\x45\x97\x3\x8&\xc7:\xe8\xc0\xcf@\xd8\xb4u\xf" " \x98\xa4G0\xdc\xe4\xa7\x96\x7f\x65\xa9\xcc\xcd\xd6k\x12\xd9\xe4\xb6\xf7]\xec\xb1" "\xb2\x92\x5;f\x8e\xa3\xfc&\xb1t#\xcb\xe4\x36\x42\x9\x9a\rT\xb7I\xf7\xfb\xf1\xd2\x41" "i\xaeu\x9a\x9a)\x13\x9e\xe7`\xbc\x1b\xaf\x95\xc5\x96\x89\\\x9c\xaf]\xb8*\xc3\xcd" "h\xfaVY\x11\xd1OB\\W\x93\xb3\x38\x95\xf5<\x9a\x84\xe0\xc3<\xdd\xc5\x46\x45\x9a\xa3" "\x7f\x13\xa7\x9c\x44L7\xc2\x13\x2\x46\xa7\xb6\x91\x43s\xbd$\x7\xe4\x62\x17\x42u\x8b" "Q\xb1\xdf\xbfnJ\xb9\x31\xb7\x17\x41\xdd>\xa1\xc2\xb7 \x14\x45\xc4\x84\xef\x38\xe8" "&:\xee^b0\x7\xf8u\xfc\xfc\x1f\x38\xd3\x14\xd4\xd6\xb8\xbe\xf3\xc0\x5J\xc6\x80O8\xfc" "0\xc0M\x9ft\xba\xe2\xa3yuMg}&\x89\xc\x12\x38#\xe9\xf4\xc7\xbe+X\x9e\xf9+ \x1eX\xb6" "\xb9I\xfd\xd1\xbd\xf5\xfcHB\xd1\xc8\x80\xcdk\xfcx\x88\xbx!\xe8Y\xb8\xf0J\xadu\x9" "\xb9\xd0\x8d\xde\x8d\xcb\x9a!\xff\x3\x82sFmp>L8\xb9\x38\xc0%n\xb1\x10W\x9\x1d\xf6" "\x13\xac\x44\xbf\x8f\xbb\xac\xb1\xd7\x19\xea\xd2\x93\x5\xc0\xe3,@\x97\x98XU\xd3L" "\xe2Qb\xcd\xaa\x34\xb7\x7\xf6->)\xaeOY\xa9\xfa\x9f\x83\x90\xb3\x31\xb0\x99gm\x19" "\x0\xe1?\xe9\xe8\x34\xd4\x8e\xf4\x64\x87\xac\xc8\xff\xad]\x82\\[\xf3\xd9\x41\x8\xc0" "{\x9a\xe2\xe3 \xa7\xba\x4\xa9+b\x86\x64\x30\xd5(\xe0m_\xc2~\x1\xae\x9f\x45gib\xb3" "\x16\x84\xbcK\x86%\xac\xba\xcd\xfd\xb4\x10\x39\xd2\x1d\x41\xba\x1e\xaf\x8a\x89\xd3" "g\xca\xe@i\xe6\xc9\xf0\xe0[RS1h\xa8\xa9\xbc\x9fTJYH\x8f\x18\xa9\x9b\xb6\xa7\x2\x18" "\x14\xe5nx\x9e\x34\xaa\xa2\xadO]\xc5\xe4\x92\xdf\x9a\xee\xe1,m\xb4\xfbp\x86\xa1I" "_D\x9f\xa1\x63=\xb8\xb5\x88\xf5M\xcb\x9f\xa5\x38Q\xf0/&#N5\x3H\x92\xdf\xbfQsT6\xb2" "\xaa\x1c\x7U\xe9\x8cWYV<\xe7;\xe7Sb]\xd6U\x4\x45\xe2OL,g\xc0(\xc8\x8b\x89\x38\xb3" "\xa6\xb\xaf~)\x8c\x85\xc6\xc6(\x83\xc4\xcfHm\xd5\xb6\xeap\x5\xe2&)e\xf8\xe3\xd5\x35" "\x15\nj\xb2H\xec\xfb\xa9\x91\xde\xb9\x64V%\xe2$\xe2\x96s\xc1\xdf\xeb\xf4\xe\x63i" "D\x3\xcb\xe7m\x90\xee@R2Vl\xee\xcb\xbe>\xdc\xa0\xcb\x99\"\xb4\xa3\xef\x9aGa\xf9\xc6" "\x9e\x65\x18\xde\x2Z\xd0\x42m\x8I\xb4iP\xd4\x63\x37\x61\x9f\x86\xaf\xce\xa5\xa1\x37" "b\x0?Vi\x9\x8f\x41\x81\xdbRb\xc4$\xf1\x8e\xa3\xfa\x63Qr\xd3\xff\x36\xd1\x9a\xb5i" "\xad\xe4\xd1\xe4\xa5\x91\x1a\xbcq\xce \x91\xce\x98;\x8d\xe6\x30u\x80\x2\x89%\xbd" "x\x82\xd1\xf6\xa4\xdb\x15\xbd\xc0&`[0\xf4\xaf\x31\xb9>\rp\n\xa6r[Y\x5y\xeb\x89\xe3" "K?\x95\xa4\x9f\xdf\x15\x12Xj\x9a\xf1\x3\x31\x8b\x37\xbd\x96\xc9\x38\xdf\x91\xe6\xb3" "\xa6\x15\xdd\x42\xb2\xef\xa3\x9d\xf5\xf\xa5\xdf\x96\xc1\xed\xd5\xccz\x98\x8b\xcc" "L\x1d\x1a\x7wAL5\xf\xaaj\xc8\x10\x66\xb1\xb0\xf8\x35\"\xe6\x88\xeam\xcc\x43:\x14" "\xec!\xcd\x5)\xf4>\xc\xe6\xff\x0\xf9\x36!\xf\xad\x46\xa7\xae\xeeJ'\xf2\xa9\x96\x1b" "\xb6q@\xc1\xd8\xcbM\x8f\x7f\xf2\x16\xf9\xc2\xa6\xb0\xcf\x98o\xd9$\x81\xf7\x12Y\xa4" "$)\n \xa3v4\x2\xf8#\x2%\xcf\x65q\xf1\x17\"\x18\xd5u\xbb\x30\x38\xce[H\xcd\xeb\\\xc1" "\x17\xe2\x1a\xa4\xe3\xa4O\xacg\xbb\xe\x65\xc9\x90\xcaRe_\x9c\xfd\xc3}\xb4Ox\x97\x81" "\xe3\x66\x35M\x2\xff\xa1\xa9\x7\x84\xab~\xda\x8\xf1L\xb6\xfalu\x93./)\x8c]\xff\x8a" "\x7f\x45\xab\xeek\x82\x97\x1\xca\xe3\\\xee\x16\xffh\xf0\xe8\xaf\x7f\x3)Vo\xf4\xb" "uOLO\xfd\xc9\x94\xc0\x42TVv\xb7\xf7\x1b\xd0\x12J\xd4\xed$'\xeb\xe\x5\xeHO\xc3\x95" ":\x85\xc4\x33Q\xe1m\x5\xbe\r\"\xecm\x19=\xf3\x37\xfd\xee\x17+\x1d\xf1\xc3\xf0\xf" ".\x1c\xb1\xca\xc4Q\xe1\xfb\xe5=S\x1c\x6\xa2\x87\x7f\x30\x17\x82\x1f\xb0\x7f\xe7\x1d" "\xfd\x8a\x38\xc8\x93\x81\xb0\xfc{w\x86\xcb\x92\xe5\xb9\xa8\xd5q\x91\xba}\xb7.\xcc" "\x1c\xd8\x9e,o;F\xcc\xbe\x34\x65\x4N&T\xe9\xcf\xeb\xd5\x96\xed!i\x83\xbc\x66v;\x80" "\r_\x89pN\x89\x36\xa9\xee@\"d\x5\x82\xc9re\xf2\x9c\xf8\xad\xed\xe8\n\xb3\x85\x37" "\x91-\x11>_+\x82\x8dhn\x8aZz\xb9\x80\x32\x32WJB\xa0\x30\x7f\xc1\x86\x8b_=\x16l\x13" "\xad\x35\xbb)\x5\x11\x36\x91j\xb5&3]\xd2+\n\x80\x80\x1c\xc0\xab\xc3\x11m\xf7\xc9" " \xb3\xa7so\xe\xd5\x13\xdf\x45H\x8c\x62\xd0\xf2-\xb0R\x9c\x39}\xb8\xd8\x32\x89l\xd1" "L\x8\xb1t\xda\xf0~\xebs\xb2\x90s\xb4R~RYy\"<\x88P^\xadn\xefRp[\xfb\x83\x64:\xc1\x1" "3z\xe5\xff\xc5\xf4\x62T\x17\xbe\x88m\xa8\x9{\x1e=\xec\x92\x65\x9a\x61]\xf7\xc5\xca" "%\xe3\xca\xec$\xfe\x45\x44\x65\xd8>h\xce^\xfdio^\x17\xaeQ\xab\xd5\x1\x8d\x1f\x92" "\xfc\x9eXLk\xc8\x82\x88\x1f\x6v\x94|\xf9n\xd7u\xe9\xbbN\x80v\x1f|\xecs%\xf4\x88\xd0" "t\"i\x8jU\xa4\xe2\xae\xca=\xdc`3\xae:\x18<\xfe\n\xb8\x91\xd1\x7\x99Jh\xa1\x1e\xf7" "\x12\x8en\x12<1Z\x15\x1b=8A\x1d\xbc\x64t!\x1dgb\xf\x41#_\x1dJp\x80\xe1\xdd\xb0\xe5" "\xf4\xf5\x96\xbe\x2\xec\x17\xdd\xd9\x38\x8e\x45\xab\xbf\xa6\x62[\x81\xa1\x41\xc3" "\xda\xe6\x11\xf8\xb7\x44W\x1e \xd8\x80Y7M\xcf\xaa\xa1\xfaY\x8a:.\xfb\x31\xb0\xac" "dRn\xa0\xa7\x82\x8f\x81\x7\xe0m\xaa\x1c\xa6|YF\nI\xf6\x16L\xf4K|\x18\xd7\x8e\x10" "\xc4V_Jen\xe\x6\xdb\xd9\x11J\xd8\xadI\xd4\x8f/Y\x91Pg\xf0\r\x9c&+&G\xaa\xdc\x8f\xe2" "\x9f\xc1\x8f\xb0 ><\x1f\xdcW\xe\x5\xe3\xc3\xfe\xee\x8c\x30>\xac\xbb\x1a\xd8\xc5\x9b" "l?\xb0\x32\x1d\x44\x1ak\xbc\x12\xc2l\x8a\xd6\xe1\xba\xc3\x31\xad\x1f:\xf7\x8f\x2" "\xb\xe5\x19}\x11\xa2\x62\x62S\\5\x86\x42H5k\xb4\xb3H[\xc0\xab\xb8\xa7\xbb\xc5V\x5" "C}7\xcd`A\x9d@\x97o\xfb\xe0\xf%\xc2\xd1\x97\x80\xc0\xa4,0 \xbb?\xbe\x18P\x8\x1a\xa8" "\x15\x5\xa3\x65\x82\xa3\xa2\x33\x15\xd4?\\\xa1\x62\xba\xdfv\xe1\x7T\x8b\\TP\x6t0" "\xa1\xa4\x19\x8c\xe0\x17\xb9\xf8\xb|\xe1\xe5K7\xb4\x8cm\xaf\xb9/\xc1\x44I\x19m\xf5" "IVN\xc8\x63-o\"\x1c\x9d@\xcf[\x9e\x9e`\xc7\xe5~As\xd7\x1d\xf\x0\xaa\xaa\xd8\x44\xb4" "\xa5\xc4\xee,\xaay\x94\xb5\x8a$#9\xf3\xfc\xd7q\x91I\xa3\x8b\xbaZn\x15\x1a,g\xefU" "\xca<\xef\xf4\x96\x45\xf8\xee\x95=\xb0|\x84\x83\x9\xc2\x5\xf8\x14\xb7\xb2\xfa\xb2" "\xd3\xda\xb8\x31\x30\x15\xd3\xf1\x98\xec\xee\xdaJ\xc2\x1b\x41~1\x88\x7f\x89\xa5v" "-\x13\xea\xaa\x84\xd2\x35\x3\xcqfJ\xf4\x9f\x18\x17\x89\xfd\xfd\x66\x93\x3\xea\xe9" "%\xb1\x81\xbe\x88\xc4\xd3\xb5kh\xfe\xd6\xbb\xd6*\xc9\x9dP3[&\x9c\xb2O-3\x1e \x18" "W\r\"w\xee\x15\x8\xf7\xd6i\xc5\xa4\x9d\xd8\x0\x90\xce\xd7\x1a\xad,\xdewtd,\xbb\x1" "\xa1\xcd\xe2\xb8\x1a\xb7\xd9\xf\xf3\xbf\xf2\x11L\x7\xd9\x35n\xc7@A\xd8/TZ\xf1\xc9" "\xce\xe\xee\xc2Z\xd4I5\xb9k\x8d\x13\xd6\xec\x83\xd9\xc5\xff\xe2\x46\x63\x16\x97\x5" "\x8c\x14\xce\xd0\x9f\x9c'\x4\xe9q1-\xdd\xe2\xb7\xe5\x85-L\xe7yw4\x95\x8a\x18\xb8" "\xd0;\xffW\x89w\xa6l\xd2'{5\x8b\xba\x82m\x8\x81\xe6\xfb\x95\x4s\xf0\xeb\xe7\x6\x30" "n\x1a\xd7\xfb\xc5\x2\xb1v\xa5\xed\xd0( -\xf2\x81&F\x82\xd7^\x1e\x8f\xde\x36\xb\x38" "\x18\xc4\xc7\xf1\xc2\xf9\x46\xf\x92\xb2\xa1\x1f\x99>\x9bg\xb6nZf\xbc\xb6\xc2\x10" "\xafh\xf0 \xa2|ju\xab!K3\x99\x44!*\xe2\x6\xab\xd7\xa4+\xf)\xca\xaf\x64$\xb6\xfa\xa5" "\x16\x95IX\xf0\x1bN\xff\x82\x9f\xb3\x4\xaa\x7\xd3\xe7\xd2\xd6tS\xc1\xff\x85,\x85" "\x99hs\xc9y\xfbr\xafQF\xce\x63\x65\xda\xbb\x87Q\xf0\xd4\xdcX\xa0ks-\xa7\xd7\x31\xab" "\n\x8a$\xa7\x64v\xec\x8b\xfb\xa2\xa6?}\x8fZK\xbc\xe2LS'\x1f\x84\xd6\x14\x31s\xd1" "\xca\xef\xc1]]{\xa5\x44N\n\xf7\x30\xe6\xa0\x9e\x8e@\xf9\x94\xa8Z1\xfa\x65\x9e\x5" "\x94\x36\x9a\xa7\x13\xf9\n\x95\r\x89\x12\x41\x38H\x18\x42\x64\xfc\x0:\x15X@\xcd\x80" "\xfa\x9aj\x16wS\x94\xa3\xcex\x9\x96\xc9\xeag97\xcc:\x95T\xce\x38\x34\xcf\x61\xec" "\x1\x30\x92\xc7\xab\x9d\x34\xc6mL\xec\xa7\x39`\x9c\x1b:j\x9d\x33'\x1c|\xd7G\xae'" ",\x9a\xd4\xee\x81@-\xe6\x19\xe0\xc9\xe5\x85\xc3\xa7\xfe\x98\x9d\xf3\xaa\xee\x93\x18" "Pm\x93\x4[\x19I\xc0La\xb6\x9b\xa9\nh`\xdc\x93\x9e\xc7" "\x87\x5\x37\x62;\x93K\xc2\x10\x44\x87\xcf,O\xb6\xc7\xc2@\xef\xab\xd6|\xac^nQU\xe9" "\x15~\xb4:\xba\x84\x94\xce\x85:\xc\x6k\x9d\x9\x39\x92\xe\x8f:RK\xb9\xf0\x33\xe3\x41" "\xaa\x93/\xc3_\x9b\x4!\xd1\x8\\q\x96\xe3\x41W\x18x\xe4\x4\x66\xf3\xad[\x9f\x8d\xb" "\xcc{\xe\x66\x35%yI\xd7\x8f\xe6\x31\x7f\x81\xdb\x31z\x18j\x8d\xfdR\xbdT\x9e\xde\xb4" "\x97\x30z\xc6\x7Z<\xdc[\x2\x41\x1f\xf9\xb5\x43\xeb\x42*\x1\x89k\xfc\x35\rh\xd8\xe1" "\xc1s|S\xfcq_q|\x3\xd8\x96\xf9XbG|\xdd\x8e\x46\x99\xc7\xbf\x30\x98I\x8dx\x98o\x97" "@\xa6\x62\x95\x33\xabG\xd4\xbf\x85\xff\xa6#Z\xb5\x31\xb5Syj5a\xeb\x81\x93\xbd\xd2" "\x7'g\x97\xa6P,\x14\xef\x1d_L\xf4(oI\xeajw\xf4\x95\\G\xc8\x64\x85\x90\xe9\x33\x2" "\x8d\xd8\x2\xfa\xc4\x42W\x13\x97\x42\x9av\xbfv\xb8wB\n%'oC\xf5\x7\xb1[\xa8\xaa\xba" "\x95\xdb\x92kA\x8c\xbb\x92\xbf\xe6\x89\x9c\x0\x97\xe\xca\x34z\xdd\x1b~\xbeT\x7f\x10" "\xf4\xf1\xfd\xa8\xc6\x97\x8\xf8_\x99\x14LK\x1eT\xfc\x16\x80J<\x89\xabTc@\x9a\x81" "S\xbf\xd9\xc6\x44\"#D\x88-I\x92\xfa\x32\xfb\xa5\x45'\xc5S\xfb\x9a\x80-\xbc~\xd7(" "]\xc7\xe\x41\xe9Kf\xb5\xce\x1e\xae\xa1\x46\x36\x30\xfb\x19?\xcb\xeb\x7:\x82\x12\x15" "\xa0)o\x96\x38\x15\xce\x97\xaa\x66.}\x89\x0\xdd_>0\xa8#d\xc9\xd7\x3\\\xe8\x7r\xfa" "{\x81\x31\x41\xe7\xf4x^\x4W\x19\x9c\xbe\x95*\xb8\xaf{{j\xa8\xa0<\x90\x15\x99m\xf3" "\x81\xf3\x88v\xc3\xc9g\x95\x1d\xfd\xcc\x3\xcf\xe5S\xecK\x5\xa8pn'\x15\x80\xef\xed" "\x12\xc9\xf9S\xec\xd4\xe0\xe0\x63U\xd9\xb2\x4\x10\xf8\x8b\xd0U\xa7\x83\xaeN\x7f\x1f" "\xe9\x7\xa5\xb7\xaf\xeb\x64\xf0\xea\xfd\xc6K\xad\x11Hr\n\xd6\xa5\xb3z\x8e(\xfe\xba" ")\xd2\xfb]\xbc\x11\x3\x12?k\xe7\xa0rI\xe1\x44-\xd0\x36Y\xbe\xd1_\x13\xc1~\x15\x83" "\xce>i\xa2\xfb\x1a\x8b\xf8\r\x10\x6\x33U\xb\x8k\x93$0\x9e\xe0P\xac\x63z\xc9\x1eQ" "\x8am\x99\xc8.\xdf\xa5\xd4\xad\x1e\x3%&\xb0z*#R\xb\x33\xf0\xa4n\"\xd4\x12+\xdb[\xcb" "\xd1\xa6}\xc0\xd8\xe7\x2\xd5\xcf`(\x4\xc1(\xd1\xf5n\x80-C|3\xfc\x8f\xda\xdb\xc4;" "=Q7\xa7\xc|G\xb8+G\xda|\xb4\xab\xd9\xb4\x10\x42-\xf6#\xb8\xd9\x16Q\xd4\xf6_Bc\x7" "\x88\x2\x83-??Ugx\xba\xee\xb2\x84+\x85\xe3_\xf2=\x7G\xff\x35\xbd\x30\xd0\x4\x82\xac" "\xa8\xdc\"}\x1b>\xcb\xd5\x98\x93\x18\xe4\x95\xc4\x4\x97\xc3\x8f(l=CH\x9b\x16\xe3" "\x99\x0*\x86i<\xe\x61\xb4\\\x16\xcbP\xc6YU9\xd2\x65\xd6\xbbp4\xc7\xe3\x34ur\x87\x9a" "\x99\xd6\xe9\xdf\xd3TYk`\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30" "0000000000000000000000000000000000000000000000000000000\r00000000000000000000000" "00000000000000000000000000000000000000000\r0000000000000000000000000000000000000" "000000000000000000000000000\r000000000000000000000000000000000000000000000000000" "0000000000000\r0000000000000000000000000000000000000000000000000000000000000000\r" "0000000000000000000000000000000000000000000000000000000000000000\r00000000000000" "00000000000000000000000000000000000000000000000000\r0000000000000000000000000000" "000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n019004l_afm_len = 31595; char* n019004l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusSanL-Bold\n" "FullName Nimbus Sans L Bold\nFamilyName Nimbus Sans L\nWeight Bold\nItalicAngle " "0.0\nIsFixedPitch false\nUnderlinePosition -155\nUnderlineThickness 69\nVersion " "1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Development\nEncodingSch" "eme AdobeStandardEncoding\nFontBBox -173 -307 1003 949\nCapHeight 729\nXHeight 5" "40\nDescender -217\nAscender 729\nStartCharMetrics 316\nC 32 ; WX 278 ; N space " "; B 214 0 214 0 ;\nC 33 ; WX 333 ; N exclam ; B 112 0 262 726 ;\nC 34 ; WX 474 ;" " N quotedbl ; B 50 470 424 729 ;\nC 35 ; WX 556 ; N numbersign ; B 3 -32 553 697" " ;\nC 36 ; WX 556 ; N dollar ; B 22 -126 527 763 ;\nC 37 ; WX 889 ; N percent ; " "B 22 -20 863 709 ;\nC 38 ; WX 722 ; N ampersand ; B 55 -23 694 723 ;\nC 39 ; WX " "278 ; N quoteright ; B 66 469 201 729 ;\nC 40 ; WX 333 ; N parenleft ; B 40 -200" " 303 729 ;\nC 41 ; WX 333 ; N parenright ; B 22 -200 285 729 ;\nC 42 ; WX 389 ; " "N asterisk ; B 23 407 357 729 ;\nC 43 ; WX 584 ; N plus ; B 50 -10 533 473 ;\nC " "44 ; WX 278 ; N comma ; B 64 -174 214 146 ;\nC 45 ; WX 333 ; N hyphen ; B 26 207" " 298 342 ;\nC 46 ; WX 278 ; N period ; B 64 0 214 146 ;\nC 47 ; WX 278 ; N slash" " ; B 2 -14 275 714 ;\nC 48 ; WX 556 ; N zero ; B 29 -23 517 724 ;\nC 49 ; WX 556" " ; N one ; B 68 0 378 709 ;\nC 50 ; WX 556 ; N two ; B 30 0 515 724 ;\nC 51 ; WX" " 556 ; N three ; B 29 -23 516 724 ;\nC 52 ; WX 556 ; N four ; B 24 0 522 709 ;\n" "C 53 ; WX 556 ; N five ; B 27 -23 517 709 ;\nC 54 ; WX 556 ; N six ; B 32 -23 51" "9 724 ;\nC 55 ; WX 556 ; N seven ; B 29 0 528 709 ;\nC 56 ; WX 556 ; N eight ; B" " 22 -23 525 724 ;\nC 57 ; WX 556 ; N nine ; B 28 -24 516 724 ;\nC 58 ; WX 333 ; " "N colon ; B 113 0 263 520 ;\nC 59 ; WX 333 ; N semicolon ; B 113 -174 263 520 ;\n" "C 60 ; WX 584 ; N less ; B 40 -10 529 474 ;\nC 61 ; WX 584 ; N equal ; B 50 52 5" "34 411 ;\nC 62 ; WX 584 ; N greater ; B 40 -10 529 474 ;\nC 63 ; WX 611 ; N ques" "tion ; B 64 0 556 744 ;\nC 64 ; WX 975 ; N at ; B 27 -138 947 745 ;\nC 65 ; WX 7" "22 ; N A ; B 26 0 703 729 ;\nC 66 ; WX 722 ; N B ; B 82 0 666 729 ;\nC 67 ; WX 7" "22 ; N C ; B 44 -23 685 741 ;\nC 68 ; WX 722 ; N D ; B 77 0 681 729 ;\nC 69 ; WX" " 667 ; N E ; B 79 0 624 729 ;\nC 70 ; WX 611 ; N F ; B 74 0 586 729 ;\nC 71 ; WX" " 778 ; N G ; B 42 -23 711 741 ;\nC 72 ; WX 722 ; N H ; B 68 0 657 729 ;\nC 73 ; " "WX 278 ; N I ; B 63 0 213 729 ;\nC 74 ; WX 556 ; N J ; B 24 -23 486 729 ;\nC 75 " "; WX 722 ; N K ; B 74 0 717 729 ;\nC 76 ; WX 611 ; N L ; B 80 0 579 729 ;\nC 77 " "; WX 833 ; N M ; B 66 0 776 729 ;\nC 78 ; WX 722 ; N N ; B 68 0 661 729 ;\nC 79 " "; WX 778 ; N O ; B 40 -23 742 741 ;\nC 80 ; WX 667 ; N P ; B 76 0 633 729 ;\nC 8" "1 ; WX 778 ; N Q ; B 43 -54 745 741 ;\nC 82 ; WX 722 ; N R ; B 80 0 677 729 ;\nC" " 83 ; WX 667 ; N S ; B 32 -23 633 741 ;\nC 84 ; WX 611 ; N T ; B 14 0 598 729 ;\n" "C 85 ; WX 722 ; N U ; B 76 -23 654 729 ;\nC 86 ; WX 667 ; N V ; B 24 0 647 729 ;" "\nC 87 ; WX 944 ; N W ; B 13 0 932 729 ;\nC 88 ; WX 667 ; N X ; B 22 0 653 729 ;" "\nC 89 ; WX 667 ; N Y ; B 27 0 650 729 ;\nC 90 ; WX 611 ; N Z ; B 30 0 578 729 ;" "\nC 91 ; WX 333 ; N bracketleft ; B 66 -200 308 729 ;\nC 92 ; WX 278 ; N backsla" "sh ; B -12 -14 289 714 ;\nC 93 ; WX 333 ; N bracketright ; B 18 -200 260 729 ;\n" "C 94 ; WX 584 ; N asciicircum ; B 61 270 522 695 ;\nC 95 ; WX 556 ; N underscore" " ; B -22 -189 578 -120 ;\nC 96 ; WX 278 ; N quoteleft ; B 67 469 202 729 ;\nC 97" " ; WX 556 ; N a ; B 28 -23 524 549 ;\nC 98 ; WX 611 ; N b ; B 59 -23 575 729 ;\n" "C 99 ; WX 556 ; N c ; B 34 -23 522 549 ;\nC 100 ; WX 611 ; N d ; B 29 -23 545 72" "9 ;\nC 101 ; WX 556 ; N e ; B 22 -23 525 549 ;\nC 102 ; WX 333 ; N f ; B 14 0 31" "3 729 ;\nC 103 ; WX 611 ; N g ; B 34 -218 541 549 ;\nC 104 ; WX 611 ; N h ; B 67" " 0 541 729 ;\nC 105 ; WX 278 ; N i ; B 67 0 207 729 ;\nC 106 ; WX 278 ; N j ; B " "4 -218 210 729 ;\nC 107 ; WX 556 ; N k ; B 59 0 548 729 ;\nC 108 ; WX 278 ; N l " "; B 67 0 207 729 ;\nC 109 ; WX 889 ; N m ; B 60 0 824 549 ;\nC 110 ; WX 611 ; N " "n ; B 63 0 546 549 ;\nC 111 ; WX 611 ; N o ; B 35 -23 569 549 ;\nC 112 ; WX 611 " "; N p ; B 58 -218 574 549 ;\nC 113 ; WX 611 ; N q ; B 28 -218 544 549 ;\nC 114 ;" " WX 389 ; N r ; B 63 0 370 549 ;\nC 115 ; WX 556 ; N s ; B 29 -23 520 549 ;\nC 1" "16 ; WX 333 ; N t ; B 14 -23 301 674 ;\nC 117 ; WX 611 ; N u ; B 58 -23 541 540 " ";\nC 118 ; WX 556 ; N v ; B 14 0 536 540 ;\nC 119 ; WX 778 ; N w ; B 5 0 766 540" " ;\nC 120 ; WX 556 ; N x ; B 16 0 535 540 ;\nC 121 ; WX 556 ; N y ; B 9 -219 538" " 540 ;\nC 122 ; WX 500 ; N z ; B 21 0 468 540 ;\nC 123 ; WX 389 ; N braceleft ; " "B 37 -200 317 729 ;\nC 124 ; WX 280 ; N bar ; B 100 -200 180 729 ;\nC 125 ; WX 3" "89 ; N braceright ; B 72 -200 352 729 ;\nC 126 ; WX 584 ; N asciitilde ; B 60 14" "2 519 314 ;\nC 161 ; WX 333 ; N exclamdown ; B 66 -186 216 540 ;\nC 162 ; WX 556" " ; N cent ; B 36 -124 522 634 ;\nC 163 ; WX 556 ; N sterling ; B 31 -23 537 715 " ";\nC 164 ; WX 167 ; N fraction ; B -173 -20 337 715 ;\nC 165 ; WX 556 ; N yen ; " "B 5 0 552 704 ;\nC 166 ; WX 556 ; N florin ; B 21 -220 535 744 ;\nC 167 ; WX 556" " ; N section ; B 33 -201 518 723 ;\nC 168 ; WX 556 ; N currency ; B 26 100 530 6" "04 ;\nC 169 ; WX 238 ; N quotesingle ; B 50 470 188 729 ;\nC 170 ; WX 500 ; N qu" "otedblleft ; B 71 469 433 729 ;\nC 171 ; WX 556 ; N guillemotleft ; B 88 72 468 " "481 ;\nC 172 ; WX 333 ; N guilsinglleft ; B 83 72 250 481 ;\nC 173 ; WX 333 ; N " "guilsinglright ; B 80 72 247 481 ;\nC 174 ; WX 611 ; N fi ; B 9 0 548 729 ;\nC 1" "75 ; WX 611 ; N fl ; B 12 0 546 729 ;\nC 177 ; WX 556 ; N endash ; B -9 207 557 " "311 ;\nC 178 ; WX 556 ; N dagger ; B 31 -194 523 709 ;\nC 179 ; WX 556 ; N dagge" "rdbl ; B 28 -194 520 709 ;\nC 180 ; WX 278 ; N periodcentered ; B 64 169 188 292" " ;\nC 182 ; WX 556 ; N paragraph ; B 19 -191 529 729 ;\nC 183 ; WX 350 ; N bulle" "t ; B 50 175 300 425 ;\nC 184 ; WX 278 ; N quotesinglbase ; B 66 -135 201 125 ;\n" "C 185 ; WX 500 ; N quotedblbase ; B 72 -135 432 125 ;\nC 186 ; WX 500 ; N quoted" "blright ; B 73 469 440 729 ;\nC 187 ; WX 556 ; N guillemotright ; B 88 72 462 48" "1 ;\nC 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;\nC 189 ; WX 1000 ; N pertho" "usand ; B 11 -22 990 739 ;\nC 191 ; WX 611 ; N questiondown ; B 51 -204 544 540 " ";\nC 193 ; WX 333 ; N grave ; B 17 607 213 757 ;\nC 194 ; WX 333 ; N acute ; B 1" "21 607 317 757 ;\nC 195 ; WX 333 ; N circumflex ; B 8 607 326 757 ;\nC 196 ; WX " "333 ; N tilde ; B -9 621 345 749 ;\nC 197 ; WX 333 ; N macron ; B 16 640 315 719" " ;\nC 198 ; WX 333 ; N breve ; B 35 605 299 748 ;\nC 199 ; WX 333 ; N dotaccent " "; B 112 621 222 743 ;\nC 200 ; WX 333 ; N dieresis ; B 18 621 314 743 ;\nC 202 ;" " WX 333 ; N ring ; B 77 590 257 770 ;\nC 203 ; WX 333 ; N cedilla ; B 27 -220 29" "4 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B -44 610 340 757 ;\nC 206 ; WX 333 ; N" " ogonek ; B 45 -234 268 0 ;\nC 207 ; WX 333 ; N caron ; B 9 607 327 757 ;\nC 208" " ; WX 1000 ; N emdash ; B -7 207 1003 311 ;\nC 225 ; WX 1000 ; N AE ; B 1 0 966 " "729 ;\nC 227 ; WX 370 ; N ordfeminine ; B 31 262 329 729 ;\nC 232 ; WX 611 ; N L" "slash ; B 0 0 597 729 ;\nC 233 ; WX 778 ; N Oslash ; B 31 -39 755 749 ;\nC 234 ;" " WX 1000 ; N OE ; B 28 -23 970 741 ;\nC 235 ; WX 365 ; N ordmasculine ; B 23 262" " 343 729 ;\nC 241 ; WX 889 ; N ae ; B 27 -24 857 549 ;\nC 245 ; WX 278 ; N dotle" "ssi ; B 67 0 207 540 ;\nC 248 ; WX 278 ; N lslash ; B 0 0 252 729 ;\nC 249 ; WX " "611 ; N oslash ; B 11 -38 598 557 ;\nC 250 ; WX 944 ; N oe ; B 23 -23 920 549 ;\n" "C 251 ; WX 611 ; N germandbls ; B 67 -17 575 729 ;\nC -1 ; WX 722 ; N Udieresis " "; B 76 -23 654 922 ;\nC -1 ; WX 722 ; N Uacute ; B 76 -23 654 936 ;\nC -1 ; WX 6" "67 ; N Scedilla ; B 32 -220 633 741 ;\nC -1 ; WX 611 ; N Tcaron ; B 14 0 598 936" " ;\nC -1 ; WX 667 ; N Scaron ; B 32 -23 633 936 ;\nC -1 ; WX 722 ; N Rcaron ; B " "80 0 677 936 ;\nC -1 ; WX 722 ; N Racute ; B 80 0 677 936 ;\nC -1 ; WX 667 ; N S" "acute ; B 32 -23 633 936 ;\nC -1 ; WX 778 ; N Otilde ; B 40 -23 742 928 ;\nC -1 " "; WX 611 ; N ucircumflex ; B 58 -23 541 757 ;\nC -1 ; WX 778 ; N Ohungarumlaut ;" " B 40 -23 742 936 ;\nC -1 ; WX 722 ; N Uhungarumlaut ; B 76 -23 654 936 ;\nC -1 " "; WX 667 ; N Yacute ; B 27 0 650 936 ;\nC -1 ; WX 722 ; N Eth ; B 0 0 681 729 ;\n" "C -1 ; WX 722 ; N Dcroat ; B 0 0 681 729 ;\nC -1 ; WX 611 ; N Zacute ; B 30 0 57" "8 936 ;\nC -1 ; WX 722 ; N Uring ; B 76 -23 654 949 ;\nC -1 ; WX 611 ; N gbreve " "; B 34 -218 541 748 ;\nC -1 ; WX 556 ; N eogonek ; B 21 -234 525 549 ;\nC -1 ; W" "X 556 ; N edotaccent ; B 22 -23 525 743 ;\nC -1 ; WX 556 ; N ecaron ; B 22 -23 5" "25 757 ;\nC -1 ; WX 722 ; N Ugrave ; B 76 -23 654 936 ;\nC -1 ; WX 667 ; N Thorn" " ; B 76 0 633 729 ;\nC -1 ; WX 556 ; N eacute ; B 22 -23 525 757 ;\nC -1 ; WX 55" "6 ; N edieresis ; B 22 -23 525 743 ;\nC -1 ; WX 707 ; N dcaron ; B 29 -23 720 72" "9 ;\nC -1 ; WX 556 ; N ccedilla ; B 34 -220 522 549 ;\nC -1 ; WX 556 ; N ccaron " "; B 34 -23 522 757 ;\nC -1 ; WX 556 ; N cacute ; B 34 -23 522 757 ;\nC -1 ; WX 5" "56 ; N aogonek ; B 28 -233 548 549 ;\nC -1 ; WX 556 ; N aring ; B 28 -23 524 770" " ;\nC -1 ; WX 556 ; N atilde ; B 28 -23 524 749 ;\nC -1 ; WX 556 ; N abreve ; B " "28 -23 524 748 ;\nC -1 ; WX 556 ; N egrave ; B 22 -23 525 757 ;\nC -1 ; WX 556 ;" " N agrave ; B 28 -23 524 757 ;\nC -1 ; WX 556 ; N aacute ; B 28 -23 524 757 ;\nC" " -1 ; WX 556 ; N adieresis ; B 28 -23 524 743 ;\nC -1 ; WX 722 ; N Uogonek ; B 7" "6 -234 654 729 ;\nC -1 ; WX 611 ; N ugrave ; B 58 -23 541 757 ;\nC -1 ; WX 611 ;" " N uacute ; B 58 -23 541 757 ;\nC -1 ; WX 611 ; N udieresis ; B 58 -23 541 743 ;" "\nC -1 ; WX 385 ; N tcaron ; B 14 -23 398 829 ;\nC -1 ; WX 556 ; N scommaaccent " "; B 29 -307 520 549 ;\nC -1 ; WX 611 ; N Zcaron ; B 30 0 578 936 ;\nC -1 ; WX 55" "6 ; N ecircumflex ; B 22 -23 525 757 ;\nC -1 ; WX 722 ; N Ucircumflex ; B 76 -23" " 654 936 ;\nC -1 ; WX 556 ; N acircumflex ; B 28 -23 524 757 ;\nC -1 ; WX 611 ; " "N Zdotaccent ; B 30 0 578 922 ;\nC -1 ; WX 556 ; N scaron ; B 29 -23 520 757 ;\n" "C -1 ; WX 722 ; N Amacron ; B 26 0 703 898 ;\nC -1 ; WX 556 ; N sacute ; B 29 -2" "3 520 757 ;\nC -1 ; WX 611 ; N Tcommaaccent ; B 14 -307 598 729 ;\nC -1 ; WX 667" " ; N Ydieresis ; B 27 0 650 922 ;\nC -1 ; WX 611 ; N thorn ; B 58 -218 574 729 ;" "\nC -1 ; WX 667 ; N Emacron ; B 79 0 624 898 ;\nC -1 ; WX 778 ; N Ograve ; B 40 " "-23 742 936 ;\nC -1 ; WX 778 ; N Oacute ; B 40 -23 742 936 ;\nC -1 ; WX 778 ; N " "Odieresis ; B 40 -23 742 922 ;\nC -1 ; WX 722 ; N Ntilde ; B 68 0 661 928 ;\nC -" "1 ; WX 722 ; N Ncaron ; B 68 0 661 936 ;\nC -1 ; WX 722 ; N Nacute ; B 68 0 661 " "936 ;\nC -1 ; WX 611 ; N Lcaron ; B 80 0 579 729 ;\nC -1 ; WX 611 ; N Lacute ; B" " 80 0 579 936 ;\nC -1 ; WX 278 ; N Idotaccent ; B 63 0 213 922 ;\nC -1 ; WX 389 " "; N racute ; B 63 0 370 757 ;\nC -1 ; WX 278 ; N Icircumflex ; B -19 0 299 936 ;" "\nC -1 ; WX 611 ; N ohungarumlaut ; B 35 -23 569 757 ;\nC -1 ; WX 611 ; N otilde" " ; B 35 -23 569 749 ;\nC -1 ; WX 556 ; N Euro ; B 6 -23 546 724 ;\nC -1 ; WX 611" " ; N ocircumflex ; B 35 -23 569 757 ;\nC -1 ; WX 351 ; N onesuperior ; B 40 284 " "242 709 ;\nC -1 ; WX 351 ; N twosuperior ; B 16 284 328 718 ;\nC -1 ; WX 351 ; N" " threesuperior ; B 15 271 329 718 ;\nC -1 ; WX 278 ; N Igrave ; B -10 0 213 936 " ";\nC -1 ; WX 278 ; N Iacute ; B 63 0 290 936 ;\nC -1 ; WX 278 ; N Imacron ; B 2 " "0 274 898 ;\nC -1 ; WX 278 ; N Iogonek ; B 34 -233 237 729 ;\nC -1 ; WX 278 ; N " "Idieresis ; B -9 0 287 922 ;\nC -1 ; WX 778 ; N Gbreve ; B 42 -23 711 927 ;\nC -" "1 ; WX 722 ; N Umacron ; B 76 -23 654 898 ;\nC -1 ; WX 722 ; N Kcommaaccent ; B " "74 -307 717 729 ;\nC -1 ; WX 611 ; N ograve ; B 35 -23 569 757 ;\nC -1 ; WX 667 " "; N Scommaaccent ; B 32 -307 633 741 ;\nC -1 ; WX 667 ; N Eogonek ; B 79 -233 64" "8 729 ;\nC -1 ; WX 611 ; N oacute ; B 35 -23 569 757 ;\nC -1 ; WX 667 ; N Edotac" "cent ; B 79 0 624 922 ;\nC -1 ; WX 278 ; N iogonek ; B 34 -233 231 729 ;\nC -1 ;" " WX 611 ; N gcommaaccent ; B 34 -218 541 853 ;\nC -1 ; WX 611 ; N odieresis ; B " "35 -23 569 743 ;\nC -1 ; WX 611 ; N ntilde ; B 63 0 546 749 ;\nC -1 ; WX 611 ; N" " ncaron ; B 63 0 546 757 ;\nC -1 ; WX 667 ; N Ecaron ; B 79 0 624 936 ;\nC -1 ; " "WX 667 ; N Ecircumflex ; B 79 0 624 936 ;\nC -1 ; WX 556 ; N scedilla ; B 29 -22" "0 520 549 ;\nC -1 ; WX 389 ; N rcaron ; B 54 0 372 757 ;\nC -1 ; WX 667 ; N Egra" "ve ; B 79 0 624 936 ;\nC -1 ; WX 667 ; N Eacute ; B 79 0 624 936 ;\nC -1 ; WX 77" "8 ; N Gcommaaccent ; B 42 -307 711 741 ;\nC -1 ; WX 722 ; N Rcommaaccent ; B 80 " "-307 677 729 ;\nC -1 ; WX 667 ; N Edieresis ; B 79 0 624 922 ;\nC -1 ; WX 611 ; " "N nacute ; B 63 0 546 757 ;\nC -1 ; WX 611 ; N uogonek ; B 58 -233 564 540 ;\nC " "-1 ; WX 611 ; N umacron ; B 58 -23 541 719 ;\nC -1 ; WX 722 ; N Dcaron ; B 77 0 " "681 936 ;\nC -1 ; WX 369 ; N lcaron ; B 67 0 382 729 ;\nC -1 ; WX 722 ; N Ccaron" " ; B 44 -23 685 936 ;\nC -1 ; WX 722 ; N Cacute ; B 44 -23 685 936 ;\nC -1 ; WX " "722 ; N Ccedilla ; B 44 -220 685 741 ;\nC -1 ; WX 606 ; N degree ; B 151 383 454" " 686 ;\nC -1 ; WX 722 ; N Aogonek ; B 26 -233 723 729 ;\nC -1 ; WX 584 ; N minus" " ; B 40 172 544 291 ;\nC -1 ; WX 584 ; N multiply ; B 79 18 505 444 ;\nC -1 ; WX" " 584 ; N divide ; B 50 -11 534 474 ;\nC -1 ; WX 722 ; N Aring ; B 26 0 703 949 ;" "\nC -1 ; WX 1000 ; N trademark ; B 71 273 929 729 ;\nC -1 ; WX 389 ; N rcommaacc" "ent ; B 63 -307 370 549 ;\nC -1 ; WX 278 ; N lacute ; B 67 0 278 936 ;\nC -1 ; W" "X 611 ; N omacron ; B 35 -23 569 719 ;\nC -1 ; WX 722 ; N Atilde ; B 26 0 703 92" "8 ;\nC -1 ; WX 278 ; N icircumflex ; B -19 0 299 757 ;\nC -1 ; WX 278 ; N igrave" " ; B -10 0 207 757 ;\nC -1 ; WX 611 ; N ncommaaccent ; B 63 -307 546 549 ;\nC -1" " ; WX 278 ; N lcommaaccent ; B 67 -307 207 729 ;\nC -1 ; WX 584 ; N plusminus ; " "B 56 -16 527 608 ;\nC -1 ; WX 869 ; N onehalf ; B 40 -20 846 715 ;\nC -1 ; WX 86" "9 ; N onequarter ; B 40 -20 850 715 ;\nC -1 ; WX 869 ; N threequarters ; B 15 -2" "0 850 718 ;\nC -1 ; WX 278 ; N iacute ; B 67 0 290 757 ;\nC -1 ; WX 722 ; N Abre" "ve ; B 26 0 703 927 ;\nC -1 ; WX 556 ; N kcommaaccent ; B 59 -307 548 729 ;\nC -" "1 ; WX 778 ; N Omacron ; B 40 -23 742 898 ;\nC -1 ; WX 278 ; N imacron ; B 7 0 2" "66 719 ;\nC -1 ; WX 556 ; N emacron ; B 22 -23 525 719 ;\nC -1 ; WX 556 ; N amac" "ron ; B 28 -23 524 719 ;\nC -1 ; WX 333 ; N tcommaaccent ; B 14 -307 301 674 ;\n" "C -1 ; WX 556 ; N ydieresis ; B 9 -219 538 743 ;\nC -1 ; WX 500 ; N zdotaccent ;" " B 21 0 468 743 ;\nC -1 ; WX 500 ; N zcaron ; B 21 0 468 757 ;\nC -1 ; WX 500 ; " "N zacute ; B 21 0 468 757 ;\nC -1 ; WX 556 ; N yacute ; B 9 -219 538 757 ;\nC -1" " ; WX 611 ; N uhungarumlaut ; B 58 -23 559 757 ;\nC -1 ; WX 611 ; N eth ; B 35 -" "23 569 744 ;\nC -1 ; WX 611 ; N uring ; B 58 -23 541 770 ;\nC -1 ; WX 778 ; N Oc" "ircumflex ; B 40 -23 742 936 ;\nC -1 ; WX 333 ; N commaaccent ; B 112 -307 234 -" "60 ;\nC -1 ; WX 737 ; N copyright ; B -14 -22 751 743 ;\nC -1 ; WX 737 ; N regis" "tered ; B -14 -22 751 743 ;\nC -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ;\nC" " -1 ; WX 278 ; N idieresis ; B -9 0 287 743 ;\nC -1 ; WX 489 ; N lozenge ; B 16 " "0 462 744 ;\nC -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;\nC -1 ; WX 548 ; N notequ" "al ; B 50 -69 534 528 ;\nC -1 ; WX 542 ; N radical ; B 7 -36 512 913 ;\nC -1 ; W" "X 722 ; N Agrave ; B 26 0 703 936 ;\nC -1 ; WX 722 ; N Aacute ; B 26 0 703 936 ;" "\nC -1 ; WX 584 ; N lessequal ; B 45 -10 534 639 ;\nC -1 ; WX 584 ; N greaterequ" "al ; B 45 -10 534 639 ;\nC -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ;\nC -1 " "; WX 711 ; N summation ; B 17 -96 694 760 ;\nC -1 ; WX 490 ; N partialdiff ; B 2" "2 -15 458 750 ;\nC -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 661 729 ;\nC -1 ; WX" " 611 ; N dcroat ; B 29 -23 605 729 ;\nC -1 ; WX 280 ; N brokenbar ; B 100 -200 1" "80 729 ;\nC -1 ; WX 611 ; N Lcommaaccent ; B 80 -307 579 729 ;\nC -1 ; WX 722 ; " "N Adieresis ; B 26 0 703 922 ;\nC -1 ; WX 611 ; N mu ; B 58 -220 573 540 ;\nC -1" " ; WX 278 ; N .notdef ; B 214 0 214 0 ;\nEndCharMetrics\nStartKernData\nStartKer" "nPairs 998\nKPX A C -33\nKPX A Ccedilla -33\nKPX A G -35\nKPX A O -34\nKPX A Odi" "eresis -34\nKPX A Q -35\nKPX A T -81\nKPX A U -32\nKPX A Uacute -32\nKPX A Ucirc" "umflex -32\nKPX A Udieresis -32\nKPX A Ugrave -32\nKPX A V -66\nKPX A W -51\nKPX" " A Y -90\nKPX A a -1\nKPX A b -1\nKPX A c -14\nKPX A ccedilla -14\nKPX A comma 1" "9\nKPX A d -13\nKPX A e -9\nKPX A g -14\nKPX A guillemotleft -43\nKPX A guilsing" "lleft -40\nKPX A hyphen 7\nKPX A o -16\nKPX A period 19\nKPX A q -12\nKPX A quot" "edblright -65\nKPX A quoteright -61\nKPX A t -18\nKPX A u -12\nKPX A v -37\nKPX " "A w -23\nKPX A y -35\nKPX Aacute C -33\nKPX Aacute G -35\nKPX Aacute O -34\nKPX " "Aacute Q -35\nKPX Aacute T -81\nKPX Aacute U -32\nKPX Aacute V -66\nKPX Aacute W" " -51\nKPX Aacute Y -90\nKPX Aacute a -1\nKPX Aacute b -1\nKPX Aacute c -14\nKPX " "Aacute comma 19\nKPX Aacute d -13\nKPX Aacute e -9\nKPX Aacute g -14\nKPX Aacute" " guillemotleft -43\nKPX Aacute guilsinglleft -40\nKPX Aacute hyphen 7\nKPX Aacut" "e o -16\nKPX Aacute period 19\nKPX Aacute q -12\nKPX Aacute quoteright -61\nKPX " "Aacute t -18\nKPX Aacute u -12\nKPX Aacute v -37\nKPX Aacute w -23\nKPX Aacute y" " -35\nKPX Acircumflex C -33\nKPX Acircumflex G -35\nKPX Acircumflex O -34\nKPX A" "circumflex Q -35\nKPX Acircumflex T -81\nKPX Acircumflex U -32\nKPX Acircumflex " "V -66\nKPX Acircumflex W -51\nKPX Acircumflex Y -90\nKPX Acircumflex comma 19\nK" "PX Acircumflex period 19\nKPX Adieresis C -33\nKPX Adieresis G -35\nKPX Adieresi" "s O -34\nKPX Adieresis Q -35\nKPX Adieresis T -81\nKPX Adieresis U -32\nKPX Adie" "resis V -66\nKPX Adieresis W -51\nKPX Adieresis Y -90\nKPX Adieresis a -1\nKPX A" "dieresis b -1\nKPX Adieresis c -14\nKPX Adieresis comma 19\nKPX Adieresis d -13\n" "KPX Adieresis g -14\nKPX Adieresis guillemotleft -43\nKPX Adieresis guilsingllef" "t -40\nKPX Adieresis hyphen 7\nKPX Adieresis o -16\nKPX Adieresis period 19\nKPX" " Adieresis q -12\nKPX Adieresis quotedblright -65\nKPX Adieresis quoteright -61\n" "KPX Adieresis t -18\nKPX Adieresis u -12\nKPX Adieresis v -37\nKPX Adieresis w -" "23\nKPX Adieresis y -35\nKPX Agrave C -33\nKPX Agrave G -35\nKPX Agrave O -34\nK" "PX Agrave Q -35\nKPX Agrave T -81\nKPX Agrave U -32\nKPX Agrave V -66\nKPX Agrav" "e W -51\nKPX Agrave Y -90\nKPX Agrave comma 19\nKPX Agrave period 19\nKPX Aring " "C -33\nKPX Aring G -35\nKPX Aring O -34\nKPX Aring Q -35\nKPX Aring T -81\nKPX A" "ring U -32\nKPX Aring V -66\nKPX Aring W -51\nKPX Aring Y -90\nKPX Aring a -1\nK" "PX Aring b -1\nKPX Aring c -14\nKPX Aring comma 19\nKPX Aring d -13\nKPX Aring e" " -9\nKPX Aring g -14\nKPX Aring guillemotleft -43\nKPX Aring guilsinglleft -40\n" "KPX Aring hyphen 7\nKPX Aring o -16\nKPX Aring period 19\nKPX Aring q -12\nKPX A" "ring quotedblright -65\nKPX Aring quoteright -61\nKPX Aring t -18\nKPX Aring u -" "12\nKPX Aring v -37\nKPX Aring w -23\nKPX Aring y -35\nKPX Atilde C -33\nKPX Ati" "lde G -35\nKPX Atilde O -34\nKPX Atilde Q -35\nKPX Atilde T -81\nKPX Atilde U -3" "2\nKPX Atilde V -66\nKPX Atilde W -51\nKPX Atilde Y -90\nKPX Atilde comma 19\nKP" "X Atilde period 19\nKPX B A -32\nKPX B AE -20\nKPX B Aacute -32\nKPX B Acircumfl" "ex -32\nKPX B Adieresis -32\nKPX B Aring -32\nKPX B Atilde -32\nKPX B O -11\nKPX" " B OE -2\nKPX B Oacute -11\nKPX B Ocircumflex -11\nKPX B Odieresis -11\nKPX B Og" "rave -11\nKPX B Oslash -5\nKPX B V -39\nKPX B W -27\nKPX B Y -51\nKPX C A -29\nK" "PX C AE -17\nKPX C Aacute -29\nKPX C Adieresis -29\nKPX C Aring -29\nKPX C H 5\n" "KPX C K 2\nKPX C O -6\nKPX C Oacute -6\nKPX C Odieresis -6\nKPX Ccedilla A -28\n" "KPX D A -37\nKPX D Aacute -37\nKPX D Acircumflex -37\nKPX D Adieresis -37\nKPX D" " Agrave -37\nKPX D Aring -37\nKPX D Atilde -37\nKPX D J 2\nKPX D T -17\nKPX D V " "-35\nKPX D W -20\nKPX D X -35\nKPX D Y -56\nKPX F A -63\nKPX F Aacute -63\nKPX F" " Acircumflex -63\nKPX F Adieresis -63\nKPX F Agrave -63\nKPX F Aring -63\nKPX F " "Atilde -63\nKPX F J -25\nKPX F O -16\nKPX F Odieresis -16\nKPX F a -15\nKPX F aa" "cute -15\nKPX F adieresis -15\nKPX F ae -17\nKPX F aring -15\nKPX F comma -76\nK" "PX F e -7\nKPX F eacute -7\nKPX F hyphen 11\nKPX F i -7\nKPX F j -9\nKPX F o -14" "\nKPX F oacute -14\nKPX F odieresis -14\nKPX F oe -8\nKPX F oslash -15\nKPX F pe" "riod -75\nKPX F r -27\nKPX F u -24\nKPX G A -8\nKPX G AE 4\nKPX G Aacute -8\nKPX" " G Acircumflex -8\nKPX G Adieresis -8\nKPX G Agrave -8\nKPX G Aring -8\nKPX G At" "ilde -8\nKPX G T -17\nKPX G V -36\nKPX G W -20\nKPX G Y -56\nKPX J A -32\nKPX J " "AE -20\nKPX J Adieresis -32\nKPX J Aring -32\nKPX K C -53\nKPX K G -55\nKPX K O " "-54\nKPX K OE -44\nKPX K Oacute -54\nKPX K Odieresis -54\nKPX K S -30\nKPX K T 1" "3\nKPX K a -3\nKPX K adieresis -3\nKPX K ae 0\nKPX K aring -3\nKPX K e -25\nKPX " "K hyphen -44\nKPX K o -33\nKPX K oacute -33\nKPX K odieresis -33\nKPX K u -23\nK" "PX K udieresis -23\nKPX K y -65\nKPX L A 9\nKPX L AE 21\nKPX L Aacute 9\nKPX L A" "dieresis 9\nKPX L Aring 9\nKPX L C -26\nKPX L Ccedilla -26\nKPX L G -30\nKPX L O" " -29\nKPX L Oacute -29\nKPX L Ocircumflex -29\nKPX L Odieresis -29\nKPX L Ograve" " -29\nKPX L Otilde -29\nKPX L S -2\nKPX L T -95\nKPX L U -24\nKPX L Udieresis -2" "4\nKPX L V -90\nKPX L W -68\nKPX L Y -112\nKPX L hyphen -12\nKPX L quotedblright" " -141\nKPX L quoteright -138\nKPX L u -7\nKPX L udieresis -7\nKPX L y -55\nKPX N" " A -5\nKPX N AE 7\nKPX N Aacute -5\nKPX N Adieresis -5\nKPX N Aring -5\nKPX N C " "9\nKPX N Ccedilla 9\nKPX N G 8\nKPX N O 8\nKPX N Oacute 8\nKPX N Odieresis 8\nKP" "X N a 13\nKPX N aacute 13\nKPX N adieresis 13\nKPX N ae 13\nKPX N aring 13\nKPX " "N comma 15\nKPX N e 18\nKPX N eacute 18\nKPX N o 11\nKPX N oacute 11\nKPX N odie" "resis 11\nKPX N oslash 11\nKPX N period 16\nKPX N u 12\nKPX N udieresis 12\nKPX " "O A -37\nKPX O AE -26\nKPX O Aacute -37\nKPX O Adieresis -37\nKPX O Aring -37\nK" "PX O T -20\nKPX O V -36\nKPX O W -21\nKPX O X -36\nKPX O Y -59\nKPX Oacute A -37" "\nKPX Oacute T -20\nKPX Oacute V -36\nKPX Oacute W -21\nKPX Oacute Y -59\nKPX Oc" "ircumflex T -20\nKPX Ocircumflex V -36\nKPX Ocircumflex Y -59\nKPX Odieresis A -" "37\nKPX Odieresis T -20\nKPX Odieresis V -36\nKPX Odieresis W -21\nKPX Odieresis" " X -36\nKPX Odieresis Y -59\nKPX Ograve T -20\nKPX Ograve V -36\nKPX Ograve Y -5" "9\nKPX Oslash A -32\nKPX Otilde T -20\nKPX Otilde V -36\nKPX Otilde Y -59\nKPX P" " A -65\nKPX P AE -54\nKPX P Aacute -65\nKPX P Adieresis -65\nKPX P Aring -65\nKP" "X P J -44\nKPX P a -7\nKPX P aacute -7\nKPX P adieresis -7\nKPX P ae -8\nKPX P a" "ring -7\nKPX P comma -94\nKPX P e -8\nKPX P eacute -8\nKPX P hyphen 0\nKPX P o -" "14\nKPX P oacute -14\nKPX P odieresis -14\nKPX P oe -8\nKPX P oslash -17\nKPX P " "period -94\nKPX R C -5\nKPX R Ccedilla -5\nKPX R G -6\nKPX R O -6\nKPX R OE 3\nK" "PX R Oacute -6\nKPX R Odieresis -6\nKPX R T 0\nKPX R U -4\nKPX R Udieresis -4\nK" "PX R V -26\nKPX R W -17\nKPX R Y -37\nKPX R a 0\nKPX R aacute 0\nKPX R adieresis" " 0\nKPX R ae 0\nKPX R aring 0\nKPX R e 2\nKPX R eacute 2\nKPX R hyphen 15\nKPX R" " o -4\nKPX R oacute -4\nKPX R odieresis -4\nKPX R oe 1\nKPX R u 0\nKPX R uacute " "0\nKPX R udieresis 0\nKPX R y 5\nKPX S A -20\nKPX S AE -8\nKPX S Aacute -20\nKPX" " S Adieresis -20\nKPX S Aring -20\nKPX S T -5\nKPX S V -31\nKPX S W -17\nKPX S Y" " -43\nKPX S t 1\nKPX T A -87\nKPX T AE -75\nKPX T Aacute -87\nKPX T Acircumflex " "-87\nKPX T Adieresis -87\nKPX T Agrave -87\nKPX T Aring -87\nKPX T Atilde -87\nK" "PX T C -20\nKPX T G -22\nKPX T J -87\nKPX T O -22\nKPX T OE -11\nKPX T Oacute -2" "2\nKPX T Ocircumflex -22\nKPX T Odieresis -22\nKPX T Ograve -22\nKPX T Oslash -2" "3\nKPX T Otilde -22\nKPX T S 3\nKPX T V 18\nKPX T W 24\nKPX T Y 16\nKPX T a -73\n" "KPX T ae -73\nKPX T c -74\nKPX T colon -97\nKPX T comma -67\nKPX T e -69\nKPX T " "g -75\nKPX T guillemotleft -101\nKPX T guilsinglleft -98\nKPX T hyphen -48\nKPX " "T i -1\nKPX T j -3\nKPX T o -76\nKPX T oslash -73\nKPX T period -67\nKPX T r -71" "\nKPX T s -74\nKPX T semicolon -98\nKPX T u -72\nKPX T v -82\nKPX T w -77\nKPX T" " y -80\nKPX U A -34\nKPX U AE -22\nKPX U Aacute -34\nKPX U Acircumflex -34\nKPX " "U Adieresis -34\nKPX U Aring -34\nKPX U Atilde -34\nKPX U comma -7\nKPX U m 6\nK" "PX U n 5\nKPX U p 7\nKPX U period -4\nKPX U r 5\nKPX Uacute A -34\nKPX Uacute co" "mma -7\nKPX Uacute m 6\nKPX Uacute n 5\nKPX Uacute p 7\nKPX Uacute period -4\nKP" "X Uacute r 5\nKPX Ucircumflex A -34\nKPX Udieresis A -34\nKPX Udieresis b 6\nKPX" " Udieresis comma -7\nKPX Udieresis m 6\nKPX Udieresis n 5\nKPX Udieresis p 7\nKP" "X Udieresis period -4\nKPX Udieresis r 5\nKPX Ugrave A -34\nKPX V A -71\nKPX V A" "E -59\nKPX V Aacute -71\nKPX V Acircumflex -71\nKPX V Adieresis -71\nKPX V Agrav" "e -71\nKPX V Aring -71\nKPX V Atilde -71\nKPX V C -36\nKPX V G -38\nKPX V O -37\n" "KPX V Oacute -37\nKPX V Ocircumflex -37\nKPX V Odieresis -37\nKPX V Ograve -37\n" "KPX V Oslash -31\nKPX V Otilde -37\nKPX V S -21\nKPX V T 21\nKPX V a -47\nKPX V " "ae -48\nKPX V colon -65\nKPX V comma -69\nKPX V e -43\nKPX V g -49\nKPX V guille" "motleft -74\nKPX V guilsinglleft -72\nKPX V hyphen -21\nKPX V i -5\nKPX V o -50\n" "KPX V oslash -48\nKPX V period -69\nKPX V r -34\nKPX V semicolon -67\nKPX V u -3" "4\nKPX V y -10\nKPX W A -54\nKPX W AE -43\nKPX W Aacute -54\nKPX W Acircumflex -" "54\nKPX W Adieresis -54\nKPX W Agrave -54\nKPX W Aring -54\nKPX W Atilde -54\nKP" "X W C -20\nKPX W G -22\nKPX W O -21\nKPX W Oacute -21\nKPX W Ocircumflex -21\nKP" "X W Odieresis -21\nKPX W Ograve -21\nKPX W Oslash -15\nKPX W Otilde -21\nKPX W S" " -12\nKPX W T 25\nKPX W a -29\nKPX W ae -29\nKPX W colon -53\nKPX W comma -45\nK" "PX W e -24\nKPX W g -30\nKPX W guillemotleft -55\nKPX W guilsinglleft -53\nKPX W" " hyphen -3\nKPX W i -1\nKPX W o -31\nKPX W oslash -29\nKPX W period -45\nKPX W r" " -24\nKPX W semicolon -54\nKPX W u -23\nKPX W y 0\nKPX X C -34\nKPX X O -35\nKPX" " X Odieresis -35\nKPX X Q -37\nKPX X a -5\nKPX X e -25\nKPX X hyphen -27\nKPX X " "o -32\nKPX X u -25\nKPX X y -40\nKPX Y A -86\nKPX Y AE -74\nKPX Y Aacute -86\nKP" "X Y Acircumflex -86\nKPX Y Adieresis -86\nKPX Y Agrave -86\nKPX Y Aring -86\nKPX" " Y Atilde -86\nKPX Y C -52\nKPX Y G -54\nKPX Y O -54\nKPX Y Oacute -54\nKPX Y Oc" "ircumflex -54\nKPX Y Odieresis -54\nKPX Y Ograve -54\nKPX Y Oslash -47\nKPX Y Ot" "ilde -54\nKPX Y S -29\nKPX Y T 22\nKPX Y a -66\nKPX Y ae -67\nKPX Y colon -81\nK" "PX Y comma -78\nKPX Y e -63\nKPX Y g -68\nKPX Y guillemotleft -98\nKPX Y guilsin" "glleft -96\nKPX Y hyphen -50\nKPX Y i -3\nKPX Y o -70\nKPX Y oslash -67\nKPX Y p" " -45\nKPX Y period -78\nKPX Y semicolon -83\nKPX Y u -48\nKPX Y v -27\nKPX Z v -" "11\nKPX Z y -9\nKPX a j -1\nKPX a quoteright -11\nKPX a v -19\nKPX a w -5\nKPX a" " y -17\nKPX aacute v -19\nKPX aacute w -5\nKPX aacute y -17\nKPX adieresis v -19" "\nKPX adieresis w -5\nKPX adieresis y -17\nKPX ae v -21\nKPX ae w -7\nKPX ae y -" "19\nKPX agrave v -19\nKPX agrave w -5\nKPX agrave y -17\nKPX aring v -19\nKPX ar" "ing w -5\nKPX aring y -17\nKPX b v -20\nKPX b w -7\nKPX b y -20\nKPX c h 0\nKPX " "c k 3\nKPX comma one -73\nKPX comma quotedblright -33\nKPX comma quoteright -30\n" "KPX e quoteright -12\nKPX e t -4\nKPX e v -19\nKPX e w -6\nKPX e x -21\nKPX e y " "-17\nKPX eacute v -19\nKPX eacute w -6\nKPX eacute y -17\nKPX ecircumflex v -19\n" "KPX ecircumflex w -6\nKPX ecircumflex y -17\nKPX eight four 10\nKPX eight one -2" "3\nKPX eight seven -6\nKPX f a 1\nKPX f aacute 1\nKPX f adieresis 1\nKPX f ae 0\n" "KPX f aring 1\nKPX f e -3\nKPX f eacute -3\nKPX f f 21\nKPX f i -3\nKPX f j -6\n" "KPX f l -3\nKPX f o -9\nKPX f oacute -9\nKPX f odieresis -9\nKPX f oe -3\nKPX f " "oslash -9\nKPX f quoteright 10\nKPX f s -1\nKPX f t 21\nKPX five four 6\nKPX fiv" "e one -29\nKPX five seven -10\nKPX four four 9\nKPX four one -50\nKPX four seven" " -28\nKPX g a 3\nKPX g adieresis 3\nKPX g ae 3\nKPX g aring 3\nKPX g e 8\nKPX g " "eacute 8\nKPX g l 0\nKPX g oacute 1\nKPX g odieresis 1\nKPX g r 1\nKPX guillemot" "right A -51\nKPX guillemotright AE -39\nKPX guillemotright Aacute -51\nKPX guill" "emotright Adieresis -51\nKPX guillemotright Aring -51\nKPX guillemotright T -108" "\nKPX guillemotright V -78\nKPX guillemotright W -60\nKPX guillemotright Y -111\n" "KPX guilsinglright A -46\nKPX guilsinglright AE -35\nKPX guilsinglright Aacute -" "46\nKPX guilsinglright Adieresis -46\nKPX guilsinglright Aring -46\nKPX guilsing" "lright T -104\nKPX guilsinglright V -74\nKPX guilsinglright W -56\nKPX guilsingl" "right Y -107\nKPX h quoteright -14\nKPX h y -21\nKPX hyphen A -1\nKPX hyphen AE " "10\nKPX hyphen Aacute -1\nKPX hyphen Adieresis -1\nKPX hyphen Aring -1\nKPX hyph" "en T -57\nKPX hyphen V -27\nKPX hyphen W -9\nKPX hyphen Y -64\nKPX i T -4\nKPX i" " j -2\nKPX k a -2\nKPX k aacute -2\nKPX k adieresis -2\nKPX k ae 1\nKPX k aring " "-2\nKPX k comma 7\nKPX k e -15\nKPX k eacute -15\nKPX k g -21\nKPX k hyphen -25\n" "KPX k o -22\nKPX k oacute -22\nKPX k odieresis -22\nKPX k period 6\nKPX k s -10\n" "KPX k u -1\nKPX k udieresis -1\nKPX l v -5\nKPX l y -2\nKPX m p 6\nKPX m v -19\n" "KPX m w -6\nKPX m y -18\nKPX n T -80\nKPX n p 5\nKPX n quoteright -12\nKPX n v -" "20\nKPX n w -7\nKPX n y -19\nKPX nine four 4\nKPX nine one -21\nKPX nine seven -" "17\nKPX o T -84\nKPX o quoteright -17\nKPX o t -8\nKPX o v -23\nKPX o w -10\nKPX" " o x -25\nKPX o y -22\nKPX oacute v -23\nKPX oacute w -10\nKPX oacute y -22\nKPX" " ocircumflex t -8\nKPX odieresis t -8\nKPX odieresis v -23\nKPX odieresis w -10\n" "KPX odieresis x -25\nKPX odieresis y -22\nKPX ograve v -23\nKPX ograve w -10\nKP" "X ograve y -22\nKPX one comma -42\nKPX one eight -37\nKPX one five -43\nKPX one " "four -56\nKPX one nine -39\nKPX one one -85\nKPX one period -42\nKPX one seven -" "65\nKPX one six -37\nKPX one three -44\nKPX one two -47\nKPX one zero -34\nKPX p" " t -5\nKPX p y -20\nKPX period one -73\nKPX period quotedblright -32\nKPX period" " quoteright -29\nKPX q c 4\nKPX q u 4\nKPX quotedblbase A 12\nKPX quotedblbase A" "E 24\nKPX quotedblbase T -75\nKPX quotedblbase V -73\nKPX quotedblbase W -51\nKP" "X quotedblbase Y -92\nKPX quotedblleft A -68\nKPX quotedblleft AE -57\nKPX quote" "dblleft Aacute -68\nKPX quotedblleft Adieresis -68\nKPX quotedblleft Aring -68\n" "KPX quotedblleft T -2\nKPX quotedblleft V 6\nKPX quotedblleft W 16\nKPX quotedbl" "left Y -9\nKPX quotedblright A -69\nKPX quotedblright AE -57\nKPX quotedblright " "Aacute -69\nKPX quotedblright Adieresis -69\nKPX quotedblright Aring -69\nKPX qu" "otedblright T 1\nKPX quotedblright V 7\nKPX quotedblright W 17\nKPX quotedblrigh" "t Y -7\nKPX quoteleft A -73\nKPX quoteleft AE -62\nKPX quoteleft Aacute -73\nKPX" " quoteleft Adieresis -73\nKPX quoteleft Aring -73\nKPX quoteleft T -7\nKPX quote" "left V 2\nKPX quoteleft W 11\nKPX quoteleft Y -13\nKPX quoteright A -77\nKPX quo" "teright AE -66\nKPX quoteright Aacute -77\nKPX quoteright Adieresis -77\nKPX quo" "teright Aring -77\nKPX quoteright comma -46\nKPX quoteright d -27\nKPX quoterigh" "t o -30\nKPX quoteright period -45\nKPX quoteright r -15\nKPX quoteright s -22\n" "KPX quoteright t -4\nKPX quoteright v -5\nKPX quoteright w 1\nKPX quoteright y -" "3\nKPX r a 6\nKPX r aacute 6\nKPX r acircumflex 6\nKPX r adieresis 6\nKPX r ae 4" "\nKPX r agrave 6\nKPX r aring 6\nKPX r c 0\nKPX r ccedilla 0\nKPX r colon -27\nK" "PX r comma -57\nKPX r d 0\nKPX r e 4\nKPX r eacute 4\nKPX r ecircumflex 4\nKPX r" " egrave 4\nKPX r f 22\nKPX r g -2\nKPX r h -4\nKPX r hyphen -35\nKPX r i -4\nKPX" " r j -6\nKPX r k 0\nKPX r l -4\nKPX r m -1\nKPX r n -2\nKPX r o -1\nKPX r oacute" " -1\nKPX r ocircumflex -1\nKPX r odieresis -1\nKPX r oe 5\nKPX r ograve -1\nKPX " "r oslash -4\nKPX r p 0\nKPX r period -57\nKPX r q 1\nKPX r quoteright 14\nKPX r " "r -2\nKPX r s 3\nKPX r semicolon -27\nKPX r t 22\nKPX r u 0\nKPX r v 21\nKPX r w" " 26\nKPX r x 17\nKPX r y 23\nKPX r z 9\nKPX s quoteright -12\nKPX s t -1\nKPX se" "ven colon -63\nKPX seven comma -88\nKPX seven eight -3\nKPX seven five -21\nKPX " "seven four -62\nKPX seven one -14\nKPX seven period -87\nKPX seven seven 9\nKPX " "seven six -13\nKPX seven three 0\nKPX seven two -4\nKPX six four 7\nKPX six one " "-21\nKPX six seven -3\nKPX t S 0\nKPX t a 6\nKPX t aacute 6\nKPX t adieresis 6\n" "KPX t ae 7\nKPX t aring 6\nKPX t colon -25\nKPX t e -3\nKPX t eacute -3\nKPX t h" " 2\nKPX t o -10\nKPX t oacute -10\nKPX t odieresis -10\nKPX t quoteright 4\nKPX " "t semicolon -25\nKPX three four 6\nKPX three one -27\nKPX three seven -10\nKPX t" "wo four -9\nKPX two one -16\nKPX two seven -3\nKPX u quoteright -2\nKPX v a -15\n" "KPX v aacute -15\nKPX v acircumflex -15\nKPX v adieresis -15\nKPX v ae -16\nKPX " "v agrave -15\nKPX v aring -15\nKPX v atilde -15\nKPX v c -20\nKPX v colon -32\nK" "PX v comma -51\nKPX v e -15\nKPX v eacute -15\nKPX v ecircumflex -15\nKPX v egra" "ve -15\nKPX v g -21\nKPX v hyphen 0\nKPX v l -5\nKPX v o -22\nKPX v oacute -22\n" "KPX v odieresis -22\nKPX v ograve -22\nKPX v oslash -20\nKPX v period -50\nKPX v" " s -17\nKPX v semicolon -34\nKPX w a -7\nKPX w aacute -7\nKPX w acircumflex -7\n" "KPX w adieresis -7\nKPX w ae -8\nKPX w agrave -7\nKPX w aring -7\nKPX w atilde -" "7\nKPX w c -8\nKPX w colon -27\nKPX w comma -33\nKPX w e -3\nKPX w eacute -3\nKP" "X w ecircumflex -3\nKPX w egrave -3\nKPX w g -9\nKPX w hyphen 11\nKPX w l -1\nKP" "X w o -10\nKPX w oacute -10\nKPX w odieresis -10\nKPX w ograve -10\nKPX w oslash" " -8\nKPX w period -32\nKPX w s -9\nKPX w semicolon -29\nKPX x a -9\nKPX x c -22\n" "KPX x e -17\nKPX x eacute -17\nKPX x o -24\nKPX x q -20\nKPX y a -14\nKPX y aacu" "te -14\nKPX y acircumflex -14\nKPX y adieresis -14\nKPX y ae -15\nKPX y agrave -" "14\nKPX y aring -14\nKPX y atilde -14\nKPX y c -21\nKPX y colon -31\nKPX y comma" " -51\nKPX y e -16\nKPX y eacute -16\nKPX y ecircumflex -16\nKPX y egrave -16\nKP" "X y g -21\nKPX y hyphen 0\nKPX y l -4\nKPX y o -22\nKPX y oacute -22\nKPX y odie" "resis -22\nKPX y ograve -22\nKPX y oslash -20\nKPX y period -50\nKPX y s -16\nKP" "X y semicolon -33\nKPX zero four 5\nKPX zero one -19\nKPX zero seven -10\nEndKer" "nPairs\nEndKernData\nEndFontMetrics\n" ; int n019004l_pfb_len = 35941; char* n019004l_pfb = "\x80\x1W\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-Bold 1.05\n%%CreationDate: Wed D" "ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n" "% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING" " (GNU General Public License) for license conditions.\n% As a special exception," " permission is granted to include this font\n% program in a Postscript or PDF fi" "le that consists of a document that\n% contains text to be displayed or printed " "using this font, regardless\n% of the conditions or license applying to the docu" "ment itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readon" "ly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the" " file COPYING (GNU General Public License) for license conditions. As a special " "exception, permission is granted to include this font program in a Postscript or" " PDF file that consists of a document that contains text to be displayed or prin" "ted using this font, regardless of the conditions or license applying to the doc" "ument itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (UR" "W)++ Design & Development) readonly def\n/FullName (Nimbus Sans L Bold) readonly" " def\n/FamilyName (Nimbus Sans L) readonly def\n/Weight (Bold) readonly def\n/It" "alicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -155 def\n/Underl" "ineThickness 69 def\nend readonly def\n/FontName /NimbusSanL-Bold def\n/PaintTyp" "e 0 def\n/WMode 0 def\n/FontBBox {-173 -307 1003 949} readonly def\n/FontType 1 " "def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardE" "ncoding def\n/UniqueID 5020904 def\ncurrentdict end\ncurrentfile eexec\r\x80\x2\xe6" "\x83\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2\x35\x93" "\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r\xde\x9f\x8em\xf9%\xf6" "\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff++\xde`[\x8e\xe3&N\xdd" "fA-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e" "\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9d" "n\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13" "\x1d\xee\x0[AX\x5\xa1m\x8a\x12>ne\x92\xe5\xa3\xb7\x9fh\xc9m\x82\x10\xcd\x36\xcf\x35" "tL=7By#m\xea\xae\x63wW\xf3\x15\xa4\x1{\xcd\xaa\x87\xb0\x15\xf5\xc6\xb4\xcb\x91\xd4" "\xeeG\xf0\x38nq.!\x98^1&\xd9:K4!}\xd5U\xe\xb0\xb6qR\x96\x18\x85[\xd1\xbe\xfa'n\x4" "\x19\x84\xa6\xcf\xd7_\x9a\xf3\xbd\xf3\x92\xa7\xf8\xcf\xa3\xe2\x9c\x8\x10\x2\xe7\x41" "\x99{\xfb\x13\xcez\xee\xb8\x99\xc/\xa6\x7f\xc\xc1\x95\xbc\xe6\xdbQ\xce\xa8\xc5\x15" "6y\xe2k\xc8wb\xe0\xff\xf5Q\\e@\x7\xacL\x90\xedo\x4\xf9\x7\xf7\xea\"\xc3\xc7\x80\xe5" "*\xa2\xc6\x83W\x9c\x30K\xcb\x44\x86T\x99\xa7Z~\x86\x83\x43\x32\x35\xcf<\x12\xb0+" "cv\xd0n\x16\xd2H%\x9b\xd7\x83\xa4\x91\x8f^\xd7\x8b\x17\xbe\xbd\x14\xf2 \x9(\x14\xb4" "\xaf\xf6\xb7\x36S\xe0\x63|>T\x9\xd0+\xc6\x84\xac\xe7\xaaO\x12#^-\x15Q:\xb0\xe4\xa2" "\xfN0\xbar&\xec\x15\xc5\x8\xcf\x10\xd9\xc8\x1b\x66\xf4\xd7\xa9\xb.4\x1fk\rw\xc8\xa2" "2\xf3\xa2\xc9\x9a\x66SLj\xef-\x13\xf@?\xbe\n\xcbgO\xed b\xac\x98\x9b\xb6\xb8\x81" "\x9c\xc8\x46\x1fP\xe6\x8\xea\x96\xf4\xcf\xd2'x\xba\x9d\x12\xad\x84\xc0\xdcx\xf7\x0" "\x94\xba\xef\xe5\x8c\xd1\x85\xcf\x96\x98\xfbh\xe7\x83I\x4\xe6L\xbc\"V\xf8\xdd\x10" "$\xbd\x80\xd5G\x17M\xda\xa1G|h\xac\xa8\xf2\x7fz\x2\xc5\x14g!6\xa0\x8\xe1\x90\x64" "\xd5Tk-\xde\x6\x1c\xef\x1f\xc6\xe8\x96\nM\x83\x64\xcb\xf2^C\x93\x36\x36(\xfd\x15" "\x92\xbf\xc5\xc5\xff\x8e@\xce\xee`\x10\x6\x97{9\xd8\xb\x45,\xed\xe5|Zs\xf9o\xa5\xe1" "\xe0\x44\x88\x65\x9fp\xa9r\xcd\x7f\x99\xa3{\xc7\x1\x9e\xfd\x90\xaa\xfa\xc0\x37[\xc6" "\xc9\x16'\x97\x64\x1c\x98H\xa7\xe\x8b\x0\x9d\xb4\x30=$\x89\x80\xfd>\x91zF\xf7\x0" "\xfb}Hf\n)\x1b\x84,\xc\x9b\x12\xd1\xb9\xffy\xe\x17^z\xa6\xa2\x91\r\x1f\xbd\xb3x\xbe" "\xf3\x80\x8b\x87\xd3\xc8\xeb\xc4X\xde\xc7,\xa5v5\x89\x13Z\x15\xba`\xb0\xaa\xf5\xce" "z\xd3J\xce\xa4L[\xb4\xae^\xdb\x8c\xa0\xdc\x5\xb\xe1W\x9dt\xaa|\x2R\xbb\x83k\xf6\xfb" "\xf\xdf\xe3\xf4\xe1\xbb\xe9\xe9\xbem^\xe2\x10,\xd2\\\xbd\x43\xcb\xfd\xfb\x9f\xa2" "\xd1;\xd1\x95\x12\x1c\xd7\x3Q\xc\xb2\xd2u\xc1{O\xf9\x5\x1exg\xfb\x1\x6\xa1j\x1d\xc6" "w\xa8\x9c \xb0\x9d\xeeN\x99S\r\x89\xa0\xee\x8e\x7\xa4w\x1d\x4\xa0zT\x7f\x14\x64k" "\x90Slu\x9f\x1d&\xf0\x44\xf7\x90\x2J\xaaRW\x0\x4\"\x8\xa1\xa1\xcc\xaeHG\xe2\x41s" "\xd2\x1O\xb\xab\x1b=h\x3\x64\x95\xa5\x8d \xbc\xe2;\xca;\x93\xf\xa7\x34\x66\xb8H\xbc" "O\xffI\x9f$8\xb1i\xf9\xe6\xbc\x9c\x18X\xba\x9\xd6\x14\xc6ygf \xc4\xd2\xd4\xcfn\x18" "\xd6<\xf4m\xac\xbb\xa6]\xff\x7\xc9\x66\xb6\x1b\x1\x18\x83\xf6\xe5\xa4\xb5<\x9a\xbc" "=BR\xea\x42)\x19\xac\xda\xaf,\xf9Jm\xfe\x87\xd7\x11\xe2\x9a\x39\xc5r\xd0\xb9\xcb" "`\xf5\xa5\x8d\x84g2.\xb6Z/\x8b\xc6k\xd8:3\xc2qe3\xc6\xc3\x8a\x1c=vkH\x12\x1b\xd2" "\x84\xa5\x92\xe4Y\xc3\x9cw\x8b\x31\xf9I\xb0~\xf1\xbd\x46m\xc4\x9d\xb3m\xf1\x65\xea" "\xdd\x8\x31\xca\r\xea\xbe!9\x8f\xda\xef=\xd2{x\xcxU\x9e\xc6\x8d\xfai\x8e\xb7\x0\xf7" "\xfc\x9c\x10\x95\xf\x93M\xad\xbbg\xef\x97\xcd\xddM\x90\x62H\xfe\xaa\"h\xe3\x65\xb0" "\xc0\xe5U\xca\xa4\x9cO\xa9\x2)\xfd\xda\xb1\x66\x5\x80\x80\xd4/b\x9b\xde\x82\xa5\xa2" "7\xfclU\x11\x85\x9f=\xaf\xab\xa5\x7ii\xf9\x9a\x80\xca\xa4\xf\xe2\xe3\xbj\xe4\x12" "8\xd7\x16S\xb2g\xad\xd9\xd3\x45\xe\x65\x2\xa0\xed\xff\x8\r\xf1\x1b\xe3\xb2u\x98k" "\xb8\x31m&\xaf\xeb\x98>qWW\xc5\x94\xfc^\xec\xbe\x80\xf4\xf0\x30z6\x91\x94\x1b\xd8" "^\xb2?d[\x18\x8e\x2\x93':\xc1H\xed\xb6.\x86\xe4\xe0k\xcf\xf7\x8\xb6\xdc\xd5\xc4\x7f" "}uU\x18H\xf0\xc\x95\xc6\x84&Y-\x7\x63}\xc9\xe\x8a\x98\xa3p9\xff\x93\x82w\xae\x84" "\x8f\xd4\xf\x8aX\x80=\x87H\xae\x41\x1f]\xff\xe2-2K =;\xc8t\x1c\x94U\xb4\x80\x94\xd2" "\x92\x66\xc7\xcbI\xfd\x9f\xfd&\xfV?\x19\x83R\xfe\x14\xcd=\xe0\xe\x9b\xaf(\"N\xbX" "\x8c\xc6\xfe&\x88@@\xb\x86\x85\x83\xfcPb\xe4r?\xc5\x1b\xb3G/\xc4\x8a\x1e\x95\xc3" "\xee\x1c\xc8\x17\xa1\xb8It\xe4\xe1T\xa6\x12\xc9\\waW\xb2\x64L$\xc2\xa9\xc3\x85\\" "\xec\xeb_*\x7f\xdb\xa1\x8xO|Q\xa8\xb\xc7\x33%\x32\x43 \x2\xb5\x87@\xdc\xc4\xba\x98" "L\xc2v<# \n\x91\x1a\xe1G\xccZ\x94\xce\xeczl\x9cg\xc9ZQ\x8aN\xa3\x44\xa6`\xcb\x5\xde" "\xdcI$\xf4\x83;6\xb\xf6{\x98\x96\x38\xa3x\x97\xaav\x1e~yYn\xca\xc3t\xa4\xf9T\x80" "\x4\x64-\x4\n\x8c\x1c-\x9d\x92jqNZ\xe9n\xec\x38\xa4\xd7Lx\xf6U_\x88\xa9Z\x19\xe4" "\x8c]\xb0\xad\xf7G\xde\x44V\r\xcb}c\xadGk\xee{\x15\x88^\xba\x61\x9e\xbf\xf8\x99\xa1" "F/\x86\x86\x61\xc3V\xc6\xa9\x88x\x6\xa0l\xb\xb8y\xd4\\\xe5L\x92\xd6\x1b\xdck\xe3" "\xfd\x98\xc5\xef\x8_\xff\xb1 \xd3k\r\xf9\x9f&\x15\x33$\x81\xe9\x81\x46\xa7\xf3\xaa" "\x81\x12j\x7fP\x6!\xf5\xad\x8c\xf4P\\E\xa3\x8d[8\xcb\xc8]\xab\x92\xa3\xb1\xa8voP" "\xb6\x8c\xd0\x8d\xd8\xca\xec]\xdc\x62\x83\x16\x31\x0;\xej\xdc\xcc\x42\xb1iL9\xfe" "\xf\xba\xac`\xed\x88\xbb\xa4\xd0\xf1\xfb\xb0\xc7\xf6\xb6\x89\x45\x4\xd0\x8f\x43\xcc" "X\x2\x13\xbe\xb5\xe2\x83\x66\xb\x83\xc0,\xd7Q`\xf3Rp9S\n<\x9b\x16\r\"\\\x15\xae\x84" "\xa6@\xf4\xeeP\x8d\x19\xb0/\x8f\x6=?b\xd1\xd4\xc5'D4\xde,-N(6\xab{\x80\xdc\x80\x38" "B\x11\x8\xc0w\xcf\x9\x89\xb1=\x83\xcb\x7\xc6jm\xfd\xc1\xa8\xbcPa\x15\xf3\x36\xf2" "\xf\xf7\x15\x91\x39\x1c\xa1-9\xf1\x94\x13\xeb\xa1\x9c\x9c\xd6\xdd\xb1\r\x9dxl_\x97" "\xa2\xe5\x85\x12P\x11G~\xdd\x99\xd8m\xc8\x8f\x11\xfd_\xa1\xd5\xcf\x7f<\xae\x82@w" "\x19\xf1>}\xdfvc0\xb6XL\xcf\x45\x64\xd0\x4:\x15\xe2\x87\x3y\x92\xf6m.u\xe4\x38\x98" "\xfc\xebq\x95\xf6\x7\x9\xb'\x86\xe5\x84\x8d}\xc\x7f\x84r\xfa:\xe7\"I\xcc\xb2l\x14" "\xe6;\xce\x8a\x93\x63\xd2\xfa{\xf3\xe\x87\xd5)\xab\x63\x85\x99\x64'z\x9a\xfd#9\xbd" "P\x6\xb9=\xae\xb9\x14\x9a;\xbf\x90\x37\xa1]\xb6,\xb7\"\xfe*\\\xdb\xbb\x43T\x2\x7f" "y\xad\x30\x88\x37r\xack\x11\xa9\xae\xcf\x10\x94$\x9b\xad\x80\x43\x90\xe0\xf2\xd8" ")g\x15\x2\xb3\x83\x7f\x35^\xee\xf\xc6\x86\x7&\xe1\x89?Y\"\x14\x10\xc1s,\xc6y\xba" "\xdf\xafm\x1b\x30\xc9I\x9e\x9d\x35\x41(\xed~\xe8\xf7\xffm\x8a\xe3\x9ej\x7f\xfdoG" "\xbb\xca\x8d\x8e\x8c\x9a\xb3qL:\xbb\x80\x88\x65m>\xca\xcb\xb7\xe5p\xe7\x46\xad\xfb" "\xb9o\xc8\x44\x15\xa7q\r\xbb'v\xfb\xb4\x18;\x9d\xe8\xca\x1b\x9a\xe5\x44\x9d\xbc\xf4" "\xd2\xb4{\x97\xaf\x80Ni\xb1\xad\xa0L\xb\xb9#\xa9\r\xa0\xb8\xbb?ae3\\.\xdf$B\xfd\xfa" "\xe5\xed\x8c\xc4\x8f\x1d\xbe\x46\x1J5-K?\xcf\xb2\xc9|\x6\xde(vx\x88\xd2;*\x5\xd4" "&\x93\x38\xfc|\x98l\x84\xf1\x35\xa1\x8k\x85@l\xc4\xb1\xb1\xe5\xeeS\x15\xc3\x16:^" "\x1ai\xbf\xe2R\x86\xd9\xa9T;z\x81\x1e\xf9H\xcft\xa7#\xdb\xd1\xaa./\x1d\x14\x1d\xda" "`F\x17\x43\x12\xf4\xd3\x9bm_\xc5\xe1\xbb\x12\xd0\x81\x1e\xeb\xae+\x1f\xb3\xae)c\xee" "\x86\xdb\x9f^\xf8\x93\xb7L\x19\x83\xf2/\xf7o\x91\xa4\x81_\xfe\xb7n\xea\xaf\xde\x90" "XCF\xdb\x96\x8bSVV\xe3\x97'\x88\xf6\xfe\x0\x88\xdd\x2\xac\xc8\nZK\xe5J\xd4SV\xfb" "Z\xfb\x5\xf1\xc\x88\x98\x83\xa0\x7\xb1\xba\xca\xee\xba\xb8\x32\xef/\x2\x44`\x1a\x18" "Hwh?(_\x1\x99\x46\x61j5az\xa1\xd9\x35\xb\x12\xe3\x84;_\xc1\xb3\xf\x31\xac\xfa\xd7" "U\x13\xaaV7\x4\x80\r\x63\x8bN\x1aRXXUJF\xa2\x37:\xb5M\xcb\x90\xb7I\x92\xb3O\xfb\x62" "s\xefO\x1}x\xdb\x18\xb8\x80-\xb6\x1am\x1eO\x91\xac\xd9\xca:\x9e\x35\x9c\x64\x14%" "\xa5\x83\xa9\x18\xd3\x39\xc1\xdfI\x17\x44\x97Hb\xcf\x10\x1d\xd3.k\xe\xe7\x8\x2\xc4" "?_R1\nU\x99\x65\x8f\x95[\xf7?86\xe0\xeb\x1f\x46l\x9b=\x93\x9fo:*\xfa\xd1\\$\xe7\x9e" "\xcb\xf3\x33\x30mM\x80\xef\xc4\x1b\x86\x36\x96\xfe\x1fP}\xa6\x41l\xe7\xd5\x89\xf8" "\xe7\x1\xf1\xf8\xc1\x87?\xa2\xab\xf1\xad\x34\x32L\xf7\xa9\x44?5\x87\xbd\xd4\xcd\x96" "\xee\xea\xa8\xfa\x39'\xe6\x31\xb1\xf3J\xd4\x44\xc5\xfan#\xa2\xeb\x89\x34\xe3\xde" "\xcb\x2\xc6\xe0\xa1\x9b\x83\xb0\xfdt\xf9UKo\xaa+\xb6y\xa8<\xc5\xbb\x1b\xff_\xd4\x45" "\xee\xe3\xb5\xce\xd6!v\xfc T\xf5\x81p)\xff\xc4\xcf\xc\xbb'~\xc1\xd8\x19u\x2\x99&" "c\x9d\x38\xe8\x11n\x8b\x39\x1\xf8\x46G1\x9c?\xb8\x1emI\xd4\xf4\xd9/}\xa2;\xcf\xb4" "\xfbZRy\x4>h\xff\xb9\xde\xdb\x7\x17q\xa5\x45\xb5\x9c'\xfd\xc2\xf8\x33\xc7\xd6\x2" "\x5G/B\x8c\x85'\xd2\x9\x83\x4\x61\xa4\xea\xd1\x91\x97\x94\x9bi\xeetN\xb2\x98\xb9\xb9j>\x0\xaf\x9d*\xf2rj\xb1n'\xc2\xde\x95" "\xfu\x9d\xf2\xe8{]\xa1s\x82\xc0;\xfd\x8d\x94?mx\x8fSj\xd8\x4\xe7\xda\x10\xabG1\x8c" "7i\xd4\x8fW7u\x10,\x16\x14\xaf\xb9\xa8\x13:\x9c\xc9\xaa\xb2#0\x8\xc9\xd5g8\x1f\x19" "MV\x2v\x1e\xf9;\xbe\xc6\x44&\x16\xa2\xde\xc8J\xaf\xbd\x92\x0\x7fr\xf7\xf!\x1e\x9" "\xf6\xf4\xcf\x80\x31\xa9\xa4\xeb+\xdc\r[\x92\x43\xec\xb7\x39\x45\xe8)t\xd0\xbd\x3" "\x6@'\x99\\\x89\xeb>D\xb7\x8cP1l\xe1\x62W\x91\x38\x37~\xfe\x39\xf1\xcc\xd6Y\xba\xa9" "\xdc\x65\x1bO\x9a#E\xbc\xa1\xc7\"\x31\xf0\xc4\xe8Xu)\x8c\xfb\x8a\xd0\xdb\x63\x35" "\xfcJk'\x1a\xc3\xd3X&T\xc2uI\xc0\x38\xb0\xcb\x65\x17\xfeT\xf2\x89" "\x8dM\x82\x1\x46\xb7`F\xe2\x3V\x10\x18\xf0\xceq\x9e\xc4x\xed\xc\x87p\\\x19(\xcb\xc8" "\xcb\x39\xe1\xe0\x41\xb2\x9f\x39\xbd\xb4#\xfd\xa4S\x9f\x1c\xc4\xd5\x17\x44\xa4]\x98" "Y\xd2\x86)\xde\xc7]*\xe\x8b!J;\xe3\xe4\x17\x1d\x31\xa9\x8f\x0\xc\x85\\\xd3\x64\xab" "!\xfa\x62\xcdT\x82\x65&\xa9\xab\xbbI\x1c\x41;\\\xc4\xec\xee\xc2\x81\x19J\x84\xa9" "\xec\xef\x95\xbd\x83\x9c\x14&\xb2\xb\xb6\xccz_\x98KuN\xcb\x15\xb9\x9e\x42\x97\x88" "|X\x3\x35\x64|F\xf8\x1fq\xe3~j\xcZ\xfe\x1\x63!q\x8f.\x98\x8b,Isq\x1e\x64tR\n\xcf" "\xea\x1fL\xea\x82ZM\xdb\xb5h\xf4\x9d\x45\xac\x9eId(\xa0J\xcf\xca\x93m\x8b N\x9b\xda" "\xdc\xb1R~p\x8d\x92\xe3\xdcx\xa5\x31\x61\xcb\x12\xd6\xae\x30OinU\xb0\x8bg*\x11\x98" "\x9e\xc3\xb9\x7\x63\xbc\x34I\xab\xc9:u#\x0\x96\x80\xbd\xa2\x84\x8\xa3H.\x8f\x4\xb" "\"\xf3~\x8f\xeb\xd4\x1a\x32r\xaar\xf4{\xc4\x34\xba\xeaLM\x14\xeb\xfc@2}\x8b.:\x8e" "\xff\\x\xc\x63\x12\x9b\x5\x91,.!\xb2\x15\xc4\x18\xe4^\x85\xfe\x8e\r\xcd\xb4\x1f\x8f" "\x9fW\x87\x37\x5\x1cr\x89\xa5?n\x85\x43\x8\xcc t\x85\x9e\xb4\x93\x13\xb8\xe8\xd7" "\xaam\xa0@\x1cTV\x7\x1b>F\x3\xd5\x1d\xbf\xaf\xb2\x91\xd8~\xfb\x1e\x87~\xff\xf2\r" "#\x12\x34\xe9\xccSU\x6\xf9`\xa3#7\xb1\x5_\xcd\xfb\xd8\x13Nz\x8f&96t[\xa7\x9f\xcb" "wb\x11u\xda\x81\x34\xdb\x98\xf\x91\x19\xfa\xc6\xa3\x95s\xe6\xceh\x96\x8d\xecH=M\xcd" "\xdd\x17\xc8\x8e\xe1\xdb\xc5=\xc4\x88\x32\x66\xb\xaa_\xed\xbe\x64\x32uO#\xebw\x1e" ")\r\x9e\x17t\xa0\x95\xaf|\x18\x44\x8f\xc6\x39\xe3!\x9f-y\x2\x9c\x1d\x33\xcc\x95@" "S\x1c\r<\xa0\x99\xde\xb7\x1a\x9f\xfd\xa1S\xedr8\xf6\x82\xe\x18\x14w\x87\xbb\xc2\x1" "\x95\xf1\x66 \xe6\xff\x65^u\xee\x88J\x82HU\xd2q\xfd\x3v\xfeY\xd7\x9e$\xef\x13\xd6" "Y\x1fm\x81\xfe\x97UW\x8c\x34x\xdd_\x87)\xf3\xa8-H\xca\x82\x9a\xed\xde\xce\xc3\xdb" "\xc\xdb\x39\x30\x7f\xbd\xbd\xfa\x62\x9f~T9\x17\xf7\xb1\xa5VsH~\xf9@i\xdd\x5\xf3\xf4" "\xac\xa8vV~\xce\xc3\xd8\x1f\xddW\xdc%\xa0\x32\xb0P\x9a\x62\x96\x13\xa3\xa7\x66T\xdd" "z\xd6\x92s\xb8\x39\xf8=\xa3\xc9=\xd3\xad\xb2\x0\xc6\xbd\x1e\x1bN&F\xa5\xc9\xb\xaa" "\xb8\x89\xe9@\x8aU2\xc\\\xc6\x84\xe4r\xdfT]!\x1bR\x9fM7}M\xb7G4\xfa\xd1PO2\xdc)\xf" "\xd5\"+w\xb5\x1b\x94\xd9\xb4\xa7\x6\x93xX\x90\xd0\xf2L\x19\x9d\xb2\xb5\x12\x45\x86" ":2M\x18\x8c\x8e\x1aH\xaa\xc3\x80_\xdf\xce\xc5\xa8\xbc\xd4)\xc7\x4!\xbf\x9b_:~~\xcf" "X\xcf;H\x7f\xe5[\xb6W\x18<\xbfs\xf2\xfb\xca$\xca\x8bh\x8c\x6\x64\x38\xc6\xda,\x8c" "\x8a\xd0\xd5\x1eo3$\xe9h\x1d\n\xd2=\xc7\x9\x66\x92\xf0*\xceQ\x9e\xdb\xb8\xac!)\xdf" "\x13`ga\x80\xc2\x99'\xe2.3\xcc\xe6Q\xce$U}\xa3\x1a\x46\xfd_+\x91\x16\x45\x41\\!\xc8" "\xc2\xad\xbe;\x2~\xb9\x15g\x5\xd5\xc3\x66LY\xf2\xe5\x15\xa8\x9fqE\xd6-\xd8\xb4 d" "?-\x88\x95\x15\x4w\x8c\xc6\xca\xd1\x42!\x85\xf2^*\xe9\x88[!\xe0\xf4\xfe&\xe0\x8\x11" "1\x11\x43\xa6\xbb\xbe\x37,T\xeez\xc4\xfbx\x9cu1\xff_p\xdf\xdf\x66K\xa6\xdb\x13uS" "!\xd3\rM\x6LGpg\xbe\x33\xee\xef\xfc\xf9\x46\xc6\xda\xdb\xc1\xa6\x97 \xca\xdbY\xb7" "|\xb7\xa8Y+\x80\xa6G5\xba\xc6Q\x89\xba\xb\xd3\x66\x95\xad\x99\x12\xa0\xdaUhm\x8f" "Y\xbe\xb5\x31\xa0v\x3wUIl\xcd\x16\xde\xd2\xe2ox]\xfa~\x96\x88~\xf8\x17\x19\xe7\xf0" "\xc6\x19\x16\xc2\x91 f\x8\xa7\x91\rj\xf9\x85G\x1d\"\xfd\x17\x89\x93\xc5\xd8%\x8f" "\xc6\xef\x10\x98\xdf\x95X%\xa4\xcd\xa2\x19\n|J\xe\xbbV\xe9\xb7\xb4\xe5\xb7h\xeaK" "\x1f\xce\x97\x86X\xf2)\xa8Y\xcc\x37\x15\x93\xbb\xf2\xbe\xe6\xadq\xa8\x14\xc5l\xc5" "\"\x14M\xb6\xbc\xeW\x95\x11\xe0\xa4\x38GI\xa7\xd8\x8e\x5\x12\xd6\n\x45Z\xee\xb3\xc" "\xddna\xfa\x8\xb8W\xff\xe5\xf1\xc7\xc3vi\xcd\x87@\x1\x9c\x3r}\xe0\xabV\x17`\xe6\x87" "\xc3\xbf\x89\xcf\xb1\xf7\x38\x8#\x11\x2\xe2\x17\xdc\xc1\xc6\xcb]1\xc\xba\xd5\x87" "3)\xb2J&FI_\x9c\x63,\x6\xbf\x8e%\xc0=7\rl\xbb\x86Y\xb7&\x2\xc4\xc4\xa9\x1b\xc7\x88" "\xfc\x91L\xea\xfc\x91\xbe\xccVql nw\xf5\xcf\xb0\x10\x80\xa6\xd8/\xec\x93\x7)\xfa" "3\x1f\x95\x86'qf\xe8\xde\xa1\x18\x62\xe2\x12\x30\x95\xe2]u\x8f~\xe3\x80\x8c~V!\x86" "\x18\x1f\x8c*0\xd5PB\xca\xb5\x63\xbf\x88\xac\xd2n\xc1\x9by@\xb1\x86\xc2\xa1\x36\x81" "\x7f\xc5\xc7U*\xf5\x41[\x7f\x30\xb1\xca\xbbn\x9\xe9\xa7\x84\x87\xcb\xc5`\xb3%w}R" "\x1d\xa1@\xc4\x93\xe7,\x7\x16\xc6y\x1\xcf\x1a\xb4\xdd\xf4\x39-\xd8\xbd\xb7\x4\xd0" "2\xc4\xe9iq\xe6\x35\x45{\xa0\x95\r\xcb\xd5\xa9\x45\x44~\xfb\xa1\xf6\x62\xd1$4U}#" "\xee\x97\x90\xa3\x65M\x8\x96wj<\xd7\x14\xbexl\xa4m4\x16\xb1GM\xea\xb4\x9l\x1b\x91" "\xb6\x65~.F-\xe0Gs\x9a\xc\x92\xefn\xc7\xbewyH\xe4G\xa8\xce>\x8dN\xf3\xf9\x37JwRq" "#\x12\xb8s\"\xdc-}\xed\xb5\x83\xb2\x9MuH\xbd\nO\xeb=\xcd\xf8\x35\xd4\x9a\x1dn3~5" "Pm\xbfoB\x9bk\x94:,q(B\xb9S`&(\xfa\x17\xea\x42\xc4\r\x8b>\xd3\xde.\xfa\xd9;\xbb/" ")\xbd&4J\x15\x61\xdb\xae\xa9\x8a\xf\xe6O\xad/Q\xd2!\x8f\x80\x18\x34\xe2_\xd7\xe5" "\x8\x1a\x85\xa4\x1d\x83\x6\xd6\xe0\x4y\xf7=o\xb6\xe9\xe0+ \xc8\xe7\xfd\x9f\xab\xa2" "\"\xad\xf\xd1\xee-t~Q\x90RA>\xf1\xfe\xa4\xce\xcfT\xca\r\xb9\x1f\x83\xe9\x2[\x84\x88" "\x1=\xcc\xaf\x1c>\x18\xaf%v/\x91\x1aU\x3\xfd.\x86!\xa2\x5\x45\x16\x46Lo\xbd\x41I" "\xc6Vg\xec\xabV\x17`\xe6\x87\xc3\xbf\x87X\x90\x8dQ>\xb9g\x0+\x94\xd9\xf4\xca\x39" "\xb8\xde\xc4\xc5H\xca\xf7\xcf\x9b\xad\x7\x61kl\xb0\xdd+\x7f\x1b\x85\x9f\x13\xcf\x62" "z\xdb\xc3\x0\xb7\x39\xbb/}{\x96I\xd4\x81\xdc\x91\"\xb7\xcbV\x1d\xb1\xe8\xa9\xff(" "4\x13\xa4\x13\xa9\xff\xe8\xb4\\%\xfe\x36\xb2\x86~\xb\x88\x16\x9a\xaaR\xf\xcb\x8}" "\xb\xab\x1bR\xc8\x37\xeb@N&J\x11\x0{\xcf\xda\x8\x30\x65\xbc\x1<\xc1\xfb\xfa\xd8\x35" "4\x92\x8\xb6\xb4\x81\xd5I\xe8\xc1\xb3x\xa9\x89\xb7\xce^\xa7\xe4xs\xbe\xad\xa4\x91" "\xde}\xf6\x38-\x15\xf8wP\xf8lt\xbaJr\xbc\x89\x16\xfeO_\x94rL\x1b\x42\x14K\xde\x88" "\x1a\x65\xe0\xac\x1#^\x81\x0\x64\x2\xf1\x92{}\xe4&\xe7\xc2\xe7\xee\xe6\xd1N\xbf\xb9" "\xc1l\x8b\xdd^\x97\x63\xa4\xafy\x9e\xb1\xa5\x66\x4\x9dX\x8f\x80t\xff\xdbq#h\x85\x65" "ebQ~,y%\x95\xa5,\x9b?\xba\xbb\x90\x17\xe6\xe9\xd2\xb0\x9\xb0\x8e\x81\xdfk7`\x80\x43" "\xb7\xa2#\x4wC\xfd\xf1\x12R]\x90\xcc\xcf\xd8\xa8~\xc7\xd1\xcb\x41\x0N\xd9\x66\x1" "\xb1\x90/#76y\xac\x8e{\x3g)\xda\xb8>\x8c\x88O\xbe\xe5\x11\x1e\xe7\xd2\x42\xde~\xcd" "\xd2.'{\xa6\xce\nW:\x81\x84\x8bR1}v\xfb\xeb\xa1\x6\xdd\xa0\xd1\xdf\xf6\xb9\xaf\xfa" ">\x99P\x91L\xb0Ks66\xb7\xdc\xe1s\x80\xf8\xaf/\xe5# \xbf\x9J,\x4\x32kD\xc4\xf0\xbb" "\xc1\x64\x96\xf4\xd4\xc6\xb5\x36s\xe3\xf3\x8c\x35\x1e{\x18\xbf\x8=D\xafT\x90\xbe" "jQ\xc3\xfdq\xcc\xfe \xb1\x87J\xf3'\xf\xccg\xc1\x30\xc2\xa2\xf\xc4J(\xec\x8b\x8c%" "\xea\x80\xad\xa7\x8ex\xa6T\xdbz\xe\xe/\xc6~\xba\x7t\xb3 \x9\xc0\xf7\x95\x38ZV\xb2" "\x1f\xa5{U\xbc\xa1\n\xa8\xd7\xdf\x14\x9e\x8e>\xce\x84\xbe\x0&S\xc9\x4\xc7i\xa6~\x81" "\x84(\xcc\x15\x85\xe3\x34'\xb2%\xb8v\x90\xa7Y\xe2\xad\x19\x81\x1;\x1f\x93\xd4\x9b" "G\xdb\xb0\xba\xady\xb1\xaa\x90\x88\xef\x87\xb5\x16\x5\xb0\x8c\x84\xb3\xa4g\x1aJ\xf5" "}\x80\x80\xfbx\xbc\xd8\x0\xee\xf2\x62{\xaf\x10\xbeP\xae#\xcd\xd6\xbc\x65\x7f\xbf" "kS\xc3\xc8\x1c\xd9\xe7\x61\xcc\xbbiha\xef\x18\x64N\x80\xe5}I\xe9\\\x3\xb9\x85\x15" ")\xf5o\xb5'\xa3S\xb7\x1e\x82\xd1\xa5<\xcf\x9e\xf\xb9\x9bL\xc\xf\xe2\x9em\xd2\xc9" "\xcf\x8c\x46\xdb#z\xb9\x8a\xfa\x8gE\xd8##\xfd\xc6@B\x8cs8\x6\xf6\xe5\xc\xd5\xe0/" "\x3\x93{\xb0\xe4\xad\x65>\x6\x9f\xa2\xf0\x84\xbcz\xbb\x8a\x19\xa4=\x89\xac\xd8\xed" "\xea\xa3\x94]\xc3\xde\x30\x5\xad\xe5\x9d\xf6\xc9\x1a\x8\xdf\x9e\xe2\x16\x96?\x93" "\x1cm\xda\xbb\xc2|;\xfcqY\x8f\xcc\xe6h\x88\x64\x2\xad;\x1f\xe6\xfbv\xf1\x19y\xc7" "tNT\x16\x95\xb7=\xfu\x16t\x92\x5\xdc'\xa2\xec\xdf\x89y\xc2\xc7r\x91\xa4\xa5\x41)" "\xdf*4\xca\x9c\xfb\xdb\xa9\xcf\xe2\xdeg\xfe\xbeL\xb0Q|\xce\x15\xd2\x62\xd3&\x8b\xff" "\xea\xb8\xc8&\xd8\x11r\x8c\xb1H-V\xeu\xd1\xac\xae\x42\x43\xe8\xe6\xeb\xa7\xa5\x86" "\xccH\r\xfc\xff\xccl\xcf\x45\xcf\x63\xd6\xbc[\xeb\x0)\xf1\xf4\xec\xd2\xc0Y\x98\xbd" "\xab\x17\xa5\x9e{F\xca\xc8,`7b6\xc2\x12\x1e\xf0\xd3\x1b@e\xc4\x1c\x42\x81\xc6}i\xd0" "\xe0\xc6\xd8\r\x89\xe0\xea\xe7\xbb&\x82L\xcd\xbd\xe6\xac\x17S\xe7\xd9\x85^\x1\x80" ":.\xba\x63)s\x0\xcd(\xe5\xbd\xb2\x9a\x9a\xa4\xd7\xa1\xd9t\xb4\xefgc\xb5\xc6$\x18" "\xd8\xbd\xe3oE\x99\xbc\x8d\xa5\x86\x2\xca\xcd\xed\x84\x7fk\x8a\xed\x99@\xa8\x1a+" "V\xe0q\xc1\xfd\x80\xc2/\x2\x1f\r\xefN\xf5\xfb\x31\x61Q\r\x10Q\xe4\x85\x5\x89\x10" "\x86\x61\x80\x44\x44\x8c\\\x82\x87\xbe\xd2\x13\xe1\xa2\xf2\xd5}\xc0\xdc\x97n\xc1" "e\xa8\xe4\xd3W\xe6\x90\xb8\xa5\xd8x\xa7\xbdl\xab^\xa6*.\xb3\xd1\x66\x35\"\xf\xb9" "\x84\x95\xb2\x64\x19\xcf\xb6\xae\x39\xee\xca\x15\x37\xb5\xa3\xb7(#\xde\x1f|f\xff" "xM\xc3\xfa\xdd\xd5#\xfeq\xf\xf6\x1dv\x9d ,\x4\x9\xbd\xc0_\xcf\xf\x8d\xc4~\xbb]?\x92" "\xfe\xd2;\x1d\x61\xf0\x83*FY\xb6\xc\xe2\xf2N5&a\x94M\xe1\x3\xb9*>\x1d\xf0\xc1\xc9" "\x92\xaewe{\x87\x30Z\x90\x14\x14g\xa7\x12\x7\xad\x66\x30\x14y!E\xdc\xb5^\x91=18\xec" "/y\x96{\xed\xbf\xae\xbc\x88\xd0\x13\x8eo\xaf\xc8\xf0\x92\xc5;\x80\xc9m\xf5\x17\xb4" "\xea\x9b+\xe0\x82\xc9\x84\xfc\xd8\xf5\x1a\x8c\xdc\xfc\x44\xaf\x18\x9a\x5\xd4-\xe9" "\xc6\xb6\x14\x92k\xeb\xcd\xae.\xe6\xea\x1f\xbf\x97\x1c\xca\xe4\x87\x15NL!\xba;/\xd9" "\xdd\xe\xb9\x38\x13\x1a\xfa\x1d\x8a\xfahL%*\xa2\xe7\xcd\x5\xc0\xfa\xfK8\x3Q\x12R" "\x84J\x19UR\xa5\x30\x82\xd3\xf4\xb0\xb5\x45Tb\xfeR\xbd\xff\xc1\xd8\xcf*\xb8V\xa2" "1.CS\xb1\"\xc8\xe1\xf5\x17\xa2.8\xc7\x89\x43\x8b\xa5\x7\x2\xa9\xc9\xef\xa8\xcb\xc4" "\xd0#L2D\x97I\x98h\x80&\xc7\x1ei\xb5\x36\xfd\xfaO\xfa\x35\xbe\x10\x81\xa7\xc1\xe3" "\xd8\xa0\x64$\x9b\xd9oZM\xbu{`;\xd0\xa3\",=\xd8\xba\x89\x85\xed\xbd\xf\x1\xb0w|1" "e)\xb5\xc1OL\xfbv\x14\xc8Y\x9\x9b\xb3\xe6\xf3\x6\xec\x12\xf6 \x83\xaf\x31\xcd-\xc6" "\xaf\x65\xe4!\x86\x1f\x92\xec\x34$>\xc8H-\xe8\xbd\xbd\xf5\xc9\x97}\x82\xep\xcb`\x5" "5v\xfe\x31_\xf8\x62Z\xdc\xfh\x91\xa9\xba\x80i\xa4ksx\x13\x19\xd7QTd\x98\x8f\x2ZZ" "8\xa9\xf9>JJ*\x6\x1f]@\x9e\xce\x66HH$\xc6\xcc\xdf\xa2Qe\"?\xb0\x33\xbe\xf8\xe5\x82" "{\xb6\x8e\xa6\xe3\\P\xae<\xb1\xbc\xdd\x41 \xe3*\x83\x88w\xd7\xd9\x9c\x18\xbf\x96" "7\xb1\xab\xd2\x31iA\xe3\xd3\xd7\xa1\xe4\xf9\x6\x34\x13&\x17\x9c\xad\x9by\x9do\xf2" "\x8f\xfe\x98$-\xa2[U\xd0X\xd0Q\x93N\xb7\xa1\xb6\x83\x85\xb1\xc4\xbf\xdf\xe8\x8\x82" "\x85\xf9\x65V&\x89\xab\x42\x37\x2\xdcUBK\x15\xa7m\xc4\xa4\xfc\xcc)8bT\xde&`aD\xb0" "_\xf3\r\x9c)\xeb\xbb\xf3+\xe5\xf6p\xf6\x11H8\xb3\x33\xef\x11\xaf\xc1\x84\xc3\xbc" "Mp\xa8S\x84I4\xd8\x43\xfa\xc0\x65@+f\x7\xef\xa1\x1e\xe0\x1d\xed\xe]F\x18uc\xa7{\xd2" "\xa3\xfq-\xb3;\xe4\x19vw\xaer$\xb0\xca\x1\x88\xf\xb9\x8d\x8e@\x5i\x9b\xb=}P-q\x9c" "\xf3\x7\n\xf3o;\xbfJ\x93o\x8Xt\x15\xae\x89\xbc\xda|\x12+{F\xe8 l\x4\xb7\xc5*:\xcd" "\xc8\xfa\xc\xff\x16\x14z\x85\x9b\x82\xa4\xd8iWmD3%\xe4\xcaW\xac\x65I\x88\x39\xcf" "\xd7\xb3\xaa\xf7)\xb\x33\xc5\x30\xf1LD\xe6\x64\x1f\x38\xdc\xe6\xc\xcai}\xdd(zK\x8e" "\xbf\xf3h\x9d\xa8]\x9\xd6\x1c\xa0\xdeg\x1b \xbf\xfb\x17|Q\xb1\x45\x66\xdb\x84\x45\xba\xda@\n\xba" "@\xad\xff\x97\x9c\x8c\xbb\xa4_\x83.4\x85\xa4\xc2\x1b\x38\x9f\x41\xbd\xe\x9\x64\x90" "\xe1\xe7O\xe7\xd7\xc9\x32\x84\xd6\x12\xde\xcc\xb\x16vyK\xfe\x8\xdfH\x96G\xfa\xff" "6M'\x10\x31\xbbH\"^\x11\x6@\xa8\x1c\x8f\xb4\xefN\xe\xa9\x13\x8dS\x97Wg}\x93\xad\xe1" "E\xce`\x83\xc5\x65\xdc\xc9\xe0\x7f\"\x8a\xd4p\x80\xb2\xe0.u\xe5!T\x7f\x18p\\\x84" "\xb3\x15\xa8,J\x88\xb7\x66#\xf0z5\x2\xda:\xa2\xb1\x1f\x35\xbb\xe7\xec\xdd\xdan\x7f" "0\xe6\x1ep\xfd\xa6\x45\x6W\x92\xfb_:H\xdf^\xc{\xc7\xa0\x91\xfc\x92`9b\xd5>\xc8\x90" "1v\xfa\xee\x9f\n\xbJ\xe9\x96\x8cO\x91\xa1\xb\xd5W\xd0\xa4]\x1d\xfd\xc6\x9f\xa7Y\x14" "E\xe9\x35U%\nF/\x16\xc7@E\xbb\x87\xf7\x44\xd9\x65I\xb1\xa9\xabH\x96\x5\x91\x9e\xfb" "`K\xdc=y$Jh16\x8e\x65\x39\x64\xe6^-\x9e\xc7\xb8\x61\x93\x99\x8c\x9a\xf6\x46\xe1\x9c" "\xe3\xa9\xecL\x94?WDWC\xe7)\xb2{2\xcf\xc2r\xbd~\x89\x8b\xa3\xa2\x35\xe7\x95\xa2\xd3" "!\x93\xdc\xae\xaf\x8fLe=.\x81\x42\xc5s\xb9\x15w\x9dz]a\xf9[\x95\xd8\xb3Q\xe4\xd7" "\xe0'b\xa6V\xc0\xe1\xe6-\xc9\xda\xc4\xebj\xa2%\x36\x6P?\xa1\xe7\x4\xff\xce\x32\xdf" "\xff\x62\xda\xd5`\xd1\x1f\xa0\x43\x9a\xe6L\x86\xb9\xc2\xfb\xcb_\x15\xd0\"\xa8G,(" "\x1d\xae.\xf9\x8a\x63-\xa2\xe3\xbc'\xf9\xc7,\xee?\xe7\x84\x96\x92l\xcb\x19\x5\xb2" "\xa9;=|R\xf6p-e\xc7\xa5\x90\xd6\xc8\x17\x42J\xab\x87wQ\xe1\xbf\xe1\xdc\xd5\xba'd" "S\x18\xdf\x42Hm\x1d|\xc7,\xfc\xcb\xc7&\xbf\x39\x95\x86\x9a\xb1\x66\xc9\x61\xbf\x46" "\x8f%\xa8(be\xf8\\\x46\xb6\xd7\xe\xb0\x17\xfb\xde\xb9\x41|\xbd\x10o\xb1\xa5\x91\xdf" "\x8d\x64\x98\x8f\xaa\xd8[\xa7\xafn7[*\xaf\x8aK\xbf\xbe\xee\xba\xb8\xf6?+\x3\x35\xb3" "Lu\x86J\xa8\x7\x1b\xbf\xd1\x9c\x1a\x39\xb1\x9fV-\xb5oC\xc1\xa3\xa7x\xc2\x66\xe7\xe1" "\x19\xa2\xc2U\x16\xc0\x8a\xc9\xa3\x10)\xf8\xe4]Z \xea\xd3\xcd-\x85\x9bU\xb9#\xb1" "o\x99\x9a\xcb\xe2+\x15\xdcw\xbb\xd7\x9\x95\xdf\x0;w\xecs%\x83\x33\xed^rSe\xf0\x7" "\xe6\x8c\xb3S\xb1\x8b\\=/\x95-\xbfw\x1f\xf8\x94\xd0/W\x87\xb7l\x1e\xe1\x8\xde,yf" "X)7%\xd3j\xe5Xw\xae\xc7hnr9\xae\x98+\xce\xa0\x64g\xff\x19\x9cs\xfc\x8f\x97\xcc\xfb" "\xf0\x2K\xb9`\x87\xf2\x36\xb0I\xcc\x83l\x97X\x8\x96;\xd2\x96\xd8\x4!\xad\x8d^\xb0" "\x91\x1a\xd6Z^\x18Ms\x83\xd4\xb4\x89\x9b\x2\x15LX\xe6G\x1f\xc0J AS\xb9J/\xe6\xc3" "\x92\x34\xdf[\xd6#+\xbsK\xd7\xa5\\\xcc*\xed\xde\xf7\xfb\xa2Tj\xb2\xd7\x1b\xe9\xde" "c\x3\xd0V\xcd\xc1\xfa\x9e\xbf`+>.\x13{\x1d\xb6\xff\x17\xb2\"\x94UF\xd0G*\x1\xfe\x93" "\xea\x14\xc8\x92\x46\x6\x32\x86\xe2\x19\x3\xa3\x8b\xb\x39\xf\x41\xd5\xd9\xcc\xeb" "\xbd}\xf3\x9d/a\xfc\x97\xe2\x9f\xa6\x98\xb4\x85]\xcb\xf3\x42\xa5;>\\\xe\xb0\xa0\x42" "\xe4i\xd7x\xcdX\xce\xdd[m\xe6\x37\x9fN\xcbv%\x85\x90\xf5\xf3(O\x9a\x18\xf6W\xf4\x9d" "\x2X\x82\xce\x1\xa6\xbd\x9\x63\xe9\xe\xfa;\xd3\xfbZS\x8\x33\xa1\x91\xbd\x45\x31\x8b" "k\xc7\x4\x45\xf9*B\xf1\x32\x33\xc8u>}\xc\x16\xf8\xe*\xbb\x8bq\x3\xea\x90\x12\xad" "=\x9e\xf3\xc4\x86\x99\x33\xbb=7:\xed\xc7\x8a\xc0\xce\x99g\xd9\xe7\x2&_\x84\xbch\xb3" "\xd2;\xe\x1f\x41\x1c~h\xe6\xcd\xf6\xf1`[\xf2\x97\x87w\xef!\xf4{\xa8}U\xc5$1}\xeb" "\xab,\x9e\x9b\xd6Pg\x2?\xe1\xab\xdc\x11 \xbfT\x86jL\x7f\xd3\xd4\xd3\xa6\x8bx\"\xd3" "\xdd\xdb.\xd5\x82\x14\xb1\x61()\x82\xc9`\x3\xf3\xcc\xeb\xfa\x41\xa1>\xf3\xe4Tl\xa8" "@i\xd6h\xe9\r\xb9\x98_\x1d\x7f\x3\xb1\x17\xd5g\xb0\x31\x18\xc2\xc8\x8a\x95Z`T\xdc" "\x10S\x2\x84\x4\xca\x1d\x5MYj\x8d\xe8]\xde\xa6\x43U\xc8]\x90\x87\x80\x95@\xc4\x2" " \xbd\xc\xbe\xdb\xc\xea:\xf8\xe\x18&30\n\xc7\xed\x96\x90\xb2\xd7\xe*<\xa5\xe2w\xb1" "\xdcV\x8b\xaa\xe2l\xe7\x88\xbf\xae\xff\nXOk\xcc\r\x81\x9b\xb2\x7f\xf6n\xdb\x8gFy" "\xa3\x9e\xbf\xe2'{\x91i\xd3\xf3lb\x96\x9ag\xcb\xe}\x99$z\xa8[\xbc\xe4\xc8\xdd\xf4" "\"2P\x96&y\xc4\x94\xd4$\xd7\x64u[--\xd6n\xb2\x41\xd9&\xb7lWr\xd6\x8^\x8eQC\n\xbb" "x\x15mX\x9\xa6\x8d\x46\xfa\x81\xad(\xa8\x9f\xb9\x9\x88\xb\x99\xd9\xb5+\xdb\x8c\xdf" "\xfa\xe0\x15N\x86\x89\xe8\xcb\xcc\x4\xfb\xadq-g\xb2\xbe#s\xc8P{y\xb2\x1b\x30\x35" "\x9a\x66i\xf9\xe9\xdd\x38U\x5\xf1\xa5\x89\xb2\x41\x85X\xc2\xc2)\xb7\x43\x19\x8e\x81" "\x1b(\xfb|\xc7\x83 \xf5\xc2N+6^S\xe\x41\xb7Vy\xe2\x3\xc3Qd\xdc\xc9\xe0\x7f\"\x8a" "\xd4p\xef\x8a\xa5\x85\x90%\xb6%`\xf8\x13\xc0\xb2_r\xb8\xf4\x32]G8i^\xed\x42\xe0," "\xe9\xa2~\x8b\xber\x89\xe4\xf0\x9b\xcf\x30\xb0\xde@\xce)\xfb\xba\xb8\xd6Z\xd9/\xd6" "b\r\x0\x41\x1e_5E)Lc\x97\x0\xb\x7\x38+\x4\x8a\xb9H\x87\x31\xb8\xcbG\xb7G9\xd9\x14" "\xe5i\xf0LT\xd5\x90w\xb8\x82z\xf2\x65\xc8\xdbr\x18\x97\x18\x19\xc5\x86$\xf4\xf\x94" "^\x7\x44\xa1\xedY)\x92\xca\xea\x1f{8T\xfe\x18M\xa3O'p\x19\xc0R\xb8\xb3\xce\xaf\\" "\xea|E\xffP ^\x93\xa9\xed\xfe\x82\xee\x33\xf1\x36\xda\xbb\x12O\x8c\xbf\x10\xa5tX" "\xa9\x33\x7\xc5\xbb\x0\x1f\xf3{)#~\xc6\xb1\xb3\x41\x86Uhvah\xc6W,U\xc7\xea\xb0>#" "i\x82T;\xa9\xf6\xc\xea(T\xe5\x31\xda\xcd%\xaa\xad\x82y\xbb\x34\x2\xe1}QU{\x1f\x65" "\xf8\xdf\xde\xb8K%\x1b:R'\x85\xf7;N\xec&Q\xc5$\xc\xa1\x15\xb1\x80\x39\xd2\xc3\x95" "i#\xc9-\xdb\xf2,\xd7\x85r\x85\x63i\xee\x81\xae)\xb2n\x97\xd5\xca==\x0\x4\x5{\xf9" "\xdc\x32\x8e\xa1\xaf\x80\x11\xf5\xf0\x8b\x83\xb\xc9I6~d\xa0Q\xe7'\xb\xec\xc6Wt:m" "\x86\rTy\xa7\x1\xbb\xe4\xc8\x9\xa8\xb7\xf9\xfe\x4+\x95\x36,[yv\xb1\xaa\x9d\xf4\xb4" "\xcd\xa1\x8e\x1c\xf7\xc4~q\xb8\xe8\x42\x44\xca\xcb\xce\x9a\xc1\xffi\xf8\xef\x94)" "Y-\xc0\x1b\xd0\x37\xf6\xe7\xfc\xb6\xee\xdd\xdb\xd1\xa7^D\xea\x8\x8c\x1d)+\x1a\xc8" "\x94/\xf0\x89\xeb\x92}\xda\xde/Z\xf3\xda\"\x5~\x16\xc7\x30\x92\x17\xd5\xbc\x45\xfc" "\xd0\x5vV\x82\x62\xb2(\x9b\xa7\xe1)\xed\x87\xfa\x1a\x31\x96\xc0O{Z\xbf\x82\xb7-~" "\x7\x36\xf7\x4\xe8\x17\xd2M\xe4\x91\x5\x84\x44\x44I\xdbv\xa3!\xed\xe5\x7f\x95l\xb" "\x10\xb1x\x19<\xa5\xfb\x1d\x85t\xf3^)\xd4\xea\xf9\xa4^TT\x86I\x94\x91\x33T\xc7\x64" "o\xf1\xd7X\xda\x80*^\x91!\x86\xa9#\xcb\xe9\xc6\x89T\xf\x83:7\\\x5\x8d\x61\x35J\xc5" "\xf7L\xe7\x93\xe8\xba\xb9\xb5\x6\xa5\xa9p+\xe4%\xf8\x62$\xd0\x4\xe3Z\xb8\x6\xb,\n" "\x8b{T\x92\x11\xc2]\xb3mF\xef\x1d\xd0\xce&=j\xe5\xa1\x84\xf4\x64\xd0\x8}no\x12w\xed" "\x9f^\x7f\x93\xa9\xb7J\xef?]8 *P\xa8\x91-\xeau\xcd\x1a\xec\xb6\xbf\xa4\xc8py\xce" "\x9a\x1e\x30\x84[Q\xc2]\xb\x66Jaj6P\x8e\xab\xe3}\xa4\xd6J\xbbY\xb8TS$-\x0o5{\x17" "O\x86\x30lN^\x8c+\x1b\x80\xe1\xcb\xf5\x10\xacwg\xb2v\x9e\xa3\xb3\xc2\xc\xa9\xac\xde" "\xdd\xa9[\xaa\x33\x7\xb8\x95hz?\r\xea\x8b\xd1\xb1\x82@\xa9\x9\x5\xa0!\x12\xfe<\xf3" "\x6\xf8\xb9]\x8dh/\xb1\x34\x8bT!26\xf9x\xd3p\x8bt\x80\xfd\xee>F\xddXO\xaa\xb1\xbd" "\xb6\x90\x8e\x45\xaf\xe3\x10\xa4\x9fs\xc4PsS\xb2\x19\xfb\x11\x64\x92\xd7\xb9\x66" "\x99\xf4\x8b\x10mT \xe1\x0\x99\x7fY\xcaI\xc2\xf6\xd0\x66\x61\xec\xb6\xc6&\xf2\x36" "\xb8\x19\xee\xf2\xa7\x1b\xa9\x37\x2*\x92\xcf\xbb\x31\xd9\x43).#1\xcf\x38\\\xb2\xe8" "\x2\x66\xa0\xc5R\x3(\xd9=\xfaX7\xc9n~+\xa3\x10\xaf\xfaW5Z\xb2\xd5\x1d\xb2K\xbf\x35" "\x18\x10\xa1\x9a\xcf\x31\xab{\x1c\xd5\xe5ZG|\x18]\xe3\x80\x1!b$W-?l'\xf9\xca\x82" "s\xac\xff\xf2\xf3\x8\xb7\n\x82\xf3\x81,\xb7\x9\xac>[\x9b\xc2\xd5Zs*\xbc\xc6\x8b\xd8" "\xd7_\x8d\x33hA\x19\x80\xdf\xb3\xa9N\x17\xadj\xe1\xdb\x65\x93\x35\xf6\"\xeg|X\xc8" "\xc9\xcb\xd3\xd9\xc3\x94\xff\xda\x8b\xa0\xb0\x2\x41\x45$Y\xfa{o\x2\x8a\xde\x9c\x9d" "\x4\x45J\x9\xfa\x1e\xe6\x5\x43\x3\x66\xe3\x32\xf5\xd5\xff}\xef\xd5\x19\x99\x9c{D" "u\xa9\xcc\xb\xc8+\xd7QP\xcf\xa8\x6\x94\xca\x83Pj\x14Z\xc8\xf7\x7f\xea\x9d/B\xfdo" "\xc8\x8a\x9\xf8\xda\xa7\x88=\xc7\xb3\xff\xdf\xebq\xb1z\xb6\x12l\xba\x13\x1c\xc5I" "\r~\xab\x8c\x63\xe\x6\xa4p\xc2\x88\xaf\x65Z\x14\xa8\xa0\x89\xa6\x1f\x98\xae\xe3\x30" "\xc3\x90\xea\xa1\x96s\xda\x8c\x65\xad\x17V\xdf\xf4M6\xb5\xe6\x17_\x11\xb(N\xd3qX" "[}\x99\xfe\xbe\xba\xfe\xe6\x14\x4#\x8b\x95w\"\xb4g\nmv\x9\xd2\xe6\x1c\x46\xac~\xb7" "\xc9\xbf\xb4G\xbd\x9bq`A\x90_ml\xf3!\xc2H\xb9\xcb\xe1\x1f:\xec\x45\xa3\x42\x16\xbf" "\xe|c|\x81p\x15\xec\x0\xb6\x1cT \xf0\x11\x7f\xcc\xec]\xcc\xfa\x8e\xd1\xc4\xe0\xaa" "\x2pk\xb2\xc2\xc7\xd0]\xebp:$\x0@\xc9\xe7\xef\x93\x8v@.T\xc9\xf2\xa3r$.\x9\xf0\xfd" "w\x88^Fp\x9\xdeU\x87\"\xad\xf5K\xfd\xcc\x93mc]t\x96I\xb5\x82\xc0\x63\xedn\x9c\x8a" "\xff\x9fjx\x16\xd6\x9\xf\x1a\xcd)<{l__\xf8\x18\x43\xbd\xfe_\x15\xb2K(\xf8\xbd?\xc1" "\x98\xa1\x31\x2\x32(b\xe1\x1c\x9d\xce\x7fPQ5\xe7X\xaf'\xb6\x46\x83\x8c\xbf\x32\xd8" "9\xce\x7\xa6\x6\xb7\xd0\xdc\xb\x9a^r_\x92\r\xa5\xb1\xb1\x9b\xfe\xbaR\xaa\x63\x2&" "\xba\x30\x8d\x34\x9e\xb\xa3\x31\x36\x9e$\xf6\xf\xf1\xef\xaf%\xfc\x84\x1f\xccb" "\xbb\xf5\xd9\x2\xf7\xb0\x90\x8]\x9f\x1\x14 \xef\n\x95.\x8e\xc1\xdc\xc5\x17\x42\xab" "?\xb8OH\xf9\x15\xc1\xe2\x80\x1d\x38=\xaf\xc3\x3\xc4v\xf3X\x8cU(\x19M\xa5\x8d\x97" "\x1fW\xa8\x7\xc\xa8\xf4V/2\x1d\x0\xdb\x9a\xd2\x2\xb7z\xf3\x5\x36\xe0\xc5\xf9\n\xa3" "\xf\x7\x46x\x8f\xe5\x44x\xb7\xb4/+\xc3\x9bj9\xb2\x10p$NjM;8U\x8c\x62V|\xfe\x37S " "\x82\xfc\x15\x66l\x17\xe8i\xa5\xb1k\xe4\x64:\xbe\xb8~\xd2\x98\xedH\x91\xda\xb2.2" "a\xa6\xa2\xd9\xe0\x80\x9e\x87\xf1\x7\xeaS\x99\x18[\xe1\xa7\xfc\xe6(&e\x9cz\x87\xd2" "6\xcav_\x82\xe5\x11q\xdb\x30\xf3\xd8Z\xffQNT\x1e\xa0/\xbb\xaa\x82\xc5\x90K\xd2\x17" "\x9\xf0\xc7\xdc,\xc2\xa8\xf9}d\x8dz\xd4\x88|W\xb\xb2\x63\xd0u\xab\x92%L\xb4^\x84" "\xc8\xd7L\xce\xce\xe3\x95k!\xd2\xe1\xe6\xbei\x9\xba\x17\x18\x9d(1\xb\\\xb3\x92\x99" "F9\x81(\rFqM\xef\x37\x9c\x19\x42\xcd\xc2\xc9P\xe5\x9?w5M-(\xd2\x8c\xcb\xb7*\xc\xed" "\xb0\xf3\xaa\xbe(e_\x8f%\xc8\x9e\x65\x7\x9b\xda\x87^KZ`\x95\xc3\xf1\x36,\xda>\xda" "`(\xd0\xdc\xee\x89s\xa8\x1cgf\x12\xae-\x92\x5\x1?dX\xae=\xe5\xcd\x93HN\xdf\xe3\x62" "\x14\xcb&\x1f\xd6\x1f\x1e\xe5\xe5\x39\xadh%\xdc\x61\x9cp\xf2R\xd1\x1dk\xc0\xde\xab" "\xbe\x36\xa0v\xb0/\xb9>/\xe8\xdb>\x91\xcb\x85'\xd3\xf9\xf2O\x9b`\x9a\xcG\x7tK\xcd" "e\xb3|\x15}\xd0\xd9]\x8e\xff\xba\x95%M\x98\x8f;\x86Y\xdd\\\xe8\xc6\xc2h\x19\x6\xbd" "W\n\xbdZ" "\x1f<\xc5\x9a\x98\x30\xaa\xd9\xfd\x94\x89\xd4\xc5H\x9e\x64S\xdf\xd0)\x92^\x14]\x88" "\xcav.\xca\xce\xf5\xba\x41\x15\xd9/\xe7\x3\x32\x8\xf\x17\x1a\xe\"\xd8\x9f\xba\xd6" "[bE\xb0\xba\x12\x35\x34\xce/\xf7\x95\xe5)0n\x6w\xf0\x81\x4;z\xb0\x85W\xadH\x9aZ9" "~\xce\xcby\xe0%\xc3\xd5GC\xa3q\x12\x92\x9e,}\x2X\xe0V\xfc\xd1\xb7:\x83\x87\x83\xc0" "\x7g\x88\x9\x14{~\xb3\x7f{\x4\xde\xf0\xa7\xe6s\xf\xc4\x38\x10\x8e\xbd\xe8\x83\x12" "\xac\xa1Ir\\\xe3Q\xd7\xd0\xe6\xa8>\xbc\xc8Q\x8a$\x8\x9e\x15<\x89\xf0\xe4@\x94#\n" "\xcc\xbf\xf0\x14.\xbe\xcf_w\xf6\x1\x8c\xcf\x43\xb9g\xcb\x18\x88\xc1\x41\x10\x30\x66" "\x12\x8c\x4\x9\x41\xb6 \xd9\xc9|\n\xf8\xfb\xeb\x8b\xa8\xa8\xd7\xe0\x42\x46:3\x1d" "\xd0\x12\x85\xdfj\x5\x34\xa3\x1b\x9\xc7\x16\xbf\x45\xa7$\x18tjs\x16\xaf\x38\x8e\xc5" "\xd8?\x1c\xd4\x98\x45\x8#\x5\xef\x94\xe1~lQ\xcb\xbaq=\xe3\x33;\xaaw\n\xdb\xeb\x8b" "\x91y\xd9\x85\\_\x11\xcI.q\xdd\xad\xf\x16\x91\xc4\x1e\x33\xa1\xf6o\x93\x1f\xebk\xbb" "\xa6j\x1e\xd6\xb3\x18\xb2\xda\x99@\x3\xa7\x39\x41\xb1\xd0J\xf3\x1a_]\xa4\x62iZ\xc4" "\xf8`[\x8Y\x92\x8a\xe5\xf2\x90W\x8cM\xb\x88\x32\x35V\xbc\x8c\xf1\x87\x61\xcdm\x8f" "^\"\x95\x99QC\xc6$7\xfb\x46\x19\xcf\x9f\xd0\xdd\xb3\xc1\x9a\x6{\x9a\x5IH2\x82\x18" "\x7\x46\x32\xf6\xbb\x6\x39\x32\xc9\xa7\x38\\\x9cJ/C.u8\x99\x39]j\x1f\xdb\x3\x82:" "\xd3\xfbM\xdd\r\x9d\x6\xe0\x92\x8fz\x9a\xfd\xab\x46\xd2\xba={x\x9\xfc%\x13x\xde\xc6" "\xca\x5\x98\x85\x98\x1Q\x91\xf6\x90\x8\xaa\xc0\xef=x,\xbbZ\x9a\xadid\x1\x9e\x88}" "K\xa6\x87\xc1\x42\xd0\xc6\xe3Q\xf9\x92_\xb9\x63I\xef\xdc" "\x15\xe6\xdav9E*d\x4\xa2\x87\xdc\xfd\xf1\xb3\x64\xcb\x42:\x7.\xea\xa2h^\x12\xa4\x83" "}\xd1\x41\x8d\xe8\xa3\xf0PM\xc6\x9.S\xf9'\x83X\x14\x46\x35\x42\x1c\xe9\x1a\xe\x65" "\xa4\x13\xf8\xbe_[S\xa7\x5\xaeW\xa2\xe6h\xf3\x8d\x65zM\x89\xc1\x13\x8aJ\x16\x92&" "\x98\xbd\xae\xdd\xfb\x9a\xd5+\"\xbd\xf2\\\xfbV \x12\x19p\xa3\x1f\x97$ut\x90\x5\x65" "\xee`\xf4\r\xd3\x90\xa1!\xbd\x9b\x63\xbdY\x84?\xe0\x88\xf8\xc4\xc1T\xf2\x16\x31\x8" "\x6\x8e\x42R?}\x98,\x82\x35\x8e\xd5q\xba\xc\x66\x6\x9d\xf8\xbf\xdc\x99im\xbes\x96" "\x83QU\x80\xe5v\x1e\xeb\x0\xb1\xaay\xc5\xf3\xf3\x81\xb0\x5W\xdfz\x1b\xd4\"\x13u~" "\x16\xceG\xc3\xfc\xc6\xd0\xc0\x9d.\xe1\xc5x\xa9\x16s\x96\xa9\xd0vr\xf5\xd1\x85\x83" "\xf\xf0\xe3\xae\x12\xc1\xc3\xcc\x46\x19\\\x9\x62\xba\xb1-$v\xa6\xc6\x34\x18\x42Z" "c\xcd\x66\xe5\x9c\x1d\x19\xc5m.\xef\x8e}iE\xb5\xdd\x97)\x10\xb9\xa4p88\xacI\x0~\x9e" "\xaf\xaf\xcd<\x82xb\x86mc\xf7#\x1c^\xe4P\xc5\x16*C\xc8+\xce\x91_\x94\xf3Q\xde\xaf" "S\xf5(g\xd5_\xe0\xbd\x1f\xad\xd0\xb0\xaf\xce\xbe\xca\x31n\xb5~i\x3OpI4\x10\x6\x7f" "'\xdd:\x19*\x7kc\x15\x14}\xbf\xe2\xaa\x34\x7f\xa3\x9e\xec\x1e>/\x14\x38\xff,\x98" "\xcf\x1en\xe8\x9d\xafOo\x6\xec\xa4\xb3 \xbd\xa4[\xfcu\xba\x86\x36\x84<\xe0\xc7\x7" "\xc3\x5\xb.y\x14\xa3\x83\xf4\xe7WJ\xa1T-{#\xd3l\xcbhB\x97(\xe3\x0V\xcd\xda\x9avK" "+\xeb\xaa\xcf;C\x10q\x83\x30@\"Q-\xb6\"\xdd!\xbb\x1a\xed\x97\xd9w[v]\xeb\x44\x34" ")$\x81\x1dh\xfe\x8a<\x84\x18\xb3\x2\x13w6\x3\xfb\x45nn\xd6\xa7pg\x86zZ\xaa\xf1\xf3" "\xb9\xe7V?\x9f\x3\x18\x8a\xa8\x41\xe8n\xef\xe8\x14\x34I\x10\x63\xbd\x94.\x88\xa9" "\xc0\xed\x99\x33Ze\xdd\xb6M\xe\xf2\xcb\x1a~\xa8\xd3Gl\x81\xa0\xde\xec\xa7\xf2/\xbd" "Z\x87\x9f\x2^\xdc\xf3\xa8\x90\x16\xdc\xcdn\xb5\xc2\xc1\x8e\x19\n\x95o\x94\x41%\x9b\x88\x7f\xe6r\x19\xcf\xcd\xad\x6tK\xae" "u\x8bG\x8e\"\x9b\x1f\xb4\x8d\x44\x9dP\xe9\x62$\x19\x64\x8f\x35\xc2\xbc\x43\x1dH|" "^V\x9d\xd1\x45\xc7]-\xde\x19^\x9a\x82\r\xbe\xbb\x45\xed\x45M\xf0l\xd9j&\x1e\x90\x88" "\x99\x8e]\xad\xbe\x8c\x8d\x84\xc9\x38Q\x86\xea\xb4V\xb3\xb\xef\x82%<\x1b\x6\x38\x8f" "W\x17\rK\xac\xa6\x3\xe6\x92.\xf3\xe\xed\xb8`\xce\x1e\xbf*j \x14$\xfd\x8a!C\x11\x13" "\x1e\x45\x95\x64\x8f\xb0\xc6\xe\x0\xbc\xab\xb3\x8\xf5\x8c\xea\x45\xfe\xd0.!\xfb\"" "\x9c\"&F\x81(\xf4\xc0\xcf\xec,Tt)*\x14\xb2w\xd4\x5\x85!\xd1T\xb0\xe2\x99\x96\xed" "\x12\x91\x11\x34\x8b!\x8f\xf7x^r\xcb\xec>\xb2l\x9b\x35Q\xa4\x66\xe3\x88\xc7\xc1\x93" "\xc8\x8a\x4L\xf3?\xb6\xec\xac\xd4\xe8K\xea\x61\xa9\xf0rJr\xb8\xbe\x10\x89yf=\xdf" "*!\x1c\xe3P\xd6:\x8\xef\xb\x96p\xd1\xd2s\xebl^t\xc8\xb1,\x7\x1f\xd5J\x98\x90V|\xdc" "\xacM\x2<\xcd\xa7\xea\x41\xd0:X\xc3\x92\xc7\xd7\xa3\x99\xbd\xaf\xdb\x97\x17p\xb9" "nb\xc2\xfcZ\x8\xba\x9d\x12\x89\x87\x99\x97\x86Hl(\xf1\xbe\xaa\x87M\xb\x18_\xa6\xfd" "s\xc3\x85v\xfe\x35\xc1\x5\x82\xb0\x1dS\x2\x10\xeb\xd8\xe7{\xd4\xb7\xfa\xed\xd9\n" "\xe4\x1\x97k\x9\x9\x5t\xdf\x9c\xf\x63\x1f\xe1'\xbb\xb9\x39\xb8X\xf3\x12\x33\xf1\xc0" "\x83\x91\x81M\xe6\x97\x5\x1a\x9d\xad\xe4\xb6N\xd3\x16\xd8\xe1\xafs\x9a\xe1U\xe8\xe3" "\\\xbd\xda\x94^8\xb8\\\xb7&\xb2\x1b\x9c\xa6_\x6\xe4?\xaa\x4\xf \x13\x13\x93\xb1\x7" "\xef\xc2\xee\xf1\xe2*\xe5\x38\xb9\xa4K`\x9\xf3\x14W\xb\xd0oc\xf3l5*\xa9\x45\xb6\xf2" "h\xf8\xef\xcc\xe6\x65\xd2\xfd\xfa;\n\xcfk\n6\xf3\x86`q\xbb\n\x1b\x66\xef\xa7?\x18" "{\xad\x96H\xd4G\xc9\xc4\xfb\x88\xbe\x1f,\x7\xaa\nH\xfa\x93\x99\xd6o t\x10\x63\xd1" "\x5\xa7\xd3\xeaJb5y\xea\xf0\x14\x33\xcb\x95\x45\x0\x37\x9f+\x1f\xf\x82\xaeQ.\x95" "\xaf\xddh\xf9\x9d)\xa6Yuj\"\x8\x84\"\xdb\xcb\xaa\x1d\x87\x8b\xe8\xf2\xb7\xd1,H\x18" "\x8f\xdc\xe9\x34G\xc5v\xba\x66\xe3\xcd\xf1\x87\x61\xb0\r\x12p&\x96\x99ZB\xaa\x41" "\xb4G\xe6\xbf\xf4`\x82\xc5\xfd\xbbwS\xb5X?\x8\x93\x17s\x8c\xfb\xf5I\x88\xd6\xa6\xaa" "h\x4\xbf`\xf\xc0\x0\xc8\xf8\xcf\xfeV\xa9\x61\x9c!\xcc\x88Qr\xa3\xfb\xd5\xc4;\xd8" "\xbfW\xc1\x93^\xfa\x89\x83\xca\xbb\xb0oH\x15\x9c\xf4ii\x85\x39\xd3\x9a*\x0\xb0O\xba" "\xfb\xea`\xe8\xf4\x45\x42\xfc\xa9\xa8W\xb1\xd3ml<\xb1\x7f+*\x9\xd0\x80\xcd\xac({" "\xb3\xee\xe5\x7\xde\xe6\xf4\nmr\xaf\x98\x82\x91\xb1\xe4\xd6\xa9i\xf2\xb6\xcd\xab" "\x86\xccM1\xbb\xc3\xc5\xc6\x5\xe3\xbf\xa0\xb9}\x8_\xe6\x8d\x5\x16\xa0\xf7\xabU\xc5" "\x9bz\xcfs\xee\\I[\x8e\xec\xd3\xff\xb\xdf\x91g^O\x80*\xde\xb7x\x11\x8c\xdd\xda\xfc" "v{\xf3\xc6\xb8\xd7\x96\x4,\xc_\xf1\xc4U\xbfg+\xa3gCO\x3\xb2\x0\x64NQQ*\xc3\xe1=4" "v\xecZ\x3\xf9H\xba\x9a\x91\xae\x31\xa5\xc2\xebk\xbe\x1a\xd8(\xdcv\x95\xcb/\xf1\r" "\x91S~\xce&G\xef\xe6\xe6\xf2w\xe8\x3W=\x89q\xd7\xa9|y\x92\x8fK\xe3&i6:\xd2\x8d\xce" "\xb8\x9b\xe0\x35\x39$\xa7L\r|q,\x13g\x8o\xde\n\xe6\xbd\xd6\x85j\\BI\x93\xe0=\xd3" "k\xee\xc0Q X\xdd\xa6\n\xab\xd1U\xd7l\xc9P\xde*\xc2]\xc1\xb4\xba\x17\xb7\xfe\xf6\xc8" "\xc8\x32\xe0\x1a\xa3\x30\xb1>VoD\x10K\x15P\xca\xf3=m<\xba\xbb\xf6\xf1\x95\x39.8\xb0" "b\n\x95\x33\xb9\xda\x62v1?\xe\xd9\x4:\x12;\xe\xe5\x86\x91%\xed\x96~(\x1f\xd2\x19" "\x84\xd2U\xda\xab\xadr\rT\xd6\x30\x18\x1c\x96\"\xc7\xeV\xcc\xb5\xbb\x86r\xaf\x44" "\x91V\x87\xd2\x36\x97\xec\x63\xd4\x8d|[\x13\xc:8\xb8wL\xbb\x92\xb8s\x3T`\xd5\xfa" "\x93\x44gp\xc3\xddt1)\xebG\xef\x5q\x9\x8a\xcf\xae(OJ\x9ar\xbc`/\xfb\xe0\xe0\xccj" "\xadqjLo\xddVd\xdb\x96h\x99\r\x34ShRF0h\xc5\x1b\xc6\x12\xfc\xca\x90\xd7\x8e)\x9d" "\xdd\xd8PNVI\x16m\x9r\xd7\xd0<\xad\x45\x93\xd3O\xa2\xff\xc5\xfa`\xffR\xf2\xdc]\xd1" "\x90\xe8K\xe7w\xbe&\xa2\x5\xf9o\xd2\x1b\x10\xa4\x93^\xd9.)\r\x81\x62\xaa\xe5jM*\xd6" "\xcb\x32]\x9c\x43\xbf\x19WAYq`\xf9\xeb{\xbf\x87\xbf\xadN\x19\x9f\x13\xddG\x93ke\xd9" "B8\x11\xe6\x7f\x19\x61\xdc\xc1@>\xa9L\x9b\x96\xcc\x8d$O\xb5\xac\x45\x1dO\xb6\xaf" "i\xd8\xc0\xa1\x33\x8f\x9f\xec\xa2\x9c\xf7\x8c\x65\xf\xe0\x66\x1b\xe0L\xf1\x31\x12" "k,\x8c($\xe8[b\xc1\xca\x66\xa2\xf6\x98\x41kWO\x1c\x92.\xbf\x8d\x4\xdb\x7\x92)%H\x12" "\xd3Y\x5*e\xea\xf8q7\\\xad\x35g\xc4\xbd\x18W\xc4xA\x17\xaa\x1b\x5\xd3\x92\xdf\xf3" "\xab\xcf\xccl\xc8\xcd\xee\x8f\xa8\xab/n\xab\xe8%\x9b\x1\x8e\x8*\xa6O\x7f\x8f\x8c" "\xd0rQ\x18s\xc6\xba\xae\x35i\xaa\xe9\x31\xef\xfa\xb6\xc1\x3\xf9\xca\xdbrZ\x96\x9d" "\xe0\xe3#\xe\x45\x85 \x12\x8b\x9c\x7\xdaR\xf\xee\xeb\x35\x87\x9c\x38\xd8\x87\xca" "\x82\xac\x3\x9fw\xfe\xa1\x13\xemn\xf4\x84\x18\xfc\xcf\xc9\xbe\xc4\xfe\xfd\xf4;\x8e" "\xc8iQRe\x16\x65\x37m\xbb\r\xbf\x98\x31\xb3\x7f\x12\x1d\x1a\xa5\xd9*\xd1{c\xe5\x43" "D\xf8\rX88\x85^X\xa1]\xc8\xa9\xe6\x91\xedQ[G\x19h\xbd\x82\xf4\xee\xc3\x18q\xbe%\xc8" "\xc1\x9c\xcd\x91\x10\xda\x6o\x16X>1\xed\x16IS\xe7X\x8a\xb\x91\x64\x36ZC\x81 \x1f" "g\xbf\xb3\xb\xb1\xb6\x93\xb0\xa4\xc9\x99\x1a}\x95\xa3\x38\x5\xe0\xf1\xc8\xfc(\x13" "\xe7\x9c\x8\x90\x8a\x0\x30\xf9\xe6G\x15'\xb5\xc0\x8b\x99\xce\xff\xed\xca&\x4\n\xcb" "KMC\x4\x9\xc\xeb\x39\x36yNT\xf2\x35\x42\x42\xb7\x31\xf3\xb2\x99y\xed\x65\xf8\x8M" "\x96\r\x85\xdfL\x9\x93\xea\x11?6\xf2\xf3\x4\xb9\xa4\xf2\x11\x16\x19\xf5,\xae\xf\xd7" "\x13S\x18h\x6\x46^>C\xed=\xe0\x84\x64\x81\x88\x1c\x7x\x95\x36\x1dG\xeb\xdc\x7f\xe2" "\xdfK\x1c\x34\x9a]\x19\xc2\xd6\xf2-\\\x3\xf8\xc1];;\xe3\x89\x80\x92\xb2#\xcd\x1d" "\x4{QC\xda\x35Z$\x1ej\x95\xaa@\x17\xdc\xa9#\xfd'\xd9 \xa8\x90\x17\x41?\xe2\x8fs\xc" "\x82|&\xde\xac\xf1\xa5>\xb3%=\x93\xc8{:\x11\x92\xf9\xbb\xc6\xcdy\xca\xb2\x92\xa5" "\xc5\xe4O\x82\x36\xf5Y8\xc3\x62\xb5\xfeJ\xe2\x1a\x16+\x85=\xb8\xa5\xc5\x9d\xecr\xec" "\xb2\x3\xf7\xf2%\xfc\xdf\x3\x32\xb6U~Z\xe0&W\xd0\xde\x13[\x13\xb9\x1b\xeb\x87r\xdf" "\xc5\x42\xe4q\x9\xe7x\x7\xc8U\x86;x{\xf9U>\xe6}7\x1e\x85`o\x12\x30'\xdf;\xfd\xd5" "\x97G\x8f\x8a\x10Z\xfc\x9eGx \xc1\x18\xb9\"!\xff\x8cU\x11\xaf\xe2\xc7\x2\x35\xeb" "\x3/\xb6\xfd\xb6\xb5\x94\xce\x9f\x1a\xd1\xaa\x8aMh{\xcb\x1b\xaa\xe6Jsx\xb4\xf4\xc0" "\xe9\x9N|C\n\xe5\xd1\xaf\x95y\x17x\xb9\x32\xe7\x1a\x9\xfv\xf3\x98\xbb&\xecl\x96@" "\xc9\xac\x8a:\xc2\xa7qb\xa6J0\xf4\xb'\x9\xce\xf4>S\x9e\xf3m\x9a[\xc6\xa3\xc0\xf6" "U\x88\x35\x41\x9\xbaw\xb7\xab\x66\x1a\xceJ\xfaq\x9b\x82\xb3\x80\xaf\xa3y\xf3j\xb4\xea\x93~\xdd\n\xfc>l\x90\xf5" "\xc9,ho\x12-\xf3\xb5\xfd\x61i\xb9\xc1\xb7:\xa3\xc2T\xc0\xeb\xba\xbe\xf4\x6\xa3\x1e" "\x9aX{\xa5\x64\xfeW\x80q\xf^*\xb3\x8d\xa7I\xb4\x36\x1a\x42\xe3\xdb\x3\xae\x30\x38" "\xb3N\xc8V\x98;\xc7\xad\x87i\xc3\xe3\x14\xd3\x1f\xe7@d\x3\x9\xbd[\x89\x1c\xfe\xf8" "\xda\xa8\xfr\xa6\xbc\x44\xa2\xa8\x65H\x17xaM7+\x4\x37\xcb\x6\xf2\x0:\r/\xddWfae\x5" "8h\xba\xb9r\xf3w\x2\xc0\x8a\x0\xe0\x42\xf7\xdd?,\xb3\x9b\xf5\x0'\x88!\xb0*L\xe)\xff" "_\xd9\x87\xc\xff\xdf\x61-4\\\xfe\xc6\xe3.,\xdb)\xd8\xdfU\xe9\x96\xe5\xe5m7\x9c\x65" "~\xe7#\xb9\xb4$\x92\x64\x9\x97\x31\xf4\xa5\x35\xc0\xed\x43\x36k\x7\xeb\xad\xca\xc4" "Yg\xa1^\x1d\xce\x43\xb6=\x8e\xfd\x9e~\xbe \x4\xc7\xb\x30\xdd\xdf\xba\x15\x90\xda" "G\xad\xfem7\xd4\x1d\xbe\xecu#NJ\xbd\x82\xf2\x7\x16\x61\xcaPP\xc1&\x3/\xca\xeeI\x9e" "SVwz.\xae\xed\xa2-t:c\xd2\xa6\xd8\x18\x15.\x9f\xfe|v\xdbu\x1f\xac\x65(\xad\x90\xe8" "3\xf3\x97$\xc5\xee\x10\xd2)\x8d\xc7#\xfb\x1\xc5\x43\xa7\xa0\xe1\xfc\x99\xc7\x15\xe9" "\xd4\x66&\xd4\xcd\xaf\xef\xb3\xd1\xd6\xb7\xe\xa3\xb\xe6\xf4\x64XS\x10\x31\xd1\xd0" "\xbei:P\xd6\xd9\xe8:l@\xd9\x1a\xa3\xd6\x8a`|\xf3\xcc\x62\xc4\xcb\x8Z(\x82\xa8\xdc" "\x8f\xfe\xc7\"\xcc\x99}]b\xa3\x8c\xf6\xd8P'Y\x91\x9c\xef--\xc3i\xc\x1\x90\xd2\xcd" "\xdd\xbb\x15\x7f\xd0>\xbf\x0rw\xe9\xd5rw\xa8\xdc\xd2\xf2\x61\xd5\xb4[jH\xee\x30\x65" "\xe4\x13\x34\xc9hE!\xd3!4\xbeQ\xb7\xd9$l\x1c\x92\x36\xe5\xa3\xda\x97\xef\xe5n\x4" "I{J0\xa9\x14\xb6\x64\xac\xee\xb8I\xad\x9d\x87\x32\xa0\x93\x86\x89\x6\x46m\xb5\xb2{[M\x1f\xb8Uf\x1d\x1f`et#=\xeb" "C@c\xb\xe5\xda\x8c\x19\x9\xe8!q\x9a\x19X\xed\xb9\xcc%\x84\xdeJ2G*\x2" "c\x91\xc\x91\xe6\xdf\x15@\xf\x35T\xf0\x43W\xff\xb5P\xe4K1\xb2'M\xcbX\xe6\x8b\x89" "\xf2\xc7\x8d\xba\x92M\x19\xa3\xcd\xb6\xf1\x35uX\xd6W9\xa2\x9d\xda\xd5\x19p\xfd\xdf" "w\xce\xe3\x33Y\x1f\x65\xd5&6\xd2'8\x7W\xc\xef\xcb+\xf7\x92\x66\xf4\xbej\xb9\xb9\x14" "\xf]\xc9\xae\x8d}x\xc5\x90\xbd;\x9\x8c\xceS\xdf\x66\x10j'Ze\xd4I\xda\xez\x16u\xc2" "&\xf4R\xa5\x1dQPk\xecj\xa9\xb\xb\x66\xfd\x41K\xfc\xdb\xee\x1c\x1a\xa8W`\xca$\xf1" "]s\x9e=i\x1fW\xf4 \xe6\x43\xfd\xce@\xa8\xab\x97\x80\x9\x1d\x1\x87\xcaV\x5(\x1d\x82" "\xc5`*\x95\x82\x9c\x91\xc4\x31N8\xec\xc0\xdf\x12\xa9`\xc=\x15\x19\x18\x9cW\xd8\xe1" "\xc2_\xc7\x45\xcd\x39\x19q\xbe\xd4\x81\xb3\xc9\xcdN\xfd\x85L\x80\x82uL\xb1\x19\x90" "\xc5\xc1\x87\xe1M^y\x9a\xcf\xddV)\x6{lAP\x19\x89\x42\x18\xe4s\xf9\x37\xbc\\\xd1\xfd" "N\x82\x8d\x32\x38\x82\xfb\x90w\x5\xe1\xf5\xf3\x63\xe4\xf2\xef!u\xcd\xa6\x86\x9d\xf9" "YBB+XS\xc0\xac`\\*\xa9\xdf\x86\xbfOt\xf\xb1\x35:\xb5\x9c\xa4\xc7\xa2\x33\x82\x61" "m\xd1\xc7\xd9\x97\x89\x8c.\xcf\x1c\xea\xe0n\x82\xdd)y\x1\xabna\xcb\xfe\xad\xf9>\x17" "\xcbGI@\x1c\xee\x43\xa3\x9c[\xd7\x9f\x8d\x41\x91I:5\xc9\xd6\x46\xdf,\xb4\xcb\xcf" "\xc3\x3\x38Ix\x81h\xf9\x86\x38\xf1S6`\xfe\xc5\xf3{\xf1\x9b=\x19P\x4\xb3\x64\"\xee" "\xc2(\x1eM\xa5\xf7V\x4{\xe7\xf6\xdc^\xa2n\xd9\xd5\"rb\x8f\x12\xf3\xe7\x43L\xb7\xf3" ">\xaaM\x8e\xbb&\xe2\xb/\xe" "<\xb4\x3\xc8\xcd`\xb6\xacL]>\xf5\x96\xbb\xbc\x91\xad\xb7\x98\xe4\x9a\x11]d\x8c\x8f" "\x84\xa7\xe7\xb0h\x13\xc2_H>i#en\x92J\xb1\x99\xa2\x8by\x7fk\xd4l9\xfa\x37.Z\xa2\xc8" "\xf5\x86\x31\xfc\xe6\xf2\x8d\xe0\x1aPP(\xc2kM\xd3\x32No\x10:\xf5~\xd0\xf5\xb6\xae" ">\x1cuN\xeb\xc5JN_:\x8|\x9f\xaa\xc7\x46\xa8N\x94^\xc2$\x3\x9a\xba\xf9\xc6\xb7\x1e" "=\xb0\xc0o\xb4\x4\x95\x18\x9b(9W\x9c\xc1\xd9J\xd5\x9b\x64\xe\xef\x83\xf1O\x9c`M\xb3" "\xbd\x36]S\xd6\x88\xf1)\xe3\x8d\x42\x9b\x8e\x92\x8\x9f\x6KXHp\xf7\xfd\x66\xcc\x91" "\xcau\xe0\x80{\xdc\xba\x38\xf7.|\xee\x33\xcf(\x10\x64v\"\xab\xfb\x1J\x9a\x1f\xd4" "\xe3\xa4%H\x8a\x81\xeb\xc4o\xd1\r\xc5\x31\xf7\x16\x1c\xfd\xd9\x1b\x97\x81\x92\x32" "p \x10\xa3q\xce\xb7M\x10*[\xc5\xa6]\x8\x94\xc5`\x1K\xf1*\xad\x96$z9Mu/\xceX\x88)" "\xc0\x64\xd1\x97\xa6\x35\xc9,\x7f\x97\xe3\xef\x65(r\xf1\x1cm5\x8.L\xf4\x7L\xe8\xe4" "\xde\x1eQ\xee\x88\xd9\xcf\xa6\xee\xea\xe3\x63?\xd2\xb9\x8e\x83\x14\xfd\x2t\r\x8f" "\xe7\x95W\x9d\xfe\xf9;I/\xee\xf5i\xfe\xb5\xb3\x8c\xcb\xb7.\x10\xa4g?\xe1J9\x89\xc9" "\xb8M\x8e\x37\x4\x80\xf5O\xda\x92\xed\xf7\xd7\xd2\x12\xcd\xe4\xb\xday\x1\x15z\xf5" "\xc0\x85\xfa\x91\x13\x9a,\x9dM\x2\x4\xf6\xaa'g#\x1a\x8a\xc8\xc\x9\x8b_\xafi\xa9\x95" "\xf9\xd3v\xe\x64\x9b\n\xdag2n\x93n\xd6\xd2j[\x0\xd0wO\xb\xdb?\x97\x8aix\x86\xb5}" "Xq\x9a\x43\x8d\x7f\x12\xef{\x84\\\x85\xcf\x66I\xa4\r\xc2u\x98\xf}U\xda\x38\x19\x39" "|~\x16\x9bw\xda\x86+\x1e.\xf2\x1a\rU\x1f\x94\xed)\nT\x8d\"\x8c\xd4 \ri\xe1\xa1\xf" "Y\x18\xab\xb%\xb5\xc4=\xb7\x8b\xdc\xbb\xaf\xfa>\x99P\x91L\xb0\xb5\x18\x6\xfd\xda" "~bLi\xc0\xdfv\xbf\xe4KW\xfd\xfe\xe6\xd1\x8c\xb6\x17\xd7!\x97\x32\"\xb5\x9f\x1b\x82" "4k\xe7\x37V\x94\xdc\xe4\x9e\x61\x35\n\xfb\xb9G\x17P\x13\xcaO\xf0\x8a%\xb6\xb2\x42" "\xe3mo\xc9\xd1\x45.\x9e<\\A \xa3\xf6\xfr\xe9\xa3\x9b\xa0\xc5i\x1e\xaaH\x17!\x95\xee" "I\xe4\xe7X\x87\x31\x90\xc0\x80\xbaW\x2\xfe\xcdmP\xb7\xdes\xbd\xb9w\xe3\x98\xa4\x8e" "Wa\xd9\n\x0\xd0\x12\xf3\xb3\xf\xc2Vu\n\x6\xed\x9c\xce\xaa\x32\x90Nz\xc5\x35\xfY\xc9" "\x97\x5{\x92\xc9\xd4M\x83\x15p\xa9\x8d\xcf\x7.\xc9\xb4\xb4o\xe4\xbd\xd1\xbe\xcbO" "\x8X\xe0\xd9\xb6@\xd6\xd1\\\xf2\xf0/\xee[\xbaz_\x9d\xd6\xf1\xff\x96\xa7-\x88\xe7" "\x1bNh\xf5\x83po\xf4I\x82\xe0s[L\x9eQY\"F\xd3\x8as[\xf8\xb\x9\xc0\xec_C\xdc\x92\xb3" "\x9b\x5\xb1H\xc0Z2\xe2\x1d\xec\xbb\xd1g\xfdR\xe1\xfb\x9\xac\x61\x18\x1f\x66\x33\x1e" "\xfd\xa9\xfa\xa2v\xe1\x44\xacOnEv\r\xf1-iE\xaf\xb5\x19\x1aQr3\x0\xea\x98sZ\xed\x88" "u2\xcc\xcc\x41\xcd,mr\xee\x34\x11\x9f\x15\x9e\x9c\xea" "\xe9\x95\x33\x65\x5\xb0\xbb#U\x92z\xde\x33\x17\x39h}\x1c\xa9\xfb\x1c\x13\x1b\xf1" "\xee\xf4\xa7#\n\xa1\xe7\x8bu2\xf8 \xdbLp\xda\x84\x18\xbcs\xbc\xd8\x16@\x1c`\x97^" "a\xb7\xf8\x90\xbf\xe8\xb0p\x6l)\xb2!I*\x9?\xf5\x88g1\x0H\xf0L\xb\xea\xb2\r\x1bI\xce" "{@\x14\x43\x9c\x8a\x9f\xf6\xba\x35\xcf\x1e\x1d@\x13\xbd\xac\xb5\x99\xab\xd6\xdc\x63" "\xb3\xd1%\xc0\x10\x80\x17k\"{F\xa6H\xa1QJ\xbc\xc4\xa6\xcb\xd4\x8\xab\x8a&\xdd.\x9" "!\x95L{\x7f\xf2\xb9X\\\xf8\x61>1\xaf\x65\x45[\xbf\xfcz\xe3:\xea\x83\\kC\xca\xd9j" "T\xc4.\x8l\xbd\x36S\x3VI\xbd\xc\xc0M\x9\xfbm\x15\x30\x1d\x35Y\x96R\xe8\xc5qp\x95" "8\xe3\xb2\xe1\xea\xfp\x83\xa6#8\xdf\xa6s\x8d}\x8d\xfe=\x91q\xbd.M\xa3\xa2\xb3\x36" "\xac\xc1\x63\x41T\xfe\xb8\x61+E\x11\xb0*\x90\x95\x62u2\xf6\xa3\xc8\xcb\x8b\x63\xd2" "\x81.\x11\xe8>\xc1\xf3\xee|\x1\xc0\xf2\x8bGd\x1a\x43\xbf\xec\xc2\xc3\x91\x88\xcd" "K4\xea:\xe9\"\n\x45\x31\xab:\x9c\xe8\xc3\x64\x92\xe9:\xff'\xbb\xda\x86\x1f\x7\x7" "\xa6\xb4!\x9ci\xe3>\xc3Xp\x9\xf2z\xd5\xb2\xac\xe3v\x98+\x1d\x32\x19\xa9\x17l\x16" "zSM\xe\x46o\x1f\xb5\xef\xc9\x8b\x46\xe6\x1b\xdd\x3@\xa4\x9c\x41\xb7\xae\xc3\x6\x9e" "\x9c\xf9\xc9\x16Z\"e\xc5\xf2\x82\x19\xd8\xb0\xbc\x11r\xccI\xdc\x1f$|\x8e\xbcK\xd8" "4-\x85\xe5\xda\xd0\x8b%\xdf\xf\xad\xfe\xd3&T\x1c\xbd\n\xa5\xdf\xdd\xc2\xa5U\xe1\xe9" "\x84\x91\xf0\x8b\x0\x7f\x98\x1\xc9W=\xc6$\xc8\x4\x9f\x10\xf9\xcb\x30m\x85~\xd1\n" "\xf0\xae\xe3\xb3\\m$;\xeb)a\xbe\x7f\xd5\x0k\x8f\xdc\xa0\xdf<\\\xd7'\x9 \xab\x11\x1e" "\x97_9f\n\x16\x13j\xc5\x8e\xe5\x98\xd1\x44\xedQ\xcc\x4\x2>9\x6>`\xd9\x5\xe1<\x8a" "\x98\x82O\x5\xe5[x\x82\xd6\xa3\xb7$\xd9q\xacg'/\x92Sw\xcaQ\xa1\x42\xdc\xe6`\xab~" "\x1f;+\x14\x17\x45\xa1\xfd\x84i\x82\x19\xfd\x99\xa6\x9d\xc2\xfcO2\x1a\xf2`\xea\xff" "_L\xe3\xb>5J\x8f\x91\xdf\x44#\x9\x93|\x82\xf2Q\xa5\x7\x96=\x1fx\x8f\x62\xfc$\xeb" "\xcb\x41\xbeq\xacmf\xba\x9qC\xd1G\xcc\xd3\xef}\xda\x46&[\xe9Ic\xdd\x1e\xda\x9c\x43" "\xdf\x41GNW\xf2\x82\xa1\xde Io\xe2\xb9\x37K\xf\x2\xe0P=\xaf\xd5\xa3\xc6n\xf4\xf4" "|\xee\xd6\xc3,\xb7\x90v}\xb7\xd4\xdf{\xe?Y\xeb\xb5y\x18\x8e\xba\x88\x8djI\x86Q\x98" "\xcd\\\xe6(2\x9e%\xe2\xc0'\x94Z,,\x1c\x96\xfd\\\xd8\xca\x2\xae\x36:\x7\xdd\x87\xf4" "\x14\xb1\xdd\x7f\x16\xda\xefx\xf4Oe\xdb\xa6\xdd!\xd2\xd2\x61\xf2\x4\xe6V\xf6Y\xc6" "\x94\x8c\xdc\x4\x9b'\xba\x9b\xcb\x97\xb8\xc8\xde\xc3\xb8\xc6\x66!uJ\xc5\x17z\x11" "\xc4\xb0\x66\x9f\xc9\x42t\xe3\xf8\x17n2t\xa9\xb9\xad\x8b\xddv\x98x\xff^n\xf5\x92" "\xd5#\x7kx\xee.\xac\x10\x34(\x12\xcd\x31#\xa0\xae\xe6\xf3\x30&\x99\xeb\x42(\xa1\n" "b\xe3\xbe\xf8\xa9\x42\xb8\xa4\xb8\xc0v\xe2\xce\x46T(]\"sD\x9f\xe7\xd2\xba\xd3\x41" "\x99\xe$\xae\x8d\xebQ\xfdN\xf6\x43\xbe\x9e\xc0}g\x84\x5]\xc5\xed\x65\x43L\xdc\x8f" "\xa9\xc0\xb8tk\xaf\x86>\xa4\x92\xf0\x9d\x85l\xdc\xef\x84\xccG\xe2\xc5\x8e}\x8d\x1d" "\xf5\xbc\x96\xe9\x1\xc\xd6\xc3j\xc2,7\xc4\xc2_\xff\xf5\x90\\\xf6\x2\xe9|\xa8{\xba" "\xc8\x14\xb7q\x8c\x34L\xbb\x1fW\x99\xcb_A\x92!IKM\xa2\xe3\xe3\xfaI\x16\xbc\x84\x1b" "Xk@\x10-\xb1\xb6,u^\xe2\xec\n\xe2\x64\xf7i\xec\x97\x42\xd4\x8a\x8c\x84\x80\xd9\x13" "\x7f\xe5\xff\x6\xf7\x33h\x8\xa6\x30\x8a\xaa\x9c\xa3\x9#*\\\xc7o7C\x11\x97\x17L\x8a" "\xe0\xab\x34y\xec\xc4\x16\xf4T\x11'\xc3;\x10\x8c\x19Yh\xf0\x45Y\xb0\xadvJ\x7f\xbd" "\x91\x9d\x80\xd7\xa0\xc5}\xd9\xc8.H])\xd9\xeap#H\xadG#A\xc6\x31\x9cP\xa0k\xff\xa5" "\xd6IG\x3\xdb\x39\xc3\x6\x45\x9a\xfa\x39m6o\x5\xca\xae\xa1\xa9\xe5\x16\xf1\x13\xe8" "\xaby\xc3\xe5\xf3\xcd\x8a\\\xea\x83?\xb4n8\xb2=\xb7_O\xcc\x8e\x37~\x2\x98\xc5\x93" "\r\xaeJ\x96\xa1\x9e\xf1u!N\xb3\x92\xaa\xd2!\xd6\xa8 \xe5\r\x65\xa6\x96\xb1\x37\x1f" "J\xdex\xca\xb9\x39V\xde)\x9f\xe1\x65\xda\xac\x89\xc4V\xf3\xd8IX\xd1M\x13qj\xe5\xc8" "A\xea\x6\xb7n\xbc\x61\xcd\xd4\xcb\xdf\xd7\x33,\x95\x46S-\x84\xe2\xf0\x43y\x0Q\xb" "c\xdb*YG\xffR\xb9\xe7\xfa\xd9\xe0\xf9@\xe3\x9c\xd3\xd4\xdb\xf\xb6\x37L\xa3\xf7\x0" "\xf1\x45}\xe5wA\xe5\xf4\xb8R\xf3NHb+mS^q\x80{E\xa8\xf1\xf8\xa7j6{\xb2\xea\x83,\xac" "\xa6/\xa2\xfe\xbd\xa8\xd8\xbe\x62\xc5\xba\xd7n\xa9x\xdbm]\x8ZQ\x1e\xean\x8d%\xb3" "\x8e?f\xe3=\x90\xa0\xa0v\xf0\xbct\xc4\xb0\x42\xab\xa8*\x14\x6z\xe1\x46\x34\x0l\xf8" "uN\xb3\xc6''\xb4}\xd0\xf0\xa8v\x85\x15\xe4\xf8\xf3\x34\x0\xeah\xa9\xa9\xf4\xca\x66" "\xf8\x39\x46\xdb\xaf:\xe5o\xe5u\x1\x2\x46\xa7N84\xce\x96 `91T\xd7M\xa8\xee\xeb\x93" "\xbc\xdf \xad\x1e\x95\xf4}\xd2q\xa5\xef\x5v\xc7\xdd\xd2\xeb\xba\xdelT\xea\x93m\x8b" "1\xe6\x9f\x1aQ\xa7\x9as\xd6\xae$\xc1Q\x11\xae\xe8`\xe7\xed\xb9\x36.S\xb2\xa3\x87" "fB\x82\x8e\xaaU\xc7\xea\x8e\x9f\x65nC\xdb\xe0%\x36\xe4v\xba{\x97\xcf\xaa\x96\xaf" "u\xb0\x87\xb5}\xe3[\xc1\xcb\xfb\x4\xce\x17\xf0(D\xd5\xa0o4\xde#5b\xf2n\xa5\x85O-" "\xa4\xb3Z\xbd'\x9aV\xb3[\x19\xdc\x32\xeb\x9c{N\xda\x9f>L\xc0w6\x6\xa5\xac\xd4\xb8" "\xf3)\xf5_|\xc3\")\x1K\xe7\xd5\xe7S\xfa\x83Z.\xb7\xf7\xcc|\xc9\xbf\xa3\xdc-\x8a\x9b" "\xd3!\x7f\xd4\x1e\x30\x1c\x3\x9a\xbb\x30TB*n8~\x92[\x87 $\xb8;\x80\xe6\xe3,\x99\xc5" "8\xb\"\xcc'\x93\x92\x12\xdb\xd2\xc9k\x8dN.\x4\xe5\xb6N\xd3\x16\xd8\xe1\xafs\xaby" "d[b\xf1]9\x1e\xf2\x45\x4\xb1w0\xf8\x1\xc3o,\x7i\xce^\x87\x6\x11\x33\xf9 \x17\xed" "\xda\x1c#\xf7P&:\x92\xc8\xc2\x88\x8a\xe9\x37\x94\x43LcQ.\xb%t\xd9\xad\xe9\xea\xf6" "\x0\x8dK\xaem\x1e\xe3\xa8'u\x8b\"\xf\xdbI\x14\xf2\x15H\xd1z\xc5\xe8t\xc9q#|\x7f\x0" "\xf1\xf3\xc3.[n\x1\xa0\x13\x35H\x8a\xc3\xbbH\x10\xdc\xd0\x61\x41\x91\x42\x7f\xbf" "\x6\xacp\xe3&>Be\x14\x1a\x14i\x5\xe/\xe5\x1d*\x96\x9\x96\x42\x1b\x85\x43\x12\xd0" "d\xa5|>\xd3\x98L\xf9g\xed'\xa9\x4\x91!\xf7\x41/*\x91{\x97\xa9 *\x5\x5\xb7\xe9\x37" "\x89\x8a.\xdc\x9a\x95\xf9\x36\x5\xbc\xe7\xb5\x80\xbX\xb\x82z\xb2\x61\x8ft\xf1\xc4" "c\xcb{*\x7\x41\xae\xf4:\xce\xbf\xbc\xc8\xbR\xf8\x94\x80l\x9d\x6\xa2\xa0\xea\x8b\xab" "\xec\xdf\x11\xfc\x1f\xfe\xe0Zc3]\xe1\xe1W\xab\xc8Q$f\xc2\xcb\xb9\xf7#f\xc0L\xaf\xb" "5\xad\x8a|\xf8\xf5\xe4O\xfd\xdd\xb9\x62\x62\xc7\xef\xcb\x36\x9\x64\xdf\x89\x42jM" "\xeb\x87\xee\x98\xee\xcM\x82\x31\xa0\xf0\xaf\x9ao\x91\x11\xda|+T\xa3\xd3\x9e\xc8" "{\xaeM\xe6 J\xae\x11\xfd\xc4\x82\xb5N\xa5#\x95\xdex\x6\xb4\xa2Ic\x84\x17\x98\xa9" "\xa4y|\xc6tz'\x85\xeb+[\xf7~7\x14;.X\"\xf1(A\x15SU\x8f`%\xf2\xd7\xeb\r\xd8hN\x12" "\x15LX\x6\x1e\x18\xc9\xa8\x66\x9\xc7\\*!\xb8\x1e\xbegM\n\xaa\xffQ\xd4\x80\xcdT{\x16" ":!\xa7\xed\xe4g\xb2\xff\x2\x8a\x87\xd6K\x8b\xd0\x99\xb9'\x98\x1f/\xa7o\xdcsNS\xb3" "\x9\x65>\xd6&<\xd1x.Xa\xb\xe7\x9b\xea\xb7\xcb\xbb~\xdb\x8a\xab\x8d\xe9\x8dsB\xaa" "\xff@yZNBHBY\x13\x8d<6\x6\xae\xf6JS\xdc\x66\x45^F%>\x7f\x12\xb8\x10\xac\x37\xec\x63" "\xde)]\x6\x12^\x82\xfa_\xf5!t~t\x96\xc5hj\x1a\xaa\x7\x90\xe6Z\xee\x5nB\x85sT\x1e" "?}K}\xc3q\x83g\xc5\x8aSx7\xd7\x83\xce\x36(\xc\x8a\xb3\xd2\xce\xc3\xd9 \x95H\xcfR" "\xcf\x30\x45\x89\xcc\x39\x6\xc8:\xc0tEG\x9f\x80\x84S\xbc\x1c\x81T\xd0\xc7\x9OE\xe" "\xff \x1d\xb7Y>.\xfa\xaa:\xc8\xd9\xc6T\x12\x9f\xad<\xa2\xf9\xc4\x92\xc8\xa7nq\xea" "F>\xb1.M<\xf\x33t6\xdbX\xf8\xb4\x94#\xcc\x9e\xfa\xe7\x16U\x8b\x90\xa5?\xdb< c\xfd" "\xc4\xec\x95N\x99\xde$v\xa0\x64\x89\x9a-j\x16\xef@%\x85\xf3\x16\x7f\x93(Gw\x84\xf5" "\xd7\x8b\xba\x42\x8d\" \xdc\x37[\xf0\xc5g\xbe\xae{\xf7\xd2|\xdd\xc9\xcasM_\xf5vF" "\x6`\xc\xfa\x3\x91\\\xf7\xa9\x37\xbe\xb1H.\xab-\xa6_\x91\x37J+rwn\x9d#<#\xfd';\xfb" "WMM\x19\xe5\x41\x8\xfeMg\x1f\xc5\x1a\xec\x63\xe4=\xfb;\xda\xa3\x38\xa3\xe0\xc1\x93" "w\xb1\x1aUl\xa8n\xd0\xe1\x81\x46\x1d\xc9h\xc7\xe3\x8c\xc9\xa5U\x1c\xfb\xf0\x8e\x10" "\x19\xdd\xc3\x89\x34\x95\xd0\xc7\x36\x37\x13\x1f~|\xcb\xf5\x9b\xe7\xcdZd\xf6\x7\xa1" "\x8c\xd1\xd6>\\6\xe\xbN\xc2\x8d\x1a\xbc\x92\x7\xec$\xd6U\x99Gu\x4S\xb9g+\xde\x83" "\xf0#*\xabs\xd9m\x3+\xd3Zk\x1d\xc3}8\xdd\xe2\xb1\xbd\x88M\xda\x95\x9=\x6K\xei\x1c" "\x8a\x6\x13\xbf\x42\x46/RM\xcb\xa9\xaa\xdf\x99\xb0;x\xb8\xb9\xe8>7D=\xc9,\x95qt1" "(\xd1\xa7\xdd\x9du\xb9\xa7\xc6s\x83\xca\xe3h\xa2\xce\xc2}\x9d\xcd\x35\x4\xe2\x37" "X L\x7\x9a\x89\x44\xab\xb0U\x3\x89v`,x\xd4\xf6\xee\xa2:U\xb7\xa7\xc1\xafJ\xbb\x18" "I\xd3\x1eyf-\xa7&\x91J\xbb\x98}#NP\xd3?\x1bwU{\xc8ra\xee\x98@\xa8\x14\xdf\xc5\xc4" "\xc5\xe0\xe5\x89ZJ\x14.\x8c!\xde\xfb\x15\xf9\x9f\xbd\xa4\xad\xb6\x95g\x95\x80\x96" "\x18\xa8J184\xe9\xe3I\xd3:Y>\xe7\xdatb(\x8e\xda`\x84\xcT\x9cj\xf6\x9a\xd2\xfeuA9" "\x17\xd5\x35\xc1\x87z\x82\x90y\xb4\xc0W>\rt\x17\xb5\x43\xbf\nW$\xaf\xd9\x98R\x7f" "\x6\x94g\xdc\xfb\xef\x1\x62l\xb8\xb4Y\xee{-\x9a\x43\x95O\xdc\xeb\xa4\x9f\xa0\xdb" "\xed\xbc\xecU\x99\xc6\x91\x37\x3\xfeN\xb3\xd6z\x8%\x0\x9e\x1d\xef:Z\xde\xa6\x15\x1f" "\x1b@\xd8\xdf\x82X\xf4\x32{w\xa3\x1f\x11\x7\x9c\xb\x8e\x92l\xaf\x33\x46\x8\x37\xe" "\xe8\xa0\x8b\xfa\xae\x13wi\xec\xaa\x18!ox\xb6\x81\xa0\xdft\x1b\xb2\x80^3\x8\xf3\xe1" "k\xb1\xd2\xffV\xd1\x86\x94\xa6K1\x2\x9dJm6F\x97)\xfb\xec[\xb\xbe\xb7\x0\x90\xe7\xf7" "\n\xd2\xe7\x94~Oa\xe7\xecg\xcf\xd4\xbc\xe9\xb6\x9a\x17YVr1}\x87\x8c\x1d\xb,\x9e\x1d" "\xba'\x89\x1\xe3>\x16\xd5\x9f`\xb0m\xb8\x42\xde\x61j\x92\xc0\x1b\xc7\x81\x65S\x87" "\x2\xcd\xf4\x99\x7!\xbc\xdc\xce\xab\xed\x42w+3*\xab\xce\x8$\xfe\x1\x37k\xa6\x64*" "\xff\x89\xe7\xa2\x35\x8\x18\xfa\x1d^a\xe1\x1eXs\"v\x9f\xed\xe4\x42\xd6\xf8\x18\xee" "Ds\x82\x90\xa8\xfc\xdc,\xbb[M\xf3\xf\xdb\xf3\xb6\xb3\x98\xba\x13\xd4\xed\x8a\xc5" "4e\xd2~@\x81\xce_\x85\x42:\xe5q\xc4\x1b\xd2\xea\x7\x8a}T\xb6\xb6p\xf3\xf5\xef\xda" "|\xa0Gh\xd0\x9c\xc0\xd6$m\x15H\xcf\x37oG\xf3\xea\x9c\x8e\xc4(\x16\x81O\xa1\x61GX" "\x9a-=\xad}M\xac\xb8\x89^\x2\\\xd6\xb+\x2\xfdhb\x81\x12\x8du\xdc\x16\xa8{N\x8\xca" "\xe5\x9e\x83\xa9\xb4V\x1a\xb0\x90\xb4\xa7\xd0\xe2\xb5\x31\xd5\xfb\xe6(\xd1\x99\x1d" "\xe7qzW\x89\x42\xc2&x\x99rne\xc6\x12\x11\x98\x62\x34\x96Q\x18N\xa0\x1aU\x18\x3\xd0" "6\x80 \xf0{\x1\xcf\xbb\xc1&\xc1\x42\xe2s\x8ep\xc1\xf7\x88\xf7\xf2\x1b\xe\x8b\x1b" "J\xaaj\xcf\\\x9f\n\x37\xc2\x8a\xea\xd2\xfb^\xfc\x19\xbc\xcd\x9a)tz\xc9\x8\x0\xd7" "VsC\xff?\xd3\x11\x91^\x94\nq9\x8d\xb4\x63V \xb\xac\xd8\xc9\x9ex\xa8\xdbQ\xe6@rV\xa0" "\x13\xd7\x8c\xb6\xd1\x3\xcd\x10\xca\xb4\xee\xcf}\xec\x0\xfdx#\x3\x81\xa7#\x1d\x90" "\x94\xff\xb1\x93\x15\x1e?\xaa\xc1\xf1\x11\xa2\x39\xbc\xbb\xbc\x9\xc7\x81@\x18\x8a\x39^\xf\xf7h\x85\xf9\xdfJX\x89\x39" "\xfb@6$P\xbe\x66)>]\x8dM!\x8d\xc\r\x10\x11\xe1\xf5i\xa4\xc0\xe\xe8\x1f\x19\x9eYU" "\xf5\xaf\xf8\xc\x1d\xa8\x38\x8f\xd4\x7\xf0>M \x87\x36\xe9?+e\x1a?\xd7%\x91\x9e+`" ":\x3\xe9\x17\x0\xcf\x66\xbeK\xbd\x46\xe8\x8\x1a\\_\x14p\xfa\x13y\xe0\x98\x2\xbfK" "\xe4\xa5{\xdb\x39\xf0/h\xc8\x13\xcf\x1d=i\xfby\x85\x42\xd3T\x8\\;\xb1\x36^\x18\x46" "\x7\xdc\x1a`\xc1\xd3\x42\xc9\x43\"\xee\x8f\x96\xfc\xcf\x92\x85WoOG\xce\x11\xa1xj" ",\x9e\x81{\x90\xeb\x43\xdfXf8\xb5\xc4\x9fVA\xe9\xfe\xf2\x42\x32\x42}[\xf\x42=\xcb" "\x97\xd7v\x11\xcd\xe8\x44\xb6\xe\x89\x46>\xe2\x13\\-4\xcf\xaf\x1d\xa8\xb\xc1\xa6" "\xcb\xf4n[\x8a\xdf|Q.\xe3\xe9\x0\x94\xa9-VM\xad\xbf\x7\xa8\x33#\xac\xf2\x5\xb\xb1" "\x99O9\x15\x4\xa1\rg\xb4\xb3-\xb4\xab\xd8\xce\xf7\n\xb9\xd1\xbc\x94\x91m^\xf2\xa9" "\x97\xe3u_\xce%~\x85\n\xf0\x90\x1a\xd8\xfd\x89\xb7\xdb\x38\x15\xd1\x65R\xc2\x33;" "\xc4\xa1\xa7\x32\x61\x95_<\x84,\xdf\x9f\x8d\xe9\xc8\xbfK\xab/\xe4\xf2\xb6\xeb\x65" "\xb\xb8\x8c\x3\x92\xff\xfd\x9d\x33\xa7{\xe1\xbb\xa1\x1e\xdbk\xce\x33j\xfd\x61J\x98" "oS\x9dJ\xb9\x9y\x17\xa5\x98\xac\xdc\x34\x1e\xcb\xdb/\xadtH\xee\xd3\xbf\xb4K\xf0?" "\x18\xd4W\r]\xbb\x98\x99\xfb=\xf1\x8b\x37\\\x80%\x83\xdc\xea\x90\xac\x38>D\x87\x83" "[\xdb}\xaa\x93p\xce\xd3\xfd\xe2\xa7\x2\xbagC\x97\x63\xf8\x1b\xd0\xf4\x9a\"\x81\x19" "\x15\xc4\x0\x9f\x95\x87_4b+\xb1\xdb\xc2TA\x9e\x1e\x36\xc6\x36\xbc\x32\x1a<\x1fv]" "\xdet)\xde\xa1P\xbrW\xf4\x90\xb5<\x1a\x65\xbfU\xd9X\xd0,\x6\xe6\xdf\x8b\xe7.\x9d" "\xe0t{\xb8\x13\x85\x7f\x88\x84\xf5\x38\x18\x43\x12\xb7\xa0\xc4I\xbb\x95\xe,w\x90" "\xffK\x18\xb6y\x1O\x3\x3\x37\xf0\xad\xc5\xea\xdd\x12\xf7h\x8b\x2\x90\x9c\xd1\x1\x31" "\xb7\xf0K\x88\x8bk@\x91oAm\xf9%;C\x8\xed\xef\xd9\xb0/\x1a\xec\x8e\xa0 \xb2)\x12^" "\xe0_!\x3\xa8O\x11\x89`\x7]\xf1\xb4\x1b\xda\x1\xd7w\x86\x1c\xc7\xfe\xb4P(U@\xe8\n" "\xfc\xca\xf8\xe0\xbd\xfd\xda\xb3\x1e\xc4N]%\xc3\x83\xa2k\xe6.\x1d\x41)\xe1\x63\xd9" "\x8d,\x96\x91\x85\xa1\xe2\x1f\xda@\xf6\x1d\xd5\x9c\xde\xbfV\xa1\xa5`\x1c\xe7(\x18" "\x9a\xfa\x62\xcc\xf3\xef\xb2\x8e\x94\xa4Vj\x1f\xf6T\xa9\xc7\xc3K|4\xd7\xc6\x31\xd6" "k\xaaH\xeb\xe5\x1a\x46\xfc\xc9\x63\x10\xd3\x19\xd3\xea\x1b\xb6\x9b\x14\xd0\x5\xaf" "s\x8f\xb1\xe2\x7\xbe?\xf9\xb5m>\x8\x7\xe8\xc7\xbcNN)r0\x82\x38H\xfa\xab\xe5P\x16" "cNWQ(Y\xb8LG`\xd9\xe0\x9d \x99\xf8\x62q\x18\xefM\xc5\xf1$\xfd\xf7\x41\xcd\xbf\x37" ",\xc6@\xcf\xa9\x1c\xf7\xbf\x6\x8f-~\x7f\x16\xd5|1dv;\xb0\xd9\x9d\xf5\x14p3\x9f\x2" "\xb8\x93?'\xf0\xf6O\xf6\x82\xac\x8e\xde\xc3\xf3\xb0\x43Q\x4S`S\xac\xc5\xc0\xff\x62" "\x6\x1f\x8c\x9e\xebq=\xbc\xb5\xb5\xdf\x4\xd9O\x99\xf3\x14P\x1d\xfelC\x14\x46\x8\x39" "\xf8\x94\xcc\\\xbf\x87nN\xdfi5\xb3\xb2\xe2\xbbW\x10%\xf1Q#\xd5\x8a\xb+M]<&\xa1(\xe3" "\xae[g\xcc\xdd\x88LPzZ7\xfdo\xd8\xf6u\x9f\x9d\x92z\xfd\x8a\x82\xb0\xaaxI\x8c\xe0" "\x99\xf8\xe7\xb\xb1\xb0\x88\xbd\x8f\xe9\xb\xecpO\x8e\x84\xe8\xe1V\xe9`\xbe\xd5\xb3\x10\xa1\x90V\xca\xf9\x7f\x62\xd6 \xf0\x30i\xf6\x9" "\x13&\x0\x86=d\xc7&\xc9\x83\xb3\x37\xff\x9G\x8f\x8f\xf6\x39\x89\x8e\xb=\xca\xf8M" "\xco\xe2\x9b\xda\xab\xfc\xb1\xb6\x35\x64v\x9b\xec\xf6\xd5\xdd\x92\xa2\x88\x3L\x5" "-\xb4\x63\x95-%\xe1S\x9c\xdb&dk\x8c\\\xaf\x44\\\x19\x90\xd3\x86\xc8W\x4\xf7\x61\xdd" "\xee\xd3\x11|*\xa3p-B\xc3\xad\xcf\x9b\xc2\xaf\xb1K \xc5 \x1b\x34\xeaT\x9f{\x85\x8b" "U\xadM`\x85\xed\xb3\x1e\x65.\xe6)\x1c\xf2\xfe\xeb\x32\x4\xd5\xe3\xa6n1y\x92\x64\xbc" "\x9cV_\x5n\xe/&\xb2\x37\x64\x2\x1a\x33\xfa\x81\x34|:\xe7\x91\xae\x8d\x35\xae\xc4" "\x1d\xcd\x89$Y65\xe2\x8d\xaaZ\x3z\xc4\x84k\x0\xceXx\xe3N\xec\xfe\xec\x89\xa5I\xaa" "M\x3\xb3\xc0\x3LTd`\x1\"\x64%\xfb\x1bs\xbb!\xeb\x83**\xe2_\xd4\xf9\xf1\xa3g%\xf3" "\x18\xf5.\x16\xe5\xb7\x81\x31\x9d\x8f\xafmW\xb0P\x9c\xa5\\@\xfa\xf8\xc5\x98RR8\x3" "\xb9\x87!\xe5\xef\x32`\x85\x1\xf2\xd9\xa6O\x92\xb8\xa0\xcd/\x12\xf8\x85\xb6\x35\x1c" "\xb7\x82\xdb\xc5\x99\xee\xd6\x16\xd4V\xed\x10\x10\x6\x98\x1c{\n\xfaL\x83\xb9g\xae" "\xc9l\x93\xf8\xa5\xe4\xed>k\xbd\x90\x61\xa3\xc1\x2\x31\xc2\xd1\xe5g\x91\x7f\x62\x65" "j^\xa3\x45xW|\xce\xd1\x8c\xd5\xee\x1f\xa0\xb3\xf7\xdd\x15\xb2\x9d\xc1\xe4\x14q\xc1" "q9a\xd3\xc9\xb6\x64\xa9\x4\xb8\x8a\xa0\x87\x66\x2\x96$\xc\xfb\xed\x15w\xb0\xcd\xe9" "\xa4\xeekzss\xaf\xa8,>\x6\xb2\xddo\xff\xef\xff\x92le2](\x97@\xf1\x99n:!BG\xcc(JT" "Z\xc6\xc3\xd3\x8f\x62\x83\x33\xac\xf\xfd\x19\xadR\xd2\x34\x8c\xa8\x38\xb3\x64\x42" "\xd6\x9b)k\x80\xe6\x0\xba\xe6\x32\xe3\xf0X\xdb\x43\xe4\x11\x7q\x94L\xac\xa9\x90\x66" "\xdd\xcc}\xb8\xcb\x31\xbf\x1b\xacG0\x86\xea\xf\xebh\xeI\xdd\xeb\x96\r\n\xee\x5M\xb2" "\xad\xc7\xba\xc8l\xaa\xaa\xc0\x8f\x8c\x90\x86-\xe1\xf8q\x5\xc1#\xf7W:\xfei3\xad\xf3" "\x8f\x30\x1a\xf5\xf\xd2\x1f\xb5\xdcr')h\xe5\xcb\xe|\xba\xd4\\\xd8\x44\x9b\xd7\xad" "\x1a\x9c\xb5\xee\x80\xa9LA\xad\x38\x9eg\x98\xd5S\xa7\x41\xa6)\xf3s\x15\xdb\x92\xe2" "I\x9bG9_6B\x92'\xe2t\xd9z4\x85=,\xcf\x16\xd3|\xad\xa2\xb\xd1\x1e~\xfc\x18\x1c\xa0" "\x4.\"\xbf\x4\x1c\xd5H\xa5\xeY|\x2 \x89\x14\xd5s\xaf\x85H-\xf6\xd9\xc1\x64\xbbH\xe5" "]\xab\xfd\xb3\x8b\xd5\x45\x1e\xf3\x5\xe1\xca\xd3\"\xaf\xa8\x14\x44\x88kJ?\x94|\xb1" "QA\x9a\xb9\x2\x30&\xc3\xbd\xef\x10To\x9a\xbeVp\xeJ\xc4g\xe8V\xff\x1f\xa1h!\rX\\W" "{\xed':\xcb\x7kC\n\xe2K9\xe7;m\xab\x1a\x4\x9d\xfd\xa1\x92\xf6\xc6\x34\x61\x1Q\xb4" "\x14\xacH\x1e\x83\x90Wo\xbd\xe?\x1b\xe2\xb2\xaf\x9a\xdfs\n\x18\x61\xd4l\xe0:)\x89" "v\x17\xac\xf6U\xffILx7\xfb\x85\xb1\xb9\x34mt\xc7V\xa1\xab\xce\xcdGf1P\x12\x11\xeb" "\xac\x65\x89\xc8\x15IA\x1b\xf3\x65W[\xec\x7f \x9eg\xf\xef\x1\xc0\x8\n\xbd+\x85,K" "\xcf\xa4+\xcJ\xb9\xf\xdf\x99\xe3\xde\x19V#\x13\xe8\xaa\xd6\x97\xbe%\xbc\xa2\xba\x9e" "\x86\r\x9c\x97\x2\x10\x8e\x80\xdd\x7\x1\xa4\x88\x66?\xaf\x8b!P\xd7h8\x1f\xac\xf3" "\x98\x87<\xd9\xb4l\xd9<\x9b\xea-Wl\xab\xdd\x91\xbf\xe<\xf8\x6\x36\x9b\xd4\xc3\xe9" "\xdf\xe0\x61p\x87\xeb\x3= d\x80\x61\x10\xa0V\xb1Q\xc1_\x89[l\x9a\xc6\x18?\x17\xda" "\xc9\x41\xf1\x6\xem\x12v\xa0\xce\xd4\xd1~\x84K\xc6\xa2Xs\xc4\xff\x83\xf1\xb5\xa5" "[\xd3\xeb\xf6\xe5\x65\x9a\xfa\x8#p\xb\x61\x31\xb9\x9b\x9a\x92\xaf\x31\xe6\x80N\xe" "]\x88RJTedg\xf\xa2zk\xd3\xc0\xfd\xb6P\xbcw\xe1\xd6\x87\xd2\xe9\xb1\x1dw\xa5m\x4\x41" "@\xa0\xe3\x8c\x9a\xb4i\xf6\xa9Y}/\xd9q\x85\xc8\x62k\xec\x11\x83\xf1\x64\x11\xc1\x1a" "\x19\x36\xdd\xb9O\xe\xb8n\xa0\x34,H\xd9s\x8f\xd5\xd1\xdc\xfb\x9b$Q\xdb\x44\xbc\x63" "\xc5\xe5\xc\x1d_g\xf0]_hi\xfP_\x1f\xd0\x9a&\x5\xb3%\xb8@\xc8\xfe\x97\xe1\xca\xf5" "B\x86\x8f\x65\xbb\xec\xbe\xc7\x17\x1dh\x9a\xf\x8f\xad\x45|`_\xa5\xb1\x44)\x99g\x1" "d\x8e\xa1o\xfY\xcb(\xbc\xd1\xa2\xc0w\xd3\xc5\xc7&{\xef\xe1\xf4\x63\x37\xfd#K\xc8" "+\x83\x19\nkW\xcb\xf7\x41u\xae\xf0\xd3\x90\xad\x9c\x30\xa7\x9f\x32\x87\xf9\xffg\x13" "\x11?C\xa5\xb6\r\x9f!\xeb\xec.=y\xbb\xc9J\xd0[Wb\x13\x34\x9d\xe2\x38\xdf\x93Q\xfd" "H\xf6i\x15z\xa4S\xc1\x6,\x8fI\xa2m\xcf\xaa\xa0\\\xf7\x1ai\x81\xab\xb9\x39\x94\x2" "\xc3\x32x\xfd\"J\xf\xa7o>\x9\x1cP\x86\x95\xccz\xfc\r\xf6\x94\x9a\x43\x64\x1e,\x91" "\xac\xce\xc,f\xfc\xb5\x38\x17>\xd1\xc3\xb5\x17\xd0|1m\xd8\xce\x38\xa4\xee\xe4\x81" ")\xd5z\x1b\x98\xa9\x11\xf\x13\xed\x11p5{\xbe\xad\xfb\xd0\xf8\xe4\xd3\xe2\xcc\xfa\xcc :\xf7" "\xb5K\xa5\xbf\xb9\xdb\x30T\xa3\x9f\xd6\x81\x91=\xd8\xd9\x4\xfa\x44\x33\xb6%i\xbc" "\x8\x35\x63\xfd\x19\x9d\x8e)\xf3\xea\x16\xd9\n\xd8z\xf6\xe4KK\x18\x5\xd2\xdd\xc2" "T'\xd7V\xf3\x8d*\xbfy\xcd\xcf\x33\x1f\x37\x61&\xc0\xb9'F\xe8&\x7f\xa7\x8bW\x96]\xb" "#}\xe4V\xe8K\x8f\x32\x14N\xd8]\xf5\xeb\xb\x65\x9c#\xa5\x42\xd5?#\x8e\x32\xc0\x1e" "\xca]\xfd\xdb\x5\x42\xef\x45\xfe\x64-\x8d\xfc\x11\x8d\xc6\x88y\xaaH\xa1\xd4\xc5\xb7" "dX:\x99\xd6\xa1\xff\xdb\xe}\xf5i\xe7\xcb\x1d#\xf1\xf1\xe7\x93\xe5\x61\x88-\xe7\x34" "\xdaw\x97\xb1-\x5\x7fW'km\xf8Y\xd1\xe9\"\xd7\xf2j8\x1c\x95\xe5\x4\xe7\x8b\xca\xad" "Tn\xc6L\xea\x96\x89+\xef\x87\xf1\x1e\x4\xb3%#vn\xd6\xc0\xfb\x17\x9c\x88u\xb8 \x14" "\x9c\xf8'\xb5\x88\xee\xda\xcbK\xba\xef\xe3`1\x89\xd6;\xa5O\xb0\x32\xcf\xa4.R4\xcd" "\xd1\xda\r|\xc2j\xd0\x93\xe5\x9s\xc1\xd8<\x1a\x94s\xdd\xf6%\xefx^\x85\x9d\xae\xce" "\xd5\x96\x10\xb2\xc1\xea\x91\x80\xba\xa5L\x8f\r\x17\x8c\xa3\xec\x39\x63^\xd8\x9d" "\xcc\xc5\x41\xe1\xc7\xf7\x1e\x9d\xc3\x43\xcb\xfe\xa2\x8b\xa0\xa5\xe0n>x\xe3\xac\xa3" "\xd3\xb9s\x1dub\xf3$\x1b\x35l\xe9\xb1\xa4\xfa\x9fOj\x2\x97\xde\xd2uu\xbb\xd7\r\xd3" "S\xa9\x9b\xd4*\xcck\x9e\xf\xe2\x66\xfb\x1a\x45\x94\xc\x95\xf7\xbb^D\x10Y\xa4`+\xdd" ".\xbe\x32\xa3\x36@}\xb0n\x85\x3\xec:\xf9\x80\x92\x31Hf2\x0\x64\xbe\x36\x41N\xf2\xfc" "n\xfe\xfd\xad\x1f\x37\x97\x95\xde\\n\xa1\x83\xa9\xb6\xd0\xf\xaf\x63,(\xc2\x13\xea" "\xc7ZP\xb6\x1a\x10\x0\x13\xaa\x61\x43\xbc\xd6o\x81\xdb\xde\x19\x64\xcb\x16\xeb\r" "P\xca\xaf|\xf5\x39\x95L\xe7>\x1bU\xb6\x30\xd9\xb6\xf1\"\xce\x97\x82\xa1]\xb0\x6\x18" "{\xf2\x4\xc7\x92 \xf4Gt\x8b?\xe1JL^o\x93ye^\xb1\x43{\xf2\x86\xe4}\x8c\x89\x98\xca" "A\xa5\x18\xb5\xf8\xd0\x65\xcf]\xf7\x84n\xdc\xee\x85\xe2.\x96\xe\x84S\x9c\xa2\x44" "\xbe\xb3\xde\xf6G\xd4y\xa4\xd4\r\x84\xc8\xad\xbe\xa4\x31\xa4\xbbTk\xc0\xfe\xb\xfb" "S\xcata[\xe0|,\x87\xadg\x16\xc\xa1\x9a\xb4\xa0l\xe\x3\xba\xc9\xbb\xf0\x62\x84\x9a" "b\xe0\x39\x82\xb0\x1c\xe7)\xec\x85H}/\",\xdf\x85\x96\x8f\xcbO\x1f\x87\xf6\xb1&?\xa9" "\xa0O\"\xa0\x65\x0\xfa\x85R\xda\x33.\xf7\x99\x18\x10\xa5\xb2\x9a\xe7\x8d\x1cKS`{" "\xcT\x9\xe2\xcc\xad\xa7\x31\x37*\xd7\xf3n\xf0\x93l\xdb',\x8c\xc8\xf6\xe2\x99\x19" "\x93__\xffW\xd9.x\xfa\x8e\xb2\xd0MCp\xf9\xed\x43\xc0\xcf\xee\xe1\xb8\x86\x45\xa6" "\xf5j\xc4\xf8\xfa\xdd\xb3@\xe3\xa0;>P\xb9\x90WN\xebU\x8\xe7\x88L<'\xb4\x5\x8e&>l" "\x98\x9e\xc6\xa3H\x94\x94\x87\xbeOJ\x88\xe8XY\x0\xef@\x94\xc0\xdbm'L\xc0U\xaa\x94" "dx\xb7\x89s\xe0\x64\x8cu\xfa\xb\x46t\x9\x46\x14\xcf\xd8\x5\xaf\xbc\xfb\xb3\xcc\x18" "\x6Q\xad\x15\xadI\x6;O\x1doP\xb1S\xfdHa\xb2\xc7\x42\xf5\xce\xc4\xee{\x17T\xcd\xdf" "\x5\xd3\xfb\x30T\xdf\xf4o \xcb\xb5\xaf,]\x1e\x10\xee\x90}\xf6x\x7f\x64\x1c\xb7{\xc8" "\xe8.\xb3\xfe\x66]\xdc\xc4\x8e\xc8+\xd0\x1b\xdeZ\xbd \x1e\xa9\x33\x63\xaa-\xf2\x44" "M\x1f\x18\xae;\xe6T\x12\xa3\xaf\x64\xa2\x1eg\xb8\xd1\x46\xdf\xb1\x61|\xf9\xca\xc8" "?\xefyaW\x12?\xeb\xe6\xd7\x1c\xcf\xe0\x96V\xb4\xc8z\xbb\xe2\x31\x15\x1x\x18\xfa\x6" "_*kE\x99\xf1L\xef\"\x90\xe7\x1b\x9b\xe5\x1c\xb9\xeb\xd0\xc2\xf0^\xfcH\x81\xac\x13" ").jJ\xf7n\xd1L\xb4\xeao\xdc\xf0s?L%\x9e\xf5-r\xbc\x11\xc9\xa3\xe4\xc2\x90\xdf'\x10" "\x98?j\xff\xac\xaf\x0W\xefV\xa5I\x8\x1b/t\xca\x7\xdf\x9a\x4\xd8\x85[\x1c\xaa\xeb" "\x15\x95\xb1\x9Lc\xc9-\x18H+\x1a\xb3#\xdd)#fclj\xdb\x9c\x8\xc9\xcb \xa2\x99\xed\xf1" "\xcf&\x9a\x61\xae\xc4R\xdb=\xd4\xa0W\xae\xbc\x7\x19\x14\xb2\x8c\xe4w\x1dH9\x17u|" "S\xbe\xd2\x87\xea\xda\xb5\xa8\xb3$\xae\xe9\x81\xee\xf8\x8c\x18\xc1\x8a\x98\xe8\xd9" "\x86H\xb0\x90zbP\x8b\x1e\x19\xea\xfaLg\xc9)\xde\xb2\xcc\x19\xee\xef=\xec?{\x91o\xc1" "k0m\xb5\x39\x91\x1fv\xa6\xe8xq\xdf\xa4\x91\x84/x>(u\x85\x83\xfe$u\x92\x2.V\x15\x9d" "\xd7n\xa0n\xaa\xad\xb9\x65\xbe\x83\x9d\x7f\x92\x63m\xf2\x98\x38\xcf\x32\xfd:\xfc" "TY]\xcb*m\x4\xa7\x11X\xf4n\xcc\xda\xdb\xce\xf2\xdb\x8b\xa7\xc\x94\xa8\xd0\xfe\x9f" "~\xab\xe0&*\xf4\x95\x89\x9e\xe\xef\x98i@\xa8\x41N^\xe3\x38+\xbe\xd1\x45M\xbh\x2\xb1" "\xc7\xdb\xf2h\xeb\xd1\x82\x10\x82\xc5\xd8\xc7g\xc\x31\xba\x9c\x1d\x97%!V\x98\x44" "\x1+\xab\x16\x9e\xbbu\xf5\x5\xed&S\xd7\xb2\xb9\xf5%\x8dNN2\xbe\xb9\xd5\xb7W\x92\xe0" "\x91\xce\xcd\x8a\xc1\x11\x97\x32\x83\x42\xdb\x17\xaf>\xca\xa2\xffy\xb9\xf\x93\xf6" "\xb5\xd2\xa9\xea\x18\x1b<{\x1\xbc\xe2\x8fh\xf6\xa6\xe9\"\x64NJ\x8c\x85\x39\xf6\xc0" "\xbd}\xae\x91\xd5\x9b\xc9\xa9m\x93K*[m\xfb{\xd0\xc5\x91\x8\xec\xd2!\x10\xa3\xae\x0" "\xa2K\x93\x16i80\xc0\xc7\xfa\xfe\xaeO\xe\xc0\x87\xb9x\x80\x64\xf0;\xf8\xc6;U\x8c" "\x11\xbb\x18M\x90/\xd5\x43\x18k\xa0\xbc\x1f\xdf\xd6<7&gqz[\xde\xd4\x6o\xbc\x32\x91" "2\xa2\xe1\x15\xe5\x30R=hv@\x8d\xfc\xc7\xe6|\x94\x65\x90\xf6\xc1+\xe5&xO\xed\x8ek" "U\x6\x16\x17:_h\xba&\x18\x96[\x1a>\x6\xec\x99\xff`\x88\x8f\x5\x9dN_\xeaq\x8b\x80" "\xb9\x93\xe3\xe7\xeb\xd7\x89#U\x7f\xd4\xb8\x1%\x9a\x0\x4\xf1t\xb8\xb\x14\x6o$3\xbc" "\xe0y,\xa7>\xf4\\q5\xc3\xc,U\xa3\xaf\x9c:\x1c\xda\x8cs\x95_~\xe1\xd6!\xb5\xc4u\xa0" "\xb6\xa6\x15\x9c\xb7\x96\x1d\xf7\x12\xd1\xed\x18\x35\xdf!\x89K\x9dPZW\xb3\xda\xff" "\xf6\xcc\x9\x1dk\xc7\x33\xd7G\x2`E\x1c \xd3\xc6\xa5\x38J@`7\x9\x8f\xd4\xa0\x16\xb4" "1\x4\xc5\n\x33@)\x10\x80\xc8\xef\x12\xc2/@\x8e\xc9x\x16\xc3\x80\xe2\r\x17\x9d\xea" "\xbe\x32\xbe\x8pF6au\x17\x8e\xd2\xe2n\xaa\xc4\x2\xcb\x43lT_\xa1\x34\xd0\xbf\xf0\x11" "M\x18\xad\x1dlT\x81\xc4\x34o+\x1d\x34\x15n@\xe5.\xd7\x30\xe9\xbb\x81\x9ai\xdd\xb3" "\xbc\xdf\xec\xeb\xa9!h\x9c\xdd\xea\x1f\xc1\xdd\xd0\xcd|\xdd\x62S\x11\xe7\x91\x91" "\x9\xf3\x42_z\xd4\x1f\xad]\x91\x45\xf6S\x98 \x91\xb8,\x16\xe0\xde\x8a\xb5\x0\x88" "\xf6\x91sTM\x9e\x9\x8e\xa1\xc4\x97\xac\x46p\xc5u&\xaa\x83\xedJ`hf\xcf+\xad\xc\x97" "\xd9\xbf\xb4\x30\xcf\xcb\x1f\xe3\x12\x96\xb7`\xc2T\xf4\xd5\x62\x14\xf1\xb9\xd3\x35" "\xdb\xe8\x43\xdeu\xc6\x8c\x10Y\"\xcbGc\xf1\x9a\x5\xd8\x8agr\x6\xb4\xd9M\xdd\xb0\xf4" "\x82\xe7\xe9\xcd\xc8\xf1\xfa\xc0[\xc6\xde=]\x6\xcf\x87'\x0\x8f\x43\xe3,Et\x3\x8a" "\x9e \x85~\xd0\xaa\x39\x39\x95/'\xf0\x3\x44\xad\x36w\xb3j\x9c\x91\xcd\x42\xfe\xdd" "\xea\xaa\x33]\x86\x66\xf3\xd7H\x6\xfaN\xd3\\\xc3\x9a\xce&\xa1-\x89\x18\xcc\xcc\x9" "\xdc\xa0m^\x88+%\xc0\x89\xe3T\x9a\xe9)\x83\xbb\x1c\xa2\x8hI\x7\xf\x94\x84\x91\xe0" "\xf4\x38?w\x96\x95\xc9\xa9iD\xc1\x45\x93\x82\xe5\x42\xa7\x1\xed\x9e\x43*\x85h\xf7" "\xf3\xb8\x8f\xb5\xb5\xf0\x9b\x9e\xa2\xc6\xf4>:\x80%\x9e&\x89\xf9\xbc_Z\xa6#T\xb9" "\xb7yL@!\xe6U\xe9\x8c\xb7\xb8\x93\xc3\r\x9f\xfa\x7f\xa6@\xadM\xde\xa0\x10\x65\xa4" "\xc5\x1f\xd2\x84)\x90\xc2\xb0\xd7\xcc&\x8e\xd9\x98\x9dysS\x82(N\xab\xd0\xbeQ\xf0" "\xb5_\x9f>\xce&\x83\x8e\xd6\xedNV\xd6\x64\x30\xa0\x34\xf3\x94\x87\xba\x90\xd0*\xaf" "\x92\x8e\"\xaa\xf6\xf3\xd4-O\xadP\xa5\x62\xf5s\x84M\xd2!\xc8\xb0\xec\x15\x99\x10" "\x8b\x10\x44\xde\xae<\xf5\x92\xe\xc9=\xf8\x37\xc8P!w\xee\xe7\xb9{\x11m\x94\xfb&\x93" "\x14\x14G^\x9e\xe4\x97.\x95\xbf\xa4\xb4u\xf5\xcd\x99\xb2\x13\xbb\xddj\xf8\xf0\xd9" "\xe8\x10\x81\xb3\xa6\x99\xa5\xc2,\x88\xa7\x9\x1dnQ\xcc\xef]\x14\x31\x9e\x11\xe1&" "\xa0\x7f\xf0\x11g m\xe2\x90\xe1pn_1h\xf3\xf2%j\xd7K_Z\x8a\xf9v+\x89\x8c\xfc\xb\x12" "(E5\x1f\x1e\x85+\x8c\xd9\xc5\x94\x9dly\x86\x95K\xf1\xd3\xd0\x8\xa3\xca\x90g\xdc\xae" "Z%\x12\xfb\x9av\x9c\x39\x61\x66\x4\x9f\x9d\xfc\xb4\xf4o\x1a\xce\x9c+\x85h\xcb\x37" "\x13\xff|\xd8gn\x82\x1a\xd6rH\xf8\x19\xd8\x1e\x87\x34\x90:vX\xd2\xe5)\x99\xcc\x35" "s\xb7\x8a\xcd\x97O$\xf7\x1e\x35U\xd3J\xc5\x19Z\xad\xe9\xa9]\x9e\x98\x1d\xaf\xd5\x3" "Pmws->\x17\xfd(\xa4\x9f)\x5\x98\x82\x38\xb\x66\xb7\xef\xc3V\\X\xdcl\xdfs\xad'%8\x9a" "z\xe3\x83-<2\xb9\xd1\xa7\x9b\x90M\xe3\x9a\xe\xd4\x96\xc1\xe5\xe2\xab\xbfn\x86\xdb" "l\x16\x1d\xad\xeb\xde\xdd\x5\x62\x90\x45\xb8:\x86\x88\x96\xe7\x31\x16~q\xf4\xcf\xeb" "R\\l\xc0\xda\xd7ii\xb1\xef\x9e-\xa6\xa7\x88.\xe4\x99{\x91\xc4t\xdf\xe1\xa4\xe7\xef" "\xc6\xb3\xcbMk\xf[\xfe\xe4T\xff\xc5\x41\xec\xf.+\x86\x9e\xce\xcd\xd1\x86" "z\xe3I\xae\xaf\xe6\x35\x1d\xde\x9e\xa8\x17-\xbe_\xc9=H\xd6\x7f\x10q\xa2\xe5\xd6\xd0" "\xc6/\n@\xb\n\xe5=zkf\xc8\x30\xf3XuL\x1bT\xf0\"\xf6\xff\x41\xdb\x95\x86X\xc9O\x16" "|\xf4\x9\x66\xb1g\xdb\"\x89O\x93\xd5^\xc7\xfeU\xc1?\x1e\xda\\jv\x19\xa3\xbb\xa3\xd4" "\xe6\xed\xc8\x96\x1e\x9d\xd7\xb9\xc\xa7\xf8\x16I8)\xa9\xef[%=\x1a\x9b]t\x1a\x9f\xd0" "\xc1\xc7\x8e\xf0)\xd3H}\xf7\x8c)\xfd\xc5I$\xbd\x8c\xe3\xac\xb8'?b\x91'\xda\xdaXE" "\xfc \x1bM\xa5'+\xb1\x39\x83L\x94\x88\xb2\x61\xaa\xf1\x8d\x9b\xebu\x96\x6G\x1X~\x9d" "4\xba\xb6\xd9\xel\xa8\x9b\xe8M\x1\x8e\xf0\x84\xf5\xd4\xc1\xfd\xe6K\xe6\xce\xe0\xdb" ";\xbbY\xf6Z\x87\x1aG\xb3\xaaj\xb8\xa3\x4p\xd1\xb9\x32\xe2\x66\x38Pl\x90\xac\x37\x98" "/uf\xd0K\x90\xc9\xcc \x98\xd1`]\xcc\xacv\xa7U#\x18O\x81\x8aZY=\xb4\x89t\xe2\x8cI" "\x17\xf2V\x8e'\xa8HK\x3.hf\x7\x85zk\xdf.\x1e\xfc\x3k\xed\x8=\xe8\xfb\xfe\xe3\x5\x94" "D\x96\xae\xfd\x9\r\xf1\xbf\xc9\xbc\xc7\x96\x89ln\xfb\xa6\x85\x15\x9|n \xf6+\xd1\x44" "\xd5\x9a\xa2:&]\xdb\xe3\x95\xb0\x64\x18\x43\xbcg\nh1\xad\x33\xebvZ\xe0\x9c\x9c\xff" "{\xbb\xb7\x9c\xeb\x91+\xd9\xb7\x42@D\xc0\xda\xe8\x36\x9f.NSPu\xc8nC\xf8\xe0\xa0Q" "Hb\xfd\x35\x95\x38L5\xe8\xf0\x44\xea\xff\xceT\xae\x16.\xa6\xa4Y\x83j\x92NK\xc9\xd7" ",N$\xbf\xe8\x43\xcc!,i}\x91\xfa\x63\xd6 ,\xfd)\x8e\xb9PyC\x87)\xe7^\x81\x93+Qm\xf9" "\r\xdb\x9c\x1a\xfd{eQm#\xf6\xd7\xfd\xef$?9w\xb6To7du\xcc\xd0\xd5\xf8T\xd8=e\xb8\xe3" "\x5\nm\x8\x7f\xce\x65\x42i\xb3L\xba\x96\x95v\x84\x16\xf8m\x93\xe4\x39Ni+\x8e\xda" "\xb1<\xf5s\x94\x1e\x95`\x3\xd1\xa1\xa0yV6'\x7`\xa3\xe3!?\x1d\x9b\xb7\xf0\x9b\xab" "\x81<\x97\xdb\x8d\xab\x81\xc4\xd1h|_\n\xbc\xca\x8b\xa6_]D\xd7\x17\xe9\x8b\x7f\x88" "\xc5\x61\x90L\x16UC\xb7\xfeL\x96\x9f\x17\xcf\xe9\xcd],\xd3L1L\xb6\xde\xb1\x93\x1f" "\xd5w\x83\xb5\xd2\x9\xf8\x92\xae\xa0\x66\xe\x19\\sfN\xe4\x81\x88\x38\xe6N3\xa6\xcb" "7k1a\xab\x9d\x44l\xf0\xd5L\xa7\xfeONx\xe2\xfa\xc0\xdd\x13^V\xd4%\xd7L0~\xbc\xdd\xbb" "&[\xcc\xe5\xfa\xd5\xa2\xd4\xca\x97\xf5\xca,\xe9\xe5Y\xce\xff\xb4\xf7\xcdU\x12[\xe4" "8\xe8\xb5\x15\xab\x2r5\x94\xfa\x33GI\x1\x36\xcbO\xdd[\xc2\xbd\xedpy\xb6\xbd\xcf|" "\xf5K\x9d\xba\xf2\xcf*;\x99\x9f\xcb\x81YV\xe5y\xcdq\x3\xab&1\x9d\x30\x82\xb3\xed" "i\x9e\x80H\xf0\xbb\xbe\xe1'\xf8\xc7\x4\xf2\x14\xa0\xa2\xb1\xb1Z\x10\x41X)\x9i(\x1b" "\x89\x1\x82\x4n4\xf6\x44Z\x92\x84\xbe\x62\xfeL\xf4\x39\xc8\xb9\x63\x96\xe6\xa4\x8b" "\xe6\x8f\x2\xbf\xe5X}\x10w\xd7\x94n\x91\x63\xe6\x86\x10\xa1\xe6\xa9\x1c\x37\x16`" "5\x98\x45\xf1\x64\x92\xf4\x1;\xc4X\x9f\xd5v\xa3%\x0\xb0\x1\x99*\x99\xbe\xd7\x98Y" "k\x9f\xea\xc5\xc6\xd0O\x1b#5'\xbd\x39\xc5\x61\xeby\xb5\x45T[\xaf\x16V\xde\x1uF\xb2" "\xc6\xc5\x9b\xf5\x1\xb7P\xbc\x87\xb\x80\xd7uj\xdan\xd0\x98/O'\xa1\xda\xfa+\xb7?c" "\x94@'\x9fZ^i\xbd\x10\xf3t\x88U\xc6\xe3\x1bh\x96\xb3\x14y\xd7\xfe\x92\"\x5\xb5\xc" "C\xa5\x82\xe\x10$\xab\xfa\xc7\x9b\xf2 \x96\x86\xc\x1b\xee\x30o\x9b\xcf\xe5\x62\xc7" "\xad{}\xc8!\x8dur\xf6\xe7\xeb\xf\x43\x16{/\x5U\xcbJ\xb6\xc7\x9b\x62\xf\xc9\xf0\x14" "\xb7\x10y\xf8\xf0j\xde\x36U\xe8\xec\xa1\xf6|\xaf'\x86(S\xfb\xb7\xd0\xdc\xf9*\xae" ":\xb5\xa6\xe5\xf\xde\x64\x8:\xa7\r\x34\x8bx\x82'\xf6\x9e\x1c;\xd8\xb\xfc\xa9uMO\x8a" "\xf\x1a\xf7\xe5q\x9e\x62\xfc\x36\xb\x30\x8d\xf9\xbc\xc\x91\x46\xc\x8am\xb7/{\xcb" "\x89\x44\x14]\xcf\xc4,<\x1\x80\x19K\x3\x9b\xa5\xb7\x98\x92\xc5\x33\xa2\x9fi\xb4\x81" "e\x8d\xbf\x64hG\x82\xe4\xd6\xd8\xf3\x37n\xb2\xf4\xc5\xb0\x14\xd3\x66\xcf\x1c\xb\xff" "$\xbe\r\xc3\x6]W\x9c\x63\x19\x89\xc7\x94\xb5\x64j\xa2m\x9egV\x95\xa0\x98\xe0\xdf" "u8M\x8\x6\xe7\x8b\xe8rl-\xa7\x15Q\xb7\x1f\x92kC\x93\xa0\x44\xa4\xf6\xe4\x6\x95\xc6" "\x90\xfa\x14\x7f\x7f\x2\x42\xa1\x8f\x1a\xba_\x8f\x90_\xae\xe6\xeb`\xf3\xe7\x94;\xdf" "\x8e\xad\x8c\xcb\xab\x99\xaa\xb3#\x8e\x89O\x96.#6\x86\xcb\xbb\x93n\x86i\xea\xa2!" "=\x1c.7Z\x5\x37\x45K\x8b\x8e\xf5\xb0\x1f@[\x17\x90\x19\x9f\xb\xb9@\xe4R\x9f\x65\xea" "\xc\x1foO?7\xaf\xbdoA\x8e\x30\x66\x14\xa3\xd0=\xd4\xd8w\x12\x7f\"\n\x33\x8f\x1as" "?\x94U\x8a\xf\xbd.\xda\x91\xa9\xe2\x43\xba\x32~\xcd\xcbV97\xff\x30VZ\x9c\x32\xfd" "\x88O\xdd}&N\x94\x92TG\x83\xae\xccm\x9f/\xd0W1\xb9\xe3\xc%#\xfdX({d\xd0{].\xd6\x32" "\x9e\xb6^\xd0\xecVoA\xd7\xf4\x94\xa0\xf1\xee\x7f\x98!\xe1\x9b\xc0\xae\xa3\xfb\x1a" "\x87\x8a\x16`\x8a\xf7y\xe4\xc8\xc4\x9f'F\x94\x87$w\xdey\xd8\xc1\x39\xb5\xd1\xd0\x32" "+\x8\xc6\xf8\xce\x1b\x92\x35p`(\xf8\xea\xf3Rn\x80\xa2\xb0!\xc7\xe8\x8c\xb7\xf8\x11" "J\xa0<\xf8\xb7\xa0\xa2\xa6\xf5u\xf6\xb3\x7fh\xc3\xdf\x43-!z\xa0\x86\xf7\xb9|O\xf9" "\xdc\xbf\x98y\x6]\xb\xfe\x8a\x8b\xa2:\xe6!\xcaw\xc8Z\x1d\xb4\x0\xb0\x19Q\x85~\x8e" "A\xec\x65\x4\xd4\x19s\xf4\x87\xd4\xc1\x65\xf1\xca\xd3\xe9\x36M-:U\x9e\x8\xa9\xe7" "\xa8\xdd\x9a\x1f\x85\xf9\xa5{\xf0)B\x18\x97\x9\\\xf3\x61\xd1\xd8\xf4\x8]a\x85U\xe0" "-C\x17\xf3%z\x88\x2\xb1\xcc\x17\xd4\xac\xbc\xf3\x8c\xc4\xa1s\xa9\xad\x86O\xdc\xb3" "J \xd4P\xf0!d\xac\x84\xa6\xc8T\xa1;\x9f\x13\xf3\xf\xe7l6J\xdd\x8fX\x1f\x86i\xc0Y" "~\xf\x94\x11\xe9\xc8\xf0\xb8\xe2\xf1\xe5 \xe0\xf0\xf5\xc(\xfc\x88:U\r]\xa4\x61\xf8" "\xe5;K\xa4\x92\xa7\xc8T}\x14\x65\x97\x88\xd3\x46\xee\xe2\xf8=\xf0\xa6\xa2J\xaf\xaa" "\x2L&[\x1\x8eXJL\xa5\xb0\xb0^\x9e\x8\x41\x13]\x4n(A\xe4M\xc9\x87=\x5\x1c\x66\xfb" "\xba)g[\x80\xce\x1a\x85\xc0\xd5T\xe6\x1\x8e}\x86sc\xe4\xe1o\xf2\xd2\x83t\xcf\xad" "V(oU\xef\xf0V^\x88\xdc\x66K\xfe\x9c\xdb\xfaV\xc3\xf1\xbf<\x9cYd\xc2\x63\xcc\x42@" "\x83\xc2\xba\x9b\x15kB\xd5w'\xd3\x8b\x9e\xe2S\xf3\x94y\x9e\xb0\xb6\x13\x1c\x9b\x33" "\xb6M\x3\x33^G\xf8@\xac\x8e\x1\r\xf1.\xe5Rxh\xa7\xc2\xef\xde\\\x0\x45\x10?g\x92\x83" "6\x8a\x8e\x8}e4<\x1f\xf8\x13\xde\xee\x96\xca\xf6\x9f\xba\xeaW\xb9\x8e\xaf\x0\xb\xd6|X\xce]\x1e\xa6\x3\x1\x99\xa4>\x86" "\xc4\x1`\xd2Oj0\xd4Z&\xff\xb3\x9\x6\xa9\xa8\xe/\xa2?\xe\xceL\xb6>;\x1a\xa9\x94\xcf" "i\x89\x33[\xafl\xbd\xe3\x81\xbe\xbdY\xb2\xebjVE\xa2\xe5~\x88\x8b\xe\xa2_\x1c\x8e" "\x92\x44\xbd\x2S\x0\xcaj_\x6\x1a\x92\xc0\xad\xc7\xd6\x0\xb4\xe9\xdd\xcf\x97~\x83" "I!m~\xd3\xcf\x88)\x1fZ\xd1qxf\xb$\xbd\x15RK\x8c\x7\x32M9H\xc8mu\xeas\x1`Q\xba\xb5" "\x6\x95Sw,\x14\xa1\xc9\xb2<\xd4\x34L\xdf\xfb\x8d\xce\x1e\xaax\xa9\x14\x64,\xe9/\x5" "\x99\xd8Gf\xeb\x92\xf\x1eY\xe6I17C)\x82\x61\xc\x84\xd1&l\xc1k\xc\x89\x99/\xde\x8a" "\xf2\xf8pLB\xd6\x8e\x19\x13?\xa9\xc5)\x9\xe9\x91j7\xff\xee\x33p\x98oC\xc9\xbb)\xdb" "\xf5\x9d\xab \x7\x96\xf7\x61\xb2\xb9g\x99\xe4\x98\xbe\x1b\x86\x8fm\xd4\xdd.\xf3\xa2" "\x94\xfe\xc7\x7\xdaU\xceY\xdc\xae]\xa7\x84\xad\xffU\xfd\xde~#\xd1\xfd\xc4\x1fsS\x2" "F~t2\xc0\x32\x45\x89\xbd\xca\x1d\x9eT!(F w\xeaTZ\x9\xec-,\xc5T\xd0\rw\x8f\xa2\x9c" "\xc2~\x8bv\xbeKtvJ\x1d\xb7=\x82\x9f\x39\xf0S\xe\xe0\x32u;y\x8d=lW\xe5\xe8\x90\xe4" "y*L}CO\x84\xfa)\xd3\x9a\"\xch\x91\x36k\xf6\x14\x12\x7f@p\xd3@!+_\x15\xff\xa1\x14" "\x9c\x1?\xb8\xce\x17\xc2ih\xcc+3J$\xc8\xff$\xc0\x39\xb3\x61\x98\x1b\x15\x9bL\xc8" "\xeaJ:zt\x9b\xf1\x9a\xe3\x30=7?UlM\xf6\xbam\xaeP\xad\xee(\xa7\xc5\xfa\x16J\xb9\x39" "\"\xf8u\x89\xc4\x18\x1\x8d\xe9T\xbc'\x1a\x43j\xe7\xa3\xd8\xf8\x80 P\x18\xf8L\xa0" "\xe3G\x1d:\xd7\xc8\x1b\x19\x61\x15\x42\xe3\x44}\xc\x1\xa3\xf0\xb7\xfa\x89\x8e*5\n" "\xa8:t.\xaam\xe2\x33\xcav\xd9\x8e]\xea*E\x9am\xb1\xea\xd8\xd2\xc\x93\x98\x46\x8b" "P\xfd\xa3]%\xeb|\x10\xae\xfc\xce):\xfb\x8b\xe2\xda?\xeb\xc5\xf6\xfa\x8e\x0\xb3\x94" "\xc4\xa7\x8di\xfe\x43\xbOw\xf6\xe1-\xab!\xa1\x91#\x9d\xe0\xd2\x66\x35\x43Y\x9ek\xdb" "3\x94\xd5\x8b\xd0`\x1d\x88yOv\xa1>\x9c\xeaW\xcf\xfc\xce\x19\xc4\x14\x42\x99\xd7Q" "*{|RC \x93Z'I\xf3\xe9\x9a\xa5\xed+\xab\xf6\xb1\xcf\xd9\x83\x36\x7f\x62\x32\xd6\xe7" "\xe8i\xef\xf1+}\x83\xfb*\x6? hF\xd0^\xf\xbf\xf9\xc0\x89\x46\xb7\x43\xff\x90\xdbR" "\x14\x5\x63\xdd\x92\x64\x33\xdc\xac\xc3\xf8\x9a\xa9\xab\x1f\x8c\x2\xd0u\xd1\\\x8e" "\xe1\xc7\xc9\x37\xed\x82\x37\x85q\x7fP\xfd\xf7%\x19\xcb\x90\x87\xc5\x86\xef\xff\x8" "\xeb\xb1\x61K\x17\x38\xd2\x93\x15\x96Xm\xa4\xc5\xc\xb7\x8dm\n\xc8\x1f~\x9\xd4\xb" "Z\xdf_5\xc3\xe1\xdav\x15\xb8\xe4\xe8\xe5\xd7\x1al\x86\\\xc\x36\xc8\x35\xc6\x1b\x4" "\x94\x8e\x96\x42`\xffxb3{\xb4\xa2u\x7\x33\r\x1e\xe9\xc6\x45\xc5_Hr\x97\x84/\xa2\x9e" "\x8bnRj\xd0\xbd\x1\xc8G! \xc2\x9eL\xae\x19\xab\x5\x43Qi3\xbf\x15\x9\x15\xe2@\xfb" "\xb9r\x83\xdd\x1cX\xbcQ\xe2_\xde\xde`F\xf5\x37\xd5R\xec\xf1z\xd2\x8b\xf4\x84\n`\xfc" ":\xee\x18\xc5\x8d\xee\xfb,\x1\xfc\xf6'\xa3{b\x96\x33G\xc5Ua\xa9\x9d\x9\x1a\"\x1e" "P\x81k:z\xf\xba\xbd\xdc\xe0\x16\xa2v%v\xff\x8a(*X\"\x81\xae\x6iX\x1a\x8d\x9d\xd3" "K%C\x8;\x82\xa8l\xb1\xb2\xc7\xc6\xb7(\xd6:\xdc\x82\xe7,\xab\x87\x87q\xc1\xd3\x88" "GW\xba\xf6k\x80\x7\x30\xa6\xc3\x1c;\x10\x91\xc1\x19W\x99s\xc5\xbe\x7\xb4O\xc1\xf" "C*\xc7\xb3\xda\x94\xff\xd1!\xe0\xf2\xd6\x94\xcd\xdb\xd1\x80g)\x10;\xe8\xca\xbc\xce" "6\x10\xff\xcf\x9a\x11w=ci\xa8\x9\x94\x34\x95#\"9\xa4\x1b\x8a\xa6+\x2\xf0\xea\xd4" "4\x86\xb0\x31P\x4\x91\xf3\xe\"\xfe\x2,o\xa0^\xf2\xc9\xb1.\x14\xd7\x8w\xf\xbe\x13" "\x9b\x8d\x83:\x91\xaaHlQI\xc6\xfe\xb1\x64G\x9an<\xf9[\x8e\xa0\xdd\xcc\x17\x5\x37" "\xf4\xa6\xcd\xaaky\x94\xff\x8b\x2\xdc\x92\x30\xea\xe1\x1a\x87?\xb8<\xb5\x15Y&\xa2" "5\xff\x81[.e\xcc\xa3\xac\x1d\xc4*\xcd\xd2\xda~]\x9e\xde\x43\x93\xae\x1\xe2\xca~p" "\xa2&Nrs\xb1\x9f\x90\xc1\x35\x65o\xee\xf5\x84\x1e{\xb2\xb9m\x8a\xc4N\xc9\xed\\<\x11" "l\xe0\x0\x8c\xc1\xe4\x99l\x8d\xe2\xbc\xa3w?r\x1a\x5\x9e\xc9\xfbw\xc6S\xae\xb6\x64" "\xfd\x9f\x4m\xc0\xfa!!\x9\xc8K;\x96\xa7\xf4\xcfY,\x1b\x42<\x1c\x65\xc1\xc\xa1" "\x5o\xcak\x2K3;_\xb8\xd5+io\xcf\x87\xa2\x31O\xe\x8rT\x5\xcdWu\xc4L\xc3\x8d\xe9\x39" "a@\xe\x81\xfdX\xb6%\xf7H\x81\xe8\xea\xdc\x33\x31\xf9\x16\x9c\x11\xdc+V\x1\xff\xf" "\x91\n\xf5@\xcaP\xfb\xc9\x44\xa0\x9dW;\xb0w\x8P0\xd1\x1d\xf2\xac\xd5\xc1\xae&\xd4" "53\xa0\xe1\xa0\xcb%O\xaf\xbc\xa0\x14\x1dt\x1\xa8-\x6\x14\x96\xd5\x32\x37\x35\x45" "\xe9\x11L4\x13\x3\x43\xa3\xce~\xa3\xfc;\xe0\x2s\xfe.\xeb\xe0,5\x82\xa9\x7\xfa\xee" "b7@\xc6\x0\x66\xf1 \xa1\x95\x1\xb5\n\xbc\xe1$\x8b\xf2\xdeY\xcc)k\xd8\xd6\x9a\xe3" "R\x8a\xfe\xbb\xe\xf6\xacpGj\xf6i\x8a\xe\xbd\xa8\x81\xa8|Z(n}\xb1\xa4\xe3\xc4\x82" ".Tb|Q\x83z\xab\x65\x97\xec\xcco(G|fs\xe5\xcf\x36=\xa2\x80\x1dS\x3\x8f\x1\xfb\x10" "\xb7\xe5\xb8\x83\xe4\xf7X\x1fJ\xceG0\x8a\x38\xa6\xaa%:\x1d\xae\xe5i\xe8\x3\x0\x87" "\x17w\xb8L\xf3:\xba\xe7\xc4\x8d\x91\x92\xb3R\x93\xc0\x6\xe4\xc1\xc8]}\xe3~\xf8\x7" "A\x98\xf6\x9b\xa4\xc4i\xafH\xe5\xdd^S\xef\xaeG\xc0>\x98U\xa1\xc2\x17T;\x10\xee^G" "Q\xfc\x9d\xb0\xb#k\x15q\xfc\x0\xa0\xf7\x12\xcb!!b'\xc2\x91hB3\x98\xe4\x83\x8fu\x1" "i\x1c\x4%\xa7[\xaf\xa3\xd9\x1d\x32\xd0\xf6\xb7\xbb\x98Q\xbd\xd3=\x81waa\xf6\xeb\xc3" "b\xf2?\x7\x8c\x37M\x84\x16\x3\xee\xe9^\xfd\r W\x7\xe\xae,B\xdds\xfdx\xe9\xbei}+\x9" "\xbb\xa8\x37\xd0#\xb8\xbb\x94\xf6\xbf\x8b\x89\xee\xc8\x91K\x82\">\xf7M\xe9I\xd5\xe3" "\xe0RY\xa7\x90\xff#\xeetu\xce&\x96\x18\xc7'\x1b\xb6\x66X\x97\xa4\x6\x41\xd1\xe0\xdb" "\x93\xbdj-\x87\xec\xddL\xe2\xfa\x17\xe5\xf+\xff{\x14\x62\x11\x81\xfb+\x86;\xd5\xdb" ":\x9b\x39:\xac\x1a~\xd6\x95\x99\xb1\xd6\x36\x1c\xd4G\x11\xe8\xa2\xba\xf1\xev\x9c" "\xc1\xd8\x7f~\xd3\xbcT\xd3\x42/;\xc9\xae\x9aV\x9a\x91\xbcI\x99\x82\xb2\xce\xd2\xd6" "\x84\xe7\xccy\x17\x63\xe4\xc8t\xfbo#n\xc_!LED\xb1%\xbaUC0MO\xf7\xb3\xfa/\xbc\x30" "\x2\xc4\xe8\x30\xfc\xd9\xabV\xe4\xf3\xc7\xb8\x61r\xc6\xff.{\x9e\xa1\x8c\x63\xb9\x82" "\xba\x8c\x11o\xe3\x91\x15\x9W\x10\x33\xf5\x98(\xd9\x38&\x13]\x88\xd8\xabst\xe4\x85" "\xe9\x82q,\xe5\xdc\x88\x63\x35\n}\x9d\xf4g\xd2\x6\xbb(\xd5\xfa\xcf\xf2\x8d\x7\xa8" "\xa7`\xf1|\xfb\x62LH\x90\xbb\xf7q;\xc4\x8aY\xb\xf0\x44\x1an\xe5(\xfb\x5\x82|\xc2" "\x9c\x0g\xf5\x46\xf1\xe2\xfe!\xe1\xd9\x80\x8f\x2\x83\x89z\xae\xf7\xba\xeb\xae\x81" "\xce\xa9\xf5\xc7X\xf0\x0\x10\x86\rK;m\x10\xc4\x44?\x98-\xd4Wc4\x97\xda\xcb\xd5\xb2" "\xa3@\xaf%`\x97\xcd\x2\x44\xfb\x36\xdd\x8c\xdf\xa3\xac\x86\x86\x44K\x80\xdfv\x86" "F\x9b\xf6\xb7\xbd\xacv\x16\xaa^\xa7\x7\x36\xe0\xb3\xc2\x9d\xbev&\xe9\xc1x\xfa\x9d" "\xef\xa2S\xd2]\x95/\x8\x9c\x6-#l#N\\WN\xf1\x9b *\x8a\xb4\xa5@\x8cY\xadg|H\xd6\xc8" "\xb4\x11\xd7 \xd4\x65\xf1O\xa6\xaf%\xbb,\xc2\x85\x9\x9f^\x4\xbb\xcf\xce\xff\x1\xb4" "\x7f\xa3>K8\x1c\x31?\x80p\xa0N-W\xe2\xc1\xe\x93\xc3\xb2\n\xed{l\x0\xb8\x65#\x94\x94" "2V\x92k\xe5 \x87\x1a\x1b\xc8\xe0(1\xa0\xf\xa1\x90gx\xabj\r\xf7{\xes\x18\n(\x98\\" "C1a\x19\xd1\xe4\xbd\x65\x8e\x9em\x14\x85~\xb1\x83=\xd2\x97;>}DO\"\xec\x89\x32\x80" "\x80T[\xb7\xe\xaf\xddJ\xe2\x9cO\x14\xc\x15\xde\x91\xc\"\xc\x98\x8d>y\xe9\x13\x1d" "\x9\xe1\x14.=h\x96\x30\x88\xd2\xb9\xca\x5\xd6\xdc*\x19\"\xd8\x17\x35\x16\xd8\x80" "Ar\x8d\xba_\xa4\xd3\x14\xad\xf8\xfc\x1a\x80\xe1\xb8\x80\x44=\xac\x8b\xac\xd5\x65" "\xcf\xaa-\xc1\xcaNA\x80\x44\x65;q\x4\x34\x1\xf0~\xd2\x10\x93\xc7\xca!6\xc7Q\xf2\x63" "\xfcyf\x18\xfd\x8e\x65\xc9O\xe0{;OM\x89\xc6\x4w\x2-=r\xfd\xd8\x8b\x9e+\xa9\xb5\xca" "\xdbJ\xe5\xb5\x84\xc3\x11K\xbe\xb2\xd0\x2\x45\x33\xe5\xe5\xb3}\x81\xd7\xc0\x5\xe8" "R\x18\xcf\xe4\x95\x16\x30\xf3\xd0\xa0\x81\x39K6\x92k\x93\x94\xba[y7E2NQN/i\xe8y\x94" "7\xfb\x6\x94\x8d\xa3\xft\xd9\x8b\x89\xad\x93\x61\xf1\x1d\x80\xa0<).\xb7^3\x93\xa7" "\xb9\x19X\xfb\xf\xf1\xfc\x32z\x8aX\xe2\xe\x3\xa8\xcd\x30\xa0i\x6\x83\xce\xa5\xce" "\xf1h\xca\xef\x1bu\x1d\xd2\xe4\x4\x5\xa5\x18\xa0kWl\xc3\xe2\xc0\xf8\x16N\xc3\x1a" "b~\xa7\xf1\xed\xe0*\xb5\xa4\xd5\xf9\x7\x8d\xeL\x98p\xae\x9a\x90\xe6R\xeIm\xa6\xe" "\x8bG\xf8\xf3s-\xdf\xe8\xb\x8f\xe3|\xff\xdb\x98>@j\x99t\xf9\xd6\x66]\xf5\x16\x0\xb1" "&T\xcc\xec\xe1\xdb\xa5N\xd0\x8a\xbd\xfb\xec-\x82#\xe0u`s\x9d\ri\xba(\x9c\xef\xc5" "6\x89zB\x1eh\x7\x12\x1c\xef\x82\x88\xb0\x8c\xb6\xe2T\n\xa9\xab\x42\xf1\xbf\xee\xd8" "\x81\x80\x7\xd0\xde\xf5\x89\xc6\x11\x80\x1a\xf7\x87\xc\xa5\x85\x9a\xbbP^\x6\xd4Y" "Y|\xd2\xbbN\xfc\xa6\x85\x61\x9b\xab\xf3*D\xbel\x9c\xea\x1a\x1eY\x5\xdf\x12)N9\x8c" "kX7\x98\x9f\xac\xb5\xb4\x34!\x87\xab\x66\x19\xc\x8a \xff\x12\xc7V\xbf\xa2\xbf@`8" "\x8$\x85\x12\xb5\xe3#\xbb\x96\xfd\"\x9d\xc5\xa5\xa2G\x8c\x46\xf1\xd5\xab\xf8\xad" "v\xb3\xea\xb4\x9cjc\xe\x8dJ(\xeb\x62\xe3\xa0\xbe)#b+\xbd\xc3\xde\xdd;\xbe\x6\x42" "-\x1c\x7]\x84\xed\xa2\xd6\xef\xa4\x1b\xae\x1c\xcf\x96\x44\xc6\x8f\x85#L\x9a\xe0\x6" "\x8e.\xe5\xc7\xe7\xbez\x86\xa3\xc4\xcdk\xd2\xdf\xae\x8eR\xad\x43R_\x16Y\x17\x86\xb4" "\xa9\xa5\xc9\xdf\xc8\x9d\x86\xde\xb5\xd3\xe1\xbf\xf3\x12*\x9a\x9d\x95\x34\xc7\xbf" "\xfe\x16\xad\xe9\x92\x9bVX\xff\xbe\x10\xeb\xf6oz=gZ\xf5Z\xab\x18n\xbe\x89\x11$#B" "\xfb\xba\x8f'\x84\xc7\x80\xbc\xdb\xb2\xfa\xdb\xe8\x1b\x1b\\\xd9/\xf4'\xe9\x66\xef" "\x13\xfc\x8a\xd1\x66\xdb\xef\x1f\x12\x8d?7\x7\x81#\x8f\x98\xcc\xa3\x42N\xf9\x7\xee" "\xaa\x42\xa2\x9a\xf5\x35\xbdPB\x89\"\x95z\xe1\x83M\xb4\xb0\xb\xe5\xf7\xb8\x43\x8b" "\x8d\xe9\xc6\\\xb9\xfb\r\x89?y\xf3\x9b\x16\xfb\xe7\xc6w\xb\xf6Li\x88l\x2\x2\xb9\xcd" "\xa7\x12\x8c[C\x7f\x1b\x80L\x9f\xcc\xe7\xc0\xc8\xae\xb6\xc0\x1d\xd7\x93\xe8\x37=" "\x2\x1e~\xb8\x10\xf8\xe9\xfX\xff\x1\x5\xb4$\xe2G\xe1|\xb3\xa9\x7f\x2\x66\x0\x19\x9d" "w\xfd\xec\x94\x8f\x1\\\xe8\xe3\xf7\x93Y3\x14\x63\xf1\xc9\xcaV\xf5\xc7\x12 GP\xf6" "\x85\xb0\xdc\xe\x41'\xd7R\xb3= =1\x90\xee\x92\xa3}\xab\xdb\x44L\xe9" "8\xbd\xdex?b\x3\xf0\x32\xd3\xc1\x8e\x84\xde\xfa^$\x14G (\xcdZ\xd2\xa4rH\xba\xaa*" "m\xdb\x81#\xdf\xea\x8c)4\xd5\xf7\x46\xf7,+\x19\xf7\xd2\xc5\xd1\xc9\x6\xd0\xf3\xa8" "_*\xdf\xf8\x16\xd6V\x19\x44\xb8\xa8?ANC\xd2\xf9\xac\xb3\x0\xadu\xa1V\xa6\x87\x42" "\x8c\x45\x8bS\xa2$\xc\x9n\xa1$\xfd\xa5\x1dX\xbd\xa5\x41\x5\x1c\x9d\xd4\xab\xb4;1" "\xa7\xa2\xbd\x92J@\x95\xca\xcfi\x7f\x61\x12\xce\x82\xe6|\xf0\x96\xa3\x7f:\x9f\xfa" "\xd9\x62\x90\x10_\xf2\xdd\xd0\x12\x0R\x94\xf6\xfd\xf5\x9d\x9b\xcf\xef\x84\x85\xaf" "\xe9'\x9dV\xe0\xb\x31\xef\x12*\xc1\x15\xb0\xe9\x98s\x8d\x8e\x39\x98\x85[\xca\xa5" "\xb\x92\x1b\x65Z(\xa0\xe1[vr7?\x99LT\xd4\xec\xd1\xf9\x46\xa8\xd7\xb6v!\x87\xad\x11" "\x6\x37\xd4\x8c\x63^432\x98\x82\xc8\x9cu\xb3\xd9\xe?5yD\xb3\xb\x3\xee\x84\x88\xef" "-f\xfe\xfe\xeb`\xd2\xa4\x0\x98rT\xa6\x83\xc1?\x81\xcdY\xec\xf0\x31\xa4\\n^\xb8\xef" "Q\xa2\x46X\x9fg\xb5\xfc\xef )p\xd5\x84\x45\x1aR\xf6\x9\xb\xfa\x42\xce\xbf\xcc\xc0" "\xbb\xb0(\r\"\xa2\xe5\x38\xfc\x8c\xf\x43G\xd3\x9a\x4\xfa\xb9\xe0:\xed\x94\x91\x11" "\x1f\xa3\x99\x34\x15-Z\xad\xe2r\x91s\x11\x39x\xbfG\x8f\r\xb9|E?\xf5L\xaas\xf7\x9b" "B3,HH.\xf4\x93\xca\x61\xd0\xbf\xb5\x1c>\xfc\x9c\xd5r\xd6oX\x1e\xefl\xc4\xca\x1>b" "\xce\xa2\x8bn\xda\xa4\x1f\x10\xbc~\x95\x38X\x10\xf5\xe8\xe5\xb0\xb2+\x19t\x6M\x85" "\x94\x1e%|\x87MP\xb3\xc4\x86<\xb{\xbb\x91\x65&\xa7\xcb\x9a\x82\xe7\x10Q(P8O+\xfG" "\x1e\xfc\x83\xa4(\xbb\x2+I\xe5\x12\xce\xb3\x84lK\xdc\x15\xdb\x1a\xe\xe0wKy\xc\xb6" "\".\x10\xfa|\xb7.\x17 \xf8\x3\xb3&\xf8\xb6\x4\xc9_zj\xcf\x2\x84\x32\xa9\x4\x89\xa9" "\xd0\xb4\x93u\xd0\xac\x94\x12\x84;\x82\xc9\n\x94\x66\x81\x15\x16\x18\x88w\x9c\x31" "\n\x7f\xb0\x17\xa5\xca\xa2\x8an\xe9\x90\x8Y7\xc5\xc4\x82I;\x1b\xd3\xbf#\xd4\x87q" ">\xc4Rjh\xd0<\x11\x88\xa1-&\xf7\xd1V\xf8Q\xc1\xc2\xa3\xd6$.\xa9vc=\x8d\xb8|\xa7\xe6" "\xffX\x1a\xe9\xb9\xed\xf5\xe6\x98\x34t\x90\xe5\xe2\x87\xe9\xf2>\xeiG\xdc\x87\xa9" "\xf7\xb\xeb\xa1\xdf\xaa\xa1\xd6\x98\xf9\x62\xa6\x32\xd1O5>\xcd\xe6>\xc2ZNE\xe5\x9c" "\xb7\x1e\x62\x18\x1aMl<\xec\x7\xb1\xfdn7\xe9Q41\xe0\xa1\xd6\xb6\x33\xcf*\x7f\x8a" "\xb1'\x8a\xcd\x87\xc5u\xa8\x18\xa5-\xd4\xf5\x8a\xbb\xa1l_\x1d\xeb\xe1\x9c\x1cQ|d" "[\xbf\xe5\xb6\xc1\xc3\xd4!W}7v\xc0\xb7Z6\xb9|\x1e$\xc6$\x0\x64\x81\x81\x95j\x86Q" "\x2\x0\xd8\x1dSV\xb4j8\xb4Kx\xb\xc5O2\xbe\x1eU\xe2\x84\xc7\x1f,|U\xd2\x8d\r\x66%" "0C\xd7n\x8f\xb1 8\xac\xa0\x93\xd1\x39^.e\xdf\xa6\x65\xea\xd7U\x9\xd4m\x93\xd0<_\n" "\x8d\xbd\xef \xf2t-s\xb0\x35\xd7\xdb{X\xe2\x98Xl\x1f\x13\xdb\x81oS\x1\x1eMY\xd1)" "\x83\x96y%\xf?e\xd3\x64V\x91wJ\x1c\xc8\xe8\xfe\xae\x4\x66\x80\x9e\x34\xc6)fo\x6\xa0" "\xcc\x99qW\xc5\xc8\x7f\x85\xe3\x61\x93\xcd\xda\x42\xf1}\x1a\xec\xe2\x9c\x42\xc3\xd1" "\x9e\xd0\x63\xc4\x1eH\x5\xcdND\xc\x8a\x13P\xddI\x19\x33\x8e\xbdV\xddi?\x16\xee\xaf" "\xb8\x12\xc8>\xaa\x98\x0\xadU\xa6\x93\x93\x89\xe7\xf2\xac\xa8\xda\x36%'\x1b\xf0\xb5" "7\xe5\x17\xce\xc3\xae\x17\x66\xf2\x9e}\x1a\xd7\xfe#\xaf|\xe0\xb1&\xbf\x34\xc1L\xfe" "b\xf8\xec\r\x9c\xcdJ\xc8hx\xc9\xd4\xa1\xc6\xcd]\x91\x19\xb3\xae\xb5\x33\x63\x98\xce" "\x4\x89>a\xe8\xd4\xd9\xa3\x43\x93 X'!\x83wE\xd2\"\xdd\x7f\xb5\xc5\xbco\x1f\x1\x98" "\xbf\xd5\xden\x10\xda\x63\xba\x8btO\x84\xc5K,\xf5K>\xb1\x97lc\xb3\xb4\xc\x66\xeb" "\xb8\x8f\x92~\x19\x84 \x7\xe9Hp\xbaGOd\x89\x9d@.g\xcd_\xfd\x34%\x45w\xe1\xd5\xcb" "P\xdc,\x4\x9a-*[\x10Wr\x83\xcf\xa9\x8\x32\xeb\x6\x61\xec;7\x1f\xe7\xce\xcf'\xd5z" "\xb4-\xe5s\x11\x7lR\x81_B\xa4\xccV\xd9\xb4l}\xf8\xc1\xeb\x14\x84\xe0(\x4\x39r<\xd9" "\xcd\xa4\x80\x9f<\xef\x1fjo\x6\x35y\xeb\x8f\x12\xfc\x32N\x8a\x39\x6s:\x92\x96l\x99" "\x0\x7f\x45\x97\xad\xe1\xe7\x41\xb0,\xac\xef\xae\xfbtt\xd8\xa4PW\xa4m\xab\xb2\xe6" "f?\xf0;\x3\x80\xaf\xec\x7f\x34_\x90T\x1d\xdc}\x89\xb8&m\x1dRvV\xf2\x66\xf0/;g\x3" "\xa3\x6/e=Cq\xc0m\xa8\xf8]naA\xde\xb6\xc4\x8{Ne?\xa7+.|[\xfa\xediI~\xdb\x92Sm\x9e" "\xc9\xf3\xbf\xf\x34\x92\x8\xe7s\x9c\xb1\xac\xa7\x8\xa3*Z\xc7\xa9\x9b\xa0?\xcb\x8" "\xaa`Y+\xc8\xb2=\x17\xb\xb3\xa7L\xce\xc7\x1\x1e\x64\xc9\x9d\x11\x18\xe5<\x83I5\xad" "'\x15=\x17\xff\x8c\x1f\x43N?\xf2M\x3\x18\xb8I\x18\x32\x61\x99\xaa\xcd\x62rK\x10W" "\xd9\x1c\x66(\xad\x42\x63\xa8X\xa4o\n\x1e\x84.x\xa3\x16~\x13\x91\x43\xfb\xe\xda\xcc" "d4\x84\x2\x7j\x80\x3\x63\xba\xed)\xbe_\n\xf6\xfe\x14\nj\xe5\xeH~#\xfe\xe8\xb5\xea" "\x9f\xa9\x16\xb1\x8f\x89\xc\xca\xca\x45\xc9ho\xd4\xaf^f\x8c]\x10'4\xce\xd7\xc5\x8b" "\xby\x6\x66\x15>;T\xfc\xd9\xab+\x1c+\x11#)>\xa2\xdfMu=}\x87\xbe\x81,uj\x9e\xeb\xfd" "\xd9\xa5,.\xc0Yk\x4\xd4\x99=\xcb\x87wq\x1em\x9\xa3\xf7\xd1\xa6\xe7g\x97z\x8eX\xe4" "\xbb\xc1\xac\xb0\x34Lu\xf7\x19\x1b\x8bh\x9b\xf1\x95\xce\xd6\xd4\xdf\x1b\x89\x44\x8" "\xf5;6A\xde\x10\x8av\x3t\xa3u\xd0J*\xcbG\xb7\x8a\xd5&V\xc8\x9e\x85\x1f\xfd\xde\x61" "D\x9c\xe7\xac\xa8\xe8\nQl\x95\x94\xb7\xc1\xc0\xeb}gk\xb0\x81\xf5\xf0!h\x1c\x1@/\x8a" "R\x1fV\xe8\xc0\xf\xdf\xde\xc\x61\xbd\x19\x42 \x9c\xb9\xaau\xeg\xab\xa1\xf3m\xcb\xc2" "\x95\x3k\xb8\x99 [\xdbs6\x18\xf0\x31}\xb8\xfe\x1f\x81\xab\x41\xfe\xab\x1\x8b\x19" "\xdb\x35\xbf\xb6\x92\x88\xf1\x9fK\x9\xb1\xa2\xfe-s\xb2\x92\x8e\xc9\xc1\xc5\x30\xdc" "\xed\xcb(\x80\xdf\x1f\x3.\xce\xcbu\xec\xcbI\xf0\x81\x12\x9d\xed\xb9\xa6U\xee\xa3" "\xe9\x8a_\xa2\xb4\x37U\x88\x18\xfb\xf0^\x9a\x84\x8a:\xfd\x44r\x90\x1d\xb1{\xdd\xc4" "\xc0\xb3\x39\x1e\x12\x9eQ0\xe3\x99\n\x17\xe4\x8c\x8a\xd5\xe1\xae\xa5\xbb$\xe4\xaf" "\x97@Tw^\xaeR\xd8Y\xe4\xbb\x6\x98^;\xed\x4GU\xd0\x11\x31/\x9f\x14\x46\xe4\xa9\x91" "x_N\x9f+\xc7\x14\x38L\x98\xfe\xe7\x8@X\xf9\xd5\xdaMy\xa0\xa5\xfd\xcf\x9\x98\x87\xad" "\xa2\x2\r\x92I[\xcc\xefj\xc7\x37\xfi\xa9\xd4+\xaf\xda\x90(\xbd\x0+q\xc6\xd0\xe1J" "\x14\x1aRsSoc\xafq2\x9d\x87|%\xc4\xe9T~\x12\xa1\x36\xc5\xa0]RD\xd1\x46\xae\xd3\x5" "\xa5\x8c\x41/\x19=\x9aT\x3\xa0\xdb\xe9\x15\x41\x41\x46\x1f\xbdV\x16\xab\xa8\x1c\x18" "j-\xed\x30~\xe1\x66@{\xc3:u\x8d\xb\x10\x7\xda\x8e\xc3\xa0\xa6\xb1\x7f\xa3u\xady\x97" "CI\x9a\x61\xa4\x1f\x9d\x98\x90\xe2\xe6\xe5\x9a\x8b\xb7\xb3r\xe6\x13\x1\x43\x1f\xfc" "\x11\xd2\x80\xf1\xd5sZYIDzs\xd7#\x8co\xbe\xb0\x42\x84\x34q\xeav\xb4\xa2\\\x16t\xe1" "m\x1d\xdc\xd6\xf2\x92\x93M\xcct\xbb\x3\x0\xee\xca\xb1\xfb\x92\xfbt\x91\xcc\x64\x88" "\xb9\x97u\xc8\x8d\x8f\xe6\x15I|v8w\x86\xbas\xbf-bm!\x0\xd5x\x8e\x8d\x30\xe5K\x9b" "\x9f\x96?\xa9h\xe6\x93\x9a\xd4\xb(\xb2gA|S\xb0\xc3\xe2{\xb3,u@\x93]\xb1\xc3\x64tkU\xf9\xac\xf7\xca" "k\x9e\xc3Z\xc3$\x8d\x42\xa8\xcfQ\xa1\xd8\xf9\x33\x19i\x8b\x92\xffq~\x11\x17\xf0\xe0" "r`P\x92\xdbG\x0\xab\xab~\xf4\x89\xbf\xc3^\xc6\x8a\xd6=\x95\xfa\x16\xb6\xa2\xf0\x18" ">\\;[\x1b\xdd\xba\x31\xe6\x4\x82&z[\xf2\xde$DR\xfd\x8\xd7\xd9\x2\x9c\xf\x42\x9ev" "\xd5\xc4\xd6\xc8R\xf8\xedw\x1d\x8a\xc6\xbf&\x7f\xf0\x98lf\xb9?\xd6\x1c\x81\xb\x9" "\x1c\xa8PX\xad\x63\xa9\x8e\x86O\xc2J%\xaa\xff\x38\x93\x46\xbe\x38\x64\x42x\xf4\xbb" "\xdb\xbN!!_Q\xad\xb\x1c@\x8\xd8\xf1[`\xeb/\xc1\x7\x88>$\xe4Q\x1f\x9e\xef\xba\x9c" "\xd1m\xae~ExD\x3\xb7\xc6\x9c`\xc7IM\xc0#\xaaV'\xb1r\x8e\x81\x95\xcb\x1b\xde\x34\xf8" "\xfd!\xa0\x91\x4\x64\x66]\xca\xa5|\x82vgq\x9e\xd0|#@\xee\xf\xbe!\xf5\x98\x13\x80" "\xcb\x82\xd7q@\xf7\x2T\x92\xa7\xde\x8\x0\xcd\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30" "000000000000000000000000000000000000000000000000000000000000\r000000000000000000" "0000000000000000000000000000000000000000000000\r00000000000000000000000000000000" "00000000000000000000000000000000\r0000000000000000000000000000000000000000000000" "000000000000000000\r000000000000000000000000000000000000000000000000000000000000" "0000\r0000000000000000000000000000000000000000000000000000000000000000\r00000000" "00000000000000000000000000000000000000000000000000000000\r0000000000000000000000" "000000000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n019023l_afm_len = 32114; char* n019023l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusSanL-ReguIt" "al\nFullName Nimbus Sans L Regular Italic\nFamilyName Nimbus Sans L\nWeight Regu" "lar\nItalicAngle -12.0\nIsFixedPitch false\nUnderlinePosition -151\nUnderlineThi" "ckness 50\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Devel" "opment\nEncodingScheme AdobeStandardEncoding\nFontBBox -178 -284 1108 953\nCapHe" "ight 729\nXHeight 524\nDescender -213\nAscender 729\nStartCharMetrics 316\nC 32 " "; WX 278 ; N space ; B 213 0 213 0 ;\nC 33 ; WX 278 ; N exclam ; B 124 0 363 729" " ;\nC 34 ; WX 355 ; N quotedbl ; B 177 464 455 709 ;\nC 35 ; WX 556 ; N numbersi" "gn ; B 54 -20 649 697 ;\nC 36 ; WX 556 ; N dollar ; B 69 -126 613 770 ;\nC 37 ; " "WX 889 ; N percent ; B 134 -20 895 709 ;\nC 38 ; WX 667 ; N ampersand ; B 83 -23" " 644 709 ;\nC 39 ; WX 222 ; N quoteright ; B 166 477 309 708 ;\nC 40 ; WX 333 ; " "N parenleft ; B 113 -213 446 729 ;\nC 41 ; WX 333 ; N parenright ; B -7 -213 325" " 729 ;\nC 42 ; WX 389 ; N asterisk ; B 169 438 471 729 ;\nC 43 ; WX 584 ; N plus" " ; B 92 -11 591 473 ;\nC 44 ; WX 278 ; N comma ; B 55 -150 214 103 ;\nC 45 ; WX " "333 ; N hyphen ; B 97 240 351 312 ;\nC 46 ; WX 278 ; N period ; B 87 0 213 103 ;" "\nC 47 ; WX 278 ; N slash ; B -12 -20 434 729 ;\nC 48 ; WX 556 ; N zero ; B 98 -" "23 598 709 ;\nC 49 ; WX 556 ; N one ; B 208 0 498 709 ;\nC 50 ; WX 556 ; N two ;" " B 34 0 620 709 ;\nC 51 ; WX 556 ; N three ; B 71 -23 599 709 ;\nC 52 ; WX 556 ;" " N four ; B 63 0 573 709 ;\nC 53 ; WX 556 ; N five ; B 70 -23 629 709 ;\nC 54 ; " "WX 556 ; N six ; B 93 -23 611 709 ;\nC 55 ; WX 556 ; N seven ; B 137 0 671 709 ;" "\nC 56 ; WX 556 ; N eight ; B 74 -23 604 709 ;\nC 57 ; WX 556 ; N nine ; B 83 -2" "3 599 709 ;\nC 58 ; WX 278 ; N colon ; B 110 0 326 524 ;\nC 59 ; WX 278 ; N semi" "colon ; B 78 -150 325 524 ;\nC 60 ; WX 584 ; N less ; B 87 -9 635 474 ;\nC 61 ; " "WX 584 ; N equal ; B 74 111 609 355 ;\nC 62 ; WX 584 ; N greater ; B 48 -9 596 4" "74 ;\nC 63 ; WX 556 ; N question ; B 184 0 630 741 ;\nC 64 ; WX 1015 ; N at ; B " "80 -142 1036 741 ;\nC 65 ; WX 667 ; N A ; B 17 0 653 729 ;\nC 66 ; WX 667 ; N B " "; B 79 0 711 729 ;\nC 67 ; WX 722 ; N C ; B 112 -23 770 741 ;\nC 68 ; WX 722 ; N" " D ; B 89 0 759 729 ;\nC 69 ; WX 667 ; N E ; B 90 0 751 729 ;\nC 70 ; WX 611 ; N" " F ; B 90 0 734 729 ;\nC 71 ; WX 778 ; N G ; B 109 -23 809 741 ;\nC 72 ; WX 722 " "; N H ; B 83 0 799 729 ;\nC 73 ; WX 278 ; N I ; B 100 0 349 729 ;\nC 74 ; WX 500" " ; N J ; B 47 -23 581 729 ;\nC 75 ; WX 667 ; N K ; B 79 0 813 729 ;\nC 76 ; WX 5" "56 ; N L ; B 80 0 551 729 ;\nC 77 ; WX 833 ; N M ; B 75 0 916 729 ;\nC 78 ; WX 7" "22 ; N N ; B 76 0 801 729 ;\nC 79 ; WX 778 ; N O ; B 104 -23 828 741 ;\nC 80 ; W" "X 667 ; N P ; B 91 0 733 729 ;\nC 81 ; WX 778 ; N Q ; B 104 -59 828 741 ;\nC 82 " "; WX 722 ; N R ; B 93 0 770 729 ;\nC 83 ; WX 667 ; N S ; B 89 -23 714 741 ;\nC 8" "4 ; WX 611 ; N T ; B 158 0 748 729 ;\nC 85 ; WX 722 ; N U ; B 124 -23 800 729 ;\n" "C 86 ; WX 667 ; N V ; B 185 0 800 729 ;\nC 87 ; WX 944 ; N W ; B 177 0 1084 729 " ";\nC 88 ; WX 667 ; N X ; B 22 0 794 729 ;\nC 89 ; WX 667 ; N Y ; B 168 0 816 729" " ;\nC 90 ; WX 611 ; N Z ; B 28 0 737 729 ;\nC 91 ; WX 278 ; N bracketleft ; B 19" " -213 405 729 ;\nC 92 ; WX 278 ; N backslash ; B 147 -20 280 729 ;\nC 93 ; WX 27" "8 ; N bracketright ; B -23 -213 364 729 ;\nC 94 ; WX 469 ; N asciicircum ; B 115" " 329 496 709 ;\nC 95 ; WX 556 ; N underscore ; B -59 -176 551 -126 ;\nC 96 ; WX " "222 ; N quoteleft ; B 163 477 308 709 ;\nC 97 ; WX 556 ; N a ; B 65 -23 568 539 " ";\nC 98 ; WX 556 ; N b ; B 54 -23 588 729 ;\nC 99 ; WX 500 ; N c ; B 76 -23 554 " "539 ;\nC 100 ; WX 556 ; N d ; B 73 -23 650 729 ;\nC 101 ; WX 556 ; N e ; B 84 -2" "3 580 539 ;\nC 102 ; WX 278 ; N f ; B 89 0 413 732 ;\nC 103 ; WX 556 ; N g ; B 3" "2 -218 601 539 ;\nC 104 ; WX 556 ; N h ; B 70 0 574 729 ;\nC 105 ; WX 222 ; N i " "; B 66 0 305 729 ;\nC 106 ; WX 222 ; N j ; B -65 -218 308 729 ;\nC 107 ; WX 500 " "; N k ; B 58 0 584 729 ;\nC 108 ; WX 222 ; N l ; B 68 0 307 729 ;\nC 109 ; WX 83" "3 ; N m ; B 71 0 852 539 ;\nC 110 ; WX 556 ; N n ; B 70 0 574 539 ;\nC 111 ; WX " "556 ; N o ; B 80 -23 576 539 ;\nC 112 ; WX 556 ; N p ; B 7 -213 586 539 ;\nC 113" " ; WX 556 ; N q ; B 71 -213 607 539 ;\nC 114 ; WX 333 ; N r ; B 69 0 436 539 ;\n" "C 115 ; WX 500 ; N s ; B 61 -23 520 539 ;\nC 116 ; WX 278 ; N t ; B 97 -23 366 6" "68 ;\nC 117 ; WX 556 ; N u ; B 88 -23 594 524 ;\nC 118 ; WX 500 ; N v ; B 122 0 " "598 524 ;\nC 119 ; WX 722 ; N w ; B 118 0 820 524 ;\nC 120 ; WX 500 ; N x ; B 17" " 0 583 524 ;\nC 121 ; WX 500 ; N y ; B 8 -218 590 524 ;\nC 122 ; WX 500 ; N z ; " "B 31 0 557 524 ;\nC 123 ; WX 334 ; N braceleft ; B 91 -213 431 729 ;\nC 124 ; WX" " 260 ; N bar ; B 54 -212 315 729 ;\nC 125 ; WX 334 ; N braceright ; B -16 -213 3" "24 729 ;\nC 126 ; WX 584 ; N asciitilde ; B 137 268 594 438 ;\nC 161 ; WX 333 ; " "N exclamdown ; B 76 -205 317 524 ;\nC 162 ; WX 556 ; N cent ; B 96 -120 585 628 " ";\nC 163 ; WX 556 ; N sterling ; B 44 -23 628 729 ;\nC 164 ; WX 167 ; N fraction" " ; B -178 -20 486 709 ;\nC 165 ; WX 556 ; N yen ; B 100 0 696 709 ;\nC 166 ; WX " "556 ; N florin ; B -32 -212 696 738 ;\nC 167 ; WX 556 ; N section ; B 63 -213 58" "9 729 ;\nC 168 ; WX 556 ; N currency ; B 110 133 593 556 ;\nC 169 ; WX 191 ; N q" "uotesingle ; B 173 464 292 709 ;\nC 170 ; WX 333 ; N quotedblleft ; B 146 477 44" "9 709 ;\nC 171 ; WX 556 ; N guillemotleft ; B 147 106 548 438 ;\nC 172 ; WX 333 " "; N guilsinglleft ; B 140 106 336 438 ;\nC 173 ; WX 333 ; N guilsinglright ; B 1" "09 106 307 438 ;\nC 174 ; WX 500 ; N fi ; B 83 0 591 732 ;\nC 175 ; WX 500 ; N f" "l ; B 88 0 585 732 ;\nC 177 ; WX 556 ; N endash ; B 46 240 628 312 ;\nC 178 ; WX" " 556 ; N dagger ; B 127 -177 620 709 ;\nC 179 ; WX 556 ; N daggerdbl ; B 51 -177" " 620 709 ;\nC 180 ; WX 278 ; N periodcentered ; B 166 192 293 295 ;\nC 182 ; WX " "537 ; N paragraph ; B 145 -178 677 729 ;\nC 183 ; WX 350 ; N bullet ; B 120 220 " "376 470 ;\nC 184 ; WX 222 ; N quotesinglbase ; B 37 -128 180 103 ;\nC 185 ; WX 3" "33 ; N quotedblbase ; B 20 -128 322 103 ;\nC 186 ; WX 333 ; N quotedblright ; B " "150 477 452 708 ;\nC 187 ; WX 556 ; N guillemotright ; B 121 106 518 438 ;\nC 18" "8 ; WX 1000 ; N ellipsis ; B 115 0 907 103 ;\nC 189 ; WX 1000 ; N perthousand ; " "B 93 -20 1024 738 ;\nC 191 ; WX 611 ; N questiondown ; B 86 -217 531 524 ;\nC 19" "3 ; WX 333 ; N grave ; B 179 592 357 740 ;\nC 194 ; WX 333 ; N acute ; B 218 592" " 458 740 ;\nC 195 ; WX 333 ; N circumflex ; B 146 591 433 741 ;\nC 196 ; WX 333 " "; N tilde ; B 130 611 471 719 ;\nC 197 ; WX 333 ; N macron ; B 160 627 450 696 ;" "\nC 198 ; WX 333 ; N breve ; B 165 594 471 729 ;\nC 199 ; WX 333 ; N dotaccent ;" " B 244 612 370 715 ;\nC 200 ; WX 333 ; N dieresis ; B 159 612 446 715 ;\nC 202 ;" " WX 333 ; N ring ; B 216 579 396 754 ;\nC 203 ; WX 333 ; N cedilla ; B 1 -214 26" "4 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B 91 590 505 740 ;\nC 206 ; WX 333 ; N " "ogonek ; B 35 -205 246 0 ;\nC 207 ; WX 333 ; N caron ; B 176 592 463 740 ;\nC 20" "8 ; WX 1000 ; N emdash ; B 42 240 1068 312 ;\nC 225 ; WX 1000 ; N AE ; B 11 0 10" "87 729 ;\nC 227 ; WX 370 ; N ordfeminine ; B 107 303 441 742 ;\nC 232 ; WX 556 ;" " N Lslash ; B 75 0 570 729 ;\nC 233 ; WX 778 ; N Oslash ; B 32 -24 867 741 ;\nC " "234 ; WX 1000 ; N OE ; B 101 -23 1108 741 ;\nC 235 ; WX 365 ; N ordmasculine ; B" " 114 303 452 742 ;\nC 241 ; WX 889 ; N ae ; B 59 -23 915 539 ;\nC 245 ; WX 278 ;" " N dotlessi ; B 94 0 290 527 ;\nC 248 ; WX 222 ; N lslash ; B 62 0 312 729 ;\nC " "249 ; WX 611 ; N oslash ; B 19 -30 639 541 ;\nC 250 ; WX 944 ; N oe ; B 85 -23 9" "66 539 ;\nC 251 ; WX 611 ; N germandbls ; B 126 -23 655 729 ;\nC -1 ; WX 722 ; N" " Udieresis ; B 124 -23 800 914 ;\nC -1 ; WX 722 ; N Uacute ; B 124 -23 800 939 ;" "\nC -1 ; WX 667 ; N Scedilla ; B 89 -214 714 741 ;\nC -1 ; WX 611 ; N Tcaron ; B" " 158 0 748 939 ;\nC -1 ; WX 667 ; N Scaron ; B 89 -23 714 939 ;\nC -1 ; WX 722 ;" " N Rcaron ; B 93 0 770 939 ;\nC -1 ; WX 722 ; N Racute ; B 93 0 770 939 ;\nC -1 " "; WX 667 ; N Sacute ; B 89 -23 714 939 ;\nC -1 ; WX 778 ; N Otilde ; B 104 -23 8" "28 918 ;\nC -1 ; WX 556 ; N ucircumflex ; B 88 -23 594 741 ;\nC -1 ; WX 778 ; N " "Ohungarumlaut ; B 104 -23 841 939 ;\nC -1 ; WX 722 ; N Uhungarumlaut ; B 124 -23" " 806 939 ;\nC -1 ; WX 667 ; N Yacute ; B 168 0 816 939 ;\nC -1 ; WX 722 ; N Eth " "; B 89 0 759 729 ;\nC -1 ; WX 722 ; N Dcroat ; B 89 0 759 729 ;\nC -1 ; WX 611 ;" " N Zacute ; B 28 0 737 939 ;\nC -1 ; WX 722 ; N Uring ; B 124 -23 800 953 ;\nC -" "1 ; WX 556 ; N gbreve ; B 32 -218 601 729 ;\nC -1 ; WX 556 ; N eogonek ; B 84 -2" "05 580 539 ;\nC -1 ; WX 556 ; N edotaccent ; B 84 -23 580 715 ;\nC -1 ; WX 556 ;" " N ecaron ; B 84 -23 580 740 ;\nC -1 ; WX 722 ; N Ugrave ; B 124 -23 800 939 ;\n" "C -1 ; WX 667 ; N Thorn ; B 91 0 708 729 ;\nC -1 ; WX 556 ; N eacute ; B 84 -23 " "580 740 ;\nC -1 ; WX 556 ; N edieresis ; B 84 -23 580 715 ;\nC -1 ; WX 650 ; N d" "caron ; B 73 -23 810 729 ;\nC -1 ; WX 500 ; N ccedilla ; B 76 -214 554 539 ;\nC " "-1 ; WX 500 ; N ccaron ; B 76 -23 563 740 ;\nC -1 ; WX 500 ; N cacute ; B 76 -23" " 575 740 ;\nC -1 ; WX 556 ; N aogonek ; B 65 -205 571 539 ;\nC -1 ; WX 556 ; N a" "ring ; B 65 -23 568 754 ;\nC -1 ; WX 556 ; N atilde ; B 65 -23 583 719 ;\nC -1 ;" " WX 556 ; N abreve ; B 65 -23 582 729 ;\nC -1 ; WX 556 ; N egrave ; B 84 -23 580" " 740 ;\nC -1 ; WX 556 ; N agrave ; B 65 -23 568 740 ;\nC -1 ; WX 556 ; N aacute " "; B 65 -23 570 740 ;\nC -1 ; WX 556 ; N adieresis ; B 65 -23 568 715 ;\nC -1 ; W" "X 722 ; N Uogonek ; B 124 -205 800 729 ;\nC -1 ; WX 556 ; N ugrave ; B 88 -23 59" "4 740 ;\nC -1 ; WX 556 ; N uacute ; B 88 -23 594 740 ;\nC -1 ; WX 556 ; N udiere" "sis ; B 88 -23 594 715 ;\nC -1 ; WX 319 ; N tcaron ; B 97 -23 492 801 ;\nC -1 ; " "WX 500 ; N scommaaccent ; B 61 -284 520 539 ;\nC -1 ; WX 611 ; N Zcaron ; B 28 0" " 737 939 ;\nC -1 ; WX 556 ; N ecircumflex ; B 84 -23 580 741 ;\nC -1 ; WX 722 ; " "N Ucircumflex ; B 124 -23 800 940 ;\nC -1 ; WX 556 ; N acircumflex ; B 65 -23 56" "8 741 ;\nC -1 ; WX 611 ; N Zdotaccent ; B 28 0 737 914 ;\nC -1 ; WX 500 ; N scar" "on ; B 61 -23 547 740 ;\nC -1 ; WX 667 ; N Amacron ; B 17 0 663 895 ;\nC -1 ; WX" " 500 ; N sacute ; B 61 -23 545 740 ;\nC -1 ; WX 611 ; N Tcommaaccent ; B 158 -28" "4 748 729 ;\nC -1 ; WX 667 ; N Ydieresis ; B 168 0 816 914 ;\nC -1 ; WX 556 ; N " "thorn ; B 7 -213 586 729 ;\nC -1 ; WX 667 ; N Emacron ; B 90 0 751 895 ;\nC -1 ;" " WX 778 ; N Ograve ; B 104 -23 828 939 ;\nC -1 ; WX 778 ; N Oacute ; B 104 -23 8" "28 939 ;\nC -1 ; WX 778 ; N Odieresis ; B 104 -23 828 914 ;\nC -1 ; WX 722 ; N N" "tilde ; B 76 0 801 918 ;\nC -1 ; WX 722 ; N Ncaron ; B 76 0 801 939 ;\nC -1 ; WX" " 722 ; N Nacute ; B 76 0 801 939 ;\nC -1 ; WX 556 ; N Lcaron ; B 80 0 551 729 ;\n" "C -1 ; WX 556 ; N Lacute ; B 80 0 551 939 ;\nC -1 ; WX 278 ; N Idotaccent ; B 10" "0 0 389 914 ;\nC -1 ; WX 333 ; N racute ; B 69 0 498 740 ;\nC -1 ; WX 278 ; N Ic" "ircumflex ; B 100 0 454 940 ;\nC -1 ; WX 556 ; N ohungarumlaut ; B 80 -23 683 74" "0 ;\nC -1 ; WX 556 ; N otilde ; B 80 -23 583 719 ;\nC -1 ; WX 556 ; N Euro ; B 1" "2 -22 636 709 ;\nC -1 ; WX 556 ; N ocircumflex ; B 80 -23 576 741 ;\nC -1 ; WX 3" "90 ; N onesuperior ; B 205 284 393 709 ;\nC -1 ; WX 390 ; N twosuperior ; B 100 " "284 468 709 ;\nC -1 ; WX 390 ; N threesuperior ; B 123 270 455 709 ;\nC -1 ; WX " "278 ; N Igrave ; B 100 0 378 939 ;\nC -1 ; WX 278 ; N Iacute ; B 100 0 479 939 ;" "\nC -1 ; WX 278 ; N Imacron ; B 100 0 458 895 ;\nC -1 ; WX 278 ; N Iogonek ; B 2" "8 -205 349 729 ;\nC -1 ; WX 278 ; N Idieresis ; B 100 0 467 907 ;\nC -1 ; WX 778" " ; N Gbreve ; B 109 -23 809 928 ;\nC -1 ; WX 722 ; N Umacron ; B 124 -23 800 895" " ;\nC -1 ; WX 667 ; N Kcommaaccent ; B 79 -284 813 729 ;\nC -1 ; WX 556 ; N ogra" "ve ; B 80 -23 576 740 ;\nC -1 ; WX 667 ; N Scommaaccent ; B 89 -284 714 741 ;\nC" " -1 ; WX 667 ; N Eogonek ; B 90 -205 751 729 ;\nC -1 ; WX 556 ; N oacute ; B 80 " "-23 576 740 ;\nC -1 ; WX 667 ; N Edotaccent ; B 90 0 751 914 ;\nC -1 ; WX 222 ; " "N iogonek ; B 0 -205 305 729 ;\nC -1 ; WX 527 ; N gcommaaccent ; B 3 -218 572 81" "3 ;\nC -1 ; WX 556 ; N odieresis ; B 80 -23 576 715 ;\nC -1 ; WX 556 ; N ntilde " "; B 70 0 589 719 ;\nC -1 ; WX 556 ; N ncaron ; B 70 0 578 740 ;\nC -1 ; WX 667 ;" " N Ecaron ; B 90 0 751 939 ;\nC -1 ; WX 667 ; N Ecircumflex ; B 90 0 751 940 ;\n" "C -1 ; WX 500 ; N scedilla ; B 61 -214 521 539 ;\nC -1 ; WX 333 ; N rcaron ; B 6" "9 0 486 740 ;\nC -1 ; WX 667 ; N Egrave ; B 90 0 751 939 ;\nC -1 ; WX 667 ; N Ea" "cute ; B 90 0 751 939 ;\nC -1 ; WX 778 ; N Gcommaaccent ; B 109 -284 809 741 ;\n" "C -1 ; WX 722 ; N Rcommaaccent ; B 93 -284 770 729 ;\nC -1 ; WX 667 ; N Edieresi" "s ; B 90 0 751 914 ;\nC -1 ; WX 556 ; N nacute ; B 70 0 580 740 ;\nC -1 ; WX 556" " ; N uogonek ; B 88 -205 594 524 ;\nC -1 ; WX 556 ; N umacron ; B 88 -23 594 696" " ;\nC -1 ; WX 722 ; N Dcaron ; B 89 0 759 939 ;\nC -1 ; WX 307 ; N lcaron ; B 68" " 0 467 729 ;\nC -1 ; WX 722 ; N Ccaron ; B 112 -23 770 939 ;\nC -1 ; WX 722 ; N " "Cacute ; B 112 -23 770 939 ;\nC -1 ; WX 722 ; N Ccedilla ; B 112 -214 770 741 ;\n" "C -1 ; WX 606 ; N degree ; B 291 383 594 686 ;\nC -1 ; WX 667 ; N Aogonek ; B 17" " -205 663 729 ;\nC -1 ; WX 584 ; N minus ; B 81 197 601 269 ;\nC -1 ; WX 584 ; N" " multiply ; B 113 34 568 427 ;\nC -1 ; WX 584 ; N divide ; B 92 0 591 462 ;\nC -" "1 ; WX 667 ; N Aring ; B 17 0 653 953 ;\nC -1 ; WX 1000 ; N trademark ; B 208 29" "2 1096 729 ;\nC -1 ; WX 333 ; N rcommaaccent ; B 5 -284 436 539 ;\nC -1 ; WX 222" " ; N lacute ; B 68 0 463 939 ;\nC -1 ; WX 556 ; N omacron ; B 80 -23 576 696 ;\n" "C -1 ; WX 667 ; N Atilde ; B 17 0 680 918 ;\nC -1 ; WX 278 ; N icircumflex ; B 9" "4 0 406 741 ;\nC -1 ; WX 278 ; N igrave ; B 94 0 330 740 ;\nC -1 ; WX 556 ; N nc" "ommaaccent ; B 70 -284 574 539 ;\nC -1 ; WX 222 ; N lcommaaccent ; B -1 -284 307" " 729 ;\nC -1 ; WX 584 ; N plusminus ; B 50 0 625 633 ;\nC -1 ; WX 947 ; N onehal" "f ; B 202 -20 965 709 ;\nC -1 ; WX 947 ; N onequarter ; B 205 -20 938 709 ;\nC -" "1 ; WX 947 ; N threequarters ; B 123 -20 938 709 ;\nC -1 ; WX 278 ; N iacute ; B" " 94 0 431 740 ;\nC -1 ; WX 667 ; N Abreve ; B 17 0 683 928 ;\nC -1 ; WX 500 ; N " "kcommaaccent ; B 58 -284 584 729 ;\nC -1 ; WX 778 ; N Omacron ; B 104 -23 828 89" "5 ;\nC -1 ; WX 222 ; N imacron ; B 66 0 373 696 ;\nC -1 ; WX 556 ; N emacron ; B" " 84 -23 580 696 ;\nC -1 ; WX 556 ; N amacron ; B 65 -23 568 696 ;\nC -1 ; WX 278" " ; N tcommaaccent ; B 55 -284 366 668 ;\nC -1 ; WX 500 ; N ydieresis ; B 8 -218 " "590 715 ;\nC -1 ; WX 500 ; N zdotaccent ; B 31 0 557 715 ;\nC -1 ; WX 500 ; N zc" "aron ; B 31 0 557 740 ;\nC -1 ; WX 500 ; N zacute ; B 31 0 557 740 ;\nC -1 ; WX " "500 ; N yacute ; B 8 -218 590 740 ;\nC -1 ; WX 556 ; N uhungarumlaut ; B 88 -23 " "683 740 ;\nC -1 ; WX 556 ; N eth ; B 80 -23 576 743 ;\nC -1 ; WX 556 ; N uring ;" " B 88 -23 594 754 ;\nC -1 ; WX 778 ; N Ocircumflex ; B 104 -23 828 940 ;\nC -1 ;" " WX 333 ; N commaaccent ; B 57 -284 205 -60 ;\nC -1 ; WX 737 ; N copyright ; B 5" "5 -22 836 742 ;\nC -1 ; WX 737 ; N registered ; B 55 -22 836 742 ;\nC -1 ; WX 66" "7 ; N Acircumflex ; B 17 0 653 940 ;\nC -1 ; WX 278 ; N idieresis ; B 94 0 419 7" "08 ;\nC -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;\nC -1 ; WX 712 ; N Delta ; B " "10 0 701 729 ;\nC -1 ; WX 584 ; N notequal ; B 74 2 609 480 ;\nC -1 ; WX 542 ; N" " radical ; B 102 -36 705 913 ;\nC -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;\nC -" "1 ; WX 667 ; N Aacute ; B 17 0 667 939 ;\nC -1 ; WX 584 ; N lessequal ; B 45 0 6" "59 584 ;\nC -1 ; WX 584 ; N greaterequal ; B 56 0 626 584 ;\nC -1 ; WX 584 ; N l" "ogicalnot ; B 99 86 619 377 ;\nC -1 ; WX 711 ; N summation ; B -18 -97 760 762 ;" "\nC -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;\nC -1 ; WX 722 ; N Ncommaac" "cent ; B 76 -284 801 729 ;\nC -1 ; WX 556 ; N dcroat ; B 73 -23 695 729 ;\nC -1 " "; WX 260 ; N brokenbar ; B 54 -212 315 729 ;\nC -1 ; WX 556 ; N Lcommaaccent ; B" " 80 -284 551 729 ;\nC -1 ; WX 667 ; N Adieresis ; B 17 0 662 914 ;\nC -1 ; WX 55" "6 ; N mu ; B 18 -220 593 524 ;\nC -1 ; WX 278 ; N .notdef ; B 213 0 213 0 ;\nEnd" "CharMetrics\nStartKernData\nStartKernPairs 998\nKPX A C -41\nKPX A Ccedilla -41\n" "KPX A G -41\nKPX A O -37\nKPX A Odieresis -37\nKPX A Q -38\nKPX A T -103\nKPX A " "U -42\nKPX A Uacute -42\nKPX A Ucircumflex -42\nKPX A Udieresis -42\nKPX A Ugrav" "e -42\nKPX A V -81\nKPX A W -57\nKPX A Y -104\nKPX A a -16\nKPX A b -5\nKPX A c " "-16\nKPX A ccedilla -16\nKPX A comma -4\nKPX A d -14\nKPX A e -22\nKPX A g -17\n" "KPX A guillemotleft -51\nKPX A guilsinglleft -47\nKPX A hyphen -8\nKPX A o -19\n" "KPX A period -2\nKPX A q -15\nKPX A quotedblright -60\nKPX A quoteright -68\nKPX" " A t -22\nKPX A u -18\nKPX A v -40\nKPX A w -29\nKPX A y -44\nKPX Aacute C -42\n" "KPX Aacute G -42\nKPX Aacute O -38\nKPX Aacute Q -39\nKPX Aacute T -103\nKPX Aac" "ute U -43\nKPX Aacute V -81\nKPX Aacute W -57\nKPX Aacute Y -104\nKPX Aacute a -" "16\nKPX Aacute b -6\nKPX Aacute c -17\nKPX Aacute comma -4\nKPX Aacute d -15\nKP" "X Aacute e -23\nKPX Aacute g -17\nKPX Aacute guillemotleft -51\nKPX Aacute guils" "inglleft -48\nKPX Aacute hyphen -9\nKPX Aacute o -20\nKPX Aacute period -3\nKPX " "Aacute q -16\nKPX Aacute quoteright -68\nKPX Aacute t -23\nKPX Aacute u -20\nKPX" " Aacute v -40\nKPX Aacute w -29\nKPX Aacute y -44\nKPX Acircumflex C -41\nKPX Ac" "ircumflex G -41\nKPX Acircumflex O -37\nKPX Acircumflex Q -38\nKPX Acircumflex T" " -103\nKPX Acircumflex U -42\nKPX Acircumflex V -81\nKPX Acircumflex W -57\nKPX " "Acircumflex Y -104\nKPX Acircumflex comma -4\nKPX Acircumflex period -2\nKPX Adi" "eresis C -42\nKPX Adieresis G -41\nKPX Adieresis O -38\nKPX Adieresis Q -39\nKPX" " Adieresis T -103\nKPX Adieresis U -43\nKPX Adieresis V -81\nKPX Adieresis W -57" "\nKPX Adieresis Y -104\nKPX Adieresis a -16\nKPX Adieresis b -5\nKPX Adieresis c" " -17\nKPX Adieresis comma -4\nKPX Adieresis d -14\nKPX Adieresis g -17\nKPX Adie" "resis guillemotleft -51\nKPX Adieresis guilsinglleft -48\nKPX Adieresis hyphen -" "8\nKPX Adieresis o -19\nKPX Adieresis period -3\nKPX Adieresis q -15\nKPX Adiere" "sis quotedblright -60\nKPX Adieresis quoteright -68\nKPX Adieresis t -22\nKPX Ad" "ieresis u -19\nKPX Adieresis v -40\nKPX Adieresis w -29\nKPX Adieresis y -44\nKP" "X Agrave C -41\nKPX Agrave G -41\nKPX Agrave O -37\nKPX Agrave Q -38\nKPX Agrave" " T -103\nKPX Agrave U -42\nKPX Agrave V -81\nKPX Agrave W -57\nKPX Agrave Y -104" "\nKPX Agrave comma -4\nKPX Agrave period -2\nKPX Aring C -41\nKPX Aring G -41\nK" "PX Aring O -37\nKPX Aring Q -38\nKPX Aring T -103\nKPX Aring U -42\nKPX Aring V " "-81\nKPX Aring W -57\nKPX Aring Y -104\nKPX Aring a -16\nKPX Aring b -5\nKPX Ari" "ng c -16\nKPX Aring comma -4\nKPX Aring d -14\nKPX Aring e -22\nKPX Aring g -17\n" "KPX Aring guillemotleft -51\nKPX Aring guilsinglleft -47\nKPX Aring hyphen -8\nK" "PX Aring o -19\nKPX Aring period -2\nKPX Aring q -15\nKPX Aring quotedblright -6" "0\nKPX Aring quoteright -68\nKPX Aring t -22\nKPX Aring u -18\nKPX Aring v -40\n" "KPX Aring w -29\nKPX Aring y -44\nKPX Atilde C -43\nKPX Atilde G -42\nKPX Atilde" " O -39\nKPX Atilde Q -40\nKPX Atilde T -103\nKPX Atilde U -44\nKPX Atilde V -81\n" "KPX Atilde W -57\nKPX Atilde Y -104\nKPX Atilde comma -4\nKPX Atilde period -4\n" "KPX B A -28\nKPX B AE -29\nKPX B Aacute -28\nKPX B Acircumflex -28\nKPX B Adiere" "sis -28\nKPX B Aring -28\nKPX B Atilde -28\nKPX B O -14\nKPX B OE -11\nKPX B Oac" "ute -14\nKPX B Ocircumflex -14\nKPX B Odieresis -14\nKPX B Ograve -14\nKPX B Osl" "ash -2\nKPX B V -49\nKPX B W -27\nKPX B Y -56\nKPX C A -43\nKPX C AE -44\nKPX C " "Aacute -43\nKPX C Adieresis -43\nKPX C Aring -43\nKPX C H -22\nKPX C K -20\nKPX " "C O -18\nKPX C Oacute -18\nKPX C Odieresis -18\nKPX Ccedilla A -44\nKPX D A -50\n" "KPX D Aacute -50\nKPX D Acircumflex -50\nKPX D Adieresis -50\nKPX D Agrave -50\n" "KPX D Aring -50\nKPX D Atilde -50\nKPX D J -13\nKPX D T -56\nKPX D V -54\nKPX D " "W -31\nKPX D X -58\nKPX D Y -74\nKPX F A -78\nKPX F Aacute -78\nKPX F Acircumfle" "x -78\nKPX F Adieresis -78\nKPX F Agrave -78\nKPX F Aring -78\nKPX F Atilde -78\n" "KPX F J -59\nKPX F O -30\nKPX F Odieresis -30\nKPX F a -45\nKPX F aacute -45\nKP" "X F adieresis -45\nKPX F ae -41\nKPX F aring -45\nKPX F comma -113\nKPX F e -33\n" "KPX F eacute -33\nKPX F hyphen -20\nKPX F i -19\nKPX F j -19\nKPX F o -30\nKPX F" " oacute -30\nKPX F odieresis -30\nKPX F oe -33\nKPX F oslash -30\nKPX F period -" "113\nKPX F r -44\nKPX F u -42\nKPX G A -14\nKPX G AE -11\nKPX G Aacute -14\nKPX " "G Acircumflex -14\nKPX G Adieresis -14\nKPX G Agrave -14\nKPX G Aring -14\nKPX G" " Atilde -14\nKPX G T -53\nKPX G V -53\nKPX G W -31\nKPX G Y -72\nKPX J A -39\nKP" "X J AE -39\nKPX J Adieresis -39\nKPX J Aring -39\nKPX K C -56\nKPX K G -57\nKPX " "K O -53\nKPX K OE -49\nKPX K Oacute -53\nKPX K Odieresis -53\nKPX K S -48\nKPX K" " T 14\nKPX K a -23\nKPX K adieresis -23\nKPX K ae -20\nKPX K aring -23\nKPX K e " "-46\nKPX K hyphen -53\nKPX K o -42\nKPX K oacute -42\nKPX K odieresis -42\nKPX K" " u -32\nKPX K udieresis -32\nKPX K y -76\nKPX L A 8\nKPX L AE 11\nKPX L Aacute 8" "\nKPX L Adieresis 8\nKPX L Aring 8\nKPX L C -52\nKPX L Ccedilla -51\nKPX L G -53" "\nKPX L O -51\nKPX L Oacute -51\nKPX L Ocircumflex -51\nKPX L Odieresis -51\nKPX" " L Ograve -51\nKPX L Otilde -51\nKPX L S -28\nKPX L T -112\nKPX L U -46\nKPX L U" "dieresis -46\nKPX L V -115\nKPX L W -77\nKPX L Y -128\nKPX L hyphen -140\nKPX L " "quotedblright -145\nKPX L quoteright -153\nKPX L u -17\nKPX L udieresis -17\nKPX" " L y -68\nKPX N A -19\nKPX N AE -16\nKPX N Aacute -19\nKPX N Adieresis -19\nKPX " "N Aring -19\nKPX N C -15\nKPX N Ccedilla -14\nKPX N G -14\nKPX N O -11\nKPX N Oa" "cute -11\nKPX N Odieresis -11\nKPX N a -17\nKPX N aacute -17\nKPX N adieresis -1" "7\nKPX N ae -13\nKPX N aring -17\nKPX N comma -15\nKPX N e -11\nKPX N eacute -11" "\nKPX N o -8\nKPX N oacute -8\nKPX N odieresis -8\nKPX N oslash -4\nKPX N period" " -15\nKPX N u -8\nKPX N udieresis -9\nKPX O A -43\nKPX O AE -47\nKPX O Aacute -4" "3\nKPX O Adieresis -43\nKPX O Aring -43\nKPX O T -54\nKPX O V -48\nKPX O W -25\n" "KPX O X -52\nKPX O Y -71\nKPX Oacute A -43\nKPX Oacute T -54\nKPX Oacute V -48\n" "KPX Oacute W -25\nKPX Oacute Y -71\nKPX Ocircumflex T -54\nKPX Ocircumflex V -48" "\nKPX Ocircumflex Y -71\nKPX Odieresis A -43\nKPX Odieresis T -54\nKPX Odieresis" " V -48\nKPX Odieresis W -25\nKPX Odieresis X -52\nKPX Odieresis Y -71\nKPX Ograv" "e T -54\nKPX Ograve V -48\nKPX Ograve Y -71\nKPX Oslash A -47\nKPX Otilde T -54\n" "KPX Otilde V -48\nKPX Otilde Y -71\nKPX P A -86\nKPX P AE -93\nKPX P Aacute -86\n" "KPX P Adieresis -86\nKPX P Aring -86\nKPX P J -85\nKPX P a -39\nKPX P aacute -39" "\nKPX P adieresis -39\nKPX P ae -35\nKPX P aring -39\nKPX P comma -138\nKPX P e " "-38\nKPX P eacute -38\nKPX P hyphen -45\nKPX P o -34\nKPX P oacute -34\nKPX P od" "ieresis -34\nKPX P oe -38\nKPX P oslash -35\nKPX P period -138\nKPX R C -21\nKPX" " R Ccedilla -21\nKPX R G -21\nKPX R O -17\nKPX R OE -14\nKPX R Oacute -17\nKPX R" " Odieresis -17\nKPX R T -33\nKPX R U -21\nKPX R Udieresis -21\nKPX R V -49\nKPX " "R W -27\nKPX R Y -54\nKPX R a -21\nKPX R aacute -21\nKPX R adieresis -21\nKPX R " "ae -17\nKPX R aring -21\nKPX R e -16\nKPX R eacute -16\nKPX R hyphen -4\nKPX R o" " -13\nKPX R oacute -13\nKPX R odieresis -13\nKPX R oe -16\nKPX R u -13\nKPX R ua" "cute -14\nKPX R udieresis -14\nKPX R y -16\nKPX S A -31\nKPX S AE -31\nKPX S Aac" "ute -31\nKPX S Adieresis -31\nKPX S Aring -31\nKPX S T -38\nKPX S V -52\nKPX S W" " -31\nKPX S Y -58\nKPX S t -11\nKPX T A -104\nKPX T AE -106\nKPX T Aacute -104\n" "KPX T Acircumflex -104\nKPX T Adieresis -104\nKPX T Agrave -104\nKPX T Aring -10" "4\nKPX T Atilde -104\nKPX T C -53\nKPX T G -55\nKPX T J -108\nKPX T O -50\nKPX T" " OE -44\nKPX T Oacute -50\nKPX T Ocircumflex -50\nKPX T Odieresis -50\nKPX T Ogr" "ave -50\nKPX T Oslash -42\nKPX T Otilde -50\nKPX T S -32\nKPX T V 2\nKPX T W 7\n" "KPX T Y 10\nKPX T a -107\nKPX T ae -104\nKPX T c -96\nKPX T colon -152\nKPX T co" "mma -105\nKPX T e -102\nKPX T g -94\nKPX T guillemotleft -126\nKPX T guilsinglle" "ft -123\nKPX T hyphen -82\nKPX T i -12\nKPX T j -12\nKPX T o -99\nKPX T oslash -" "94\nKPX T period -105\nKPX T r -98\nKPX T s -98\nKPX T semicolon -140\nKPX T u -" "98\nKPX T v -106\nKPX T w -103\nKPX T y -110\nKPX U A -45\nKPX U AE -48\nKPX U A" "acute -45\nKPX U Acircumflex -45\nKPX U Adieresis -45\nKPX U Aring -45\nKPX U At" "ilde -45\nKPX U comma -35\nKPX U m -17\nKPX U n -16\nKPX U p -8\nKPX U period -3" "2\nKPX U r -16\nKPX Uacute A -45\nKPX Uacute comma -35\nKPX Uacute m -17\nKPX Ua" "cute n -16\nKPX Uacute p -8\nKPX Uacute period -32\nKPX Uacute r -16\nKPX Ucircu" "mflex A -45\nKPX Udieresis A -44\nKPX Udieresis b -8\nKPX Udieresis comma -35\nK" "PX Udieresis m -17\nKPX Udieresis n -16\nKPX Udieresis p -8\nKPX Udieresis perio" "d -32\nKPX Udieresis r -16\nKPX Ugrave A -45\nKPX V A -77\nKPX V AE -84\nKPX V A" "acute -77\nKPX V Acircumflex -77\nKPX V Adieresis -77\nKPX V Agrave -77\nKPX V A" "ring -77\nKPX V Atilde -77\nKPX V C -50\nKPX V G -50\nKPX V O -46\nKPX V Oacute " "-46\nKPX V Ocircumflex -46\nKPX V Odieresis -46\nKPX V Ograve -46\nKPX V Oslash " "-34\nKPX V Otilde -46\nKPX V S -44\nKPX V T 7\nKPX V a -71\nKPX V ae -66\nKPX V " "colon -76\nKPX V comma -94\nKPX V e -64\nKPX V g -57\nKPX V guillemotleft -88\nK" "PX V guilsinglleft -84\nKPX V hyphen -44\nKPX V i -14\nKPX V o -61\nKPX V oslash" " -57\nKPX V period -94\nKPX V r -51\nKPX V semicolon -75\nKPX V u -52\nKPX V y -" "28\nKPX W A -56\nKPX W AE -62\nKPX W Aacute -56\nKPX W Acircumflex -56\nKPX W Ad" "ieresis -56\nKPX W Agrave -56\nKPX W Aring -56\nKPX W Atilde -56\nKPX W C -30\nK" "PX W G -30\nKPX W O -26\nKPX W Oacute -26\nKPX W Ocircumflex -26\nKPX W Odieresi" "s -26\nKPX W Ograve -26\nKPX W Oslash -14\nKPX W Otilde -26\nKPX W S -31\nKPX W " "T 11\nKPX W a -46\nKPX W ae -42\nKPX W colon -62\nKPX W comma -62\nKPX W e -39\n" "KPX W g -32\nKPX W guillemotleft -63\nKPX W guilsinglleft -60\nKPX W hyphen -19\n" "KPX W i -10\nKPX W o -36\nKPX W oslash -32\nKPX W period -62\nKPX W r -36\nKPX W" " semicolon -62\nKPX W u -36\nKPX W y -15\nKPX X C -53\nKPX X O -50\nKPX X Odiere" "sis -50\nKPX X Q -51\nKPX X a -27\nKPX X e -51\nKPX X hyphen -57\nKPX X o -46\nK" "PX X u -36\nKPX X y -67\nKPX Y A -102\nKPX Y AE -108\nKPX Y Aacute -102\nKPX Y A" "circumflex -102\nKPX Y Adieresis -102\nKPX Y Agrave -102\nKPX Y Aring -102\nKPX " "Y Atilde -102\nKPX Y C -68\nKPX Y G -69\nKPX Y O -64\nKPX Y Oacute -64\nKPX Y Oc" "ircumflex -64\nKPX Y Odieresis -64\nKPX Y Ograve -64\nKPX Y Oslash -55\nKPX Y Ot" "ilde -64\nKPX Y S -49\nKPX Y T 15\nKPX Y a -100\nKPX Y ae -95\nKPX Y colon -97\n" "KPX Y comma -117\nKPX Y e -97\nKPX Y g -89\nKPX Y guillemotleft -128\nKPX Y guil" "singlleft -124\nKPX Y hyphen -89\nKPX Y i -6\nKPX Y o -93\nKPX Y oslash -89\nKPX" " Y p -63\nKPX Y period -117\nKPX Y semicolon -97\nKPX Y u -73\nKPX Y v -48\nKPX " "Z v -44\nKPX Z y -44\nKPX a j -10\nKPX a quoteright -23\nKPX a v -26\nKPX a w -1" "6\nKPX a y -33\nKPX aacute v -26\nKPX aacute w -16\nKPX aacute y -33\nKPX adiere" "sis v -26\nKPX adieresis w -16\nKPX adieresis y -33\nKPX ae v -26\nKPX ae w -15\n" "KPX ae y -32\nKPX agrave v -26\nKPX agrave w -16\nKPX agrave y -33\nKPX aring v " "-26\nKPX aring w -16\nKPX aring y -33\nKPX b v -21\nKPX b w -10\nKPX b y -28\nKP" "X c h -7\nKPX c k -1\nKPX comma one -105\nKPX comma quotedblright -47\nKPX comma" " quoteright -55\nKPX e quoteright -20\nKPX e t -16\nKPX e v -26\nKPX e w -16\nKP" "X e x -35\nKPX e y -33\nKPX eacute v -26\nKPX eacute w -16\nKPX eacute y -33\nKP" "X ecircumflex v -26\nKPX ecircumflex w -16\nKPX ecircumflex y -33\nKPX eight fou" "r -6\nKPX eight one -55\nKPX eight seven -43\nKPX f a -20\nKPX f aacute -20\nKPX" " f adieresis -20\nKPX f ae -15\nKPX f aring -20\nKPX f e -21\nKPX f eacute -21\n" "KPX f f 12\nKPX f i -10\nKPX f j -11\nKPX f l -12\nKPX f o -18\nKPX f oacute -18" "\nKPX f odieresis -18\nKPX f oe -20\nKPX f oslash -16\nKPX f quoteright -8\nKPX " "f s -8\nKPX f t 16\nKPX five four -7\nKPX five one -83\nKPX five seven -32\nKPX " "four four -3\nKPX four one -88\nKPX four seven -65\nKPX g a -17\nKPX g adieresis" " -17\nKPX g ae -13\nKPX g aring -17\nKPX g e -11\nKPX g eacute -11\nKPX g l -8\n" "KPX g oacute -8\nKPX g odieresis -8\nKPX g r -9\nKPX guillemotright A -58\nKPX g" "uillemotright AE -62\nKPX guillemotright Aacute -58\nKPX guillemotright Adieresi" "s -58\nKPX guillemotright Aring -58\nKPX guillemotright T -132\nKPX guillemotrig" "ht V -96\nKPX guillemotright W -68\nKPX guillemotright Y -137\nKPX guilsinglrigh" "t A -52\nKPX guilsinglright AE -56\nKPX guilsinglright Aacute -52\nKPX guilsingl" "right Adieresis -52\nKPX guilsinglright Aring -52\nKPX guilsinglright T -126\nKP" "X guilsinglright V -90\nKPX guilsinglright W -62\nKPX guilsinglright Y -131\nKPX" " h quoteright -19\nKPX h y -31\nKPX hyphen A -12\nKPX hyphen AE -17\nKPX hyphen " "Aacute -12\nKPX hyphen Adieresis -12\nKPX hyphen Aring -12\nKPX hyphen T -86\nKP" "X hyphen V -51\nKPX hyphen W -24\nKPX hyphen Y -97\nKPX i T -16\nKPX i j -10\nKP" "X k a -14\nKPX k aacute -14\nKPX k adieresis -14\nKPX k ae -12\nKPX k aring -14\n" "KPX k comma -13\nKPX k e -33\nKPX k eacute -33\nKPX k g -26\nKPX k hyphen -49\nK" "PX k o -30\nKPX k oacute -30\nKPX k odieresis -30\nKPX k period -13\nKPX k s -14" "\nKPX k u -22\nKPX k udieresis -16\nKPX l v -11\nKPX l y -15\nKPX m p -3\nKPX m " "v -24\nKPX m w -14\nKPX m y -30\nKPX n T -103\nKPX n p -3\nKPX n quoteright -19\n" "KPX n v -24\nKPX n w -14\nKPX n y -31\nKPX nine four -12\nKPX nine one -55\nKPX " "nine seven -50\nKPX o T -106\nKPX o quoteright -23\nKPX o t -17\nKPX o v -27\nKP" "X o w -16\nKPX o x -35\nKPX o y -34\nKPX oacute v -27\nKPX oacute w -16\nKPX oac" "ute y -34\nKPX ocircumflex t -17\nKPX odieresis t -17\nKPX odieresis v -27\nKPX " "odieresis w -16\nKPX odieresis x -35\nKPX odieresis y -34\nKPX ograve v -27\nKPX" " ograve w -16\nKPX ograve y -34\nKPX one comma -82\nKPX one eight -73\nKPX one f" "ive -72\nKPX one four -88\nKPX one nine -71\nKPX one one -125\nKPX one period -8" "2\nKPX one seven -98\nKPX one six -71\nKPX one three -75\nKPX one two -78\nKPX o" "ne zero -71\nKPX p t -10\nKPX p y -28\nKPX period one -106\nKPX period quotedblr" "ight -48\nKPX period quoteright -56\nKPX q c -2\nKPX q u -5\nKPX quotedblbase A " "21\nKPX quotedblbase AE 21\nKPX quotedblbase T -80\nKPX quotedblbase V -74\nKPX " "quotedblbase W -39\nKPX quotedblbase Y -96\nKPX quotedblleft A -58\nKPX quotedbl" "left AE -70\nKPX quotedblleft Aacute -58\nKPX quotedblleft Adieresis -58\nKPX qu" "otedblleft Aring -58\nKPX quotedblleft T 1\nKPX quotedblleft V 10\nKPX quotedbll" "eft W 22\nKPX quotedblleft Y -1\nKPX quotedblright A -60\nKPX quotedblright AE -" "72\nKPX quotedblright Aacute -60\nKPX quotedblright Adieresis -60\nKPX quotedblr" "ight Aring -60\nKPX quotedblright T 2\nKPX quotedblright V 9\nKPX quotedblright " "W 21\nKPX quotedblright Y -2\nKPX quoteleft A -74\nKPX quoteleft AE -86\nKPX quo" "teleft Aacute -74\nKPX quoteleft Adieresis -74\nKPX quoteleft Aring -74\nKPX quo" "teleft T -14\nKPX quoteleft V -5\nKPX quoteleft W 6\nKPX quoteleft Y -17\nKPX qu" "oteright A -76\nKPX quoteright AE -88\nKPX quoteright Aacute -76\nKPX quoteright" " Adieresis -76\nKPX quoteright Aring -76\nKPX quoteright comma -68\nKPX quoterig" "ht d -25\nKPX quoteright o -31\nKPX quoteright period -68\nKPX quoteright r -24\n" "KPX quoteright s -23\nKPX quoteright t -14\nKPX quoteright v -10\nKPX quoteright" " w -5\nKPX quoteright y -14\nKPX r a -16\nKPX r aacute -16\nKPX r acircumflex -1" "6\nKPX r adieresis -16\nKPX r ae -11\nKPX r agrave -16\nKPX r aring -16\nKPX r c" " -11\nKPX r ccedilla -11\nKPX r colon -31\nKPX r comma -77\nKPX r d -8\nKPX r e " "-17\nKPX r eacute -17\nKPX r ecircumflex -17\nKPX r egrave -17\nKPX r f 17\nKPX " "r g -8\nKPX r h -8\nKPX r hyphen -54\nKPX r i -6\nKPX r j -6\nKPX r k -2\nKPX r " "l -7\nKPX r m -9\nKPX r n -8\nKPX r o -14\nKPX r oacute -14\nKPX r ocircumflex -" "14\nKPX r odieresis -14\nKPX r oe -16\nKPX r ograve -14\nKPX r oslash -14\nKPX r" " p 0\nKPX r period -77\nKPX r q -10\nKPX r quoteright -6\nKPX r r -8\nKPX r s -4" "\nKPX r semicolon -30\nKPX r t 21\nKPX r u -7\nKPX r v 18\nKPX r w 21\nKPX r x 9" "\nKPX r y 15\nKPX r z 0\nKPX s quoteright -24\nKPX s t -15\nKPX seven colon -84\n" "KPX seven comma -123\nKPX seven eight -34\nKPX seven five -37\nKPX seven four -9" "5\nKPX seven one -58\nKPX seven period -123\nKPX seven seven -11\nKPX seven six " "-44\nKPX seven three -29\nKPX seven two -31\nKPX six four -7\nKPX six one -52\nK" "PX six seven -40\nKPX t S -17\nKPX t a -10\nKPX t aacute -10\nKPX t adieresis -1" "0\nKPX t ae -7\nKPX t aring -10\nKPX t colon -37\nKPX t e -22\nKPX t eacute -22\n" "KPX t h -14\nKPX t o -19\nKPX t oacute -19\nKPX t odieresis -19\nKPX t quoterigh" "t -7\nKPX t semicolon -36\nKPX three four -9\nKPX three one -57\nKPX three seven" " -45\nKPX two four -43\nKPX two one -45\nKPX two seven -38\nKPX u quoteright -14" "\nKPX v a -30\nKPX v aacute -30\nKPX v acircumflex -30\nKPX v adieresis -30\nKPX" " v ae -25\nKPX v agrave -30\nKPX v aring -30\nKPX v atilde -30\nKPX v c -22\nKPX" " v colon -32\nKPX v comma -76\nKPX v e -29\nKPX v eacute -29\nKPX v ecircumflex " "-29\nKPX v egrave -29\nKPX v g -20\nKPX v hyphen -19\nKPX v l -8\nKPX v o -25\nK" "PX v oacute -25\nKPX v odieresis -25\nKPX v ograve -25\nKPX v oslash -25\nKPX v " "period -76\nKPX v s -17\nKPX v semicolon -31\nKPX w a -26\nKPX w aacute -26\nKPX" " w acircumflex -26\nKPX w adieresis -26\nKPX w ae -22\nKPX w agrave -26\nKPX w a" "ring -26\nKPX w atilde -26\nKPX w c -14\nKPX w colon -32\nKPX w comma -57\nKPX w" " e -20\nKPX w eacute -20\nKPX w ecircumflex -20\nKPX w egrave -20\nKPX w g -13\n" "KPX w hyphen -8\nKPX w l -8\nKPX w o -17\nKPX w oacute -17\nKPX w odieresis -17\n" "KPX w ograve -17\nKPX w oslash -14\nKPX w period -57\nKPX w s -14\nKPX w semicol" "on -31\nKPX x a -30\nKPX x c -30\nKPX x e -36\nKPX x eacute -36\nKPX x o -33\nKP" "X x q -28\nKPX y a -36\nKPX y aacute -36\nKPX y acircumflex -36\nKPX y adieresis" " -36\nKPX y ae -31\nKPX y agrave -36\nKPX y aring -36\nKPX y atilde -36\nKPX y c" " -28\nKPX y colon -40\nKPX y comma -80\nKPX y e -35\nKPX y eacute -35\nKPX y eci" "rcumflex -35\nKPX y egrave -35\nKPX y g -26\nKPX y hyphen -24\nKPX y l -14\nKPX " "y o -31\nKPX y oacute -31\nKPX y odieresis -31\nKPX y ograve -31\nKPX y oslash -" "30\nKPX y period -80\nKPX y s -23\nKPX y semicolon -40\nKPX zero four -11\nKPX z" "ero one -56\nKPX zero seven -50\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n019023l_pfb_len = 38314; char* n019023l_pfb = "\x80\x1n\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-ReguItal 1.05\n%%CreationDate: W" "ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme" "nt\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COP" "YING (GNU General Public License) for license conditions.\n% As a special except" "ion, permission is granted to include this font\n% program in a Postscript or PD" "F file that consists of a document that\n% contains text to be displayed or prin" "ted using this font, regardless\n% of the conditions or license applying to the " "document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) re" "adonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See" " the file COPYING (GNU General Public License) for license conditions. As a spec" "ial exception, permission is granted to include this font program in a Postscrip" "t or PDF file that consists of a document that contains text to be displayed or " "printed using this font, regardless of the conditions or license applying to the" " document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by" " (URW)++ Design & Development) readonly def\n/FullName (Nimbus Sans L Regular It" "alic) readonly def\n/FamilyName (Nimbus Sans L) readonly def\n/Weight (Regular) " "readonly def\n/ItalicAngle -12.0 def\n/isFixedPitch false def\n/UnderlinePositio" "n -151 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusSanL-" "ReguItal def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-178 -284 1108 953} rea" "donly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly d" "ef\n/Encoding StandardEncoding def\n/UniqueID 5020908 def\ncurrentdict end\ncurr" "entfile eexec\r\x80\x2\x14\x8d\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a" "\"\xc3[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9c" "t\xb4r\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4" "\x19\xff++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5" "Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d" "\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7" "\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>ni\xcb\x85\xd4" "\x8bZ'p\xc8\x41\xe1\xcf\x6\x95\xf4\x9c^\x87\xb\x15\xf5\x17s\x15\xa8IN\x13\xc9\xcf" "\x8c\x64wuNP\xa6\x98\x5t\x15\xa2\xbf\xf\xdd\xc8\xdd\x1\xd8t\xd4x\x1a\x1f\xdc\x9c" "\xda\xe0\x9d\xea\xdav\x1d.\xb5M\x83\xcb<*\\\xcc\x92\xefz\xe\xa2Ux?\xd4yu\xb8\x98" "\xc4\x36\x91\xc7\xd4\xea\xday\x85\xd1\x46\xff\x18\xa1\xc9\x9.\xe4;Z\x1b\xf\xfd\x11" "\xea\"(\x1d\xd0\xd0\x8a;\xac\x19\x9S{\x98*\x8d\n\xef\x2\xe3R\x13-\x17\x41\xbf\x13" "\\\xca\xee" "\xe\x33-\x80\x88O8\x94\x34\x14s\xa9[\xeb=YM|\xe2\xd4\x7\x8c\xcbG\x89\x91\xc0\xcf" "x\xf5\x83R\x96\xfa)3g\xa3\x1c\xc2w\x88O\x5<\x92p9\xdbSB\xd5\xa8\xfe\"\x41\xbf\xfb" "i\x7f\x2\xcd\xa4\x35\xd5\x34\xe8\xcc\xc4I\xf4`2\xeaZ\xd9i#\x6\x1c\x38^\x94\n\"\xc5" "\xd1\x37l\xf2\x7f\xa0Q\x12\xaa\x12\x7f\x5\xff\xbfI\xeb\xcd\x8c'\x9d.\xafg\xe6\xc4" "\xad\x93Ju\x15\xba\"\x90\x12\x6\x5\x42\x66_\x8\xd5\xf2Y\xbe\xed\xbb^\x97\xd6\xe3" "\xca\xe7n\xcb\xf3\xdb\x1\xac\x65>\x7\xa9\"\x3}\\\xe4\x81\x9e~\xb4\xe4\x38\xcd\x98" "\x9e\xb1\x64W;\xa0\x63m\x16\xe8\x9b\x41\xce\xd7\xab-\xd7\xacL\xf7t\x92\x82\xddH+" "\xe5\x99\x38`|c&\xd2\xd9\xb8R\xcao\x98\xe3\xfe\x43\xe2\xaf\xdf\xd6\x9\xe7]vt\xf5" "\xa9\xf3\x66\x63Q\x9aJ\xba}\x4\x5X\xc8\x80\x1c\x2H=)\x86\x81@\xc6\x2\x5\x19\x43\x11" "\xce\xbc\xee\xff\xa2_\x1f\x9b\x92vM\xa9rI\xcc\x8e\xec\xefu\x92\xd3\xf3\xff\x63\xf0" "\xc8\x43t\xc\xa9I\xd5\x90N\x85\xc4\x2r\x90\x30\x80\x99-aJN\x89\x5U\xdc\xdc\x19n\xbd" "\xbb\xcX8\xdb|\\\x86\xc3\xfa\x35\x63J\xfe\x3\xdd\xf7[I\xf4\x97\xce\\\xf8@\xc6\xdb" "V\xf0\r\xba\xda\xb0\xa3\x3N\x9c\xae\xa6&\xe5t\x80\x1\xebP\x8aup\x18|\x89h\xc9\x1d" "\xd8\xb2\x33\xf\x36\r\x42\x8d?\xcc\x93w\x18\xc\xd3z\x8bR\xfc\xdc\x43\xd7\xd7\x85" "\xf9\xfR\xa8@\xf2|\xda\x99\xe0\x9f\x8e\xef\xbe\x8\x64|\xf2\x37\x98\x61\n\xd2\xe6" "\xc\x9c\xa4%\xf3\xc0.W\x10mC\xce\xcX8\xed\xbe\x10\xeb\xd3\xfe\x9ay\x9d\x14 o\x4\x43" "\x8b\xc4Z\xcd\x43\xd7\x7f.\x80\xe6\x8e\x1b\xe6\x98\xef\xde\xd5\x80\xea`\xa3^\x9f" "7U'\x9d\x43\x89p\x87G\x81~\xf7\xf9h\x7f\x33\x31\xea\xcb\xe1\xd3\xf0&R|\xe\"\x3U\xd6" "F\xf0\x0\xe3\x30\xd3\xb7\xdd\xe9\xc8=\xd4\xc8\xacLv\xd5\xef_Z\x4\x6\x9a^k\xce\x65" "?\xbc*\xca\x8f\xeeI\xa6+\xc6xv\xe4@Bn\xa8\x99\xd3\x9a=\xa7^\xb0\x93Gk(\xf8\xb4\xb9" "h\xeb\xca\xbb\x8a\xb1\x8c\x99Q+\xda\x16\x15na\xe6\x46\x6\xbd\x96\xd7\xa4\x85\xaf" "\x91\xc5\x39x\xd0\x43\x1f\xe0n\xc8\xf2\xe0\x9en\xc4\x63\x1b\x1bu\xf0\x1a\xd0\x1d" "\x91P\x3\xc8\x85\xe5w\xe9\xa4\xf9~\x97\xb7i\x91\xfbph|\xd6\x97\xf7\xe0q\xb8\xb9\x1f" "\xbf\xd4w\xc5*\xf2\xc0UW\x95.Zx\x2\xfe\xff_:\x16T\xbay\xd8\x80\x92\xe0\x15Y\xf1\x84" "\xa9U?\xe1H9\xa3\x64\x89\xcc\x65\x43\xaa\xcbs\x82X(!u\xc0\x85\xa8\xcd\xfd\x6\x65" "\xdd\xc7/\xe8\x37\\\xb9?\xc5)\x14\xa6\xdfs\xa7X\xae\xc4\x31HA\xca\x88\x82\x8fi\xc2" "`\xc6p\xd5\xeb[\xe\xe8\xbbw\x80\x9c\x1c\x1a\xddt[\x2\xa7\x91\x15\xf3\x9f\x8a\x92" "\x87 ?\xce\x98\xe0|." "\xacz\x80\x1f\xbe\xe4\xc7&\x8\x1d\xef\x32$SK\x17\x4\x17\xf3\xc2.o\xba\x8e\x9b\"r" "\xdd)\x98\xf5\xdb:\xd1\xa2\x16\xf\xac\xd7\xaf\x4\xd3\x8\x91\x17O\x96\x15\xc3\x93" "k\xd4\xf\xf1Gh*\xa7\x8d\x1Z\x4\x8e\xa8\xa5\xbd\x31\x10X_n\x91\xb4\x8@\xa0\xca\x36" "\"P\x97~ :\x8f\x94^\x88\x3\x66\"\x99O\xda$\x0\xae\xea\xbb\xb2>\xc9x\xbdw\xae\x1d" "m\xf8\x82\x61\x87\xa6\xacmA(\x12\xccn\xd7\x99\x8a\x1b:GkFyab\x0^~\xa6\xbd\x1f\xb8" "$\x11\xec\x61\x35\x43G\xa0\xf6\xed\xa7|\xb1\x0\xb1\xd6\xf2\xce\xa9\xcb\xaeW66\xa8" "\xaf\xb1<\xbes\x2\x8\xc\\?s<\x96\xa4\xea\xe2\x1e\x64\x39WD\xf0mg\xbb\x9d(\xcb>Z\xe8" "1\xb3\xe7\x9f\xf3k\xb5\x66\xd3\x9f\xf1~\xe2\x1d$\\\x98\x35\xb9\xfe\x8fv\xf5\x5\x2" "\xcc|\xe\x31\xd8\xfb+\xf\x91\xf6\xe4z\xcd#\x83V\xcc\x12\x89`\xdf\x38\x13\xfe\x12" "\xa2\x42\x86\xb7\x8a<\xa5\xa9J\x88j\xbe\xa0\xedp\xbd_\xed\x0\x19\xdd\xaaRz-\xd1\x44" "p<\x7fM\xd8[\xfaO\xe8ji\xe4\x87\xe3\xdc\xaa\x8e\x44XW<\xfd\x8e G%\xeb\xfb\xcf\xc7" "6\x5\x9di\xf6\xb8\x65}\xbb\xb9\x34<]\x9b&\xa3\x8d\xe6\x32\xcb-\x8e\xa1\x93h\xf5\xbe" "\xec\xc3\xdd*=U\xa9\xd8\x1f\xbf\x62\xcc;\xd7Y\x6\xe8\\\n\x1c\xaaPj\x10\xd1XuZ\xfa" "U\x88\xbfI\xcc\xf9\x14yy+\r3\xed\x3]n1T\x95\xe2\xd6\x86\xe2\x42\xf8=\x93\x0g\xba" "\xd2\x37\x9e(Q\xf1\x1b\xd0\x65\x15\x13\xe8l\xaa\xb7\x96\xd7?\xa1y5\xb1\x8fRT\x1c" "\xda\x96\x3g7\xfdZH\xc7\xd9W\xbe\xaf+\xfd\xc1\x90)\xc7\x88mo+\x1c\xb3\x46/\xce\x34" "\xb1\xe9\x1c\xb0\x33\xc2w/\xf6oF\xdb\x8fi\xd7l;\xbb\x42\x9a\xd5\x35\xe3\\T\xa2L\xc5" "\x97\xb3\x95\xdf\xc\xac\xa6\x17\xc8\xe7\xe7\x9a\x99\xea\x44\xe8\xee\x46o\xc1\xa1" "\x83\x94t\\\xc0&D0To\x99;un\xce\xe7Z\xf6\xdan\xe3\x38\xff\x1ck\x9a\xdc\xb\x8b\x8" "\x2\x2\xce\xe9\x84\xedt\xb0S\xfb\xc6\xa8-\xd0\xea\n\xd9\xa9\xfd\xf5\xe2i\xb0h\xf9" "uh*\xe3]F\x3#y\x89\x96\xdc\xd3\x36\xd8\x8\xc6L^f\x1b\x88?\xed\xcf\x10\x10\xb3v\x8" "\x98\x18\x43\x39g\xba\x45\xaa\xde\xea\xc7\x41\xbdh\x1d\xfe\x98\xa3i\xab\xf2\x90\xae" "v\x8b\x62\xba\xce\x11\xae\xccps\xec\xf3*S*\xf4:\x85S\xf\xf0\x93p\x95\x88\x84\xee" "#\r\xc1[\xb0\xcaY\xa5\x9d\x93`\x8e\x66\xa6\x9b\\Vo\xc9\x8f\xae\xe2\x66|\xfe\xfb\xd6" "\xaf\xaf.|\xd8\x1a\xec\x92\x8f\xc1\x18\xf2\x14\xb5\xb5\xac>Mx\xe1\xc7Tp\x87h\xa5" "\x85\xf3\xf8\xac't6\xf2\x96q6\x7f'q\xbc\x16\xef\xfe\xaf\x9e\xe9!\xec\x33!}\xc3~\x8e" "\\:\xd3\x1b%\xb0P\xf6\x95\r\x8b\xf9l\x95\xe6j\xab\xf6\xc8\x9\xf7\x89\xed\xafVv4\x97" "\xac\xe2H'\x96\xf7\xfc\xf5\xdaO\x96\xe2\xa7\xfeW\xc0*\xbd\xa5\xf4\xda\xb6\x81\x1b" "\x10'\xfd\xa8\xec\xe0\xeb\xb0\xdb\x80\xa3\x92\x11~)_\xa4\x87\xba\x99#V\x1d\x95\x9d" "\xa5\x34\x85{\x9d\xa3\x66\n\xac\xd8wB\x1\xb6\x43\x9c\x6\xdc\x36\xe7\x1a\xdb\x99\x0" "\xd2\x9c\x5\x37\xdd*\x0z\x18\xae=\xe9\xb5*\xca\x92\xfa\r\xf6\xc\xa4\xd9\xb0K\x97" "o^\x9c\x82$l\x7f\x99/N\xdc\x12q^;\x92I;\xb6\xf3\xe1.\xd3\x91\xcd\xed!DN\xe3r\xba" "W\xa5\xa8\xc7\x33\xf7\xf5\xedV\x93\x1f\xf5\xdbo\xa0/e\xfa\x1f.\xec<\x1cT\xa7\x5\xae" "C\"\xbf\x90;d\xd1-\xa9\x4vqO&>\xaf\x11\x81\x3\xce\x8a\xfc\xec\xfa\xef\xc|\xb9\xe2" "\xa7`\x14*\xbfVK\x90\x8{\xcb\xc8\x83\xd6)j\xe7k\xecK\x0\xb4\xf8\xe0m\x9fG]\xb8\x8a" "\x90\\\xbaH\xd7,\x92\x8fT\x9f\xbd\xf1\\\x33\x0\x1c\xb6k\xbb\x9f\x83\xe4\xb0\x65\x1a" "\xe5\x16\xae\x1d&\n%\xe7\xc6\x9e/\xf7|'=a@\x9c\x9b\x92/\xe6\x9c\xc9\x61\x17\x44\x65" "\x9f\xb4\x30\xfcu\xa1\xc\xb5\xd8\x84\xb9\x36\xa0-\xc1\xed\xc5x\xf2=i\xd3s\xe2\x42" "\x98\x82!:\xa7\xee\"\x19\x87\x14({\x87\xd0\x9ft\x9\x10#$\xa9\xc6\x9a \x9c\xc\xe9" "\xf9N\x19\xa8\xd4\x96\x99\xb5v\xf7\x8cR!\xe4\xbf\xc0\xd9\xa8U\xf2\xfc\x65V\xc1\xcc" "j\x1c\x88\xea\x84\x85\x90\x66\x0.\xa3\x13.\xb8\x46\x19\x4\x13\x19\x32h\xdc\xc4\x81" "\x9a\xc6\xc\x8a\x32\x5\xf2R\xd2\xfdt_Z\xc0}|\xd3S\xd9\xa6\xbb\x1b\x9\xd5\x96\x1a" "\xf8\x86K8\xb\x37\x88\xbm]\xc2?_\x9d\x11~\x8\xc4j\xee\x9a\xe9\x63qy\xc8$\xefw\xc0" "\xcaR\xb7\x16k\xbe\x82WJs\xde\xf8\x9c\xe3/\xc2\x64\x95\"\xb0\xf5\x98\xbf% \xeb\xe2" "\xeb\xfcV~o\xb4j\x8a\xdc\x37\xe6\x14\xd3\xcc\x30i\xbeh\x89\x9b\xaclY[3]0\nGZ\xa9" "\xf5\xf7\xc6\xbd\x0j\xbc\x86*F\xa9\xac\x10\xb5\x5\xf8\x36\x44\x1d\xb7\x32G\x82\x14" "\xa4\xaa\x87\xd2\xd2K\xb3Mt\x90\xf6\x34\xf0\xb7\x98\xb1nV\x17\x39\xa7\xce\x66\x9" "\x80\x8e\xc\x31\xa5\x89\xd0p\x94'\x92\xdf\xe0\xa9\x13\xfc\x45\x10\xf9\x62\xc2\xe4" "\xe8\xd1\x30\x82\xb4\xfcT\x9f\xaa\xc0O\xbf\xbe\x3\xb5'A\x88\xab\x1\x9\xe9\x10\xca" "gpg\xd5\r\xedqP\xb3I\x16u\xf5z\x1c*\xc7u\xf5\xed\xbf\xa7h\xf6\xdf\x34\x9an\x9a\xd2" "\x1a\xd8\xd8\xa3\x85\xa8\x98\x9b\x84\xdc\x89\x45t\x96\x89\xf4\xd0\x44t\xac\x97\x65" "2\xe\xc7\x37\x7f~\xbd%\xe5\xd0\xf7\x32\x17\x90\xc4\xf1\x9a\x9\x99\xb9@\xeei\xd4$" "LK-\x15\xf8\x8e\xeb\xf8\xdf\xc3 )\xfe\x35\xb9qr%5\x8\xa2U\xc6\x65\xfc\x10\xe1\xa8" "P\x19T\xd2:\x10\x34\xb0\x9f\x44\xb2o\xb3`\x8e\x44\x95Y\xf4`&'\xcav\x86\x8f\x64\xc8" "\xf0I\xce\x8a\x41\x86\x35\xe7\xb\xbc\xb4w\xb9O\xac\xfd\x9d\x61[\xbb\x16\x39\xb0\xc8" "Sa*3\x7G\xa5ww\xa9)L\x97#\x92\x99\xff\x9foU\x93!n\x95o&\x85\x3 \xdf\x8a\x88\xa8\xa0" "\xc8\xde\xd0\xc3\xfd\x90\x9f\x2\x39\xf1\xc5\xbf*\x82Mx\xe9x)\xcd\xba\x30_\x9b\xb6" "\x8\x7~\xff\xca\x86\xd4\xfd\x42y\xb9\xc9\x35\x91\xb9\x82\x31\\\x19]\x11\x1dN9\x95" "r\xcaQ\xea\\\x1\x94_3\xba\xbd\xd6\xfbJ\x93\ny\xa4\xa6\x66I*F\x18\x83Y\xf9~\xca\x32" "6q\x87QL\xe2\xe2\xfe\xa2\xc4\x1a$xV#h{&\xe6\x1c\xf7\xca\x45\xe5\x91\x9a;6f\xad\xe0" "f41`35X\x8f\x8e\xa3I\x2\xa8i\xc7\x63\xe8z\x7fJ\xb1\x64\"\x1f\xc6\xe5\xb\x15|\xf7" "\xd7\xff\xd0\xaaK\x9c\x92h\xf7\xa2\xc3\x6\x19V3\x11\xcaN\xb2\xc1sW\xd4\xe1\x15OS" "\x13c\xa7\xc4\xa5]\xb3\x86\xb6\x97\x5^+`\xfa\xb9" "\xb4l\xf2\x44\x43\x9c\x87Q\xa1\xdc\xf1\xad\xb9\x63UA]\x8blB\x6\x65*\x97\xfH\x7f\xc4" "\xe1\xd6I\x12\x9cs\xd0\x9c\xc8\x35y\x95(F\xb0\xad\x9e\xc\x62\xe\x4\x11^b\xa8`\xc7" "|\xdf\xc3\xfb\xc3:\xd2@\"\x8c(\xda\xe2\x1c\xbf\x90 ?&$\xe6\xcd\xd6.\xb5\xbc\x84\xb" "\x87\xf9\xfdPQ\xb3\xd7\x43\xaf\xef\xd9\x90\x13N\xabj\x8a\xf8\xdb\\\x1\xf9\xaf\xf0" "\xf1\xd2\x96@\x14)\xf4Y\x8f\xda\xa4\xc~\xf\x99\xeb\xb0\x34\xa9|B\x8a\x39M)]-\x97" "\n$}\xda\x61\xe5\xf0+\xe2\xb8\x8e\x1L\x9a${\xc3\x42\xef\x8\xa6\x92\x7f\xc8k\xe1\x99" "\"\xb5~\xb3P\xde\xc0i\x8f\x8b\x9fH\x7fWY\x81\x5\x1c\x83\x30\xed\xc6\xdd\xe9\x39\x38" "p\xbb\x37@!\xf9\x82h\xdcx\x81\xc1\xfb\xa6/\xe3\x46\x1b\x85\x92\xaa\x34\x1\x1c|\xd3" "\xf2\xb9\xab\xdd(\x11\xdd\x91\xeb\xa0\x1b`\x1Z\x15\xeaLg\xc3\x64\x9b\xe9X-\xec\x41" "\x1d\x12M\"#\x9\xf5\x1cw\xb5\xed\xc2\xc8\xfe\xee\x19\x90tCU\xfe\xb1\x9f\xd7\x0\x7" "\xd0w\xb7\xc2\r\x85\xc6\x8bw\xd0\x42\xf7\x9czlC\x8\xdc\xab;+}#>\x1bY9z\xd3\x8\xc7" "\x9a\x18\x89\x7f-\xbdJ\xac\x34_ \xb2\x1e\xcf\x83\xe0\x14L\xd6\x91\xb6m\x9\x64u\xb9" "\xf1\x95\xa0\xf1\xc4\xe9\xbd\xc4\xa2\x1a\xef\xdb\n\xa2\x91\x86\xbc\xc0xV\xc9\x9e" "t\xdd\x32\x7f\xf9\xe2\xdfn~-\xbd\xf1\x90?\xb4-\x9c\x18\x9e\x46\x95\x62W9\xfc\xe9" "\x9b\x64\xd5o\xa5\xd8\xb6\xa7\xd6w\x9f\x8\xb8#\rB\xf7\xc4\x9e=\xea\xcc\x66\x1d\x6" "\x82\x8d\xce\x13\xd4\xfbrz\xdaJ\xef\x42gt\x9f\xbd\xf5_JeFGx\xe5\x80\xf3\xc9\x1b\x81" "\x87?P\x84t\xf\xcf\xcd\xef*\x8b\xe0*Jk\xfa[\n\xba\xfI>?\x0\"W\x99v\x9e\xed\x4\xe8" "\x0T\xbe\xa0t\x96)\xf8]\"\x90S7\xa7\xf%\xf5\x9c\xd3\xff\xdf\x89L\xaaJ\xd7\xbb\xb0" "\xf2t\xb8\x1e\x8c\xdf\xd1\xb9#+#\xd9_\x6\x82P\x16\x9\x1b-\xcaX\xa4\x5\xec\x61Z\x2" "\xf7\rQL\x9\xd6\x8e\x80\xd1T\xe0\x95]\xf1\x1e\x36!\xb6\xf7\xcfJ\x14\xd8!E\xbd\xfb" "\x16j5#cu\xc3\xb0S%7\x2\x39\x12-\x7\x90\xfc_\xc1\xe3R\xe7\xf6lt=\xeb\xb9`\xe4\x8d" "\xf9\x6SW\xb8J\xebi\x81\x36\x9fs\xael\xd3kg\xe1\xe+U3ex\xb9\x86K@\"bj2\xb6\xe4\x18" "I\xe0\x31\x8e\xc4qn\xfb\xd5\x1f\xbd\xaf\xe1\xe5\xc9\x65\xdf\xc8\xe8\x18\xbb\xf2l" "\xe3\xbc\xc5\xe8\xf\x14\x33\xc3\x3\x8b\x97\xde\x96\x8\x96\x44 4\xd7\xd7\xbb\xa9t" "\xf2\xbd\x1e\xf3yq(\xcd\xf1\x2%\x8eX\x18\x4'\xcck\xde\x16j\xce\x1c!\xd0r\xf4\xaf" "~\r\\\x9b|=k\x91\x83\xf1\xdb\xd8\x43\xe6\xe8\x3\x30'}m6\xd1\x39X\x10\xd6\x9f\xc7" "?l\xca\x39\x8?\xf2\xcb\x39P\x13\x9\xa7\xf3'n\x8\xa3s\x96\x33\xdb\\\xbb\xa6\xe6G\xd5" "tA\xba\xea\xbe\x84\xb1N\xcb\\\xc4\xf7\xec\x18*\xca\x15\x43\x34\xef\xbf\xa8p!HR|\x15" "\xd1\xcb\xee\x9a\x5}\xca\xa4\xf1\xc\xe)\xc]r>]\xa4\x7f\x36\x95\xa5\x9d\x4\x19\xeb" " -$\xb6*\xe8ph\xc8\x97\\\xd8\xb8\xae\\G\x0\xa6\xea\xba\xda\x9c\xcaO\x9aPW$6\xec\x34" "\xd7\xd3\x16\xf0\x1d\xb5\x4'\xec\x7fyO7;\x93\xed\xaf+\xd2\xd3/\xd9< \xcd\xbe\x95" "\x96\x97\x66r_\x88\xbf$\xf9\x99\x16\x1cI*M\xb9\x31~\x11\xe7%\xd7\x33\xd1\x97\xd5" "\x8f\xd4\x16YGH\xd7-1\xc8>\xbb\xfa\xcfO\x6TVF\xf8\x41\x98\xbd\x12\xd7Y\xa1\x17\r" "\xa0\x7f,\x1f\x36\x37\xd4\x8c\xaf\x8a!\xf1\xc5\x11)' \xf5\xe1\xe5\xad\x63\x2i\xf3" "-\x81zGv\x86\xba\xf4\xc5\xc8\xdf#\xad\xbe\xbbk\x9f\x7fW\xe3\xb5\x34\x42\xbe\x8T8" "\xeeL\x8fK2I\xcf\xb0r\xf2\x13\xe5\x66\xafN\xcd\x34\x34\x61\r;\xb1\x33\x80\x33\xaf" ">\xca\xf0\xd4n\x7f\xc3\xe1\xe7#P\xdd\xcf\x4p\x1\xf0\x7\xf3,\x80\xb3\xe0\n`(`_\xfd" "|\xbf'\xa7\x8e\xc0\xff\x9e\xa0\x31\xf8\x34@\x11\x4\x90\xcaXj\xbc\x9e\x1e\x36\xb2" "\x88S\xde\xeb\xb0\xc4\x66\xe1\x43\xb0\x41\xbb\xbf\xcf\x9b\xf8\xc5\x18~\xd1\"\x7\x17" "\x1dxc\x89\xe8\x9c\xae\x5\xea\x13\x14\x96\xe1\xbJ\xc4{zR\x6\xf\x2\xc0\xacw\xa0\xd5" "\x89Q\x84\x33\x84x\x19\xee\x7fm\xc5\\\xfG\x5\xeb\xca\xd5\xc6\x1e\xa4\x93.<*\xeb\xe1" "s\xf2\xbb\xc0\xce\xaa\xbc\x63\xcdX\xe7H@3\x4\xad\xd9\xe7\x8e\xd4xYA\x81\xbb\x8a\xd7" "\xfd\xb6\x37\xf9\x1b\x92U$\xb\xbc\xe9\x43\x15v\x5\x14$\x1\xb3\xce\xa0\x39\xdf\xb0" "\xf7\xe2\xc3\x7f\xb8J\x1f\x83\xb1s\x5\xbe\x3\xb0\x9f\x33\xf0_\x9e\x45q\xc4\x66\xaf" "\x19\xfd\x1d\xda\xbd\x84\xa5\x7KX2\x2\xcc\x39\x95\x2|\xf6\xfc\xf6l(\xe1\xa2`Jr\xff" "\xc6\x98\x2@\x6\xe4\x46\x61(\xf\xf8\x99+_\xee\x92\x30\xf5vYL\x8b\"\xdbi\x3\xcb\xa0" "\x8c\x10\xb2M\xab\xa9\xbc\n\x35\xcc\x61\x89\x10K\xedP\xfa[\x7f\x11\xe4\x34J\xbc\xf" "g{\x9b\xc0i\xa8\xbe\x8f\x82r'\x1f/>>\xc0\x97\x36No4A\xf3\xfd\xf7\xf7\xd1{\xdalun" "0\x95\x80\xd5\x33JR>8\xc9\xc3\x34\xce;P\xf0\x17\x9b\x1\x31\xa3\xc3\x98\xc1\xd7\xf5" "B N\xd5\xe5\xb6\xf0\x35\xc5[$U(n+u\xfd\x9b\xea\x16\xb3\xfd\"g\xe4Z\xbb\x9f\xfb\xec" "+\x1c\xd8\x92\x18\xa7\x99\xd0\xa2wG\xdd\xb5\x14\xbe\xc2u\x8fN\xd4\x8d\xf8\xe2\xc3" "\xae\x1dX\xe2\x7f\xf1\xd9\xc6\xa0\xecI\nu>p2\x18\x44@\x9f\xc9S{\xc0\xf9\xad\xd2\x8" "\xc0\x42\x90\x66\xee\x18\x38\xc8\"\x90\x9d\xb7\xcd\xcdg\r\xb2)\xd1\xb8\x1e\xf\x8f" "z\x17\xd4\x36\xbf\x9b\x87\xc\xcfJ\x8f\x3\xe0\x1d<0\xb3\xd6k\xbe\x34\x19\xf\xdf\xd7" "\x83o\xe7\x42x[`\xa4?\x93\xa5\xcc\xca\xf1=\xd4\x61|\x94\x9c\x15=\x80\xee\x32\x8f" "\xeb\x6\x92\xaasH\xb8\x93\x8a\x8c\xd1%\x9e\x1b\x6\xbd\x13\xc6\x1P\xd5\x35\xa7\xd7" "T\xe6\xf2\xa1\x1d\xc7\x61<\xc4\x14Or\xc4L\x85\xca\xc7%\x10\xa3T\x14*\"\xa7\x8b\x88" "X}\xf4\x7f\x95\xa6\xdaOT\xbe\xda\x8e\x30\xd2\xd3\xe0\xa8\x7fH\x84\xe7\xdd\r\xfe\x5" "h\xe2\x12~y\xb\xeb\x1a\xc4'4\n\x1a\x37\xe0\x14\x8c&76w\xd1)\x83~n|=\xdbW\xe0\xc8" "I\xf8\xbf\xb9\x6\xfby\x1c!A(t$\xe2\x5kf\xf2\x9f\xb4\x1fl_\xa5\xb1&M\xb8r\x98\x93" "7w\x1fUf\x11\x89\xf7\xeb\x80\x82\xab\x8av(ER\xf6\xdcT\xfdw\xddz\x6&\xb9\xe8\xc2\x10" "\x8fR\x1d\x84\x96\xce\x2\xaf\xff\x61\x3\x88\xccN\x0\xf\x66\x16X\xd0'T\\QS\xfdp\xa4" "a\xd8\xd6uO\x1b\x66\x7\xe\x42YM\xdc\x1\x91\x89\x2\x3\x80\xf\xd6L\xe2\xf8\xbb\x1c" "*\x1\x9c\x30\x8e\x83\xbf\x87,N\x2\xc\xb5\x10]\xd5\xe4\xe9\xfc\x1f\x41<\xaf\xd2\x36" "\xfd\xd8$\xe7\xc7\x9d\x35\x12%\x81ppB\xe7\x36\xff\xe2hO}\x96\x1l\"\x96\xce@nM\x92" "\x19\xedX\xbd\xa5\x93HE%o\x1a< t7\xa0&\xfdp#\x85\x37\xbc\x99\x9e\xa5\xddnzp\xae\x97" "\xad\x14\x9aG\xfc\x9c\x93\xc3\x85\xa1/\x17\xf2\xd0o\xbc\xc9\xc0\xb1\x14\xec\xa1\xf6" "\xff\\\x9a\x94)w~JMVhp\xd6^_\x17\xc8\x32-ld\xd0\xda\xb2\xd1\xee\xb1\xaa*\xe6\xae" ";\x89\xf8~\x11S\xf7\x95\xa6\xf2\x42\x64!\xf0\x9<`\xc9n\xee\xfb\xb8\xc9\xb0\xfa\xaf" "o*s\xde!\x8d\xdf::\xe9~\xfaxT\xc7\x4\xa4\x2\x1d%\x35\xf5\xc1\x12\x93V\x89\xdc\xf5" "Y\x16/\x19\x1a\x97\xb\xf4\xd8\x66\x92\x45\xa3\xc7\x10\xb3\x3\xc7*3\x98\xf5~\xef@" "\xe6o\x95\x11\xce\x92'\xd3\xae\xc0\xe6\xc5X\xd6\xa8J{\x87w3\x97h@\xa4\xd7\xa6\xc9" "\nny\x1c\xbd\x85\xbfI1\x82\xd4~\x6\x9f\x7f\xf3Ox \\\xeb\x63k\x82I\xa8\xa6\xa8\xd3" "\x89\xb8>\xc3\xdal\x2\x66S\x98z\xf8\xeb\xed\xf2v\xda@\x8c\xf1#t\xf0\x86xI\xc4\xf1" "\xc5l\xb0/(\x17S\x17YR%\xab\x85\x5SlB\xc4\x44K\xbe\xcb\x7f\xbd`\xe2\x17!R\xa7xA\xcb" "\x10\x35\x33\xf0jbGs\xc3\xea\x99\xd7\xca\xc6s\x16W\x81\x2\xaf\xc\xb8\x97\x8f\x9c" "\x10`e\xf2\xf9V\xe0{C\xb\x9c\xea\xabt\xa2\x38@G=\xfb\xa9\x4i\xe2)\xdc\x7f\x5]\xdf" "jn\xab\xe3\xc3\xf7\xa0\xcahMb(f\xdf/\xad\x34\xa1\xc\xcf\x8u\xbc\xbb&\x98\xff\xe3" "\xf7,}A\xc8\xccP\xe2\xcSE\x9c\xd0T\xd7M\x97\xf7\xba,\xbf\x80tu\xfe\x1c\xee\xee\x86" "\x10\xec\x94\x1dUa\n\x8o\x18\xfck\xcd\xb7\x45\xab\xa1\x1c\x62\xba\xdb\x83\x1a\x44" "\x7f\xc3\xe8\x1a]\xc5\x45)\x10\xbb\xc3\xf2\xb5\x87\x87\x33G\xcf\xbc=\xe6\xaa~\x14" "\xe4G.\xe8\xae\r\x34*\xc2\xad\x9et\xaf\xacG\xf7\xe8\x85\x31\x64z\xa8O\x85Y\x80\xd4" "\xf2 \xdc\xca\x12\xaf[\x90\x99\xe\xe5Ufi\xdf\xafV\x99\xeb&\xc2M\x98\xcb\x80\xeH\xfd" "\xfb\xc2}\xc4\x64h\xfap\xe2G\xcf\xa0\xbb\x82\x91\x42\x17\x3\x97\x6\xf\xedL%\xbc\xee" "\xfa\x1b\x4%\x89G>\xf2\xd6\"\x41l\xe3\x41\x12\xb5\x95i\xe3\xd0\xd5M\x8e\x9\xa8\x38\x44\x9cr\x9e\xd2\x66\xcb\xa3\x92\xc5:\xdd\xd8Z\xf5<1\x90\xc8\x17\x16\x37" "R\xad\xc2\xa6y\xd3\xb8\xe6\x94\xdc\xb2\xc6\xb4z\x94|?\xf2s-\r\x17\x97\xb7\xfav?\xfe" "F\x16\x11;\xf3-{\x18\xbb[\xdb\xee/\xc8\x10\xf9\x14\x90\x9a\xc0o91\x96K\x9a*\xe9\x30" "\x14\\\x65\x81\xd7\xc1\x97\xa6\x15gw\xbaK\xfc\xc4\x17\xe1\xd4v\xea\xf8[\xa6\xa6\x45" "\x90\xb1`>\xef\x89l~35\xa9\xe8>(\xba(\xdc\x8e\x96W\x98\xfa\xd0\xfd\x83;'\"\x7\xcc" "\xd9\xbfu\x1\x13\x98\x9dhlQ\x96g\x9d\x17;\xa4v9.@k\xe9\x18\xbc\xbb\xb9\xfeQy\xaa" "\xb1\x7f\x10\x32\xc8,\x84\xe2\xcegZq\xd1\xf1\x6\xa8\x7f\x1di\x89\x62\xe0~l\xc7h\xbc" "\x98\xc8\xa5*r\xf2h\xc4\xfxe \xdc\x88xd\x88\xff\xfe\xd2yW7Z$J.\xab{\x1c\x33I\xb3" ">\x8M\x9\x8d\x8c\xdc \xc1\xd5\xf5Y\xd3\x91w\"\xa2\x63\x41\xaaZ\xc2\xdc\xe2\x66\x86" "fq\x8d.\x99|\x11\x8au\x96\x9b\x80\x35\x15\xbd\xb7\x42\xd7\x85\xe1\xd0\xe5\x6\x8e" "\xd5\xf4\x13\x13\xb2X\xae\xaa\xa2m\x9-\xd8\x92x\x1d\x1d:\x2\xff\xce<\xecy\xc7\x65" "Z\xb0&F\xe5\xba\x32\x8e_\xejk\xb5\xf3\x8c\x11\x99\x34\xff\xae\x98\xfe\x16\xb5\x30" "lA!o\xc6\xbcoQ\xc2v\n\x9eZ\xd4\xc3\xc\xa4\xb1\r\x9f\x18\xc3\xfcl\x8a\xa5\x9d\x62" "6\xff\xa9\xb0$\xc7@\xb0\xae\xa2\x89i\x97\x90\xce\xa9T(\x84J\xd4\xe4\xd0\x36\xc4\xb" "P\xab\x94\xb0:\xd4\x80!p\xcU$}\x8e\xf0r\xe3'\xe8\x81\xf9\x94\xb1\xc0\xc4\x8f\xe3" "d+\xfc\xa5\xe8$\xf2~\x8e\xd7\x14\x92\x19\xc8\xd6\xcbi\x16gW\x7\xcc\x37\x42y\xec\xbe" "O\x14\xe8\x66w\xa7\xf3&Kq\xdd\xdeL\xe6\xb5w\xb2T\x97!2\xe5~n^\x93\xc3\xcf\xea_\xe4" "\xc0\xcfv\x1e\x92\x9d\x18\xfb\x61\xeb\x80m\x12\xb4\xa6%+ps\x8e" "\xb1-\xa1\x90\xf7\xb7\xa0z\xdf\xe9s\xd6\xdd \x92\xc3\xc9\x37~\x85\x41H\x9c+\x4\x15" "\xec\x11\x81\x37\xcb\xf8\xb8\xe4/\x5g\x1dX4\xae\n\x98\x92(\xf4t\xc4N\x0N\x16{-O\xb9" ";\x10\x87/\xf8\x8fi\x6\xce\xfc\x46\xa8\xd1\x95\xe4=p\xdc\xda\xc3\x14g\x97\x38\x8" "s\xd4\x62\xda\xb\xd1\x61\xc7P\xb0\xd9\xa2\x10_\xc2\xd8\x98\xdf_\xa0\x35#:\xdd^v\xc3" "\xd5@\x1X\xc2\xf2<\xa5i\n:a\xd0\xf6rz\xc3\xba\x11\xe8\x96\xc9\xfa\x1c/\x12\x30\x44" "\xd2>[\xa7\xf0\x39\xaf\x14\xb3\xbc\x18\xb9*T\xfc\xf8g\x97-\xc0\xad\x37 Y\x1\xc3\xc8" "Z@X\xe9v{v\xa5\xd2$#I\xd5\xdf\xc[\xff\x35\xf8\xa1\xf0m\xea\x17\x82y\x19\xff\xe4\x62" "\x92\xe8\xf1tW\x13\xc2\xad\x98\xf7O\xd0\x37\x43\x1c\xbf\x6\xf0\x8d\xb\x81\x39\xc" "g\xb6\x1c\x83_J\xfe\xe0=Fk\x17S\x9fS\xd6\r\x39\x80[\x15\x43J\x1\x9a\x9V\xf4\x18\x1f" "\x8e\xd8\x81\x9e\x41t\x1e=\xe9Q]A\xac\xf2\x38\x8by#\x95z\x15\xd1\x1c\xf2\xcK\xcc" "\n\xd5j\xd4t\x1f\x99\xed_\x9d\x0]b*\xe6\x33Z>_\x81\x66! \xfdv\x9a\x9c\xe6\xa9\xad" "\x7f\xf8U\x12\xc1!J\xae\x2\x8f\x66\xdc\x1c\x37\x2\x36\x1f\xbf\xbf\xe8\x36<\x1f\x38" "\xc1\xae\x39\x46\x45;\xa1\x8f\x0\xa3G0\xb3H\xff\xe4\x8\x87\x37\xb\x5\x66\xad&\x94" "\x1d>\n:/\x8d\x83\x9b\xc" "\x98\x4\"\xda\x61\xc\x84\xbb\xf5.{F\xb8\xb3\xcfz\xb0QH\xa0wlf\xc5\xa7\x98\xa8\xb8" "b\xdf\x31K\xc;C=\xd2\xb3\x1\xf5~\x97\xf4\x41\xb7\x33W\xcaT\xf0=\xb2 \x94\x36\x13" "\xda\"GY\x85\x65G\x96\xc1\xf5sW\xf4\xf5\xae\xcd?\xdb\xf3\x88\xaa\xfd\x39\xb1\xed" "\x8c\xde\xb8\xf0P\xde\x7f(|)\xfd\x43\xf8.\xf7!\x1Jb\xa5\xbb\xb1\xfb\xc\xd9\xe3\x9d" "4\xa9U\xd7MU\x16\x92#\xe1\xd2\xc9$*\xa4yaOrg\x96\x1aN\x16\x97\xaa\xfc\xcf\x12J\x8c" "\xf0\x44\x88\xb1Z\x8d\x8f\"$\xfbX\xe6\xed\xacnB\xd8,F\xfU\"\xfd\xf8\rr\xca\x9eo\xe3" "\xfb\x13\xabo\xb9v\xba]'\x98se\xe}\xa0*\x97\xd3\x84\xf3~\xf0\x87s#\xa1g{\xcc\xcd" "\x88^\x94\n\xb1y\xc9\x35\xaf\x90\xcf\x2\x11\xc2\x1d\x32\xf0\x4pgE\xb7=|*\xb1\x1e" "|Z\xa0\x8c\xab\xe3P\x8f\x62\xeeh\xa0Y\xc2\xcb%GO\xdc\x1b\x87\xcb\xa3\xd4\xeb'M\x1d" "\xab\xef\xd3\x1b]+\xd1\xcrN\xcd\x89\\M\xcn\x7Hm9\xdd\x38\xfe\xbe\x5\xe5\xa8\xc7\x96" "\xc1@<\xa3\x9b\xb9\xcb\x3\xff\x9e|\x1bm\x9\x82\xf4\x62\x11\x0\x93\x90\xca\xf3\xdf" "X'\x8c,\xf1\x91\x95y\xc0\xea\xc1\x8b\x14\xb4\xb1^G\xb4\xf3\xafm\x11\x89\r]\xe9$\xac" "\x90\x63\xff\x90\x34\xdc\xa7\x8b\xeaz\xd9\xce\xcw\x85\x99\x80>\x9b\x91\xe7\xac\xb2" "M\xe2\xc7i\xe6\xee\xb!\xde\x36\xa1\xd3-\xc1>\xf7\xd3" "^(\x81\x4\x8e\xb5\x8c\xf7\xfe\xf8=\xb4\xa1M\xb6k\xd4\x93I\xbe\x33\x44\x8d/b\xd8\x9f" "\xaf#\xa1nd\x3\x98Y\xac\xbc%\x31\x7f \xbd!&iR\x96\xb7\x32\x66\x8d\xfc?;v^\xd1\x1d" "\xb8\xa6\x17:\xcc\xfc\xcb\xab~\xee\x4\x17\xb\xe4N\x2\r<\xcb\xfc'^sq\xe6\xd0\xa1/" "\x94\x14}d\xba\xdeRp\xe3\x10\xd0\xbb\xc3\xe5\x1b\xd2\x46\xf0\xf7<\xfd\x86\x8d\xc4" "H\r\xbd\x86=;ua\x83\x95\x11\xdd\x65&V\xaa\xe9\x33\x41\xefW\x87:`M\xb0\x8b\xb4\xd7" "\xa9\xb3\x16\x45;k\xb0\xc8\xcaM\x1c\xa4*On!\xa5\xf7izin\xc0\xcb\x11\xad\xe5;W\xc6" "4-s\xf2\x9e\x1a\x66\xb8\x64\x5R\x8f\xeaLt\xd4\x88VhB\xc1\x2\xbd\x17g\xa0{k\xa4\x82" "\xaa\x61\xe6\xdc+\xbf\xed\xb0\xf2\xc4\x90\x30\x46JG&\x9e\x88\x92$m\xe0%z\x9\x1f\x32" "\xef\xcf\x7t\xc7\x1a\xc4\x32h\xa5g\xc4\xa1\xbc\xcd\x8f\x2:'\x8b\xc1\xe8\x30\x9c\x42" "_\x0r\xd9\xd9\xcf\x8c_\x1f\x65\xf2\xc0\xfn\x19+\x98\xde\x91\x62\xc3\x1d\n\x41\xeb" "\xd0\xccmq\xa2\x9b\xcc\x62@\xff\xe8Z\xd5\xd8\xbc\r\xeb\x85\x99\x8f;)\x84\xe7:\xb2" "\xc4\x86\xb2\xd7\x93Q'\xee\xfa\xc7\xfb\x7f\xb1\x6_C[\xe8\xa3\xe8\x32{\xd2\x11\xd3" "\x96\x7\xc3\xcb\x7\xf2\xe1w\xcc)R\xe3T\xf0\xbax\x8a\xc1#\x99\x38\x83\x9c\xdd.u\xfa" "\xabqs)\x1d!,\xc4k\xe1U\x1f\xf2\xd7#\xbe\x91j*\xc4j\xcf\xe1\x8d\xd4\x92\x7f\xb0q" "\xd2\xc1\x89\xcb\x1a\xc1\xce\x9a\xd1\xfb\xcf.\x8^P\x17I\xb1\xef\x64\xa9\x84W\xf4" "\x1f\xa4\x8d+\xe9\xa8\x5M=kcY\xd5\x84\x97\xecq\x3\x37\xbb\xff\x63j=6\xd8\x18\x1d" "g\x82\xec\x88\xeb\xc3\xcb\xb3,\xd8\x43q+GQw]\xfa\x16\x33h\xb9G\xf3\x90\xd8\xab\xde" "J\xb1V\xfb\x42Q\x9bM\"!&\xb2\xf6\x95\xf1\xa7\x12\xdc)\xe1[\xca\xed\xa0\xb5\x90\x13" "\xd1\x41\xad\xd7\xcc\xdeN\x1e;\xb3\xb0\x12\x37\xb2\x5\xa3\x87\x8P\x8e\x30M\xd7%\xd3" "\xaf\x8^\xee\xb0\xd9RR\xf4\xf4+f\x2\x0\x96\xeaQ\x9f\"\xa4\xe8l\x5\x16Qk{\xdb\xb\xb1" "Xa\x9e\xda\\\xb9\xde\xf8Z\xe0\x8eVWm!H$\x17\xf6\x41*\xb6*\x19!\x97\xc4\xb8\x31\xd7" "\xb2\x8b!~\x93mH?\xb2Mt\xb6\xe\xa4\xe2w\xa9\xcc\xef\r%\xf9\xba\xfc\x8e\xd0[\xfa\x80" "2\\<\x2\xa0\xa6\x33\xc4$\xd6s\xf7@\xdc\x1b\xbe\xeb\xd4\x9alMg\xea\x0P\xa3N\x97\x99" "}\xd6w&j9\xb3OK?B\xca\x6\xbe:\x7f+a9\xcd\xb8\x8\xb8\x98\x13\xa9K\\(s-`c;Y\xc2\xdb" "\x99\xe2\xa5P\xf9\x88\x19!{\x19^\xc6\xe4zy\r\x94\x15\x8c#G7\xa8\xce\x1f\xcd\xa8\xc" "H\xcf\xba\xfa\x13J\xef\x15k\xf3\x39\x11\x8d\x98\xd1\x14\xec\xea\xe9\xe2\x1\x8f\xe" "|`\xec\xa7\xba\x88\x1f\xbe\x7f{\xb5V\xfc\x15\x84-iM\xf8\xb2\x3m\xa1\x9\xd0\r\x19" "\xcf\xeb\xf7\xc8\x99;\xb9/\xd2\x9dW\x8d\x1\x45N%\xfc\xf5\xfa\x7f\x36\x1asB\x99\xd5" "%\x16\xc1\xae\xc6q\xb\xe7!\x89\x80\x86\x90\xed\xd5\xb3i\xd1\x9e\xf3\x7\x1e\x8b\xfd" "\x83K\xdd[d\xdfjo\x8f\xaa+\xd4U\xf\xdb\x9a\xe6\x8e\xca]RV\x93\xa6\xad\xa5;\x93\xc7" "\xa5sn\x93\xaf\xaf\xce\xed&\xa7*\xdcM\x9e\x37\xb3-\xd7;\xa3\xbe\x87\xf8z\xce&\xa4" "w$I\xea\x89x\xee\x16w\x9f^\xe2\xd7\x83\xee\xfd\xb4\x90=\xedZ\xf5\x85\xc9\x38\xa8" "\x1V\xb9w\x82\x98\xb4g\x8a\xb6`\x94#AY'\xbd\x61\x8c'\xbcn\xf7\xe1\xeeh\xf3\x8f_\xfe" "\xeb*\x1b\xd6\xa1\x9f\xbc\x14K)f\xf7/\xda P*\xeb\xef\x92\x12\xe5\xc3\x7\xf7\xc8\xb4" "w\xff\x89\x65O\x90\xf7\xbeZM!\xb2M\r\x86v\"\x97\xee\xe1\xa0\xcbX\xad\xaf\xc6\xba" "'\xd3%\xdf\r\xf6\xbf\xba\xf0?\x82\x97\xc9\xe4\xef\x1e\x18N\xff\x9c\x82\xec\x7f\xdb" "\x2/\xa1~\x83\x4\x9d\xbax\xe3y\xde\xab\xf3\xe4y\xe8u\xfO\x10zG\xf5\x1b~\xc5\x82\x62" "\xe5*0\xcc\x93\x43\xcf\x9b\x92\xcf\xcbOn{[k;a\xabt\xea\"\x8d\x8e\x3\x14\xff\x46\xd8" "\xby\x85\x12l\x2\x42\x6xk\xd6\xf3g\xfd!\x1fq\x98j\xe4\xddW\xab\xd8\xae\x83\xcdh6" "\xa2\xd8\xe5\x9dP\xe1\xa6\xe7*\xd7\xbc\xea\xddr\x5\x8c\xa2\xa5\x61\x89@\xf\x12\x94" "\xe1\xc0\xacg\xe9\x11h@\xd4\xcc\x15\x9eXH\xb3\x6*\xdb`?\xb3\xbau\xd0#\x8\xd1\x36" " \xaf\xbbs\x6^Qq\x83\x39\x8e\x81Np\x1aS\xd9P\xce\x9c)\xc5\x99\xf0\xe1\x4G\x7\xa2" "\xe1\x83:^\x9b@\xfd\xec\xd6h;j\xd2\xf4\xd8\xc3J\xf8\x92\xcdZ\xa1\x9e\xe8I\xd2\xba" "\xb2\xd4\x91\xea\x1b\x1b\xd1\x82\xe7|\xab\x13\x14\n\x41o\x3\xe9\xd2:\x9f\x33\xd8" "\xfa\x82Os\xe3|x.=Bal\x1c\xa5\x89K\x4\xb4\x97z\xb8O`e\n#\x96\x88\x7\xb6\x8f\xf0\xb7" "J| \xe0\xa0\x43v\xe8\xd7SSZ\xe2\xe8\x8f\xe1\xb7\xc6\x88\x44\x18\xc2q\x16\xe2\x32" "u\xe1\x81hO7[E\xf2\xb4\xf8IH\xcf\xac\xfe\xc\x35\x2=\x80,\xb2\xa0supKF6?\xc5\xaf\xed" "\xe3Pit\x84\xac`^2(\xa3\xe5'\xa6G(\xec\xef\xea\x8c\x4\xc9\x46\x46\x35\x9d\r\xb\x9a" "\xb8W\x8b\xda\xb5>L\xa7\x1f\xf2\x36\xd9\xdc/\xdf\xa7\xca\xc2_\xca\xdc\xe1\xa4\xd8" "\x6\x39\xd5\x1d\x82\x85\xbe\x86t\x14\x8e\xe9\x9c\xe8\xbdOW6\x7\xc6\xc9\x39\xf7m\xc4" "\xdc&\xaa\x85\x1c\xed\xef\xb4\x94\x1a\xcb\x64\x1f\x9f\x31\x2/\xdc\xc9\xf7g\xc6\x97" "\xd4\x11}L\x1a\xae\xb\xe3\xc8\xfe\x93{f\xd6 \x19\xf5\xad\x8cZz\x87^\xd9\xae\xea\xca" "\x10\xed\xf0\x6iL\xdd\xfe\x9cm\xd1\xca\x35\xa7\xc1\x99\x9bK\xd4SZ{\x80Yx}\x8f\xe5" "\xd7\x42\xc8\x11\xaaJG\xb\x32\x86\xc6y\x8e\x44" "\xec\x46\x6mU\x18=\x8e\x96\x18\xb6\x66-8o\xb0\x42\xa8\xadI\xbfS\xbd\x1f\x44\xc8X" "\xc7\xf4\xc2(\xe8s\xf3<\xf6\xc5\xa3\xc3\xfa\xd6\xe9\xe8\xb3\x13\xb1k\xe5\xe0\xb1" "\xacN\x6\x96\xf4\xf8\nX\x16\xd6\x9d\xffh\xccz\x8b\xb\xd9\xe6\x10\x2l\\\xb4\xbaR\xf0" "\xb9h\xb1q\x8c\\\xa0_\xd9\x19\x1d\x2\xd3\xcf\xab\xdb\x96\xc7!BQQ\xbf=\xa0\xe7\x0" "\xe\x14\xfb\x15^u\xd8\xe1\xb9\xa5\x9d\x6R@\x1aV\xd2\xc2s\xb0\xd2\x37\xd6+2\x7\x5" "\xa7\xb0^\xcc\xda\xdeis.\x17W\x1\xe9\xed\x8br;/\x8b\xe3\xad +1\x16r\x81\\\xb\xea" "\xff\x85mq\xe2-|2\xddj%\xed\x64R\xad\xf5\x38\xd2h\xef\xd0\xba\x1\xf7S\x4\x61\x92" "j\xe9\x65'\xc8\xe4\x1\xf8\xc7L\xf1{\x9b\r\xfc\x31\xc2/\xb5r,\x12\x3g\xffn\x9y\xd6" "\xca\x11\xf\x30\xd1\xef\x9f\x7\xa4\x90\x81/\x4\xf7\xa8\x2\xd3{\xb7\xb4\x62p\xc4O" "\x11\xe8V\xd0\x82\xee=\x18\x81{<\xad\x46\x64\x8c\x8a\x38H\xb0\xdf\xdc\xe4G\xcf\xf2" "\xee%\xe8'\x9b+\xc9\xa5\x9d\x90m\xebzy\xa7\x8aP\xa0\x85\xbf\x9alj\x82\xda\x85*R\x8" "O\xc4\xc8\x15\x63\xae\x80\xfe\\v\xf5\x98\x12T\x7f\x37\xe3\xbdg\xc5\xf3/\xf5~\xbd" "\"\xff\xe2M\xeb*R\x6X\x98\xa9\x38\x3\x66\x4\x61\xa8\xe3\x62,\xb0\x1a\x0\x43 \x12" "\"\xa5J?\xedR\x6\x93\xca\x4K_\xcc\xda\x83~m\xa4\rm~'Qj\xd8\xb1\xc5z\xb7W\x88\xe7" "N(\xa9\xb7\x85\x11z\x8a\xee\xc1\x90\x9f\xa7g\xa5\x6}\xfe\xccw\xa7\x1b?%4\x8b`\xe8" "\xaa\xa9\x32\xdc\x9e\xfe;\xc0*\xa5\x8f&\xbfn\x1f\xbf\x85(\xe1\x8cT@v\xbf,O\x9b\xe9" "\xbdw\xa7\xb3\x1.\xeb\xff\xde\xa9\xd0\xfe\xb1\xaa\xa2\x1c\xbd[b\xc6W\x1b\xb8y\xa8" "\x95\x99\xf8N\xcd\x17\xb3Q\xacTS\xb8\xce\xa2;\xa5_M\xce\x15\x82\xb6\x9\x42\xfb\x89" "\xd2G\x91+\xf7\xe8\xee\x1f\xf6\xb8\xce\x43\x84\xd8\xb9\x0\xb3\x5&\xd7#\x86\x83[=" "\xbe\xc7i\x97\xf6\xda\xdbU\xb1\x9\xf6\x16\x8\xf[\x1c\xf1\xdb,4/He\xf1;.Ofd\xa8\x35" "B\x90pXl\xf7\xbc\xc5\xec\xea\xe5\xecrQ\xb0W1Te:|\xf1\xd8)%c\xdf\xa9\xe8\x45\r\xcb" "\xf6 \xe7\x17}\xc1\x16\xee&\xd5\x7f\xea'\xb0\xab\x86P:\xd3#\xdf\x92\xe4\x18JN5\x9b" "\xe6\xa7o\x1\x34\xd0t\xe6\xe6\xa8\xda\xc6I\xb1\x9b\xd8\x8fT\xf3\xd1\xd7q\xa6\x87" "\x2\xc1\xda\xcc\x34\xe5\xa4\xc5\x8e\x96\xac\xaf\xd7\xec~\xdf\xe3\xb1\xc4\x44\x3\xdb" "\xa6i)w=\xd0'8\xd3\xb7\x80W{c\xa7\xfb\x36\xd6\x10\x39\xc9\xed\xe8N\x8u\xfciW'\xcb" "\x92\x84\x64\x7f\x8a\xc4\xf4\x9a\xca\x94\x10\xa7\xc9\xfe\x9b\x1c\x35\xd2v\x9d\xc6" "vY\xf7Z\x9f\x88\xe6?\xd9 d\xe8\x18;?H\xd6\x88P\x16\xd6\xaa\x91\x6\xa4\x1c\x8f\x1d" "_\xc5\x3\\\xfcpQ\xf2\x11?UzV<\xd8\xc4\xf3\xbc\x43\xc1\xfc\x84\xc8\x42\x14\xc3\xe5" "VP\x8a\x82\xd4:}\x11_:\x2vq\x8a\x1c\xd9\x96\rT\xac\xee\x38\x12Q\xb4\xf5\x2\xd1\xee" "2\x90\x4\xc0\xbb\xf7o\x93\xad\x38.\x16\xf6\xfe\xf1\x89&\x16\xa7\x95V\x82\xe4Oc=k" "\xa1\xaa\xad\xee.\xb8\xec\x45\xe5\xf3&\xa3\xfe\xa3\x8e@\xc1\xf1\xd0\x9\xcd\xe6\x15" "\x11!9$\x1e\xf9\x16zR\r'\xd9\x42r\x1d|\xfc\xa2\xc8\x94\xc9\xd2Q\x86[Gq$\x9b\xc0\x92" "\x3\xa2\xc8SY\x16]P\xda\xc<\x8d\xc\xe4u\xf4:\xf0\xb4\xae\xd4\xd8\x31o\x92Zj\xbcY" "\xbeY*\xb5\xf7\x5\x1\x80\x66\xf0\xc2u\x1b\xe6\xf4U\xb4\x8b\xb4\xb6mFL$\x96\x63\xff" "\x1c\xde\x8d\xbe;\xf1$\xe9\x8c\xbe<\x8c\xa7\x8d\x10\xee\xe5\xb4\xe7\xf0HY\xb2m\xa7" "ab\x8c\x11\xc7\x41\xd5)\xc5\xc1\xfo\xbb\xb1(-\xcf@C+\x12\xef\x1\xd5\xfe \xbd<\x3" "\xa2\xd4\x1cx\xc1\xfb\x82\xfd\xe7\xe8^$\xeb\x36N\x84=+\xbe?\n\xb9$\xfb\xe1xf\x7\x42" "\x5J\x8f\x6Ow\xdf\xb7\x93\x6\x35xmJ\xdc\x89~\xdc\xc1\xaf\x91\xf2!\xdcQ\xe3\x32\x30" "\xa3\x2k7\x80\xa1\xd9\x99\xcfs\xf1\xd6\xf\xcf\xb1\xb6\xd2jr\xf8\x82\xa7\x43\xab\xb8" "8\xa2\xf5v\xff\xbb|z\x9b\xd1\xba>3\rD\xb7\xc8,`\x99]A@\xf0\xc0\xe9\x13W\xa1\xee\xc8" "tH\xc5\xae\xc1\x1e=\xbW\x6\xc7\x14\xa5J\xa6z2\x90(8\xd7-\xd4^\xa6\xc8O\xc3\x85~\x91" "\xec\x87&\\\x13\x15\x5\xe\xdc\xc0M\x1a\x64x\xa7\x97\xc3\xa4\xf2z\xa9\x92\x91\x96" "\x1f\xb0\x10\x98\xe2\x9a~\x1e\xdf\xfd\xce\x97zI~xkS\xfa)\xa8\x13=\x12\x9dJE?\xd0" "V\x91\xbd;\xde\x33!\xbe\xe5!r`\xec\xe8\xe9%\xf0\x1c\x1a\xd1\xf1V\x90q\xd3\xee\xb0" "\x95k\xfcJ\xcbt\x92\xc4l\xac\x86\x10o\xe9t\xc3\xe7\xf1\xe0\x99\x34s\x1f\xdd\r\xc" "\x9\x87\xff\x1e\xf8\x8a\x9c\xd5\xaa#\xe6\x91\x18\x99\x80\xb\x35\x17\xf4\x99\x9a\xa9" "\x0\xdd\xc1#\x8b'\xd3h\xc8X0X<\xf8Y0\x83\xab\xe0\x45\x45\xb5\x9e\x1a\xf3]\xa1\xb1" "u\x9e\x96\xd5xM6\xa9oSW\xae\xa2\xc9v\xf2H$N\xb3\xfdk\xc8^\xe4\x87\x19\x95\x62\x14" "[j\x98\xebI9\xf0\x9a\x89\x15\xd2t\x80H\x8\xc9\x80\xcf\xc1UQ\x95\xe9\xe6\xb!\"(G\xcc" "\xe5\x31!\x1c\xa4\x95\x6P\x19\xe1\x18\x90\xfe\x8dy\x88\x8d\x17\xea\xc3_a\x9c\xd2G \xe5\xcc{\x8e\x94QK8\xfe\xa8\x83*U" " ^\xec\xa5i\xc1+\x8a\x8\x1b\xed\x10\x17\xde\x66\xc3\x46\x7f\x63\xe9\xffM\xd3\xcf" "\x7fZe\r\x7\xce\xd1M\xd6\xc2\xdd?^%\x83\xfe\xafs\xce\x13\x33R7y\xb6(\xf7\xaayv\x86" "F\xd5n$\x2]>\x19\x4\xcc\x9c\x1f\xc7\xd5\xaavcT\xcb\x62\xa1\x62\xe7\\\x84\xaas\xf6" "\x82\xd6S\xb0\x16\xbXo~\xb4\x43<\x13J\xf8\xa2\x17\xf4\xb6\xe8\x6\x35qq\x3\x9d\xa5" "\xf6\xde|\x6\xdb\xf7\xf4\x9e\xc0\xf0\x43\xeb\xaa\x33Y*\xb6\xe8\x8a\xa1n\x9d\x1d\xad" "\xcbu\xc\xe5;\xaf\xa3r\xe6\xd1\xd7p`\xae$\xf9\xe6NH*\x1f\x39w\xfa\xc6\x8f\xa1\x35" "\xf6\x18\xf9\xc5X\x9d\x80\xdb%\x10\xc6\xd1(\x83\xdc\x7fl\xad\x37,\xbf\xfb%\x87\xa3" "gk\x15\x43\xd8\xa7_\xe5\xc0gk\xd3\x31\x66\x0K\xbb\x99\r\xe3\x4\xab\xd5\xf9\x11\xd2" "b\xc8\xea\xed\x80KW\x99h\xab%I\x14\x97\xe0\xf\x8b\x8b\xdc\x90*\"\x18\xfd\xf1\x90" "\x8b\xbdw*\x3+\xcz\xc1N\xca\xfcT\xf5H\x95\x9d\xbd\x87\x8\x42\x80\xd1\xde\xdc=\xd7" "\x17\x18\x89\xa5vO\x8f\n\xd0\xbd\x64\xca\xce\xcb\x5\xce\xf\xf0\xf1\x9e\x16Yk\xc9" "6\xc6\x45\xc8\x15o\x80\x8\xbaW\xa0\\/\xb3v\\N_A\xf1\xea\x83\xdfy\x5G\xff#\xc8`\xc2" "3\x85\xa5>M\xa8W\xff\xeP\xfb\x33\xd1\x84\x80\x7f\xb1\x64\xd0\xeeU%\xca\xde\xf8\x62" "&E\xf2\x66`\xba)\x1a\xd8 \xa5:\xce\xf2\x38\x65\x93\xf2\xa7\xae\x45mqp\xb4Q>\xf1\x89" "\x10\xc8\x46\xcb\x32\xeaV\x89\x36\x7(\xfc\x81\xaa\xc8\x66\x1c\xbf\x16,m\xd6r\x8b" "5\xc8L\xc3\xfd'5\xa6l\x9c\xd5<_\xab\x39\x80V\xbf&\xef<\x87|\xc2\xf1q\xb0R\xc7_(\xed" "\xda\x8e\xe1\xaaK\xad\x4v\xec\x85\x66\xe\xfc\xb7\x1\xa4T$\x7f\x99\xa9\xee\x1fog\xa0" "\xd6]\xc9\xad[F<\xd0;d\x16\xf3+hm/m\xfc\xf6kk\x5\x13;\xf4\xdd'\xd5\x7\xd7\xff\xc" "\xbg\xa6U\xf9Q\x11\xecwd{l\xebNhO<\xc8\xf1IZ)\xc0\x83v\x1d`\x13\xd2\x2\xa4\x5\xa4" "f-\x8\xd7\x7\x17\xfw\x9e\xc6\x99@\xb4\x9d.\xf-/0I&\xed\x7\x95\xefYR\xc6O\xd1\xb8" "\x8d}\xb5R}\xa6\xff\xaf}>^\x3uEr\xcb\x4\xe9\x85\xed\x12^f\xec\xc0x\n\xf1\x89>\xe9" "\xda\xaa\xe0\x1d\xa8\xc1\x8a\xf7\x38XK&\xc0\xcb\x34+\xde\xf1\x8d\xa5Z`\x80\xa9\xea" "\x1c\xca\x34\x93\r\xe8\x30\xbb\xe8n P\x1d\xfb\x89\x93\xcc)D\xe4q/e\x81\x8d\x38\x9b" "\x80\x80\xabZ\xfd\xc3X!\xbe\xe7\xd3r\xc5\x8a\x82\x38\xcd~;\xeb\x87\x92\xac\x82\xa5" "\x16\xa7Q\xbb'vV\xe1\xec\xb5\x6\x7f\xc8\x4\xd3\x16\xa7T%6;,\xa1TpJX|\xa6\xc8x\xdb" "\xb6\xccp\x9aOD\xb2j$\xbd\xc5\x36\xe3N\xb6p\xa5\xa5\x46\x16\x61T\x93\x39\xb5\x95" "\xfe\x8c\xdd\x92\xabp\xbdR\\\xe7\xe4\xb7\xa7\xda\xf7\r\x38\x62\xb6\xee\xc4\x16\xf4" "\x8\x93\xa7\x11\x81\xd7\x98\x92\x1f\x8a\xce\xc\xd2\x16\x37T\x87\x3-\x18\x63\xb4\xb6" "\x15\\\x9f\x8b\xed\xf4\"\xcb\x13\n(\xc3\x39\x8e\xd5x\xc\xc4\"\xb0X\x9c\x9e\xa2\x8d" "_\xab\x5\xd7*\xe2\xa3@\x8bJ\xd5?(\xac\x99\xbf\xd8\x31\x33\x5KK\xff\xbd\xef\x18\x14" "_G8\xd7\x32\x12\x94\x94\x63\r\xae\xda~\x9b&uodVK\xac|\xd9\xd2L;\xed\xe6\x7(\x14\xf5" "\x8ai\xa8\x64:\xea\xd0\x9c\x3\xdb~)\x1d\x1\x1a\xee\xb3\x14\xdc\x9uG\x1e\xcd$\x9c" "\x1bJ\xe1\x85\xfcmF\xf3\xcb\xe5\x62(Tc \xd2\xac\xf4\x99-\x8b\xc4\xcfu\xc8\xcal\xe6" "\xe4K\xdc\xa2\xa1\xd6\x44\xe0\xfe\xad\xe1\xce\xf1\xb4\x88\x9d\xe1U\"\xc4\x1e\x9e" "jU)\x9b\xee\xca\x7f\xbfG\\H\x1d\x9\xdc\x5\xf2\x46\xf5\xb6s\xd0\x8f\x36\x8c\x84\xb0" "D\x0\r\x6G\x94}\xf7=\x7f\xd0\x85\xa5qs\xc7\xec\xd7R\x87\x8cgt\x8a\x8d\x63\x13L\xe4" "\xf8\x33\x93\x80\x82\xee\xc2:\x7f\xa2\xbcr\xf6\xa8\x42\\\xb2\xcf\x45\xcd\xd5\x1d" "\x9j\xa3p\xeaw\x8d\x7f\x1d\xc\x34\x1a\x15\xacxt\xa9\xef\x10\xae\xbc\xcb\xd3\xdb?" "&\xfd\x97\xe8\xa3i>\xccpq\xfe\xeb\xfe\x63\xccQx\xe5\xe4\xcd\xabG\xe8R\xf3+\xba\xf" "-\xed\xe2\x95\xd5\x8e\xbe\x8f\xf7r4\xa1\xa2V\x8d\xaf\xa3\x2\x5\x44\xa5\xa8\xf5\xe8" "\xfe\xeaq]\n\xcc\x33K\xaf+\xf4!a\x89-\xde\x39\xe2\xba\x2\xffg\xa6*VVC\xee\x84h\xbd" "\xda\x9b\xfc\x33L\x92\x8b\xe6\x63\xb8+_:\xc3z\xcf\x8a\xba\x14\xed\x13\xdcN\xab\xf" "Ae\xa4M\x90}\x8b]^I\x3\xdc\xec\x65r\xe1\x8dq\xd0\xd3\xbf %m:\xf9\x14\xe5\x8c\x9a" "\xecz\xbd\xaajV\x9e`\xb2\xb8\x1f\xa9\x61-\xd3\x9cv{s\x8eY\xc2\xbd$\x19t\xc0\xf2\xe8" "\xe7\xa6\xff\xb2\xef\xd7\xa0 \x83\xfb\x17i\x9bNW}\xd3\xebs\xebXE\x8a\xe5\x95\x1a" "\xed\x11Z\xe9\xd4\xc6v(\xf7\xca\xb0/\x95M\x9c\x1c\xe1\xd6\x33W\xda;\xcd\x43\xc\xa4" "\xce\x82\xf3\xf4\xd0:,AD\xdbQ\x92\x46\x89\xff\x45\xe4\x1f\x46u\x19Sh\xf2\xf\x36m" "M\x9c\xb7\x9c\\\xb9I\xd0\xbh\x86\xd1\xd5u\x93\xfdSi0]o\xbd\x81\x85\xb\x9bk\xf4\x33" "\x81_\x8\xa1\xec!\x17,\xaa|\x7\x61\xdb}\xf4\xbd\xe1\xdf\x64\xa0\xa2\xfb\x12T?\\\xf0" "x\x1b#\x84\xcf\xc4q\xbfv\x2\x61\n\xb7\xf7 6\x8e\x35l\x98\xcd\xe6h#\xe3\xb0\xf0n\xb9" "\x17\x14yi\xef\x83\x19U\xfa\xa5\x91\xdb\x99\xaa\x11<\xd1\xda\xd8\xc8\xfa\xbe\xa8\x86\xc2Yd{\xcck\xab\xe6\xe\xf6\xbc\xce?\x17\x17\xc8" "\x1d\xb9\x19\x9c\xc5\x92\x96q\x1f\x82Je\xe\xf6\x1e\x89\x94\x87\x6\x1\xf4^\x8f\xce" "\xb9O\xee\xbf\x8a\x61~\x92\xe\x19\x7fXY\xb7\x90\xb2\x44\x30X\x11\x46\x9f'\r~\xae" "\x8d\x35\xf1n\xb0\xb2\x12)\xa5\x83hD\xf2-b\xd1\x63\xc7Z\x1e\xa3\xcf\x1b+\x81\x1c" "t\xc3]}\xc7h\x13\x15\x1c\xc8\x14\xb1\\\x80\xa2vN\xbb\xd6\xf2\x46\x0\x37{GRS\xc9k" "\xf7\x8f\x39/8\xfa\x8e\x7f\xf\x3\xfv\x96\x9e\x9e\xcb\x43P\xd8\x8f\xd2\xee\xbc\x9d" "'R\xdeknnA\xd7|\xbd_\xe9\xfdW\xcR\x89!\x8dX^\xe5\xa5U\xea\xe8\xca{i\xf6\xd2&\x6%" "hAZ\xe9\xc3\x86\x84L\xd4G\x5\x39\x9e\x31\x1a\xe\x15re\x0\xf6\xd2\xb3\x15q7\x11\xb0" "\xf8\n\xf6\xdb\x14/\x9d\x94I{\x8aHw\xa8\xa7)\x6\xa7\"\r\x38sO\xf8h\x4\xc6\x94:\xd4" "\xa2\xf8\x95\x95\xc5\xf\xf8\xd8\xa3\x9c\xe1\x9XYtC_2\x4\xc5\x10\\geG\xef\xb\xce~" "\x8e\x80\xc3\xc8\x1c\xe7\xab\xaa\xcb\x90M`N\xfe\xac\xee\xfb\x2Xai\xdc\xd3~\xc5\x7f" "l=O[kZ?5El\x97\xde\xb6\x14\x66zJ\x1c\xb9\xb6^\x99\x97\x88\xee\x2Z\x11Q\xb7I\xcaK" "\x95\n\x1a/\xfe\x5\x13\xe7\x1a\xc4\xdd\xb2\x4\xe0n#\xf4\x43\x1e\x38\xac\x41\x91\xe1" "(v\xd3\x32\xc8\r\x9c\xf9,\xe9>V\x1e\x31\xc2\x17_\x82V\xe2\x32:\xdc\x8f^:\x2s\x90" "\x81\xc\xf8\x98\x7\x85\xc2\x91\x2yN\x8b\x8c\xdd \xc4\x43\xbe\xea\x34\xcd\xb6g\xc6" "\xb7\xdb\xc8\x1c*\xb3\x16\x19\x1d\xab\x1c\xe@F<\xb5\x9e\x13\x9a\xdc\xfbm\x9e'\xbb" "\x8d\xb8\x64\xc7\xf2tgB\x7f\xd7L\xeb\x82\x81\xc6\x6L[\x19\x1a=\xce\x10\xda\x43\xf0" "\xc8\x83\x87\xad\xf9\xa9v\xaa$\x0\xdb\x9b\xfd\xb4Y\xe4,\xf6\xb0\x9b+\xdf[\xe0\x8" "a\xca<\xe8\xa2\xf2=cC\xfK\xf2{7\x89\xfb\x1\x98k\xd3?\xa4\xad\xedx\x98v\xc9!\x2KU" "\xfcm\xa1\xdd\x34\x9b\xabL\x8a\xdcKt\x97tz\xd3w\x2\xeb\xe0\xe6\x1f\xfb\xe2\x7\x64" "\x83\x33\xa7\x5\xf3:>\xf1\x32\xc6\xb3\xa9\xe7\x18\xa9\xb3\xa9\xe4\xd7\x85\x39\xc3" "\xde\x9b\x3\xcb\x13\x84\xc6\xbfl\xf7>a\xe4\xf>Z\"%\xe5\xdeHzT\xef\x99\xc4\xee\xad" "H\xd8K[U\xfd\xfb\x86\x9f\xfd\xb1\xabO\x9b;\xd8\xff\xe5\x98\x83\xc8\x19;QN\x9b\x80" "u\xc5\x82\xb5\x9f\x19i)e-\x87\x99\x86\xe7\xee\x8\xf9\xa7v\xcf\xe0\xe3\xa0\r\x7f\xc3" "\x86\x94\xc1\xb2\x62\xab\xfd\x81X/2\x13\xf9\x99\x63\xa5\xe\x9c\xaf.\xf4\xee\xc3\x18" "q\xbd\xe0\xbd\x14\xd5\x8bT\xd3\x1d\xe2_\x12\xa5\xfb\xab\xec/\xbb\xf4_\xf0\xe7q\xd6" "k\xda^\xc4+\x5\x8b\xe8\xa2\xe4\xa4[B*_T\xb8{.\xf2\xfa\x64\xe\xc0Q\xcd\xedW\xb7\x8e" "0dn\xa9\x61\xc7t\xe5$I\x12G\x6\xc1\xa4\x4w\x8e\xff\xe6_\xba\xa1{\\e\x13\x5\x1`\x92" "\xa7\x35\x5\x1f\xe\x18\x0z\x86\x61\x1\xce\x8\x10\x1f\x61\xf5\xc9}\x7f\x9e\x38\x86" "\xd3\xd3(y\xa5\xf5H+R]e4.\xcc\x8b\x64\xc7\x38\xed\xe5\xbf\x1d\x63.\xd6\xd8\"G$\xdd" "\x95\xf9\xf9L\x93\xd3v\xe\xa5\xd1\xa3\x17G\x93\xe4\xdb: P\x86\xb\x1c\n\x41\xb9\x65" "\x19hX\x1d\xe3\xb1R\xa8\xf7.c\x9eo\x8f$\xa5z\xd8\x16\xa0\x33\x14\xb1\x3K\xfb\xb4" "7\x8b\xd7\x43s\x0\xfjm\xa5\xfcJ\xd6\x9b\x12\x18h\x8ci\x99\x38\x63\x1b\x10\xb5\xd8" "\xde\x64R\x88\xbaH\xe9\x8f\xa2\xbe\x17\x33\xf7\x14\x97\x7f\x61\xc4\xa3\x8i^f\x0\xb0" "\xb6\x1e\xca\xf9\xdd\x87\xb8\x16\xa3\xf1\xd8\x93S;6\xc3\x3\xc6\x85S\xc9\x1c\xe8\xf3" "qq4\xda\xf1\xd0\xa0\x65\x46&\xfb\xd6\xa3\xc6S|~3\x96#\xb4\xc4\x62-\x1a\x91G@\xb7" "\xe9\x61\x1f\x35\xb1h\xf5\xd1\xc1\xf4]\xex\xbf.\xc3\xe2\xf1\x6y\xb1i\xa2G|\x9d(l" "\xa6\x9e\x39\xf\xb3\x14I\xc1\x93\x8ay\xa6\xcd\\\xdc\xc\xd2\xe\xd6yw\xbf\xe4&\xfd" "\x96-\xef\xceH\x1aV8\\\xdet\\\x84\xef\x8e\x13\xc4\xe8\xa4\xe4M\xc0\xf4\xd8Ia \x8f" "b\x99\xf5\xd5\x84\xfd\xae\xfcg{\x3wh\x84<\x11\xe1\x3\x13\x10\x15\xdb\xb7?\xf1\x62" "\x9a\x93\xb7#&\x90\xcf\x10;\xafV#J\x96\x13\xfd\xc7X\xf0\xe\xfe@\xd0\x80\x63\xd8W" "\xcaoA\x9c\xef\xc8\xf0\xa7]\xa1\xda\xc\x94Y-X\xd6n\xdf\xc4\xb1Z2\xdep3\x87\x0>|}" "\xb0Q\x1:\xa6\x66\xa7\x45+#\xce\xe8&\x7\xf2\xc6\x92\xf7\x9\x17\xfa\xce\x96\xc3\xc7" "\xa0{\xd6\xadN*5\x86\x6\x10~R\xf7\xd8|W\xf6\xca\xa3\x46\xa5\xbe\n\xd6i\r\xec\x1p" "{h`\xd7\xf8\x6\xf5\xe9\x15\x8d`\xe1#\x6\xb8N#\x87\xc9o\xe6\xca\xac\x42\xedmk\x8c" "\x15\xcf\xd6KI\x90t\xc1\xeb\x63H\x9f\xab|(\xdc\xa5)u\x9f\x84\xc2\xc4 \x0\xe1\xde" "89\x96\"\x7\x8d\x9c\xab Q\x9\x1a\xfa\xc1\xbf\x1e\x44\\$A\xb4V\x9\xb5\x82\xe7\x93" "\xe8\xb8S\x8a\x32\x63\x1d\x9c\xd1rW\xc9h\x93M6g[!\xa8\nh\xaeQ\x7\x4+\x6\x7f\xa8\x1" ":\xcc\xbe\xa4\x11\x1f\x9d\x8\xe8M\xdd\xa1Q\xf7\x97\xdf\x1f\xa3\xdc-~\xa1yy,\xc2\x9e" "9\xf8\x9d\x98\xdf\xb1\xa7w \xed\xe4\xf\x92\xc3;~\xd5&\xd5\x81\xe0<\xa5(!\x86\xa9" "*|\xa1s(\x94\xe_5\xadI @\xb5\x87\x39\xfb;\xfe\x8\xf2\x5\x9e\xea\xf8\x91\xbb\x42\x90" "\x8eN\xb0\xdc\xc5\x1c\x7f\xb8\x10\xe5~\x99#_\x1dn\x1a\xd7;\x9\x84_\x3[Uj\xb2\xd9" "\x81\x91\x1d>\xc1\x99\x97<\xe9%\xeb\x8fq\xc9\x18X\xd4\xe8\xbe\xfd\x98J\x85\x18\xda" "|)\x87\x92Y\x19/\x81\xc5\xb7\xc2\xb\xdfX4\x11W\x8f[0\x8eh\xb3kt1\xea\x33\x39\x42" "\xab\x1f\x9\x1d\x86K\xad\xf2\x46\xc3_\xd7\xe8\xe4\x9e\xd0\xdc\x94j\xcc\xc4\xff\xec" "\x17\xe2;\x10J\x9b\x10\xc1\xfa\x8e\x63\xb4\x66\x1c\xf6\x1fi\xf3\x94\xfa\x1b\xc\x97" "\x2\x31?\x9e\xae}x\x8e\xe\"\x44\x1d}9\x1d\xaeN=\xf4\x1dU\xaer\x91\xc2\xc4\xb2\xbb" "/Ra_O\xe0\xbc\x1eJ\xfa\x45\xc6\xf6\x42\xf8\xf5\x66\xcf\xea\x41\xbe~\xd4\xb4\xea\x9e" "\xac\x35\x84X\x7\xf3\x42\xea\xdb|\xf2\xe1\xb5\xe3\xe6\xca\xce\xa8vQ\xba\x4q\xb8\x9" "a\x93\x13\x43)\xd9`Q\xc6\xbf\xed.\x96\x3\"\xe5m\xe4\xd1\x8c\xdc\x35#\xcb\xc0\xa5" "t\xda\x3\xca`\xe0\x8diP\xe3\x32't\xb2\xe4'\x1b\xe9\xe\xc9\x61{w\x8d\xf5\x94\xcb\xac" "d\xbdG;\xec\xbf\xd2(\xcb\x8d\x8e\xa6\xd3\x1b\x44\x16\x63\x8c;\xb4W\x9h\x8e\xd2\x1f" "|\xd9\xac\x8d\xfd$\xb0\xbb\xb8\x65\x63\xb\xbbR+2\x99[2\x8b\x14\xb1\xcd\xba-\x89\x87" "\x15\xb5\xbb\x1c[\xd9X/0\xb\xcd\x42\x9e\xf7H\x8e~\\\xac\xea\xed\x9\xc0\xa7+\xc3\xa5" "\xe6JVm\xaf\xe6\x65zU\x1bX\xd0\xde\xa9\x98H\"\xa3\xac\x8c\xec\xf8x\xfa{\xfc\xc6\x84" "\xab\x34h\xc2\xedSZ\x8e\x13\xb\x46\xd3\x1d\xbe\xa0rp\xe4\xfd\xa1/p\xabh\x8c\xf5\xc8" "\x82\x64\xf2\xb2g\xe6~\x82\x64\x8f\xb0\xb7\xfc\xeb\x32\xd3\x37\xc2\xef\x7fv\x90N" "_\x98\x96\xa9\x45SC'\x9c\x93\x9d\x85\x16\x18,\xa5$''\x5\xcd\x2VJh\xe1\x31\xb1\x64" "\xe2\xb1\x89\xab\x6\x30Y~\xa3=m\xee\xf0\x43&\xacT\np\xe8\xc7\xb8\xc0\x3\xdc\x13O" "\xe9L\xf7\x62\x92|\xfc\xcc\xd8\xa2#\x1d\x9c\x42O\x82t\xd7,b?\xa5K\xc4\xe3\xaf\x38" "[\xd2\xa0\xf1;Q\x82\xe4\xd9l\xa0\n\x94\xcc\xa7\x9c$-\xe3\xd7~4\xad\xe8_\xf5\r\x17" "=qX\x8a\xc\x19jZ\xf3\x31\xed\xeb%\xf8\xd6\xb1Z\"g\x19\xb1\xa9\xca\x39\xe0\xd7\xda" "\xc8\x98y*\x12Zv9\x3\x90\xd5m\xb8\xaa\xfanN\xfe~drk-d\xa0\x5\x9f\xd2N\x9eT\x0.\xea" "P\xb5\xef}\xfa\x3[\xac\x8c\xc2\xab\x41>N\xfe^\xb\x36\x32\xf2\x39!\xb0\xc7M\x95\xe3" "\xb7\x98\xda}\r\x13\x42o\xae\x3\xf0\x18\xf5\x64\xd7\xcdN\xb9'\x13\xcb\xbf\xd9\x5\xeb\xc8i\x96\xbbv\xe3`\x80\x1e`.&>.\xe8,M\xed;" "yk\xc6\xad&\x3_\xbd\xd4\x8a\xccL\x1f\xee\xc4\xdc\x99\x19\x64\x1f\xe6\x88\x95he\x97" "\x7f\"$\x90\x86\x80\xdcIon^\x18-\x93\n-\xc3\x8b\x33l\xdc\xb\xd1\xd5\xce\xec=48\xa7" "U\no\xf1\x46\xbe\xf1\n\xa0\x1a\x8I\xf7\x15\xdaRZ\xbf\xc0\xcc\x31\xbd\xb1\x87\xe9" "w\x82z\x8f\xd2l\xd7tWMV\xb9\x44\xd0\x94\x88\\y\xc6(\xb\x98\xc4\xdf\x88\x1a(\xc2\xab" "\xf8iY\x7\x31\x8d\xed[8\xc2\x99\x9e!\xe9H c\xc3\xfen'\n-\xfa\xe0R\xe2\x96\x11\x95" "\xf6\xe6mP\xc0\xeftHUb\x3\\\xf5\x65\x90\x62\xc2\xd2\xfa\x4\xa5\x99}%9\xc6\xea\x7f" "\x9d\x37\x1a\x7f/YL\xf5\xda\x34\x64\xc3\x0\"\xed\x9\xf\xf\x37\xd3\xbf\xek\xcY\x82" "\xfd\x14\x6U\x88\x16\xc4\xed\xe0\x82\x12`\xce\x92\x1a\xa3\xd8\xd5\x87\xf9\x65\xfc" "{g\xbe\x99m\xf9\xcc\xe6i6cV5it\x9fz\xf\xca\xfd\xb\xb1:\x90\xb8\xb3\xa8\x86\x42\xf9" "\xf1\xe6\x65\xff\r\x84\xc5G\xcf\x38\x30H\x93\x8et>\x1aS\x9c\x12v\xde\x42\xc8\x95" "\x5\xd1\xc5\xe5\x91\x66\xc2-g\x91\xa7*1\x9\x88l\xc9U\x99wh\x89\xfd\xc6&K\x14\xae" "\xfc\xd9R9w\xd9\xc8\x91\x8fXi\xf3\x98\xe3\xaeP\xb3\x8a\xb1`}U\xe5\x97\xbe\x61_\xeb" "-\x3\xa6\x1cW\x98\x99\xe5\xd5\xae\x9c\x15G\xa4\x1bvrY\x15T\xee\"+Z\xe0l\x9c\x89@" "\xb7\xb8\x4\x39\xda\xd4\xc9\x85\xca\xd4\xb4\xe7 \xcf^\xc0\x88>T\x9b\xed\xd0\x39L" "\x1c*\xb6\x90\xe4\xf9%ZH\x97\x7\xef|c\xbf\x86\x7\x90mf\x82\\Qeh\x16\x41@\xcc\xd9" "\x0(\xfb\xcb\xe8sR\x0\x7\xa4\r\xcz!vAU\xbd\x9a\x2i\xee\xb4MR\"\xf5|\xfa\\\xcb\x84" "\x85\x93\xf5\x34\xdb\xab\x0]\x8aO\xd5\xc8\x97\xa4R\x19\x46\xd0\x15%z\xbd\"\xd4r\xb5" "1V!s\xaa:\xcc\x93,\xeb\xfd\x17\x8\x8b\x45\xdf\x2\xe9\xd1\xde\x9ev\xc9\\/\x8d<>\xf4" "\x11\x18\xf4\xd6\x84\xac`a\x98;\x16\x44z\xa9Jz\xde\xbe\x8f\x95\\\x1c_\x8\xc5J~TC" "\xb8\x91\xfal\xb1!\x3\xc5\xb6\xd6}y\x88\x44\xde\x88\xfb\xf2\xd6\xb9O\x12\x34\x89" "\xae~P\x89\x63\xe\xd3\xff\x9c\xf3I\x1fo \xa7\xaa\xb8\xab\x39^FC=\x9d\x83og\x1d\x63" "\xd9\x89\x9V|\x82\xa4i\xc1\x16@\x17\xd4G$\xc9\x16|\x7f\x90M:O\xe2\x93/\x9ev\xa8\x84" "h\x96[\xd3_j\xc7s#aTf\xe\xb4\"\xc2U\xd4\x8e`\x99\x64I\xa0\x18\xbb\x19$\xdd\xbHl7" "\xa5\x95\x9coXX\x8I9\xb1\xd3!\x15\xd9\x5\xd9\x17\xa0W)\xa3\xcd\xd2J\xa6\x9c\\\xff" "\xd4\x1f/\x80\xab\x10\xe6\xc3\xaf\x88\xcc\xba\x66\x1f\x8b\x39\x7\x11(\x9c\xed\r\xda" "\xf\xa7\xa0\xd0\xc2x\xbb\x85\x83i\xd6\xd3|X\xd6\x1d\x38o\xc7\x8f\x65\x33q\xe5\x6" "\x82#S\xa8k\xc7\x34\x82]\xbeW\xe4\x1a\xe6\xcf=\xa4\xd1\xf8\xd6\xc\xad\x81\x61\xed" "\x94\xc5\xbK\x99\xabL\x88s\xed\xbaK\x1fn\xba\xe3\xafO\xfdn-\x1b\xa6\xe7\xc3?'y\xcc" "\xae\xa3i\x16\x34\x65\xa5\x31\x93\xbbhR\xf3\x90\xe5Z\xbd\xe1hG\x81\xa9\x63\x6Z\x5" "\xb4|\x7f\x16\xbe\x88+7\xa2\xc3\xa5&\x98T\xbb?'\x1f-\xd8\xb1\x33\xca\x8b`.\xc8\xbf" "1U\x5<{\x9a\xf6\xc6u\x92\x42\x8e\xf8\xd4+\xa0\xc4\xd4\x65\x14\xd7H\xdd?\x87\xa4\x62" "\xaa\xc4\xb0\xa1\x1dLM\x16$\x97\xbe\x96\x8b[#\x1d\xbc\x9a\xe7:6\x93\xe\xde\xf0\x11" ".\x10\xea\xce\xd6\xe8}\x5\x11\x92u\xa6T\xfd\xff#\xb\xc6P(\xcfN\xb5sm\xcd]\xdf`\xfc" "yVn\xfb\x92\xfaj\x7\x62[\xa1\x1f\x42\x0lhT:`v\xb9\xf1\xc5\xf\xc9\xd4G^(6\xbc\x83" "\xbb\xc5\x14\xe\x99\xfa\x84\x3\x65\xbb\x7\x1f+^\x12\x45\x89\x15\x10\xa4\xc2 4\xf7" "\xb0\xc0$V\x98\xe9\xd9\x84\x42-B\x82\x0\x41(\xd3\x8f\x1\x9b\xeb\xb7\x9dJk\x9b\x98" "Z2<\xf4\xa7\x94zjV\xe9\xfe$\x9b\\\x8f\x87\xe2p\xe5\x96\x4(`\x82\xa7#\x8d\xa7\xfa" "\xc8\xd0\x3\xfbr\x17\xacp\xd8\xd9\xd0%\xa3'\xcao\xd9(e\xac,MQW\xf1\x32\xd2K:\xa4" "\xad\xf4\xa3\x95\x41\xbfL\r\xaf#\xf\xe2rj\x6\x9f\x33_\xc7\xd7\xe5\xf8!\x8dX\xc\x7f" "\xfaM\xe6\x99\xb0\xc8L5\xa5\x10\xbf~dDi\xaf\x32\xa2\x61\x64\xc8\x9\"\x9f\x91\x92" "\xd5:\xaa\x99\x82\x8c\x7:\x9c\x82\x8eYl\x12.;\xb0R6Li]\xe6\x8c\xca\x93u\xbf\xf9\x82" "\xe1\xa0h\x1\x7f\xb9\x39][\xba:\xd8\xea\xcb\x66\x31\x8b?\xbc\xb1qQ\xed@\xc5\x3I)" "\x93\x43\xb7\x97\xf9\x46\xec\xb7[\xd3l{\xb8\xc3\xd4\xd8\xd9\x9e\xb1\"y\x94W\x3y\xf6" "\x8\xd2\xb1\x65\x44}\xaa\x63\xfa\xdc\xf8\xd6\x34\"\x16\x9d\x97\xb0\xacpe\xbd\xe0" "\xec\xdco\xcb\xbf\xbcs\x8c\x88\xe6\xe8\xa2\r\xd9S\xc9\xc0\xb4\xb8\x8e\x1@+\x8\xd6" "K\xdf\xc3$\x5\x7\xa1\xc9=X\xbc\xd8 \xc7\xf8\x86)L\xbd\x6\x13\xe8{\xf6\xd0\xf4\xc2" "\x9u\xab\x63\xae>\x1b|\xe1\xae_\x1\xc2\xec\xc1\x8e\x89\x33\xc5\xbb\x9bs\xe6P\xff" "\xb7\x1d\xea\x15>\xa0\x63\x37giC\xa9y\x8e\xd5\xca@\xf7\x4\x92\x30\xdd\x9e\x8\x33" "C\x14\x83=/)\x8eK\xd3\xd5\xfb,QVl\xc1yo,>\x1b\xb5\x62#[\x91o\xea}8ro*\x18\x91\xdc" "\xe\xe7\x4\x31\x36\x83=\x91|\x15\xcZ\x7f\xdf\x41\xdc\x18?\xec\xc1\xdd\x6\x13\x66" "\xb\x0\x0\xfa\xc5\x11|\xe2\xcc\xba\x18\xd1l\xdaI\xc2\x1f\x85N\xb7\x97k\xdb\xb\xa9" "T\x1c\xa5S\x1e.<\xef\xb5\xf8w{\x98\x9f\x9f\x82^\x82\x1a\xc5\x96\x16\x34<\x9f\"\x8d" "\xfb\x4\x99\x96\x7f\x44$$\xa4\x3\x9b\xba\xc6\x1b=p\x14\x8a\x38\xa6n\x89\x8|\xce\xf8" "F\xd5\x83\xdc\x8ej7\xb0\x31\xe5:\x94\x3\x8bV\xb\x5\xca\x16\xee\xc3g\xa3\xb2X\xa6" "\x96\x1f\x9aH\xc3\x8b\xb6\xdd\x98\x86\x6\x1e\xec\x86\x3\x9f\xe5\xf8\xf7\xa8\xaf\xa9" "7\xf2\x13w\xc\xc0\x62\x9d\x61\xc7\xb0#\xf0\xf9\xb1?\xf4%\xa0\xb2\xdc\xe1\xfen\xb7" "rK\x0\x1a\xa4\xc1\x87\x93H\xdf\xca\xd1\xc5\xc9\x35SD\xa6\x9e\x98\xd6q\xed\x81\xc4" "!MtT\xd5\x7f\x36p\xa1\x14\xf6\x97\x38\xc\xfdz\xedo8g\x92\"\x43Mt\xa5\x93\x10\xfc" "\x99H\xf3\x15\xf\x80\x8\x96\x1a!\x9e\xfi\xe4\xa4\x10\xf0\x13\x64)\xac\x97\xe\xa1" "\x94\xed\xac\xcf\xe5X0\xa7lk$\xac\x44\xb3+L\xcb\xa0\x1#\xf8@I\xb8Y9\x10\xc7\x14n" "\xa1z\xac\xe0\x85\x9e\x8f\xff^\xe1s-6B\xcb\x35\x9d\x41\x91\x97\xf7\xdc\x1f\xf7I\xd4" "i\xf8\xe8\x8a\xeb\xbe\xab\xb9_W9z1\xc9\xfa#N\xf8\xfa\xac_\xee\xa2w\xb7\x8a|\x6\x13" "\xf1\x84\x45\x8b\xe7#_z\xfe\xd6\xd8\x82L\x1e\x84\xe3\xd1\xda\x9a\xed\xc6\x1d\xe2" "'+\xf7\xa6\x33\xd6\xa3\x3\xe7w\x12\x34\xb6\x83r\xb4U\x3l\xb1W/ j\xad\xf9}N=\xb7\xc8" "H\xf5(\xb5\x83\xbaY\xd9\xf7\xc3$b\x93\xeb\xfb\xef\x15\x9\xfe[\xe5\x41\xd9s\x81L\xac\x45\x86mk" "\xc3&X?\xf4R\xb\xab\xa7\xd1\x7{\xd0\xd9\x1b\x95\xby\xf7\xab\xd9\x8a\xbd\\\xfat\x94" "\x11\x65\x1d\xcf\x62p\xfb\x9dK%\xa9\xe3\x43\xf1\x33\xb4\xd7\x87\x95j!\xf4\x37**\x13" "\xb6\xc1\xa6\x11\xb1\x8d\xc5\xb6\x19J}\x94\xf6\xc0G\xd4\xd5\x4peCR\x9cU\x19\x62\x8a" "fF\xa2\x9a\x9f u\xea\xe8_8\xc2\xcb\xaf\x98\xf5\xd5\x96\xfd\x32p\xce>\xb0\xf\x61H" "\xde\x89\xa8G\xdfYu\xda\xfe\xe9L\xfa\x33\x1c\xfb\x0`\x12\x8\xc\xc5\x32~\xd0\xb2\x17" "\xd4\"\xdfv+\xbf\xdc\x66\xd1\xa3&\x7\xe0\x30\x1e\xcf\x7f\xc7q\xc7\x18\x44\x3\xed" "\x1a\x6\xea$\xe9\x8c\x6\x45k\x82\x9d\xffxhs\xc8\xd9\xeb\xd1y\xb3K\xd0\xcf\xb9\x1b" "r\x9b\x93\xb\x8b\x1v\x85\xf2Y^\xc9\x8dq=p\xf\x44\xf3\x88\x1f\x8a\xf8\x5\x8d\xf6\xe3" "\xb0\xfb\xbe\xf0\xa0q9mfY\x84@\xaa\x83\xa1\x61\x8e'\x80\n\x99;vJ\x8r\x5\x89\xc9t" "u\xcfP\x7f\xfb\x8e{\x9e\xc5\x92\xf0\x1f\x97i\xb9\x9fT|\xe6\xf1+fQ\xed\xc7\xc3\xe" ")^\xbb\x83\xdf\x9c\x9\xe2Nq\xf3\xe9\xd3\xc3h\xf9-{\x0\x81\x88\xac\xda\xc2\xba\x61" "y\x8\xfL\x1f\x87}\xb2=\xa7\xe9>Sm\x83\x96\xc3\xfb\xfe\xf9\x43\x1c\x81\x45\xe7\xe8" "\xb9\x80s\xb6\xbd\xdf\"\xa6\n\x1b\x95p\xb2\x1f\xfa\x32\x9c\x11\x17\xba\x80\x3\xf8" "\x9ck\xdb\x3\xb7\x1c\"\xc9P\x94p\x1a\xf5\xa3\xca\x1\xe6\x9d?xe\xbc/\xe1\xae!0\x99" "\x85jaC2\xfb[\x2\x43\xca:\xc8\x16\xce\xef\xb4\x2\x9a\x46\x3=\x9dG\xbe\x96\xc1@B\x19" "\x7\xc1\xf0\x13\xb4\x89l\x92{\xe7}\xec\xb9\x8bW\xf1\x46\x1a\xa5\x92T6(\xc8<`I\xf6" "\x1f\xaa)\xc4\xa5\xe\xee\xb8\xfc\x42,(f\xae\xc2\x32\xaf\x44\x14\x4\xf2\x36\xd4\xb5" "\xc7\xf0^\xd1x\x1dY\xda:\xa3\x45pLI\xe3\x81p\x86\x8e\xa3\xf7\xc2\x9cK\x98\xd5\xc6" "C\x96h\xcck[\xfb\x9]\x84\xad\xe1\xb4\xc4;\xff ^exR\x19}\x89\xd9\xcc\xf5&\x8e\xcc" "\xe2\x8f\xf0\x96\x14\xb6W6>\xe7\xc3\xe7\x2\x43\x81\xc7\xc5\xa1\xc1\xbbZ\xc6l\xfd" "\xa3\xd3\xdc\xdfVh\xa2\x82H\x3\xb3\xa3\x94\xb6\x1c\x9c<\x89o\x9Y:\xce\x45\xca\xb6" "\x97\x64\x41\xd7'j gx\x1b\x18Q\x4\x8\xdf]\x9\x61^\"T\x7\x5\xe\xc9\n\x7l\x10\xd0\xae" "6\xd3M\x16\xe1\xaa\x3\x1d\xf7\x31Pe\x1d\xcfN\xf7\xc4\x9a\x39\xc:\x6\x83\x97\xdf\x87" "\x11\xea\x9b\x1c\xad\xbcIj)p\xb4g`4\xb6\x12\x39s`\x99\xcc.p\xdf\x8c\x64\x6\xcb\x1d" "W3\xc\x39L\xcc\xf1\xc4\x85\xd2\x35\x13\xb3\xfb\xe4N\xb0\xe4\xa1\xbd\x9b\x13X=\x17" "\xfc\xc5T\r\xc0I\xfcn#8\xf8\xfb\xc1%\xfe\xf3o\x1b\xe2=\x9a\xd3\x88^\xc3\x31\xd2\x41" "(Sf\xb4\xa4.\xdd\x8\xb2\x97\xc1\x15\x8c\x9e\x65\xd7#^\xac\x13\x8f\x5\xba\x97\xd7" "\xf9[\xba\x37\x5z\x9\x41,?\x91\x91,H\\];\xednP~;|fx8U\xed\xe3kU\xa0z\x16\xda\xe\x61" ",\xea\x93<\x6%\x14,3]\xfb;\x9d\x89\x42I\x8e\x8f\xab\x15\x94Q\xc4\xc1\"\x98\xab/Y" "l\xaa\x5\xbf\x8e\xba\xf4'\xb5>5\xd6\xba>\xa6\x30\x80\x66>-\xb7[\x11g\xca\x92]zK\x5" "\xd1\x9dqr,8\x8a\xaaNV\x90\xc1\x9c\x36T\x6\xe4\x35m{w\xef\xd9\xe6VD\x98\x44\xfd\x64" "|\xd1\x96\xf9\xf1Y \x9d\xb5\xaf\xd8\x9f\x66Lj\x1f\xf6\x1f\xaf\xd6\xb7N\xb \xf6\x89" "\x93R\x87\xac\x96\x1b\x83\x1b\x32\xfb\xe4\xc1\x9d\xbf\xe2\xb3\xdf\xdfN\xd4u\xc6\r" "w\xc3@\xc6w\x87\x3\x61\x84|?U}-\x8f\x87\xd5\xe8L\xfc\x8e\x1e\xec\x98\xa8\x81P\xe5" "\xb1\x62\x15\x3\x19\x1d\xf9\x89\xd4\x8d\xc3\x5\x2\xdc\xfe\xe2\xf1-V{\r;\x1f\xa4\x19" "\x98\xd5\xfc\x9d\xc\x1d\x1f\x83\xf8V\x3\x38\xbb\x10\xe#2\xb0&\xa3\xcd\x1c%\x1fU\xac" "\x8e\x42\x61\xbd\x9b\xba\xbfv\xa0p@\x2\x39gl\x1au\xb\x34J\x8ch\xff\x46\x8d\xa0\x3" "\x15\xbc#\x1e\xad\xb2\xde\x89\x99\xcc\x66\xb\xa3\x3\xa8\x61G\x14\x66g\xe3,\x96J\xf6" "J!m5\xb8\xaa\xe3s0\x8cu\x2HW\xc1\x1f\xba\xa5W\xd9x\x13\xf\x42r\xc9\x92\xbb\xe5\xff" "[7\xbf\x18\x93\xba\x93lj]\xac\xb1\xfev\xb1\xae\x1\x11w\x16\x33\x80\xb\x9f\xdd\x8d" "\xf2\x8b\x86\xef\x38\xf5\xbf\x6\xf7=\x9u\xaf\xcam\xae\xd4\xb4p\xd5\xd4NRx\xe\x2\xed" "\xeb\xaa\x8e\xc0rL\x92\xb3O\xfb\x62s\xefOT_\x11WS\x7\xa5o\xf2\xa3\xb4\x88\x3@PQm" "9k[\xd8k\x3KN\x81X\xc9\xc5\xed\x8d\xdfg\n\xf2\xce\x38\x8d.\x1eg\xb5\xbe\x11\xd8\x41" "\xc0\xe6\x94\xe5\x34\x9e@\xe7\xa3\xb5\x34\xd9\xd6Y\x8dp\xef\x19\x1d;\xd9\x5\x85\xc0" "\xab/Z\xcey\xcb\x6\xb4\x9b\x45\xf7\xc7m\xffu\xa8;(7O\xa4\x64\xb9\xf2\x9dPy\x8\xba" "\xd0\xa7\xcf\xea\xa9\x13\x8\xeiE6\x15\x65\\\\\x8f-H\x9cv\xf7l\x80\x12i\xecG\xe5\x33" ";X\x8aJo\xa6\xd1>\x3\x9fR\xa0\x95!\xa7\x90\xd2g\xa9\xd2:\x16\xd6\xd8\x1b\xdcN\x6" "\x6\xec\xfc\x66\x87\xf0\xbe\x8d\x9\xa2\x90\xad\xe3\xe7\xf0\xa7\xf2<\x9e\x36\xac\x1e" "\xe1&\xe2\x18M\xa7\xf2\x92\x36\x8a\x8e\x87\xc3l\xb9\xbj5\xe3HQ\xf1^0.\xe3.\x8f\xb" "M\x16\x33@\xa1z\x11~%\x14\x33\xff\x95p\xba\x8dq\x92\x35\x93yc\xbbM.4\xc5(b\xe4\x4" "<\xf2\xc2\"\xdd\xcb\x85\xd1N\xe3\xab{\xb9\x66\x2S\xbf\x6!!\xdc\x65\x33J\xe2\xe2\x39" "\xda*[\x6JU\xfc,\xe6\x34\x3\xc6\xaf\x32\x66\x1c\x33R~\x83\x97\xb3\xa3\xe9'\x97\xf0" "TpWj\xe3\x15\xc5Q%\xbb\xb4\x37\x81(\x0\x1d\xcd\x64\x9c\xf8Y9c\"O\xc4R\xae\x8a\x84" "\xac\xbe\xe6\xb0\x46+K\xa5\xe6\xba\xb2\xfd]\x9b\xbe\xc7Tqk\xfc\xc5t\xdf\x34\x0r0\xde" "\xderL\xd0T\x90|$\xb7\x4\xda\x1d\xc5\x84\xbf\xd2\x88\xbd\xb4\x1aNe:\x0`b\xc1t\xbf" "m\x4\xe4\xb5\x8c\x9fG{\x16\x35\x43\x65\x18\x97\xd2\xf\xe0\x90\xf7U\x99\xab\xc1\x83" "\x98&\xaa\xec\x7f\xee'\x16%\xab\x8\x6-\x18&\xad\xbd\xfc\x89\x66\xd9^F\x19\x11\x84" "G\xca\xb0\xfb%\xef\xff\xde\xb7\x30\xb6\xe\x1\xb3\xce\x33\xad#\x8cV\\+E~d\x88\xf3" "\xea\x5\xc0H!\xd4\xc7qP-P\x7{\xe9\xaa\x16\x90KW\x97*4\x18\xcbV\xfa\x42 \xcdS\xbd" "\xaa%\xbb\xb2\n\xe6kj\xd4\xfc\xfe\xd0\xf5\nV>w\xf9\xf4\\\xca\xbd\x87>\xd3P\r\xb6" "\x9a\x15\x7\xd2\x1cZba\xe1s~\xbd\xe5\xdd\xd7\x2\x9aU%\x10\xdc\\\xf4\xa4>\x18\n\x61" "&\xaf\x5\x8b\xac\xd0\xb7\x99{n\x89\xa1\xefN\x94\x9\xf6\xaa\xcbr\xe0O\r\x4\x94\x30" "k\xb7\x31\x6\xb4\x9f\xc6\x8b\x89\xb4[,\x97Z\x84\x2\x7,r\x8c\x66]\xf4mE\xe1\xfe\x33" "\xe5\xf1\xe9g\x88\xc9\x95\x8\xc9\x35m\x81\x31\x4g\x2\xfd\x80\\\xc9\xaf%]o-\xd0\xb2" "\x19\x9a{@j\n\xeb,=\xda\xb2Y\xea$[t\xc8i\x1a\x87\xad\xe3\xa5\xafUzQ\x1\x63\x36\xfb" "\xef\xe1\xbd\x9e\x91\x91U\x99y\x90'\x91\x16H\x87\rte\xe7=\xe1p\xd3\x6\xe0\x85\x7f" "[\x15\x34\xa3PG5\xe2\xe8\xe\xb8\x9fG\x82$;|\xfe\xd7Y\x3\xce\x13I\x7fU\x16\xc9\x84" "\xcc\xcb\x9a*w\xb0\xcc\x83\xb4\x8d\x83\xe3\xb1Js\xce\x8x\xffW\x19\x30\xe6\x44\xab" "L\xfa\xbcT\x13\xf3M>\xb1\xcb@\xca\n\x34\x8b\x9b\xcd\xe3\x95 \xa5@\xf1\x39g\xfc\xdd" "\x9aV{#l\xceQ2\xf6#\xddx7\x1\xea\xe1\xc8-\xce\xee\xa7)\x13\x38\xde\x32\xe9\xca\xe7" "s\xed\xa4\x85\xdd\xb7\xc7N\xdb\x14\xcb-j\x17\xaf\xdf\xec\xb0Q\xb2\xb2\xa8\x66\x34" "H\xba\xbb\xae\xddT\x84\xef\x65Jf\x1d\xe0@C\x84\xcbpp\x7fO\xf3\xeb\xbc\xcc\x85h\xba" "4B|\xff\xc1va\x95\x88\x94\xa7\x10\xde\x89\x41\nm\x85\xf6\xdc\x83\x61V\xc1\xe5\xa2" "\xa2\xe7\xea<\xc7\xaeg\xeb\xf3\x9b\xb0\x9bs\xdd\xa5?D\xb6\x90W\x4\xcf\xc9\xac\xd4" "\xe0\xc3o\xff;*\x90\x34\x39\xd2\xc6W\xfav\xd2\xac\xf\xeJ6H\x8b\x90]o c\"\xf6L\x9a" "\xc5\xe4\x3<\xd4\xb3\xc1\x62k\xaaqo\xba\x7\x7\x14:x\x88*3\xac[AZ\xcd,\xed\x7$\xb8" "%KS[\xd2\x18'j]\xf\xa4\xeaq\xe8\x11@\x83\xe2\x15\xcf\x86\x0\x8c\x90\xa2\xc8\xd9?" "\x17i\xb9\x16\x0\x62\xad\xd4\xd1\xa3\x10\xeb'\x1e(\xe2\xb9\x7\xf0\x15hq\xfc\x82;" "\xc6\xe\x12)\xb\xe1\x88\xc4H\xb5\xe9\xc2\xb2\x7h \xdd\x32\x1c\xd9m\\q_\xf\x1b\xb6" "\xff\xf3\xfb\x33~6Y\xbe\x98\xee\x64\x34;G\x9c\x7f\xdd\x97t\xf0\x81t\xe4y>\xa5$\x1" "\x5\xec\xcc\xbc>\x1d$\xb6\xf4\xbf\xe1\xae\x85Ys\x12\x35gv\xb4Rj\xe6Ozq\xad\x7f\x87" "\xbe\x80\xc0\xd4=P`\xb7;g\x9\xc\x44\x1a\xb1\xd0\xbdu\x88\xab{\x18\x10\x32\xdd\x33" "\xce&\xce\xef\xb0\xd8\xb6\x30\x92@f\x9\x9b\xb2\x62\x7T{\xc6\x1b\xft\xfdsO\x96g,j" "\x93\x6l] \xe0@\x97\x1d~\xd4\x61\x38\x9a\xff\xd9\xfc\x34\x32\x44\x91\xf1\xd3o\x14" "\x84\x6\x8e\xb1\xec \xb2\x12\xfa\xcc\xd2U/\xd7\xdc\x45\x8e+$\xf8\x9c\x15\xdf\xb0" "\xa1\xee\xc(\xad\xb4\xaeI\xe4\xa8 \xdf\xb1\xbb\x0\x9b\xa8P\xa0\x96\x7f+~=\xe2\xf7" "\xda\x6\x88X\x6\n\x19\x87\xed\xe2\xf4\xea\xe7^\\W\x92U\xe2\"\x9d\xaa~&\xb2\x3(\xf6" "P{\x1b@\xde\x30\xa8\xe1\xe6\x14\xa5\xd3zs\\e#\xfe\xc8\x64\xa6W\x14\x1b=?\x95\x9c" "\xca\x62X?\xe9;}bxe?\xaerm\xb3\x17?*XH\x86\x12\xd2\xf1\x38\n\x95\x14*\x4]\x19\x95" "\x9b\x80\xa6\x2\x61!\x96\x16\xee\x89\x0R\xe8\x13#)\x9b\xf7\xa4\x3\xfe*\xa0\xc1y\xed" "\xac\xad\x1e\xb4\xc6\xa4\xb9\x12\xf8~\xfaW\xc6\xd4\r[\xfe*\xbeh&,\xbc\xd2\x96he\xb6" "\xffV\x4\xb0\xb5;\xff\xb7Od\xc8\x62\xa3\xce\xfdk\x9c*\x7f\xb9)@\xc2\x9d\x37\xcd\xc4" "{\xedy\x89\xdc\xeeG\x1a\x18* \xfd\x32\x2\xf3\xb1\x65#\xe9\x63X\x9a\xb\x45\x12[\xbc" "\xebUm\\Y\x8f\x88\xd0\xe0\xce\x9c\xedV5\x16Z\x99}\r\xc8\x33\xf2\x97ZU\x81\x89\xc4" "9\xb0\\L\xca\x64-Y\xf8\x1e*\x89\x34~qv4\xa9\xbd\x9fUnU\xb1\xb5\xde\xab\x9b\x2\x62" "\x85\x89\x8c\x0\xb2\x1a\x7f\xa6-:\x86\x19`\x8b:\x18\xfb\x83\xd1\xd0k\xea;\x9c?\x9d" "<\x1\x82\x37\x9d&4\xff\xcc\x11\xbb#@@\xd6\xcf\xc7\xe5\x88\xe9\xb0\xbe(V\xfb\xc1\xa6" "\xa8\x91Q0a\xd3\xce\xf7\x8d\xb4*\x92\xb6\xb4\x12\x9c(\x5\x7f\xff=\x15O\xce\x8a\xb4" "\xf4u\x1f\xd0\xf9\xc0R=\xbb_\xb1\x30K\xdf\xbe\xe7qY\xac\xd9IHcn\xb3\x91%M\xf6_\xd3" "{\x11\xe5O\xfb\xb2:\x8e\x8b\xdb>\xad\x80\xed\xb7\xf2\xef[\xf5\x2@\x93\xd1\x98Y\x99" "\xd7&\x0\xbc\xf7\xf3\xce\xe8\xd5&&\xf\x4\x8aJ\xdcpU\nW\x99\r\xbd\x13[\xee\xa9\xba" "\xf6\xc6\xc6\x80\x43^\x8f\xc6\xa7jy\x1e\xec/\xc5\xee\xfd\x65\xf8\x63\xe7\x44\xa7" "\x7\xda\xc1\xee\x8d\xe7\x85Q\xf4;%\xf2\x64\x65q\r\x19\xd4\x8eh\x11\xaf\xc7^\xd5\xe4" "S\x16\xd4\x14\x7I4\xc8\x99\xbd\xae\x65\x88\xd9\xfa\xa2\xa4\xf4l\xbf\xb3]I\xfa%n\xe" "\x3\xff\xd3\xa3z\x1dO\x89\xc3hj\xa1\xaa\x5\x96\x0\xde\n\x8e\x80\xb\xd2\x6\xad\x16" "p\xe1\xf`\xe6\x1fO\xc7\xeb\xea\xa6;\x87\x1b\xc0\xb4,\x80\xc#1\xbc\n]\x11\x9d\x82" "U_W\xde+M`\xcb\x34\xd5\xb4\x18\xc4\x9a\x32\xc2<-)\x90\x9b\xda\xb9W\x2\x1bi\xe7\xd1" "\xe2\x83\xceZ\x9f\x38\x62 \xa1\xff\xe3\xe7\xfbg\x6s}b5W|\xdf\x9c}f}\xc\x5(7\xc8[" "6x\x8b]_\xa3\xbd\xb9Rj\x19\xfb\xd5\x87\x0\x9ax\n\xee\x45N\x9e\xe9\xaeV`1\xdc\xaf" "%\xba\xc4\xef\x11Z\xb6\x11i\x8a\x44\x81~\xe9\xba\x61\x46\x66\x30\xfcx\x9fn\xcG\xea" "\r\x85\x43\x34\x98i\x3\xae(\xc9$\xe0.\xb0\xcf\xd9\x84\r\xec\x82\xdb\xaeu \xe4QS\xe5" "wQ\xf9\xfb\xdcn\xf9T\x9ft2\x1d\xc8\xeb|\xa9\x93Q\x7\x96\x17g\xc5\x8c\xa5`P(\xc5\xc5" "\x3\x15\xd8\x37\x85%O\x9f(Z\xa9<\x19 \xc6\xed\xe9\xc8l\x82 -\x94\xfby\xad\x99m\xe6" "\xf4\xc8\xb6[t\x13\xcd\xa6\xb\xa4\x9\x7\x63\x9\x7r\xe9kA}\xfe\x33\x1d\x7f\xb4\x44" "\x7f,\x9\x88\x97\xer\x9^\x14O\xf9\x2\x46\x10\xad\x80\x9b\xbcT\x1f%\x1b+\x98\x1c\xdb" "\xcbo\xc6\xd5\xda\xd0\x89\xc8\xe8\x34AhFz\"\xae\xc3\x86\x44_P^\x2/\xc8\xf8$\x8f\x62\x82" "[b%\xf3[\x1d\xdb\x3M\x1e\xac\x19\xe5\xae(\xbe\x81ko\xe8\xe9\x42\x84\x80m\x84\x1b" "\xd7\x87\x45s\x9c\xd6\x32\xde\x8aT]\xccwT\xb2\x4+?\x1f\x39\xd1\xfdr\xb9\x2\x8a/s" "\x85\xfa\xfb\xb3\x64\xc1}\xa1~\x8b\x8fj#\xcc\x1cY\xe7X\xa6\xfe\xe4\xe5\x86\x13{(" "Z\x8cq\x4\x14K8\xe3I\xf0\xe&Il\xc8\xc3G\r\xde=}\xc7\xa4\x9b\xbc\xd0\xbf\xe2\x37\x83" "\x0!\xab.l\xbd:\xacY\xd1\x8f%\xb6\xad\xb3)\x8bx\x83\xe0\xda%U\x93\x31\xb1\xc5\xa1" "\x9b#\x2\x41\xaa\xd2\xde\xc0\xff\x45R\xe9~\xd4?_q#)\xcf\xc7\xf3\xbe\x8ck7\x12V9\xb3" "\x87\xf4-\x85T\xe3\x33\x32\xcc\x41[,}\x82\xa1\x80\x37\xd2\xd6\xb\xc9\xbb\xe9\x36" "\x89\x9d@\xe7\n\xca\x10@|f\xc8]\x96\x38 \xa4\xa4\x1d>\xf8\x37\xa4\x44\x66\xbc\x16" "\xec\x17\x98\x9c\x10\xbd\x8bpo\xcd)H_W\x98\x1e\xa5%~\xc7\xe3\xcc\x95\xb7,.\xfa\xdb" "\xf7\xe3\x8c\xea\x9\x66\x9b\xec\xbev\xd0\xd9\xa6\x9d\x44\xe\xea\xd1X5\xd2\x1d\x45" "[\xd7G\x8@V\xc6\xbcg\x9\x2rb\x85\x17\x7f\x16)\xab\xf2\x8f\xfcw \x9bY\xb0\x39\xf2" "\xb5\x34\x80\xe0\x9e\xf0\x30V\x6\xf9\xce{\xbf\x0\xd9\xc0R\x7f\x95v\xc9j\x9eo\x9b" "\xdeX\x8e\x63,\xa3\x38\xfb\x91\x88\x9d#\x12\x8d\x97\x64\xd5\xa0\xf0\xb2\xe3;\x16" "k\xdf~p\x9f\xc8\xe7\x9f\x62\xff\x33t\xb5\x83\xdaN\x8f\x45\x10(\x17=\x8c\x38v\xf5" "Z\xe4\xfc\x8fg\xaf\xe0\xcaL\x17\x81\xdb\x13\xbeX\x89\x1cq\xed\xc9\n\xb1'q.\x80\xe9" "||\x0\x2s\x7f,\xbdz|:\xd3R7\xc3\x91\xf3H(xc\x89\xd6\xcdYAY`\xf4\xc6\xffwQ\x90%u\xe2" "\xc4\xf7\\\xe\xa5NX2\xa6\x31/\xea\x90 KM7,\xa1qo\xfb\xc8\x33!\xd6\x5v\x14\xe8\xfd" "\xed\xe1\xae\xa5'\xce \x17\x9do\xab\"\xcd}[\x12\xbc\xae\xcd\x30\xcf\x34$\x85\x43" "<4\xde+n\x7f\x3I\nP\x11\x87\x7\x8a\xb9\x0\x62lt\xc9\xfaLK\xa7\xb9\xa0\r\xe5\x15\xe5" "Rn\xb\xaf\xb5v\xa4t~k\xa2\xa0\x96\xc3\xa5\x83\xe2\xf9\xba\xb0H\xf9V\xe3t<\x17\xc0" "\xd2_\x1a\xa6\x13T\x16\x82\xed\xcfP\xdd\x10*\xaag\xd8\xbcV)?\xebI5NSJP\x83\xc7\xc3" "z\x8b\n\x8q\x1f\xf7\xdbk\x0\x8f\x12\xec\xa7u.\x4w\xcc\xb1\x6\xa7\xeb>\"w\x9a/\xf2" "\xda\xb3\xdd\xe3\x8d\xfc\xdf\xd3\xba\xbf\xfc*\xc0<[\x8e\x1d\xef\x18\xfe\xa3h20\xf" "T\xd6M\x1a\xb9\xe4\xd9\xd2P\xfb\xc7\x35q\xdc\x96%\x18\xb4x\xb\xc9\xf7\n\xa4\x33\x90" "r\x8a\xa9\xa0j\xd6^\xb0\xdd\x1eykyp\xf6y\x8c\xca\x98\x9\x99\xc6h\n\xb4%\xb1\xdc\xac" "\xd4.s\x9f\x7f\x9ex\xaf\xbdNJ\xe4l\x13\xf8\xe4\x11\x17\x93r(R\x5z\xe1\xbdT}\xa5\xb6" "\xa0=\xa2\xd4\x12\xe8\xa6\xa1\xb|\xfe \xd2\x33\x45WTz-[\xa1yI\xb8\x41\xd1\xbe\xf5" "\xd6Y.\xe2!\x18N\x7f\xcdy\xaa\x8c\xa5\x17\x8dr\xe1\x2]\xe\x9\xf1\xaa&\x8c\xce\x62" "\xadS\xe9~\xb8\xbc\xa0\x90tb)\xbe\xc\x66\n\xd3\xc5\xa4W\x8\xc3\xfa\xa2{1\xd5p\xf1" "DTbW\xb5\x8f~r\xf6\x9as[\x94I\x81\x31\xd9\xfc\x41\xe7JR\x9f\x8a\x43m=n\xb8Ht\xe0" "Y_\xf7\x99_\xd4\xea\x66j\xc4\xb\xdd\x6]o\x1f\xb2\xc2\xe0\x9a\x36~j\x91\xef\xf7\xc6" "\x14\xe4\xbb\x4\xe\x89J(+V\xe0|t\xb5\xec\xdc\xb8\x38@\x81\xa7\xbc\x32\x14\x7f\x86" "x/J\xc8\xc6\x8eGO11\x15\xf\x31" "\xd8%}\xaeh\xda\xf7\x88\x80\xc9V\x93zb\xd0\xba\xec\x88\x37J\x96\x8b\xf0\xb4J\xd7" "racn\x85\xe9p_}s\x8b/\x0@\\\x97\xafp\"\xb3\xcfY\xa9-\x92&\xfcY\xa9K\xaf\x14\x42\x9f" "\xe7\x11\x8c`R\xdd\x12\xc8\x9e\xcaP\xc4\xfb\x34\xbf\x34HJT\xdf\xb\x66\x1\xf1h\xe8" "\xc1\xf2\x9\x19\xed\x1d\xa0v\x98<\x18\xael\xc\xa1\x7\xee\x46\xd5\xc2\xf7qY*\xdf\xaf" "\x9cN\xd4\xeb\x64L\xb2\r\x33j\xe6\xe8\xbc\xc7\xf1\xc\xbf\x9c\x1f\xca\x8f\x99\x8d" "\x7\x83\x91\x1f\x46\xc4\xd5L\xfdP\xe9V\x1d\xe6s\x9f\x13\xad\xf0\xd9\xda\xea{3\xfd" "\xc7\xec\xc\xc8\x11\xbcJi\xe9\xf8|\xba<\x8f\x97\xae\x8d\xc8\x14\x63\xb6\xc\xbd&r" "\xdb \x95n\x8f\xb2\xc9\xd5\x0\xae\x62O\xb0\x19\xc6\xee\xe0vrf\xc7\xd0\xa1\x8a\x99" "9\xb1Y\xe3\xedJ\x3\xe0TpH\xc8\xb3\xa5\xccq\x83\xec\xeeZ\x81\xa0\xa8\x62\xcb\xf1}" "\xe0U*\xda>\x14\xbc\xf7\x46\xfb\xd2\xb4\xcc\xd0\x9f\xbd|\x4\xc2]1|\xe7\x1c\xab\x43" "\x9f\x9c\x66\xcc\xa9J\xeb\x14.\xdaM\xe2\xdbV-\x87\x85\xc7\xf1\xb1\xd1\xb1X\x9c\\" "t\n/\x1d\xae\x38\x62\xceo\xc4\xc5\x66K\xfbX\x9f\xaf\x16\x30\x8aVr\xc3|\xd8\x12\xec" "\xa0\x34\x8f\xe\xff\x8a\xf0\xe3\xea\xac\x99`sp\x85\x90\x84&\xf9\x38\xe3\xcf\xc5J" "F\xf4nC%C\xc2\xb5\x34\xff\x41\x90\xee\x11tk\x12\xc3\xd5\xeb\xbf\xd4\x9a\xaeW2\x10" "\x89n\xc9Uo?\x88\xb8\x9\xc2\x15\n\x41o\\\xf0\xdc[\x6\x98I\xd4\xc6\x38\x83]\xcd\xa1" "\xd8\x94\x84\x92\x9aG\x8b\x98\x1a\xd0\xa9\xdc\xfd^\xcdm\xd5H(\xc4LN\xac\"v\x2\xb4" "\xaf\xa0O4\x95\xf4\x16G\x97\xa9O\xda\x64\x9eS\xcty\xdcv\xac\xdb\xb2>\xcb\xa6\x3\xce" "eO\x93\x38k\x81h-\xea\x1f\x1cG\x98\x30\xc5I\xd5\xfaH\xa4\x17\x8b\x80\xba\xbf\x61" "\xf7\x80\xd2\x94\x7f*\xff.\xaey\xa8\xcb\xf8:\xf3.?+A\xdbm\x9cPf\xc1\xb2U5\xa9\x17" "\xd9\x30\xa2O\xe\xba\x6\\\xa3Z\xf9\x42+Q\x9d\xebz\xa3\x80\xfe\xc8\xf4\x17S8I\xb4" "S\xa0\x84\x45\xe8\x9c\xef\xe1\xdf\xb5\x1d&\xbc.\xf7(S8Z\x99\x1f\x31\x8b\xc6\xc2\xf1" "\xbbs\xa9/\x89-\xb7\x10\x19\xa8\x1f\x8d\x88\xc2\xf3!<\xd4/\xfd\xd4\xa2u3\xf0\x1z" "\xaf\n\x9b\x3\x39\xab\x17&p\xa4\xe4\xb9\xb4\x1r\x0\xc7!\xea\x8d\xc0\xb{Y]\xa0\xab" "=\xc0\x2\x46Ho\x80\x3\xaf\xd6\xcd\xb1\xc\x37\x12w&\x1d?\xe1$\x12\x3\x19sD\x19\xb7" "U\xaf\xaf\x43q\xbd\x19\xba\xc5\xd9\x9d\n\xd5\xc7*t\xac\xed\x1d\xf8\x85\x62\x8e\x1b" "\xfd\xb9g(\xfc\xc3\xe3\xc7\xa6~\xefz)\x85\xea]\xf8y\xa8~\x0\xe5X\xe\x35\xa4\xdf\x91" "K\xe9\xf8\x1e\x8b~D\x8c\x83+}\x18\xbdQ `\xac\x89\x1d\xd1U\xb2\x2\x88N\xa8\xdbp\xa1" "\x81\x84\xb7\xe8'/\xb7\x89\x90\x63\xc1_\xf7\xc;\xdc\x7f\xefi]\x96\xf8\xf9\xe\x37" "o\xc0\xd1\x8f\xbe\x30\x7f\xca\xb0\x4\xbc\xae\xfdt\xd6\x12~\xa3\xcbq\xf1KU\x86\xf0" "r%\xcd\x1^ZS\x2\x65\x34\x95W\xae\xa8g\xbf\xe5\x3\x37\"\xc4\x9b\xf0\x8e\xf6\\\xbc" "p\xd5@\x1c\xaf\x8d\x1e\x6\xc9\x32-t\xaa\xd5\xe2\xf5\x91\x9d\x38\xac>\x99_\x1f=\xc1" "[4\xea\xfbQ8\xb\xe1|DW,\xc6\xc6\xfa\x95\xa2\xcbTM\x7 i\rx\xdf\x38\xa2\x17u\xa8(\\" "\x9bQR\xf8\xe0\n\x7\xc5\xc5\xfv<\x9aM\x5\xef\xb8y\xad\x38\xde\xbb\x8b\x83\r\x85\x99" "\xacp^V\xf4\x82\x45\xc6\x13\xac\xc2\x63\x30\xdeJ\xd0g(\xde\xe8\xc0\xb4@\xcc\x32\xe1" "\rt \x9~\x9a\xd9J\xa5\xe5\x92\x1\xeb\xbe\x30_\xd0}\xee\x33\x66\x39\xa7yR9\xa6\x88" "\xb\x94SG\x97\xd1\xa0\xb7.\x2.2\x1e\x89K.:a[Q\x99\x17p\x9d\x18W" "\xc3\x1d\x7f\x87\xa7\xa4\xdc\x46^m\xa2\xe(=`\xa9\x42\xf8\xca\x93\x99\xd9\n&\x8a," "\x1b\xb9vX\xe1xek\xe0lq\xc0+\x82\xae\xbf\xce\xdbQ\n\x80\xa1\x85\xcc,\\\xb4S\x93\xb5" "\x1e\x98\x6\xa8\x32 ,\xc4\xca\x81\x3\xb9H!_\x13:\x8e\xf7\xb5\x86__5!\xc1,<\xb3x\x86" "\x94\x64\xcd\x1d\x8f\xb4\xe5\xb9\"\xf3-\x87\x81\xed\xc7)\rh\xe8+Y\x8a.\xb0\x9aU\x90" "\xdb)8\x1e\x14\x88y\xb6]#\x1}\x82\x14\xf3\x42p\xbeG\x8atUo\x1\xf6\x9b\x80\xf\x43" "I'mN~\xc9<,\x93\x37 \xeaj\x10\xfe\xd9\x9e\x6\x1d\xf9\xb2\x4H\x7\rU\xb1\x38H|\xcd" "\xff>\x98^\xbf|\x8\xcc\xd2\x90[\xe7\xd2(LD\xaa)\x0\x93u\xdbH\x82L\x93\x8b\x14t:\x9" "l$\x8eWg\xd6\x88\x1c\x64\xbe\x93ZJ\x88\xf9\xf5V&\xaa\x5\xa0\x85\xeco\x8c\xd3\xcb" "\xb4\x91\xd2\x66\x37\xe0n\xaf\xc4\xbb\x81\xa0\x46\xd6\xb\x8d\x35 I\x8fG\x0\x5S\x1c" "\xae\xe0vd\x8e:]\xe1\nu\xb2\x65\xf\xde\xe2\xe0\x30\xd9\x81\x34\x94\x36/)\x18]U\xb3" "\x16\x92Z,IW\x91\xf0\xfa\xc8\xaf\x85\\\x64\x33\x0\xbc\xbd\x4\xdb\x15\x18\x17S\xbf" "\xf8\xc8\xc0yB\x83\xbdP\x12\x16\x9b\xfb\x41\xfe\xb3\xba\x8c'\xe4\xc6t\xe7\x6\xff" "^\xb9\xb8\x8bJX\xc5\x89\x38\xa4\xfa\xce]\x80hx\xfd\xc8Q\xcc]T\x96\xc8{U\xdd\x85@" "\xd0\xe\x87Mjx\xccq\xe9,\xb3k\xce\x33\xc6\xf9\xa7\xf3\xb5\x6\x8fIRFd\x93\xad\x1d" "\xc2\xd8\xcb\xcbV*'\xfe\x18\xcd\xdbz\x1eT\xbd\xeb.\xb3^\x87\xa6v\x9b\n/`!\x8a\xe6" "\x15\xd6\xd5\xe4\x9b\xado\xa9\x85\xc2\x1e\\\xa0\x33\xfeQ\xc3(4\xf6\x9c\xc5\xfck\xa8" "\xa9%i\xac*v]\xc6\x15\x9c\xe \x13,\xc9g\xb3qf\x1X\xb2\x8f\xc8X\x94\x39\xa1=x\xd9" "rq\x9b\xbaG\x6\x36\x91\xcf\xea,\x8c\x82q\xa5/$HJ0w_\xc1}\xb2)F\x9bp|E\x8d\x1b\xfe" "+\x11\xfcMS\xbc&,v\xb8\x84\xc5L3\xee,1\xfa\x9b'\xf4,\xa9\x1b\x8e\xf9L!m\xe6V\x99" "\xe9\xfa\x3m\x0\xea\x9e\x9\xed\x36$yL\x95\x63}\x15\x96\x8a\xe3\x98Q\xb\xc7'3\xb4" ":\x3\x9a\x9e\xbe\x43\xee\x6\x95\xf2\x8d\xbe\x12\xe4\x10\xdb\x16w\xd1\xe2\x1b\x83" "\xc\x3\x37\xaa;\x6\xa1\xe3\x0\xc\xd2\x82\x1c\xe0H\xff\xb0/\x12.q\x18\x38\r\x0}\xc5" "X\x3\x16\xf0\x0\xfc=8\x9\xb0\x2\x5w/\x3\xda\xc6US\x9b`/\xc8k\xe1\xf1*\xe3\xf8,\xd9" "N\xcem\xdb\x42}Z\xf7<\xc2\xac|\xab\x12\xd3O\x19\xab\x36\xf6\x99\xd2\x34\xcd\xf9\xb5" "UD\xd4\x31\xc6~#%\xfbp~\xd9Rn\xd0T8\xad\xb9\xbc\xb3\rkw\x1\xa4\xa6\x30\xab\xb0\x91" "_L\xfe-\x7f\xf7\xe0\xa1\x7\x99\xf5\xfb\xaf\xf0\x63\xf3\x36;2n\x1bX\x4(\x97\x14\xc8" "\xfcx\xfa\x7f\x45\x9a\x65\x99\x1b\x96\xa3\x99\xcb\xd7\x92\xfe\x38UU\xe\x42\xac\xf" "E\xba\x15@k\x8a\x13\x7\xd9\xadn\xadsl\xd8\xf\x2\x8\xdfH\x92\xdf\xc4\xdf\xe1i\xf8" "Q\xb2\x8f-\xa7\xba\xccj\x1d;\x1ftI/\x8e\x7f\xd1\xc7\x99\x3\xf5Q\xa1\x89'\x8e\xe3" "J@As\xd4\xc7\x45\x1f/\xd3\x16\xf2i\xc4\x8d\x36\xe4\x16\xf1mt{CXLAF\xb4\x16\x82\x41" "\xf3;\x8f\x45r\x9ag\xe2\x98[\x18\xeb\xc8'\x7f\x42\xe7\xed\xfd\xe8\x8d\xa5\x38g \xd6" "\xb3\x10\xc5\x64\r\xa8\x8b\xd8\xe4\x9cU\xbc\x1bh\x1f\x15[\xab\x9f\x9\x9e\x16\xd0" "\x15\xb9|\x1b\xe9\x19Vc\xb3\xe4t\xe6\xd0[\x19\xfdsI \x82\xcf\"(\xb8o\xc8j-$\xef\x66" "\x8d<\x8d\xe\xe4\xb6RI\xcc\x45\xc0Q\xd2\xc5\xde\xed\x96\x66\xe7\x1c\x3\xa5\xe7\x1e" "\xfc\xc3\x35\x3\x80\xb2\xa2\xd6\x86P\xf9{\xee\x8f@\x1b\\\x63\x9c\x82\x64\xda\xd6" "\xcf\xdb\xc5,\x3\x92G\xb7 \x9\x1f\xc4\xe7\xc\x62m\xcd/ \xfc\xaa\xc\x31\xf0\xa8\\" "\x0\x1c\xe9t\x9b\xa3\xa6g\x1f\xa2g\xe3\xb5\x46\x93/\x6\x6**\x88\"\x7\x43\x1a\xb3" "J\x7f\xde\xdc!\xcdQ\xb\xec\xe5\xcfu2\xb0\xb7\xc1\x1\xaf\xb2\x63 \xfa\xc6\x95$\x8c" "\x80J`)p\x8c\x9a\x80\xce\x61\xc9\x9aT\x13\xco5y\xe2RO\x13\x46\xcb\xa9(\xe6\x11\x9b" "H\x82]\xd9\xbe\xcb\x6\x9b\x9a\xcd\xd5\x88\xe1\x31\x16M\x1b\x8d\x86\x3\x83\xb6!\xe" "\x14R'\xfe\xc0;\xc1\xfb\xe\xb2\xcd\x39\xeb\xe0\xdar\xa5\xee:\xd9!\xe7Q\xe9\x65\xc2" "\xaau\xfdh\x9a%\x2\xb9\xfa\x31\xc6\xe5\xc2\xe4\xa5\x88m\x14\x39\xb9W\xa4I\xd7\xba" "(\xb9\x8b.\x0\x66\x9e\xf6\xe8]\x12\xcc\xbb\x19\xb7,\x95\xd8\xdb\x86\x7\xde\x44\x89" "\x8a\xe0\x83\xfaJ\x85\xf5\xad\x1c\xf.\xd0\xec\x9c^*TY\x17\x42.\xb3\x4\x44Wik\x12" "\x98\xe2\x33\x8c\x96\xbb\x1bY\x15\xc\xd0;8c\xa8\xad\xef_F;\x8f\x4Xq\x91\xb8[\x5\x95" "\x11V\x0?~}\xbb\x9b:\xca\xbe?s\xf4\xbb\xbs\x8c\x9d=P\x1\x36\x97@\xb3\xec\xeb%s\xcb" "\xf8\xda\x93\x17\x42*\x90\x1\xbe(\x1f\x0\xb0\x99X\xe5\xf3\xdd\x87\xb4\xb8\x35\xc7" "\xdeG.\x9b;\x2\x30\x5I\x99\x17\x9e\xe1YQ\"\x6\xda@\xa1\x18'[\x81\x88\x97J\xed\x43" "\xde\xf9 a$\x9d>bB\x16\xecw\xe4~\xc6\x8\xb6v5T\xb8\x1\x45\x86) \x1b\xbe\xb3\xf9k" "\x99(E\xc2\x7f\xa1\xf9\xdb\x1b\xe\xf9h\x80y\"\xe6\x95{\xe7\x81\xd4\x89\x37\xa4\x46" "\xf7yp\nY\x9b\xfc\xcc\xd5\xf7\x4\xb7\x8\xa8\xda\x10\x0w\xcc\xe3\x83\"ge6\x8\xe0\xe4" "\xe2\x8\xf2\x9f\xd0\xd1\x85K\xf8_\xaa\x65\x9f\x18\xe2\x9c\n\xa3;v_\n\xe5\xf8lc4\x8f" "|p\x19m\x14;\x17}^\xd1`\xa6\x33}\x5\x1d\xd3\xe8\xae\x64\xd7\xd7\x35\x61\x10\x16\x11" "&\xe8[\xe8)\x7\xba\xa2\x4\x35\x45\xf\xd4\xc\x18'\xcb\xdc\x3\xe1i!\xe5\xd6\xf2\xfe" ".N\xb5\x1e\xb6\xe5,h@\xcau\xbc|\x2\x11\xa5\xa6~\xf6\xbb,\x1e>\xe1\xf3\xc2\xed\x1b" "F\x95\x8\xb7L\xff\xc9p8`9v\xc1\xbb\x8d\xb8\xdc\xd6\xe5N\xfd\xb\x10=OH\xfa&\xa1g\xb5" "\xf6*\xc4\x12\x99\xc4H\xb9\x32\xd3\x8c\x8cJ\xf2\x93\x10KA\xeb\x13P\x9a\x8d\xef\x61" "\xec\xe9\x1ez\xff{\xee\x44\x87\x8d'&\x98\x86(I\x9f\xee\xe\xce\x15\xc7\xa9\x2+U{6" "}\x8d\x8\x19*\x6\xe1\xcel\xb4\x46\xdb\x9bJ\xde\x1e\r\xc4\xc4\xd2\xc7\xe7\x1a\xfe" "\xf2\x9f\xb1\x8f\x98}\xbb\xa4\xcf 3)/\xe0\x39\xdc\xf5s\xb5\x9\x65]\x0^\x86\xe4\xa7" "\xbd\xa3\xaa\xa8\xec\xc4Vmv%_\x8e\xa4\x66\x37\xd4}\xfb\x44@v\x9b\x32\x1e\x63\x86" "\x2\x8f@WrJ\xd6\xd1\xac\x61QT\xa0\x87\xe\xbd\xe6\x32\x6\x63\xe8\x34I\xbb\xb5G\x7f" "\xe8\xda\x41\xd4\xbaj\xfdY\xec\x63\xc3\xa5y\xaeW\xc\x65\xde\x1b\x8d\xad\x84\xd2\xc9" "\x17\xe2&\xcc+qE\x90\xa5(\xa7\xb7\xf5m\xadP%\xc2\x8f\xa7\x95\xcfqt\xf4\x44\xf\xbc" "\xd9,\xa2L\xb9\x9el\x7f\x82\xb3\x91\x7\xc6\xb1\x91;\xa5\x38\xf0\x9f\xf8\xe6\xef\xa5" "\x9e_pQ\xf0\x16\xb7\xb2t\xfa\x38\xa1\xc8{\xe6p\xbf\xf0w\xb4Y\xe3\x91=\x15\xc\x5\x10" "\xaa\x44\xe3JI5mv\xe3G\xb0\xf\x85\x83\xd2?\xef\x82\x1c\xcf\xb0\x37\xf8/\xaf\xf3?" "t&:\xd3{\xcco\xd7\xb4]:(\xebL\x14\x18G\x19\xe\xc8Y\xcf\xa9\x1a].X+\xedG\xfe\xff\xb2" "\xaf\xb7\x9d\xfd\xfd\xcc\n\xa5\xd1\x7f\xfa\xef\x9b\xc9y\xf5\xae\xe9'\x94\x1d\x30" "\xbe\x8b\xb0\x5\xe3+\xb1h\xed\x16\x87\xd5\x30\x31-\xa1`\x8c\xc6\xa5\xcb\xb6W\xc5" "k\xf4\xf9\x3%\xeb\x86J*\x9d\x8\xdev\xb8\x3\xdb\xbd" "\xc3\xab\xcc\x80\xe4;\xd6Y-\xc\xd9\x1f#_b\xe2\x83qT\xf2Z1\xf2\xba\x9b\xa2\x89q\xbd" "\x1d?+\xbc\xe1\xfb\x42L\x97R\x94z|\xd4y\xb\x1f\x39h\x8f\xf\xb7n\xc5\xb4\xf9r\xd3" "h;\xca@(2\x16\xe5)\xde%\x0\xb7r\xe5\x12\xd6\xe5\x61\x1d\x8f@k*M\x11\xc\xc7U~\x1a" "ECe\xda\x8e\x1d\x61\x42\x31q\x10)]Y\x8a\x85g4E\xf1\x97\x88\xb1H\xa1K\x11V\xe8\xd4" "?\xeb\xf9\xc7=\xb5\xd7\xe6\xfc\x84\x14\xbc\xa8\x86\xb4\xa7\xafM\xf5\xe8\xba@Uo)\xad" "\x83\xa2>\xed\xbd\xba\x6\x5x\x1\xe6\x86\x80\x93)\xb4xn\xd2\x11\x34\x8b\x82\x8a\xc7" "Y5J\xf4z\xc\xdf}\xa7\x9dZ\xf0U]qV\x1fw\xcd\xb\xef\x82/M\xf4p\xe9/\xcc()S\xa9\xa3" "F\x5\xd3'\xb1L~r\xe0Y\x95\xd0\xf2\x18O\x92l?\xf8Y^\xee\xc0\xe1t%\xa0\xc3\x8c\xb9" "X\xbc\x42\xeN#\xb9\xe5\xe5\xdc\xc3\xf5r\xaeU\x95\xfe\xa6\xe3${\xc9_\x1dMo\xa1\x15" "$\x5\xb0~\xd6L\x1d\xa1\xe9\x8\xa2\xda\xaa&\x1c{\xd4\xc0\xa0\xd7:\x8X\xd4\xe4.\x97" "\x92Z:\xc9\xe6\xa7|\xd2@\x83\x8f\"\xbc!\xa4y\xc\xa4\x94\xad\xfb?\xf2\xb3\xe6\x46" "K\xb9\x9b%uB\\\xe7%\xcb\xde\xca\xcf\xb6o\xb&\x1b.\xe1\xe8\xae\x17}a\x9b:s\xcc\xca" "\xfe\xf2\x15\xdfnl\x83\rn\xc5>\xa9\x9\xa3\x9fM\xe8\xe7t\xfb\xcb\x9e\x8c\x46\x1\x8" "\xcc\xc1\xd9(\xbdNY\xdd\xea)M:\xcd\x82\xc2\x37@4\x9fLp\xe8\x65\xf0\xa3\xc5\xc1\xe3" "1\x99x1\x7\xe1t\xd9\xc4\x15\xf2rQ\x91\xa4\xbe\xb2\xf3\x33\x1\x41\xda\x1b\x63\xb4" "\x2\xb2_\xc6R!\xb6YC\x17^\xfc\xd4\xf0%\xec\xa4%g\xde\x9a\x13\x9a\xc4\xf7U\xf3r#T" "\xd2\x46\x82\xf6\x94\xb7\xca%[\xf5p\xd2\xa8<\xa9!\xef \xe8\xc7W\x15\xc3\xe7s(3\xac" "\xd7t70\xe5\xf7Jq\x8et\x9b\xc1WgK\xef\xcc\xe4\xd5\x45:~\xd2\xc2\x2\xf2\xe6h\xbd\xae" ";}jA\x85\x13\xcd\xcc\xaa\x37\xf0\x9dz\xd8\xbf\x94\x1d\xe1M\xc5\x0&\xfd\xf\xa5\x9a" "\r\xf\x9e\xe2\xbc{\x11U\xc5\xa5\xe\x89\xaa\x1bw\xbf\xae\xd7\x9\xde\x1d\xfe\x37q>" "Q*\x10\xbb\x1a\x44\xb5\rof\x9w\xd3\xd9\x99,\xcc\x84\x99\x19\xcf\x17\xa4\xb5W\x11" "\xc5\xc7\xae\xd6\x2\x41v\xd6\xe6q?\xec\x30\xa7~\xe9K\x1d\x31<\xf5\x45\xf2\x1e\xec" "\x7\xa8\xe6\xebl\x14\x16s\x86\x80u\xc6o\x16\xed\xd7,\x84\xe3S9\xa7\xb5\xe7\x64O\xd1" "\x94\x10\x42\x37i\xeb[FR\x83\xa5\xe4\xdc\xf2P\x13R\x19:\xe1\xc9\xd4\xa7\x98\xac\xfe" "\xcev\x90\x94\x9a+\xa0\x33\x81g\xd8[\xf8\xabl4p\x1a\xc9\xb5\x8b\x94h\xf8@\xcc\x84" "\x13>\xdb\xbd\xbf\xb1\x63%+\xeb\xf1\xbd?\xce\xb8\x33=H\x7K\xc1\xd2\xdd\xb4\x4P=\xce" "m{\x19\x34\x8e\x7f\xd3\x91\xda\xfev$~\xe8\xcb\x9d\x7\x94X\xbc\x85\rHT\x19\xa9>\x3" "X\x1c!T=\x1e\x82\xac\x8a\xaf\x41\xa1\x9bGqP\x15\"mv\x8f\xe6\x99\xf8=\x8a\x14\x42" "\xdd-\xa1i\xc9\xff\x96\xd8\x9b\x33\xa6\xf9\xed\xd9\x42\xf5\x0\xb\x35h\xcbl,\xf4P" "|}\xfc\x65\x81*v\x8a\xec\x13\xad\xb7L\r\x10\xfe\x14\xdc\xde\x61\xae\xacm\xbb\x9f" "\xa3\x1d\xa4\xfb\xc2\x43Knl\x5\xa9\x9e\x33\x16\x37o\xbb\x39\xab\xce\xf3\xa8\x95\x96" "\xb4\x95\x0\xd5\x66\xcc{\xf2\xb3\xee\x42/G\xf5\xe4\xe7\x66\xe4\xa4y\xc0\xb1\xa0\x9" "\xdc\x38\x8cl\x1a\x9dZN@\x82\x1e\xc:\xc2\xbd\xc8\xb3\xdc\xb1\x87:\xbb\xe9\x62\x97" "m\x10\x94m3\xe9V~\xa3\x5\xca\xc\x8a\x33\xcf\xc8\x92\xfd\"\x9c\x1b\xa0\xdf\xfa\x92" "\x10\x84\x8\xa9\x9b\x1b\x9a=\xfTtg\xc6\xde\xde\xa1O\xa7G|!\x1e|\xc4\xdao\xf8\x12" "\x10\x63\xd8\xbaU.\xb2\xb8'\x97\x7f\xdc\xc0\n\xcr\xfdY\xb9\x9bZP\xdf\xf1\xba\xe2" "]U0Om\xfd{ i\xd9\x9c\xd8\xeaq=\x81\x16\xd5\xd3\xdf\xd0\x33\x92\xf7\xff\x36\xae\xa8" "\xbc\x8\xe6x\x93X|\xd7L\xec\x9c.\x4*ljRX\xca\x8e/,I5\xa8\xd1\xf8\x1f" "\xd2}\x12\x62\xe5\x84V\xa2\x90\xb7\xe4\xe2+2\xd7\xfct|\xd9\x62\x9t\x98\xf1\x14K\x9d" "\xb3\xa6|\xe5%?\xe5\xb2\xe4 5\xb7K\xe4Y\xb3zh\x8d\x66\xc\x19\x65_\xccT\x84\xad#\xf" "\xbcNM\xcd\xc3\xa4\xb1l`\x14\x61\x8a\xaey\xf6Q\xe6\xf5\x36\xd5\xe6x(\xa3\x37\xf6" "eP\x8aP\xf0\x1cl\xd4\xbd\xe8\x99'\xf2\x65\x9b\x92\xfa\x8f\xeb\x64\x36\xf2V\x94\xc9" "cV\xe5\x97\xb9\xbc?\x89g\xb9<\xbf\xa9:\xa9\x93\x98" "<\xc7\xd5(\x19Rm\x8\x31\xa1\xb3\xb7r\x17u\xfbw\xfc\x3\x6)\xddMg\xd1\xe6\xe5\xea}" "\x8bgCG,\xa4\x8f\xf\x38\xe9\x30\"\xa9\x9e\x84\x8d\x90\xd4\xfe\x8\xca\x90\xe1\xe1" ".m4\x9\xa0\xa5\xb5\xacV\xb6\xa6Y\xefQ#XMZ5\x8j;\x8c\x15i\x87\xd7\xa7X\x1)Z\x1c\xfd" "\xa9}\x14\x13\xee`=\xa8\x9elP~8\x93\\ \x87\x85#5$\xc\xa8\xa2R\xcb;;\xbd\x1l\xbez" "\x9a\xbf\xca\xe0\xc3\xc6\xd2}\x87\x44W\xe6\x37\xb3\xbb\xbd\x39\xae\xff\x34\xbd.[" "\xf5\n\xd0\x15\xf4\xc2]\xe5\x2u>\xc1X\xb6_\x81]\x90\x43&\nM\xfb\x42\x85\x99\x0Q\xc5" "\xf6\x8\x35.y\x80\xd3\xdf\xeb\x45\xfb\x16\xce%\xacp\xb7\xe1\xdd\xc5\x91\xa5\xf\x17" "\xa7\xf7\xe6\xb9\x1c\xbd)\xb1\xee\xd7WE0>`\xach\xcb\x11\xbf\xf6V\x9e\xc9>\x91(\xbc" "++=n\xd4\xec\x66\xd5\x80\xbb\x7\x1\x8c\xd0p~\xf9\x64\xb3\xba\xd2\xfc\xdb\xe1?\x82" "\xd1m\xa3\xc2\xc2\xf(%s\xe7\x1flz\x10X1i'A\xcq\xb3\xc8\xee\xb0W%&E\x1e\xe5\rgH\xfc" "\xa5MP\xa2\x17\x3%\x11LY\x85\x12`\xe8\xb3P\xe8\xe4\xf3\xe1\"\x65-\xc6\xdb?\xbcs\x88" ">\xf8@qY\x88\xab\xf6\xa5\xf\xa4\xf\xd9\x14\xc\x33\x7l\x11/\x7f\xd8\xf5sq\x8\x81\xd6" "u\xeeOr\rS\xde\xf5\x15\x13\x32\x32\x81\n?b\x10\xc2\x8e\x37[\xff\x8a\xcb#\x15\x89" "\x7f\x87R\x14;o\x8c\x43K\xfbpE\xc9\xd9\xbb=\xe3\xd9\xc7\"\xba\xc7\xe4XX\x11\x1a\xe" "\xb0\xaf\x1e\xa1/m\xf0(\xe8\xeeN\x8\xfd\xfe\xe2\xfb`\xca\x65K\x5\xa7\xf8\xe\x32\x14" "\r\x83\xca\xe2\xbaP&\xa1\x9e\xb4\x5\x94\xf5\xd2\x8d\x82\xe3\x1d~\x89\x92\x62\x94" "3\x86\x95\x3\x9\xd3\x86\xf9\xa8]\xbf\x8\xacW\xaez\x14''_\r\x88\x1a\x33\xf4$\xfeG" "~\x89\xc7\x88 \x94\x89\x62~\xaa\x80\x91\x9\xe7\x94\x94\xc\xb8\xd2\x17\x9\xa4s\x6" "\x19\xaerB)\xea )O\x13\x10u\xd0\x8\xe\xb4\xc\xda\xdb\x1d\x6\xbbg\xb2\x18&\x4\x9f" "U\xfe<\xb3\x1an\xbf\xd7\x1b\xcfN\x8\x44\xf\x11@\xc7w\xb6@\x11\x45\xb4^\xd2\x8e\x13" "\x96\xd2R\xc7\x9f\x36\xb9\xb2\x83>Xj\xf1h\x9f\xe7||\x8b\x87\xb1SM\x91\xael\xcb\xde" "\xaaJT\x8a\xa6\x18\xa9\x8e\xe2(@m\x84\x9c\xe5\xa5s[\xbe\xc0\xae&\xf3\xdf\xb9\xc1" "$'KH~\xa5\xf0\x9f\xf4\x9f\x8c+\xacu}\x1b\xb2\xc6\x3\xef\x65\xcdqU\x9bO\x99K\x99\x0" "\x4\xb1\x15\nS\xe4\x80\xd0\x84U\xbd\xf4\xfbzr6p\xc6\r\xf4\xb6\xa8{\x87\x9e\x9a\x64" "\xbc\xe5\xa5\x37\x92\xa0\xae\xb0\xe8Uu\xc9OM\xa1\x8d\xfc\x33\xfd\xe8&\xd4\xe0\xf6" "J\xb7\xc9\xeb\x42\x5\xb9\x1c\xa1\x35\x43\xeb\xa0GK\xe\xb3<\xc4\xde\x1a\x80\xb3\x11" "U\xb7\xea\xcd\xd4Z\x99\xec\xca\x13\\\xcf\x8a\xa7\xe6\x8\xdeq5\x95\x8e\xe~f\xa8\x82" "\xed!M\xae\xf4#4!\xff\x99\xbc\xac-T\xff\x8c;\xa9\xbcL\x5\xe5\x10\x17" "{\xe1\xda\xdb\xc0\xcd\x8bR\n\xd8\"\xdc\x4\x98\x9f\x37U\x81w\xb2\x4M\xb0g\xa9\x94" "Tp\xd2\xa1*(\xa6\xee\xce\xd3$i\x9d@\xf7\xc8K\xfbR\x19\xcN\r\x8a\xfc\x9b\x8fj\xc9" "\xb8\x9\x7fG8\x10\xef\x18\xb6x\xa3x\xd0\xf6\xf6H\xceS\x1c\xbd\xdb\x34\xc5\xd2\xe6" "OG\xaa\xc0 V\xe1\x1eycC\xef>%\x5\xf5\xb7\x42K.\x7\xe4\xdb\x88\xec\x3\xa7\x9c\xaf" "\xee#=\x1f\x9fN8i\xfc\x35\x8e\x89\x93\x1\x9e\xe2\x89\x41\x87\x16\\\x33\xdd\x8e\xb7" "\xf8@\xe3W|\x3\x1c\x1aRRl\xef,\xb\xce\xbe\xbb\xafS\x1c@S\x11tb\xe6\xbc\xe6\x46\xc1" "py9\x1b\x1e\xb6\x91`\xe6\xbc\x66\xb6\xd8t5\xa3\xcf\x36[h\x1\xee+\xb4\x3\xfd\xa0&" "\x19\x81\x86\xec\xd3\x87\xaa\xb3\x37p\xe4>\xca\xf9\x8f\xdbZ?6\xf9\x65\xf4%\x16G\xa3" ">\x9X\x1e~\xe2]\xf3uNp\n\xe9\xc8\x87\x43\xea\ns(\xd7\x6(\xcb\xb5\xf8kL\x94\x98\x61" "\xc4\x9d\x63\x1cY\xa3\x38QtSa%\xb3u\x8\xf1\xf8\x9b[\xd4\x16\xf1\xd5\x1f\xb0i\x9b" "b\xbe\xd1\xcb\xcdR\xce\x30\x88\x97\xee\xbc\xbd\xb1\xb0m\x15\xe1Xh\xb0\xd3\x30\xff" "&\x82\xf7\x1e\xeb\x30\x88\x1e\x90\xd9\x65\x13\xa0j\xb8U\xd3\x93\x19\x95\xaei\x8\xe4" "w\xc8\n\xe8\xb6\x4\x12\xd5\x9eQ\x89\x7\xa5j!\xc2\xec\x0\x95\xe1\x64\xf7\x98\xf8\xfa" "G\xd7.\xc7\x2\x2\x89\x9cy\x96\xc6\x1c\x92\xd2\xf1\x9f\x5\xf7\xb0\xfc\x65I?bf\xf2" "\xaf\x95\xb6\xc0V~Q@)4yV\xbcZ~\x89\xe3\xed\x19\xbb\xdc\xf9\x19\xd7\x81)\x11(x\xd8" "\xfd\x97\x82\x33\x43\xc0\x32\x45%\xd1\xe9\x18\x44\xc2*<\xde\x8\x83\x6\xe3\x34\xb0" "\xb5\xc1\x7f%p\xa5\xe8\x6\x42H\xda\x41\x1c\x44\xcc\x8e\x66$\xe0\xfe\x11y\x99 =\xe7" "+pVRhwK\xcfx\x17w\xc0\x8\xdd\x87\x89/\xd5\xc\xa3\xec\xff\xb1\xf6\xcb\x81\xbb\xd8" "{\xdf\x4qV\x6'\x4\xb\x30\x45\xc6\xc1\x12\x9b\x46\x37\x8a\"h\xf6{\xa8\xf1\xd1V\xec" "\x8c\".!\xc\xc1\x32\xc8\xbd\x1e\xea\x1d\x3Z\xc3HG\xb\xefU?)\xa9\x9f\x34\xc2\xbe\x85" "\x17\xdf\xf6~4\xa7\x80\xd2R\xb8;|\x9am\x19Ur\x15k\xca=\xdb\xbc\x88\x65\xcb!\xf5\xa2" "\x3\x41\xf8\xefO\xcd\xfbNTc\xc2\xf1\xd0\xf6\xd8\x1a\x3\xc8-k\x97\xc1\x30\xf8\x83" "1\xc7\xa5\xb\x90qN\x13r\x8f~*\xba\x12\xe6\x1d\xfa@\xe1\xe7\xeaI\xaa\xbau\xae\xee" "\x4\x63\n\x16G\xed\xc\x83\xcbw\xab\x38\x82\xdbh\xdf\x12:\xaf\xe9\xf6.\xe \x8d\xc6" "\x97\x8c\xac\xf2]\xf1t\xbbRp\xd4R\x1c\x98_%H\xad\x80\xb9\xffg4\x1fJ-\x3\xf8\x9c\xe" "\x9b\xba?\xee\xb3\x62vi\x85\xfan\xcd\x12\xb0\xda%\x8f\r\xfbo0j)F\x5\xa5\x64\x8e\xa4" "L\xa4\\m\x91\xf5\xe9'\xf3\x83\xd6\xe8\xfe\xe8\x39\xe2\xb3ud\xe2\xaa\x7\xf7H\x92\xf9" "\x19Y\xf3\xb0m\xde\xa0\xdfp1-\xd5\xda\x9e\x1b\x44P\x7fJ\xa3\xa0\x19w&L\x1d\x86\x5" "\x7f\x12\xf3\x9c\xe4&\x3z\x1b}\xf8\x33#\xba]\xb3\x7\n\xeb\xd2\xeb\xd7s&\xfc\x3\xde" "9\x1a&\xde\xc4%\xf0Wv\xfb@-\xf2\xe9\x1't!v(\xa8W\x83\xa3\x1K\xf\x7f\xdbUl\xc8\xdd" "P/Wn\xd0\xc9![\xb7\xdc\xa0o\xd8\x61\x66Ms\xf4o\x8e\x96\x32.\x19+\x91\x13\x65M\xf4" "5\x92\xd3|\xa6\xbf\xd1\x13\xc7\xcf\xce \xe5\x89\xeekk]Cu\xf2\xf\xd7 @\xae&\xca\xfd" "{\x89\x5\xc0\x82\xbf\x82[X\xb0\xe3\xe1\x41\x64\x0&\xd5\xe9\xd1\x9c\xd9\xe5\x14\xaa" "\x9f\x90\xe9\x97\x8eQ\x95tu\xb5q\x86: \xc1\xa0\xa3\x14Z\xa8\xc5]\xa6V`\xce\x10\xe5" "D'r\xf0\x61O\xd4\xa9k(d\xa1\xc8\xe9\xfd\xf6\xbd{\xaa\x9b\xac\x87\x1b\xcd\xe3\x90" "dy*Ka\r$\xe5}Y\xe\xacY]\x94l\xe6o4\xcaw\xdf\xfLB\x4\xfa\x39\x42\x44\xcd\xd6\x32\x39" "AUg\xe9n\xd4\xddwu\xcg\x7fH\xe5?\xb1\xd4\x34\xfd\xabY\x5\xfeY\x10\xf2\x9eJ6\xbdy" "37\xbd\x35\x43\xd2\xd5\xc0\x10\xa2&\x11\xd4R\xf8\x66\xbd\x85\x37\xe5u^\xaa\xd3\xc2" "\xd9\xec\xbb\xa5+\x1b\xa4\x8e%\x18\x80\x66\xe6\x90\xd2~\x92*\xadtMhS\xdfKV%\xbb\xf9" "\xef\xae\xf5\xb8\xdb\x8d\xa9\x1d\xbb\x92\xdeH,\x8f\xb5S{y\xcf\xd1\xaa\xdf\x8a\xd4" "&r\x17\x30\xad\xb7\xfd\xc2M\xbd\x9fX\xb7J\x1\x32:\xc6\x8d\xa4\xa1\x80\xf2\x13\x1" "\x96H\xfb\x42~<,\xeb\xe0{*\xf9\x8e\x84\xe6\xcbw\xaf\xc2\x18\x84\xbb\x8d\x83\xa1t" "\xf2:\x0\xc5\x96\xd5\x90\xa0W\xeb\x94}c\xb\x84\xc1\x18\xd4\x46\x0m/\xeb\x83\x85\xa8" "\xccG\xbb\xe8'\x96\x38\xa0\xdf`\xadM+\xfc\x45{\xd9\xea\x89l\xbd%NPa\xc8\x37j\xe4" "\xd8\xdf}\xe8\x10\r-[n9\x18\x36\x43\xc0y\xaa\xd1\xdd\xb1\xc2\xf9N\xca\x45\x19\xbf" "`\x90\x9bj\x97\x18\xc3\x16\x87\xb4\x9\xb4\x9\xde\r\x18\x42\xe0h\xcb\xe7\x37V<\xd0" "\x97U\x7f_+\xb2)\xd7\xb0}\x89O\xeb\xb0{3N\xf1\x10\xfe\xc9\xd3\xd7\xc1\x46/\x92\xf1" "\x13\xb0\x82\xd8\xf2\x10\xd3\xaa\xb4t\xd4\xf4w\"\x84|\x88\xc9\xc0\xa2.\xfb}p\xb3" "i\xb7\xee\x34J,\x1e{\x14\x3\x39\xbc\xe7\xbf\\\xc7rb\xd6\xf3\x86\x8b\xf3\xe0O7\xa8" "\x1c\x9dPR.\x9a\xd6\xfb\xb4\xf6\x18:q\x92_\xcb\xf7\xb!\x89\x39\xc2tE=9XwZ\xa6\xc1" "\x9c\xdewRk\xfbs\x95s\x19\x30g \\\x3\xcc\x8d\xe2\xc1\x8a\xfcyf\x9f\xe3\xad\x90\x35" "\xe9\xc8\x35/\xce\xb9Z)Kf\xecT\x93\x65\xf6\xc2\"O)\xec\x31\xe2\x30\xfb\xf9)8S\xb6" "\xdaiC\x9\x1\x12\xf3\xf8]vGT\xc3z\x9c$Nml\xce\xcf\xa3\x88\xb*\x93P~\x92\xcdp\xeb" "v\xfd'\xc5\x64\xb\xb1q9J7\xc1\xea\xf7~m\x7f?\xd0\x8b\x95U\xde@mf\xb4\xcf\x6\xad\xdd" "W\xed\x85\x33\xf9\xf0\x44\"\xa4\x15\x42\x7fu$[\xfd\x3!\xfe\xd3\xe4X/T-5;(m\x94/\xf" "r\xd1\xb7\xa5\x88]\x85\xa8\xc6\x9e+\x88.\xd6\xfx\x89\x32" "P\x2\x80\xf3\xfcqlF\xadli\x8d\xf1\xfbsY\xe6\xe2]\xa6\x1c\x85\xe1Q\x10\x81\x9d\xb3" "\xd2\x65\x44\x1d\x96J\x11\x90\xc#\xb0\xdc\x1\xa4H\xe0\x41\xe6u\xf4o\xe2\xc\xc4k\xf1" "<<\xc9\x62Ju\xc0\x1c\xa7\xca:\x5\x1cs\xaa\xbfK\xb1%\x85Q\x80m\xa6\xa6\xe2t\x8d\x85" "\x3\x32\xf6\xad\x63MJ\xfc\x66\xd2u\x9e\xfd\x86\xc3\x8d\xfeRB\xe4\x41\x11\xbc\xe5" "\xfc?%_\x11\xcf\xfb[\x12\xfd@Oh\"u\xa4\xba\x1a\xd7\x7f\x12\xa7s\x88(\xddhNk\xee\x8b" "\x7\xbcN\x6YQ\x81)\xeb\xd3\xb2.\x90\xcd\xe1\\\x65'FVi\xe5*\x2j\xbe\xe0i\xc5\xd3\x7f" "36\xa7')\x81\xa7\xe8m\xd5\x1d\xda\xac\xe\x16h)\xa0\xeah\x98:h\x7\xbf.\xc0\x2\x91" ")Kk#t3r\xd5i=*\x1a\x1cP9O\xbf\x30-|\xe4\xbl\xa0\x18\x9at\xee\xaf\xba\xe5\xa2\x11" "\x1c\xe8\xd4\xfe^\xdc@?m\xa4\x63\xe8u\x11\xdb\x9e\xba\nn8\xbc\xff\xcc\xf9\x87\x8c" "r\xf4\xf8\x65)\xdf:\x9e\x46\xf0\xe0\xfc'j\x96\xd4\x16\xdf\xbb\xd3\x82\xda\x92n\x84" ">\xcfZ\xbd\x1cO\xb4\x91\xdc.J\xabs\xec=\xde\xe1\x43\x32\"\x64\x90\x38\x30&7u\xec" "\xdd\x2\xa6\x2p~\x4\xd9V\x1\xa0\x32\x46P\x3\xa5\x31\xe\xf8\x43u-\x18\xd0l\xf3\xe0" "\xa9-i1\xa4\xa7\xed\x9a\x12\xff X\x97n\x12\x1av\x95j\xa2\x3\xf4Y\xae\x45@bP\x83\x3" "\x17\xad\x85\xee\x1a\x1a\x91\x3/\xb3h),\xa8\xe\x38\xc3\xb4\x9\xd9w \xd9\x9\x1=\x16" "-y\xc3\x85 \x8c\x9\xb0\xbb\x8c\x1e\xc9\x1a\xc0\xfa\x66\x83\x1f\x10o\x93q\x7f\x66" "\x7f\xf7\x98z2\x5\xb4R[\xacL\xb2\xe6\x34\x9c\x8d\xc5\x89\xac\xa3\x89q\x8c\x97M\xa8" "e\x8c\x90\xec\xe1\x62\xf2@\r\xd9\x64=\x14\x46\nv\xd1\x92\x43\x9d\x85z\x14\x84R\xa6" "W\xdd\xb1\xa3Q\xc2\xe8\xaaj\xad\x66V.\x92\xa0\xb\xb4\xf9\xac\x33\xf7^\xc7\xc9\xc2" "\xbf~x\x98\x1f^\xdc\xf4\xe5T\xfe\xd6\xfb\xcc\xba\xab\xb\xf3\xf1\x93\xbf\xe7\xf3\x99" "\x17]\xe7\xd0\x89\xda\xce\x9b\xbb\xa3\x46\xacht\xa6-\xfc\x44\xb8\xcd\xf5\x81W\x80" "f}\x19\x1fr\x8dJ_xMLdv\xbc\xd8\xb0q\xe7\xbc\x34\xd0;\\N\x14\xc6\x96\xc7\x95\x1e\x61" "\xba\xb9\x87\x14\xe1h\xc7WF-]#\xeao\x98\xef\xbdRI\xb6\xde\x8a\xe0\x8c\x8d\x83\xc" "7\xfckb\xfb\x9\xd4j!,\xf5\xe0\x0\x38\x37\xe7&\\3\x9cN\xd8\xca=z\xcb\x1a\x45I\n\x1" "\xf1\x8b\xea\xc6u\x86o\x1c\xb0\x92\x10\x8e\x2\x13\xf9\xc9\x64R7.,\xd2\xc0\xb9\x91" "V\xa6\xf\xaa\xdepV\xf\xf8]\xbf\xc1\x44\xc4\x9aN\x17H\xac\x9b]E\xb4N\xaa\xc5%i\x90" "\xb4\xa7P\xc7\"\xafS\xd4.\xec)\xa9Q\x0h\xb3\x82W\xbe\xf5\x16\x9b\xd8\xbc\xe9\x64" "9\x8c\x1c\xee\xd6|q?\xe8\x3\x9b\x15\x8c=\xaa\xb6\xae\\\xb9j7\xc5\xee\xe4\x9e\xf1" "C)k\xc1\x86@+\x11;\xa0\xddm\xd9\xf1\xa6^\xe8\x1\xbfO?B\x19'\xa7\x8c\xc3\x33\xe\x17" "],\xf4\x1euK\xc6O?pY\x1b\x8e\x91\xfb\x1f\x8b\x66\xf0\x1a\x14?y\xbem3!\xb7\x7\x18" "\x86Y7V\xec\x0t\xaf\xa2Q\x9c{M!\xb6\x12\x38:\xd6n{\\\x8a\x88\xd1\xb0,V\x92\xfam\xc5" "\xdb\xba\x85z\x9a$\x1bsa\x85-/\x7f{\xcc\"\xf3xPG\r\x6|\xa1\xdc\x87GLI\xa8+o\xec\x89" "\x9bh\xcdS\xb0\xadY\xbf\xc8P\xeaI\x80\xed\xa9=\xff\xfd\x9e\xa8\x8f*\xf1\x16\x12\x7f" "\xa8\xf6\x9e\xb9n3\xa3\xb4\x95\xf2\x9\x9f\xa8\x9b\x14\x7f\x9a\xd0\xe5\xa7\xf\x97" "Orp$p\xd0\xfa\xe4\xf0\x1a\xa0\xbc\x32;\xb5<\xc2,\xb6\xea\xa2iv;\xd3\x82\x36\xb3\x4" "}9\r\x80\xcf\x9d\xcb\x62\x19\xf9\xe0\xaa[\x94_\xd3\xad\xc0\xc1p\xfb\xe6\xf9m]Ps\xbd" "\xca\x99\xdfY\x0\x38\x18\xe2\xfd\x36&\x9f\xf9\x62\xc\x84!y\x1e\x80\xc4\x18\xe1Px" "\xfb\x1e\xdb\xf2\x17)\xc7\x1d\xc3\x8c\xe2%\x1f\xbe\x17\x16\xbav\xaf\x15#\x99\xb9" "\x8K\xbc\xc\xb1\xe5\xdeii\x12u\x81\x32zd\xf3v\xd2kZv\xdc \xfc\x2\xa5\xf9\xedi4\x9c" "\x89\xa9n\xa2\xfh1\xc0sD\xcf\xdbo\xdfwv\xcfJ\xefN`\x14r\x8c\xbePvr\x2\x84\xfb\xc8" "\xa1V\xdb\xf4\x8c\xa2\x63]\xd7+\xf9\x8fh\\Vm\x93\xe7M\xf9\xdbH\x8c\xa4r8Y\x7{\xe5" "Q\xd4\xb8\xeb\xbe\xe5O\x9a\x7X\x8e\xabw\xee\xf\xa7@\xcdL\xe\xa0\xb6\x1dz\xcd\\\x65" "\xad\xda\xb2\xe9\x42(\x17\x35)2\xcd\x4\xce\x7f\xedG\xa6\x93\x83\xe3\xa9\xf0\xf7\xfb" "\x84\xea\xb4\xbb\x80\x16W\xccO\x92\xcc\xf9\xca\xa2\x8c\x17\x8a\x43\x81\xf1\x41K\xd1" "XX\xae\xa8\xb\xdaY\xad\xdf\x43p6'\xc9\xda\x45-M\x16\xf2!\x7fl\x82\xf8}\xfv\x18\xa8" "E\x15R5O\xf1\x93\xca\x9a\x37\xf1\x8d\x46\xde\xd9>\xb\xc2Z\xab+\xa1\xbf'i\x15\xe9" "\xc4'\x8\xc1k&\xba/\x95\xbe\xb5\x2\xfe\x7f\x93g\xc\xa4t\x9b|\x18x\xcf\xf0\x34{\xa4" "'0T\xc8\xed\x7\xf2/}~[\xf9\xeb\x15\xf5\x93\x3\xb6U\xcf\x86\xa3\x0\xd1\xa0\xbdL\x0" "]\x98\x9c\xb7\x32[\xd6\x9`x\xa7z\xce\xafp`\x1b!<\xb5\xa1\x89\x84\xd8\x1f)\xb\x84" "u\x5P\xe8\xb5~\xf9J&\x18\x43\x13\xae\x18y\\PO\x0\xfc\x19\x15\xa4\xaf\xd6\xd8#\xe4" "\xf1\x12\xa8\xa7i\xf0\x0r6\x87\xc7\r\xc\\\x36J\x2\xd5;\x89\xb5\xd0\x62\x1\x81\x19" "\x9bW\x92=w\xc1o\xc3\xad\x61\x35`\xda\x30g\xb6o2\x16\x99\xdf,\x8e\x8l\xea\x9e\xb8" "<\xecL>r*\x1b]\xd0\x10gZW\x8a\xedW\x3sH\x8bl\xde}VC\xe6]&\x3U\x4\x1d(\x84\xb3\x9d" "\x1@O\xdb\x5\x87\xc3\xff\x1al\x11(\xcf\x99\x9fj\xd3T\xf9n\xae\x34m\xa9\xed\xb8tS" "\xd9\xe3\xf9\xfeP\xdf\xf3nG\x11\xd6\x45/\xe3\xeN\x96,Y\x7\xc\x9e\x34\x84\xbfq\xd7" "\xe3\x10\xf4$w\x12\xf\x84'h\x12\xf2\xb7\x9d^Q\xfc\x93\xb4k3\x10\xa0\x8a\xc6#!\xf1" "\xafg\xef\x33v\xf8\xd5\x89\x94\x8\x42\xc9\x99\x8eL\x82\xb9\x14R\x17u\xe1\x9a\x2\x99" "\xfew\xe8\x33\xe2\xb7\xc0\x43s[\x82\x83\xb3\n\xf8T\xf3\xae\x7O\x10\r\xa4 \xa1\xba" "\xf1\xef'@*/\xa1[\xf6OL$\xedo::\xc5;\xf9\x81\xfe\x86\x8a\x1\xf9\xe4}\x9f}UPH\x88" "\x95?Bn\x13-;\xc\xcd\x45\x31*\x80u\xf4\xa8}\x1f\xaa\xf7q[\x93\xbf\x43\x8\xf1\x32" "@TS\x84\xe3mp!\xf3vmx\x1do*\xa9\x9bRx\xc5\x1\x82\xbf\xe7\x1b\xed\xea\xb8\x99\xe1" "\xb2L\x10'\xc0\x39\xe3O\xfc|\xf3\x8a\xe7\x10!j\x97\xdb\xe\xfc\xe\xed\x8b\x9dIV\xb7" "\x7f\xa3\xe2\xa8\x9fj\x94\x1e\\U@\x0X\xb7\xdf\x34KY+[\xb5\xbdS\xfd\xa7\xb2\x39g\xd4" "\xd2u\x8d\x2\x8d\x63\r\x42\x1b\xbbOb1\x1a\xc9\xd6\xda'\xc3\xa2g\x81\xfag\x13G\xd9" "\x9\xac\xf6\xa8\xacu8#\xba\r\x39p{_\xddM\xde]\x9a\x42%#6\nF)\xb1l\xd3\x45\x98\xdc" "\xa1\xc5t\xb\xd5\xec\xe\xc0\xc0\x8f\x8a\x39\x42\xc6\xcc\x5\xaf\xd4y\xe\xdc\xf4\x46" "\xc6\xfb\x8a\x8c\xd8\xdb\xdat\xbb\xa6>\xd5\xc0Y@\x92[\xc2\xc2\xa3\xdc`\xd6\x9b\x42" "Zp2\xdau\xce,dhL\x88u\xf7\x35\xdc\x9f\x87\xf{f\xe9x\x98\xdf\xc9.\x9d\xa1\x35\x1d" "~\x83\x66O5]\xf1\xa1\xc8\xd0\xbf\x8a\r=+\xb6\xfb\xc0\xe1\xb9,\xbe\xbe\x11\x88\x91" "\x15\x32\xb5\xf4:\xc8&>\xbc\r\xaa\xfb\x90\xf0\xa7\xde\xc7\x1eV\xc3\r\x39\xdbYE_\\" "\xb0Xr\xa6\x9d\x9c$\xd7\xfc\x9c\xf3\x9bO~\x16\x64\x2\x92\x34\x19y\xf9\xc\xbd\x3\x13" "\x88\xac\xf1@\x1d\xff>\x9d^\x82\xb8]\xf6\xcb\x14M\xae\xdbt\xe4\xe6?\xe9\xdb/L\xdf" "\x16\x6\xf7/\xdfu\xba\xf5s\xac\xb0z\xfe\xbc\x8cW\xa8H\x92\xe6\xfb\x17H\xe\xf3\xbd" "\x9e\xcf\x8a.7\xbd\xc3\xf8\x90\xfd\x82\xfc\xd2\xdd\xbf\x8c\x11:\xe9o@\x13Y\xc7Y\xaa" "\xf3\x92L\xde\x30n!\xe3\x8\xf0\xf8\xab\x0\xc0\xc7\xe5\xe4M/k\x8a\xaf\xc\xdeQ\x91" "\x93LR<\xa6/\xe1\xa8\x16u\x90\xa5\x12\x35\xf4\x95\x15\x43\xe9\xf{Do\x8f\xc8\xcd\xbb\xfd\xc\xf0G\x8b\xab\x42\xad" "\xa6\x10k!\xfe\x16\x9b\x16\x30\x41Hr\xb0\x8|C\x88\x6:\xb4L\x8f\xf3K\xa2\x8b\x38\x30" "\xeb\x35=\xe7\x8e{\xe0\xfa\x83\xe3\x37\xbf\x8e\xcb\x99\n\x9a\xa2\x16\x9f\x3h\x9d" "\xa7\x7h!\x1f\xd0\xc5\x19\xb2\n\x97\xe2\xb\xa3%,GE\xd9i\xa4\x94L\xfb\x9e\x6\xfc\xa9" "\xff\x8}\xe3\xe8\x16\x17-\x7\xa5\xfeG\xeb)T\x9c\xe2\xeb;\x85\x86\x62j\xb2>@\xe2\xb9" "')_\xd8\x64\xbc\xd6\xcam\x85\xd3\x65\xe\xec\x16\x91\xca\xf0\xad\xc3\x17\xb5\xd5O" "\x87\xa4m\xb4\xce\x9f\xb8\xad\xcf\xd1\xb4\x15\"@\xf7.\xb2/>.{\x16\xffS\xbbLv\xe0" "\xc6s \xe8\x32\xdc\x92\x94;\xac\x94\xb5N\x90\x7\x39h\xe8\xfe\xf6\xf6\xbag\x88\xd2" "+\xda\x92\x91\x9b\xecs\xf1\xba\xa3\xcd\xdf\xff\x84\x12\x43$\xccI\x1a\xa9\x9Qp\"\x0" "%\xd8x\xb3\xbct\xd8\xc2\x41\x43\x8bT\xb7):m\xd8\xea\xa3\x1bs\xe0\x0\x1a\x83\x45v" "\xd8\x8b\x93M\"\x97\xc9\xdf\xbaq\xda\xc3\x3SJg\x80_\xdc\xbc\x86^rjg\xf1\x36\x3\xf0" "\xe9\x30\x44\xd3)\nI\\H`\x9a\x85\x19\xb1\xd9k\xca\r\x0\x80\x0\xc7V\x1f\x0\xe7\x37" "M\xe1;\xaa\x1f\xe0\x3%\x89p\xae\xcc\x15\xc9$\x11\x81q\xa7\xe0\xc\xf0\xd4kM\xe8\x42" ",\x14\x82x\xb6\x86\x19\xe9\x82`\xc6\x8e\xde\xf3\x9f\x7f\xb5\xc5\x1e\x33\x30\"\x0" "\xabne\xa1\x39\xc6+\xb3q\xb\x43\xc2\x64\x16\xe1g\xf7\xef\r.\xe\xdc\xd7@*\x18\xd3" "R`R\x85\xcb\xbe\xe8\x1K\xe1\x35\x65\xbd\xd6\x91\x45\xa7\x9a\xb9\xeb\x10\xf4 \xe3" "\xe4\xa8\xe7\x0\x82\xf0\xc0\x66\xfc\xe6\xe0.\xdd\xeb\x45\x10\xc9\xb7\xcb )\x94\x8c" "\x8a\x5\nh\x9a+XxX\xb3\xb6!\xca\xef+P\x11\x61\x9f\xa2\xfc\xd9\x99\xa9\xf8\x63\x7" "\x4:,k}\"\x92=m\x1\x5\x1b(\x1\xf8\x36\xfd\xe2sU\xbe\xce\x38\x32\xe5 g\xa5\xdc\x18" "\xad\x15\x88\x31\xeQbT\xf8\xa8\x17\xef&o\x1dK\xce\xfa>\x84\x8f\xc1\xc6\xdbq-\xf6" "|\x8e\xfd\x7\x9c\xcd\xf4(\xff\x62\xd0\xf9\x1d\xb6\x91\xe0P\xba\x4\x1a\x64\xe2\\\\" "3\xd4\x0\xb1n\xbb\x91\x36U\xa8(p\x8c\xdd.\x12\x13\xde\xbdT\xeb\xae\xeb\xe3j\xe9\x33" "\xef\x45\xc7\\\x1e\xf\xd8'/\xb5\xa8\xd4\xbe\xcc\xd9\x1c\x98\xcbX\x5;\x0\x9c\xc6L" "\x17\xc2\xd9\xfb\\\xf6\x87\x35\xc3\x87_TA\x95~\xdc\xa5z\x9cY\xe1\xb9\xf2\xaf\xd6" "P\xcd\x7\x45\x41\x46\x7}C\xa8\xa3\x45\xf8\"\x0u'\x84\x90\x38\x91 ON\xbe\x91\xe9\x13" "\x86\x91\x9dX\x1a\xaf\x0\xec\xa8\x9e\x33q\xea\x97\x82\x33P\np\x6+\xfd\xd3\xb7\xd2" "\xdd\xfb`]\"q\\\xe7\x11\x89\xa2\x38\x39m\xcd[\xd2]Q(=\x15={l\x1b\xdf`=.[\x6j\x19" "bS\xf4\x4\x80v\xb6\x92\xec\xef\xac\x65\xe1\xc3\x17\xfb \":\xc9\x8a\x66MJ\xde\xdf" "{t\x1d=\xbb@%\x89\xdd\x62\xfa\x98<\x9aY}\"\xffr\xf5\xda\xa3\xef\x32IT\x1\x31\xfa" "Yz\xcb\x98hsv\xeb\x0\x13\xb4\xe9\x15\x19\xb2\xd8\xd5\xaf\x45\x10\xf0\x66'D\xec\xb6" "\xcc\xbd\x9c\xe3h\xf3\x9d\"\xfa\x36u\xf1\x38o?\xa0\x8cw\x88(Q\xf6\xa2uP\x95\x30G" "@\x81\xf0\xd3\x7u?\xc5\x8\x1e\xde\xee\xd9\x38\x86`\x96\x14\x13\x1e\xea\x9aK\xa8\x85" "\xe2;l\xc\xa0#\xf5\xb1*v\nk\xa3\xe7w\xc8\x36I\xd7\xee\x96\xe2\xeai\x97=J\xc\x65\x15" "\xa2\xdf$M\xd5j \x15\x33P]\xee\xd1\x64\x96PH\x4\xb5\x1d\x87\xc6\x15M\xc5M\x14\xea" "\xdd\xbe\x8d\x98\xc4\x95}\xfa.\xea\x9b~\xe8o\x83\xecS\x9f\x90\x82\xb3%\xfb_0xe\n" "\x3\x89\xaeT\x8e\xfe\xf5\xdb\x87\x90\xe9\xc5\xbf\x89\xa9\xb0\x88\xbd\x9e\xc3\xb6" "\xa4\xe6\xbe+&\xcez\xf2\xf8&T^o\x17\xe6O\x17(\xd0/\xc8$>S\x19\x66\xe\xc0\x66\x31" "\x91\x91\xd8\xb1\x18\r\xcc\xc5\xe7\xde\xd5\xc9\x34\xc9[\xbd\x1f\x14\xcd\x9c\x19`" "~\xed>\xba\xd9~\xea\xb5.5):\x15\xfc\x36\xaa%\x95\xe8\x18G:\xc0]lD\xa3\\\xb2|\xa3" "\x10vP0\xed\xe3\xa8@\xe9\xa2TU\r\xe8+|z\xf5\xe2\xb9\xfc\x46\x44\xaf\xa2J\x92\x6\x99" "\xbb\x18\x10\x7f\xfcLe\xbe\x2U\x97\xa2\xfayJ\x9a\xd4#\xe4\x2?'\xd6\xccmtx\x7fg\x93" "uM\rE0\x1b\x85R{Y4\x1e`\xb4\x1dM\x6\x9dp4 \xe:\x16\xe3\x90\xdb\x8f\xba\x36'o\xcc" "ZS\x8c\xb4Y\xce\xe0s.\xc7\xa4\x8a\xdbKR\xed\x41J\xd4\x8\x34\x8fp)%\x7f\xf9\xe0\x9d" "i&\xac\x96\xf8\xaa\xe1\x3\xb9\xby\x90\xde\xa8\xe6 \x0\x9a\x38\xecUo\x82\xb4\xf6H" "r\x8f_\xbb\xb4S3\x8a\xf7\x8\x81\xed\xe8=)\\V\x1b\xe9\xf3\x1c\x33 }\x95*7\x9b\x66" "\xf\xe3`\xc0\x14\x10\xbc\xe1[\xd9`&\xce\xcf\xfe\xa6\xd7\r\xa2\xa4pY\x95\x1d%J\xa5" "\xcb\xfe\x8bt\xf\x41\xc2_\xcaL\x7fqX\xfa(\x14\x89|\xa4\x16_\x94\x0\xe2\x3\xfe\x30" "\xb1\xd9\xefN\xfe\x31\x8f\x9a\x36\x41H(\xb4}\x84\xa3Px-6-nd\xac\xee\x8a\x86#>\xb2" "I\x9d\x32\xfb\x5\x97\xb\"$\x8a\xdd\r\x80\xab}\x97\x90\xf1!,\xb0\x91\xd6\xce\xc5\x37" "\xb9\x15O(\xcc\x6\x66\x97HdQ\xec\x6(\xde\x63\xa3@\xb7\x11-\xf5\xb7\x33\xf7\xb4\xc3" "\xe6\"\x6\x1f\x94\x12\x45_\xf2\xb5\xd0\"\x98MK\xef\x64Y,<\xe2\x19\xbeOhY\x19\x1Y" "RA\xa1\xab\x81\x9d\x38p.\xdcp\x6\x8V\xe1\x41z\xa0q5y\xa4\x30\xaa\xa6|\xb3\x3,\"]" "\xef|\xe8\x8c\x65\xc5\xccp*\xfb\xb6\xba\x81\x86\x2L\xd1\xaflcG?p\xca\x43\x9d\xbb" "5\xe3>\xa5l\xc9U\xcf\xde\xb7\xder\xb6}\xc3\x39\x1fTz3\xb5\x1a\\\x8a-0[GF\xcd\x8c" "8\x8n\x7f\x18$4\x8f\x5x\xf\xda*A\xbb.J\xb5\x87oT\x1f]\xe\x9d\xac+A\xc2T!l'~\x8eT" "\xb1\x17K\xda\xddr\x4&\x0\x9b\x2rI\x87sD\xad\x44\x13\xfd\x97\x9d\xe9\x8c\x19Gg\x8" "\xea>`\x8f\xfb\x87_\x85\xed\xa0\xdcj\x5\x35zg\xb9\x8f\xd6\xfdU\x1a\xddq\"\xd2\xf8" "Q\xc\x46%\x3r\x99\x84\xf0\x6\xf1x\x9f\x9e\xce%\xda\x89\xb5LZ\xa3\x98\x9d\xd4ycj\x95\x39:!\xe6\x62x\xe2jn\xaa" "\xe9\xa4\xd6\x13\xf0\x9\xd4\x82\xf5\x1e\x2`\xee\x19\x39\x34\xcft\xc4\x16\x13G\xb1" "5\xe\x7\x10\xa8\x14\xaf\xde\x11\xe6*\x9d\x8eg)\xdb\x33M\xd7\x36\xc4n$\xf3\xd7\x10" "\xce\x18\x9e\x64[\x99>=\x7f\xfd\x45\xe5\x88\xf7\xf0\xce\xa7\x8d\x46\x46\xb=\x14\x2" "U2\x15\x85\x1aR\xd3{\xed|\x1c\xa6\xd2\xfbWt\xfa\xa3zD\x8bRKf\x11U\xdfl\xc6%\x8b\x9b" "\xa4\x9aI3K7[\x1c\xfb\x94)R\xc5\xf2\xd2\xb7\x5\x32\x7I\xc4\x30i\"*T\xbd-\xfU3H9l" "\x15`\xd7\x7f\x17\x1f\xcfX\xa7\xbc\xcc}f\xc\xa4:\x12\xdf\xd7\xcfZ\xae\xff\x1e\xf0" "s\x90\xbd\xbd a)\x97\x81\xb3\x86\x8a\xaa\xa2\x7f\xb7\xcb\xee\xad\xf1N\xc1\xeb\xbe" "I\x15;,p\x98\x19\xec\x81@\xf5\x88\x94\x8b\xe6n<\x90\xd8\xf3p\xdfn\x18`\xc7\xc9\xc0" "\xee\xb4\x95\xbe\xc6\xd9 \x15\xa9\xcb\xd6$\xc2L\x84\xc5+\x85\xce\xc9R\xe9m/\xe3K" "6*@\x3\xa3\x2\xd0\xce\x1e\xc3'\x11\x85M\x1euz%\xd4PY\x93\xf0sb\x8f\xf1\xc5=,\xe0" "\xc0\xf0(\xee\xd0\xa0\xbd*\x0\xc6\xaa\xaa\xa2\x9f\xa9i\xd8.\xc3*\x3\xbch\x18\x61" "p$\xdc\xe9\x44\xb9\xaa\xd5\x98\x31\r\x32t\xdb\x99M\xbc\xe0\x91\xd9\x8a\xfc\x89wJ" "\xb0\xedn\xa5\x7\xa0V\x88\xf3w\x1d\xd7N\xf4\n.f<7\x97\x9b\xb0\xba\xc5w\x8e]\x85]" "m\x18\x86\xb5\"u\x5(\x94\xc3g\xf0i-\x95`E\xc\x1f\xdb(\x7\x1e\xc6k\x15\xb5\xc6\xa9" "\xfe\x66\xfa\x66_\xb2.t}k\xf1\x5\x15\xee\xd2\xc\x17,6\x90\xbe>\xd9\xfe\xey\x17\xa8" "\x91\x87\xb1\xca]d8L/R\x96\x85\xf9\x8c\x38\x9a<\xe1\xd4Q]\x16\rt-\xcb\xdd\xed<#\x92" "js\x97k0\x86\xd5\x96\xd3\xd5\xe6\r\x7f@|H\x9c\xecr\x1f'?b\x91%ke\xc~\"5v\x19\x43" "Cm;m\xb6\xed!.+\x14\x95\xe5\x3\x87Qzv\x16\xf8\x0\xff\x66\x3\x46\xcb\x12\xf4\xba\xd4" "GQ\xf3MC\xeb\xed\x1a\xb3\x92\x8c\xc9\xec\xdcL\xa7\xdc\xc1\x16\x5G\x8b\xd4\x83\xf5" "\xa5\xa1\xe5\x90\xb4IFX\xdbY\xaey@St\xe0\xcd_\x11}V\xec`\x1ak[\xc8\x66\xbd\xea\xe1" "{$i\xb9u\xbb%\x93\x0\x10\x1\xaf$\xc'\xbaK\xfcz\xc6\x89\xaa\x38\xf2Q\x9bHX\x84\xd6" "|~\x8cYs\xf8i\xab}\x1c\x38-\xb9\x6\xb0\xc1\x85\x8\x45\xde\xd7\x94\xbf\x61\xf5\xe5" "\xf1s\xab(\x1c\xc3\xd8\xa8\xe5\x89\xc4\xa4\ru\xcb\xa4)\xd1\x89\x9c\xd7\x11\x14\x80" "A\xd1\xbb\xd2\xfc\xa4x\x97ri\xbc|\xa8\xdf\xbc\xf3\x9a\x8f\xb7'R\x13\xf7\xa9\xa3\xce" "\xbc\xf\xcc\xcd\xdf(\xf0\xf9<^!\xdd\xbc\xf7\xe7\x84\x10;t\x8d\xe2\x87\x61\xd9\xe" "\xcf\xd9,\x14\x17\xe7v\xe2\"h\xd7\xf0\xcd\xa4$\xa2\xccJ\xbc\xd4L\x6x\xf5\xe4\xfc" "\xc2~\xde\xdc?$\x8b\x36Wr\x9b\xa4w\x0L\xf9\x45\xa9y\x84\x94OoSy\x19\xf4\xd9\x35\x91" "\xd6\xda\x9\x64|{R\xc2\x5\xa0\xa2k\xcb\xfeX4\xaf\xe9\x81\xbf\xde\xb8\x13]\x99g\x15" "\xe2\x43:\xa9x1h\xb5\xe7\x90\xdc\x82\xab!-\xff\x87\xc9VUP%\xc5\xd1\x36\x3\x2\xe9" "\x98\xc'\xc4\xb2#-\x10v\xab\xc9\xbfG\xc1\x66\xfb'\x0\xedk\xb2\xfc\x8b\xeb\x8d\x8f" "\xf9\x90\x1c\x14\x9a\" Ane\"\x9d\x19\x63\xa7\x92Q\x7 \x17\xc4|Z\xeaV\x14\x1d)X\xcf" "Ax\x93\xaa\x5\xc1\xedp:\xdb\x82p\x17Y\x1d,\x9e\xa7,c\x83\xd0\xee\x81|\x2\x93\x86" "\xc2\xcaR\xba\x7f\x32\x8b\x12\xcd\xc8=\xf1\xdb\x15J\x97\xc0\xcc\x92\x7f\xa4\xaf\xf4" "\x7fh(K\x14\xdd\xc9X\xb4\x3\xf6\xe\x62!\xbc,0^IH\xe7\x62L8\xcaoz\xa4\xf1U/7S\xc7" "\x1bN\xe2\x6Qq\xf7O\xc8\xf0\xd0\x0\xdd:\x18\x19\xad\xe6\xbe\xae\xf\x41@\x85\xf4\x63" "0\xbf\x99\xd7\x7\x65%\xc3\x3i\x15\x4\x9b\x42\x1f\xf0\xc4J\xd1\x7\"\xf3\x14\xd4\xfa" "\xcb\x10\xfaM\xc\x66:\x10\x64\x91mL\xa7\xefh\x98 \xb7\x7f\xca\x4\x88\x8e\x62\x98" "\xc1\xe\x31z\x9\x16X|\xb9\xbf\xb0o\xe3\xe4\x8bY\x10\x9a\xcc\x87\xcf\xbaI\xd5.RA&" "g^4\x5\x66.FX\xcf\xe8\"\x32\xe5\x42\xda\xc2\x1?^\x1f\x3m|\x3\xc1\x16g/\xc0\xa3\x80" "!\x4]\xc0\x9c\x95\xc9R\x9c\x45q\xa4\xb\x80\xca\xc4\x9f\x9\x9\x91\xf2l\xf9\x8a\xdb" "B\x17v\x18_E\xcc:a\xca\xb6w\"B\xcb\xf\xde\x44@/\"P:\x80\xc8w\x8\xc5\xe\xff\x8bR2" "Q`\x9cK\x8\x14\x39$76X\xd2\xe4s\x10\xb4\xf3\xee\x45\x95\xe2P\x1c\xe6\xb8$\xf8\xc7" "\x0\xce\x61P\xfc\xa2\xc8#$\xed\x34\xd1\xc2+$\x9b\x2&)\x16vd\xe7S\xf0\xc6\xdf\x33" "\xbe\x44\xa0`{\xcb\x1f\xdd\xb5\x9f\x9e#k\x9cS$\xaa\x17Y\xda\\O\xfa:\x8oD\xd3\x89" "\x88\xcd\xd3O\x90\x6\xfe~{\xd4_\x95\x9b\x8a\xc4\x7\x81\xe7\xdd\x84\x1cV9a\xce\x17" "\x7G\xe\xf]\xfc\x1f\x96\xc6\xab\xed&\xc6\x9f\x1b\xf9\xc1\x7f\xb8\xccNmi\xf0w\xa3" "C\x12_Y-\xb2\x0\x93\xb6\xf6\x39\xe8\x96v\xe4Z\xd6\xc7\xc5\xe5MX<1\xc\xb9+:\xdd\x4" "\xf0\xb0\x80\xba=\xb\x43K\\0\xfc\xech\xe3'\xd4\x43\x35\xb9" "n\xeb\xb2\x41X\xec\x84\xf9\x1\xf9\x34Hw\xe4\xf\x83\x10\xdcO\xe\xdc\x85\x1\xe0\x18" "\xbb\x1b\x8dX\xf1\xe3\x83\x1f\xf2I\xc0\xc5\r\x65=\x86\xf5\xfa\xc3\xf7\xd0\x8c\xd4" "\xa5\x61\xd5x;\xe3\xf2\x42\xd6\xda\xa2\x1es\xd5\xe1\xfa\xd5\x92\xbb\xbd\xb4\xa0\x0" "\x1\xb6\xa8\xb9Y\x1b\x66\x14\x0\xe4\x61\x12\xaaly\x98K\xc1\xf4XY0\xab\xb1\xad\xd2" "\x98\xf-\xcf\x98\xf1\xba\x19_\xe1pr\x87\xcb\x85\xd6\x86\xeal\xd5y)2\x84Z$\xdb\xe4" "V\xf4\x64\x5\xc5\xb9\x30\x8c\x45\xac^\xc3\xb1\xc0\x30\xd2\xd9S\x9fm^\xf8#\x6\x8c" "uhE\xbc\\\x19\xe2\x4o\\\x85n]@i\xd8\xeG\x80\xfc\x8a:\xab\x82\xe7\x45\xd1\x9b\x96" "DT:\x82<\x3\xd5\xb4Yx\xf3\x42U\xcd[^\x18|\r\xd6 \xc5R?Vo\x88T\xc7\x9c\xc0VU\xee\xc2" "\xb1T\xd8\x10W\xdb\xd0\xb1\xa0\x1c\x9dW\x85\x35\x80\x1a\x9cI\xac(\xae\x31\x14\x1d" "\xb8\n\xcV\x1a\x4\xee\xf8 \xbf\xbf\x82\xd7\xd1S\x82\x45=\x9fh\r\xb1$0\x8a\xf3Xz\x12" "(+\x17\x5\x3\x1f\x2`\xb1+\xe5\x85\xf5\x66L\x1c\x95[\xb2\xe7t\x8dipL\x82\x8\x66\xf7" "{\x1b\x8a\xe6j\xc8\x3\xda\n\xd8\x33\x1\x93\xb1?\xadH\xc1zj\nx\xek\xbcp\xd4\x86\x8e" "\x94\xf8\xa9\x81'\x97\xea\x98\x5u\x16\x86\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30" "00000000000000000000000000000000000000000000000000000000000\r0000000000000000000" "000000000000000000000000000000000000000000000\r000000000000000000000000000000000" "0000000000000000000000000000000\r00000000000000000000000000000000000000000000000" "00000000000000000\r0000000000000000000000000000000000000000000000000000000000000" "000\r0000000000000000000000000000000000000000000000000000000000000000\r000000000" "0000000000000000000000000000000000000000000000000000000\r00000000000000000000000" "00000000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n019024l_afm_len = 31901; char* n019024l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusSanL-BoldIt" "al\nFullName Nimbus Sans L Bold Italic\nFamilyName Nimbus Sans L\nWeight Bold\nI" "talicAngle -12.0\nIsFixedPitch false\nUnderlinePosition -111\nUnderlineThickness" " 69\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Development" "\nEncodingScheme AdobeStandardEncoding\nFontBBox -177 -309 1107 953\nCapHeight 7" "29\nXHeight 540\nDescender -217\nAscender 729\nStartCharMetrics 316\nC 32 ; WX 2" "78 ; N space ; B 245 0 245 0 ;\nC 33 ; WX 333 ; N exclam ; B 112 0 417 726 ;\nC " "34 ; WX 474 ; N quotedbl ; B 177 470 579 729 ;\nC 35 ; WX 556 ; N numbersign ; B" " 33 -32 660 697 ;\nC 36 ; WX 556 ; N dollar ; B 59 -126 628 763 ;\nC 37 ; WX 889" " ; N percent ; B 129 -20 903 709 ;\nC 38 ; WX 722 ; N ampersand ; B 89 -23 720 7" "23 ;\nC 39 ; WX 278 ; N quoteright ; B 165 469 356 729 ;\nC 40 ; WX 333 ; N pare" "nleft ; B 84 -200 458 729 ;\nC 41 ; WX 333 ; N parenright ; B -21 -200 356 729 ;" "\nC 42 ; WX 389 ; N asterisk ; B 145 407 478 729 ;\nC 43 ; WX 584 ; N plus ; B 8" "7 -10 596 473 ;\nC 44 ; WX 278 ; N comma ; B 27 -174 245 146 ;\nC 45 ; WX 333 ; " "N hyphen ; B 70 207 371 342 ;\nC 46 ; WX 278 ; N period ; B 64 0 245 146 ;\nC 47" " ; WX 278 ; N slash ; B -1 -14 427 714 ;\nC 48 ; WX 556 ; N zero ; B 81 -23 614 " "724 ;\nC 49 ; WX 556 ; N one ; B 172 0 529 709 ;\nC 50 ; WX 556 ; N two ; B 30 0" " 628 724 ;\nC 51 ; WX 556 ; N three ; B 67 -23 613 724 ;\nC 52 ; WX 556 ; N four" " ; B 57 0 599 709 ;\nC 53 ; WX 556 ; N five ; B 59 -23 641 709 ;\nC 54 ; WX 556 " "; N six ; B 85 -23 625 724 ;\nC 55 ; WX 556 ; N seven ; B 131 0 679 709 ;\nC 56 " "; WX 556 ; N eight ; B 60 -23 620 724 ;\nC 57 ; WX 556 ; N nine ; B 68 -23 611 7" "24 ;\nC 58 ; WX 333 ; N colon ; B 113 0 374 520 ;\nC 59 ; WX 333 ; N semicolon ;" " B 76 -174 374 520 ;\nC 60 ; WX 584 ; N less ; B 77 -10 630 474 ;\nC 61 ; WX 584" " ; N equal ; B 61 52 622 412 ;\nC 62 ; WX 584 ; N greater ; B 38 -10 591 474 ;\n" "C 63 ; WX 611 ; N question ; B 168 0 672 744 ;\nC 64 ; WX 975 ; N at ; B 73 -137" " 1032 745 ;\nC 65 ; WX 722 ; N A ; B 26 0 703 729 ;\nC 66 ; WX 722 ; N B ; B 82 " "0 762 729 ;\nC 67 ; WX 722 ; N C ; B 107 -23 793 741 ;\nC 68 ; WX 722 ; N D ; B " "77 0 776 729 ;\nC 69 ; WX 667 ; N E ; B 79 0 762 729 ;\nC 70 ; WX 611 ; N F ; B " "74 0 741 729 ;\nC 71 ; WX 778 ; N G ; B 107 -23 819 741 ;\nC 72 ; WX 722 ; N H ;" " B 68 0 812 729 ;\nC 73 ; WX 278 ; N I ; B 63 0 368 729 ;\nC 74 ; WX 556 ; N J ;" " B 59 -23 641 729 ;\nC 75 ; WX 722 ; N K ; B 74 0 843 729 ;\nC 76 ; WX 611 ; N L" " ; B 80 0 606 729 ;\nC 77 ; WX 833 ; N M ; B 66 0 931 729 ;\nC 78 ; WX 722 ; N N" " ; B 68 0 816 729 ;\nC 79 ; WX 778 ; N O ; B 106 -23 828 741 ;\nC 80 ; WX 667 ; " "N P ; B 76 0 747 729 ;\nC 81 ; WX 778 ; N Q ; B 109 -54 831 741 ;\nC 82 ; WX 722" " ; N R ; B 80 0 785 729 ;\nC 83 ; WX 667 ; N S ; B 76 -23 725 741 ;\nC 84 ; WX 6" "11 ; N T ; B 142 0 753 729 ;\nC 85 ; WX 722 ; N U ; B 119 -23 809 729 ;\nC 86 ; " "WX 667 ; N V ; B 179 0 802 729 ;\nC 87 ; WX 944 ; N W ; B 168 0 1087 729 ;\nC 88" " ; WX 667 ; N X ; B 22 0 802 729 ;\nC 89 ; WX 667 ; N Y ; B 182 0 805 729 ;\nC 9" "0 ; WX 611 ; N Z ; B 30 0 733 729 ;\nC 91 ; WX 333 ; N bracketleft ; B 23 -200 4" "63 729 ;\nC 92 ; WX 278 ; N backslash ; B 138 -23 285 709 ;\nC 93 ; WX 333 ; N b" "racketright ; B -25 -200 415 729 ;\nC 94 ; WX 584 ; N asciicircum ; B 119 270 58" "0 695 ;\nC 95 ; WX 556 ; N underscore ; B -65 -145 550 -76 ;\nC 96 ; WX 278 ; N " "quoteleft ; B 167 469 357 729 ;\nC 97 ; WX 556 ; N a ; B 50 -23 578 549 ;\nC 98 " "; WX 611 ; N b ; B 59 -23 640 729 ;\nC 99 ; WX 556 ; N c ; B 77 -23 597 549 ;\nC" " 100 ; WX 611 ; N d ; B 79 -23 700 729 ;\nC 101 ; WX 556 ; N e ; B 64 -23 591 54" "9 ;\nC 102 ; WX 333 ; N f ; B 90 0 464 729 ;\nC 103 ; WX 611 ; N g ; B 26 -218 6" "56 549 ;\nC 104 ; WX 611 ; N h ; B 67 0 629 729 ;\nC 105 ; WX 278 ; N i ; B 67 0" " 362 729 ;\nC 106 ; WX 278 ; N j ; B -43 -218 365 729 ;\nC 107 ; WX 556 ; N k ; " "B 59 0 651 729 ;\nC 108 ; WX 278 ; N l ; B 67 0 362 729 ;\nC 109 ; WX 889 ; N m " "; B 60 0 911 549 ;\nC 110 ; WX 611 ; N n ; B 63 0 629 549 ;\nC 111 ; WX 611 ; N " "o ; B 82 -23 634 549 ;\nC 112 ; WX 611 ; N p ; B 11 -218 637 549 ;\nC 113 ; WX 6" "11 ; N q ; B 72 -218 659 549 ;\nC 114 ; WX 389 ; N r ; B 63 0 487 549 ;\nC 115 ;" " WX 556 ; N s ; B 60 -23 589 549 ;\nC 116 ; WX 333 ; N t ; B 101 -23 414 674 ;\n" "C 117 ; WX 611 ; N u ; B 88 -23 656 540 ;\nC 118 ; WX 556 ; N v ; B 129 0 651 54" "0 ;\nC 119 ; WX 778 ; N w ; B 120 0 881 540 ;\nC 120 ; WX 556 ; N x ; B 16 0 648" " 540 ;\nC 121 ; WX 556 ; N y ; B 37 -219 653 540 ;\nC 122 ; WX 500 ; N z ; B 21 " "0 575 540 ;\nC 123 ; WX 389 ; N braceleft ; B 84 -200 472 729 ;\nC 124 ; WX 280 " "; N bar ; B 57 -200 335 729 ;\nC 125 ; WX 389 ; N braceright ; B 29 -200 419 729" " ;\nC 126 ; WX 584 ; N asciitilde ; B 97 142 581 314 ;\nC 161 ; WX 333 ; N excla" "mdown ; B 26 -186 331 540 ;\nC 162 ; WX 556 ; N cent ; B 79 -124 598 634 ;\nC 16" "3 ; WX 556 ; N sterling ; B 49 -23 629 715 ;\nC 164 ; WX 167 ; N fraction ; B -1" "77 -20 489 715 ;\nC 165 ; WX 556 ; N yen ; B 107 0 702 704 ;\nC 166 ; WX 556 ; N" " florin ; B -21 -220 690 744 ;\nC 167 ; WX 556 ; N section ; B 56 -201 596 723 ;" "\nC 168 ; WX 556 ; N currency ; B 66 100 644 604 ;\nC 169 ; WX 238 ; N quotesing" "le ; B 177 470 343 729 ;\nC 170 ; WX 500 ; N quotedblleft ; B 171 469 588 729 ;\n" "C 171 ; WX 556 ; N guillemotleft ; B 135 72 571 481 ;\nC 172 ; WX 333 ; N guilsi" "nglleft ; B 128 72 351 481 ;\nC 173 ; WX 333 ; N guilsinglright ; B 96 72 319 48" "1 ;\nC 174 ; WX 611 ; N fi ; B 85 0 703 729 ;\nC 175 ; WX 611 ; N fl ; B 88 0 70" "1 729 ;\nC 177 ; WX 556 ; N endash ; B 35 207 624 311 ;\nC 178 ; WX 556 ; N dagg" "er ; B 109 -194 626 709 ;\nC 179 ; WX 556 ; N daggerdbl ; B 35 -194 623 709 ;\nC" " 180 ; WX 278 ; N periodcentered ; B 143 182 270 282 ;\nC 182 ; WX 556 ; N parag" "raph ; B 121 -191 684 729 ;\nC 183 ; WX 350 ; N bullet ; B 111 175 367 425 ;\nC " "184 ; WX 278 ; N quotesinglbase ; B 37 -135 228 125 ;\nC 185 ; WX 500 ; N quoted" "blbase ; B 37 -135 462 125 ;\nC 186 ; WX 500 ; N quotedblright ; B 173 469 595 7" "29 ;\nC 187 ; WX 556 ; N guillemotright ; B 103 72 533 481 ;\nC 188 ; WX 1000 ; " "N ellipsis ; B 92 0 939 146 ;\nC 189 ; WX 1000 ; N perthousand ; B 72 -21 1021 7" "39 ;\nC 191 ; WX 611 ; N questiondown ; B 52 -204 556 540 ;\nC 193 ; WX 333 ; N " "grave ; B 175 607 339 757 ;\nC 194 ; WX 333 ; N acute ; B 247 607 475 757 ;\nC 1" "95 ; WX 333 ; N circumflex ; B 135 610 453 757 ;\nC 196 ; WX 333 ; N tilde ; B 1" "17 622 500 744 ;\nC 197 ; WX 333 ; N macron ; B 150 642 467 722 ;\nC 198 ; WX 33" "3 ; N breve ; B 188 611 455 754 ;\nC 199 ; WX 333 ; N dotaccent ; B 241 621 377 " "741 ;\nC 200 ; WX 333 ; N dieresis ; B 147 621 469 741 ;\nC 202 ; WX 333 ; N rin" "g ; B 214 593 398 773 ;\nC 203 ; WX 333 ; N cedilla ; B -13 -220 270 0 ;\nC 205 " "; WX 333 ; N hungarumlaut ; B 82 610 498 757 ;\nC 206 ; WX 333 ; N ogonek ; B 23" " -233 248 0 ;\nC 207 ; WX 333 ; N caron ; B 167 610 485 757 ;\nC 208 ; WX 1000 ;" " N emdash ; B 37 207 1070 311 ;\nC 225 ; WX 1000 ; N AE ; B 1 0 1104 729 ;\nC 22" "7 ; WX 370 ; N ordfeminine ; B 96 262 451 729 ;\nC 232 ; WX 611 ; N Lslash ; B 5" "4 0 624 729 ;\nC 233 ; WX 778 ; N Oslash ; B 34 -39 906 749 ;\nC 234 ; WX 1000 ;" " N OE ; B 90 -23 1107 741 ;\nC 235 ; WX 365 ; N ordmasculine ; B 92 262 471 729 " ";\nC 241 ; WX 889 ; N ae ; B 54 -23 927 549 ;\nC 245 ; WX 278 ; N dotlessi ; B 6" "7 0 322 540 ;\nC 248 ; WX 278 ; N lslash ; B 50 0 372 729 ;\nC 249 ; WX 611 ; N " "oslash ; B 12 -38 709 557 ;\nC 250 ; WX 944 ; N oe ; B 71 -23 986 549 ;\nC 251 ;" " WX 611 ; N germandbls ; B 67 -23 654 729 ;\nC -1 ; WX 722 ; N Udieresis ; B 119" " -23 809 920 ;\nC -1 ; WX 722 ; N Uacute ; B 119 -23 809 936 ;\nC -1 ; WX 667 ; " "N Scedilla ; B 76 -220 725 741 ;\nC -1 ; WX 611 ; N Tcaron ; B 142 0 753 936 ;\n" "C -1 ; WX 667 ; N Scaron ; B 76 -23 725 936 ;\nC -1 ; WX 722 ; N Rcaron ; B 80 0" " 785 936 ;\nC -1 ; WX 722 ; N Racute ; B 80 0 785 936 ;\nC -1 ; WX 667 ; N Sacut" "e ; B 76 -23 725 936 ;\nC -1 ; WX 778 ; N Otilde ; B 106 -23 828 923 ;\nC -1 ; W" "X 611 ; N ucircumflex ; B 88 -23 656 757 ;\nC -1 ; WX 778 ; N Ohungarumlaut ; B " "106 -23 841 936 ;\nC -1 ; WX 722 ; N Uhungarumlaut ; B 119 -23 809 936 ;\nC -1 ;" " WX 667 ; N Yacute ; B 182 0 805 936 ;\nC -1 ; WX 722 ; N Eth ; B 73 0 776 729 ;" "\nC -1 ; WX 722 ; N Dcroat ; B 73 0 776 729 ;\nC -1 ; WX 611 ; N Zacute ; B 30 0" " 733 936 ;\nC -1 ; WX 722 ; N Uring ; B 119 -23 809 953 ;\nC -1 ; WX 611 ; N gbr" "eve ; B 26 -218 656 754 ;\nC -1 ; WX 556 ; N eogonek ; B 64 -233 591 549 ;\nC -1" " ; WX 556 ; N edotaccent ; B 64 -23 591 741 ;\nC -1 ; WX 556 ; N ecaron ; B 64 -" "23 593 757 ;\nC -1 ; WX 722 ; N Ugrave ; B 119 -23 809 936 ;\nC -1 ; WX 667 ; N " "Thorn ; B 76 0 721 729 ;\nC -1 ; WX 556 ; N eacute ; B 64 -23 591 757 ;\nC -1 ; " "WX 556 ; N edieresis ; B 64 -23 591 741 ;\nC -1 ; WX 722 ; N dcaron ; B 79 -23 8" "82 729 ;\nC -1 ; WX 556 ; N ccedilla ; B 77 -220 597 549 ;\nC -1 ; WX 556 ; N cc" "aron ; B 77 -23 607 757 ;\nC -1 ; WX 556 ; N cacute ; B 77 -23 597 757 ;\nC -1 ;" " WX 556 ; N aogonek ; B 50 -233 578 549 ;\nC -1 ; WX 556 ; N aring ; B 50 -23 57" "8 773 ;\nC -1 ; WX 556 ; N atilde ; B 50 -23 612 744 ;\nC -1 ; WX 556 ; N abreve" " ; B 50 -23 578 754 ;\nC -1 ; WX 556 ; N egrave ; B 64 -23 591 757 ;\nC -1 ; WX " "556 ; N agrave ; B 50 -23 578 757 ;\nC -1 ; WX 556 ; N aacute ; B 50 -23 587 757" " ;\nC -1 ; WX 556 ; N adieresis ; B 50 -23 581 741 ;\nC -1 ; WX 722 ; N Uogonek " "; B 119 -233 809 729 ;\nC -1 ; WX 611 ; N ugrave ; B 88 -23 656 757 ;\nC -1 ; WX" " 611 ; N uacute ; B 88 -23 656 757 ;\nC -1 ; WX 611 ; N udieresis ; B 88 -23 656" " 741 ;\nC -1 ; WX 404 ; N tcaron ; B 101 -23 578 829 ;\nC -1 ; WX 556 ; N scomma" "accent ; B 60 -307 589 549 ;\nC -1 ; WX 611 ; N Zcaron ; B 30 0 733 936 ;\nC -1 " "; WX 556 ; N ecircumflex ; B 64 -23 591 757 ;\nC -1 ; WX 722 ; N Ucircumflex ; B" " 119 -23 809 936 ;\nC -1 ; WX 556 ; N acircumflex ; B 50 -23 578 757 ;\nC -1 ; W" "X 611 ; N Zdotaccent ; B 30 0 733 918 ;\nC -1 ; WX 556 ; N scaron ; B 60 -23 597" " 757 ;\nC -1 ; WX 722 ; N Amacron ; B 26 0 706 901 ;\nC -1 ; WX 556 ; N sacute ;" " B 60 -23 589 757 ;\nC -1 ; WX 611 ; N Tcommaaccent ; B 142 -307 753 729 ;\nC -1" " ; WX 667 ; N Ydieresis ; B 182 0 805 920 ;\nC -1 ; WX 611 ; N thorn ; B 11 -218" " 637 729 ;\nC -1 ; WX 667 ; N Emacron ; B 79 0 762 901 ;\nC -1 ; WX 778 ; N Ogra" "ve ; B 106 -23 828 936 ;\nC -1 ; WX 778 ; N Oacute ; B 106 -23 828 936 ;\nC -1 ;" " WX 778 ; N Odieresis ; B 106 -23 828 920 ;\nC -1 ; WX 722 ; N Ntilde ; B 68 0 8" "16 923 ;\nC -1 ; WX 722 ; N Ncaron ; B 68 0 816 936 ;\nC -1 ; WX 722 ; N Nacute " "; B 68 0 816 936 ;\nC -1 ; WX 611 ; N Lcaron ; B 80 0 607 729 ;\nC -1 ; WX 611 ;" " N Lacute ; B 80 0 606 936 ;\nC -1 ; WX 278 ; N Idotaccent ; B 63 0 388 918 ;\nC" " -1 ; WX 389 ; N racute ; B 63 0 500 757 ;\nC -1 ; WX 278 ; N Icircumflex ; B 63" " 0 467 936 ;\nC -1 ; WX 611 ; N ohungarumlaut ; B 82 -23 710 757 ;\nC -1 ; WX 61" "1 ; N otilde ; B 82 -23 639 744 ;\nC -1 ; WX 556 ; N Euro ; B 21 -23 648 724 ;\n" "C -1 ; WX 611 ; N ocircumflex ; B 82 -23 634 757 ;\nC -1 ; WX 444 ; N onesuperio" "r ; B 210 284 438 709 ;\nC -1 ; WX 444 ; N twosuperior ; B 124 284 499 718 ;\nC " "-1 ; WX 444 ; N threesuperior ; B 147 271 490 718 ;\nC -1 ; WX 278 ; N Igrave ; " "B 63 0 368 936 ;\nC -1 ; WX 278 ; N Iacute ; B 63 0 489 936 ;\nC -1 ; WX 278 ; N" " Imacron ; B 63 0 466 901 ;\nC -1 ; WX 278 ; N Iogonek ; B 7 -233 368 729 ;\nC -" "1 ; WX 278 ; N Idieresis ; B 63 0 483 920 ;\nC -1 ; WX 778 ; N Gbreve ; B 107 -2" "3 819 934 ;\nC -1 ; WX 722 ; N Umacron ; B 119 -23 809 901 ;\nC -1 ; WX 722 ; N " "Kcommaaccent ; B 74 -307 843 729 ;\nC -1 ; WX 611 ; N ograve ; B 82 -23 634 757 " ";\nC -1 ; WX 667 ; N Scommaaccent ; B 76 -307 725 741 ;\nC -1 ; WX 667 ; N Eogon" "ek ; B 79 -233 762 729 ;\nC -1 ; WX 611 ; N oacute ; B 82 -23 634 757 ;\nC -1 ; " "WX 667 ; N Edotaccent ; B 79 0 762 918 ;\nC -1 ; WX 268 ; N iogonek ; B 0 -233 3" "51 729 ;\nC -1 ; WX 611 ; N gcommaaccent ; B 26 -218 656 854 ;\nC -1 ; WX 611 ; " "N odieresis ; B 82 -23 634 741 ;\nC -1 ; WX 611 ; N ntilde ; B 63 0 646 744 ;\nC" " -1 ; WX 611 ; N ncaron ; B 63 0 629 757 ;\nC -1 ; WX 667 ; N Ecaron ; B 79 0 76" "2 936 ;\nC -1 ; WX 667 ; N Ecircumflex ; B 79 0 762 936 ;\nC -1 ; WX 556 ; N sce" "dilla ; B 60 -220 589 549 ;\nC -1 ; WX 389 ; N rcaron ; B 63 0 533 757 ;\nC -1 ;" " WX 667 ; N Egrave ; B 79 0 762 936 ;\nC -1 ; WX 667 ; N Eacute ; B 79 0 762 936" " ;\nC -1 ; WX 778 ; N Gcommaaccent ; B 107 -307 819 741 ;\nC -1 ; WX 722 ; N Rco" "mmaaccent ; B 80 -307 785 729 ;\nC -1 ; WX 667 ; N Edieresis ; B 79 0 762 920 ;\n" "C -1 ; WX 611 ; N nacute ; B 63 0 629 757 ;\nC -1 ; WX 611 ; N uogonek ; B 88 -2" "33 656 540 ;\nC -1 ; WX 611 ; N umacron ; B 88 -23 656 722 ;\nC -1 ; WX 722 ; N " "Dcaron ; B 77 0 776 936 ;\nC -1 ; WX 384 ; N lcaron ; B 67 0 544 729 ;\nC -1 ; W" "X 722 ; N Ccaron ; B 107 -23 793 936 ;\nC -1 ; WX 722 ; N Cacute ; B 107 -23 793" " 936 ;\nC -1 ; WX 722 ; N Ccedilla ; B 107 -220 793 741 ;\nC -1 ; WX 606 ; N deg" "ree ; B 240 383 543 686 ;\nC -1 ; WX 722 ; N Aogonek ; B 26 -233 703 729 ;\nC -1" " ; WX 584 ; N minus ; B 77 172 606 292 ;\nC -1 ; WX 584 ; N multiply ; B 102 18 " "582 444 ;\nC -1 ; WX 584 ; N divide ; B 77 0 606 462 ;\nC -1 ; WX 722 ; N Aring " "; B 26 0 703 953 ;\nC -1 ; WX 1000 ; N trademark ; B 213 273 1087 729 ;\nC -1 ; " "WX 389 ; N rcommaaccent ; B 8 -307 487 549 ;\nC -1 ; WX 278 ; N lacute ; B 67 0 " "474 936 ;\nC -1 ; WX 611 ; N omacron ; B 82 -23 634 722 ;\nC -1 ; WX 722 ; N Ati" "lde ; B 26 0 739 923 ;\nC -1 ; WX 278 ; N icircumflex ; B 67 0 426 757 ;\nC -1 ;" " WX 278 ; N igrave ; B 67 0 322 757 ;\nC -1 ; WX 611 ; N ncommaaccent ; B 63 -30" "7 629 549 ;\nC -1 ; WX 278 ; N lcommaaccent ; B 11 -307 362 729 ;\nC -1 ; WX 584" " ; N plusminus ; B 50 0 630 633 ;\nC -1 ; WX 1055 ; N onehalf ; B 210 -20 1050 7" "15 ;\nC -1 ; WX 1055 ; N onequarter ; B 210 -20 1032 715 ;\nC -1 ; WX 1055 ; N t" "hreequarters ; B 147 -20 1032 718 ;\nC -1 ; WX 278 ; N iacute ; B 67 0 448 757 ;" "\nC -1 ; WX 722 ; N Abreve ; B 26 0 703 934 ;\nC -1 ; WX 556 ; N kcommaaccent ; " "B 59 -307 651 729 ;\nC -1 ; WX 778 ; N Omacron ; B 106 -23 828 901 ;\nC -1 ; WX " "278 ; N imacron ; B 67 0 424 722 ;\nC -1 ; WX 556 ; N emacron ; B 64 -23 591 722" " ;\nC -1 ; WX 556 ; N amacron ; B 50 -23 579 722 ;\nC -1 ; WX 333 ; N tcommaacce" "nt ; B 62 -307 414 674 ;\nC -1 ; WX 556 ; N ydieresis ; B 37 -219 653 741 ;\nC -" "1 ; WX 500 ; N zdotaccent ; B 21 0 575 741 ;\nC -1 ; WX 500 ; N zcaron ; B 21 0 " "575 757 ;\nC -1 ; WX 500 ; N zacute ; B 21 0 575 757 ;\nC -1 ; WX 556 ; N yacute" " ; B 37 -219 653 757 ;\nC -1 ; WX 611 ; N uhungarumlaut ; B 88 -23 697 757 ;\nC " "-1 ; WX 611 ; N eth ; B 83 -23 633 744 ;\nC -1 ; WX 611 ; N uring ; B 88 -23 656" " 773 ;\nC -1 ; WX 778 ; N Ocircumflex ; B 106 -23 828 936 ;\nC -1 ; WX 333 ; N c" "ommaaccent ; B 43 -307 217 -60 ;\nC -1 ; WX 737 ; N copyright ; B 54 -22 837 743" " ;\nC -1 ; WX 737 ; N registered ; B 55 -22 837 743 ;\nC -1 ; WX 722 ; N Acircum" "flex ; B 26 0 703 936 ;\nC -1 ; WX 278 ; N idieresis ; B 67 0 442 741 ;\nC -1 ; " "WX 489 ; N lozenge ; B 95 0 541 744 ;\nC -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;" "\nC -1 ; WX 584 ; N notequal ; B 61 -74 622 544 ;\nC -1 ; WX 542 ; N radical ; B" " 102 -36 705 913 ;\nC -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ;\nC -1 ; WX 722 ;" " N Aacute ; B 26 0 714 936 ;\nC -1 ; WX 584 ; N lessequal ; B 35 0 657 624 ;\nC " "-1 ; WX 584 ; N greaterequal ; B 44 0 627 624 ;\nC -1 ; WX 584 ; N logicalnot ; " "B 103 86 632 376 ;\nC -1 ; WX 711 ; N summation ; B -18 -97 760 760 ;\nC -1 ; WX" " 490 ; N partialdiff ; B 22 -15 458 750 ;\nC -1 ; WX 722 ; N Ncommaaccent ; B 68" " -307 816 729 ;\nC -1 ; WX 611 ; N dcroat ; B 79 -23 746 729 ;\nC -1 ; WX 280 ; " "N brokenbar ; B 57 -200 335 729 ;\nC -1 ; WX 611 ; N Lcommaaccent ; B 80 -309 60" "6 729 ;\nC -1 ; WX 722 ; N Adieresis ; B 26 0 708 920 ;\nC -1 ; WX 611 ; N mu ; " "B 11 -220 655 540 ;\nC -1 ; WX 278 ; N .notdef ; B 245 0 245 0 ;\nEndCharMetrics" "\nStartKernData\nStartKernPairs 998\nKPX A C -36\nKPX A Ccedilla -36\nKPX A G -3" "8\nKPX A O -37\nKPX A Odieresis -37\nKPX A Q -39\nKPX A T -91\nKPX A U -37\nKPX " "A Uacute -37\nKPX A Ucircumflex -37\nKPX A Udieresis -37\nKPX A Ugrave -37\nKPX " "A V -74\nKPX A W -57\nKPX A Y -96\nKPX A a -11\nKPX A b -10\nKPX A c -17\nKPX A " "ccedilla -17\nKPX A comma 9\nKPX A d -17\nKPX A e -10\nKPX A g -20\nKPX A guille" "motleft -48\nKPX A guilsinglleft -44\nKPX A hyphen 2\nKPX A o -19\nKPX A period " "13\nKPX A q -13\nKPX A quotedblright -71\nKPX A quoteright -67\nKPX A t -21\nKPX" " A u -17\nKPX A v -42\nKPX A w -28\nKPX A y -41\nKPX Aacute C -37\nKPX Aacute G " "-38\nKPX Aacute O -38\nKPX Aacute Q -40\nKPX Aacute T -91\nKPX Aacute U -38\nKPX" " Aacute V -74\nKPX Aacute W -57\nKPX Aacute Y -96\nKPX Aacute a -11\nKPX Aacute " "b -10\nKPX Aacute c -17\nKPX Aacute comma 9\nKPX Aacute d -17\nKPX Aacute e -11\n" "KPX Aacute g -20\nKPX Aacute guillemotleft -48\nKPX Aacute guilsinglleft -45\nKP" "X Aacute hyphen 2\nKPX Aacute o -20\nKPX Aacute period 12\nKPX Aacute q -14\nKPX" " Aacute quoteright -67\nKPX Aacute t -22\nKPX Aacute u -18\nKPX Aacute v -42\nKP" "X Aacute w -29\nKPX Aacute y -41\nKPX Acircumflex C -36\nKPX Acircumflex G -38\n" "KPX Acircumflex O -37\nKPX Acircumflex Q -39\nKPX Acircumflex T -91\nKPX Acircum" "flex U -37\nKPX Acircumflex V -74\nKPX Acircumflex W -57\nKPX Acircumflex Y -96\n" "KPX Acircumflex comma 9\nKPX Acircumflex period 13\nKPX Adieresis C -37\nKPX Adi" "eresis G -38\nKPX Adieresis O -38\nKPX Adieresis Q -39\nKPX Adieresis T -91\nKPX" " Adieresis U -38\nKPX Adieresis V -74\nKPX Adieresis W -57\nKPX Adieresis Y -96\n" "KPX Adieresis a -11\nKPX Adieresis b -10\nKPX Adieresis c -17\nKPX Adieresis com" "ma 9\nKPX Adieresis d -17\nKPX Adieresis g -20\nKPX Adieresis guillemotleft -48\n" "KPX Adieresis guilsinglleft -44\nKPX Adieresis hyphen 2\nKPX Adieresis o -20\nKP" "X Adieresis period 12\nKPX Adieresis q -13\nKPX Adieresis quotedblright -71\nKPX" " Adieresis quoteright -67\nKPX Adieresis t -22\nKPX Adieresis u -17\nKPX Adieres" "is v -42\nKPX Adieresis w -28\nKPX Adieresis y -41\nKPX Agrave C -36\nKPX Agrave" " G -38\nKPX Agrave O -37\nKPX Agrave Q -39\nKPX Agrave T -91\nKPX Agrave U -37\n" "KPX Agrave V -74\nKPX Agrave W -57\nKPX Agrave Y -96\nKPX Agrave comma 9\nKPX Ag" "rave period 13\nKPX Aring C -36\nKPX Aring G -38\nKPX Aring O -37\nKPX Aring Q -" "39\nKPX Aring T -91\nKPX Aring U -37\nKPX Aring V -74\nKPX Aring W -57\nKPX Arin" "g Y -96\nKPX Aring a -11\nKPX Aring b -10\nKPX Aring c -17\nKPX Aring comma 9\nK" "PX Aring d -17\nKPX Aring e -10\nKPX Aring g -20\nKPX Aring guillemotleft -48\nK" "PX Aring guilsinglleft -44\nKPX Aring hyphen 2\nKPX Aring o -19\nKPX Aring perio" "d 13\nKPX Aring q -13\nKPX Aring quotedblright -71\nKPX Aring quoteright -67\nKP" "X Aring t -21\nKPX Aring u -17\nKPX Aring v -42\nKPX Aring w -28\nKPX Aring y -4" "1\nKPX Atilde C -38\nKPX Atilde G -40\nKPX Atilde O -39\nKPX Atilde Q -41\nKPX A" "tilde T -92\nKPX Atilde U -39\nKPX Atilde V -74\nKPX Atilde W -57\nKPX Atilde Y " "-96\nKPX Atilde comma 9\nKPX Atilde period 11\nKPX B A -41\nKPX B AE -30\nKPX B " "Aacute -41\nKPX B Acircumflex -41\nKPX B Adieresis -41\nKPX B Aring -41\nKPX B A" "tilde -41\nKPX B O -18\nKPX B OE -9\nKPX B Oacute -18\nKPX B Ocircumflex -18\nKP" "X B Odieresis -18\nKPX B Ograve -18\nKPX B Oslash -17\nKPX B V -46\nKPX B W -30\n" "KPX B Y -63\nKPX C A -34\nKPX C AE -23\nKPX C Aacute -34\nKPX C Adieresis -34\nK" "PX C Aring -34\nKPX C H -1\nKPX C K -4\nKPX C O -12\nKPX C Oacute -12\nKPX C Odi" "eresis -12\nKPX Ccedilla A -34\nKPX D A -40\nKPX D Aacute -40\nKPX D Acircumflex" " -40\nKPX D Adieresis -40\nKPX D Agrave -40\nKPX D Aring -40\nKPX D Atilde -40\n" "KPX D J -4\nKPX D T -24\nKPX D V -37\nKPX D W -20\nKPX D X -40\nKPX D Y -62\nKPX" " F A -68\nKPX F Aacute -68\nKPX F Acircumflex -68\nKPX F Adieresis -68\nKPX F Ag" "rave -68\nKPX F Aring -68\nKPX F Atilde -68\nKPX F J -33\nKPX F O -24\nKPX F Odi" "eresis -24\nKPX F a -23\nKPX F aacute -23\nKPX F adieresis -23\nKPX F ae -26\nKP" "X F aring -23\nKPX F comma -84\nKPX F e -12\nKPX F eacute -12\nKPX F hyphen 4\nK" "PX F i -15\nKPX F j -17\nKPX F o -21\nKPX F oacute -21\nKPX F odieresis -21\nKPX" " F oe -16\nKPX F oslash -24\nKPX F period -82\nKPX F r -35\nKPX F u -32\nKPX G A" " -17\nKPX G AE -5\nKPX G Aacute -17\nKPX G Acircumflex -17\nKPX G Adieresis -17\n" "KPX G Agrave -17\nKPX G Aring -17\nKPX G Atilde -17\nKPX G T -28\nKPX G V -41\nK" "PX G W -25\nKPX G Y -65\nKPX J A -38\nKPX J AE -29\nKPX J Adieresis -38\nKPX J A" "ring -38\nKPX K C -59\nKPX K G -61\nKPX K O -60\nKPX K OE -51\nKPX K Oacute -60\n" "KPX K Odieresis -60\nKPX K S -45\nKPX K T 5\nKPX K a -17\nKPX K adieresis -17\nK" "PX K ae -17\nKPX K aring -17\nKPX K e -38\nKPX K hyphen -52\nKPX K o -45\nKPX K " "oacute -45\nKPX K odieresis -45\nKPX K u -35\nKPX K udieresis -35\nKPX K y -74\n" "KPX L A 0\nKPX L AE 12\nKPX L Aacute 0\nKPX L Adieresis 0\nKPX L Aring 0\nKPX L " "C -35\nKPX L Ccedilla -36\nKPX L G -40\nKPX L O -39\nKPX L Oacute -39\nKPX L Oci" "rcumflex -39\nKPX L Odieresis -39\nKPX L Ograve -39\nKPX L Otilde -39\nKPX L S -" "14\nKPX L T -104\nKPX L U -35\nKPX L Udieresis -35\nKPX L V -102\nKPX L W -79\nK" "PX L Y -121\nKPX L hyphen -20\nKPX L quotedblright -147\nKPX L quoteright -143\n" "KPX L u -17\nKPX L udieresis -17\nKPX L y -64\nKPX N A -15\nKPX N AE -2\nKPX N A" "acute -15\nKPX N Adieresis -15\nKPX N Aring -15\nKPX N C -1\nKPX N Ccedilla -1\n" "KPX N G -2\nKPX N O -2\nKPX N Oacute -2\nKPX N Odieresis -2\nKPX N a 5\nKPX N aa" "cute 5\nKPX N adieresis 5\nKPX N ae 4\nKPX N aring 5\nKPX N comma 7\nKPX N e 10\n" "KPX N eacute 10\nKPX N o 1\nKPX N oacute 1\nKPX N odieresis 1\nKPX N oslash 2\nK" "PX N period 8\nKPX N u 4\nKPX N udieresis 4\nKPX O A -42\nKPX O AE -33\nKPX O Aa" "cute -42\nKPX O Adieresis -42\nKPX O Aring -42\nKPX O T -32\nKPX O V -40\nKPX O " "W -24\nKPX O X -43\nKPX O Y -65\nKPX Oacute A -42\nKPX Oacute T -32\nKPX Oacute " "V -40\nKPX Oacute W -24\nKPX Oacute Y -65\nKPX Ocircumflex T -32\nKPX Ocircumfle" "x V -40\nKPX Ocircumflex Y -65\nKPX Odieresis A -42\nKPX Odieresis T -32\nKPX Od" "ieresis V -40\nKPX Odieresis W -24\nKPX Odieresis X -43\nKPX Odieresis Y -65\nKP" "X Ograve T -32\nKPX Ograve V -40\nKPX Ograve Y -65\nKPX Oslash A -34\nKPX Otilde" " T -32\nKPX Otilde V -40\nKPX Otilde Y -65\nKPX P A -71\nKPX P AE -62\nKPX P Aac" "ute -71\nKPX P Adieresis -71\nKPX P Aring -71\nKPX P J -52\nKPX P a -14\nKPX P a" "acute -14\nKPX P adieresis -14\nKPX P ae -15\nKPX P aring -14\nKPX P comma -103\n" "KPX P e -13\nKPX P eacute -13\nKPX P hyphen -7\nKPX P o -22\nKPX P oacute -22\nK" "PX P odieresis -22\nKPX P oe -17\nKPX P oslash -26\nKPX P period -101\nKPX R C -" "12\nKPX R Ccedilla -12\nKPX R G -13\nKPX R O -13\nKPX R OE -3\nKPX R Oacute -13\n" "KPX R Odieresis -13\nKPX R T -12\nKPX R U -12\nKPX R Udieresis -12\nKPX R V -38\n" "KPX R W -22\nKPX R Y -50\nKPX R a -4\nKPX R aacute -4\nKPX R adieresis -4\nKPX R" " ae -5\nKPX R aring -4\nKPX R e 0\nKPX R eacute 0\nKPX R hyphen 10\nKPX R o -9\n" "KPX R oacute -9\nKPX R odieresis -9\nKPX R oe -4\nKPX R u -6\nKPX R uacute -6\nK" "PX R udieresis -6\nKPX R y -4\nKPX S A -26\nKPX S AE -14\nKPX S Aacute -26\nKPX " "S Adieresis -26\nKPX S Aring -26\nKPX S T -15\nKPX S V -36\nKPX S W -20\nKPX S Y" " -54\nKPX S t -4\nKPX T A -93\nKPX T AE -85\nKPX T Aacute -93\nKPX T Acircumflex" " -93\nKPX T Adieresis -93\nKPX T Agrave -93\nKPX T Aring -93\nKPX T Atilde -93\n" "KPX T C -29\nKPX T G -30\nKPX T J -95\nKPX T O -30\nKPX T OE -20\nKPX T Oacute -" "30\nKPX T Ocircumflex -30\nKPX T Odieresis -30\nKPX T Ograve -30\nKPX T Oslash -" "36\nKPX T Otilde -30\nKPX T S -7\nKPX T V 9\nKPX T W 15\nKPX T Y 7\nKPX T a -77\n" "KPX T ae -78\nKPX T c -79\nKPX T colon -104\nKPX T comma -75\nKPX T e -72\nKPX T" " g -79\nKPX T guillemotleft -107\nKPX T guilsinglleft -103\nKPX T hyphen -53\nKP" "X T i -9\nKPX T j -11\nKPX T o -81\nKPX T oslash -80\nKPX T period -73\nKPX T r " "-76\nKPX T s -81\nKPX T semicolon -105\nKPX T u -78\nKPX T v -91\nKPX T w -85\nK" "PX T y -89\nKPX U A -40\nKPX U AE -30\nKPX U Aacute -40\nKPX U Acircumflex -40\n" "KPX U Adieresis -40\nKPX U Aring -40\nKPX U Atilde -40\nKPX U comma -17\nKPX U m" " -3\nKPX U n -5\nKPX U p -3\nKPX U period -12\nKPX U r -5\nKPX Uacute A -40\nKPX" " Uacute comma -17\nKPX Uacute m -3\nKPX Uacute n -5\nKPX Uacute p -3\nKPX Uacute" " period -12\nKPX Uacute r -5\nKPX Ucircumflex A -40\nKPX Udieresis A -40\nKPX Ud" "ieresis b -4\nKPX Udieresis comma -17\nKPX Udieresis m -3\nKPX Udieresis n -5\nK" "PX Udieresis p -3\nKPX Udieresis period -12\nKPX Udieresis r -5\nKPX Ugrave A -4" "0\nKPX V A -75\nKPX V AE -65\nKPX V Aacute -75\nKPX V Acircumflex -75\nKPX V Adi" "eresis -75\nKPX V Agrave -75\nKPX V Aring -75\nKPX V Atilde -75\nKPX V C -43\nKP" "X V G -44\nKPX V O -44\nKPX V Oacute -44\nKPX V Ocircumflex -44\nKPX V Odieresis" " -44\nKPX V Ograve -44\nKPX V Oslash -42\nKPX V Otilde -44\nKPX V S -31\nKPX V T" " 12\nKPX V a -51\nKPX V ae -52\nKPX V colon -74\nKPX V comma -76\nKPX V e -46\nK" "PX V g -54\nKPX V guillemotleft -81\nKPX V guilsinglleft -77\nKPX V hyphen -26\n" "KPX V i -13\nKPX V o -56\nKPX V oslash -55\nKPX V period -74\nKPX V r -43\nKPX V" " semicolon -77\nKPX V u -42\nKPX V y -19\nKPX W A -59\nKPX W AE -50\nKPX W Aacut" "e -59\nKPX W Acircumflex -59\nKPX W Adieresis -59\nKPX W Agrave -59\nKPX W Aring" " -59\nKPX W Atilde -59\nKPX W C -28\nKPX W G -29\nKPX W O -29\nKPX W Oacute -29\n" "KPX W Ocircumflex -29\nKPX W Odieresis -29\nKPX W Ograve -29\nKPX W Oslash -27\n" "KPX W Otilde -29\nKPX W S -22\nKPX W T 16\nKPX W a -34\nKPX W ae -34\nKPX W colo" "n -61\nKPX W comma -53\nKPX W e -28\nKPX W g -36\nKPX W guillemotleft -63\nKPX W" " guilsinglleft -59\nKPX W hyphen -9\nKPX W i -9\nKPX W o -38\nKPX W oslash -37\n" "KPX W period -51\nKPX W r -33\nKPX W semicolon -63\nKPX W u -32\nKPX W y -9\nKPX" " X C -39\nKPX X O -40\nKPX X Odieresis -40\nKPX X Q -43\nKPX X a -17\nKPX X e -3" "3\nKPX X hyphen -33\nKPX X o -43\nKPX X u -35\nKPX X y -48\nKPX Y A -91\nKPX Y A" "E -81\nKPX Y Aacute -91\nKPX Y Acircumflex -91\nKPX Y Adieresis -91\nKPX Y Agrav" "e -91\nKPX Y Aring -91\nKPX Y Atilde -91\nKPX Y C -60\nKPX Y G -61\nKPX Y O -61\n" "KPX Y Oacute -61\nKPX Y Ocircumflex -61\nKPX Y Odieresis -61\nKPX Y Ograve -61\n" "KPX Y Oslash -58\nKPX Y Otilde -61\nKPX Y S -39\nKPX Y T 14\nKPX Y a -71\nKPX Y " "ae -71\nKPX Y colon -90\nKPX Y comma -85\nKPX Y e -66\nKPX Y g -73\nKPX Y guille" "motleft -105\nKPX Y guilsinglleft -101\nKPX Y hyphen -55\nKPX Y i -11\nKPX Y o -" "76\nKPX Y oslash -74\nKPX Y p -53\nKPX Y period -84\nKPX Y semicolon -93\nKPX Y " "u -57\nKPX Y v -36\nKPX Z v -21\nKPX Z y -19\nKPX a j -7\nKPX a quoteright -14\n" "KPX a v -23\nKPX a w -10\nKPX a y -24\nKPX aacute v -23\nKPX aacute w -10\nKPX a" "acute y -24\nKPX adieresis v -23\nKPX adieresis w -10\nKPX adieresis y -24\nKPX " "ae v -21\nKPX ae w -7\nKPX ae y -23\nKPX agrave v -23\nKPX agrave w -10\nKPX agr" "ave y -24\nKPX aring v -23\nKPX aring w -10\nKPX aring y -24\nKPX b v -23\nKPX b" " w -9\nKPX b y -25\nKPX c h -9\nKPX c k -5\nKPX comma one -79\nKPX comma quotedb" "lright -39\nKPX comma quoteright -35\nKPX e quoteright -13\nKPX e t -9\nKPX e v " "-22\nKPX e w -9\nKPX e x -25\nKPX e y -25\nKPX eacute v -22\nKPX eacute w -9\nKP" "X eacute y -25\nKPX ecircumflex v -22\nKPX ecircumflex w -9\nKPX ecircumflex y -" "25\nKPX eight four 2\nKPX eight one -32\nKPX eight seven -15\nKPX f a -6\nKPX f " "aacute -6\nKPX f adieresis -6\nKPX f ae -6\nKPX f aring -6\nKPX f e -6\nKPX f ea" "cute -6\nKPX f f 14\nKPX f i -13\nKPX f j -15\nKPX f l -13\nKPX f o -16\nKPX f o" "acute -16\nKPX f odieresis -16\nKPX f oe -11\nKPX f oslash -16\nKPX f quoteright" " 0\nKPX f s -10\nKPX f t 14\nKPX five four -3\nKPX five one -37\nKPX five seven " "-17\nKPX four four 0\nKPX four one -55\nKPX four seven -33\nKPX g a -3\nKPX g ad" "ieresis -3\nKPX g ae -4\nKPX g aring -3\nKPX g e 1\nKPX g eacute 1\nKPX g l -5\n" "KPX g oacute -8\nKPX g odieresis -8\nKPX g r -3\nKPX guillemotright A -56\nKPX g" "uillemotright AE -46\nKPX guillemotright Aacute -56\nKPX guillemotright Adieresi" "s -56\nKPX guillemotright Aring -56\nKPX guillemotright T -115\nKPX guillemotrig" "ht V -84\nKPX guillemotright W -65\nKPX guillemotright Y -117\nKPX guilsinglrigh" "t A -52\nKPX guilsinglright AE -42\nKPX guilsinglright Aacute -52\nKPX guilsingl" "right Adieresis -52\nKPX guilsinglright Aring -52\nKPX guilsinglright T -110\nKP" "X guilsinglright V -79\nKPX guilsinglright W -60\nKPX guilsinglright Y -113\nKPX" " h quoteright -15\nKPX h y -25\nKPX hyphen A -7\nKPX hyphen AE 2\nKPX hyphen Aac" "ute -7\nKPX hyphen Adieresis -7\nKPX hyphen Aring -7\nKPX hyphen T -64\nKPX hyph" "en V -34\nKPX hyphen W -15\nKPX hyphen Y -71\nKPX i T -12\nKPX i j -7\nKPX k a -" "13\nKPX k aacute -13\nKPX k adieresis -13\nKPX k ae -15\nKPX k aring -13\nKPX k " "comma -3\nKPX k e -19\nKPX k eacute -19\nKPX k g -26\nKPX k hyphen -31\nKPX k o " "-28\nKPX k oacute -28\nKPX k odieresis -28\nKPX k period -3\nKPX k s -23\nKPX k " "u -8\nKPX k udieresis -8\nKPX l v -14\nKPX l y -11\nKPX m p -1\nKPX m v -23\nKPX" " m w -9\nKPX m y -23\nKPX n T -87\nKPX n p -2\nKPX n quoteright -15\nKPX n v -24" "\nKPX n w -11\nKPX n y -25\nKPX nine four -6\nKPX nine one -30\nKPX nine seven -" "23\nKPX o T -90\nKPX o quoteright -19\nKPX o t -13\nKPX o v -27\nKPX o w -13\nKP" "X o x -30\nKPX o y -29\nKPX oacute v -27\nKPX oacute w -13\nKPX oacute y -29\nKP" "X ocircumflex t -13\nKPX odieresis t -13\nKPX odieresis v -27\nKPX odieresis w -" "13\nKPX odieresis x -30\nKPX odieresis y -29\nKPX ograve v -27\nKPX ograve w -13" "\nKPX ograve y -29\nKPX one comma -51\nKPX one eight -47\nKPX one five -50\nKPX " "one four -70\nKPX one nine -47\nKPX one one -92\nKPX one period -49\nKPX one sev" "en -72\nKPX one six -48\nKPX one three -53\nKPX one two -56\nKPX one zero -44\nK" "PX p t -10\nKPX p y -25\nKPX period one -80\nKPX period quotedblright -39\nKPX p" "eriod quoteright -35\nKPX q c -3\nKPX q u -3\nKPX quotedblbase A 7\nKPX quotedbl" "base AE 19\nKPX quotedblbase T -79\nKPX quotedblbase V -77\nKPX quotedblbase W -" "54\nKPX quotedblbase Y -96\nKPX quotedblleft A -72\nKPX quotedblleft AE -64\nKPX" " quotedblleft Aacute -72\nKPX quotedblleft Adieresis -72\nKPX quotedblleft Aring" " -72\nKPX quotedblleft T -11\nKPX quotedblleft V 0\nKPX quotedblleft W 9\nKPX qu" "otedblleft Y -15\nKPX quotedblright A -72\nKPX quotedblright AE -64\nKPX quotedb" "lright Aacute -72\nKPX quotedblright Adieresis -72\nKPX quotedblright Aring -72\n" "KPX quotedblright T -7\nKPX quotedblright V 1\nKPX quotedblright W 11\nKPX quote" "dblright Y -14\nKPX quoteleft A -76\nKPX quoteleft AE -69\nKPX quoteleft Aacute " "-76\nKPX quoteleft Adieresis -76\nKPX quoteleft Aring -76\nKPX quoteleft T -15\n" "KPX quoteleft V -4\nKPX quoteleft W 5\nKPX quoteleft Y -20\nKPX quoteright A -80" "\nKPX quoteright AE -72\nKPX quoteright Aacute -80\nKPX quoteright Adieresis -80" "\nKPX quoteright Aring -80\nKPX quoteright comma -53\nKPX quoteright d -30\nKPX " "quoteright o -34\nKPX quoteright period -51\nKPX quoteright r -20\nKPX quoterigh" "t s -27\nKPX quoteright t -11\nKPX quoteright v -11\nKPX quoteright w -4\nKPX qu" "oteright y -9\nKPX r a -1\nKPX r aacute -1\nKPX r acircumflex -1\nKPX r adieresi" "s -1\nKPX r ae -2\nKPX r agrave -1\nKPX r aring -1\nKPX r c -6\nKPX r ccedilla -" "6\nKPX r colon -36\nKPX r comma -64\nKPX r d -5\nKPX r e 2\nKPX r eacute 2\nKPX " "r ecircumflex 2\nKPX r egrave 2\nKPX r f 15\nKPX r g -7\nKPX r h -12\nKPX r hyph" "en -40\nKPX r i -12\nKPX r j -13\nKPX r k -8\nKPX r l -12\nKPX r m -8\nKPX r n -" "10\nKPX r o -7\nKPX r oacute -7\nKPX r ocircumflex -7\nKPX r odieresis -7\nKPX r" " oe -2\nKPX r ograve -7\nKPX r oslash -12\nKPX r p -7\nKPX r period -63\nKPX r q" " -2\nKPX r quoteright 4\nKPX r r -10\nKPX r s -4\nKPX r semicolon -37\nKPX r t 1" "5\nKPX r u -8\nKPX r v 12\nKPX r w 17\nKPX r x 7\nKPX r y 14\nKPX r z 2\nKPX s q" "uoteright -12\nKPX s t -9\nKPX seven colon -71\nKPX seven comma -95\nKPX seven e" "ight -10\nKPX seven five -28\nKPX seven four -70\nKPX seven one -21\nKPX seven p" "eriod -94\nKPX seven seven 2\nKPX seven six -21\nKPX seven three -7\nKPX seven t" "wo -11\nKPX six four -1\nKPX six one -29\nKPX six seven -13\nKPX t S -9\nKPX t a" " -3\nKPX t aacute -3\nKPX t adieresis -3\nKPX t ae -5\nKPX t aring -3\nKPX t col" "on -41\nKPX t e -5\nKPX t eacute -5\nKPX t h -9\nKPX t o -15\nKPX t oacute -15\n" "KPX t odieresis -15\nKPX t quoteright -3\nKPX t semicolon -42\nKPX three four -2" "\nKPX three one -34\nKPX three seven -19\nKPX two four -16\nKPX two one -24\nKPX" " two seven -12\nKPX u quoteright -8\nKPX v a -21\nKPX v aacute -21\nKPX v acircu" "mflex -21\nKPX v adieresis -21\nKPX v ae -21\nKPX v agrave -21\nKPX v aring -21\n" "KPX v atilde -21\nKPX v c -25\nKPX v colon -41\nKPX v comma -57\nKPX v e -18\nKP" "X v eacute -18\nKPX v ecircumflex -18\nKPX v egrave -18\nKPX v g -26\nKPX v hyph" "en -5\nKPX v l -12\nKPX v o -28\nKPX v oacute -28\nKPX v odieresis -28\nKPX v og" "rave -28\nKPX v oslash -28\nKPX v period -55\nKPX v s -25\nKPX v semicolon -43\n" "KPX w a -11\nKPX w aacute -11\nKPX w acircumflex -11\nKPX w adieresis -11\nKPX w" " ae -12\nKPX w agrave -11\nKPX w aring -11\nKPX w atilde -11\nKPX w c -12\nKPX w" " colon -36\nKPX w comma -38\nKPX w e -5\nKPX w eacute -5\nKPX w ecircumflex -5\n" "KPX w egrave -5\nKPX w g -13\nKPX w hyphen 7\nKPX w l -8\nKPX w o -15\nKPX w oac" "ute -15\nKPX w odieresis -15\nKPX w ograve -15\nKPX w oslash -14\nKPX w period -" "36\nKPX w s -15\nKPX w semicolon -38\nKPX x a -22\nKPX x c -27\nKPX x e -20\nKPX" " x eacute -20\nKPX x o -30\nKPX x q -23\nKPX y a -20\nKPX y aacute -20\nKPX y ac" "ircumflex -20\nKPX y adieresis -20\nKPX y ae -20\nKPX y agrave -20\nKPX y aring " "-20\nKPX y atilde -20\nKPX y c -26\nKPX y colon -40\nKPX y comma -58\nKPX y e -1" "9\nKPX y eacute -19\nKPX y ecircumflex -19\nKPX y egrave -19\nKPX y g -27\nKPX y" " hyphen -4\nKPX y l -11\nKPX y o -28\nKPX y oacute -28\nKPX y odieresis -28\nKPX" " y ograve -28\nKPX y oslash -27\nKPX y period -55\nKPX y s -24\nKPX y semicolon " "-43\nKPX zero four -3\nKPX zero one -29\nKPX zero seven -21\nEndKernPairs\nEndKe" "rnData\nEndFontMetrics\n" ; int n019024l_pfb_len = 39013; char* n019024l_pfb = "\x80\x1h\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-BoldItal 1.05\n%%CreationDate: W" "ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme" "nt\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COP" "YING (GNU General Public License) for license conditions.\n% As a special except" "ion, permission is granted to include this font\n% program in a Postscript or PD" "F file that consists of a document that\n% contains text to be displayed or prin" "ted using this font, regardless\n% of the conditions or license applying to the " "document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) re" "adonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See" " the file COPYING (GNU General Public License) for license conditions. As a spec" "ial exception, permission is granted to include this font program in a Postscrip" "t or PDF file that consists of a document that contains text to be displayed or " "printed using this font, regardless of the conditions or license applying to the" " document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by" " (URW)++ Design & Development) readonly def\n/FullName (Nimbus Sans L Bold Itali" "c) readonly def\n/FamilyName (Nimbus Sans L) readonly def\n/Weight (Bold) readon" "ly def\n/ItalicAngle -12.0 def\n/isFixedPitch false def\n/UnderlinePosition -111" " def\n/UnderlineThickness 69 def\nend readonly def\n/FontName /NimbusSanL-BoldIt" "al def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-177 -309 1107 953} readonly " "def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/E" "ncoding StandardEncoding def\n/UniqueID 5020910 def\ncurrentdict end\ncurrentfil" "e eexec\r\x80\x2\xd5\x8f\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3" "[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r" "\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff" "++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93" "\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81" "nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff" "\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>o/\xe1\x84\x83_\xa9\xb8" "\xbaw[\xe9\x42[{'\x83\xc5t\x9a\x80\xcbG\x86\x32\x98\xcc\x95\x11\xc3>\x13\xe1\xb6" "Y\xacx\x95\xf1\xf2\xd6O\xa9\xb8\xbf\x65\xbd;i\xa7\xd2\x1d\x8c\xf7\xce\x10\xe6\xaf" "\x8aTE\xaf{j\xb8vm\xd0\x7/\x11@\xc9\x87\xb\x61\x39\x9d:\xfbr\xa8\xb8\x11uK\xa9\xd9" "\xb4\xb6\\\x66\x46\x1cJk\xaf\x8a\x93\xda\x10\xfb\x44@\xc0%\xf6Q{\xf0\xb4\xaa\xa3" " \xea\xb6\xcb\xad\x8a:\x5\xaa\xb4\x11J4iN\xf8\x61\x93\xa6\xfa\xed$\x8e\x1c\xadS\xb1" "nz3\x91=\x91\x44\xb2\xfc\xa9>\x9cu\xac\xcbp\xdcU\xda\xbb[\x1e\x84\xf0\xbay;\xe4T" "\x17)S\x12\xea\xd0\xe8\xb7{\xae@\xe2He\x81Q\xb2\xe5,T\xe6i\x9fV\xf3#\x19k\x8d\x62" "\x0\xc2\x9a\xb2V\xc6\xc2\xf0?\xdf\xf7\xe4\x81\xc5\x1e\x8c\xad%\xf0Y\xd7\x96\xf7\x8a" "g\x16nqj\"\xf\x63\xdf\xe3\x94\xd8Y\xf9s=\x84\x8b\x1d\xf3iXnc\x83\xea\r\xe1\xe0\xaa" "\x13\xa2s\x9fh\x94\x8a?\xf2\xe6\xf6:H\xb6O1\x90R\x96\xfb>\xe1\x82\x93\x95i\xe0\x33" "\x8c\xab=\xbf\xf4\x36v\xb4V7\xbd\xd9\xa9T\xbdp\r\xfb\xcb\x61\x44\x90\xc5U\x88n5\x92" "\xda\xc0\x80\xf8\x90\x82\x97%#\x9d\x32\x6\x8e\x1f\x81:3\x5\x30\xc9\x2\xeb\x8f<\xe8" "\xa2\x93\x8a\xc2\x35\x92\x80\xdc\xc7RZ\xaa\x7f( \x0\x16\xf6\x8aT\x16\x94\xdb\x9c" ",\x14\x84S\xfe\x35\x3\x61\xad\xdc\xc6\xb7<6\xe0\xe4\xfaH\x8e-3\xe2\xcc\xf9\xc8i\r" "\xd2\x7\x8e\x98\r\x1ch\x18\x41=\x8auf6\xda\xfaH \xd8\x98x\x9f\x62\xccL-6\xc5nH\xa9" "\x82\xae\xc4o\rVYv\xb8i\x17\x89z>\xa6R\xdd\x1b\x3k\x18\x1b\x8e\xa3G\xcdK\xfa\x34" "@FN\x97JK\xbcGsi0\x8a\xc6{\\\xcT\xb0%\x65h\xb7\xb4\xe5\xd4\x5 \xe\xa1\x37\xfe\x99" "\xa7\xca\xd6\x4\xe8\xa8\x3t\x91\x99 \x10\xa6\x9b\xe0\xc3\xf4\xf2Q\xa2\x63\x42i\x2" "\xd9\x9c\xfcQ,\xeeQj\xd3NZ\xa9\x9b\x31:\xacRd\xf0\x5\x8d\xe5\x83\x64nB\x89\xf4\x41" "\xfa\r\xba\x0\x37\xf0J\x85\x7f.\xfd\n\xf8\xe7\xfe\x45RV\xd5so\x1a\xb1\xd9\xb5\x62" "\xe9%\x12\x4\xa9vR\xe2\xf8\x16{}\xce\x38\xf3\xe1\xca\x8\x1d\x8\xdf\xa7\x89vNHP\x16" "\xd6\xe9\xd6\x89\x63k`\xf9\xc\xee\xf1gm\x10\xc8\xad\xd4 \xce+\x9d\xecO\xe7'3\xbf" "\x6\xfc\x65\xafJx0\xcc\xfc\xd6\x64t\xbd\x45\xdf\xe8\x11r\xbd\xe4\x37\x9f\x5\x8cv" "\xfb@\xc3$\x9c\xa8\x0\x5\x61\xd2\xf1\x19\x9bR!\xe8\xa6@O\x90\xfa\x8f\xed\xc0\x84" "\x8f\x1\xf\xd5\x1b\xe1\xcf>\xf6\xfe\xde\xd2\\\x10\xa7\x37@?\xb4\x80;\xd6\x35\xc0" "\\\xa8\xd5\xcf\x9b\xcc\x9c\xf5\x32\x32\x45K\x91\xbd)9\x87n\xd5K\x18\x1d!*6\x95\x31" "\xc4\xf3\x8aV\xf5\x9c\xb4\x84\xa2\xf9*i\xca\xd3\x7f\xee\xb9r\nIVn\xdf\x37\xee\x38" "\x8a\x99\xc2X\xdc\xdeY\x98\xe5\xd8Q\xe1\xc1#\xd7\x4\xb3\x7f\"\xe0jv\x1a\x63\x41\x63" "\xc2\xac\x41[\xcb\x83\x2=#Y\x94Z\xc0\xb3\x1d!\xccN\xd0`\xa0\x34\xff/;`P\x81\xd4h" "\x92\x8e\xb7/\xb5^\xc\x1a\xbe\x9!\xaa\x4\xd2\x15@\xa9'*ST\x87\x63k\x8a\xd3\x98\xa1" "\x9c\xba\x9a+g[{\xd5\xfbV\xfc\xfc\x4k\xae\xb0\xac\xc6\xe6\x83\xe@.)\xb3\x6w\xf5\xcc" "l\xd6\x0\x8x:\xfb+\xdb#DY\x90\x43\x9a\xe1\xf3\x37\xdc\x41\x8a\xbd\xb4\x46$;v\xd4" "(\x0\xe7\x7f\xc5\xf4\x80\xc8\xf3\x3}\x8aWYv\xb5k\x9f\xce\xc9\xf2\xdet$\xdd\x7f\x85" "\x5\x90\xcf\"\xdak\xd5\x62\xea\xc3\xc0\xbfM\x1f\xfc\xbd\xf8\x1f\x1d_\x9fQ\xe3nMO" "\x1\xa4\xb6q\xedy8\xd0K\x12\xc7\x84\xe4\xac\xbc:J\x2\x37L\x82\x38\\\x8=\x7\xaf\x13" ";A\xbfIuI\xfd$\x16\x9a\x87\x15\"nj\xda\xca\x39\x82\xb\x33P\x82\x63\xeb\xdb\xacqx" "\x8d\xaf\x9e\xf8\x41\xb0\xd1\x92\x30\xd8\xafy\x98=Qv\x12\x1d\x9b\x82\xd7\xba\xc7" "\xcf\xbd\x83\x11\x6\x39\xa9\x99\x9a\xaa\x35\x15z\x1d!\xea\xe6\x36\x8a\x8d\x35\x15" "\xfe\x8e\xb0=\xa2\xb3 \x9e\x17\xf2.O%\xb\x1a\"\xd6\xcf\x37\xa7\x86@`\x89\x46\x93" "\x93}\xd4\r\x83\xc3\x16]v\xc2\xf7\x7f\xb5\xbc-\xc8\x4i\xd7\xf3y\xc9\xbf\x31[\xcb" "\xc1\xb4\xc0s\x8c\x33\xb5M\xf0\x8cx?\xeas\x8a\xf1\xea\x81;.\xbb?>\xa4.\xf8\xdb\xc3" "#\x98?\xe3yb\xc8\xd1\xbc\xbf\xf4\xde\x8d\xdc\x95j\x8eK\xc2xW\xa5Q`x\x87\xeeW\x9f" "h\xe4(\xf8\xf\x1f\xb7\x10\xb1\xd8\x8\\\x0\xd5\xfepWn\xa4#\x92\xae\xacx\x95\xfbY+" "p\xd9n\xcdG\x17\xee[1'\x9c\xd2}\xdaR\xe4{\x94\x31\x43!\xc0J\xe8n\xf9\xaa\x17\xce" "#\xb4\xac\xb0\x61\x9b\x98\xf6^\xe7J\x81k\xd9\x63Ku\x99\x36/\xdc\x9b\x7\xe\xe2\x62" "0\x13-+B{\x85\x83\xb9nz{b\xad\xe6\xa5R\x84\xadv\x8e{nJ\xad\xf7y\x95\x96m\xf9\xc\x86" "j\\'\x17* \x2\xc4\x8d\xa7\xb3\x81\x41\xdf?Yj\xbf\xebQ\xfe\x99\xba\xd3\xab=\x6\x9c" "#\xad\xa0\xa8\xcb\xa1,\xb7\x11'@h\x9e\xb6\x1\x66\xb1q\x82\xa8y\x9f\xbb\xd8$\x2\x1b" "\xbf\xcc\x14\x6P\xfe\x7\x64\xb9\xdb'Gd\xc5\xc1\x5\xf0\x18\xc0\xa9\xba\x8b<\xe5S\x91" "\x1d\xe2ir9\xcf\xb5\xd9pG\x97\n\x8f~\x3'\xb7\x16y\xdaz!]\x91\x82|\xb1\x61\x88\x93" "\xb7\x8a\xec\x87\x43\xdf\xfc\xc5\xb4\x0\x4\n[\x8b\x13\x8e{\xd4\n\xf3w\x9f\x9e\xc4" "\xc5\xb2\x64\x10\\\x66\x98\xbf\x8o<=\xf8M\xbaqc\x98\x94\x97?\x86\xdd\xee\x99\xbf" "\x8e\x33O\xb0\xdc\x8f#\x5\xad(R\xf1\xcft+\xbf*\x98i\xf4[mKv\xd2\xe5\x1a\x15\x1c\x14" "\x9e\x1do\xa7\x1f\x8aO\x4\xf0\xeb\xd0ov_\xe\xf6\x80\xa1\xab\xf1t\x81VDQ\x0\n\xe\x4" "\xa8]\x1b\xb2\xfc\x31XkEL\xcf\xde\x1c\x35\x9f\xfe\xd6\xae\xc6\x31\xe1\xf0k\x8eq\xfc" "\x1a\xec\xd7\xd0x\xb3\x94\xa2\\:\xa5\x88\x84\x97\xf4\n\xa5\x7f\x64\x36juMo\xa9\x39" "~1{D\xd9\xaa\x41\x94^\x6\x99K\xa2\xdd\x43}\xe4^D\x8d%\x9d\x12\xb3\x37\xda\xda\x82" "\xa9*\xfb\xd4\xbe\xf#\xfc\xe5\xd0/\xc4\x89\xeb\xe0\xc1S\xc1\x7\xb0\xbcu\x6\x83\x9c" "&\xd7\x8f\x19\xc7\x17\xfb-\xa7JS\xd2\x37^/7i/\xc6w \xbd 2&\xe9+z\xe4l\xfa\x91\xdf" "*\x9al\x6H\xd5!\xeG\xbdS\xb3\xd9m\x9\xe\xa8\xf8\xa1\x9a\xa5P\xa1\xfa\x9f\x8d\xd1" "o\x80\xedP\x8\x15\x96\xc\xa8,f\xf4\x9e\xa0\x17S\x88\xe8\x65\x80\x1aZ\\\xeb\n%\xb" "\x1f^x4\x13\x8a\x16\xe9\xf8^5\xcd\xee\n\x8aS\xb\xfb\xce\xc9\xdd\x15\xe1\x95\xa3\xa9" "l\xa3\xad\x5Z\xe2\xe6 >\x1vfA\x95\x1e\xe5WO]\xa6\x9f\xaa\xd5%|\xde\xed\xd1\x88\x9f" "\xc5\x19\x6\xbb\xf6L\xa6\xbf@\xf0\xea\x37#\xa0\xea\xdb\xfa\xadx\xcf\xef\xf5\xdd\xab" "\x90\xd2\xeb\xfe\xa4u\x87\xdc}@0\xe3 E9v**\x1a\x8f#.\xbd]\x99\x4\x83\xc9\x1b'9\x0" "nx\xe1\xe4\x86/\xf8|%\xadg\xd9)\xce\x8b\xe7\xed\x64\x85\x9\xa4\xa1\x42~\xf7\xea\xd0" "\x8d\xb8\x3\xd0\xc3\xd6\x87\x9\xa7\x9SH\x7fTd\x9f\xa4~q\x19/\x15\x90\xbc\x89\xf3" "IM\xb6\"\x9a\x87S\xce\xac\xc4\x61\x6\xb3\x15\x65\xb4\x99\xbf\xdbnh\x84\xd0\x83\x0" "M\xf3\x37;\x8e?\xf2\xef\xf7\xdb\x37\x31\xd5\x8e\xda\xb6 \x9a\xdb]>2K\xd8 L\x16\x82" ">\xc0l=B\x82\xea\xd2t\xc\xc6\xd8\x8\x5\x18\x94=\xfe#\x91\x1c\xb3\x12\x39\xe9l\x9e" "\xd3\xd4\x9c\xaa,\xeb$F\x11~~a\xb3M\xe4\xfeu\xb8\xba'j\xb2\xd4\x1b\x81*\x11\xddP" "r\x9c\x10\xfc\x19\x9b\xe2|\xd7\x1c\xdf\x37\xa9\xb5tf\xcd\x11\xb5\xa3\xcb\xbd\x98" "\xad\xbe\x9c\x61\x0\x14\x15\xf?\x82\xbf\xee#~\xe9\x9d\xa6\x92\x5J@\x89\x90\xc\x8b" "\xb9\x61\xf5\x7ph\x87\x6.\x84\xf8\xd0\x43\xa9>\x7f(\xda\x45:P\x14\x98\x92-\xf5s\x19" "\xbbR\x10=\xb8\x62J8\xd6\xf9\xad\xe9\x9e=\x89\xae\"_\x95O\x83\x6\xeb_\xe5\xc7>\xdb" "\x9UZ\x13\xe6\xdb\xfe \x1b\x1c\x9fOZ\xad\xc6\x1a\xed\x85\xf5\xed\xe0gY\x8e\x1b\x8d" "\xc4\x88nH\x90\xff\x43\xca\xbc\xce\x4\xe2\xfe\xfb\x42\xf\xc4\x45\x18\x45\x9b\x12" "\xda\x39O\xf3_B\rS\x13Z\x85k\xa0U\"32\x8e\xd1~\xadz\xde\x36=\xa2\x14\x86\xdc=|\xb" "\x9b\xb4\x8d\xbd\xf1]\x8\xa7\x1d\x42\x8b\xc2O\x8f@t\xb9l\x17\x34\xf0\xba\xf1\xa9" "-\xf3\x91\x31iZ\x11\xcck\xf6\xfa\xdc\xac\x39sP\x95\xa3\x1b\xbf<\xed\x4\x96\xf4\xe0" "\xda@\xa1\xf3tx\xd9\xf8\x46\x13\xfIi5\xd1\xe3\xd2\x8d\xfb\x83\x1au\x94\x8ch;\xcf" "\xe4t\x12\x1b\xa5\x33\xb5Zd\xee\xb6\n\x46\x7f}\xdb<\xf5V\xfa\xd6\x8c\x63Ig\x11\x33" "E\"\x16\x95\x66Z\xe0!\xf5Q\xcb\xbf\xeb\x1d=\xc9\x12\x99\x9c\xf8\x61\xf0\x30\x98\x11" ",Ad\x88\xde\xff\x64QaR\x11\x91\xe0\x8f\xe5\x64\xe5.\x88-P\xa9\n\xa1\xe8S\x2\xac\x8e" "\xe5V\x1fjy2-\xf0\x61\x9\x1\x93\xf9\x1d\x9d\x89\x8c*]\x8c\xd5\xa7\x33\x66\x9e\x1d" "\x9f\x45\x9e\xa1\x1\xes\xe1Js\xc3\xf1\xfb\xfc\xf\xd8\xc6\xaa\x82\x36h\xf7\x31\x85" "\xedGar\xf8\xad \xf0\xbc\x2\xa0\xa3\xf6P}\x17\xf\xd5\xb8\xac\xda,:\xbf+>\x92U\x92" "&\xfa\x6{\xba\xe8\x38:\xe0\x8a}\x84\x8e^\xb4\xaa\xf_CG\x1f.\x85*\xaa\xac\x41\xa8" "B$e\xc7\xdf\xf2\x93\x98\xca\xb9\xc9\xb1\xb9\xb1\x41\x1\xa8\xfb\x99\xc0\xf\x61\xe1" "yT\"\xb\x99\xe8\x9e\xf5W\x17\xbf\xbe\x8d\n\xe4\xdeg\xb2\xd5,\xf5M~\xfc`\x12\xc7\xc8" "\x9c\xbp\xf7\x65M\xb9\x92#T\x1\x82p\xfd\x8bx[:z\x1d\xcc\x45\xbd\xct\xce\x10\x2r-" "\xaf:\xe4\xd6\xaf\xad\xfd\x1b\xc2\xd1\x30\x8e\x8e.\x8f\xf8\xba\xf3K\xcd}4\xad\xb8" ",\xfc?{\xfc\x44\xfb\x1e\x11\xe9\xa3\x8b\x8a\xf7gc\x9f]\x15\x9eG{ \x8d\xef\xee\x12" "\xb1\x33\x8JC\xf8\xafH?\x9b\x13\x13\xbc\x42\x92^\xd4\x36\x44\x8\xff\xed}\xab\xc7" "J\xa4T\x8\xf9\xd2xsJXVc\x98\x9\x8f\x8e\xe6\xf2\xce\x80\x38\x9#\x93\x94\xec\x18\x37" "\xa0\xc5>X{\xc8\x7\x19p\xfc\x33\xfe|VYa\xc2\xa0\x10q\xdc\xfb\x43V\xab_/8\xd7\xfW" "\x3\xe7\x64J0\xb0\xe6\x1f\xd1U\x99\x31\xaf\xb2\xd8j\xf6\x19\x64\x7\x8\xc0\xb9\xdf" "\x10\x86\x84Q\x93\xeb\xe4\xae\xe\x43-\xb8\xc7\x97\x61U\xc3\xa0\xdb\xea\x41vI\xf9" "\xf9\xd8\xf9\xa0>\x93ri\x1a\xaeY\xb2yIj\x13\xf0\x1f\xc2\xcdI\xdb\xca\xd8\xbe\x8f" "\xde\x97\xb6_\xd6\x9\xda\x87\xec$\xda\x8f\x9f\x92\xbb\x32\x4\x61\xf6hM\x7\x99w/{" "\xe0\x99%\x3\xa8u\xceJ\x11g\x9a%\x1f\xe0.\xa6\xc5\xff?\n\xde\x1e\xb4^\xd2_\xf4\x99" "\x95\x15\xe1=\xfc\x4\x9cN$\xa0\xe7\x61\xaeM\xad\x97\xebY\xea^\xee\xbej\x81\x13Lk" "s`\x84\x13\xb8\x36\x93\xe5\x65#\xei\x1\x17~4\xe3\xf1\x8f\x1b\xfb\x8c\xec\xf\x15\xb8" "\x1f.\xd5\x1bzF\xd6\x91TxUoFhp\x11(\xedkpr1%DF\x9b\x36>g\x1\xa4\xcc\xfd#T\xaf>\xdc" "7\x95\x46\xd7'\x1e-](\xb7\xc7|\x86\xf2\xbd\x95n\xb0\xa3]\xf6\xb8>H\xb7\xd8\xcf\x1d" "\xb\x9b\xf1\x5\xe\xb\xd6y\xfd\xbd\xad\xc0\xe1\xce[\x15mj\x9d\r\x92\xfe,\xed^\xd2" "\xa6*\x9d\xa9\x41O\xe2\xe6\x7Z\x16\x39\x15\x90\xc1\xa2Uj\xa0T\xe\xfbk\xeb\xda\xa5" "\x1f\x3\xd5\xb6U\xef\xe6\xb\xfc\xe0^dY\x88G\x6\x86\xb3\x9f\xa5\x39\xf\xd9\x6-tn\xc9" "\xc0Y/\x99\\\x63\xe1p\xfd\x12?s\xb4\xe7\x34\x1e\x10\xf7\x37si\x1d\xfa\xba#\xd7\x97" "j\xc2W\xbaVo\xcf\x39\xf6u\xa1\xf8\xbb\xf6Z\x17S\xa2\xe2:\xdem\xb\x92\x5s_\x81J\xe5" "]\xab\xfd\xb3\x8b\xd5\x45\xfe/\xfc\xd5\x1c\xca\x1b?\x18\xeb\xc1rXN\xe1i\xcf\x98}" "N\xa0\x37\xf4\xa4\x45?p\xad\x32\xf4\x97\xc3}\xc0 \x88\xbc\xc1\xf9\xde\x0\xf3\x37" "\xd7M\xdb\xe7\x9d\x61\x1e{r\x82\xb8\x39\x31t\x99\xcfQ\xbdQ\xb0\x99\x4\\\x8f\xd2\x8f" "\xed\xd9\x9d\x81\x10%}\xd0\xb8M\xea\xda\xf9Z-\x1f\xc7\xf7m\xf5\x95?\xd4T\xef\xae" "^\xb8\x88\xea\xfc{M\xad\xa7p\x88\x37\x91\xb4#d8!\x16\xa5\x93\xa4\x45\xbft\xa7\x31" "\xc2\xb\xa3\xf8\x1c[1F\xa3\x10\x95\xcf\x61\x14`\xc5T\xb8\xbZ|\x81l\x1b\xd3hB\x9f" "\xdc\xdc\x16\xa2.\xf6\x11\xadW\xdc\x42\xb6y\x4\xf2\x33,\x83Z\xc0\xadZYa\xdf/\xa6" "\xf0^w|\xf2\x10\x38N\xfc\x65\xb8\x66\xc7|\xcc\xad_\xa2\xcd\x9e\x35\x98\x7f\x9e\xba" "\xbbt\x10>\x13\x93?\x4\xf9\xa2\xdd\x4\x42\x93\x88\r\xb2\x16\xe9\xcaZ7M\xa7i\xc4\x9e" "\xd9\x11\xd3\xf6I\xa7/\xf9{\x1a\xe9y'\x9b\xc1\xe6\r\x4g$\x82\x8f\xa3R!}\x8f}\xe2" "\xe0\xc6\xbby\x96\xcd\xdf\xfb\xb8\xaar2\x96\xe0\x0\x46?~\xe2o.\x8a\xc4\xea\x9a\xd4" "YI\xaf\x98\xfa\xc0\xe1\xc1\xf0\xaf\x10\x64~h\xad\xb4\xcb\x7f\x37-\xd0\xcc\xe\"\xde" "\x16\x9di}\x5Y\xea\x0\xe\xc8mr\xf8\x85\xb6M\xa2\x37w\xdfv-\xcfoE\x94\xf0\x99\xb8" "\xfa\x36g\xb\x10\xf6\xbe\xd0\x3OX\x10\xb7r\xfe\x37Ri\xbd_\x1f\x7\x90\x81\xb3Y&\x4" "\xea\xad\xd9\xc2\xe5\xa8\xc4vAl\x7\xa9\xf3\xa4$\xd5\xe1\x41\xc7\xc\xf3\x43\x18@\xde" "\x12\xfb\xf0|\xf9\x31i\xd4;\xdev\x11\x44\xe0\n\x1c\xa8\xe8\xab\x1fJ+\xac" "q\x7f[\x97\xae\xb\xc5{\xb2\x46\x4\xe\x17\x30\x42\xcb\x34\xb1\x2U\x9N@\x84\x62\x92" "\xa8\x44\x41\x11Z\xfXP\x96+Vp$\xb4+\xc9r\xb8\x1a\xe5'\xe8\x33i4\x83y.M'\xc2 a\x1a" "`O~\x99\x44\xd3\x1b\x84RX\xff\xc\x91\x16\xbb\r\x0\x46\xd2\xb7>L\xee%\xa2IK#\xf4s" "~\x1dL\x88\xfb\x9a#\xb8\xbbJFA=\x17L\xd8\x41\x84\x37n\xb0 &\x6\x35\xefK\xf7\xa1t" "&63\x13qC>\xf9\xa1\x14\xf9\xc7\xa7\x15\xcfMe\xdb\"\xdc\xfb_\xed^\x9b\xd2'^\xdd^B" "\xd3\xd2\x89v\xd7\xf5\x4\x88\x32)\x16\xe\xb3\xdf\xb\x30L+`V\xe4\xc9\xa1\x92\x10\xae" "\xa6\x31\xd3\x3\xf1\xf5\x1\\\xe4\xb3\xfe\xafZm\x89\x88\xd1\xda\xc9\x9\xcf\n\x16o" "\xa0/o\xc/\xcd \xf8\xb5;\x1c$\x1f\x4\xb9\xb0<\xf4\xb3\xb1\xc6X[\xefr!2\xf6,\xbe\x18" "; \xe5\xdd\x14\xbfu\xe7\x1b[np\"\xc6m\xe7\xd7\x19`\xc9\x30!/re\x7\x89\xd0\x1d\x1f" "\xf0\x42\xdc\xb7\x83\x42\x44\x44n\x1aQ\xb3\x15t\xb2\xfa\x8aq\xc5\xd3~\xb3\xc6\xce" "7I\x92\xee\x37<~\xd9\x42\x6\x19\x62V\x88\xcaolX\n\x81\x10\x1\x1f\xb8\x61\x6\xec|" "t\x8a@A\x8c\xa7\xa7\x80\xb7\x9cI\xdf\xad\x86\x91\x43Z$\xcf\xf5/\xe2~'Ai\x1c\xdc\xac" "` +\x1c\x9e|\x12\xb3\xd1\xc0\xf6\xfd\xf6\xfd\x99[U\x83\x1b\x32\xeb\x18\xc6\xfcm>" "\xf9\xaa=)\x18\xe5\x84\xd5|'\x2\xcerk\xf0(\x2p\xa7\x62S\xba\xa0_\x19\xe7\xbfk\xfd" ",\xcb\xef\x43\x9e~\xce\xbc\xf8l\x12\xdd\xe\x85\x85\x12\x89h\x15\xfb\xeb\x16`\x16" "\xc9\xb1(K\xf2n@G\x9e\xbeN\xdd\xb2R*\xd4\x44g&\xe2\r~[r\x7f\x9c\xd1R`q\x12\x83 \xab" ";\x8O\xc0\xee\x46\x87\xc5|jfl&\xfe\x41\x81\x83\x33\x3\x9d\x1e\xf4q\x13\x45#\xfc\xe4" "\x96\xac\xc5\xd3\x4k\xbaI\xf6\x65\x46\xb'\x92\xee\"{\xc6w\xb4\x2\xcfT\xcd\xbc\xc1" "\x95\x9a\x9\xb5\x44\xbc\x1d\xd0\xd3Ye\x94\xf4\x81&J:\x81\xbb\xea\xf4\x87\xb2\xa1" "\x5U\x8e;\xd9\xff\x64\xbe\xcb\x66\xd9\xd4\xe7%\x34\xbc\x62\xac?\x8d\xc5\xa5\x93\xb4" "\xes-9\x86\xbe\xee\x9b\xaf\x32\x1a*\xf2%n\xa0\x95\xf5\xa9\x1e\x96\xfd\xa2M\x87\x65" "\xf6\xaeN\x1f\xb2\xd0J\x1\x1a\xe3?\xa2\x10\r\xf8\xd2\x84\x8e\x2\x9a\xb1\x98\x98\x6" "\x1\xab%\xa0|Ga\xcam\x1e\x14\xf]2\xb8\x86\x8\x87\x9f\xd9\xf5@'\xc1X)cr\xd8\xb9\xf6" " \xfa\xe7W\x1f\x95\x42\xfc\x6\xcb\xc1).\xc3\x87\xba?K7\x13K\xfe\x41\x31O\xa5/\x5" "\xf3\xc\xd6g\xa8\xbf\xfbyDE3#\xac" "\xbe\xaezS\r^\x8\x9a\x1f\xf5\x1c\x1c\x30\x1d\xf5$\x6,\x1f\x8a\x9b\xee\xcdIh\x92\x94" "d\xab\x12\xb0\x1f\xdd\xa3G6\xd7\x38=#Tj$\xc6\xfc\x9av\x8c\xec\xf5\x1c\xe3\xa6\x8d" "\x16\x63\x1\x8aP\xe1+\x9e\x88U\xe3\x65?)\xa7~'\\\x7\xaf\x98VY\x12\x30\xb5l\x9e\xcc" "g\xef+\xc\xa3N\x85\x83\xaa\x61\xb3\xc3\x9fKz\xd4\xa7\x81O\xaa\"\xd4\xa5\x12\xf6M\xdf\xd1\x9f" "\x1c|T\\]nY\xd4}\xe5I\x9d\xf5z\xe4\xa3\xc2\xd0\x88u\x95\xa0\x5l.\xab\x80R\xf7\r\x34" "C\x9\x17\x1c\xbfKZh\xf5\xdfq\xfc`\x9f\xe2\x44\x9e&X\xb7\x41\x43\x99&\xf0+\x1dQ\xad" "\xfeu\xe1\xc6\xb0\xeaVP|=\x9d\xc9\xdd\x97\xd2\x8d\xc5\x93\x11I\x9d\xb2\xa6#\x1f\xf7" "\x7fW\xa1/Xa\xf3W\xe3\x2\x8\xe2l\xa7\xde\xbe\x36\xa8J\x81\x83\xb6\xad\xf7\xdc\x31" "\x92\xc6P\xfc\xd7\xd1\xf8\x12t\xb3\xa2\xe \xe7.\xba\x31\x87\xac\xb1P\xa0\xb4\x33" "\xf1\xc7i\x89\xde\x8eT5`\x9a#U\x1\xeb|\xc5u\xabv;f\xc3p\xb6\xef#\x93-\xb9\xda\x87" "\xcb\xaa\xcf\x85\xd1\xc8\x41&l\x1f+\xbf\x84\xd5\x7\x11\xb3o\xb0\xa2\x88\xc4\xf0O" "\x11\x34\xfe\xd4\x1b\x8.\xcd{\xc5\x98\xe7\x81\x35Ub\x3\xc1\xdc\x97\xd6\x1e\x38\xef" "j\xdc\x61\x32\xe6\xb9\x11/\xce\x17\xacO \xaf\x66\xa4V\xa2\xd1\x38\x2\xfY61\xe2M" "\xf4\x80\x80\xde\xb0\x1bH\x84O\xb0\xe2\x18\xe9\x14\x37\x42\xbf\xf5\x1f\\\xe8\xd4" "\x82L\x8d\x46\xc0?\xe1,I4\x3\\\xca\xc9\xa2\xca\xa2\x83\x44?n\x97\xday\x96\x38\x5" "c\xbfz\xc9\xbb\xc3\xa5\x82\xd7\xa2\x62Y\xbc\xff\x3\x97j*\xdc\xf7\x83\x8\xa9\xbf\xc9" "\x8\xa2\xba\xc4\xb3\xf6v]\x91\xc5\x64\xb0\xa0\xf8W\xab\xfa\xca\xe3$p[\xe0u\x1b\x1d" "~\xf\x92\x1b\xd8-\xdf\xa7\x9d\x31\xf0\xb4Ph/\xf7&\xd8\"\xe0\xd1\x9f\x0\r\xf9\x1e" "\xae\xd9W\xe9h\xeal\xc4\xfd_\xc0%\xad\x33\x1fK\xf9m\"P^\xc7\xc1\xde\xb8|\x10\x95" "\xdc#\x99\xff\x83\x9d\x1d]c$\x3\x35\x45\xb0vg\xdf\x36\x36\xc4\xf5\xc2!\xa3\x66\x30" "G\xcf\x4\x93\xb3\xab\xab\xb9\x11\x18\x96[\x87\xf7\x17>\x8b\xc4\x90\x82\x1c\xc3\xe5" "E\xd8\x1\xd1\x46\xe\x11\x89\xd7\xba\xcf\x8cj^\x3\x8d\xc1\xf1\x3\xf6\xfd\xf3\xd9\r" "#+V\n\xd1&\xc0\xd2\xf0Wd\xe6\r\xa1(/G\xab\xc9\x89\xd5+\x96\xcf\xd9\xf5*\xbe\n\x37" "Z\xc4s\xc0\x45+r\xfb\xda\x64\xey\xa9\xf7\xb0?>\xe5()_=A\xbf\xd9\x36\xcf\x9\xc4\x31" "\x12\x96\x11\xd2\x98\xec\xe4\xac\x98K7\x19 \xc1\",@\x18\x33\x46\xa8\xbc\x18\xfd\x46" "\xce\xca\xf9\xb2\x82\xd3H\\\xa7X\"\xb8i6\xd3\xdd\xba\x3\x1e\x45\xbe\xda\x8a\x92\x36" "\x18\xabi;\x8b\xb0\x32\xc3\x91\xa0\x18\x5\xc7v\xde\xdc\xc0\xc1Iv\n\x80\x1a/\xcf\x94" ".{\xb9\x8e\xbd)\x81UN\x9d\xd3\xbf\xc7\x61IQ\xc7\xbc\xf6\x44\xe1\x66]\x8c\x44\x32" "\xaf\xfc\xbf\xb7\xa2(\xa5\x84\x8e\x3\x85\x88~\n\x0y\\7\x11\xf3\xcb !\xaf\xf1\xa8" "\xab\xf2\xc8\xe1\xc8\x83\x1d\xf6\x31\xf\x83\xeb\x8b\xe0\xb6\xed\x9ap\xac\x8a\x88" "\x10y\x1d\x86\x13\xa8K\x11\xdf\x1bX\xc6\x41\xd6\x5\x1eG\xeb\xe7\xe0\x97\"<\x19\xb2" "5\x11\xf9\xc6\x37\xe6\x80\xf5=\xbf\x91@~C\x8f(\xbdM'\xfWY\x15\xb0v~28\xbe\xf4T!3" "\xe1\x65\x62\x18 q\xdb\xab\xe9.\xf7q\xbb\xf8\xe1\x8d\xdfU\xc4-$M\x9d\xbc\xaa\xe0" "\xd9\x11\x8f\x1e\xa0\xd6O;\xf0,b\xdb\x46\xfd\xad\x36i [g\xfd\x9f\x85\x98\xadOu\x11" "\xe6\x9f\x97\xe7\xd9w]\xddX}\xdc\x8c\xf2W#\xd6h\x1\xbd\xd8>$\xcf\x85\\\x8e\x8a\xab" "L\xaa,\xed\xb3J\x7f\xe6'\xfb\x43\xe4\x38\x7,\x9b\xeZ\xdb\x90ZRn\xfe\xef\xd4N\xaf" "(p\x8e\xf6\x90)\xeaj\x15l\xb2\x10=\xb4\x94\x8dS\xce\x37 -\x96\x86\xfdq6S\xd8\x39" "^\x92\xa1\xdc;X\xa4\xd8\xf0\x1c\xb9\x7f\xa4\xac\xce\x1d\xb8\x88\xd4RrQA\xffz\xe6" "}\x7\xbf\xd4^\x99\x31k\x2X\xc2\xc\xe9\xc9\xd4\xa0\x17\x9b\xdd\xe6RM\x9d\x91\x80\x18" "\xd6\xb7\x10\xe5\x6\x41\x38\x35\xf7\x32\xaeP87\x18\xc2\xe0!\xf9x\xbd\x64\x92\xf7\xba" "a \xf8jBR\x14\xcc\x14\x64\x61Rf\xf8\x82`\x98\xe9P\xe0\x9\xd9\x18,\x2\x8a\xeb\x42" "mR\"E\xab\x9\xe8<\xd1\x66\xf2\x44^\x2\xb\xa8\xb1\x0\x94\x7f\xd9\xc0\xaa\x9\xe\x95" "P\xc7\x1\xc8\xac\xf7\x44\x11\x91k\x90\x917E\x80`Q\x81\xae.\xd9\x3\xe7\xb5Gi\xb3" "\xc3\xde\xad\xdc\xa8l\x11?#\x9b?\xdd\xb4mcC\xfb\xea\xf4\x41\x35\xf7\xef^\xa2\x17" "\x90-;\xe6\xe4;\xaa+\x8f\xfd\x8e\xa0\x65r\x9b\xa4\x62\xfd\x19\x65\xf8\xe5\xbcY\x9d" "aF\x10\xc3\x43\xccJ=1\\\xa0\x2\x4\x1e\xf8\x9\xa3x\x9c\x35\xf7\xe\xd6\xbe\xf7\x1e" "\xea\xed\xc8\xfa\x92\xed\xe9\x6\xc3\xdf\x1fO\x9e\x93g9\xd8\xf3\xbe\xcd\x44\x1a^\x7f" "I\xb\xbdz\x6;d\xc1\xea\x82\xbd\x44\x45\xa7\xd2)\xc2\xdb\x61\xbdoP\xd6\xc3\xe3\xf0" "(\\\x15\xd5\xa4\x80\xa1\xc9\xb2\x31v.s\xfe\xe5t\xa8\xb3\xc5\xbb\xec\x36\xb2\xbd\x38" "\xc8:)\\E\x1a\xb1#\xbeW\x86\x32\x80\x82\x4\xe2\xc9\x8c\x9d\x87\xdclo\x91)c\xc9\xb2" "XL\xe1I\xd2\x87'\x1a\x91\xf4\xb\xe4\xbb\x3(\x1b\x19X.\x92{\xc\xb8\x1a\x4w\xec\xa4" "\x83\x8a\xa3\x10^\xee\x92W\xac\x7\x63\xce\x1c\xeb\x30\xfd\xae\x1cIk]\xe|\x9d\x6\xb3" "\x7\x16\x13V\xc2\x43\xf8\xb2J\xc0\x16\xb8\xe6\x5+t\xa4\x18\x66\x86\x64\x65\xad\x9d" "\xfd-\xd6\x31\xb0\xbw\xc0}\xcc\x63\xb8\xa8\xcfv\x94uP.\xa2\xab\xc4\xb\x64\xa4\x30" "\xc0\xaau\xc1\x8bQ\x19\x85,\x8e\xa2t)\xf\xce\xe7\xeZH\xb7N7; \xf8\x91\x36\x38\xa8" "mH\xea\xe5\x62\xcfYq\xe1\xaa\x1dsy_\xad\xea\x9\x84q\xfa\x36\x62\x63\x32\x8\x9d\x85" "\xf3\xf3\x8aW\xfd\xe8\x6\x0\x41<\xb4\xb2\xc0\x39\x81\x36^~\xff>\x95Q\xec>`\x95]\x1f" "\xd5\x61\x18\x33\xd4}\\\xc\xf5\xcaSl\xb3)'\xa3o\xf5\xbb\x92\xa9k\x14j\xdf\xbe\xa8" "\xf5j+\xcaH\xa4\xc0\x8b\"\x99\x9e\xd5\xb3s\xe1g\x98r\x84\xff\xf7\x95\x65\x61*Q\xf5" "P\xb6V\x9d\x6\xd3\x9a\x61\xb6y\xed'\x80t\xe\x94}]\x19\xc1\xef'V\xb0\x44\x65\x9b\xaf" "My\x1e\xc7\xf9>\x85\x8dt\x9f\x9a-\x92\x1\x46\x36\x80\xc1\xce\x8e\x61y\x0#\x8bN\xdc" "f\x9b\xe3\x98\x84\x95~Z\xe3\x34\x39\xc6\x84\x18\r\xea\xcb\xf5\"\xe4\x85J'Lt{k\xb6" ">\xc2\xa1\x7f\xc7z$\xd5\xfc\x81\xe9\xb9G)m\xa1[`d\xe0\x80W\xeb\xbc\x84\x18\xb5\xff" "\xdc\x93\xcd\xe1y\xe6\x38\x16\x8f\xd9Z\xb9\xde;\xa8I\xb9\xab+\xdd.\x15\x82\xbbj'" "\x12*\x8b\xa4\xd8\x1a\xe3\xd3\xf9mt\xb0\xfc\xd1\xf5\x41\x2\x13v\xb7\xf3&V\x1a\xb5" "\xc3\xf5\xe3\x64\x85\xb5\x0\xdf>\xdc\x91\xf\xcf\x36Te\xc2s\x1e\x42\xbd\xcd\xbd\xbd" "\xe2\xbc\xaek\xe6\x41\xb2\x1e\xeI\xa9~\xa1\n\x6~\x1d\xe1\xa9ia1\xea\xf5i\xbb\xab" "\xf1\x36r\x84\x7f-\xc~\xd9X\xe1\xc8,r2\xec\x8\x9a\x82\xe9_\xf4\xe3\x36\xfb\xbd-S" "\x3\xa6\xd3\x35[\xbd\x85\xd6ma`\xc3\xb2\x44\x82\xbe\xf8\xfb\xeb\xf2{a\x7f\x98\x87" "-\x15\x88\x9/6\x91\xd9\xf9\xa8\"?{\xaa\xbf\xc9Y\x2\xb\xb2_\xeb\xce\x1c\x41\xa7\x87" "\x8d\x8a\x38\r?\xcc\xe5\x90\xd3)\xacV+\x88\x99\x87\xc2\x8a\xf2\x18\xd0\x96\xfc.\xe4" "\x1\x1f\xee\xeb\xa6\x30\x35\x39[w1J\xfb\xc0\x92\x1d\x9d\xa7\x90\xda\xb3>z\x1d\xaf" "}\xd4\x94j,0\xd6\x34\xf0\x9d(\x5r,\x4\xf1\x9a;9\x4T\xe9\xc4V\xf8\x34\x9c$\x94\x64" "\xd3\xe2.\x18\xcf\xcf\x90/\xa9\n\xd8\xb4\xb7\xb2\x92\xb8\xba \xbd\x15\xa1\xb5\xe6" "e-j\xe1^MJ\xa2L\x0\xbe\x8c\x9e\xde\xcf*P^?P\x88\x32\x97\xd8M\x11\x1c\x88\xdb\xc2" "Rs\x93\xe4\xd7\xf5\xafR\x1ck+\xf4i\x14O-\xd1\xf6\xe0]\xb4\x4\x0\xe2]p\xa1\x65\xc4" "\x1c\x95l\x90\xd7=\x1a\x83\xc0S\x8d\xf2\xf8Z\x9c\xa5\xa7\x86\xa8\x12\x16\x2\xcd\x9e" "\x1cT\x4\xb\xb8{\xbb~\xcak\x99/\x83\r\x83\xda\xdb\xc2\xd9\x1c\xe0\xb6\x46$\xc6\xc7" "u$\xca:\xe6\x13;vW\xc5\x12\x8cT\x1b\xf0\xbb\x97\xb1\x3\x1b\xda\x0\x1y\x2x\x83vN\xc5" "\xc6\x92\xf0\x44~^\xde\x18\xf8U:}\x7f\xc8\xdd\x95\xb8\xfau\x9c\xfc\x35\x90 \x9a\xac" "F\xdfM\xe9\x82y\xed\x8d}\xec\x9e\x43\xf0\xc0\x18\x98\xbf\xe4\x7f\xa6\xe\xf3\xb8\x8c" "\xd9K\x16\xbd\x5\xfd\r\x9b\x42\x42\x6s\xf3q\xc6\xf5\x85\xb6!\xfc\x39\xf6\xf\xab\x42" "\xb1\x1b\xf7MYj\xf4\x34\x8amC\xc6v\xf\xae\xd5\xf\xc8\xc9\xb3\xb3\xf5\xe8\xa4\xf2" "\x1b\x86\xa8\xb6j\xe5|\xd4J\x0\xa2\xf1\xb7z\xbb\x42\\T-\xfc\x8b\xd4\xebH\xb3\x35" "5\xe0>N\\\xa5\xf0%\x41\x62_K\xcf\x80\xcf\xab\xdb{\x87\x9a\x5Y\xc8\xd8\xaa\x9c\xe2" "\xea\x0\xd5\x19\xf2UJ\xc5\xa9\x87\xe2\x81+\x8c\xa4\x2\x82\xb2\xe6\xbex-\xc5\xee\xf9" "F\x89v\x82\xb3\xc9\xec\x9d\x80M6\xd4k\x16n\x1f&\rd\xa8\x94\xaaiW\xa5\xd7\x1c\x85" "u\xc0\x8d\xac\xe0\x38+(\x12\xba\x94\x1c\x14\xaa \x99\x88>R\xde\x8bv\xe7\xed\xaa\x16" "\x8aSc\x1d\x89\x8\x82\x83\x65\x14\xf5\x97\x14!\xbb\x66\x89\xc5+\x1\x8e\x46\xeb\xe6" "\xc4|\xda\xe3@\x9d$\x2tF\xb0H\x1e\xf3H\xa1\x9\xe8;A\x10\x64\xa1Pf\x1b\xf7sd\x8d;" "\x97\r,\xb8\x8\x46\xfc\x93\x1e\x96U\x94\xe0\x36O\x1d\x43\x17\xff\x65\xa5\\\xa2\xce" "5q\x1b\x8c\x15\xeb\xb9\xa3\xb5\xb6\xcand\x90\x44\xcf\xd4\x96\x33\xd6h\xd7\xf6\x8e" "\xc1VSp8HS\xc2\x99+\xea\x36hX\xbb\xa9\xef\x7\x9c\xf6\xe4\x66\x45//\x82z8\xea\x31" "%\x6\xe8N\xcc%\x84\xff\xf4g\xae\x15\x87K|BNL\xfb\x8a\xdb\xd1\xe3\xf9\xaeJ\x10\x1d" "\x1c\xe2#U\x89\x19-\xb9>\xbc\xe5\xd8\xe8\xeb\x10\x8cRu\xc\xcf\x92\x94\xf8\xea\x90" "\x91\xa1n\x9a\x7P\xaf\x38\x36\n\xcb\xdaK\x8f\xd3\xe\xbf\xd8\x19\xe_>\xe8\xcbk\x15" "\xb2\xf5\x30\xd7\x83\x6\xbb\n\x10/ 7\xfb\x45\n\xba\xa9\xf;\xf0\x2.fUy\xca\x99\xd0" "\x1a\x14\x1a\x84!<0\xfc\xe2\xd9\xb0\xf8\xfe\xc5UmwrX\xa7\xbc!C\x9e\n\xdc)oY\xfch" "\x9c\xbasij\xd0\xecu\x1f\xda'\xf3zA\xbe\x3h\x90\x8f\n@\xcf\x39\xdb\x91\xdd\xc2\xf1" "\x8dg\xbf\xed.Eb\xec\xe1&\xf\x66\x99\xd9\x45\xa6\xe2RCX\x95\x8e\xf8\xe3\x81\xa4\x45" "\x85x\xdb\x1dW5\x98\x0\xc2\x18LyO\r\xdd\xa4\x8d\x9a\xf4K\xf4\xc0\xe1\xc0\xd2l\x11" "@\x12\x96\x9bV\xe1mD\xb\x32\x61\x43\x95;\x7f\xe5v\x82\x16\xd5\xa4\xddYvD\xceVth7" "\\\xf1Terw\xb\xba\xcc\xe%\xb7\x42r\x88\n\x91\xac\xc7\xc9\xb4\xb9\x85\xc1t>\xa5\xd8" "\xf6\x8f\xe3\x0\x36>(\xc8\xab\x16\xdc\xc7/W\xf8\xc1\x64m\xa3H\xc\x85{~/\xe2j\x2>" "\xcb\x5\x1\xdf\xbc]\x80\xe8/\xb7\xb0N_\xfb\xcc\xad\xa7\x9fn\x81;\xf2\xe9\xb0\xa8" "a9\xac\x1aw\xa5\xa2-7F\xbd\xdc\x39\xf1\xae\x4RMy\xc6\xf9\x90\x63\xd8\x43\x2\xc5\xb8" "E\x10\x8a\xc7^\xd6$)rI\xed\xd9^ \xdf\xe\xf1\x83\xc5\xf1\xc4\xa8?\xba\x2,\xca\x31" "\x81\xf2\x8a\xae\xda\xa8Wx_t\x6\xa4\x65\x9d\xe5\xaf-]\x18RtQY\x7}\x3R\x18\xe3\xef" "Y\x1\xdc^\xef\x33\xa1\x62\xbd\xbdM\x90\xf1\xbc%\x9e\xf6\xf\xbe\x11q\xdd\x9c\xa9\x91" "\x82\xe5\x9\xccq\x9b\xf6R\x98\xa8\xeb\x41\x81\xf1\x64\x61HQ\x1e\x9\xf8\xe2\x1e\xf9" "\x7\x89\xb\xc4\xbf\xaf\x9a}ea\x81\xea\xfc\xdb\xe9\x0\x15\x9\xc1\xffiy\xee\x90\x10" "p\xa0$\xd6\x98\xd5\x19i\x12\xee\xc2v\xe3\xa5\x11sP\xe8\x8\x6r-\x98}\x19\xf7\xc5\xc7" "\xf1\xcc\x13\xed\xc5w\xed\x3\xd6\x30(\xc2\x9\x1c\x86\xdb\xca\x8bS\xf3\xe0\xb6q\x9" "\x84\x93=g\xa6\xe0\xd7p\xa1\xb8\xdaIM\xcc\xbf\xdf\xc1\xc9\x8e\xe6\x86\xb4\xac><\xbf" "\xf1jV\x9c\xc2\x35M{r\\Q\x1fkO\xf5\xeep\\\xb8\xe8\xe5\x8d_\xbf\x8c\xb9J\xc\x80\x7f" "K\xa9\x8e\x37\x11\xf3\x8ek\x8e\x3\x15\xf5#k\xe4\xf4\x45\xb2/<\xef\x9bV\x96\xf1\x9" "\xcbw\xew\xed\xfa\x30\xce\xb4\x16\xfb\x30)\xad\xcf\xe5\xc2\xc5\xcb-K\xdaN\xfcu\xcb" "i\xb8\x97I<5 \x87\x1c\x10\xa7\x34\xa3X\xeeqS3\x96\xac\xde\xe7h/\xac\xb6\x1b\x1b\x43" "\x9\xbe\x34\x84\x8f\xea\x0\x15\xcc\xdb\xc3\x7\xca\xe\xb2,\x91\xab\xce*w\x88\xf4O" "\xe2\x17\x5`SP\x7\xcd\x95\x9\xa0\xb\xd8\xc\n\x81\xce\xd0\xc6\xe2\x88\xe9\xc6mx\x3" "z\xb1\xd6\x10\x12\xcf\x98\xd9v\x80\x33\xc4\xdf\x64\xbf\x19\x16\x1\x99\xee\x85.8`" "\\\x1f\x91\x31'~\x83=\x19\x30>\xd8\xbd\xd9\x42\xd5#$\xe5|Aq\xc1\xcb\xcfV}\xe3\xbb" "\xe4\xcf\x14\xafVd\xbc\xb5\xa7\x16\x63\xb8\x30\xa2\xb0\xa2#LG\x86\x44\xd8\xc4\x8a" "\x8fZ\xbd\x86\xcb\xf\x8c\xde\xed\x11\x80x\x8e#\x15Y\xdb\xd1\xfbq>\xe6\x33\xa7\x34" "\xe7\xb\x85\x8d\x35\x7f\x18VDL#\xf0{\x4\x8a=\xd3\xfb\x19\x15^,\x97\x19.\x8e\x1f\n" "\xe8\xacno*\xdc\xf1\xd8g2E\xd3\xb7\x93\x87\xf2\x65+*\x8e\x1f\xf3\x34\xc3\"\x10/\x98" "\xdd+\"\xcf\xfb\xd7\xdex\\\xe1u\xb9!i\x7f\x9d\xe0\x61'\x19\x0\xf3(_\\\xa3[Gn\xc5" "Wyu\xe0\x45\x9f\xca\xfcH\x8\xfd\x36\xd3\xce\x81SN\xe4\x37\xe8\xccp\x14\x6\x38\xac" "\xfa\x46+\xb[A\xc7\xa4\"\xb\x4\xd0\x2\xad\x66\x4\xae\xfb\xa2\x9\x66\x89l\x90\xbb" "<\xe4\xe1\xdc>\")\xa7\xe0\x30\x92&\x9\xe0\x39z\xb0\xc3\xb9\x1\x84\x90\xab\xbaKi\x1" "\x17-\xcemJ\xfe<\x8e\xe7\xeb\x63\xc1\r\xaa\x80\xc\xfah\x1d\x31y\x81Z\xcb``8pX7#\xd3" "\x96&\xf1\x5\xde\x63Vi\xf2<1$\x5\xb0X\xac\x10l\xc4\xd0\xbe\xe9|\xe1]\xf7\xf0\xd9" "\x7fq\xa7\x19\xf2\xaezS\xff\xf7\xe5\xb\xba\xe6\xe3\xff\x15\xa0\xcf'\x8a\x8dOshE\xe3" "!\x91\x61S\xa4\xc9\xb1\x80\x94\x66\xbf\"@\xe2\xa7\x1c\xc5>\x96\xe0\xaf\xe8\x35z~" "\xe7\xe7[;\xe4\x38\x9c\x31\xf2\xbd\x5M7\x1c\x9f\x9b}q\x11\xba|\xa0\xea\x1c\x34\xe7" "\xe5\xd1#\xbf\x65?&kb\\ra\x2\x62\xb9\r\x8a\x90\x43\xa1\x19\xeb\xa1\x65,*\xc\xef\xe8" "\xc3\xe8\xe6\x64,\x9f \x9b\xd6\x97\x9c\xf4|\x6\x89S\xcd\x5T\xe0\x42\xa5\xf7\xbb\xa8" "\xabJQ\xcV\x7f\x65\x35\xbd\x37?\xbbk\xd8\xdc%,6\xf1\xe\xcc+\xcc\x35\x41\"}\xf8\xf6" "\xf4\x8eM7\x1b\xd4\x1e\xc0\xe7\x61\x6\x8c-\xa4\xb4\x91Sl\xef\x9d\x61\x9e\x17\x39" "\xcbt_\xb5\xc7\xe7\xb5\x8c\x9f\x90\xc9$\xce\x3\x80W\xec%|\xbe\x33\x66 f\x84\xd3\xdc" "${\xce\x1a\xb4\x31\x1a\x9a_\x9c\xdbr]\xed.\xe6\x62\x1e\n\xf8R.|\x86\x9f\xf\xec\x14" "\xaf\xaeL^>\xcd\x95^G\xfb-X\xd5mW\xe8ms.\x8c\xa6\xcd\x8b?\xb7|\xb2\x9c\xbd(g\x16" "*\x1fUd\x11v\x16\xf9'\xab:L\xa5#\xe2\xc0\x9c\xe3OV\x1c\xf\x16\xf1\xb4\xe^\xbb\x1a" "?\xcb\x1f\xc8\xfd\x43Z\xd5\xb1L\x80\x38(\xf5\xa8\xba\xc8'\xc6\x10\x87\"\xee\x85\xe5" "K\xda\xd7\xa6\xdf\x94\xe#\xfd\xf8\x8cR\xec\x84\xc8\x8cN\xcbG\x8d\xd1(\x13]\xf7\x46" "\x99\x43\x41\xa3~\xc5\xfb\x30\xc6\x8d\xfa\xa3\xd4\xcb^\x17\x32t\xf4\xc1wd\xac=U\xe5" "\xcd\x43\x45\x1c\x0\xe0\xa6\x80\x9d{\x7\x14P=\xc1\xaf\x1f\xff\x30\x7.\xce\x43\xea" "\x87l\xc5\xf\xa0\xc3q~a\x9fh\xfb\x3\xe6\xb8\x84\xc6\x8a\xfe\x30\xa6\x5\x19\x13\xc3" "\xf2X\xc9\x94\xc4\xb9m@C\xe6NL\x8\x65:\xbcO&\xee\x89\xe4\xf3\x1c<\xb6\x62\x39\x33" "i\x9e\x9cl\xc0\x82y)\xf4\xe5\xbe\"@\xa9\x13<\xa8;Z\xba\xe1l\xa7\xb8\xeeQ\xfb\x92" "\x84~'\xb3\x11\xc9\xf0\xcb\x9a&\xa9:F\\\x10#=\x7|#q\x8e:\x89\x43\x91\x83\xc7\x11" "\x96\xec\xbf\xe6\x7run?\x98\xcf\xe9\xa1w\x1e\x30\x98\x84y\x2\xcb\xc6G\xe\xd7\xba" "\x91\x7f\xdd\x1e\x1``|\xc3Y\x86\xbe\xb8\x9cQ\x15\xca]\\$\xd3\xb2^<\x83Otb\x8b\xf6" "\xaeZ\xc1sZ#\x8\xbfw\xa3\xfb\xad\xd4\x83\xcb\x82\x82%\xd6!fY\xa8\xaa=\x9c\xcdi,\x12" "\xaf\xf1S\xc7\n\xaa\x39J\x0\xd2\xe2\xfc}~\x10\xba\x8fT%\xab\xc7\xa1\x46\x91\x92\xfc" "-\xffl\xf\x10\x7\x41\x10\xbf\x19\xa2_\xb6\xd5zt\x94~\x1e%\xc9\x8e\x92\x97\x93\x41" "X\x9fjNd\xe9\xa5\xb1\xcf\xe7\x81\xcf\xfeI\xb3`\xbd\xc5\xfd\x87\x42\x5 \xcf\xee\x45" ":\x8es]3\x8b:\xc3?b\xde\x8e\x12\x91\x88i\x7-\xe1\x35\xee\xc2Qh)\xbe\xd5\xcGh\x1e" "9\x98pw\xc7\x1a\x38\\:w\xde\xe0\xe6X\x1c\xc4+a\xda\x64N\xda\x8e\xb6\xb5\x88>2\x85" "\xe.\x11\x2\x9a\xc\x37\xfc\x46\x34\xc6\x9c\x9\xf6\xb2\xa5\xfd\xa8\x19\xb3\x10\x16" "\xfa\r\x9c\x80-J{|\x92\xe1\xb0^}\xab\x44\x41\x61\x10\x34\xe7+\xe\xdd\xe3\xfbO\x9c" "\xd6\r\xe0\xb4\x64\xec\xc5|T\xeJ\xa4\xeb\xaa\xc9v`\\MT\x98\xad\xb8\x83\xe2s\xb0x" "\x5\x33\xfaph6W\xe3*^\xb6\x1f\xc#+\x3<\x6\xcd\x1c\x9c\xb9\xea\xed\x9a\x86\x8f\x41" "\x87\x80\xaeM\x7K$5r\xb5\xa5y\xec\x88\xe8\xb8\xb3PY\xfb|Q\x17\xa9\x46\x1c\x92\xde" "q\xd4OX\x8\xfg(*\xb2\xf5\x11\xcc\xf6\xd5\x8eU\xa9\x1a\x13t66\x8b\x5\x30\xda<@\x1a" "W\xe1r\x1\xdb|\xb3\x8f.\xd4V\xf7:r\x4\x8f\xd3S\xb7\xae\xc9R\x9b\x98:\xd6\xcd\xe3" "\xaax\xf7\x90\xc7K^\xd4\x63\xb7\xc8mh\x9c,\xb4\xea\xa7\x35\x95\xe5\xef\x14\x8cq\xbd" "Y\x18\x37\xf4\nIH\xcf\x38\xa4^\xa2\x43\x46\xd0\xcd\xdaR\xc4m\xd0\nlR-:3Pu`\xfe\xc3" "\xe9\x31#l_;/\xa2q\xbe\xa8\x0\x89\x6\xed\xa2\x87\x1f\x91\x9e\xeb+:\x8d\x9e\xd3\x93" "\xcf\x30~@\"\xbf\xfb\xaa\x2G\xc5\xee#<\x98|+\xb7\x90qc\xbe\x12\x43\x99\xd3\x8b\x97" "\xc6\x1d\xad\x97\xb9\xfa\xb8K\x93 \xab\xb9\x96\x9b\xfa\x65\x9d\x8a\xd9O\x1b\xf7\xe" ".\xf\xdf\x33\xb8o\xc4\xd0to\xf9\xe1\x12x\x1dS0\x9a{?\x95l#\x1dZ\xd7+\xd4\x89}\x90" "7\xbc\x9c\x2\xb4\x13\xd1|ko\x88\xcawhB\xc2\x3\x7f\x65\xd9?\xa0\x92k>\xc\x84\xdf\xe8" "\xa9>\x81\xde\x63\xb9\r\xd0'\x17\x44\x36\x83 y\x1\x8c\xa7M^\xee\xbe\x9en\xe4\xe2" "|\x17O<^O]\xd2\xce \n\x1d\x43\x80`#\x95\x11\x9\xcf\x14\xed\x13\x92@+7\x88\x97\xa5" "og\x14x\x10\xf4\xcb\xe6\x1d\x32\x5\xd2q\xfc\x6\r\x9aU\x8a\x46\x96\x5\xe5pa\\\xe5" "\xa6\x62\x9a\x38\xf6\x36\xcc\x63\xeaYL\xdb\xb5\x9aN8\x10Rf\x91@\xe1\x19\x5\xf6v\x95" "\xaf+<\xe0{\x84\x15W\x2\xa7\x84t|[\x93x\xf6\xe1\x1#\x14?\x5\xd9\x94\x8f\xe5(\xf0" "\xb8\xfdX\xb2?\x8f\xae\x12P\xd5\xee\xf4@\xcf\x45u\x99\x99\x84\x41/\xfd\xec\xf1.\xa2" "\xb8\xe4Q<\xf2,\x80\x87\xea\x64\xa9\x8b\xca\xb9\xadg\xbb\x65>\x13q\xbbW\x86\x15\x8" "c\xd5\xe1L\\\x8b\x11'K\x92x&\xabOY\xec&\xe3h\x92!\xba\x9f\x37I\xdc\x64\xf\xcc\x80" "\xd9\x94\x8dI\x1f\x9bN[\xbdx\xd8\xd3\x19\x83\xb6\xa9\xdb\x0\xdf\xd2\xe6\xdd\xb0\x8a" "D\xfb\xb1\x7f\xa7Y\xd2ME\x8\x4\x39\xb3\xafsu\xb9\xf4GG\xb9\x1d\xe3Z\x93y\xda\xc\xef" "4\x1c\xfc=\xc5|K\xf8\xcd\xbd\xa0\xe0\xe\x90\x8f\x86\xef\x5\x19\x8b\"=\xa3\xd0=%\xd8" "\x98\xd9\nU\xbe\xe\x6\xe4\\\x9e\xa6W@\xd7\xce\xdd\x1\xfe\xf9\xe1\x43J\xd4~\xb6\x90" "|krV\x93\x34\x33\xdeUy\"l\xeb-\x1a{\xf\xf8\x85\xa3\x43\xa3z\xe2|\xdd\xa6T\xb4\xce" "w\xe8\xc5\x9d\x13\xbbO\x94\x81\x46\x13\x32\xf7V5S\xcd\xcf\x15{\x89\xb3'&\xe7!\xe0" "\xdbX\xae\x80\x34v\xdd\x7f\xb6r\x81\xc0\xd6\xea\xac>\xc9\x88\x9a\x15\x34\xad\x7f" "a\xb0_Kf6\x8d\xf8\xd5\x1a\x66\xf5\xde\x2<\xb5'p*\x18\xab\x9b{\xc8\xf7\x3\x7f\x43\xc7\xfd\xfe\x66\xfb\xbfL\xc9\xe5Oh\xec" "=3\xeb\x10\x37\x3\x85\x44\x15\xa8\x38\x96\xff(\x14\x89:\xe8\xbc\x13\x84\x66\x8b\xb" "\\1\xd5\"\xd3O\xca\x88\nl\xf3\x1d\xc0\xab\x12\x35\x66u\xe2-\xe0\xec\xe2\xc9\x87\xc9" "-[\xdd\xdb\xd3\xf7\xfa\x81s\xb\xa2)\xa4~T\x93\xae\x14\xbb\xf9\x36\xe6\x6x\xf9\xc2" "u\x9bl%u\xdb\"\xe3\x63\xcd$\x15\x39\x97\x95 \xa9\x3\xe9\xac\x8c\xf2\xc3\xc7^\" \x98" "S\x8e?Xh\xf6Jj\x89\xdf|\x83\x32\x82\xdc\x83\xc9%\xe6\xdb\xc1\x30\x88\xc7\xa6\x92" "\x9d\xd9\xa9\x9c\x91V\xc5\xf5.\xf0HS\xf8x\xc5S\xd7\xe0N\xce\x87\xc1\xa5p\xa4\x36" "eIA;\xf6\xd1h\xeb^\x19\xb3\xd1\x98\xc3\xedG8\xe6\xcd\xde\x3\xdb\xb8\xb3\x19\xacL" "\xda\xacM{\x0\x93\x65\xcfo\xa2z\xa8\x11|\xf1\x19\xb7J\xa0M\xfb\xab{\xa1[\xe\xd1\x8b" "&R;\xc5\x8a\xffx\xef\x90o6\"\xa0\xfaZ\x18\x32\x10V\xa3\x9a\xb1\xe7\xccg\x1f\x13\x16" "\"\xc0\x10\x36\x1aQ\xf0*a\xd5N\x80\x9e\xa3\xf2%\x43>.\xcctk1\xfb\x2\xc9\xf5\x8\xde" "d\x8:\xa7\x1e\x8b\xa4m\x9a\xe8\xcK0\xf3\xebIZ\xdd\x95\x83\xe6\x1f\xb5\xb8l{\x90+" "\x8fQlhA\xd9\xc3\xb1\xdd\xb6\x1e\xb1\xef`\xa4\xd0\x42\xbbt\xfaO\xc\xd0\x14\x8f\x2" "\x9\x87\x19\xc8\x66/\xea\xc4zM\x89\x1f\xfc&\x9d.s\x18\xb7(\x9e&\x12\xee\xaf\xfeZ" "\x88\x80\x30\xe6yf\x1b\x3\xd7\\\xd2Qp\x1b$/S\xc5\x32~\rOB\xe4vI\xaf\x18\xa8-~\xa4" "\xbcQ\xf9\xd1{J\xb2\xd0\xf,=\x1f\x7f$M\xc6j\xa1\xa4\xdfQ\xbf\xe\xfbWG\xfd\x1fzr\x19" "i\x7f,\xe0\x63\xb9]\x4\xe\xb8\xab\x39\xb1$oT\x11\x9c\x1e\xe\x96\x86\xf7#\xc7Ol\x9a" "\xc4\xb9pEB<]\xb0\xe3\xd5#\xco\xb0\xe6\x84\xb3\xb6\xc3t\xb0\x61\x8eMt(\x10\x7f{<" "\x91\x1\xf1W)?\xea\xbf\xfe\xca\xab\"]U.MK\xab\x37\x31\x65\x84\x8d\x9f\x62]\x80\xe3" "\xde\r#2\xff\xc0\xe\xbb\xf4\xf6\xd8}\nC\x7+v#\x1l\x6\xe6\xf5\x36N\xe5\xc7{,\x1d\xc9" "/0\xba\xcc\xe7\x83\xc4\xc}\xb8~IL\xe0\xb5\x64\xbe\xbe/\xf3^\x1dHl\x0^j\xacZ\xe1\x93" "\x1e?\xf7\x35\x8f\x15-H6\xecz\xdc~'\xc5\x36\xe7\"\xcc\x9a\x1d+]h_\xdd&\xcf\xcb\x61" "pL\xf1\xe6\xea\x9x[\xf8\xe7\xf0\xc6\x94\x30\x1f\xe7Q\x82\x8d\xe0q*\x8e\x83\x3\xeb" "k7\xf8]9\x89\xdc\x5s\xf5\xda\x42Y\x81n\x89\x44\x5\xf2\x8a\x1e\x34\x8e\x7flYl\xe8" "\xc5\xf2\xae{\xf6\xbd\xfe\x1d\x35\x92\xab\xa7\x4\x5\xd1\x88\x80\xbf\x45\xe6\x31\x9" "G\x92S\x8a\x8a\xeb\x32\xa1[\xd5z\x7\xc6\x1\x8c\xb7\xac\xc3\x65\xe3\x8\xa2\xb0\xcf" "\xbe\xcc\xf6\xc6\x63\xbc\x1c\xf0\x4\n\x19\xb0\xbb\x39\xa8Qgr\xcc\xca\x9b\xfb\x7:" "c\xd3\x30R\x12\xfm\x90\x66\x35Gw\xd5\x11\xdd\xac-!y\xfc\xb1W\x15\xdd\x63\xa1O\xe7" "\xb\x42\xb3\xe,\xa3\x38\x91\xe4[\xa4!\x86\x66\xac\x1c\x9f\x10\xd6\xcc\x82?\xb9\xe6" "$\x7\xef\x9b\xff\xa0y\xc0\x62\xdb\x8f\x82\x80\xac$\x15&\x8b;\xfe\xf9\x31XkEL\xcf" "\xde\x1cq5\x83\xd6z\x3\x31u\x90m\xb6\x95\x85g\xfd\x1f\xd0$\"w\x84\x1bZ\x98\xe6\x8b" "\xc4\xe\x9a\x99L\xeb\xc0\x61\x9d\x87\xc4\xa2\x90\xf6\x2v\x80\xf9\xce\x11V\xebK4\x14" "K\xd9\x9\x6\xb8_\xf8*\x4H\x2\xc7\xf8}\xff\x66\x42\xce\x94\xfe\x1e\xdc\x43\xfa\x98" "m\xfd\xe2\x96\x66\xf5\x6y\x93\xfc\xc2\xfu*u\x1at\xcf\xd8\xe7\xd5\xfd\x7fN\xb0\x66" "\x16\x11\x14\x85\xf1\xa8\xe2\\\x35\x12\x62\x9f\xbe\xa5\x82\x18ts\xc>v\x1f<\xb\xb3" "Q\xfc\x42I\xc2.(\x8qJ\xe9)\x89\xc3\x82\xe8\xfa\xc2\x95\xe\xe4\x33P\xdc\x31\x9a\xa8" "?\xa4\x3\x9c\x18\x96\xf6[\xf0\xd3\xf9\x9c\xb2\xc0\x1e\x35\x82%@\x94\r\xa4\x87\x86" "IF\x12\xc7\xba\xc3I\x5(\x8~\xc5\xefN\x9b\x98\xb8\xb5\xfa\xd1\x19\x43k\xbe\x8\xba" "\x8X\xd4\x36\x83I\xbd\x83\x7f\x9\xc0\x8d\x97p\xea\x45\xb8vn\xbc\\\x5\x1f\xe0\xf6" "8hfJ\xb5\xee\xfc{\x82\x5u\x3\xeb\x97\xe0\xe1\x38l\x94\x90i\x8Y\x95\x1d\x8c_\xbdJ" "\xb4\x37+$\x8dJ\x9d\x1e\xb2\xa5\xee:,\x81(6u\xf4\xba\xc0\x13{\xfe\x9f\xea\xfcM\xd1" "\xf6\x39\x8e\xd3\x3M\xb0g\xa1\xd9\x65y\xc9x\xb2\xcb\x30\xa4\x66\xf4\xf1\xc1\xcc\xa8" "\xd9\xeap\x17\x45\x9f\xa9;/\xbd\xff\xf2&\xf5\x82\xf\r&\xb}\xeb\xa7\xebW\xa3Z\r\x8e" "}\x1cpC\xee\xb5\x1c\xe9\x1b\xda\xc4\x12\xd5\xda>+e\xad\xce\xed\xce\x18\xd4\xe\x97" "0\x1dI;\xcf\xad\x62\x9p;\xc2\x1a\"\xc4i\xd0\x84\x43\xe9\xcc\xd1Z\xd1\x1\xfd!\xc6" "\x8e\x39\x82\xc5X\xf6\xfb\x11\xe4\xf6\x82\x65\xc0\xdd\xff\xa6\x82\x18\xdfX{\xd5\x34" "\xf0\xed]\xf9\x88\xbf\xca@\xc7\xbfs\x85\xc9\x93\x65\xea.@A\x9a\xcao\x18\x97\xd8\xff" "\x11\xd5\xbc\xa1\xee\x80\xd7o\xee\xb0\x8f\xcb\x38\x12s\xb6\x98\xe\xf3H}I#\x1bOz\xc7" "\xac\x97\xd0+\xaa\xf1\x41-RZ\xe6\xee\xec\xde\x89K\xbc\xa8\xb1zp\x1\xec\x95\xbb\xc9" "b`\xc3&\x93\xb1\x12\x65:\xe0\xf2nG\x1f\x92\xfGY\xcb\xc2\x99]\xb0\xde\xb5\x39\xc\x88" "\xd2\x83>n\x13SS\x7\xef~\x91\x41\xf1\xf8\xd0\x4\x7f\xd4R\x9j\xd6\x87\xac\x30\xb0" "k\xd6\x95\x12\xe7\xcd\x0\x9a\xa2\xc7\xf4\x37Thz,\xdc\x5\x85\x35\xef\xack\xedN\x9" "\x99\x44kU1\xb5;w\xb6\x7\x2\x91\xd0\x89\x2\xcb\xfb\xee\x1c\x6\x31\x9e\xab\x17\x32" "\xa1\xee\xd5Vs~K\x4\xb0=D`\xf5\xb8\x14\xfew0\x1a\x9bX\x9d\x12\x10\x96\xe2y\xf6\xaf" "\xee&1y\xeqH\xfc\xc9N\x1f\xa8m\xdc\xe4\x86\x9f\x96{$m\x94\xb1&\x17\xab\xae-\x95\xad" "\xd1\x2\x89\x8d\x34\x33\xae}\xe4\xdd\x1a\xb x\xb6\xa6\x8dn\xe\xe1\x83.]6\xb8\x30" "\x8d\x93@\x8eo\xcb\x8a\xe9\xf4\xc6\xb5%X1\x14y[\xbb\xea\x39\xdf\x3?\x8f\xa9\r\xba" "\xc3\xa4\xeeU,~\xd7\x1\xe1\xf5\xa7\xdc\x41\x1a\xa9\xb5'\xa2IV2j\x86\xc3o\xda\xb2" "\xdak=e^\xfe\xab\xb6\xc\x89\xfd+P\xef\xd6\x88\xb7\x61\x12\x92_\xd9Of(\x9f\xdc\xad" "\xb\xad\xea\x45\xc3(\x9b\x7f\x14}E\xcby\xab\x8\xfdH\x90\xfb\xf5\xcb\xb8\xea\xbf-" "p;\xe3\x82o_\xd5\x83\xc9*\x89L\x1e\xc9\xdd\x85\x34\xa0=c\xe1\x86\x9aq\x93\xe3`F:" "\xdc\r}\xe4\xb9\x30\xce\x6\x31\xf2\xb7\x39t\x13\x80\x9f\x1e\x31\x43\xe6\xdb\xff\x12" "q\xec\xea\xfaq\xdb\xf7\x17U\x9f\x65\xf6Oa\xad}\x99\x31\x31\xe2\xb5\xc4\xe3&\xec\x1" "3\x89\xb5\xdb\x81\xe1t(\xef\x97\x16\xe8\x46yM\xbd\x83\nt\x0\x97\xedY\x8bZ\xf0O\xcf" "O\x86\\\x89ru\xf8\xd8\xa1\xfe\xd7\x7f[\x16\xcc\xf1\xd2!\xe9\x19%i5\xfb\xab:\xb0\x2" "i>\xf7\xf7\xd8\xcb\xe1\x9d\x94\x42\xe2\xf4\x82\x89q\x91\xf6w\x4\x41\xab\x62\x92P" "9s[\xe0J\x9\x31\x94tF\x18~j\xa5u\xebM\xf1\xb8\xb3\x13\xb7\xdeWN\x81W~fHc\xe5\x42" "\xc0\"\xa4\x45\xa3()>Nx\x8b\xad\x66P\xbf\xb9\xb6\xc8\xa7u?\x88`\xc7\xb3\x81:\xa3" "fH\xbd\xef\xa3\x93$tDc\xf3\x87\x31oq\xf\\\x8\xdb\x31\x92\x9d\xdc_\xed.\xf5Z\x11\xee" "\x1d\xb3\xbf\x32\xe7\xa7\x37\xba\xb9\x33\x30:}\x7\x62\x8f)>9\xf6\x33\xe0$\xc9\xdf" "\x82u\x9b\xeb\x43~N\xde\xc5\x66\x80\x39\xeb\xa7#\x15\x8e\xf4\xf7\x99\x8bhj\x86\xa5" "\x1\xdd\x2\xd9\x87.M\xbb\x84gD\x8c\xac>B\xdf\x84\xec\xb9*`0\xa1=2\x86g\xef\x97\xdf" "\x7v^\xf3\xb9\xa3\xf2\xa6G\xed\r\xee\xf5\x9a\xee{\xc8\x83\x0\x9e\x32\xc3\xeeS\xda" "B\x13WHn:\xcd\xc3\xa2\xfat\xa7\xce\x17\x83\xeb\xe5O\xfd\x38z\x93\xf9\xb3\xd2Xe\xec" "\xc1\xc2\xa2P\xa2\xca\xae\x87\xe5JF[e\x1b\xb4`\x88J\xa7\xcb\x85|\xce\xb5\x90\x31" "\xc9\x37\xed)\x1a\x93:\x3\x2\xaf\xc1}\xa7x \x12\r:\xfa\x7\xd5\x2\x11\x37R\xcb\x61" "\x95\x6\xff\xeagD\x96\x81\x6\xc8\x9c\x84\xe9)\xf2\xef;\xa2\x17\x11g\xdd\xf1Y\n\xf4" "\x1d}\xd0\xa0i\xb9k\xfc\x66\xb9\x14\xfc\x1b\xdb\xc\xef\x99\x31Mx\x99\x13\x0\xb3\xc0" "P]\xd1u\xa8\x36\xc0\xb5\x99\x9d&ffL\xee\xc5 \xb4\xe9\x85w\xc9\x82\x97L\xac\xe0\x87" "/\xc1\x1X\xce\xec\xe2\x32'\x1\x88\x8e\x64\x85t\xf5\x14vW\x4x\xbdk\xa8\xc3!\x8e\x96" ";Z\xd9\xfag\xa1\x88#\xaf\\}\xe7\x9b\xa1\xb\x2\xa1\xe6\x88\xe5\xc2\x9c:J\x9al^\xad" "k\xb7\xbfZ\x1b\x0\xb2\x15\x15\xbe\xa7R\x8lQ\x85Sr\x9\x6P\x9d\x8fK\xeb\xbe)?\x8cz" "\xa2\xc4T\x98Z\x12\xa6\x62\xfe\xff\x7fo\xaa\xee\xfe\xbe|m}E\x88\xe1\x46;\xab\xe8" ";\xd9\x3\x15\x10\x12\xcd\x34\xf9\\\x9c\x97v3\xca\xb6\xb3\x64\x99\xb2_@\x8d~b\xb1" "\xf8\xa9\x2}Q\x1d\x89\x6\xa3\xa8*\xba,\xa2\x8b\x12\x8c\x97L\xf2\xc2\xde\xd1h\xce" "\x8a\x1d:\x97\xc8U\xc1,Q\xf8r\xc8\xae\x33\xea\x97\xbc\x95\xcc\x13\x15\x9f\xe9<\x97" "\x9a\x32\xb0^2n' D\x1b\xee\xc5\x65\xc3\x8\xf2\xe8\x88\x0\x16\xb9\x89\xc3%U\xa5\x62" "\xba\x8\xf3\xc5\xb0\x42\x89\x9b\x1f\xaf\x93T\xf1\xf0\xda\xc4\xb0\x9c\x32\x1e\xcb" ",f&y\xd6\xb6\x92\\\x1d\x61[\x10\xf6\x34\xea\\\xeaIV\xa2\xc0\xdf 8\xf0\xa8]\xea\xb7" "\xb6\xc1V\x19\x91\xf8q\x98\xd7\xbc\xed\x45\xcd\x15\"\xf6\x9f\xc8^gV\x1biJ@\xdbL\x9b\xf2\x9d\xdc\x39#D+\x9b\x16\x9c=\nSP\xd8\x10\xdf\x19\xe6" "F\xf2\x30^N\xeb\xa5\x61\xbf\x85\xea\xea\xe5\x1eM{\x81\xd3\xad%n\x95\xebj\x1f\xa9" "*\xa4)\xd7\xe2YZl\x87\xa9\x94RYP\x3&\xc3\xdb\x1fY\xd3\xeb\x8c\xc1\x1c\x7f\xeb\x8a" "k\xf1\x82\x46\x86\x31\x66\xa0\x9ez\x8c\x8f/T;\xbd\xb5\xa5\x85\x92(X\xd8~\x87\x96" "#\x13\xe7/\xf2\x82?\xb0&(e\xab+^\xba\x8a\x8f\x1c\x82@\xa3\xd3\x86N\xa1\xa7\xaat:" "\x98\xe0\x9ej\x81m\xd7\xe1\x7\xd1PG\x12\x64\xa8\x5\r\x2>\x4\xfaH\x15xA\xf\x99j\xfc" "!O\xa6\x46\x8d\x18JY\x10\x31\xd5rc\xff\xab\xf3\x32\xddp*\xc4\xff\xb0\xa2\x82u\xad" "9\xa4h\x80Z@\x4)\xfa;\xf2\xee?\xfc\x18\x13g\xab\xeenW\xc6zM\x95\xd5\x1j\x81\x8f\x1d" "\x8b&\xe0\x38\xe1\x1b-\x13\xe5K\xa4\xc2\xf9+\xff|P,Z\xce\xffXJ=\xa4\x2\xf6\xc7\xd4" "=\x4\xe0\xf2\xf6\xc4\x16\xae\xb0\x97\xff\x42:\xf2K\x9e\x1d$\xe1\x30\xd9\x81\xc1\x37" "\xb7v\xeaYQ\xae\x1\x3\x95\xca\x30\x80\xddSw\x1e\xe\xce\xb\xfd\xae\xf8\x31)'\xb5\xc7" "7|I\x80\x93R\xe9\x11\x35y\xb9\x43-\xb7\x9a\xf8\x8a\xe\xf9-;\xae\xaf\x8c\x3R\x12*\xd4\n" "8\xb4\x8c \x12\xe0\xea\x44\xe7T|\xb4I\xf5Q;\xadGK#8\xbd\x91\x95\xce\xe4*\x8f\x9e" "U\\8\xfa\x1f{\x95\xfc\x2<\x1a\x30-R\xccO\xb2\x41\xd6\x2\xc4'1_\xdb.\x4G\xdc{\xfd" "\xa8\x93\x9a\xa8\xda\xcd\x33\xd6\xc4\xe4\xf5\xf4\xc9\xeew\xa2\xfa\xbb.\x1n\xd1\x32" "Jw\xf8\xc2\xc\x1f\xb6!>\\\xa5\xec_\xec?`\x97\xa9\x9ch:\xee'k\xf3\x19~\xbeT\x7f\x10" "\xf4\xf1\xfd\xb0N#\xdd\x9d\x91\xcc\x1b\xb5-cl\xa6\x45\x9c\xfd\x61\x0M\xcaZ0eY\xc6" "\xe4\xa7\x3\x91T\x8f\xba}(\x8\xfb\xa5\x4\x18s#UO\xbdT\xee\xc1\xb7 X\xde\xb6i\x9b" ";\xf7s(\x16\xbd\xfb\x65\x14\xbcM-\xed\xe8\x88\xf6\x3\x1\x6P\x9di\x1au\xe7\xd8\x8f" "\x8f\x31\x43\x9d|PV6\x8d\x89{\xd4\xd6\x1di\x1a\x83\xb5\x45\x37xQ\x16\xe1\x64\x9a" "\xa8\xdbO0\xc1\xda\x1f\x45?~\xd7\x85\xe9\xccW\x8\xd9\xb0\xca\n\xda\x30\xc9S\xe1\x96" "\xde\xd7\xa4\x66$\x96\x90\xa0\x35\x35\xb2\xf9\xec\x9d\xf1\xcb^`H\xe3\xc5\xd6\xfa" "\xff\x46\xc7\xec\x1f\xc7\xbb\xd5\x30\xf9\xfe/;\x93\x16\xfc\xd8\xe9m\xe3\xe/N\xfb" "$4\xe9H#K.\xe7>\xf6\x87\xc6\xf2\xf6+\x5;\x4)\x9b)\x81~\xf3\xd2\x88\xf\xe5\x7fs\xe9" "\xdc\x91!\xab\x99]?\xfd\xca\x8dsg\xc0\xf2\x1\xdd\xe1\x6\x9f\x65\xa2'\xabH&\xd9\x9c" "\xee!\xa0P\xc9q\x82+zU\xadn=\xea\xe6\xbc\x81\xb7|g^\x1a\xbdt\xfe\xe7\xe6\xcf\x10" "7\x94\xc2\x9a\xef$\xe5\xf5%\xcf\xcd\x85\xd9\x85\xd6{L\xedS\xfa\xe8\x61\xb3G&\xf9" "\x13\xd9\xcc\x83W\xf0\xcd\xf0O\x1di\xed\xe6\xfa\x44l!nPE\x7\xf0R\\\xc3\x62Y\x18." "\x8f\x3\xd6}\xa3S\xe\xd9\x8f(K\x97_\xd3\xc1\x0\xd5\xf4\xd8~\xa5\xa4\xc0\xe6\xc8\xc8" "\x19\x99\xeepM\xf7\x85q\xe1\xb7\x90\xf6v\xc9\x96\xc4\xe9o\xe2\xaa\xa6\x9a\x9f\xcf" "\xdd\x2\xb2*\xf2\xa3\x16\x93z\xf3\xe9\x8aO\xe7\xd2\x35\x64i\xa4'\x2\x12\x44\xb2\x46" "\xd5\x93o\xa0m\xe8\xd2\xdd\xc\xd5\x9e\xbdM\x8e\x37\x4\xaa\x1b\xdbv\xa7\x97\xf3L\x4" "Nx#\x9f\x35\xc4\xb1\x88\xcd\x19`1D>\xc7\x6\xde*\x2\xe3$\xdd\xf7\x34\xdf\xc0\x45\x89" "\xa7\xfc'\x2%y\xc9:Qo+\";\x90Sl\xac\xc2\xa7\x8c\x46\xe5\xa0J\xf;\x17$J\xc5\x0&\xfd" "\xf\xa5\x9a\r\x43\x0x4\xde\xeb\xf0\x87\x65o\xf3o\xae\xb0xj\x8=,\xfd\x97@3\xc8\xdb" "f\xc3\xf0R\xb4\x9eu\xddi\x11.\x9b\xd0$S\x9e\xe0\x15\x36\xa9\x97\x19\x83\x97\x9b\x10" "\xb\x84\x15,\xf6\x1d\xa5\xc3\xdd\x43\x81\xd2\x5\xf8\xe\xf1#v\x89I?|\xbd\xb6\x9f\x85" "\x9\x8$I\xec\xb9\x46&\x8c,\xf3P\xb3\xfdKfN\xe1\xb\x63\x36\x43'\xb1\x1cj\xd9)^\xfc" "|\x92\xa5}~\x92\xbfxk|4p\xfan\x18\xce\x64\x85\x9c$\"X\xb8]aF\xf0J[\xe1\xf8v\xc9\xde" "\xf3o\xc8i\xdbz4G^Q\x1fSJ;\xed\xd6\x9f\x1c*x\xc0s\xaf\xcd~\xfeX\x80\xffM\x8c\x5\x90" "\x8e\x45\xcd^-\xf8\x10\xa1\xea'\xb8rz\x7l\x2\x45n\x3k\x9f\x85\xcf\x9c\xb9n\x83\xf8" "|\x8c\xbf\xbf\x65\xa4\xdenx\x85\x61\xae,\x5\xa5P\x12\x1\x99\x91\xbb\xf4\xef\xcb\x93" "\xa1\xd5\xf7m,7:\xe4\xc7\xe2~7\xcdJ\x8b\x10?\xb4\x11\x8b\xc6(\xee\xd5I\xf\xdf\x9b" "\x5 (\xeeO\xac\x83\xdeGm\xb0\xbdx\xe8\xb2\xd4\xdf\xc5\xbd`\xdas\xb0\x31\xcb\x8e\xf" "\xed\x97\xd9\x97l\xf7\xb3\x92\x8b\xbd\xdb\xff\xf1\xb4q\xa9\xe7\xdf[2e\xa2\xe2Q8\x9a" "\xfc\xe6\"\x66\xd8\xb2\xff\xcd{\xbb\xf4=\x80?z(uY\x80\x99R\xbc\xa7]\xa0\xb4\x35\x66" "\x1b:\xd6\xd2ZL\x3\xc5Wq\xed\x42\x32\xf0k7\xc4\x19\x4WCq\xd2\x7fh\x3\x99\xab\x14" "\xcd|u\xee\xda\x10N\xd5\x19XH9\xce\x3\x39\xbfk\xc5\xcc\x42\xa5\xc4\xdb\xccY\xb4\x38" "d\xc7\xac\x85\x9d\xfb\xf3\x62\x1d\x19(F7\xc4\x39\x9f\xfe\xb7\xcf\xdc\x8d\x2\x1\x1b" "X\xbc&\x9b\xac\x8c\\\xec\xbaH\x9a{\xdf\xca\x42\x8\x6%\xc5\x66\xfe\x16\xf1x\x9K\xce" "z8-\xcf\x85\x90\x90\x99\x1c\x85\xca\xba\xd2\xb7J\xf1\xe8\x5rDF\xac\xab\x13\xd7^O" "\x94$\xf3\xaf\x64\xa6\xf0\x1f\r\xb9\xb6z\xa0'$\xff\xf5\x1c\xc\x1cn\xb8>\xb3\xf9\xd3" "T~A\x8\x98\x1dsF+\xd3\x38=\xa8\x35:\xef>\xb3\x1f\xdb\x34\x90\xc1L\xcf\xbbS\x1a\x83" "\xbf\xa6\xbf\x96\x9f\xf\x65\x8c\x64!b\xfb\x93\x86\x66\x9b\xd1\x9b\xc8\xee\xeaw\x7f" "\xf6\x30\x18Xq\x9aZ-\xf8\x82\n\xb9\xe8\xbe\"P\x1\xf0}\xe1\xd0U\x8e\xa2\x36`Y>\x1" "-O\xe1;\xf0\x1a\xdd\x65\xce<~yB\xecR\xdc\x81KBO\xd6W&\xdfvji\x13\x41\x92\xd4\xd6" "\x81?\xa5\x37\x0\xc1\x8cg\xffv\x9f\x7f\x1a\xf0mH\x6\x1a\xc7:>9 \xaam\x1a+C\xd7\xd5" "\x82\xd3\x8c`9\xb1_\xca\xae\xf6-C\xf9JfWE\xe2\xec N\xa0\x88;B\xc4\xb\xba\x1a\x95" "\x89\x1c#\xeb\xb9\x1a\xe1\x7\x11\xf1w\xc9\x65\xf2\x8cI[\xbc\xa2\xd5W96<\xc\xec\x61" "\xa6\xeeH\xa7u\x96\xba\xc\xd6\x34i'jH\xc4\x89\xf1\xf2\x65tz/$\x18x\xa7\x6\x44#C:" "\xa7zv\x8a=\xab\x5\xce-\xf1\xee\xe4:\xdfq\xa0\x18\xee\x44\x90\xf8\xe9>\x0\x16P^\xf" "\xb6\x95\xa3\xcc\x9fk\x92\x88\x9dM\x92sQ^0\xca\x61\x8a\x64\xa1\x13'\xa6\x95\x42Z" "\x85\n\xbd\xdb\xc0\xe1\xb2\xc2h\xc9\x98R\x9c\x41\xe\x37\x1aQ%\x1f\xd2\x7f\xeb\x64" "tMd\xd8\x6\xeb\x9dv\x86tw\x9c\x1d\xdb\x15t\x0\xc8\xe6YQ\x18\xb7\x45\x18\x12\xb1\xe6" "\\Y'GR\x96\xd0\xad\x9eT\xe8`\xfe\xea\x7\xff\xee\x65\xbe)\xce\x5\x89\xa5\xd3\x95\xb7" "\xa9=\x9M\x8f\xfc\xbd%\x8d\x92\xa8'm\x2\x9d)a\xde\xd8\xe9\x39\x10\xb2T^\xaa\xc2x" " \xd4\x98\xb7\x92\xaao&\xb6\x30\xdbI\x8c\xdc\xa1\xf8\x12/\xda\x99\xfe\x16\xb5\xf5" "\xb3\xban@\xfbH\xc2\xce\xe2\xa1#\xbb\xa7p\x1f\xc6\xe3\xf\xb4*\x18\x13i\xfe\xb1\xb2" "\xba){\xddZi\x2\xf6\xe3\xa3}_\xb6\xdd\x0\n\xb5\xa9\x17|\"\xc\x2u\xa8\x9a\x34L\xa6" "\xff+\xb1\x87\xad\x19\x46*c\xfb\x93\xed\x31S\xa1#\x87\xb9#\xcc\xbds\x17\xac\"-e\xc5" "\x92\r\xb5]~\xbe\xb9\x18\xb3\xee\xc5\x83SbE\xa0\x3n[\x4&:\xe9\x87\xac\xd5\x4\x4K" "2\x7\xb7\xa1\xad\x1v(\xd7Z\x99(\xc1\xaf\x34)\xf5\x63T\xa2\xc9\xbf\x1\xe2\xb1x\xaf" "\x18X\x8eR\xf\xb5Y\x8\x45\xc8\x45\x61\xd3\xda\xePL\xd7\x45N\x99\xcey\xb\x7f:\xae" "\xf4\x99;\xafu\x12u\x9a\x98\xf0\xe7\x43\x82v\xf4\xf8\xec\x62H\xe3HL\x84'u\xad\xae" "\xab\x6T\x11\x89\xf0\x98\xb0K\x1dHt\xf1\xf2\x32\xf9\x31\xad\xde\xc\xe1\x42\x65\xa8" "\xb2\x98\x61\x44I\xb1\xa7T\x88\x83\xc0N\xfd\x89\xe0\xc8\xe8\x83,\x14\x43\xc8\xb9" "\x14\x88\x9c\xaa\xbd\x87\xbe\x9a`\xb~\x97\xce\xad\x30\xa6\xf8\x5\xe7\xa5\xd6\x1\x17" "\xab:\x17\xc\x1e\x38m\xce\x89\x16\xff\xbf\xd7\x31;\xda\x1\xa9\xb3KC2\xbd\xeb\x85" "\xa1\xb2\x9\xa5\x1\x33\xe3\x96\xd8\xf1\x8bO3$}\x94\xe4\x99\x19\x42l\xa4\x9\xa6\x1e" "H\xb7\xf0\x30={fW\xd5\xae\xfd\x18\x80\x8f\x9d\xcb!\x1a%\x38\x97\xa5\x98\xdf\x12\xf" "\x12\xee\xbf_\x13z\xea \xea\xb4V\xf6\xd0\xe4\x5\x8f\xb3HG\xb6\xce\xc4\xdc\"\xeaU" "\xf9\x44\xa9s\x82\x8d\xcfRA\xed\x8ah\x12\xe0\x13\x18\xd6\xd5\xd8\x9c\"\xb1\xfa\xdc" "\xac\x39sP\x95\xa3\x1b\xbf<\xdd\x92\x36\xdf\xed\x16)_5\xb8\x0M7wZQ\xb?\x9a\xa8y\xb2" "\xb2\x8eJ;\x17\xfd\x95]\xee\x8b\x8b\x92\xad\x16\x18\xe9\xa3G\xf3\xd6t\xb9\xbe\xe9" "\xf6\xf7\xbe\x11+\xcc\x88\xbb\xb5!@L\x14\xe4\x10\x63\xfc\x9b\xde\xea" "\xa0\xa2|\xea\xb&A\x80\x92J\xff\xda\xe5\xd2 ^\x9e\xbd\x45\xee\xa4h6\xe7\x87)\x95" "\x1f\x10\x1d\x89\xe9\xa2\x86\xd7!OT\xc9\x82\xda\x32H\xa0S\xec\xbf\xbdN\xe8\xca\x18" "\xf1\x82\xef\x86[\xe4\xf4\x88\xf6\xb1\x84K\xa3\x46=\xd3\xbf\xb9\x1a\x83\x2\xb7\x13" "#\xc5\x9e\x4$\xfd;\x6\x8a\xd6\x98\xbe\xa3\xb9\xe2\xb5\xa8S3\xef\x93<\x6%\x14,3]\xea" "\x0%\x9ds<\xd0q\xe6\xd7\xecp\x84\x7f@VH\xe9\xd5\x98\x16\xc6\x9b{\xeb@\x18\xfa\xd4" "Ro\x1d\xbe\xc8\xc1\xca\xf4\xe8\nKRH\xf9\x46\xb\x95}K\x19R\x19K\xae\x1\x9a\xd3\x83" "\xfa\x85=\x80(\xe8\xe1\xbf\r\x98,\xd1\x1\x82\xfd\x9e\x9fk\xf6\xb9\x43<\x14\x9f\xca" "u\x9cS\x8d\xde\x62I\xe2\xb4\xe1\x37\xf3\xa6)zK\x18~o$M\x97.Io\x2\x17\xb4*n0\x94o\xc\x14k\x9dP~\"\x14Vi\x9fM\xca" "\xb0\x35\xbb\xcc\xd1\x90\xb8\xbf\xcb\x0\x4m\x96O\xc3^\x1f\xe9\xa2\xeeLN\xd1\xf3p" "\xb7)\xd6\xbb\xad;\x7\x82:\xcf\xd2\xfa\xd4\xed\xfa\xaa\xda\xfe\xe7\x8e\x1d\x8d\xee" "\xc\xd6\x8c\x32i\xe1:\xe8\x9c\xd1\xc7\x2\xb0\x8f\xc1\x88\xddo\xb3\x86\x1e\xd5\x37" "\xcf\xe4\xb3!\xaf&\xcc\x92" "\xf9@,/8T\x7\x61\x99J}G\xcc\xad\xdb\x42g\x9dS\xe5$4\x1d\x86\x46\x8e\xe7\xb4\x12\x9c" "U\xc0\xa3\xe6\x8\xe1\x90\xfc\xe9\x42\x13\x87\x90\xc7\x8f\xc7p#\x8b\xfc\xf7\xaf<\xda" "\xdc\xe2\xfem\xe0\xb3\xd6Q\xfa\xfe\x9\xe6|\xe\x88\x7f)C\xaaX\xf9h\xc1y+\x1e\x8at" "\x81\xc5T\xe8r|\xe8\xfe\x1d\x13i\xbdR\xb5Y[3:\x6\x63\x1e\xb\x11W\xa2\xaf\xa8(<\x15" "\x14\x38\x30\x87\xf5nY \x8e\xa8\x3\x8f\xa5\x16\xa7zKU\xe\x1eW\"6\xc8\xc9\xc7\x9b" "\xe3\xba\x37\x2\x15\n\xf3\xc1\xaf\xec\x8b\xc\xf8\xa5\xa7\xe1\x99M\xc6\x1d\xe0\xd9" "\xa2W!\xcal\xff\xdc\x88\x89\x16\xdf\xd8\xcbQ\xd1\xfc\x18\xd0y_\xc0WHg\xe7\xd0W\xb2" "F\xbb$\x8c\xb7Y\xe5\xf8\xbb\x98\xe5\xa2\x93\x42\xd4\xc8\x8v]=\xd9g\xb7\x11\x8s\xbd" "0\xae\x9a]>\xe8RW\x1a\x63\x5\\r\x85\x4T\xe3\x19O\xe4\xb\xd0X\xd7\xb7\xa6$\xa2N\x9a" "fA\x13'\xdcU\xac\xba(1p\x82\x14\xe5\xaf\x96,\xfd<\xb4\xf0\xd7\xae\xce&HFf\x19\xc8" "\x9c\xf9\xe\x9f\xef\"\x8aP\x9f\xae'\x86s\xcd\x16\xd3\xad\xae\x95\xb4\x37)\x1v\xb3" "\xe0\xb5\x46iI\xd4\x31\x1c\xdf)\x8a\x15v\xc1\xc8\x1\xec\r\x43[\x85\x14\xa8\xab\xbc" "WN\x1d=??\x97\xdaS\xda@]\x98\x32\xe2Rn6\x16\xa5=\xd4\"\xd1~\xe6\xf4\x66\xf1\x1\x8b" "4?\xfd\x8a\xa9\x61\xb0\x35\xf8\xd6\xb2\x99'Ux\x98\xab@\x1f\x0\xb9\xc6K:\x1a\x89\xcb" "\xea\xa4O\xc2\x11Y\xef\xfc\xc2\x91\xb0T\x12\xc2\r\xbd\xcfW`H\xb_`\xab\xa3\x10\x1a" "\x19\xbctE\xc3\x9e\x86\x4\x7f\xe4\xd4\x92\n\xad\x1f\xca\x8e\x8b\xfdtC\x1c\xd0\x17" "\xb5\x2\xdau\xd2\x9W\x13\x80\xe7W+\xa4\xc1\xf8(I\x98\x31\xc8\x88 \xac}\xe1\xcbK\x9c\xe1\x13\xf6\"\xeeWj_M\xfe\xa7\x81\xe0" "\xd1\xb0]\xc6\xad\x39\x89\xb3\xb8\x30\x8a\x38\xe9\xcc\x93\xb9\xae\x11\x63\x82\x10" "\\0\x9\xd9\xf8\x36\x7f\xcd\xe3\xd8O\xb]\xa6p\xe1\x33\x1d>h\xbf\xe2\x18\xe\x4\xa1" "l3\xa2X\xf0rD\xad\x9c\xf5jO\x9d\x46\xf0&D\xfd*\xfb\x91\"\x44;\x6\r\xb8\x99\x44\xf9" "\x0\xd7\x7f\x37\xfd\xaf\x7f/m\xeaU~\xb6\xbe\xb\x10%\xe1\xe7\x42\xd0\xf5\x10\xdc\xa8" "e\xa5q\xa6\x31\x32\x9f\xd1\xc8GPE\x89|\x85U\xa5\xa1H\x9b\x84Z\x1chY&\x8\x84\xf1\x93" "\x96\xc5\xb6\xbe\xfc\x12\x16Wtg\x8bO\xc7LV\x95\xf7\xe7<\x84&\xe9\x88\xbc\xa8\xb9" "\x8eQC=\xd7n\xb\x94\xbe\xd5\x5\xd7\xc8\x10\x8bU\xdf\x1a\x81\xdc\xa3\x8c\xff\x88Z" "\xa0\x45\xda\xe\x9d\x92\x1e\xb0\x13\xe6\xaa\xfa\xb5\xac\x15(\xbf\xf1\x10\x9d\xa7" "\x1d\x85>\xb8\x35\xcd\x90\xe9\xc2Y\x9ds\xc8\x12\xe8)Y\xd7\x41\x66l\xb6\x13\x31\x85" "\xc8\x39Z\xc6\x97\x32\xa4\x9es\x87K={qS\x1O\xdd\xdb\x90q\x12\xbb-\xa5\xe4\x61\x62" "\xa1\xd6\x7fR\x88\xa0\xf7@\xab\xb4\xe4\xbb\x33\xb7\xda\x8\xd8\xf3\xdd\x15\xdc\xab" "\xe7\x30'\xf4\x18\xb8\xb6lytZAU/\x95\xf7\x84\xdd\xf4\x62\x33\xa5\xa6\xe7;\x9bo\xb2" "\xe0\x9f\xe\x90\x9R_\xd4I\xae\xc9;\xc9\xe2\x14\x89\x90\x16Xn\x90\x80)\xa3\x98\xda" "Y\xfG\xf3\xb5\x13\xec\x8\x17=qX\x8a\xc\x19jX:j\x2\xec\x34\x18\x3\x31R\xbc\x35\xe7" "\x11\xf0\x33um\x80=\xdf\xa6z\x10>A\xbdT\xf8\xcc\xa2R\x83\x8~j\xee\xb5>\xfa@\xceo" "\x11\xc0S\\\xf0scO\xe0\xb~\x17\xd7q|\x9e\xb7\x8cKB\xb3\xda\xc3\x98U\x93\x1e\x89\x36" "\xd1V\xac\ry\xdb\x34\xc9Z\x84\xcd\xfa\xcc]~\x10J\xb8\xbfV\xd6<\x8d|\xbb\x66\xa8\xa2" "N\x93\xb0-Y{\x16\xe6\x87\xbd\x30\xf1\xc3\x42\\\x41\\\x17s2v7\xff\xebL\x2\xcb\r]\xf5" "\xd8\xf5\xb0\xfd\x85\x7f\xabG\x96\x44 \xb7\xa7\xd2\x66sv\x91,\x4\xd4\x8c\xc3;\x17" "x\x16\xe8;\xff\xbcz\xda}\xcf\xfcL\x17\xee\xf1%\xc9\x8eS&\xc4\x94\x90\xde\xf7\xb1" "\x88Og)2\xba;\xacU\x1j\xe0\x65\x95\xfb\xd6\x1a\xee\x42\x81\x17\x1dqm\xd7\xba/<\xde" "\xc5\x92\x62\x84r\xfe\xc0K\xd0\x12\x43Ml\xe8\xd1\x1e\xf2WVN\xa7\x11\xfaNq\xf0\x64" "\xaa\xef\xe9\xce\x41G\xa9\xcd\x1cO\x12\x14^G \xcb\x36\x96\xb1\xc1\xfb\x0\xfc\x87" "T\x96 \xc9\x88\x8d\xe3\xbd\xb4\xeeR\xd9\xb8v\x96\x1P3i7?\x9a\x9b\x33\xba\xb4\xc9" "t{V\xa0\xb3V\xe9; \x81\xb4\x32\xbe\\nG62\xcd\xdc\xd2\xc2\xc7\xc4O\x87\xebJ\x17\x46" "\xbe \x9cSp_\x4\x87h\x9d\xa1\x35\xeb\xd2\x9cS\x9c;\x9c-\xcb\xb5\x33(\xb3\x11J\xf" "\xc9r)\xef\x94~\xaap\x11\xe9\\H\xe9\x64}{\x10\x65\x13\xfeW\xfb\x0\x5-\x13\xf3Y\xe4" "\x7\x9\xd4+\x9d\x7O\x17\xbb\x33\xb7\xda\x14\xb\xed~\xf8\xde\xb7\xe1\xce\xff\xd7U" "\x89\x91\xe2\x86>\xf4\x43i\x1fi\xf1\xee\xfa\xac\x64vb\xac\xda\xe\xbc\x8a\xa7\xcf" "\xeek!\xb3\xceq\"\xc8\xc6\x11\x98\xfd\xf9\xc\x1b\xb9\x43(\xfc\xc8\x96\xc4\xbb\xe6" "\xe0\xa7\x1d\xa4\x41XB\xc0\xa0\xddo\xac\xbbK\r\x9cj\xb5H\x91\x8b=\x97\x90_Xu\xbd" "51\xb2\xb5\xf0\xee\xf6!\xb8\x10\x64\xd2\xfaQ\x17\xb6\xfet\x8c\xbara\x1f\x64\x61\xc0" "\x8a\x9d\xd5ni\x86\x9e\x96[@\xe4/Q\x5\x62\x9b\x1b\x89 \x99\xd4\x87\xd9\xf8\xe1\x16" "Xz\"\xebNCs!\xd8\xe5\xc9\x9b\xa8\x93\x8dO\xc1\x1d\x89\x86\x10\x8f\xa0\x9a\xd1\xad" "k\xde\x1a\xc5\xb3\xd6\x80^\x93\xdc\xa2\x83o\x98\xaf\xe8\xa1\x13\x37\x84\x95\xca\xb6" "x\xa2\xdd=h\x89\xf2\xa9\x66\xd5\x80\xb9\x1e\x15$W\xba\xe\xa2\xed\x31\x95G\xd3\x36" "\x84<\xf0Oz\xb8\xe7\x1a\xe7\xca\x1a\x9f\x9d\xb0\xd7\xf0\x87\xab\x0\xaa\xc5\x85\x19" "\xed\xb2NK\x9b\x35\xc0\x62\xc2%&,,|-p\xe2\xb1\x1d\xb4\xc5\x16'm\xb5\x1c\x9b\x66\x64" "\xc6|\xa3\x9\xc6\xdaw|\xc\x8\x88\x1c\xc\xf\xadl\x85G)/\x4\x42U\xa9\xd2\xddT\x6U\xe4" "\xaa\x43v\xca\xb\x33O(\xda\xfaG\xaePn}\xfc\x9b\xdf\x91G\xf\x1fPF\xea\x97/em\xc7\xf5" "q\xc6\xe\xd8\x12\x9e\xce\xeZ\xf5x\x5\xa1\xf9\x65\xda\xd8|\x8e\x1e\xbaO\xec\xad\x1f" "o2Y\x16X\xf4\x66j\xfe\x30\xbc\xdf~dV|\x9d\x80\xd1\x82\x9d\xff;\xa3\x97;\xb3\xeb\x18" "}`\xad\xbf\xb0?G5[\xe2\xb5L\xe4\x95\xe3\xbe\x43\x84T\x11\xa1\xa6\xbf\xc1\x7\xbf\x8b" "+K\x9a\xf6\xfb\x33\x63\xc]\x15\xe9\x1b\xa1K\xa1\xe9)\x15-1\x9cV'zv\xb\x85]e\xa6z" "\x84\xb8\xa5\xfd\x31l\xe7y\x8dt~\xb9K\x0\xfct\x9e\xea\x1d=\xee\x8\xc0\"\x8e\x84." "\xcb\x99\x6\x0\x8\xf4\xe7HZfk6\xce\xc2/\xcf\x9b\xe9\xdeR\x9b\xb4XXe|\xaa\x2RV\xb6" "\x7\x9e\xffT\x7\xda\xc2\x19\xc4P>\"\xce[\x0\xeat'I\x90\x97\xd8\x6\xb4(m!\x14\x94" "\xf3\xff\x13xG}\xe\x8e\xb0\x80\x33\x8cq\xab\x89\xd5\xfb\x9c\x92p\xda\x3j\xfe\x82" "{\xed\x8d)\xa0)\x88\xe7\x86\x94\xf4\xd0\xcb>\xad\x82\x43]2\xc7t5\xc9\xdfS\xde\x5" "\xe1_^D\x1b\xcf\xb2& \x80\xe6\xceS\x0\x32\xe7\xa7\x84Z\xf2\xdb)\x8a\xa8\xf8\x17\xd1" "\x1a\x19\x37\x39G\r$\x88\xca\xb2\x83\x81qKJ\xb0\xb3\xf3\xcf\x38N\x3<\xdeV\xe9x\xaf" "O>\xf7G\xbj\xa8\xf3\xe6x\x4\xde\x83i\xf1\xaa\xc0k\x13\xd7}\xce\xe4\xa3%\xb6\xec\xba" "\"\xf1?iZ\xcc\x1a\xbc\x34\xf5~\xed\x15\xa6\x95\xb5\xcb^_2\xa7\xd1\x1\xcd\xb5\xe1" "\x13\xff\xf7\x8f\xca\x36In\xe3\xe\xb7\x43\x98\xd1\x43\xa4\x32\x9bJg\xff\x94V}\xd3" "\xf9\xb3\xd4\xf4-\x86\x64\xf5\x66\x32\x0L\xd3\xf8\x8a\x8f\x8e\xc5\x87W'\xc3\xe3\x63" "\x87\x62\xe6X\xfc\x99QQ*\xc3\xe8#\xac\xee\xc4\x42\xachG\xf2\xb3)\x1d\xe6\xc8Wh\xf2" "\x1f,\xcc\x15\x1eJ\xfe\x9e|M>V[\x8\xf0\xa3\xa0\x92\x94~\xd3\xce\x9e\x94\x5\xaf\xee" "\x95\x11\xe1\xdb\xd7\xb7\xa8\x30,d\x8f\x98\xec\xad\x8c\x87\x9c\xb7\x45\xa4;\xffW" "\xfe\xea&\x19\x90\x41z\xec@\xcf\x8a\xe9\x19\x1e\xe4\xa5O\xbaPe\x13\xbbI\x18&l\x94" "\xf7\xa2\x1dM\xa6\x88\xdcLKi\xb2\xf0\x12\xf0\xe2S\xba\xae\x61\x91T\xb0\x9f\xa9;\x7" "CY\xd9R~\xfc\xd3\x8bzc\xfa\xfc\x34\xc6\xe5\x0\xb8\xa3\x90>Z\xfa`yC\xa9\xbc-E(\xc5" "n\xed%<\x8cy\x95sj\x1fH\x95\xcf\xd3" "\x2\xebU\"\xce\xf9\xa3\xd1iy\xd5\xcd\x38\x46z\xa9\xc9\xb7\x94\x82n~\xf5\xb\xce\xc5" "\xa2\x86h;O^Z\xfb\xe0\x97[E\xc4\x8fP=\xe0K\x15\xf8\x6\xf4\x7\xdc\xee\x8b)\\\xa5\xf6" "\xfl\x90|\x0\xb1yW\xe2#>o\xe3\xc1\x61\x31\xff*\xf:\xdb|\x6x|s\xb4^\xda<\xf7\xe8\xd8" "S\xcd\xa7\xce\xa4\xd5\xe7Zb\xfgj\xbfQ~0\xfcR\xf9}\xaeM\xf5\xad\xf6\x93\xd6\xd4\xc3" "\xe9\xbe\x9\xfxM|\xacr\xc6\xde\x17_\xe4]\xeb\xdb\x7\x1\x81\x89\x0\xf2Q\x90]\xe1\xd2" "\xf9\x91\xd6\xfe\x87$\x8d\xf0\xf7\xff\x46\xfbXMo\xe1\x8d\xbe]@#\x1dI\xfe\xc6\x85" "\x1f\x35mh\xf0?.\x1\xe5\xe\xe6\x15^\x9bZ\x1f\x80\xd0%\xb7\xa7\x65i\xb5\x18\xb4\xa3" "\xc4g2\xd9\xae<8\xda?6C\xdd\xc6\x35%T\xf0v\xe5\xc1~e\xa9-#O\xa8\xa5\x9f\xc0\n~GV" "uQ\xec\xab\xd7\x38\x2\x80\x96\x16\xbe\xdaZ\xeb\xbf\x35\xda\x9f\xd2\xce\x9cH;f\x1" ")\xfcv\x17\xbd\xc7\x89\x6\n\xb6%\xef\x38\x9\xf4\x34\xac\xc1\xc5\xf5\xb7\x6\xfej\xd8" "\xad;\xab\x38\xc7M\xees$C9:=b\x96\xd6\x8c\xf8\x1\x0\x9\x9\xa0\xc\xda\xed(\xca\x38" "CV#_\x85mh\xa1\x19\xdd\xf1\xcb\x41o\xa9\x8\xc2}\xf5\xda\xe0\x93\xab\x5k(\xc6\xc0" "A\xb2\x9e\xe5!\x87\x9eO08[\x9f\x8dj\xe7?\xf0j\x9\xae\xd4\xf3\x8d\xa9\x84\xfd\x1b" "\x10<\xbf\x89\xdf\xfc\xba\xad\xfe\x1a\xf8\x35\xb7\xbb\x63\x7fj,\xe1\x1e\x14\xe5\x98" "\x13\xfb\xc\xdf\xc9\xa3@\xea\xc6\x82\xd0~\x9b\x80wF\xc1\xe8k\xb5\xa6\x39 \xc8\xa4" "Lni\xc8\x1d\xc3\xb5\x86:T;)|\xfd\x14WM4 \xf2]\xef\xe6\xe3\x86`\xd4\x15\xa8/\x1d\x1b" "\xa2\xdd\x85\x9d\x0\xdc\x19\xc1\xf8;\x6\xfd\xa0\x44\xc9\xa3\xc4#\xd4\x37oD\r\n\xc2" "6ON\xaf\x61$\xf2M*\xd6\x35\x2\x87\xee\xbe\x31\xc0)\x89Je\xbe\xc8\x9c\x36&7~\x13\x16" "%\x1f\xd3\x19?\xcc$\xaaq\xf8\xc1\x94$c\x13\xd5\x65\x43\x0\x8e.\xe3\xe1\xecZ=\x87" "\xbb\xa7p\xfa\xe7\x7fq\xb4Y\xffKo\xf2;\xd7\xaa\xe5\xe2r\x1f\xdd\xc4\x34\xa7\x14!" "n\xfb\xeb\xe6\xefk\xb2\xde\xe8\x85=\x17\xf\xff\xc4\x64\xb9\x17\x14yi\xef\x83\x19" ">C\x1fTY\x1bN\xeb\x1a\xb0\xae\x42\x95\xaa\x9f,>\x94k;\xd5y\x88W\x8\x1f\xe\xf2\xf1" "\xb5\xa8~\x1f&.\x2\x16\x4\x18\xd7\x18\xed!Zg{A\xef\xa3\x89-\x80\x89\xbb\x39\x94\xad" "c\xd6(ki\xdfI\xc2\xd5\xc5\x43\xc8\x33\xbf\xc8\xf7\xbf\xb7\xb4\xdb\xc1\x38" "\x9N\xc4T\xae?>\xac\xb0v6\x99\xd8\xfc\xb0\x1c\xe0\x0o\xfd\x3\xeb\x81N\xbb\xc2\x9c" "\xb0\\\xf8\x9c\\l\xbc\x9d\xa1\x13\xb9Hc\x84\\\x36\x63yG\x9a\xbb\xe6\x97\x98>O\x14" "F>\xe4+ j\xe7\xb7\xae\xb0\xf7\x9c\xfc\x91\xbdv\x2\x37m\x8ap\xe2\xa3\x9b\xccWd\xdc" "\xeb\xa3\xd0H\xb7\xea\x6 \x80\xf3\x17\x6\xee\xf2\xf2\x18\xdf\x97\xf\x12<\x8e\x13" "\xb1\xfe'b\xe8\x34\xbc\x96\x15V\xbf\x99\n\x44\xed\x98IO\x80,NK\x8b@\xf\xd1\x35\x7f" "q\xad\xab\xe9/\x9\x11\x6\x9e\xfc\xbc\x13\x6\x9b\xe5\x17\x18\xb0\xbdH\x88V>>=}\xc9" "\xf3\x41_\xf7\x16\x41\xb\xc0n%\xeb\x8fkX]\xf2\x10\x9a\xe2\xd8\xd9\xa9\x9ci\xc9q\xdd" "\n\xc0\xaa\x31\xf2\x7f\xd0\x12\x8d\xec\x42\xd9\xc7\x64\x9a\xe9JIq\xc4\xcc\x0\x66" "\x6\xa6\x93\xc1\xcb\xc8\xca\x61\\\x31+p\xd5\xdf\xdcx\x8a\x91\xb9\xae\x96_a\xf\xea" "\xce\x99\x82\xb1\xaa+\xf7,B?\x6\x1e\xfb\x61\xffG\xebXH\x0i\xa1\xbc\x1\x42\x8a)\xf7" "+?/\xd5\x8b\xba\n\xe2Wg_\x14\x63\xab\xff\x37\xae\xcdi\x18 \x2\xd4\x36\x34\x61VzG" "o2\x9d\x10\x38\xb4\x11-1KuM\x95g\x15`\xff[\xaa\x66\xfe\x44\x4\xab\xbb\xb5\xfd\x97" "\x6\xb1#jDG\xd0\xe2 \xe\x45hLc\x93u\xa1\xe\xcc\x37\x0\x8d^\x2w=\x8b?\x5\xcf\x86\xec" "\x8aw\x9d&J4\x19\xee\xa6\x3\x13\n\x45\x85\x39%^E\xc4'p^$.\x1\xc0\x44[VuZ(Y\x8f\x8c" "\xd5\x15\xcf\xda%\xdeH\xf4vx\xed\x32\xef\xa2\xe3\xbe#\xe8\x87y\xdd\x5\x33s\xe2\r" "\x1c\xffV.x\x8\x5\xa8z\x12\xc3\x1b\xb1\xd9qK\x92\xe1\x80\xae K\x99\xa9y\x8f\x9\xc" "\x81\xd9\x91\xd5\x65\x3\x99\xa1\x43\xb2\xb\xc4\x38l{\x9a\xef\xe2\x33\xec{\xd4\x8b" "\r\xdc=&\xc9\x5gh&\xfb\x35*\x88\xe9\x81X ~p-2rj F*\x10t\xd0\x9b\x37\x82\x9c\xe\xdc" "\xa1\xe4\x99U\xdd\x13\xab\x30\x45M\xea\xb2\xf6\\~<\xb4\xb5ni`\xbeS\xd6\x93\x7f~c" "\xa0\x80\xdf\xde\xfe\xde\xce\xa0\xd8\x8e\xd6\xca\x8a\xb8\x4\x66\xe3\xf4\x65U\xbd" "b\x8f\xfch\xc5^a\xe9\xd6\xd7\x89\x66\x30\xb4\xea@\x8a\xaa\x63\xf1\xca\x8\x41Iy\xdc" "2\xa1\x99\xb3\x43\xae\x99g\xb2\xb3\x97\xdc\xc4}\xe3\xbe\xfc\xc\xb8\x85\xc1\xf8J\xac" "\xfa^g\xf9$\xedr\xee\x17\xaa\x62\xa4\x83\x7fm+\x4y\x83\xc\x1f\xa4n\xac\xfe\xfdI\x5" " \xa1\xc8\x89\x36\xfc|\xb9\xf2\x38g\x3\xf7\x12\xe4WY\xbf\x6\xb4\x3!\xe2\xd0#\xae" "@\xe1.\xeI\x6\xc3\x87\xd8\xee\x95O\xe3\xc6\x35q\xdd\x9et\x11\xc\x6\xb3\xa5N\x19\x38" "\xb5p5\xd7\xc6V\x8a?\xbd\xc5\xc9gb\xec\\\xa3x9K\xe9\x87\xbbkP)lJR\x89\x7f\x87-\xfe" "\x8a\xb4\xd3\x84`h\xac\xc7W\xb6\x11\x9f\xdf\xb8\xd6\x8d\xaa#\x91rU\xfb\xcc\xc4mj" "\xd6\xf\xc5\xcehj\xa1O\xa3\x8d\rk\x9c\xc6\x11\xe3\xe3\xf7\xe8q\xf2\xc4\x62\x46\x31" "\xe6Pn\xcc\x8by\x4\xef\xbe\xb2\xdc\xf1\x81\x1c\x87\xf5\x12\xfbhS\x8d^\xc0\xdf\xea" "J\xf4{(\xcb\xc4>+\xc4\xbc\xcc\x85\xe\xe9\xc0\xcb\x1b\x80\xc4\x99i\xf2w\x9bL\xf6\x64" "\xef\xc7\xf8\x61\xbfs\xc2s\n\xc2\xeb d\xac$\xf/;\x86m\x14\xe3ml\xbd\xcb\x97\x3\xd3" "3\x9d\xe0@D\xb5O\xd8UD\xa5\x8a\r)\x8e\xf\xbb}\xf\xa3\x5\x39\xd4^Fl9N(\xa4\xb3\xf1" "\xadn\x16^\x16\xfe\x91\xf2J\xb6|\x9f\xed+p1\xa4\xf0\xd0/\xa8\xd8\xb4\xe3-\xa0\xc3" "w<\x92;G\xe8\xd1oN\xc5v'\x8f\xee\x14\xf4\x0vXj\xa4\xab\x91\x81\x8d$E\xfdZ]\xf1\x84" "\xfc\x30@%c\x83-|\xa7Ih\xe0\xf5}s\x98\x83\x1c\xc1\x9d\x91\x90\xc8\xe8\x65\x63n\\" "\xfauz\x13\xac\x63?\xd8\xb7\xddo\x1a\x7f\x66>q\x12\x90\x31\x36\xf7\x85\xad\xd7\x12" "!\xc2T\x19\x84\xb9\x8d\"\x15\x9c\xa2\x45| \xe0\xa0s\xeb\xe7\xf9\xb9yj\xf5 \xe8\xef\xba\xe6" "\x98\xbb\x8b}\xb2\xe9\xc6U5GN\xeb\xa2W*\xf5\xadU\xf2J\x99\x65\x1a\xfa\rw]Z\"\x97" "\xeb\x93\x83^\xc0l\xa9\xf7\xa8\x42\xf4\x15\x9c\x0?\xdf\xed\x37mv\x90\xf2\x5\x8c\x9" "pm\nc\xa8u\xa4\x96\x94pg\xec\x4\xca)\xce\xb8\xb5\x62\xdfO(\x9fg\xb6\x1a\xa1\x16\x46" "\xb2\x81\x14\x11\x19\xcf\x2X\x98Z\x9f\xcb-#pO\xbq!\xb9\x18\xc7\xe6\x92\x83\x4\xdd" "\x8f`;\xa6o\xac\x82\xd2S\xd8%Rg\xc8\xf0\x1h\xea]\xc9\n\xe4\xc9t\xf9\xc0I\x8fj\xe9" "u\xcc\x33\xd6}\x8c\x8c#\xe5\xa6 \xf4\xfd\x87\xfd%<|&@\x13\x9b\xad\xad\xd6\xd4\xde" "\xe7\xfb\xf4\xc0\x8f\xa0\x96\x61\xa6.FO\xe6SR\xf5nx.\xce\xf0\x0\xf6k\xee\xc2\xd4" "D5\x9\xc6\x92\x83\xbd(r>cEY7\xd8\x86\x9d\x44\x97\xcf\xd9\x9S\xf4\xd8\x96\xc7}A:\xe7" "\xbn.\x8\x1f\xe1\x8eZ\x9b\xe1\xfbrmH\xc5\x1c/LIvUI\x19xK\xd5Y\xd6\xf1;\xa9\xff\xf3" "BP\xda\xa5\xcb\x35\xfev\\\x88\x0[\xad'HTt?\xc7\x9c\x10#<\xf1M\xeb\xb\xe4\xe1.\x8b" "\xe\xf6\x1c\xcd\x18\xc7\xebIu!lm\xf3\x9e\x82\xa6S\xdd\x13G5\xb4\x62.\x1e\xe3\x1d" "\xeem\x80\x44\xc2<\x18\x80K\xa0\x94\xccl7\xea\x1c\xce\xb9%\x65,\x9\x13\x85)\x98\x10" "\x8aJ\x1ck6\x15w\xe2\\\xc\xea\xa5s_\xc2\x61Ho\xb0\xeb\xa5-\x95\xcw\n\x4\xa2\r\x31" "\xe3p\xc9\xb5\x8\x1r\xfb\x96\xfb\xb2\x3`\xc6+\xf8\x14(|'\xd6+\x15L\xcf\xd9\xae\xcf" "\xc9\xfb\xbJ\xdbj\xca\xd0R\xc\xd4\xb6/\x10\x66Y\xc7/>\xac\x43\xb7\x11\xfc\xa5w^Y" "\xea\x3\xd0/$!\xf9\x1b\x90\xaa+\xca\xcc\xee\x12\xa9\xe5\xfe\x32p\xb0\x1e,\x85\x8e" "|-\xf\x10\xec\x39\xdd\xc2\xf5)1\x90\xb6\xd7\xb\xe3}\xad\xaeoK\xabl$8#\"\n\xcc\xfd" ".(\xcc\xb6Y/2V\x91\xf2\xd2\xf4\x84\x9c\x16\xd6s\x6\xda\x8d \x18\xb4\xa7;\xeaM7;\xca" "\x12\x96\xd5%\xa5\xd1\x41%\x14\xe9\x5 =\xb8X\xbc=\xc6t\xb7\xf0W\xf1*\xf2\x99\n\xfe" "M5\xd0\xce\xbf\x82};c\x14kA%\x7f_H\xc6\x33XZi\x12\\\xe5\xaf\xb2\x36\xd3T\x94\xf3" "\xff\xef\xb0\xc2Q+H\x6\x37\xdf\x3\xce\x1fU\xec\x65\x39\x8f\xfb\x16\x30m\x16\"U\x88" "\x98\x1f\x41\x6\xfe\xfbM5i\xf8[\x92\xdc\x90\x88x\xc8\xcd\xc\x87K=3\x9c\xb2\xa7{D" "HA\x18\x9c|\x94`Zw\x19\xc7\xc1h\x9d\x17\xa8\x8a\x65\xdd~\xb4L#\xfb\xb2t\xfe\xd9Z" "nDg\xd1~\x8ftK\x92\x96\x1b-\xbd{\xc7\x8a\x7T\xb5\xde=\n\x9bR\x13\xac\x90\xa1\xb\xf9\x1cV\x16\x94\xdd" "\xfb\x80\xcd\x99\xb7\xff\xbf%\xd9\x9e\xde!\x82]\xdf:-\x8d \xc8\xa1\xe6\xbc\xc9\x93" "\x14\x61>\x1b\xfd\xa2|\xc2\xfc\xa6\x96\x0\x9\xf8!\xd2\xe0\xa9\x86\x9b\xca,s\x93\xb1" "\x91\x46\x9\xdanZ\xde\xd7\x1a\x8b\xf0\x87\xd8\x9d\xb8\xd6\xe0\x8{\x8T%\xf6W\xb9\x85" "\xad\xcdt\x93]\xff-\xa1__\xf9\xdf\xa6\xaa\x8V\x1c\xe5\xdbw\x89\xa8\x87\x9a\xbe^}" "\x4\xe9;z?+\xce\xe4\xd6Qx\x9b \xc1\xde\n\xb8\xa9\xd8\xb2_\xd5\x38\xf1KI\xe4]\xb8" "g\x9\xc5\xfb]\x94?\xe2\xb3\xe6M\x9an\xfe\x42U\xe7\xf5=\xf4\xd7\x82:|\xa6\xf6\xb5" "\xce\xac\xb5\x92\xe0]\xe7\x18\x8d\x8a\xc4\xd2&1\xdd\x9dKU\xd3\x30\x8cWsK9\xe0\xd3" "\xbb\r\xe6\x39)\\\x87;MG\xf0\xcc\xf2\xecKi\x2/\x89\xa4\x87kp\x5\x8d\xb\xb\xf9\xfe" "|\xcf\xc1\x11\xf6\xfe\x9b]\x9c\xaf\xe8\xec\x35\x8bw\xcb\xc8'\xc6\xf6\xb`\x15\x96" ",\x80\xb9\xc9\xbf( \xfak\xdb\xd6Z\xf5\xde;;\xab\xfal^\xc8\x1e\xcd\x84o\xae\x6s\xb0" "\xenT*\xf4\x4\x96\x81\xd7\xb1\x85\xac;|\xc9U?\xfc\xfc\xa8\x37\xe5\xb1~\xf3\xe2&\x8f" "\xe2\xd3\xc3\x8c@\x8c\x99tg\x91\x1e\xc5xR\x1V\x16\x1d\xb8\xa3Z+e\xa7%\x19\xdd\x94" "\xb7\xab\xb8\xe7^L\x84\xdd\x63\xc7\x9c\xc0V\x1f\x9a+\xe6z\xef\x39R\x10R\xd7J\x94" "\xf4G\xa9qu\xe1\x46\xd4=km4\xe1\xa4\xed\x94\x45\xa9\x99i\x9b:\x1f\xdd\x39\xbf\x99" "\x82\x37\x65\xf7\x83\xf0.q 1$J\x9e\xd8\xf2#\x1ch\x91\x94q\xe0\xcb\x8!5\xe7X\xbd<" "\xc1W\xbf\xf2\xc0Z\x7f\x66\x9d\xfa\xeaK\xeb\xcb\x0\xa0\x9e'\xae\x95x\xbe(\x91%\xe4" "\xf9\x1\x61\xffq@\xff\xbc^\xab\x39\n\x9c\x44\xd1\xae%\xedHt\xcb\xc6\xd8}\xf7\x32" " o\x15\xaeM\xc7\xc2M\x18]\xe7\x8e\x1c\xaa\xab\xfd\xf3j\x1a\xa9\xa6\xc6\x9\x38\x39" "{\xef\xd3\xa1\xe #rV\x89\x81\x2\xdb\x46\xe1\xcax\xbb{j\xa0)8\x8a\xd0t\xe6\xaf\xe" "\xf2V\xe8\x95\xc5\x1a\x1c\xb1G\xfa\x8d\x8e.\xc2\xbe\x15\xdbo\xba\xef\xcb\xef\x9f" "}\xf0\x1e\xac\xa8\x96.-NZ\xfa\xc0\x36+[\x8b+\xa2\x99o\xcdoD\x1e%\xa6\xed\xb7\xb9" "Xe'\x88\xf5\xab\xf\x32|\x91\xe2\x65\xcd\x1c\x9dQ\xc1\x1c\xdc\xcfz\xb5\x82\x8bN\x98" "vn\x16\xaa\xeb\x41\xe8-2j\xed\xe2\x42{\xde\xcb\xfe\xfcu\xa4\r\x18\x35\x43\x93\xf1" "\xe4\xb0\xe7[\xf5\xd7|e\x9%\xaf\x93\xffs}\x9d\xc3\xc\xf7OW\x0\xc3\x37\x66\xbas\x1c" "\x8b\xc4\x8f(=\xe9\xad\"~\xb8\x8e'\x99\xc3H\x90\x14\xf8Qw\xc6\x99\x8b\xa7\xd6\x90" "\x87\xd7\xa7\x19\xe5\xe1\xb8\x7'0\x1t\x10\x94\xb3\x34\xd1\xb\x1c\xe5\xd9\x1a\xb1" "\xc7\x39\\\xc0\xd0\xa7\xe7Yr\xb\x1a\x8eU:\x9b~\xbaN:,\x9eO\xd3\x35\x66q\xbV\x9f\xdf" "\xfbs\xf3\xbcV.\xe9\x83\xd1=\xa0\xb3\xea\xdb\xe1\x35\x16\xdb\xdd\xce\x18Y\xd1y\xb0" "^c\x9f\xdd\xdb\x8\x0\xb]\xc3[\xb6\x8c<\x7\x9b\x16]m\xf2\xa2\xa1\xb7\x83\xf3\x6;\xa5" "\x9a\x93\xfaQp\xee\xfa\xfa)\x17\x44Y\xb3@45\x1e\x3m\xf4\xaf'\x94\x32\x97\x33/\xdb" "\x94\xa0\xd9n\x8[\xcd\x1a\x8f\x5\x88\x10\xe4\xe4\xf3\xc3S(\x14\x12\x3\xe7\x88\xd7" "\x1eh%\xc0\x80\x9b$m\xa9H%\xd2\xc8\xfe\xf1\xa9\x95\x37\x13\xa1\x62\xd8!S\x9a}Zt\xb1" "G!\x8c\x98}fN\xd4\xb6\xe1Xh{\xc4\xf\x1a\xbb\xe4\x88\xcc\xadl<\x93^V\xc0q/\xef\x63" "\xc\xfe\x46\xe9\xb2\x39\xe8\xf1{\xa9\xe2\xe8\x80\xcf\x39\xb6\x11\x81\xc3\xb6\xc9" "=f0\xcf\xe5xv\xc7\xed\x9f\x30\xcdL\xb1n\xfb\x8e\x90\xc5_\xe0\xf8Q[\xf7\x44*\xadu" "T\x81\\K\xe0\xf6{V{\x1c*.\xed\xd2\xd3(\xae\x14R\x8e!\xe2S\xc1\x99{\xa9\x17\xea\x9b" "b\x93\xf1\xbb\xdf\xfe\x99" "A[\xc4#\xadh\xee,\xdc:\xda\xd8\x1e-*\x9\x18\xf7\x87\xeb}F\x9\x9f\x86h\xc0$\xee\x85" "11\xd3rB\xce\x81}-I\xd7\xb1\x65\xb6\xfa\x1d$@C\x98\xb8\x84\x7\x64'\xaa\x42\x32]\x94" "\xb2\x63\xd5N\x93\xc2\xf2\xc\xf0\xe1Q\xc8\x62\xb0\xc1\xad\x15\x8b\xb7\x7f\xde`P}" "\xem\"\x14\xd8>\x91j\xb3\x84\xa4\xa0\xa9\xe7\x99\xc3\x39\x1Pr\x9d\x39P\x82\x2\x45" "\xce\x9\x45\x63\xce\xa5\x8exl\xdcx \xea\xb1\x41pR\xdb\xe3\xbbh\x86\xef\xea\x84\x39" "\x9f\xe7I\xab\x3\x9f\xa2\x91\xa0\xd0\xf0n~}\x1d\xacoU\x96+>s\xda\xed\x7\x63\xac\x30" "\xe3\xdb\x80\xd6\x34\xa5{\xd5\xb3\xa4\x44\xb9\x4\x9b\xf6\x39\x33\x31\x41(v\\\xca" "f\x94\x10h\x80\xce\xa6\x1fL\xb0\xb2\xc0\xed\x1d\x62\x80\x1e?ef\\\x11S]\xc6S\x1f\"" "l#E\x5\x8b\x9a\xda'GL \x80}\xc2gK\xb0\x84|\xb\xe9!\"0\xd7\xad.\xe5\xe2o\xe9\xf7\x9a" "\"R\xf2\x1b,7\x95\x17\xf3\xc4\xb7\xe7\x81\x35\xac#t\x7\xfb\xd4\x16\x41V\xc:\xd7`" "D0\r\xda\x61\x84\x31'\xaf#1L\xec\x80\xe3\xc1\xaf\xaa@\xa2\xd0r!\xf7\x9f#\xce\xfe" "\x83^]\x11>/W\r]\xbd\xf6&\x10\x0\x94\xb9|\xed}\x1d-\xa2\xcd\xef\xba\x16\x83\x9\xc9" "\x1b\x0\x1\x4\xaaw\xfd\x1bM\xed\\`\x82?P\x84\xfa\xc7\x39\x2\x1e\xa1+H\xd6\x33\xc0" "-\xea\xba\x42\x81~\x9a@\r\x1c\xc4_\x16[\x80\xb\xc3\x63\xfcHM\x87\xc5\xf4SW\xd0V\xec" "F\x10\x7\x19X-\x1f\xb0\x95s&\xe2W-\x8e\x9d\x8c\x5\xb1\x17xYiw\x83\x80\xae\xb6i\xa7" "\xfb\xf1\x81\xea\xc9\x39\xd1\x16wD\xa3\x8a\x1c(\xd7\x82\x86\xe7\xe7\x94\x95\xab\xba" "\x8dS\xa3/V\x12\xbb{z1\n\x9d\xcf\x2\x13\x9\xcd\xc8\x92\xeg\xc6\x89\xf8I\x8d\x1c\xc" "\xb3x\xec#q\xe9\xf1\xef\xc9\xe5v\x7f\xc7V\xc2\xbd\x95\xa3*\xd8U{?l\xb6\x85p\xed\x38" "\xcer.x=0\xc1\xb8s3\xda\xc9\x83\x12#sJ\xbaS \x7\xb0\xca\xeb&\xca\xa5\xf8\xb5\x1d" "\xb5\x39R\x10n\xbe\xb1-x\"\xdd\x34\x4\xe4\xc3g_\xce\xd9\x62\x8b\x1\xecoG\xc8\xc3" "\xee\xc\xa1\xb9wA<\xb4\xc4$\xa1w\x7q\xf4\x9e\x30\x44>\xdb\xd9-2\xf2\x7f\xe5\x8c\xd1" "\xe7%+\xa8\x9e.\x9f/\xa0\x1d\xe4\xfbT\xa0\x61<\x18\x87l\x8d\x9\xd5\xdb\x9d\x86\x92" "\x81\x9f\xb2\xf9\xccZU\xbc\xf3\x32\xb7[\xdd\x6\xf7p\x1b\xb0 \xa8\xf9\x38\xa4\x64" "g1v\x0\x90\xf0\xfe\xf9\x35\x8b\xeb\xf7\xa5\x8\xae\x8c!C.\x99\xb7\xf9\x9bX\xf9_\xc6" "\xe3\xcf\xb7\x35p\x17\x99\x9e\xc2\xc8\xef\x81\xf6\xdc\xff\xbf\x30\xab\xbe\x42\xe1" "\x9d|\xb4>\xb6@6\xbb\xd7R\xc8'M\xce=\xb6;\xef\xf0\x11\x14T\xbd&+\xc5\x90\x1a\xb2" "3Eg\x96\xf2\xab\x8d-\xeb)/\x7\xb6\x7\xb4I\xf3!D\xa7\x86\xe5\xcf\x90\xf\xd4\x3ib\xba" ".^\xb\x39^)+\x8a\x9m^\xd4\xb7\xa4\x1dgz\x93\xbbw\xe0\x8b\x39\xbaw\xa4mFSh\xdeN\xbe" "\xf8\x9e\x97\\\x81\xfc\xbe\xff\xd8\n\xc1\xe7\x1\xa4\x16\xe5\x66V*\xdc\x89\xcfi\x8c" "a\xb8\xad\xbaz\x8d:\xb0|\x92\xe5x\x9eK'\xcd\xc7\xd2\xe8\xa5\xf0\xbe\xf7\x98i\xf\xf" "\x9a\x45\x31&\x1d_\xdc%\xe7\x92\xa5[\xa2\xb7.\xc0\x9\x96\xb4\x0o;vlk\x89\x96\xf\xc4" "\xc3\xd9\xe7\xf7\xf3\xa7}\xdb\xea\x36\xe5\x13\xdf\x8dWo\xec\x8bG\x3\x1c/\x90\x14" "\xbf\xbbJ\xbd\x91\xd4\x66\xaa\x89\xfcR\x1eNa\xcd\xaep:\x19\xa0\x2\x1f\x33\xcc\x31" "\x9b\xb7\x36\x34$;\x1c\xa4\x8d\x38\x3\xd0\xa3\xb0Z\x82\xbU\xfay\x80\x17\xbf\xf\xdd" "\x13\x45\xb\xfc\xb2\xd6\x8b\x99\x9b\x92SJ\xaf\xc\x14(\xe\x1aT\xf4k]\xd0y\xdd\xae" "\xc9w\x81\xf2\x86\xabx\x99\xa1\x2JF\x3\x3U\x5s\xd7\xa4\xb4}\xfc\x82(\xbb\x1e\x12" "\xa8\x86\xe3\x31\xdb\xc6\x34\x7\xc1K\xab\x9a\xff\x81\xcb%\xcc\xc8'M8\xd7\x39!\xf3" "\xa8\xd5\xa7\xf3\xaf\x38\x93\x65zg\xa5:*<0\x18_\x89\xba\x99*:?\xa8\x13Z\xb0u\xeb" "\xc8\xb8\xcf\x34%\xceH\xf5\x42g\xfe[\x9d\x1a\x81T\x15w\x9a\x92\x8c\x8a\x7f\x7f\xc6" "s=\xb4Z\xf1;\xa4Wb\xb1\xc\xe8\xd1\xb3\x36\x8f\xaf\xd4\xbb\x30\x1f\x95)iRLfo\x11\xb0" "\x0\x90\xd1\xb8\xfd\xa5\xaa\xbc'\x8c\x38\xd9\xf4\x1c\x61\x62&\xac\x46t\x90y\xefV" "g\xfa\xbf\x1f`D\x99j\x9X\xf4\x14\xea\xbd\xdc\x8b\xa9Pw\xb\xdc\x9c\xb6%\x9\xd9\xb" "\r!n\x14>Q\xf8\xbf\x7\xc5\xca\x19\xb0\xb\x8e\\\x46\x31Vs\xf0\xd1\x11\xc0g\x5\x9c" "\x87\x61\xad\xdb\x85\x36\xdd//e\x81\xae_\xc3\xda\xf2>\xd3h`qC\xb2\x9eX\xc9\xb8\x66" "V\x12\x35=Y\xbb\x15R\xef\x1d\xdf\x11\xa5P\x8b\xc2\x1bm\xec\x1b\xcb\xd5\xae\xf8g\xa6" "E\xf9\x80\xb5\x9a\x98\xfa\xbc\xc9`H\x8e[$\x3\xf9\x84+\x9!\x1c\xe1i\x19|\xe\x81\xc4" ">\xdbS\x91\x81W\xa1\xf7p\xb5\xf3\xe5?;\x8f\xb9\x8a\xdf\x63{\x94\x1b\xee\xb4\xc5\x96" "\x0M\xf1\xba\x32\xa5\x11\xb7\x9a\xfd\xa8 \x8cS\xc0H\x5\x1d{\x81\x38\x91\xfcjv\x90" "H\x2\xcb\x8e`\xe8\x87q-\xa9\xe0\xb9\xfV\xea\"\xd2\xf5\x99\x34IL\xe0T4C\x88T\x5\x18" "\r\x86\x97\xe2/\xd4P\x86\xf5\x15\xfdm/\xfe\x87\x36.\xf7\xa7\xe5\xc\xc1z\xc4\x38\xc9" "\x83J\x85\xc9\xf4\x82\xe2\x17_\xc0\x16H\xeai\xd3qv\xa0h\x2\x9c\xcfR\xa1\xb3\x94~" "J\x96\xdb\x43\xd6\xaa\xf0r\x8b\xeb\xc2\x3\xb3\xb9he'Y\x5r\xc2\xe4^\xb\xea\x33\"Q" "GW\xf8s\xa1\xb1\x8a\xf5\xb1\xf\xcb\x9c\xaf\x17\xa7\x45\x10\xdd\x62\xde(V!\x14\xc" "\xcc\x9b\xa0\xe2\xd9%\xcc\x35&\x19\xef\xa5_\x1c\xc8~G\x98h&\x90\xd6\xee`\x86\x1\x31" "\xd5&\x99\xaeHU[\xa8V\xb8NSp=\x0\x9c\xd2\x10G:\xfe\xcd?\x1a\x8fwe\xda\xf8\x8a=\x12" "\xd6\xb8\xa2\x7f\xdb\xb8\xd1\xc6\xdbu\xd8kX\x8b\x1bg\xc2L\x89k*#\x9d\x65\x61\x39" "\xbf\xc2\x9aO\xff\x8a\x1d\x8#twwU\xa7{G\xb1\x1c\x9a\xb1M\xad%\x33G\x7f\xd4\xe6\x9a" "\xfb#\xc6\xfcg~><\xa3\xa9\xf4\xa0}Q\x89^:L\xcaWg\x9bG\x8c\xe7\x16\x8e\x8n\xa2\xf8" "$\xd9+\x8b\x98~LW\xf8\xc4\"\x61{\xe2\x9c\x1d\xcd\xd0\xed\x8d\xc2\x1d\x9c\xc6\xf3" "O\xd6\xd4\xcc\xfa\xde>;\xbf\xb4\xc\xe7-\xae\xb0\xb4K\x4\xa2\xee\x1fu\xa1J\xa0\x46" "%\xb4\xf1\xdb\xe8\x61\xbd\x45}\x17O\xcb\x0s\xfa\x32'F\xa1\x9c\xbf\x1bH\x10\xccrB" "\x6~D\xd5\xd1PCo\x91:d\xaf\xedG\x5\x36#\x99\x8cn\xb0U\xc2X\xab\x16I\x95\xfa\xa5\x17" "\x80\x8a\x13\xf1t\xd5\x9e\xbf\x92;}\xb2\x0z:L\xed\x9dm\xcfNX\x85\x93\x8m\xfk&\x15" "a\xe6\xdf\xfa\xcf\x61r\x91<\x8e\x13\x96\x92\xb\x62\xf1\xe0\x80\xc0U\x3\x87#\x84\xc1" "\xf3\x64V3\x8d\x63\xf8M%\xed\xbcM\xb9\x88\x9f\xbf<\xb5Y\xef\xe2\xc4\xdb\xcdk4\xe5" "\xd1\n\xb5\x91\xaa\x98\xbfU\x9b\xf3\x87\xb8\xaa\x39\xab\xd8:\r\xd0\xad\xac\x17\xe5" "\xeX\xa7J\xbb\xf7\xfch\xb1qD\xc1\xa5g\x1e\x96\xf9\xc6;$\xc8w\xa8|\xa1\x94;\xd9\xf9" "p-\x87\xea<\xfa\x64\x18\xceQ\xf0]\x9d\xc\xc6_\xb9\n\x1c\xbbL\x16\x83\x86\xac\xe8" "c\xae\xc9\x46Q\xa9\xa7\xc5V\xf3\x62\xbu\nl\x92\x46S\xae\xb9u{\x94\x32\xb9\x9bN\x9f" "^x\x97\xf1\x85riv\xd5\xce\x34\xff\xb5\xfa\xb6\x13\xc1~,\xd3\x30l\x1d\xda\xd4S1\xa8" "y\xf3R\x14\x17W\x13\xab\xce\xa9\xf8uN\xe0$0u1\x5\x3j\x1b\xcf\xea\xecp\xb6\x18\x9c" "\xd5\x46\xd3<\xc\x8dn\x94Y\x96z\xeWG\xe\x46\xc1\"t\xe8\x15\x9e\xad\x30\x83\xf4?b" "\x88>\xe9\xb1\x97\xddY\xc5\xc\xa8\x83(\x1b\xb4\xfx\x83\x9fH\xbe\x35\x32\x66\r\xf4" "\xa9\xd7\xf2]'\x2\xe4{\xe4\xe0\xde\x1b\x9a\xfet_\xdd\x97\xd5\"\xd9\x42z\xe0**r\xf1" "\x7fx%>>9\xb4\xca\x39k%R\xbd\xc1\x88\x9a\xe4\xb2\xfajS\xb8\x33+\x99Ro\x8d\xc\xaa" "\x88\xae\xd3(\x8a\xbd\x39\xf3Q\xb4\"\xfd(i\xe6\x66\xecSo#9\xa5\xd5 \xdf\x82\x85\xcb" "\xb9w\x90[oe\xefYj|W\xd9j\xec;wP\xfb[\xe6W\x88\x1b,\xd0\xc7\xb1\x14\xc5\x9d`\xfe" "rJ\xbe\x9b\xf2\x81\xf2n\xab\xf1\x3P\x10\xa3\xbb\x1\x8c\xf1\xe9\xc6\x33\x4\x82\x97" "\xfbV\xb7\x1j\xd3\xeeQ\xf\xd0\x39\xedHE\xe2\xc5\x16\xba\xb4to\xf9\xe2\xc5\xfc\xdc" "\xfa\xb3\x37g\x1b\xeer\xbf{\xd1\x95i\x1a\x65y\x5[\x19g\x12_\xc8\xc4\xceV_\xdc\x11" "o\x80G\xff\x83*\x11-\xdc\x42P\xf5\xc8\xc3\x46\x4\x66\xc9\xf9\xe6\x15\x19\"\x33\xc1" "\x9b!%\xa7\x30wtE\xc9\x9epXt\"Fz\xb1\xf4\xba\xea\xa2=\xdf\xf4\n\x94\x10\x94\\o\xcb" "g\xa8\x62\xdf\x95\xe6\x66\x3\xf9\x45kW\x9dO\xc2\x8c\xab\xfd\xdf\xcemKy\x16.\x7\xb" "{\xe6Rn5P\xfeL\xd2 F\\\x15\x34ZY\x9b\x93\xb6J=\xef\xf6\x8bn\xff\x9c\xac\xe8|\xd0" "\x8c-\xb\x8b=\x95\x8c\x63\xb2\x13\x14>4\x9a\xef\x61\xc4\x9d\xe7N\xabI\xaf\xa0\xe2" "\xd4\xdaZ\xe8\xa9\xe4\x36\xbf\x9b\x1f\x8c\xeaZ\xa3qc\x8fL\xb9\xdd\xd7\x32\xfd\x8e" "\xa7\xf5\x8d\x45\xd8\xf8\xf8+\xf6\xca\x37L\xe9\xea\xa3\x93\xc1\x8e\x1c\xf4\xad]8" "r1\x18\xf0\x89\xfe\xd4\x13\xc3GG{\xe2\x4\x31/D\x8d\x82\x1a[\x5\xa1\xb6\xef\xb6J\x9a" "N\xb2\x34\xf0\xb3\xb4w\x85{`0\xdf\x0\x8a\x9b\xea\xc3Lq\xa1\x5\x89\x46\x17\x1a\xe9" "\xaa\xdf\x2\xafJ\xb3W\x86\x8cI\xce\x83x\xc8X\x1d\xe7\xb7~Q\xab,H\xf0\x31\xb5q|\x8d" "E\x9c\xf\xc3\xa4\xdb\xc6\xe3_~\x91`x\xbeLH\xda\xbe,\xb0\x0\x10|;\x84\x63\xb5k<\xe6" "f\xef\x89K\x6\x15 \xd1\x88=\xe4v\xab\x15\x32\x41I\x4\xc2v QF\xe0;\xfG{\x9dmr#\x8a" "\x16\xa6\x1b\x43\x43\xce\xd7S\x7f\xea\xfb\xed.eSx\x9t\xdb\xa8*\x10\x45\xa6\xcc\xf7" "\r\xee\xdb\x94\xad\xc6\x44u\xe3\xe2\xd5\xe7\xe3\x97\x2>,\x91v\x1a*\x92\xff\x1\x9e" "\xad\x83\xf4\x63\xd5\xec\x8d\xc9\xdb\xd5\xe6\x6\xe1\xf9\x93\x1fvA\x18\xc2#cK\xd4" "\xe0O\x9c\x1c:|\x1a\x65\x43{\xf\xb9\xef\x1e~\xeb\xf3@\xca\xb5\x13\xe3N\xbb\xaa\r" "\x90\x1a\xe3\xef\x7f\xa4\xef\xcc\xa3\xc\x35\n[G]!wu\x80\xfc\xa9$\xb4H\xb2h\xc8z/" "l.\xca\x1\x9e\xc3\xfe\xf8\x5\xdb/\x5\xb0\xbb\xc6k\xae}\x9f\x46\x8c\x19\x32\x9e\xbb" "P\x5?t\xf6t\x4\x15\xaf\xe4\x83w\xc8\x34U\x90 \x97\x1d\n\xdcl\xdfT\xf4\x34\xbc\xa3" "\x11_\x2\xe\x91|\x15`\x95\xf3\x90\xf1\x90V\xba\x37\xa0\x1\x99X\xbb\xb7\xbb\x87t\x81" "&\x94\xe5\x45W\xf0\xb4\xaa\x45\x9a\xfb\xbb\xa9\xf7\x42{\xb5{\xfdP\xeb\x85\xddTJ\xf0" ".WM6)\x5gX\xa3-\xcb\xc6\xd0n\xdfZ\xbc\x6\xef\x85\x87\xc9\xef\x90\x44\x38\xfa\xcb" "\xbe\x18\x96\xe3&\xef\xbbvS\xaf\x2yS\xbcgD\xe4\xdc\x15\xad>@\xcc\x85\x1fP\x12`\x1e" "w)r\x7f\x0\xe8T\xfb" "\xc2\x5\xe5\xdd\xd1\xf5\x65\x2^\x87\xc8\x61\xeb\xedy\x86\xc7\xdc\xad\x30\x62\x1d" "\x7u\n\x8ev\x96\x8a\xd3\xc8\xd4\n\xac\x4\x82\xac\x9e\xb2\xe6\x15\xf6\xb8\x8a\x13" "\xd5\x8\x7f\xe3\x83\xb9\x94\xaf<\xab\x98\xef\x89\x98\xf0\x33\xa1\xe0\x8f\x5\"\xf4" "\x83|%\xd4\xa3\xc3\xfa\xe-.\x7\x38\x9di\x7f\xe9\x65\xac\xc5\x91\xf\x80\xb2\x87H[*\x8c\x91" "\xe1\xf9jJ\x8e\x80\x41\x63\x5\x46\x87\x80\x82\xc3\x92\xda\xa1\x1e\x6\x63\x83\xec" "2u}\xcb\xc7\x9b\xe2\x82P\xac\xcd\x1a\x38\x1f?\xce\xa9\x5\xc8\x62\x9f\x1e\x81\x39r+\x8cs:\x94\xa4\x3\xd6" "\xa1\xdb>\x1c\x85\xe9\xc7+Ev\xb7<\xc8\x85\x36h\x8f\x8e,u\xd7\x46\xc\xe1\xc9\x87>" "c\xe7\x32\x87\xc2\x9c\xd1\xe4\xbdv\xaays\x9cM\xbc\xdc\xa3\xa9\xcezK\xefm\x9e\xc6" "\xe\x61p\xcc!\xdb\xc4\xd9\xe3\xc1\x32\xad,\xfbS}\xf6`\xe1j\x0y\xbeT\x16\xc4,\"0\x4" ")\x83\xbe\xa5\x39\xe5\xe0\xd5#S\x3\rpF\x8cU\x9d\xd7\xe\x66\x9d\x8a\x36\x87\x35V\xf5" "F\x93\x2\x11Vs\x9b\xd3\xe1O\xc9\xd9'\xc3\x80\xb8]\x12\xc2x[\x1c\x42)t\xf4\x8d\x91W" "\x1e\r\xe0\x0\xc9\"\x93\xff\xecX+\xcf\x93>~S1M\xdf!\x19ye%\x88\xd1\xa2\xb3\x39\x2" "\xf7\xe3\x80\n\xe5=\xcco\xf1\rx\x6\xa3\x95u\xf8\xec{{\xf5\x30'S\x0\x95\xbe\\\xdd" "\x6\x9a\xcc\x8c\xf0\x16\xb1\xfe\xab\xc1\x7\x85\x7f\xf2UU\x8f\xba\x65\x1e\xb3\x0R" "\x84G \xa4\x9?\xe1\xf7\xc4\xb6\x3\xbz\xa9\xd4\xe5\xb1\xf6_F\x1b:$\xb\xcf\x42\xb!" "\x84\xf8\x94\x9b,\xe9\xb8}FU\xba\x8b.\x17\xe2\xc9\x95\x13\xd4UF\xe8\xc3v|]nw{X>H" "\xc4\x92\xd1Z\x86\xca\x3\x36T\\S\x8\x94P\xe4\x89\x92 M\x85\x8e\x8f\x96\x89\x80\xf9" "\xc7\x9b\xdd\x37=7\xf9\xd4\xff\x6\xab\n\xd0\xf3/\xe6IJO\xc0\xa2\x96\x17\xd4`\x8d" "\xc2\x1a\x83\xe6\x8b~\xe3\xc9\xa7\x3K\xd0]\x83\xcf\xc2\xff\xed\x1fV\x1c\x95,M2\x8d" "|\xd4\xc9\"t\x8fl\xea\x15\\\xc3\x1cnF\xdaw\x10\xbf\xdd\x87\x10\x34\x42\xe5\x91J\xfe" "J\x91\xb2h-\xf4l\x8a \x8f\xc3\x33m}\x15]=p\x1M\xef\x6\xaa\xbaN\xda\xac\x1f\xe8\xeb" "5\x8d\xfb!\xd3\xe8\xccR\x92\xf3\xd4K\x19\xb0\xda\x15\xb8n5\x80\x45\x88\xf5\xf3\xa0" "\x1f\xed\x8em7\"\xde\xef\x91\x1a\xb2\xd5N\xe8\xb6\xc5,a\xf9\xf9\x8b\x34!\x16\xf9" "\x80\xd4k\xc6\x8a\xa3$\x8a\x44`a\x90\xba\x94\xa5W\x84\xad\x90\x84pQ\x8a\xe9\x98V" "#d\x83x-p\xc5\x7f\x8aO\x82\x8W\x1b\xa5\xdbZ\xab\x17=\x7k\xe7\xca\x13\xc4\x9\xcc\x45" "dc\xd4\x4\xf3^<\xe6\xa9\x9a\xbb\x7\"\xa6v:\xbf\x34\xaf[\xa8\xea\x62\x86\xb4\xa0\x96" "\xf2\x15\x15\xec\x1d\x9f\xc6\xe4\xab\x1fk:\xd2\x9a\x9c\xfb\x33\x3*s\xb0\x9fQ\xb2" "E_\x1e\x8b\x9b\x2\x9bg\x1a\x19\x93\x42\x63\xd1\x11\x65\x83\xab\xd3'R\xca\x9d'6\x84" "\xcblF\xf4\xb2\x10z\xcf\x9a\x8cvd\xb8\xd3\xdb\x8cx\xb\x0 Kf\xd2\x1f_\xc6\xcdG\xfa" "\x84/M\x81\xf9\x4\xae$P1\x96\xa2\xe\xce[\xfa\xa7\x17\x19\x93m\ntH\x1b\xb;X\x85\x96" "\x8f\x32\x97\x93s\xc4\x30\xf2\xb7\xf9\x99<\xebr\xaa\xfe\x6Q\x2W\x91%\x1a(\x82\xf4" "\xb1\x43<\xe0\xa6\xd1tz\xa3\x14\xc8\xb3[y.\xe4(\xd0\x62Z9\xc7\xb\xe6oy\xd6\xb9v\xe0" "\x1f\xc5\xd3\x86x\x8a:\xca\x7f\xd9\xa9\x34J\xa5\x66\xe7\x96\xcb\x64\x41NV\xb1\x85" "\xe4\xb9o\xd7\x97\x45\x8b\xb1\xd5Z\xf4'r\xa9\xd8\xf7\x9a\xc8\x37\xb3\x38j\xbf\x10" "H\xb6\xbYT\xcaz\xadP\xb9)\x9f\x38XXJ\xf3\x91U\xbb\xb0\x1b\xf0\x8c\x10\xbbVg\xe4\xe1" "E\x7f\x14V4g\xac\xbh\xf1\x8\x8e\x8d\xf8\x66\xdd\x12\xa3\xd4\x97\xfd\xd1\x33=8U~{" "\xa3\x93\x93\xb\xf3^\xc9'\xd4L\x8e_\x12$O\xb1R\r\xbbT\xd4Mr~\x94\x97\x2\xeb\xe5\x39\xf0}\x85\xd0=\x18\x85\xd0" "\x1f\x9fh\xf4x\xbb\xbf\x65%v\x1c\x91\x35Ua5\x81.\x4\xf8Q\x88Na<,\xc6\\\x41\x63z\xa0" "\xfd\xed\xeen\x9c,\x14\x15\xba\xd4+z\xc6\xc4(\xf8\xa4\x81\xf6\x9a\xd1\x82\x8\xc9" "\xb6G\xb1\x61\xee\x39r\xd6_\xbc[l\x12\xb6tw{85\xb1\x46\xc3O\xba?\x12]\xbf$\x91\x1" "\xc7;\x1d\xf4\xa1\xef\x86\xec\x9f\x9d\xe1\xc2\x9ey0\xb2\x1b\x17\x9bi\x1d\xfc\xbd" "\x81\n\x97\xf1\xde\x18\xc0\xa6\xd8\x9f\x7f\xad\x8c\x12\xfa\x9b\xf0\xe3\xc7\x37\x39" "#bGY\xefR\x97\x9U\xc8<\xb1Y\r|X\xa5\x41\xed\x61\x7f\xbf\x41\x96\xe7\xfd\x32\x6\x39" "\xfd\x9c{mB\xd0\xc5qvm\x18,\xd8#B7\x7f\xclR\xeev\x0\xc8\xb1\x8b\x92S\x96\xc2!\x1a" "C'\xb6\"\x38\xfa\xb5)\xe0\xce\xd2\x2\x8f\xbc\x41\xa4\xb2p,\\)i\x13<),\xf1\xda\xf9" "YL\xf1\x91\x36\x12\xb6\xfb\xef\x7f\x9b)R]\x9c>\xcaS\x82{\xbf\xda\xb6Q\xf3\xebN\x1d" "\x1c^\xcf\xa2\xd9\xd9\x7\x61\xdf\xf9YP\xfbJ\xf6\xfd.\xf6\xe1\x92\x3\x45J\x7\xb1\x37" "8\xec\x8a\x61m%\xe4\x42w\x11\xc,\x80\x7fhH\x15\x8b:\xb1H\xc5\x33\xd8v\xa4oB4\xbc" "\xfc\x5\x45\xd7\x64\x8ep\xcd\xad\x35\x83\x0|\xfc\xdfj\xc\xfX\xc9\x8b&I%\x86\x96^" "\x7f\x46\xbf\xd9\x30\x42q\x1\x15\xd2\x92\xf1ZW\xde\x91\x9\xc\x9cn\x16\xb8\x46Xi\xe8" "\x96\x4Q\xaah\xb5\x8\x33+\xa2!wT\x8c]\x15\xbc\xa2g\xdf\x9\xe9\x18|\x83\x8a\xa3\x96" "\xacoy\xee\xcb\xb0\xf0G:k@\xc\x98\x84\xda\xaejq\xa8\xb2\xf5Wz\xbfX\x8a\x9d\x31\x38" "\x9c\xb6w\x4\xd6\xf\xff)Op\xea(x\x91\x30\xbc\xab\xc3\x89\xe6\xcd\xb7R\x0\xfc\xc1" "\x9c\x81\xcb\x8c-\xe0;\x99M\x8b\x1bU0\x83\xca\x45\xed\xb7\xb6\xd4\x63\x66\x1eO\xb8" "\x9d(\xb5\x12\x1f\x81H\xe8\x33\xb4\xad;\xe4\x87\x12\xbe\xfd\xee]\xbap\xf7\xa4\xf6" "C0a\x8c\xbf\x89P\xe5~\xd0g\xe9@\x16J \x10Q\xf5!1\x4=h\xb\xe4\x7f~\\\x13\x12\xa6&" "Y\x4\xbcQ\xee\xa1\x9d\xdb\x96@\xe8 J\xf0\xd2\xb9\x8f\x15\x2\x1duP\x1d\xe9\xe5\x90" "\xf0\x64\xf9,\x15]\xc2\xa0\xf6\xaa\xf3\xae\xe9\x1e \xbc\x5\xb9\x41\x34\x44\x36\xd0" "\x1f\xaa\xf5\xc4~\xa3\xa4\x84\xbf\xb6xS\xe2\xc0_+e&/\xa3\x6\xa8\xb1\x12\x8b\x1e\xb9" "YQ\xb3v^\x8a\x9f\xd3\x6\x1cJ2\xcn6\xe9\xb5=0\xf9n\xa4k\xbau\xab\x86x\xd4\xc;X\xd8" "\x0\xbf\xec |\xd0)\xfb\xc\x30\xca\x9c\x91r\xf3\x30\xf7\x63\x1b\x94\xc5\xd3\x41\x9" "\x7fuY#\x9c\x9\xa5\x96-9EPeF\xc`,u#\xcd\xaei|\xfb\x1a~`l\x98ut]\x83\x7{>\x1d\xd7" "\xcc\x3\x9yun\xc1;V\x11\xa6,\x16\xd3\xee\x32s\xfc/;\x1bG'\xfcs-vo\x82\xf3\xa4\x8a" "~\xf9\x16\xc\xa8\"\x93\xb9\xb5\x10\x8f\xed\x88\xe2>\xfer0\xd8\xf7\xbe\xa9\x6\xdd" "+\x1f\xdew\xa0\xbb\xad\x95\x90\r\xb4\xa1Ov8\xdd\x17\x7f\x91\xe7\x85k\x90jW\xdf\x88" "\"\x19\xae\x12\xc7\xa1\x99P\xed\xdb\xa7\xcf\xce\x11\xd4\xa1\xd5\xc\x89Wd\xf0\x0\x1a" "n\xc5T \xbb\xbf\xfd\x97\xd4\xfb\x86\x43\xa5T\xff\xb5taA\xe4\x36\x99\x1c\xe5\x7+k" "\xa6 '\xf2\xd1\x89\x11\xb\xee\xf7\x83W$)\xe3\xfd\xa6\x86\x44\xbc\xa3'\xef\xe9\xcb" "\xbb\xe8\xf9^\xfb\x36\x88\x94\xf4\x19\x97\x41\xda\x9\xb3\xaf\x8d\xffsQI\xb2\xa2\xa5" "\xff \xcbP\x96\x96M\xe5\x86\xf7\x46x\x8a\x39\xe0Vt0\x17\xfb\xf4\xa4NB\x11U\xf0\x0" "\xb5=\x9a\xe3t\r\xa4\x5\x95;'\xb\x15Pe)\xb0\x93T\xd5\xff)\x93\xb2q\xca\x82\xeb\xdf" "=\xcb\xa1\x98\xd7/Q\x9c\x5\xe2\xe2 \xae\x63\xc2\"k\x1c(\xe0\xa2\x37V/\xcf\\\x36U" "k\xd9\x39G3\x96r\xa4\x18R\x8d\xfd\xf9`\x19\xfb(\"\xaeM\x85\x43\xb\x62W\xab`\xdf\x45" "\xd1\r\x62+\xd6\x37\xa0\xbc\x8a\x93\n\x9aQ/.\x14\xb7\x1cn\xba\xee\xe6\x9bM\xa4?\x8e" "\xea\x32t\xb0\x9` \x9f&y\x9fz\xedVw\x83\xbfl\xb4\x7\xce\x80\xf5W\xda\x13\x12n\x1a" "=\xfe\xe4\xe1\xea\x9x[\xf8\xe7\xf0\xc6\x96\x42\xa7\x90\xc\xd9\xcd#P\xb0\xff$\x17" "\xfd\x8c#\xac\x90iK\xbe\xeb\x87\xab\xbf\xe1\x41%gK\x8\xfc\"\xb1Z{eP\xe9\xce\x91\xfb" "\x5G\xde\x31&D2O\x84\xbf\x4`\x8d\xfb\x1e\x9b\xfc\xdb\x65\x45\xb9G\x8a\x84%\x91s2" "C\xcd\xa4iVpK\x86\xe6N6\xbd/\xa5\\\x39\xc5\xbdI\x92h\xa4s\xa7W{\xa1\x8f\xfc\xd2\x95" "\xb2\x19u\x89\x81\xac\x91\xa6\x38\xa3\xf6\xe4\xf6\xbf))?-\x6\x1a\xd4\xb4G\xca\xf5" "\x12[\x11\x1d\x13\x8c\xac\xc7x\xb0\x91\x64`B?8\xb3\x30\xd3\xa1\xbbZ_wxi\x1cO\x1c" "\xdd\x43\xda<\x11Mw\xd1~\xaa\x35\xbd}\x13\xdb\x10\xc\xb5\x63w}\xd4J\x9e\x5\xbe\x9" "\xe9\x32\x34\x8b\xd9[p\xc\x1a\x5\x96|\x8e\xf2Z\"\xcd\x8b`Vt\x7f\xc9'SYX\x1bH\"\x80" "\xed\xa3\x14\x1d-\x98\x43\xba\xc3\xcc\x61pfn\x97\xadj\x12\x42\x1f\xaa\xbN'\xe2\x61" "\xd4V&\xbb)6m7\x19T-\xdd%\x43\xe7\x3,\x99\xe4\xf6\xe8\xe2\x8cV\xe7\xdf\x19`\xcc!" "\xbb\xe1\xac\xee~?\x2\xc7P\xad&\xecuY\x1\x82\xe7\xebh\x80\x61\xef\xa1\xbd\x41{\x97" ">\x9b\xd9\x9d\x90mB\xd3\"\xb5V\xea\xba&\x8a\x46!\xbe\x8b\xe4\x1b\x17\x8b\x31|\xd2" "z\xfe\x64\xaa\xa7\x98\x36$z\xb9\x3\x61\xad\xe3\xad\x80\x37\xa3.d\x94\xc8\x39vMx\x7" "\x1q\xb0\x94O\xca?\x1a\x8c\xee\xa7\xa0\x83z\r\xd1\xea\xd1\xb\xccZ\x88\xef)\xf6\xda" "\xb2\x8f\x9bzr\x10\xa2O5\x15\xc8\x9d\xa4\x41\x64{\xf4\x19\xc7\x90\x87\xe9\xb6\x16" "S\xa8\x83\x89\xd3\xbd\xd0\x42\xd3\x46\x42\xda{\x9b$\xf5K\xdd\xf5Q\xd5\xf5\xb8\xc0" "\xb6\x63\xc3\x9f\xe\xf1\xdb\xca\x91]5h\x89\xf4\x38\xfc\xeW\xdd~\x9aK\x85\xd9q\x8b" "2\xe8| jr\x15!\x15\x86\xf9\x12\x62\xc1\xe0\x31\x8\xae\x9f\x9as\x19\x2\xcf\xa4{\xc6" "3\xd4w\xe\xd9\xff\xde\x8a\xff'\xb6\x39\x7\x84V\xfb\x84\xc7\xc2\xdc\xb2r\xc0\\\xf4" "\xe0]\x83\x87`7\xf2\xb1\x42{\xcW\x1d\x9e\xf0J\r\xb6\xa6\x97\x89w\xad\x0`\xd9\xd2" "\x8a\x45\xeah=\xf1S6\xd0zx:\xb5z\xf4_\xbf\x93\xfe\xed\xa3\x9c)M\x12\x7f\x31\xd8M" "\x13&\xe9\x3\x42\xfc\xb4-\xa2\xe8\xf5\xc9Y\xcf>\x94\xc9\xab\xa2\xfd\x9e\x7f\x83\x8f" "\x92}\x15\xb4os\x0&|\xea@\xad\x8b\xcd$\x1c`\x88@sUK\xd0\x8b\xc1\x45\x10g\x97\x9b" "\xca\xa9.&\xd0\r\"\xedu\r\x12\xa6\xe2\x9R\x85\xfd\x5\x9d\xacR\xc1\x80<\xa3\xfa+\xdf" "\xc9\x9a\x9e\xca\xe6\x85\x9fJ\x8f\x62\xb3]mb<\x80\x1b" "qiP\xf9\x31NR\xbe\x4U\xd5*\xe9m*\x11\xae;\xb\x1a}\xc\xf8?\xa8R\x18X\xa5\xd3\xc3\x38" "I\x8en\x9d\xd8\xea\x17\xa7!\xf3\x36\xd0zI\xd9\x9b\xa1\xfc\xe8\x61\xb8\xaf\xe2Y\x9f" "\xee\x93r/\xb5\x65\xe7\xab-\xe1\xc8\x87\xd9X9``9B\xdf\x37w5\xc4\"\xd7 \x1bm\xba\xe3" "\xd5\x30\xd2#R\xf8Yq\xacH\xa2\r\xb2\xcf\x37Qh\xbe\\^\x98\xa4O)\x97\xa5\x92\xc5\xbb" "\x81\xbf\xf3\x9?\xa1\x15\xbdR\x9fo\xd0\x8f*\xc1Y\x8d\x2\xfc\xb0\n\xed>T\xd0\x34l" "\x8b\x10\x8cUK\xe8\xa8\xac\xb5\xfd\x84/\xc9\x9b|\x8e\x38\xa3;zI\x2T\xc5P*\xb9y{p" "\x9cjn\xcq\x99\xc6\x13\xa8i-&\xa8^\xd2=\x90\x45\xb4\x97!\xbe\xba\x11\xf5\xeb\xbc" "\x8f\xd7\xe0&\xec\x1c\x90\xee\x15\xb1>\xf2W\xbb\xc5@ \xa5\xe9\x7f<\xfb\x12\xfe\xd9" "`\x90\x8d\xa6\xcf\xed\xf5pAC\xce\x7\x83\x97\x39\xbc T\xd6\x82\\\x31\xc7P;P\xb1\xfc" "\x16\xbc\x83\xd9\x99l\xd0\x95\x88\x6\xb5\xfe\xa4U\xbe\x64\x6\x66\xc6\xf5 PppE\xd2@\xe7\xf6\x63\xd8\x3J\xf0\xe5\xf0\x33" "\xc3\x1\xe\xde\x82'\xb1\x3\x90\xf5Z\n\xc7\x16\xe0\x41\xaf=\xfa\xe0W\x93\x9c\x2\xf6" "\x8cw\xc0\xe6\xb2\x9fQ\x85y\xfd\x2\x1f~dbo%~\xae\xe7\nn.3;\xda\xd8\xf8\x17\xb9J9Q\x1f\xf" "\x11\x0U[+x;\xc4\x1c\xc1V\xf0\x31\xc2\x17\xf0\xec\x65\xdf\xa9\xca\x1f\xb3\\\x66%" "5\xa6\x7\xcb\xe3t\xa6\x81&\xb0w\xa6\x11\x38\x13;\x9cx\xaeU\x89\x8fK\xa5\x37\x81Y" "\xaa]\xd6\x9Wqt\x8e\xe\xcb\xc7\x90:\x1et\xd5\x30\xd5\x1aS\xfe\x38\x66m\x1f\x9\x99" "\xc0\xa2\x84Q\xdb\xa7z\x1c-<4q\xa6'\x4\xcb\r\x9a\xc5\x1a\xfd\xa3\xcg\x9\xab\x41y" "'\x96Ys\xcc\x80lC\x93\x1b.m\xc3}w\r\xae\x94 ;\xf8\x8a\xfa\x8e\xea\xcb\x13 t\xcd\x11" "[U\x9a\xf3\xb\xc2\x8fr\xc1\xcdL\xbc\xd0\x4\x0x`\xff\xd5\x87\xe5\xdd\n<7\x96\x87\xce" "\x1a\xed\x32\xc3,\xb8\xe0\xf\xac\xcd\x9f\x93\xe2\x8d\xca\x95t^\xe7\xb1\x4\x2\x14" "\xc8\x41M\xf2\xe8M-\xc4\xd8\"\xd5\xdc\x45\x91\x85\xf0\\\x9b`\x9a\xa7qM\xe4\x8\xee" "n\xea\xf7=;I\xb6\x9d\xb8=\x8e`\xd8\xc9\x90\x44\x84\x6\xdf\xea(\xc5p'}\xe4\x8b\x1d" "\xb3\x15.;V\x13M\x12\x66\xa9\xd3\xfb\x95\xccm7\x7f\x9\xa1\x7fN\xb6\x8c\x42\x93\x82" "\xc\x1e\xb6/\x8bV'\x91;t\xf6\x10\x97\x92\x84\x0`\xc9\xd4\xd6\xf2T\x93\xfb\xea_\xb1" "\xd2g\xbf\xf0\x43\xbb\xd3\x91\xfb%VH$Z!\xda\x38\xb4\xaa\xbc\"p\xd8\xb\xd8~\xe5\x1f" "\xc8-\x8b%\xef-\xc\xde`tR\xca\xab\x95o\xa3\x11\xf2\xe3HK\x95\x36\x9d?\xf7\xf8{\x8b" "V&\x15U\xdc\xd5\xddK\x91\x33\xcdt\"\xc2\xbe\xa9\xc\xe8\x8e;q\xcc[\xa3\x80\xe3qS9" "\x1d\x9fx4\x16\xfe\xfbo\x3K\xccz\xe2\xa2\xc6+$#P+pY\xd0\xd0\xf1L0\x5\xc\x7\x0\xe7" "~\xaf\x14\xba\xd6Z\xb8|!\xac\xcb\xc9\xca\xe3\xf0\xc1:\xa3$\xe3\x83\x36|ZE\xe3}P\x85" ";\x97\xb6l\x89\xe5+g\x13|f-3/\x8\xe1Tb\x15J\x8a\x7\xd0\x1f\xed\x1c\x41\x86\x66\x95" "\x8e\xccR\xd6?)\xfd\xb4\xd1~c0\x98gTG\xfa\x96\xf7\x35.\xf4\x9bj\x1c\x88\xd0\xb2\x13" "\xca+\xb2\xe\x1aj\x87\xc9\xda\x43\xca\x66\x9a,|\x9a\x3\xee\xe8\xc3\xfb\x66\x8d\xed" "\x19\xcc\x92\xdc\xf6x\x93\x88/\x1\n\xc1\x15\x9f\x43\xf6\xfb\x17\xc1\x9a\x17\xee\xa0" "%F\xb3v\x93\xca\xdf\xa3\xad\xf5\xae\xec\xd2\xe0\xf7J\xa7q\xbe\xba\x83\xd4\x18\xc1" "\x8c$\xe1\xa6\x8\xc8\x31w\x5\xe9\xa4\x38\xcf\xc8,\xc0\xf0\x8f]\x6P\xf9\xc4\x96\x33" "n\x15\xe8\xee<\x0@\xfc*z\x80I\xdbI[\x9b\xe1\xd1\xb6\xfc\x1d\xc4wdrl\x85\x1al\x8c" ".\xf0\xc5N\xe9oZ\xf3G@\x14\xdc\xfd\xb7\x1f\xa1\x9b\xc\xf6\x18\xf7@\xe\x87)\x1cZ\x1" "\x8e\x6;\xce\xee]\xbckZ\n<\x9c\x98\xa6l`\xfe[\x86Z\x1cR\xbb\xc2\xdcL\xbb\x33(\x86" "Q^\x10{M\x9e\x31\x10|\xd3n\xe1\xc9=\xe8\x1\xf9\x96\x42\xbS\xe\xff\xe1\xe1/\xa6\x90" "U\xe4\xce\x8b\x39\xd9\xc3~\x97x9&z\x17\xb2\xeb\x18\xd0\xb2\xb3\x94$\xe9\xf7^\x82m\x18\xaa\xbf\x90\xfc\xde%\x18jhO\xc1\x91\xe0\xbf\xfc\xe7" "\xd8<\xdb\xcd\x9e\xd0\x5\xae\x85\xe\xa0\x1Z1\xc3\x8f\xdd\xc5Y8N\xe8\x8e\xb6\xd8\x35" "i=\xa9\xa5\x46\x6\xf6\xb4\x61\x4J2\x8e\xa7\x1b\x4\x98\xc6H<\x90\xf5v\x8bv\xaf\x8" "\x3\xe7q\x5>R\xf2\x8cH\x8f\x11@6M\x9c\x8e\x8a~\x4*\x19Wj,wI\xf8$\x11\x13N\xaf\x1" "Z\x93M\x3\x46\xb7\x6<\x97\x8a\xd6~\xab\x45\xfc\xd5\x1d\x41p\xd1\x5\x10Jo\xb8\xd3" "\xf1\x64\x30:!\xeb#N\xe8\x9e\xfc\xa5\xee\x41P\xa8\xd0\x81\x43p\xdd\x82\x64\x8di\xbe" "'\x98\xb=\xe1\x43%G\xf\x84-\xfb\x43\x1a&l\x17k~\xb\xdc_>\xb9\xe\x90\x94O\xed?\x8" "\x8e\xfb\xe3\xc7R\xb1\x1c\x9a#\xed\x9b\xd8:\xb8N\xdf\x9a\x84\x33\x0\x45Qp>\xcNg$" "o\xde\x38\xaaz\x13Hy\x9f\xd3u\xfb\xf8\xe4S\x1\x45\xd8\xb\xa7\x81\x3X\xfb\xa3\x12" "7!9\x98\x8b\xda\xd9lv\xf5\r\x32\xa6V\xbf\xb9\x36\xc2\x0\xc0\xce\x33\xff\xde\x8d\x97" "x\xf1vP\x89\xca\x14y\xe1\xa9\xf4\xdaws\x14\xaa\xc9\xbd\xd8\xfe\x38l\x80 E|l\x1\x13" "&\x9d\xa3\xdd@\xe4\xef\x95\\H\xf8_-\xba\x0\xd5\x8c\xfc\x32\x37\x9d \xd7\x63It\x8d" "\xc9\xaf\xdc\xcf\x83\x9c&\xc7\x9e\x85:\xc\x15\x12\xd0\xa4\n\xa1]\x6\x46\xbb\x99\xa5" "\xbd\xcd\xc9\x39\xc6\x62\xf0\xed\x7\x88_/\xc4\xd7\x15\xfb\xdd\x92\xc1\xf3\xa9m\xf" "\xc0\x41\x7\xc5P\xa0\x17\x18\xd7\x10M\x14\xfeX\x84\x30\xf3\x83\xbb\x9a\xf5\xa2\xb1" "\x80\x35]S\xf5\xfb`!_\x8a\xa2?\x9fp0\xfe\xd7\x2\x18\x34\x44\xfb\x38\x30\x4\xc9\xfa" "\xcdp~\xc1\x17\x36\xfb\xda\xc2\x95\xe4\x8d\xd8|\xf7\xd6TK\xd2*\x81\x97\n_A\xf6\x1b" "4M\xe0\xf0\x1e\\\x1at-\x5\x62\x12\x10\xefMPL\xb3Iw_M\xcY\xba\xcb$\x1b\xdb)\xacKC" "\r\xe0\xcd\x61s\xfe\x17\x1bJi{\x6$\xe1h\xd0))(\xaa\xdcx\x97\xc4\xd4\ni\x84;\xf\x30" "\x1b)b\xf1~\x12\x80 \rm\x8\x66\xd2J[\x7\x93\x41\xf7\x62\xaf\xa4\x2}?\xc7\xee.\x1c" "9\x5\xbe\x93Q\xab\xc4\x8a|\x1\x14\xa3\x41\xa4\xed]\x97\xcb\xcb\xbe\x62\x9\xa0\xe4" "\xb2\x8c\xdd\x45\xa1\x18\x8d\x7\xfj]\x83mq\x1e\x5\xcdrH\x99\x6\xf9\xc3\xb8\xd6\xcf" "\xb6\xb3\x31\x18\xe8\x16\x17\xef^;X\x87\xbSNX\xd6\x35\x1e\x31\xd3\x96(\xb1\xe8\x9c" "\xf2n\xf3z_\xc9\x65[!a>\x92\xd2\x1d\xd1\xcb\x33\xfa\xb2\xbb:\x98\x89\xc0\xd3\x13" "\xbbt\xc2\x2\x1b\xa4^YU\x14\xcdn\xe2=K@\xf5\xccU[\x1b\x4\xb4\x88\xf7\xb5\x1o\x8\x63" "nc=\x82\xe1\x91\x98\xd3\xa8\xdc\xf9\xe0\xd0g\xc\xa2\xf1`'\x5\xb8\x34\xe9\xb0\x39" "\xe2\x92u\xf0\x61\x35\xb5u\xb3_\xdc\x63\xccp\xd9H\xf8\xc6>R\x5Y\x7\x8f[\xf6\x8b," "C\n\xe1R\x11\x42\xea\x99\x8a\x42\xd3\x63\xde\x64:\x1f\xa1/\xeb\xb3\x81\xab\xbbZ\xfc" "\x1d\xcb\xe2\x87\x63$e\xcb\xcf\x32l\xa2\xf:it\x16\x41\xa7\xc4\xfe\x89Pu\xa2\x9b}" "sr\xd8\xd0\xfb|\x84\x99('\xce\x3\xd8\xa7\x89\x4\xeb-Y\x86\xb5\xbdHo\xb\xbd\x31Y\xa0" "\xdb\xc3\xb3H\x86\x14\"\x1a\x85\x3\\\xcd\n\xfe\xe3\x9V\xc2\x64\x18\xe3\xe4\x9aqo" "\xaa\x46\xd6\x8e\x32\x39\x8f\xce\x1a\xeb\x2\x3\xc\xc\xb6\x8e\xeek\x1b(\xae\xdcT_" "^\x95\x8)\x86\xd3?\xecl\x8d\xa8t\xc4hN\x97\xc3\xd7\xd2+Gd\x92\xae\x14\xbd\xaa\xf2" "W\x92\r\xec\xfc\x9f\xa8\x11T\xb3\x80\x95\xc2_\xa3\xc4\x96\xcd\x7f\xa1\x13.\xeb\xc" "t\xa5lc\xd1\x83\xa9@\xd6k5g\xa9tw{jf\xc9\x10\x4\nR\xe5\x36P\xa4\x11\x32\xe1\xe7\xec" "\x5\xa8+f\xd8\xab\xba\xb8N-\xd4N\xa2\xe3\xc0\xd7\xb3}\x86\xe1s\xd6^I\xf4\xa1\xf6" "\x9f\xf1u\xa0mc\x3\x8e\xb0\xb3\x84z\xe\xec\x63vy\x5\xc3\x8b\xf0L\x10!\x8fQ\x9\x99" "/4{$\x17\x9bn\xb1I\x1K\xb6\xe8\xe6\xbb\xdb\x10:*%\xff\x95\xb5\xf2\xb4O\x8b\xb6U\xf1" "L\x80\x33\x1b\xcd\xb1W\xfw\xd0\xf4\xf8n\xeO/\xb\xfa\xefl6\xec\x19;\x18l\xf8\x9f\x66" "VTi}\x9b\xcb\xd4\xe6\xa6\xc2z\xcc>\xe7\xb9\xb2u\xba\x9c\xbd\xa5\xe8\xe5\x90\x17@" "\x96%\xb8\xc7\xbah\xaf.\xab\x63\xcc)\xc4\xce\x12\x10\xaa\x93\x9\xa3\x64_I\x1b\x45" "\\%\xc1,\xdakb\xafG.\x8f\xc4\x9f\x45\xf\xcf\xe0\xcd\xf3&\x1d\xc7\x93\x61\xb7\x83" "\xc0\x30sz?\xd3\x64\x44@Q\xd3\x89WU\xea\x9\x92\x1f\x5V\x8d\x9bpH\xf8\xc5\xb8\r\xed" "ye2\xe3\x66\x30\xc6\x1b\x98\xdf\xaa`r\xd7\xa0\xf6\x83\x18\xb6@g\x14q\xd3K\x8\xff" "\xdd\xac\xed\xd5_\xbd\x31\n\r\xaf\xc\x1b.\xda\xa0\xe$\xc9)\x86\xaf\xb\x14\xba'h)" "\xb5$\xd1\x41\xf6\xfc\xcf\xff|\xac\xaa-\xfc\xcf,\x1a\xbb\x94\x66+\xcfW!\xfa\xff\xca" "\xa3\xafxn\xc2<\xe1\x36\xe5\xc9\xf3R\xfd\x1d\x1d\x30\x93\xc1\x8a\x80\x1\x14\x2\x0" "\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" "00000000000000000000000000000000000000000000\r0000000000000000000000000000000000" "000000000000000000000000000000\r000000000000000000000000000000000000000000000000" "0000000000000000\r00000000000000000000000000000000000000000000000000000000000000" "00\r0000000000000000000000000000000000000000000000000000000000000000\r0000000000" "000000000000000000000000000000000000000000000000000000\r000000000000000000000000" "0000000000000000000000000000000000000000\r00000000000000000000000000000000000000" "00000000000000000000000000\rcleartomark\n\x80\x3" ; int n021003l_afm_len = 31943; char* n021003l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusRomNo9L-Reg" "u\nFullName Nimbus Roman No9 L Regular\nFamilyName Nimbus Roman No9 L\nWeight Re" "gular\nItalicAngle 0.0\nIsFixedPitch false\nUnderlinePosition -100\nUnderlineThi" "ckness 50\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Devel" "opment\nEncodingScheme AdobeStandardEncoding\nFontBBox -168 -281 1000 924\nCapHe" "ight 662\nXHeight 450\nDescender -217\nAscender 683\nStartCharMetrics 316\nC 32 " "; WX 250 ; N space ; B 125 0 125 0 ;\nC 33 ; WX 333 ; N exclam ; B 130 -9 237 67" "6 ;\nC 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;\nC 35 ; WX 500 ; N numbersi" "gn ; B 5 0 496 662 ;\nC 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;\nC 37 ; WX 8" "33 ; N percent ; B 61 -13 772 676 ;\nC 38 ; WX 778 ; N ampersand ; B 42 -13 750 " "676 ;\nC 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ;\nC 40 ; WX 333 ; N pare" "nleft ; B 48 -177 304 676 ;\nC 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;\n" "C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;\nC 43 ; WX 564 ; N plus ; B 30 0" " 534 506 ;\nC 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;\nC 45 ; WX 333 ; N hyp" "hen ; B 39 194 285 257 ;\nC 46 ; WX 250 ; N period ; B 70 -11 181 100 ;\nC 47 ; " "WX 278 ; N slash ; B -9 -14 287 676 ;\nC 48 ; WX 500 ; N zero ; B 24 -14 476 676" " ;\nC 49 ; WX 500 ; N one ; B 111 0 394 676 ;\nC 50 ; WX 500 ; N two ; B 30 0 47" "5 676 ;\nC 51 ; WX 500 ; N three ; B 43 -14 432 676 ;\nC 52 ; WX 500 ; N four ; " "B 12 0 472 676 ;\nC 53 ; WX 500 ; N five ; B 32 -14 438 688 ;\nC 54 ; WX 500 ; N" " six ; B 34 -14 468 684 ;\nC 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;\nC 56 ; W" "X 500 ; N eight ; B 56 -14 445 676 ;\nC 57 ; WX 500 ; N nine ; B 30 -22 459 676 " ";\nC 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;\nC 59 ; WX 278 ; N semicolon ; B" " 80 -141 219 459 ;\nC 60 ; WX 564 ; N less ; B 28 -10 536 516 ;\nC 61 ; WX 564 ;" " N equal ; B 30 120 534 386 ;\nC 62 ; WX 564 ; N greater ; B 28 -10 536 516 ;\nC" " 63 ; WX 444 ; N question ; B 68 -8 414 676 ;\nC 64 ; WX 921 ; N at ; B 116 -14 " "809 676 ;\nC 65 ; WX 722 ; N A ; B 15 0 706 674 ;\nC 66 ; WX 667 ; N B ; B 17 0 " "593 662 ;\nC 67 ; WX 667 ; N C ; B 28 -14 633 676 ;\nC 68 ; WX 722 ; N D ; B 16 " "0 685 662 ;\nC 69 ; WX 611 ; N E ; B 12 0 597 662 ;\nC 70 ; WX 556 ; N F ; B 12 " "0 546 662 ;\nC 71 ; WX 722 ; N G ; B 32 -14 709 676 ;\nC 72 ; WX 722 ; N H ; B 1" "9 0 702 662 ;\nC 73 ; WX 333 ; N I ; B 18 0 315 662 ;\nC 74 ; WX 389 ; N J ; B 1" "0 -14 370 662 ;\nC 75 ; WX 722 ; N K ; B 34 0 723 662 ;\nC 76 ; WX 611 ; N L ; B" " 12 0 598 662 ;\nC 77 ; WX 889 ; N M ; B 12 0 863 662 ;\nC 78 ; WX 722 ; N N ; B" " 12 -11 707 662 ;\nC 79 ; WX 722 ; N O ; B 34 -14 688 676 ;\nC 80 ; WX 556 ; N P" " ; B 16 0 542 662 ;\nC 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;\nC 82 ; WX 667 ; " "N R ; B 17 0 659 662 ;\nC 83 ; WX 556 ; N S ; B 42 -14 491 676 ;\nC 84 ; WX 611 " "; N T ; B 17 0 593 662 ;\nC 85 ; WX 722 ; N U ; B 14 -14 705 662 ;\nC 86 ; WX 72" "2 ; N V ; B 16 -11 697 662 ;\nC 87 ; WX 944 ; N W ; B 5 -11 932 662 ;\nC 88 ; WX" " 722 ; N X ; B 10 0 704 662 ;\nC 89 ; WX 722 ; N Y ; B 22 0 703 662 ;\nC 90 ; WX" " 611 ; N Z ; B 9 0 597 662 ;\nC 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 " ";\nC 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;\nC 93 ; WX 333 ; N bracketri" "ght ; B 34 -156 245 662 ;\nC 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;\nC" " 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\nC 96 ; WX 333 ; N quoteleft ; " "B 115 433 254 676 ;\nC 97 ; WX 444 ; N a ; B 37 -10 442 460 ;\nC 98 ; WX 500 ; N" " b ; B 3 -10 468 683 ;\nC 99 ; WX 444 ; N c ; B 25 -10 412 460 ;\nC 100 ; WX 500" " ; N d ; B 27 -10 491 683 ;\nC 101 ; WX 444 ; N e ; B 25 -10 424 460 ;\nC 102 ; " "WX 333 ; N f ; B 20 0 383 683 ;\nC 103 ; WX 500 ; N g ; B 28 -218 470 460 ;\nC 1" "04 ; WX 500 ; N h ; B 9 0 487 683 ;\nC 105 ; WX 278 ; N i ; B 16 0 253 683 ;\nC " "106 ; WX 278 ; N j ; B -70 -218 194 683 ;\nC 107 ; WX 500 ; N k ; B 7 0 505 683 " ";\nC 108 ; WX 278 ; N l ; B 19 0 257 683 ;\nC 109 ; WX 778 ; N m ; B 16 0 775 46" "0 ;\nC 110 ; WX 500 ; N n ; B 16 0 485 460 ;\nC 111 ; WX 500 ; N o ; B 29 -10 47" "0 460 ;\nC 112 ; WX 500 ; N p ; B 5 -217 470 460 ;\nC 113 ; WX 500 ; N q ; B 24 " "-217 488 461 ;\nC 114 ; WX 333 ; N r ; B 5 0 335 460 ;\nC 115 ; WX 389 ; N s ; B" " 51 -10 348 459 ;\nC 116 ; WX 278 ; N t ; B 13 -10 279 579 ;\nC 117 ; WX 500 ; N" " u ; B 9 -10 479 450 ;\nC 118 ; WX 500 ; N v ; B 19 -14 477 450 ;\nC 119 ; WX 72" "2 ; N w ; B 21 -14 694 450 ;\nC 120 ; WX 500 ; N x ; B 17 0 479 450 ;\nC 121 ; W" "X 500 ; N y ; B 14 -218 475 450 ;\nC 122 ; WX 444 ; N z ; B 27 0 418 450 ;\nC 12" "3 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;\nC 124 ; WX 200 ; N bar ; B 67 -" "14 133 676 ;\nC 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;\nC 126 ; WX 5" "41 ; N asciitilde ; B 40 186 502 320 ;\nC 161 ; WX 333 ; N exclamdown ; B 97 -21" "8 204 469 ;\nC 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;\nC 163 ; WX 500 ; N s" "terling ; B 12 -8 490 676 ;\nC 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ;\n" "C 165 ; WX 500 ; N yen ; B -53 0 512 662 ;\nC 166 ; WX 500 ; N florin ; B 7 -189" " 490 676 ;\nC 167 ; WX 500 ; N section ; B 70 -148 426 676 ;\nC 168 ; WX 500 ; N" " currency ; B -22 58 522 602 ;\nC 169 ; WX 180 ; N quotesingle ; B 48 431 133 67" "6 ;\nC 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;\nC 171 ; WX 500 ; N gu" "illemotleft ; B 42 33 456 416 ;\nC 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 " "416 ;\nC 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;\nC 174 ; WX 556 ; N" " fi ; B 31 0 521 683 ;\nC 175 ; WX 556 ; N fl ; B 32 0 521 683 ;\nC 177 ; WX 500" " ; N endash ; B 0 201 500 250 ;\nC 178 ; WX 500 ; N dagger ; B 59 -149 443 676 ;" "\nC 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;\nC 180 ; WX 250 ; N periodc" "entered ; B 70 199 181 310 ;\nC 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 " ";\nC 183 ; WX 350 ; N bullet ; B 40 196 310 466 ;\nC 184 ; WX 333 ; N quotesingl" "base ; B 79 -141 218 102 ;\nC 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 " ";\nC 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;\nC 187 ; WX 500 ; N gui" "llemotright ; B 44 33 458 416 ;\nC 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 10" "0 ;\nC 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;\nC 191 ; WX 444 ; N que" "stiondown ; B 30 -218 376 468 ;\nC 193 ; WX 333 ; N grave ; B 19 507 242 678 ;\n" "C 194 ; WX 333 ; N acute ; B 93 507 317 678 ;\nC 195 ; WX 333 ; N circumflex ; B" " 11 507 322 674 ;\nC 196 ; WX 333 ; N tilde ; B 1 532 331 638 ;\nC 197 ; WX 333 " "; N macron ; B 11 547 322 601 ;\nC 198 ; WX 333 ; N breve ; B 26 507 307 664 ;\n" "C 199 ; WX 333 ; N dotaccent ; B 118 523 217 622 ;\nC 200 ; WX 333 ; N dieresis " "; B 18 523 316 622 ;\nC 202 ; WX 333 ; N ring ; B 67 512 266 711 ;\nC 203 ; WX 3" "33 ; N cedilla ; B 52 -215 261 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B -3 507 3" "77 678 ;\nC 206 ; WX 333 ; N ogonek ; B 64 -165 249 0 ;\nC 207 ; WX 333 ; N caro" "n ; B 11 507 322 674 ;\nC 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;\nC 225 ;" " WX 889 ; N AE ; B 0 0 863 662 ;\nC 227 ; WX 276 ; N ordfeminine ; B 4 394 270 6" "76 ;\nC 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;\nC 233 ; WX 722 ; N Oslash ; " "B 34 -80 688 734 ;\nC 234 ; WX 889 ; N OE ; B 30 -6 885 668 ;\nC 235 ; WX 310 ; " "N ordmasculine ; B 6 394 304 676 ;\nC 241 ; WX 667 ; N ae ; B 38 -10 632 460 ;\n" "C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;\nC 248 ; WX 278 ; N lslash ; B 19" " 0 259 683 ;\nC 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ;\nC 250 ; WX 722 ; " "N oe ; B 30 -10 690 460 ;\nC 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;\nC " "-1 ; WX 722 ; N Udieresis ; B 14 -14 705 834 ;\nC -1 ; WX 722 ; N Uacute ; B 14 " "-14 705 890 ;\nC -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;\nC -1 ; WX 611 ;" " N Tcaron ; B 17 0 593 886 ;\nC -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;\nC -" "1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;\nC -1 ; WX 667 ; N Racute ; B 17 0 659 " "890 ;\nC -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;\nC -1 ; WX 722 ; N Otilde ;" " B 34 -14 688 850 ;\nC -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;\nC -1 ; W" "X 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;\nC -1 ; WX 722 ; N Uhungarumlaut ; " "B 14 -14 705 890 ;\nC -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ;\nC -1 ; WX 722 ;" " N Eth ; B 16 0 685 662 ;\nC -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;\nC -1 ; W" "X 611 ; N Zacute ; B 9 0 597 890 ;\nC -1 ; WX 722 ; N Uring ; B 14 -14 705 923 ;" "\nC -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;\nC -1 ; WX 444 ; N eogonek ; B " "25 -165 424 460 ;\nC -1 ; WX 444 ; N edotaccent ; B 25 -10 424 622 ;\nC -1 ; WX " "444 ; N ecaron ; B 25 -10 424 674 ;\nC -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890" " ;\nC -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ;\nC -1 ; WX 444 ; N eacute ; B 25 " "-10 424 678 ;\nC -1 ; WX 444 ; N edieresis ; B 25 -10 424 622 ;\nC -1 ; WX 600 ;" " N dcaron ; B 27 -10 599 683 ;\nC -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;" "\nC -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;\nC -1 ; WX 444 ; N cacute ; B 25" " -10 412 678 ;\nC -1 ; WX 444 ; N aogonek ; B 37 -165 444 460 ;\nC -1 ; WX 444 ;" " N aring ; B 37 -10 442 721 ;\nC -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;\nC " "-1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;\nC -1 ; WX 444 ; N egrave ; B 25 -10" " 424 678 ;\nC -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;\nC -1 ; WX 444 ; N aac" "ute ; B 37 -10 442 678 ;\nC -1 ; WX 444 ; N adieresis ; B 37 -10 442 622 ;\nC -1" " ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;\nC -1 ; WX 500 ; N ugrave ; B 9 -10 " "479 678 ;\nC -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;\nC -1 ; WX 500 ; N udier" "esis ; B 9 -10 479 622 ;\nC -1 ; WX 278 ; N tcaron ; B 13 -10 300 676 ;\nC -1 ; " "WX 389 ; N scommaaccent ; B 51 -281 348 459 ;\nC -1 ; WX 611 ; N Zcaron ; B 9 0 " "597 886 ;\nC -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;\nC -1 ; WX 722 ; N" " Ucircumflex ; B 14 -14 705 886 ;\nC -1 ; WX 444 ; N acircumflex ; B 37 -10 442 " "674 ;\nC -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 834 ;\nC -1 ; WX 389 ; N scaron " "; B 39 -10 350 674 ;\nC -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;\nC -1 ; WX 38" "9 ; N sacute ; B 51 -10 365 678 ;\nC -1 ; WX 611 ; N Tcommaaccent ; B 17 -281 59" "3 662 ;\nC -1 ; WX 722 ; N Ydieresis ; B 22 0 703 834 ;\nC -1 ; WX 500 ; N thorn" " ; B 5 -217 470 683 ;\nC -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;\nC -1 ; WX 7" "22 ; N Ograve ; B 34 -14 688 890 ;\nC -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 " ";\nC -1 ; WX 722 ; N Odieresis ; B 34 -14 688 834 ;\nC -1 ; WX 722 ; N Ntilde ; " "B 12 -11 707 850 ;\nC -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;\nC -1 ; WX 722" " ; N Nacute ; B 12 -11 707 890 ;\nC -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;\nC" " -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;\nC -1 ; WX 333 ; N Idotaccent ; B 18 " "0 315 834 ;\nC -1 ; WX 333 ; N racute ; B 5 0 335 678 ;\nC -1 ; WX 333 ; N Icirc" "umflex ; B 11 0 322 886 ;\nC -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 470 678 ;\n" "C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ;\nC -1 ; WX 500 ; N Euro ; B -16 -1" "4 477 674 ;\nC -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;\nC -1 ; WX 300 ;" " N onesuperior ; B 57 270 248 676 ;\nC -1 ; WX 300 ; N twosuperior ; B 1 270 296" " 676 ;\nC -1 ; WX 300 ; N threesuperior ; B 14 262 291 676 ;\nC -1 ; WX 333 ; N " "Igrave ; B 18 0 315 890 ;\nC -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ;\nC -1 ; W" "X 333 ; N Imacron ; B 11 0 322 813 ;\nC -1 ; WX 333 ; N Iogonek ; B 18 -165 397 " "662 ;\nC -1 ; WX 333 ; N Idieresis ; B 18 0 316 834 ;\nC -1 ; WX 722 ; N Gbreve " "; B 32 -14 709 876 ;\nC -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;\nC -1 ; WX " "722 ; N Kcommaaccent ; B 34 -281 723 662 ;\nC -1 ; WX 500 ; N ograve ; B 29 -10 " "470 678 ;\nC -1 ; WX 556 ; N Scommaaccent ; B 42 -281 491 676 ;\nC -1 ; WX 611 ;" " N Eogonek ; B 12 -165 611 662 ;\nC -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ;\n" "C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 834 ;\nC -1 ; WX 278 ; N iogonek ; B 1" "6 -165 278 683 ;\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 736 ;\nC -1 ; W" "X 500 ; N odieresis ; B 29 -10 470 622 ;\nC -1 ; WX 500 ; N ntilde ; B 16 0 485 " "638 ;\nC -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;\nC -1 ; WX 611 ; N Ecaron ; B" " 12 0 597 886 ;\nC -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;\nC -1 ; WX 389" " ; N scedilla ; B 51 -215 348 459 ;\nC -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;\n" "C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ;\nC -1 ; WX 611 ; N Eacute ; B 12 0 5" "97 890 ;\nC -1 ; WX 722 ; N Gcommaaccent ; B 32 -281 709 676 ;\nC -1 ; WX 667 ; " "N Rcommaaccent ; B 17 -281 659 662 ;\nC -1 ; WX 611 ; N Edieresis ; B 12 0 597 8" "34 ;\nC -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;\nC -1 ; WX 500 ; N uogonek ; B" " 9 -165 500 450 ;\nC -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;\nC -1 ; WX 722 " "; N Dcaron ; B 16 0 685 886 ;\nC -1 ; WX 348 ; N lcaron ; B 19 0 348 683 ;\nC -1" " ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;\nC -1 ; WX 667 ; N Cacute ; B 28 -14 6" "33 890 ;\nC -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;\nC -1 ; WX 400 ; N de" "gree ; B 57 390 343 676 ;\nC -1 ; WX 722 ; N Aogonek ; B 15 -165 786 674 ;\nC -1" " ; WX 564 ; N minus ; B 30 220 534 286 ;\nC -1 ; WX 564 ; N multiply ; B 38 8 52" "7 497 ;\nC -1 ; WX 564 ; N divide ; B 30 -10 534 516 ;\nC -1 ; WX 722 ; N Aring " "; B 15 0 706 915 ;\nC -1 ; WX 980 ; N trademark ; B 30 256 957 662 ;\nC -1 ; WX " "333 ; N rcommaaccent ; B 5 -281 335 460 ;\nC -1 ; WX 278 ; N lacute ; B 19 0 290" " 890 ;\nC -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;\nC -1 ; WX 722 ; N Atilde" " ; B 15 0 706 850 ;\nC -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;\nC -1 ; W" "X 278 ; N igrave ; B -8 0 253 678 ;\nC -1 ; WX 500 ; N ncommaaccent ; B 16 -281 " "485 460 ;\nC -1 ; WX 278 ; N lcommaaccent ; B 19 -281 257 683 ;\nC -1 ; WX 564 ;" " N plusminus ; B 30 0 534 568 ;\nC -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;\n" "C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;\nC -1 ; WX 750 ; N threequarte" "rs ; B 15 -14 718 676 ;\nC -1 ; WX 278 ; N iacute ; B 16 0 290 678 ;\nC -1 ; WX " "722 ; N Abreve ; B 15 0 706 876 ;\nC -1 ; WX 500 ; N kcommaaccent ; B 7 -281 505" " 683 ;\nC -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;\nC -1 ; WX 278 ; N imacro" "n ; B -16 0 292 601 ;\nC -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;\nC -1 ; WX" " 444 ; N amacron ; B 37 -10 442 601 ;\nC -1 ; WX 278 ; N tcommaaccent ; B 13 -28" "1 279 579 ;\nC -1 ; WX 500 ; N ydieresis ; B 14 -218 475 622 ;\nC -1 ; WX 444 ; " "N zdotaccent ; B 27 0 418 622 ;\nC -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ;\nC " "-1 ; WX 444 ; N zacute ; B 27 0 418 678 ;\nC -1 ; WX 500 ; N yacute ; B 14 -218 " "475 678 ;\nC -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 479 678 ;\nC -1 ; WX 500 ; " "N eth ; B 29 -10 471 686 ;\nC -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;\nC -1 ; " "WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;\nC -1 ; WX 333 ; N commaaccent ; B 9" "7 -281 236 -38 ;\nC -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ;\nC -1 ; WX 76" "0 ; N registered ; B 38 -14 722 676 ;\nC -1 ; WX 722 ; N Acircumflex ; B 15 0 70" "6 886 ;\nC -1 ; WX 278 ; N idieresis ; B 11 0 269 622 ;\nC -1 ; WX 494 ; N lozen" "ge ; B 18 0 466 740 ;\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\nC -1 ; WX 564 " "; N notequal ; B 30 -3 534 509 ;\nC -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;" "\nC -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ;\nC -1 ; WX 722 ; N Aacute ; B 15 0" " 706 890 ;\nC -1 ; WX 564 ; N lessequal ; B 28 0 536 628 ;\nC -1 ; WX 564 ; N gr" "eaterequal ; B 28 0 536 628 ;\nC -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;" "\nC -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;\nC -1 ; WX 494 ; N partialdi" "ff ; B 26 -10 462 753 ;\nC -1 ; WX 722 ; N Ncommaaccent ; B 12 -281 707 662 ;\nC" " -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;\nC -1 ; WX 200 ; N brokenbar ; B 67" " -14 133 676 ;\nC -1 ; WX 611 ; N Lcommaaccent ; B 12 -281 598 662 ;\nC -1 ; WX " "722 ; N Adieresis ; B 15 0 706 834 ;\nC -1 ; WX 500 ; N mu ; B 36 -218 512 450 ;" "\nC -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;\nEndCharMetrics\nStartKernData\nSt" "artKernPairs 998\nKPX A C -51\nKPX A Ccedilla -57\nKPX A G -57\nKPX A O -60\nKPX" " A Odieresis -60\nKPX A Q -60\nKPX A T -54\nKPX A U -62\nKPX A Uacute -62\nKPX A" " Ucircumflex -62\nKPX A Udieresis -62\nKPX A Ugrave -62\nKPX A V -131\nKPX A W -" "113\nKPX A Y -81\nKPX A a -6\nKPX A b -20\nKPX A c -29\nKPX A ccedilla -29\nKPX " "A comma -3\nKPX A d -28\nKPX A e -27\nKPX A g -20\nKPX A guillemotleft -64\nKPX " "A guilsinglleft -74\nKPX A hyphen -23\nKPX A o -40\nKPX A period -10\nKPX A q -2" "1\nKPX A quotedblright -91\nKPX A quoteright -116\nKPX A t -20\nKPX A u -28\nKPX" " A v -81\nKPX A w -73\nKPX A y -83\nKPX Aacute C -51\nKPX Aacute G -57\nKPX Aacu" "te O -60\nKPX Aacute Q -60\nKPX Aacute T -54\nKPX Aacute U -62\nKPX Aacute V -13" "1\nKPX Aacute W -113\nKPX Aacute Y -81\nKPX Aacute a -6\nKPX Aacute b -20\nKPX A" "acute c -29\nKPX Aacute comma -3\nKPX Aacute d -28\nKPX Aacute e -27\nKPX Aacute" " g -20\nKPX Aacute guillemotleft -64\nKPX Aacute guilsinglleft -74\nKPX Aacute h" "yphen -23\nKPX Aacute o -40\nKPX Aacute period -10\nKPX Aacute q -21\nKPX Aacute" " quoteright -116\nKPX Aacute t -20\nKPX Aacute u -28\nKPX Aacute v -81\nKPX Aacu" "te w -73\nKPX Aacute y -83\nKPX Acircumflex C -51\nKPX Acircumflex G -57\nKPX Ac" "ircumflex O -60\nKPX Acircumflex Q -60\nKPX Acircumflex T -54\nKPX Acircumflex U" " -62\nKPX Acircumflex V -131\nKPX Acircumflex W -113\nKPX Acircumflex Y -81\nKPX" " Acircumflex comma -3\nKPX Acircumflex period -10\nKPX Adieresis C -51\nKPX Adie" "resis G -57\nKPX Adieresis O -60\nKPX Adieresis Q -60\nKPX Adieresis T -54\nKPX " "Adieresis U -62\nKPX Adieresis V -131\nKPX Adieresis W -113\nKPX Adieresis Y -81" "\nKPX Adieresis a -6\nKPX Adieresis b -20\nKPX Adieresis c -29\nKPX Adieresis co" "mma -3\nKPX Adieresis d -28\nKPX Adieresis g -20\nKPX Adieresis guillemotleft -6" "4\nKPX Adieresis guilsinglleft -74\nKPX Adieresis hyphen -23\nKPX Adieresis o -4" "0\nKPX Adieresis period -10\nKPX Adieresis q -21\nKPX Adieresis quotedblright -9" "1\nKPX Adieresis quoteright -116\nKPX Adieresis t -20\nKPX Adieresis u -28\nKPX " "Adieresis v -81\nKPX Adieresis w -73\nKPX Adieresis y -83\nKPX Agrave C -51\nKPX" " Agrave G -57\nKPX Agrave O -60\nKPX Agrave Q -60\nKPX Agrave T -54\nKPX Agrave " "U -62\nKPX Agrave V -131\nKPX Agrave W -113\nKPX Agrave Y -81\nKPX Agrave comma " "-3\nKPX Agrave period -10\nKPX Aring C -51\nKPX Aring G -57\nKPX Aring O -60\nKP" "X Aring Q -60\nKPX Aring T -54\nKPX Aring U -62\nKPX Aring V -131\nKPX Aring W -" "113\nKPX Aring Y -81\nKPX Aring a -6\nKPX Aring b -20\nKPX Aring c -29\nKPX Arin" "g comma -3\nKPX Aring d -28\nKPX Aring e -27\nKPX Aring g -20\nKPX Aring guillem" "otleft -64\nKPX Aring guilsinglleft -74\nKPX Aring hyphen -23\nKPX Aring o -40\n" "KPX Aring period -10\nKPX Aring q -21\nKPX Aring quotedblright -91\nKPX Aring qu" "oteright -116\nKPX Aring t -20\nKPX Aring u -28\nKPX Aring v -81\nKPX Aring w -7" "3\nKPX Aring y -83\nKPX Atilde C -51\nKPX Atilde G -57\nKPX Atilde O -60\nKPX At" "ilde Q -60\nKPX Atilde T -54\nKPX Atilde U -62\nKPX Atilde V -131\nKPX Atilde W " "-113\nKPX Atilde Y -81\nKPX Atilde comma -3\nKPX Atilde period -10\nKPX B A -51\n" "KPX B AE -44\nKPX B Aacute -51\nKPX B Acircumflex -51\nKPX B Adieresis -51\nKPX " "B Aring -51\nKPX B Atilde -51\nKPX B O -24\nKPX B OE -18\nKPX B Oacute -24\nKPX " "B Ocircumflex -24\nKPX B Odieresis -24\nKPX B Ograve -24\nKPX B Oslash -23\nKPX " "B V -65\nKPX B W -59\nKPX B Y -68\nKPX C A -23\nKPX C AE -15\nKPX C Aacute -23\n" "KPX C Adieresis -23\nKPX C Aring -23\nKPX C H -2\nKPX C K -10\nKPX C O -12\nKPX " "C Oacute -12\nKPX C Odieresis -12\nKPX Ccedilla A -27\nKPX D A -67\nKPX D Aacute" " -67\nKPX D Acircumflex -67\nKPX D Adieresis -67\nKPX D Agrave -67\nKPX D Aring " "-67\nKPX D Atilde -67\nKPX D J -41\nKPX D T -10\nKPX D V -71\nKPX D W -57\nKPX D" " X -64\nKPX D Y -74\nKPX F A -71\nKPX F Aacute -71\nKPX F Acircumflex -71\nKPX F" " Adieresis -71\nKPX F Agrave -71\nKPX F Aring -71\nKPX F Atilde -71\nKPX F J -13" "\nKPX F O -10\nKPX F Odieresis -10\nKPX F a -34\nKPX F aacute -34\nKPX F adieres" "is -10\nKPX F ae -36\nKPX F aring -34\nKPX F comma -51\nKPX F e -19\nKPX F eacut" "e -19\nKPX F hyphen 3\nKPX F i -13\nKPX F j -20\nKPX F o -21\nKPX F oacute -21\n" "KPX F odieresis -21\nKPX F oe -21\nKPX F oslash -21\nKPX F period -58\nKPX F r -" "10\nKPX F u -11\nKPX G A -26\nKPX G AE -19\nKPX G Aacute -26\nKPX G Acircumflex " "-26\nKPX G Adieresis -26\nKPX G Agrave -26\nKPX G Aring -26\nKPX G Atilde -26\nK" "PX G T -21\nKPX G V -23\nKPX G W -18\nKPX G Y -26\nKPX J A -53\nKPX J AE -46\nKP" "X J Adieresis -53\nKPX J Aring -53\nKPX K C -43\nKPX K G -49\nKPX K O -51\nKPX K" " OE -44\nKPX K Oacute -51\nKPX K Odieresis -51\nKPX K S 1\nKPX K T 0\nKPX K a 2\n" "KPX K adieresis 2\nKPX K ae 0\nKPX K aring 2\nKPX K e -19\nKPX K hyphen -63\nKPX" " K o -31\nKPX K oacute -31\nKPX K odieresis -31\nKPX K u -19\nKPX K udieresis -1" "9\nKPX K y -86\nKPX L A 0\nKPX L AE 6\nKPX L Aacute 0\nKPX L Adieresis 0\nKPX L " "Aring 0\nKPX L C 2\nKPX L Ccedilla 0\nKPX L G 0\nKPX L O -3\nKPX L Oacute -3\nKP" "X L Ocircumflex -3\nKPX L Odieresis -3\nKPX L Ograve -3\nKPX L Otilde -3\nKPX L " "S 5\nKPX L T -73\nKPX L U -26\nKPX L Udieresis -26\nKPX L V -115\nKPX L W -89\nK" "PX L Y -100\nKPX L hyphen 25\nKPX L quotedblright -100\nKPX L quoteright -125\nK" "PX L u -10\nKPX L udieresis -10\nKPX L y -56\nKPX N A -28\nKPX N AE -21\nKPX N A" "acute -28\nKPX N Adieresis -28\nKPX N Aring -28\nKPX N C -16\nKPX N Ccedilla -16" "\nKPX N G -19\nKPX N O -20\nKPX N Oacute -20\nKPX N Odieresis -20\nKPX N a -27\n" "KPX N aacute -27\nKPX N adieresis -27\nKPX N ae -27\nKPX N aring -27\nKPX N comm" "a -14\nKPX N e -17\nKPX N eacute -17\nKPX N o -21\nKPX N oacute -21\nKPX N odier" "esis -21\nKPX N oslash -20\nKPX N period -21\nKPX N u -25\nKPX N udieresis -25\n" "KPX O A -58\nKPX O AE -50\nKPX O Aacute -58\nKPX O Adieresis -58\nKPX O Aring -5" "8\nKPX O T -9\nKPX O V -69\nKPX O W -54\nKPX O X -55\nKPX O Y -72\nKPX Oacute A " "-58\nKPX Oacute T -9\nKPX Oacute V -69\nKPX Oacute W -54\nKPX Oacute Y -72\nKPX " "Ocircumflex T -9\nKPX Ocircumflex V -69\nKPX Ocircumflex Y -72\nKPX Odieresis A " "-58\nKPX Odieresis T -9\nKPX Odieresis V -69\nKPX Odieresis W -54\nKPX Odieresis" " X -55\nKPX Odieresis Y -72\nKPX Ograve T -9\nKPX Ograve V -69\nKPX Ograve Y -72" "\nKPX Oslash A -58\nKPX Otilde T -9\nKPX Otilde V -69\nKPX Otilde Y -72\nKPX P A" " -90\nKPX P AE -91\nKPX P Aacute -90\nKPX P Adieresis -90\nKPX P Aring -90\nKPX " "P J -52\nKPX P a -17\nKPX P aacute -17\nKPX P adieresis -17\nKPX P ae -18\nKPX P" " aring -17\nKPX P comma -94\nKPX P e -23\nKPX P eacute -23\nKPX P hyphen -37\nKP" "X P o -25\nKPX P oacute -25\nKPX P odieresis -25\nKPX P oe -25\nKPX P oslash -25" "\nKPX P period -101\nKPX R C -41\nKPX R Ccedilla -41\nKPX R G -44\nKPX R O -45\n" "KPX R OE -39\nKPX R Oacute -45\nKPX R Odieresis -45\nKPX R T -34\nKPX R U -56\nK" "PX R Udieresis -55\nKPX R V -73\nKPX R W -67\nKPX R Y -76\nKPX R a -2\nKPX R aac" "ute -2\nKPX R adieresis -2\nKPX R ae -5\nKPX R aring -2\nKPX R e -23\nKPX R eacu" "te -23\nKPX R hyphen -52\nKPX R o -36\nKPX R oacute -36\nKPX R odieresis -36\nKP" "X R oe -31\nKPX R u -24\nKPX R uacute -24\nKPX R udieresis -24\nKPX R y -37\nKPX" " S A -37\nKPX S AE -30\nKPX S Aacute -37\nKPX S Adieresis -37\nKPX S Aring -37\n" "KPX S T -19\nKPX S V -27\nKPX S W -21\nKPX S Y -30\nKPX S t -20\nKPX T A -53\nKP" "X T AE -45\nKPX T Aacute -53\nKPX T Acircumflex -53\nKPX T Adieresis -53\nKPX T " "Agrave -53\nKPX T Aring -53\nKPX T Atilde -53\nKPX T C -8\nKPX T G -11\nKPX T J " "-18\nKPX T O -10\nKPX T OE -4\nKPX T Oacute -10\nKPX T Ocircumflex -10\nKPX T Od" "ieresis -10\nKPX T Ograve -10\nKPX T Oslash -10\nKPX T Otilde -10\nKPX T S -10\n" "KPX T V 14\nKPX T W 20\nKPX T Y 11\nKPX T a -77\nKPX T ae -80\nKPX T c -87\nKPX " "T colon -87\nKPX T comma -74\nKPX T e -86\nKPX T g -91\nKPX T guillemotleft -114" "\nKPX T guilsinglleft -125\nKPX T hyphen -73\nKPX T i -18\nKPX T j -25\nKPX T o " "-90\nKPX T oslash -89\nKPX T period -82\nKPX T r -50\nKPX T s -73\nKPX T semicol" "on -87\nKPX T u -93\nKPX T v -105\nKPX T w -106\nKPX T y -102\nKPX U A -65\nKPX " "U AE -58\nKPX U Aacute -65\nKPX U Acircumflex -65\nKPX U Adieresis -65\nKPX U Ar" "ing -65\nKPX U Atilde -65\nKPX U comma -31\nKPX U m -33\nKPX U n -31\nKPX U p -2" "8\nKPX U period -37\nKPX U r -27\nKPX Uacute A -65\nKPX Uacute comma -31\nKPX Ua" "cute m -33\nKPX Uacute n -31\nKPX Uacute p -28\nKPX Uacute period -37\nKPX Uacut" "e r -27\nKPX Ucircumflex A -65\nKPX Udieresis A -65\nKPX Udieresis b 21\nKPX Udi" "eresis comma -31\nKPX Udieresis m -33\nKPX Udieresis n -31\nKPX Udieresis p -28\n" "KPX Udieresis period -37\nKPX Udieresis r -27\nKPX Ugrave A -65\nKPX V A -124\nK" "PX V AE -104\nKPX V Aacute -124\nKPX V Acircumflex -124\nKPX V Adieresis -124\nK" "PX V Agrave -124\nKPX V Aring -124\nKPX V Atilde -124\nKPX V C -63\nKPX V G -66\n" "KPX V O -67\nKPX V Oacute -67\nKPX V Ocircumflex -67\nKPX V Odieresis -67\nKPX V" " Ograve -67\nKPX V Oslash -65\nKPX V Otilde -67\nKPX V S -47\nKPX V T 10\nKPX V " "a -88\nKPX V ae -89\nKPX V colon -90\nKPX V comma -105\nKPX V e -85\nKPX V g -10" "1\nKPX V guillemotleft -109\nKPX V guilsinglleft -119\nKPX V hyphen -69\nKPX V i" " -20\nKPX V o -89\nKPX V oslash -88\nKPX V period -112\nKPX V r -56\nKPX V semic" "olon -89\nKPX V u -51\nKPX V y -54\nKPX W A -113\nKPX W AE -98\nKPX W Aacute -11" "3\nKPX W Acircumflex -113\nKPX W Adieresis -113\nKPX W Agrave -113\nKPX W Aring " "-113\nKPX W Atilde -113\nKPX W C -53\nKPX W G -56\nKPX W O -56\nKPX W Oacute -56" "\nKPX W Ocircumflex -56\nKPX W Odieresis -56\nKPX W Ograve -56\nKPX W Oslash -55" "\nKPX W Otilde -56\nKPX W S -41\nKPX W T 17\nKPX W a -80\nKPX W ae -81\nKPX W co" "lon -81\nKPX W comma -89\nKPX W e -72\nKPX W g -91\nKPX W guillemotleft -97\nKPX" " W guilsinglleft -107\nKPX W hyphen -56\nKPX W i -13\nKPX W o -76\nKPX W oslash " "-75\nKPX W period -96\nKPX W r -47\nKPX W semicolon -81\nKPX W u -43\nKPX W y -4" "5\nKPX X C -52\nKPX X O -61\nKPX X Odieresis -61\nKPX X Q -61\nKPX X a -7\nKPX X" " e -28\nKPX X hyphen -54\nKPX X o -41\nKPX X u -29\nKPX X y -96\nKPX Y A -74\nKP" "X Y AE -67\nKPX Y Aacute -74\nKPX Y Acircumflex -74\nKPX Y Adieresis -74\nKPX Y " "Agrave -74\nKPX Y Aring -74\nKPX Y Atilde -74\nKPX Y C -68\nKPX Y G -71\nKPX Y O" " -69\nKPX Y Oacute -69\nKPX Y Ocircumflex -69\nKPX Y Odieresis -69\nKPX Y Ograve" " -69\nKPX Y Oslash -69\nKPX Y Otilde -69\nKPX Y S -44\nKPX Y T 13\nKPX Y a -99\n" "KPX Y ae -102\nKPX Y colon -109\nKPX Y comma -96\nKPX Y e -103\nKPX Y g -113\nKP" "X Y guillemotleft -135\nKPX Y guilsinglleft -145\nKPX Y hyphen -98\nKPX Y i -17\n" "KPX Y o -107\nKPX Y oslash -106\nKPX Y p -88\nKPX Y period -103\nKPX Y semicolon" " -108\nKPX Y u -78\nKPX Y v -86\nKPX Z v -48\nKPX Z y -50\nKPX a j -26\nKPX a qu" "oteright -40\nKPX a v -30\nKPX a w -31\nKPX a y -32\nKPX aacute v -30\nKPX aacut" "e w -31\nKPX aacute y -32\nKPX adieresis v -30\nKPX adieresis w -31\nKPX adieres" "is y -32\nKPX ae v -27\nKPX ae w -28\nKPX ae y -30\nKPX agrave v -30\nKPX agrave" " w -31\nKPX agrave y -32\nKPX aring v -30\nKPX aring w -31\nKPX aring y -32\nKPX" " b v -29\nKPX b w -30\nKPX b y -32\nKPX c h -15\nKPX c k -19\nKPX comma one -52\n" "KPX comma quotedblright -29\nKPX comma quoteright -53\nKPX e quoteright -30\nKPX" " e t -10\nKPX e v -27\nKPX e w -28\nKPX e x -35\nKPX e y -30\nKPX eacute v -27\n" "KPX eacute w -28\nKPX eacute y -30\nKPX ecircumflex v -27\nKPX ecircumflex w -28" "\nKPX ecircumflex y -30\nKPX eight four 0\nKPX eight one -64\nKPX eight seven -1" "5\nKPX f a -25\nKPX f aacute -25\nKPX f adieresis 12\nKPX f ae -25\nKPX f aring " "-6\nKPX f e -34\nKPX f eacute -34\nKPX f f 6\nKPX f i 15\nKPX f j 8\nKPX f l 44\n" "KPX f o -38\nKPX f oacute -38\nKPX f odieresis -1\nKPX f oe -36\nKPX f oslash -3" "7\nKPX f quoteright 17\nKPX f s -21\nKPX f t 10\nKPX five four -8\nKPX five one " "-70\nKPX five seven -36\nKPX four four 14\nKPX four one -75\nKPX four seven -42\n" "KPX g a -17\nKPX g adieresis -17\nKPX g ae -18\nKPX g aring -17\nKPX g e -25\nKP" "X g eacute -25\nKPX g l -7\nKPX g oacute -26\nKPX g odieresis -26\nKPX g r 11\nK" "PX guillemotright A -62\nKPX guillemotright AE -61\nKPX guillemotright Aacute -6" "2\nKPX guillemotright Adieresis -62\nKPX guillemotright Aring -62\nKPX guillemot" "right T -114\nKPX guillemotright V -117\nKPX guillemotright W -95\nKPX guillemot" "right Y -138\nKPX guilsinglright A -72\nKPX guilsinglright AE -71\nKPX guilsingl" "right Aacute -72\nKPX guilsinglright Adieresis -72\nKPX guilsinglright Aring -72" "\nKPX guilsinglright T -124\nKPX guilsinglright V -128\nKPX guilsinglright W -10" "5\nKPX guilsinglright Y -149\nKPX h quoteright -38\nKPX h y -30\nKPX hyphen A -2" "6\nKPX hyphen AE -25\nKPX hyphen Aacute -26\nKPX hyphen Adieresis -26\nKPX hyphe" "n Aring -26\nKPX hyphen T -77\nKPX hyphen V -82\nKPX hyphen W -59\nKPX hyphen Y " "-108\nKPX i T -28\nKPX i j -36\nKPX k a 1\nKPX k aacute 1\nKPX k adieresis 1\nKP" "X k ae -1\nKPX k aring 1\nKPX k comma 4\nKPX k e -19\nKPX k eacute -19\nKPX k g " "-12\nKPX k hyphen -65\nKPX k o -32\nKPX k oacute -32\nKPX k odieresis -32\nKPX k" " period -2\nKPX k s 5\nKPX k u 14\nKPX k udieresis 14\nKPX l v -28\nKPX l y -25\n" "KPX m p -9\nKPX m v -30\nKPX m w -31\nKPX m y -31\nKPX n T -55\nKPX n p -13\nKPX" " n quoteright -39\nKPX n v -30\nKPX n w -31\nKPX n y -31\nKPX nine four -7\nKPX " "nine one -63\nKPX nine seven -6\nKPX o T -91\nKPX o quoteright -34\nKPX o t -9\n" "KPX o v -36\nKPX o w -36\nKPX o x -36\nKPX o y -41\nKPX oacute v -36\nKPX oacute" " w -36\nKPX oacute y -41\nKPX ocircumflex t -9\nKPX odieresis t -9\nKPX odieresi" "s v -36\nKPX odieresis w -36\nKPX odieresis x -36\nKPX odieresis y -41\nKPX ogra" "ve v -36\nKPX ograve w -36\nKPX ograve y -41\nKPX one comma -48\nKPX one eight -" "68\nKPX one five -37\nKPX one four -72\nKPX one nine -61\nKPX one one -78\nKPX o" "ne period -55\nKPX one seven -78\nKPX one six -66\nKPX one three -41\nKPX one tw" "o -34\nKPX one zero -54\nKPX p t -6\nKPX p y -28\nKPX period one -61\nKPX period" " quotedblright -33\nKPX period quoteright -58\nKPX q c -7\nKPX q u -12\nKPX quot" "edblbase A 12\nKPX quotedblbase AE 19\nKPX quotedblbase T -60\nKPX quotedblbase " "V -104\nKPX quotedblbase W -76\nKPX quotedblbase Y -87\nKPX quotedblleft A -86\n" "KPX quotedblleft AE -91\nKPX quotedblleft Aacute -86\nKPX quotedblleft Adieresis" " -86\nKPX quotedblleft Aring -86\nKPX quotedblleft T 14\nKPX quotedblleft V 1\nK" "PX quotedblleft W 7\nKPX quotedblleft Y -1\nKPX quotedblright A -94\nKPX quotedb" "lright AE -99\nKPX quotedblright Aacute -94\nKPX quotedblright Adieresis -94\nKP" "X quotedblright Aring -94\nKPX quotedblright T 11\nKPX quotedblright V 0\nKPX qu" "otedblright W 6\nKPX quotedblright Y -2\nKPX quoteleft A -110\nKPX quoteleft AE " "-115\nKPX quoteleft Aacute -110\nKPX quoteleft Adieresis -110\nKPX quoteleft Ari" "ng -110\nKPX quoteleft T -9\nKPX quoteleft V -23\nKPX quoteleft W -17\nKPX quote" "left Y -26\nKPX quoteright A -130\nKPX quoteright AE -135\nKPX quoteright Aacute" " -130\nKPX quoteright Adieresis -130\nKPX quoteright Aring -130\nKPX quoteright " "comma -71\nKPX quoteright d -56\nKPX quoteright o -54\nKPX quoteright period -78" "\nKPX quoteright r -44\nKPX quoteright s -47\nKPX quoteright t -43\nKPX quoterig" "ht v -47\nKPX quoteright w -47\nKPX quoteright y -45\nKPX r a -1\nKPX r aacute -" "1\nKPX r acircumflex -1\nKPX r adieresis -1\nKPX r ae -3\nKPX r agrave -1\nKPX r" " aring -1\nKPX r c -8\nKPX r ccedilla -8\nKPX r colon -7\nKPX r comma -41\nKPX r" " d -10\nKPX r e -6\nKPX r eacute -6\nKPX r ecircumflex -6\nKPX r egrave -6\nKPX " "r f 19\nKPX r g -15\nKPX r h -6\nKPX r hyphen -46\nKPX r i 20\nKPX r j 14\nKPX r" " k -10\nKPX r l -18\nKPX r m 20\nKPX r n 22\nKPX r o -8\nKPX r oacute -8\nKPX r " "ocircumflex -8\nKPX r odieresis -8\nKPX r oe -7\nKPX r ograve -8\nKPX r oslash -" "7\nKPX r p 25\nKPX r period -48\nKPX r q -10\nKPX r quoteright -19\nKPX r r 26\n" "KPX r s 0\nKPX r semicolon -7\nKPX r t 23\nKPX r u 19\nKPX r v 20\nKPX r w 19\nK" "PX r x 17\nKPX r y 22\nKPX r z 2\nKPX s quoteright -38\nKPX s t -15\nKPX seven c" "olon -68\nKPX seven comma -72\nKPX seven eight -40\nKPX seven five -59\nKPX seve" "n four -63\nKPX seven one -56\nKPX seven period -79\nKPX seven seven -20\nKPX se" "ven six -46\nKPX seven three -35\nKPX seven two -31\nKPX six four 12\nKPX six on" "e -74\nKPX six seven -29\nKPX t S 2\nKPX t a 10\nKPX t aacute 10\nKPX t adieresi" "s 10\nKPX t ae 9\nKPX t aring 10\nKPX t colon -8\nKPX t e 0\nKPX t eacute 0\nKPX" " t h 10\nKPX t o -8\nKPX t oacute -8\nKPX t odieresis -8\nKPX t quoteright -29\n" "KPX t semicolon -8\nKPX three four -6\nKPX three one -75\nKPX three seven -28\nK" "PX two four 0\nKPX two one -60\nKPX two seven -16\nKPX u quoteright -36\nKPX v a" " -24\nKPX v aacute -24\nKPX v acircumflex -24\nKPX v adieresis -24\nKPX v ae -24" "\nKPX v agrave -24\nKPX v aring -24\nKPX v atilde -24\nKPX v c -37\nKPX v colon " "-20\nKPX v comma -69\nKPX v e -36\nKPX v eacute -36\nKPX v ecircumflex -36\nKPX " "v egrave -36\nKPX v g -41\nKPX v hyphen -28\nKPX v l -31\nKPX v o -38\nKPX v oac" "ute -38\nKPX v odieresis -38\nKPX v ograve -38\nKPX v oslash -38\nKPX v period -" "76\nKPX v s -21\nKPX v semicolon -20\nKPX w a -27\nKPX w aacute -27\nKPX w acirc" "umflex -27\nKPX w adieresis -27\nKPX w ae -27\nKPX w agrave -27\nKPX w aring -27" "\nKPX w atilde -27\nKPX w c -33\nKPX w colon -23\nKPX w comma -64\nKPX w e -31\n" "KPX w eacute -31\nKPX w ecircumflex -31\nKPX w egrave -31\nKPX w g -43\nKPX w hy" "phen -24\nKPX w l -33\nKPX w o -35\nKPX w oacute -35\nKPX w odieresis -35\nKPX w" " ograve -35\nKPX w oslash -34\nKPX w period -71\nKPX w s -23\nKPX w semicolon -2" "3\nKPX x a -11\nKPX x c -34\nKPX x e -32\nKPX x eacute -32\nKPX x o -45\nKPX x q" " -26\nKPX y a -32\nKPX y aacute -32\nKPX y acircumflex -32\nKPX y adieresis -32\n" "KPX y ae -31\nKPX y agrave -32\nKPX y aring -32\nKPX y atilde -32\nKPX y c -37\n" "KPX y colon -23\nKPX y comma -66\nKPX y e -35\nKPX y eacute -35\nKPX y ecircumfl" "ex -35\nKPX y egrave -35\nKPX y g -48\nKPX y hyphen -27\nKPX y l -32\nKPX y o -3" "9\nKPX y oacute -39\nKPX y odieresis -39\nKPX y ograve -39\nKPX y oslash -38\nKP" "X y period -73\nKPX y s -26\nKPX y semicolon -23\nKPX zero four 12\nKPX zero one" " -55\nKPX zero seven -5\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n021003l_pfb_len = 46026; char* n021003l_pfb = "\x80\x1m\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-Regu 1.05\n%%CreationDate: We" "d Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developmen" "t\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPY" "ING (GNU General Public License) for license conditions.\n% As a special excepti" "on, permission is granted to include this font\n% program in a Postscript or PDF" " file that consists of a document that\n% contains text to be displayed or print" "ed using this font, regardless\n% of the conditions or license applying to the d" "ocument itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) rea" "donly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See " "the file COPYING (GNU General Public License) for license conditions. As a speci" "al exception, permission is granted to include this font program in a Postscript" " or PDF file that consists of a document that contains text to be displayed or p" "rinted using this font, regardless of the conditions or license applying to the " "document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by " "(URW)++ Design & Development) readonly def\n/FullName (Nimbus Roman No9 L Regula" "r) readonly def\n/FamilyName (Nimbus Roman No9 L) readonly def\n/Weight (Regular" ") readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePositio" "n -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusRomNo" "9L-Regu def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-168 -281 1000 924} read" "only def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly de" "f\n/Encoding StandardEncoding def\n/UniqueID 5020931 def\ncurrentdict end\ncurre" "ntfile eexec\r\x80\x2\x35\xab\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a" "\"\xc3[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9c" "t\xb4r\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4" "\x19\xff++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5" "Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d" "\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7" "\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>m\xb3\xdc\x98" "4<\x9c\xd2\xd0\x9b\xa4\x31\"%\xf6}\xc6\x9b\x9e\xbfg\x88\xf6\xeb)n\x97+f\x10]\xf\x9b" "r\xa7iZ\xb1O \xcauD\xf6\xdfnH1I\xad\x93\rQ\x9e\x44\xc6\x32\x33\xf6n\x8b\x13\xd5\x18" "\x14\x61\xceV\xc0h\xc0\x15\xdf\x16\xd7R\xf5\xae\xcc=D\x1b\x5\x93\xbb\xd5R\xf4\xc4" "\x10G\x1a\xae\x82\x31\xbf\xe2\xfe\xdf\x61\x9e]L\xc6\x15\xbd$6\xac\xa5\x7\xfa\xa7" "\xec\xbd\x97\xaa\xc2T|D\x7f\x8\xa4\xff\xb2\x8e\x12\xc5\xb6\xe3\xd5\xf1\x10'{9\xb6" "\xc5?\x3\x1a; 44Y;UF\x9d\x1a\x9f\xf\x82\x37\x38\xca\x84\x91\xc3\xf0\x35\xcbtQqw," "F\x0\xbe\xce\x86\x45\xc5y|\"\x98\xc7\x8ex7\xd6\xf9\xb1\x8b\xa8m\x3p(\xa8\x19p\x9a" "\x3\xa1\xad\xe4o\xd4\xc9\x12\xd8j\xcf\xc4\x31\xb5\x9c'\x7\xf6\x63\xed\xcc\x19K\x90" "K\xf0\xac\xdf\x91\xb6\xf7h\xfa\xf9\xf3g\xb3\x88\x42\xaf\x9f\xcd\x35l\xc5\xb6\xf7" "\xdd\xb7@]\x6/'E;\x98\x9e\xe9\xba\x16h\x5\xec\xe7\x7\x32\n\xa5\x4)\x14L\x1d\x97w" "\x9a\xb4\x62q U\xa7\x43*=I\xbe\x61\xaf\x9bm\xe8\xa9\xc8 \xc0\xe7\r\x43\xe5\x1d\x9" "\xb8\x37 \xc9\xd2\x6\xde\xe1\x37\x84\xcd\xc\xb2\x15\x12\xf7\xe0\x41\x8a\x90q\x97" "^[i\xa5Z\x97UVv\xe8#\xe9@\xf5\xa5\xe6\xe6{@\x5\x41\x99\xa5\xf8\xae\x97\x41\xd2\xd5" "RqS\xf9\xcd\xc0\x8e\xb9\xd9\\M\xdd\xfb\x9H\x5\x19S\xf3\x9cm-\x81\x1d?\xfd\xc2_xn" "\x7+*\x8a\x1fH0\xf9\xe5V\xd7\x8a.\\\xcq8\xe0|\xd5\xa9\xc2\xc8\xa7\xa6\x1e!\xd9(\x1f" "\xa6\xe6\xd5\xd4\xd1\x9d\xeb\x81:\xe4MJIp\x9e\xf\xc5\x63&$a\x5\x33'ZQ\xe9;Pw~\x12" "\xd9\x35\x9d\xbb>\xc<\x8f>3\xd4\xe1M\x3\xad\x88RA\xc8\x94\xd3\x64\x7\xf9$\xff\xc1" "\x1\x12\xb8\xe1\xfJ_\x1cG\x87\xd6kDA\xed\x83\x62\x18\xc0\x44m J\x89\xbc\x15|Jl8E" "\x18\xe5\x30\xab\xda\xae\x8c)\xd3\x97\x38\xdeK\xaeZ\xc6\x8d\x62\x34\x3\x16#\xa5s" "z\xd7V\x7fQl\xf3\x61\xbc\x42\xdb\x14\x10\xc2\x81*\xf\x7f\x11\xed\x81y\x7f\xf5\x9f" "%\xd0\xac\x1b\xb7\x13\x89\x84\x90\x61\x12\xf7G\x95k\xb8\x65\xee\xb5]\xd4\xf4\x8b" "\xaeu\xffw\x88Q\xdf\xbf\xf7\x1e\x9b;\xe5\x91~\xdbt\xe7\xael3BR\xe8\xdd^\x1f\x2\x87" "\xbe\xd3\xfb\xdc \xf9[x\x91\x1e%(\r\xf0\xb8\xc8g\xb3W\x9b\x9c\xdb\x19\xeH\x2\xd7" "\x14\x83\x18|i\xd3\x61&\xb8\xbc\x8e\x30\xeci\x6+\xcb\x62\xea" "\xc1\x82\xb1\xff\xc5qx\xdd;\x16\x89\xdf\xd5~\xf6\x45^L\xbdL\xee\xd0\x62\x99\x9e?" "\xef\xe3\x94l\xa8\x37\xb0\x87\xb8@\xc3\xe6RE\xea\xc4z\x87\r\x12\xc\x44\xb0\xe8N\x17" "\xe8\x85\xd0\xfd\xa7H=\xa2\xfb\xd0\xcd\xb9\x19,\xbb\xa4i1Zo2^m\xcb\x13\x65\x9c\xdf" "\x9c\xf8\xd9\xa3\xe6\xf2.=:;\xcf\xb6]\xb1\xa1\x6\x46\xd0\x8a\xa2\x1c`\x8f\xab\xce" "gV\xca\x1e\xd8\xec\xeb\x61;=^v\x7\r\x39H6\xbb\xa9\x7\x9S\xb1\x7@\xbb\xb3\x18$\xf9" ">d\xa9\x90\xfd\x8a\xfa\x98\x9e\xb8\xba\xc\x43R\x16V3\xe7\x9b\xc9\x9b\x7uy\xf8\x7f" "}T~\xac\xc4\xf4\xb6\x9c\x8a\xfc$\xc#\xb3\x1\x82%\xc\xdb\xe4\x61\xfe\xc4\xc2\xe6}" "9\x7f\xb2\x8d\x8dN\xc0x\xb9|C\xe7\x1d\xa9\x3\xea\xe\x80\xc8{e\xe3PN\xef\x84\x95\x14" "\x8a\x0(/\xa2\x46\xf7\xd6 !\xe0]&$\xb0\xb\x9f\x7f\x62q+\x8aY\xe\xcc\xd3\xf8\x1f\x99" "\xda^n1\x8c\xa3\xdb\xeb#<\xf0?\xdb\n\xf8\x1c\x83\xb9\x9|\xe\x8e\xd1\xa7\xa2\xadx" "\xd7\xe1\xba\xf3\xfd\xf2\x11\xd5\xfe\x83\xf1\xe\x42n\x13\xe2\xec\xf3\xfd\xdc\x14" "\x9cUa\xcfy=\n\xd4X\x8f\xeb\x34\xd1T\x5\x3}\x92\x12\x43\xa3\xae\xb3\x31\xcc\xd8\xc5" "\xa9I\xfb\xb5)\xf1WS6\xef\x66\xfc\xf2@)\x1e\xe3\xbd\xd2\x96\x42\xb0\x61%\\\x93\xec" "\xd9J\x9eOo\xa0\x9a\xe6\x9c\x14\x96\xa8\xbe\xa5\xf4\x8c`\xe3puFf\xb2\xf8\x65w\x16" "\x8d\x86\xb9\x8d\xe5g\xfb\x37\xe8\xf7\xb\xee\xf4>\xcc%\xbb\xcN\xe7\xc\xab|,(X\xa0" "\xd6\x39\x16\x1d\n\xcb\xf9|l\xc5\xe1\xc9g\x90\xe1\xe1\x80\xca\xfa]\x9\xb1\xc6R\x7" "\x3\xf3\xfd\xb3\xd1\xa8\xc7\xb8)\xe7\xb7&<\xe0tk\x96\xef\x1a\xe6\xfd\x46\xcc FI\x9b" "cW\x94\x9fU\nG\x95\xe8\xb4\xe9\xa4\x18\x46\x38\x1d\xc9\xd1\xe0\x93Y\x9a\xb0\x35\xa3" "\xd9\xe3U\xde\x38n*r\xfb\x0\x95(\xf3ny\xd3\xb2\xb7hv\x83!\xf4\xf5\x97\x1d\x63p\xe6" "R3\xb7h\xd6xC.\xa9\x61\x31\xe8\xd6\xd5\xe8\xf2\x81\xdfi0;)\xd0'^\x10\xf9U9\x9\n\xb2" "\xea\xbf'n\xcc\xe0y\x80\x93\x3\x16Su\x14\xf9\x63\xb0\xf2\xd8 GH\xe7\x15(F\xba\x13" "$\xc8\x97$\x9f\xc6\x95v\xcd+\x14\x38\x91\xebi\xee\xde%\xa0\xc5\x8c\x9f\x2\xed+\xde" "\xad\xc4\n\x8U;(\x15Y8\xcd\x65/\xdb\x1fY\xf4~\xa3\xaf\x8f\xbf\xc\xe\xd8\xf3\x91\x8d" "\x1d\xcb\x92\x0\xdd\x61\x1a\rJ\xa2\xa1\xb2\xce\xa3\x64\x1f\x12\xfc*EQW\xb1\xc9\xd0" "5\xdc\xf9\x11\xb9\x41\xa5\x0\xcf\xba\x9f\x65\xe7mh(\xec\x84\xd2u\xc0\xfeg^\xc6\xe3" "p\xb9O\x19\xa5\xc5\xb5\xd5\x39K\xc7\xd9^\xf9&\xe4\x63\xf`\xdd\xc5\xb0\x62vhL-eIP" "\x6z\xbd\xe1\xc3z\xa4\xec\x91s\xa9\xcbQ\x87\xee\x10\xd7\xe1:T\x84/\x14z\xe6\xeeJ" "\xfbP\xb8O\xfc\x83mZ[\x89>\xaa\x18\xb9\x8a\xe9\xfatQ%\xf5\x1bZ\xcb~\xea\xaa\x83\x8e" "\x11\xaei\xe8U\x1a\xb6\xea\xaa\r\x4\x9d\x98\xdcS\xdds\xb3\xa0\x30~\x1e\x8b\xfa\x33" "\x82)\xc9\xf3\xbbV\xd0<\xdatk\xa5\xae\xa5\xf2Tb\xb4r\xd2\xc3\xc6~q\xd8\xbe+r~\xe" "v\xb8\xb5~L(\xa4\xa1w\xdc\xd7\xd3u\xcdt\x9e\xca\xe8)\xf9\x9f\x87\x7iU\xc6\xa2\xc5" "j\x1a\xd5\x8f\xdb\xd3\x31\xc9\xf4Y%\xef\x8e\xb5\xbfRpj\xd2`S&!\xf1\xc1\xb1\x9a\xc7" "\xcb\x81s\x2\x64ti\x7f\x1d\xb6\xe5_.\xbb\xa3\xf5\x13\xebo\xf4\x1e\x41\x66\x80\xac" "\x7f\xab\xb5\xb\xd0\xbc\x8\x96\xf6\xc\xb3\x4\x31j\x94Sp\xcf\xa2;\x17\x39\xb4\x85" "\xa1v\x13\x42\xa3\x9f_d4\xc9\xc7\x9d\n\x10\xa4\xea\xa3\x66\"\xd2\x31h\x93\x9\x11" "a(R\x84\xfe\xbcygKO\xcc\x14\xb6\x62\x92o4\xff\x61l\x9eH\xb5@\x80\x84\x4wD\xc1N\xda" "<\xf0\x9a\x42\xa4@\x8f\xc0\x3<\xee\xf6\x44\xed\xc7\xa8\xf\x97\xe2\x81**2\x94\xff" "0T\xe\x9at\xcbym\xa3\x95\x18\n\xbb\x6n\xcbz\xfc\xd5\xaa\xe3O\x89\x84nZ\xdfwFZ_\x9b" "\xd2\xe4\xfb-H(\xf0\x65jK\x2\xe5\x62\xf1^c\r\xcb\x0\xfb\x8bT\xff\x10\xda\x11\xca" "\xc0\xfb\xb4\xb4\x8b\x2\xdc\xeb)\xd1\x84\xaa\x9a_\xb\x0\xcb\xe1! \x85i\xc4\xaf\x9c" "\xf7\x15\x13\xd8U\xcd\xc3\xba\xa7\x9b\x7\x65\xdb\x44$\xa7\x35=\x9a\x36j\xfav\xcc" "\x17\xe\xa6=\xdc\xf9\x8c\x86\xee]!\xdb\xd3M\x81\xc3\xb\xba\xa8\xbf\xca\x63\x43\x97" "r<`M\xf9\xa2\x9d\xc8+\x98\x1a\xc2\x95\x10~xx\x94\xdb\x41\xfe\x1e\x37\x81\x89\x9b\x1\x90\xcd\x9ciD\xcb\r\x34!\x90\xa4\xf9" "\xa5\xa9Y\xa1O^\xc9\xe3%\xd9\x34\x98\x8\xaf\xb0\x95\xdf\xac\xbd\xf1\xd2\xf9}\xbc" "\xdd\x1dK\x13\x84\x15U@3\x82\xf6\x18G\xa3\xcdL\xdc\xcdut\xaa\x8d\xe3\xb0\x33\xe1" "k\x9d\xce\x0\xcc\x9c\xb9\xf6vP\xcezq}\x7f\xb1_|p\xfe\x86\xdc\x15\xe6\xb0RX\xda\xee" "\xb7I\xet{?@\x82(\x1fW\xadO\xb0:\x92\xc4\xb0\xb8\xf6\x17\x3\x31G\xa0\x19\x43\x91" "\xb5\rU\xf4\x7f\x9amhm\xedQ\xa3\xc7<\xdb[\xbc\xa8\xc8H\x96\x30 \xa5\xb1)E\x16sM\xb9" "\xb9\x1drp\x1a\x4\xcd\xe8\x88\xf8\x89g\xcf\x82\xc5G\xce\x1f\x1a\xea\xff+5\xa4X\x1a" "\xb3\x42k\x88\x8f\xd3K^\xd9\x9d\xf0\x1\xd2\xe4\x84\xad\xf6HD\xf8\n\xe2W}!\x1c\x80" "k\xf6\x15\x66\x0\xf0\x9a\x16\xda\xc7>\x1c\xfe\xd7\x41x\xe6\xaa\x94\xaa;\xfc{\x13" "\xees\xd2.\xaf\xd4\xd3'\xc7\x8fW\xdb\xec\x80\xd7\xba-\x9b\xe8`\x3Y\xc3\xc3q\xd0)" "\x11\xf1\xd5\xe3\xfc\x32\x42\x7-s\xd6{e\x84\x6v\xb6\x93wS\x94\xd5\x9e\xef\x80k\xd5" "?B\xbb\xea\xac\xb4o\xaaov\x8d\x14\x38j\xc\xb7\x37\x81\x14\xbd\x37&\xf3sK\xd3[\x9b" "M\x96\x32\xb9{\xacq\xb2\x9a\xaeO\xfc\x83\xa9\x33\xdf\xa5\xab\xaa\x12>\x9eV\rO\xee" "Gr;]8\x7f\xa0\xee\x6Q\xf8\xf1\x4\xb6\xd7\xb\x90\xff\n\xe6\x18\xbb\xdf\xc9\xb4\xfe" "\xbd\xb&\xda;\x90\x9ci>\x8d\x32\xcaTC\xd9\x86T\xf7\xc\x8a\xdb\x4\xfd\xd1\xf\xa5\x12" "\x9b\xf4\xa7\xe1\xd5\xba\xd8\x99\xf5L6\xb2\x35)\xf8\x8\xec\xa5\x9d\xfb\x1c\x98\xc7" "W\x87\xa7\xd9\x39\x32\xe5\xd1\x15\xdd\xf5\x8c\x9a\x99\x95\xd8\xa8\xec\xe2\xb7\x37" "H'\xae\x96\x3k\xd5\x87/\xed\xdaxE$\xe0\xbb^\xc0&\x80\xd8\x34\xb1\x80\xebU\x97)\xba" "\xfbP\xf8\xe7\xb9\xf2\x61\xb3\x94\xad\x16mx\xe5\xd9\x17\xa2\xc0\xb5\xcb\x16\x7f\x45" "p\x1\xb8\xcf\x63\x39\x92\xdd\xbb\x45\xea\x13\xc9\x9c\x65\x9c\xf\xca\xdb\x36l\xd0" "(:k\xbb\x9b\xfd\xf1l\xe4\x98\x18L\xe2\\+\xb6j(}+\xa9*l\xe6\xbd\x44\x0\x86\x32~\x13" "{\x8d\xe6\xa2;A\x8f\xf1i\xeeK\x87\xa4p\xb\xd5\xd4\xe\xa4\x63\xce\xf5\x8b\x5\xdfh" "\xf3-g\x9e\xefp\xe8\x85q\xac}\x8d\xe9\xfa\xc6\xd4\x65R8`I\xd5\x9a\xe3\xa9#\xe6,\xdb" ";\x98\xeL=\xc8\x9dx\x92SV\xf0\xf6\xef\x1?io\x6\xbb\xa6\xe6\xed\x89\xbdP\xc0\x9e\x1c" "|\r\xb5}\xb6\xcd>\x1f\x1d\xae\x42\x94\xef\x8b\x42\x8b\xc4\xad\xcb\xb0\x30\x15j\xfa" "\xc0\x6K\xcd,\x8f\xed\xf4`xgY\x89t\x94\xcc\xa0\x33(`M\xe6\x87\xfo,+\x7\xd8\x92n\x83" "\xe)\xbb^\xd5\x42\xb\x38\x9c\x97\xe5\xbb\\\xcf\xc4\x44S{\xe3\"\xec\xb3\xc7\xd5\x89" "\xb1\xcfv\xf8\xa0\xbd\xcfX>\xfb\xe1\xff\x38V,\x7f+\xadSz[V=6\xf1\xfc\xa9SR4j\x96" "\xd2\xe2\xe6\xcf\x10\x37\x94\xc2\x9a\xef?\x7f\x86\x31@\xbb\xa6\xca\x95\x92\x9d\xf2" "\xd2?\xeb\x97Mo#\xc2\x14\xb9\x36\xc3\x97\xe8\xfa\x3\x7r\xc0\xdc\xf7Ng\xc5\x13\x9c" "Sc\xc4\x87{f\x98\xf0!\x2\xdc\xb'\xcd\x99\xac}t\x8c\xf0\x86\x95\xa3\xaa?:\x13\x88" "\xdfV\xf8\xdf\xa9\xf4v\x9f\x9chlUd?\xe4\xba\x9e\xa1\x35O>\xa2\xab=\x9a\x37\x81tM" "\xeex\x87T\xe0\r\xf0u\x9cJ\xe9Z0\xe2\xaa\x4\x9a\x98\xb\xd1g\"\x10v\xcf\xdc\xec\x91" "IB\xb1\xe5\xb3\x8b\xd3\x2\x86\xe0\xa8\xb3\xe4\xa4\xa0\xc2\xca\xbc\xee\x19\xe2z\x6" "mk\x8f\x92:\xe3K\x82\xbc\xfc\xd7s\x8d;Mh\x7`\xc1t!n\xa7>\xf0\x36&\xcc\x1c" "\xfa\x36\x9bV@\xc2=v\xa6\x9d\xce\xe8\x38\x1c\x65\x93,\xab\xf3&,\x8bp\x12k\x9a\x1b" "\xb7\xe5\x85\x96\xcat\xc9\xb7\xe9\x1c\xa3\r\xa0\xf&\x9f\xb3\x85\x86\xb0\x46\xe8\x94" "__\xe3\xf4\x96\xa7\xb\x14\x12\x31\xd5Vk\x1ch\x8d\xf5*R\xa9\xf\xe6)z\xb4s\xa2\x83" "\xa4K\xc7\xc9\x8d\xe1jM\xc5\xf1\xb0<\xda>\xe1M\xbd\x8br\xb0\x18\x85y!\x9\xb2_\xd8" "\xec\xfdk\x13\xd2s\x1d\xe7\x6}\xfc\xeeR\xe2\xc0\xab\xb]\xdc\xa7\x96\x13\"\xf9\x19" "&6\x17\x63\xb8\x93\x1_H\xeegG\xf0\x1\x1fiQ\x18\x65s$\xab\xa0N\x86\xf4\x1d\x9b\xcb" "A`\xac\xea\x9a\xa6\x36Z\x1c+z\x18.\x7\xf2\xc5\xd4\x81\x90t}rwv9\xba$l\xaa(\x4\xaa" "<(\xa7\x18k\x1b\xf9\x8d\x99\xe6\xa8;\xfeJ\xc6\xf8H\xeb*Xp\x1d\x13\x89\xaen\xd4tf" "p\xac\x62\xea,\x9\x9e!;\xa4{m\x81(\xea\xd9\x8a\xf1gi/\xad[?\x8e\x44$\x92\xe7\xa8" "\x9d-\xf0\xa0\n:\x11z\xf0\x86\xf5\x1^C\xb5\xa5jP/)2\x9e\xca\xe4r\xdb\x8f\x96=\xbc" "\x89\xa2\x38\x31!H+w'\x1f\x8b\xf2JQ\xeb,\x8f\xae\xf5\xba\x41\xd1t\xb8Z<\x89\xdc\xb8" "\n][\xcb\x85q\x97\xaf\x86\x37\x41\x30\xe0\xe7\xa9\xba\x42^\x8\x1b\xb1\xcfm\xbf\x87" "0\xf2\xa4\xab \xae\xf9\x64.\xed\xbc\x8W\xdcO\x81\x85\x4\xd8i1%sA\xee\x80\x43!\x8e" "w\xdb\x94&\xb4\x83\xd9?\xf1\xc2\x1\xc8\xb1\xa7\xad\xe2\x1f\x92\xf1\x9e\xfd[\xb6t" "A6\xcb\xad\x10#un\x10\xc1\x7\x18\xe9tY\xbd\x1b\x5\xc5kt\x1c\x99'\x80p\xba\xcbt\xb7" "\x7\xab\x92\xa7\xa8g\x99\xc7\xe5\xb3.p\xe3\x8d \xea\x38\xf6\x8g\xa9\xc1z\xb3\xe3\xdc\xac\x7f\xbe\x5\x42\x9e" "\xbf!i\xa8\x9.{\xc\xc9\xb8$\x0zz\x11>\xe1\xa2=\x8d\n\x62nna\x84}\x2\xd9g\x9f\x94" "V\xcd~\xcb\x1cqX\x9e\xaa*\xecR\xe3\xa4\xf8\x18\xc7\x8d\xd4r\n>\xa1\x36\xf8%k}\xcc" "\xa0\xaa.$5\xf0\x33.\xe6\xe2\xb7\x19S\x82\xc6@\xfd\x9a\x1f\x15\xa2\x64\x86\x2|\x4" "3\xed\xb6\xea\x13\x46\xce%\x86)\xad\xaf" "\x93\x16\x1$\xb5&\x10\xab\xb7W\x8c)\xc0\xf3\xff\x83\xb3\xe5%t\xf2\xbc\x94\x96\x4" "\xd6\x35\xc0Z\xd2\xad\xa4\xd0\x17\xa8K\xc\x83\x32\xc0\xab\x91\xc3 C\xdc\x42\x11\xfa" "\xff\x9\x9\xe7${\xe7\xce~r\x6\xc1kv\xb4\x63&\xbb\xe3\xd9z\xbcP\x99\x16\xe7:\xba\x81" "\x84s\x90\xe0:\xcaz+\xae!#f\x8a\x64x\xd2\xb5O\x12\x7U\x9d>\xdc$\xf1<\x9b\x92\xa8" "\x8b\xf6w\xe3`%\xb8\x41\x43^\xc1\xfd\"\xe3\x1\xdd/\x7\x8\x92\xf3\xd6z4\xf7\xa7\x9c" "+}S\x8,\xc6;\xc6\x64\x16\x9b\x32\xef\x7f\x10\x30s\x8dw\xab\xc2\xdb\x30\xb1\xb2\x41" "\xdeP0^j\x9c\x19\xb9\xd2O\xdd\x85\x9f\xb8H\xbdzQ2)y\x85v\xfb\x9d\x9ds\xea\x96\xfe" "\xf2\x82\xc5\\\xad\xb6\x9d\xfa\xc9\x9e\x61\x14\x5\xa2\n\xf6\x44\x87\x15\x9b\x66\x37" "8\xe9\x18\xb1~\x14\xf8p.\x94rZQ\x1e\xbf\x1f\xd9\x99\x8evB\xe8\xc6\xfc\xf6\x18 \xca" "\x87\x11-\x1b_I\xfa\xa0\xcb\xfe\x85\x34\x1d\xf9\xa6\xd2\x9a\xb6\x31\x38\xe3:\xa0" "\xbc\x84\x6\xeb\xa6\xe9\x84]\x1\xd4\x41T]\xd1\xec\x9a\xa6)x\xaf\xd3LM\x8d\x8\xd3" "\x99\xcaQv+Q\xfa\xb6\x98\x42\xf6\x8b\xec\xb6\x9a\xad\xd4\xbd< \x1z\x94\x11\xbf\x92" "M\xe0\x16\xf8\xb4\xc7\x7_\xeb}\xce\xe4t\xa0y\xab)\x0\x35\xb/\xeav[h\xe5\x9e\x3\xbf" "\xea\x93xG\xa2\x10\x88\xee%\x19\xb0\x9bI\xb3\xa8\x8f\x10\xbb&\x87\x1a\x9\xd6\xec" "\xae\xd6\xf3\xb1\x38'2\xfa\xae\xd0\x42u\xb4\x9e\xe1|gM\xfd\xedN\x1c\x82\x98\xb3\xfd" "!\xd1\xfeG\xd7\xd0\x1V\xc3(sdU\xbc\xd1\x32IpI;\xdb_POi\x1a|\xac\xc6\xf0\xf7\xc1*" "8\x86\xe6%\xfdX\x82>\xb9\x1cI\xf3\x8m?\x93U{\xdd\xfb{\xb0\x8d'\xf5\xca\xd8\xe5s\x95" "\x7\x1f\xbb\x8a%|\x95\xdb\xb9\x94\xe1\x88\x8e\xfd\x2\xe0\xc7\xa1,\x5\xc0\x30\x44" "\xc5HFF2z\xfc\xa6\xd3\xd6\x88+\xf5\xe8r\xf3\xf4\x94\x39\x8b\x88\x1fP\xf8\xf9\x9e" "\xa4u\xe8\xcd &\xee\x2\x81\x98\xdf\xd7H\x8d\x96\x1f\x8e\x80\x16\xa5k(\xce_}\xef\x36" "\x8d\x9$\x85\xe5\x97\xcb\x6\xa9\xc2\x35\x0\x3\x95\xdd\xe1\xc3\xcb\x95\x1a\xf9l\xa4" "G\xa3I\xcf\xe6\xaa\xd3\x99@W\xf3\x39\xa9\xffI\xcc\xd1m\x91<+\x1\x16\x65\x15?F\xeb" "j\xd4:\xed\x8eHGdj\x88\x42{\xc6\xaf\x61\x8\xea\x80\x37\x89\x11x\x9b\xae#\x1c\x89" "\x8bvH\x9d$\x9ere|\x1b\x88P\x6n\x97\xe6\x63\xfd\x86\xeape\xc\x84\x97\x98u|\xab\x43" "\xfdl\x97\x33\xc2\xad}\x9\xde\x36\xb9\xc6\x8\xa4w\x1pEU^B\x4\x99~\x85\xdf\xa6\xee" "\x8d\x1b&\xcf\xc\x80$\xe2\x95\x97I\xe6\x10\xd0,\xad!\x8di0*\x8bJ\xd3\xf6\x88\nUH" "\xe4\x11.\xb5P^\xba\x2\x1b\xb0\xb\xec\xa2#\x14=t0\xd6R\x1c\xa7<\xf7\x89x~\xdd\x1c" "\xaajd\xaf\x4Q1\x19L\xe5\xcc\xd4\xfa\xe5\x4\x1d\x1azoY\xdc\x8a\xf2YYGR\xfa.9\xa5" "\x8e\xa6\x34v@\xa3\x3O\xed\x9\xbd\x85\xbcR\x13\xfcv%\x9e%\x86\n>\x8c\x45\xef\x15" "\x1d\xaa\x84\xc3\xf9\xfb\x95\x1e\xc6\x36\xe1\x42\xf7\x84XW\x13X\x90l\xe3P\xbcL\x84" "\xc9\xf\xb0\xe7\xc3\x66\xcaoQ\xca\xba\xafo\xf\x96tu:j\x97\x31\xd4\xa4\x93\xfa\xb5" "\xbfTJ\xc6\xf0\xe9\xfd\x1e=c\xce\x12\xcd\x37Y\x91J\x19\xcf\x9cY\xb=A\xfa\xa2G\xca" "\xc5\xc3\xb7\\\x64\xbxc.)\x93\x63x\xfa\xd6\x9fS\xc5G{\xbez>\xc0\x1\x94\xcf\x1\xb6" "\xb4\xd1\x8b\xe7\x13/\x2\x46'\xc5\x93'>\xa9\xac\x13GD\x7\xfa\xf0\xf3#\"r\xd7\xa9" "\xc1\x31#j\"\x9b\x1e\xc2\xa8/\xc1\xa7\xc2U\xa8\x1'\xb\x11\x39\\\x99\x42]Z>Y\xa6\x97" ">\x88\xbfz\xd7\x43:S\xa9;P\x8c\x99\xf\xd5\xdd\x14\xd8\xab\xfb`\x7\xf5t\xd7\x18\xda" ":\xaf\x86\x30\x19\x91\x86\xea\xb5\xba\xc3\x97Xzm\xa9\xed.\xa6\x63J\xaf\xca\x34vg" "Q\xbe\x83\xd8\x61\x39\xcb*-\xbd\xbc\xe5~\xff\xc5$\x13\x38\x9e\x88\xf6\xb7\x9e\xba" "\xb3\xd1\xd4\xf4K+\x9d\xa8\x64u#/\xe\xf8/D\x85Y\x81Wb$\x5\xd2\x44,\xd5\xdah\xf9\x92" "\xb4t\xa4\x84\x45\xc4nT}\xff\xaf\xa5\xf9\x8c\xdd\xb5~q\xf1\xea\x9b\x96\x31\"\xa1\xab\x39(\xbf" "pk-\x85\xd5\xb8,\xffn\xbc\xd4\x36Kv\x19\x87\x19\xc2r\x8d\x18S\xd0\x19]^t\xd4\x88" "\xce\x61\x9f\xc1\xb\xbf\xbd\xcf\x13N\x1d\xed\xa3\x12?V\xf9\x96~C\x95\x84\xbf\xb2" "t\xc4\xd2)\x9at\xf2\x41\x5\n\rwW\xa4\xbc|gK\x84\xca\x45\xea\x4N\xdf\x64K\xf8\x89" "\xcb\xc2\xcf\\\x8d\x1e\x82\xb2[y\xez\x8\x0\xde\xe0\x6\x9f\xf4\x4\x18\x1a\x87J\x9c" "\x8c,n\xb\xbe=\xe5\x13N\xc4\x9e\xa8\xdbn\xc\xc7i9\xe9\x93\x80n\xb1\x8e\x1bM\xa5\x18" "\xf5\xad\xaf\xbc\x84\xbeHI\xad\x39y\xd2\xf4\xaa\x17\xc6\xd7\x39\xca\xe~\x14.4'\xa9" "/\x9c\xe0\xcb\x9d\xed{\xd5\xc1\xfe\xff\x38/\xa7J\x8_\xdd+\xe7\x1e\xa8\xe2\xf4\r\x99" "\x6\xd0{\xd8\xe6\xc8I\xf8\xbf\xb9\x6\xfby\x9e\x1\xab\x83\x39\xf6\x85\x45\x44p\xfc" "\xb1\x39\x14\xc9\x15\xd8\x13\x63\xaf\x82\x8d\x46\x83\x8bh\xb0i\x0\x6\x9I\xca\xf6" "k\xf1\x43?FD\x9e\xe4\xb3\x9d%\x9e'\x89\xedt\xcb\xf1\x63\x64\x61;I;t_\x97\x33\x16" "\x93kKV\x8e\x61V\xb3k\x1cO\xef\x9&Q\x8b\xe0\xf5\xac\x86\x5\xed\x1e,\xb6\xe0v\xd7" "W$\xa9\x64\x9f\xd0\xa0\xc0\x9f\x19\xe9\x33\x65\xb3H\xc0\x1f\x66\xe4\x92\xc7\xf1\xa0" "\"_^\x96\x93\x8eh\xfc\x8e\xa3=\xaf\xa8\x9f\x10\xeb\x16\x8\xb3|)\x3\xf6\xff\x36\xf9" "\xc5)\xef\x32\x94;\xf1\xc3\xcc\x6\xd2\x18.\x9d$H\x82\x89\xe6\xb8k\xae\xfdw\xaa\x61" "\xca\xe2\xc5\x5t\x87\xbf\xc\xfa\x62\xfc\xe0\x9e\xb8Z\xf8\xb0\x30_\xbe\xb2\xfd\x88" "\xc6\x9a\xc5\xe1\xbf\xcb\x9d\xe7/\xcdZ:\x4\xf8*\xc8q\xb9K\xac\x8eO1\xb8\xf8\x9f\xdf" "\x17rU\xb1\xd6\x93T\xf7M\xb6\x98\x44*N\xa1\xd8\xeV\xf5\xbeh!\x93\xe6\xb+_\x1d+\xd5" "\xc3?\xd1\x84\x9c\xfd\x19\x7\xc7\xc8\xae\x10\x1c\xfc\xd2\xca\x43r\x8c#\x80\xd7\x1c" "\xdd\x63\xb9\x33\x86UR\xb6\xb9\xf9\x98u\xd5\xa7\x37\xd6\x82\xc7\xe3/R\xa7\x95\xb1" "\x8e\xfd\nO(\x97\x7\x92\x61\xef\x35\xa1\xea\xb5~=\x94\x96\x1a\x3%\x61\xf5\x86\x84" "\x90\xa9\xe3\xb9\xc9\xe6\x3\xae\x97Z\xc3j\xb9\x84\xbc*(\x8c\xb6'\x1f\xc8\xce\x7\xd0" "A\xfc\x95\x8ezn\xebL)\x18.\x83\x9f\xcf\x97\x91\x63\x1b\xcb\x0\x8fm\xb5\x9\xb0n\xd8" "6ZW\xb5\x30\xc1q\xf0p,\xcd\x8a\x94|\xa7\x90g\x8c\x9\x1f\xe4\x9f\xae\x7\xfc\x45\xae" "\xe1\x11\xe7Qn\x8a\x8e\x96\x35=\xf8\xbf\x43\x6\xaf\x12\xba\xb7\x32\xad!\x1b\xe8\xac" "\xa4o\x92p\x1b\x8c\xe9\xb+\xa7L}\xcb\x8dr\x86-\x87\xae\xe5\x39\x1f\x5\xc1\xf5P\x5" ")\xb9\xc5\xf7\xb\x99\\\x61\xd1\x63\x83\xa6\xe7\xc7K?\x6|\xc1\xdf\x9f\x31\xca\x80" "\xd1N\xd8\x17\x30\x12\xb6\xf4z\x7u\x7'i?\xb\x6\xcc\n\xed\x11\x84$\xe2\xd8\xcb\xfd" "\x1\x97\xfd\xc7\x95\xeek|:TKA;\xa7J-\xda\x80\x8d\x36ZthCr7gy\xb2\xed\x46\x81]MK7" "\xe6\xe5\"\x1e\x36up\xcc\xb7\x9eM:\xbb\xa7\n\x32\xf1\x6\x8b)\xb8\x1a\x98\xc\x9fX" "\xb5\x91\xb3\xd1\xff\xd9\xec\x1a\xbd\x9c;`\x95\x18\xeb\x34\x15\xd1\x11Y\xd5\xdb\xb" "a\x84&g\xed^\xc1.8\xce?b\\W\xbc/\xc8\xe5\x15!2W\x8bj\xc7&o\xef\x82\x39\x12\xcc\xdd" "MF\xaa\xa7\xae\x96\x1d\x4\x14\xa7\x9dh\xd0\xf3\xd9\xb0\x65\x11\xce\xc9\x5\xa4\x66" "T\xf\x38\xe1\x7\xa2\xedp\x93\r\xc4=\x0+\x98i\xcb\xc1wN\xa3\xad\xca}\xc9\xb6\"J\xd9" "\x9ckR\x98\n\x9bk\xe\xcaY\xfd\xae\x1a\x1_\x14\x2\xe2_\x97\xc7\x85\xf7\x80\xd6\xa3" "\x98 \xf9\xe9-\xef\xa6\x61\xde\xffrh\x11\x12X\xd1\x37\xe8\xed!\rL\x1a\x4\x34\x6\xd1" "\x8e\x93\xff\x65\xe3\xa3\xbf\x37\x37u|\x1a\xb0\xf5-\x91\x45\xf1\xa1\x93\xc6\xe5!" "j\x2\x35\x62T\xb6\\r^<\xfb\x38\x10\xcf\xb2\x0\xc\x93\xc1\x81\xa5;\xc4\xb1i\x1#=Q" "\xbd!K\x17\x8f\xd3\xb1\xa3/\xe6\xe5\xd0t\x0\x6\x1aJs\xa4\xd8<\xd3\xe5\x9a\x98\xd1" "\xda\x1eN\xc8\x98k\n\xd3\xf9\x95RRR\xd4\x44\x1a\xf9\xd0\xd4}\x82\xe6RY\xcaX\x7f\x1d" "q\x8b\xd3\x81X\x99\xf7\xa6\xe4\xd5r\xc9\x96\xf8\xf6&\xdf*\x9c\x9b\xb8\xfb" "\x1b+\x96\x85W;\xda\x32\x9d\x9dMk\xb7\x2\"\x41O\x1\x2\x61\xd1\x31\xb4\xd2\xa5\xe6" "\xa0\x5\x98\xc\xc2\x8f\xff\xf0@P\xcc\xf1\x66\x19\xaf\x7\x85\xe9\xc)@\xb7\xfd\xe6" "\x8c\x18PXV\x1d\x1b\x33\xf8\x9ew?P\xba\xce\xea:e\x1cg\xb0\xc9\r\x0\xbd\xcb\x65\xe3" "\xbc\x14\xf4_rE\x8b\x0Q\xf\xa6t\xc4\xd3r>\xed\x99\xe3g\xbb\xf3!-\x83\x90\xed\xb5" "\x8e\xa4\\\xec*\xfb\xb2\xdd\xb5\x9cx/\xbd\xb6\xcb\xd8\x45J\xfc\xaa\x1d\x5\xd9\x1b" "\xd4\xb3\x95\xc5\xdb\x8\x66\xa7\x4+SH4\x1e\x98\xab\xd6Ps\xfd\x82,\xb2\xe\x36M\xc5" "R,|\xaa\x10\xd0\xdb\x38Y\x9b~\xab\x8fx\xfa\x87\x8e\xdd\x87I2\xdc\xbfr\xb5\x8f\x17<\x14):\xf9\xd1\\\xb2\x31z\x10<\xa0\xeb\xd0\xbc\xa4\xf7\xaf.\xf9\xed" "Z\xc3\n\x7\xbb\x85\x93'mR\xa8\xba\xf3\x98\x83\xae&\x13\x61)\x90\xee\x63\x1a\xee)" "\xa9\xfd\x87\x8dl\x98\xaax\x1f\x9b_gB\xe6\r_\xb0$\xca\xa4\xbf\xee\xd2\xbe\xe\xc6" "\xd1\x98\x93\x17\x1d)\x96\x1f%O\x7uZC\xbe\x1e\xb3i\x3\xd8\x2\xc\xd2\x63\xd0\xc4\x33" "c\xa6\x8d@\xfc\xd6\xd9\xb3!\x85\xdb\x9a\xbf\xe1T\xf3W\xba<\x19\x43\xb8t\xcf\xb7\xde" "q\x7K\xe8\xf1\x46\x99\x93~\xc5\xe6\xf\x61\x99\xf6\xab\xc\xb8\x12\xc7J'\xa3sK\x8\xb2" "\xabZ.\xc0\x93\x46\x4\xdf\x87\x91H\x6\x45\x4`Z\x4\x81\x63\xf4,\x1b\x86}-\x10\xc9" "\xd2\xe6\xa3\xe2\x93\x8f\x9a\x1a\xb0P}$ %wBw\x7f\x62\x1f\xad\x9bH\xec\x9c\x1,\xef" "t;\xe1\x1d\xd7\x3$\xb2\xae&bJ\xf8\x19\xeb\x30\xcf\x39\x95\x32\xedw\x8b\xa9\xea\x1c" "7A\xed[\x19k^\x13\x37\x86\x15\x1f\xd0kD\xe9\xd4G7\x85\xcau\xaa\x15\xdfy\xcd\x15\xc7" "G\x9b\xd6\xab\xc6\xd1\xa0\x31\x86<;5\x4o+\xd4Y\xbfw\xa2.\x97\x81\xd0\xe7\xb3(\xdc" "-\x1e\xfb&\x9\x39\x14Z#\x1\x96\xe8+\xd5\xa4\xa3\x38\x9e\xf\x1e<\x1c\xa2\xa2\xf0S" "=\xd7\x93G\x8a\x9b\x16w\x90\xd0@G&b\x6\xd5-t\x84\xcf\x42I\xed\xca\xb4\xb9#\xd2\xd9" "R\x85\x84o\xa9\x8e\xfb\x9b\xbf\x86\xb6 )\x87T\x92\x4\xac\xa0\x41\x13\xed\xb9\xec" "Q\x1d\"Y\x1U\x8\xad*1)\x1\x42\xc1\x92\xf8-\xd9HL\xda\n\xb2o\xc8\x96j)^i\xa4\xad\xf7" "n\xd0l\x85\xc5\xb8\x4\xdd\xad\xd8\x11\xdbTA\x90Z\xc8\xb3jP\xa2\xffu\xd5\xe1\x64\xb4" "Qz\x93\xe9ws\xf7\xa4V\x7\n,Z\xd3K\x7fz6\x16CK$\xb5\x98-e7e1\x3\x44M\xad\xa7t\xc6" "F4w\x7:\"@\xfc\xcf\xa6\x43K\xe5\xee\xa1\x7f$\xfc/\x80&\x8b\x83]<\x97nd\xc2N\x8b+" "\xb1\xc6\xf5\x16\xf1\xb]\x85u\x99}k\x8a\xe1\x4\x62\"\x1e\x1a\x87-\xde\xe2\xfa\x9e" "E\xcb\x87#\xd4\xd6pl\xcc\x5@\x1d\x35\xb2\xf3\x19\xd7\x33\xd3r\x96\xce\xe1\x11\x3" "\xa3k\xd1,\x18\x1a\x8e\xeb\xc6w\xd6\xc3\xfc\xdf\x0\x35\xee\xa5\xe0\x1dS\xf6\x89?" "m\xa4J\xf7\xe4?C\xaf\xbd" "\xc3\xc6\xdar.\xcf}\xb1L\xd4M\xdc*\xfa\x37\xbbT\xc4\xaf\xb0\x86+\xe1\xbd\x9c\xbe" "\xa9`\\\xb9\xb5v\xf4\xa0|\x96\x37\xd3\xa4\x9a\x16^6\xb8O\x4\xb7\xcc\x18\xfbyc\xe0" "L\xbbu\xe1\"GNt_\x16p\xec\x9f\xd4\x42\xbd`,\xf8+OW)S\x9fJa\x96\xb0\x9c\xb7\xfeJ\xd1" "\x14\x7ny\xfd\x9b\xa3t\x85\xb0\x9c\xa6\x9e\xa7\xdf\xafO\x2\x45\xfd,1\x6\xf\x13\xc9" ")\xcf\xad\xeb\x19\x37\x9\x37\rsAd\x91\x6\x82\x3\xcb\x8\x39\xd8\xf8\x84\xc9x\x18\xe4" ",\xbd\xcf\x31\x96\xb9\x88\x33\xdf\xc2\x1cRTQ\xbc\r\xde\xa5nP\xe5\xeb\x87I\x1a\xfc" "\x80\xb6\x1c\x63\xd1\x63t\x2uY\xa8\xb3\x84?Er\xe9\xd7\xb1T\xd2\x85\x11=\x1a\x12." "U\xf7\x6\x4t\x85\x6T}W\xb9\xee\xb3\xab\xcb\x38\xc0pD\xc8:2\xa7\x12\x34:\xa5w\xdb" "\\D\x1h\"N\xc4\x35\x97\xc8'\xd1\xce\x64\x1c\x83\x0\xc5\x94\xfd~\x6?\xaah\x8b\xb2" "X\xcf\x46wZ#\xf7\x39\xc0\xef\x93h{RJ9h)\xf1\xfd\x1[\\\xa2\x9a~s*\xec\xb4-\x6\x90" "\xf9\x99\x17\xa1\x90/S\xe4\xa1\x88\x9bT\xdc\xc9\xab\x1d*J$'j,\x9a+\xc1i\xf9*\x89" "\x6xu\xb3YL\xec\xcfq\xb8\xa4L\xcb\x6\xb7\x4\xfeG\xd4\xa2!u\xf1\xa0\xa3\x8f\x34_~" "n\xb5}\x5\x9\x8c:\x4,\xcc\xa2\x64?\xd0}\x8fn7'\xdc\x13G \xe0\xbc\x62\xd9\xa2\xb0" "\xd4\xf3\xf5\x94\xe3\x63,w\xbd\xc7\x92XG3H\x18\xbc\r\x8e\x16\xff\x9d\xa8\x44=\x96" "\x15\x83!\xa8\xc2\xa0\xdb{\xd3|\xaa\xae\xdbU+\\\xe\xfc\xa9\x44\xa2-BGQ\xe1Q[gPL\xd9" "]\xd5\xc6\x8fM!\xbf\x43j\x86@\xe8\xed$\xe\x8e\xcf\xcb\x43v\x9d\xb2\x1\xc}\xe7\x95" "rw\xaf\xc6\x37[\x14\xc1S\xae\xa9\xec\xd1\xf\x30x\xd0*\xa9\x8d\x1e\xaf\x8e\xeb\x63" "^\xbb\x7\x18\x92\xe9\xc3LF\xbeo+\x1e\x98w\xd7\x15H\xb\xdc\x9\xbar\x7f\x96\xbc\x84" "\xb3\xe9\xf\xea`]\xc6\xae\xc1:\xf3\x87\xd0\xf2\x10\xb9\xd7\xb1\xb7\xe0\x4\x1e\xf6" "zU\xedM\x1f\"\x36\x66\xfb\xbb\xab\xe9\x41\xc4\xf2\xc4m\x17\x88\x63\xfa/\x2mgx\\\xb1" "\xd2\xdf\xf8\xc2\x32\xd1S\x95\xc8]\xc6\x8c\xfa'\xfdT%\x89\x39\xd0\xc3J\x9d\xcc\x46" "\x16\x15'C\xf4\xcx\xbc\xf0_\x2\xba\xf1G\xbf\x9b\x87!k\xcf\xd6\x44V\x8cP\x18!\xaf" "\x80WxiL\xd2\xef\x0\xfaL\xcd}/\xb1_\xa3y\xc2\xc3\x42\x65\x62\xcf\x11\xa6\xacq\xb0\xdb\x7f\x99\x8f\xe5@\x81\xc6\x37\xa7" "\xe8/\xfb\xae\x30\xe8\xc0\xadL\xb0_\xc5\xb9!\x0\xe5_\xae\x9c%%#\xa7\xb2\xa7\x9a\xbe" "\x9a(\x8e\xcco\xf0\xaf=O\xea\xeaz\x9\x93\xf\xb8\x81\x10<\x83\xcc\xad\xbdr\xa3\x8c" "tp\x85\x44\x95YX\xc4\xf0\x1f\xf9)\x92\xa2\x93\xcf\xac\xfc<\x87\x65\xc3\x44.\xb8\xca" "\xb0\xf8r\xdd\xefr\x2\x62\x7f\x33(\xd1V\x1e\xef\x39o6\xaf\x15\x0\x0.tcH\xd9\xdb\"" "D\"\n\x9?'\xad'l~\xbe\x9b\xce\xe6~hg\xe3\x9c\xe\x1aV\xb6\xcc\x81\x88\xc0\x8f}\xae" "\xaa\x39\xa2\\`\x1e\xaf\x81\xef\x65\x81\xc6\xa8Vu|_\x8eJ\xe8\xa2\xf2;\xd0n\xcb\x1" "8\x3\xafy\xa9\xde;_\xb0\x3\xce\xfd\xb1*\xb9Y\xe9\xc9\x46Q\xe2\xcf\x14\xac+\xe8\x86" "\xd9\xd9\x2'P\xe3\x85G`Iv\xb4*D&\xf4\x1e\xb3\x8e\xf3\xa1\xdd#\xaa\x94\xd4l\x9a\xed" "\x97y#\xfc\xa3\xe9\x84\x19\x98-r\x90\x7\x1\xb8\xfb\xf9\x9c\x2SI\xa8h\xc4\xff\xc4" "XE\xd6\x46k\xf4$#/\xf2\x98\xcaP\x1f\xffS\xca\x2\xfe,\x91$l\"6\xb4\xf2\xf\xb4\xbf\xbc\x61\x88v$\xdc#x\xd8M" "\x1f\xc5\xd3ys\xe2\xfc\x84L\x87\xc5\x8b\xe5Y\xd0`\xb6\xf0M\xcd<\xd7\x11\x95\xf1i" ";\xb5\xcd\xc9_?\x1a\xb8k\x8c\x18\x65\x61\x92Y/\xd0\x45\xbb\xfd \xb7\xaa\xd6\x91\x39" "\xe1\xad\xa0\x37\xa5u\x3.Z\xd0\x19Rz\x95\\X@\xe7\xcf H\xc6P\x90\x1\xf9\xe7\xa0\x14" "\x90!4\xaf\xf7V\xff&Eu\x94\xc6o.\xb9\xe4\x1e\xb0\x18,g\xee\x5\xb6\xca\x1u\xb6\xa9" "7\xdc\x86\x43o\xa1$Nc\xd6\xa6(\xbc\xd9\xd5\xc2\x83>-\xf6\xdd\xea\x7\xa6\xf0m^&,P" "\xef\xd3LN\xf0[A\xb1HF\x94\x92\x15\x12\xf7\xde\x93\x33\x7f\xc1\xb7v#\x6\x1e\x16\xd0" "G/7\x80\xdc\x9a\xf3\xf8\x39H\x82\x1e@\xd1`\x8f\xb9\xfd\xd5\x38\xf6X\x83\xd5q~\xe6" "'\x8fG6\xa0\xc0\xc6\x62`E\x82w\xf2\xb2\x85S_\x8d\x8cg\xe5\xdfR+\xc9|\xb4\x89\xf8" ";<\xad\x0Y\x96,H$$\x6P\xe1\x9\xeb\xf1\xc4P6\xdb\x87\x86pM/t\x93\x80\xedo\xd8\xd2" "\xff\xe9\xd9w]\xddX}\xdc\x8c\xf2\x1c\xb7\xa1\x19\x9z\xc2\x66+\x9b\xf8\xb3\xffr\x1c" "\x8a+\xfc\x37\x9aH\xa2\xca\xb1\xe0\xa4\xc7\x90\x85M\xd8\x6\xff\x8c\xf8'\xfe,\xcf" "\x4\xfd\xb3\x9b\x9e\xb3W\xa0l\xd6~%\xf3\x1N\xae\x9d\x7\xce\xed\x88\x85Re\x19s\xba" "\xe2\x7-\x95\x1e\xd1\x1a\x1c\xc5\xdc=\x10\x17P\x1cI1\xe1\xbdr\xfe?\xf9=\xb5\xf7\xa9H\x6\xd7\x63" "\x97\x8a)0\xa6\xe3\xcd*\xce_\xea\x4V)X\x3\x39\x95-\xf7!Y\xd8k\xee\x84\x9b\xe3\xd5" "\x96\x43*\xe\x31\xed~\x8a\xb6\x36\x44\x84'H\x9d\x1\xe4\x46w\x1a\x33t\xfdNQ\x90\x62" "\xc2\xcf\xb2|\xdb\xb2\x43\x9\xf\xb7\xf\x94\x2\\\xaa\xdb\x4\x8e\x62\xa3l\x87\x9f\xe0" "\xb5-\xf\x1b;a~\x6\x11\r\xe5\x10\x61\xcc\xce\x9f\xfb\xe3{d\x95r;\xc9<8\x80\x8d\xc" "\x1d\xa6\xcbQo\x82\xcf#\xc2\xa9\x1a\xab\x97\xcb\xa9t\x18\x10=\x84~C\xc5\x4ZS|6u\x4" "\xce\x1a\xc6\x13\x8f\xea\xe1\x9a\x61Y\x89\xe3\xae+t%]\x9d\xec\xeeo\x9e\x9f\xcd\x65" "\x13\x9b\x82\xfe\xc3\xc3\x62\x87\x44\xe\xf3\x94K\xbbN\r$T\x9b\xce\xdc\xe5\xb0\x88" "C\xf\xae\xdf\x97\x6\x35w\x1e\xffrmL\xfd*\x9b\x64\xe5k\xb1s\xb\x9e;\x3\x98\xaf\xd9" "\r\xd9\xc1\xea([\xc3\xee\xf9\x18`-\xd6\x66\xf3??\xd1X\x16\xe0\xe9\xdb\xe6q1\x16\xc8" "\xb9xL\xfb\xb3\x9f+;\xbd\x8e\x9e:?\x84\xce\xee\xc3\x97\xf6\"tT\xb^ \x8ch\x91\xef" "*~=\xebSVa\xeb\xdf\x9az\x98\xf3]k\x99\xf2=(\xaa\x38y\xca[\x9aN\nP\xa5\x97M-\xe\x14" "/\xf0\xe\xe3Y\xea\x64\x16\xd9\x1c\xec\x8a\xb2\xcaR\x3\x1e\xb3)\x82\xce\x16X.|jkL" "\xb7\xb4)\xadW\xaf\x9d\xcf\x94\xe3;o\x1a'\xcb\r\x7\xe0\x63Mi\x9el\xa7\xf4\xeath\x9b" ".\x13\xc3\xdf\x41\x91\x62wd\x8cN\x88\xdc\xf0\x8f(8\xac\x8$B4\xe4\xc6\xb0\xeaVP|=" "\x9d\x43\x9z\xed\xbf\xcdj\x3\xd5\xe0\xb9P\xa2\r\xe5M\x18\xf8\xe1\xb3P\xe1<\xaf\xe3" "2:\xf\x86\xa7/X{\xa9\xa1\x1aMLWe\xc4\xad\x10\xbc\xb4\xc3\x8b\x97\x1b\xfb\xf3+\x6" "\x1ex\xc5Lq\x8b+7\xf7@*hw\x86\x86\xe7\xca\xc\xcd\x80[\xad%\x42\xd0\xed\x94\xdb\xee" "\x1a\xa6N\xf9zwCio\x82\x35\xc\x12\x62\"\xf2\x17\xc1\xfaZ\xe0S\xa9+\x95\xb4\x80<\x1c" "@\x15\xbeu+Y\x1d_T:\xb9\xc3\x88\xb5!\xa3\x1Q\xe\xc7\xfa\xd6\x46\xec\x17\xd0\xce\x83" "\xd9.\xae\xea\xc8<\xf8\x8f\x45i\xf1\x86\xb+\x90}\n\x6\x31\xe3\x85\xf2\x93\x97\xaa" "\x88\n\x14l\xc5\x16\xac\xd8\x9\xe5\x8f_\xe6\xfe\x89\xf2K\"F\x95\xde\x81\xfd_\xe3" "\xa2\xcc\x64\xb\xf2\xb2\xfa\xaeP\xe9\x8\xa4\x36 }\xa9\x16\x92\x18\xd7\xe\xf8\x7f" "\xd2\xb9S\x9\x82\x32N7\x7\x9ekD\xa5\x6\x41\xd5\xb3\xdf\x5\x8\xc4\xd3]\x87\x9dt\x89" "\x10\x61J\xfeK\x81\xf\xbe\xf8\x17\xdc\xe1\xba\x41\xe5\x10\xf1\xb1\xc1\x14Q\xcc\xee" "\xee\x8dh}~#\xeb\xd2\x42\x7f\x97\xf5\x84\xa2\x10\x9d\xc1%\x1f\xa8\xed\xfc\xf1\x37" "3\x9d\xe3Q\x8f\xda\xe4\x9dqglwk&\xa6\xd8<\x99\xf7,F\x96\xde:WIL\xab\xa0\x63#4\xbb" "T7\xf7Vq\x91)\xdc\xd5\x8d\x17`\xc7\x11\xa4\xf\xe7\xfeP|\x9a\xdf*Ze\x9c\x91\x8e\x13" "\xaa\\\x1dtT\xf7|\x98\xd7\xf4\x8a\xed\x17\xdb\xeb\xac\x45G\xce\xd6-\xb\x18\x4\"{" "\x1f\x17\xe9n\x13\xcdY(\x8f\xb2\xf3\x17\"\x0\xdf?\x14\xed{\xa8Z\xa0\x30\"\xa8\x61" "\x1b\xb4\xac\xb\xc7\x9b\x34\xb4\x89\x30h\xe0w\x16\xd1\x63Zx\xa3\xf5\xe5\x83\xc6\xe8" "Y\xb2\xa6\x46Y\xb8\x39xi\x9b\x88\x1f\xfa\x93\xf5?\xf5Y\rp\xb\xe8]g`Q`w\x83\x30\xef" "\x14\xcf\x15\x89\x93\x90\x32\xad\xcd\xb7\xc3\x93" "\x10\x96\xd4\x16\xe0\xb7\x8\x85\xb7\x80m\xfa\xd1\x30~!\x8b'\xdd\xfc\n\x8c\x32\x10" "Z\xaa[b\xef\x81\\l\xa4\xdeN\xfb\x93l~\xcf*\xe7q\xf_\x10\xbe\xf2\x7\x38\x61\\Y{\x8" "\xde\xc7&h\xfc\xf2m\xbb\x9a\xcdVY\x18\xf9\xed\"#\x1a\x80\x38s\x8d{UV\r\xb1\xd2\x61" "#jd\xcd\xe;`\xcf\xb4\x15x\xdb\xa1\xaa$\x1c\xe7JT\xde\xcf\x38\xb5\xf6\x87\x45H\xe8" "\"\xd4\xeO4\xeal\x8ci-\x18\xe4\xd1\x92.H\xad\x34\xab\xa0Hy\xfcH\xeb;\n\x80\x8c\x88" "O\xe\x7\x38\x66\xab\xab\xbf\xc2[3L\xfa\xf4\xef\x43\xf7\xc7\xdc\xce\xc4\xd9\x87NF" "0\x19Z\xa6_N\xcf\xca\xf1\xc3![67EV5\x94\x1byD&\x0\x36\xdd:cj\x1c\xbf\xa0\x2\xd9\x8f" "\x15\xb8\x85\x12\x46\xce\x0*\xebx\xb1&/\x7f\xf6J\xa7\xbc\xb>\xeb\xc2\xd4\x63\xa4" "a\x9e=r\x91%\xde\xbf\xc)t S\xcf\x94\xfep|7rD\xae\xchp\xceq\xfd\x95\xc0\xec\xa7;\xd1" "9\x19\xbaq\x9c\x14\xd8\x8a^\x8a+\xca\xce\x8c\x96\x17\x16\xaev\x16:'e\xc3^iw3,\xcc" "ik\x1c\x30%\x96\x37\x17o\xfb\xcb\xe1\xc6\xcb.\xef\x93\x31\x99Z\xf7\x2\x80\xcc\xe0" "\x18W\xb0\xd9 x@\xd6\xdd\xf\x83<`\xd7\xd0\xdd\xb6\x9d\x1#`\x11\xfL\x96\xe6\xdd\\" "\xbew\xce\xd6\x38\x83Q4\x16\xdd\xdf\xb9y\xac%\xf3zNM\x1d\x90\x11\xdf\xee\xaa'\xad" "\x91\xc4L(\xf1\xd5\xf6\x98`cd\xfd\xf8\x19;\n\x4\xb3g\xd8\xa2\xc\x9f\xe8Z\x83]F\xa6" "\x9d\x1cM\x10%\x2\xa4]\xa8\xbb\x96\xda\x9d\xb5\x38i\xd4=\xad\x46G\xe6\x31&\xf2\xc8" "8\xc7\x5p\x97Y\xae\xbe\xa3?\xbf\xee\x44\xf7\xa1\x98-\xa6\xc8\x1f\xc7\xc1\xe5\x33" "\x1e^\xa9w\x1a\x61\xe4\xe2\xd0\x13\x42\xa3\x8f\xe6\x80\x32\xb7,4\xed;Vj\x9bkS\x8b" "O\\\xb6\xda\x9f\xa3v\x18L\xfb]\xa5\x42\xed#\x5\xdc\xed/\xcb!\xb0\x34Z\x1f\x33\xf1" "/\xe8\x4\x90\x11\xadL_\"\x98nR\xa8\xb3\xac\x44\x65\x0w\xb6h\xfb\xce\xce\x86\xd8\x8e" "\x8c\xcew\x1c\x1d\xc7#T\x15\x35!\xf5,\x9cg\x8d\xd8=\x9f\xa4\xf6\x9a\x1dW\xec\x1b" "\xc\x91\xf2\xf\x30\xa6\xa1t\xbe\xb4@h\xbd\xd7\xe\xba)\x19\xe9\xae\x6\x19\xb1\xde" "{<\xc9\"\x80\xf5\xa7K\xd6\x43\xa5\x61\xdc~\xac\xb2\x9\x1d\x12*\xbb\x1e\x38\x95qk" "\x18\xd1\x46\x97Y\x93\xe6\x8d\xa3\xe1\xec\x61#n\xcb\xbbm\x9a\x1b[\xf\xe3~\xea\xbc" "a)\x88\xbcg\xe9\xf2\xd3\xbc\x8d%!\x11\xe8Y\xafU.\xb2\x4\x7\xbc\xfb[\xdc\xe3\xdf\xec" "\x19\x64\xc5\xa9\xe7m\xf6\x33\xa5\x8c\x0\x89\xcd\xbc\xf9\x7fi\x17\x37\x16I>\x1cU" "\xbb\xa4\x8eZ#\xcb\xa3\xc5:\xdc\xc0\xaa\x9\xe\x95P\xc7\x1\x35Q\xca\xd0\xa2q\x6\x45" "\x9e'\xb3\x12U\xa1U\xf\x8a\xccK\xe0L\xdf\xc0\xc8/\x17X\xd1xj\xd3\x9a\xe1\xe3\xdb" "\xed\xb9z\xceG\xc4\x1e\xea|\xd0\x1e\xff\xc8\xdf\x9c-R\x13\xc9z\x16\xdc\x6\xa9\xc1" "\xac\x42\xb7[\xfcv~bvu|\x4K\xc7\x31\xd3*\xf7\xcbj\xf3]*\xa9\x11n+U\x82\xd7\xb3%<" "M\x8\x38+\xd6\xd9\xdb@\xbe\xa9\xbdW\xfa\xd3\xc4\xbe\xe0-\x87\xd6\xbe\xe0.\x18\xbd" "\x1d\x8c\xc2,qM\x8c\xbewn\x96\x12P\x9a\xe4oQ\x16\x4,\x8e\x64\xd6q\x9e\x86Jt\x87z" "\xb5#\x80\xef\x17}\xed\x7f\x12\xff\x89\x1a\xacp\xcd\x89\xde\x42\x45\x83\x16~u\xb3" "Y\x80\xca\r\xff\xaf\x62\xd9\xdf\x33S\xf6O\x9>\xeb\x86\xedH6v{\xa4\x8d\x8f\xbf_\x1b" "\xfa\xf8\x43\x13\xa8\x9e\xc4\xa4\x62,\x1a\x1a\xf1\xc6\x42\x9e{\x9b\xb5\xb2\x64\x39" "\x9d\x90\x1f\x1d\xf3(\x88\"\xee\xa3\xe7\x19-\xaa\ro\x9e\x1e\x9f\xe\x9f\x9d{\x9a." "Mc\x10\xd4\x38\xd7Ka{H\x15Yw\xc0\x95\x92\x32\x19\x8d\x1fI%,\xa5M\xd5\xbf\xe8\xb0" "\x1ck=\xbe\x65\xb7\xa6\xa0\xdc\xb6\xecN\xf9}x\x80\xd9\x3>\x8a{^\xe7\xac\xad\x96\x8f" "\xb4\xfdnB\xd8,F\xfU!\xc9q\x98%\x19\xa3\xa6(\xd3\x2i{A\xd5HL\xe8\x36\"\xf8\xb\xbf" "nD&\xcbp\xaa\xe0\xc1\x64\xb5\xc3\x9\xa8\xfc\xa6\xee\xca\n\x80\x9f\x8e\xf0\x9d\xac" "\xcc\xc6t\x82\x1c\x90\xa6\x17YV\xc5Nb6+\x85i\x85vI\xc0\xd8\x1c\xc3\x86R\xeai\xd8" "\x8a\x34\xc\x83\x65\xafNL\x89\x5]\xc1Tv\x9f\xde\xb9\x63=3\xf6\xf4\xc1\x97iu\xadz" "\xc9\x4\xe7~\r@\xb7\xde\xd2\xec\xb0\x95Y!\xf6\xdd\xe7\x99\xab\x85\x16u'1Q\xb\xac" "\xe6\xc6\xc0\x43\xc4|\xeb\x61\xe\x17\xc9i X=\xc5\x93\x39W\xfa\x1b\x35\xca_\xf\xd0" "\xe8P\xb1P\x83U\xbc\xfd\xfc@U\xb\xd5j\x99G\xdc\x94\x6\xde\x86\xd9\x4\xd2\x92!\xff" "\x9$\xdb\x8d$\xa2\xb1\x98\x65K\xc\xb8\xb5\xea\xdd\x62\x93\xab\xb2\xba&2\xa5&\xca" "8\xba\xf2\xc8\xe9\xd2\x97{\x1fs\xb2!?G\xb1Z\xb4_\xff\x99\x44\x7fTH\x9-\xec\xcb\x9e" "\xc7\xe3P0\xf1\xe1\xe9\x80\x9c\xe9\xbe\xf6\x43L\\\xb5\x82\x39\xd1\xe4\xe4\x4\xcc" "\xaa\x91\xfe\xa4\xef\xbe\x8bq.\xa4\x46\xc4\xad\x12\xc3\x14gE\x8d\xf6\xb6\xf6\x9d" "\xa1\x31\x8c\xbe\x12M\x0\xb4\xaf\x87q\xaf\x41\\\xca\x1p\xe0\x14\xfe\x8f\x31\xa5\xe" "\xef\xcav\x17\xb8\xce\xb9\xaaM\x9\x9a\n\xa9\xe7\xfe\xc2\x1bN\x9e\xfe#\xfd\x65\x34" "Z?\xe6\x1b[\xa1\x36\x9d\x32\x4\xd6n\xb0\xfe\x9a< \x1b/\x1b\xfcTc\nE\xd2\xbe\xe2\x93" "\xf0\xc4z\xdd\x11\x37I*\xba\xcb\x90\xa8sv\xe5\xbbIq\x9dJ\x2~@g\xbf\x30\\\r\x44\x3" "\xe1;\x82\xe6\xb0\x93\xd5\x8c\x17\x84m\xe1\xd6p[t\x4\x8e]\xa2j\xc7\xd0\xab\xd2\xf7" "\x99\x9e\x8b\xe6\xf2\x94\xb3\xf2o\x9e}Q\x2\xee\x96\xe1\x61\xb7\xc6\xcd\xa4\xb8\xd5" "v\x9\x85\x1b\x62.\xae^\xc4\x81\xd8\xe9\xef\x87\xb2T[\xc1\xde\x8d\xae\xa2\x19\x2\xbe" "\xd7\x14\xb4\x7f;Qu\xcL\xc5\x13\x80\x36\x90\xb0\x9o\xdd\x1c\x1d\xfe\xbd\xd9;\xec" "\x88\xd1\x11\x8e\x30\xce\xa0\xf5\xb5\x8{\x19\x62X\xe2\xbd+*!\xbaI\x8aH\xbeY=9\xde" "v\xb1i\xfb\x7\xffj}\xda\x84gR\xfe\x31]:\xf8\xdd\x34/k\xd1\xf4\xda\x62\x93\xa5\x81" "\xf0\xc5\x90\xd7\xfb\x9eQ\xe0\xef\xd1K\x89\x1\xd5q:Y\x92\x9b.\xda\xff\xf6\xf3\x3" "\x13\xc1\xb0q\xeH\xe1\xef;>\xbf\xda\x65\x38\xee\xa2[\xb7\xc0\xd5\x2\xf5.p>\xb6\xf3" "\xf2w#\r47o5\xb7u\xd2\x17\x97\x94\x31\r\x61tWc\xfc\xef\xb5\x93\xe2\xde\xad\xc7J{" " AJ\xf2-=\xc0\x43#\xf9\xba\xe2x@L^\xdeO\xd5\xccG\xcd\rV\xa1T\xf2\xf5\xd7\xbc\x62" "$A1\xcc\x94h\xaeN)\xe7\\[\xfa\xeb\x19\xb\xd6\xe1\xeb\x8b\xbe\xec\x39\xdcmOL\xa3U" "\xec \xfa\xd5\xf8\x1a\x91\"\x16\xad\xe6\x8a\x98@\xa6\xac\x9!\xb5(\xfcI\xab\x61\x9f" "f\xf0\xee\x35\xfd|\xffJ\xe7\xbf\xbb\x34\xea\xbaOq\xad\xb1\xd8\xa2S\xbd\xac-\xa7*" "^t\xe2W\x12\xe4\x36\xf2\\K\xc7\x32\x1f\xcf!#\xc4\x63\x7f\x46'\xd5\xeaw8\x0\xfcP\xe4" "\x6\xfd\xa3\x93\x5\x33\xff\xbf\xa7\xd3\x87\xae\xa9\xe5\xc0$\xdb\x8e\x32\x9f@v ,\xee" "\x11\xd0\x1c\x37+?\xd5\xf% \x8b\x39\xf8\x19#\x8e\x80\xa5h\xf5\x92\xe6\xbdwb" "\xa8k:\x9cP5\xac\x1m\xacx\xf\x33\xae]kJ\x4(\xd7\xf3\xa6v\xb7@\x9\xd1\xe4\xd6\">/" "\xc3*\x97/\x92\xb7\x61\x1e\x13\xeR\xa1\x38\x36\xc4s\x8bjR\xff\xeSnH\xfd\xf9\xde\x9e" "U\xeb\x84\x7\xc7\xf. i\x9d\xf9\xc5\x8a\xd6\x1c\x36Q\xe2\xae\xe0\xcb\x61\x80\xd5\xd4" "\xe2\xc2\xaa\xeb\x9f\xa0\xf1v\xcd\x4#\x8\x96\x84~\xed\xd1\nsLR\xfe\xc0X\x9dr|\xa2" "\xbdn\xda\x12\xf\x1e\xab\x3!\xd2\x44\x82\x41]\x94\x8c\xff`$\x11\x1a\x1f\xe6\x10\\" "#\x90\xb5\xb2\xfa\x66\xcc\xf1\xff\x2I\x99\x1f_W\x93\x9d]\x5\xe5@\x12M\x19/\xe4\xf" "\x94\xb0\xab\x86\xb0\n\xa7\x12\xcf\xa5\x84\x7f\x44\x81\x93\xa3\x7(\n\x1d\xf1\xb0" "\x93w\xc3(\xc6R\xe7\x32l@\r\xce\x97\xd3\x38Jj\xef\x32*\x8a\x94\x87\x97S\x11!\xdd" "E\x9d\x8c\xdb\xc5\xa5\xcc\x97\xbd\xda\xeb\xf5\xdb\xc3\x46\xb\x9aJg\xf7\x8a\x8fX\xc2" "\xe3VV\xcc\x9f\x8d\xbc\x66\xbeW\x94Z]\xf1?R2\x9du\xb4\xf6\xdf'\x16\xd1\x65v\xa4\x8c" "\xa6kQ\xc\xe6\x35\x37\x64\x87\x8\xb\x18\x95o\xe7\xc8 \xd6\xcf\x43\xbe\xa6\x44\x87" "\x1b\x11\xbe\x44\x46\xad\x45nE[\x3,\xc4 \xcf@\xfb\x9dP\xeb\x18:\x9eO\x15s+ \xf3\xb3" "\xc6nn\x80\xcc\xae\xab\x95\x8b\x6\xd9wM\x94K\x8f\x7\xe7\x4\xb8Q_\xa0\xc6uF\x6\xac" "Hq\xc4\x1c\xd9\xe7\xef\xffM\xb\x91\x17\xd0j\xef~\xcd@\xadk>\xdc\x43\x39%\xcb\r\xa9" "\x9$]\xe5\xfc\x93\x88\xb2\x42\xcf\x9b[\x93\xcc\xf2\x1d\x96\xa2\xf0\xd5\xb2\x32\x39" "jE\xc9l\x85\xcf\xdd\n\x1dL\xfe\x92\xcb\xd2H\xe4\x1c\xcfO\xa9s\x13\x43r\x97\n\xa9" "\x93X,\x7f&\xe1\xcc\x99\xc4\x30\xef\xf1I\xae>f\xaem\xe4\x84\x84\xda\xab\xa8\x36\xf4" "a\x83\xa6q!Q\x93\xfe#\xf8h\xc5\x9+\xe0\x89t]\x94\x7\x8G\xf7l+\x8d\xa3L\x1b\x10\xb6" "\x1e\xb3\xb9\x0\x91\xda\x43\x81\x9e\x9f\x8c\xc8\xf0\xdc\xfd\x44\x9c\x9a\x1c\xfd\x46" "?n\xbb\x9c}\xeb\x86\x2\x37<8\x15\xa6j\xci\xef\xf5\x18\x98NO+\xfe\xe0\xe9\x2t\x81" "o\x1fx\xdd\x93Ml\x1e\xf6\\\xa1\xb0\x39\xa3\x84\xec\x95\x84pc\xfb\x99+\x97\xae\xe0" "Q\x17\x89\xd1\x88\\i\x3\xfa\xef\xadxj.|O-wk\xc0k]\xb6\x4\xc7\xbd\x1d<\xfc/}S\x96" "\xffPgs(\xb0\x86\xf5\xfa\"\x41\xd0\x9a\x41~T\xd6\x11mQ\x11-\xcc\x34\x35\x9a[\xd0" "\x8\x1d\"Hh\x7f\xbdV\xa8\x89\xca\xffR6\x17\xc7\x18\xed\x82\x8e\xf9\xde\xb5\x61Lm" "q\x8eL\x87I2\xf0\xf0\xbd\xc0)\xec\xfa\xc5\xe1\xca\x37\xcf\xd6\xc8\x82 %U\x95\x9e" "[\xaa\xe6\xf3\x17 \xb6\xacR\x82\x93\x97\x8a\x1a\x14w\x5\xf\xda\x8c\xcf\x8b\xc2\xf3" "\xb2@h\x14\x35u\xa3\xfc\x9e\x80\x10O\xce\xe0]?\xcb\xbc\xc1]\xdf\xe9\x1e\xa7\xf\xaf" "\xb3\x12\x98\x61\x43r\x9b\xda\xdb\x42\xd2\xaa\x12\x39\x44\x10\x1cg\x0 zpNR\x6\x19" "\xa8\xcb\x31\x31@\xd5~ \x82\xe1\x4\x37\x33\xd6\x9e\xfc@\xb7qV9\x2\n\xe2\x8e\xcc\x0" "W\xaa\x35>\x91\x12\xbf\xfc{\x12!dZ\xec \xd3\xb3\xcf\x63\x7}\x9e\x9d\xa9\x63.\xb\x1c" "+\x80\x1c\xf@k%3=0b\xcd\xf0?\xc6\xa4\xc2\xfe\x8c\x87\xd6\xad\xf8\xcu[\xb8\xf0\x0" "9\xfe\x1c\xf8\xfb\xce\x11\x9cY\xe8W\xf1=\x1\x89\x1e:\xfa\xc3#9;p\r\xb3\x36ZY']\x11" "\x8c\xcf\x9b\xc2\xaa\xfdp[u\x9+0H\x80i\x1f\xf5\x88\xf3\xf2\xc2\xdb\xc6<\x89\x93\xd1" "\xae\x86T\x12\xce\xb8\xfd\x0\xc8-:\xa6\xd2\xb\x12\xe6\xf6M\x16\x42\x6\xb3\\\x10\xf8" "\x81\xaeH\xc2\x33!\x5>\xb9$[\x1c\x38\xdb\x9a\xa7K\xc7\x19\x86\x90\xf4\x32\xde\x85" "\xd9\x0ze\xf\x8c\x42\x43\xe0N\x9t\xc5\xc\xf4T.N4\xafS\xc2\x38\xc0\xb0=\xe\xc2\xc9" "\x1c\xaf\xa1\x8a\xf5nz\xf7\x97\xd8\x61\x18_\xdfK\x90\x9a\xaaK\x85\xf6\xc0\x8f\"\xb0" "\x1c\x7\x42\x85U\xcc~Y\xf7\xb1\xd4\x90\x9f\x15\x4\xe\xc1}\xb2\x63\x31\xeb\x66\xcd" "\xe8\xb0\xa8\x39\x18\r\x13\x84\xd5\xfd*\xe1\xb8\xed?\x84\xe8n\xa7\xe1<}V\xb7p+\x4" "\xcfu\xeb\x63\xc6/W%\x86\x6s%\xac\xef\xdf\x87\x30\xc4\x0\xa1&'$\xf5\x9b\x94\xb5m" "\xe9\x9e\x9aQu\xa1\x1c\xf9\x32/\x86\xa2\xf3\x11\x87\x90\xf9\x88l\x1d\x94\xcb\x61" ",b\x9e{\xb8\x1e\xb8\xfd^+\xd9\x46\xe9\x9c\xf(A\x8b,)\x8d\xabh\x10\x99\xb9<\xb7\xc3" "\xcf\x98\x34\x96\x91\xcf\xe0\x1el@\xb1}@\xdd\x96\x6z\xe7\x15\xb1\x10\r\xfm\xc\xa6" "~\xdf\xa6\x43\x34\xe3\xed\xa2#\xb4\xfb{\x82\xb0\xfe\x6\xee\xc2\x30\xceL\x82+A\xf1" "\x88\xe0\xcfs\x82\x83\xce,bjJnY\xf2\xabMUY\xad\x87\xcfM\x8f\x35O\x9fo@\x8c\xae\x1e" "\xdd\x9d<\xf8\x90\x2's\xed$~\x7\x9f\xbe\x9f E\x1fg\xce\x9c\xda\xa2\xb3\xec\x9c\xd8" "\xc\x46[\xd3O\x8f\xdd\x30kf\xb9\x35^\xc5\x61\xe8\x9f\xf4SI\xf0\x30\x9e\xa8\xa5\xf0" "\xa7\xae\x83\xcb|\x89H\xf8#\xc3$cSyc\r\xfe\x8b\xd9\"\x17\xc2\xd9\xab\xdf\xcd\x14" "\xce\xb8\xe5+';{\x0\xd0h\xb@\xef\x2\x12\xa3\xeb\xfb\xe8\x82\xac\xa2_\xb6\xf6g$\x1c" "\x1fG75&;\r\x1b\xfb\xeaY\xd9QA[\xc2\x39\x9c\x41\xdfL\xf9\x97\xb9\xd2\xfc\x10Q\xe5" "\x92\xd4#\xb7K\x14w\xe7m8`\x17\xce\xdf\xdc\x9c\xcb\xd3\xf3\xa9'6\x82\xb[\xbc\xa6" "\xe8\x63\xfeM\xfb\xc5\x85g\xd8\xb3\x62ON\xeb\xc5|F\xdc\x13|j\xbb\xb5\xf9\xc_\xb3" "\x17\xfa\x34\xaf\x30\xeaj\xc3\x5\xd9\x82\x7f\xf1\xc1\x10\xd7\x61\xebR\x10<;3d6_-" "~\xc4'\xe6\xc5o\xeb!\xee\xd5\xc4\xc9\x14\x99\x46\xd1\xc1\x42;\xc\xb3\xe5\xe9\xa6" "\xc1;;i\xd5\x1f\xd1\xa4\xdc\xd5\x85\x32V0\x8cl\xc6\x34\x9em\x9\x19\x9b\xa1\x8e$\xb9" "\xdd\x87\x7f'\x9f\xf3\xc9\x33'2\xe\xb7L\xe8\xbe\xde\x97\xa1\xc1\x84\xe1\x4\x10\xf6" "aM\x90\xe7+\xa4\x35\x1a\xe9W\x3T\xcay\x9c\xc2\xf1\x45\x97\x19\xb2\xd3[uy\xa8\x95" "\xa9\x5\xd0z\x2\xbb\xde\xb7\x65\x9dq\n\xd6\xb8\xe2\x8e\x8b\x5\xdc\xc7\x13&\xcbM;" "\xb6\x94\xa3\xda\x64\xa4\xa4\xba\xb3_\xa3\xedW\xbe\x14\xcb\xf3\x4\xb1\xb0-zkA\x1e" "u!'\x6\x1c\xc3\x0\xf5\x8e\x2\xf3\x33\xcag\x17 fJn\xb6\x62~\xd3\xad\x6z\x8c\xe5\xbd" "{oI\x12O\x8fj\xcdiUv\xc\xbd\x96\x93\xe1\x0\xb0\xe0\x91MW\xde\x84\x32<+\x6\xb1\x89" "\xcb|\xb8\xd7n\xe3\xa3<\x94\xa3\xb9\xdbm\xd7\xe8#SN\xb6\xb8jq*Q\x98\xd8\xad\x45\xa2" "\xa1\xe4\xe4\x62\xbeMB\x93\xcd\x8e\xc<8\xcf[\xce\x19 \x9\xe\x44\xbeH\xf%|Q\x1c\x80" "\xfb\x39\xa9\x9e\xecL~A\xd2\xc0\x30\xde\xad(\xef\xd5\x18)h\xc1\x38\xc8YWt\x89\\\x8f" "\xc4\x9\x44\xe8\xd8\r[\xd9\x6=\xf8\x8e`\xec\xe3\xa7+\x3\x12\x16j\xe8\x90\xc5\xd1" "ul\x9c\x1b\x64\xe6\xaf\xac\xaf\x9b\xe9\x9at\x4z\xbcu\xb0GW&\xac\r\xb9.\xca\xa2\xce" "\x81\x18Z\xf8\x6\x7f\xclS\xf6\x89\xa9Y\x17\x9e\x3\xeb\xa0\xeagI\xedMU\xaf \xb7\xe2" "\x1c(j\xb0\xf7\x8e\x66\xe\x84\x85\xaf]\xd4\x84\xb2\xf7\xaa\x32)\xfco1\x8d:\xce\xa4" "?kk\xa2\"\xc1\x96_W\xf4\x9Th\xd5\x33W\\\xcb\xb8\xe2\x42\x42\xc5\x9f\x32(\x8f#k\x7f" "\xbd\xcb\xa4m>\xe\x41\xfd\xca\xca\x62\x82\xe1\x80O\xdb\x4\xdbk}$f\xe7\xfc\x38\xd9" "J\xc8\x3L\x1d\xd9\xc8\xdfg\x9a\xe5\xba\xa5i&-U7\xfd\x96Y\xc4=\x2\x0X&s\xca\xe\x9a" "hozX\xd7'\xbb\xec\xca\x32(\r\xb5'\xf\xd9\x17\xc7\xe9/\xe7\x92\x84\xf2Z~\\\xda!\xe7" "\xd7\x85\x85\xc2VN\x4\xa5\x14\xd5\xd8\xdb\xbe\xea\x1d\x3\x82\x63\x9csj\x12\xf1|\xe9" "8\xf0\n\xaa\x35\xe1\xe2\"\xfa\xa4\xd2(\x7f#\x16\x7\xc7\xdc\xd9\xa9\n\xbc\xe9j\x9d" "\x9c\xe9\xcd\xb\x0QB9\x9d]4\x13O\xcX\xbcj6\x90\xeb\x86\x88\x0\x7f\xd7\xe8NC\x91\xfb" "\xb9 \xa3\xb0\x82\x39]\xe5\xeb\x16\xefx\xd4_B\xf\x37\xb8\x82)\xa7V\x19\x1d\xf8\xc0" "\xbdW\xf4\xf7q3m\x98\\\x9e\xcf=\xe9\xb6\xf4?\xa6\x1e\x90\xa2\xb7\xdey(\xdekzx4\x7" "YGO\x85\x32\xd3k2\x9a\x39M\x92X\xfe^N\xed\x1b\x87\xf8\xa4?\xe5?\x10\r\xe3)\xf2\xb" "\x91@\x8c\x9a^n)a\x85\xd6q\x5(\xb8\x33\xe4\x11\xff\xb5L1\x9c\x14\xf7\x8\x3\x98\xe1" "\x88\xb9\xfdxA\xb7J\xca\x86\x1a\xaa\xbd\xe1\x8aZ\xf8\x13\xfb\xed\xebJ~\xe2\xaa\x17" "C\xb2\xdb\xcf\xdc&\"\\r\x3\"\x7f\xc7s\xb1G )IVk\xa7\xc8\x1fZ\xd3-\xfe<\xe7\x83\xd1" "p\x8c{\x9b\x8c\x9b\x43s\x4,|\x8f\xd0\xde\x2\xf9\xcf\x42\xf2\x38\xe4\xb5\x1a\x91~" "Kc\xd8\xc3\x1a\xc6\xe1\x8f\xdc\xe\xa1$\x9f\x31u\xe6Yd\x9a\xa0\xf2\xd3\x7\xdf\x86" "\xfd\xa4-\x80\xa3\xbd\x46\x97\xda[\x1b\x5\xd3\x46\xb3\xfa\xee\xd2\xc8\xd2\x1f\xc7" "\xaaG\xba>*\xed\xde\x0U\x9c\x94\x86H\xe9\xd1\xb7\xbb\x16\xe6\x1b\xa8{N\x8\xca\xe5" "\x9e\x83\x91y\x0\xef\x41\x80\xe4\xd7\x33\xd0\xe0\x1cT\xea\xaf\xdf\xb5QO3\x84\x8a" "\xeb\xd0\x97 \xf6\xf7GlC\xf\xe\xda\xf6\xc6-\x83\x14\x9b\x3\xb5\x13.$\x1crs\xa2\xf3" "\"3\xc2\x12\xc6\xfa\xe8\x97>\xc9\x8f\x87\xb7\xe3)\xa9\xebg6\xad\x5\xe6\xe3\x5\xf7" "\xd3\x84\x13U\xbf\xf6\x9f\xbd\xf2\xcd\xfc\x41\xc9\x42\xbc)z\xbd?7\xba\xcbS\x10\x9d" "c\x89G\xd2\x8d\xb9ws\xb6\xfd\r\x1b\xd3\xb1\x12\x46\xa3\x8a!\xdb\x4@n\xf\x95\x87t" "[\x9a+\xe9\xeb\xcc\xf1\x5JP\\\xab'\x5\x88 \x90\xd5\x38/o\x99\x64\x8f;\x1\x9e\x62" "G\x14\xb5\xfb\xb1\xf9\xe0\xc8\xd1]G\xe5\x85L\xab\x9\x35\xcd\x1a\xf2\x13\xb2\x8\xb6" "\xac%\x11z!Lj\x91\xf6@\x1a&\xed\xb3\xd7<\x93u\x11\xeex_DK\x8f\xfe\xce\xeb\x8b\x8a" "\x3W\xb3\x9\xdf\xc0\xe9\xbc\x18\x63\x14\xce|\xfb\x9b\xef&9\xa2\xd3\xc2\x12\xd7\xd6" "fh\x6\xd7\xaf\x8b\xa5\x2#\xe3\xe0\xb2Q\xbc\x96\xca\xddHx\xa2\x9dU\xd1\x41\xb7\x65" "x\xed\x37Z\xa5\x17Z\xba\xe6u\xd9o\x3\xc4\xde\x61\xcc\xb1\x98\xce\xe3z\xc4\xd1\xf9" "\xdep\xd5;\rI1=\xce\xef\x64\xa9\xb5-n|t\xe7Zo(\xf8/\xa2Y\x2\xae\xb4\x9f\x81\xb8N" "M09R\xc3\xab}\xbdX7\xee\xca!\x1f\x1b\x82\x34y\xe7k\xe3t\x13\x8c\xe6\xce\xe4K\xa9" "\x94\x1c\xca\x39\xdd\xa6\xd6\xc9\xb4\x1\x9a[=\xaf\xe5\x45\x46I\x1e\x12\xd9\xd4\x39" "\xd4U\xad!\xfd\xd5\x4\xa3\xe5?u;\xb3_>\xcd\n+<\xeaO\xa6\xcO\x8ct\xfb^U\xb1\x7\xb7" "\x19\xdb~\"\xcc\x0\x7f\x7\xc6\x86;W\xdc\xdb\xca\xa2qjrx\xda\xe\x93?yx\xeP\x86\x98" ".\xb0'V\xdbG%\xb\x89\x7f\x43o\xd2\x7\xe9\x88\x88&(\xec\x7f)\xe6r\x17<\xe7\xbe\x7" "/k\n\xe5\x9d\xe0\xdd\x1b\x8\xd0\x84\xac\xad\x1a\xb7w\xb8{\xf3\x0\x83\x1\x95[\xa7" "\x19\x18\xd6\xdcg\xd6\xe8\r\xd1\x38\xa0v\xe7\xc5\x32J\x1d\x1b\x2\xa7s!\xbb\xb3 \xe7" "\xd4|xQ\x83\xc5\xe1\xee\xb1\x9cl\x9c\x92\x46\xf8\xdf\xfa\x1a\x9P\r\x9bX\xaf\x8d\x1b" "\xa8\x91\xd9\xdd\x3ux\x8f\x39Iu\xc9(\x6\xf8\xb4\xf4\xb2\xc2\xb0\xb1]\xf8\xcb\xb2" "\x14\xcc\r\x7f\xb1}\x8c?.\xf5\x37\xed\xe0\xc8\xed^\x84 )RF\x18\xc5\x6\xaa!\xc1\xbb" "\x97\xea\xb0\x19\xe8\xfa\xde\x46\x88\x81S\xa0s-\xc8\xc3\\\xb0\x86qC \x94\x1b\xa5" "\xab\x1c\x82\xc6_\x8c\xa7\xc0\xe4\xf0\x41U-\xff\xb3\xcf\x61\xdb\xfb\xa6\xbc\x7\xdc" "m\xff\x4!\xbb\xb0\x2\xa4\x32\xc1\x66{e\xe\\\x96\xf7|mj\x88\xcb\x11\xb2\x0\xc8\x99" "7\x8!5(\xaa\x7\x8d\xc8\xaa\xb0\x1\x46\xf3U\xd5%\xed\xc4\x38q\xb7nw\xb5\xbe;\xeb\xa7" "dgm\xbf\xfd\xc6\x1\xd6\xfa![\xe5\x33\xd6\xfe\x91\x8a\x6\xd0\xc6\xbf/\xdb\xd2\x8f" "\x8a\xb4\xe5\xc5>?\x83\x8dgc\x94\x61\x66\xb3\nn\xac\xb9|\xf3\xebl\x9fL*\x1d\x9^#" "\xaa(\xe0{DM\x7\x90x\xa2';\x8d\xf6\xb3\xa4z\x13[\x8a\xbc\x81\x37\xda\xba\x91:^W\x80" "\x90\xe4\xc2\x63&gU\xb0|\x1e\x96\xc4X\x87\xf1\xab\x88\x34\x82\xa8\x92\xac\\^~\xb6" "\x12\xaf\x8dq\xdd\xb6\xa2V#\x4\x89y\xc5\xf8\xd1\xd5\xfa\x97\xe1K\xc3\x8f\x85\x33" "J\xa7|\x91\x34]I\x1d\xf9gd\xbb\x14\xf2g\x1a\\!\x19\"/\x83\x88\xa6\xdb\xa2gR\xf4!" "\xae\xeb\xfb\xd6\xc4s\x14\x9bo!Y\x9d\x16\xa2G\xed\x41\xaei\x5s\x11_8T\xf8\xab\xde" "\xbaU\"70\xe3" "m\x9c\xd4\x12\xca@\x9e*}\xbbx\xbf\xd8\\W$\xc\x30\r\x86\x10\x90\x13!\xba\xfe+\x0P" "\x8d%\xe2\x12\x39Iy\xfd\x4\xcc\x1a\xf1\x64\x7+\x92\x8f\xa2\x43\x81\x63\xeL\x93\x42" "k\x16-\xed\xfdj\xc8^\x9b\x9\xa0w{\xef\xab$\xfd\x95\x19T\xf0\x1a\xc8\n\x44\x85\xa4" "}M\xe6=U\x93\xa9\xa8\x37X\x9\xc5\xb8\xd9#\xb1@\x13\xf5UO\xcb\xbdN.8\xac\xc7\xa1\xb3" "\xd7\x9dT}v\xfe\xde\xef\xb1\x0t\xd3\x30\xf4\xfd.\x9f\xec#\xd1\xae\xc2\xdd\xcc\xc2" "M\xec\xd4\x95IO\xc1\xf8\xc\xcf\x8d\xbd\xdft\xf5\x0'\x99i\x1a\x91\xac\xb2ok%hI\x13" "\xc4.\x1f\xee\xa2\x9d\xb8\x33\x1c\x61<\xbf\x9e\x9dJ\x13\x1_F{D\xdb(\xa9\x41\xf8\xda" "\xf0\xc8\xd1,C\xe8\xc6\xf9\x66]~i\xfe\xd9r\x9\xd5\xa6v\xde\x3\x46!`\xee\x42\xa3\xbe" "\x1a!Ag\xb0\xb1\x9a\x8f\xa3j\x9a\x8c\xb4;\r\xe9\xdeom\x83pkaz\x8aZ(\xce\x8d\xfe\xae" "\xcf(/\xf4#@\xae\x16\"\xbel\x99\xfb+\x82\x18\x80Z\xfd\x7f\xf\x37\x83x\xe7y\xc8Ju" "\xbf\xe9SpWh\xc8(:\xc9\xc7\x62\xf8\x43\x92\xee\xb6\xd5{\x99X\x82n\x10\xa3\xe3}q\x10" "B\x2\xfb?g}\xc4\\\xf9\xc7\x9\x1eLN6hJ\xc7\x85\x4\x98I\xedY\xaa@\x13r\x9\x7\xe8\xd6" "L\x99\xe9\xcaN\xb8\xcd\xd1\xda\rm\xf0@r?\x1e\xe7uI~\xe0U\x9c\x1\x12>\x97S\xfa@W\xee" "X|\xc6\xba\xbf\xf8\x81\xcf;\r\xd4\xbb\xff@\xa3\xb8\n\xc\x46\xa1V\x8\xb9\x13\xf6\xe1" "\xeb\xa3\xe9\xde\xe6\xfb\x65\x62\x41\xb8G\xffP_\xe9\x1e\x14\x33\xa5jK\xb3\x1c\xb3" "h\x98\xf6\xa4\xff\x43\x0\x1c\xd3\x8a\xcaW\x81\xae%L\xef\x32\xa4q\xeb\x15!0SY\x1a" "(\x12\x84\xc0\x96\xdaK\x8f\xa1_\xec\xf1U\xaf\x9f/\xbfKks`\x84\x13\xb8\x36\x93\xca" "\n\xbc\x15t\xd7\xa9\xbdY\x8f\x36\xf3{\x19\x94\x43\xc8\x62\x46o\x86\x32\xfe\x99\x86" "\xbe\xeb\x83\xf6\x46\xadt\x85\x8a\x90\xd2\xc8XN\xf7\xa7\xe8}\x10\xed\x9O\x0\xc5\x82" "\xe7\xd0\x91\x8at\xf0\x9e\xac\x9\x31I\xf8,\xc7\xa2\xde\xe0\xbc|\xfb\x62\xc7KP\x95" "\x14]\xb2g\xd3\xaa\x1f^q\x8c\xc5\xa1\xf0\xad\xb6\x8c|i\xb2\xe0\x30\xd0\xe8\xd1\x5" "\xa1i\xac\x9\x97\x0K\x1at\x92\xf6,\x1c\xcdV\xb5\xcb\xd9h\x90y%\xe4+\x7\xcf\xab\x65" "\x16\xbf\xf1'\x1e\xf8\xefWc1\xe[\x1c\xdb\x15\xe8\xd0\xc0\xf7\xd8\x41g0\xaf\xe4,\x93" "\xe5\x1f\xd6\x99\x89\x61\xc%\x14H%\xfa\x36\xbc\x37\x34\x62\xd1\x85\x86\xecM\x87/" "\x82\x8fY(\xed\n)\x19(\xee\xf5\x9ap@\xcb\x91\xaa~\xecVn\x9c\x41r\xd0\xe1\xdf}4.\x81" "\xa4\x16\xba\xef\"\xa1\x97Tt\xa1\x11\x7f\xb2\x97\x66\"\xd1\xb8\xcc\xb1\xbe\x17\xa8" "\xdf.\x1d\x81+@\xb7[\xc2l\xe8\xbb\xcbm)\"\x92\"mX\x10/jvL\x4\xd0\xda\xcf\xa9\xa9" "\xfc\x98\x89\x92\xb9\x8e\xdb\x14\xa4\xda\x1ai\xf1V\\\x7fPS\x8d\x39\xef\x62\xa8\xa0" "\xf0\xc1\xa3\x14}\xe4\xde\xb6\x44\xa1" "_\x2[\xde\xc3\x83Mi\xfd\xc5\xb7 OW\xf3\xc9\xae\xa8\xf7#\xc2\x45\xbf\x18\xde\xbc}" "\xe1\x33T\xb8j\xfd*\xeb>|\x7f\x8d\x42\xc0t\xe8\x86\x0\x35\xb6\xc0\xcc\xd7\xbc\xc8" "\xab\x93=(\xf7\xbb\xba\xf7\xfzw\xd7(\xf6\x10\x8c\x10\x45\x44]\xab\x80j\x81" "\x1b\x9b\xb9\x38\xb3q*\xb6[>\xa6\xb1qF\x97\xd3\xb9m\xcbg\xc2,\x89yV8\xb9\xd3\xee" "\xb5\xaf\xab\xe6\x9f\xf4\xb9\xb2uSUf\x8a\xe3\x2)0B\xfb\xc1\x92\xb7\xd4\x9f\\\xe5" "*r\xa9\x62\x89J\xba+\xbb\xb9\xb5g\xea\xd4[\xac.$\xc6\x96\xb\xf7\xee\xb4\x85\x11z" "\x8a\xee\xc1\x90\x9f\xdc\x33\x88\xf5\xaf\x85\x46[g\xd8\x34\xa0/\x96\xe1S\xef[\xed" "\xe8Z\xec\x13}\xafvi\xab\xf\x35\x14\xb4\xac\xea|\xcb\xb3\xf9\xda\xdb\x8d\x10\xb9" "\xa8\x7\xe5\xa6\xce\xd7\x95]\xae)d\x9a:\x8cw\xf\xcc\xd4\xca\xb2\x1\xe9(\x97W@k\xb2" "E\x15\x9c\xf3\xa3\x35\x37\x83[{|7\x1f\x38m8\x1c\x39\xd6\x8b;\xb\xa0\xc4W\x95\x33" "}\x8a\x45j\xf5\x2\x84\xe7\x9d\x10\x86a\xe4\x64@R\xf6\x66\xb6R\xb7<\x8e\x3\xdf\x6" "\xc3\x9e\xcai\xf9\x87\xfd(7A\xe7\x10#\x81po\xcT\xe3\xa6p\xb9\xc2\xb0\xce\x8d\x90" "\x16\xa8\xc0\x9e\x64\x33\x84u\xe8\xe1l\x81\xb8Y\xc7\x90\xa2\xc7\x1co='E\x97\xfb\x36" "eM\xb8\x4%u\x15\xd5z\xf8'_\x19\x8\xb0\x45;\x7\x17iT\xef-\xeK\x7f\x9a\x45\xb7\x30" "\x8b\x94\x18_\xebg\xa8\x8e\xa9\x9e\x66\xbe\xd9\x42\xcLs\xeb\xe3\xa3\x9a\xe8\x4I\xe2" "\x12\xdf/\xf\x90\xf7\xe1?\xf8\x92\x8cJ\xa2\xf\xc2&:z\x8e\x91W!\x9fz\xd0\x10\xd0Z" "\x89m\x1d~\x82\x93\r\x1f\xde\x19\x7f\x80\xff-*~\xe4\xf7\xae\x8\xd8\xa2\\\xd8\x5\x62" "\xf6\x14\x83{\x8bg\x16_\x8b>x'fj\x8d\xe5U\x9c\x81\x9f\x0IF`\xed!J\xc4\x8c\xb8\x93" "X\x91\xe4\x19\xec\x17\x9\x9dm\x0\x8a}q\xd6k\n\x19<\xc8\x92\xfe*V\x80\xe3\x81\x80" "M\xad\x90\x45\xb9\xc0\xda'%\x17Y\x8e\xeaU\xb2TG\x92q\xb9\xf1=\xd0\xa8\x6\x9e\xf9" "e\xa8\xff\xa6\xccKw\xea\xd9\xfc\xfa\xc2\xa6[\xeu\xa7t\xab\xa9\x85\\\xd6\xfb\x9f\xaf" "F`\xa2\xc8\x1a\xe7\x9d\xf8\xcaQ\xe9\xdb\xe2\x96I\x8fS\x89\xb0\xd9\xe4\\\xed\xb6\x1" "^\xe3L\x9e\xc0\x9f\xf5\xdc%\x8e!Dt\xc7\xec\xe7\x33O\x3s\x3\x13\xd1\x18g\xbbO\xa4" "\xf8\xaa\xc2\x35\xbc\x86\x36\x88\xb4>\xfc*\xde\x7f\x8e\x98\xf0\x8\x95\xfcK3\x84$" "mcr9F\x8cQ\x8bKu*\xd3(\x18\xac\x17\xe1\x9b\x96\xc1\xba\x0\xb9\x16\xf7\xdc\x99\x81" "a\xc5*\x14\xd6\x9aj\xd2\xe4\xe7\x46\x19\x96@\xfe\xb1\xb3\x33s\x8f\xa0\x66\n\xa2\x44" "\xe4\xc4s\x8c\x11\xfd\x38\x64\x9aqw\x5\xa6\xc5\x66\xca\xed\xdb\x35\xe6\xb9\x41\x14" "\xeez\xb7\x36\x10\x13\xf1\xab.*H`\xb7`\xfe\xea^\xfa\xe6\x39\xc3\xce\xa7\xd8\x83\xf7" "!\xc5-jc\x1c(R\x82\xb\x80| \xea\xb7\xe6\xd6\xcb\x99q\xed\xc7\xb9\x85\x33Q\xb3VvH" "H\x9c\xad\xfd\xdd\xec~\xcc\x63[\x9c@\xc0\xd2#\xff\x10\xfe\xe\"\\\x88\x19\xa6\xd9" "\xec{\xfa\x1b\x11\x2\xbf\xb2\xb7_\x9bQ\x17\xbdm~\x8l\xa7~6k+\xd6yF\xca\xcb\xe9P\x88" "\xb0\x19\xc8!\x87\x93\xc\xc9\xff+C\xef\x65\xe2\x90\x44/\xfa\x30Z\xec\x95\xfr\x1f" "\xb0\x34\xe8\x12 \xed\xd7\xf1\x7\x1dTm\xaf\x91\xa7\x18N\x10\xf5\xfa\x8\xa9\x34\xa2" "=\xa0\xbf\x6\x64j\xacN\xb2\xf8\xa9\xf5\xfc\xa3\x9b\xed\xd4\x31\x18\x44\x86\xcc\x8c" "R\xa6>\xe0\xe4\\\xeaj(\xce\xec\xd5Q\xd5iT\x1f\x2\xed\xb4{\xec\x18\x33\xd9-\xd7t\xe1" "\x1d\xba\xf9\x0\xee\x17*d\x1\xcU\xe1" "HC\xea\x66\x2\x90\x10\xcb\x9d\x64\x43\x8\x34\x86\x80\xc3\x8w\x9\xff\xf6L\xa5\\\x84" "n\xb3\xea\x15\xd6\xa0\xd4\xe3\xfc\xc\xf8\x81\x14\xdf*^\xa6\xee\xbb\xa0\x36\x1fYA" "X\x99\xaa\xef~S\xaf\xd5\xce\x30\xc2\xbe\x93\xf2\xdc\xf2\x35V\xa6\x9d\xea\xf2\x9f" "\xb0\xd2\x97O N5'\x7f%[\xf2\x0\xed\xb1\xdd\xe1V\xef*oO~=\xf9\"\xb9\x46k\xed\xca\x9a" "5y*!\x1a\xb1!\xf7\xb7\xf5\xc\x9c\x1f\x5m*\xff\x16Z\x11(=\x9c`\xd8\xb3\x8f\x9a\x61" "\x8b\xf4M\xc8@\xec\xb8\x17I\xbf\xcc\xb9\xa7\x83vG\xa5\xb7\xb6\xecJ\xd8\x30\x80X#" "\xb7\xa7\x83xb\xc2\xd8\x86P\xa3\xd3\x8b\xf9\xc1.77o>\x4@`\xf2\xd0\x95\xe1\xf2\x1b" "\x94\x92\xef\x80r\xe\xe2X\xdc\xd1ibA\xda\x35_,\x91\xa8RPy\xb9}\x0v\rK\xb2\x34\xf9" "^Qu Q\x82Tl\x12\xa5\xf6ke\xb3\xfd\x95\xdf\x30u\x88\xd0\xa5\x0\x8\x61,a\xa4\xad^)" "Jo=\x98\xeb\xbd\x8b*\x4/\xab\xffH\xa7\x5\x9e\x97\xfc~z\xab \xf1\xfa\x9f\x9c\x7fr" "Jw\xdf\x7f\xc5>RQ<\xf1\xd9\xdc\x95\xca{\xc2X\xf1P\xa7\xf0\x94\xe7\xdb\x91\xe9\x91" "\x8\x45\x2\xf1q^\xb5\xb7\x85\xd2\xabhc\xaa\x89\x97\x2+\xf8\x16RO\x0\x81\x6\x16\x80" "\xc2=\x83\x7\x9au\xbc\xc6\xad\x9b\xacW\x8f&\xea\x9aK\xd4N\x9f\xcd\xd0\xff\x82\n\x42" "D\xb\xf2\xf2)i\x80MZ\x88\xd3\x8c\xc#\xd1\x45\x38]\x89\x63\x83\xb4\x95\x6\xfaW\xb5" "\xea\xa5\x80\x64\xae#\xe5g\xfck<\xfdv\x97>\xc0'\xdf\x12Hv\x85s\xeb\xbe\xd1\x8t\x0" "\xcd_LY\x10#3\xc6\x7f\x1a\xde\xbg\xe0\x30\xbb\xd2\x10\x36\x37\x9\x96\xae\xa3\x0\xba" "\xb9\xe$\xd1\x96\x65\x8av:\x8e\xc4(\xce\xe0\xb9G\xd2\xe5\x6\x9a\xd4\xfc\xa2\xc0u" "99\xcd\xe6\xe*\x96)0\xd3\xd0\xc3\xaa\xbcu\xac\x1c\x62\xc0]\xc0Y\"M\x9eU\x97{\xdc" "\x88\x12\xf6v\x7f\x32?\xcc\xc0\x18\xfe\xcdv\x1d!\r,~P\x84\xc5\xd8\x7f\xaal\xd3\xc2" "\x7fQ\xc4\x3\x39\xbb\xd7\x17\xba\x38\xd5:\xa0\x32\x17\x14)\x9b\xbe\x1e;\x9f\x14\xf8" "fg\x7}\x17_\xeds\xef\xfa\xfd&\x17\x66\xe7\x85\xe1n\x87\x84\xf0\x99\xddQp\x3\xed\xef" "b\xaa\x43\x91\x1e\xeb\xe1Q<\x86Jb*R\xc6\x44\x8\xf4\xdc\x33\x5\x1c\xd5^PP\x8f\xa2" "\xcfV\x8d=f1\xa7r\xd0\x11\xe1\x1T\xc7=yp\x11\xb5\xe8'!\r\x1b\x31\xb4W\xc7\x1d\xa7" "d\xdb\x62=\x1e\n\xf4\x37\xb8@Yv\xf6\x44\xd6<#\xdd\xda\x83\xfaM\x14\xd6\xe1\x83\x92" "Y\x7f\xe5\xa1\x45\xdc\xd8\x12\xfd\xad\x35\xbdoq\xcf\x11\x92\x1a\x0\x1fh\xb0\x43w" "\xe9\xda\xd8\xe9\xbe\xc3\xdf\x1b\x92\xc2\xf1\xe7\xef\xd1\xac\xea%\xc2\xac\xb9!\x99" "\xd9\xb1 \x91Q\x83\x63h\xd1\xa2!Zr\xeb\xc\xd9\x8bl\xaa\xc0(pciX\xfc\x8a\xae|\xac" "\x3\xa9\x12Z;\x90\xce\x13\x1d\xa8\xa2$=\x9d\xcbg\xd3\xbb\x43\xdf\x16\x92\x1d\xc8" "\xb2\x0S\xd6\x45!\x1a\xe8.\xfdx Q\xc6)\xa8\x85\"\x19T$\xa8\xba\\\xb4N(`\xe5\xf6@" "\xcb\xf3\x1d\xc7.@xS\xd1\x11g\xd4]\xf6?dB\xa1\xd0\xa4\xf6\x89\xddn\xa7\xd1\xde\x97" "\x8d\x8\xf8\\W\xdev\\\xd6\xb2\xf3@0/\x1a]\xa2Z\x1a\xe5\x43\x1d\x1d\x8d\xc3\x1f\x9c" "\x82m\xd1\xb4\xd5\xa1\xd9\xff\x2;\xb1R\x1e\x39\xd8\xd2\xdb\xc8m$Vo*\xb\xa6\xeb\xa6" "<\x99\x1f\xfd>\x82\xa6l\xf9\xe0\xe8\xc4\x33\xc6\xf/\xbf\xf8i\xb0\x84\xb\xe2\x10\x13" "3\xc0\xe3\x43\xbb\x16\x44\x99\x61\x83;\xa2\x92=\xe\x2\xaa\xe2X\x10\xe4k\"\xcf\x80" "yui\xaa\xf4#\xc3\xe3\xa9\xfe\x18R\xeej\xc2\x44\xcbh\xf6\x94U\x96o\x8bX\xaf~J\xc4" "s\xd6SX\xf2\xe0<\xe\x3\xde\x15\xb8\xc0\x36\xf6R\xa6\xab\xb\xc2\x98\x30\x4\x18\xfd" ".(\xe2\xf3n\xe8\xc8\xf6\xec\x31\x1c\x10\x1p\x80\xe0\x7f`\xc4\xc9O[\x1bT\xcd\x17" "\xe2N4M\xdf\xf7/\xbb\x88\x8e\x9d\xed\\]I*\x84\x38\xef\xc0\xa0\x1\x1\x37\xd4\x6z&" "\xc2\x33\xa3]\xc\x5\x30`x\x92\x12\xed\x92\\U\xe4\xb0\xdf\xe\xce\xca`\x91\xc0/\xdc" "\x0ij\x85\xa9\x30H\xc1\r\xac\xd7\xf2T\x85\xc0w\x9b\x19>a\xfd\x8fyM\xa2\x99\x45_," "\xc4\xe4\x87\x42\xc1n]\xe6\xff\xdb\xd8\xd7\x9\x9Y0\x15\r\n\xb4h+\xb5\xa4_\x98\xa8" "\xffp\x9f\x41=\xf1\x30\xcdMS\xb4\x7f\x91\x35\x8\xff\xa7\xa3\xfc~\xf9\x1c\xc3WN\xb5" "\xc9\xa4\x83\x64\xf4\x81\xcf\xb4\x9b\xfb\xcc\xf9\x42\xbfq\xa5\x8dZ\xd9,\xae\x65\xbf" "\xfeW<\xd6\x66\x9e&i\xd2\x10\x36\x8d\xaa\xff\xf5\x66j\xd0\xb6\xf7\x10\x5\x30\x9a" "\xfc\xc0\x32\xf5\x96-Ip\x13\xb1\x84\x9b\x1dO5\xb\xc2\x37\x61\xfe\x83\xcc\x85\xc9" "\x5R%\x8d\x5\x93\xed|\x9e*\xb4\xb0\x83\xe0\xa4\x4\xa0\xe1\xfe\x35\xbe\xc0\x97M\"" "\xddy\xae\xdbS{\x13j\xc4\xd3\x7f\x8d\x98.\xc0\x1d^\xaah\xcc\x88\x9d\xcbrY^\x19\x35" "\x97\xe1\x1e{\x9\xfcP\x19\x81\xcJ\x10\xfd\x95\xb8\xe1~\x83i\xf9\x31\x1\x84\x10-\x16" "M^\xae\xaf\xa8\"\xad\x0\x44\x30@2vV\xb0\xd2\xdcjM$\x85\x98\x97\x1c\xc4u\x11oQ\x87" "\x9c\xb1\x93z[#\x6\x5:\xb7l\xb\x64\xc9\x7\xaf\xb3\xdc]\x91:\xdd\xb1\xbc\x34\x90\x98" "\x6\x80\x39\x91\xe1y\x1d\xf0\x9bJ\x17\xae\xff\xdb\x9\x41\x66\x2\xbb\xc3\xa8wQy\xa4" "\xa7\x7\xb\x9a|\xcb\xf1\xdf\xaf\x95$K\xc}\xbe\xe1\x1f*\x90>\xbc\x38 \xf6\x8e\x89" "Dl\xfd?\xa8\xefs\xa5\x35\xc7\xb9\x82Q\xe4\xb7\xbe\xfa\x10_j\x85\xf7N\xc\x19G\xcc" "\x89G\xec\x41K\x9f(\x17p\x10\xb2\xf5\xcd\xf7\x33\x7\xba\x15\xd5 \x1\xc5\x65\xf2T" "\xf4\x88/0\xb3W>a=]\xe4\xcf\x8fH;\xcfy\x95u\xb\x80\xdd\xcf\x81\x97\xe6\x90\x82\xb8" "q\xcb\xee\xb\x9f/\x97\x35l\xf3\xfc\xe8\x39:\x9\x18\x3\x99\x80\xe6\x1\xe6Y\xd5\xf3" "\xa3\x43\xca\xe0_\xea\xc3Q\x80\xb7\xa7\x33\"\x8b\x4\xfe*\xfa\xb5\xe9\xf0=\xcf\n\x61" ">\xdc\x10\x81\xf7;\x9b\xfaN\xe4\xf8\xa6\x3\xf4\x16\xb6\x9e\xaf\x9f\x46\x18z\x82\xf2" "\xc5\xd2\x18Z\x0-1daP\xaa\x9b\xf8\x86\x63\x18\xb9~\xfd\xeJ\xdd\x1d\x97\x44\x0\xa8" "\xc2\xd1\xf9\xd7_e\x9\x5X\xcd\xd4\xb5\x37\x35:\x98o\xe3\xbeZw\xe5zyd\x86\x32\xc0" "+H.6P\xd9 o\xb5L\x11\xed[\x5\xd8\"\xd2'\x0\xba_\xfcY\xf7i\xd0g1\xc1\x1\x1d\x1f\xbe" "g\x93\xb0{~\x1ex\x9f\xe7\xc3[X\x85\x8a\xf0\x9c\xb6\xc5\x84;\x87I\x15X7O.:~\x87*\xe8\x1e\x16\x8a\x7v<\x9a\xb9\xce\x66\xfa" "\xbfQTEr\x99\x41mt\xed\xd6*\x7fw\x19\x7f\xd3\xcp\xea\x80\x9e\xb3\xb7\x97\xb2\\\xf8" "\xf3\xe3z\x15\xc7G\x99\x7\xf2\xda\xe8\xd9%\x98^\xb7\xcd\xb7\xa7\x8e\xd3\xee\xee\xaa" "\xf2\x1d\x9a\xaeu\x90|9p\x12\xd6\x13\xf7]G\xbe\xeeP]M\xa0\x87 yj>\x9\xf5\xd2\x7\x8\xd3\x91" "p\xce~S<\xfa\xa7\xf8Hn\x4\xf3\x92\x16~\xa0\xa0\x93\xfe\x99\xb8)|+\x13\x98\xc6!]K" "P\x92S8\xbaYW\x8c\x99\x1\x65^\x92.\x18\xb4\xef\xc4\xb4&\xdb(\xc5\x7\x33<\xe4\xf6" "\x9\xc3\xb8\x89\xfgv\xcd\x86\x86\xb9T\xf0<\x8\xe1\xff\x99h\x0\xef\xe\x8f:m\x96\x9b" "(3\xff\x15oH\x1d\xbe\x41_\xb3\x45\xb6?\xfc\xec\xd8l\x86\xbc\xb3\xa4\xdf\x3\x5\xd3" "\x17\x64OI\xff\x1fUg\xb^\xfb\xde\x62\xc0\xd3\xf\xc3\xa9\x8e\x12\x1f\x9dYM\xba\x13" "z\xb4\xd6\xfe\xafz\xc8\xee\n\xdf\xb2\xb7 n\xf2\x86\xd4\xd7\x9tareC\xff \xd3\xad\xca" "F\"\x17\x99\xd9\xca\xceh\x8fJZ\xe\xc2`\x3\x1a\x34\x11N\xad\xa8\x7f\x99\xcf\x41L\xa8" "\x84\x6\xe7X\xb4v\x0\x83\x9a\xeb\xe4\x41-\xdf\xef\x9f\xf0\x1b\xb0\xa1\xb8\xc2M)<" "n(?\xaa\xa1>)\x1b\x8b\"\xcb(\xc7\xcK\xbc\x38J\x85\x36\xbe>\xe2\x8\xf5\x16\x17\x65" "{\x85M\x7\x8\x96\xa2\xa6\x86l\xcZ\xf6\xee\"l\x9c\xb\xcd]\x85\xbbn\xc3\xa1\xa3\x0" "\xb\x32\xe0\xea\xe0\xb5o\xa3V(\xb6\xd4\xb6\x84\x90\xb6\xc7\x18k4\xfa\xad\xa4\x82" "rS=\xe4\x5\xa7\x33\xad\xac\xd4\x90\xc5\xea\xad\xc7\x32\x90\xa2WB\x8c\\z\xe1n\x19" "\xf8\x15[U\x10\x9f\xb0\xa0\xe9p\xe8\xf1i\x91 .^\x18\x42\xfc\xae\xddq\x1d\xca\x36" "\x1e\xbf=\x14I\xc0\xdc\x1d\xf0\xc2\xa8\xc0\xca[\x2i\xae\x31O\xb0\xb4\x2\xc2\x91\xa2" "\x18\xb2)I;5\xf6\x19:\xe2]\xbb\x66Y'\xf9{\x19(RMfn\xc3>\x7f\x3K\xa8\xbf\xac\xdap" "P\xd2=\x94T\xda\xd8Z\xd7\x11\xb1j\xc\xc1L/5\x1b\xed\xae\x8e\x94s?\xe7\xeb$\x1e\"" "BO>k\xd8\x83\x8b\x95hp\\a\xde\xc5\xde\x37H\xd9\x18\xe8\x82\x1f\xf0\x33\x45\xca\x86" "\xaa\xc4R\xc8W\x6W%\xaa%\x10\xdf\x8a\x6\x0\xca\xa6\xc0\xc9\x8c\xdam\xd5\xf5#\xb2" "o\x17\xdb\x8d\xa8*\x0\xe4\x9d\x37jPM\x86\xf7\x8\x8f\xf2\x90\x12\x99\xcb\x63\x90\xe8" "\xed\x62\xc9\xa4\x9d\x2\x1f%\xd8\xdb\x8e\xc0\xc8\x94@\x4\x64!\x95\xee\x1d\x11\x0" "\xee\xcd\xffsx\xe6\xe9\x89o9\x1aj[\xaf\xb8\x88\x9\x86\x10\x90\x13!\xba\xfe+1\xb6" "\n`\x87`\x9J\x91\x81\x95\xa5\x30\xe9|\xec\xa1\x14\xa6Z~=\xa5\x35\x95\x7.\xf8\x1a" "\x95%\x92\x13g\x0\x7\x8a\xce\x18i\x3\xfdg*g\xcbz\x88\x33_\xb5W\xd2)\xff\xd0\x38\xc6" "\x97\xa1\xae\xe6\xf6\x0\x62\x66\xe6\xbf\xd3\xe4\x9a\x33\xbf\xb\xe5\x8\x15\x2\xe8" "'[t\xfbZ\x9cn\xb3\x92=\xd8'4\xd4G\xa5\xdfs\xfc\xe0\x36\x97\x15\x9d\x8e\x8e\xd1\x43" "\xe2\\\x62\xfc\xce\xf\xc3\xf0\x1d@\x5\xb7\xc1\xdf\x9a\xdb\xc8\x1a?%]\x85'n^G\xf7" "\x84\x17x\xed\x94\x39\x64s\xc2T6\x4\xab\xb2\x8c}\xd6O\x12R\xd1\x7\x11\xbbLv3\xee" "\xfe}\xe3\xdb\x9a\x83'\xe8\xfct\x19\xc9ml\x9n\xe5\x42\xddl\x89\xeb\xa3\x94\x1e\x8a" "\x86\xa4*\x8a\xca\xec\x9b\x11\xe8$\xd1\x15\"y\x82\xc3\xe1'\x8M\x19\xcbV\xeq>\xde" "M\xed|\x90\x99\xe1\n\xf2w0\xca\x63\xac\x1d\x8duX\x87\x10\xb7\xe6\xa2%\x39\xabph\x80" "\xcf\x38\xf3j,R\x98\x39\xf5\xa5\xda\xc4\x86\xb5\xe7\xfc\xa8t\x8e\x85\xcdO\xe7+\x92" "\x6x+\xda\xf7\xb7\xe1\xd9\x1fQ\x99n\xa6\xa3IC\xcd\x9f\x90J\xfe\xc7\x13\r\xe5*I\x91" "\x93LQ\x1f\xa6\x89\x36M-\xff\x6n[\xee\x37[~\x1\x1\xa8\xb\x2\xc5\xaa\x36\x8e\xe\xa4" "\xfc\xa4\x34\xd1\x81\xee\xa3\x43\x9e\xa6\x39\x8ar` '\xf4\x15\xca\xc1\xcf\xb8G1\xa1" "\x9_\xa1\x13\\\xb7\\O\xae\xe7\x14\x84?a\x17\xab\x1e>h\x84w\xd8\xcf\x9d#\x18\x44\xa3" "\xb0\x0^b\xf\x9f\xba=\xbc\x93\x8cn\xb5\xe1\xf0k\xed\xae\xec\x97\x8d\xe8\x1\xfc\x94" "\xb0%|j\xc5\xcdS\xe0\x64\xc1\x91<\x14\xdd\x1c\xdf\x90\xebx\xc2\x16\xb0\xe3\xc0$\xcf" "5 n\x9b_{q\xe1t\x10(\xefjY/\x83>\r\xf3\xaf\xe0NGJ\x2\x36v\x6\xac\xad\xde\x30\xda" "\xe4\xe6G\r\x5\xeb\x33X\xfe\xa0#\xb0\xab\xf8\x64\xca\xc7^K\xdc\x38\xdb\xf7\x64X\xa4" "Y\xbf\x38\xae\xfb\xc3\xc4\xc7\xc2\xc8\xb8$I\xbb\x15v\xaf\xca\xce\x81\x19@\x89\xb9" "\xa6\x83\xbe\xc4\x62\x62\x31&\x7\x1b\x1c\x44\xc3\x36\x44\xf5\xb0]\xf5\x9b\xb0Y\xdc" "1\xbeo\xd5!u\x84\xed\x9b\x17\x65\x7f\xa3)\xc0\x8f\x34\r\xf9\xb6\xc[\xe4\xea_%R\xa8" "\xec\x2\x9c\xfb\x98\x63I\x8fN\x9\x87\xa7%\x9d\xf5\r\x87'\xa5]\xc5\x38K\xe1hEGJ_\xc4" "\xe0\x98\xd5\x6\xa7\xa8\x4u\xda\x85\x83o\xe4\xd6:\xf6\x86\x8e\xfe\xda\x1d\xdf\x88" "\xad,\xc3\x83\xbbY\x99\x63\x18\x81\x30|q\x10\x86\x6\xc8\xcd\xc9\xf8\xb6&\x96\x15" "p\xc2\x32\xd5v\x8\x42\x65_\xed\x46\xd4\x95*O\x1c\xd6\x8a \x2\xc3/\xe6\x39\xc5\x66" "4\xc8=\x9d\xe7\xe4\x64\x3\xeb\xa4\x1X\x9dt\x14U\xdfl\xc6\x1b\xf4\xb5\x99\x93\xe\xcc" "cG[\xbb\x8c\x46\xd4v\xdd\x8]\xbd\x14\x2\xd3\xd9\x63\x38\x35\xb1\xe1\x4M\xb5-\xc4" "\xa3\x13y\xfd\xa9\xf7\xbf\xa8`U\x4\xdb\x1j\rHQ\xa6\xd5Z\x86\x13\x42\xf5\xe6\x39W" "y\x81\xe7\x32-\xe7\x91\x97g\xc9%\x9cSS~\x97\xa1\x43\xdf" "\x84W\xaa\xa0\x84\xa7\xf1\xef\xb3r\xd9\xce\xe2\x1d\xcf\xdeY\x80ge/@\x11\x45W\xdb" "\x89P\xf9\x99\xb6\xdc\x83\x14\x12\xcb\xdf\xff\xa0\x8f\xfa`\x86\xa1\n\xf5K\xeb\xe1" "\r\xcdH\x1f\xc9\x41N@B\xdf\xb5\xa0\x93\xefT:\xe1N*\xb4\xfd\xfd@\xc3\xe\xd1\xb4\n" "4h\xec\xc8\xe1\x94\xf2(N\x1d\xf4\x9asQ\xd4\xd8\xa7\xfc\xb0vM\xc7\xd3\xe7\x80\xe5" "\x5\x44\xb0\xd2\xc1\x36%\xc2\xb9\x38\x3\xf6:\xa2\x8d\xa8\x1c~\xa9\"\x12\xfa\x96\xca" "\xc2\xf6Gc\xe4\x66\x66\xec\x0o\x8b\xf\xdb\xcco\x19\xc1#\xcb|\x91;u@b\xfd\x84\x12" "*\"\x13\x38\x89\x19\x8\xe4W\xa1\xf7\n\xd7\x92\x3\x92\xb6\xb\xc2\x8b\x92\x97\xf8\xb6\xb[\xe4\xac\xf\x42xtc\xb5S\xf2\xeb\x3" "Y\xdb\xbe\xe5\xe3\x17s^;\xbf\xa5[s\xc6\xc5\xe1\x65\x86o\xdc\x13\x84+\xd2U5\xd1\x86" "\x1d\xf4\xf7\x13\xeW\x1d\xfa\x35\x86\x1\xe6\xa6\xf8p\xb3#\xf4\xdf\x9f\xab\x19[\xa9" "\xdf~\xf\x8c\xed\xeb\xbc\x34P\xeb\x97-\xdf)=\xcb\xb8\xdf\xde\x33\x7\x81\xe\xf0\x9c" "0S\xa6\x1\x14\xd0\xfatxS\xfamB.\r\xc2u\x8f\x34I.9\xb8\xf1\x45\xbi\x8e\x61\x33\xcc" "\xe3\xd2\x63\xbb\xc2\xa8{X\xe4/@\x87\xd5\x88\xba\xfa\x35\xff\xf5m\xb4\xadG\xef }" "\x94\x62p\x19od\x9an\x9b\x65z\xca\xc1\xe9\x2\x9a\xb5\x1d\x96\xed\xba\x15m\x16\xf8" "G\x84^\xffM\xeb\x66\x8f\x9c\xdbz\xb7$i\x8cQ\xa9\xef\xf4\xbd\xc3\xc4#H\xe9mV\x89\xdc" "]\xea\xf6\x38\xc0\xb2@\x18Mfj\x82\xf\x9\xec.\xb0\xd5\xa8\xa5l0QN\x16yVh2\x9f+\x14" "8\x1b?\xb7\xe4.\x84\x9b\xa3\xda\x19h\x8eG[\xe\xe6\xce\xfa\x43\xa9\xbc\xd2\xff\xb5" "\xf3\xe3\xaa\xddlGz\xc3\x9e\xfe\xf1\xd2\x11\xdb\xc3\x39I\xf7\xfb\xc9\xf2\x8b\xbe" "\xee\xb7\x64\x85R\xf4\x38\xc7\xcc\x63\xe4\x1=T\xa9\xc\x81\x39\xeb[\x15xe\xbbr\xc0" "\xb9\xe9\x1a\xcf\xe2\xe1\xc2\xcc\x96t\xa5\xc3\x39\xf8\x8c\x1a\xec\xee\xaax\xdc\x83" "\xc2\x82\x2*\x91p\x15\x83,\x9a\xce\x7f |\x0\x1d\x80\x37\x9b\xf9\x92\x5\x3\xdeX\x88" "\x90\xb6\xa0\x17\xe5\xda\x8a\xf3\xe9\xe7\x9a\x7f\xb0\xac\x43x\xf4\xfd\xa4m\xe}3\x9b" "|e!\xb3\xbcN\xbe\x41\xef_\x93g?\x87\x14\xee\x43\xbc[]\xe9\x1bn=`\x9a\xd3\x34rz\x80" "\x5\xbf\x7QI\x6\x1a\x18T\xd1\xf1\x93\xf1\xbb\x95#\xe3\xa6\x1d\x14z\xf4\xf8\x86\x9c" "\xad\x2\x8b\x93X\xf1\x9b\xfe\x36\xe6\xe7\x1f\xf4L\x1a\xbd\x63\xcb\x46`q\xbfy\x9d" "a4\x9b$\xa7<\xd2I)\xa9u\xa3\x1\x32\x8c\xeb%J\xd5\x19\x63\xa8\x1f\x30\x99\x7\x43\xe0" "\x5\x80\x12l\\\x91\x4>^\xcd\xb7jK\x8e\xa6(A\x84\xdc\x8d{>R\x8\xcd{iW\x87-\x15*\xa6" "|U\x5Mc\xca\x80\x89I\x8c\x83O\xc`U\xa1\x83\x38|\xfc\xacSM\xaa\xdf\xd0Xn\x93\x12\xb0" "\xb3\x93~\xd1\xc9\xa6\x1c\x96\xcfWj\xa4\x1b,\x1f\x32\x89\x65\x1f\xb8\xce<\xa3\xf5" "\xd0\x17vj\xc\xd3\xd9\xde\xaf\x8d\xf6u\xa6\x9e\xc7qe\xd6 \x87Uo`\xfb\x17\x91)'7|" "L\x7fi\xad\r\x13\xb7\xc2\xd2*>1\x87\xbf\x19H\xfb}\x6\xbaT\x11&\x96m\xea\x84\x1)(" "a\xd2\xe4\\p<=8\xd2\xa0o\x88\x90\xe6L\xbb\xe1v\x2J\xa6\x8d\x9f\xc4\x31\x16Y\x11\xec" "\xd2\xde\x10\x8c\xec\xe4\x98\x18\xec\xf8\x9f\xfd\x32\xc7o\xe7\x11\xea?\xd8\x34\x35" "\rV\x8fL\xcbn\xa3\x96\xfb\xd7\xb\x61z\x88/%\xc1\xb5\xf4\x13xI\xa3t\x89U\xe0\xe8%" "\xae\xda`\x11\x15_;\x8b@6\x9l&\x94\xdb\xba\xf8\x82\xf8\xde\xb0@\x94O\x3\x34\xed\xd6" "\xef\xf\xde\x98\x95\x38\xa7\xd7\xa0\x62\x9\xd2\x9\xf7\x9c\xeb\x9\xbeQBL\xd0\xb3\x8b" "\x9e\xea\xff,Ib\xddj\xf3\xfb\xe8\x90\xc7\xf4o\x97}zz\x8\x1\xd2\x12|\xd0=\x4v\xe5" "j#\x1d\x9d@rq!\xdd_\xaco\xad+q\xad\x34\xf0\xee\x44\xc0\x88\xf5\xe1\xd7\xec?b\xf/" "RQz\x8b\">\x8?\x97\xa6\xc8\xbo\xf7\x42\x44s\xbb\xfe\xa5T\x8e\x17\x6/&B^\xdf\xdb^" "\xb3'\xa1n`H\xfc\xa4?\xa6\xa3\xb5\x7f\x62\x81\xb2\xa1.\xfe\xdf\xbeN\x94\xf4\xc8\xd8" "\xb1{\xf0\xc3zk\xfb\xe1\x32P&\r\xc8\xab\xfa\x80\xb0t\x9a\x9\xf2\xee\x7f\x66\x7\x17" "\xe0]z\xcfii\x0}\x8c\x9fS\xb0ta\x1a\x94\x10\x92I\xef\xc9\x86\xd5V\xc5\xe3\x1eH\xe7" "\x1\x1e\xa3JR\x87-\xfc\x66\xd5\x85\xae\x31\x80\x35\xa9^j \xb&.\xca\x94\xcc\x61\xa5&O\xa5\xbd\xa9Q\xa8\xaaZ\xb7\x44\x8e" "6<7\xa0\xfe\x1a\x14\x81\xdc\x98?3\x92\xb8\x36P\xbb\xf5\xb\xd8\xe9o~\x1f\xc6\xe3\x9b" "\x91\xe4\xe3\\\x17\xc2:\xf\xfa\xa5\xf9\xb8\xd2+\\w\x99M\x92\x2\xf9J\x84\xa9+j\xa1" "\xd6:\xbf@\xfb\x62\xdck\xc2%\x42S\x86\x0u\x16\xb9]\x8c\xf2\xb6\xc9\x9c\xb8\x0\x86" "8\rI\x1bI9;\xf0n\x80\x9bk\x8aW\xec\x8b\"mL\x7\xee\xb\xf3L\xba\xa3\\\xe3\x94\x6\xe" "\x83=\xbd>{\x89\x32\xdc\xcb(\xdaHjY\xeb\x9by\x15\xe6V\x1d\x42V\xe0\xb0\x88{\x3u\x97" "\x14\"\xa7\xb4\x80\x8e/\xb8Y\xben\xdb|\xbb\xd3\\\xad]\x98\xff\xe5\x17\xd0_j%\xb9" "&a\x81o\xcfl\xdc\x98\x8eQH\x3\xa4\x36\x34\xd3\xb2\xb1\x83_\x12\x46_\x18\xbe.8\xb2" "l(\xd3\xd8\xc5\xf8(I\xea\x19m\xe3\xb6\x1a\xe4\x8d\x1a\x32\x32\xb1\x63\xb0\x46V\x11\x30z~\xdd" "\xb3U\xa4n?\xc2\xd2\\\x98\x31\x4\x46\x94Jj~\xe4\xd3X\xf3\xe3\x86\x46\xfe\x8b:d\r" "\xb7\x37\xd0$\x8cVL\xc7\\\xeM~\xc1\xc7#\xb3\x30\x64>\xe9\xcb)r\x9a\x8\xa9\xb3\x36" "\x94\x95IA\xc9\xfe\xafK\xef\x97\xf8\x82\x6\xbck}\xd8\x8\xc5\x38\x96\xf\xe6\xb9\x8a" "\xe9\xcfZ\xb3,\x9b\xda\x1a\x12\xda\xbep^\xc1\xd4Q_\xa0H\x4|\xb&Dy\x10\x9a\xbaQY\x93" "\xc7>\xd3\xe\x0\x15JM\x15\x3\xebr7\xf7\x8c\xcd>>W\x5$D9N\xd9\xae\x98\xf4\xb1\xe3" "\x91\xdf\x36\x94\x1eV=]I$\x95\xf8\xc7$\x9a$\xc2\x42\x9f}\xb1\xc4\xa4\x31\xb4\xa2" "\xb1\xe8\xdc\xbe(E|\xe7\xb4\x14$^:\x17z\x17\xc\x87\xae\x12\xad\xcf\x96\xf4u}\x11" "[\x16\xcb\xf\xd7\x88\xc7z\x1f\x9f\xb3hk\xdb\xc9'\x5\x1c\x46x\xf8>\x8d\xc3\xb9\x64" "h\xc5\xa8\xca\x83\xa4l{\xe6&c\xbb\xad\x17\x9d\xbd\xc5[\xa0\xbem\xc1\xdeW5\xa0\xd0" "&\x10\x30\x94\xbaW\xc1U\x1\x9e;\x86\xa2`\xfc{?\xc2\xa0\xad\xad\xa5\xb9\xfbV\x2\x9a" "(#W\xf5\xcf\xd4\xce\xe0+1\xac`\x1bW7d\xdd\x5\xfe\xb4\x2\x34\xc7\xf2\xb9^\xc8\x1\xcf\xb6:\xa3[eQB\x1d\xe7" "q;\x1a\xefG\x6\xd2\x46R\x10\x7\xee\x35\x81\x99\xe7\x7f?\xd3\x92\x38\xf8\x1f\xe6\x88" "\xf\x35\x44\xd1\xc8\xa7\x97;C\xdc\"\r\x19R\xa2\x90\xae\xd7\xf\xf3\x30\x0x\x89\xa2" "\"\xa8\x30\x85u\xc5\x2\xa2\xa2)\xb0i+i\xb2\xf6\xb1x\\\xbc\xa2\x8f\x1b\xab\x88\xf8" "\x96`\xc1\xc4\x66\xab\xa3\xecv\x1f\xf6\x1d\xe2\x5\xe0\x95\xc6\x44N\xe9]\x2\xf4\x45" "\xe0\x96W\x99\x1a\xd1\x81\xd1\x32[$\x8e\xc,\xf4\xb\xf2Y\xee\x36$\x9f:2\xb8\x64" "\x96\x44y\xa2\xaa'\x92\xb5[\x81\xb7\x5\x6\x42.\x84~Pcf\xf\xf5\xb1[\xc1\x9e\x64'I" "gP\x8a\xb5\x35;d(\xab\x17\xba\xc7\xfe\xe2\x12\xd3!\xc9\xc6\xde?\xe8\xa3GI\x1\x8e" "_W\xf1\x95\x3\xcd\xd1\xe0\xe5N}\n\xa3\xc8\xf8\xfe#_G>48(\xed\x33QO\xf1\x1bmn_\xd8" "L\xae\x88\xe1h\xd0\xc1\x12m\xad\x64\x9\xc0\x98\xadK\x10\x62\x89\xcb^9h\xf5\xd3\xda" "K\x13([t\x9b\x81*\x1bW$\xa4\x33\x37\xb9\xf6\xcd\xfc}\x1a\x98\x81\xfep\xdc\xdb\xcb" "\xb1\xcd\xed\x41\xaa\x15$\x8a\x9c\x37>,\"\xbfW\x0n\xd5X\xbf\xe9\x85\xd5\x33\xf4^" "X\xed\x18\x84\xf3G\xf4\xc3\xb2M\x15\x9cI\xcf\x8aI\x13S\xaa\xe8\x1d\x0\xf9N\xc8\x99" "\xf2\xc6\x39\x3R\x83\x1f\x84\xb5&\x6\xff\xdf\x14\xa2\x30\x18\x32\xfd\xb1\x17\xcc" "\xdd\xa2*\xf5(\x8e\xf1\xcf\x92\x95\xbbw\xffT\xf0\x14\xcc\x81\x7\xca\xc2x\xba\xcd" "\x1e\xd4\xa9\x84\xec\xb9o\x2\x30\xc5\x33\xfcHt\x15\xbd;\x8aP\xb6)\x9a\xfe\xcf$*t" "z\x92\x8\x1b\x7f\xae\xdc\xec>\xb3\x84x\x9c\xa1\r\xff\x4\xba\x99\x34\xb6\xf8~O\x6" "\x90[\x13\x41\xa6\xae\x2\x81\xa3\xa6\x45\x98\x44\x8fz\x1d\xc7\xdd\xf6\x30\x86S\xf6" "Iz\xb1\x33\xe3\xaa\x85\x10\x0U\x13\xcd\x9b\xb5\xad\\\\\x17\x8\xd4\xa2\xf4\x84\x37" "[`0:\x9f(JC7\xc2\xef\xaa\x3v`\xb5\xf2\xbd\x61\xa5\xab \xc8+\xb5\x82\xce\x90*\xfc" "4W~\xb8\x82\xbb\x91\xdb\xfa\xd6\xfd\xbc\xe5\x12u\xaa\x63V\x95&\xb5;\xd2\xff\x81\xbb" "\xfe\xd3\x38\xe7HH\xf6\x14JjG\x14\x91T*i\xf4\x8dp\xfb\x98\xc3\xed\x83\x42\xf0\xea" "\x7f\xeeW\xfc\xealdl\xad\x11\x88\x11\xe3\xe2rE\xca\x83\xaa\x92\xad\xa5\x6\xb9\xde" "M\x5O;\x7\x87\x93\x99}[\x80\x41\xa9\x99]\r\x8a*c`\x18\x61\x8b\x9f\x6\xf5~\x80\x95" "m\x1?\xb0@.\xf2i\x17Y\xac\xcb\xfd\xb1~\xa5\x84\xbaW\xc5P\xf7\x8b\x9c\x30\x81\x37" "\x87mF\x1b\x36V\x9c\xd5\x7\x13\xe\x8f\xf\x94\xfe\x32\xb0\xe4\xe1\"\x92\xc\x1e\xaf" "yd\xbc\x31\x6\xa3\x16\xe2N\xf\x11\x8T7s\xee\x33s\xb4svzJ\x90\xec\x31\x35\x2\xc5;" "L\x19\x90\x19\xb1\x35\x7\xbf\xe4\xba\x32\xb4\xa8T\xae\xbf\x84\xc8z\xeb\xa8\xc8\x1d" "!\xa3o\xa3\xe3\x11\xf9i\xf9\xad\x9\x43\x1dz\xb8OSZ\xedgJ\x1c\xf0\\Gtu\xaa\xcd\x43" "\xac\x1a\xb7\xea\x13\xc4\x8a;${\x18\xe2\xf8\xd8,\xa2\x97\xe1?\x1b\x63\x41\xa8\xb9" "\xfa\xab\xfb\xdch\xc6\xeb]\xa2-r8|\xeb\xe0\x61\x65\xc6:\xbe\xf\xd9\xcc\x92\xb7j\xcb" "\xb7x\x7f\xa3\xec\xfvA\xb8x\xbdv\xeb\xd2x,\x93\xeb\xabRQH\xd8>\xe9;\x1csK\xc2\xb9" "KQ7\xeb\x1fY^jN\xa5\x12\x9eQ\x9aIT1&\rB\xac\xbc\x62Q\xf\xe0[\xdd\xfa\x9a\xd5\xdf" "\xb3`c\x1\xaem\x7f\xcb+W+\x8eV~$o\xff\x65\x8a\xbc\xe1\xc2\x85\x9c\x1a\xe5lB$\xfb" "S_\xb1ulq\xc9\xb5\xefw\xe9\x82_\xcc~\x83\x15\xf5\xcf!\xf1\x1e\x38\xa5 \xa0\"@\xf9" "\xba,5I\x2~V\xf5S\xa8vr\x17\xbe\xf2\x4\x91\x7\x42\xc7\xc7\xc4\xc7_\x95\xef\xa3x\xf" "\xba\xca\xfb\x41\xc0\x9b\x2\x11\x5\x41\x3\xee\xda\xcb\xdc@\xeb\xb9\x42\xb3\xae+\xd3" "\xd9&\xf\x1d\xdb\xab\x91nc\x8f\xd1\x8\xe2\x86\xa0S\xb3\xc4\x63\xa4\xe4YU$GE\x8d\x92" "\x19\xe0\x98y7\xa9@ \x3\x15\xdd\x90\xdd\x1f\xd3\xa9\x88\xf2\xe0\x8c\xc1\x41(5\xd3" "\xd4\x62\xa7\x1f\xde\xf5JO\xda\x8 zYh\x97\x85\x36\x96(L\xf9\r\x1e\xa7\x94\xb6V\x18" "\xc3\xa4\xc5\x10\xfe\x95\x45\x90\xa0n\xd5\x15\xbb~p\xaelM\x1a\xed\x39<\xf1tN+\xc1" "I\xcd\xae\xbd\x9cK:\x13\xd6zf\xaf\r\xd0Sde\xf0gupLs\xad\xc9\xfb-;\x88\xde\xbf\x44" "\xe4\x2\x8b\x86\x7f\xf5]S*\xdf\x33\xddWg\xb4\xee\xb6\x89\x1\xc4\xaaG\x12i\xa2\x18" "\xa1\xcb\x3\xfc\xb9\x45n\x9aP~W`\x98(\x92\xe4R\xd4\xa6#\xae|\x8b\xdc\x8\x1e\x46\xe8" "\xc6\x66\xed\x80s\xf0\xac\x82yh\xa2]\x1aZ\x8f\xb6\xae\x6K\xe1\xe2\xb8\xfd\x88\xbe" "%@e\x15!\xd4\xe6\xc<\xe2@\xee\xf1\x92\xfa\xea\x9e\x38R)fi\xf9w\xd0\x92\xd7Nn\xbf" "!\x93!\xc9\xb\xc4\xb4\x97\xbe\x45\x8d/\x9a\xba\x3\x95s\xf3ra\xdfL\x9e\xe8\xfc\xd9" "\xbaG\x13\x5\xa2\xa9\xce\xda\xe6st\xbe\xf9\x1f]\x94\x8e+\xd1\xbfgXv\xf7\x8ak\x99" "\x8f\x32\xe9\x6$\xe\xc3\xae#o\xb\x62\x1a\xd6\"\x11\x9d\xda\x90\n\xb4\xe7\xdb\xd9" "jm\xc\xba\xa1\xe5\x65?\xc6\x95\xac\x33VW?<\xc7\xd4J\xfe+\xb6\xc3\xc8\xa4\x83Ky\xe4" "C\x91\x41?B\xff\xf\x39\xbf\x1e\xc\xf3\x92\x99\xb5\xdd\x80 >O\x85\x13\x93K\xeao\xfc" "\x81\x6\xf6^{x(0=>\xd9\x35\x13Sd7wR\xcj \xfe\xf5\x8e\x18\xbf\xe5\x44\xd0\x61\x31" "\xd3K\xb1\xd0\xb8^\xb7Ye\xce\xb7\x1e\xfb\x8b\xf1\x3O\xcdG\xd9\xf#\x8a\xe1\xdd\x88" "\x9b\xe8\x42\x33\xccS\xffH\xb8'\xd5\x7f\xa0\xd2\xad\x33\x83\xc1\xcdR\xa0\xd9q\xc4" "~\x80&tG\xed$\x1c\xcb\x34n\x8aHFm`\xae\xb8\x62\x30\x33S\xd3\xb\xd6<\xe9\x65u=]\xcd" "\x2\x7\xf1j\"Oe\x80U\x80\xf4\xeb\xff\x87\xb9\x88\xfc\xec\xe2\r\x41\x1b#\x18\xce\x87" "\xbaz\xe7J\xe7\x46\x62p\xbbTO\x86\xf1\x7\x6\x37\xcd\x45\xfd\x30\xa2p1\xce\x42WZ\x8e" "X\xff{\xe9]oD\xd7\xb\xb7oI\x15o\x1c\xda\x9\x12:\x15Y\xcf\xc4\xc5\xce\r\xc6\x97\x4" "\x18^\xd7VYm\x8b&\xde\xd8:>\x18\xa4\x14\xa1\x32\xa7Z%\x1aX\xc6/0\"jzd\xc9\xbf\x30" "\xad~r\x1X}\x17\xe4=\\nf@\xc5\xc7\x96\x8d<\xab\x1\x30\x35\xf0\xf3U\x1e\x80g\xba\xb5" "af|\xe8\xcd(\xb\x84\xb7\xd6\x7\xff\xeP\x4j\xfb\xfe\x98\x46\xeb\xa6\xc1\x18\x97,\xc3" "\xc1\xb9-P\x11\xf6\xb1\x1e\xf0\xd1\xe8[\xae\xb6\x37\x1e\x62=\xd8\xdd\x85\xe6\\jE" "m\xeeoH\xf0\x85\xef)'\xa8\xb3\xc4\x30N:\xe8\xbe-2\xc2\x32\x9f\x9aP\xd8\xb5\x89\xe9" "WYg_\xbb\xa8\x84\x18G\x82\xa0\xf7;\xa0\xcf\x85\xd4\xe0\xf9 L\x1e\x9d\x9b\xb3\x37" "\xab\xec\x34M\xee\xac\xc8\xedQ\xd9:\x85[c\x1b\r\xf3\xd0\xf0w\x89\xac\xb\r\xc4\x39" "A\x8b\x8e\xf3\xcX6J\x99\xf7\x64\x42\xc~1~\x8c\x8'\xcb\x30\x1bKM\x92%\xd0pN\xd1?\xf4" "\xaa\x81iI\xf8\x45R0\x9e\xb2\x19#\xf7&\xf6\xea-(\xc1v`\xc\xd6\xef$\xc4)\x96\xe3\xb" "m\x9e\xb3=\x1ewKg>\xd8\xc5\x96\x99\x8e\x97\x92\xfalS\x1eZ\x9c\xb2\xcb\xf8\xa5\xfc" ";\x9\xb4\xdf'\x1d\x62\xfe\x8c\x1e\xce\x1a\xc0\xa1\xd5\xb1\xc\xb1\x9d =!\xb5\xc9\x93" "Y/((\xad\x8aK\x19\x9e\xc6\xd8\x91k\xfbk\xb5\x17\xb5\x93\xae\x2\xc2\xf7_\xd4\xf3\xd7" "l\r\x9b\x86\xa7\x0\x95\xf2\x90{\x2\xc\xd8(\x7^\xf8\x86\x90\x33\xfc\x9d\xcf\x14:\xf0" "\xf5\xfd!7sw\xd9\xe3\xe3\x61\x4>oK-j\xcf\xdd@\\A\xd9\xbd\xc2kE\x3\x3\xf4\xa4\xfe" "y\x0\xea\xc6\x33\x92S\x8kGL\xd8I(\x82\x36\xb1\xfe\xb6\xefM\x97\x5s\xadi\xc9\xc8-" "\x97\x15\x7h\xb0\x8\xec\x39@\xf6\x96\xac\x65\x7\xcf\xf8\xa8\xa5\x9f\xdb\xce\x82\xf4" "\xd4i{\x5\xe7+\x81{\xd5\x66\x9f\xa8\xbf\x1\xec\x9fu\x6&Ti\xe5{\xd0\xa4T\xa5N{7t\xe2" "\x8b\xabY]\x81\xc3,\x4\x8e\x66\xetJ[\xdb\xf4\x0\xfm\xdb\n\xebvx\\\xc3_6\x18\x94\x66" "\xde\xc0\xcf\x1\xc6\x8e\x1dX5\xd0\xb7\xb7\xfb^\x2\xe4\xdf\xe5\xd6-=J\x93\x91\xe9" "\x19\xa6\xb7S\xc3\xd9\n\xe7\x1dJ~\xfe\x66\xca\xb6\xff\xfd\xca\x92\xf7\xc4\"\xae\x38" "\xda\xe2\xc9\x31/\xe2\xfct\x12:\xa9\xe4/\xd7\x2\x1e\x94\xfJ\xab\xa9\xd1_\xfa\xa3" "\x86$?;\x9a\x2\"\xff\x14\x86\xf9\x8c\x9c\xe3\x5\xb4\xa8\x39\x94<\x92\xa6\x31\xcb" "\xc5\xf4\x7f\x93\x9e\x32\x9h\xe7\x11\xf2\xe8\xb6+h*\x3\xe6\xf0\x88)\x80\n;\x17\"" "\xa1\xf9\\$%\xdf\x81\x42\xa8\x9cv\xaf\xd7Y-~uG\xbc[mw\xb2\xb3\xca\x9c\xd1\x7fg\x15" "u\xfb\x33\x90gu@\xddv{\xcd\x34;0.E-\xf5V\x90#d\xe7\xcc\xc7\xc8\x3\x9bpy\x1b\xa2\xb0" "\xda\xaf>f\xed\xcd-[+\x10he\x99\xb0\xb2\xaa\xfa\x9e[\x8a\xb7\x6\xa3\x12<+\xc\xd4" "\x1b\xd2\x0r\xbd\x8d~\xcf\x9d_\xf0\xc9\xf8\xc8\x87\xa7\x9c\x2\xdc\xdd\xda\xb\xb1" "\xa2_S\xd5\x88\x1K\xcf\xf4\xa7\x93\xa6\xa2\xf8\x39\x18\xb2,WT\x8e\xaa\x96}<)\x84" "\xa3z\xdfR\xbf\xdbIk*\x98\xbd\x38\x6h$\x9\xe6(H\n\xd3\x1e\x45\xba\x88\x10\xac\xc6" "\x97w\x0w\x1d\xd0r\x9aV\xa9\xa7\xf9\xa8)\x97Gr\xc3K$lb\xe2\xd3\x61\xb2()\xdc\xab" "\x4\x84uj\x11W%\xa0Wy?\xb3k\x5\xbc\x15#V8\xe0n\xea\xc9%\x8c\x35Y\xf4\x4\xc3\x9,0" "dCt\xbc.\xe\xf1\x9\xb6\xa8\x96)\xc7\xafm[\xb4\xd5\xf7;/W\x8a\x62\x9c[\x95\x85M{\x94" "-w\x9c\x1c%\x1bg(s\x9b\x8a\x82\x42K\xbN\xce#S\x93\x8e\x8e\xea\x1e\x45\x9e\xe8\xcc" "T\x9e^2D\xa3\x45\x30\xa9\x88 %\x9a\r\x35mH5|5\x8e\xda\xc1\xa3l\x5\xd0W\xa5\x96\xa6" "q,\xd4[ \x7\x15\x13YU\xfd\x37\xaeR\xa6\xf8\xbc\x86\xaa\x95\xd9\x30\x88\xb8\xa3\xd3" "M\"=\xf6\xe8\x82\xf4/\x9e+c\x1bY\xb1\x1cM\xde\x8am\xf5\xac\x6\xe6\x80-\xdf\x90M\x84" "j\x1f[\xcb\x96\x63\xf7\xd7\xd6\xc1\xf3x\x14\xd1\x90=\\P\x9u\xb7\xe4\xb4i\xca\x81" "\x96\xb0\x34\xba\xe2-\xfa\xc4z\xfd(\xad\x8a\xf\xf3\xfe\x1di$\xe6\xa4H\x84\xda\xc8" "\x99\xe0\x30\x32M\xbX\x8.\x93\x8b\xb7\xea\x1f[\xc2\x86\x9b\x8f\x12W\x93\xe7\xa2g\x7z\xb0\x9d\x41\xe0\x12" "\xb0\xf0\xf6\xb0\xd8\x8b\xf7\xa9\x98\xee<\xe3X\xaf?\xba\xf3On&\x8c\xe4\xe1\"\x1d" "\xa7V#MK\xc7\xfe\xac(\x1f~G\xb8R6\x9d\x84\x10\x9aXh\xb2\x1e*\x86\x93\xb9\xcf'\x15" "\x1a\x19\x16\x11`S\xe1(\x7\xe5\xb7*{\xdd\x12\x37\x35\xfdR\xca\xa4\x82\x61\n`E\xd8" "\xf8$r\x89\x1f&53\xc6V\xa0[\xbd&\xd4\x1c\xcf[\xb9\x64\x80\x85\"/\x85i\xf5\xaa\xe0" "S\xfbG8\xdf\xc0<&\xe4n<\x9a\x8b\xa7\x8e\xd0\xe3\x9\xf8\x8fKU\xceP\xce\x87^\x13\xc9" "}b\xaa,\xefmF\xb8\xc8\xc5n\x2\xb1J\xc3\x8bN\xab\x34\xbc\x8b\xac_\x1f|\x96<\xfc\x17" "\x16\x7fN\xb7\xc6\x80\xcfQ\xd3\xa5\xfb\xf0\xa0\xe1\xb0\xbf\\r0\x16'-~\xa3\xbf\x9f" "\x91\xa2\xefk\xe6\"vR\xb2\xf7\xc9\xe9\x32\xbc\xd6mY\xd4\x31\x83\x90\x63\xd9\x9d\xd0" "\x87\r\x93\xcb}h[oG\r&\xbe\xe9\xce\xce/\xe4\x98iF!7^\x95\xf3H\x8e\xa7$\xab/=\x89" "]!#\x8c\\\x6\xe6\xe8\xd3\x8\xb9\xfb\xf\x14\\\x1a\x66\xaf\xef{\xcc\x0\xbf\x38\xd3" "=N\xa3\x2\xef%\xae\x8cJ\xb\xe2\xcd\x99\xda\x8a\x88\xba\xdcU\xfb\x9bJ\x1\x15\xa3\x6" "\x9d\xdf\x1er\xc1\x8\x93\x63\xd9\x16\x10*\xd2\xc0\x9e\xd3\x1d\x13\xec\x9d\xc5K\xbd" "%\xee\xf8\x84\xff\x8\xb5Yn\xab\xf1\xb9KP^*\xcf\xe3\xbeJJG<\xd3\x1e\xbeM\xf8\x9c\x30" ":\xc7\x9d\x83\xe6\xd3\xea\x4\\\xb3\x82{\xc0\xdc\xe0\xb3\xb8N!\xb6\xca\x63'\xb1\x3" "8\xd8\xbf\xac}-C<%\\\xe6\xd1-m\xf1_n\xf5\xef\x8b\xa1\xad\xf4=Ml\xa7\xdc\x98\x92\x4" "\xbwp\xd9;g*\xe7\x0/2\x91\xa4\xf8:V\xd3\x8b\xba\xc6\xaei\xe4:?@\xa3\x62\x90\xd5\x85" "\xe3\xd5\xe3v\x92\x42\xc1q\xc6\x86HMP\xe3\x89\xca\xbb\xd8\x8c\xbeM\xff\xd7\x87\xd1" "'\xb1gM\xd4\xb\x46\xccrQ\xbazv4K\xbe\xfe\xe8\xb\xb9\xa0\xd2\x8a\xe8\x36\x9f\x9d\xbf" "\xb3\xa7\x80$#\x8d\xf6yQ\x18\xefM\x10\xb5\xb2\x8c\x8N\xbe\x41\xe6\x97\xd6\xd6\xb1" "\x83\xf1u,\x92\x31\x14\xb8\x45\xcb\x9a\xd5\x62\x33\x46\xa2\x44\xef\xbe\xd3\x8eK\x89" "g\xa0\xb2Z\x9d)\xc9^P{\xd2{\xfbZ\xe6-\x9a\x44\x6\x81o\xcc\xe\x94\xf9&7\x89\xa4\xa9" "\x81\x95\xbe\x81\x7\x65\xc3X\xe2l\"w\x1n\xe6\xc3,\x9d|\xba\n\xf0\x8e\xb5\xbc\x84" "\xaf\x15\x10i \xf\x1en\xc2\x9aZo:Q_\xe7$'g\xd1\xed\x83U\xdf\xb4\x66\xf0\xff\x44\xf" "\x89/\xd2\xd1 \xd8\xda\xbf\xf4o\xc3\x95\x97\x9e\x34\xeb\xc1\x10\x81lc&\xed|\x14\xe1" "\xcd\x8e\x80(\nO\x1f\x93^U\xb9x\xe2\x66\xd0\xe\xa5\x7y~\xe5\xf3<\x86\x36!\xcb\x66" "\xa2\xde\xdfvH\xc1\xa5\x92`\xe8.\xe7v\xc3\xf8U\x94\xfa\xb5\xc3\xe2\x80\x93\x88r " "?5\xf1.'\xb9Nf\xbd \xe2V\x3\x92\x9b\xc!\xac|/\xab+\x3\x82\xf4)a;\xd0\xcc\xc4\x80" "\x15\xf1o\xfe\x8a\xf8\xca\x10\xefT\xa2G\xe7\xdc\x86\xa6Ws\x11\xae\xfa\n\x1f\xe3P" "\xe7\xad\xae~!\x94\xfa\x13\x5\x35\x8b\xbe\xdd\x35\x1f.d\x6\xe8\xde\xc9\xc\xdb\x41" "\xf0\x84\xa5K\x1@\xb4\x13^=\x12\x8f\xe5\xa9\xc4\xb3\xf0\x66o\xb5\xf0.\xf0\x14\xa5" "9\x12\xc2\x9dM\xc!We\xea'\xf3\xb4\x6?\xcb\x10\x94\xcc\xab\x9f\x99\xb2\r\x9e\xa0\xdc" "\xec}\xfa\xaa\xd7\x81\xc6Z\xa6\x6j.N'\x5\x36*`\xd8<\xef\xf0_\xee\xfa\xbc\xb\xfd\xf7" "\xb7\x84*u+\x87\x61\xbf\xf3\xce\x91MTL\xb8&\xda\xde\x7f\xfb\xfd\x90\xaa&5\x17\xbc" "\xe0\xd2G$\x8d\x3\x9a\x35\xfe\x30\xfa\xce\xc\x7\xe5_\xe0\x95\x6M\xe9-VT~mE\xc8?)" "\xf5\\\x89@\xe5\xd4\x80\x1b\x1b]3\xcb\xe5\x91Y\xc3~i\xd4\x33\x6h\xf6\x8b\x87\xb8" "\n\xeb\x9b\xcf\r\xb3\xca\xcd\x8f\x96\xbeS\xecm\x0\x42`}\xa9$\xff\xba\x12\x30y\xfc" "|\r\xee\xba\xc5m8\xae\x8c\x1e^{\x9f\x93\xeayU\xd5\x81\xf6\xe\x93\x1e~\x1\x83t\x1e" "VI\x8c\xa3\xb3\xef\x98\x8c\xeZ\xba\xd7\x34w9\x80@\x8an\xe7\xa9\xe8(wdr\xd1s\x95\xd4" "\x17\xfdu\xa6(\x7f\x36\xf7\xfb\xfcG\x8\xa9\x92\xc8\x7f\x5\xc\xa2\xc7\x84/\xca\xed" ".7\xe3U?\xed\xbb\xb\xbe\x86\x7fn\xa2z\xcb\x63\x10<\x9aP!\x8a\xd8\xa1" "&x\x96\xa4\x83\x1ei\xb3\x4\x1c\xfe\xcc\xc7hX\x17\x9e\xf8\xd2\x43\x86\xf6\xfd\xf3" "U\x85\x34\x86\xc9\x9c\xe0k\"\x1a\xcf|\xe8Pwg\xe2\xf9\xac]\xfP\x88\x65\x41:\xb4\x6" "\x9c;\xb1\x11#3sOk\xef\xeb}Ph\x90p\xb5\xd0TH\xee\xc2z<\xdf\xcb;\x98\x97\xd2\x6\xfa" "\x88\xa5\x35_0W!\xe1\xc3\xf3\xa7rEot_\xe6\xe5W\x19\x87.\x87\x0\xbc\xb3\x99Q\xe6\x83" "\\w5.\x8\xf5\x31\xc7\x13_Y\x83\x9d\xbe{|\xec\xa6Z\x86\x80\xbb\xa2\x43\xa9\xa0\xb7" "-\x12\x91K\x9b\x44<\xa1\xc0\x65\x0\x98\xcd+\x8f\x13\xfa\xea\xf3\x37'\xbf\xd8m=\x1" "E\xe1\xe2\xf5\xe2x\xc1\xb8\xcd\xc1\x2\xa9HV\xe6\n\x19\x66\xdf\x38\x8e!\x9f\x5K]\x11" "\xb1\x11\x63\xd9\xf2\xbbq^n^r\xc8\xcd\xe6\xd5q\xb4=\x15\xdc\x45\xab\xee\x9aN\xe0" "\xe5\xa5,\xc0p\xd2j\x84\xeaY\xad\x45\xb2\xa7=\xbf?>\xed\xcb\xab\xc0\xe1 q\xff\x8" "\x1c\xff\xea\x66\xc6^\x1a\xb7\xa2r\x9d\xf3+v\xdf\x44\x45\x9a\xe0\x98\x9e\x9c\x36" "\xfco\xfsK\xc8ZC\x83\xf3\x80\xc7p\xad\xa2n\xddu\x17T\x1e\xd0\x46\x97\xd3\x7fM\x85" "\x91\xe5\xf7\x85\x10\xc5\xe0\xe2\x98\xa4\x19\xe4L\xfe\xd0\xc1\xf0\xd6\x35\xd9%\xed" ".\xdcN\x12\x81o\xae\xab\x87\x99\x8f\xfc\xa0O\x85\xb8\\\x8\xd0m'\xc3l\xb9\x39\xa1" "DU\x87\x13\x93\xd9\x5}g\xa3@\x1g\x1ctyj\xf2\x89\xdb\x1al\xd9\xb\x12\x9aZ\xa3\xcd" "hp\xed=\x88\x92+\xc4\x63\xb3\x8f\xc9X\n\xb5o3\xe6\xb5\x89\xbu\xc9\x83\xba\xae\xf6" "\xe8\x92<%\x86g\x8d\xfd\x41\xc9\xd8\x66\x41\x1\xb8\"#o\x93\xa0K\xd5\xcc;2\xe\xe3" "`ezX\x84\xe1_\x7\xcb\x9b&\x8c\x96tw\x80\x38#\xf9gf\x89<,*[\xb8{\xf1\x1c\xb4v\x9d" "fX\xd4\\\xdb\xa2\x99\xd4\xa6\x3\x9b\xbf\x2~l\xb0\xa3H\x9a\xd3GER\xe5\xa2\xfd \xda" "-\xda\xfd\xe5Y'\xdd\xb0\x87\xab\xd1\xd7'\xe5\x11x\x1L\x98\x36\x96*\xe2-\n\xb2\x34" "0Q\x96\xf2\x10+~\x1e\x1cJ^\x8e\x38'w\xd5\xbc\x42\xe9w\xe\xc2O\xca\x8e_\xcdK\xc7G" "R_\x7f\xa3\x91\xdeS\xb2\x94\x37n\xd3\xd2m\xc7\xd4\x1aJ\xbb\x12\xddp\xe0I\xf9\x95" "\xf6\x12\xc2@\xc8\xf0\x17\xe6q\xb4z\x85\x9d\x39_@)2\x89\x8e\xcf\x8b\xe3\x8c\xd2\x14\xb0" "\x8\x9a N#\x13\xe1\x31\x35\xbfl\xb\xc2\xa2V\xff\x89\xc8\xc2p\x90V]\xe6_\xe7\x9;\xe7" "\x98\x9eS\x11,\x3(\xb\xc2uPvfR|8z[\xedP\x1f\x1f\xa7i\xcd\x44\x44>5PU\x81\xc9\xa3" "\xc0\x8d/\x8d\xafO\xa3\xf4\xcf\xba\x13W\xd8\xe4\x9f\xf8#\x14\xef:\xba\xd4\xd9wu\xd9" "\x1e\xb4\x8c\xefQ\xc1L\xa3\x1e\xd9\x46\xd9lJ>\xaa\x39\xc5\xc7\xa3\xfc\xd0\x91M\x9b" ";\\\x12u\xbdrO\xa3,\x17\x8\xc2\x1f]\xb2\xba{1-o\xa2\xf3=p\x90\xd3\x31\x96\xbd\x94" "u\xc5\x8bJs\xdb\x13\xdf\xe2\x46T\xa1\xf1\xc7\xb3^\xb5\xe1\xe3\xa3pF\x1a\x97\x9c\n" "\xd5\x62v\xab.Tp\xf0\x65\x88\x39\xfe\xc\xec\x33\x66\x95n\xe9\xe0\xb5rl\xb6\x8d\xb2" "9\x9c\xe1n-W\xf8\xdf\xdbJo^I\xeb\xe2\x8b\xd3\x63\xb9z\x8\x63\x9\xb4\x96JP3\xb6\xd7" "\x82\x35p\xb\x1a\xc4\xfb\x8b!\xe\x64szl\xeaMX\xd4\xcb\xa2\x87\xeb\x65\xdb\x38\xf7" "\x8cZ\xda\x0\xeb\xaa\x35\xb4\xe\x92\xfc\xa8%\xee\xd5\x63R\x16\xcdr\xe9\x3$`hs\xd0" "\xaeH\xec\xc2 hF\x8a\xec\x18\xd6G\xa6\xda\x9d\xe1\x8f\xd0|\x9 \x98,\xd3\x1O\xa4\x46" "\x87\xa5\xae\x36\x5\x86N+\xfe#\xe3V\x1e\xca=\x97VC\x81\xb8\x45\x46\xb0\xad\xd8@\xdb" "O\x92\xc6\x8f\x66\xf5\x33)\xfdU\xbd\x9a\xa7j\xb\xbd\xb2\x90\xf4\xd6\xd2p@n\xdbVI" "NF2\xbaMp\x18\xb!\xe\xdfY6\xc9\x87 \n\xfd|}\xcb\xc0\x36S\x9b\x8e\xa2\x46\x13\x36" "\xc0\x31'd\xb0U}\xcdKV\x15\x91\x31\xa2\xdd\x35-6d\xa4\xed\x34\x3n\xb\xc4\xcf\xc0" "\xff\xdb\xf2\x8c\xb\xd8\xc2\x46\x8f;\xecZJ!y\xb8\x9c\xe0\x11\xc6\x9c\x45\x1f\x80" "\xc3\xbf\xb7\xf\x63\x1d~$\xde|\xab\xd7\x82Kf\x8cv\x86\x37\x94\xc4J\xb7\xcc\x9d\"" "M+'xz4Q\xd0L\xd1\xd7\x61\xa2\x2\x5\xe7%X\x8f\xf3\xf1\x33\x61n\xfd?\x85\x43\xc7\x31" "\xcdg\x18\x31\xd8\x8d\x8c?s\n/\xee:)\xdd\x4wM\x80\xbcK\xa8\x85\xd3`\xf7\x9d\xa2 " "\xf9q\x3\xda\xc#\x2\xf7\xe2\xf3\x8c\xa2\xdb\x9f\xae\xa4\x88Z9t\xb3\xc6]\xd9\x18\xfc" "\x1eh\x12\xe5k\x83\xfe\x8b\xdb\x1c\xbb\xc8\x8b\xfdv\xca\x38/\x10\x41\x16\x82S\xbd" "\xb7\xf0\x62\x35%@\xe1\xd8\x38\x8a,\xd7'E\xe\x8dX8%\xfd=\x18p\xf1\xda\x4\x30/\xd0" "\xc2O\xf0$\x14-(\x9f\\\x88\x83\x8m\xd4\x13M_\"\x87\x94}\x80\xde SObYr\xf3\x18@\xb5" "\xa5:\xf4\xe0\xf7\xe7\xd4\x66\r\xf8\xd0P\xd5\xa7\xd0v\x99^dt\xb9\x84\x9c\xb3\xaa" "\xc2@\xd0\xb5J%h\xbbX\xcb\xc8\xe0xC\xd3U@\xf3\x87\xf8\x8bH6\xea\xf8(\x8f\xb0\x34" "t\xde\xacJ\xdb\x7f\xf6\xb7\xc3\xf1\xa7\x14\xa5\x5:\x84\x35HT\xe5\xc0\xb\x9a\xfe\x9" "_\xdf\\\xcd\xf9\x14\x31\x64[:\x9c\xf0\x13\x93r:w\xc0+\x7\xe\xcc\xd2\x8d\x89{\x9d" "u\xd0\xc3\"\xa9\x92K\x1bo\x8a!\xfe\xc3\x87t\xb5\xf1\x94\xaa\xd0}\x81\xc6\xf3h\xa8" "\xab\xc1,\xce\x9a\xb0`\xc6V\xb5'\xaa\x97\x99\xb3\x63\xf0\x32R\x1d\x10\xbb\xe3\xda" "\x1d\x81\x1e\x30\xfR2\xa7\xef\"\x8d\xd0\x9d\x95n0@\x96\xb6\x3\xb6x\xdc$\x1a\x12\xdd" "hh\"o\xe4\xad\x97qh\x9a\xb9xQ\xe7\xac\xc5\xa2\xcf=A#'\xd8\xf5+i\x8dS\x9c\x11\x1d" "\xe0\xe2VX\xd2\xfb\x86\xa4[\xe9\xeb+\xad\x85\xe0h\x92\x94\xa6\x15\x85n\"\x5\xfa/" "\x94\x96r\xdd\xc3\x87\x13.\xb8T\x13\x61{Ri1L\xe3\xc0\xf3\xa1\x8eT\x81\x7f{\n\xb4" "\xb6%;\xfb\xaaJ\x16qi<\"\no\xf2\xec\xbf\xfc\x9d\\K\x4\x8c\xcd\xf4\x95uAd24\xa8mV" "d\x8c\x2\xb9\xbf+d8#\x85\xbf\x43\xd0\x89\xab\xf1\xae\xaa\\\xfd\x9b\xd9\x46\xc3\xe1" "a\x9c\x7fW\xde\x41\x65\x9f\x88!/\xb3\x9[\x94\xf2\xd6\xd6\xc5\xba\x13\xc5`Q\x9d\xf6" "\x95U\xc9\xb7\x12lo\xf4\\\x61\xba\x46|)\xcd\xf3\xce\xa6\xe9\x10\xaa^\x16\x1aJ\xfa" "\xf6\r\x39%\xd0\x1d\xe9j\xf0\x96\x94\xfdYp7X\x91\xd3Z\xbf\x64)\x8\x9b\x9d\x81i;p" "\xe9\x8c\x18\x1Z\xe9\xcd\x3\xfd\x46{\xde\xa6\xbc\x9\xdc\xe2!a\xed\x97k=\xa2\xa8\xc" "\xf0J\x83\xc5\x3`\xd6\xa2 \x0\"\xc0m\x99\x98\x9a\xda.'\x5\xbe\x9d\xc5\xa6\xce\x32" "\x1\xe2\xd2&\xa0\xed\xaeP.\xf2r\xed\xdb\x88\xcf\x7f\xb3\xf2\x91\x16\xc5Y\xee\xf8" "@^w\x5\x64UE\x2\x85'E\xd3\xd4\x8b\x1a\xd7\xc3M\xeb\xf5\xf1\x90\xfd\x2\xbc\xacyl+" "\xe3\x80\x17ri `K\x19\x84\xec\xb3 D(\x18y\x7f\xa1@\x3\x11\x8d\xf2\x1f\x99\xab\xc9" "\xdeO\xfd\xfd?\xa6\xba\xcc\x45X\xce\x63\xe1\x89\xcd\xb8\x5w[\xf2L\x8fo\xe5\xb6,\x13" "\xde\xbc\x8d\x8\xec\xc6N\x4Y\xd8T\xda}\xe0\xfb\xe7O\xe7&s\xbc\x92\x12T\xf9\xe1\xd8\xb1\x39n\x82\x98\x89\x1a#\xe3\xd4u\xcf" "J\xab\x97\xedyEXx\x9cTN\x84\x9b\x1\xa3\xa1t\xe7\x8f!\xf3~\xcc\x1d\xe2\x41\xad\x32" "{[\xcd\xca\xc1\xea\x99[\x9f\x8\xdex\xa2\x82\xcc\xcb,\xbf\xca|\x0\x98&^\xdd\x8d\xcf" "V\x3Z\xc0\x64nw\x11\x38\xb9S\x18\xa5\xef\xdc ,\x90h:\x93\x61\xbc\xab\xac\x2\x87\x1f" "\x1eg`\x88\x8e\x14`\xbf\xec\x1a\x8e\x9c\x9d\x63\xbavRt\xd4\xf5\x2j\x8b\xb=\xadh\xbd" "\xf9\x11[\xa8\xbb\"\xd0H\xfe\x8b\xaa`\xe9\x86\xf7|&,\x92)\r\xe8\xe4\x66\xf8\xb1\x9a" "P\x1dKZ\xee\x1a\xb3{(\xe4\xd2w\xe1()\xbc\x46\x46Iu\x82\x62\x88PE\xb2\x9\xb1\xfe\xe7" "J\xaf\xe1\x43\xf0,\xe5\xf3\x7fO\xbao\xe6\xb1\x34#'\xe8\x8f\xbc\x1b\xc0\xb4\x93\xb4" "\xe1\xa3&T\x9c\x94\x8bo\xb8\xc4>\x80\xbd\x8c\x10`P\x9b\xf5py\x9c\xd6\x3 \x9aL\xb3" "B\xe\x80\x7f{'b\xe2\x1d\x98\xaa\xb1\xbd\x63\xe8\x81R\x18\xf\r\xb9\xe4\xfd\xe5\xc3" "e\x96\x14\xa1<\x9\xb5\xe1<\xdbx,\xdd^2\xa0\xdd\xf3\x9H,x'\x1c\x62\x97\xeey|n\x19" "\xa5\x8e>P\xe0\x1c\x9fJ\x18I\xbf\xc\xee\xea\xe9\x1f\x64\x8b\xb0`|K}\x10\xa1)7\xea" "\xe4\x9c\"\x99\xdf\x39\xbb\x10\x92\xc6\xdd\xdc\xde\xa4\xa5\x85%k\xa5s\x9b\xc1w\xb4" "\x11\xeb#j\xf3\xebl0\x12\x83}\xc9\xef-\x83\xed'\xf6\xbe\xd0\x66\x97P\x8f\xc3\xad" "\xd6\xa4n\x97\x46\x1a\xffu\x92\x66m\x91\x30JJR_ \x94\xa7\x83$\x0\xa8{!\xb1)b\xf0" "c\xa9*l\x8c\xfe]z\"\xabh\r\xfc\xaf:nL\"\x11\xcf\xe2q\xfdS,P\xd2\xf$y\xc5\xf0\xe4" "qs\xec\x8cr\xda\x8e\xaa\x96>kY\xb0\xeb\xb4\x9cM\x1fW,oC\x19\x65\xb9\xe2!z\xc1\xc2" "L\xd2\xbf\xd8\x14\n\xe1}\xe9\x62\x63\xa6y\x90\xbm\x8b\",n\xbb\x93\xd1\x2\xab\x35" "C\xc5\xc5\x3\xd1\x36w#\xc1\xe0>\x81\x8f\x61[Pf\xb5\x82v[\x6\x3\x86\xbf\xc3\"\xe1" "\xd7\xce\x39z@[P\x13\xe3G\xcb\x13\x42\xd1\x38\xe6\\\xd5\xa9\x3\x39t\xd0>\xc3u_z\xc0" "\x92\xc5\x9f\x32\xca>k\xcfM,\xa9\xda!\x0\x9c\x90[o\xd2\xd2\xd1\xe8\x9b\xc8@\xab\x2" "]\x3PQ.\x3\xcf\xb0\xe9\x38\"\xa4\x9b\x38\xc0\x82\xaf\xc5\x34\x10\xbp\xba \x97\xff" "\x12\x8e\xf\xa5\xb2]gi\xf1\x62\xed\xa8\xae\x80\xa4(\"\xaa\x2[j\xd3m\x1a\x63\xb9R" "\xee\xda\xd0\x8d\xfaSm\xba\xb1v\xb8\xb7\xd4\xdc\xd0\xce\xb8}\xa4i\x16\x64\xe3s\xb5" "\xc2K\xc2\xb2\"\xe7\xe9\xca\xe2\xbb\xc4\xd2\x31\xeb^}\xd8z\x12\x63,[o\x8e\xd0\x31" "7,R\xd2/\xfa\xf2\xc5\xfe\x17\xca\xed\xe0\x1b\x65,\x86\x9$\xec\x85\x61\x44\xef\xa8" "\xd1\x94\xed\x13\xd2.\xd0/!\xe3\x62\x13\xdf\xda\xf0P\x9f\xbc\x96g\x12\x1b\xe4S\xc" "\x9fh\x1a\x1c\xa5\xe7K\xe0\xb6\xc4\xc0\xc8\x63\x96o\x9f-u4tKk\x95X\x7\x8d\xbevr\x9d" "iCqK\xf8m\x8b\x9dL\x11\xf9J\xa6\xf8\xf1\xa3\x66\x5(mb\x95\x7f\xf1\xeb~\xc5\x32\xf3" "\x81\xaa\xe1l\x9a\x1b/\x8e\xaa\xc3(\xb2\xc5\xe4\xf8\xa9R\x8a\x8f$\xc7w&\xb8\xc2\xc" "{.M\xaaM\xc0\xa6\xcd\x90\x1bU\x8b\x7\nWa\x84\x90\xed\xea\xad\x36t\x83\x37;\xf8\x97" "\xc3\x46\rK\xdaM\x88@\x3\xc5\x62s\x87\x36\xab\x1b\xf9\x14\xf2\xcb\xb5\x89\"\xf0P" "\xf6Z\r\xed\x96\xd3\x42\x81\x9c\xac\xe6\x19_L\x93%\x1v\xb5\x14Q\xbe\x3\xde\xf3\xfa" "S\x18\xdb\xde\xbf]\xb5\xe1\x10\x16\xf0\xb2q\xa0\x6\x46u&\xdch\x8e\xcd\xda\x88!\x11" "4H\x8b%\x17#\xa6\x42\xeds\xd6\xa9\x10jwP\xbe\xeb\x3\x8\xe1\rJ\xbc!\x8b\xe2\x30\x8e" "`\x89\xb0Z\x11'\xf8\x1c\xc3\x4\x96#6\xf3\x8b\xa1s\xf8\x5\xe8H\xc9@sn\x16\xfa\x82" "\xac\ni\xac\x37\xfc\xb\xe2M9\xae\xd4\xdb\xf9\xc7\xb0\x8f\xb9\x42\xd9k\x8c\xcb\x39" "a\xf4&v\x1f\x41\xde,\xa4\xe8\xeb\xe0\x39\xec\x64\x1c\x9d,\x19\xc7s\x9a\xf1\xa3O\x1f" "*\xc1X\x80\x88j\xe6Z\x10\xf4\x82\xde\x12\x1aX\r\xc8\x30[;\x8d\xdb\xb8\x34\xf1\xba" "m\x1\x36\x44\\\xf7g\xe\xe0\x1bi\x1\xe3\xda\x11\xdd\xa6u\xb3\x1c\x9\x96/\x17\x83\x45" "\xd2%\xd0\x1c\x91\x6\x99\xd6\xfd\xf0|0\xb7n~:~\xec\x65\x83\x32(>\x5\x8c\xca\x83\xcc" "t\xe2\xafl\xd1\xb5[\xb3\xeb\x88\x9c;\xec\x30\xed\xb\x98\x9a)\x92JR\"\xb9\xb1\x9\x9e" "\xab\x1fu\xda\x7f\xf5\xc6\xa9\xbcT\xcd\x62\\\xe0\xa4\xb1n\x96(\x97I}\xe$\xc0\xbX" "\x2O&:~\x97H\xed\x1eM?'\x3\x5\x95\xa4\xea:\xf3\xb7\xd3\xa7\x6\xd5\x81|\xa8\xfb\xbd" " \xb\x90\xa3\xf0\x35\x6\xeI\xad\xb8\xc\x35Y-A\x9fK\xa3;\x1\xa2/\x87=\x19\xea\"t." "\x8d\x1c\x7fsY*\xc1\x42\xc7\x8e\xde\x65z\xa5\x8c\x1f\x8ev\xce\xeaZ\x3\x8a\xe3\x83" "\xb8\xea\xf9\x90\\\xf5\x7f\xe3!\xda\x19\x5*\xf9\x65\xf2\xf2\x9\x34\xca\x6\x99\xc4" "\xfc\xdf\x1f\x65\ru\xb2\x15\xf5\xa4L\x1e\x5\xf2i\x8bU\xe5\xd0\xc7\x92\x38i\xce\x9b" "h\xc8\xa2\x64\xb5\xad\xc1\x38\xde\xaf\x45\xc2\xa2|s\xeaL\x6\xc3-\xb3\x9f\x39\xe4" "N\xb4\xb7\xef\xb7k\x90\xc4\x19\x19I\xcc\x11\xe1\x95\x9a\xbb\xf2\x17V\xc2\x17\x65" "G\rXa\x8a\xed\xf3\x43\x39=q2\x4\xde\x92pSo\x10\x9\x44h\x1f\xc0:\x84K.\xd8O\x16\x85" "\xf6\x7f\x81\x39J5\xa2\xc6]v\x81K\xf\x35,\xae\xe1&\x80\xe3/\xb\x86\xde\x65$P\x1f" "\xc5\xbbJ\x11\xe\xaaI\xad\xd6\x92\xcb\xa0\xa1\xd4\xf6Kha\xf8\xe8\x8a\xe1N\x13\x9a{\xce" "\xddL\x88>2\xd3[\x5mDv\xdbY\x90\xbc\xd8\xe6s\xfes}\xa6\xe1\xce\xfe+\x9eog\xc1QA!" ":\xa3\xd8\x1c\x13\x3\xfcLC\x15w\xc\x14\xe9\xa1,\x5 \xb5*\xb2L\xd3\x15\xbc\x35\x1e" "\x5\xf1p\xf5,\x8f\x34\x7f\xf9\xcb}.\xddw\xf0\xf4\xcfP\xcf\xfb\x84\x63*sbz\xfb\x4" "\xcf\xdd\xc1\x1btI/)\xca\x61\x41\x86o\x9c\x8t\x1bX\x9e\xa0,U\x4\x7~\xe2\xc6\xef\xd0" "\xb5\xa0\x81J\x85?\xa9V\xdf\x10\xd1\xbe\x66w'C\xe1\xed\x8d`\"\rH\x82k,\xfb\x65\xbf" "5\xfe\xba\xd3\x95O0x\xef\x6\xf3i\x1d\x7\xc5\x61\x84\xbe\x7\xfa\x19)R\xf3\"\xcc\x45" "W\x11\xc0\x9d\xcd\\?\xab~.\xe2\x1a!pOs\x9c\xa1\xa4J\xb7\xfa\x83`oC\xcc\xb6\x18\xca" "r\xa1\x85\x10\x8b\x91kNi\xb9I\x90\n\x65J\x8c\x31\x1d;<\x8f\xe0\x30\xff\xbf\x11\xab" "\xce\x1b\x8a\x86\xbc\x37\x98\x32\xca\x18\xa3j\r\xc9\x61\x36\x1d\xcf\x61\xa5\x96\x37" "\\&J\x8b\x37\xf0i\xc0\x8aP\xfa\x87\x9a\xd2\xfeG*\xbf\xc9\xcc\xe5~\x9b\x14\xe3\x15" "p:\xf3\x9I\x14\xf0\xbdv\xba*\xb4\x46\x94\xe4t\xa9'\xd3\xfd\x9b\xbf[.\xa2\x8f\x34" "\xeb\xb3\x66\xa5\xe\x5\x31\xe9(Z\xc3\xda\xc9{\n{@\xbd;Q\x1aU\x89\xf8\xe2\xf2\xb3" "\x84Q\xf6Z-&\xaaN\xa2K\xe6\x33\xbb\x96\xd8\xfa\xe\x19\x8f\xa2|\xecw\x8b\xa6\x8e\xf2" "\xb3\x9d\x80h\x9c%\xbd\x44\xcd=\xa6\xfd\xd5\x8cz\x8b\"\x5\x37\x9b\xa5\x84\xab\x11" "j~\x18\xd7\x9\xb5^\xec\xcf\xa5\xdd\x0Jr]\x9e\xec\xb5z\xf1!\xe4i^\x8e\xf6\xb5\xc6" "\xf1\x15\xd7\x87\xad\xda\xfd\x64<\x9a\xfe\xd6t{\xef\xbcK\xf6\xeb\x97Tr\xe9\n\x88" "\xda\xd9\x9c\x61\xf\xf4\xa2\x9e\x9f\x10\xbb>1\xfeQr*\xac\x41\xb5\xab\xf2\xdc\x32" "\"\xb1\xb4t\x2\"\x32;\n\x17Z[K\xa0\xa5\x4\x64\xfb\x97\x0\x30}m\xdc_\x89\x8f[\xf3" "\r\xbc\xee\xc0\xef\x18\xa1\x1c\xa7\x95\x99\x3\x7(\xb3/\xfc\xcb\x3\xddr\x96\xc2|\x18" "\xcc\x4\x7r%\xc5\xe7\xaa\xf\x15\xdf\xb8; 4\x4\x96\x14\xf4$\xf3\xfbH5\x99\xd8\xa8" "\n\x1\x7v{\xe7\xa0\xea\x37\xfe\x84\xab\x38\xf5\x86K\x17j\xe2\x97\x11m{\xff\x35\xe" "\xf0\x87\xbb\x19\xea\x66\xb3\x1d*\x82x\x18\x18\xabh\xb3\x46zP\xc0Q\xa3\xfd\x14\x38" "\x1\xe4hD1\xf3%\xf0\xe2\xae@\xc3\x96\x12\xf7\xad\x91\x1a\x35\xad\xec\xce\x6T8\x9d" ";\xcd)\x97\xff\x95\xa3GbA\x1ar\x16\\\x9\x44\x15\x35\x8c\xa9\xba\xfb/3\x84\x7\xbe" "\x1dy\x1ekquuV\xa4MtK\xb5:&_\x18}QV\xda\x61\xd5\x42\x8aS\x99\x64S\xb8\xcd\xf3\x39" "*~\x89\xa3\x1\xd1\xc0\x37\x38\x97U\xe7\xd8\x9a\x80\xe2\x9a\xd7\xa0\xc\x83\xd4\xa2" "K\xfd\"\x86[\x6\x95\xeb\xf7S\x87\x38\x9\x95GD\x98\xcb\xaa\xehC\x8f\x41\xee\xa9]w" "\xf6\x61N(\xc6L\xb0@\x9k\xca\xab\xad\xfd\x9a\x9b\x64" "\xa1p\x0\xf2\xe\x1a\xad\x16\xcf\r\xfb\xcb\xf5\x4\x83\xc2\x8e\x13\x13\xc\xe2\xf4\xe8" "yww\x0\x1f\x2\xa3\xdfT\xbe\n\xfc\x94v.\x8e\x31\x93\xb8\x84\xa3\xed\x95\xce\xda\xa2" "-\x80\x32\xb9\x8a\x80\xe2u\x96\x86\x83\\\xef(\xe5%\x10M\x1a\xa7\xe7\xd0\x85\x4\x1" "\x17l\xb6\x93\x42n@6\x9d\x39*q@\xc0\xa4t\xf\\X\xd7\xe5\x9\x8f\xb2\x1e\xc5\x61%\x36" "2\x1e\xf0WQ\xa5\x13\xeb\x7\xde|\x8b\x9a\x66\x8eJ\xd2\xb3@9\xb8G\xcb%\x93\xc5\xc8" "f\xc7\x19\xa1\x18K\xf3\xf\x97\x9e\x31~b\xfbK\xd6\xe6\xf3\x35\xf2\xf2|K\x8d\xfd\xe9" "\x9fL\x90\xef\x8bu\xe2\x9e@R\xdb\xf\xcd\\\xc7\xb6L\x98T\xc9$c@\xb5\xdeo\xd9\xb6\xd7" "\xcd\x1c\x8b\x8.\x81\xee\x8\xe8\x9<\x14\xdf\xd4\\G\xb\xf7\x87ZtR\xb2_m\x86\xa8\x6" "\xef\x45=`l\xb4o\xa6=\x94V\xf9\x9a\x17\xabm\x98\xa4\xc3+\x7\xb3\xb9o\x10\xfe\xaf" "\xc9\x97\xa1'\x1bT\xabIC\xb\xda\xb5\x87\x1b\xacsOE\xd3\xcc\xa5\x1fRB\x9eS\x93Jv\xf3" "\xc4\x16\x9\xda\x9c\x46m\x89\x35\x1b\xa8\xf8\xb6xmcu\xe3 \xda)\x97\xd6\xc9Q\x8ap" "!\x5\xdbm\x91\xe2\xbc\x9^W,\x9dg\xc\xf1\x9f\x8\x88\xcf\x1c$.\xd2%\xe3\x65;*N\x7\x82" "\xb\x81\x5\x12{\xf0N!\x97\xa5\x7f\xec\xb4\x62\x81\r\xe\xf4\x15\x38\x93\xc6\xff\x92" "\xec\xda\xb4|\xd9\x1b\xdb\x6N\x1a\xa0m\xb6\xd2\x3\xf2\xc8\x9a\x9\x15>\r\x8f\x81)" "J\x89\xbb\x83U\xe0\x15N\xb6\xd8\xc8s\xb0I\xd2\xec\x99\x8c# \xdb\xa6*Gj\xa4#\x5\xa8" "7\xeeGuq\xf\xaa\x43`\x9\xcd\xe4\x89T\xfc\x8\x8f\xb8\x97\xe5\x65\xa5\xdf(\xb5s0\xdd" "\xeb\x14\x97\x13\x8d\xa7S\xa2\x8\x8a\xfa\x90\xf1li\xe\xaa\xb2\xb7\x1e\xe5\xf9T\x90" "\xe5\xc4]./\xf3L\xc0\xec\xcd\x94\xed\x9\x19\x0\x95\xc0\xf2&'%a\xd3I\xad\xf2\xa1\xf5" "\xeb\xe3\xec#\xfbmCC.\n\xcb\x38\xc3\x94\x85\x96\xb4\xbc\xfe\x66\\\x34\x1c\xe0\x6" "\xa1\x97\x9e\x89'4d\x5\xbcy\x1f\x8?\xa4\xa4\xa0\x14\xa7\x8)\xaf\x99\xf5J\xdbt-$\xa1" "\xbf\x81\xa6\xd6)\x86\xdch\xf1\xf2)\xf6\xf6\xd1\xbf\x18\xb4R\x9aT[ \xa8\xe6T\xbf" "A\x17\xb4\x8\xb6\xb8o\xf\x8a^\xe9?!!^\xe6\x9e\xbb\x98\xcbx:\x87\x84\xee;\xefK3\x9d" "\x84\x39\xa3^\xdc\xfe\x98\x9a\xfG'kw#\x13@\x87\xc4LDM\xd0\xd4\xa4\x1c\x62\xc1\x8" "\xe0\xd9^\xad\x8f\xa3\r\x90\xa8\xd8\x7f\x9a\x10\x86\xf3\x11\x83\xe4zTJ\xa9\xc6\xb7" "\xc6\x31\xbc#\xb3\xe4\xdek\xd0R1H\x92o\x18\xfc\xe8\xa7\x84\x1cs\xb4v\xfa\xc1\xf6" "}#\x94\xf4\x65\xe1\xdf%\xa2\xec\x14]\xff\x15\xb8\x31\x95\x30%\x1a\xf1\x81S\xaf\xfc" "\x15Q\xd7\xb3\x81\xcdM\x19\xab\xa0\xb4\x97w\x9b\x42\x2\xb8+\xf4\xac\xbfL\xd2L\x9e" "\x12\xf6\x5\r\xc8\x45\xae\xd8\xb\xed\xf0\xb0\xb2(\x2\xce\x89\x35w\x6@o\xd5\xf2j1" "\xb5l6\x88\x16R\xaa\x34\xd0\xa3\x1f`\xe8\x44P\xd4\x92\x99&\rp\xc9xh\x9c\xec\xab\x19" "o3\xd2 '\x91\x42\xff\x39=0\xac\x8f\x8f\x95\xa2(\x13\x17\xf6L\xfd@*h\xafW1r\xcc\\" "k\xac\xc5M\xfe%\xf4&\x6\xcco\xf7\x7f\x15\xe2\xdd\x42\xe7\xca\x9f\xef\xe4\nY\xe9\xfe" "\x99\xb-\xdePt<\xc2\n\x16\xa0V\xf8\x0\"\xbcm2\xc6\xc9\xf3\x95\x99\xb6iyo\xf4\xef" "\x8c\n),\x15\x8d\xff\x87'D\xea\x1e.\xd2K\xc5\xf8\xeO*9\xe4]/\xca\xd1\xd9\xf3\xaa" "\xed*:\";\x99LU\xdb\xd8|\xe8\xc7\x8n\x88\xa1\xf1\x12tG4\xb3:p}\xf7\xac\xf0_t\xd7" "EEZ\xc8\xd8\x33\x93\x87\n.\xfc!\x19?\xf4\xe3\x10K\x89\xb6\x7furY\xa5\xd3*\x90v0R" "s\x1bT\x9f\xc9\x17\x97J\xf2^\xc3\x33\x66\xad\xea\x18\x9\xb6\xa2ui\xeb\xd0g8\xfb\x89" "\x1e\xe7\x17\x8c\x45\xaa\x46\xc3\x97\x14\xbz\xe4r\x85]\x83p\xfbilH\xe3\xd8\xd1\xf7" "\xc3\xbd\xadN\x0\xbd\xd0\x97\x2\xbc<\x9a-ul4K(ak\xa3I\xfb\x9ey\xd8\xb1\xa1(\x16\x4" "\x81\xc5\x3\xe9\xf8\x88_\xbbo\xfay\x8f\xbf]\xd1\x80\x9b\x4\xc8VF\xe6o\xc\x34o\xd7" "\xd4\x66\xb8>e\xa4\x87\xdc>K\x15\xbf\xd2\x4\xb5s\xa9\xf1\xc6\xc9I\xd3sH:\x15 \xeb" "\xc7\r\xfe\xe0\xa1\xe3\x83\xf0\x61\xd9GQ\xaa\x14\x8f\xdby\xf1\xae\xf2\x12\xf7\xde" "\xfd\xc6\xf4\x1f\x33Hp5X\xf1lE\xfd\xb\x43\x92\xb4\x17\xcf\xc1\xb2\x1d\\N\xd1|Gp\x96" "\xce\xcf\x8e\xe7\x86\x88\xd7\x7N0\x9b\xe9\xb5\xcah\x1a\x10\x98\x15\x8e\\\xdc\x16" "Tu\x9b\xaa\x5\x82\xc7\xc3\x62\xec\xaa\x0\xe5\x1\x91\x13l\xfb\xac\xfc\x10G,\xe3L2" "]u\x9b+\xf2m~\x6\x97\xaf\nu$w\xb2\x9b\r\x9\xec\x31\x95\x8\xff\xe6\x90\xf8\x46\xfc" "\xa2\x9d\x7f\x7f&Vf\xd7W\x9b~\x8f\x1a\xce\x9\x86\x8c\xfd\xc7\xad\x92\xe7\x1a\x9b" "'>\x2\x9b|'\x81\x64\xf4+\x6\x7fI\xc7\xc8\xba:\xc4\xd7\x5\xde\x83\xe8\\\xa2\x11w\xf3" "\x8f_\x1e\x9a\xcao\x90\xbf\x38\xd8_\xae\x32N\x1a.\xb3u\x8d\xe4>\n\x91\r\xb6\xcd:" "yF\xc4\xfe_\xab\xa6\xf2\xf2\x11\xf4/\x10\xa8\xd3\xe1\xf7\xa6\xbcl\xb9){\xa3;\x4v" "7a\x82\xb7\x8b\\\xf5\x88\xfd\xc3ut\xcbo\xe6`\xa6\xd0\xc5O\xb4\x90\x86\xfbT\x86J\xc0" "\x8\xa4\x7fg&3)]`\xce\xd2\xff\x9av\xf8\xaa\xbc\xc4\xc4\x5}\x11\\\xe\xe9GN|\xe6\xaf" "\x8e\\\x9a\xcf\x30\xca\xf8\xd2l\xfd\xa1j^\x9a\xb7\xeb\xb4\n\x9e\xa9\x34\xaa\xeb\xcc" "\x1d\x2\xd1^_\xea\x5\xb\xf3\xdb\xe0\xa3\x9\xa6\xbb\x38s\x96%\x1e\x36'\x15V\xc5\x3" "\xf9\xd1\x99\x8e\xcd\x9c\x9a\xb8\xb6\xe8\x8c~\x1f\x32Yl\xe1\x83\xc3\xe6\xc8q\x9b" "\xcc\x4\x94\xa5r0\xe7\xfa^\xf9\xb7\x85\"\x90\x13\x8f`\"\xf6\xd3\x0N(\xaeQ\xea\xb1" "\x13\xc0\x99\xed\xe4\xabms\xaa\x1f\x8d\xd5\xa4\xff\xbb\x88\xd6\x92\xb0\x17\xe3\x13" "KU\xcb\x41lq\x1>:\x7f\x4\x92\xa7y\xcf,\xd0\x30\x82\xee\x64=%8\xe0\x93\xec\x92\xad" "q\xcc\x99\xa0\xc6\xb2z\xe5\x2=\x97\r\xc1\xa9\x99%\xe5\xebL\xa8\xd5\xd8>\xb1=.\xf8" "}f\x13\xc4M`\xd2\x9f\x8c.\xa6\xb0\xc0\xb2Nxn\n\xea\xd6\xb6\x45\xcb\xb6\xe1\x1c\x96" "\xe2\xd4ls\xde\x38xb5\xd5m\xb6\xbc+xm\x9d\xd8\xe1\xdc<\x8b,.\x82\x8e\xe0\x11\xa1" "\xf8\x16\xda\xe7\x8c\xe7\xfc\xcd\xee!\x2W\xf\xa9\x86\xe8^U\x81\xb1\xa8\xb8\xed\x8d" "k\xd9\x8a\xf\xe4\x8c\x98\xb0\xef\x14\xf1\xd2ML\x82\xbf\x8aG\xb2L|\xab\xc1\xd3}&\xec" "Sz\xabk7Q\xdd\x8f\x1\x81\xac\x8\x1b\xa0\xb1\xfe':\xc1\xe1\x9bP\x8c\x65\xd4\x7\xb9" "\xc6\x61\xd4nd\x1\xa5s\xc7\xad\xe9\xa6\xf6H]U\xda'\x87\xe7\x9f\xe0\x8c\x14?\xd9\xd2" "\xa7\x46\x2O\xa4'<\xea\xff@\xe9\xb6\xc8\xa0\x10Q\xf4\x82\x88[\xb8\xce\x46\xe4\xd2" ":\xeb\x88\xb1\x66/\xa3m\xbf\x41\xfep\x96\x82r9\xf4'\xbe\xef\xc4\xc4N\x14\xe5\x46" "\xefR\xbdMhZ\xb4\xe6\x4\x0\x14\xf1\xa5*^q\xa2U\x6\xf5\xa2\x16\x33\x1\xfa_f\x19\xd2" "eM\xb0:\x90\xc6\x84\xff\xa9{\xbc\xad\x46w^\r\xeb\xea\xf\xb9\x8\xf0\x88\x46\xc5\x9b" "\x95\x14\xe1[\x8cI\xb9S\xe6\x43\xf4Q\xd2K\xf\x15\xbb\x93\x10\xd6r\xe3\xd8\\]~\xcb" "\x4\x39\x8c\xf1w\x8al%\xc6L\x13G\x9\x32\xc8Q\x1dwBw\x1f\xa4\xe^\xbd\xb4\x38T8\x6" "L\x9d\xfb\xb7\x95\xa8\xe0U\x84\x39\xd9p\x94\x86N\xf0\x8c\x82\x9a\x94\xc4\x97\x83" "\x97\xa9\x1\x1b\xc\xcc\xa9\xd4*)\xe4;w\x11\x8a\xec\x94\x84\x91\xbc\xb9\xd4v2\x8f" "\xad\xfe\x5\x82:\xf4\x89Jw\xea\xebXC#\xbf%\x30\xfb\xb5\xa0\r\x30w/\xbf\x97\x8\x19" "\x82\xc1Z1(Rw\r\xab}\x9b\xc1\x9a\xb7JMkvSz\xefj\xc8h&\xce\xbc\xc3\xa7\x7f\xaa\xf4" "#\x8d\xfb\x4\xa0/(\x8a\x63\xc4\xf3\x90\\\x8NL\xd0\xff\x35\r\x1c\xef\xac\xe9+\xe1" "\x95\x91\x8e\xc3\x32\xc8i\xa9\xcd\xa0\x8d;s\xa2!\xce\x99\xaa\xd7Z\xdb\xf1\x95\x9f" "|\x10o\xdd\x98\x14%\xdf\x9c\xc0\xaa<\x15<-\xa6y\xef\x34\x8f\x13P\xc4j\xb7O\x10U7" "\x99\x1f\x0\xe6\x8e\x4\x64\x91^OSp\x7R\xc0\xbrA\x10\xb2\x61mGr\x6\xef\xc4\x17\xec" "#\xf{_\x15\x8f[pn'1\x8c\xdb\x1W\x8\x96\xdc\xdf\xfe\xf0s\xfb\x9b\xca\xcb#\xd4\xba" "\xee\x95\x39\x7f\xe\x98\xe3\x98\x61\xdfG\xa5\xcb\x1!\xac\xc2'\xd5\xd2\xab\x8c\xfe" "\x4\xa5\xde \xa1r\xe1\x14\xec\xa6\x9a=\xfd\xf3\x86\xf0\xa6?~j\x89$\x87M\xe6\x8f\xd4" "\xd2\xe0T\x17\xa5H\xc7T\xec\xd5\x95\x42\xd3]E\xad\xfc\xd2\x96\xf8\x8d\xccR\xa0\x9e" "\xb9\xe7t?\x88\xebs\x18\x66\xac\xddO\xd2\xf2\xee\x4\x13\x61\x42\xe5~\xc2\x93L_o\xcd" "\xa6}'\x1a\x3?\xa1\xd8\x8e\xb7\x94I!o\xcd=-\xe7\x1a\x31.\xdc\xff\xff\x9c\x5`E\xa0" "6\x9f\xf7\x33\x87\x14?\xf5~0m\x99\xac\xdd\xb6\xdc\x30\x8f\xf9\xa5\xb3\x8a\x90\xbd" "\x8bm\x9cz\x80+n\x11\n\xc3\x92\xae\xd8\xd8\xbc\xaf\xa6\x31\\\xfd\xe8\xca\x7\x36\xde" "\xa3\x37\xabV\x91\x1\xb7\x9\x85\xc1?\xd5\x98\x15\xb3\xd2'\xd8\x4\x1$\x17\xcdK\xda" "\x9b\x34\xf8\xf1\n\xc9\xde\xdfM\x8a\xdb\x30\xee\xaf\x3\x9V\xd7G\xf5\x8b\x36%\x1d" "\xf2w\xac\xbb\x19\xe5\xd4\x36\x34\x98:Z\x16^S\x82q\xae\x35#\xc2K_u\x8a\xdd\xa5\x63" "\x5\xff\xfbz\xb0\x62\x15\xe1\xce\x4\x1b\x8{\xb3\xf6x\xf8#\xac\xe8\xe2\xb1\xd0\xbb" "\x90o_@@\x80\x1egk\xe1\xda\xc3j\xc6{\xb9\xf0\xa4\\\x66\x38!m0\x83L\x1o\xbf\x63s\x1a" "\xf9<`\xa1\x46\x92\xbf\xc3\xef\x8e\xf7^\xed<\xac\xdc\x86?a\x9a{\xbd\xce\x44\x1\xcb" "\x1e_L\xc8\x30\x1e\xaf&\x19\x9f\xd3\x17\x1d\x97|7\xda\xde'&\xb7\xf1\x8cv\x8d\xed" "\x89R\xf\xdf)4\x9\xd2\x9\x10q\xb9\xcc\xcb@\nlvT\"5\xcd@\xf9\xe9\x35\xbb\xaa\xda\xc0" "BC\xbb\x42\x34\x30\xe3\xcc\x4%\x97\x94\xd6P\x7f\xdcx\xd2\x34\x92\x80)xji\x82(\xad" ",yql\xb2\xb0\xa2\x9t\xb3ijx\xe9\x96Vo\xf8\xe8\xbc\xd4|\xd7\xc\xac\x9b\x80\xb6\xf5" "\xad\xca\xfe\x8<\xf2\x9a\x41\xa7\xb7\x61\x64\xac\x41\x7f\xdb\x66\xc\xf2\xe6\x4&}" "3!\xabS\x1f\x9c\xb4\x34\\\xc5\x45\xbc\x36\xdc\x34\xe4v\xa9\x84S\xdb\xce\xca\x98\xf7" "ukX\x16\x8f\x9f\xfbWS~\xd8\x37\x1e\x1b\xef\xa7\xb5\x37\xe9\x1c\x1d\x11\x45\xaf\x41" "`\xe5i\x1a\x32\xa2\x1f\xa0\x11Z\x9e\xf7Q\xb1\x63X\xb6Hg`\x1*\xdf$\xed\x30\xf6\x61" "\x3\xb1\x8a/pQ\xc0\x1c\xd1\xa2\xe0NZ\xbcy\xc0\x99X\xb0\x8b\x31Lj\x97\x8a\xcb\x1b" "\x88\x5\x7W}\x2\xd9OwS\xb7\xa1\xf2!\xc7\xe3\xf3\xb2\xa5\xaa\x96\xd5\xf1\x8e\xbf\xf2" "w\x1aU\xed:)-\x8\x9d\x85\x61l5\xf0\xb8\n/{I\x9d\x88\xf2\x0\xdf\x44\xb2\xdar\xe7\x99" "]1\xfe\x38\xac\"@\xee\xda\xd4\x5\x94\x14\x37.e\x9b\xcau\x17\xc4\xcc\xff}\x8a\xf9" "/\x89\x3\x42\xf1\x3\x19\x15o\xf9\xb3<\x8f\xdc\xf6\xf7T\xde\xfb\xc5\x8bt5\xd7\x19" "\"l{\xf9\xbd\xe4\xc6G\xbd\xd3\xb1\xf1\x42\x61\x37\x9b\x43(\xfd\x1b\xfa\xaf/z\x80" "4\xbf\xbf\x45\xf\\_uE\xb\xc1\xa3\x99$N\x8f\xe\xff\xb1Tq\xb\x85\x4o\x19{4z]G\xea\x97" "\xd0\x1ck\x80\xb8\xe1G\x15\x9c\xc2\xb9oc\x17\xd8\xc3\xf4\x65NY(2\x8f\xb8\x44\xc6" "\xae\xbb\xc4\x87%\x7f\xab\xc2\xcfv\xd3_|w\xb7\xee{\xa0\x35\x88\x8d\xc8\xa1\x15q!" "\xb\xa2\xb4l\xc2\x3\x65\x64.?t#\xbd\xfc\xe2\x97\xd0\x83\xaa?2}\x97\x1\xf1O\xa6I\xf8" "v\x93\x1f\x16\x34L\xe8\xc8@\xd4\xe3\x81\xed\xf3\xb8\x15\x34\x88\x87\xfd`|Cs\xd1\x87" "\xeb\x86,\xd4\xbd\x15\xb\x64\x89\xa3q\x8c\n\xcb\xdb<]\xcc\xe9)\xa3\xc8\xd0s\xb7L" "\x82\xdc\xfd\xd7\xac\x31<]\xc3\xa0\xf8\x4?\x8e\xbc\xeb\xa4\x34\xe3yU\x8e\xe8\x8c" "\xf9\xce\x1d\x91\xcaY\x8fL\xda\xa2\x94?\xe7m\x9a\xae\x39\x8\x7f\x86v\x97\x32\xb0" "\x15\x1c*\xec\xcf\x1dZr\x89\x62I\xad\xd5-<\x94\xd3\x16\xea\xc1!\xd1#]\xd6`\xf6\x42" "v|\x14\x8b@\x11\xbc-\x8bW\xd3\xa3\xbb\x65M#\xc7\x64`\xc9\xa7\x82>g\xcc\x6X\xd9\xa5" "\x1eO\xd4\xfe\x31\xf0\x37\xd3u\x3\x90\x11\xadL_\"\x98n\\\xb6=\x2\x36\x31\xb8=\xf8" "\x0\x92\x46\xa5\x88\x19>\xe2\xb5\x62\xff\xe2\xea,'\x13\x94m/G\x9f\xbe\xdc\xea\x97" "\xe1\xa9\x80g\x1b:+\xfc\x8e(uU+>\xb7q\xea\xfv\xdfO\xca\x15\xf!\xe2\xd9\x82\xbb\x1f" ">\x85\xc7z\xe3\x7lsoN \xdd\xf9 \xb7\xd0\xd0\x91\x96\xd5\xf7&\x8b\x83\xb4\xf6Wm\x8" "%\x90\xc6)\xa3t\xe6\xe9\x35\x88p\x90tw\xda-\xb8\x1f\xad\x82\xa4Hz\\\xcfZ\xc1\x86" "*\xbb\xc9\x85\x19\x11\x35t\xa5\xb0h\xbd\xbc\x13\x87\x82\x33\x37\x8a\xd4\xed\xc0!" "\xc1\x9e\xe3\xa1;\xbb\x9$\x8e\xb4\x31\x4^\xed\xd0\x8b\x95\xee\x5\xd5\x11\x6\xb0\xff" "\xc5\x8b\xff\x9c\xa7|\xd2\x63\x8\xc4\xd0?@\x18\x80\x9e\x86\x80\xbc\xd9\r\xf5\x82" "3!\xd6\xadw=\xc1\xf0\x63\xf3{\x82\xfc'\xbeP]\x12Ku\xe5\x92\x41\xed\xc\xff^\xa1\xd8" "\x1d\x45\xe9\xe0\x34\\.m\x99\x15\xb6\x33\x5\xb1\x33\xacz7\xf\x8bm\xd3q\xd5\x7\x1e" "\xb7\"\xcc\x32\xcc-\xa3\xe0\x8b\xb2\x17\xb1Ga\xca\xe8\x1k\xbb\xf5\x65\xf0&\x95^\xeb" "=4$9\xc7\xf4\x7,\x4\xe8kq\x15\xc5$\xcf\x80\"\xed\x1\xe6H\x96\x3\xff\r\x93L\xbbY\xfb" "\xf3,\x89\xcc\xb2\xdf\xf3+RZ\xb2\xb1\xd3\xc8\x1e\x84\xbc\xc3~2N\xfe^\xf5\x80\xdf" "\xe9\xfbMb\x91w\xc7\x82\x5\xe3\xfa\xf0@\xd6\xa3\xc\xb5\xc-\x88\xa0y\xb\xb6-U_5d\x18" "\xf4\xc7]\xfej\xf6N\xc5\x8b\xc9\x5\x42S\xf0\xcb\xc1{\xe6l=-[PYu1\x11\xbdh\xb2\x82\x8ev\x18\x61\x8L\r\xbb\n\xfb\x1d)\x92\x8b\x91\xc\x10" "1\x17\x91tr1\xc4\xa8\x87\xec\xd3\xb9\x92\r\x45=\xee&P4nQ\x0~\xe9\xc2h\xfep\xdfn\xe\xb8\xf4\x12\xa1\xe0txw\xf6#[Qmz\xb6" "\x8b\x2\x9f\x8f\x43i\xec\xe8jw\x1b\x89\xe9\x8b\xbe\xf2\xb4<\xf6\x99\x45\xc0\x1e\xf6" "\xe.4\x9/\xc5\xfb+\x14m\x8c\x1d\xba\x83\xb8r\xbb\xda\x95\x84-\x11\xac\xc7\nU\x1d" "\x8e\x95Q\xce\xa0\x18\xda\xf8\xbf\x32\x92xZ\x9b\xff`l\x1fs\\\xf4:\xbd\xf\x64\x19" "\xcfu\x92\x9e\xfe\x45\xab\x66R\xa6\x31\x45w\x9 \xf7\x39\x81L\x6\xb9k\x15\x91\xfa" "d~\x92\xc5\x63\x3\xaeZ\x82\xa1r\xfc\x9dN\xb9\x36\xeb\xa6$\xd0\x16X\xc\xc9\x8c@\xa9" "\xa7\xba\xa9\xde\xe4\x94g\x15\xab\xfd\xd7\x99\x93V\xb8\xcc\x39\xea\xdc\x0\xf4*\xad" "\xc0\xb1n\x17\x8c.f=\xa2\xf4\x64\xc1\x80\x96\x44\xab\x17\x96\xeb\x82\x90\xf7\x6\x84" "\xa6\x17k\x8\x14\xe6\x89\r\xa6\x94g\xa6?t\xdch~\r\xd0\xf9\xa7\xa1\x84\x85\xd1\xa6" "\x85\x9|2\x84\x81\"\xc7\xa2\x11\xc2\xdar\x84R\x0\xc1\xbe\x63\xfd\n\xf2\xdc\x8a\x10" "\xb5\xc8\x80pM3\x97]\xcc\xfc\xa0P\xf0\xd4Z\xad\x98\x7f\xb7\xfa\x62\x9c\xc2}\xfe\x90" "\xec\xe1\xf5R\xea\xe5\x46\xca\x8b.\xe4}\x9e\x34\x9d\xa3.\xe\xb\x14S\xe6<\xef\xe7" "\x2\"\x34\x99?\x82\xe3\x5n\x4_\xae\xd9W\x12&\x1d\x33){\xcf\xa9\xcf\x11v\x8d\x81\x16" "\xd1\x43\xe6S\xc6O\xe8\x98'\x90\x86G\xc7\xb1\x94@.\xcbH\xa7\x32\xe7@$\xf7J\xac\x33" "\xcf\xf6\xec\x9c\x97\xdf\xab\xaa\xf7\x35\xadVE\xb5\"\x30(h\x8c[\xf8\xba\xdf\x9c\xf6" "Q\x9bo\x8\x7\x63\xfc\xc4\xaa\xab\x8dJb\x95\xe1\xe7\xf7:\x6\xa6\xdb?\xd2\x86\xec\x63" "9(\xa2\xbd\xd3\x31x9\xda\xb9\x8a\x85\x1d\xdf-\x8c^s\\\x8d\xe\xff\x4\x62:\x9c\xb2" "g\x9b\\\xf8\x46.\xed\xfb\xa9\xc3r\xf6J\xf9\xa4\xc8\x0;f\xa8\x15\xf1O\xd7\xcc\xff" "\x14\xad\x1a\x9c\xdd\xd1\xaf\x80\x5\xc5 \xdd\xe0\xa8\xed\xa0\x7\xa4J\xaa\xdb\x82" "\xecR\xb4\xdb\x31\xc3\xd7\xb1%-.\x7f\x80\x46\x1a\xa9G\x9e\x9d\xf2\xdd\x37\x1f\xf1" "\xca\x90\xb0#\x94T\xbc\xd1\xd5\xcbK`\xb2v!\xe7t!\x9b^T\xe\x6\xd8\x63\x13U\xb7\xdd" "& \xbb\x1c\xb6\x43\xd3\x87\xd8\x80MT\xf8\xf7\xaf<\xda\xdc\xe2\xfem\xab<\xed\xa6t" "\xd3\xaf\x4\x35\xd2\x97\x96\xd0\xa4_\r\x9c\x18\xcb\xe6\x41K\x9c\xd5\xe3l\xae>\xbc" "7\xce\x15\xad\\\xaa\x9ch\xcak\x1e&\xe5\xcd*\x92\xc3\xf4/A\x1\xacKi\r\xfe\xc2\x90" "\xb0\xc8i\x9b\x3\xae\x91\x9f\x8eSZ\xd0~\xb6\x9\xc8\xa7\xac\x12\xc6@\xe7,rs\xcf+\xff" "jYs];\x11\xae\x90n\x83\xdb\xea'\xck\x11\xea\x83\x7\x8f\x81\xf\xa0\x46\x3\xa6\xb0" "\xd9rv\xe7\xadw(\xfdN\x99\xeb\x39\x12\x7;\x6vI\x11`\x1\x8b\x0\x8a\xfc\x80m\xbdl\x98" "\x92\x15\xf4n}\x4\xa9\x61V\xf2Y\xa0JMD\xb1\xe9)_G\x1e\x9!\xdf\xc6\x1a\x63\x1e-p\x8c" "1\x87\x17X\x3\xf8\x4\xf6\xfb\x11\x97\x33\xa8Z\xc3Pi>4\xfa\xea\xccK\xbc]\x9\x1c\x38" "\xfa\xb4\x46\xe9\x13\x9f\x62|8R-\xab\x91\x64S?\xaf\xce\x83\xf8\x11\x18_&\x8e\x30" "\xec\x43\xff\x46\xe5k\x0\x43\x95\x8fR\xf1\x44\x3V\xb4I\xc7\x80\xdbyl&\x95\xbe\xfd" "\xfe\xbe\x92\x86\x90\xcc\xe1\xb6\xa5\x30\xb0\x42{N3\x89\x10\r\xc8\x61\xa5\xe\x1d" "\x9e\x4\xbfq\xb4\x9d\x90\x1b\xb\x9d;\xec\xbe\xcc\x33\xef<\x83\xeeyf8|d\x0\x82\x99" "\xac\xde\xb2\xf1\r\x81\x9f\x0\x37\xc5\x6\xbe\xf9\xee\x35\x33\xaf\x88\x6\x14\x33" "\x9d\xe2,\x88\xd4\x16W]T\x5\xe3\xfe\x1f\x39,\xa3\xa1\x88\xcfo!\x18\x45\x15\x12M\xed" "\xc6\xf2/\xb5\x3\x3\x80\x9f\x11\x8b}\xf3\x38HZK\xc8\x7sq?L1k\"\xbe\x1b\x8c\x1c\xb4" "\xa2\x81\x19\x39\x8e\xf2\xdd)\xe8\x9z\xf9\xf8\x34\x15\xa8\xc9K(\x1d_\x81%\xec\xb6" "V\xfa\x9d\xc4\xaf?\xbf\xba\xf6\xf2$\xe7$\x1b\x1d\x62\xe8\x42\xd9\xcf\x1b`\xd2w\xba" "yEA0\x9c&\xa4G\xe9_\xe9\xc4\xa9\xe5Jl\x81\xf8\xdd \x19HF3\xdd\x98\xcb\xa0(\xbblj" "\xe3V\x1d\x3\xeb\xad\xc6\xfbxs.\x1c\xa8\x17\xe1+j\xcf\x46\xe2\x14*\xae/\x88\xc9\xc9" "\xc3\\\xf6\x64\x1e\xba\xffp\x94MX{:\x84\xa8\x9f\xc8\xd6\xafk`\xdc\x96'\xd1\xaf$\xe5" "mS\x19\x8fq\xbc\xe3S\xd3\xdb\xd2nTs\xd6\xc\xa5%K2u`\x0\xaf\x3,\x4\x96\x81\r\x9b\xb7" "\xef\x8e\x83]\xe8\xf1\xa2\xd6y\xa4\xec]\xd8\x63\xa5\xa3\xb5\xd0\x9\xdd\xdb\x9\x64" "\xa5\x13\x88Up\x2\x31\x33\xa9\x94\xb0\x4q\x1\x91|\xba\xde\x92n\x91\xdf\x34\xb0\\" "\xee\x4<\xc5\x85S\xcf\xcf\xcd \xe3\x83\x83\x17J|\xe2{\xe3\x37\x16\x15\x41\xf1\x1b" "\xffk\xa9\xc5\xe7`\xf6\x45\xef\x33\x96=\x94\xdc\xc9\x13\xdf\x0\xae\x32p\\\xfb\xf7" "\xa1\xb3\x95\x35L\xeb\xb0u\xe7v|\xf3O\x88R\xe7\xc1\x99\x90@z\x8e\x96\xee\xf5\x9d" "\"\x1f\xd3=\xccqUM\xa8\xaaG.\xd3i\xd8h\\\xf5x\x0u\xdf@\xf4TDJy\xebNu\x87\x84\xa9" "\x14\xadS\xbbO\xe9U\x9a\x1cz\x89w:\x9c\xa1\x82W\xfeh\xce\x91\xcf\xcb\xb8+N\xd5vl" "\xb4\x65+\xb3\xc6\x45|\x7f\xf6\x9d\xabvMR\x99\x61K\xc0@D\x9\xd5\x6\x8\x8e\x12\xa5" "\xce>\x9c\x7fJ\xa5jN\xc7\xeb\xe6\xa7\x86z\xc\x14\x66\x65S\x1eX\xcd\xcd\x36\x66\xfa" "\x96T\xfa\x9e\x45\x35\xb5\xcf`\x1n\x16\x1fU\xe8\xb1J\xb9\xb2\xa8:W\xac\xdd\xe9\x8e" "\xf2\xb2\xcf \xc2u\xac\xbf\xcf\x44u\xa0\xbc\xcc\xa3\x14\x43\xfe\x32w\xa2@\xd3=\x14" "\xa4S\xb2\x14\x32\xc7\x97<\xa2\x41\x91\x9\xd3\x86\xbar4\x9fJd\x18\x44\xe1\x8f!\x7" "\xec\xbd\xd2\xbe\x63q\xcfTy\xb0!Xe\x7f\x91\x0k\xae\xab\\\xe4\x2\x98\xf0p1\x16\x90" "n\xda\xbd\x18\xd1\xadg\xdd\x82\xc\xcf\x32+'\xd1\x1H\xf5\xae\x31n\xd6\xce!\xaaP\xca" "\x6\xa8\xf0\x9f\xe0\xd3\xe9\xab\xd9\x15\xad\x1L{#\x7f\xa2 \xbc\x17\x97\x8\xc7\xb" "\xad\xcb\x7f\xec\x85\xfQ\xf7\xe9pR\n\xdcL=\xe7\x91K\xd5\xbe\xbc\xa7\xc2\x84\x9%\xb9" "}6Y\ny3\xa4\x43%\xb1h\x99\x9e\x31\xeb\xdf\xe1\x98\x39L\x86Rs\x9d\x9f\x9anT\x14\xc4" "\xe2\r\x63\xb9g#v7U_)3\xe6\xb2\x4\xa3\x41,\xc1\x96\x18\xc\xe5\x81K\x1G\xc2\x88\x5" "i\xc8_\xee\x35\xd7]X\xbb(\xdb\xf2\xd3\xd9\x3\x93\xe1\x36\xaa\x8e\x39\xfd\xe1\x19" "i\"\x92\x2\xba\x61X#\xe2\xdb\xb7\xb4\x89\x12\x97G\xab\xcb\xb1\x1a\x1d\xf0\xc4m\x1b" "b\xc6\xce\x82\x9\xc6\x42r\n\x7f\x45\xe9\xb3n\xd8\xc6/\xc2\x35~\xe3\xf4|\xc2\x95=" "\xbd\xad\xb5\xa3\x1cH\xfd\xb1\x1\xc8\x44\x45\x94\x17\x89\x61\x93\x2\xeX\x96N\x11" "wnX\xe0yu\x1\xa5\xcam\x82+h\xd4\x13\x34\x17\r\xa1\xf5r\xfay\x4\xe2y\xad\xcf\xb8\xec" "\x9b\xcf\xaa\xa5`*\x9b\xfb\xde\xdd\xbd\xad\xdd\xed]%\xdb\xbb(\x98\x8f\xb1N\xc3\xaa" "\xa1\xca\xec\xbb\r\xfc GC\x6w\xcb\x35\x19\xd9\xb\x62\x32\x0\xba?Cq\xfb\x63\xe1\xd4" "H\xe8\x61\xc5\x35\xab\xb5\x86\x82\x1f\x2\x43\xfa\xe9w;\x1c_\xc0\xc3\xe6k\x7nw|\xe2" "L\xc;\xb6\x46\xb1*\xdc\x15\xbf\xc6)S\x16I\x9e\x38\xfd\x94\xdf,\xc1l@\xb2\xd9\xe7" "\xf6\x31\x98\xd5g^\xb0\xca\xb6\x9d~\xe9+\x1b\xfb\x9fj\x87\x33\x97\x8c\xf6\x8ck\xc3" "\xe9\xd4\xf9h\x91\x81\x8b\x8d\x8\xe4,\xad\xa1\xda\xe7\xaeX\xed\x10\xacR\xa1\xf7\x42" "\xbc\xbe\x66\xac!\xa2{\xcc\xd7\xd2KEG\xcb\xa2'\xcd\r\x99\x9d\x88\x38\xd1\x62\xed" "\x5\x2\x8\xb9\xb1%\x18\xcc*\xaa\xb3\xf1sG2\xae\x14Mg\x13\xac\x10 \xfcg\"k\xd0\xec" "#\xb0\xc2{\xab\x90\x8f\x32u\xd8\xea'\xfa\xa4\xe6\xd9Y\xa6\x8b\x15>\x6\x88\xb5\xc7" "\xa8\xd1U\x88nmF\x8e\xf2\xba\xcb\x81\x9\xa6\x9a\xd2\xd6\xd1N\x95Z\xe4\xb5\xd4\xc3" "/\xdfnJ9\xb5<\xcW&\xe9\x86\xd4\x61\x10\x1a\xb1\xc8\xfb\x92\xbcPV\x89tN\xd3^\xc2\xba" "g\xe8\xd9\xe8\x16l\xea}\xc0\xdd\xf6\x10\x66\xfc\xbb\xf0l\xdf\x1f\xc9\x81\x31\x92" "I\xf9\xa5\xec\xc3\x85L\xbc\xa3\x12@\x1\x32L\\CFM\x99L\x1d;-\x1\x1e\x81vE\xbeLAH\x13" "\x19\x16\xbcM\x18P\xf1\x9d\x85K1\x8bu\xa6\xa6\xea.\xf8L/\xf1xI\x1\x5\xcf\x80\xc6" "\x18\xc1\x81O\x11.\xb8\xbf\x6\xae\xcf\x92\x6\x99\x7fMa\xf4\xc9\x9\x11\x9d\xb6\x44" "8\xc3\x7z$(\xbe\xb3\xfa\xe6\xf0w2\xf7\x35\x82y\xfe\xc\xf7\x1e\xe4\x80\xcf\xe4 \x84" "%\xc9#g&EY\xa5\x84\x87`\xbc\xb8\xcc\xf6\xcaq/j\xcaMw$\xba\xe4=k\xe2\xcb\x94\xc0#" "\xe6\x18jB\x4`\x19w\x1c\x88\xa5\xaf\x8e\xb1Yl\x13\xe0(\x4\xc4\xfe\x1b\x1fVUxk\xb6" "\xef\xdbpZ\x2\xff/\x1\x8a\x1e\xe\x35V1\xeb\x84g\xf5`\x1b\xf6(\x17\xdf\xd6W\xb6\x8c" "Z9\x82\x34{\xf6\xe5\x88P\xcf\x96Z!\xef\x86\x83\xe7\xe4\x46\x1f\x10\xb8Zh\xca\x15" "si\x95Y\xf2\xd8\xa8\x9e\r\x8f<\x99\xf6\x19\x99x\xd8Y\xfc\xed\x9e\x61\x42\x98\xc9" "\x7f\xf6n\x17\x41Vn\xc5\xd6[\x9f\xc\x38\xf6\x30[\xbd\x8c\x44\xa3\x9a{\x2\x6\x99\x0" "_l\r\x10u\x98&\xdd\x8f\xef\xd7\xa9\xc7*oEg_\x80\xc\xd6lQ\x85\xfdw\xb4\xcf\x9f\x92" "e\x8cp\x13\x34k\x3\x64\x15$\x9a\x62\x1\x35\x8e\xec\xea\x44\xf0\xfcN\xfcQ\x1\x15\x83" "b\xc9\xd2\xd2\x93}\xea\x8~\xe0\xe\xb1\x15^\x84\xf8\xfc\x16!\xf7$;Z\x7\xaf\x2\xd6" "\xfbm\x96\xe\x9b\x99\x6~T#\\$\x1e\x36Vb\xf6\x44|&\xebm\xe9\r\x7{\xbR\xfe\x18OE\xb1" "#\xf0\x1dQ\xb1\xca\xa7J\xe2\x95\x8d\x9a\xe4\x97\xa8\x9d?\xfb\xb5\xc8\xc7^D+o\xa7" "\xc0\xf9\x89\xf3\x1b?\xc7\xa1\xea\x9b\xa4\x83\x41l\n\x7\xd2;\x82\x6\xe0\x8b\xff\xbe" "=\xd3\xfe\x30\x99_\xa3\xc\xdc\x8a\x4i\xab\x14\xbc\x83[\xc5\xfaky\xb9m\xcb\x80W7\xfe" ";\xeeM2\xee\x4\xf9\n\xbb)\x9a\x34?\xac\x41\xfd$\nRrd\x17\x89=\xc1\x97\xd6\xb6\xc9" "{F\xb9sO\xee[\x8e*!@n\xc5\x86\x89\x92N*e\x1a\x2\xc6\xd7U\x8d\x9c\x87/\xaa\xb7\x42" "\x90\"\x33\x62\xa7q\xfd+\x89?`t\r5\xd1Y\x3h\xd3,\xa7\xeatjz\xa2\x97\xd6\x96\x19\x41\x15\xfa\xe9*Z\xf3o&\xa3\xa7;\xc4\x13H" "\xfcz\xb3\x9\xd3S\x88\xd6u\xec\x61\x18\xf8\xb8\x9f-\x93_OfU\xb4'\x85\xfc\xec#J)\xee" "/\xc0\x1c%\x91\x97\xc2\x1e\x42x\x9b)-H\x0\xf6\xec\x96\xf5\x8+\x8d\x46\x33\xb4(\xa7" "nr\x83\x96N\xd4\x93\xb8v\xfb\xd9\xc8;7\xab\xc5\xf8\xc4\x34\x14\xca*\x6\x93`]\x13" "\xee=a7\xed\xa0+\xd6\xa9\x7\xad\xd1\x65\xa0\xc1\xe2\xc5n\xa5\xc8\xf8\"\xc5\x33\x92" "\xda\xa6_\xc\x85\xddp\x0kF\xfpn\xc5g\x8b\x43\x96(\xb4\xae\\\xb5\xa0\xa3\xf2\x95\xb9" "\xe8\xf6\xe2\x8e\xccgi\xd9\x88\x89\x45W\xaf\x34\x85\xef\x3g\x15\x11\x84\xdb_\xa0" "\xb2~\xee\xb0k\x98\xa1\xb9\x95\xba\xb5\xc4\xc1\x43\x9e\xfe\xc6\xe3\xa7\x14qw\xec" "4V\x84\x33\xf5OW\x9a\x6\xd8\x31I\x9a\x84\"\xcb\x91v\x86\xbdX\xc7\x43\xd6U\xd6\xf1" "`\x7f(\x1d\xfa\x15z\x97\x16_\xba\x9f\x66\xe5\xf\xbd\xe8!\x9b\x41\xc\xa2s4\x19\x8a" "\xe5\xaf \x11\xe3\xe8\xbK\xf\xc2\x84\x37s\xcb\xb5,\xc2\x6\xbd\x94\xd7tw\xb6\xbc<" "4J\xf2\xdb\xb2o\x9\x83\x98\xff\x14{0\xba\xa6*\xef\x99\xfc\xf7\x8f\xfd\x93\xda\xb2" "\xfc\xa2#V\xe6\x1d\x3/\x1c(\xe0\xa6\x9e=\xe0\x84(\xcb\xf9\x15\x8f\xb0 `s\xa8\xf6" "\x8f\x92\xff\x19\xfb[z\x88\x98\xf7\xb6\x9\xe0\x1a\x8c\xb5\x82\xc\x1e\x16l\xe3\x18" "f\x8b\x4g\x14\xc0\x95\xe5\xd2\xde\xb3q}\x13\xcc\xbb\xb8\xf:N\xa7\xe5I\x1d\xe9\xe1" "\x8a\xf6\xa4\xf2o9r\xf5\xf5\xb7x\xa5\x66\xf7\xd0wO\xb4\x8d\xb6<\xe6\xfe\x81\x9f\xd9" "lX\x98\xe7\xb1\xea\xd3*RKp\xd5\x3\xa3\x41\x18\x35,w\xe2`Y}\xc5\x9f\xdb\xb1\xbf\xfc" "\\y\xd5\xe8\xf8G\xad\xa5\xe1\x86\x97\xf\x6\x80\xe7>\x7f\x91\x1c\x7f<\xc4\xcf\xbb" "\xb\x9bt4\x86\xe0\xa3\xeby\x84\xda\x91I\x98>\x1\xce\xe0\x19\xc2\xbc\xa3\xea\xd0i" "\x1e\xe6\x43 >\xae\xcd\xa9\x9c\xb\x90\xda%\xe2\xdaL\xca^kJ\xb2\x9\xd5\x41\xce\x1f" "H\xb4\x88\xd9\xe2\xdc!X\xbc\x18\x98\xbb\x63\xa7\x2\"\xe3\x66\xad\x37\x9fr[\x96\xed" "\xdb+\x90\xe0\xf0\x12\x3\xf6\xd3\xb4\x42\xdcVz\x9f:\xa3G\xe\x44\xd3k\x93\xdf\x89" "\x11&{\xa8|\xec\xe1v\xe0\xca\x7\xcd\xf7]0]\xb4\xc\x1e\xc9\xe5\x65\x1ah\xfc\xa8\x45" "\xa5G\xcbPekP\x88,\xf3\xfbW\x2\x31~\x92\xee\x9p\x8ei\xf5\xaf\xaf\x36\xe[\x9b\xb1" "cw\xa1\x1eT\xb6\xa3\xb9\x95\x8eR\xf0\x16\x4\xb6\xd9\x4\xe0\xff,~\x86X?x\xdeLf\xc8" "`\xa5]\xd3\x93\x1e\xf2L\x15\xc8i]\xb8\x81\x16\xce\x5;\xbfJ\xba\x90\x10\xca\x14\x61" "o\x9b\xc7\x19\x0\x4\xd7\xff\xde\xb7{\xa4\x63\x62\xd2\x5\xfakG\x80\xafnS\xaeZ\xb6" "W\xfd\x33\x61q\xad\x9e\x1a\xb3\xaf\xc4\x97\xac?\x14\xc2\xd4\xf\x64\xf6\xc1\x9d\xf7" "\xff\xe\xe3\xc8TYy\x10\xad^EUL,^F\x8a\x33'\xdbU7>W\xab\x39-\x7\xf*M\xf5\xa6\x66\xe3" "Qy\xc1\x1f\x36l\xa3\x1d\xc0\xe2\xd7U\xd6T(m\\,-\x8e\xce\xc3-\xd8\x8e\x32\x1c\xb2" "E\x92\xd3L\xbd\xb8}5\x97Y\x91\x96\xb3\xd4\x38\x14\xf9\xa3\x3O\xbd\xd3\x1f)\xbb[\"" "\xe5\xdf\x1btE7#\xe2}+\xe\x10\x87\x80%\x91/\xd4\xfcZz.?\x10\x9c\xca\x1b\xf9\xf3y" "\x9d\xaa\x42<\xecn\x2\x95#\xd7M\x15\xec]\xbd\x95\x86Y\xb5\x4\xaa\x92\xb8\x32\x14" "\xca\xf2\xf8\xb8\x99O\xf9\xfd\x1c\xb1]:\xa5\xc1\xb4Z\xc9\x80\x1z\x1c\xbc\x8\xcd\xfc" "0\x8c$*\x92\xda\x45\xdeh\xfc\xe0;\x9b\xa3\xf6\x31Vl\xf3Rk`N\xf5\xf3#\x5\x1\xccGJ" "^6g3\xa1Y$\xb1%\x4\xf5\xac\x46\x37Y3;'\xdf\xf6\x3\x99$R\xc8\xbb\x31\x8fVL\x92\xce" ":*\xfc\xfc\xc5,\x18\x33\xbe\x0\xf4\x9f\x92\xc2\xd0oH\x18\xae\xe2\x33\xa5;\xb6P\x90" "G\x9by\xf5\xf6\xef[^\xcf\x5o\x8e\xc5\x98l\x17\x2(0\x8d(\xad\x5mC}m\xed{\xb6\x86\xf7" "\xa1\xc5\xc0\x19\xdeX\xb7\x8f\xb0\xa8o\x8a\x10k\x8a\xec\xa8\x87]\xa6\xe1s\xfcK*\x13" "J-!#\xeeL\x1a\x1b\x4\xf7\x32\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30" "00000000000000000000000000000000000000000000000000000000\r0000000000000000000000" "000000000000000000000000000000000000000000\r000000000000000000000000000000000000" "0000000000000000000000000000\r00000000000000000000000000000000000000000000000000" "00000000000000\r0000000000000000000000000000000000000000000000000000000000000000" "\r0000000000000000000000000000000000000000000000000000000000000000\r000000000000" "0000000000000000000000000000000000000000000000000000\r00000000000000000000000000" "00000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n021004l_afm_len = 31889; char* n021004l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusRomNo9L-Med" "i\nFullName Nimbus Roman No9 L Medium\nFamilyName Nimbus Roman No9 L\nWeight Bol" "d\nItalicAngle 0.0\nIsFixedPitch false\nUnderlinePosition -100\nUnderlineThickne" "ss 50\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Developme" "nt\nEncodingScheme AdobeStandardEncoding\nFontBBox -168 -341 1000 960\nCapHeight" " 676\nXHeight 461\nDescender -205\nAscender 676\nStartCharMetrics 316\nC 32 ; WX" " 250 ; N space ; B 125 0 125 0 ;\nC 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;\n" "C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;\nC 35 ; WX 500 ; N numbersign ; " "B 4 0 496 700 ;\nC 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;\nC 37 ; WX 1000 ;" " N percent ; B 124 -14 877 692 ;\nC 38 ; WX 833 ; N ampersand ; B 62 -16 787 691" " ;\nC 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ;\nC 40 ; WX 333 ; N parenle" "ft ; B 46 -168 306 694 ;\nC 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;\nC " "42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;\nC 43 ; WX 570 ; N plus ; B 33 0 5" "37 506 ;\nC 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;\nC 45 ; WX 333 ; N hyphe" "n ; B 44 171 287 287 ;\nC 46 ; WX 250 ; N period ; B 41 -13 210 156 ;\nC 47 ; WX" " 278 ; N slash ; B -24 -19 302 691 ;\nC 48 ; WX 500 ; N zero ; B 24 -13 476 688 " ";\nC 49 ; WX 500 ; N one ; B 65 0 442 688 ;\nC 50 ; WX 500 ; N two ; B 17 0 478 " "688 ;\nC 51 ; WX 500 ; N three ; B 16 -14 468 688 ;\nC 52 ; WX 500 ; N four ; B " "19 0 475 688 ;\nC 53 ; WX 500 ; N five ; B 22 -8 470 676 ;\nC 54 ; WX 500 ; N si" "x ; B 28 -13 475 688 ;\nC 55 ; WX 500 ; N seven ; B 17 0 477 676 ;\nC 56 ; WX 50" "0 ; N eight ; B 28 -13 472 688 ;\nC 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;\nC" " 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;\nC 59 ; WX 333 ; N semicolon ; B 82 " "-180 266 472 ;\nC 60 ; WX 570 ; N less ; B 31 -12 539 518 ;\nC 61 ; WX 570 ; N e" "qual ; B 33 107 537 399 ;\nC 62 ; WX 570 ; N greater ; B 31 -12 539 518 ;\nC 63 " "; WX 500 ; N question ; B 57 -13 445 689 ;\nC 64 ; WX 930 ; N at ; B 108 -19 822" " 691 ;\nC 65 ; WX 722 ; N A ; B 9 0 689 690 ;\nC 66 ; WX 667 ; N B ; B 16 0 619 " "676 ;\nC 67 ; WX 722 ; N C ; B 49 -19 687 691 ;\nC 68 ; WX 722 ; N D ; B 14 0 69" "0 676 ;\nC 69 ; WX 667 ; N E ; B 16 0 641 676 ;\nC 70 ; WX 611 ; N F ; B 16 0 58" "3 676 ;\nC 71 ; WX 778 ; N G ; B 37 -19 755 691 ;\nC 72 ; WX 778 ; N H ; B 21 0 " "759 676 ;\nC 73 ; WX 389 ; N I ; B 20 0 370 676 ;\nC 74 ; WX 500 ; N J ; B 3 -96" " 479 676 ;\nC 75 ; WX 778 ; N K ; B 30 0 769 676 ;\nC 76 ; WX 667 ; N L ; B 19 0" " 638 676 ;\nC 77 ; WX 944 ; N M ; B 14 0 921 676 ;\nC 78 ; WX 722 ; N N ; B 16 -" "18 701 676 ;\nC 79 ; WX 778 ; N O ; B 35 -19 743 691 ;\nC 80 ; WX 611 ; N P ; B " "16 0 600 676 ;\nC 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;\nC 82 ; WX 722 ; N R ;" " B 26 0 715 676 ;\nC 83 ; WX 556 ; N S ; B 35 -19 513 692 ;\nC 84 ; WX 667 ; N T" " ; B 31 0 636 676 ;\nC 85 ; WX 722 ; N U ; B 16 -19 701 676 ;\nC 86 ; WX 722 ; N" " V ; B 16 -18 701 676 ;\nC 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;\nC 88 ; WX 72" "2 ; N X ; B 16 0 699 676 ;\nC 89 ; WX 722 ; N Y ; B 15 0 699 676 ;\nC 90 ; WX 66" "7 ; N Z ; B 28 0 634 676 ;\nC 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;\n" "C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;\nC 93 ; WX 333 ; N bracketrigh" "t ; B 32 -149 266 678 ;\nC 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;\nC 9" "5 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\nC 96 ; WX 333 ; N quoteleft ; B " "70 356 254 691 ;\nC 97 ; WX 500 ; N a ; B 25 -14 488 473 ;\nC 98 ; WX 556 ; N b " "; B 17 -14 521 676 ;\nC 99 ; WX 444 ; N c ; B 25 -14 430 473 ;\nC 100 ; WX 556 ;" " N d ; B 25 -14 534 676 ;\nC 101 ; WX 444 ; N e ; B 25 -14 426 473 ;\nC 102 ; WX" " 333 ; N f ; B 14 0 389 691 ;\nC 103 ; WX 500 ; N g ; B 28 -206 483 473 ;\nC 104" " ; WX 556 ; N h ; B 16 0 534 676 ;\nC 105 ; WX 278 ; N i ; B 16 0 255 691 ;\nC 1" "06 ; WX 333 ; N j ; B -57 -203 263 691 ;\nC 107 ; WX 556 ; N k ; B 22 0 543 676 " ";\nC 108 ; WX 278 ; N l ; B 16 0 255 676 ;\nC 109 ; WX 833 ; N m ; B 16 0 814 47" "3 ;\nC 110 ; WX 556 ; N n ; B 21 0 539 473 ;\nC 111 ; WX 500 ; N o ; B 25 -14 47" "6 473 ;\nC 112 ; WX 556 ; N p ; B 19 -205 524 473 ;\nC 113 ; WX 556 ; N q ; B 34" " -205 536 473 ;\nC 114 ; WX 444 ; N r ; B 29 0 434 473 ;\nC 115 ; WX 389 ; N s ;" " B 25 -14 361 473 ;\nC 116 ; WX 333 ; N t ; B 20 -12 332 630 ;\nC 117 ; WX 556 ;" " N u ; B 16 -14 537 461 ;\nC 118 ; WX 500 ; N v ; B 21 -14 485 461 ;\nC 119 ; WX" " 722 ; N w ; B 23 -14 707 461 ;\nC 120 ; WX 500 ; N x ; B 12 0 484 461 ;\nC 121 " "; WX 500 ; N y ; B 16 -205 480 461 ;\nC 122 ; WX 444 ; N z ; B 21 0 420 461 ;\nC" " 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;\nC 124 ; WX 220 ; N bar ; B 66" " -19 154 691 ;\nC 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;\nC 126 ; WX " "520 ; N asciitilde ; B 29 175 491 331 ;\nC 161 ; WX 333 ; N exclamdown ; B 82 -2" "03 252 501 ;\nC 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;\nC 163 ; WX 500 ; N " "sterling ; B 21 -14 477 684 ;\nC 164 ; WX 167 ; N fraction ; B -168 -12 329 688 " ";\nC 165 ; WX 500 ; N yen ; B -64 0 547 676 ;\nC 166 ; WX 500 ; N florin ; B 0 -" "155 498 706 ;\nC 167 ; WX 500 ; N section ; B 57 -132 443 691 ;\nC 168 ; WX 500 " "; N currency ; B -26 61 526 613 ;\nC 169 ; WX 278 ; N quotesingle ; B 75 404 204" " 691 ;\nC 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;\nC 171 ; WX 500 ; N" " guillemotleft ; B 23 36 473 415 ;\nC 172 ; WX 333 ; N guilsinglleft ; B 51 36 3" "05 415 ;\nC 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;\nC 174 ; WX 556 " "; N fi ; B 14 0 536 691 ;\nC 175 ; WX 556 ; N fl ; B 14 0 536 691 ;\nC 177 ; WX " "500 ; N endash ; B 0 181 500 271 ;\nC 178 ; WX 500 ; N dagger ; B 47 -134 453 69" "1 ;\nC 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;\nC 180 ; WX 250 ; N peri" "odcentered ; B 41 248 210 417 ;\nC 182 ; WX 540 ; N paragraph ; B 0 -186 519 676" " ;\nC 183 ; WX 350 ; N bullet ; B 35 198 315 478 ;\nC 184 ; WX 333 ; N quotesing" "lbase ; B 79 -180 263 155 ;\nC 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155" " ;\nC 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;\nC 187 ; WX 500 ; N gu" "illemotright ; B 27 36 477 415 ;\nC 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 15" "6 ;\nC 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;\nC 191 ; WX 500 ; N que" "stiondown ; B 55 -201 443 501 ;\nC 193 ; WX 333 ; N grave ; B 8 528 246 713 ;\nC" " 194 ; WX 333 ; N acute ; B 86 528 324 713 ;\nC 195 ; WX 333 ; N circumflex ; B " "-2 528 335 704 ;\nC 196 ; WX 333 ; N tilde ; B -16 547 349 674 ;\nC 197 ; WX 333" " ; N macron ; B 1 565 331 637 ;\nC 198 ; WX 333 ; N breve ; B 15 528 318 691 ;\n" "C 199 ; WX 333 ; N dotaccent ; B 103 537 232 666 ;\nC 200 ; WX 333 ; N dieresis " "; B -2 537 337 666 ;\nC 202 ; WX 333 ; N ring ; B 60 537 273 750 ;\nC 203 ; WX 3" "33 ; N cedilla ; B 68 -218 294 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B -13 528 " "425 713 ;\nC 206 ; WX 333 ; N ogonek ; B 90 -173 319 44 ;\nC 207 ; WX 333 ; N ca" "ron ; B -2 528 335 704 ;\nC 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;\nC 225" " ; WX 1000 ; N AE ; B 4 0 951 676 ;\nC 227 ; WX 300 ; N ordfeminine ; B -1 397 3" "01 688 ;\nC 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ;\nC 233 ; WX 778 ; N Oslas" "h ; B 35 -74 743 737 ;\nC 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ;\nC 235 ; WX 3" "30 ; N ordmasculine ; B 18 397 312 688 ;\nC 241 ; WX 722 ; N ae ; B 33 -14 693 4" "73 ;\nC 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;\nC 248 ; WX 278 ; N lslash " "; B -22 0 303 676 ;\nC 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ;\nC 250 ; WX " "722 ; N oe ; B 22 -14 696 473 ;\nC 251 ; WX 556 ; N germandbls ; B 19 -12 517 69" "1 ;\nC -1 ; WX 722 ; N Udieresis ; B 16 -19 701 876 ;\nC -1 ; WX 722 ; N Uacute " "; B 16 -19 701 923 ;\nC -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;\nC -1 ; W" "X 667 ; N Tcaron ; B 31 0 636 914 ;\nC -1 ; WX 556 ; N Scaron ; B 35 -19 513 914" " ;\nC -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;\nC -1 ; WX 722 ; N Racute ; B 26" " 0 715 923 ;\nC -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;\nC -1 ; WX 778 ; N O" "tilde ; B 35 -19 743 884 ;\nC -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;\n" "C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;\nC -1 ; WX 722 ; N Uhungaru" "mlaut ; B 16 -19 701 923 ;\nC -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ;\nC -1 ; " "WX 722 ; N Eth ; B 6 0 690 676 ;\nC -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;\nC " "-1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;\nC -1 ; WX 722 ; N Uring ; B 16 -19 70" "1 960 ;\nC -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;\nC -1 ; WX 444 ; N eogon" "ek ; B 25 -173 444 473 ;\nC -1 ; WX 444 ; N edotaccent ; B 25 -14 426 666 ;\nC -" "1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;\nC -1 ; WX 722 ; N Ugrave ; B 16 -19 " "701 923 ;\nC -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ;\nC -1 ; WX 444 ; N eacute " "; B 25 -14 426 713 ;\nC -1 ; WX 444 ; N edieresis ; B 25 -14 426 666 ;\nC -1 ; W" "X 665 ; N dcaron ; B 25 -14 665 691 ;\nC -1 ; WX 444 ; N ccedilla ; B 25 -218 43" "0 473 ;\nC -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;\nC -1 ; WX 444 ; N cacute" " ; B 25 -14 430 713 ;\nC -1 ; WX 500 ; N aogonek ; B 25 -173 500 473 ;\nC -1 ; W" "X 500 ; N aring ; B 25 -14 488 750 ;\nC -1 ; WX 500 ; N atilde ; B 25 -14 488 67" "4 ;\nC -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;\nC -1 ; WX 444 ; N egrave ; B" " 25 -14 426 713 ;\nC -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ;\nC -1 ; WX 500 " "; N aacute ; B 25 -14 488 713 ;\nC -1 ; WX 500 ; N adieresis ; B 25 -14 488 666 " ";\nC -1 ; WX 722 ; N Uogonek ; B 16 -173 701 676 ;\nC -1 ; WX 556 ; N ugrave ; B" " 16 -14 537 713 ;\nC -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ;\nC -1 ; WX 556 " "; N udieresis ; B 16 -14 537 666 ;\nC -1 ; WX 400 ; N tcaron ; B 20 -12 400 691 " ";\nC -1 ; WX 389 ; N scommaaccent ; B 25 -341 361 473 ;\nC -1 ; WX 667 ; N Zcaro" "n ; B 28 0 634 914 ;\nC -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;\nC -1 ;" " WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;\nC -1 ; WX 500 ; N acircumflex ; B " "25 -14 488 704 ;\nC -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 876 ;\nC -1 ; WX 389" " ; N scaron ; B 25 -14 363 704 ;\nC -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;\nC" " -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;\nC -1 ; WX 667 ; N Tcommaaccent ; B" " 31 -341 636 676 ;\nC -1 ; WX 722 ; N Ydieresis ; B 15 0 699 876 ;\nC -1 ; WX 55" "6 ; N thorn ; B 19 -205 524 676 ;\nC -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;\n" "C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;\nC -1 ; WX 778 ; N Oacute ; B 35 -" "19 743 923 ;\nC -1 ; WX 778 ; N Odieresis ; B 35 -19 743 876 ;\nC -1 ; WX 722 ; " "N Ntilde ; B 16 -18 701 884 ;\nC -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;\nC " "-1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;\nC -1 ; WX 667 ; N Lcaron ; B 19 0 6" "38 691 ;\nC -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;\nC -1 ; WX 389 ; N Idotacc" "ent ; B 20 0 370 876 ;\nC -1 ; WX 444 ; N racute ; B 29 0 434 713 ;\nC -1 ; WX 3" "89 ; N Icircumflex ; B 20 0 370 914 ;\nC -1 ; WX 500 ; N ohungarumlaut ; B 25 -1" "4 509 713 ;\nC -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ;\nC -1 ; WX 500 ; N Eu" "ro ; B -36 -24 478 671 ;\nC -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;\nC " "-1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;\nC -1 ; WX 300 ; N twosuperior " "; B 0 275 300 688 ;\nC -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;\nC -1 ;" " WX 389 ; N Igrave ; B 20 0 370 923 ;\nC -1 ; WX 389 ; N Iacute ; B 20 0 370 923" " ;\nC -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;\nC -1 ; WX 389 ; N Iogonek ; B " "20 -173 505 676 ;\nC -1 ; WX 389 ; N Idieresis ; B 20 0 370 876 ;\nC -1 ; WX 778" " ; N Gbreve ; B 37 -19 755 901 ;\nC -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;" "\nC -1 ; WX 778 ; N Kcommaaccent ; B 30 -341 769 676 ;\nC -1 ; WX 500 ; N ograve" " ; B 25 -14 476 713 ;\nC -1 ; WX 556 ; N Scommaaccent ; B 35 -341 513 692 ;\nC -" "1 ; WX 667 ; N Eogonek ; B 16 -173 737 676 ;\nC -1 ; WX 500 ; N oacute ; B 25 -1" "4 476 713 ;\nC -1 ; WX 667 ; N Edotaccent ; B 16 0 641 876 ;\nC -1 ; WX 278 ; N " "iogonek ; B 16 -173 388 691 ;\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 81" "1 ;\nC -1 ; WX 500 ; N odieresis ; B 25 -14 476 666 ;\nC -1 ; WX 556 ; N ntilde " "; B 21 0 539 674 ;\nC -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;\nC -1 ; WX 667 ;" " N Ecaron ; B 16 0 641 914 ;\nC -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;\n" "C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;\nC -1 ; WX 444 ; N rcaron ; B 2" "9 0 434 704 ;\nC -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ;\nC -1 ; WX 667 ; N Ea" "cute ; B 16 0 641 923 ;\nC -1 ; WX 778 ; N Gcommaaccent ; B 37 -341 755 691 ;\nC" " -1 ; WX 722 ; N Rcommaaccent ; B 26 -341 715 676 ;\nC -1 ; WX 667 ; N Edieresis" " ; B 16 0 641 876 ;\nC -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;\nC -1 ; WX 556 " "; N uogonek ; B 16 -173 556 461 ;\nC -1 ; WX 556 ; N umacron ; B 16 -14 537 637 " ";\nC -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;\nC -1 ; WX 396 ; N lcaron ; B 16 " "0 396 691 ;\nC -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;\nC -1 ; WX 722 ; N Ca" "cute ; B 49 -19 687 923 ;\nC -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;\nC -" "1 ; WX 400 ; N degree ; B 57 402 343 688 ;\nC -1 ; WX 722 ; N Aogonek ; B 9 -173" " 822 690 ;\nC -1 ; WX 570 ; N minus ; B 33 209 537 297 ;\nC -1 ; WX 570 ; N mult" "iply ; B 48 16 522 490 ;\nC -1 ; WX 570 ; N divide ; B 33 -31 537 537 ;\nC -1 ; " "WX 722 ; N Aring ; B 9 0 689 948 ;\nC -1 ; WX 1000 ; N trademark ; B 24 271 977 " "676 ;\nC -1 ; WX 444 ; N rcommaaccent ; B 29 -341 434 473 ;\nC -1 ; WX 278 ; N l" "acute ; B 16 0 297 923 ;\nC -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;\nC -1 ;" " WX 722 ; N Atilde ; B 9 0 689 884 ;\nC -1 ; WX 278 ; N icircumflex ; B -36 0 30" "1 704 ;\nC -1 ; WX 278 ; N igrave ; B -26 0 255 713 ;\nC -1 ; WX 556 ; N ncommaa" "ccent ; B 21 -341 539 473 ;\nC -1 ; WX 278 ; N lcommaaccent ; B 16 -341 255 676 " ";\nC -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ;\nC -1 ; WX 750 ; N onehalf ; B" " -7 -12 775 688 ;\nC -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;\nC -1 ; WX " "750 ; N threequarters ; B 23 -12 733 688 ;\nC -1 ; WX 278 ; N iacute ; B 16 0 29" "0 713 ;\nC -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;\nC -1 ; WX 556 ; N kcommaacc" "ent ; B 22 -341 543 676 ;\nC -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;\nC -1 " "; WX 278 ; N imacron ; B -27 0 303 637 ;\nC -1 ; WX 444 ; N emacron ; B 25 -14 4" "26 637 ;\nC -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;\nC -1 ; WX 333 ; N tcom" "maaccent ; B 20 -341 332 630 ;\nC -1 ; WX 500 ; N ydieresis ; B 16 -205 480 666 " ";\nC -1 ; WX 444 ; N zdotaccent ; B 21 0 420 666 ;\nC -1 ; WX 444 ; N zcaron ; B" " 21 0 420 704 ;\nC -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;\nC -1 ; WX 500 ; N " "yacute ; B 16 -205 480 713 ;\nC -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 537 713" " ;\nC -1 ; WX 500 ; N eth ; B 25 -14 476 691 ;\nC -1 ; WX 556 ; N uring ; B 16 -" "14 537 750 ;\nC -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;\nC -1 ; WX 333 " "; N commaaccent ; B 84 -341 249 -40 ;\nC -1 ; WX 747 ; N copyright ; B 26 -19 72" "1 691 ;\nC -1 ; WX 747 ; N registered ; B 26 -19 721 691 ;\nC -1 ; WX 722 ; N Ac" "ircumflex ; B 9 0 689 914 ;\nC -1 ; WX 278 ; N idieresis ; B -36 0 303 666 ;\nC " "-1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;\nC -1 ; WX 612 ; N Delta ; B 6 0 608 " "688 ;\nC -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ;\nC -1 ; WX 549 ; N radica" "l ; B -17 -35 535 916 ;\nC -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ;\nC -1 ; WX 7" "22 ; N Aacute ; B 9 0 689 923 ;\nC -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ;\n" "C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ;\nC -1 ; WX 570 ; N logicalnot " "; B 33 108 537 399 ;\nC -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;\nC -1 ; " "WX 494 ; N partialdiff ; B 16 -20 472 743 ;\nC -1 ; WX 722 ; N Ncommaaccent ; B " "16 -341 701 676 ;\nC -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;\nC -1 ; WX 220 " "; N brokenbar ; B 66 -19 154 691 ;\nC -1 ; WX 667 ; N Lcommaaccent ; B 19 -341 6" "38 676 ;\nC -1 ; WX 722 ; N Adieresis ; B 9 0 689 876 ;\nC -1 ; WX 556 ; N mu ; " "B 33 -206 536 461 ;\nC -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;\nEndCharMetrics" "\nStartKernData\nStartKernPairs 998\nKPX A C -73\nKPX A Ccedilla -77\nKPX A G -6" "8\nKPX A O -68\nKPX A Odieresis -68\nKPX A Q -68\nKPX A T -59\nKPX A U -66\nKPX " "A Uacute -66\nKPX A Ucircumflex -66\nKPX A Udieresis -66\nKPX A Ugrave -66\nKPX " "A V -130\nKPX A W -116\nKPX A Y -74\nKPX A a -5\nKPX A b -22\nKPX A c -35\nKPX A" " ccedilla -43\nKPX A comma 1\nKPX A d -28\nKPX A e -32\nKPX A g -7\nKPX A guille" "motleft -53\nKPX A guilsinglleft -67\nKPX A hyphen -30\nKPX A o -37\nKPX A perio" "d 0\nKPX A q -38\nKPX A quotedblright -76\nKPX A quoteright -108\nKPX A t -27\nK" "PX A u -30\nKPX A v -84\nKPX A w -79\nKPX A y -83\nKPX Aacute C -73\nKPX Aacute " "G -68\nKPX Aacute O -68\nKPX Aacute Q -68\nKPX Aacute T -59\nKPX Aacute U -66\nK" "PX Aacute V -130\nKPX Aacute W -116\nKPX Aacute Y -74\nKPX Aacute a -5\nKPX Aacu" "te b -22\nKPX Aacute c -35\nKPX Aacute comma 1\nKPX Aacute d -28\nKPX Aacute e -" "32\nKPX Aacute g -7\nKPX Aacute guillemotleft -53\nKPX Aacute guilsinglleft -67\n" "KPX Aacute hyphen -30\nKPX Aacute o -37\nKPX Aacute period 0\nKPX Aacute q -38\n" "KPX Aacute quoteright -108\nKPX Aacute t -27\nKPX Aacute u -30\nKPX Aacute v -84" "\nKPX Aacute w -79\nKPX Aacute y -83\nKPX Acircumflex C -73\nKPX Acircumflex G -" "68\nKPX Acircumflex O -68\nKPX Acircumflex Q -68\nKPX Acircumflex T -59\nKPX Aci" "rcumflex U -66\nKPX Acircumflex V -130\nKPX Acircumflex W -116\nKPX Acircumflex " "Y -74\nKPX Acircumflex comma 1\nKPX Acircumflex period 0\nKPX Adieresis C -73\nK" "PX Adieresis G -68\nKPX Adieresis O -68\nKPX Adieresis Q -68\nKPX Adieresis T -5" "9\nKPX Adieresis U -66\nKPX Adieresis V -130\nKPX Adieresis W -116\nKPX Adieresi" "s Y -74\nKPX Adieresis a -5\nKPX Adieresis b -22\nKPX Adieresis c -35\nKPX Adier" "esis comma 1\nKPX Adieresis d -28\nKPX Adieresis g -7\nKPX Adieresis guillemotle" "ft -53\nKPX Adieresis guilsinglleft -67\nKPX Adieresis hyphen -30\nKPX Adieresis" " o -37\nKPX Adieresis period 0\nKPX Adieresis q -38\nKPX Adieresis quotedblright" " -76\nKPX Adieresis quoteright -108\nKPX Adieresis t -27\nKPX Adieresis u -30\nK" "PX Adieresis v -84\nKPX Adieresis w -79\nKPX Adieresis y -83\nKPX Agrave C -73\n" "KPX Agrave G -68\nKPX Agrave O -68\nKPX Agrave Q -68\nKPX Agrave T -59\nKPX Agra" "ve U -66\nKPX Agrave V -130\nKPX Agrave W -116\nKPX Agrave Y -74\nKPX Agrave com" "ma 1\nKPX Agrave period 0\nKPX Aring C -73\nKPX Aring G -68\nKPX Aring O -68\nKP" "X Aring Q -68\nKPX Aring T -59\nKPX Aring U -66\nKPX Aring V -130\nKPX Aring W -" "116\nKPX Aring Y -74\nKPX Aring a -5\nKPX Aring b -22\nKPX Aring c -35\nKPX Arin" "g comma 1\nKPX Aring d -28\nKPX Aring e -32\nKPX Aring g -7\nKPX Aring guillemot" "left -53\nKPX Aring guilsinglleft -67\nKPX Aring hyphen -30\nKPX Aring o -37\nKP" "X Aring period 0\nKPX Aring q -38\nKPX Aring quotedblright -76\nKPX Aring quoter" "ight -108\nKPX Aring t -27\nKPX Aring u -30\nKPX Aring v -84\nKPX Aring w -79\nK" "PX Aring y -83\nKPX Atilde C -73\nKPX Atilde G -68\nKPX Atilde O -68\nKPX Atilde" " Q -68\nKPX Atilde T -59\nKPX Atilde U -66\nKPX Atilde V -130\nKPX Atilde W -116" "\nKPX Atilde Y -74\nKPX Atilde comma 1\nKPX Atilde period 0\nKPX B A -34\nKPX B " "AE -32\nKPX B Aacute -34\nKPX B Acircumflex -34\nKPX B Adieresis -34\nKPX B Arin" "g -34\nKPX B Atilde -34\nKPX B O -12\nKPX B OE -4\nKPX B Oacute -12\nKPX B Ocirc" "umflex -12\nKPX B Odieresis -12\nKPX B Ograve -12\nKPX B Oslash -11\nKPX B V -45" "\nKPX B W -46\nKPX B Y -44\nKPX C A -25\nKPX C AE -22\nKPX C Aacute -25\nKPX C A" "dieresis -25\nKPX C Aring -25\nKPX C H -2\nKPX C K -6\nKPX C O -14\nKPX C Oacute" " -14\nKPX C Odieresis -14\nKPX Ccedilla A -33\nKPX D A -55\nKPX D Aacute -55\nKP" "X D Acircumflex -55\nKPX D Adieresis -55\nKPX D Agrave -55\nKPX D Aring -55\nKPX" " D Atilde -55\nKPX D J -40\nKPX D T -7\nKPX D V -60\nKPX D W -50\nKPX D X -51\nK" "PX D Y -59\nKPX F A -79\nKPX F Aacute -79\nKPX F Acircumflex -79\nKPX F Adieresi" "s -79\nKPX F Agrave -79\nKPX F Aring -79\nKPX F Atilde -79\nKPX F J -42\nKPX F O" " -7\nKPX F Odieresis -7\nKPX F a -50\nKPX F aacute -50\nKPX F adieresis -22\nKPX" " F ae -53\nKPX F aring -50\nKPX F comma -59\nKPX F e -51\nKPX F eacute -51\nKPX " "F hyphen -34\nKPX F i -1\nKPX F j -26\nKPX F o -54\nKPX F oacute -54\nKPX F odie" "resis -24\nKPX F oe -51\nKPX F oslash -53\nKPX F period -60\nKPX F r -7\nKPX F u" " -10\nKPX G A -27\nKPX G AE -24\nKPX G Aacute -27\nKPX G Acircumflex -27\nKPX G " "Adieresis -27\nKPX G Agrave -27\nKPX G Aring -27\nKPX G Atilde -27\nKPX G T -41\n" "KPX G V -33\nKPX G W -35\nKPX G Y -33\nKPX J A -30\nKPX J AE -27\nKPX J Adieresi" "s -30\nKPX J Aring -30\nKPX K C -61\nKPX K G -56\nKPX K O -56\nKPX K OE -46\nKPX" " K Oacute -56\nKPX K Odieresis -56\nKPX K S 13\nKPX K T -2\nKPX K a 6\nKPX K adi" "eresis 6\nKPX K ae 3\nKPX K aring 6\nKPX K e -20\nKPX K hyphen -47\nKPX K o -25\n" "KPX K oacute -25\nKPX K odieresis -25\nKPX K u -18\nKPX K udieresis -18\nKPX K y" " -83\nKPX L A -1\nKPX L AE 1\nKPX L Aacute -1\nKPX L Adieresis -1\nKPX L Aring -" "1\nKPX L C -11\nKPX L Ccedilla -14\nKPX L G -5\nKPX L O -5\nKPX L Oacute -5\nKPX" " L Ocircumflex -5\nKPX L Odieresis -5\nKPX L Ograve -5\nKPX L Otilde -5\nKPX L S" " 2\nKPX L T -74\nKPX L U -29\nKPX L Udieresis -29\nKPX L V -106\nKPX L W -87\nKP" "X L Y -89\nKPX L hyphen 24\nKPX L quotedblright -37\nKPX L quoteright -69\nKPX L" " u -11\nKPX L udieresis -12\nKPX L y -49\nKPX N A -19\nKPX N AE -16\nKPX N Aacut" "e -19\nKPX N Adieresis -19\nKPX N Aring -19\nKPX N C -22\nKPX N Ccedilla -22\nKP" "X N G -16\nKPX N O -15\nKPX N Oacute -15\nKPX N Odieresis -15\nKPX N a -16\nKPX " "N aacute -16\nKPX N adieresis -16\nKPX N ae -18\nKPX N aring -16\nKPX N comma 1\n" "KPX N e -13\nKPX N eacute -13\nKPX N o -16\nKPX N oacute -16\nKPX N odieresis -1" "6\nKPX N oslash -15\nKPX N period 0\nKPX N u -17\nKPX N udieresis -17\nKPX O A -" "55\nKPX O AE -54\nKPX O Aacute -55\nKPX O Adieresis -55\nKPX O Aring -55\nKPX O " "T -9\nKPX O V -60\nKPX O W -54\nKPX O X -51\nKPX O Y -59\nKPX Oacute A -55\nKPX " "Oacute T -9\nKPX Oacute V -60\nKPX Oacute W -54\nKPX Oacute Y -59\nKPX Ocircumfl" "ex T -9\nKPX Ocircumflex V -60\nKPX Ocircumflex Y -59\nKPX Odieresis A -55\nKPX " "Odieresis T -9\nKPX Odieresis V -60\nKPX Odieresis W -54\nKPX Odieresis X -51\nK" "PX Odieresis Y -59\nKPX Ograve T -9\nKPX Ograve V -60\nKPX Ograve Y -59\nKPX Osl" "ash A -52\nKPX Otilde T -9\nKPX Otilde V -60\nKPX Otilde Y -59\nKPX P A -81\nKPX" " P AE -94\nKPX P Aacute -81\nKPX P Adieresis -81\nKPX P Aring -81\nKPX P J -68\n" "KPX P a -19\nKPX P aacute -19\nKPX P adieresis -19\nKPX P ae -22\nKPX P aring -1" "9\nKPX P comma -85\nKPX P e -29\nKPX P eacute -29\nKPX P hyphen -39\nKPX P o -33" "\nKPX P oacute -33\nKPX P odieresis -22\nKPX P oe -30\nKPX P oslash -33\nKPX P p" "eriod -86\nKPX R C -36\nKPX R Ccedilla -37\nKPX R G -30\nKPX R O -29\nKPX R OE -" "22\nKPX R Oacute -29\nKPX R Odieresis -29\nKPX R T -26\nKPX R U -37\nKPX R Udier" "esis -37\nKPX R V -53\nKPX R W -55\nKPX R Y -53\nKPX R a 7\nKPX R aacute 7\nKPX " "R adieresis 7\nKPX R ae 4\nKPX R aring 7\nKPX R e -19\nKPX R eacute -19\nKPX R h" "yphen -30\nKPX R o -24\nKPX R oacute -24\nKPX R odieresis -24\nKPX R oe -21\nKPX" " R u -17\nKPX R uacute -17\nKPX R udieresis -17\nKPX R y -27\nKPX S A -24\nKPX S" " AE -21\nKPX S Aacute -24\nKPX S Adieresis -24\nKPX S Aring -24\nKPX S T -16\nKP" "X S V -9\nKPX S W -10\nKPX S Y -8\nKPX S t -10\nKPX T A -46\nKPX T AE -44\nKPX T" " Aacute -46\nKPX T Acircumflex -46\nKPX T Adieresis -46\nKPX T Agrave -46\nKPX T" " Aring -46\nKPX T Atilde -46\nKPX T C -17\nKPX T G -11\nKPX T J -43\nKPX T O -9\n" "KPX T OE -3\nKPX T Oacute -9\nKPX T Ocircumflex -9\nKPX T Odieresis -9\nKPX T Og" "rave -9\nKPX T Oslash -11\nKPX T Otilde -9\nKPX T S -2\nKPX T V 11\nKPX T W 9\nK" "PX T Y 11\nKPX T a -65\nKPX T ae -69\nKPX T c -88\nKPX T colon -85\nKPX T comma " "-63\nKPX T e -85\nKPX T g -68\nKPX T guillemotleft -99\nKPX T guilsinglleft -113" "\nKPX T hyphen -73\nKPX T i -16\nKPX T j -40\nKPX T o -88\nKPX T oslash -87\nKPX" " T period -64\nKPX T r -61\nKPX T s -59\nKPX T semicolon -85\nKPX T u -89\nKPX T" " v -106\nKPX T w -107\nKPX T y -104\nKPX U A -54\nKPX U AE -52\nKPX U Aacute -54" "\nKPX U Acircumflex -54\nKPX U Adieresis -54\nKPX U Aring -54\nKPX U Atilde -54\n" "KPX U comma -17\nKPX U m -23\nKPX U n -25\nKPX U p -28\nKPX U period -18\nKPX U " "r -29\nKPX Uacute A -54\nKPX Uacute comma -17\nKPX Uacute m -23\nKPX Uacute n -2" "5\nKPX Uacute p -28\nKPX Uacute period -18\nKPX Uacute r -29\nKPX Ucircumflex A " "-54\nKPX Udieresis A -54\nKPX Udieresis b 10\nKPX Udieresis comma -17\nKPX Udier" "esis m -23\nKPX Udieresis n -25\nKPX Udieresis p -28\nKPX Udieresis period -18\n" "KPX Udieresis r -29\nKPX Ugrave A -54\nKPX V A -113\nKPX V AE -113\nKPX V Aacute" " -113\nKPX V Acircumflex -113\nKPX V Adieresis -113\nKPX V Agrave -113\nKPX V Ar" "ing -113\nKPX V Atilde -113\nKPX V C -70\nKPX V G -64\nKPX V O -63\nKPX V Oacute" " -63\nKPX V Ocircumflex -63\nKPX V Odieresis -63\nKPX V Ograve -63\nKPX V Oslash" " -65\nKPX V Otilde -63\nKPX V S -25\nKPX V T 8\nKPX V a -87\nKPX V ae -90\nKPX V" " colon -94\nKPX V comma -94\nKPX V e -86\nKPX V g -86\nKPX V guillemotleft -98\n" "KPX V guilsinglleft -112\nKPX V hyphen -68\nKPX V i -13\nKPX V o -89\nKPX V osla" "sh -87\nKPX V period -95\nKPX V r -60\nKPX V semicolon -94\nKPX V u -58\nKPX V y" " -56\nKPX W A -98\nKPX W AE -102\nKPX W Aacute -98\nKPX W Acircumflex -98\nKPX W" " Adieresis -98\nKPX W Agrave -98\nKPX W Aring -98\nKPX W Atilde -98\nKPX W C -58" "\nKPX W G -52\nKPX W O -51\nKPX W Oacute -51\nKPX W Ocircumflex -51\nKPX W Odier" "esis -51\nKPX W Ograve -51\nKPX W Oslash -50\nKPX W Otilde -51\nKPX W S -24\nKPX" " W T 9\nKPX W a -70\nKPX W ae -73\nKPX W colon -81\nKPX W comma -72\nKPX W e -67" "\nKPX W g -70\nKPX W guillemotleft -79\nKPX W guilsinglleft -93\nKPX W hyphen -4" "9\nKPX W i -12\nKPX W o -70\nKPX W oslash -69\nKPX W period -73\nKPX W r -49\nKP" "X W semicolon -80\nKPX W u -45\nKPX W y -44\nKPX X C -63\nKPX X O -56\nKPX X Odi" "eresis -56\nKPX X Q -57\nKPX X a 0\nKPX X e -27\nKPX X hyphen -43\nKPX X o -32\n" "KPX X u -25\nKPX X y -90\nKPX Y A -64\nKPX Y AE -62\nKPX Y Aacute -64\nKPX Y Aci" "rcumflex -64\nKPX Y Adieresis -64\nKPX Y Agrave -64\nKPX Y Aring -64\nKPX Y Atil" "de -64\nKPX Y C -71\nKPX Y G -65\nKPX Y O -64\nKPX Y Oacute -64\nKPX Y Ocircumfl" "ex -64\nKPX Y Odieresis -64\nKPX Y Ograve -64\nKPX Y Oslash -68\nKPX Y Otilde -6" "4\nKPX Y S -26\nKPX Y T 7\nKPX Y a -83\nKPX Y ae -87\nKPX Y colon -103\nKPX Y co" "mma -80\nKPX Y e -93\nKPX Y g -86\nKPX Y guillemotleft -111\nKPX Y guilsinglleft" " -125\nKPX Y hyphen -87\nKPX Y i -14\nKPX Y o -96\nKPX Y oslash -95\nKPX Y p -72" "\nKPX Y period -81\nKPX Y semicolon -103\nKPX Y u -76\nKPX Y v -78\nKPX Z v -45\n" "KPX Z y -44\nKPX a j -39\nKPX a quoteright -34\nKPX a v -39\nKPX a w -40\nKPX a " "y -44\nKPX aacute v -39\nKPX aacute w -40\nKPX aacute y -44\nKPX adieresis v -39" "\nKPX adieresis w -40\nKPX adieresis y -44\nKPX ae v -34\nKPX ae w -35\nKPX ae y" " -37\nKPX agrave v -39\nKPX agrave w -40\nKPX agrave y -44\nKPX aring v -39\nKPX" " aring w -40\nKPX aring y -44\nKPX b v -39\nKPX b w -40\nKPX b y -42\nKPX c h -1" "7\nKPX c k -18\nKPX comma one -12\nKPX comma quotedblright 9\nKPX comma quoterig" "ht -23\nKPX e quoteright -19\nKPX e t -10\nKPX e v -29\nKPX e w -30\nKPX e x -19" "\nKPX e y -31\nKPX eacute v -29\nKPX eacute w -30\nKPX eacute y -31\nKPX ecircum" "flex v -29\nKPX ecircumflex w -30\nKPX ecircumflex y -31\nKPX eight four 11\nKPX" " eight one -19\nKPX eight seven 0\nKPX f a -17\nKPX f aacute -17\nKPX f adieresi" "s 14\nKPX f ae -21\nKPX f aring -15\nKPX f e -29\nKPX f eacute -29\nKPX f f 12\n" "KPX f i 22\nKPX f j -1\nKPX f l 33\nKPX f o -32\nKPX f oacute -32\nKPX f odieres" "is 11\nKPX f oe -29\nKPX f oslash -31\nKPX f quoteright 18\nKPX f s -8\nKPX f t " "-3\nKPX five four 1\nKPX five one -28\nKPX five seven -9\nKPX four four 13\nKPX " "four one -35\nKPX four seven -16\nKPX g a -15\nKPX g adieresis -15\nKPX g ae -18" "\nKPX g aring -15\nKPX g e -20\nKPX g eacute -20\nKPX g l 0\nKPX g oacute -20\nK" "PX g odieresis -20\nKPX g r 1\nKPX guillemotright A -40\nKPX guillemotright AE -" "46\nKPX guillemotright Aacute -40\nKPX guillemotright Adieresis -40\nKPX guillem" "otright Aring -40\nKPX guillemotright T -100\nKPX guillemotright V -102\nKPX gui" "llemotright W -84\nKPX guillemotright Y -106\nKPX guilsinglright A -54\nKPX guil" "singlright AE -60\nKPX guilsinglright Aacute -54\nKPX guilsinglright Adieresis -" "54\nKPX guilsinglright Aring -54\nKPX guilsinglright T -114\nKPX guilsinglright " "V -116\nKPX guilsinglright W -98\nKPX guilsinglright Y -120\nKPX h quoteright -3" "0\nKPX h y -34\nKPX hyphen A -18\nKPX hyphen AE -24\nKPX hyphen Aacute -18\nKPX " "hyphen Adieresis -18\nKPX hyphen Aring -18\nKPX hyphen T -74\nKPX hyphen V -72\n" "KPX hyphen W -54\nKPX hyphen Y -83\nKPX i T -18\nKPX i j -36\nKPX k a -3\nKPX k " "aacute -3\nKPX k adieresis -3\nKPX k ae -7\nKPX k aring -3\nKPX k comma 0\nKPX k" " e -33\nKPX k eacute -33\nKPX k g -4\nKPX k hyphen -47\nKPX k o -38\nKPX k oacut" "e -38\nKPX k odieresis -38\nKPX k period 0\nKPX k s 5\nKPX k u -5\nKPX k udieres" "is -5\nKPX l v -22\nKPX l y -19\nKPX m p -16\nKPX m v -32\nKPX m w -33\nKPX m y " "-33\nKPX n T -56\nKPX n p -14\nKPX n quoteright -28\nKPX n v -31\nKPX n w -32\nK" "PX n y -32\nKPX nine four 2\nKPX nine one -26\nKPX nine seven 10\nKPX o T -88\nK" "PX o quoteright -27\nKPX o t -10\nKPX o v -42\nKPX o w -38\nKPX o x -29\nKPX o y" " -42\nKPX oacute v -42\nKPX oacute w -38\nKPX oacute y -42\nKPX ocircumflex t -1" "0\nKPX odieresis t -10\nKPX odieresis v -42\nKPX odieresis w -38\nKPX odieresis " "x -29\nKPX odieresis y -42\nKPX ograve v -42\nKPX ograve w -38\nKPX ograve y -42" "\nKPX one comma -16\nKPX one eight -34\nKPX one five -16\nKPX one four -56\nKPX " "one nine -9\nKPX one one -27\nKPX one period -17\nKPX one seven -56\nKPX one six" " -47\nKPX one three -10\nKPX one two -2\nKPX one zero -35\nKPX p t -11\nKPX p y " "-34\nKPX period one -21\nKPX period quotedblright 5\nKPX period quoteright -27\n" "KPX q c -13\nKPX q u -15\nKPX quotedblbase A 19\nKPX quotedblbase AE 20\nKPX quo" "tedblbase T -59\nKPX quotedblbase V -98\nKPX quotedblbase W -75\nKPX quotedblbas" "e Y -73\nKPX quotedblleft A -59\nKPX quotedblleft AE -78\nKPX quotedblleft Aacut" "e -59\nKPX quotedblleft Adieresis -59\nKPX quotedblleft Aring -59\nKPX quotedbll" "eft T 9\nKPX quotedblleft V 15\nKPX quotedblleft W 13\nKPX quotedblleft Y 15\nKP" "X quotedblright A -72\nKPX quotedblright AE -91\nKPX quotedblright Aacute -72\nK" "PX quotedblright Adieresis -72\nKPX quotedblright Aring -72\nKPX quotedblright T" " 4\nKPX quotedblright V 5\nKPX quotedblright W 4\nKPX quotedblright Y 6\nKPX quo" "teleft A -92\nKPX quoteleft AE -111\nKPX quoteleft Aacute -92\nKPX quoteleft Adi" "eresis -92\nKPX quoteleft Aring -92\nKPX quoteleft T -22\nKPX quoteleft V -17\nK" "PX quoteleft W -19\nKPX quoteleft Y -17\nKPX quoteright A -91\nKPX quoteright AE" " -110\nKPX quoteright Aacute -91\nKPX quoteright Adieresis -91\nKPX quoteright A" "ring -91\nKPX quoteright comma -34\nKPX quoteright d -31\nKPX quoteright o -34\n" "KPX quoteright period -35\nKPX quoteright r -26\nKPX quoteright s -17\nKPX quote" "right t -19\nKPX quoteright v -25\nKPX quoteright w -23\nKPX quoteright y -22\nK" "PX r a -6\nKPX r aacute -6\nKPX r acircumflex -6\nKPX r adieresis -6\nKPX r ae -" "8\nKPX r agrave -6\nKPX r aring -6\nKPX r c -15\nKPX r ccedilla -10\nKPX r colon" " -16\nKPX r comma -67\nKPX r d -13\nKPX r e -11\nKPX r eacute -11\nKPX r ecircum" "flex -11\nKPX r egrave -11\nKPX r f 11\nKPX r g -5\nKPX r h -15\nKPX r hyphen -1" "8\nKPX r i 6\nKPX r j -12\nKPX r k -15\nKPX r l -14\nKPX r m 6\nKPX r n 4\nKPX r" " o -14\nKPX r oacute -14\nKPX r ocircumflex -14\nKPX r odieresis -14\nKPX r oe -" "12\nKPX r ograve -14\nKPX r oslash -14\nKPX r p 4\nKPX r period -68\nKPX r q -15" "\nKPX r quoteright -8\nKPX r r 0\nKPX r s 0\nKPX r semicolon -16\nKPX r t 9\nKPX" " r u 9\nKPX r v 8\nKPX r w 7\nKPX r x 11\nKPX r y 9\nKPX r z -1\nKPX s quoterigh" "t -17\nKPX s t -7\nKPX seven colon -64\nKPX seven comma -57\nKPX seven eight -18" "\nKPX seven five -34\nKPX seven four -54\nKPX seven one -25\nKPX seven period -5" "8\nKPX seven seven -6\nKPX seven six -37\nKPX seven three -20\nKPX seven two -21" "\nKPX six four 13\nKPX six one -43\nKPX six seven -7\nKPX t S 11\nKPX t a 11\nKP" "X t aacute 11\nKPX t adieresis 11\nKPX t ae 7\nKPX t aring 11\nKPX t colon -12\n" "KPX t e -1\nKPX t eacute -1\nKPX t h -4\nKPX t o -4\nKPX t oacute -4\nKPX t odie" "resis -4\nKPX t quoteright -31\nKPX t semicolon -12\nKPX three four 9\nKPX three" " one -33\nKPX three seven -15\nKPX two four 14\nKPX two one -29\nKPX two seven -" "7\nKPX u quoteright -25\nKPX v a -23\nKPX v aacute -23\nKPX v acircumflex -23\nK" "PX v adieresis -23\nKPX v ae -25\nKPX v agrave -23\nKPX v aring -23\nKPX v atild" "e -23\nKPX v c -40\nKPX v colon -23\nKPX v comma -56\nKPX v e -35\nKPX v eacute " "-35\nKPX v ecircumflex -35\nKPX v egrave -35\nKPX v g -22\nKPX v hyphen -27\nKPX" " v l -16\nKPX v o -40\nKPX v oacute -40\nKPX v odieresis -40\nKPX v ograve -40\n" "KPX v oslash -39\nKPX v period -57\nKPX v s -16\nKPX v semicolon -23\nKPX w a -2" "3\nKPX w aacute -23\nKPX w acircumflex -23\nKPX w adieresis -23\nKPX w ae -25\nK" "PX w agrave -23\nKPX w aring -23\nKPX w atilde -23\nKPX w c -36\nKPX w colon -23" "\nKPX w comma -50\nKPX w e -33\nKPX w eacute -33\nKPX w ecircumflex -33\nKPX w e" "grave -33\nKPX w g -22\nKPX w hyphen -23\nKPX w l -16\nKPX w o -36\nKPX w oacute" " -36\nKPX w odieresis -36\nKPX w ograve -36\nKPX w oslash -35\nKPX w period -51\n" "KPX w s -16\nKPX w semicolon -23\nKPX x a -2\nKPX x c -30\nKPX x e -27\nKPX x ea" "cute -27\nKPX x o -30\nKPX x q -32\nKPX y a -32\nKPX y aacute -32\nKPX y acircum" "flex -32\nKPX y adieresis -32\nKPX y ae -34\nKPX y agrave -32\nKPX y aring -32\n" "KPX y atilde -32\nKPX y c -42\nKPX y colon -28\nKPX y comma -56\nKPX y e -40\nKP" "X y eacute -40\nKPX y ecircumflex -40\nKPX y egrave -40\nKPX y g -31\nKPX y hyph" "en -29\nKPX y l -19\nKPX y o -42\nKPX y oacute -42\nKPX y odieresis -42\nKPX y o" "grave -42\nKPX y oslash -41\nKPX y period -57\nKPX y s -24\nKPX y semicolon -28\n" "KPX zero four 11\nKPX zero one -31\nKPX zero seven 7\nEndKernPairs\nEndKernData\n" "EndFontMetrics\n" ; int n021004l_pfb_len = 44729; char* n021004l_pfb = "\x80\x1i\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-Medi 1.05\n%%CreationDate: We" "d Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developmen" "t\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPY" "ING (GNU General Public License) for license conditions.\n% As a special excepti" "on, permission is granted to include this font\n% program in a Postscript or PDF" " file that consists of a document that\n% contains text to be displayed or print" "ed using this font, regardless\n% of the conditions or license applying to the d" "ocument itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) rea" "donly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See " "the file COPYING (GNU General Public License) for license conditions. As a speci" "al exception, permission is granted to include this font program in a Postscript" " or PDF file that consists of a document that contains text to be displayed or p" "rinted using this font, regardless of the conditions or license applying to the " "document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by " "(URW)++ Design & Development) readonly def\n/FullName (Nimbus Roman No9 L Medium" ") readonly def\n/FamilyName (Nimbus Roman No9 L) readonly def\n/Weight (Bold) re" "adonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -1" "00 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusRomNo9L-M" "edi def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-168 -341 1000 960} readonly" " def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/" "Encoding StandardEncoding def\n/UniqueID 5020933 def\ncurrentdict end\ncurrentfi" "le eexec\r\x80\x2(\xa6\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3" "[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r" "\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff" "++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93" "\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81" "nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff" "\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>m\xb1\x7f\xae\x18\x99$" "\x3Jin\xf2`\x15\xa8\xe3h\xa7\x91\x66$:Y\xba<\x9c \xd7\x5\xb1\x8c\xb8\xef\x7kx\\M" "\xa7 y\x92~\x1c\xfe\xb1r0\xd5\xe8g\x1eZb \x8d\xf9\xcc%\x66%;\xdbk\xd6\x81\xc6\xb9" "\xbGTN}fR\x1c\xf1\xb4\xdc\xda\xe1z\x9a\x87\xbd\xeb\x82\x87\x97\x9bO\x1e\x9l\xd3\xbc" "\xb8\x32\xed_\xb6\xc9\xf1\x91\x86\xba\xcd\x9f\x9c\xf2\x1f\xdb\x16\x0\xbd\xac\x1\xfb" "\xba\x1bQ)@dS\x12X%P\x13\x64\xa9@\xae\xcb\x65\x8bY\xdb\x81\x12~\xcd\xd5\x39\xcc+" "\x1\xbf\x32\xe3\x98\x18\xc6\xd6\x81wA-\x9b\"\x88\xa4\xcd\xa1\x99\xce\x15\x15\xfa" "\xbdnL\xb3Z\xf8\xc\xc5\x92\xd1h\xed\x81\xa1\x41\x81\xab\x2\xbaI\x18\xed\xf2\x66W" "\x94#\x14^\xcbg\x12\xb7\x30w\xc3\x34\x89\x81\x94\xf6\xb7\xf8=\xf4\x1dl\xd3]I\x10" "\xfd\xc6\"\xd3m\xa6\x8b\xc1\x14^8\xda&\x9b\x88\x93\x9c\x31y\xec\xb4)\"\xfc\x81\x8" "\x18ns\xe3m\x10u\xc3\x34/\x88\xa9\xb3\xbd\xb6\x8\x84\xb8\x32\x97\xef\xff\x61\x98" "\xc5\xb\xd6\x1a\xb4\xb8%\x8b\x1arO\x7f\xc8l\xdc\xb1G\xc6\xea\xc2@\xcd\xf6\xb3\xdc" "a\xfd\xd2\xe4o\xa7\x0 <]\xbb\x30\x64\xc4Q\xb4\x12\xbc\xea\xca\xd0\xbe\xde(zOhY\xb" "y\x93\xb7\xfa\xdc\xf3\xfd\xcbx]\x98?C\xe5\x0~\xe6~N\x97=9\xc4\x8f\xf8/w\x2\x63\xd3" "\xf1\xf0\x19\xe7g\"\x9I\xc5\x0\xb9\x10W\x83g\xb5\xc3\x92\xc4\x99\x41\x65v\x5\xe3" "sj1\xb5\xb2\xe9\x13\x38-\xec\x85\x92\xdekv\xfap\xb8\x8d\x89U\x1c\xb9Xgt\xcb\x97\x64" "\x18W\x84\xce\xcd\xbe\x33\xff\x19%\x1a\x4_\xc2\xe5Q\xccqC\x10\x1f\x36\x43W1\x91\x91" "\xf2\x1e\x31\xc5\x13\xb\xf9\xef\x34/hVv\xb4\x2\xf8;\x5\x88\x11\xdbr\xc\x80,\xe3\x84" "\x1b\xac\x9fI\x82K\x8\xf7\xa6Sg\x1b\xcK\x80\xa7\xf8\xd2!\x14\xdb\xa2J\xccV;q#\xd8" "\xb1z\x14l\xd6\xbc\xbf\xd2\xdd\x10\xad\x37\xd8\xa9'N5^\x17\xbc\xf\xbf\xce\x8d\xe1" "\xfc\xc5\xaf\x63\x8e\x4\x39\xc4\xfa\xad\x6\xe0\x98\x37S\xbbW\xb0\x4.\xb3\xa9\xe4" "\xf8\x1d:d\xd7\x61\xe4\x9b\x16\xa8S\xb3\xe1\xd2s\x1d\x3\xa7\x96_)\xd3}`Y\xeeY[\x83" "\xc6\x1e\xec\xa5\x85\x3\xf\xfe\xce\xaf\xb1\xec>jf7\xfd\xd2\x8e\x97y\xf\xf0\x1\xbb" "\x16\x30\x38)\xe5\xaf!HT\xf3$\x1\xc8\x90\xb5\xccP}\xe5\x64o\xcf\xfb\x1d\x1e\x5\xe7" "4\xa5\xbf\x0\xc3\x62\x8c\xae\xa5\x8aO:)\xe9u\xac\x19\x42\x8c\x33\xfb.\xc0u\x5v\xf3" "b\xe5\xff\x66\x33\x17\xc7$K5T\x1\x88\x1d/\x85\xaa\x8e#\x5\xcb\xff\xb9\xab\xb0\xa3" "\xd1\x89\xb6\xe1\x1cRn\xc2\xd6\xf4m\xf3\x62\xcaw\x1c\xc6\x92\xc9\x37V\x81\x16\xb4" "\x7f\x82\x95\x4?-\xb2\x86\xfa-\xe5\xa0\x14\x1e\xbd\x34O\x16\xb0\xc8\xf4\x9c\x12\x44" "N\xa6^\xe5\x65\xd1\x15\x2t\x8a\x30.\xc4\xd7\xbatm\x94\x87\x9b\x1c\xdd\x89\xd4O\x9b" "\xb9\x46\x44\xc3\xe1\xa7T\x4\xd8\xf2\x8d\xa3)\xd4G;,\x95G`\xe6\x9ej\xa1\xa9\x8c:" "\xb8\xb6z\x9d\xa4:\xb3\x65\xc8\x9d\xfb\xa9`\xcd\xb5\xed\x61+1\xd6S\x96\x2:H\xed\xbf" "\x10\x81\xb1\x17\x9b\xcb\x8e\xf8\xef\xf1\x85\xf7l\x92\xc3\xc8IN\x8b\x61\xa0\xe6L" "0\x96\xc7\x7fT\xe7V*\x9e\xa6\xfe\x9d\x8d\xca\xf1\xcc\xa1\x94\xcd\x43m\xde\x81-\x7" "\xf5\x81\x90L\x7fO\xc3V\x8eIGLw\xbd\x85?qv'\x8a\x87g\xf2\xa0;kS\x19\xd5\x7g\xa2\n" "\xf4$\xd1iy\x18\xb3\xce\x87\xc0\xa0:\xc2\x8f\n\xb4\xd8\xcb)H\xd5\xabV\xf2JH\x5\xea" "\x9\x16\xb2\x33$)\xc9\x66\x1a\x9a\xa2(BWH\x18\xd8\xe2\xe3\x30\x62\x1b\x16,\xd2\xac" "W\xc6.\xce\xf6\x8a*:Q\xc6\x41\xd6\x5\x1eG\xeb\xe7\x92\xbb\xb\xf7\x9f\x15\xad\n\x61" "=\xda\xc@V\xe4\xe9\x12\xcf\xfd\x92\x38`}\xa3t\xf8\x12j\xe3V\x89\xed>\x87%\xa8s\xd7" "\xbd\x1e\xcf\x17Z\xe3:\xc8\xc1\xb2\xd7\x41\xdc\x9d\xc3\xf7oEz\xe5\x37\xf\xdc\xf8" "5Z\xbb\xa2!\xd1WAZ\xcb\xb8\x66\xf3\x14\x8a\xe2*M\xbe\xc6\xe1\xe8\xa7\x15\x92\xb4" "!g\xb3\xe3\xe3\xa2\"\x18\xa7r\x8\xa3jGX\x6\x88\x35K\xbm\xe1\xb9\xfe\x91\xfb\xa8\xec" "\xd0^\xd2\"\xb~Y\x1c\x61u\xca\x94\xb2[\x88\xb6\xa8Yl\xf1\x1\xf5@\xfd\x13\xf0\x35" "\xf\x9a\x97\x8e\xecP\xad\xc2\xc7j\x9c\x89\xef\xd8\xab<\xf6<\x95q\xad\x12oJ{\xd8\xca" "\x1d\x92\x62\x1b)\x9f\xc6R\xc7\x83\x14LT CH)\xd4\xc\x61\xc9\x63\x44\xfc\xc4@\x85" "\x5\xdfN\xf7o\xfdG\x1d\xc4}\xf0\xf9\xa1\x11!\xf9>\xfe&/\x89\x8c\xf3+\xaf$\x18\xe0" "\xc3\xb2\xf1\xb5m\xa0\xf7\xcf\xe1\xc6\x9%\xc5~K\x82U\xb9 <\xd2Q\xcd\x81\xcb\x8a\xfc" "\xe3\xf5&\xd8\xf3(\xa8\xf\x33\xbc\x43\xfbQ{.\xcd\xc1o\xb8\x64\xa1\xb1\xca\x36\xb0" "V\xa2|\x1\xd6\xa7\xf6U@\x90\x64\xec\x92,\xb5x\x1dp\xd9\x8e\x81\x92\xbe\xc6|\x9f\xbb" "\xa6]\xe2\xbc\x84K!sf\x13\xe0\xdf\xa6\xf9\x1\xda\x62q3\xecg\xce\xed\x63w\xa3/m]\x10" "\xf8\xd4\x1b\x15__\xb}\xaf\xfc\x1\xfa;\xe0T\xa7\xd9\x98\xc0\xf6\x91\xff\xc0\xee\x45" "\x17\x61(\x7f-z|\x8\x44\xb6\xdc\x10U]'\x83\x66k\xb5\x17\x8a\xc4\x61\x61o\x16i\x9c" "\xe1\x1d\xd5\x44l\\\x18\x2{q\xbd\xff\xd0\x39\x92\x64t3\xe5\x85\xce\x31vd\x9b\x1a" "Ly_6\x95\x30\xc1\x99\x45\x3\x46\xad\xeb\xef\x1e\xd2\x17Q\x10\x91:\x8e\x8/R\x11\xf5" "s@\xa4\x61\xa7\x90\xe8\xa8@N\x2\x45\xc9\x32#\x11xe\x10\x63K]\xa2\xe1\xbc`\xa9\xa7" "#\x1\xf1\x39\x46\xbb\xd6\x9@5?\xb3\x9d\x84\xc6ueGU\x8b\xd1\xa6}\xf\xee\xc9\xc6\xf6" "\x2>C\xb4>\xe2w(\xe6G\x2\x3\x8c\xed\xa4\xc7\xb9\xe7\xaa\x3l\xa3\x10Z`\xb9\xe8\xd0" "\xd4\x5\x2x\x15\x1b\x42\xb6\xc3\x64n&\xa5\x88\x66\xd9\xba\xf5-\x1\x32\x12\xb9q\xc8" "g\xe\xb6Vxc\xf9?Xi\x8a\xb2\xa4\xe7\x31\x9bmG\xf5\xa0\xb1\xd5\x18\xf'k\xbf\xb6^w\xf5" "\xca\x65\xeb\xcf\x15\xcah\xd7U\xc3\x8a\xd2\x96's\xac\xac\x8f\x8\x8c\xeT\x1\xc6'\xf5" "\xe7v\xcf\x1Z\x90\xa6\xad=\xde\x8\xf4.\x9Po\xac\xa1:\xad\x66\xefmk\xdcQ\x10\xca\xab" "J\xddx\x96,\xfc<\xa0Y\xa7\x8c\x34\xc9j\x10\xc8X':?\x94\xa9%\x1a\xfb\x81P\xfe\xac" "\r]F\xb0\x14*\x11}\xa3\x96.\x84r\x91\x38\x12\xf2\x34\x9c\x91\xef='\xddq\xfb\xe1p" ":\x1c\xdc\xdcV\x8@\xab\xe1h0\x10\x88\x99l\xad\x88\x87\xf7\xe2\x37\xe0@\x96\x13\xed" "D\x94!\xe5\x32\xc6`L\x5\x9c\xe0\x17\x8c\x1b\xdb\xed\xf\x31\xfc\n\xd7\x35\x88\xdd" "\xc6\x63\xe2\xad.k\xb7\xb2\x94\x19\x37j\x9e\xac{\x88q\x9a\xb3\x8e>\x3LRD\x82\xdf\x1b\xe1\x81" "\n\xe5\xad\x86\x46\x91\x9f+\x1d\xf3\xaf\x66\x63\xd8(3\x82\xb\xdd\xa7\x82y\x96\xc7" "\x80\xb5\xb9\xf2\xbc\x94(\xad\xb1\x85\x8e\xcd\xdbz\xec\x66\xa6\x63\xed~\xfc\xb6V" "-\xaf\x80\xc8\x18`{\x1b\xac\xbfO\xd5S\x11\xe4\xb7\xc\xael\x8cv\r<_\xdb\xe7\x83\xdb" "\xb5\xd3\xc9\xf7\xe8\xf6\x19\xac\x65\x8f\x7&\x1a\x66\xc3\x11q\xf6H8\xe5\xf2\x87P" "\x11\xfb\xae\x39\xe0{Pb\xa7\xa4\xfe\x96\xfc\xcd\x5M\xa4\x17\xa7#\xa3\xff\x1c\xec" "e\xd4\x98\x17\xb9\x8a\xcc.\x93\xb1U\x1eu\r\xeb\xfc\x63=\x13\"\xf7KM\xc5\x81\xd1\xc0" "]{\x91\x38^\xf5\x82v\xbb\x1dZ\x1dxs`\x1c\x17R\xce\x8\xce\x88 T\xe0\xeb\x17\x1\x19" "\xe9\xf\xf7\xc8\x46\x15\xe3j\xb2\xebj*\xa2\xdeo9\xcdY\x91\x30I-\x9\xa6\x84-g\x0\xa8" "(\x3\x32\xba\"R\x1al\x16G0\x4\x66#`%Y\xc5\x5\x96\xb9\xff\x0\xaer\xf9\x42\x2I\x82" "\xc2S%\xe7l%Yf\xe3\xc6\x1c\x82\xa5\x7\x37[\xb5\xf6\xcbV'\xbfqI9BB9\xc6\x18\xf1\xda" "\xde\x35O\x15p\x81n\xd4\x0\xef\xd3sR\x92^\x4\xde]\x18\x7\x0\x8d?,\x1>\x2l\xfKl\x0" "\xf8\xf4\xf6\x19?\x96\x8e\xea{\x18jm3\xf6\xb\xf\xb5\x37\xd4\xe4\x9y\x96\xc6<7\x91" "&fBz\x9d\x9b\x10}\xaf\xba\x38m\xe6\x44\x1fkX_\x13\x32\xee\xe8\xc3.\x93\xb2\x3\x6" "\xb0\xa9\xf5\xc3\x37\x1e\xbb\xc5\xb2S\x83Y[(I\x83\xc5\xf4\xbc\x85\x42\x4jL$\x87\xca" "Y\xc0\xae\xab\x9b\xf7~J\xbb\xec\x83\xe7\x1f\x1c\x84\x84\xc1\xae\x9c*\xed\x42\x15" "\x89\xd9\x98\r\x93\xdb\xd0\xb\x32\xb9\x8a\xef?_f\x91\x8a\x43\xd2\xf9\x30\x8_\x9d" "\xdc\xa4!Ic=\xf4\xb0\x89\xf6\xb2\xc7\x9b\xbd\xac\xabp\xe1\xff \x87\xaf\xbe\x8c\xca" "C\xf2m\xbf\xafN@a\x15\x5\xfa\xeaOkE\xe6:\x1f\xe5I\x84\xdb\x13`c]|\x0\xee\xf\xbf\x7f" "D\xa7\x37\x66\x62@\xf2\xdf\x1\x9\x81\x1a\xb7\x8f\xac$\xe9\xa8\x5M=kcY\xa6\xbb\xeb" "\x93\x92\xee@\xbex\xe1\xba\xd8\xef\xc4\xb5\x9c;\xbdQ\x13\xe4\x1aq\x91\xdb\x61\x13" "\x96P\x11~ewj\xbd/\x8e\x9b\xab\x18\xefW\xf7~\xf4\x1fl\xf8\xc0\xfe\xbc\x85\x9c\xe" "\xb1\xba\x1f\xb2\x42\xde\xe5\xaajZ\x8f\xd0\x9d\x38\x97\xec\xbf\xeaJgzC(C\xf2\xeb" "*^\xd8\x7\x99\xbb\xdf\x1{8o\xf5\xf\xda\x9b\xdbOj\x98\x11Yt\x95\x85\x1f&7/\x1c\"\xf7" "/s7qu4\x96\x4\xfb\xb\x90\x7f\xf9\x98(\xe\xd3\xcf\x37R\xad\xe5\xcf\xfc[\xb9\x95\x39" "|\xc2Q\x9!WYz(\xdb\xcc:Mhb\xf0\xee\xa2\x80\x98\x8\x8a\"\xee\xd1\xbc\x8c\x9v\xdc\xd9" "\x4\xdc(\x6\xda\x95<\x2jzb[\xbe\xcc\xbc\xa9\xbd\xfa\xeeY\xe4&\xe5\xbe\xcbuF\xb0;" "=y\xce\xb7\xab\xe9\x62@P\xd4\xdf\xda%\x15Io|\x98\x8b\x92n_\xc0\x80\xb9\xfd\x9e\x85" ".\xcaO\x5\x13y\xa7R!\xd2\xa3w*\xdd\xad\xa1\xd1\xca\xa8\x0\xbaIas\xc4\xd4\x83S\x91" "UX\x84\xef\xaax\xa1\xa2\xad\xff\xa6\x13\x84W\x84(\xaf^\xdd\xe7\x66+\xfaS\x9e[\xd9" "Wx\x98z\xd1\x7flh\xb1U\xaa\xd4r\xa4\xe3t\x4\\\xbb\xcb\xde\x30\xfd\xcf\x80s\xdd\x9a" "\x9e@\x81\x30\x62\x90\xc1\x8e\xdf\xab\xc7\xa9\x9e\xe3\xfd\xe7\x1f\x86\xd1m8s\xe8" "\xd9\xa6,Y\xcaS9O?\x15\xb2\x14\x0\x8\xf\xc3X\x12K\x88\x39\xeb\xc9l\xaf\x62\x64\xf0" "[\x94\xcd\x1a\x1c\x82S\x16\xd8\xe9\xc8?\x17\x84Xm\xba\x45{\xed\xf2\xe8V7s\x98\xbb" "y\xfb\xe4W\x91\x92\x98\xbd\xf1\x31\xe6\\\x91\x80\x6\x66Q\xae\x99\xa8\x8b\xccP\xc1" "\xba\x46\xd0\xc2\x3\xebge%\x9fU\xa3@\x12\xe9\x7\xf5z[\x10\xb0\xf9O\xbdS\xec\x98\x41" "\xc2Iz\xf9k\xef\x44i}E\xb7\xe3v\x14\xab\xf1{\xb7\xb0\x34Rvy\x8f\x1a\x88\x85\x99\x4nJm\x84U\xfd\xc1?/-\xdbR\x9d" "\xfe\xa2m\xbd\x11r\xc1\xb5;\xe4'\xbd\xf9\xd4+k.\xe3h\x9eHN\xaa\xda\xaf\xf4\x1b\n" "\x84\x65\xd2\xe6`\xa6\x98\x45\xc1\x1d\xfc\xc4k\x15\x13\xf9*0m\x1a}\xd5\x8e\xf0*|" "\x16O]\xabyZ%\xa2\xbb\x46-!N\xb\xec\xa3\xa5$\x94\x94\x44\xee{I\x18\x8f\xf8\xf\xaf" "\xb9\xd9\xd1`\xb9\xdb\xdb\xf2\xb2\xe7\xb6\xf4w\xec\xb\xa5\xcd\x9b\x92l<\x9a\xf8\x9d" "\x84S\x93ysa\xba@\xff\xeaq\x9d\xe7\xcf\x8d!\xb7G\x1\x99/\xbc\x4\x32m\x91+\xed\xab" "'$\x93\x88\x9\x32\xab\x1\x30'Apf\x9e\xe\x87\x66\x89\xae\xe1\x6\x85\x12\x45g\x1fY" "\xcd\x36\xc4\xaa\x62\xf\x3\xcd\x86~qe\xeap\xb4\x81\x89\x62\xda\x9f\x33J\x1\xfb\xbc" "\xaa\x99\x94\xe9\xeei\xc2T3\xccJB\xf6G\"_m\x95\x19I\x8f\x65 \xc*{\xc\x10\x46\xcf" "\xac\xef\xc0\x9d\xe1\x85\xe8\x64V\xb9\x93\xffI\n\x93\xa2\x1d\x1\x66r\x4\x90\xa1$" "\xa7\x19\x6\n\xcd)R\"\x0\xca\xc8\xeeq\x82\xec*\xe\xb7\x8b\x15\xc2\x99*m\xf7%[F\x3" "\x4`F\x8e\n\xb1\x62\xc\xf5\x17\x15v&\xdb_\x7f+\xc4\xa8\x12=\xfa\xd2t\x97\x35\xdd" "\xa8\xfa\x5,\xc9qB\x19\x97\xb3$h\xf9\xdc\xb3n\\\xee\xf7\xac\xbb\xa9\x9a\xda X\x8f" "\xe7I\x87x\xddX\xe6G\x91I\xf0K\xb3\xc\xba`\xc4\x33\x9b']\xe3GN\xb\x89'\x9a\x8b\xe5" "^\"C\x11\xea\nl\xb5\xbe\x32\xe4\xd9.\xd2\x42\xf2\xa1\x36\x42\xbfGu\xa1\x1\xab\xed" "3\xb5\x97\xf1\xd5+\xe4)\x99\xef\x66\x19\xd5;8\x19\xa8\x13[\xa0\xab\xa2\x89\xe5\xaf" "\x15?\x9dL\xbay\x0Jbm2\x99\xfe\x88\xfct\x9a\xe!\x8bK\xa7\x7\xb7\xca\x1c\x93\x9e\x99" "\xb5\x62\x82T\xb5\xfem\xb0\x33\xdb\x42\xf7>\x9b\xd5+\xf7\x97\xe2\x13\x8fH\xc6o\xb5" ";J!\xb9U}A\x9a\x17\x30<\xa5H\xab<\xcaL\xae\xb6\x16\xf9\x35\xe\xac\xaa\xac\x12t\xc" "3qjG\x8<\xef\xaa\x1a\x34\xcc\xa4\xea\xb6N\xdf-2y\x9a\xac\xee\xa4\xfb\xfb\x41\x95" "y\x0Q*\xf\xd5\xb\xc9\x6ZT\x97\x30\xa0Y4\x9d\x19\x46\xe2\n\xad\xbfnyE\x1a\x90\xc9" "\x14\x8b\x84pJ\x18\\\x19x\xe4!1-\xef\x6^\xb2\x17j\x8d\xa1\xcc\xd9\xa7\x63\xd5u\xaa" ".\xbb\x91\x9f\xa5\x80\\\xe1\xd7\xa3\x8\x98O\x1a\x6\x9f\xbf,\xcaON\x84)\xa6\x62\xef" "3\xa8!3\xfPR\xb4>B\xa8\xaa\xed\xde\xd4\xfcPp\xc8\x89TuT\x97T\xa5\x3\x8d\x9c\x8[\xac" "\x95\xe0\x30\x66T\xa2\x96\xd8\x9b\x13\xb8\xaa_\x1d\x41\xfa\xe2\xb9\xa8[/f\x1f\xfe" "&\xb4\x88'[\xab\x96\x8d rx\xf1\x44[\xf7=d\x8d\x63\"\xea\xf5\xf\x19\xdc\xd9\x18\xbc" "b~}\x1fX\xa5\xfd\x89\xf1\xb\x88=\xaa\xef\xa1\xb2v\xaa\xb7*\xba.\xe7\xd4\x43v/\xc8" "\xe2\xad\x12^\xa6\xc6|\x4\xb4\x45Z\x1d\xf4\xe0\r\x64=\xe9\xa0Z\xb3\x81\xcf\xd7Y\xae" "\x11\xec\x92\xab\xd3\xf5g\xd8\xa2\xcd[\xee\xc6\xfc\xddKN\xa0:W\xb\xdf\xb3\x38\xac" "Wy\xae\xf6\x38\xa3\x0\x44\x90\xcb`4\xa3\xe;4\xe6(\x2\xf2g\x13;\xadmo\x8d*\xe1\x0" "\xaf\xc5\xd0\xc7\xc8\xb6\x14y(\xa0\xe0\xf4\x83\xa6{\x1P\xe3l\xb6\x18\xcd\x9f /\xb2\x31\xba\xd3\xe\xc1" "\x89\x99\x39\xe3\xe0\xee\x36/6\xe\x8e\x9chh\\\x10\xd9\xfc\x1dZ\xc8)\x80<'u\xa5\xb9" "\x1e\x36\"\x9a\x13\x41\xf2Q\xd6@\xb1\x62&\xb9\xa1\x39\xcd\x9f\x95S\xa0\x10\xae\xde" "\xac\xe0\x1e\xb0\xb7\xed\xbd\x9b,\x8\xb0\x64\xbd\xc7:\xd1\xa8\x11k\xce\x92<\x1c\xc3" "\xeaP\xb8\x0\x94\x93\x92\xe2\x1d \x80\x5Z\xc6=m\xa1\x1f\xe5\xe3\xdczhn$\xda)\xc4" "0X]\xf7\xc7\x88q\x9a\x1d\x61\xd0\x36$\x15X'\xca[\xd4\xf3\xbb\x39\xee\xf4\x1f\xbd" "xx\xe\x12\xca\xb0\x0\xdf\x9f\xa8\x44\x7\x1aZ\x15\x4|Y\xb8\xa6\xf4[4\xc5\xd9\xe3\x3" "\xa3\xee\xa9}Ct\x1f\xa6\x31\x30\xf4\xecL\xd6Ng\xd5l\x7/\xaf^\x9f\xefr\xbd\\\xf4\x63" "\x86\xd6\x97\xab\xec?\xd9\x37\xb\x41\xc3j\xe1\xe4\x97\xdfnE~-Zu\xe0\xe6\xac\xfc\x90" "5\xe\xfc\x42\xda\x44\x2\n\x4Y9\r28{\xb8&x1\x1a\x9d\x95\x41o\xbe\xea\x9d\x18\xc7\xf2" "\xc6\x9du\xec\x32\x62\x33\x8c\xd1\xc7v?q\x15\xb8\xa7\xac\xec\x1\r~6\xcf\xa4\x1c\x9e" "\xa6N\x4j0&\xe1\xb3\xe9O/\x9eqZ\xe2\x14\xc0\x98\x9\xc1\x66\xb7\xdbH\x85\xff ]56\x1e" "\xa8\x42\xd4\xdcl\xe9\x1b\x83\xaf\xf0\xef\xfc\x1a\xb6PidD\x87\xb7\x86\xa6*\xa5\x94" "{\xa6\x2\x87\xe9T\x96\xb9\x1b\xcfI\x8\x33\"\x17\x63\x95\xb9ze\x2\xbfj6\xf4\x66J=" "\xe9\x43\x15)\xc\xb5h,|5*H\xc8L|\xb9V\x85?D\xfd\xf5Y#e\xa4Q0\x2\\\x9f\x8\x42\xd3" "'^W\x5\xf7\x93I\xa1\xe7\x96\x93s\xae\xc4\x35\x1aSJ\xdc\x0r\x96#\xe5\xaa\x6\x65=\xef" "\x1a\xa0\x38 o\xdf\xff\xb9n<\x88\xa0\x93\xd0\x44\x11\xb5G\x97'\x4\x94\xfd\x43\xb1" "\x1b\x1fkeU\x3Qe\x3\xb5\xf8\x45L\x9:\x86\xd1H\xe0\xbe\xfc\xb1\xdf\x14V\xd2\xe9v\xcc" "\xe2\x7\xd7\xfc\xd7\xa6\x89\xf3\xcd\xe8\x32\x1\xf5\xc1\x43\x84\x8fO2PkA\xf5\xf6\\" "\\\xc8\xec\xca\x81\xed\x1d\xcf\x61\xfa_\xea\xdc<\xd9\xc3\xe6\x97\xea\x13\xc4'\xce" "\xd7I\xb8\xfd\xfd\xde$\x8d\x35\x8c\x81r\xbd-9\x8b\xe3\xc3\xe3\xcfg\xbc_\xe8VK\xf9" "\x8e.\xd4\x3\xa4\xd8\x18\xf\xf0\xd0\xcf\x33\xb5UV\xfb\xd6\xd1:!\x91\x8;\xb5\xf1x" "\xcb\x8cjbC\xbb\xe7|\xbd\x33.\xb5v@\xca>:\xe8k\x82p>*\xddl\xd2 \xb8.C\x96\x12\xf5" "\xf\xe1\x9f:9\x4\xee\"Kw\xc1\x45\xd4\x88W\x85\xd4\xd1\xf0}W\xd2q\xdf#4\x85\xc\xc7" "Cv\x1a(\xf1\xf0\x91\xfb\x37\x6\xep\xf7]h\xb7|\xb\x34\xc3\x42\xd1\xd9\x85g\xf9\xa6" "\xb1\x18\xb\x45\xf2Qr\x1c.l\xeb\xa6\xe8\xf4\xb3\x8b\xc4u\x11*\xba\xe8\x31o\xe0zD" "?\xd1r\xbc\xdb\xb3\xe9(\x8wq\xd3P\xbe\xf7\r\xec\xb6\x19z\xa9\xfe\xb\xe4x\x9a\x14" "\x1a!3C\xbd\xf5\x87\x15\x13\xe1\xc3rc\xc0t[\xa6\xda\xd4\xe0-\xaa\x7\x15\xf2\x90\x1" "k\x9c\"(e\x8ci$T\xde\xf3}\xc2\x1d\x9\xbbGZ\xcd\xda\xc2\x87\x88PK\x9,&\xe1 \xe4S\x94" "i_\x93\x9a\x1ci\xa6\xd2\x1c\xe3\xec\x38\x96\xdb\xcb\xbaS\xd1/\x15\xb7<\x11\xc2\x1" "l\x1d\xdc\xa3\xc0\xdd.E.\xf8,LF\xe8\x37\x18\x34\x82\x10\x6\xac\xbd\xe6$<\xcc`I\xeb" "\xf5\x93\x41\xbb\x6\xcf\x7f\xc8;\x13\x30\xa3i\x2\x2\xbe\xda\x8f\xb2\x9\xe8\xc0\x62" "B\x0\xb2@\x1a[\x98\xa6\xf9\x98\xfa\xb8\xb7\x4pj\xba\x97@2\x15\xa3>\x82\x9f\x9bK[" "\x9b\xb6p\xf4\xb\xbf\xcc\xb4\xac\xf5\xe7\x8b\x5\x82\xd5L\xd7\x45\xebK=\x89\x85\"" "\xf0\xb8\x89\x84\xe2\x30V5\xca\xee\xcbYd\xa9\x7f\xdb\x8\x4\x97\x8\x11\x3[\xd9\xc7" "\xad\x10]\x96n\xf3WB\xb9^h\x99\xfbi\xa5\x7\xce\x98\x1\x84\x44vz\xa6\x89\x10!\xed" "\xa4\x82\x42\x9d\xce\xf3\xdb\xf0\x80\x31\x91\xacg\xdf\x9a\xdf\xaey\x18\xee\xe9\x4" "\xc\x1a\x92G\xe:\xd7\xf1\x2,\x97\x0Xq\xd2\xd4G>+\xd1\x66}\xe6x\xa1\x41\x17\x17\x82\xfd[2Q\x97\xf0\x8b.\xd6\xda\x3;\xe0}o\xd6\xf5\xddq2\x1d S\xe2" "\xb3\x80msQ\xa4\xa7\x8f\xc2\xbfw\xde\x11\xc\x86\x11y\xae\xd5\x8c+&4\xeaL\xe3jI#\xd1" "\xef\xe2\xed\xc9w\xbaVT\xb3\x1b+\xc4\xf9\x32\x61\x1c\xcb\xe9K\x87\r#]\xc4\x90\xef" "'+\xfe\xb8\x9d\x43\xbb\xb2\x85~c\x7\xcfL\xa9\xf5yO\xab\x1b\xba\x11\xd4\x65\x18`\x8a" "\xc5\xd9\r\x8a\xbf|\xec\x15.)b+\xedTd\xft\xb0{\xcd\x90ZQ\xd0\xb6T\xe5\xea\xe4j\xf5" "\xf5\xf1\x99\x9a&\xf\x97\x65\xc0<\n<\xbe\xe6$\xfc\x12\x5o4;\xe7\xac\x85^\x9c~\xd6" "+\xc8.q'#\xdf\xf3O\x95,\x1cVZ\xae\x8d\x91?\xfc\x1c\xe6pU\xc0W\xcb\xeb\n\x18\xeb\xa9" "\xfb;5\xb4\n\x89\x1a}\xd9`7\x88\xce\xac\x9b\x97M>d\x19\xa8\x14T\xb2\xb3\xb7 n\xf2" "\x86\xd4\xd7\x9\x92!\xce\x31\xbdu\xf5\xcb\xa4\xb4.\xc3{\x13\x4\x62\xca\xc1\xc6\x15" "BY\x12\xb4-\xba\xc9X\x1f\x66S\x8a\xab\x39\x92\xe5\xef\xe6x\xa7Q\xea\xda\xd0_\xda" "\xe\x8azk\x8d\xb0\xcb\xa5\xd6\x43\x13\x46\xc8\x84\x31\x8d\x43\xca\xb5\x5:\x17\x89" "\xd4\r+\xf7\x62\x6L%\xe0\xf5m\x8a\xea\xa8\x39\x30\xbeMBa\x91I\x12\xe\x63\xe3\xb9" "|\x8b\xb0\x8c\xdc\xfag}\x89\x80\xaa\x4\xd5\xfeG:?\xd7\x99}\xf1`\xeb\x87\xcb\xef\xe5" "j\x12.\xda \x8d\xf8\xf7\x9\x98\xfb\x18\xd9\xa7\x66\xe2Z8\xf6/\xdeI\xb0\xc\x9\xb9" "R\xa8)\xc9\xcc\x8d\x6\x64\xeelv\x1a\xa2\xe1\xa5$\xe7\x63\xc8\x34\xa1\xf4\x97\xab" "\x10\x6\xe8P\xb0\xaf\x63\xa5*\x8b\xb5\r\xfa\xe0\xd4\xf0Pf\xfQn\x80[ \xea=\xcb\x18" "\xb1\xdf_\x8b\x13'\xdb\x94\x1aG@\xdbR.N\xf8\xa5\xf0\"\x83}r\xf\x7\x9d\xc\x1e\xb4" "\xc3\xdc\x9awVl\xbc\xd6\x38\xb5h[\xc4\x90O\xf7\x4\x95\x9f&\x8c\xf1\xfc\xda\x92\xc1" "J\x93@\xb7\x9e\xc1\xe4\xf7Z\xe2\xf7\x90\x99\xdf\xff*\x3\x41\xf9\xa4\x85\xbc\xdc\x7" "`]vGq\x87\xdf\x8e\xb9\"o,\xb7\xc9`*\xc1\xf\xeaG`\xe3\x11\x92L\xfe\xd5\x9ck\xa8\xc0" "}\x1f\xf5\x1a\x34\xf2xL\x8e\xe9\xc5P\x9cNB3\x0i(\x3r,z>v[7\xc6\n\xf2\xe3\xb9q\"\x9" "A\xb7RI\xcc\x8aR-o\xe6\x9a\xdc.E\xdd;\xf0\xfe\xad\x12jw\x91Z\x85\x87%P\x1e\x38\xf" "Tj\x8a\xabu\xa1\xc1\xe5\xfe\x93\x1f?\xaa\x1b\xf2;7L76E\xa9\xce\x85\xe0\xda\xf7\xa5" "D\xfd\r\x7f\x1e\xb\x66r\x1e\x19\xdc{2S\xfdq\xd8\x8fM\xeej\x93/o\xba\xae\x9b\xaaQ" "{\r\xfe\x66\x4]\xa0\xac\xfd\x14\xa4(\x7f?Y\x11\x9d\x9a\x13Ki\xa9\xbcLD\x81\x6\x7" "\xbcZ\xbbL\xec ^\x84\x99\xd8\xa4\xc8G\x18\xec\xe2\xa8\x94\xdfr\xe2\x97\xf4\x9d\x37" "\xa4\xc2i\x86\x8fIg\x10\x9e\xa1\xca\x1a\x9c\x80\xd8Q\x8f\x86\xd5\x36\x88\x97\xd3" "\xad\xa8\xb5\x13\xb5\x92U\xa5\xdd\xe8\xc9l\x18Q\xd8i\x9f\x96\x11\xda\xe5\x65[\xcf" "\xdf\xf2\xd9\x8\x61\n\x95l\xa7v\xa0\x0\x88\x1\xbb\x45\x7\xae\xeb\xce\x8a\xd1\x10" "\xa9\x63\x17\x90p\xd3\xb8\x0\\\x41\xa6\x12[\xe\xd9\x46\x92\xa2(7\x7\xc9\xfb~\xdd" "\xad\x1d\xd5\xb7\xc6+\xc7\x14%/\x7f \x84\x1f|m\xa0\x1X\x93\xe2\xd1\xc6\xad\x44K\xfb" "\xdb+\xb0\xfa\x35*\x88\xe9\x81X ~\xce!?GM\x8:h\x9\x32\xbx\xd6\xc0\x80\x1a^]\x87\xbc" "*7\xcfz\xd0K\xf3\xca\x9b\x0\xdf\xfe\x96Tz\xb8\x83\x3\xaax\x9b\x63\x81[\xac)Y\xdf" "m\x92\xa2\xae\xecl\xe3-\"z\x95\x37\xae\xf4\x9e\xb2\x83j\x97\\Q\x96\x97\x62PE%\xb8" "\xdam\x9b\xacR\x98\xa1t\xb7Nd\xb8\x83\x8a\xe8o\xff\x37\xc6hys\x9f~\x84\x9d\x39\xf6" "\x7f\xdb\x5\xb1J\x9b\xc8\xd4\x34\x34\x46\x43\xf8O\xd1\xa7\xaf\x80\xb9\xaf\xcf\x88" "\xd7.#?-\x15\xee\xd7\xd6\xa7\xde\x18\xdbt\xe2\xf0#\xcf&Tw\x91\xc9i\xf1#\xe5m\xe4" "\xd1\x8c\xdc\x35#\xe4!\xd8\xb9\xd5\x1\x84\xe7h\xe5L\xb2\xca\xfe\x81\xfa\xd1\xcd\xe7" "\xd7\xe1:\xdc\xf5\xa1\xbeR%\xfb\xe1,::\x1e\x9c:Bk\xc7\xeX\xb4\xd0\xe1\xac\x9d\xea" "\x9\x5O%\x15_\x97\x45\x82\x8a\xc6 \xa5\x1\x99\xd5\xd3\xa5\xaf!\xfc\xbaM\xab\x64\x9d" "\x1a\x13\xd2\xfc\xff<\xe5s`xV\xc2\xd2jj\xa1~9L\xe\xad\x30y\xa8\xf3[\xb\xfb:-0\x1e" "\xfb\xef\xb4\xfcW)I\xdd;\xf9\xf1Oa\xc0\xd2\xc\x90Xe\xe2\x14\xeb\x91O)`\xb1\x7\x12" "\xbdl\xfb[\xfH\x91\x7\xda\xd1/P\xbb\x7!\x9f\xb4\xc3\x61\xcj\xc\x8b\xd0g\xc8n\x17" "\xe2\xceK\x8(\x9jLIm\xb8,;a\x85\x85\x9b!/~*\xe7\x1a\xbf>E\xd9LD\xcd\x97`6\xc1r\x2" "\x8b\xc6[\xcd\xbb\xa3}\x3\x44\x90+\xcfp\x17\xcb\x92\xf6h\xa5\xea\x4\xa2\x43\xaf'" "\x84!\x5\x15\x1e>a>\x6\x1er\xf6\xcc\xa5\xeb\x65\x86.v\x16\xdbZ/y\ne\xae\xcb\xc8\xe5" "iJ]\xfb\x98\x97\x17\x94\xc1\xcc\xecntY>\x7lx*}G!\xa3+\xf0yboN\xb7\xcb\xca\r\x1e\x8f" "\xd8\xfa?\xc5\xb5)\xcf\xac\xcf\xed\xcf\xe8\x37\x15\x16\xcaH\xf6\x92\xca\xa0\xc4\xcd" "\x96(\xef\xb1\x16:\x90\x8dpK[T\x80{\x1e\xda\xc1ht\xd1N\xea\x9f\xa0\x89\xf7\x32\r" "\x1b\x9b\xa2\x94hL\xf9\x8d\x1b\xa7\x30\xea\xec\x1b\xdc\x13\x3\x30:\xec\n\xfa\x41" "7\xa4\x97\xe3\xf9\xb5~\xc4q\x12\x7\xb3\xb8\xed\xce\x84\xf3\x32\xfbP]\xb3\xa3\xdd" "\x93\xe2\xd5[w\xd0\x62\x34\x94\x1\x1d\x8b\x63\x0\x8b\x15n`\xd6\xd2\x80]\xad\xa9\"" "w\x82\x30\xe2\xd5\xeb\x64g\xa5\xddzf\x1\x17\x10\xef[\xd0\xccg\xfa\xd7\xf0=\x13\xab" "\xb3\xc9\x45\x12\xf\xb8/\xbcMg\x91\xff\xaa#V?\x94\xbf\x91}d\xf9\x93\xb8\x82\xb6\x15" "i\xd6$\xf2\x43\xd9\xe0\xb5\x42^j\xb6\xc0r\xc2\x2\xb3\xac\x97\xd2\x9f_\x82\x8b\xdd" "6\xe0;\xb3\x32n\x18\xe5n\xba\xfa\xd4\x8f\xf1\r\xe2\x7\x8e\x17\xfa\nv,M8c\x96\xc9" "o\xed\x9c\xb0\x12\xd6|\x8\x10\xa6\xff\x84\xe2/P\xc2\xa4\xc3\x10\xdc\x82:\xaa\xca" "\xb9<\xb8\x1c\x8c\xb1\xdf\n\x8b\xeb,\xfa\xc9\xdfm\xb\x9b\xa5\x9d\xbU\xf8\x34)0\xa7" "Q\x93h\xfe\x63\xa6\x8c\x1bu\xaa\xa8\xf3S]\x83S\x82|\xcd\xdb\x33\x5\xbcUZ\xcb\x1e" "\xa6pB \xe3T\xee\x14\xa5.r\xad;\xb\xe2s\x8b\xb7\xbd-a\x8e\xeb\x95[\xa8\xc3\xe8\\" "\x89\x38\xe3\xd8\x41\xa9\xd8\xf9\xfdr\xee\xee\xf4\xdd\x1f]\x96\xfb[\xaf\xd9\xb0\x81" "jo}!\xe6>`\xa2\x19\xc7\x9d\xf6\r\x9cj#}-\x11\xec\xa8\x15x`\xb5\x88\xe7\x43S\x5O^" "@\x95\xen\xc2\xf7Vy\x1d\x30\xec\xfd\x1c\xed\xe8\x98<\xcb\xfbvT\xcc\x8~\xf8\xd6\xaa" "\xc7\xac\x31\x9b\x84O/\x93\x89\xeb[T\xbf\xd6q\x9e\xbc\x35\x87RO\x18\x1f\x30Guk\xfc" "- _\xab\x64\xbaR{J2p\xe3@n\xff\x42\xa4\xdf\xd3wB\xfd\xa0/:o\xfdW\x97\x87\xd1\xd0" "\xa8l\xb9\x17\x14yi\xef\x83\x19\xb4\xab\xb0\x37\xc7P\xabG\xfc\xcb\xac\xcd(\x92\xf0" "\xcf\xb1\x63\x88=%\x82\x92\xf8_\x1f\x9a\xf3\xeax\xe1\x13\xbc\x61\x8d+S\xe1vTGD@K" "\xa9\xf4\x34)\x8a\xee\xed\x9c\x84\x44GQWXk\xde\x6\x6.\x1\xe8\xc5\xe5\xc6!\xf\x9a" "\xb6\xcb:\xec\xba\x1f\x15\xa3\x32\x7f\xc2\x43\xb1\xa4\x8Q\xc5\x9\x4Hs\xb6\xafs\xf1" "G\xfe\xf1\xd6\xaa\x91\x94\xb@\xb6\xd5\xa8\xbf\xbc\xa4\x36x\x3\xae\xc1\x43\xaf\xc8" "Q\x86\x80\xdc\\\xd6\xff\xb3\xb0m#\xd4" "\xac\xbd\x8c\xc9\xf4$?l\xbeL\x91\xb2\x19-\xa3\x1d\x8a\xc5\x7f\xee!4\xb1R\xcb\xa5" "\xdb:\xc8\xb2]\x80\x34\xcf,\x9b`\xc\xaf>,\x1e\x1\xefT\xdch\x9d>)\xda\xe1J\xd3\xa4" "\xb7\xd1%\xe6\x92TN'\xf9R@\x8\x16\x37\xf0'U\xaf\xac\x86\xdc\x1\xcf\xc6V\xcd\xc1\xe9" "\x97\xa9\xb7\x45\xf6&\xb2\x9\x1a \x82(\x14\xf9\xf4\xf1\xdb\x94\xcb\x90\xa6\xec\xb2" "\x1f\x1d\xf0 \x88\xbbKz\xac\xa1\x1f\xe0\x84&Iohe\xc3\xadJ\xc8|\x83\x84)\xc7\x9\xef" "zdRx\xfc\xdd*\x17\xb7\xa9\x42\xb7@\x0\x0'_\x11\xcf\xfb[\x12\xfd@CJ[[\xbdR\xf5\xaa" "\x9e@8\x8e\x87\x81\xcc\x43\x9a\xd5\x1c\xa0]\x6\xd2\x44\x12%\xf1w,\x9c\x96\x32\xa5" "\x17\xff\xbd\x97\xea\x11\x9c\xa6{\xeb\xb4/d-\xd9\x8a\x7f\xc3\x87\x93\x9c`\xef:\xc3" "\xaf\xc3\xc0>cq\xa3\x44X\xd9\x1\x94\xd3Rk/T\xe7\x34YO\x1 \xe8\x19p\x14\x11\xd9\xcf" "h\xc7r!\x16HD\xc3s\x10g\xd3R&4\x87N\xdd\x36\x6\x9d\xfb\xed\x3\xfb\xbb!\xe7\xc9s\xb2" "\x8al\xd4\x31\x84\xd0+{\xc8\xae\x1a\xa5j\xd3Q\x2]\xe1\x9e\xe7\xc8\xbb\xab\xa2\xb8" "\x96\x39\x96\xac\x8a\xdbp'n\xa7\xf2\x17\x34H\xd1#\x8d\xdd\xa1\xa2$\xb2\x93J\x9b\x97" "\x16o,\x9d\xe9\x1\x7@\x1b\xed\"\xa9\xe8;|\x85\x1a\\\x1c\x9c\xb5\x35!\xc7\xcb\\\x62" "'\x9d\xf\xa0t\xbf\x8f\xea\xc4\xf0\xa7\x65\xbf\xc7\xd3\xd2\xddh\xce\x1a\xe6\x34\x9" "F\xd2\xceJVc]\x12\xe1/\x81\xe5#\xd0\x42\xbe\x8f\xceV\x93\xbf\x41\x9d\xb4M\x6\x89" "C0#yY\x9ay;\x15\x14.\x11`zK\xf7v/U .\xcb\x46\xdb\xb9\xe2qqx\xb4\xf4\xfc\xd7*\xa0" "n\x86\xba\xd3\xc2\\&){\x82\xe7\xfd\x44\xf8GM\x81\x8a\xfb\xa0n?G\xad\xf7\x9b\x93\x37" "\xa9\x9a\xd0\xd8\x41\x1c\x84\xb7^\xd7\x1byw\xdb\xco,\xc2\xa2MW[\xae\xe\x42\x34\x7" "<\x90\xb5\xae\xff\n\xb6\xd2\xe2s\x89'P\x1c\xbfs&\xb7\xae\x91\xa5\xddh\xe1HC\xb5u" "\xc4\xaa\xc7\x93\x13)\xf2\x16\xe7\x82\x87\xb\xf5\xc0\xe8\x9\xc1y8\xdf\x30\x9e\xce" "\xd9\xe6/\xe9\x18\n\xea\x17[\xe6\x1d\x1fw\xa1L1px\xd3\xac\x1bqN#\xb7V\xd3\x8f\x83" "\xb\ry\xae\x61@\xd0\xbaP\x5\x65xD\x88Z\x96kx\x80\xac\xfc\xf5\xdd\x46\xa5\x9b\x8f" "D\xf7r\x6\x10\x6\xb1\xed\x98\xbc\n\x88R\xff\xaf\xe\xd8\xce(\xa4\xfb\x96\xb4\xcc\x98" "Z\x5q\xe6zR\xc6&\xf7\x1e\x93\n\xc3\r\xbb\xc1\xe\x10\x86\x65\xaf\x90\xa0^\xdd@\xb2" "\xb2Y\xe4\x32\xc3$\xea\xda\xb1\xea-\xe9\xf4\xdc\xa2=\x4r\xdd\n\xa1h\xb0\xf<\x11\xe8" "\xc2\xa1\xb9\x43Z\xafG\xc7\x65\x9a\xcaX\xb\xb5\x88\xd3\xe8\xdc\xc9\xc4<\xa5\x11\xc" "\xec\x64t\xd1iV\x4<&\xd4\xe7\xd4g\xb2\x87\xef\x62\x19\xf1\x61\xcb`\x8\x8e=D\x9a\xac" "\xa4\xc9\x16\\\x61\xc1\xeet\xff\x3o\xae\x95\x2\\WW'fVe\xc8yX,\x86\xfe\x31\x99\xf2" "7\x17\xb3:\xc1\xa0\xb%\x99\x89\x1b\x0\x63(\xfb\x91\x34`heO\xba\x12\xe8\xe4\xd3\xf4" "LE\xa5y\xc9\xb5\xea\xa3.k\xeb#\x7f{\xff\x19\x36=lX\x88)\xbe]&\xd2\xa1\xce\xf5\x99" "\x12Kr\x17\x33\x8f\x4\xfc\x42\xff\x94\x42\xd3\xb8\x87\x46\xcbQ\xc3&\xf7\xd4\x86\x9f" "[\xfc*\xc7\xdb\xc\xd9G\xc7qN\x93r\xb6\x6\xac\xc7yD\xc7y\x13\xa7J\xf3\xb5\xcc\xaf" "\x8\x7f\x42\xd0\x38\xd0\xb6\x16\xa3\x9f^\x9f\x7\xabt\x2\xcc\x62t\x82!@\x98\x83\x12" "0\xc2\xb3\x1\xf3\xd9\x9c\x63\x61 \xb\xf8\x8e\x1d\xcb\x36u\xc7\x9d\xf3\x82z\xf3\xb4" "hy.\xcd\"\xd0\x86\xf7\xe8pa0\xea\x17\xa1w\xa3\xa0\x8f\x5\x43\x91\xc0\xfaZ\xfc\xbc" "\x93\xce\x36-\xa9\x9b|t\x8e\x8c\"\xc6\x34\xael^\x86\r\xae\xfe\x94\xc7\x17\xeeR/\xa7" "/\xe3\x93=\xbc\x38\xf7\xe4\xb3\xff\xc5\xa4!\xee\xe\\\rW\xb9\xf3\x62\xf8N\xb6J\x8d" "{\x8cs\xc7X|\x3\x91\x88*\x1a\x15\xd1\x82\x96\xa2\xd9g\x2\xca\xe\x92~\xf7\xd8S\xd4" "\xe9\xc4G\xc7\x9a\x32\xd8\xa9\xfb-\xd2\xb\xcc\x18\xc1\xc1\x1b\x96\xf1/\x8a|e\x87" "\xe5\x46\xc6\xe4\x33\xa5\xc5\x91\xef\xf5T\x8f\xb2~\xf4\xdb`gj\xd2\x11i\xfa\x1+Gc" "\x8d\x66\xfb\xe9\xa3]\xae>\xd1i\xfe\xe\xf2\xba\xeb\x8\xfc;d\xb0\x91\x65\xfe\xa8z" "\x84=b-2\x1f\xb4\x95K\xbc\x19\x64\x8d\x8eS24j\xdb,9\xa4%\x37\x88\x98T\xf4\xa7\x91" ";\x13\x8S\xa2[H\xf8\x84P\xae[\xda\xd3\x16\xb8\x3\xc3\x8b\x89#\x82*\x5\xec\x36\r\x85" "trZ\xc0\xcdY\xbf\xa6\x43}\xa2\xb7$mN\x9d\xee\xff\xd7\xb1\xfd\"\x33\x1b\x90\x9e{\x6" "\xd6O7\xb5NW;[\xbb\xees\xee\n\xad\x14\xa6\x14\x8b\x94\xca\xc0\x6\x0\xa3\xbc\xb5Y" "\x9c\xd3+2s\x4\x35\xb9\x99\xd0\xe5\x8]\xa4l3\xf1\xa7\xae\xf\x1f\xb2w\xbe\x9fI.M\x13" "CI\xf4\x94\xf8sL\xe4\x1b\x8f\xfc\xdd\xdfR\x8d\xa2\xa0\xc2\xec\xb6&\x9dI\xc4L\x93" "\xfd\xe9\xd0\xf2\xe0\x2\xbb\x18\xe\x99\x6\x8f\xcc/\xea\xaf\xe8\xb5j861F7\xb8\x0\xe0" "JC\xa9\x9f\x3\xfbW\xd2o\xa0\x88\xf0\xfb\x8b)\xd4\xe4\xeb]\x8bsp\xd2\x7f\xc8\xa7<" "\xbc\xda=\x93\xc\xbe\xb5\x34>\x88\x3 \xc5\x9b\x1e\x9\xe4\x4O\x8b(\xfc\xca\xd9\xba" "\xaf\x46\x16\x9c\x41:6\xe8\x10unFqH\xe6\x9a\x33\xb8:\x84t\x8e=&\x91\xff\xe6\x3\xa6" "\xe0\x83\xbd\xdb\x9dJ\x2\x98\x8c\x83L\x12]\x97\xf7\x14\x9fL\xbf\xde\x12G\xea\x64" "\xa9|\xd5`u\x9c\xca\xb2#\xb2\x8\x6\x8eH\x1e\xab\xcb\xca\xc8\x99\x34=\x13\x61\x99" "{6\x8c:\x95\x30^\xee_\xd1\xf7\xec\x84\xfc\x43\xb2\x61\xe1\xb2\xa9\xcb\xedR\xd7; " "\n\xe2\x1d\x4\x4\xdcsA\xb5z\xff\xfd\xe\xfb_\xdd\xca\xc5\x62\xd9|P\xd1\xf5\xa8\x41" "\nT\xfc*\xc5\xc1\x84\n\xdap\xe3(G\xb3\xce[o\x1b\xa6\xb2\x9d\xdb\xb9\xbe\x9f\x9\x1a" "\xbd\x36\xfe\x99\xd9\x11\xf8\xc6\xbd\xa4?\xcf\xaf\xb1\x86^V\xf5GA/\"\x4\x9-\xc2\r" "[\x9c\x35iN\xab\xf8\xd6|\x85u\x1e\xd2>\xdf\xf1\x11\x82\xe7\x8e\xa0\x8a\x44Gn\xa2" "\x1a\xde~zE{\x95G\xf2=\xb5\xc4\x66\x95k\xf6\xc2\xfbu\x84\xe\x61\xd8Gt/rn\x85\x11" "\xa7\x86IZ\xaa\xc9+\xc0\x61ts\xcaH\x1d\xa6\xbds\x94\xbf\x1f\xc7\xd0m?\xcd\xdf\x9d" "\xf8z\x1a\x39\x33\x17km/\x9f\xa0\xb7\xaf\xe7\x39\x38x\xe3\xa8\r\x33L\xf5\x45\xbc" "\xf1\x44\xa9\xdbY\x1e/\xe6\x41\xb8\x36\x9b\xa9\nh`\xdc\x93\x9e\xe0\x9f\xe8\x45\x8" "N\xba{\xa9\xb4\x9a\xc5\x99,\x1a%(\x99\xfd\xc5\x8b\xd7\x38\xa1\xe5N)\xf6\x9b\xa2o" "\xb5\xe7\xee\x15\x1e\xe9\x9a\xe1#\x9b\xb\x93/\xd7\x8a\x35\x83:\xbb=\xa6\x95\x6\xf7" "\x15\x88*\xf3\x90\x19\x9c(@\xa2\xf3\x30w\xe6\x31\xa0Z\x1d#\xb5\xb5\x83\xab\xa3\xf3" "\xbf\xdcI\x88)\"\xdd\xa5\x1a{652\xdf\xe1\xb9\x65\x95O\x86\xcf\x5\xb8\x94T\xd9\xcf" "\xa0\x86\x90M?N\x94\x83u\xfd\\L\xde\x14\xa1lU\xf4\x7f\xc1\xca\xfd\x3\x8e\x88/\x5" "\xce@yQ\xa4HPm\x98\xda\xfcQx\xf2t\xf3\xa5\xaf&f\xcc\xf1S1K\x7\xa8\x96\xaa\x9c&\xb3" "\xf3\x3\xbd\x98\x9c?\xd8\x0\x9dt\xab\x11\x10O\xc-\xb6@$l\xe9\x83\xc4\x2\xff\xfd\n" "K\x8e\xc4\n\x8b\x9d\x35\xe8\xae\xfc\x8bo<\xf5u\x98\x18\xc9\xe7\"\xb7\n\xc5\x9c]5" "jf\x1b\x61\xac\xd5\xaf.|h\x8a\xf1\xf4<\x7 G:NAJ\x7f\xc8\x65\x65\xb0[\xea>\x89\xa3" "k\xd5\xd2\x85\xffs\xb1\xf7\xaeLjN\xa4\xa9lim,\xf5\x1c\xf6\xde\x86\x8bGC\x97\xfd\x43" "\xe8\x44\x4\x5p\xca\xac)1\xc2\xd3Y\x85\xff\x8f\xc2.\xff\x9W\xb2\xa1<\xcc\x8b\x93" "\xff\xfb\x85\x83\xb9\x9d\x9b\x86\xeft\x87\xc6\x15x\x87\xa7NA\xbe\xb0rbG\xcdz\xb4" "m\xa2\x99\x32'\x82\x12\xf0\x63\xa2\xb8\x41\x2(\x6}\x8e\xdd\x81\xe5\x92\xf6#\xc2-" "\xdf\xf0\x1d\xc1\xa3\xfe\x8\x80{9!\xeczV=\xe6\x1a \xf5\x62\xa5\xb3\x9a\xee\xc6<\xd3" "S\xe1\xd1\x91\x8e\x86\xda\xac\xb8`P\xbar\x1a\xf4@\xe7\xd8\xcfxIa*j\x8d\xcc\xa5\xf8" "S(\x1a\x19\x85\x15\\\xfd\xc5[\xd9\x46~])\xc1\xf4\x44\xceM\xe2lv\xb6g\x16\xc\x19\x1d" "vi?\xbc\x92\x86\x37?\x91\x9c\x6\xbc!\xa0Ua\xea\xe4\x0\r\xde^^\x93\xf9\x5\x97J\xb" "7\x7\xe0\r\xb2\x0\xec\x4_Q\xe6\x1a\xa7\x64\x39\xaa\x18'\xbf\x33\xe4\x65\xca\xddm" "\xcfg\x9\x38\xf8t\xd7\x93{\xf0\xa4\x35\x11\xcc\xc1\xbcv\x9a\xda\xa7\\\x10\x81UK4" "\xbb\x13\xa1m\xd0\x17Z\xee\xb2]=\x1a\x6\x86:\x9d\x6\x6n\xba\x80\xcd\xd7\x44>\xfc" "\xee\xd6\x16\x15\x1j\x9;\xe\xcf\x14\xed\x13\x92@+7\xd6\xc\x1c$\xe\xb2\x96>\xdc" "\xf9\xd0\x46h\xab\xb0\xf2\xf5\x31\\\xaf\xc2>\xd4\xf9\xcb\xcd\xb5\x80\x6\x90\xba\xd4" "\x8d\xf4y8b\xfd\x8f\xb7W_o\\\xec\x17\xf4\xde\x3*\xe2yc\x85r\xde\xad\xa5|\\$j\xe4" "\xe7\xd8\xe7\xd9#M\xcl\x82\x1fi\xa1Wc\xda\x65\xd5m\xb0t\x99\x42\xae\xb7I\xebR\x15" "+\xb0K\xf5\xa3\x9f\xef-|\x83\xa7T\xa6i0`\xeI\xda\x17\x66\xc1\xa9o\xa4\x9c\x31\xde" "\xeez\xb6\xbe'<\xef\xc6\xdf+\xc8\xf7\xe\xaa\xf9\xf8\xc3}1!\x97$\xb5!\x14,\xc9\xe3" "\x8%\xe3\xc8N\xfd&\xfe\x64\xa1\xb1\xca\x36\xb0V\xab\xa6M\x87)z#*6\x10`\xb3\xaa='" "zC\x9d\x85\xb3\xf1\x9b\x65\xdd\x95\xa6\xaa\x85\xd1\xa7\x9b\xa9\x85\xb3\x5\xf1\xe1" "\x85\x64+*\x97\x1a\x9\x19n\xe7\x7\x6)7j[\xb7n_\xe1t0\xdd@f~\xa8\x9c\x14K)f\xf7/\xda" " _\x3\x45\x38\x12\xbd\x13\x1\xf1$\x89R\xee\xb7=\x0\x1\x10\xf\x10}~\x7f\x18r\xa7u" "\x9a\xd8\x43=]\xfc$\xa0\x41R)j\x8a\xf5\xe6\xcb[A<\xd0\x42\xf0\xa9\xf8\xdd|\xbe\xbe" "\x95$\xdd/\xe4\x4\x8a\x11H`\xf\x97\xc0\x1f\xb2\xf5\x5\xcc\x82\xe8\xb8\xda\x19x3\xa0" "\xcf\x88\xae\xa3\xec\xaeg\x1eG\xc1\r\xe6\nS\x9dS\xee[Z\x97\x9a\x93\xf2@\xc1\x91/" "\xb4\x64\x0\x9aV\xde;\x8f\xa7G\xc6\xd9\xff\x8f'H\x85\x7\x63\"\xe8Q\xdf\xdf\x13\x15" "\xc0\x97\xf1\xeb\x83^q\xb8%\x2\x91\xf0\xc6\xf6\xaa\xfc\xe7\xa1\x9f\x9a\xcd\xc8g\x15" "\xa8\xb8Z\xdbzr\x92\xaa\xd8\x1e[A\x86\xe8\x65\x15\x13\n\x62\xdd\xdc\xb1\xbb%\x1a" "\xc6\xd9#\xf8\x3\xaa\x95\x33\xde\xea\x8d\xe7@\xa4\xc1\x32\xf1\xf0P|\x8a\x32$\x11" "+o/Xu0\xd1\"\x14\xa3\xbc{\x5\x84\xd9\x43\xf3&\x9\x84\x9\xe5N\xcc`G\x88_A\x5\xddh" "\x91\x30\xbcV\x93\x17\x1c\xa3\xa4\x43\x9c;\xf0\xbc\x0j\xc9q\xc3@FX\x80\xd2&\x0\x13" "o!'6\x15\xd7\x80\xd7\x62\x9f\xe3'X\xc7\x85R\xe5\xb1\xb7\xf4\xc1\x64\xd8\xb1t\xb0" " \x1i\xb5 \xb4\xbd\xf5\x96|\x8bH\xdf\xdf.\x1dy\xd4k0\x88\x88\x90\x92\x86\x36g:\x3" "\x1cN\xb0K\x1c\x41\xf1\xbf\x34GK\\2\xeb\xee\xd8&\xc0\xba\xd2\xed\xe0y\xd8\xfb\x17" "\xfd\xb1\x1d\x19u\x3\xf1n\x13\xe5\xc2+\xbe\xe1\xa7\xa9|\xaan\xe4\x1e\xda\xb\xf6\x8c" "\xc9\xdf\xb1'\xe8l\xc8s\xed\xce\x66I\xf7\xb0\x10\x9]\xfc\xe6\xc1\x32\xef\xc3_\"\\" "\xc4\x90\x82\xbaS\xcdxz:\xa4\x64\xe1\x44y\xde\x9e\xbf\xb9\x8c<\xe0\x6\xf1Y\xd3)\x9b" ">z\x8e'1l\x14q\\\xc3\xbb\xe5\x61\n\xd9\n\\\xff\xec\x8eG\x2M4H\x18\x1e\x8f\xd0\xd6" "\xa1!H\x4\xe\x31\xc0\x44Z\xfd~\xa2\x3\xd3\x34,\xc0\x64\xe7\x63\x65\xf3\x14=SGT\x83" "\x1aU\x8b\xcc\xdd\x1d\x39\x93W\xea\x9e\x95\xf1\x45},\xfd\xdd\xef\x9a\xc2\xb6g\xe1" "Jd)\xe8\xb6_\xf4\xb4\xdf\x34#=\x7\x13\xa6T\xad\xf3\xc1\x11\x9dhp\xf1\xd8`\\L\xf2" "m\xd7\xbcOM\x1f\xc8\xe7\x11h;<\x12\x15XC\x89V)\xc1jF\"\xeR\x92\x38\x65]/9:\xceP\xa9" "\x8e\xe5<&\x18],\xf3`\x13[\xf1\x16\xdd\x8a#\xad\xd0N;\x4\xbe!lJ\xd7\x85\xf9i\xb6" "$H\xd4 \x14\xdf+#\x1d\xa5\x64,\x83\x61\xd3\x33\x61\xd5\xd6\xcb'\xf9\xfa\x4W\xee\xc0" "\xe0\xe4iuD\xf5M\xd2 5\xd1\\\x1c'\xd9\"\xc7\xf9\xa7\x84\x3l\xee\x80\r\x65\xf\xe2" "C\xcbM>o\xb0\xfc\xffxlb4\xfb\x98\xdb\x81\x92\xdbz\xf5\xc1\x96K\xea\x15\x13\x36\x16" "\x8f/U\xa4oIZ\xd5\x44\xfe\xbc\xd1\x1bPh\xca\xcb\x83\xcc\x1c\xbem\xf8X\x99\xa0\x88" "B\x93\xbd\xeb\xe7\xca\x36\xf9\x1f\xbf\x93\xd6.\xde\xea\x7\xd8\xe\x16<\xb3\xb7\xbc" "z\x7\x17=qX\x8a\xc\x19j\x2\xec>Z\xcdjU\xed(\xfa{\x10\xb4\x86^\x9eZ5\xd5\x43\xa9s" "\x92]o\xb4o\xb0Q\xbe*\xd0l\x88p]\x4Y\x1b\x7f\xe7\xc1Q\x0\x89I\xe2\x0\xb5\xa6\xd9" "\xd7\xbb\x8dI\x1f\nq\xc5\x39\xd6\x7\xd6\xa7@\x92\xa7\x10\xa9\xa8\xa4;s\xf5<\xcd\x98" "l\xb8\x8\x30\x9b\xeGUy\xa4\xc9K\xe7;e\x9fJ\x8a\x8a\x8a\xeb\x12r\xd1\x91\x65ll=\x85" "\x8d \x11\x9e\xccZ\xb\xac\xcc,?9\xd2\x92KJ\xa3\x1f\x9d\xf8\x82\x8a;\xf\x85K\xdf\xc4" "I\xed\xcbv\xe2\xed\x80Z\x9b\x39>\x14\x82Q\xf5\x9a\xc5\x91\xe0\x15\xe6\x12M\xd6%\xef" "\xca\x18>\x89\xa7\xfa\x85\xa0\xc1\xa6nb{\xfb}Q\x90\x30\xfc\x9a\x8bQ\xbb\x8d\x45\x14" "\xbd&\xf0\x41\xe0\xeeM\x8c\x6\xc1\x8c\x31\\\xd2\x39\xe<\x90\xc2N\xd4\x8b\x19 \x18" "\x17\xdayx0\xb5\xdcu\xf0\xc6\x34\xc4\xde\x83\xfe\xff\x85\x94[5\x95\x65s\xb6~\x1e" "\xde@\x0*U\xe9\xcd\x80\xc0\x96O\xc3\xca\x35+\x2\x1c\xb9x\x9c\xb1.\xfd)6\xc1\xb5\xe" "\xab\xd6!\x16\xed@*\xf\x46\x2}\xde\x11\xc0\xcc\xc0\xfv \x84\xf5\xa7Y\xa2\xff\xbe" "P\x8f\xfd\xc4}u^\xa3\xa4\x9f\xc\x9d\xa7\xcdS{\xf2\xa6{Z\x1e\x5\xbc\xd9\xe8s\x5\x1c" "sy\xfa\xc3Vo\xdd'aGw\x1f\xd9\x89\xabn\xd0\x17<\x6O7\x97\x8\xba\xa7\xf2!(\\\xf0TN" "\xe7\xe4\x9d,\"|\xd7\xac\x9e\xd6\x9d\x15\xf8\x16\xe3\xf0\xbb\xa5\x97\x5\xb2\x8eR" "\xd5:\xe4qGM\xd9\xb2\xda\x65\x16tV7\xa9\xcd\xa2\xcc'\x80\x3\xcd\xa2\x14)\xe2\x1f" "\x9a\xae\x44\xe3\xe9\xf0\xb5O\x9o\xf7/\xfc\xe6X\x2O\x80\xf2\x9\xa1\x92\xdd`Pe\x6" "\xed\xe0\xac\x36$\xc6}\xc9\x39\xc7\xb4\xae\xbd\xa5\xd1\xcf\x8c\x89\xcd\x8f\xc7\x5" "\x14I\x7-\x8a\x98\xde\x1b\xdeS\xcc\xb9\x1dn\xcd\xa3\xb5\x44u\xfe\x45\x4J\xa6\xa1" "?\x5\xa3_\xfe\x41\x1c\x36\x8d\xc8]\x12\xeb\x8c\xfl\x81\xaaR{\xd7j{K\xea\xa5#_}\xe5" "b\xe2\xa0\xd9\xf\x8f\xb8\x96\xd5\x15;\xd6\xef\x62\x36]+\xf5\x45O\xe8q\xcf\x43\xf0" "\xe6P=g;g'\n)\xc\xc7uh\xc9]\x9a\xfe\xcb|\xbcJ\x4\x9b$1\x85QV\x1e\xe3 \xcf\x1a\x36" "\xd6,i\xf6,\xfe\xc5\xbb\xa3\xfaP\xc9\x97=\x3ZVl\x6\xcd\xb6;\xa2\xb5\x86k\xf2\xdf" "Gy\xf8r~\xa8\x8c\x44@b\x1d\x15s\x9c\x88\x1e\xf3\xa3O=kOj\x11\x2\xf2\x2\xe0\x94\xed" "=\xed\xda\xe2\x94\xda-\xab\x1\xc2\x97\x7U\xac\xf1/\x16\xa5\xbe\x9a\x5\x85\x81\x12" "P]\xef\xe6\x89\xe4\xf6U6\x10$\xb\xa6&gJ\xd7\xf4\xaf\x34SR\xb2\xf6\x61ou\x3\xb3l\x12" "\x1b\xb8\x65|iY\xb1\xd3\xa3\x97\x66U\x1\xd4\x12\x42\x39\x1)\xd4\x9e~\x9a\xfc\xa9" "\xf6\xe6nu\xfa\xf\x63|\xe0\xdb\xb4\xc3\xab\xe6\x34\xd0{\x8\x46\xa3LI\xf0\xe9\xca" "\xcf\x8a\\\xeb\xf0\x17\x7(\xdfnTc.#\xab\xc6l\x93\xa0\xe5\xcb\x64\xb3x\xa9\x8b\xa5" "\xf4\x12JZ\x8\xc2q\xd9\x3N\xe8pL\xed\x15\x35\x35\xea&\xcb.\x96\\\x63\xbd\xf\x7\xfd" "K\xcc\x84\xf8\xdd\x35\x18\x82\xdb\x95\x7\xce\xfdw\xedw\xfc\";>yE\x14\x1b\x63\x1a" "&\xda\xc4,\xf2p\x92\x64\xfe\xa6z\xaf\x94Heh\xdb\xc6\x2\x93\xaa\xc0\x4l4\xc2Y\xe7" "1\xaa\xa4\xca\x9a\xb9\xf0\xcc\x99\x3o\xe6\xc3\xff\x66k8\xd0\xa0\x1d\x1\xd3\xc1_t" "\xfc\xc0\x98\x8d\xe8&V\xd6\x82\xbf.\xaf\xc1+\xbf\xc5rc\xaf\xdat5\xc8lwq<\xe2\x15" "\x86\xf0\x4_O\x8f\xfd\x44\x1\x99\xed\x91\x9eU%~\xa5\xd3L\x92\xd2\x12q^;\x92I;\xb6" "uG\xf1\xe8\x9b\xd2\xd6\x44\xec^P\xaf\x4\xac\x98\xc7\xf3\x95\xc7\x8d\xfb\x65\x34\x8e" "e\x98\xb8\x35\xa0\xb9=\x8cQN2!\x12\xd6\xf8Nc\xa5\x41s\xef\x14\xd9\xb2\x30ub\x90g" "\x92\xce\x1aX?\xf0\x19\x1e\xe8YN\xc8\x95|\xf8\x0\x35\x61u3\xe9\xad\xfc\xcc\x85\x81" "\xfe\xb9\x99\x8ds\xf4o+)Q\xdb\x85\x87\xf2\x96\x8b\x84\xc6\xd8\\\xd8\xfb%\x15\xa5" "\xf4\x9e|[\xfe\xbe\x1f\x86\x66\xe5\x9b\xdb\xf8\x9f\x81\x12}\x86\xda\xd3\xael\x9z" "\xe4\xfa>*X\x90\xf2r\xdc-\xa8\xf0\x10\xbf\xf4\xabH2\x1a\xbd:N\xec\xd3\xb7\x1bx\xed" "\x8dL\x7{\xaa\x33\x9b\xd7t\x15\x16`\xfc\xa5\xc2\x38\x1f\xc4\xed\xc9\xb7\x35/\xb\x32" "7q,WV7\xa9\xcd\xa2\xcc'\x80\x1kh\xf8\x8f\xb1\x12:\x12\x15}\xe1X\x15\x5q\x86\xcc\x36" "{\x85[\xa7\x38\x32\xa6\x8b\xd8UR\xceSd\xd8Jt\xad\x30\x4U\x88y\xe9\xaeh%\xe3\x63\x0" "\x7f\xb2\x12\x88\x87R\xbb\xe8\xe\xd6\x1f\xbcV$\xb9\xf3\xa7\xdb\x87>\x86\x1!\xc4\xbf" "\x9cSn\x4\x15\xba\xc8\x8b\x1d[\xc0\xa9\xf9\xa1\xe0s\xf\xfS\x9c\x8d\xb4\x11\xaa\xc5" "\xb1\x2\x1f\xe3\x90\x98\x66\xc0\xcc\xe1\xe0I\xdao\xb5\x32_\xe7}UN\xa8\xb6\x83NE\x12" ";\x14\x44-\xb\xf5\x85?\xba\xbaJ\xa4\xfc@\xaf\x96vWAQ\x87\x96\x1b\x9f\xda\xeb'\xd0" "\xfcx\xf5\x84)E\x8\xa5\xa5\xd8]y\x14\\\xf5\xde\xb3\xe7\x84\x31\xe2\xf5\xd2',\xcc" "x\x18V\xff\xa9\x8d\x87\xd8\x43-\xc4^3\x18\xcf\xd3\xc5\xff\x17\xb5\x1d\xd1o\xa3\xe0" "2\x16pX1\x1eO\xaf'\x10\ru\x0\xf0SkW\xe7\x9a\xc9\xf9$&\xd9\x18=6\x85/c\xc6\xa3\x94" "T4;\xce\xec\xbb\x92\xdcN\xda\\r\xc6\xf8\x8c\xa1\x46\x34\x16\x43\xf0\\\xdf\x14\x81" "\xa7\\I\xe2\x30\x61\x99\x94\xa5\xae\x18\xc9\xfa\x83\x0W\xa9p?\x80&*\x1Z\xe\x8a\x9a" "D\x95\xd2\x6-\xa1\xd8i\xb1\xed\x85\x62J\xeb\xd0\x91\x11\xd5\xc7\xdd\x37\x82\x9b\xd6" "X\xc\xd2\xae\xf6\xeb\x31:d\x18\x61\xa0j]?\x8d\xde\x18\x13\xa8N2n\xab\xfc\xbc=\xbd" "\xcbz#l\xf5\x35\xd8X*\xbd\x94}N&\x7f\xeb\x98\xc1\x81\x1e\x13\x45\xdd\xea\xa7=\xc" "\xd5\xeb\xe3\x8e\xb7h\xa7\xd5\xfa\x7\xd5\x8\xbf?c\x14&\xac\xc8#\xfW#95GF\xff\xf4" "\x5\x37\x82?\xd1)\x12x\xdesl\xc2\xde\xc5\x8\x4\x65\xd1\xb1\x88\x88\x1d\xa6\x1cr\xfe" "\xe6\x65\xf1\x14];\x14(\xb9\x92@Gb&\xb0x\x1f\xae\xee>\x1f\x1b]\xd4\xa5\x5ug\x8b\xba" "\xb5*\xbe\x30\x39\x9e\xb4j\xe4\xa5\xab\xea\xa6\x4\xe1!\xcxVkX3\x82\x11\x62<\xb5\xd6" "\xa5/\xbb\x86\xb3/\xdd\x9byV\xbc\x8\x44\x38\x34q>\xb5\xd4\x11\xcd\xeb\x19\x17\xa4" "%&\xbdS.\x1b,\x9d:\xd9TC;\xe9'\xd3\x32s\xe2\x1e)\xd2\x95\x93\xee\xb8\x96\x8\x16\xf3" "\xc3\r\xeb\xa2\xac\x17?\xe4\xb6\xdf\xd1\x93@\xad\x18\x44[i\xf7'\x7f\xd2\xd5\r\x45" "c\xf4\xfa\xa9\x97\x62\x66%\xdf~S\x90v\xa7\x34\xbd>\xa3\x2\xa8\xc6^}L`t\xdf?\xee\xd3" "\xdc\x1e\xfc\xe8=\xd4\x1e\x7f\xa1\xc6\x88\xdb\x10\x8e\x6'n \x8f(\x12" "\xf6\x7f\xd3\x38j\xa4\xaf\xd2\xaa\x6\x98\x9d\xc8\xf0M@\xbbh/\xe7\x93$\xb1\xae\xc1" "\xb9j^LKG\x93Xe\x16\xdex\xc8\xfd\xf1\xfc\x8a\xc3\xb5\x8c)\x13If\xe3x\xe0\x83\"\xfb" "\x9f\x89\x8b\x5q\x8a\x3[`\xe\xcb\x9a\x8e\x85\xc5\xf3j?e\x8\xf1R\xf7\xa8\x8f#\xb8" "D\xaa\x86\x34\xfbk\xac\xd6\xadv+J\xd1z\x86.\xcd\x8f\\\x9cY:h\x9a\xbc\x2\xb5v\x99" ".\xd4\x81\x45\x2\xdc\x62\xb4\xdd\x36.S$\xf1\xbc\xc2\xfa&\xe4\xcc\xfa\xaf\xfa\x80" "t\xf7\xcb(-\xaa\xa0\x91\x66\x32\xa8\xd2\x15R\x82\x33\xbb\xe1\xb0\x9\xaf\x11\x64\x99" "7\x7\xdc\xe5\xb4]\xc7\xb3\xd8\x99\x65[\x95\x46o\xce\x4\xcf\xca\x17\xd4\xa3=\xb2\xf9" "\xbcq\x16KOK\xc1\xbc\x63W\x11#6\x16/\xfc`\x6\x46\x4-:9C\x8d\xbe\xa6\x3+c\xba\xcb" "\x9a\xe1I\xb7\xd5\x8\xad\xf6\xab\xcf\xc5\xb0\xaa\xf2\x90\xcl\xe\xc7\x80\x64\x1e\x8c" "+`\x8d\x98\x32\xb3{\xaa\x11\x4\x32\x11\x65\xcd\x64\xb8\x31\x8e\x45\xe0\xf7\x8l\xeb" "\x13\xca\x18\xb7\x82\x63\xf7\x4)GN.e\xcf]\xab\xb1\xe8\x1a\xf6\xfb\xf4MT\xa2\xca\xb9" "n\x83\xff\xb4\x12\x9d\xf0\x44,~\xef\xf0\xe3\x95-\xd6\x97\xb8\x33!\x8\x14\x8b\x92" "x\xc8,0\x95\x35\x66\xe5\xb9\xba\xa0\xdb\xc7`\x81\x8b\xb0?\x7f\xd9\x5\x8vZg\x1c\x9" "\x83\x13N\xc9%\x11\x8M\xd7\x46~u\xa3\xef\x38\\z\x93\xc5\x92\xec\x98\x39\xf9T\x80" "\x96\xbf``8\x2\x87\xcdi\rqDR\xd9\xa6\x7f\xdb\xed\xa0\x63\x13YS\xf5\x44\xd9\xf3\"" "\xf5\x9b\x65s\xb9\xd9\x30\xf0w\x0\r\xbf\x11YU\xfb}[h\x84\x38\xa9\xddT\xcc\x81$'\xc8" "\xd1\x66\xe0\x30\x65\x92\xfa\xb9+lYK&\x14O?nl\xd5\xe4\x45\xb\xb5\xf3q\xcf-G\xfe\x93" "2w\xf1\xca\x65\xa9\x8\x12\xb4\xc6\xf5\xbb\x42NDT\xed\xa5\xee\xd3\x34\xd5w&{k\xdb" "E\xd4$X\x2\xd8\xae\x38\xca#|\x87'\xab\x8d\x44\x66W\x81\x1dx\xf2\x3\x94\xfb\x0\xf2" "L/\x91L~\xbf\x42!\xf4\xe5\xf6\xf5\xb1\xe7\xfbM\xd2\x1a\xa3\x42\xf\x9e\x8dU\\\xb1" ")T2\x86\xf5\x9c\xaf\x43\xb1\x32\x1e\xc6\x63\x95\x5\xb7\x1e\x35\xc6I,\xf3\x14\xfa" "\xf2\xb0\x89q\x6|\x13\xe8\x82j2\xe5\x96\xe7\x9b\xef\x30\xfd\x1c\x62Vl\x81Z\x97\xe" "-IB\xca\x7f\x81\xcb\x1d\xc7>H$\xe1\xb<\xa4\xb3iy\xd7h\x91\x93\x95|/\xb0\xf7\xc=~" "\xbd\xe5#w.\x3\x1a\x91\xb0\x97\x7:'\x8c\x84\xd6\xa4\xb1YG\x91\xb7\xc4\x44\xdbj>\xc4" "H\xb7\xf7\x33\x9bW&\xb3\x84\xc6TW\r\xbW\xef>:6!\xb7\x30\xc7\x9fp@\n\xd2&\x8f\r\n" "=\xd6\x61\xe4\xc5\xfe\xd6\xe8\xad\x12\x38\x33RjHd\xe9{9xK\x8\x35o\r\x96\x1e\x80\xc" "0L\x84\xb6\xd6\xf5\x4^\xf3*Y\xac\x88&\xb\xa4\x1b\xa6\"\xad-\xbb\xe1\xbf\xaf\xd2x" "r\x96*\x1d\x9e\xa3\xf5\xa2\x1d\x1e\xb8\xa1,\xbb\x1aID\xa5\xff\xfaZ\xad\xa1\x6\xa6" "\x7f\xd4)\xc8w\xe9r!\xb1\x42\xda\x8e$\xd9\xe5IC\xd6%%\xe5\xe\xfaw\\a\xf6\xcc\xe5" "\xfe!%\xf8\x1b\x9f\xf1\xe4\xce\x15Y\"\xd5~\x9f\xde\xf4\xe5\x10)/\xb8\x1eR\xfc\x1b" " \xa3\xee\xed\x82Q\x3(U\xea\xa4\xf5\x7H\x2\xf0\xc3\x8d(N\xe2\xeb}\xccm\xa8\x88\xd0" "\x11/5\xda'\x9d\x1f\r\xe1\\SF\xaa\x2o\x1f\xfb\xe9\x8c\x5K,7\xe9\xbd\x33\x39\xce)" "\xb4\xe\x36\x98\x33~\x96\x9\r\x3ZT\x8b\xa2)\xc8\xab\xf6\xec&[\xf5\x9e-c\xaa\xe9\x1" "\x1ax\xbf>\x99O6\xdf\xf\xca\xadm\xa5\x64$\r\xbbI\xd2O\xc2\x45\xba%I\x2K@O\xc6\xa9" "\xff\x16\x9\x45\x2P\x8r\xb4\x97^U\xd7\xe7\x7f\xa3\xca\xc5\xa1_\xc3\xcb\xb1\xe6\x14" "\x18\xf6r[\xddx\x83\x65\x92\x43Q\x1f\x94\x86\nm\xc\xa1\x3Z\xe4\x39\x9d\xe1\x97+\xab" "w*\x86*\xd7\x14\x8b\xea\xb3!\xcc^\x9eq\xca\xafZ\x17\xd5\xcdL\x7\xc6\xb3\x39\xdbY" "\x1a\xa3R/\xcc\x19\xae\xd6s\x12\xed\x35i\xa6\xfe\x87m\x9\x96\xbf\xf7\xf9_K\x7f\xda" "~\xd8\x33\xab=EeMT\xc8\xa3\x98\xd2|>\xe7\x9a\xb7|\xaf>:2L\xc\xd6s\x9c\x38\x96t\x6" "J\r\xeb\xe8{\xde\xdc\x88\xc8\xc8)\x95\x32\xc5\x94\x3V\xe6YI`\x8a\xe0\x1d'\xc8\x15" "\xb5\xda\xb3\x9aU\x9b\x99\x95!N\xb3I.6\xb0\xf4\xda\x4\x5\x1e\xe4\xaf\xc4\x3]'\xb9" "G\x93\x96\x11l\"\x15\x5<\xf8\xd9\xf5\x1f\x85\xf9\x35\xedr\xa7\xdc\x43\x11\xe\x80" ">\x1e\x8d\xac\x83\xe\x30<\x1\xaaM\x1a\x9d\x38\xf3U\x3qp\xa7\x8e\xa2\x1a\xca\x42m" "\xb4\xbc\x12\xde\xab\x80\xe2\\n1\x8b\xcf\x19\x1a\xdfR\xf\xe6\xb0\xbb\xf\x2\x1dwz" "\xd1\x8c\x87\xc9\x82\x6\xbf\xad\xcd\x31h~\nqSL\xa5\x62\xa0j\x98\xadl\xc1\xbc\x92" "\x83\xe4\x9c\xde\x80\x9f\x17\x10\xbd\xec\x90\xe9\x6\xa6\xb8mL\x1d\x88|\x97v9\x1b" "\xb3\x7\x93v\x96\xaa\x8b&D\x13$\xa2(/<]G7\xefy\x92\x5\xcc\xeb\xe2\x80p <\xf1#(sO" "\xa3\",\xdan#\xaa\xc2m\xb5'\xc2\x9c\xaa+\x98z\xc3\xc2\xc5\x87\xf0\x63\xa2x\x98V\xe" "\xd8\xf\x8f}z\x1cK#\xfa\xb3\xa7\xf4%\xeb\x85\xde\x8e\xf7(7\xed\xef\x96\x18\xad\x41" "\xda\xaet X\xa6r\xc3\xfd\x31p\x6\x1\x11'\xd2\x86\x90\xf8\xe;d\x96\xe4x^V\x92\xff" "N\xf5\x97\x30\xe9[\x92\xd4\xc\x38Ujf\x1e\xd4\xf0w\xf9\x1f\xff\xe\x8ci>\xf6\x8f\x0" "\xc7\xc9\x16\xdf\x1c-\x17I\xdc\x63\x45t'\xd9\xd6\xd6\xec\xec@<\xa6\xe\xf3\xae\x43" "Ms\xeb\xf8q\xaf\xfeRe\xef\xeb\x93'\x8c\x30\xcc\x96\x9bgY\xcc\x3\xc\xbd\xfc\x36tH" "\xeb\x7f\xe9\xd1\x91\x8c\xd1\xa5\x16u\xfe>\xcc\xc9\x86I)\xb1\xe2\xacY-\xa5\xa7Hu" "-\x3\x1d\xca(s\xbd\xbc<\xdd[\x83\x5*9G\xa2\xesb\x15\x7\xe4OR|\xed~\xf1\x88\x13r;" "\xecv\x8c\x97S\x9c\xc3\x1cq\xe7\x1\x37/\xde\xb0\xd0\xez\x99\xd3,\xfs\x1dt\xfbO\xae" "\xabn\xc5\xd3\xae\xf8T\xf1\x18\x14\x1c\xe7\x15\xb9zP\x8b\xecNg\xf7\x35\xde\xb8\xd4" "\xd5`\xb8\xbe\x62j\xa8\xd1\x86\xfc\xd7\x11\x7f\xccs\x85\xa6\xea\x84\xe3i%\x8\xd4" ")\xc6%\x85w\xd0\x87\x7\x1f}\xe\xc2\x17\xa3\x85,\x82\xe3\xcf\xda\xfb\x62\xbag\x9a" "MMn}\xca\xc2ON\xcb\xb3_\x1e\x81@J9\xfd\xb2s\xb6\xe0\x8fQ\xe7\xd3\x85\xf1\xea\x0\x13" "h\xa8\xcepJ\xe1\xc3\x14\xd7\x9e\x11\xbe:\xfa\xf3\x8c\x14\x65\x93\x1bP\xeo\x8bMM2" "\xf2\xf7\xc0\x2\x31\x9d\x0\x8\x66i\x19P\x8b\x1b\xc5\x86\x8b_\x93#\xd9\x93\xee\x8f" "~+\xfc\xb7Os\x81\xe7\x31;o\xf5\xb7\xa3q8 \xd6\x15\xba\x8a\xe4\xc8xs\xdc\x9aW\x3\x44" "\xfek\xb2\x0\xf2#\xf2\xf5:\xd5\xfe\xdc\xb1\x96\xe\x83\xd0\x16\x93=\xcd\xcd\xbe\xb2" "\xf2\xe0z\xb4\x2\x41\x14\xdb\xc1\xd9\xbf\xad\xa2s0q=\xf7\x5Hg\xcX\x91\x99W\xcb\xdf" "\xc0\xc4M\x83\x96\xd6\x1fk2\xd2\xee\x14\x1c\xe5\x45\xcc\xf3*\xba]\xf5z\x15\x13\xc9" "=\x1d]\xe4\xf6\xeb\xc4\x8fg\xfd\x1\xb5\xfe\xc1\xbf\x8dr\x9b\x1\xaf\xf0\xf5\xce\x83" "\xf4\xf6\\H\xecT\x9f\xe9\x42r\x2\x39\xa1\xb5\"\xe3\x9c\xa1\xb2-z\x8e\x19\xc1\xe6" "\xa8\xea\xa1\xb8O\xa8\xe9}:\x4\x8c\xb\x9f\xb4\x33\xaf\xcb\xfb\x10\xf0\x15\x9cg\xd4" "\xab~\xca\x6JHC\xc8\\\x38\x81\x12\xde;\xdc\x8a\x94\x1cWO\x84~\xe3/r\x5g.\xf5\x93" "b\x3\xba\xeb\xdc\xcb\xf\xe3K\xc9\xcf\xed\x62\x11)w\xb0\xed\xac\x8M!'{\xc7\xc1\x44" "\xcd?\xcN\xe7jd\xbb\x89\xeb\xa1\xf7\xc8,C\x9y\xdf\xedp\x9dsv\x96\xd0\xf3\xf1H\xeb" "\x92\xe3\x13-cA\x96\x12\xf8\x9e\x63\x10&\xc\x95^1[r}*\xe2\x38\x90\xad\xfb\xf1\xac" "f|\x11\xe7\x99g\xa7\x9f\x65\xec\xa6\xe7-\x8a\x0\x36T\x6u\x1c\x31\x8bv\x96JQ\x9a\x81" "RwlSY\xd6\x96\x12^cLq\xf8J\x9b\xe9HTW\xe0\x80&\xd1z\x80mH\x87\x96\xc1\xd5h!\xb\xcc" "\x96\xe7}\xc1\x13Z\xa9Wt\r}/\x87\xc6\x66\x63\xe9S1n\x16\xc3y\xb\xa7 \xa4\xf6\xbd" "\x8b\x37\xdf\x4\xc8\xe\xae\x2nSk\xa2\xf\x98\xe0H\xef\xa3\xd6/\r\xf1l\xd6\xc0\xb3" "\x88\xed\x6\xa2\x38h\x8cZ\xdd'}\xeb_~\xbg\x9c\r_\xe0.\x9cG\xf7K\xbd\xb2<\xb1-\x80" "\x1c\xed\xdc'\xf7\x16\x1c%\x1H\x17\x41\xf2\xb)9eh\x14\xff`\xdf\x15h\xc4\xb1]e\x1f" "\xa8\xb7 LT\x14\xadK\xa5\xd4j\x88o\xc7\x62\xff\x41\xa9\x3\xfdV3W\xdb\xf8\xce\x31" "/\xc2\x18\x61+\x19n\x7f\x63\x9d\xabm\xbf,A\xa3?E\xdf\x66\x84\xd3\xdc-}\xe9\x98(\xe" "\x9c\x19\x9e\x8c\xb6\xe2\x19\xf4\xb9Yd\xcfIk\x95\x66\x41\x9a\xaf\xbe\n'\xbd\xbd\x39" "\xed_\xd5\xc5~\x7\xc0\x13\x12\x87[\xea\xed\xd9H\xaa\xef\x9\x32\xe2\xcf\x94|\xc6\xf4" "\xf0,g\x17\xde\xbf\x90\x30\xee\xa1\x8e\x61\xe7\x97o\x1a\x96n\xf3L, \x10\x98\x35\xf9" "n3;\x4\xae\xc0}\xa2UN\xd1\x92\xfb\x7\x87\x33k=\\1T\xca\x1ft\xad\xa0K\x94\xa5\x9d" "n\xf\x63\xaa\xa3\x41\x3&^\x8e\x8b\x92\xc1_\xc9\x1a\xe1w1[v\x8c\xb4\x88\xa0\x18h\xf8" "dr\x11N\xba\x84\x93!\xe2\x10Te\xe7\xb0\xab\xb3\x87\xaf\x96\x6y]\x0\xc7P8\xc4\xe0" ";\x9c=c\x9c`\xe8\xc7\xfd\xc5\xa2?\x96\xbe\x99&\xff\xe3N+\xcd\xe9\x1d\xf7\x94\xe4" "\xd8\xd0}\xba\xec\xf3y\x7f\xae\xe5\x91y\x7\xddL\x14\x1a\x19\xcdO9\xc5\xd6\xe0u\x93" "p3\x9a\xae\xb8w\xb3\xfc\xf2\xb7\x33\"\xcf\xf3\xe0S\xbe\x86\xe5Y\xb3}\"\xe5\x87\x66" "\xbb\x35W\x88'\xf\xb5\x66\xfa\xcd\xc8\x9e\xb1\xe5\x87\x8c\xf3yZ\x5\x14\xfb\xcb(E" "\xb3\x8f\x8ei\x16\xd6\x16L\x16\xe1\x38V'[\xf1\x9c}\xc\xba\xc9\xdc\x1\xd1Qv+\xf3\x9c" "~\x18K\xfdvR\x92l\x10M\xdbz\x8e\x33\xac]\x3\xc8\x4\x9eo!\xd3\xefL\xe7\xde\xef\x0" "\xa8\x86\x14\xab\x39\x42\xd0W\x94\xea\xae\x38\xbc\x8\x8e~\xa8\\\xc\x8c\xe5\xa1\xaa" "\x4\x8\x9eTD\xd7\x2\x82x\xb0\x9b\xff\x9f\xeft\x11\xa6=\xba\xdf\x64\x89\xc1\xfa\xc8" "\xbd|4\xb6\x98HO\xee\xedi9\x8a\xbb\"K\xe0\x42\x1c\xb0,\x0\x9f\x11\xf\x9f?\xfc\x7" "\xea\xac\xbc\x96V\xaa\xfb\xfa\x0\xf3\xa9$K\xa8\xa6\x87\x1cl%+\xa5\xfd\x99\x91\x39" "\xa2\xceN\xf9\x18\xcd\x92\xe\x32\x84\x8d\x37\xb8\xf2\x62\xe5\xaa\x90\\\x16\x8b\xec" "\x82V\xf0P\xdb:\x83=\x95\x97Z\xce*\x94\x1b\x65\xd5\xb1\x7R>CJg\xad[\x16=\xc2\xcd" "\x9\xe5\\U7\xb0\xc3\x1f[,\x19\x37\x61\xeb\xc6:9\xac\x19,\xb4\x8c\xd1Vl/\xdc\xf2." "\xb7lj\x17olH\xeb\x95\xd2\x15\x30\x38\xed\x62\x8a\x8d\xa6/\x98\xe5\xde:\x99\xc3\xdb" "*\x90\x80\x43@QF\xc8\xe0\x15 S\x15\x80O\x93\x91\xff\xfa\x8a}\xf6\xc9\xdf\x13\x46" "\x98\xf8\xf7\xb0[\xc1\xa2\x38\xc8\x1c?.2\xd0<\xe0\x9c\xf7\xe2\x88\x64\xc1\x9d\xe9" "r\x19\x66\x17\xa8\xcbM\xff \xfb-\x96\xc8\xf9\x96\xfa\xb6\xf0\x1c\x13\xff\x45\x0}" "\xbT}.\xa1n\xa9\x81\r\"\xf6\xdb\\\x9e\x9f\xc\xdf\x32\x3\xb\xaf\xa1\x95\xe1\x34\xce" "b>k\\\xe0L#\x89\xd1\xaa\x32\x13\xa3\x8cy\xd7\xe0\xca?\x81\x34\x4\x87\xc4\xe4\xf4" "\x7f\xcf\x7f\xe\x4_\n\xeQJUNB\x96\x8b\x99\x89\x30\xd7\x64{\xe4\xd2\xecx\xb0\xdb\xb4" "\xd4\x92\xba\x4\xfc\x36\xe5\xd7TO\xfa\xfe\x42\xea\x45\xa6\x91\x34\xf9l\xd4#\x86\xc2" "4\xa9\xe6\xfaT\xeev5\xd0\x1c\xf1~\x92\xb2\x8e\x8p\xd6\xdaQp\x96uX()7\x1dK\x15\xef" "\x4\x85.\x96\x64\x88R\xfdp{@\xed\xef\x1d\xda\x30\xda\x95\xb5\xa2NIt\xc+\r\x84\x80" "\xe0\xea{`\x9eo\xc3\x90\x14\x1c\x18\x33\x38\xe5\x39\xe6\x9e\x19\x95\xb6\xb2\xbc\x93" "E\xc0\x9d\x94QX$\x1dU\xac\xfc\xc1\xdb\x35\xc6\xe1N\xf1\xe2\xfa\xf5:\x94\x38\xe0\xb1" "\x8a\xf4\x11K\x94]5\xf5M\xc1\xd1\x9c\xa9\x1\xe8;\x99I\xd0U\x8dY\xd0j\xe2\xc9\x99" "\xc1\xb5\xc8\xbd\xb\x1e\xd7\x45\xc4\xe\xc9\x11\xf0\x41/\x9b\xfa\x90\x87\xc2\x1\x39" "\x1\x9e\x61\xf6\xa9g!s\xc3\xa9Hh\x17\xcd#\xfd\xdd\xff\xb2,\xe\xad)\x15\x80\x39\xb4" "\xc7'n\xcb\"\x80\xaf\xe8\x11>\xc2\xfb\\\x1fu\xe8\x3\x87\x19\x6\xf2\x87\xa7\xc5\xc1" "0\xab\xa6\x36\x81(\x1e\xce\x9f\xb5\xb5Q\xcf\x19\xbeO2{a\x86\xba\xb9\xacx\x12\xb5" "\x6\r\xfa\x1c\\\xba\xfc\xe\xc9\xfd\xfd\xf7\xfc\x65\xa1\x31`\xb8K!\xf0\xa7s\xf0\x9" "\x8f\x83\xe8\xb4\x1b\xcc\xa9`\xd1)\x95\x83\x8c\xfb\x8f:\xe1;\x86\xe7v\xd1q\xc5\xc" "?A\x81\x84\x7pUR\xb6\xf6\xc0\x8b\xb1\xe2\xaeK\xc1s\xed\xc2\n\xf6\x82l\x95\xf1\x46" "\x8a\x38,\x8aik?\xd4\x34\xfd\xe1\x32\x9b\x7f\xc5Ri9\xe2?*b\x2 !\x13\x66t~7\xa4\xcb" "L\xbf\xe7\x1d\xbf\x31Ws\x11\x9coW\x4\xce\x63I0??j[\x1a(\xa8\xc3\x61\x61:\x2\x85r" "\xd6\x1a\xfa\xb8\xb2\xb2\x1\x8a:/\x86\xd5\xbd\xad\x8c-g5\x9f\x8f\xf6\xe0X\x7\xbe" "T\xa5\x86w\xaaU\x96\x8e\xba\xe8\xae\x92\xbd\xc1\xe8\xda{-\x17\x13~\xff\xb5\x1d\xa2" "\xd2\x1bY\xc6'\x12\n*\xe4\x61\x41\xe9k3\xd6\x31\xc5`\xd1\x9d\xef\x8co\xcb\xdd\xf3" "2a_*\x97\xd3\xf6`\xee#0\xc7\x9eK\xfaMw u\xe1\xa0\xb3sA\x18\xe4}4\xe1\x96_\x92\xa5" "\xaf\x37;\xb0\xe5\xf9\xc\xbc\xf7\xb0.\x1b\xd6,\xbeW\\i\x9a\"\xaf\x3\x5\xa3\xb]#q" "~\xcc^E\xb1u_\xb7x\xf\xc5@\xcd\xac\x33\xc\xab\xe4|\x15-t\xa9\xa6\ni\xc4\xac\xb5\x85" "\xe4SxC\xde}\xbb\x5\xd1\xa4mE\xf0\xb8\xea\x62\xa8J\xc5\xb5\xb1q\x9c|\x7f(\xd3iE\x9b" "e\xcd\"G\x8e\n\x63\xf7\x8f\x34`B\x1e\x4{-\xcf\xf\xb6\xacI\xe1\xc4;\x15\xdf\xa9\xed" "\xe+\x85\xba\x80\x1e\xd6,\x87\xff,uJw\x98\xe9\x7|\xf3+\xdb\xae\xaf\xfc\x16t\xf3S" "]\xabI\xe \xab\xeb\x42\xcav\xc7\xbf\xcb\x8e{\xcb\x1f#X/#\x2\xd4\xa4\x1f_\x9c\xbf" "\xe8TGJ\xdf\x84W\x8b\xcb\xa5\x9al1m\x1b\xfcq\xca\xb3\xf7\xcdO\x81\xd3\xd3:\x6\x35" "t>\xa0\x9c&\xb9\x1fz\xed\x88\xd7\xb7U\x99,\x10\x16\x34\x13\x17\xff\x96\xeb\x8a\xf0" "\xf9\x39g\xb5\xa7\x41\xb2R\xf7\xcb\xa2\x66\x0\x18\x6\xa7\xf4\xfeJ\xf5\x9d\x4;\xe0" "\"\xb0\x8ai\xe8\x64\x38\xabnZ\xc3\xca\x92\xc0\x65\xa0\xc6\xea\\\xc6\xa7\x94\xf7\xfd" "\x7fQX\n]\x1a@&^\x80.\x97\xf3\xa1\x83\"\xe9\xb\x9c\xa1 F,\xa3\xe1\xf7J\xa6\xec.\x11" "\x96\xd0$\xa9\x10!9H#7\xe5\xc6\x86g\xc0\xdd\xa5u\x1b\x0\x10\x13^n_&;@\x2\xf0\xfc" "\x8a\x92\xe4{\xb3\x8c\xe4{\xaf\x8d#\xbf\x18^\xf5\x10-\x9cv\x16\x9Pg9\xb2\x5R\xcb" "i\xeM\x9dkDRn$`\x92\xed\x1c\xbb\xef\x64\xfd\xb0K<`\xb1\xd0\x9e_w\xad]\xbr\xfa\x36" "\xeb\xb5\x31\x17\x63\xec\x10\x38L\x94\xb3\xc7ln\xa4\xf6\xf9\x36\xb0I\xcc\x83l\x97" "X\xdf/\xa6\xfc\x14\x62\xb7Gb$\xf\xe3\xd5\xfZ\xe2\xd4\xcao\xed\x66q\x82\x81\xb3\x9c" "l\":\x85\x9b\x62(\x91]?Q\x92>\xeeW\xf6\x1at\x8e\x1\xe3w\xd9NT@\x83MQD\x9f\xd2\xbc" "\xad\xeb\x11\x9bq\x1e\xb6\xfd`\xbz\x95z\x8c_\x97\x8d\xb6\x9d\xe9\x8a\x9c\xda\xfe" "?\xa9\xf2\x63\xac\xb3\x14\x80\xc/\x16\xdfm\xe1\xa8\x19t\xcd\x32O\xd1\x81\xc8o\xfd" "\x91\xde\x43\x93\xa9\xe0\x8V}\x5\xd2\x92\xc5\xf3\xaf\x80H\x88\xd5%\x9HM\xba\xa0\x18" "\x14\xda\xb0\x82\x1b\xbc\x82\xd4*u\x9f\xb7\xf3\xc5v\x8e\xa5\x18\xf8\x34;\xcc$\xb3" "\xb4-\x84\x95\xb1\xe\x93\x98\x38\x33o[_\xf5q]\x4\x9b\x90\\\x89|\xebX\xe2\xd0\xe0" "F\xf4Q\xb7Rf\xdf\x15-\x96\xb8\xf4L\xad\xf6\xb3*\xcci/~}\x18\xd1#\xd5\x8a\x2\xe4M" "\xf5\xb6\xaa\\\xcf\xe8\xef\xf\x83K\xe4\xd5\xec^\xf6\x18M'\xe6\xec\xf3\xbf\x30\x95" "[\xe3\x9f?\xed\xb6\x8\xc1x\xb9\xcf\xc7\xf5\x97\x39\xf2ns\x18\xc8\xaf\x7f\xe1\x1b" "\x9d\xa1\xb\x34,\xa9\xa5\xf8\x41\x1\x4\x98i@R\xb5\xb5\x95\xc4<\x88\xd2\xec\x32\xb4" "f\xd2\x1c\x9b/\xb1\xb6\xf2\x1b\x1a\x80\xbbh\xb9N\xd8\x17\x7\x38Vb\nx\x95\x9\xbf\x9a" "\xfc\xa6\xd4\x61\xf7\xdbz\xc2\"\xbfOuC\x1cP^E\x14\x9\xf0X\x14<\xce\x19P\xfc\xaf\x45" "\xa1\xcb\x99\xde\x9b\x34\x9\x64\xf1*b\xfd\x11\xa7T\xf\x82\x32\xbc\x7fvY\xf1\xb8\xd6" "s\xc9\xebX\x5\xd5\x30(^h\xc7Ia\xfevu]\xa7\x1b\xa1\x31\xdf\x30_\xc5\xfb\xf5\\\xb$" "\x99\xe\x12\x1\x91\xb1\x33~\xf7\x3\xe6\xfc[f\x99\x80\xf7\xb3\xe1\x82*\xf9\xa3l'\xc3" "\x8b\x43\xd9TN\xa8tj\n\x90S)l\x8d\"o5\xa9\xfHc\xad[$\xd1=\x80\xaa\xda\xe\xc3K{\x9c" "\x98\xd6\xc9\xbe\xbd\x1.z\xaa\x63\xa6\xff>\x93H\xd6\xea\xa6\x81x\xfe\xcf\xa0:55 " "c}E\xbb\xc8\xe7!\xc1^\xf9^\xb7\x90O\xbbQe!\x18\xac\xd7\xbc\x62\xd2\xbe\xbe\xb1\xf7" "\xb1\xff\x17\x87J\xa7\xcc\xcd\x7f\x9a\x64\x90q\xb4\x65\xe\x99\x46\x32\xf1\xa9Q#$" "\xbb\xd1\xe3\x1\xb9\xb3\xb6\x10x\xae\x5\xa7-\xd1 \x1\xf8l\xa9\x31S\xde\xfb\xbct\xd5" "V\xad\xe5r\"h\xfd\x35\x15[\x12J\x98\x99\x93\x14\x17<\xda\xd8\xa6gz\x90\xe5\xdc\xa3" "\x9bIali\x9a\x30V\xf1\x9b\xac\xa4\x63i\xce\xacN\xd9JwfNS*\xdd\xacH\x83\xf5\x17\xb5" "\xc3\xfe\x89\xa0\xa9\xc1\x94\x18\xafr\xd9V\xb2\xa2\x66\x0-\x6`\x95\xb7\xd5\xde)\x6" "\xf6-\\\r\x9d\xb5\x30\xac\xfb>[\xef\x8d{\x94$D8\xee:\xce\x34\n\x1\x17~\x8dR!dL\x14" "$\xfb\x87\x2\x17\r\xe9w\xbb\xac\xc1\xb1\x6\xe4,Ors\x18\xeO\x17\x1f\x82\x7f\x8a\xc8" "z\xc0\xdf\x39\xe2\x32\x16\xf9\x92\\\xa1\xa2\xed\x43/\xfc \xb7\xc7n:>y\x80\x9b\x0" "\xed\x30\x6/5W\xd0Pb\x10\xc4\xd9{\xc3\xd1\xf1\xc9:n-\xc3\x3\xf0\xe5\xea\xdb\xbc\xb3" "1\xe5zT\xcc\x87Q\xe2\xde\xcV\x4p\xa0 \xdd\x9e\xb8\x36\xe8\x9^\x1e\x4\xad\x36\xc\xd0" "\xf9\xdb\x94sp\x1f\xb1\x94\xb5]\xa0\x15\xbf\xb8\xed\xae\xf2!Y\xda\xc7\xb2w\x16}\xe5" "\\\n\xc8\x8fw\xb6\xf5}\x84\x8d\xab\x7f\xf9,\x16\xe1W=M\xc2\xfc\xa7\xaeLx\xb5\x9\x97" "\xe5\x1d\xf5\x96\xdc\xff\xf1\xe9\xc9\x91\xb9\xc8\xda\xa7+6h\xca\r\x34\xc2\x39\xc4" "\xfe\xe9\xc0\x80\xfe/\xb1\x8aQ\x80\x44\x80\x18I\x92\xa1\x17\x83\xf\xaa\x89\xc4J\xfd" "r\xb2\x39\xea\xb5\xb1\x1b\xc7\x88\x32\x0\xe9\xa3\x46\x66 \xb\x11\xa8\x8e\xa8v\x9d" "N\x95\xedG\x3\x82\xb4\x17\xaf\x88\x41\x9e)x=\x89\xd5n\x9d\x81N\x1a\x13\x95\xd3\xdc" "\xc3\x98\x41\xec&\x0\x9f\xe9\x2\x86\xc8\xd4\x82\x34\xf5\x8a{\x8f\xa8\xdf\xe9\x39" "\xd3`\xb3\x93\xdc\x88\x92j\xb1\x16\xc6\xa9\x2\x8\xe7If\x3]\x81\xdc\xc2&Ups\xf2\x84" "h\x7f\xce\x8U\xf2Xw\xe1\xe\x44wq\xe2\xcb\x8drk2[\x1a\xfbr\x82'=\xabOd\x82\xf8\xd5" "]\xf9\xc3\\\xdfi\xef\x9b\xe5\x65*`\xcd\xe\xbf\xe0\xc8\xf5\x1e\x9c\xc9>\xdb \xd0\xf" "\xa7\xa4\"\x7f\xb0\x64\xed\xc2\xb6\xbf\xa6\x8\xb8\xea\xc4\xfdhn-Z[F}\xfa\xb9K\x1e" "Cs<\xadhF\xd6\x87\xd1\x7\x7f\x82\xb3\x81N\n\xa4\xfy4\xeb\x65n\x87\xe0\x36\xb7\x66" "i@$\xab\xf1\x19lu\x8c\xeeI\xa7T\x83\x85\xe8\x30\x65v$\xf2\xc5\x35\x44\xc7Gh\xca\xbc" "w\xcc\xf0\xa3g\x9e\xf7\x1dK|\xb3\x1f\x82H\x84\xa1U\xb0\x10\xa9\xee\xd4I$\xf1\x43" "Qu\xc9(\xce\x3\xe9G\xad/\xe3\xd8\xb7&;\xc3\xb9\xda' `G\x98\xc9'\xd2\xc4\x89\r\xae" "\xfb<\x4\xdf\xc6\x64\xf7\x87\x8d\x3(\xd6%\xf0\x9a\xca\xc5m\x1b\x35\xb3)a\xba\xeM" "\xcf:\xf5\xda\xe6\x46\x1c\xf1\xe7\x44~\ry6\xbf\xf\x32\xfe\x9c'\xaf\x9b\x14-\x15n" "\xc0\xb8\xf4\x81\xb7\x80l\xca\xf3\xd8p\xbc\x37\xce\x15\xb4\xb9|\xc8&\xd5\xce\x9c" "\xa8\xc\x44\no\xdc\x9d\x19\xe8\x9e\xd2\xe4[\x8b\x93<\xb8$\xff\xf2T\x18\xd6r\xf3\xa0" "\x5\x8a\xf5\xcf\x98\xa3$C\x5\x5\xfc\xbb\x36\x84\xe6\xc0\xe1\x12?\x1awf0C\x8f\xb9" "P\xc6\xbf`\x1e/O \x89{\xd6\xb9\xc\x36\x61l\x93\xbfv:\x8b\x4[\xd0_:)\xe1\xef\x1f\x82" "\x88\r\x93>\x87\x36L\xf0N\xd3,\x19\x31J\xc6sk\xb2\x89\xb1g\x6U[\xbaS\x98\xcbx\x7" "z\x9eK\r\x12\x45\xfd~\xfXl\xbf-\xfa\x33\x10\x13\xe7\x7\xcf$\xf4\xddUw\xfa\x44\x16" "\x7f\xb3Q\xcf\x9b_nS\x8\x8eS\xc7\x2\x4=P\xd4\x83{'\x7K\x9b\xac\xd4\x5\xc9\x31\x91" "\x4\xc7}\xba\xc6\xaa\xcf\x8\xe\xc4\x91\xbe\xff\xc0\x65\x99\xde\\p\xc7l\x15\xef\xe3" "\xd3.[|@5p\xba\x41\xd2m\xbf\x9a\x1e\xd0\xa4\x85\xa8-\xdf|\xd6\x9\x36s\x1f\xb1\xc1" "\xec\xc6\x34\x92\x96+h_\xe8\xb2}\n\x15\x8\x99]\xf%\x66\x14\xa9+\xb0\xac'+\x19\x17" "\x80\xe6\xe6\x1c\xf3\xde\xbc\xac\x32\x61M\xff\xc0\xf1\x30\xfe\xfa\xce\xd5\xaf\xb5" "\x1e\x84\x44\x97l5\xd7\"\xe4\xfd\x1ap\xb7;q/\xc4ur~\xb1[\x1a\x1bk\xa9$\x80\xfa\x11" "\x12r\xa1\xd1\xd6\xa3\xb1\xd6\xb6ZJ\x90X\xef\x33\xab*\xce\xe7\x96\x13\xdd\x66\xea" "5\x9b\xdb\x6\x86\xb\xb1\xd3\xa2]\xb1\xe7\xd8\x8aR\x8g\xef\x1ap\x88\xf7j!\xa3\x11" "pD&\xf4\xb0\x38~2\x80&\xc9\x15\xcb\xf1x\xd2\xdf\xb1\x12\xbcl,\x1f\x38G\xc7$\x3\x94" "\xf3\xcf_\xde\x89\n\xc6\x2\x4\x8a\xe9\xa3t\xe4\xa6\x2Gk^\x15\xbb\xfeWJ_\x90\x9\x0" "\xbu,\xfa\xd5\xd2\x89k\x19\xaa\xddo\xc7<|^\x1e=\xe4\x95\x11N_~\x9b\xd6\x36\xe\xf8" "\xffq\xd3;r\xc8>\xe\x18\xa2\xc5\xab\x1c{\x89\xfd\xd8\x12\xb2\xd4\x39\x95\xe5\xef" "\x14\x8cq\xbdY\xcb\x86\x1\xeb\xae\xbci\xe4\xc7PMP\x9b\xc1\x87\x8fq\xfav\x5\xb5\x39" "NZ\xf\xbf\x93\xda\xf6T\x1ao<\xc3\xdbG*.M\x82Y\xad\x8e\x8f\xaf%\xdb;mg\x96S\xa7\xd1" "d\x1c\x11\xc0\x34w_`\xda\xcf`\xe0\xce\xf0\xb2\xb6\xe1*\xaa\xc5\xb1\x1f\xce\x42\xe8" "\xdb\n\xda\x33\xa4\x63\xd0:\xb3\x36SL\xe2L/\x89\x8c\xf8)\xc\x32[\xbc\xbduC\xbf\xf4" "~\x95\x9a\xfXh\x90\xd6\x6m\xbe\x99\x8b\xf7\xea\x84L\xf0\xdc$\xc\x88\x93HC\xff\xaf" "a,\xb8\xa2\xca\xce\xa4\xaa\x32O\xa2}\xb2\x7\x8d\xfc\xc4\x37\xdd\xee\x39\xa7\x0\x39" "J\xe0H\xfb-\xcf\x9b_\xc2\x1e\x89\x14\x64j\x7\x88\x99\x6\x63\xd7\xd8\x8bJ\xa2\xbc" "\xe8\x86[\x8b\x18\x37\xac\x30T\x93*'\xcdT?\xe3/\xfds\x92\xf3\xd9<\x14\xf5\xb5\x9e" " \x6Z\xeaq\x8c\x87}\x84\x46\x34\xc\x85\xb2\x9a\x32_\x9eh\xd8\xe8@?\xaf\x80\x38\xc0" "}\xfa\xc5\x4\xb6\xc0\x99\xe4\xd8k5\x80\xe5\x18\"\x19\xcfsp\x88\x18" "{\x15<;e.\xda\xdf\x37k<\xb8V\xd8\x9b\x45W\xc7\x19,n\xaf\x8c\x8f\xc>;\xe8\x43\n\xc9" "~\xf2\xd1\x8a\x15Z\xe8>H)\x15\x61(i\x17\x3\xdc~\x8bS9\x90\xc7\x81\x8G+i\x9f\xe8\xff" "\xd2\xdc#\xf\xcb\xe2\xe0\xaf'\x84|B\x94\x89\xb1\xd7\x1j[\xa0\x87\xbe\xef^M\xa1\xda" "\x18\xcd\xf0\xc4\x18\x33*\xbak\x7f\xd5\xb0\x13\xf3\xd5\"\xe4\x8d\r\x8a\x63m3P&\x87" "Y\xc6\xbe\xfa\xfd\xe5\x8ci[\xb2>\xcfN\xf8\x96\xd2\xba\xbe|\xbc\xb8\xe5\xf8\x93\xec" "sY\xac@\xc6(\\\x16\xfa\x32\x31tE\xb8\xb1r\xf7\xdbY\xf0\xbd\xf0\x16\xd8\x4\xac+\x7" "\x93M\xb8\xf9$\x8a\xdc\xc0\xb\xcb\xbdo\xcbh\xb2\x94\xc2\x94\xcb\xad_,@8\xe3\xb5\xfc" "\xe8\xfc\xae\xe5\x9f\xea\x64LM\xbd\x96\x89\x4Kq\xf7\x84\x2\x0\xa9\x89\xc6\xe8\\\xee" "\xa5\x61]\x6\x11Q\xf8\xc0s\xbeN\xb8\xb1\xc3\xee\xdbK`\xaf\x66\xa1)\xeb)\x19\xd9\x45" "\xa2KS\xe5:E\n{\xf3i\x0\xfc\x90\x1a\x64$\x86\xa4\xfe\x41\xb7\xd7I\xe2\x0\xdb\x17" "2\x1\x14M\x1d\xc3\x6\xb9v\x9\x33Y\xd7\xa8Z\xb3=\xc7\x98\xe1\x8d'k&\xad\x95\x84.\xb5" "V\x12?hV\".\x6\xe\xafL\rV\x90\x41\x41&<\xfe\x37K\xbc\x15\xb4\xaf\xf8$\x9d\x35\x83" "\x1b \xb3\xb0\x32\x86%\xc\xa1VB\x17\x1cK\xe9\xcb\x8ap\x88yP\x19\x9f\xa8\x43\x86X" "\xd3\xb4(\r\"\xa2\xe5\x38\xfc\x8c,\xd0L\x97\xc1\x65m\xa4.\x9e\x86\xf1\x8d\x1c\xc0" "0N\xef\xca\x7f?I\xcaP8\xb6\x1e\x38\x94\xd3\xb9\xfb\x81\x31\x4\x7f\x61\xbfz\xd6\xa6" "H#\xe\x95KJm\xa6\x61~\xaawv\xdd\xf0\xc1P\xe7\r\x1e\xd9{ZZ\xbb\x87\xfa\xf3Wx\xbc\x95" "\xa8\xec\xac\x9a\x9bSS,\xbc\xde\xb3\x44\x36\xeM\xa5\x61\x84\xbe\x96wC\xe6\xa4)\xc1" " \x4<\xf2&\xe2\x13r\xfe\x9a\xf0\xe6}\x96\x41\x85\xb8T\x1y\\\x98q\x1c\xf7\xba\x65" "1\xdak:\xf0(\xfc\xda\xc0\x1b\xa2V\xdes\xfc\x1b\xc7\x45jm\xe5}9P\xfam\xce\xe4\xcc" "\xc9\xa7\xdb\xc3\x9a\x65\x7\x1bu\"\xac\x91\x7$r\xe2\x8b\xb2\x99\xa1\xa4(\x85)F\x8b" "\x1bv\x1dI\xb4\x8\xd8`JN7\xaf\xdf\xb3\xf2\xabY\xe3m\xe3\xd9\xed\xe4\x30X\xc2\x98" "\x17K\xb0\x1\xb1\x80\xec\x0\xcd\x80\xa5\xddK\xc1\xe8\x1c>\x87\x9a\x66[\xb.\x3\xfe" ",c\xb1p\x8bx\xf6\xab\xefO\xbf\xa2\xd8\xc1\x6-3K\xe5\x65\xc1\xf3\x42<,\xea\xe0\x19" "\x82\xbaQze\xd8]}\xd1jG\xc3\x65\xc7SY)8\xe5\x7S5\x1dQ\x0y\x9f\x7\xfbgN\xe3}\x1b~" "\xc\xe3\x38\xde\xf6\x91\xde\x8\xa0\xeX\xee\x8d\x8aoY\xbe\x38\x3Wp\x1c\xcf\xb9\xaa" "{\x9f\xeNl\xed\xb1\x95\xeU\xbd\xf8\xd5>X\xdar\xe0\xf1g\x9c\x9\x8e\x99\x9cX\xa2\xb" "\xee\x86\xae\x90\xb0\xe9\x38\xbf\xd6X\x95Z>\xe7\x9b\xb8\x30\xa2\xf6\x9a\xad\xe4\xb1" "\"\x11o)\x12\xbb\xc\x7f\x87\xcd?\xb4\x8b\xe5\x16s&\xe1\xad\xda\x90gN\xcc{\xd3\x9d" "&\xd0Q\x82\x4\xc9>\xcf\x93\x11\x44\xc6\xe4Hi\x13Q\x13\x66\xe7\x64\xf4\x36>\xfa\xb9" "R\xbd\x6\x97\xbay/m`\xdd;\xa0\x90yf!~\xc9\x9\x8a}\xd2\xcb`]i88\xcf\x92?\x1b\x38I" "\xe1\x95\x9e\xbf\x3\xdc\xa7\xbL:\x11\xb0\xb7\xd7\x19\x35\xef#\xb9\xe5\xc8\x94\xce" "U\xeb\xc7\xa9\x10\xf2\xe1\xf2\xe4\x1e\xb2\xbf\xa6O\xb0\xaf\xc4\xc0\x2\xc6\xaa\x45" "\xc1\x3\xf\xfb\xe9\x8d\xef\xad\xfep\x9eZ[XS\xaa{\x9b\x13\x8d+Qq\xf2u\xdb\xcfV\x9c" "@&\xe\xf2\xbe\xdd\x64\xea]]d\xcaN\xf9[l\xf1\x8a\xb\x63\x95\x91\xc8\x83\x44\xd1\xc8" "/\xb0\xaf\xc3\x8f\xd9\x33\xda\x90\xd3\x83\xfe\xe2\xcb\xe9V``\xe2\xd6\xa9\x97\x65" "\xb1-\xb3\x82\\\xb0\x9i\x2\x9d\xdb=s\x96\x84\xdc\x1e\xa9\x9b:\xc7i(\xe3)\xe8\x1f" "+\x1f@\xfc\xdf\xe9k\x84\x1c\xfdx\xdf\xddx\xaa\x19\xff#\xf8\xa4\x98N\\l\x85\x88\xf2" "\xe0\xcb\x38\x63\x9d\xa2L\x19\x96\xd9M#\xca\xcc\xd6\x12s\xb1\xeX\xa4\xe2\xb\xab\xe1" "\x0\xe\xf0\xac\xb2\x9fH\x1e\x7\xe9\xe5\x80\x7f\x8b$|\xb5\x91\x85T'\xf1\x90\xd1W\xae" "Q\xcb\xe2n,\xe0\xed\x85\x36[7k\xb/\x93\xfa\xb2\xddI\xa3\xa7\x1\xd5VWw=H\xae\xbe\xd5" "\xf3\x96t\x92\x18\x9e\x16'\xdc&\xc1GaN\xb0JK\xe2\x85\x82\x2%\xdb&\xbe\xe5\xefm\x1e" "\xdd\xe9\x1a\x11\x85\x11r\xd9ke\x7fP\x96\xb9,\xa9>'}\n\x91\xea\x35\x8d\x8f\x8b\x80" "\xcb\xe1\xf4.s\x9b\x64\x85\xed\x81\x61\xc4;>^\x10\x64\"\x89\xeO\xb5M\x91\xf9\xfc" "\x4\x34\xc7\xf5\xce\x87\xf6%\xb7\xfc\x33\x9f\x8a\x10\xde\xd6\xee\x1e\xc5nU\xde\xaf" "6\xb6u\x11Y\x8e\xc6\xc5\x37\xc5\xf\\T\x6\x14\xdd\x88!'=I\x1f\x1\xa2\x3\xc3\xb0\xe" "2&\"\x92\xa9\x1c\r)\x9\x35\x9b\xec\x38\xd1\x33\x95\x92\x90\xa9\x38\xd9G\x81\x33Y" "\xee\x36$\x9fy\xbf^\xc3\xabI\xb4\xbl\x17h\xa9\xb\x11\xfnN\x14\x1e\xeb\x1d\x14\xdc" "\x4o\x8b\xc\xa3\xe\xd5\xec\xccSz\x85\xbb?\x6\x37\xa7\x43\xc3\x34\xf9V\xf7\x35H\xc3" "\xa3yS\xfd\x88\xf9x\xe4\xc9<0}\xdcLg\xaeIx\xa4\xc0g\xa1\xc1\x7\xeck\nT\xce\x3*vN" "\xc5\x1c\xb2\x93\x8c\xc8\x37\xab\xc\xcc\xe2\xe\xab\xa3\x1e/\xcb\xafjw?\xf6\x1a\x34" "\x80\x1d\x4\xf1$/\xf3!\x88\xb6]:=\x9a\xa6y\xd9\xce{L2\x9a}\xf5P\xaa\xb5MG\xe2\xa9" "/FL\xe4\xc6\xb7p\xe4 \x16\x30\x3\xb6\x80\x85W>C:L\xb8\xc6\x6\x11\xf3\xac\xfeGu\x9b" "A<\xd6\x8c=\xc9\x18\x90\xc8 w\x1f.\x8a\xcf\xd0\x9a*O,\xb0Lt\xb2\x90]\xch\xe0)u\xf" "\xbe\"\xd4\xed\x7\x97\x33`Mj\x7fY\x4\xd2\x30\x14\xf8\x18H\x8b\xfd\xb\xd5\x8c<6fa" "\xa0\x8c\x80\xa4\x8aO\xff\xd9L\x16\xf4M((\x17[\xf3\x83=g\xd0\x9f\xc4P\xa1\xc7^-\x8f" "\x9\xd9\xc0\xc1{\xab>\xb1\x8\x94^7\xbdW\x14\xc7\x9a\xd2\xa5\xc2+\x98\x45\xf2\x93" "\\H\xd8\xbf\x88\xb1\xb8X\xf7x)\x16\x5\xdc/RR\r1;\x9d*\xea\x1!\xbf%)\x88\x1e\x86\x94" "bnB\xb1\x37Q0\xe9\xe4\xa5\x6\x9f)I\xee\x8e\x9f\x65&G\xae\xd0I\x82~\x16\xdf\xf7\xcd" "\xba\xac\xe4\xa2>\xc4\xda\xd3L\xce=\n_8@\xb0\xe9\xad\xee\x8a\xd6oa\xa9\xc\xef\xb3" "\ry\x17wzd\x89\x62\x19\x93\xa5h\x99.\xe5\x9fI\x12\xf0\xc1\xc1\x18_\xdf\x9b?}\xc8" "\"\x86\x1f\x85\x38\x33\xc6\xad\x7f\xdb\n\xb9\xdd/\xfe\xf8\xc6\xb3s\xe1t\xcb\xfa\x42" "\xbe\x0sB\x2\x9cK\x3\xf5\xbd\xfa}\xcc\xdb\x1\xb0\xb6`}db\xb8\xfb\x86\x84\x83\xec" "\xc2\xae\xee\xa3\x41;6\xc3\x3\xc6\x85S\xc9\x1c\xe8\x9b\x10\x7\xff\x65_9\x7J=\x8j" "%m\xde\x8b\x98\xfd\x1c\xaf\xc0\x98\xc5\r\xbf\x92\xc\xcf\x3\x95\xcc>\x1f\x34\xbe\x9b" "\xd4|\x14\x94\xfc\r'\xb1,6A\x9\x6:\xde\xe0\xfa\x61v;\xce!\xc9}\xaf\xfd\x32\xa0 \x9a" "a\x87\xdaIg7\xf0\xee\x10\xd1W\xb1WO_|\xe7\xf5\xe4\xd9+\x1b\x8a\x14\xbf\x1a\xeb\xd0" "\xce\x99\xf1^\xfe\\\\_\x7\x37\xe6\xd6\xc8\x45\xb5\x1f\x9b(2p\x7fn" "\xb9\x11\xb9\xcf\xc5\xfe\x2\xd6\x8d\x8e\xcb\xe3!\x95\xbd\xf2\x83\x6\xc8\xfb\xf0{" "\x83\x33r\xaa\xec#\xf9\x82\xc0\xc6\xc1\x8f\x64\xcPN\x7g\xe\x99\xb9\xba\x41\xbf`x" "\x2\x85\xb2i\r\x1$\xfd\xe6\x65\xd9\xe7\xdf\xb8\xf4\xc2S'\x8f\x8\xf8p\xa3\xe6\x9f" "\xc9\xbb\xd2\xbd:}\xc8<\x10\xc8\x64\x93:\xe7\xaf,\xc8\xb3Vg\xf1\xc3\xab\xd6\x8c\x39" "qT}k\xd7u\xc7k\x86\x10\x82\"\x17\xe3R\xafy\xe2OsZ^]\xf6\xf7U/\x82\xa6\xc3\xcf*\xe1" "B\xcf\xe7\x96o\xce\x9f\x7f\xf3\x9b\x66\x3I |\xc8\xb\xab\xb9@\xfbLrF\xe6\xad[\x91" "\x13\x0\xe6\x89\x1d\xce\xaf\x93V\xdd\x99\xf6\x33QR8\x1\xc1\xc6\xcb\xd8\x15\xb9VU" "\xfc\x1d\x44r\x11\x95\x64\x61?\x8ak\x14\xc0\xd2^\x11\x13\xb0\x7f\xeb\x9cy\xbe$\xcb" "\x2\x18\x2\x64\xc6\xf2\xf1\x93\x30\x0\xd2\xb2@\xea\xae\xee\x32\x1f\xe1\xf7\xaak\xbe" "\xc6\xef\xb4\xd9\xd4\xa0N\x8e\xc4\x99\xf4\x36\xc2\x99\x9c\xc5\x8f\xb8\x8f\x9d\n\x97" "lN\x9\x38\xd7\x84g\xcf\x97\xad\xfb\x9d\x97\xc6\x1&\xec\xf8\xe5\xe7%\x84\xcd\x91\xd7" "S\x9c\xabKFO\xd8\x90\xb8\xf6\xe4\xa8\xe4\xf7\\,O#:\xb7\xdd.\xca\x8d\xf6g\xe2\xf4" "\xe1\n\x95\xce\x38\x63\xa4>\xd0\xb7!|\xd0\x35\x0\xeb\xbc\x11\x8e\x8\xc4\x93\xe6\x63" "\xd8\x80\xab\x19\xea\x8x\xe3\xf4%\x34\xa7\x33X\xae\xe5\xc2\x19\x1b\\Z%\x15\x63\xc2" "t%\xab\no\x90\xa9\xfc\x98\xc4l\x92\xab\xfbW\x8\x1f\x87\xaa\x9c\xb0\x36\xbb\x89\xdd" "\xe\xe2H\x17\x88\xe6\xf\x3}t6\xb1'\xc6\xd0;uSW\xfd\xc5\xb5\n\xe\x37\x99\x86'r\xb2" "A\xd6\xb2\x99\xba,\xde\x64\r\xb5[\x11\xdb\x99\x1b\xbf\xea\xd8\x7\xf\x37\xe7\xd7\x1d" "\xbb\xe8\xb2\xe1l\xcc^\xfd\x87\x0\x82mBj_\x8b\xbb\x1b\x37\x1b\xe6\xde\xdf\x61s\xbe" "\xf6\xd3|D\xe6\xa9\x65\xb9\n\x65\xa8S1.\x8f\x4r\xb1\xb1\xd8\xa4\xcv\x9a\x35\xed#" "\xe5\xbfq\x15\x9e\xa0\x1f\x6&Xh1\xf3's=r\xbby\xe\xca\x15\x8c\x97\x37\xd9\x9\xda\xe6" "\xad\xc7\x8f\"\xf0\xd2\xfe\xcbv\xe\x11\x8b\xb8S\xe5Y\xe7\xea&\x1f\x1b\xe3\x8e\x4" "\x83{\xf7\xb6=\xc2\xeaQ\xb1j\xe6\x91\xe9\xdb\x45\x81pc\x8\xb1l'\xb4X\xbe]\xee\xaf" "}\xdd\xd1\x9a\xe0\xc2(\xd7\x7f\x1d\xc3\xb7\x84\xa0\xf6\x96\x96\xa6hN\x9ew\x9]\x8e" "m\xa7-\xa8\x66\x88)\x10n[T\xa6\xbd\x12\xc0k\xc\xd2\x4Y\xb1\x10\xd7So\xfeV\xad\xed" "\x1f\x44\xec\x98'q]\x8d\xc2\xed\x1a\x96\x6\xe9\x39\x17\xa9\xb7N\xe4V{_N\xd8\xb4\xe4" "6\xb1h\x85\x8f\x93\x93\xaf\x9a\xa5\xe6\r\x80\xefjz\xad\x11X\x9cW\x83\x16\xe1\xef" "\x8d\xdeU\n?|\x82\xd0\x8c\rV\"\xcd\xee\xc6\xe1J\x92l\xe2u\xc9U\\\x9c{\x90`\x3\x8a" "\xe6\x33\xe;\xd3\xc4lR\xed/\x1d\xd3\x8aW\xab\n\xd8\xaa\xaf\xa7\xdf\x11^\xa0\\\xc3" "\xad\xe5\xb3\xa1\xf3#\xda\x0\xac\x18\x43\x99\xbb\xad\xa9\xa3\x42\xee\x3 \x7f\xc3" "\x95K\xf0\xb3\xb7\xaa\x65\xf\xd7\xef\x8a\xcc\xfa\x8b\x64\x18s\x9d\x88\x31w.\xa2x" "\x1\x14\x61\xef=\xb7\x18]\xe3\xbc\xee\x86\x43\xf4\x32S\xaf\xac#\n\xeci\xad\x8c\xe6" "\xd0\x30\x8a-\x7L\xfc\x8c\x8bI\xc4\xf4\x43\xca\xbc\x85t\xd7\xfbY\xb1\x8d\x8c+\xb3" "\x2;\x3\x9f\x9c\x32Y\xb8\xfc\xef\x31^\xc0W\xcct\x1d\xc5\x8d\xf4\xb1{\xc\x8b>\x3{" "P\x91 \x87K\x1a\xa9\xdfIw\x18\xf3\x7fJ\x8e\xd3\x80\x10\xba\xd6?p\x85\xfa?]&8Z\"0" "\xb4g6\x92\xa3\x8\x89\x2Gn\xbb*\x14\xb8\x66\xcd\xe\xfb\xcd\xfa\x62\xcf\x93\x89-\xfc" "\xad-%\xbe\xe5>\xde\xff\x65]\xc5\x3\xeb\x8f\xbb\x12\x84\xb0`r\xda\xec(p\x3\x8c\xcd" "\xcf\\\x90\x8c\xcaQk\x85\x19&\xf7\x36\xd1jd\xc3\x2\x0\x94\xdc\x1dw\x8e\xf8\xa2\xb0" "\xdb\x44\xd3\x8eK\xb\x64\x96\xd7\x97S\xa8\xe0\x62\xda\x37\x11\xa8\xd3\xbc\x8eZ A" "R\xd5\x64\xbe\xdb\x1'1\x97\x8f\xf9\xf1\x9b\xdb\x6\xc7>bM\x95O\x8b\xf0\x83\xf9\x11" "\xbc\x10\x8c\xd5\x44P\xdb\xd1\xa9\xd8\x86\x9fq\x15\xcc\xff@\xee\x15R\xff\x7\xc9\x66" "\xb6\x1b\x1\x18\x97\x11\x36\xf8\"\xd1\xf5k\x19_\xc4*\\\xa7\x62\xf4\xb8^\x13)\xf4" "\x98o\xbd\x7f\xe6\x83\xb\x88\xd9\x1a\xea\xb3\x93\r|FF\xac\x8b@\\\xf:1#\x13\xc9.>" "RAJ\x9b\xe1\x9\x94\x8a\xe5\\Yk\x13\xb7\xafG\xbf\x4\xce.u^\x9a\xd7-\x91\xfd\xe2R\xd1" "@\x86*\x8d\x30\nw\x3\xde\x8c\x41\x64\xbc\x63VT\xab%\xcfW\xf3\x35\xa4\xe6\"\xd1\x7f" "e\x1eI)\xcbN7#\x7\r\xac\x39\x94;\xef\\\x9c~4z1\xd4.\x17\xcc\xac\x9\x81\xad\xb5y\xd3" "\x14\x7f'\xcc\xda\xa2\x99 \x1d\x95\x14&\x18\xcb\xb1l\x95>W\xc6u\xbd\xd0\x84q%\x3" "\xb2#\xd4\xd6\"\xd6\x19~\xd1-Q\xb0\x34*\x97\x16\x46:\xc5Me\xc3\xd5\x1d\xf6-f\xad" "\xfa\xc2\x7n<\xda,\xa9\xb9\r\x85un\xbb\x96\xb5\x2\x86\x92\xdc\xf7\xab\xa1\x9e\xa2" "\xab\xb1<\xe2\xf9\xb4\xde\xb4\x1a!\xbe\xe5Q-ps$\xcb\xb\x38ZA\xb3\x37\x62\x98\x16" "X\x8b\xf6\xac\xc8;\xa2\xbe{@\xbdSa\xb1)h\x81\x46\x61\x15^\xa9\x94\r\xb6\xb4\xc5\x88" "x\x9c\xca\xb3T\xe3\xe4\xe4t\x6\x42\xf7\xa5.0<\x9d)0\xe2\xc6w H\xbc\\\x8gAq9\xc1" "!\xa0H\x8b)\x8e\xc1*\xe2T\xdf\xcb+\xc1\xbf\xac\xee\x43h\xb6\x1bi,\xd6\xd6\x65]\x97" "\xaf\r\xb4X\xff\xbd\xa7\x7\x3Y\"R\xc3\xbf\xc\x6\xc\x85\xcf}\xbd\x41\x10\x7f\xf0\xef" "r5\x90v\x94n\x8\xf6\x6\x42TQ\xef\xe8\x2\xb6\xd1\xf7GL\xc8\x3<\x8f\xeb\xec\x80M\x15" "\xc0\xfe\xf5\xbb\xe<\x2\xfb\xa9\xf3\xcS\xeb\xfe\xb5\x95\x4\xb9\x9bH\x2\x8eK~\xe8" "\xec+\xad#&\xf2\x83\xc0t\xe9_\xfc`\xfd{\x8fLB\xf8\x8b,\xb0\xd4{xpK[\x87\x44\n\x97" "\x8c\xffx\x19\xf6?\x97t\x2\x63zV\xee\x85\xe1\xfe\xeb\x62\xedmj\x9cK\xd4\xab\x34\x94" "h\xd1\xc8:Su\xd9-d\x1c]%j~\xb1\x11TdD\xc0Q\xa4q\xf2\xb8\xc7:\xe9\xd2Yl\x99\x45\x90" "\x7f\x6q\xb0\x95\xe6$\xcb\\\xc6\xc6\x1c*\x97\x19\x92\xf3+o\xcc\x6]\x9c\x37\x41\xfc" "\x17\x91\x86<\x1e\xce\x9f\x14\x35\x2w\xd1w\x85Q\x7\xeb\x99\xdb\xcb\xe0\xef}o\xf0" "\x0U\x85l\xd7\x8e\xc7\x6\xb\xc4\x1f\xfdv\xb6U\x6\xea\xacRu\x80z\x81\"\x12_\x18\xa3" "\x3_;I:\xff|@\xfc\xe0TC\xc3\x18\xef)L\xcf\xbf\x1b\xb7\x7f\x43\xc5\xb7,\x14\x43u\xa2" "\x80\x9c\xc5\xed\x83\x3\xa5\x81xH\xbc\xb8\xf7h\xfe\xc3pe)Q\xf2\xa3+\xf9{@\xd6~}\xea" "\xac\x1a\xe5\xf0\xc5:\x0\xeb\x19M\xdd\xd5\x9b\xcb\xbf\xe6\xad\x9d\xb8?\xae\xe2\x36" "\x99\x62\x92\x87\xb0\x1a%\x98\x99rIeft\xd2\r/\x8e\x66\x10-\x9e\xea\xd5\x37q\xf7\x80" "\x15P\xa2\xc0\x31\xb0\xc8\xc3H/]\xff\x99\xbc\x5\x85{\xb4\xd7*\x98\xc7-j\x85\xdf;" "g%\xe3+\xc6\x89\x64\xd7\x9\xc2\x6\xfe\xa7\x7f\x45\x11\"gP\xc8Q\x8b\xff\x9e\xf\xb0" "9\x18\x80\xb3\x86\x97\xcf\xb1\xa6\x80-\x2\xec\x85u\xf7\xec\xf0u\xae\xf5\xe9\xc2>" "Rf\xd5\xd4\xd9\xb3U\xa8\xb1\x84&\x2\x98Y\x9e\xa6M\xf6V\xc5$\xe1\\~]\xd0\x88\xa2^" "\xf7\x85\x1b\xd4\x34M\x19\x1fX\xb9\x19x\xd8V[\x16\\),\n\xfc\x7f\x9e\xae\xe2~\xa7" "\xcd\xa3\x9f\x9a:f\xaf?\xfb\x82\x30;\xd9=-\xbc\xb0n\x1d\x46U;\xd1\xd0i\xe7!\x4\xc7" "\x9e|\x2\xb4\x33!B\xed\xd8[\x7fN\x93\xc\xa3\xe7\x6G\xaf/\xcaPt\xb1\xee\xec\xfd^F" "\xc4\x96\xf3\xc0\r\xdd\x38\xed\xe9\x19\x8a/M\x8+q\x1eq&8p\x1b\x96{U\xfb\xe7o\xca" "\xe3olk\xca\x44\xc3\xf7\xa7&D\x87\xc0-\xd2w\xb7\x99H\x9c\xbe'\xa4z\xb0\x35\x63\x42" "\xe4Ht&\x99\x1br5=&]\xbfo[\x4RpZ\xb1\x99\xcdt\xe1\xc0\x17\xe3\x36P\xe2O\xa5\xdd\xf" "\x7f\xc0\x32\xa8q\x19\xfb\xc8\xd0\xd3g+\xb6\xedM.V\x94\xb7Hn\x1\xf0\xf2-\x8b\xd8" "\xbc\xaa\x84\x83\xe7\xfar+\xe\x42\xb0\xc3\r\xed\x8e\x9\xb0\x91\xa3\xdc;dt\x1fJ\xc7" "\x7f\xbe\x34\xea\x38t\xc4\x87\xfa\x1c\x4\r\xc2\xe\x84\x66\xac%\xd3\x86,|\xdb\xcd" "qW\x1c&\xe\xbe\xea\xcc\xde\x2\x92\xc0\x1a\xea\xedu\xe4x\x16\xe5\x9b\xe6\x31\x9b\xf3" "\xd8^$%v!`6\xc\xd7\xd3\x89\x81\xe3+Q\xb7\xa3NK\x86\x9erv\xa5\xcb\xc3\xc9\xe6\\zN" "\xfd'f(\xf3\xe2\xc6\x7\x0O\xcd\xa7\x98\x61y\xa9\x35\x38\x9b\x46\xc\x87\xb\xec\x64" "\x84\xeb\xe1]\x17\xefqJ(U\x92\x97(\x94\x9c\xf4\xa3\xe3\x94\xcf\x8a\x1c\x44\x80H\xcc" "\x98\x1dNJ\xde\x84\x9d\xda~c\x83\x88\x61\x9e\xba(x\x95\xb3\x83)\x8b\xd7x8J\xce\x34" "\x17\x16\xbdlt9\x8\xad\x34g\xbb\xf0\x36\xc8v\x2\xa1\r?e\xdflo\x2\x1bU5;JI\x3\x4\xbd" "\x0\xcc\xd0\xe7\x9dR\r\xf2\x18\\\x14l;%H\xa3\x85\x8b\xda~\xfc\xcc\xdd\x1\xb7\xf8" "o\xa1\x88\xd5\xb2\x84\xd2\x8b)\x95\xd0\xdf\x35\xaa%\x9b\xea}\xa1\x92\xd2\x3!D\xd6" "#t\xcb\x44/%\xa3\xf9\xf4\x10&\xe3\x8\xf9\xb0'\xae\xdd:\xd3\xcc\xf3MJT|,\xee~\xba" "A\xc2,\xf7\xb9\x18\x89\xc4\xb0\x92\x19\xfa\x30\x12L.\x98\xef`\xb6\x10\xd6\x37Q\xb8" "\xcd\x89)Y\x13\xa5\xb4\x9>C\xca\x97T?E\xae\xae\xb\x62\x31\x98\x14\x87\x37\xc8\xa6" "\xae<\x7w\xe5w\xa0\xb6\x3Z<\xe0\x32\x61\x1f\xab\xb2XC\xfc\x1c\x82\xf2]1\xcc\x87\x94" "\xb7w\xc7\xe4\xf8t2\x87\xa1\x33\x10\x14\xbf\x3&\xfb\xd9\x9d\x8d\xb7^\x2\xc7\x90)" "\x85\x80\xea\xbd\xe4\n\xda\"\xf8\xb\xe5\xc3t&\xa3k\x14\xe7\x86\xc1\xef\x8f\x37\xde" "\xa2<\xcb\xf7\x41-\x1ell\x11\x1\x1\x38\x2\xd7'\xa3x\x9e\xda-\x9c\xbd\xf8\x45\xc8" "P\x93\xf\x82><\xa2\xd4\x87;1\x1\xd1\xb6\xc9@bq\x7U*\xea\xbaG\xb6@\x80\x43h\xe1,\xed" "pZ\xf2\x46\xec\x33_\x91\x2O\xca\x8-\xbf\x1b\xc7M\xdd]\x93\x65s\xb7rV\xeb\xd9\xea" "\xb5\x9b\x80v\x8b\x45\x62U\x5\xe8\xcd\x19<\xe9%\xdfNNa\xfd\xcf+\xbe\r\x83)C\xf2\xac" "\x95\xf5\xbeH\x91\xcdXK\x19\xef\xf=\xf6\x91\x9b\xaf\xa4\xd7\x19\xfa\x13Y\xe2\xce" "\xb5.&|>\xf3\xe9<\x6\x1bZ\x1e\xb9\xfe\x81#axO\xd7\xf\x33)\xbeyg\xccG\xd2\x34p\x6" "\xb3\x96\x9f\x80\x9e\x91\xd9\xa7\xb5|\xdd\xe7/\xc9X\xc2\xa5%\xe1@]n\x8f\x0\x7\xf4" "\x6\x87v\x81\x91\xd2\x1c\xac\xf3 \xffi]\xdc\xe1\xa5`\x4\n\x8f\xd3\x98\x2\"g-\xb0L" "\x8d\x30\xb6.\x13W6S\xdb\xaa\xc2\x84\xe8\xf6>9\xfe>\xad\x86%\xa8)F\xcd\xfd\x91\x92" "\xe\xcc+\"F}\xca\x84[\xae\xd9Iu1w\xfe\x98\xa0M_Y\xf3s\xb9\nz\xe7&\xdc\xcdT\xf2\xe6" "\xb0<\xf1&A\xb5\x80X<\x84k*;%\x8\xf7\x8\x9b\x45\x8f\x64\xd8\x12\xbc\xf1\xc1`a7\xab" "\x88\xe3Q\xb4\xcfl \x99\x8d\xcal\x1d'\x84\xcd\xc9\xc0\xf7(((\xe9\x31xa8\xd9\xec\xd5" "Z\xe5\xff\x88\r)#\xbb\xc3\x84\xc1\x39\xcbP\xe7\x90\x9b\x61\x8eK9\xb\x42\xae\x9b\xe" ".f\xa5\xe4\x45?\xe9\x9d.^g\xcfz=\x8f\xc7\x86J}|\xa1;\x18\x65\x11\x1cm\xec`\xca\x36" "\xc5\x3<\xf0\xad\xc\xa0\xd5\xec\xcd\xb8\xb5_\xec\xd6\x63P\n\x9b\x17\xf6\xd9\x1b\x9b" "Hw3\x91\xbb\x44\x93L\x15^\xd4\x43ON\x9a\xc7\xb1NRu\xe9\xe5l9hN#\xd7\x8c\xab\x80\xbb" "/\x10\xcbl\x17\xdd\x62\x9c\x83\xfaT\xd6\xc5\x32\xbcU\x8\x16?\xd6I.3iy\xac\x8a)y\x9c" "\xde\xfa\xaa\x1e(bo\x1d\xbc\xec\x1b\xc9-77\x80\x8e\xa9\xc0\xa7T\xa6\x10%#V\xfa\x96" "\xe8?7\xe7\xb7\xbf\x1b\xcf\xb9x\x8f\x34\xe0\xa1\xe8\x8e\x39\x35\x33\xaaKk\x99z\xc9" "\xd8ofS\xc3\xc7\xfb% \r\x96\xea@-\x9c\x43\xd4haj$\xa2t\xe5\xf0\x1b$\x6\x9b\x88x~" "I\x99\x93\x38_i\xef\x2\xce\xf1*\xc1\xbc\x36\xf8{\xb0\x1bX\xd0\xec\xbe\xd6\xf0\xce" "n\xad\xc2\x64.iB\x96\x16\xf2\x1d\"\xe0\x30X\xfc-\xe9u}\xb6\x84\x96\xf3\x8c!*\x84" "\xe8 \xa8\xf9z\x9c\xbf\xfa\x84\x9e\xcb\x35\\m~_{\x19\xee\x82\xf0\xfytb,\xa1:e\x82" "\x2\x17\xd7\x4<3\x0\x6#O\x1c\x87\xbaPi\x8aZ\xa7\x19\xdb\x8f\x7f\x97\x8e\x93\x1d~" "0Oz\xf\xbet\xbQn\xe6\x83\x32,RWu\x89|\xc7i\x7\x0\xed\xcf\x32t~\xa1Jw\xa5\x36**\x8a" "\xa3\xca\n\xd7\x30vc\xfc\xe9R}\xb0\x8e\x1c\xf1w\xbe\x1f\x6\xae;\x9f\xfc\xb\xaa\xc6" "\xff\x16\x65\\\xc2\xecQ-!\xd3\xc1\x8b\x43\x93\x1e;\xbb\xd8\x30\xabt\xe3\x61\xbdW" "B\x86\xb9\xf0o\xf2\x36\xe8\x39\x10\xe8\xba\xae\xft\xa1\x9`V\x14\xfbv-x\xcf\xb5\x12" "\xf7+)\xb\x16\x34\xd8\x1e\x6\x80{o3\x16\xd1\x86\xe1$\xe8(\x9b\x64\xae_\x1b\x41t\xed" "\xa1\x96R\xe2lG\xfb\xbd\x1b\xda\xa2\x80LT\xa5\x1ak\xf8\xcb\xf1\x45\x93\x19\xda~\xf8" "\xde\x45m\xed<-\xc6>\xef\xec\x63\x1d+\x1f&\xcaZ\xb\xfc\x38\x8yRQx\x13\x41\xa9\xff" "\xaa\xfb\xae\xea<\x10\x62\xec\xf4\xbf\x94\x9e\xe3\xb2\xd6\x89\xce\xf0\xbbr\x18\x11" "\x1b(u\xfdO_:b\x1\x84\x66\x87)\xf4\x9f\xa8\xd6\x61\xfd\xd4\x1bl\xcc\xaa\x16\xe\xd6" "Q\xe6\xf6W\x1d\x85?'\xa0)\xa5^\x8f\x7fI\x1d\xf3\r\xc6\xa5\x97\xd7\xafi\x9`\xb2<{" "a\x88\xcd\xae;\x81\x18\xe2\xd0\x8f\x31ot\xcf\xb9q \xd5l+\x97{W\x16\xbe\xaayDH\xd9" "N>\xcb\xffN\x6\x34\xf7R\x86h\xdaqe\xc1p\x9dm\xd3.\x95\xb2V\xfb\n\xf1\xe\x1d\x1e\xbe" "\x11\x1bi\xfc\xd8=r!\xbaR\xff\x65\xd2}\x96\x9f\xb5l\x82\x41\xaf\xe8>\xcb\x11@\x6" "\xff\xfd\xf0\x9f\xb9\xb9\xe5T\xc9q\xd8\xd4*\xb1\x17\x43\xa6\x9e\xed\xaf\xbw\x12\x5" "\xa2QP\xadh\\\xb0|\xb5\xc9\x3\x15\xa1\xa7\x8e\xd3\xcc\x95\x63\xb4\xee%\xe3\xdf\x8c" "\x96\xa9x\x92\x16\x31\x0\x43w\xe8\x1d`>\xc6kD{\xa6\x37n\x18J\xa7Y\xf9\x15\xf7u\x18" "9DU@\x7fR\x1d\x1d\x46\xc6x\xfd_)KY\x9c\x1a\xc7\x8f\xab\xa7o#\"\x82%\xc1}\x8d\x8f" "*\xda\xd5_\xa5\xf1\xb5\xf0}\x81\xf3\x61SB\xa3\x94M\xe0=(sRy\xb0)\x6\xd0\x39\x94\x9d" ";\x93\xbb^\r\x2\x46Q\xd4G\xeb\xf1\x9c\xa4\xe6\x1eM\xce\x9d\x89\xf0\xa1Sjj\x9e\xe9" "\x8d\xd8\n\xb5\xeb\x1ayRd,\xc5\xcaw\x82\xfb\x6\x9a\xa6\x9csKHJ\xdd\xd5\xc3<\xb4w" "\xf3N\xd5\x8d\xf9\xf6+\xdd\xbd&\xbeT\xc1\xd2\x9\xc1\xca\xef\x6\x62h8\x3\x5\x13\xae" "I\x18\x17\x10\xe5,\x16\xb4\xf7N6\xec\xac\xc2\x9e\xaa)\x96&\xc0\x87)Cl\xa1\x45\xb0" "\xa9\x62\xd4)U[\xfd\xaf\x34\x43\xc8\xa3\xfa\x9a\xbb\xd7\xb1\x19.\xa8\x9e],\xe8\xa5" "=\xde\x16=M\xf1y\xc6\x1e\n-rUT\xa1V\xad\xb\xc7\x5\x4\xbcr\x3^\xbd\x3[1\xc1\xe7t(" "\x1\x91W8\xa4\x1d\x1d 0Z\x1dP`@\x3=\x1d\xa3\x7\x97\xf8\x33y\xee!\x7\x19\xa4+\xf6" "\xa3\xe5\x12o\x15\x1bO23\xda\x8e\xcc\xd8\x88\x42#\x94\xdd\xd6\x42\xd7\x62 p\xe1." "\x15\x16\x35\x9\xfb\x9\xc9\xaf\x92\x98\xcf\xefZL$\x95\x35\x65\x95s\xbc\xc0\xf\x9d" "\x8b\xdc:\xff\xb\xce\x66K\xabN\xd2w\xdf\x93\xa9\x19\xed\xebZ\x11\x9c<\xb0U{\xeaK" "G\x83\x1\x83\x15\x92\xc7\x99\x4k\xa5#\x88\x33\n\x99\xb0oI\xd7\x12\xb1\x89z\xb2\x8e" "\xc9*\xc1\xef@\x80n\x18\x91\x7f_\"\x1z\xad\xb3\xc7\x7fS\x9cu\xe9Uii\xde\x9dM\x7f" "|\xcd\n\x84\xff\xcd\x8d\x42\xd3\xab\xaa\xb0V\xb\x92\x9fY\xd8\xda\x45\xdd\x7\x11\x9a" "\xa8\xf6G\xa8\x9a\x44\x62/@_\xea\xa7\xf8y\xfd\xedj\xcc\xef\xddk\xe1\xc6v\xa6y\x2" "l\xe9\x97\xb6\xf7\xbe\xf0\xc5-)\xf7\xea\xc7`\x1bXe\x1e'\xcc\x30\x31\x8f\xa6K\xbd" "S\xa3\x37\x41\xeb\xef#_\x97\x1b\x9d\x33\xf2\xb3#\xef\x86\xab\x45\xf3\xbd\xdf\xe1" "\xb0\xc4\x9\x92\xd2\x63*\xe4\x35q\x95\xda\x8d\xd4\xef\x83\x10\xa6\x18KR\xa4!=\xe8" "\xf2\xd1\xa2~\x1f\xa6\xb0\x34\xe7\xed\xb6i\xa4>b}\xe2\x4\xad\xbeJ\xa3\xad\xed\x18" "EH\xefG}\x1e\xca=c\xb4 {\xf3\x98\x18\xe6\x15;9\xc\x3\xf\xe6\xfd\xab\xc6\xd5\x8a\xab" "\x92\x38y\xd9\xe9\xfe\xb3\xd6\xd6\xf8=\x8a\xc6\x85J\x12\x1c\xb8\xe4\xdcP\x9e\x90" "\xac\x87\xe0'\x80y\xfd=&~v\xdc\xfa\x83*\x99Q\xa8\x96n< \x7f\x8c`y\xa7\x11%{R\x9f" "\x7fp\xb4\x9a\xd8}\xd1\xc6L\x8f\xc6\x84\xc6\x9c\xf6w+\xd8l\xfa\xbb\xa9Q#b\xfc\x16" "0\x87\x46\xb4&\x85(\x86\xe2?&\x6\x9d\xa9\xb3=E\x9\xceL\x10M\n\x5Q\xc7\x0~\x14X\xa8" "b u2p\xd0\x6\x8b\xad\xa2\x8e\xf8\xf5\x92\xef\x90\xb6\xfd\x82\xc9$\xa8s\xa4\x4\xac" "\xbb\xe4\xbe\x33\x92\xb7\x96\xb1\x12\x98*\xab\xee\xcb\xe1\x9\xc9\xe3\xf0\xdc\xfa" "\x97P\rZ\x1\xdc\xc\x8c\xca\xc8\xbf\xac\xfc\xf0y\r*O6\xa2t\xe4m\xf6\xfc\xae\xd9\x84" "\x80(\xe0Y\xc6{\x1d\x99\xd3\xb6\xf0\xe9\xb7\x94Xj\x9c\xd1\x1c\x84\xf2\xbv\x5v$)?" "36\xd5v\xd4\x8\xe\x1f\xb5\x44k\x84\xcc:\xf7\x94\x81\r\xc4\xfeP\xde\xfe\xafs\xf4\x3" "VH\x8c\xde\xcfi\xd4\xb3\xd6\x43\xcc\xb1!\x87\xad\xeb\x44\xf5\xb3\xafY\xb6\xafg+k" "\xb3k\xb6\x43\x89\xa9\x65u\x95\xee/\xab\r\xc2x\x7\x9c\xd0*{PI^\xb4\xe2\x15\x95m*" "\xba\x90\xcc\x61$I3\xabX\xb0S\xf3^\xa3\xeb\xc1\xe5p\x90\x8a\xdb\xe6\xa9=ALl\x5\xc6" "\xd5\x30\x8a\x8c\x91Wh\xa6\x64\xbe(\xdfq\x85#%\xc4\xe1\xcb\x93\xec\xf3\x8c\x43rK" "\x98\xc2\xa0\xa4\x82\xba\"\xb0\x19\x89T\xb5\x92\xe4\xc5\x16\x6\xb8\xceRyNP\x7f\xe5" "8\x8\x9cG.`\x8d\x14\x45{B\xbd\xa7\x15\x4\xd1\x43p\xc9\xff|\xda'\xf5\x36\xc9\x1cg" "\xca\x98\x9d\xbf\x84\xff\x41}\xe9\x3\xce\xa6\x43\xf8G\xd7\x1aLz\xa0\xac\xcf\x8f\xe8" "\xb9\xe3\xca\x62\x19\xe2\x1a\xb3\xb4\xd2\x99\x96\xfb;\x92\x34\x8f\xe7J\xe5\xb8\xce" "~\xe6\x8a\x9a\xc5\xb5\xce\rr\x0\x36l\x94\xaa\xfa\x7f\xb4\n\x42\x35\x1\x95\x14\xed" "\xd1\xcc\x62\xfd\xea\x43\x42\x8co\xec\xd2\xe2:\x1b:`=\r_\xdd\xed\"\xc9}7U\x99P\xab" "C\xaf\xbc\x41\xb2;3V\xb5:\xf4\x35\xc1\xc\x84oe\"\xda\xe\x9M\x8d\xc8\x9d\x2\xedLE" "\xb8r\xf5\xe6,\xad\x39N\x8a\x80\xf6W\xde\x6;\x18\x9b,(\xd6\x1f\x97\xcd$\x80\xe)p" "x\xb3Q\xe1.\x9e\x1c\xc4\xba\x34\xe5h\xbbM\xe2\xec\xc5\x1b\xe1\xed;0\x1c\xcd\xe6\x33" "\x99\x81U\xe\xe9\xd4V\xb2N\xce\xac\xf6#u\xcf\xa8N\x95\xb3\xbf[|.J\xcf\x1e#\xd4\xbd" "\x9ct\xd3\x1f^\xa4\xb3\xbc\x13\xa9\x87$\x17\xa6\x15m\x9cWj\xce\xd2\x32&\x1c\x11x" "\xf4\xec@\x95\xc9O\xf8\xd0\xe0\x9b\x12\x37T\xf7u%\x7\xde\xd1\xbao[\"\xeb\x5\xdb\x81" "\x1c\xb3\xbc\xb6\xc2\x43\x9a?M\x91(O\xa9\x11\xc8\x15\x64\x85\x8}\x17\x1b\x42\x9\xec" "\xd7i\xdb\x18\xd4\xfc\xc2\xea\xa8\x9d\xc3>#(\x1c=\xbbH\x81^B1g\x19\x8a\xd5\x33\xa1" "\xe3^J\x92ri\x87]\x18\xbf.}\xaai\xdb\x8d\xa6\x8d\xc1#\x7f\x66\x35\xe7R[\x1d=\xb2" "\xec\xdf:\xce\xf1nN8\xc1\xd5n\xb\x90 \x13\\\x13\xf3S\x91\xb3%\n\x4\xbd\xb5Qa}q-<" "\x10g\x10\xf4\xb1\x83\x12\xd7\x42\x8cO\x94\x34\x61\x32P\xf8=\x9f\xa3RX\xb5\xe8\x0" "\xad\xd8\x45\x98\x5\xbd\x38\xa9\xb9P{z+\xa7WS\xae\xfd`\xf7\x43\x3I\xe3\xecZ\xe2r" "\xeeS\xa9_>\x15\x80\x18\"\x36U\x12`\xb7\xb8\x36\xe2\xd9\xa0\xb5\x9\xe4\xd3\xdb\x62" ")\x11\x38\x39\x13\x8f\xdb\xb5\x81*\x8a\xb4\r\xef\xfe\xf9\xa8\xab\x93\x92\x11\xde" "\x8e\xcc(F\xd2\x42\xdb\x9d\xb5Q\xdc~E\x3K\xb9\x10|JRN[\x89\xac\x87\x39\xa8\xb6" "\xd4(]\xa7\x2\n\x1e)\xe9\x95\xbf\x3\xa0\xee:\x14\x1c\"\nZ\xc3\x61\xfa\xa7\xa5h\x6" "c\xee\xf9\xf5X\xae\xad%\x14l\xd6\xf8\xfe\xcf\x37Y\xf.\rO\x9e\x88s\xc6\x8a\x64Q\xb9" "\x17>V\x14I\x9c\xf1\xfd\xf0\x5\xdf\x80\xcb\xb5\xc6\xe4:\xc1\xce\xb1\xa0*!\xb9\xfc" "k\x18\xaf\xb7\x87\xd4\xb6\x86h\r\xe6\x98\xcf&\xb2\xa7T\xb\xf0\x1a\xed\x42\x17/O)" "\x10\x38H\xb7\xf7^\xf;\xd9\xben|\x8b\xdc\xaf\x8d#\xdb\x46\xe3\xe9I\xa7k\xb0o\x15" "X\x1a\xf1\xfc\xb6;\xb0h!y$\xd4qN^'Xh\xccnf\xe3`\x8d\xa6\xd7W!\xf7\x8bu\x14i\x98y" "Zu\x83\xd4\x43\x1e\xd9[\xf3N\x94\xba\xa6\x8dz\x9b\x9c\x15\x12::9\xd2\x87\x8a\xce" "\x82\xd1\x11\xbc\xc3\x93\x18Q\x2\x45=\xb6\r\xa0\xb0\xb7\x83\x90\x85\xe7\xb2&'Y\xc2" "\xa4\x93@\x12'\xc1\x18Ze\x8c\xd6\xd7s0\xd2\xc4Xm\xa8I|\x1`\x13Ub0\nW\xf8\xb0\x9a" "\xb4\x1b\xb0M\x8f)\xbe\x8bTYS\xa3\r\x7&q\x9f\xc6\xaf\x81#\xf3:]\xf9^Z\xec\xfe\x8" "\x12\xe7\xe5\xa6\x7fZwk\x95\x39\xd2*\xd9\x1f\xe0\xcdwq\xa5\xef\xebs\xb9\xce\xab\x98" "\xa5\xe5\"\xff\x62\xae\x84\x98\x44'\x3gZ\xf2\x1c\x45.\x0\x8f\x66z\x88\x46\x62\x11" "i_\xe=\xa6\x1a\xe1;\xe6\xb3\x41\x7\x98\x45Q\x6\xc1&\x1foH\xf1\xf1\x9\x1f\xe7\x37" "V\x5|J\xf5\xd4\xee\xed\x8f\xe0\x9c\xc0\x8e\x32~\xd0\x80\xcfM\xf2\x11#\xa6$\x8e\xa5" ":\xd9\x9d\x14\xfa\x1e\x7f\xc0\x1d\xcb\x45\x43\x3\xe5\xb0\xe3j\"th\x1d\x8a\x38\x86" "wTA-\xc5r8\xcb\xc0\xac.\xca\x8f\x8f\xbe/\xfe\x8a\xb\x3\x83\xf3\xee\xaf\xd3{\x3\xa7" "0G\xd7q\xc9\x8a;\x3\xab\xc4\xa4O\x89^]C\xc2X\xe5m,\xa7\xa6\x98\xd3k&\xc9\xf6\xfd" "\x80L+\x14\xd9u\xa7\xc6\x84\xab\xdc\xb3\x91g\xf1\x5\xb9-5\xa9\x93PV>i\x13\xea\xce" "\\lA\xd3\xeb?N\xce&\x6,U\xc1\x34w-v\xef\xca$\xd9\xfa\xaa\xe1\x33\xea\x84&\xe8hZ\xea" "\x84\x32\x96-\x9e\xbc{\xa3\xe6L\xf9\x19\x85\xc5\x6\xed\xb7\x94l\x93\xbd\x39k?\xf0" "\x1fw\x95\x9d@+E\x9d\xe2\xf!\xc0M\x14\x66.\xc\x31\x18\xa6)2\xfc\x2x\xd2.j\x1e\xc6" "\xf6y\xa8\xf6h\x97\xf1\xbd\xb2gr\xb4\xb\x45m\x1a\x15\xcb\x17\x63hp\xce~N\xf\xde\xfb" "\x80TT\xd0\xac\xa6^\x0%\xd6\xc8\xfbzH7x;\x13\x66\xc6`\xa7\x43uCl\x1d\xf9t'qg\x82" "(\xd8\xcc\x1e/CP\x85q\x81=\x9\x34#\xe9\x31\x11\x90\x9aS\x1c\x31<\x15\xfe`\xc1\x85" "5W\x9c\x4\x95\x12\xcf\xd3\x7n\xe8\xfa\xbf\xf2\xa9\xee\x61\xed\x8d!\x8b\xb5\xbc(\xd8" "\xe3\x4z\xec\xe3I\xbcg]\xc7\xcd?l\xb4J\xa2\x42\x81>\xc4\xfJ\xb1`\x1c\x91\x85\xd6" "\x1a\x31T6\x14^o\xba!\x1e{N\x86x\xcb;i\xd7\xb3\x9fG\x88\x8f\xe1\xff\ry\xb7\xb0\x16" "u\x9au\x13\xce'\xf\x41$\xe8Zlsr\xbf\x86@$\x7\x9^\xc2\x93\x37\xcd\x10\xb2\xecX\xad" "\x10\x44,\xfe\x10n\xb5\xa8\x36\xe4\xce\xa4\xa5\xb2\x9a\x82\xe7\xfa\xe0\xcd\xb4Tw" "\xad\xacR\x8\x43t\xev\xe8M\x82\x8\xbb\xbb\xb7\x9d\xeam@R\xacs\xdd\xc7u\xc8\xe\xfd" "\x6\x38\xb2\xae\xed\xb<\xf1\x17:\xd9\xa2,\x9oVk{\xa8\xc6\x94\xb6\xa0U0\xf1\xbc\xee" "\xe8\x31U4\x92\x18\xc5\xd1\x8a\x1a}\xbb\x9d&\xe2;\xed\x7f\x84\xc7>\xbb\xf7\xe2\xde" "\x0.\xb4i%mk\ne\xa5\xd1y\xej\xb3\xde\xdaM\xcgo\x94\x94q\xa3\xc4p\xe2v\x80\xd2\xbe" "\x8\x8aM\x82\xd2o\x1\x7$\n=k<\xd0>p \xb\xbb\xf5+\xf9\n\xba\x31\xce%\">JV.\xbf\xb6" "\xd4\xf7\x9a\xa3,\x13\x98R,WAR\x14\x1d/\xe6\xbf\x6\xf6\xa4^6\xfaq\x8\x91\xb4\x2/" "\x5\xe\xfe@\x99\x7\xc\x96\x61V\xde\xa6\xe2\xf7\xaaq\xc4q\x8c\xc6\x6O\xe2\xf9\x12" "\xccs\xb5\xc\xff\n/\x99\x99z\xb9\x9c\xf8\xb5\x1b\xbd-\xf7s\x1d:\xe8z1>\xeI\x9f,\x89" "O\xf5:\x98\xfO\x94\x8b\x9d\x84\x12W\xab\x31\x1c\xa3\xfa\x8cg?\xe2\x2\xa6xr\x80\xea" "\r\xeeH\xfe\xe6N(\xd0\x9e\x17R+\x9d+4]^m\x92\xffU\x13j\x9d\xab\xfc\x33J\xbb\xd4\x1" "\x8d\x96\xc5\xd4\x82\x9f\n+\x9a\xd2]M'\x99\x81X\xcfX+\x12o\xdfRD\xe8\x92\x36.\xa6" "\xb3\xc0@\xd1\xda\xed\x8f\x10\xddz\xcc\x6\x1fuC\x16\xf3>J3o\xb4\xda\xff\x93\xd4\xb1" "\xce\xac\xf8\x66;\xa1\x35\xf6\xb4X\xca\xad\xe6\xa4\xf1)\xfc\x9f\xfd~\x8a)\xae\xe6" "\xc7\xa9&9u\xb9\x98K\xc7\xc\xbc\xf5\xc7\x84\x89\xba\xa7\xaez\xa7\x16\xb\xbd\x98k" "m\x95\xb6#\x97\x18/7\x8f\xeb\x39\xee!uA\xa4\xc1\xef\xa0\x81\xca\xa2\x39\xb1\xd1\xce" "\xcb\x9b\x5\xca` \xb\xfc\xadu\xc5\xc8j#\xcfw\xac\xee.v\x1d\xac\x8b\xc6\xb7\xc8\xf1" "\xb1L`\x8b\xf8|r *@\n\x83\xda\x8e=y\xae\x94\x95\xa7&V\x4 C]']\xf9\x98?\xfe\x41<\x9e" "\xc9S(\x5\xe5\x34\xd8\x15;\xf7\x99!\xc2\n\xbd\xe6\xa5\xd9\xae\x88{ &Zb\xdb&\xf8\xa0" "KZ\x86\x3\xaa\x87n_\x81\x13\x46\xc8\x7\x9dW\xb3\xe\x9\x66\xc5\x32\xa8\"\x92\xaa\xa5" "1\xd6\xe0\x92;\x18\x9f\xfe\xab\x43;\x5\x9e\x8\xf\xe9\xd1\xa7\xec\x8b\x65\x2SB\x1b" "\x8c\xe3;T\xf3|\x8d.\xc6\xba@\xcb\xb4\xe}\x85S\xb5\xb7\x15\xe7\xc5\xa5\x8a\xb8\xef" "j&nN5a\xf1\x18)\x98\x7\x9f|\x8e\x9\x90\x8cZ\xf0\x9\xa6\x12\x65\xa6\x18#\xd4\x33\xca" "\xe2\x8f\x14\xab\nT\x97\xc7\x7\xdd\xfe\x81'\xe3\xc1\xf0\xd1\xf3'\xf1K\xc6^\xf3\x34" "\x96\xd3\x1d\xe2\xa3\xe4OF\xc\xec\xe5l;\xceM@)\x9a[\xf7\x46%lQ\xf9\xa9\xac\xd6\xa3" "\x8ci\xbdK\xd3&\xdc \x8b\xdc\xb5\x80.\x7\x9e\x9e\xc0\x1b\xef\rZ\x87\xd9&I\xed\xb5" "\x8d\x18\xc2\x14\xa2\x30\x99~\xe6\xb\x9\x9=}c\xa7LTNe/[\x9e\x8e\xd0M\xc8\xbd\x1\xf3" "\xdb}\x89+[\x93\x1bl\x7f\xcc\x38\x80\x9b\xce\x30\x62\x8bYN\xc9\x41\xca\xcf\xde\x64" "S\xe8\xe4\xb5<\xe1\x30\xb0j#\xa0\xf6*\xa5\\^A\xd9\xc6\x2\x1\xebN\x91\xd5\xdd\x38" "U\xa8\x99\xbeg>\x1d|vW~\x9b\x96\x46\xd8~\xa1\xdb\x1e#\x9f\x94\ru\xa0y\x8b\xf9\x84" "u\xbb\x8e\x32\x1a\xfe](q\xc5\"\x1f]O\xec\xdd.\xb[\xdd\xcf\x86\xc9\xbb\x65\xb7\x39" "q~\xae\x8\xa4Z\xef\xff\x82|\xef\xcfi\x1d\xb4\xb6\xf\x7\xf7\xd8'v\x16G\x8" "\xc1\x1f\x33\x43\x9c\xac;\xa8\xcc\xa0wR\xbc\xb4\xd9&\xf7TeZ<\x86(\xb0\x11l8\xed\x15" "!\xcb\xa0\xb6L\xb7\x2\xaa\xd8\xa0\xcd~\xe%}\xb1\x83\xa2\n\x7\x32<\x9d/B\xd2z\xdb" "=\x2\xa3=\x8\xd0\x88\x8f\x61\x1a\xf3\x4\xec\xb2\x8fo\xeb\xf\xf0W1\xa8Tk\xf1\xa0\x86" "l\xe1+:\x5\xc7\xd3\xfe\xa5\x9d\x0\xdf\xfdZ\xda\xf0\x99\x1e\xdf\xc5\x1e\x8e\xdcHN" "#\xc7\xc7Q\x85_\xdf:s>\x84\xf4\x12\x41\x5$\xecq\xf8\x1a\x8e\xc\x92Q\xddLh\"\xa8\x98" "50W\xa6\xda\xeb.\x8e\xcbL\xe3*3K\xca\x95;6w\x88>\xb5\xf0\xb1PV=\x2\x1b\xd5\xe3\x8e" "\xb5\x14\xce\x34\xc8\x9a\x9c\x43\n\x98g\xa4y\x0\x9cg}\xe2\x41\xe0\x64hl\xcal7^\xcc" "\xf2O\xa1]`\x98~|\x4\xb6\xd3\xe3\x88\xc7\x8e\x16-}\x13\x9a\xe3\xf8\xbb\x36\xe1\xb5" "\xab\x64\x16\xf3V\xfe\xf1\xbe\x1f\xa7\x88\xa4\x35Z\xd5\xfa\x90\x45%\x9eQY\x8cp\xae" "\x1cG\xe9\x13\xda\x83\xa6\xbd\xc9\x80K\xa5\xed\x31q\x92\xe5\x18\x16\xcb\x93g\xfa" "\x80\xfb\xe5\xb1\xd0\x42=\xfi7'd\xf\xed\xb6\xf8H\xa1\x8\xcb=\x9eK\x8cY\x93\xb4\x80" "\x87\xc1\xf4\"M\xcbjq\xbfhr\xcc\xbf\x80\xbd\xef\x33\xf5.\xcaI\xe4?gU\x12\xaf\x9f" "\xaa\x38\x17\xde\xaa$\xb9\xb5\x17\x8\xdb\\\x9e\xa7\x65\x33\x97\xf0I\x7f\x62\x1f\x11" "r\xe2H\x84\x19\xf1\x82x\x82\x8cH\xd2\x84\x97\x34\xe5\xf9\xdd\xccT\xb5\xc6\x13)\x0" "\xd4\xe8JY\xa0'\x7f\x91\x8e\xcdLS\xfe\xdc\x8d\xc1\x9e\xfj\xfaS\x81mvs\x83\xa5\xf9" "\xf0~c\xbd\x8f\xcb\xfe\xf5<\x90Y\xc0\x63\x9c\x9b\xc1#z[\x15V\xd6\xc1)\x7\nU\xc7\xeb" "X\xc3 p\xa3*\xe2\x93\xff\x7Q#9G\xbe\x19\xf9\x1\x10L-=\xadg\xfc\x1e\xd7n\x9f.]H\xa5" "\xbb\"\x89\xbewLlV\xf7\x13\xc3\xd3\xfdGJ\xc9\x97P~\xfd+^\xc3\x16\xd0\xce\x9f\x1b" "}\rQ\xdc\x83R\xc1\xd4R\xc0q6\xa8\x3\xdc%]\xec\x37\x43\xcb\x91X\xc8)\xd7\x63\xf0?" "\x1d\x32\x3T\xdc\xd8\xaa<\xcem\xc7\xd4\xe\xcb\x15\x34U\xa4<\x11\x8\xadP\xe1<6\x6" "fb\xad\xe\xe9\xfbz0\x93m0b\x8b\xe3\x8fqM\xbd\x97\xc4\x93\x90S\xdc\xfaK\xc5J\xd1h" "\xc7j[\x16\xd4\xf7\x18/\xb9\x8dm\x8)\x94\x62\x9d\xb6\xf2I\xe2\x89W\x1X\x8e\xc2}\x8" "(<\x94\xc3\xcd\xa3j\xcf&\xbf\xdd\xe#?\xd7\x1\xa3M\x83\xa5\x17_\xbc\xe8\x1f`\xb1\xe3" "\xae\xf8T\x80\x8b\xcb\xe2\r\xec\x1d\xa5`\xfcH\xe\n_\x2\x95\x14\x1b\x98\xab\x36\xeb" "\x17+F\xb3\x93\xd0\xa2\x7f\xd3.m\xbe\xe6\x33W\xd6\x62\x98\xfd\x15N\xce/u\xb5\x16" "jQZ\xf4\x83G\xa4y\xa4=/4\xf5\\\xd8\xbc\x8c\xfd\x36\xd3\x1e\x63\x1cI\x11\xb9\x1c\xcf" "\x90\xd0\x2\xe8\xbfK\xf4g\x86\x9b\x13K\xf5#i/\xc5oi\x84\x66Z\x81;\xb3\x7f\x94\xcdm\xa3\xd5Y\xa0\xd0\xed\xe6w\x19o\x9a\xfb\xf6s\xb4\x83m\xe2+\x98" "\x8d\x92\xb7\xb4\x9a\xc1\xc(\xed\x8e\x37\x91\xfd\xbfV\xcf?-\xae\xb\xb4\x91S\xc2\xc8" "N[\xe3g\xb0\xe\x43>S\xb2\xf2%\x15\xd0\x39\xa5\xb7\xc9\x9a\xa3\x63\x13\x97RP\"\xb9" "\x8a\xec\x93\xc5\x13\xdc?\x88\x42w5\x91\x31\x9f\xff~'\x7\xb7\xad\xc0\xcd\xd5k\r\xbf" "\x97sOD86%\x94\xa3\x81iC\xa5:3\xfb\x99\x8c\x17s$\xc2\xbe\xee\xdd`@k\x15\xe3\xdc\x99" " ?\xa6\x12\x64\x33\x16\xcb\x42\n[}\xa8\xcd\xdcJ\xbbr\x85\xfdSs\x8f \xd2K\x8d\x63" "$\xdf\xf5~\xc5\x34\xf9\x0\x9a\xf\xd9\xdb\xd4\xf4\x1dj\xdd\x9dZ\x90\xf5\x90r1\xd6" "@\x95'n\x96\xfd\xb8\xc5\x9f\xadu9\xd4[\x97\xcf\xdes<\xbb\xa5\xdbO\x8\xab+@\xe4]\xb1" "\x1\x42H\x11Q\xccY\x84\xe8\x96\xc\x93\xbc\xaa\x8d\x86\xb8\xe6j\xdf\x9a\xfd\xfd|O" "\xf4\x36\xb5\xe7\x9d\x41\x31\x64hv|\xae\x64\x8f\xb\xd4\xee\xbd,:E\xc0\x8c\xcf?Xd" "\xe1\xe2\xb3\x8c(\x84\xa2\xd2L\x81\xbc\x8a!d~\x6\xac\xfc\xfc\x63^\xc9\x8a\xa2\xf8" "\x99\x90*HVu\xf5\x4s\xf3Zv\xe8w\xda{Iev\x91\x16\xc6\xa4\xa5\x7f\n%\xf0k\xe\xe6s\x4" "\x93oax\xcb\xb2L~\xd0\xe0\x33\xc4\xe2\xd9\x17\xa9\xb4\xd5\xe\x66\xd2\x82ya\x89\xce" "D\x7'\xedh\xde\x10\x96X\xce\x33sy\x8eY\xa6\xe\x46 N\x88\xe7\x97\xcd\xa8\x82\x15n" "c\xa8\xf1\x36P\x8b\xaf\x14\xc2\x42\x92@\xa5\xaeq\xef>*\x88j\xd8\xc3\x19ic\xbb\x7" "\xe1.\xf8\x1b\x97\x16\xfa\xea\x85\xca\xa2'3\x82\xbd\xe\x4s\xc7\x38\x6\x18\xc8\xe7" "\x16\xf7zn\xdbs?\x82\xb9\x2I\xedy\xb0\xa0\xea\x10\xf5\x1\x9\x39\x85\x95\xb5\x8d\x90" "\xfa\x39\xdc\x81\xca;\xd4j~\xfd\x42\xbb\x30\x1b|N\xb9\xd3\xe5\xbd\x0\xb0\xd6\x9b\n\x34" "\x8d\xf5\xc2\x62\x45\xb0\x32\xc9\xe7\x36\r\xa5\xd6lvV\xc4\xb\xd5\x41\x44I\x96.P\x83" "\xa4\xc8\xae\x0m\xac\xdb\xa0\xd1X! \xe1\xd3l\x5\x34\xcd\xac\x81O\xc6\x8\x12|}\x4" "<\x13Sw[\x8cr\xfc\xd5\x96\xb2\x34\xc5{,_\x1b\xf4\x97\xfa\xc1\xfd\xe6\xfa$\x7f\x85" "\xac\x8fS\x85~\xb9\x82:\xa4\xf4\xbe\x36*\x1c\x46\xdb\xc2\xdf\x9ai\xaf\x9eo\xcd\xa3" "\xd7\x63\xfd\x3\xcb\xc7\xf9\xd6& \x1c\xd6\xfeR\xfK\x96`\xa5zG.Y\xf6\x39\xae\xb5\xcc" "\x88\xa3\xcf\x94\xaf\x18:\xb6\x94\x64\x62R/`\xd7\x95\x93\xe3\xe2\xcd\xcdP\x88vb!" "\xb]\x19=\xbf\x45q`\xfo:\x13\xb1}\xca |Q\xf6M\xc2\x1a\xd7\x93\n&&\x1a\x66\x42\x16" "\xf3\xc4I\x6$\n\x94\xe7T\x1f\xb8\xf4\xc0n\xa3H\x15\xf0\xe5\xd1\xb1N\xe1\xc7\xf5\x82" "yJ\xff\xaa\xf8\xe8\x1b\x43|\xba%\x8a\xa1\x42\xec\xd9\x35\x37\x93/ F\x9c\xbc\x33\\" "S9x0\x86\xcc\xc6\xd1\\\x37I\xbS\xa4K\x1e\xb3/F[\xe1\xf5\x3=\x9e\xee\x96\x31%\x4\xdb" "\xd0ZX\x1d\xc7\xdc?N\x90\x1d\xc1\x1e\x9c{\xe3g\xc1\x9b<\x10\xbb\xa1\xa7\x8b\xe8N" "\xa5uH\xbczK\xa7\r\xbf~Od\xd1Y\xc\x65\xb5\xa9<\x87\x17\x1f%\x94M\xd0\xe1\xeb\xed" "\xd4\xdb\x99(\x91\xaa\xd7\xb5\x7f%\x97 \xc6H\x93\xfd@\xc\x1a\x43\xda\xb7\xa7\x96" "t\x7N\x86<\x8f\xe9-j@\xb2\xaf\x1dS?\xee\xc9\xae\x3~-\x92\xab\x43\xd0~\x85V\xfc\x0" "K\xde\x9e\xfa}\xdb\xe2\\t\\\xd5@\xd5\xf4V\xb8\xec\x15\x38\xe1\xb7\xf4\xc5\x89\x12" "WE\xea\xff\x96*\xd5\xad\xdc\xfc\x3\x42\xb2h\xe0\x30\xbc\x31\x1a\xfe&\xf7\x16\xbe" ",\x96\x35\x0#\xd3\xebL\xa2\xdc\xcd\xb9 \xc2\xccZ\x88'\xacOQ\x97\x93\xc1G\x9ej\x9" "\xb4\x32\x4\x9c\r\x14\x9\xa9\x42\x39\x5X\xab<\xd9\n\x8cSR\xb1\x1cU\xc0\x9e\x97%\x4" "B\x9f\xdd\x11\xf5\x2\xcfW\xcd\x84]'\x93\xa9Z\xa5\xc4\xda!\xfe \x16p\xaa\x34+C\xca" "\xf8,D\xa5&\xc7\xb6x\x96\xf0\xc9vW\x8a\xd7\x66\xda\x10\xb8?\xe5>\x16\xfc\xa6\xa5" "\xc\"\xcd\xe6\xa2\xb9=\xd0\x99\xbbz\"!\xf9\x0\x10\xe4\x82\x9a\xc6\x64`Y6\x19;\x98" "\xb7\xd2\x99\x37|6[\xce\x1c\xd6\xd8R\x10sz\x1f\x15\x33\xc6\x84\xce\x33#T\x7f\x82" "\xfe\x9e\x1a?\xfe\x9c\x97\x7\xd4\xc\x1bL+\xaew<\xdc\xb1r(\xcd\xa6\xe0\xbd\x8urX\x1c" "\xca\xd3\x17z\xca\x5\xd6\x97\x19h\xa2\xec\"p9\xe2}s\xc8\xc5\x90\x16\xaat\x8f\x93" "\x81\x9f\x39\x61\xee\xd0\xdb_\xd0\xe6T!\xa3\x87\x11m_\x8f\x92\x37\x94J\xe1\xb5%\x95" "a\x1b\xdfq\xa5\xbe\xf8\xd7\xdc\x62j\x17\x8d\xc5\x39\n\xaf\x1c\xf3gK\xb2t^\xa1\x8" "\xc7\x32rJfyfa.:b\x9d\x9a\x89U'\xb\xa4\xaa\x1b\x32l\xf0\xee\x9a\x14\x96Lm\"\xb8S" "\xe3\x96q\xb8\x82\x5\x45X\xe3\xebr\xf0\x1b@\xe8\x83\xb7\xe5\x87\x15\xba\xcbWo\x9d" "<\x9fuK\xb2\x11\xa6\x81\x87\x99\x34z\xc8mu\x1a&\x15 \x8a\x42&\x7f\xc\x8a\x63\x9c" "\x8cW0\x90\x62\x1c\xbc\xc8\xb1\x87\xc9h\xef\x30\x9f;@\x8b\n\xe2U9\xd6\x84,V%\xe6" "\xf8\xbe\xa0~\xe0\x3\xea\xf0\x7{\x82S\x1cYE-~_}\xb1\xe1\xfd\x1b\x1b\xf1/\xb5\x34" "w\xb4Q.\x1f\xec\xe3\x9bp[\xaah\xbc\xb\x84\xb3\xee\xa4\xdc\xc\n\xeb\x9d@Nq\xcc\xad" "\xf0'Z\xbdK\xd2\xb3+_I=O\x93\x96\x8\x81\x2H\xf5\xb1{]\xcc\x38[\xe7g|B\x2\xb1\xa7" "\x1e\xf2\xe7\xd6\xdcL\xd8\xef\xe1\xb2\xfb\xear\x1\xbc\x32\xd5&\x3\xd9\x39\xa7.Z\x7f" "x\x12o%7,\xeb\xce\x94\xf\x31\xa7o\x8b\x8a\xfd\"\xf9\xd8\xbc\xb\xf0\xa4\xdd,\xb0\x38" "\xb8\x1\x18\x10Z+C?\xd5\xcd\xe9\x18\x93\xd2\xf0\x13\xc3T!\x8c\x1b\x64\x64\r\xac\x35" "\x9a\xe1G\xd7\xfe\x4`$\x95\xd3\n%\x8d\xe1\xfa\x1a\x32\x0\xe3O+\r\xc4\x34s\xf\x65" "\xed\xaf\xf0s\xae\x36\xfa\xde\xed\xe7q\xcdxm\xf9H\x6\xe8\xd5\xeb\xe5^\x9\x2\ng\x9d" "\xd0\xf5\xe1Ua\xbfoa\xa9k\x1a\x11\xf6M\xbc\xe5\x88\xa7\xba\xad\xcc,\x7`\xbd\xf4\x92" "N\xcf\x5|\xb3\x34y\xe5nW\x89\x62{\xe0\x9c\xd5mgN\x12\xd1\x39\x94\x82Q\x82\xbaO\xb7" "\"f\\;`\xba\xcd\xaf\xa9\xc8\n\xc9\xd7\x93\x15>\x99{P`\xbf\xd5\xf7=6\xc0;\xc2M\xd3" "\x8d-\xce\x1b\xfdy\xb6*\xd6\x13\xbaT\x8e\xbc\xf3\xab\x6\xc3?B\xd7g\"\xf6\xeb\x5h" "\x0\x9b\xa3\xa5ZO\x94$\xf3\xaf\x64\xa6\xf0\x7f\x63\x2\xde\x9cK\xed\x18>m\xf6\x8a" "\x1d\xfa\x8cYU\xee\x38\x1b\xe5[#c\xfc\xdc\xe5\xcb\x99\xda\xe6O\xa5}@1\\*\x7f\xc3" "\xcd#2U\x15\xcd\xc2(Yvr\xcf\xfU\xc6w\xd6\x2w9d\xd2\x6\xb8&c1\xccG\x6\xc9\x82\x3\x30" "\xef\xd8\xf4%\xb1\x1e$\xd8\xe5\n\xfaKP(\x81\x1d\xea\xef$\xee=\x5\x1.\x94\x1a=K\xc4" "\x96\\\x9b\xa7\xbbT\xfd\x93>\xae\xb6Ptp/yJy\x18\x1b\x8\x32\x3\xd1\xbc\xc4\x32\xe6" "\xdb@^'\x9\xc4\xfc\xb6\x84\xf7\x8e-Ug\xbc\x7\x9fs\xe8\xb9\xc7l:<'\xef\xb2O\xa1\xe2" "\x8f\x10\xfc\x0\x97\xe1\xa7\x9d\x7L0\xfb\x88\xd4\xe0rm\x10\xd0\xe4\x88Jep\x14\xf5" "\xe8\xf2\xe7u\x80\xac\xb4\x41\xbd\xf5\xcd\x89\xd3\xc3\xb8\x8f\x9dw/nP\x98\n~ob\x81" "\x94\xad\xf6\x91\xaa\x31T\x99\xe0\xc7\x19\x15\n\xee\x3\xe8:\x8a\x39\xa6\xd6\x86\x1d" "\xd0\x34W'3\xb1Y#.F\xad\xa8?\xc7^\x9f\x15\xdb\xc0\xf5\xd3w\xa7\xf3\xd5%W\x8fv\xc5i\xbe\x80\xceR\x15" "\xa9J\xbc\x7\xce\xc7$\xb0m'\xca\n \xe9xe\xdb\x44\xd2\xf2\x38N\xad\xaa\x19\xfd\"\x1a" "\x7f\xf0U\x89$\x8\x15OX\xf9\x1e`\xbb\x65\nH\xbf\xcf\x1b\xe6\x81XaYL[\x9b\xc3\x8b" "B\xd4h\xe8\xbb\x38n\x85q\xc5\xd6t\xe3\x16\x45\x96\x91_\xf/\xfd\x9\rQ\xdd\xfb\x0\x88" "\xf6$x_\xba`H\x9a\n\xb0\xaf\x19\xed\x91|I\xc7\xd4\xb5\xb4\xb2\x95\xdbx\x3\xb8\x46" "\xf0\xf3P\x84\xfa\xd8'T\xfe|\x94\x8e\xba\x35\xf9$\xef\x10\x93\xfb\xc2\xb8\xb1+\x4" "\xf1\xf6\xca t\xaayi\x17 \xac\xb1\xcb\x99\x8dvC@\xce\x95yR\x83\x99\xe8k\xd0\xfb\x94" "m'\xd0\xeb,\xe3\x96\x9b\x86}5\xa4\x66\xf7\xa9\xf3\x4x\xb1\x9c\x13\x9d\x33\xe7\x9d" "!\xc3,\xb\x84u$\xfc\x18\\h\xf5r\x86?\xff\x97\xcc\x45\x8\xcb\xdc\x45\x8\xe5\"\x36" "\xe\xba\xf8\x7f\xe8\x98\x84\xfb\xb2\xaf\x33>\xda:|-\x6\xf3\xdf\x6~.\xeb\xa5\x13\x1f" "\xa3\x86=\xd4\xf7)d-\xbdk\xc4\xa4\xaf\x63\xf7N\x96\xbe\xc5T\xb7\xeb\xe2s\xdf\x30" "u\xb4:v\xeeG\xd2h\xbd(\xd6\xa2\xfe*AS%d\r\x85\xa1o\xfd\x84l\x3l\xf4[\xb6\x66\xf0" "\xd7[\x86\x8f\x91\x35\x83\xb4\x9fJ'\xdc\x8e-[3\x90q\x7\xde\xc0\xa2u\xff\xe3\xcf\x9b" "&M\xe1\xad\xf7\xd8\x8e\x61\xa2\x9d\x9d]roK\x9en?\xe6\x18\x98p\x11'" "\x10\x94\xc5\xd5\x64\x66\x9dT\xc5\xe8\xe8\xa6\x37\x8f\xcd\x66S\xe7SH\xfaX\nr\xda" "\xb\xb5\xe2\\\x0\xa8_G\xbd\xbc\x64\xe8\xeaoV\r3O\xfb\x8e\xdd&\xd1\xa5\x8f\x2\xb6" "2;\xb5\"\xf3\xf\xf7\\\x82\x92\xe7\x91\x9b\x0\x89\xed\x83\xae\xbe\xba\xafM\xb2\xce" "\xec\x84\x10z\x9eWl\xe1\" Y\x82l\xed\xc3\xa1%\xbb\x4\xda\x8b`J%)\\\xa2\xb7\xb4\xf1" "\xca\x13!\x87\x90\xe1\xc3}/T\x82\x99\xb0\x62-F\x8e\x82\x13\xd2\xe>\r\nZ\x8f\x9a\x15" "@\xad\xfe\x38~eO\x80/\x83\x90\xf4[QC\xeb\x19m\xf5\xf\x4\x4W\xf8\x8e,\xbe\xae\xaa" "\xfaRS\x2\xd0,$\xaf\x12ZX\xca\x99\xc\xbe\xed%\xe7\x2@h\x1b\x18\x95:H\xaf\xf4\xf4" "A\x96\x61j\xe5Q\xd8\x35\xceG^\xa4\x63,\x1\x90,\x9b\xef\x99\xc1\x3~\xbf\xeb\x8c\x88" "\xefQ\x19R\xd4+\xdb\x1e\xe2\x1;\x15`5\xcb\xd9L\"\xe2)\x19\x98\x1b\xa2\x7\x1b\xf\xaa" "\xa6l\xf4\x36\x9fU\xcd\xb6_C\x8c\xe2\xb1~\xf5\xf7\xe3\"\xa8\xb0\x65Hj\xcc\xe>c\x88" "\xae\xde\x9f\xcd\x85\x9y\xb.is\xc6\x65KWg#\xd6\xd0\xb5\xd7\x86\xa8\xd5\x9b\xed\x30" "FI+\xe9\x89\xef\xc8]\xc2\xdb\x98\x37(d<%\x1\xab\x8a\x80Rv\xba\x1>-\x19\xbav\xde\x16" ".\xa5_\xa3\xa1\xcdWI\\n\xd0\xbb\xa4\xe9\xf8I'\xd9@)\x8e\xa6\xdd\xa4\xce\xba\\\x96" "\x12\x8e\\\x9d\xbak\xf1\xa7\x30\xd6\xbd\xa2M\x8a\xeb\x8f\xf7\x46\x85\xe4W\xdd\xe" "\xef=}<\xa1:\"\xd5\xe9\x9c\xf1^i\x8\xc3\xa6\xf6g7\xba~}\xcb \xc7\xa3uO\x1e\xed\xe4" "\xf4\xc5\x91\xcb\x80LN\xc3\x93,\x8\xdc\xa5\x83\xbfy^O\x91\x99Kk\xcd\xb3\xc6gP\x1e" "\xb3+)\xdeJ\xe9\xdb\x85\xe4Z\xb9\xcas\xf3\x8a\x15v\x98\xca\xed\x62\xc4\x81\xad<_" "Z\x8M>=\xec\xcc\x8c\xe1 \xa1\xd0\xef\xfa\xa1\xd2\xfb\xfa\x14\x64\xafz6\x93\xcf\xe6" "\xf7\x8b\x38<\x9f\x8c\x15\xf7\x92\x80L\x8c\x32\xaf\x13\xbf\x1a\xdb\x1f+o\x98\xb7" ".m\xbc\xf4\xe1Z.CE>\xbe\x65\xd3\x9\xaf\xe8\x65\xf\xb2\x30\xcf\x43\xde\x61#\x88#\x99" "oD\x1e\xbf\roE\xc6(\x90)&]\x18\xcc\xd8\x9d\xcaK\x18\xc6\x45\x45k|J\xfy\"\xc3\x8c" "\xa2\xa8\x30\x97\xa1\x64\x30\x62\x35@y\x19/\xc5\x8e+t\xbd\xd2\x6\x1G4K9`<\x94\xa9" "\x2\x34M\xd5\x9a\x35;\x83`Nz\x16KjQ\xfb\x11\x86\xb1%\xder95c\x81\x1c?\xa9^\xa0\xd5" "F[\x85w\xb8w\xa9*\xad\xfe\xb9\xfd\xfc\x11\x96U\x8c\xefR\xa1\xe6\x90\x1by\xcfz\xed" "|\xc1\xa9\xd8\xa1\xe7\xa5\x1e\x85\xf4\xa6\x3\xec\xc5\xeb\xf7\x90\xcd\x39\xec\xa9" "\xc2.\xe1\xa5\xf3\x87\x63/\x9a\x10\x0\xe2^\xda\xef\x9\xaf\x62\xfa\x1\x7\x63&\xea" "\x1aM\x1e\xa7z\x9f\xb8|\xc2\xda\x1d\x98\xba]\xb9\x9b| \xc\x13\x11GH\xabu\x8b\x31" "\x83W\xaaX\xec\x1f\x13@]\x1c\x63\xa7\xfbH\xbf\x0\xb7\x9d\x66\x39\xc8\xc7uf\x14\xa9" "2\xc5\x93\xf0S\x88\xb0\xee{\xec\xff\x99\x82\x13\xf4\xeei\xe8Qie\x1d\x86\xa5\x3Tw" "\x9a-\xc0\x44\x6\x17\x9bV\xd1\xce\x36\xceUa-5\x16-\x9d\xed\xf3(~\xec\xf1p-]w\x1a" "\x97\xc0\x8a \xd4J\xc9\xd3\xbc\xcf\xbe\xc1Z\x9f\xbc\x94\x9f\x82\xb4\xdfP\xd9um\xe7" "\x11\x9b\xdd\xb5\x90\x16\xb\xb2\xb3\x30U\xdc\xb5\xfd]\xedN\n\xf4 \xf0\x8e\x91\xb4" "\x10\x0\x87\x83\x8f&\xa3\xca(\xf3l\x7/\xbf\xc5\x15\x9a\x4\xae\x11\xe2\xb5\xbe\\\xad" "\xfe\x36\x37p\x9a\x9\xb2\x35\xc\xb1\xc5k\xb4J\xa5\xaf\x8bP\x80-\xa9\xfe\x9cxC\xf8" "3G\xce\x1b$\x88\x1c\xa2\xee\xfb\x11\xbc\xc2\x19\xb4-\x8fj:\xcc\x9e\xcf}\x10\x42p" ">\xe1\x5\xf0\xef\xd5\x65\x98\xf4v\x1f\x1a\xb5\x41\x61\xccR\x19\xfa\xad\xfd\x41\xba" "\xd4\xd4\xda\x0\x91S\xb3\x89\x8esz\xd9\x1e\x85\x19\xf2g\xc8\xff\xcf\x92P\x9c\xc8" "\x1fI\n``\xb?\xa3\xe8\xba\x66\xa3/x\xb9\x32\x93~\xbf\x8\xa5\xa3{\xd2\x36!\xb9\xa3" "\x0\x31\xc6\xc5\xf3\xe7\xc0o\xfe\x8f\x64\xad\x89\xa3m\xfb\x86\x34\xe3\xb9\"\x9a\x62" "\xefv\xd4\x42\xae\xf4\x4\x63Q\xd8\xab\xc3\xa4\xd7\x9a\x44\xf\x88(\xf7\xc5\x1f\x91" "#\xa6Ndh\xa9IA\xa4\x66\xa5\x1d^|\x93\xe8\x44\x82\xc4\x1c\xb7N\xbb\x80\xe9\xf4.\xdc" ",\xeb_\xfe\x94G\xab\xf3\x38kf5\x9f\xb\xb3\xe8j \xd3\x90\x8b\xe3\xae\x9f\xca?\xbc" "V\xb3\x3\xa3\x35%\xd4\x4\x3\xb0\x18\x9cO\x17\xca\x94`\xa1RA!(\xab\xee\xab\xe1L\xceX\x15" "\xd1M\xc5\xff\x9c\x8c\xfd\xd9\x33l\xc8\xd4X/\x8f[0pV\x4\xa2\x9c\x5\xc3\x3\x9fu\x1" "\xdd\xff\xf5\xe5\xd0?\xa5\x8c\xbf=x\xf5\xe9\xce\rm{\x15\x1f\xe1\x64\x83\xb\x0t\x90" "E\x13k\x6\x41\x96Q\xd9\xef\x9e\xe0/@t\xb9&\xe1p\x92\x43\x9c\x82\x35\xde\xd6\xee\xa3" "\xfc\"\xff\xf9\x8e\xb1\xf4/\xde\x8f\x37<\xf2;\xb2p\xae\x1c.<\x9f\x33\xd8\xfa\x82" "Os\xe3|'\xef\x8d\xe2\xf5\x8f\xa6M\xa7\x32y\xed\xb7\xf8<'\x98\x0i}\xe7\xbb\xc0\xf0" "\xf1\xe7\xc9\xec\xe2\xd7\xfc'\x8fM\x4\\\xe4/\xdb\x61\x85ZS^\nJJZ\xfa\xec\xc1I\xd1" "\xe0\xc7\x95\xbg@d\xbdVx%j\xdb\x31\xcb\xab\xf2\x33]-\xa3\x37\xae\xb7\xb8\x1a\xad" "\x82\xcdM\xbb\x15\xf0q\x1e\xa9\xc\xaa?\x9c\x65\xcd-;\n\x85\xaa\xa8\x63\xfb\x81t\xad" "\n\xe\x42\x38\xb3\x30\xc9T/\x6\xf2\xdb\x87nz[\xb3\x19\x95\x8\x66\xdd\x32Z)\x80v\xb2" "I\xa1_\xb9#\x8f\xce\x14\xa5g/dQT\xac\\R\x89\xde\x85\x42moB\xf2\xbe\xd5\xa9y\\\xab" "\x1e\xd7\x9c\r\xb5\xd9\x85y\xf3\x30\xe0X\x8b\x1\x63\xf8\x31\x1c\xc9Y\x86\x81\xe8" "\xdfg\xa4\xd1\xef\x45-`Ur\x97\xa7\xdd\xe4\xcb\x63\xbc\x65\x35T\x9b\xdf\xfft^ !<\x84" "\xe7\xde\xe5\xcd\x18\xe4\xd7\xe2$D\xf9\xd5\x81\x1f\xfJ^\xff\x99\xa9\x1c\x1e\x8b%" "\x14N\x1dg\x7f\xa4\xa4>\xca\x11\xf\xa7\x87#\xa8[\xaa \xef\xde\xfe\xc1 {&\xf3\xb\xda" "!\xab\x8c\x8a\xd7,\xac\xaf\xae\x81@\xbf\x96[^\xc6\xf4oI\r\xe3\xff\xe3\x1e\x8d\xd5" "\xdeK*\xf6-\xfc\x66\x6\xfe\xde\xf1\xf2\x8d\xe9\xcd\x18\x1c\xc3\xa8;\x86UN\xd3\x5" "\xee<\x8d\x0\x37\xe9J*V\xda<\x89\xca\x92\x9am\xeb\x8xq\x7\x0\x82\x94\xf6I \x88\xd7" "\xa3\x92\xbfiE*\xfd\x42\xc2X\xe0\xfaL8\xab\xc8\xfa\xc2\xb4\rh\x99\xc2T=Y\xe1\xbf" "h\x1\xc5\xa6,\xd3\x9\xea\xd2\x8a\x38\x62\xbf\xecT\x87i\xf0\x1f\x93\xa1\xa4\xd5\x93" "p\x92\x10y\x1d\x93#\x1\x14K\xb\xa2\xc7\x8a\xf7k\x86\xf8zag\xa1\xc0\x92\xd7\x86\xfc" "5\x96\xe9\x8a\x13\xec\xde\xb9K\xec\x96\x10~d\xf6\xdd\x91\x8am\xf9=Ry\xea\xea)\xfd" "[\xb8\xca$|\xb1\xa1\xd8\x85\x8b\xa9\x84\x7f\x34\x90\x8\x9b@\x17\xb7\x66\x45\xe4L" "\xdb\xc6\x9f\x42\xe8\xeb|\x6\xcf\xca\xe9\xe8*\x81I\xaa\xc5_\xf7\xb8u\xa0\xc0\x45" "\xf8\xcct7\xb4r\xe5%\x12\x94\xdbH\xfat\xd8\x92w\xb7@\x9b\x1d\x86\x9e\xb2\xe6{-\x6" "\xa1Y\xe1\xce\xec\xe2\xdb\xfe\x18\xfc\x88\xb1~X\xb7tQ\x15$\xdd\xb4\x2;8\x7f\xe\xb3" "\xc2\n\xe6`\x91.\xac<&b\x8b\xa0\x65'\x97\x19#\xae\xd2\xf9\xe6\x8c?~xC:s}e0\xf2(\xad" "M\xc6Hl\xf0\xa9I<\xdd\xc1\xef\x36\x45\xef\xc4o\xc9P\x87\xdf\xba\x9d[5\xc6\x99\x9e" "\xfa\x9b\xbb\xcfQ\xc9\xcd\xeX\x3\x14 \\\xe5Q\xe9\x1f}\x10\x99\xde\xb3\x2\xad\x80" "+;\xd1\x8f\x11\x37\xb2\xec\xb~[$/P\xdb\xa4O\xff\x19\x45\x17\x93\x3\x9a\x82t\xe0/" "\xf9=\x18\x5\xc3\x34\x32}\xa1h\xc9\xc3\x32?p\xec\x32\x8e\x18\xdf\xc3!\x2\xd0\x33" "\xad\x4y\x9e\xb9\xf1\xbe\xf1V\"m\xd1\xec\xa8\xb2\xc1? \x8aq\xc0\x8e.8\xbf\x16\xf6" "$\xaf%>\xf0.\x80-b\xc1\x37K\xfb\xd2\xb0\xe5\x9d\xe5\xb7\x45H\x19\x15\x87\xe2h\x1c" "\xac]\xa1\xaa\x66\x99oUX]\xff\x10>\x8b\x7f\xab\x85y\x1d\xb1\xe3*\xbcn\xfe\x10\n\x83" "\x89\xbf\x9e\xd3\x41\x8f\xaa\xb9\xfc{\xd2\xfd\x38\xa5\xa0\x8c;K\x80PA\xd8\xdb\xe7" "\xe8)\xb5\x84\xc7\xa9\x46\x41\x43R\xb3\xd2*\xe4\x7\xb5\x43\xbe\xe4~\x17j\xcf\xe5" "\xb2`\xfb\xf6\xaa\xddK}\xda\x45\\\xaeR\x12\xa2r\xfe\xa8)\xfb\x31\xed\xb8\xb9\xb0" "k\xbe\x95\x64\x1d\xd8\x37\x95\xa2\x65\x14\xfc\x17\xd4yx\xce\xfe\xa5\xf3\x1a&\x17" "\x8d\x8c\x17\x5\xaf\x43\xc8UY\\\xc8\"\x61\xb8\x7\x8e\x62\xf1y\xb9M\x86\x39\xd5#\xbf" "\x9\x1d\x83\xa9\xec\x66\x8b\xb\x8 \xa7-\x1f\x9e>\xad\x31I\x86\xe2j\xa8\x39min\x1a" "\xd7\x43\x91\x36\xc4\x89\"\xa6\x41\x62Q3s\xf3s\x5\x18y\xb2\x8f\x92\xf3(\xfe@M\xc8" "\xa3\x9b\xc0\xb8\x41\x8b\xce\x7\x32\xee~vF/\xb\x41Z\xa7K\xc3\x41\x41\xe3\xa3\xea" "+\x19j\x8d}\x80\xeb\xb\xcfn\xa7=\r@/<\xaf\xc7z\xed\xd2\x89\xf9\x11* \xc1\x45U\"\xbd" "\xc6:\xcc\"$8\x96\xf7}]\xb3X\x9d\x32\xb0'\xc1\x84+7\xfe\xb5\xdd\xfd\xa4\x1b\xf0\xa7" "\xf2}*'\xfb\xac\xb2\x9b\x94\x87\x30r\x18\xae!LW\xb1\xc4&\xa5\xdc\x7f\x6\xcf\xe1\xa0" "\x92\x30I\xd6I\xf4\xf6\x1d\xd0\x14\x32u\xbd\xf4\x18\xbc\xc7\x30\\\xa5\x66\xa1\xbc" "EE\xe9\xb2\x1f\x85=\x9\xb6\xf4\xee\xe4\xb1M\xa3\xe4\xb|\xe2\x2\xf5(/g\x9e\xbf\xcc" "[\x88\xd2W\x91\x30\x6\x84V\xe1\xdd\xc3\xe\xf6\xf3\xa0\x92mH\xb6=\xaaK\x2\x95\x16" "\xb3\xc4\xe2\x15\x18.@\xa6\xcb\xde\x98(.\x10!f\xf0\xf7\x15\xfe\xe6q\x84\x17\xa9." "Q8\xab\x80?#y\xa2W3$\xc7\xf5hX\xf4@\xcd@\x1\xf8\xfakL\x94\xe\xe7\xc3\x32\xd8-\n\x15" "K\xe5\xdd\xdb\xdd\xd7\xcf\xf6\x88:\x2GO~\xad\xd1\xab\xa4\xfa\xdc*+\xb6X*{JG\x8dq" "\xcc\xe1\x63\xca\xd5r\x89\xdd\xe7\xa0\x10\xc8\x9b\x90w\xea\x94\x84L\xce\x98\xa9\x91" "63N\xbd\xf2\x63\xb2\xd0W\xfb\xf1\x9d\x98!\n\x8c\xf5\x85\xa2\x41_\xc6\xbf\xe9&\xeb" "\xc5\xd3\xb1\xf6\x34-\xcc\x35\xbe\xb2\x43;]Q\x9fR\x82{\r\x88XP\xc0\xca\x39\xf2\x83" "\xfc\x33\xa1\xf\x18\xc4l[\xbcm5T\xde_I3P\xde\x87:3i \x99]\x91\xe2jT\xfc\x8d\x9c\x9e" "\x1ay>8\x9a\xb9>\"X\x7f\xc8\x39\x61\x81O\x8f\x37\xb2w\xd5[\xc3N\xa6\x30i*B\xfd\xc4" "\x95\r\x1b\x41 \x10\\\xc6\xb8lf-i\x7\x31\x0g\x1c\xaao\xe0\x33<\xfc\x11`&\xda\x37" "\x5\xcd\xad\nJ=\xe7\x7f(\x5\x1aw~\xbd\xd7xf9C?\xbd\x16\xa2\xfcI\x5\";\xfa|\xcf\xe6" "\xbd\x93\x43\x98\x8fi\xd1\xc7\x9d+\x18\xb7$\x81m\xb0\xe\x86~\x8c\xc7\xf3\xc2|\xea" "\xb8\x81\xea\x46\xb1\x4\xf6\x33\x98\xcc\x35qBd\x8c\xe1\xae(\x9bh\xeb\xfd\xdd\xff" "I6\x1e\xd3k\x8a\x96\x8c\x3\xa1\xc1\xed\x1ev\x95\xc0\xd6\ru\x16\x7f\x80V\x1\x34n\xce" "\xd5M\xb6\xe6za\x96\x43\xf3Ns\xe\x93\xfb\xa2\xda\x33\xc5Ql\x95\xe6\x2\xd9\x46\x89" "+\xb5\n|\x1\xc9\x9c\xba\x63\xc2\xe0\x8d\xb1\xc2\x9e\x35\xeeZQ\xb0:\x1v\xae,\xbf\xe0" "\xd3\xe4\xb0\x2\x43\xb3W\xa5\xaa\xda\x86\x9a\xdaK\xa3LA\x1c\"\xb1\x35\xf4\x2\x88" "\x86\xdak`\xcb\x10\x9\x89\x1b\xf1<%\xf2w\xa4Y\xabv\x14\xe4<\xaf\xcdL\x1a\xc3\x14" ")\\S\xf4t\xc0\x9d\x38\x10\xc6\x65\x39\xe1\xedyN\x80\x9aV\xfe*9\xbc\x9b#VSu\xf7\xc4" "\x99\xc1\x3\xce[\x8d\x94!\xc8jJ}\x9;\xb0\xa7\x61P\xcf\xeatR\x1\x37]Y\xb6u\x7\xc3" ">\xb1\x11\x46wv\x81\xb4[q!\"\x9a\x87>\xeeG\x80\x8e\x8f\xf1\xff\xf8?\xdbJ\x95\xd6" "`\xb4\xa6\xa6\xb9\x7uct\xfa\xb\x97M\xa1x\x6\xcQ.\xe1\xad\x97\x86\x16\xe2V5\x9b\xaa" "\x1c\x41\x17G\x98\x84z\xed\\\xdf\xe6\x8a\xad\xf2\xa7%JO\xa6,\xb0\xe7\x12xz%uv\xc5" "'&$ \x82\xc4\xa1t\x96\x17\x63\xb\rirD+\xc2\xeaOUF\xd8\x31\xd4\xbe\x5\xc7\xb1\x43" "\xc9l\xe9\x66[9$\x86\xe1\x99\xf7\xc*n\xe4[\xab\x9a\x17~\x90R#\x8a\xce\xa1\xbe\x45" "a\x8a\xe3\x1e\x81\x32u\xcVf\xbc\x9f\x33\xfe\xa6\x31\x62\x1f\x3\xf9\x37?\x19\xa7\xdf" "_7o\xd3\xcdjF\x11\xb2\x65\x8d\x41\x8b\x99\x36\x16\xce\xd1\x96\x95\xc1Us\xdcm\xd4" "\xaf\xd0(\xff\xc1\x9b)}/\x9doG[\xe1\x83\x34\x44TRmb\xb4r\xdb\x43\x13Rs\x9b\xb0\xf9" "Ye\xc7\x1f\x8f.P\xc0oV\xcL\xf8\x42_\xd0\xa0\xd9\x41\x2\x9b\xe6\x36\x10\x38\x19Y\xc9" "\xfa|\xf0\x98\x44l\xc/\xde\xa8\xc4\x39n\xc$q\"h\x8e\x3zc\x7\r\xb0xD\xc5\xdcN?B\xf2" "X\x86\x88#\x92\x94\xaf\xe2\x1c>2\xd2{\x9e\xb2\x2\xc\x90\x8e@o\x1b\x34\xb8\x94}U~" "v\xc7\xb7\x15'\xep\x7\xb8\xcb\x39\xb4\xf6\x11Z\xdc\x1d\xaf\x46\x10\xbcL\x85\xe2\xea" "\xdc\x0i@\xda~\xb0\xef\xed\xba\xaa\x14(A\xb0(jkws\xfdg\x0SI\x1#l\xec[\xe4\xbd\x18" "\xe3\x11\x12\xea\x8b_u\x10\x17\xe\xe4#\x96<\xf1\x3\x82\xd3\xe0U>\xb\xe9?\x88J\xbd" "\x1=2\xd3\xf9\xa4\x62\xceq\x3^M\x89\xdcl\x1Z\xa2~\xbd\xf7\xeb\x2~\xfe\r-#\xc6\xb7" "\x12\x8a\x86\xf2\x18Sa\xe8l\xbb\x16\xcc?\x1a*\xbe\xf5\xd0\xcc\xe1y*\xb4\xca\xf8%" "\xc4\x97\xc6\x87\x30\xbe\xec\x85\x1c\xec\x65\x9a\xe6g\xd3\xd2\x85\xee\x7w+\xc5p\x95" "\x7f\xfe;\xabH\x0\x83\x88\x81\x9f\xb9\x98\x88\xf\xe3\xb2\x14\xb4\x12\x1bv\x82\r\xe9" "w\xbb\xab\xa1\x11\x85\x32\xbdl\xa0\xb0,\xca\x17\x92S\xf5\xf4`Zf\xd9*\x94\"\xeb\x8c" "\xc3\xe3\xe5\xb5\x8b\xfa\x8\xb1\x82\x41\x42\x2\x1b\x18\x13\x85q1g\x9f\x46\xa4_\\" "\xbc\xd3\xc4\xf8#O\xe6#y\xfb=*:{9\xef\x62\x36?N%#\xc1sr7\xcf\xf1\x17\xa6\xedp\x9" "\xee\xfo\xd8j\xb9\xa8\x66\xcf\xda\x33\r\xf1<\xf7=&g\xe7J\xf6\x18\xce\x46\x99=\x87" "\xd6P\x7f\xb4%L\xa2\x37w\xf\x63\x39%\xba\xf\xc1\xb8\xc8\xb3\xbe\xd3\x31p^\x82\x17" "\xdd(3\xc7\xff<\xf5\x1\xb1\xea\xc2G\xbd\x9dZ$iz\xd6\xa4\xf1\xba\xc5\xcd\xe7\x87\x36" "'\xdb(\xe4\xfa\x42<8\xb8\x32\xae\xb6\x34\xd6\x83I14\xee\xd9\xd5@\x9e\xdc\x39\xb4" "+\x97\x8a_\xe\xa7\xb\n\x8e\x9dl\xea\x46\x16\xf5\x9e\xd4n\x95,\x14\xc3Tl\xbeL\xbe" "\x11v\xda\xddQ\xe7\x31\x11l\xb5\xf4G\xa7y\x17\xbe\x1e\x92\x18\xf9#\xd7JPh\x90%\xdc" "Zs\xa8?\x13T;c\x1a\x64S\xe6\x88\x99\xd7T\xb4\x32\x91\xe3H\xefQ%r\xd7\xc5_\xe2\x2" "e\xb9\x30G\xdf\x1a\x16\xa8q{ \xda\x96i\xcb\xbf\x9b\x95\x12\x45\xbe\x83\x92\x89\xab" "3\xccKV@\xed\xd7\x92=\x13\xd4\x63\xda\xfc\x16\xfe\x39\xda\xc\xb4\r\xbf\x2\xed\xb5" "\xb0H\xfal\xe5\x14\x46\xa8J\xd6\x97\x85@\x8d\xf0O\x4\xc9\xb7v\x5\x84\x9a\xa6\x43" "\x80\x1d\xafQV\x92\x9b\xb9\x34I\xfcU\x1a\x85\x1f\xa5&\x92ST\xedp\xd9\x15\x19\xd0" "\x9\x82\x6\xa0,\x1a\xef!\xce\xef\x83\xa2\x1b\xe8<|\x99-\x81J9\xef\xbd\xb5\"\x83\xe6" "\x2Z$g\xe8S\xa8\x9e\xfNk\xb3\x30s\xf6\xe9\xee\x9c\x46\xe9\x31\xd3\xcb\x9f\xe0\x83" "\xd0?P.}\xbf \x8c.\xbe\xde\xf0t\x6\xb2\x2\x86\x8c_'o\x9f\x44W\x99\x2\x41\xb2'\xb9" "\x16\x32\x9c\x90\xb8R52\xc4\xb7\xb9\xdfm(\x89\xd9\xc4\xca\xe6\x18?\xc4\x99\x63\xfb" "\xc0\x1b\x14V\xbe\x30\xb1\x44`\xc6\x14\x14\x17R\xf6x\xa1\x91\xc4\xfa\x87\x8e\xe7" "N\xc0\xf4\x2\xa3Y\xdb\xa6\xf5\xfO\xd1\x91\xdf\\\xb2!\xf9\xd8\x16\xa7\x12<\xa7=\xbc" "\x8a\xde\xdc\xdb\xe9SIn\xdc\xb0\x7f\x18\x9d\xb\xbb\x15\x9a\x7fL\xa7\xeaJ\xae\xf6" "\x83R\xa5\x41\xad\x43!\xf2\x33\xc0\x92\xca[\xb0\x41\x9c\xa1U\x83\xae\xd9\xfd\xf4" "b\n\x1f\x1f\x81\xe9\x4\\\x18#\x18\xbb\xd8\x1f\x89\xdd\xb8\x1e\xec\x65\xad\xe3\xbc" ".:\xee\x38G\xb7\xbb\x8\xda\x38w\xef\x80\x9mlP\x94k\x1\x4\x82,PsL\x92\xe0\x5\xfc}" "\xbf\xccw\x96\x9a\xad\x7ux9Z\x99\x33\xc1\x7f\x64\xa9\xbf\xae\x10\xd6\xf4[\\AF\xbe" "O\x88S\x8b\x8b\xbe\x96\x7\x84\x8d\xef\xe0\xbdP\xc7\x98kKf\xc5@\xd8\x45\x37~E\xfe" "\xeb\x1fQL\xdf\xbc\xabq\x90?ht\xb7u\x9e\x15\r\xdc\x8b\x91\xd5\x9\x13\x62\x8c\\\x89" "G\x95Hvk\x85\xef\x8d\r\xe2\x88R,[\xa7\xa5\xa7\xd8\xd6X:L\xab>\x15\xe9\x41\xd1\\\x9a" "0z\xd7\xe1\xa8\x8aJv\xdf\x36t<\xe5g\xfaO\xc4\x99\x33\x3\xaf\xdf=\x86+\x89\x46=\xc7" "\xa5\xbc=a\xc3\xe7\xba\x30O\xf3WS\xc2\xa2r\xc1G\xdb\x42\x9d;\x12\x45\xe0\x3\xe3\xa9" "\xb7@\x2\\\x32\xd2\x91\xd9\x93\x44P\xcbK\x9f\xeb\x7f\xde\x46\xb4\xa2\x81\xaa\xbf" "\x4\xealDTCOn\x3\x14\xb2\x30\x1\xc5x\xc0\xb4m}r]o!o\x8d\xe1\xe0\xf1\ri\x14\xf\xb3" "\xbe\xd2\xb9\x43V\xfe\xbe\xcbX\xa9\x61\xce\x82\xd9g\x13\xdc\xcc\x64\xa7h^\x88\x43" "\xf6\r _\x8e\x42\x8a!\xfb})\xfa;\xfe\x6\xb9\x95~\xfc\xe1\xf7\n\xc4;\xb1\xd4u\x1f" "\xfe\xc2\x13\xd5\\KLC\xea\x46\xc6xB\xfci\xb6\xc7\x97\x7P\xdfZH\xdejn\xb5\x34\xb|" "\xa9]1\x90|\xae$\x11\x16\xaf\xd0\x83:Y1n\x8f\xe1\xcfV,\x9dTu\xaf\xdd\x46\x1a\xba" "\x19p\xf8\xcc\xec\xb1\xe1\xba\xe2\xa8\x64\xe1\xb4\xdf\x8b\x61\xfd\xed\x89\x87X\x4" "\xedN[\xb3\xf1\x9\x9cI\x3^\xf3Z6\x2\"\xb9\x97\x33\x86\xcf\x98\x16\x9e\x7f\xed\xa4" "\xc9h5\x8d\x1\x97K^+\x99\xf2\x8e\r\xbc\x14\x88:Zu\xa1\xbd\xb6\x66\xb2\"\xf4\x65\x61" " \xf8\xe2\xf4\x9b>\x96\x61|I\x98+\xb6Q\xf8\xdeS'\x81\xfa\x7fU\xa0\xe6\x3\x91!\x14" "\x12\x95\x42\x7f]\xe8\x4\x8f\x17\x61\xc3\x80\x1bS\x87\x33\xd4)\xe2\xdc\x9\x14\x34" "\xeb\xd3t)\x14\x45\"ZQ \xe\xdbZ;$\xbb`(z\x1Ufz\xf2uPj\x1b\xef\xa0\xe3\x46XF\\\xf3" "\xbb\xb1\xbd" "\xf9\x95\x64w\xfa.\xfc.\xbf\x17\xc3vKW\x1f\xd8\xc1\x8c\x81\xde\xe5\x45\xe6\x41\x9e" "\xd4\xd7X\x82\xeez2N\xb2\x16{\xae\x32V\xed\x45\xb2%\xebU\xd8\xefT\xac\\&D\xa6\x37" "\xe9+\x91HM\x8d\x85\x7f\x66h\x15\x86\x35\xb7)U\xd4\xfa\xc3\xa9Y7yB)\xdb\xb5\\$\xf2" "+\xf7Z\xbc\x61\xbb\xf\xcf\x1e\xef\x13L\x86\x1e\xa1;\xf\x33\xbc\x11\xf3P\xd0\x9c\x84" "\x7L\xf3\xab\x83\xc\x62\xa3\xc5Z\x1\x9f\xa3Q\xef|\xb8\xe4\x1f\x31\xf4\x33\x1fZ\x97" "\xd5?\xcaI\x82\xe2Z\xb3\xbc\xac\xa4\x9d\xab\x9c*3\x4RJ(\xe2\xb9\x10\xe0\xb8\x92." "4_Z\xe9\x96\xa7\xed\xf7\xf9\x80\xbb\x39s3#\xe2\x44\xfe\x98\xc6\x8a\x8b\xf2j\x9dz" "\xa9\xe8\x15\xa5\xc3<>%\xabG\x7f=\x15\x91\xba\xd5\xf5`,\x97~\xf5\x33\xc7\x6I4\xfb" "S\xb\xac\x7f\xbd\xbb\xa2\xf0\x30k86\xfd~\x14\xe\xf5W\xeb\xde\xef\x1eQ\x15u\x9K\x86" "K3^\xbe\xfeSZ\x1c\x35\x3\xd6\x1a\xbb\x85)\xee\xfa\x13_\xe7\x33+]0]r\xf8\x1d\xb4\xa2" "V\n\xe1va:\xbd=v\xcey\x11\x31\\\x7f\xfc\xd0r\xf2\x36s\x8b\x39\xfa\njj\xd8Q0d+\xf9" "[\xe1\xdf/\xeck\x92\x42\x36N\x87\xb6&\xd4\xf2VwU\xe1\x5\xa7\xf0N\xd5\xe4.\xe4\xbb" "\xe2\x81k\xbd\xb3\xb9iu\xf2\xbe\xbb^\xde\xb1\xc4K\xa9\xab\x42\x32\xa8\x8d\xab\xca" "\x92n\xbaq\x12\x9d\x66\xb0\xba\xa0)\xe3O%\x1b\x8c.\xa8J\xd8+\xd3\x66j\xaa\x5\x9e" "\xd7L\xc2\xbc\xedK\xcf\x1\xee\xbd\xb5\xbb\x97\xa4\x9\x97\xe8\x42\xa1\x36\x63;\xf4" "]\x83\xec\xa6 \x7\x9e\xeb\x65\x14\xda\xa3X\x99\x8a\xe2\x88,\xab\x98\xcf\xf\x9e\xbc" "[\xc4\xa9\x7\xc6\xb8v\xfc\xa2\x8c\x98\x38\xbe\xc6\xc\xe1\x93u\xf8\x36\xa1,\x1aq\x82" "b\xa2RC\xc3\xd8I\x8\x32\x41\xf2\xef\xc1\x1f}\xfd\xf4\xc\x80\xe4QJ\xc\x8bR+N\x3n\x95" "n+\xffv[q\xe\xfb\x8fw\xce\x7\xee,\xa3{%\xf3\xd3H\xb4\x4\xef\xac\x94I\x15\xe5(\x6" "\xc2\xf5\x32\xc5G\xef\x65\xe9k\x9).\x0\xe5\x8c\x83\xc6\xd1\xd6\xa5SDQ8\xe7\x41\xf5" "\xfa\x17\x63\x8c\xe7\x11X'\xe3\xca\x3\xf0J\xc2\x15\x18,@\xf0P\xf5\x64\x11\xd4L\x9d" "\xa2lNE\x86\x3\xc3%\xf6\xb2\xbe\xb7T\x15\xa1\x33;?f(\x8e\x1b\x65\x66\xa9|Y\xa1\xeb" "1\x9c\xb0\xa5\x34\x89\xd4\x86\x96\x9cI\x9a\xa4p\x3\xb\x8T\xd6\xe5\x1f\x99\xcc\xa6" "I\x84\xac\xba\x94\x90\xbf\x9d\x0\xb5\x1b\x64\x14\xdc\xef\x8fpnr\xbc\xedm\x94\xa5" "\x8e\x1c]\x94N\x99\xd2\xfd\xc5\x8f\x97\xa7\x97RU5U\xd8\xcb\x4\xf9\xc7\x9cw\xd9\n" "\x93\xe2\x7 \x0n\xc4\x61`\xde\x1f\x11\xeds\x1a\xcb\xed\x64x\xed\xfb]\xbf\x92'\n\xd1" "\xf6\xb3\xd4\xa1\xb9\xbf;\xb2M@\xe7\xcc\x86\x8a\xbb,\xe5\xb2\xc1\x45\x30\xa8\xf8" "3\x80\x8e\xe0\x5K\x16\xb0ZL\x93\xf3\xa8\xec\x9f\x1b\x41P\xf9\x8e\xfd\xb1.\xa7\xda" "\xe3\x63\xc0\x9fXB85\xd0v\x8bT\xb4\x46Q\xf8\xaf\x15\x61\xb5&\x4\x9d\x18\xd5\x9eP" "|~\xdf\x17\x9a\xe4\xe4\xdaSU\"\xcd\x9b\x1c\xf0\xd9\x0\x2\xa3x\\E\xdc\xc1te\x1bn\x1f" "\xbdo_\xa1\x1a\xdb\x6\xaa\xdcV\x94]A\x11v\xad\x98{0\xa0\xf5\x37\x35\xab\xf6\x46\xc3" "\n\xe9\x97\xa0\xc3M\xf\xf5z>De\xdbTE\x95\xd1\xea\x95)\x1l\x85\x65\xce\x32U\xef\r" "\xca$\x93=\x5\xff^6j\xaf\xaeR\xdd\xc0\xfe\xcb\xcb\x18=C\x11\x8e\xd3\r=\x90p6k\xc6" "^\xcd{\xfb\x82s\x9d\xde\xe9\xd9\x91\x19\xd8@\xdc\x16\xba\x11\xe0\xdd\xa5\xd7\x8e" "w\x1\xe\xd8\x38\x12\xd5\x91\x98\x88V\x8d\xe4\x1f\xcf\xbf\x81\xca\x19\x1J\xcc\r\x10" "\xf\xdc>\xa5`\xb5+U\xc4!\x1c\\\xad\x64\x18\xd2i\x2\x1dN\xfc\x90\x42P\x4PV\x81\xe2" "\xa5\x13\xe7\xfd\x63\xb9,,\xaa\x2\xdeO\x2znl\xdd\xccy\x85\x83\xca\xe\x9c\x7\xc7z" "\x4\x93 \xff\xcc\x42\x98\xd6\xf6\xd7\xddY\x85?\xe5\xe7\xe\x7\xbb\x5\x35\xd4\xf3\x94" "\x1e\xd4\xe7M\x90\xa0\xc0x\xfc\xa5\x5\xdes\xb3\xa9\x95\xda\xcc\xa2:\xde\x2\x15\xdf" ")M\xc4\\n\xe4\xac\xe0\x88\x1c\x1b\xa3\x85}\xb5\x7f\x34\xc1\x8c\xb7V7\xbf\x10\xff" "j09\xd9\xc8\x11\x80\x91\x8c|P\xac\x5\x93\x16\xcf\xfb\x61\x4\xe0\xbc\x84\x93Z\xb3" "\xc5\xbcGj\x19\"\xa3\x98\x99\xb\x64(\xa7!\x1c\xc2\x90~\x9d\xfd\xeck\xf8\xb3U\xf6" ">\x0\xae\x81\x9d\x17\x1c\xfau\x1b-\x84+\xde\x61\xc2\x90\xc2X\xb9\xbb\xd7\x1\xde|" "VF7\x1c\x1d\x9b\x10\xc5+^\xda\x15\x99.\x8c\x11_\x92k\xb8:\x81\xe7\xcR\xe6\x63\x1c" "O\x8e\xba\x8f\xa6\x88\x41\xcb\x8ev3_a\x6" "\xa9\xab\x18\xfe\x4pf\x97\x18\xd4\xfb\xfa\x99=\xffmK\xd8s\xfd\xa4MVHv\xf0\x81z\x9d" "\\\xf4!E\x7f\xb4G\xf\xcd\xa3Q\xfd\x81\xa5KI\xa4U%`?[\xa2\xb6\x87]\xa5:\xf6\x9d\xd1" "\xd0{_\xd8g?\xcd\x35\xe0\xb1\x38\x42\x8a\x95\xd2\x45\xa5\x93\xbc?\x99\x19\xf0\xf9" "\x83\x80\xe6\xa0\xf4:\xc6\xd0\xb4%\xea\xbe}m\x7f\x9d\xbf\xd8\xdb\x8b\x19\xe1R\xf3" "QC?\xe3\xb1\x4&\xccy\xdf\x8e\xab\x18#6M\xae?\x11\xc7\x97\x89'\xe9'4\xe0:\xbd\xac" "S\xf1\xc3\xe8\x9a\xd8\xf9\xe8\xe1\xaa\x0\xc5\xbd\xb\xde\xa2\x12\xe7vQZ\xb6\xdb\x81" "\x9d*\xe2\xbb\x9aK'\xa5\xfa\xd8\x85\xce\xa4\xc4\x87\x35\x98\x11p\x89\x13\xc1\x80" "\xe4\xd3L\x9aI\x3\xfd\x96P\x94\xb6\x44:\x7f\x36\x99&\xd6|\x87\xcd\xa6?\xe0\xcbJ\xe2" "3\x88Q\xb3\xa5X\x10.\xfc\xfb\xf2\x62\xf7&YBp\xca\x96\x34Q.\xc8\xa6\xf3\x87\x39\xec" "nB\xbb\xee\x46\x13\xeaK5\xc5\x5\x19T\x11\xb#e\xf7\xd9\xe2\xc0'\xfd\xb9\x82v\xfe'" "\x97\xcd\xc0\x6\x1QI\x85S\xfcY\xc7V\x92\xe1U\xe8\xf3\xbf\xac\xc8\xf1\x98\xd9\x8b" "\xf8\x31\xc3\xe7\xefou!\xb7\xa6\xa6M\xa8\x42\xd5w\x9c\xd5,v\xa7\xfd\xa2'\xad\xdc" "\xf1\xa1-\xb8\x7f\x82\xeb:Ea0%#e\xf4\x42\x17\\v\r1\xa3\xc\x44!\x86\xb6\x39?\xce\x1a" "fl\x0\xde|\xc1\xe4\x41\x7f\x31\x11\x9\x93\x66\xf2\x93\x19\x1c\xe2W\xea\xe4\x91\x46" "\x84\xb3tq\xca\x96\x1c\xb3\xdeH\xa6S<\xda\x42N\xd7\x35\xfd[\x83\xa3*\xc0\x61\xcf" "=lhE<\xe6\x38\xff\xaci\x8e\x9a\xb7o\xb6x`\xe2\xb7\x30\x9a\x92H\xf7\xfe\x10\xc1O\x17" "\xe8\xeag\xe\x44\xcc~\xf2\xa8\x81\x17\x62\xe9\xa6?!'\xc2\xffS)8\xcf\xecR\x98\xe7" "x\xa3R\xf9\xc7\xdf/\x17\x94\xf6`\\\xbe\x63\x8d\x9a\xfb)l\x7fR\xc\xaf\xd3U\xe3\x94" "\xe3\x91\x9a`\x7f::\xad\xa4\xc8\x93\xbk\xf6\xeb\xaa\xb\x91\xe8\x38\xdfSJ\x87\x7\x32" "\x3^\x95:O\x15N\xc2\xe0\xddq7\xe5\xb\x7\x38\xcf\x97\xc0,\x88\xcb\xf7.\xccT\xb1\xad" "\xee\xfa\xbf\x97\xd0\x32\x44\xb4\xb6Vv\xcb\x9$\xc6\x41\xc\x11~t|\xf9\xce\xeb.\xb3" "\x1b'\x80\xbf\xf1\xe&\xf\xbb\x8a}[;D\xca\xf9\xe7[d\x82\xc5k\xee,h\xf9\xf8g^\x9e\x15" "k\xdc\xd9\x93Y\xa7@\xa6h\xfd;\xd1\x1e\xa9\xd4\xef\xeb\x1b\x9c%\xe7 +3\xf5%=\xe8y" "\xa4\x82\xffw\x99,\xc8w\xf0x\xd1\xf0p\xb5\x41G?\x82R\xe3O\xa9\xce%RQCM\xce\xc0\x46" "\xb3N/\xd3\xbdP@\xd0\x8e\xf1\x89\xad\xcc\x31\x44\x1a\x18\x95\x10\xe1\x8d\xce\x97" "\xbb<\xee\xba\x7f\x5\xae\xa7\x1\xda\x1f\xd9\xff\x84\xe1\x61\x89\xbb\x91\xf9=\xea" "S\xa6\xb0\xc\xc4\xe3\x93\xcc}\xc7\xfe\xb8\x5\xe5\xd3Q-e\x8d/1\x9b\x39\x18\xdf}\xed" "~\x88\xa5:\xaa\xe3\x81\xe1(\xf\x65_\x7\xe1\x97\xd6\x97\xdb-\xd7\r\"\xa8\x8d\x9f\x9" "\x2\x83V\x94\xfc*\x10\x31\x8f\x34\xdc%\xa7>dR\xc8M\xa1\x61\x39\xd7)\x1d\x8d\xb\x9d" "\xb8\x63\xed\x8c\xaa\x8e\xc2\x94\xea\xc2\xe3\x87\xf1l\x8e\x38\xf0\x42\xf\xd7\x9f" "\xb9\x16\x13\xacj\x84\xbd\x32qP\xe6.I\x14\xf7\x1a=\xa1\x9a\x38\x98\xe6$\xd2\xea\xb0" "\xd2\xe1\xd2~Xa\xae\xbe\xc4@\x8\x9bK\xed\xfc\xb3\xef\x89\xe4\xa5(N\x9e\xcd\xdd\x11" "\xf7\xc3\x9bv[\xb9\xe1\x36\x97\xe5&\x19\xf0\xf7\xeb\x92@d8\xae\xcc\xe\xbf\xda\xc9" "S\xfd\xfa\xb6h9\xe7\x97\x9e\x98\xce\x16\x1bS\xe2}\xda*m\x93\x1c\xa9@'\xc6\xc9_\xca" "\xb8\x9c@f\xb0\x9\xd3\xb0\xfa\xb4\xedVzafh\xf0\x1e[y\n(\x86\xec\x37,\xf7\x8d\xa1" "\xfc\x34\x19\xce\x33\x30\xff^\xaf\x8cx\xc2\xdf\x9a\x2.s\x1f|0\xf5\x99\xd7\xc5\xd3" "R\x80V\xef\xde\x87W\xbd@r\xa8\x97<\xcc\xf8\x17\x45U\x9d\xf\x91\x9a^\x9b\xe3r\xe5" "yx\x89\xb4\xcaj\xed`\n\x84[\x5\x1\x81@ft\x1e\xf7\x83\xdb\xb1P/j\xbc\xab*A2\xf9}\xe8" "\xda\x83&\xbeIP\xf1h\xc1\xd5\x9aYL\x87i\x11@2\\\xcb\xecNN\x8d*\xce\xe6.;\xd6\xd1" "Q\xb7\xbao\xbd\x98\x39`hc\x99TLS\x8b\x31\r\xc} \xb6\xfbn\x86\x9eQ1y9\xc6l\xf7o4\x8f" "`R\xb0N\xa1\xf1\xa2\\?p\xb1\x1d\xa8\xa9)\x88\x1en\x4P\xab\x17\xc1" "\x12YS]\xd6\x90\xbe\x86\x15*?\r?\xbd\x31\xfa\xc9\xa2\xeb\x34\x63\xceL\xea!@N\x90" "\xb3\x94\xeV\xa4\xc9uI\x84\x11\x12\x93H\x6\xbf+c\x82\x34 \xea<\xb5\x9c\xfbi\x8f\xac" "P\xf4\xe\x7f\x14\xc4\x45ww\xa6\xee\x8e\xe4\xf1$(e\x18\x87\xd9\xd4\xf3\x37\x95\x65" "\xe0\xdd\xb5Y\xe5O\x10\x13L%#h1sz\x88\x5L\n\x17;\xcdp5\x18\x93\x9f-\x2r\x16+\xce" "A6\x15&\xc1\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" "000000000000000000000000000000000000000000000000000\r000000000000000000000000000" "0000000000000000000000000000000000000\r00000000000000000000000000000000000000000" "00000000000000000000000\r0000000000000000000000000000000000000000000000000000000" "000000000\r0000000000000000000000000000000000000000000000000000000000000000\r000" "0000000000000000000000000000000000000000000000000000000000000\r00000000000000000" "00000000000000000000000000000000000000000000000\r0000000000000000000000000000000" "000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n021023l_afm_len = 31920; char* n021023l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusRomNo9L-Reg" "uItal\nFullName Nimbus Roman No9 L Regular Italic\nFamilyName Nimbus Roman No9 L" "\nWeight Regular\nItalicAngle -15.0\nIsFixedPitch false\nUnderlinePosition -100\n" "UnderlineThickness 50\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ De" "sign & Development\nEncodingScheme AdobeStandardEncoding\nFontBBox -169 -270 101" "0 924\nCapHeight 653\nXHeight 432\nDescender -205\nAscender 683\nStartCharMetric" "s 316\nC 32 ; WX 250 ; N space ; B 125 0 125 0 ;\nC 33 ; WX 333 ; N exclam ; B 3" "9 -11 302 667 ;\nC 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;\nC 35 ; WX 500" " ; N numbersign ; B 2 0 540 676 ;\nC 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;" "\nC 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;\nC 38 ; WX 778 ; N ampersand ; " "B 76 -18 723 666 ;\nC 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ;\nC 40 ; W" "X 333 ; N parenleft ; B 42 -181 315 669 ;\nC 41 ; WX 333 ; N parenright ; B 16 -" "180 289 669 ;\nC 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;\nC 43 ; WX 675 ;" " N plus ; B 86 0 590 506 ;\nC 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;\nC 45 " "; WX 333 ; N hyphen ; B 49 192 282 255 ;\nC 46 ; WX 250 ; N period ; B 27 -11 13" "8 100 ;\nC 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;\nC 48 ; WX 500 ; N zero ;" " B 32 -7 497 676 ;\nC 49 ; WX 500 ; N one ; B 49 0 409 676 ;\nC 50 ; WX 500 ; N " "two ; B 12 0 452 676 ;\nC 51 ; WX 500 ; N three ; B 15 -7 466 676 ;\nC 52 ; WX 5" "00 ; N four ; B 1 0 479 676 ;\nC 53 ; WX 500 ; N five ; B 15 -7 491 666 ;\nC 54 " "; WX 500 ; N six ; B 30 -7 521 686 ;\nC 55 ; WX 500 ; N seven ; B 75 -8 537 666 " ";\nC 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;\nC 57 ; WX 500 ; N nine ; B 23 -1" "7 492 676 ;\nC 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;\nC 59 ; WX 333 ; N sem" "icolon ; B 27 -129 261 441 ;\nC 60 ; WX 675 ; N less ; B 84 -10 592 516 ;\nC 61 " "; WX 675 ; N equal ; B 86 120 590 386 ;\nC 62 ; WX 675 ; N greater ; B 84 -10 59" "2 516 ;\nC 63 ; WX 500 ; N question ; B 132 -12 472 664 ;\nC 64 ; WX 920 ; N at " "; B 118 -18 806 666 ;\nC 65 ; WX 611 ; N A ; B -51 0 564 668 ;\nC 66 ; WX 611 ; " "N B ; B -8 0 588 653 ;\nC 67 ; WX 667 ; N C ; B 66 -18 689 666 ;\nC 68 ; WX 722 " "; N D ; B -8 0 700 653 ;\nC 69 ; WX 611 ; N E ; B -1 0 634 653 ;\nC 70 ; WX 611 " "; N F ; B 8 0 645 653 ;\nC 71 ; WX 722 ; N G ; B 52 -18 722 666 ;\nC 72 ; WX 722" " ; N H ; B -8 0 767 653 ;\nC 73 ; WX 333 ; N I ; B -8 0 384 653 ;\nC 74 ; WX 444" " ; N J ; B -6 -18 491 653 ;\nC 75 ; WX 667 ; N K ; B 7 0 722 653 ;\nC 76 ; WX 55" "6 ; N L ; B -8 0 559 653 ;\nC 77 ; WX 833 ; N M ; B -18 0 873 653 ;\nC 78 ; WX 6" "67 ; N N ; B -20 -15 727 653 ;\nC 79 ; WX 722 ; N O ; B 60 -18 706 666 ;\nC 80 ;" " WX 611 ; N P ; B 0 0 605 653 ;\nC 81 ; WX 722 ; N Q ; B 59 -183 699 666 ;\nC 82" " ; WX 611 ; N R ; B -13 0 588 653 ;\nC 83 ; WX 500 ; N S ; B 17 -18 508 667 ;\nC" " 84 ; WX 556 ; N T ; B 59 0 633 653 ;\nC 85 ; WX 722 ; N U ; B 102 -18 765 653 ;" "\nC 86 ; WX 611 ; N V ; B 76 -18 688 653 ;\nC 87 ; WX 833 ; N W ; B 71 -18 906 6" "53 ;\nC 88 ; WX 611 ; N X ; B -29 0 655 653 ;\nC 89 ; WX 556 ; N Y ; B 78 0 633 " "653 ;\nC 90 ; WX 556 ; N Z ; B -6 0 606 653 ;\nC 91 ; WX 389 ; N bracketleft ; B" " 21 -153 391 663 ;\nC 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;\nC 93 ; WX" " 389 ; N bracketright ; B 12 -153 382 663 ;\nC 94 ; WX 422 ; N asciicircum ; B 0" " 301 422 666 ;\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\nC 96 ; WX 333" " ; N quoteleft ; B 171 436 310 666 ;\nC 97 ; WX 500 ; N a ; B 17 -11 476 441 ;\n" "C 98 ; WX 500 ; N b ; B 23 -11 473 683 ;\nC 99 ; WX 444 ; N c ; B 30 -11 425 441" " ;\nC 100 ; WX 500 ; N d ; B 15 -13 527 683 ;\nC 101 ; WX 444 ; N e ; B 31 -11 4" "12 441 ;\nC 102 ; WX 278 ; N f ; B -147 -207 424 678 ;\nC 103 ; WX 500 ; N g ; B" " 8 -206 472 441 ;\nC 104 ; WX 500 ; N h ; B 19 -9 478 683 ;\nC 105 ; WX 278 ; N " "i ; B 49 -11 264 654 ;\nC 106 ; WX 278 ; N j ; B -124 -207 276 654 ;\nC 107 ; WX" " 444 ; N k ; B 14 -11 461 683 ;\nC 108 ; WX 278 ; N l ; B 40 -11 279 683 ;\nC 10" "9 ; WX 722 ; N m ; B 12 -9 704 441 ;\nC 110 ; WX 500 ; N n ; B 14 -9 474 441 ;\n" "C 111 ; WX 500 ; N o ; B 27 -11 468 441 ;\nC 112 ; WX 500 ; N p ; B -75 -205 469" " 442 ;\nC 113 ; WX 500 ; N q ; B 25 -209 483 441 ;\nC 114 ; WX 389 ; N r ; B 45 " "0 412 441 ;\nC 115 ; WX 389 ; N s ; B 16 -13 366 442 ;\nC 116 ; WX 278 ; N t ; B" " 37 -11 296 546 ;\nC 117 ; WX 500 ; N u ; B 42 -11 475 441 ;\nC 118 ; WX 444 ; N" " v ; B 21 -18 426 441 ;\nC 119 ; WX 667 ; N w ; B 16 -18 648 441 ;\nC 120 ; WX 4" "44 ; N x ; B -27 -11 447 441 ;\nC 121 ; WX 444 ; N y ; B -24 -206 426 441 ;\nC 1" "22 ; WX 389 ; N z ; B -2 -81 380 428 ;\nC 123 ; WX 400 ; N braceleft ; B 51 -177" " 407 687 ;\nC 124 ; WX 275 ; N bar ; B 105 -18 171 666 ;\nC 125 ; WX 400 ; N bra" "ceright ; B -7 -177 349 687 ;\nC 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 " ";\nC 161 ; WX 389 ; N exclamdown ; B 59 -205 321 474 ;\nC 162 ; WX 500 ; N cent " "; B 77 -143 472 560 ;\nC 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;\nC 164 ; " "WX 167 ; N fraction ; B -169 -10 337 676 ;\nC 165 ; WX 500 ; N yen ; B 27 0 603 " "653 ;\nC 166 ; WX 500 ; N florin ; B 25 -182 507 682 ;\nC 167 ; WX 500 ; N secti" "on ; B 53 -162 461 666 ;\nC 168 ; WX 500 ; N currency ; B -22 53 522 597 ;\nC 16" "9 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;\nC 170 ; WX 556 ; N quotedbllef" "t ; B 166 436 514 666 ;\nC 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;\nC" " 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;\nC 173 ; WX 333 ; N guilsing" "lright ; B 52 37 282 403 ;\nC 174 ; WX 500 ; N fi ; B -141 -207 481 681 ;\nC 175" " ; WX 500 ; N fl ; B -141 -204 518 682 ;\nC 177 ; WX 500 ; N endash ; B -6 197 5" "05 243 ;\nC 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ;\nC 179 ; WX 500 ; N d" "aggerdbl ; B 22 -143 491 666 ;\nC 180 ; WX 250 ; N periodcentered ; B 70 199 181" " 310 ;\nC 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;\nC 183 ; WX 350 ; N b" "ullet ; B 40 191 310 461 ;\nC 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 10" "1 ;\nC 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;\nC 186 ; WX 556 ; N q" "uotedblright ; B 151 436 499 666 ;\nC 187 ; WX 500 ; N guillemotright ; B 55 37 " "447 403 ;\nC 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;\nC 189 ; WX 1000 ; N" " perthousand ; B 25 -19 1010 706 ;\nC 191 ; WX 500 ; N questiondown ; B 28 -205 " "367 473 ;\nC 193 ; WX 333 ; N grave ; B 121 492 311 664 ;\nC 194 ; WX 333 ; N ac" "ute ; B 180 494 403 664 ;\nC 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ;\nC" " 196 ; WX 333 ; N tilde ; B 100 517 427 624 ;\nC 197 ; WX 333 ; N macron ; B 99 " "532 411 583 ;\nC 198 ; WX 333 ; N breve ; B 117 492 418 650 ;\nC 199 ; WX 333 ; " "N dotaccent ; B 207 508 305 606 ;\nC 200 ; WX 333 ; N dieresis ; B 107 508 405 6" "06 ;\nC 202 ; WX 333 ; N ring ; B 155 508 355 707 ;\nC 203 ; WX 333 ; N cedilla " "; B -30 -217 182 0 ;\nC 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;\nC 20" "6 ; WX 333 ; N ogonek ; B -20 -169 200 40 ;\nC 207 ; WX 333 ; N caron ; B 121 49" "2 426 661 ;\nC 208 ; WX 889 ; N emdash ; B -6 197 894 243 ;\nC 225 ; WX 889 ; N " "AE ; B -27 0 911 653 ;\nC 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;\nC 2" "32 ; WX 556 ; N Lslash ; B -8 0 559 653 ;\nC 233 ; WX 722 ; N Oslash ; B 60 -105" " 699 722 ;\nC 234 ; WX 944 ; N OE ; B 49 -8 964 666 ;\nC 235 ; WX 310 ; N ordmas" "culine ; B 67 406 362 676 ;\nC 241 ; WX 667 ; N ae ; B 23 -11 640 441 ;\nC 245 ;" " WX 278 ; N dotlessi ; B 49 -11 235 441 ;\nC 248 ; WX 278 ; N lslash ; B 37 -11 " "307 683 ;\nC 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ;\nC 250 ; WX 667 ; N o" "e ; B 20 -12 646 441 ;\nC 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;\nC" " -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;\nC -1 ; WX 722 ; N Uacute ; B 1" "02 -18 765 876 ;\nC -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;\nC -1 ; WX 55" "6 ; N Tcaron ; B 59 0 633 873 ;\nC -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;\n" "C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;\nC -1 ; WX 611 ; N Racute ; B -13 0" " 588 876 ;\nC -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;\nC -1 ; WX 722 ; N Oti" "lde ; B 60 -18 706 836 ;\nC -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;\nC " "-1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 706 876 ;\nC -1 ; WX 722 ; N Uhungaruml" "aut ; B 102 -18 765 876 ;\nC -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ;\nC -1 ; W" "X 722 ; N Eth ; B -8 0 700 653 ;\nC -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;\nC" " -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;\nC -1 ; WX 722 ; N Uring ; B 102 -18 " "765 919 ;\nC -1 ; WX 500 ; N gbreve ; B 8 -206 502 650 ;\nC -1 ; WX 444 ; N eogo" "nek ; B 31 -169 444 441 ;\nC -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;\nC " "-1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;\nC -1 ; WX 722 ; N Ugrave ; B 102 -1" "8 765 876 ;\nC -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ;\nC -1 ; WX 444 ; N eacute" " ; B 31 -11 459 664 ;\nC -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;\nC -1 ; " "WX 521 ; N dcaron ; B 15 -13 641 683 ;\nC -1 ; WX 444 ; N ccedilla ; B 26 -217 4" "25 441 ;\nC -1 ; WX 444 ; N ccaron ; B 30 -11 484 661 ;\nC -1 ; WX 444 ; N cacut" "e ; B 30 -11 458 664 ;\nC -1 ; WX 500 ; N aogonek ; B 17 -169 500 441 ;\nC -1 ; " "WX 500 ; N aring ; B 17 -11 476 707 ;\nC -1 ; WX 500 ; N atilde ; B 17 -11 511 6" "24 ;\nC -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;\nC -1 ; WX 444 ; N egrave ; " "B 31 -11 412 664 ;\nC -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ;\nC -1 ; WX 500" " ; N aacute ; B 17 -11 487 664 ;\nC -1 ; WX 500 ; N adieresis ; B 17 -11 489 606" " ;\nC -1 ; WX 722 ; N Uogonek ; B 102 -169 765 653 ;\nC -1 ; WX 500 ; N ugrave ;" " B 42 -11 475 664 ;\nC -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ;\nC -1 ; WX 50" "0 ; N udieresis ; B 42 -11 479 606 ;\nC -1 ; WX 278 ; N tcaron ; B 37 -11 378 66" "6 ;\nC -1 ; WX 389 ; N scommaaccent ; B 16 -270 366 442 ;\nC -1 ; WX 556 ; N Zca" "ron ; B -6 0 606 873 ;\nC -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;\nC -1" " ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;\nC -1 ; WX 500 ; N acircumflex ;" " B 17 -11 476 661 ;\nC -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;\nC -1 ; WX " "389 ; N scaron ; B 16 -13 454 661 ;\nC -1 ; WX 611 ; N Amacron ; B -51 0 564 795" " ;\nC -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;\nC -1 ; WX 556 ; N Tcommaaccen" "t ; B 59 -270 633 653 ;\nC -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;\nC -1 ; " "WX 500 ; N thorn ; B -75 -205 469 683 ;\nC -1 ; WX 611 ; N Emacron ; B -1 0 634 " "795 ;\nC -1 ; WX 722 ; N Ograve ; B 60 -18 706 876 ;\nC -1 ; WX 722 ; N Oacute ;" " B 60 -18 706 876 ;\nC -1 ; WX 722 ; N Odieresis ; B 60 -18 706 818 ;\nC -1 ; WX" " 667 ; N Ntilde ; B -20 -15 727 836 ;\nC -1 ; WX 667 ; N Ncaron ; B -20 -15 727 " "873 ;\nC -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;\nC -1 ; WX 556 ; N Lcaron " "; B -8 0 596 666 ;\nC -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;\nC -1 ; WX 333 ;" " N Idotaccent ; B -8 0 384 818 ;\nC -1 ; WX 389 ; N racute ; B 45 0 431 664 ;\nC" " -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;\nC -1 ; WX 500 ; N ohungarumlaut" " ; B 27 -11 570 664 ;\nC -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ;\nC -1 ; WX " "500 ; N Euro ; B 57 0 668 693 ;\nC -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 66" "1 ;\nC -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;\nC -1 ; WX 300 ; N twosu" "perior ; B 33 271 324 676 ;\nC -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 " ";\nC -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ;\nC -1 ; WX 333 ; N Iacute ; B -8 " "0 403 876 ;\nC -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;\nC -1 ; WX 333 ; N Iog" "onek ; B -8 -169 384 653 ;\nC -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;\nC -1" " ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;\nC -1 ; WX 722 ; N Umacron ; B 102 -18" " 765 795 ;\nC -1 ; WX 667 ; N Kcommaaccent ; B 7 -270 722 653 ;\nC -1 ; WX 500 ;" " N ograve ; B 27 -11 468 664 ;\nC -1 ; WX 500 ; N Scommaaccent ; B 17 -270 508 6" "67 ;\nC -1 ; WX 611 ; N Eogonek ; B -1 -169 651 653 ;\nC -1 ; WX 500 ; N oacute " "; B 27 -11 487 664 ;\nC -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;\nC -1 ; WX" " 278 ; N iogonek ; B 49 -169 278 654 ;\nC -1 ; WX 500 ; N gcommaaccent ; B 8 -20" "6 472 706 ;\nC -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;\nC -1 ; WX 500 ; N" " ntilde ; B 14 -9 476 624 ;\nC -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;\nC -1 " "; WX 611 ; N Ecaron ; B -1 0 634 873 ;\nC -1 ; WX 611 ; N Ecircumflex ; B -1 0 6" "34 873 ;\nC -1 ; WX 389 ; N scedilla ; B -2 -217 366 442 ;\nC -1 ; WX 389 ; N rc" "aron ; B 45 0 454 661 ;\nC -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ;\nC -1 ; WX " "611 ; N Eacute ; B -1 0 634 876 ;\nC -1 ; WX 722 ; N Gcommaaccent ; B 52 -270 72" "2 666 ;\nC -1 ; WX 611 ; N Rcommaaccent ; B -13 -270 588 653 ;\nC -1 ; WX 611 ; " "N Edieresis ; B -1 0 634 818 ;\nC -1 ; WX 500 ; N nacute ; B 14 -9 487 664 ;\nC " "-1 ; WX 500 ; N uogonek ; B 42 -169 500 441 ;\nC -1 ; WX 500 ; N umacron ; B 42 " "-11 495 583 ;\nC -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;\nC -1 ; WX 278 ; N lc" "aron ; B 40 -11 395 683 ;\nC -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;\nC -1 ;" " WX 667 ; N Cacute ; B 66 -18 689 876 ;\nC -1 ; WX 667 ; N Ccedilla ; B 66 -217 " "689 666 ;\nC -1 ; WX 400 ; N degree ; B 101 390 387 676 ;\nC -1 ; WX 611 ; N Aog" "onek ; B -51 -169 707 668 ;\nC -1 ; WX 675 ; N minus ; B 86 220 590 286 ;\nC -1 " "; WX 675 ; N multiply ; B 93 8 582 497 ;\nC -1 ; WX 675 ; N divide ; B 86 -11 59" "0 517 ;\nC -1 ; WX 611 ; N Aring ; B -51 0 564 904 ;\nC -1 ; WX 980 ; N trademar" "k ; B 30 247 957 653 ;\nC -1 ; WX 389 ; N rcommaaccent ; B 35 -270 412 441 ;\nC " "-1 ; WX 278 ; N lacute ; B 40 -11 376 876 ;\nC -1 ; WX 500 ; N omacron ; B 27 -1" "1 495 583 ;\nC -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ;\nC -1 ; WX 278 ; N ici" "rcumflex ; B 34 -11 328 661 ;\nC -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ;\nC " "-1 ; WX 500 ; N ncommaaccent ; B 14 -270 474 441 ;\nC -1 ; WX 278 ; N lcommaacce" "nt ; B -21 -270 279 683 ;\nC -1 ; WX 675 ; N plusminus ; B 86 0 590 568 ;\nC -1 " "; WX 750 ; N onehalf ; B 34 -10 749 676 ;\nC -1 ; WX 750 ; N onequarter ; B 33 -" "10 736 676 ;\nC -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;\nC -1 ; WX 27" "8 ; N iacute ; B 49 -11 356 664 ;\nC -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;\n" "C -1 ; WX 444 ; N kcommaaccent ; B 14 -270 461 683 ;\nC -1 ; WX 722 ; N Omacron " "; B 60 -18 706 795 ;\nC -1 ; WX 278 ; N imacron ; B 49 -11 384 583 ;\nC -1 ; WX " "444 ; N emacron ; B 31 -11 467 583 ;\nC -1 ; WX 500 ; N amacron ; B 17 -11 495 5" "83 ;\nC -1 ; WX 278 ; N tcommaaccent ; B -21 -270 296 546 ;\nC -1 ; WX 444 ; N y" "dieresis ; B -24 -206 441 606 ;\nC -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606" " ;\nC -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;\nC -1 ; WX 389 ; N zacute ; B " "-2 -81 431 664 ;\nC -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ;\nC -1 ; WX 500" " ; N uhungarumlaut ; B 42 -11 570 664 ;\nC -1 ; WX 500 ; N eth ; B 27 -11 482 68" "3 ;\nC -1 ; WX 500 ; N uring ; B 42 -11 475 707 ;\nC -1 ; WX 722 ; N Ocircumflex" " ; B 60 -18 706 873 ;\nC -1 ; WX 333 ; N commaaccent ; B 7 -270 146 -40 ;\nC -1 " "; WX 760 ; N copyright ; B 41 -18 719 666 ;\nC -1 ; WX 760 ; N registered ; B 41" " -18 719 666 ;\nC -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;\nC -1 ; WX 278" " ; N idieresis ; B 49 -11 353 606 ;\nC -1 ; WX 494 ; N lozenge ; B 18 0 466 740 " ";\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\nC -1 ; WX 564 ; N notequal ; B 30 " "-3 534 509 ;\nC -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;\nC -1 ; WX 611 ; N " "Agrave ; B -51 0 564 876 ;\nC -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ;\nC -1 ;" " WX 675 ; N lessequal ; B 84 0 592 628 ;\nC -1 ; WX 675 ; N greaterequal ; B 84 " "0 592 628 ;\nC -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;\nC -1 ; WX 713 ; " "N summation ; B 14 -123 695 752 ;\nC -1 ; WX 494 ; N partialdiff ; B 26 -10 462 " "753 ;\nC -1 ; WX 667 ; N Ncommaaccent ; B -20 -270 727 653 ;\nC -1 ; WX 500 ; N " "dcroat ; B 15 -13 558 683 ;\nC -1 ; WX 275 ; N brokenbar ; B 105 -18 171 666 ;\n" "C -1 ; WX 556 ; N Lcommaaccent ; B -8 -270 559 653 ;\nC -1 ; WX 611 ; N Adieresi" "s ; B -51 0 564 818 ;\nC -1 ; WX 500 ; N mu ; B -30 -209 497 428 ;\nC -1 ; WX 25" "0 ; N .notdef ; B 125 0 125 0 ;\nEndCharMetrics\nStartKernData\nStartKernPairs 9" "98\nKPX A C -50\nKPX A Ccedilla -50\nKPX A G -44\nKPX A O -45\nKPX A Odieresis -" "45\nKPX A Q -44\nKPX A T -14\nKPX A U -57\nKPX A Uacute -57\nKPX A Ucircumflex -" "57\nKPX A Udieresis -57\nKPX A Ugrave -57\nKPX A V -81\nKPX A W -75\nKPX A Y -21" "\nKPX A a -4\nKPX A b 0\nKPX A c -18\nKPX A ccedilla -28\nKPX A comma 8\nKPX A d" " -4\nKPX A e -17\nKPX A g -25\nKPX A guillemotleft -44\nKPX A guilsinglleft -43\n" "KPX A hyphen -13\nKPX A o -17\nKPX A period 8\nKPX A q -12\nKPX A quotedblright " "-92\nKPX A quoteright -92\nKPX A t -6\nKPX A u -9\nKPX A v -50\nKPX A w -44\nKPX" " A y -57\nKPX Aacute C -50\nKPX Aacute G -44\nKPX Aacute O -45\nKPX Aacute Q -44" "\nKPX Aacute T -14\nKPX Aacute U -57\nKPX Aacute V -81\nKPX Aacute W -75\nKPX Aa" "cute Y -21\nKPX Aacute a -4\nKPX Aacute b 0\nKPX Aacute c -18\nKPX Aacute comma " "8\nKPX Aacute d -4\nKPX Aacute e -17\nKPX Aacute g -25\nKPX Aacute guillemotleft" " -44\nKPX Aacute guilsinglleft -43\nKPX Aacute hyphen -13\nKPX Aacute o -17\nKPX" " Aacute period 8\nKPX Aacute q -12\nKPX Aacute quoteright -92\nKPX Aacute t -6\n" "KPX Aacute u -9\nKPX Aacute v -50\nKPX Aacute w -44\nKPX Aacute y -57\nKPX Acirc" "umflex C -50\nKPX Acircumflex G -44\nKPX Acircumflex O -45\nKPX Acircumflex Q -4" "4\nKPX Acircumflex T -14\nKPX Acircumflex U -57\nKPX Acircumflex V -81\nKPX Acir" "cumflex W -75\nKPX Acircumflex Y -21\nKPX Acircumflex comma 8\nKPX Acircumflex p" "eriod 8\nKPX Adieresis C -50\nKPX Adieresis G -44\nKPX Adieresis O -45\nKPX Adie" "resis Q -44\nKPX Adieresis T -14\nKPX Adieresis U -57\nKPX Adieresis V -81\nKPX " "Adieresis W -75\nKPX Adieresis Y -21\nKPX Adieresis a -4\nKPX Adieresis b 0\nKPX" " Adieresis c -18\nKPX Adieresis comma 8\nKPX Adieresis d -4\nKPX Adieresis g -25" "\nKPX Adieresis guillemotleft -44\nKPX Adieresis guilsinglleft -43\nKPX Adieresi" "s hyphen -13\nKPX Adieresis o -17\nKPX Adieresis period 8\nKPX Adieresis q -12\n" "KPX Adieresis quotedblright -92\nKPX Adieresis quoteright -92\nKPX Adieresis t -" "6\nKPX Adieresis u -9\nKPX Adieresis v -50\nKPX Adieresis w -44\nKPX Adieresis y" " -57\nKPX Agrave C -50\nKPX Agrave G -44\nKPX Agrave O -45\nKPX Agrave Q -44\nKP" "X Agrave T -14\nKPX Agrave U -57\nKPX Agrave V -81\nKPX Agrave W -75\nKPX Agrave" " Y -21\nKPX Agrave comma 8\nKPX Agrave period 8\nKPX Aring C -50\nKPX Aring G -4" "4\nKPX Aring O -45\nKPX Aring Q -44\nKPX Aring T -14\nKPX Aring U -57\nKPX Aring" " V -81\nKPX Aring W -75\nKPX Aring Y -21\nKPX Aring a -4\nKPX Aring b 0\nKPX Ari" "ng c -18\nKPX Aring comma 8\nKPX Aring d -4\nKPX Aring e -17\nKPX Aring g -25\nK" "PX Aring guillemotleft -44\nKPX Aring guilsinglleft -43\nKPX Aring hyphen -13\nK" "PX Aring o -17\nKPX Aring period 8\nKPX Aring q -12\nKPX Aring quotedblright -92" "\nKPX Aring quoteright -92\nKPX Aring t -6\nKPX Aring u -9\nKPX Aring v -50\nKPX" " Aring w -44\nKPX Aring y -57\nKPX Atilde C -50\nKPX Atilde G -44\nKPX Atilde O " "-45\nKPX Atilde Q -44\nKPX Atilde T -14\nKPX Atilde U -57\nKPX Atilde V -81\nKPX" " Atilde W -75\nKPX Atilde Y -21\nKPX Atilde comma 7\nKPX Atilde period 7\nKPX B " "A -23\nKPX B AE -35\nKPX B Aacute -23\nKPX B Acircumflex -23\nKPX B Adieresis -2" "3\nKPX B Aring -23\nKPX B Atilde -23\nKPX B O -14\nKPX B OE -6\nKPX B Oacute -14" "\nKPX B Ocircumflex -14\nKPX B Odieresis -14\nKPX B Ograve -14\nKPX B Oslash -14" "\nKPX B V -32\nKPX B W -29\nKPX B Y -39\nKPX C A -14\nKPX C AE -30\nKPX C Aacute" " -14\nKPX C Adieresis -14\nKPX C Aring -14\nKPX C H -13\nKPX C K -21\nKPX C O -1" "9\nKPX C Oacute -19\nKPX C Odieresis -19\nKPX Ccedilla A -18\nKPX D A -36\nKPX D" " Aacute -36\nKPX D Acircumflex -36\nKPX D Adieresis -36\nKPX D Agrave -36\nKPX D" " Aring -36\nKPX D Atilde -36\nKPX D J -32\nKPX D T -9\nKPX D V -42\nKPX D W -36\n" "KPX D X -40\nKPX D Y -50\nKPX F A -72\nKPX F Aacute -72\nKPX F Acircumflex -72\n" "KPX F Adieresis -72\nKPX F Agrave -72\nKPX F Aring -72\nKPX F Atilde -72\nKPX F " "J -60\nKPX F O -40\nKPX F Odieresis -40\nKPX F a -77\nKPX F aacute -78\nKPX F ad" "ieresis -52\nKPX F ae -82\nKPX F aring -70\nKPX F comma -95\nKPX F e -83\nKPX F " "eacute -83\nKPX F hyphen -45\nKPX F i -36\nKPX F j -41\nKPX F o -79\nKPX F oacut" "e -79\nKPX F odieresis -52\nKPX F oe -75\nKPX F oslash -80\nKPX F period -99\nKP" "X F r -52\nKPX F u -50\nKPX G A -17\nKPX G AE -29\nKPX G Aacute -17\nKPX G Acirc" "umflex -17\nKPX G Adieresis -17\nKPX G Agrave -17\nKPX G Aring -17\nKPX G Atilde" " -17\nKPX G T -13\nKPX G V -5\nKPX G W -2\nKPX G Y -12\nKPX J A -40\nKPX J AE -5" "2\nKPX J Adieresis -40\nKPX J Aring -40\nKPX K C -55\nKPX K G -53\nKPX K O -46\n" "KPX K OE -45\nKPX K Oacute -46\nKPX K Odieresis -46\nKPX K S 6\nKPX K T 21\nKPX " "K a -5\nKPX K adieresis -5\nKPX K ae -5\nKPX K aring -5\nKPX K e -18\nKPX K hyph" "en -57\nKPX K o -18\nKPX K oacute -18\nKPX K odieresis -18\nKPX K u -10\nKPX K u" "dieresis -10\nKPX K y -89\nKPX L A 44\nKPX L AE 32\nKPX L Aacute 44\nKPX L Adier" "esis 44\nKPX L Aring 44\nKPX L C 6\nKPX L Ccedilla 4\nKPX L G 11\nKPX L O 10\nKP" "X L Oacute 10\nKPX L Ocircumflex 10\nKPX L Odieresis 10\nKPX L Ograve 10\nKPX L " "Otilde 10\nKPX L S 20\nKPX L T -13\nKPX L U -8\nKPX L Udieresis -8\nKPX L V -55\n" "KPX L W -48\nKPX L Y -20\nKPX L hyphen 47\nKPX L quotedblright -92\nKPX L quoter" "ight -92\nKPX L u 12\nKPX L udieresis 10\nKPX L y -26\nKPX N A -20\nKPX N AE -32" "\nKPX N Aacute -20\nKPX N Adieresis -20\nKPX N Aring -20\nKPX N C -21\nKPX N Cce" "dilla -20\nKPX N G -14\nKPX N O -20\nKPX N Oacute -20\nKPX N Odieresis -20\nKPX " "N a -22\nKPX N aacute -23\nKPX N adieresis -23\nKPX N ae -27\nKPX N aring -23\nK" "PX N comma -13\nKPX N e -28\nKPX N eacute -30\nKPX N o -25\nKPX N oacute -27\nKP" "X N odieresis -27\nKPX N oslash -27\nKPX N period -16\nKPX N u -24\nKPX N udiere" "sis -25\nKPX O A -38\nKPX O AE -70\nKPX O Aacute -38\nKPX O Adieresis -38\nKPX O" " Aring -38\nKPX O T -3\nKPX O V -45\nKPX O W -39\nKPX O X -41\nKPX O Y -51\nKPX " "Oacute A -38\nKPX Oacute T -3\nKPX Oacute V -45\nKPX Oacute W -39\nKPX Oacute Y " "-51\nKPX Ocircumflex T -3\nKPX Ocircumflex V -45\nKPX Ocircumflex Y -51\nKPX Odi" "eresis A -38\nKPX Odieresis T -3\nKPX Odieresis V -45\nKPX Odieresis W -39\nKPX " "Odieresis X -41\nKPX Odieresis Y -51\nKPX Ograve T -3\nKPX Ograve V -45\nKPX Ogr" "ave Y -51\nKPX Oslash A -38\nKPX Otilde T -3\nKPX Otilde V -45\nKPX Otilde Y -51" "\nKPX P A -79\nKPX P AE -116\nKPX P Aacute -79\nKPX P Adieresis -79\nKPX P Aring" " -79\nKPX P J -89\nKPX P a -74\nKPX P aacute -74\nKPX P adieresis -64\nKPX P ae " "-80\nKPX P aring -74\nKPX P comma -118\nKPX P e -79\nKPX P eacute -79\nKPX P hyp" "hen -64\nKPX P o -73\nKPX P oacute -73\nKPX P odieresis -64\nKPX P oe -67\nKPX P" " oslash -74\nKPX P period -121\nKPX R C -26\nKPX R Ccedilla -25\nKPX R G -20\nKP" "X R O -26\nKPX R OE -18\nKPX R Oacute -26\nKPX R Odieresis -26\nKPX R T 0\nKPX R" " U -36\nKPX R Udieresis -36\nKPX R V -31\nKPX R W -28\nKPX R Y -19\nKPX R a -3\n" "KPX R aacute -3\nKPX R adieresis -3\nKPX R ae -3\nKPX R aring -3\nKPX R e -15\nK" "PX R eacute -15\nKPX R hyphen -29\nKPX R o -15\nKPX R oacute -15\nKPX R odieresi" "s -15\nKPX R oe -15\nKPX R u -7\nKPX R uacute -7\nKPX R udieresis -7\nKPX R y 0\n" "KPX S A -2\nKPX S AE -14\nKPX S Aacute -2\nKPX S Adieresis -2\nKPX S Aring -2\nK" "PX S T 1\nKPX S V 5\nKPX S W 8\nKPX S Y -1\nKPX S t -13\nKPX T A -33\nKPX T AE -" "45\nKPX T Aacute -33\nKPX T Acircumflex -33\nKPX T Adieresis -33\nKPX T Agrave -" "33\nKPX T Aring -33\nKPX T Atilde -33\nKPX T C -15\nKPX T G -7\nKPX T J -39\nKPX" " T O -20\nKPX T OE -8\nKPX T Oacute -20\nKPX T Ocircumflex -20\nKPX T Odieresis " "-20\nKPX T Ograve -20\nKPX T Oslash -20\nKPX T Otilde -20\nKPX T S -2\nKPX T V 4" "1\nKPX T W 43\nKPX T Y 33\nKPX T a -81\nKPX T ae -81\nKPX T c -86\nKPX T colon -" "84\nKPX T comma -70\nKPX T e -90\nKPX T g -102\nKPX T guillemotleft -102\nKPX T " "guilsinglleft -101\nKPX T hyphen -68\nKPX T i -16\nKPX T j -20\nKPX T o -87\nKPX" " T oslash -89\nKPX T period -71\nKPX T r -87\nKPX T s -74\nKPX T semicolon -92\n" "KPX T u -86\nKPX T v -72\nKPX T w -69\nKPX T y -70\nKPX U A -50\nKPX U AE -69\nK" "PX U Aacute -50\nKPX U Acircumflex -50\nKPX U Adieresis -50\nKPX U Aring -50\nKP" "X U Atilde -50\nKPX U comma -35\nKPX U m -28\nKPX U n -29\nKPX U p -32\nKPX U pe" "riod -39\nKPX U r -41\nKPX Uacute A -50\nKPX Uacute comma -35\nKPX Uacute m -28\n" "KPX Uacute n -29\nKPX Uacute p -32\nKPX Uacute period -39\nKPX Uacute r -41\nKPX" " Ucircumflex A -50\nKPX Udieresis A -50\nKPX Udieresis b 1\nKPX Udieresis comma " "-35\nKPX Udieresis m -28\nKPX Udieresis n -29\nKPX Udieresis p -32\nKPX Udieresi" "s period -39\nKPX Udieresis r -41\nKPX Ugrave A -50\nKPX V A -66\nKPX V AE -102\n" "KPX V Aacute -66\nKPX V Acircumflex -66\nKPX V Adieresis -66\nKPX V Agrave -66\n" "KPX V Aring -66\nKPX V Atilde -66\nKPX V C -48\nKPX V G -42\nKPX V O -48\nKPX V " "Oacute -48\nKPX V Ocircumflex -48\nKPX V Odieresis -48\nKPX V Ograve -48\nKPX V " "Oslash -48\nKPX V Otilde -48\nKPX V S -15\nKPX V T 32\nKPX V a -67\nKPX V ae -72" "\nKPX V colon -82\nKPX V comma -76\nKPX V e -74\nKPX V g -84\nKPX V guillemotlef" "t -82\nKPX V guilsinglleft -81\nKPX V hyphen -45\nKPX V i -16\nKPX V o -70\nKPX " "V oslash -72\nKPX V period -80\nKPX V r -45\nKPX V semicolon -79\nKPX V u -40\nK" "PX V y -16\nKPX W A -57\nKPX W AE -85\nKPX W Aacute -57\nKPX W Acircumflex -57\n" "KPX W Adieresis -57\nKPX W Agrave -57\nKPX W Aring -57\nKPX W Atilde -57\nKPX W " "C -39\nKPX W G -33\nKPX W O -39\nKPX W Oacute -39\nKPX W Ocircumflex -39\nKPX W " "Odieresis -39\nKPX W Ograve -39\nKPX W Oslash -39\nKPX W Otilde -39\nKPX W S -17" "\nKPX W T 30\nKPX W a -53\nKPX W ae -58\nKPX W colon -77\nKPX W comma -58\nKPX W" " e -60\nKPX W g -75\nKPX W guillemotleft -68\nKPX W guilsinglleft -67\nKPX W hyp" "hen -32\nKPX W i -18\nKPX W o -56\nKPX W oslash -58\nKPX W period -62\nKPX W r -" "40\nKPX W semicolon -74\nKPX W u -35\nKPX W y -11\nKPX X C -50\nKPX X O -44\nKPX" " X Odieresis -44\nKPX X Q -42\nKPX X a -3\nKPX X e -15\nKPX X hyphen -41\nKPX X " "o -15\nKPX X u -7\nKPX X y -67\nKPX Y A -27\nKPX Y AE -39\nKPX Y Aacute -27\nKPX" " Y Acircumflex -27\nKPX Y Adieresis -27\nKPX Y Agrave -27\nKPX Y Aring -27\nKPX " "Y Atilde -27\nKPX Y C -52\nKPX Y G -45\nKPX Y O -52\nKPX Y Oacute -52\nKPX Y Oci" "rcumflex -52\nKPX Y Odieresis -52\nKPX Y Ograve -52\nKPX Y Oslash -52\nKPX Y Oti" "lde -52\nKPX Y S -15\nKPX Y T 32\nKPX Y a -72\nKPX Y ae -75\nKPX Y colon -78\nKP" "X Y comma -64\nKPX Y e -78\nKPX Y g -94\nKPX Y guillemotleft -93\nKPX Y guilsing" "lleft -92\nKPX Y hyphen -60\nKPX Y i -16\nKPX Y o -75\nKPX Y oslash -77\nKPX Y p" " -52\nKPX Y period -65\nKPX Y semicolon -86\nKPX Y u -58\nKPX Y v -32\nKPX Z v -" "12\nKPX Z y -28\nKPX a j -22\nKPX a quoteright -28\nKPX a v 1\nKPX a w 4\nKPX a " "y 2\nKPX aacute v 1\nKPX aacute w 4\nKPX aacute y 2\nKPX adieresis v 1\nKPX adie" "resis w 4\nKPX adieresis y 2\nKPX ae v 2\nKPX ae w 5\nKPX ae y 6\nKPX agrave v 1" "\nKPX agrave w 4\nKPX agrave y 2\nKPX aring v 1\nKPX aring w 4\nKPX aring y 2\nK" "PX b v -10\nKPX b w -7\nKPX b y -3\nKPX c h -30\nKPX c k -29\nKPX comma one -40\n" "KPX comma quotedblright -39\nKPX comma quoteright -39\nKPX e quoteright -21\nKPX" " e t -16\nKPX e v 0\nKPX e w 2\nKPX e x -10\nKPX e y 4\nKPX eacute v 0\nKPX eacu" "te w 2\nKPX eacute y 4\nKPX ecircumflex v 0\nKPX ecircumflex w 2\nKPX ecircumfle" "x y 4\nKPX eight four 13\nKPX eight one -50\nKPX eight seven -1\nKPX f a -26\nKP" "X f aacute -27\nKPX f adieresis -2\nKPX f ae -30\nKPX f aring -17\nKPX f e -32\n" "KPX f eacute -34\nKPX f f 30\nKPX f i 17\nKPX f j 13\nKPX f l 42\nKPX f o -29\nK" "PX f oacute -30\nKPX f odieresis -2\nKPX f oe -24\nKPX f oslash -31\nKPX f quote" "right 18\nKPX f s -20\nKPX f t 18\nKPX five four -5\nKPX five one -71\nKPX five " "seven -28\nKPX four four 12\nKPX four one -69\nKPX four seven -27\nKPX g a -41\n" "KPX g adieresis -42\nKPX g ae -46\nKPX g aring -42\nKPX g e -45\nKPX g eacute -4" "5\nKPX g l -46\nKPX g oacute -41\nKPX g odieresis -41\nKPX g r -21\nKPX guillemo" "tright A -25\nKPX guillemotright AE -51\nKPX guillemotright Aacute -25\nKPX guil" "lemotright Adieresis -25\nKPX guillemotright Aring -25\nKPX guillemotright T -77" "\nKPX guillemotright V -76\nKPX guillemotright W -67\nKPX guillemotright Y -81\n" "KPX guilsinglright A -24\nKPX guilsinglright AE -50\nKPX guilsinglright Aacute -" "24\nKPX guilsinglright Adieresis -24\nKPX guilsinglright Aring -24\nKPX guilsing" "lright T -76\nKPX guilsinglright V -75\nKPX guilsinglright W -66\nKPX guilsinglr" "ight Y -80\nKPX h quoteright -31\nKPX h y -4\nKPX hyphen A 3\nKPX hyphen AE -23\n" "KPX hyphen Aacute 3\nKPX hyphen Adieresis 3\nKPX hyphen Aring 3\nKPX hyphen T -4" "6\nKPX hyphen V -43\nKPX hyphen W -34\nKPX hyphen Y -53\nKPX i T -10\nKPX i j -3" "1\nKPX k a 12\nKPX k aacute 12\nKPX k adieresis 12\nKPX k ae 9\nKPX k aring 12\n" "KPX k comma 27\nKPX k e 5\nKPX k eacute 5\nKPX k g -27\nKPX k hyphen -27\nKPX k " "o 6\nKPX k oacute 6\nKPX k odieresis 6\nKPX k period 26\nKPX k s 7\nKPX k u 8\nK" "PX k udieresis 8\nKPX l v -12\nKPX l y -11\nKPX m p -4\nKPX m v -6\nKPX m w -4\n" "KPX m y -3\nKPX n T -41\nKPX n p -7\nKPX n quoteright -34\nKPX n v -10\nKPX n w " "-7\nKPX n y -6\nKPX nine four 2\nKPX nine one -64\nKPX nine seven -5\nKPX o T -6" "3\nKPX o quoteright -24\nKPX o t -15\nKPX o v -18\nKPX o w -15\nKPX o x -33\nKPX" " o y -10\nKPX oacute v -18\nKPX oacute w -15\nKPX oacute y -10\nKPX ocircumflex " "t -16\nKPX odieresis t -16\nKPX odieresis v -18\nKPX odieresis w -15\nKPX odiere" "sis x -33\nKPX odieresis y -10\nKPX ograve v -18\nKPX ograve w -15\nKPX ograve y" " -10\nKPX one comma -52\nKPX one eight -57\nKPX one five -55\nKPX one four -69\n" "KPX one nine -61\nKPX one one -69\nKPX one period -56\nKPX one seven -60\nKPX on" "e six -50\nKPX one three -55\nKPX one two -50\nKPX one zero -41\nKPX p t -14\nKP" "X p y -4\nKPX period one -39\nKPX period quotedblright -38\nKPX period quoterigh" "t -38\nKPX q c -13\nKPX q u -11\nKPX quotedblbase A 1\nKPX quotedblbase AE -13\n" "KPX quotedblbase T -64\nKPX quotedblbase V -96\nKPX quotedblbase W -84\nKPX quot" "edblbase Y -69\nKPX quotedblleft A -88\nKPX quotedblleft AE -141\nKPX quotedblle" "ft Aacute -88\nKPX quotedblleft Adieresis -88\nKPX quotedblleft Aring -88\nKPX q" "uotedblleft T -19\nKPX quotedblleft V -17\nKPX quotedblleft W -15\nKPX quotedbll" "eft Y -25\nKPX quotedblright A -94\nKPX quotedblright AE -147\nKPX quotedblright" " Aacute -94\nKPX quotedblright Adieresis -94\nKPX quotedblright Aring -94\nKPX q" "uotedblright T -21\nKPX quotedblright V -22\nKPX quotedblright W -19\nKPX quoted" "blright Y -30\nKPX quoteleft A -78\nKPX quoteleft AE -131\nKPX quoteleft Aacute " "-78\nKPX quoteleft Adieresis -78\nKPX quoteleft Aring -78\nKPX quoteleft T -9\nK" "PX quoteleft V -8\nKPX quoteleft W -5\nKPX quoteleft Y -15\nKPX quoteright A -87" "\nKPX quoteright AE -140\nKPX quoteright Aacute -87\nKPX quoteright Adieresis -8" "7\nKPX quoteright Aring -87\nKPX quoteright comma -73\nKPX quoteright d -79\nKPX" " quoteright o -78\nKPX quoteright period -78\nKPX quoteright r -57\nKPX quoterig" "ht s -63\nKPX quoteright t -49\nKPX quoteright v -28\nKPX quoteright w -26\nKPX " "quoteright y -28\nKPX r a -29\nKPX r aacute -29\nKPX r acircumflex -29\nKPX r ad" "ieresis -29\nKPX r ae -36\nKPX r agrave -29\nKPX r aring -29\nKPX r c -26\nKPX r" " ccedilla -17\nKPX r colon -28\nKPX r comma -68\nKPX r d -31\nKPX r e -35\nKPX r" " eacute -35\nKPX r ecircumflex -35\nKPX r egrave -35\nKPX r f 23\nKPX r g -21\nK" "PX r h -17\nKPX r hyphen -52\nKPX r i 8\nKPX r j 4\nKPX r k -15\nKPX r l -21\nKP" "X r m 17\nKPX r n 16\nKPX r o -28\nKPX r oacute -28\nKPX r ocircumflex -28\nKPX " "r odieresis -28\nKPX r oe -23\nKPX r ograve -28\nKPX r oslash -29\nKPX r p 13\nK" "PX r period -72\nKPX r q -31\nKPX r quoteright -4\nKPX r r 4\nKPX r s -17\nKPX r" " semicolon -28\nKPX r t 12\nKPX r u 11\nKPX r v 30\nKPX r w 32\nKPX r x 7\nKPX r" " y 33\nKPX r z 0\nKPX s quoteright -20\nKPX s t -12\nKPX seven colon -88\nKPX se" "ven comma -79\nKPX seven eight -32\nKPX seven five -53\nKPX seven four -65\nKPX " "seven one -47\nKPX seven period -83\nKPX seven seven -11\nKPX seven six -37\nKPX" " seven three -42\nKPX seven two -13\nKPX six four 17\nKPX six one -64\nKPX six s" "even -37\nKPX t S -9\nKPX t a -6\nKPX t aacute -6\nKPX t adieresis -6\nKPX t ae " "-10\nKPX t aring -6\nKPX t colon -29\nKPX t e -13\nKPX t eacute -13\nKPX t h -11" "\nKPX t o -11\nKPX t oacute -11\nKPX t odieresis -11\nKPX t quoteright -19\nKPX " "t semicolon -26\nKPX three four -9\nKPX three one -76\nKPX three seven -15\nKPX " "two four -12\nKPX two one -45\nKPX two seven -22\nKPX u quoteright -31\nKPX v a " "-24\nKPX v aacute -26\nKPX v acircumflex -26\nKPX v adieresis -26\nKPX v ae -29\n" "KPX v agrave -26\nKPX v aring -26\nKPX v atilde -26\nKPX v c -26\nKPX v colon -4" "8\nKPX v comma -46\nKPX v e -30\nKPX v eacute -32\nKPX v ecircumflex -32\nKPX v " "egrave -32\nKPX v g -36\nKPX v hyphen 0\nKPX v l -29\nKPX v o -26\nKPX v oacute " "-28\nKPX v odieresis -28\nKPX v ograve -28\nKPX v oslash -29\nKPX v period -51\n" "KPX v s -30\nKPX v semicolon -48\nKPX w a -26\nKPX w aacute -28\nKPX w acircumfl" "ex -28\nKPX w adieresis -28\nKPX w ae -31\nKPX w agrave -28\nKPX w aring -28\nKP" "X w atilde -28\nKPX w c -28\nKPX w colon -49\nKPX w comma -47\nKPX w e -32\nKPX " "w eacute -34\nKPX w ecircumflex -34\nKPX w egrave -34\nKPX w g -38\nKPX w hyphen" " -4\nKPX w l -30\nKPX w o -28\nKPX w oacute -30\nKPX w odieresis -30\nKPX w ogra" "ve -30\nKPX w oslash -31\nKPX w period -51\nKPX w s -32\nKPX w semicolon -49\nKP" "X x a 6\nKPX x c 0\nKPX x e 0\nKPX x eacute 0\nKPX x o 1\nKPX x q 2\nKPX y a -12" "\nKPX y aacute -12\nKPX y acircumflex -12\nKPX y adieresis -12\nKPX y ae -17\nKP" "X y agrave -12\nKPX y aring -12\nKPX y atilde -12\nKPX y c -15\nKPX y colon -48\n" "KPX y comma -21\nKPX y e -19\nKPX y eacute -19\nKPX y ecircumflex -19\nKPX y egr" "ave -19\nKPX y g -34\nKPX y hyphen 7\nKPX y l -18\nKPX y o -15\nKPX y oacute -15" "\nKPX y odieresis -15\nKPX y ograve -15\nKPX y oslash -16\nKPX y period -25\nKPX" " y s -19\nKPX y semicolon -45\nKPX zero four 14\nKPX zero one -50\nKPX zero seve" "n -3\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n021023l_pfb_len = 45458; char* n021023l_pfb = "\x80\x1~\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-ReguItal 1.05\n%%CreationDate" ": Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Develo" "pment\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file " "COPYING (GNU General Public License) for license conditions.\n% As a special exc" "eption, permission is granted to include this font\n% program in a Postscript or" " PDF file that consists of a document that\n% contains text to be displayed or p" "rinted using this font, regardless\n% of the conditions or license applying to t" "he document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05)" " readonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. " "See the file COPYING (GNU General Public License) for license conditions. As a s" "pecial exception, permission is granted to include this font program in a Postsc" "ript or PDF file that consists of a document that contains text to be displayed " "or printed using this font, regardless of the conditions or license applying to " "the document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999" " by (URW)++ Design & Development) readonly def\n/FullName (Nimbus Roman No9 L Re" "gular Italic) readonly def\n/FamilyName (Nimbus Roman No9 L) readonly def\n/Weig" "ht (Regular) readonly def\n/ItalicAngle -15.5 def\n/isFixedPitch false def\n/Und" "erlinePosition -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName" " /NimbusRomNo9L-ReguItal def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-169 -2" "70 1010 924} readonly def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0" " 0.0] readonly def\n/Encoding StandardEncoding def\n/UniqueID 5020937 def\ncurre" "ntdict end\ncurrentfile eexec\r\x80\x2\xec\xa8\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1" "\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1" "fK\x89i\x9ct\xb4r\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88" "\xed*\xc4\x19\xff++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3" "\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2" "P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81" "\xd8\xd7\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>m\xb5" "\xb9\x9c\x8d_\xab\xb6\x6m\xe5\x99\x4\x92\xcd\xee\x63\x62k\xf\xaf$u\xd8\xb5\x8f\xc4" "\x3\xfd\xcf\x43\xc0\x34\x80u\xd6l\xbai\"\x95\xaa\x62\x63\x8f\xaa\xbb\x42\x8f|\x9c" "\xc2*/?\xb8\x1f;\xc2\x66\x9d\x2\xdb\xf7\xd2-\xb2\xa9\xdf\xa3I4\xde\x3\x8e\x82\xdf" "BkG3\xd3\xff\xd3\xef\xb0\x8\xc3\xf6\n+_\xa2v=\xad\xd8`d\xc3\xde\xb8\x81\xfa\x33\xe0" "\x82\xf2x\xfe\xe6\x8b\x46\xf6\x10\xb2VT\xae\x96 }\x81H\xe0\xf5N\xf9\xbbx)c\xfe\xeb" "l\xbd\x36\x64\x18\x42\x19[K\x1e\x42\x17\x39rra\xe5\x7fJP\xf6)i\x87\xde\x8f\x66_X" "#8\x88\xaf\x1f\xfb=\xbdW|\x97pS;\xac\x6\xa0\xe3\xcb\x91\xdf\xb6\xe0\x31\xe\x8d\xf1" "\xda\x1f\xdb\\\x32[\xba\x61$\x4\xb3\x98\xe3\x92\xcd\xec\x45\xa4W\xd1\xe2\xb7/M\xad" "\xceMH\xc4\x39U\xd4\xc1\x94\xde\xf0\xc1\xd5\xf3\xb4\xb\xc5<\xcf\x66\x8w\xac\xca\xec" "%\xcd\xe6;3\xc3\x8c\xf4\xe7'\xd8LT\x18\xbb\xedr\xafQ\x11\xea\xa1S{\xcbi\x83\x10\x45" "\x1d\xb0\xecQ(a\xae\xde\xce~H\xf2\xe4\x8bR\x81#\xe0T]\xba\xc9\x61\xf6\x8f\x46\x2" "\xcd\r\x94\xd4ux\x87\x8eQ\xc0j+C\xc9\xed\xef)\x19\xa6\x8fx\x9d!\xcd\x7\xe9\xa3\xdd" "\xe4;v\x1d\x33\x88/\xfds\xcb\xd2\xa6\x44\xeb\xe9\xc1\xea\xf6\xfd\\\xeeH\xb2+A}}\xb7" "\xf3\r\x8f\xf9\xe7\xd7\xb1\x8a!\xad\x85\x9a\x1f\x4\xee\xa0\xfb;P\x87)\xa5\xfe-c\x82" "\xf2\xb0\xf8\xe0x\x80:\x9d$SU\xda\x2\xd3\x1j\xb2\xc8\xb2X;Mw\xd3\xac\xfb\xc3JU\x9d" "5\xbb\xd0\x37\xe9\xc5p\\\xe7'\xc2\x64\x94 w{ C\xdc\x95\xe3&\x84\xe5\x9e\x30\x0\x95" "E\xce\x0\x8eX\x91\x89\xf\x30\xe5\x9b\x9\x85\xc1j\xb2\x18\xd4\x37K\x99\xe8\x14G\x4" "\n\xc6x\xbb\n\xa5\x84? h\x85G\x9c\xce|\xdbS?\xaa\x80\xd6%\xf1Y\xc2\x7f\x86\x41\xbd" "\xc7\x65\xf7\x8\r\x35\xbd\xbc\x9c-\x15\xa3\x1c\x66\x87\x8)\xa7\xe\x7f\xcf\x61H\x89" "5\xe5\x35\xb6r\xecW(\xc6}\xe8\xce\xa9!\xb4\x93\xd0\x8d\xd3;\x90$\xa6\xa2W\xac\xbc" "\xff=\x9a\r\x62'\xdf\x1e\x8c\x8c\xf1\xb2\x14\x9a\x9e\xaf\xa1\x62\xf1\x8bZ\xe8I\xc7" "\xa9imLq\xaf\x9b\x46,|\r\xa5G\x1b\x18\xbb\x99\xf2\xaevU\x16\xfa\x3\xb9\x87V\xb7\xdf" "v\n\xc4\xd0\xb9\xf8\x85+\xbcg\x86\x96\xff\x9c\x95|d\xb2\x93\x9e\xcdm\xdc\x18\x85" "]\xe0gG\xb2\xf5\xf5\xc4\xfc\x4Q\xf6\x9f\xa6\x10\xech\xbf\xe\x92=\xcf\x36\xb5}2\x92" "\xf2\x91\xf4M3\xc5\xa6\xb5\xbe\x7fPe\xe4\x1cl\xaf\xb0\x65|,\xf8\xec\xf8\xc6\x42\xa3" "\xb1\xe1\x1e\x9a\x7f\r\x44\xb6Zg\x8b\x1d\xe0\xeb\x5\x19\xa2\x31\xae^\x96m\x8e\x84" "\xc6n \xf2\xdf\x99\x0\xf7\xdc\x83\x85\x98 \xe8\xf6\xd0\xd7\xfa\x8a$.\xbd\xff\ni\xd7" "p\xc6\xca\xe\x35\x8e\x7n5\xe0\x63\xbK\x9e\x93\xb6I\xab\xd9\x8f\xe2\x9e\x46\xa3\x63" "]*c^(l\xb7\x32\xe4\xe0\x32G\xda\x2\x45u\x16N\x16\x97\xaa\xfc\xcf\x12J\xf3\xc0h(\xfa" "z\xef\x4\x64\xf8\n\x95U+O+\x95R\xc8\x6\xaf\x86\x80\xce\x1e\xac\x41\xa1\xa5Y\xe5\xd0" "\xe2{R0\xe\xfd\xb9\x91\x8cmHF\xb6\x2\xe7\x94\xb\xad\xe0\x81\xb9\x96\x5\xa1\xf4\xad" "Nof\xf0\x32~\x8dZF\x87\xee_\xdc\x6W\x1f\xbcso\xd8\xcaP\xcf\xfbn.\x8b\x87\x1b\x96" "\xfdN\xf<\xdfY\xac\x88\x8&\xa8\x98\x8e\x1f#z9\xef>\xcd-+V\xbd\xf/\xc2\xd4\xf9\x11" "g]\xeb\x9t\x19<\x7f\xd6*\x83\x96G\x9d\xad\xf9\xddP\x6\xaf(g\xael(}\x16\xf9`\x7\xaf" "\xa6Z\xf4\xfb\x64\xeaI\xd4\x85\x36\x81i\xd5P\x5\xa0$J\xe3[E#x]\xa7\xaf\xf8\x14TD" "\xa2\xc6\x12\xda\xdd\xbb\x9\xf2Z[\x1d\x96?HX(\x96\x37t\xd2&\xc9\xb3\xfb\xbf\xe9\xdf" "=\xd3}Y\xfdM\xba\x19@\xac\x1fS\xa8\xefH\xb8M\x0\x1f\\\x97\xb6X\x1d\xbb\xe3\x19_\x6" "\xc3Xw\x17\xc2\x9f\xee\nN?d\xa9\x95\xc6\xd0w\xe0\xdf\x80\xae\xbb\\\xa9\xb4\xc4\x97" "\xad\xee\x9a\xde\xc8\xcb\x81|J\xd5&`:\xe5\x1f\xf4\x42\x66\x32\xf2\xf6\xfb\xb6\x80" "\xbb\xf\xb0\x87\xe0Y\xc1rx\xb4\x30\x13\xda\x6\xff\x41\x18\xec\x96Q\xc4p`\xc7\xf\xa5" "\x8a\xc\xe1,\xf2/\x8d\x2\xbe\x7\xad\xcc\x9cV#\xe7\xdaSE>\xe1\xe6r\x8c\x7\x1f\xc3" "\xfa\x65t\xe2\xca\x1c\x35\x92\x95\xc7\xd2\x96 t3J\x84@\x88_,\x85(\xc8\x83v\xc6\xf9" "=W\x8bG\xfa\xbb\x11\xf5\xf0S\x8f\xffTqc)\x9a\x8!\xe4,\x97\xcc\xa2\xcc\xd7\xb1)\xe4" "'\xfdz\xba\xfeZt\xa5\xa1\xdfH\xbb\xd1r\xcc\xe6\xcd+`\xec!&_\xafP\xec\xa1\x86\xab" "\xa6\xceo\xb6=p\x7\x43#\x1d\x30\x33\xbe\x61\x1c\x8a\xd1o\xa9\xa2\xf5$\xf1\x1d?\xc3" "g\xe4\x61\xab\xf5\x65\xbd\xde\xab\xaf\x38[\xb0\xff\xb6\x34[x6\x95\x30\xeIa\xe4?>" "t5\xb7\x95W\x9e\xe3Q\xd9\x97\xdaX\x11\xcd\x45j\xc4\x16U\x19\x12\xa8\x9d\x32s\x9d" "\x3\xe8\xe2\x43\xcw\xce\x97\xacw\xb3\x8a\xe5\xbb\x3\xe3\xa6~\xef\x8f\xb2\x7\xac\xb0" "\xe1\xdd\x11GGbb\x4:d-f\xa4\xfd\xac\xfb\xe\x9a\xbf\xda\x12\x18\xdd\x62[d\xfc\xe5" "\xd4\xb2L%\x4\x5\n\x88\x1c\xa0~\xce\xa1;g\xc3\x82'r\xb6x\xe7\xfdR#\xb9V\xd9\x45\x80" "\x8f\x9b\x97\xc7\x35\xa3\xab\x88\xdb\x31\xa8\xb1L*\xc6}\xa0\xc5\x17O\xc4\x9f\xe4" "\x1b\x61/\xcc\x5-\x8\xc1v\x4\xab\x43\xdb\xe2\x6>9\xe2y\x9d\xb1\xe7k`;\x8\xf3J!\xfe" "C\x0\xaa\rz\x91\x1c\xfa\xe6\xce\x35)\x16\x45\xaf\xbe\xd9\xcd\x0 N~\xb0\x34;eG\xfc" "\xce\x9c>s\xdc\xe4\x18\xdc\xba\x81\xd1\xa0?\xce\x87\x32\xdeT@\xff\x98\x35l\x6\x34" "\xa1%\xc6H\x81\xdc\x5I\xe2\x9a\x82\xc8.\xb4\xaf\x99\x98\x7fo\xfdQ_\xbeW\xd3\x90\x86" "w'S#\x9f\x92\x36\xa2\xb6\xaa\xbb\xdb\xc4\x19\xef\xe2\xbd\xaa\xc+\xde\x84\xc4\x33" "\xf4\xd7S\xf6\xcc\xf\x3\xe7\x9fZY!\x0\x82\xcb\xbdm\x84\xacL\xaa\"\xea\x30\xf3\xdf" "Mk\xb4 |\xbc\x1bg\xe4\x9\x86\xcdO!5\x4\xb0\xcc\x32\xfe\x84-\x89\x65\xa9\xe3\xb5\xf2" "8\xbf\xe2\xfaOXr\x83\xeeu\xb0\xc6\xf1\x8f\xec\xc1\xce\x37\x34\x87,\xdb\xa5\x30\xe9" "y\\\xbe\xd2\xc7\xca\xa8\xe2\x92!\x17\xab\x1W\xa1\xd9z\x8a\xd9\xedL\x84[GzR\xf0\xbe" "}\"\x14\xe9\x1d\xdf\x98\x1\x0l\xf6\xfd~N\xf8\xbaJ\xc3\x11\xb5u\xf<\xea\x17\xe6\xf6" "\xeb\x6\x8e\x9a\xd2\xcb\x30\xd4\xa4\xe0\xaf\xdc:\xa7\xaa\xb2I\xf7\x6\xde!h\x10\x88" "\x4\xa4\xdc\x1b\xf5\"\xb8`\x92\xe5\xc9\x90\x98\x34^\xb2\x12\x37h\x9c\x91L\xda\xcd" "\x8eR\xa8\x7\x41}CA_\xc0k\xe\xc1i(\x1fo\xcayA\xd7\xcc\x38\xb0\x9d\xfe^<\xd9\xee\x84" "\x12\x90,\xb8\x8d\x44\x31\x9f\xba\x90G\xe9\x3\xc3\x46~Q\xd9\x1\xeeGO\xc8\xae\\\xc9" "\xfc{J)\xff\xb9\xe5\x3&D,\x14\x94\x8fy\x80\x66Z5\x82\x33\xc6[\xda]o\x6T\xd9\xb8u" "\xe9\\\xa8\x16\xa9\x15q\x80h\xfe\xb3[\xa1\x18\xbe\xb4V\x3\xa3\x98\xe0X\x5\x7\x63" "u\x2G\xaaI\xa1\x8f\x12\x30Xy\xe2\x30\xe5\xaaZ\xc1t#\xa7\xc1{\xbe\x83\xafV\x90(#\xcd" "8\xfd\xf5<\x81V\xdd\xd1\x96Ym\rR\x81\xc2\x98\x42\x18\xbcNR\x1\xe5\x88\xd5s)\x7f\xe1" "\xe3K'~\xb4\x11\x46\xcc\xbd\xa3p\x82\x80\x86\xff\xb6\x83\x7\x83\x93\x89N\x9e)7&y" "88\x85(\xc5+g\xe7\x8d\xcd\r`\xaf\x90\xc8\xf1\x95\x34\xcai\x17 C\xe\r\xe1'\x8c\xd5" "h\xa9\xaaq\x1e\x31\xc5vxy\xaam\xda\xbc\xfb)\x84\xbe~\xf3\xd8\x9a \x10\x62\x38M\xb" "k\xca\\wc\xb2\x83Y\x18\x65\x18\xd1\x1}\xe\xf0\xf4\x97\xd6\x9c(\xe0\x43\xc0\xbd\xb3" "\x88\x34\xa8\xfc\xe1r\x9bX/\xf5'sE\x14T/\x1\xe4\x85\x7fY\xdb\xa8``\xe9\xf0\x99\xfa" "q]\xec\xe2k\xe\xfa\xc4T\xc5@\xe1\xae\xb8S\x1d\xa9\xe8|/\rz\x3o\xe4H\xd2\x61\xaf\x1a" "\xde\xbb\xc6\xe7zt\xaa\xd6\x46\xfaS;\xee\x10\x91K=;+q\xff\xdf\xf6\x64u\xe9\xfa\xea" "\xc8\x9a\x64\x43\x95\x9f\xae\xf4\x33\x37\xee\x16\x87\xe2\x17\x13\x33\x8\x1b\x92\x0" "\x96\xa0`\x93)o\xd3\xc4\x66\xe2p\xb0\x15orZh\xf4\xcG$\x16\xb3\x13\x5\x84\xc9\x63" "#\x19\xb2S\xdb\xb3)@\xbe\x16\x17\xb0\x11\xa1\x1d+\xad\x11\x62\x2\x44\x34\n\xea\xc1" "\x87\x1\x45PJb*e\x8f\xcf\x9f%x\xa3\x30`\x1b\xed\x12|p\x18\xc5\x98\xeb\x37\x99\xce" "\xdd\x13,U\x1a\xbb\xdd\xeb\x38\xa6~\xccW\xc5\x84#\x1a\x82(\x4\x97\\Ic%\xe5IoT\xef" "z\x0Q\xffj\x11\xe7\x38\xd4^\xde\xce\x8a\x92\x43\xe3\xd1\x66\x97\xc5\xff\xbc\xeb\xc4" "\xc4\xbd\xaa\xed\xfd.\xbf}H\xdb\xbe\xd9Q\xbe\x96\xec\x19\xe8\x62\xa1\xc3\x80\x33" "\x99\x9c\x98\x9d\xc0\xcd\xaa\x30\xa0\x87\xc5\x8ev@\xea\x8b\x32\x44\xaa\xe1\x37v\xa9" "\xb8\x64\x38\x34^\xd1\xc4\xebp\x9d\x5\xaa^\xc0\xd3j\xa6\xdcl \xb3Z?+\xa9[\xc2S\xcc" "#\xc\xdct\x18\xe8\xd6\x38\x36Q[\x8d\xe\x14\xa2\x6\xf4\xac\xd6x\x7f\x9dLM\xc9\x43" "\x15\x32\xd7[\xc\xb4X\x96,\xae??\xceJ.D\x85m\xda\xd0\x84~\xfe\x44\xc7\x2\xb0\xde" "=\x93r\x18\xb8zg\x81\xdd\x38\xb1\xa4\xac\xe4\xb1$\x11\xb\xea\xd6\xfew,\xf2i\x4{?" "\xe1\x14<\xc1\x84\xc9v\n\xba\x9c\xbe\xab\xde\x34qm\xd5\xba\xc4\x83\x30\r\x65\xb\xbd" "\x1e\x19\xb5\xc7\x38\xf9\xb1\xb0K\xed\xa4P*\xbd\x12\xe6\xb3\x2\x97\x62LQ\x13\x1M" "\xcc\xe4z\x8a\xba\xe0\xf4\x66\x1f\xd2\xcf\xdf\x35\xad\x44\"\xb2\x8c\xf2\x87\xa1R" "" "\xc7\x64\x13\x94\x19\x37\x39#\xd5j\xd2]\xd4\xa8\x5\x8e\x91\xe4Pi\xbc\xb0\xa3\x37" "\xe5L\x3\xd5l\xed\x11\x11Z\xf7}\xb5?\x80Z\x87?\xfd`\xf5\xa3\x83\xd3\xde\xc5\x8b\xc" "O\xd9:\xac\x8\xfb\xdb\xfc\xb9%/\xcc\xda<\xd2\xa9\xc1\x93\xcb\xe,\xba,n\xb2\n\xe\x0" "6\xfc<\xd9\xe2\xfd\xe3\x84\n\xa4-\x11\x97T\xda\xebL\x88\xc6\x6\xd7Q\xe9T\xc8\x18" "\x8d\x1d\xe4\xe9\x61\x39Q\xaa\xcf\x66\xc8\x9;\n\x91j\x4\x1d\xb5\x44\xf6\xd2\x2\xe9" "\x81o\x86\xd9\xe1#t%C\x8\xf6Y\xd2pDp\xf2?\x1c\xc4^\xe5\xb7)\xeeP*\x86$\xfcl\xc\x94" " +\xa4`2\xa8\x16\x89\x1\xec~+\xb1\x39\x15t\\\x7f!\xf1+\xf8;\xeT\xad\xa5s\xff=@\x9c" "\x86\xfc\xaf_\xab\xaa\xea\xe9\x98\x8\x6\xe4\x3y\xf4\x18\x6\xb7\xc3\xd7\x32\nnk\x2" "SuC\xc6\xe3\x9e\x82T\xed\xfb\xac\xc5\xe3\xe9Ir\x7\x31\xdc\xe4\xf7\n\"\x1e\xec\xd4" "%\xff\x9c\xd9\x95\xde\xaf\xe9\xe0\xb\x1\xfa\xd7p]\x8d\xfa\xe1\xa4lU\xb\xae\x9\x97" "\x9c\xb4\xc1?\xddw\x15\xed\xde\x1a\xd0\xb2`\xd2W0\xf8y\xcfg\xa7\xf4\xab\x46\xdc\xad" "\n\x6\x88\xe0X\xab\x32\xe2\x1bq\x8f\xcb\x38\xc8I\xb8'\x8a\x81\xf0T\xbc\x8c?i\x93" "\xb\x65\xcf\xb7\xbb\x93[\x1a\x11{\xffPXCc\xed\xb2\xet[&\xcd/\xa9\xd7\xc4N\xa4\xbe" "\x12\xbd\x86\xfeL\xd0\x39\xbb\x45\x80\x39M\xdb\xb0\x64\xbb^o\x16\xa2\xc5\x1d\x96" "\x8e\xc\xd8\xdc\xa0\x43\xdb@\x19\xbc\x81\"\x65O\x3\xf9\xbf\xf9\xc5\x1b\xa3\x66\xd4" "*\x86\x18\x94\xbb\x91y\x7fh\n\xfb\x3{\xb6'\xe0\xfb=\xe8\xca\x37\x4\x8o\xa4\x17\x81" "E\xdc\x1a\xc8\xc0\xd9H\xfb\x90Z)b\x1d\x12\xf2\xd9\xf8_\xdb\xee\x98&\xda\x1\xdd\xf" "\xe1\xb0\\\x8e\xad\x9f\x9e\xa9\xdc\x1f/'\x94\x1cX\xe4\xf5\xb\x90m\x8e^~\xf9\x1a\xc1" "\xac\x38\xf\x35\xcb}N8.*H\x15\x9d\xddOM\xfc\xbcr\xb8+\xc4\xe4\xed\xdd\xd3\\\xc4\xdd" "8w\x86\x80\x9a\xbc\xa2\x12\x9f^\xc2H\x94\xff\xec\xda\xb2\xd4\"\xaa\xdaPa\x1f\xc0" "\xf2[\x4q=_\x1c\x87yOBV\x2\xb\xf2\x19+\x95\x94\x62sg\x4\x85,\x8c\x9a" "\x13K[C\xdf\\\xe8\xd3\x9d\x61\x8fOvas\x92!\x85=\xfd\xfa\x7\xfe\x94\x1\x1a\xb\x87" "e)\xa1u\xe\x1d\xf3\xfc\x94T\x8d\x37\x39\xb2`\xcc\xea\xd2\x2\xaa\xbaqN\xea\xf6\xb" "\x11\xb3\xc1\x18\xc2\xbc{:E\xd6\xff\nj 2q\xb9Xb\x11\x31\xd0\xf1\x19\xdf\x86\xb6/" "F\xe3\x84\x8bsg\xdfh\xc3\xde e\xa7rs\xb3\x62\x2mM\xea\xdd\xbai#\xfd\x8cn&\xcf\x9f" "\xb0\x3\x9d\xa5\xf6\"\xf9\x31J\xfe\x42\x85\xc7\x31\x35\x13:\x1c\x84\x36\xd7\x11y" "\x1U\xe1\x7\xa4>\xf4y\x5\x8e\xc3 \xec\xbd|\x97\x93\xc9\xa5h\xc4\x2\xe5\xb6N\xd3\x16" "\xd8\xe1\xafs\xb8\xb8)\x85\x96\x39\xfe\xf4\xeb\xff\xff\xbbtd\x0:\x1b\xe4\xe6x\xaf" "h\xff\xdb\x41i5\xbf\xd2\xb3\xb7L\xf6\xfa\x8d\xf\x19\xa6\xc8\x91\xc4\xd8\x97\x33y" "\xd1\x44\x8d\x9a\xdd\x63\xff\xcc\xe9\xad\xf1\x16\x9c\x1f(\xcf\xc4\x89\x32\x99\x9c" "f\xcf\xc0{YO\x1a\x91\x1f\x39\x15\x38\xe0h\xab\xa6\x84\xac^\x85\x31\x7fH\xf2p8hN\x1b" "F\x9/\xbe\xefx\x14O7\x1f\x16\xa4~\x87\x1f:\x89\xb4\x13\xfc\x97\xcc\x45\xea\x81\xbc" "m,\x1a\xf8\xf7!\x3\xf1\xa7\x41-!E\xefM\xb3\xf9\xb3~\x13\x98\x0\x83\x1f\xd2Z\x9a|" "\xcf\x7\x16\xc4\xe0\xac\x33\xb3i\xeb\xfa\x1b\xab\xc1:K\xed\x15\xf2[\xea\xe9\xaf\x30" ":\xdf\xa5U\xf1\xa0\xe6\xc5\xe3\x17\x1b\x41\x93jf\xaf\x8d\x1f)\x8fk\x8b\xe4\xc4\xdb" "\\\x98l\xad\xd0\xd0o\xe7Jp>>\x8f>\xfd\xbb\x95m-tx\xb*\xc2\x93-\x11\xa2\x17t\xe8\x2" "F\xd6&\x9d\xd5\xb9\xfe\x30\xb4\xfe\xb6\xd7\xa4\xaa\x90\xb2r:@qX\xc7h\xf7\x95\xc6" "\x89\x19\xfb\xc1\x66/e\xc9Nc#\x1d\"\xb8~a\x85\"w@\x89\x31\xdct\x85\xe7\xe\x8c\x80G\xe8P~\xf8\xd6\x8d" "W$pE1%;\xfa\xd3\x18\rO$-\xf7Q\xe7\x5\xe9\xda\xe3-<=\x17~\xad\xf9\xbb\x1a\xe6\xf5" "q_\xdc\xc3w\xb1\x41\x96G\x17\xa1\xfw\x92\xdd\xbfO\xcb\x46\xd7'\xa6\x63\xca^\xfb\\" "\x8c\xca\x32\xf\x14I\xd3\xe0\x11)\x84 \xd1Q\xc7\xb1\x1e\xd3\xd5\x84\x84\xe5^3\xe1" "\x86\xc1\x1f\xbf'\xd2\x6X\xd5\xa2?xM/\xe1\xc>:\x9\xff\"\x96\xa4\x10\x5\x12,;\x92" "\xbb\x96\x0\xc9\x96\x83\xc0\xbeq\x80\xb2\xe3\xdf\xe4\xda#\x98/\xba\xc3r\x17u\x85" "\xf9\xb7\xfa\xfaq\x89R\x1cx\xae\xf4}\xe1iK@\x86\x3\xa0\x34\xfd=\xe5]\x97\r\xf7\x9b" "\xc4\xd1\xaf\x63\xaa \r\xd6\x85\xdep\x16\xc0\x87\x61+4\x88\n\x96t!\xa5\x8\xd1}\n" "Gc\xf1\xd4\x91\xd8\x88i\x1e\x45R\xa6\xa7\xc4?U-\xae\x34\xfK\xca\x14`2\x12\x42\x87" "\xaf^;\x96z\xc5\x63r\xf1yt\xa6\xbT*\xdb\xd6\x31\xae\x13\x43KM\xce\x44\x82\xe9\xba" "\xd1\xceL\xb6\xad(\x19\x19\xff\xb8\xe\xe1\x66\xccLM\x11\xa9\x8c\xbb\x63Y\x17\r.+" ">;g\x19\xb\xf6\xfd\xa3\x9f\xefS\xecI\\\xb9\xb9\x8d\xe\x31(\x98s\x82\r\x46LC:\xad" "\x8d\xbd\x44\xf6\xf2\xe0/\x8b\xf0%\xec\x90\xaah\xb9\xa5m\x1d\x11J\x9\x63\xe5\x91" "\n\x6-\x99Qz5\xbc\x45\x18\x16\xd0\x43:\xf5\xde\x89\x9a\xa4>\x91\x98\xc\x46k>\xc2" " \xc7\x19\xb6:\x97@\xac\x31\xce`\xd2\x18\xa8\x99n\xcd\xdc\xeb\x98\xc2If\xa8\xe2\xd0" "\xb7\xcb\x98\x95\x18\xb5I=~5\x7<\x97\xbd*9\xa8\x13\xfcH\x91\xb4\x9e\xfc\xa3J\xbe" "~\x91:\xcf\xc7\x97\xeb\x1\xa8w\xc8$.\xee\xdft\xc1\xb8\xa5(\xd5\x9d\x8c\xd7Q\x8\xcd" "\xd5\xb3\x17\x38\xfa]\x97\x37\x1fQO\xfe\x0\xc1\xaa\x1b\xe3\x41\x89\x8dx\xfb\xfb\x9" "\x1f\x44\xabV\xf5\x34\x98-\xef\x61\x18\x9ar\x12o[#+\x0\x5\xa5\\g\x17P%E\x3\xbb\xc" "\xafM\xf4\x41R\xe6\x10\xaf~\xa1\\\xa3$P\x81\x7\x6r\x9a\xb4\xc9\xba\xfe\xea\xbb\xa1" "2\x1e\xde\xb\xfe]T\xa6\x1f\x1fk~`\x8e\x6\x4\x63\xd2\x34*\x0\xe6\x2\\\x1cGqM\xb0\x91" "\x9b\x66\xc5\xf9&\x95\xfa\xa3\x35\xdd\xce\xdf\xaa'\xaek\xbc\x62\x8dm\xd9\xed,m&\xda" ":\xc2u\xee\x39\xf4'\xbf\xf7\xba]\x86\x1c\xd4+\xed\xb3\xb9\xb1!2>#\x88\xe2\x62+\x81" "f\xea\xce_\x18\x91\xe5\x41\xcxV\xd5@\xb6\x14s\xd5!&\x1e\x5\xb1\xd7h\x8e\x9\xf5)\xe3" "\xb6\x9b\x89*\xa4?V\xfe_\x85\xbc\x4\x2X\xdb.`\xdb\xa9\x7\xb5\xb\x15\xe5m\x1f\x8f" "\x2\xd7\x89.\x18\xe9\x18\xb6\xe5\r\xeb\xcf=@\xb0\x3\x9d\xe5\x82\x9P\xae\xb0\xd8\x9e" "{\x1d\n\x1d\x88\xee!\x12_yO\xbc\x44\xd4\x1b\xd7\x1f\x80Jy\x17\x5\xbc\xd9\xe8s\x5" "\x1cs\xfc\xb1SZ\x6\xc5?\x9c\x31$\x98\xac\xfe\xf6\xfa\xacm\xe9\x41\xc9\xad\x61%\xa5" "b\x91Oy\x3%[9t,\xea\x99\xed\x4G$\xc2\xc8ml\xecW\xff\xe8L\x98\x36>\xa4\xb8\x31\x16" "\xd2\x97\xc7\x61+*\xfc\xef\x84\xe0<`\xbep\x13v\xc8{*\x99\x19\xb9x\x82\xe8\xf1:\xb3" "H5\xccO9>S\x1\x39\xbe\x17\xdb\xcb\xe7\xeb\x1f\x9eO\xa5\x12\x1\x4\xd5\xf4\x82pi\x91" ",X\xd5\x9c\x1b\x37\x9fyt\x1eM\xf1\xd6\xd5\x6\x42q\x89\x93\x10\xb9\x37\xa8P\xc7\"" "\xafS\xd4.\xec'\xe6\xe8[\xb8\x93\xf\xaa\x87\xa5\xc\x93{P\x86\x95\xf1Fj\xe8" "\x3\xb1\x10\x62\"\x9d\x8b`\x1d\xb8\xc3\xa3\xa5\x8e\x15\xe2\xc9\x8\xb9V\x2\xf4\x65" "\xd1\xadK /\xaa\xb0\x43\xcc'/\xa6\x7\xc4\x89\xd6UTy_8\xfe/\xd8\xb5\xc7\xd4\x8\x17" "\x9b\xc9\x89\x36\xdb\x13\xa9:\x84\x16\xde\xf7G\x9e\x6p\x8b.\xf4\xfd\x61W\x16wH\x8b" "^D\x87>\xfd\xa2\x93\x38\xbZ\x4\xa4\x93\xf6\x37\xff\xbbh-\xf4l\x8a \x8f\xc3\x14@S" "\xd4\xcaj-h\x12\xd4go;\x1a`\xdc\xf2~\x87\xb2\x18m\x93\x1d\x91 \x91\xe!U\xadO\xfd" "djN\xa0\xe4$,c\x88m\xa7\x0n\xb5\xc0\x4\xb5O6n\x18\xb4\x96\xacw`C\x18O\x97\x80\xb6" "}\x11\x92J\xaf\x0V^\xb0\xe7\xf\x93\xaa\xd9y\xd9Sgt\xd6\x82\xc6\xcd\x11#\xcb\xa5>" "\x92\xcb\xdft\x86\xac\x8a\xd3\x84\xb4{\xcc\xe8\xa5\xbf\x31+\xa4\x34Y\xbbOe\x88\xfc" "3\xa4ht\x7fVyj\x8f\x43\x42Q\x7f\xd7U\xa0\x8d\xceg\x13\xf6RH\xab\xaf\x7\x92\x1v\xa6" "v\x19\\\x66\x9ey,\r\xfe\\\xb9Zz\x1a\x13\xb7\rn\x82\x2\xb9\xd1\x46Z#\xe0" "\xb\x10\x13\xd4\xaa\xbc|V\xc2x\xac\x81\xf8\x38\x33G%\xf3\x85\xe6\x36\xf8,kI~n0\x82" "\xd3\x9eq-\x8c\xafT\x0\xd4\xd5@_\xe\xf0\xee\xc7\xb1%\xc0lWjt\xd4\xd6\xdd\xee\xf3" "mk,\xba\xcbLlb\x8d\x63!\x92_{\x99\x13\xd1\x95\xa1^\xadl\xdfI\xdc\x86\x4\x36\ny'\x1e" "\x13j\x82\xf7\xe2%\x11\x42\x16\xdd\xb4j\xbe\x92\x7\xb0\xb8\xd5K?\x83\xa2\x30\xc4" "\xc\xdb\x98%\x39\xbd\xf4\x35\xa4\xd0\xd8 4\x8f\xb4\xe5\x83\xb8\xe\xc6\xa6\xc9\xe1" "m\xc5\xab!b\xce\x97\"\x91\x15\xbdn\x9b\xdf\xce$d\xd6\x43h(\x82\x11t\x9eZ[XS\xaa{" "\x9bt\xaa\xbd~Y\xecg0\xa1\xd2\xe5\xb1[\x5%\xd2\xd4\xaa\x8e\x19\xd8\xd6\x8b\xa6\x61" "\x84\xcHX\x5%,D\x8-\xb8\x18\xc1t\xa7\x3p\xd8\xd3\xc3\x66\x66\xef\x61g\xdb\x36ShT" "\xc1\xd3\x44 [VA3\xd4\xf0\xf5!\x85\x7f\xa3\xfc\xb7g\xbe\xfc\x65\xb2\x43\xf4\xd5(" "\xf1w,\x9c\x96\x32\xa5\x17\x8ch\xad\xa7M \xf3\x17 O\x82\x1eJ[r\x97\x1c%;Z\x5[\x9e" "\x90\xf5+\x19z\xb3\xc\xe1S\x91J\xf9l\xed\x96\xbf\xcc\x64{\nz\xe1\x3qK\x11\x31=\xe1" "\x99R\xf4'\x80\xa6\x6\x87Q9\xdb\xbd\x8d \x91\x31\xef\xd3\xae\x97\x9by\x9c\xd9\x18" "6y%\xb1\x12\xfd/\x8c\x34\xf7QSs\xffk@\xdb\xe6j\xf0gY\xdf\xaa\xe4N\xae\x1eJ\xeaR\x8" "\x18\xbY\xb8(\x9a\x84\x91\xec\xa6~X\xed\x91\x92^\xd7z;ee\x1c\xdf\x7fz\xe9YLh\x80" "%\xbaOn\xab\xb4he\xa4\xae\x41h\xac\x9f\xc7\xeaU\xe4\x9|\x82\x8:\xf9\xfd\xf9\xa0\x1b" ";\x94\xc8\xf4\xd2\xee\xca\xb6\x88\xdf\x38\x64\xbf\x8a\x14\xabnU\xb0\xb8\xa1\xf6\xfd" "\x94/\xb2_\x19\x9c\x7\xb3\x65\xaf\xb8:Zx\xe6\x8c\xb0\xde\xa6Vh\x8]~\xd7\xe5\xb7\xd4" "\x98\xf,%\x8d\xcd\n\xf2\x99\x5\x62\xbc\x36\x35\x99\x36\xf0\xae\xda\xecl+>\xc9xk\xe1" "\xf6\xcc\xa1\xec\xc8\x6\x32\xbeS\x7\xe9yx6\xca\xb\x1dR\xa4\xa2\x86\xf4\xbc\x36\x32" "N\x1a\xe9H\xc6\\\x36\x31\xd4N\x81\xa0nI\xd7\x81<\x85\x15\xe0\x85\xdf\x14=5\x96\x63" "\xef\xe2\x8c#O\xa2\xe0u\xb9\xfe\xeaU^\xac\xa4\xd7\x8d\xac\x10\x8c\xa1\xff\x94\xf0" "\x88\x8b\x1a\x92\xef\x94\xae\xa9\xda\xda\xf2\xffp\x8a\xffh\xa8<\xfc\xf7H\xbeG\xa6" "\xc4\xd0\xd5{\x9\xef\x8f\xf4\xc6\xaen\xc\xcb\x32g\xb2\xbe[\x81x\xe6\xf2\n\x17\xa9" "}5is\x1f\xe4\xab\x89\x33\xf9\xba\x88\x9b\xbf~)\xdfW\x82\xde\"Y\xc1O\x16\xa0\xe2\xeb" "\x6\xfc\xef\xac\x8a\xb5\x8d\xcb$H\xeb\x99z\xeeo\x82\x9c\xce\x98{*\xb4N\x94\"\x61" "\x8c\x8c\xb6M\xcf\x39ms\xf5\xc\xfc\xf9\xc\xbd)\xe6!\x93X\x1e\x39X|\xef\xec\xb6\xef" "\xccQ\xb5<\x0\xde\x8f\x82?BIsf;nn\xf6\xfb\x64\xc2\xbf\xbe\x15\xe5\x14\x33\xcd\xf1" "\xa3\xed\x82\x61=\xad&\xc6\x85+\x99\x93\xf2\xd9\x92\x44\xa5\xef\\\xbe\x62\xf5\x4" "\x1en\x17S!#\xa3\xa7\xa8\xd0\x35z[\xd5\x43\x99T\x1aLp\x9b\x9a\xd3\xb7v\xfb\x0\x86" "\xe2\xce\x1c\xb7KFj\xfd\xc4 }I!\xc4\r\n\x9e\xaf\xb6\n\x90\xfa\xafQ\xbe<\x1f\xee\xda" "\xe7\xce\x14\x62~\xfb\xe3\xbe\xfd<\xeb\xc6o\xcd\x0s\xaf\xfa\x32\x64\x8d\x81j\x10" "\xb0\xa3Q$\x96Gx)m\x6\xcd\x41\xaa\x18}\xee\xc0\xcc\xcfn\xf'\xe1\xb5lE\x11\xc\xaa" "\xf1\x43\xca\xc6\xd1o\x84\x9\x1fq\xbb\x36\xd9NR\x9f\xa6\x7\x93\xe8\"\xa3\x9e\x10" "|w\xdb\xdb\xfe\xe4\xfa\x1e\"\xc4Pv\x1b\xca\x92\x87\xca\x88\xd8\x19{\x11\xe1\xb0\xaa" "\xd1\r\x63\xe9/\x9X\x15\xdc\x7Q\xa9&\x10\x46q\xe8H\x14NL\x96\xeep+c\x83\x1cO\xcb" "\x8f\xff\xa5\x66\xcb\xd1\xfO{ \x93\xd8\x36\x87\x9dg\xf9M\xfc\x9b\xe|\x81'\xbeL\xd6" "l\xa3\x1c\xc7\x66\xf2\xae\x36\xeb\xb6\x9b\x5\xa2\x44\xdb\x7f\xe\xd1&\xc8T\xbd\x8" "o\xa4i\x8e\x1c\xa3\x16\xca\xe9\xb6\x82S0\x9a\x9\xbe\x1b\x8a\x61\x32\x88IX\xf2\x2" "owv\x88\x9f'\xeaZ2{\xdeX\xd9\x34\x32\x9\xc7\xfi\xcb\x94\xd1i3(\xb9R\\\xa4\xf5WvD" "\xb\x98\x64\xe7\x45\xc8\xcb.C\xd3\xecn\xac\x82\x1f\x83r(B:\x3\x41\xae\xfd*#\x88\xfa" "\xfe\xfa\x1d\x42$\x1e\x8b\xbe\xc3\x35\xda\x34\xe1\x9i\x9e\xbb\xcf\xda\xdd\xf3\x81" "\xf3\x37 \x17\x3:`\xe\xd4\xcam\xa7%r\x84(\xba\x45\xfe\xb5\xe7\xc4\xa1&N\xe6I\xe0" "\xf0\xe\xf3\xbcp\x85\\\r\xfd\xd0#\xe9!kaj\x1\xe3z\xdf\xe6\x65\xbd\x13\xd5\x1a\x13" "\xa0W\x10\xbc\xe3\x80\x63y\x8fzmK\x80\x8e\xf4\x2N\xad\\\xbf?^=\x89:\xde\xa0\\\xc2" "\xa9\x64(q\xfb\xd4\x1d\xd7\x15l^\xd8J\xf8\xad\xc4\xde\xd1\x33\x1a\x8a\xcf\xd5\x1d" "\xd8\xf9\xd9($\x9f\xe1\x81P1N\xca\xa4\xe2\x91\xeb\x13\xe7\xbb_\xdb*%\x91x\xe5\xf1" "7\x1f\xe7\x80\x7f\x83\x82\xad\x14\x91\xf8iX\xdb*\xf\xc1\xd7\x2\x81%\xf9O\xb7#`\x8" "\xe7\xb\x16\xbb;g\x15\xces\xf6\x32\xe\x7f\xbc\xe9\x8f#\xa1\xd7\x1bVV\x13\x11\xd1" "\x9\x33\x96\x1c\xe1\"M\x2\x1\xb9[\xc7\xf8\x62\xa2;(\xdc\xb7G\xbe_\xe3}kBfv\xae\x9a" "\xf4\x87G(>\x1d\xf0\x9a\xfd\xe4\xa2i\xd6\x32\x95\xc7\xc1_:E\xf5k'\xe7\xd2\xcd\x63" "\xaf\xb0\xac\x8a%\x63\xa4\xb6\xcc\xe4\xff\x33\x6\xa2\x8b\x30z\rK\xd5\x7\x1f\xb1\xc6" "[\x94\xf5\xde\x32\xa5\x85\x9c\xcb\x82o\x8c\x89G7\xbf\xe6\xa3\x32\xc3\x84\xc2\x1f" "n\xd7\xa3\xaf\xcb\xf\xce\xe2\x37\x86\x8c\x95)cOj\xa9\x15+\x16\x8b;\x5\xeezv\x8d\xb3" "\x8b\xc4\xef\xcd\x36\xe4\xf3\x81\xc2r^33\xfam\x5R%\xe1\xde\xaf\xfb\x9f\xcf\x46\xd1" "$\xbe\xf\x86\x64u&\xb3\xb0\x11\x36o\x1a\x19\xde\xba\x97&\xf7^x\xb3v]B\x1c\x91]t\xdf" "\x1e;FK\xe5\x1kt\x11\x62\x33\xe8\x31\xbdh\xa9\xd0L\xb4\xba\x46\x8a\x19\xc2\xf1\xc7" "\xed\xb3_]\xefT\xe7\xc1\xe7\x8b\x8d\x83'9\x81\x88\xf5\n\x85\xb4\xc0\xd4,i\x7fR\xcf" "\x1e\xab\x42\xc6\xf2\x44\xf6\xb0\x9b-\xf3lz\xd4\x18\xdc\x11?S\xecP\xc6\xb1\xc9,\x97" "\xe9\xd3(\xa6\x80!'a\xa2{\xd3\xbe\x97mIc\xbf\x18\xd6\xd3\x4O5\x8e~l\xec\x1c\x94\x16" "\xb6\xc1\xc4\x9c\x96\x9\xf4\xea\x1e\x6\x81\x1b\xc6\x9a\xde\xa3\xd3\x0\xad\x99{\x92" "\xddO\xf8/\xfc/UW\xd8W_p\xcc\x34\xa7\xf9\x91g\xc0\x34\x91\x99\x9a\xa9r\x84]\xb3w" "=\x98\xd2T,\x9e\x8c\x1d\x35M\x1clY\x86\xe6\xfa\xb3\x8f\xe9HU},\xb6\xc5\xc0\xb8\x18" "=d\x9d\x92\x66\xbe\xb9\x64G1\xbd\xa5\x80\xbdG)Qe \xc7!R\x5\x80H\xa2\x7\x64\x32\xd6" "]\xe1\x13uZ\xa3)(\xa7^\xd4\x88\x8!\xcc};\xc0Q\xbb\xbf\x44\x3\x65\x0\xe7\xa6\x62\xa7" "i\x14\xab(\x92\xce\xc2\x7f\x19Pr\xb7\x89X_\x11\xf2J\xb0\x98g!D@\xf3\xca\x15\xdb\"" "\x80\x10\x8b\x1b%H)\x16\xaf\x8d\x39Yi\x9e\xd4\x43\xd8g\xd3\x93\x7\x96\xce^\xd4\xb7" "1\x7f\x9f\x80\xc3 ZBP\xbdz2\xb4\x39\xa8\xfbV\x0\xca\xeb\xe2\xed?\"|\xfb\x61\xb5\xfc" "\xf0\xd1^\xf#:y\x10\xe3\x61w\xfq\x12\xd3WA,\rk\xfd\xc8?e\xb0\xe6\xbfzb\x8eu\xde-" "\xed\xa6\x64 \xc2\xcb\x7f\xeb\xf7\xc1\xe0\xd8\x43\x14@\xbb\xb8^\x94\x92\xfdj\x91" "\x82\xa6\x87\xb4=\xd2\xe1\xdd\xfc!Y\xb8\xb0sK\xb\xdc\x36\xee\x8f\xec\xe6\xd9Z+zD" "\xbc\x17\x16\xc1L\xc0o\x4\x7f\xf6\xbc\xa7\xd2\xb3\xf8\xcb\xfe\xa4\xa5\xd4\xf4\xf" "\xacg\x1b\xc4\xe3\x8e\x9\xd1\xcf\xa5\xc8&|\xddn\xbf\xbe\x9co\xb2\xb8H|$f\xc2\xf5" "\xdb\xd4\x98=\x88\x9b]\xb9h?\xaf)\xc8m\x87\x65\x36\xb5W\x7\xf5\xd0%n\xc2\x90\xdd" "WE\xc6\x14)\x90\x7f\x12:\x9c\x13:\xe2\x13\xa9\xab+\xca\n\x39\x11\xb8\xd9\x93\x62" "\x1c\xa0\x9;\x88R+\x83\x17\x95\xe9\x8R\xa4\x98\x5\xa2-\xc4\x1b\x66\xffiSxL\x8e\x97" "\xbc\xb5I\xef\xa7\xc4*Gz\xa5Y\xa6\xb8\x8d\x8b\xdc\xdb`j\xb8\xb3\x5\xe5\xaaiU\xa3" "=\xa7\x9au*<\xc5\xfa\x5\xb2\x18\xe1\xf4\x43\x44\xc3\x84\x1a\xfa\xdf\x7fx5)\xbb\x13" "\xc1<\x8eup\xda\x98\x3\xcc\x11\x36\xc8\xc9\xbf\xc5\xad\x9d\xaa\xf1\x82\x9a\x13>T" "\x80<\xab\xb6\x43Q\xb4k\xec`\xc2}\"\xfc\x1a\xa2\xeeX0\xde\x10\xaf\xb7~[\x81\xfd+" "SlS\xc1\xe3Q\xce\x8ez\xb5\x84z\xb1\x5?M\xcd\x13>\x2\xd6\x12;6tv\x9f\x46u\x3\x83_" "\xfd\x4z\x92\x1f\xd5gx-WU(\x88\xe0\x94*\xe7Y\x0_\x7\x94\x34k\xa9\x37\xcdO\xfe&\xd2" "\xa5\xaf\xf3Nq\x89\xa3\x4\xb5w\xbdvs\x81\x34\x1c\xd3\xab\x19\x18\xa4\xb0\xdeOa\xa3" "\xe5\x8c\xc8\x5\xde\xe6\x64\x1e\xb7\xcf\x42\x31\xd3\x16\xed\x13\xdf\x3\xc9\x97ge" "@\xc5.P\x14\xe5\x4\xed\xbd\x39\x84\xb4u\xc0\x44+Me\xdd>\xaa\xa8z\xd3|O{\xfc\x9\r" "\xa7\xbb\x42\xc8\xaatN\x98x\xcdZ\xb9\x32\x1cxG\xa3`Y,nc\x2T{\xe4\xaa\x12\xeew\x17" "\xfb\xb8M\x8e\xbc\x66\xf4\xc4\x9\xc\xc4\x14\x13\xdb\xd2\x8f\x31\xef\x37\xaf|\xc1" "T\nw?W\x1at\xfd>jDN_\x19\xb5\x8\x43$\xe2\x15\xa4\x11Lp\xf\xbb)\xdf/\xb1\x82'a\x94" "\x8\xb1\x37w(X\xd1\xa8\x9a[\x12x\xd0\xbbW\xf\x85\xc8\xf\x63\xac\xbf\xe0p\x3\x3@\x93" "\xc3g\xee\xf\rW-\x86\x1cz-d\x4`\x83\x82\x8b\x8e\xdfkm\x15\xcf\x8\x87\x83\xb8\xd7" "\x9d\xc3\xb9\x9d~h\x1a\x9b\x31\xd0q\x3\xec\xf7\n\xc4;\xb1\xd4u\x1f\xde\x18Q\xd7\x98" "\x91/\xdd]\x1f\x88j\xc8X\xea\x44\x14\x1e\x0\xfa\xf4\x87\xd1v)\xb7\x6N\xaa\xe9O\xf" "\xec\x46W\xd6\x9f\x1d\x88kq\xd5\xc8\x42o\x88\xf\x8c\x9!\xd7\xd1\x15\xc2L\xa0T\xd4" "^w\xce$\xb5T\xa6u\xd3\xf7\x95\\\x92\xden!b&\x9d\xd8N\x8f\xd2 \x8e\x93\xf9\xeb\x32" "C\xec\xffS\x94\x1d\xc0K\xf3\x84\xf5\x35\xf5\x8e\xda\x33\x62\x5\x7sG\xf7\x3\xb3\xa6" "0\xf4\xaf\x8b\x84\xec\xe7\xf1\xdc\x84\xe9\xaaq\xe2\x11\x34SQN\xe\xbe\x4\x18]S\x1f" "\xa5\x96q\x8c\xe3\xea\x7fg\xe6_\x93\xf2\x86\xf9\x30\xda\n\xca\xf8\x31\xc9\x1f?`v" ":\x5\xd1\x82\xa9\x38\xdd\xfbR\x90x\xe2\xa3\xb6\xc8\xa3z\xd0v\xe9\xa4\x19\xf0\x8a" "\x83H8\x9d\x30R4InC\n\x1a)W\xd3\xff\xa2U\xa1m?\xf6\x8\x33K\xb3\xb1\xa5\xc6\xbcz\xac" "\xe9\xae\x95\x9f~Q\xbbQ3NJur\xf1\x1fp+\xc2~:f\x98\xeaZ\xe5@]aw\"\xf9\x99\xaa\x46" "_\x81hm\xf1k(\xd4\x97\x31^\x10\xb8\xda!\xb4:\xefL\xf3;?>\x8\xe0}:t\x6\x86o\xa3\x8b" "\xc8\xb3<\xc1;\x88\x9e\xfe\xd6\xa6\xcd.\xbc\xab\x42\xd1\xb7\x94M\xc1\x5J\xe\x65H" "\xc6\x13\xec\xf1\xa4\x81\xcd\xf9\xb0\xc4\x1e\xcd\x30\x36H=\xec;D7J\xc2\xf7%\x94\xf6" "\xa5S,\xda:>5\x16\xb9I\xb4\x61\xa7\x11\xf4g\xbf\x82\x32\x1f\x35\xf9\xb2\x42\xcc+" "W_@\xfb\x93\x9b\x42\x8b\x11/\x1a\x12\xbb\xdc\xb6\r\xca\x81\xc0m\x1a\xa4\x0\xae[\x98" "7\xa5\xef\xb1\xf1\x89\xde\xf4\xf8\xa0X\xbb\x8a\xf6\x1\xf0\xf0\xdb\xd5\x91\xa6\x17" "\xect\x3s<\x89\xd2p\x8\x16\xed\xcah\xff\xfb\xbd\xd6\x83\xda\x66\xe8\xea\xa1-/\xb8" "\x18\xa2\xc6\xb7\xc0\x3\x9a\xbd\xad\x87\x89\x15(g\x0?W\x6\x1a\xd3V\x84_\x81\x9c\x1d" "s\xdc\xe4\xc7,\x13\xac^\x8c\x97\xd0/\x83-y\x8b\x5\xc0@?\x85\x85\x82\xa7Tw.\xabl\xc8" "Hd\x85\xec\xb6.\xad\x89s\xaew\xb3+.\x81\xb3\xf4 \x13\xcd\xbc(\x8f\xb1W\x9a\x85j\x14" ".\xba\xc0P@\x99~\xd2Y\xf9-\xbfIPO\xce\xdd\xee\x84\xe1\xcd\xdc\xaa\"+K\xc6w\xfb\x91" "\x81\xa0\x9e\x90\xc4\x8\x3)\x93\xefV\x9b\x96\xa7O\x96o\xd3S\\LM\xfeh\xb6\x12s\x17" "r\xdb\x99j\xd7\x10\x90\xd7\xff\xfdj\xca\xb9\xbf\xd4\xcf\xd2~h=\xb1S\x1c\xce\x1a\x8" "\xa9o\xc4+\x96\x15@\xd4]?\x9b\x39\x0_\x17jqr\x9f\x9\xba\x38\xa0\xc3 \x16\x9f\xf2" "\"B\x82\xba\x19\xe9\xb5/)\xc4\xa4\xa9\xf8\xef\xeb\x14\xcb\x82\x66\xb~\x86\"\xadS" "\x1a\x95s\xcc\x39\xe8\xa6\xac\x3\xbcI\xddH+&\xc7+\xcf\xb7'\xf0\xd2\x99\xcf\x9c\x2" "\xb4\xc1\xc5 <\\nX\xd3\xe8L\xf7\x62\x92|\xfc\xcc\xd8\x1\xf\xc8I\xcf\x95\xc4\x1e\x8d" "e\xcan\x99 Qm\xeb;r\xb5\x32G\x8e\nl\xdd(\xbaWD\xd5[kK\x8d\x46\x8fi\x10\xfc\xcf\x2" ",F\xbbp\xfd\xbeq\xa2\xad;\nh\xa1\xf8\x8d\x15\xe4NK7\xc7\x1d\x8a\xb7\x18\xdd\xc7\x1f" "\xf1OX\xf2!\x1f\x8fP\x17{<\xdaW\xd4.\xbcV!\xdc\xf6\xe \xb2\xd3\xb8_\xe5\xeb\xe1&" "\xd8\xc0\xcb\x4\xa4\xe]\xd4\xc2\x1e\xbf\x66\x8d\x15\x83{\xdd\x9V\x5\xa3z09\xeb\x16" "}\xf9\xf5\xeb\xfd|\xb5\x85\x1\x8\x12Z\xfe\x10\xb6\x8a\xbdr\x95\xf4R\xfaN\xf3\xfb" "\xf2K\xd3\x9et8\x17``%\xb3\xa0\xec\x8f\nnM&\x95<\x11\xac\x10\x9d\x19\x65\x8b\xd2" "x\xe6v\x96\x15o\x4\x1f\xda[;\x1b\xa1\xcc?Z\xc3y\x8zs\xd2\xf7\xab\xea\xad\x43y\xcc" "\x9a\xca\xd2\x1\x92'\x1d\x10\xfc\xe1\x4_R1W8\xc8\xef\x16\x66\xca\x8b>\xe1\x41\x1d" "\x81\xcd\xae\xd3\xf\xf6\x32\x1a\xe3\x0\x43\x35/ml\x5\x17\xdb\xaf\xcbU\xbf\x98\x31" "g0\xf6\xcf\xb9\xea\xaey\x81\xdc\x88\x46\xd9\x32\x8d\x92\xf2/e\x86\xa9\xf3\x38\xba" "\xfa\x81*\xf5q\xfcI|5+z(&\xce\xa8\xa8U^P\xe3\xb3\xfc\xc7RN\xe5S\x93\x1\x9e\x1e\x4" "\x7\xdd\x13\x43\\\x5\xf8\x14 \xf3\xccztd?\xed\xa3X\x17\x1e\xae\x13H\xd1\xfdx2\x8a" "v%\xaa\xfa\x39\xc6\xe\xe1S\xa0\x8b\xce\x1c\xdb\x2I\xc1&\xbe\x8\x1et\xedtd\xce\xcf" "\x4\x95\\%\xcb\xc^\xc1uC\x1c\xb1\xb6r\x98\xa8\x96O\xde\x98\xe1?\xa1\x19'8\x9f\x1e" "\x87m\xe3\xd0l\xc2\xce\xe5\xcft\xb\xe6\xd8_\x8fov\xf7\x37\xd8\x97\x8a\xabm@\xb6\xa5" "\x2{\x1fY\x92\xfb\xc1},\x7I\x97\xac\xf4\x8a\x8d\x44;\xcc\xb3\x8cpO\xba\x1e\"\x9f" "\xe\x8e\xff\x1b\x44\xd7\xa5\x92\xe8\xa5\"\xb6\xe0~\x1e\xa8\x89\xe0nOz\xdd\xaeT\x15" "k\x9e|\xc8\xc0\x41\x8d\x82\xf5\x45\xa0\xd1N\xc1\xac\x1c[a\x7f^\xf8w\x96\x17\x8c\x43" "v.\x81\xfb\xad\x43\x82\x17\x9\x7f\x85\x82SNW\xdf\x99_\x87\x33\xbc\x44\x30\xd1\xa1" "\xbb\xdb\x91\x91.\xc5\xcdw\x8c(ctv>\x17\x18\x32\xda\x9\x43\xd2T\xfe\x64\xbe\xe\x5" "U\x9d\x9f\xcaw\x18\x46@\xf6\x1c\xc\xa8\xc2\xa3\x1e`B\xdb\xcd\xbd\x19\xbd\xb6\x66" "\x9e\xac\\QX\x86\xfal\xa4\"X!D\xd7\xcc\xe8\x7fI\x90\x87(\xba\x9a\x84\xe\x37\xa7\xd4" "\xcdT\xd2\xb0\xb9\xc9\xae[l\xeb+*<*\xd8Y\xcf\x34\xf8\\Z\xae\x81q\xe2\xca\xd9OG\xf5" "\xe0\x34H63\x1a\xc3\x86\x13Q\xb6\xb6\xae\xbc\x41\xcc\xfc_(\xfa\\\xe2X\xbc\x8e\\J" "\xed\xa6\x14\x62\x45\xc5i\x15SiF\xe1\xa0\xff\x87j\xee\xb9\xc1\xde!IrL\x8a\xe6\xf0" "\xb\x91\xab\xa3<*\xde'p\xc7\x41i\xf7\xd1\xe0\xe8qDI\xde+\xa0\x3{y\xe3m?\x5\xca\r" "\xffZ\xb1I\x89Qn\x88\xc\x61\x3\xc3\xbe\xf7\xee\xbdRWf\xe5\x8f\n\xf3;\"@\xd2W\x11" "\n\xb6?\xfe\xe2\x30\x8f\xf9\xeai\xba*R\xf2\xa7$\x1a\x7fRI\x8b\x3\x1f\x8f\xfbj\xe0" "\xd2q\xf3\x0$\xc0H\x7%\x81\x8\x3\xc0\x16k\x98\xf3^on\xe2J?7^|T\xbd\xe1\x1\x8a\xad" "\x84\x62\x16\x19\x10&\xa9\xbe\xd7K\x9a\xd1\x1e\\\x7fR=@~\x98\xad/$b\x3\x66\xf2\xc" "\x19\x16P\xf8\xb4\x13N3\x1\x89\x9d)\xb4o\xa5)\x85\xda\xd3\"\xf9K\x9d>R\x89\n\xbc" "\xd1\x88\xd0\x9f\xe4\xd1\xfc\xc0\xb7\xa5\xf\xe2\x63\xbb\xe5\xeeS\x15\xc3\x16:^\xee" "0R\x83k\xe6\xa1\xae\x1\xe\xcc\x80H\x12\x18\xde\xd4H\xf0\xbdz\x12\xe7\xd2\xb5+l.\xcf" "\x8d~\xae\xd6#g\xa9\x9H\x83\x11l\xc9\xef\x4\xaa\xf5&\xa9\x92\xa2\x8\x8c\xf9\x2z_" "\x84\xael\r\xd5^F\xdazG;\xcb\xe4\x83\n\xb5\xd2\xe2j\x82\xaeL^S\xbd\x1\x1\x81\xda" "\xc9\xb9VE}{d\x80\\\xdd\"\xbe\xb6\x84\xe3\x17\xcdYP\x9\xe5,\xceP\x1f^3\x91\x35\x90" "\x7\x98p\xc0+3\xae\xda\x96\xc0\xda\x8c\x32\x82\x8b\x94\xe7\x86]\xa5\x93\x9b\xfa\x43" "_\xe5\xe9\xc8\xce\xdf\x17\xc9\xb0\x91N&\x87\x11\xc3\x1f\xe5_|\x9e\xc4\xef\xa5\x11" "\x9d\xbb\x41:\xed\xe8\x1_S\xddY\x94QL\x8c\x87\x14\x8d\xd1\xf3\x45n\xe3\xaa\xee\x9a" "\xa6w\x86;\x3\x97\xd5'c\xeb\x1\xfaz\xa5\xbe\xea]\xfc\x9eG\xc\xbf\xcc\xfb\xe5`\xa0" "\x14\xa2\xb7X\xc\x82\xf7[\xbe\xc\x32@\x86\x9Q\xc7\x14?\xcb\x3\xb9\xa0\xe4\xbb\xb8" "\x1c\x89\xe7\x83\xa6\xa4os\xcc\xe5\xe9_x\x8d+\x13\xeb\x1f\xe8\x66\xabq\x6\x5\xb4" "c\xfe\xd1\xa0\x1b\x10x\xcd\xb3l\xfaRN\xaaI\xa5\x2\x88\x9e\xdc\xdd\x32N\x11-\xa8n" "\x1a\x97\xc3\xbdO\xca\x34\x37\xe8\xd5\x61\\@B\xcd\xce\x88\xf6\xe4\x64\x66:\xf7\xa1" "MPBY\x17\xfc\xb5\xea\xc6\xfbJx\x9e\xb8\x8f\xc1\x92?\xbf\xc0\x1\xda\xf3|\xf3\x9b\x84" "\\\xf6s==\xa5\xcaZ.\xf7h\xbdwn\xee\x1e\xa4\xb5\xb4N]\x11\xb0\x83\xe1z\xa5\xf2\xf" "%\xb1\xe2\xd0\x38.\x90\xdc\x91\x9\x93\x9b\xee\xb4Q\xe1\xd0\x81\xd5\x8d\xa9\x32\xb2" "R;\xaf\x12\xc4\x66\x94\xe\xd1\x36\xf0\\\xd2hb\xaah\x85\xe8R\xfa~b\x87\xd0\xfb\xd3" "\xbc\x15\x65\x7f\xcc\x99\x1c*\xe3LF\xc2\xa7\x63\xda\xff\x66\x42\"\xb8\xd7\x84\x65" "\"R\xdat8IU%'\x80\x8d\xcc\\p\xb1,\xb9\xf2\x88{\x8d\xab\xe3\x3\xf2\x1c\x10\xb6w\xb1" "\xb5I\xb\x43\x90\xed\xed\x64\xc8P\xee\xa3\x66\x96\xe0\x17\xde\x1c[\xe0\x10\xa1]\x8" "\xa9\x8a\x5\xda\x37\xd8\xf2\x38\x83gI\xb8\x42\xec\x17\xednv\xfb\xad\\W\xb1\xf7\xc5" "'/vc\x6mv\xac\xb1\xef\x8eu\xbap\x98\x44\x97\n\x42\xba\xb4N\xedsz\xa4\x14\x9e\xdf" "\x80\\\xd0=\xd4\x14T\xacL\xa9(@\xd9\x65\xe5\x11\x9f'b\x93\xeb\xfb\xef\x15\x9\xfe" "=X\xc7\xae\xeb(\x1\xb8\x85\xb3#\x9b\xa4\x9d\x9d&\xdc/\xfe\x30{\xe4\xa3\xdb\x96I\xef" "u!\xd2\xf5\x8ej{3\xf1\xd9\xa3\xe7\x92|\x14T\x1c\xe2\xec\x94\xd8\xf6\x1d\xb\xb3\\" ",B\x97\x9\xa6Gl\xbf\x11\xc9\xf3TE\xaaO\xc8\x36n\x98\xb2V\xe2)2\x9b\x66\xd2<\xed\xe3" "_\xdb\x19q\xbd\xe1\xa6(\xfc\x91\xfe\xde\x30\xfa\x4va\xc3\x8\xc0\x37:|\xac\x1e\x11" "\r\x9c\x45\xb1H&\x92\xe8\xc4H~\x1fu\x3v\xe3\xa1\x35\xd6\x82i1\x7\xd1.r\x1bn'\x88" "{h\x9c)]\xb7&\x1\xd2G \xc6\xcc\xb4\xd5\xf2\x90\x84+\x8e{\xd5\x3R\xc9\xaf*\xed\xef" "\xbb\x0In@\x16+\xa9\xa8j\x1d\xea\xe1\x38\xc7\xfa\x83\x17\r\xac\x10^\xf2\xfdL>s:;" "7\x15\xec^\x97\xe0\xf0\xb4M\x87\xd1\x84\x65\x35\x93\x93X\xd6y\x88\x18\xc7\xf0\x0" "u\xe7z\x6\xa2\xec\xbq\x18\xb3$M\xebZs\x18\x0\x4\x84\x8c\x84\x39Gv\xf9\xff\xf7\x30" "s\x1d]\x8a\xf0\xa5\xe4\xee\x45\x1\x9b\xa6\xff}\xf4yp\x95\x44\x36\xf\xd9\xb1$\x1d" "F\x84\xde\xf7\x8\xa7\xf7<[\xe5\x41\xf\x36\x7f\xc1\xd7K\xde\xa7y0\xf4\xd2\xc\x1f\x43" "\x12\x85u\xe9\xf1]:IC\xd4\xc2\x86\x4\xe0\x44g|\xc7\x0\x61i\xe2S\x6\xe0\x64hc\xca" "\xef\x93\x13\x46\x1\xfbrk\x87msh\xd4\xc9\x1d\x1b|\xbc\x96\x83\xe0\xed\x86\xa6\x12" "y\xd5\x44\xef'\x85\xf7\xc4(\x88/c\x8e\x11 |\xbc\x62\xf3ik\n\xf9\xf2P8\x91\xf!\xcc" "*\xd3G\x8e\xc2y\xe6\xff\x83\xd3\x41zu}k3Kk\xb3\xbf\xe3\xbd\xcc\xe6\x89w\xc4$\x2\xbd" "|\x97\xe6\xcd\x9dx\xaa(\x99\xde\x5\x95Z\xc4\x31\xc8\x93`}\xf8\xe5\xd4\x83\x1f\x87" "\xce\xf6\xa6\x12\x62\x30\xb7\xb9\xf8\n\xd0\x98\x82W\xb0\xc7\xb\xee;\x17\xf8\x38\x96" "\x89.\xb6\x9fz\x9e\x7f\x4\xe8\xee\xb7\x64\xe9?\xad\xd0\xa3\x8\x35\xady\xfb\x7f\xcc" "l\x9e\x1c-\xd8\xbe\x12\x38\x99\xc4j\xa2\xd5\xc4@\xa6/u\x80tS\xcax\xe4\x65\xc6\xb2" ",\x87\xd3\x95\x91\xa6&\xc9$\x13\x99\x9f\xb7g\x1f=\xcb\x14\x1f\xa3\xee+\xe4MzJ\x2" "E\xd0;\xee\xb3\xdd\xea\x95\xe8\xccIU\x88H\x9a\x80\xa3\xb6\x8#\x1d) \xb2n\xf2\xce" "\xccI\xb1\xd6\x9b\x96\xd0\x7f-a\x8e\x9nj\xbb\xb8\xb9\xc0z\x8e\xb7\xb0\x92\xa1\x64" "^M\x10\xdf\xe0\x7\xe8\x17\x8f?\xae\x9d\xda\x42\x37\xfe\x8c\x36=\x9e\xac\x41M\xb4" "4\x0\xeb\x1b]aa{U\x7f\xc3\xfbWE9\xa0\x41mj\x10\xe3Z\x10\x96\x38\x45|Vr\x2|\xb9\x9" "<\xd0)1\x93+\xe2|M\xa0JX\xdc\xa7\xf7:W\x12\xfe\x96\x35\xcc\xd9Y1]\xe7\xceV\xf\x44" "h\x5\xbcl~kL:\xee\x41@I&\x1e\x9b\xe2\xf7k\xbb \xf0\xdf%\x34\xaf\xd6\x17\x91+\x83" "g~\x9\x1d\xceR\x1c\xd1\xfb\x17\xc8\x1e\xe7\xa3\x1e\x45\x10\xf5\x19\xabjD|\x85qjb" "\xf3'\xa1\x1\x8a\xc6\x91x.\xb7\xa8\x7\x17$u\xf1\xa3\xc2\x64\xdf\x12\x64\x84w\"\x3" "\xf3\xceu~\x2\x66\xb\x81\x92\xf3tc\xdf\x15\xe7\x1~\xf3\xd7s(\xcbT\xef\xda\x16\xbc" "\xa2\x33\x6\xfc\xc2\xed\xf2\xd2\xcb\xff\xa7}\x88\x82\x81\xba\xfe\x6\xe6MxQJ<@\xa1" "\xc1uj\xd2\x32\xc5V\n\xbb\x83\x38\x8f\xe8\xd0n\xd8\xe4K\xc7\xb0\x8e\xb8([>\xea\xac" "X+;\xfd\x1a\xb0N\xb\x93\x94\x4\xce?)\xff\x8.\xbbiM\xb7\x19\xe4\xfe\xdb\xa7\xf8\x2" "\x1f!\xb6\x1d\xd8\x11 \x12\xd9\xd0\x4$\xd6\x1f\xfb\xb8_\xdc\x5\xb0u4\xe7\xa7K:\xed.R\xa9\x89W" "\xc4\x10\xfc\xbb\xe2\xf6J\xa3\x38\x31\x93\x8e\x93\x92\xde}\xf3\xe9\xa8Rio\xfe\xbb" "\xb6\xba\x17\xd3\xafK\xca\xb5\xf9\x9\xab\x46\xaeX7\x8f\xd3i\x9a\xd2}l\xef\xfbk\x7" "(\xea\xfd\x88\x99\xc1\x32\xde\x33\xe8J\xd9\x43-\xfa\x8\xff\xb2G\xc7\xa6\xf7\xe4\x33" "\x3\xa1*\x8c:\xf\xd7\x1a\xae\xe1T\x1a\xb6\xb5\xef\"\x12\xe4\x64\xb7\xb1\xa7=\xba" "r\xed\xc0\xaai\xa7\xd8\xbf\xfb\x64\xf9\x7f\x66\x3\xbf\xc4\xeb\x17h\xc6\xcb\xd4\x17" "\xf3\xe4\xff\x8e\x17\xd0\xdf\x42s\xc2\x41\xb7\xf6\x83\rgq\xf1\x3\xb9\x17\x9do\xd2" "\xc8\x92\x9f\x92\x1\x39T\xfa\xa8pl\x10\x82$\xf\xed\x34\x8c\xb9\xc1\xe4]\xa6\xb2:" "\xe\xa9\xbc+\xb7x>\x87\xf3\r-U;\xd7H\xbc\xb5\x17\xee\x83 \xa9\xd3p\xbb\x1a\x17\x92" "\xd2\xf9\xeaZ|i\x90t[j\x82N\xff\xe9L--n,5\x1f\xf9\xa5\x63[S\x2\xf8L\x1\xe8[x\x95" "e6\x8a\xa9\xf3r\x8d\xf4O\xda\xc4\xba\xc4\xf0\xab\x43\xda\x43\x9d\xef\x9b\x16\xd4" "\xa8\x90\x31>pYN\xb5\xc3\x7@\x9f\x9a\xb3PW\xb5\xb0\xd5\x94\xfd\x61\x42\xbf\xc4<\xd4" "\x96\x65\xa7\"\xcb\x35\xa0##\xdd\x10\xd9\x9f\x16\xbe\xee\x42\x64\x98\x98\xbf&\x7f" "-u4\xc5HdH\xfc\xd5\xf\x15\x2\xd1Z\x10\xbe\xc9\xb6\x1b\xc3>#b\xd5\xa8\xe0\x1c\x8a" "\xa8\x7\x85\xf0\xf0\x12\xd7Rqj\x1!\x1d\x66Y\xb5\x1/Th\xee\xbe\x9f\x1e\xba\r\x35\x19" "\xab\n\xbe/\xa3\xb0\x2\x33\xac\xa4\xbc\xe5\xd5\xfbO\xf1\xa9\xbbk\xda\x13\x62l\xa9" "\xd7\x43>\xf2\xbb\xf\x6\x9a\x9d\x61\x85\x64Oi\xc8I\\\xe1\x93\x91\x33\x8cQ {\x1\xbe" "{\xdby{`\x11\x85\x2(u\x90\x30^\xb0\xcf\rT\x93\x62\xf1\x7T\x1e\x13\xc0y\xdf\xe3\xc0" "]\xce\xf9\xc8\x6>\xfe#\xc7\x1f\xe1&vI\r\xa4\xf8\xa9R8\xac\xe\x5\x65N\xaew\xff\x62" "\x92G\x80\x2\xa7\x8c~\xb8R\x9c\xef;\xbb{\xec\r\xe2\xaf\xc5\xf7'B\x0\xdbq\xa6)7\x89" "L\xa4\x91xX\xb3;\xea\x8d|\xfc\x88\xee\xde\xea\xb7\xcf\x1b\r\x1a\xdb\x99\x86\xe8&" "\xb6\xd9\x8dY\xc\xe2\x16\xac\xd6N\xdc\x87\x33\xea\x8c\x1a\x14\xbe&\x1f\xb5\xff\x94" "\x80\x1e\x91_\xf1\xfc\xc9\xb1\x8b\xdf\xcbZ\x9dK\xbd\xe0.\xa5.\xd2\x2\xf9\x8d\x0\xfd" "\xfd\x17Qi\xe8;\x9e\xd1\xb0I\x91J9\xee\xcb\xbb\xc9\x5\x96\xefl8\xe6g\xde\xa6\xa5" "\xd0\xd0\x9d#\xfc\xd6\x99~\xea\x17Q\xb3\xfdu\x8bS\x96\xb0\xcd\x5\xed\x99\x86\xf4" "\xddM\x1d\xad\x62\xc7\x7\x97Ze\xb\xd4\xf0\xf1J\xd6\x8f\x62\xb4\xa6v\xc0\xd6\xa9\x95" "{\xfd\xbf\x39P\x82\x42\x96\xc8\xb7\xd1\x19\x19P\x8b\x32\xc>\xd5y\x1\xc7\xac\xf2\x7" "\x12_\xc9\x91\x15\xf7(#1\x8e\x10\x45\x36\xd8\x1a\xc4}\xec\xc4\xd5\x80\x1d\x19\x7" "b\xc8\xc8\x14\xfd\x8e\x6:I\xedX\xd0ON\xea\x87\xe7\xb8\xd0o\xa7\xc3\xf6\xcf!\xe4\x42" "\x12\x1b\x17\xcf\xf0\x89y.\xb5\xaa~z\r\xa9\x9\x31\xd7\x9e\xe0x\xe9\x34j\xc2\x18T" "\x90\x84\xe6,\xbbVT\x7f\xb4\x62\x8b\x9b\xdb\xd9\x6\xabZ\xae\x63t5\xbd\x1b\xcb\xbc" "\x83\"\x3\xcc\xd6.\x17\x44\x81\xa4\n\xcct]{$W\xee$\xc9\xa2\xc7\xbd\xa3Wu\xe8\xe9" "\xc7\xbd\xcc\x8f#\x8alL\xc9\x8b\x81\xc8l4\xe1=\xb0\xa0\xaeR\xae\x9cJ!)\x81\xfe[)" "8\\9xN\xa7t\xca\xd2\xec\xa4X\xdd\xf1S\xf0\xc6\\\xfa\xe3\xfbT.i4\x4&\x9\x33\x19{q" "\xed\x10\xcf\xc3r\xdf\x1c\xfd]H\x1f\xec\x65\xaa\x30\xefP_$o![\x8e\xed\xcb]\x84/\xa3" "V\x8c\xa2\xd2\x96\xaf\x85R\xdb|Q\xd1\xf0\xfb\xd7\xc5\xc8^\x9c\xa9\x63\x5\x65\xad" "\x7f\xb8\xe2\x5\x46\xc1\xcb\xdb\xf6n\xefP\x1e\x33\x5\x33\xc3J\xe8\x39\x98\xfb\x88" "?\xca/3E\x1b/\xa7-#i\xcd\xca_\xf\xe2\x11\xf6\xf5\xc5\xec\x38w\x9d[\xc4\xa8\x8a\x8e" "\xcb\xf0\x3\xf8\x66X\x19/\xa1\x98\x34\xb\x8a\xbd_\xf9\xd0&xh-\x93\xc2\x9d\x85\xa3" "\x19Z\xdb\xd4ZKC\xa3\xbe;\xbcJ\xa6\x87\xb1\xecYH\x82:\x17m\x83\x87\xca\x42\n\xc5" "\xa7\x1f@&*\xd7xXO\xb0\xb2\x5x0;H\xbf\x97\x66\x10\xbf\xf5\xef\x8e\x34\xca\x32\xe7" "JD\xfcU\x92\x46&h+&\xfd\x5\xc8\xfcv\xd9\xf1\xe4;Zh/\x1fM\x14\xff\xb1\x19G\xb0\xd0" "\xd7\xc8\xe7k\xe5 \n\x99U[\xdb>p[S!\xc\\\xd7\"\x8d\xe4\x32(T\x8e\x0\x80\r`\xb\xd5" "\x1e\xd2\xea\xa3 J\xda\xfb*\"U\x7\xbd\x92M\xeb\x84\x9f\xf6@\x18\xac\x97\xb6\xaa\x99" "\x84?\x7f\x1bZ\x12\xf\x8e\xae\xcd\xa4k\x81\x0\x65&-\xc4\xc2\xca\xc3xQ\xda\x16@\xff" "9\x1b\xab\x38k5\x7f%\x87-W{\xba\xe1\xa2\x44\xdb\x8a\xb2J\xdd\x35\\\x1\xc4\xf7\r\x11" "W%b!\x93\x31x\xf7\xe4\xa7\xfc\xe\x38\xb9Pw\xfb\x44\xeb\x9c\x7\xaeLt\xe9G\xfb\x94" "z\x84\x9a\xb\x14P\x12;\x81\x9a\xdb\xc5\x19\xdbI\x1f=\x8a\x12\x90\xee\xa1\xc2\x45" "r\x1a<\x8fu\x80Q\xcc\x1a\\\xaf\x6\xce\x36\x61\x7f\x8c\xf7_d\xffp\xa4-J\xdb,\xe9g" "\x81|#\x1a\xd6\xc4\xa5I/al\x96X\xe3 2\x91\x7fY\xf8;\x99\xa7\x8a\x61\x12\x86x\xb0" "\xee\xab]\xbc\xee\xe\xa0\xeb\x98g\xcc+Gf\x2\xe\xf3\xf7\xb3\x85\xcc<^\xee\x13>\xa0" "\x83\xe0Jo\xfez$\x6w\xd7\xf1\xca\xb4\xfe\xf7m}\x13\x13\x84,8kRP\x9a\x43\xdawsW\xbe" "\xa7@\x84\x15\xc4\xaa\xe7\x45\xeeJ\xf3\x84\xfc\xec\xf1\xa9\xc7T0\xb9I\x89G\xae\x10" "\xb8\x6\xc9\xb\x7f\x96\xfd\xa4\xff\x65\xfd\xfe-\x19\xca\xb6=\xbe\x96\x33Mz\xces\x94" "+\xce\x46\xc2]\xc8J\x9c+\xc4\xef\xd7\xa3\x44\xb6\x82\xdeR~@\xba\x30\x63\xa6[\x9a" "\x1c\x1b\x39w\x81\x32\x98;\xcaU\x13&\xf4\xf4\x18~)6T!I\x9c\x10Z\x9b\x12\xf4\xe2\xde" "\xb8\xaeu\x1en_^V\x9d\xd1Y\xa4n\xc6\x9bn\xa5\x95\xf2z\x94qvw\xc8\xb8\xdeNiP4(\x86" "\xf3\x31\xec\xae\xa8*\x16\xf0\x41\x37\xaf\x39Z\xb5\xc3\x12X\x82\xbd\xed\xf1\xfd\n" "\xc2\xbe\x66%\xd8(\xc\xf5\x8cOk\x93\\\x86\x8\x7f\xa5\x6G\xf9(\xdc\xb7\xfc\xd9\xe4" "\x9a\xf9\xae\x32\xfc\xa4Q\xa3\x11\x6\x37\x91\x9d\xb7\xa0l\x97`J\xe2v\xfau\xc3\xea" "M\xcc\xd1t\x8c_\xb1\x37\\\\\xa4\xc3\x4\x3\x98m\xe2\x42\x8c\xaa\xbb\x96\xe6\x62\xf5" "\xd4\xb6\xb7\xc9\x46q\xf0\xb2{\x7\xe2\x63\xe0\xab\xb5\xd2\x0\x95\xf0\xc8W\xc0\xc3" "\xee\xd5J\xd9\xe2+==\x9c\x46\xdd$j\x4\xd0%@R\x8bg6\xab\xf5\x62\xa7?\x1\xf3\xb\xcc" "\x9\xcd]\x16\xf0\x65\x7f\x61\xe9\xedn\xc3y\xe0|,\xf9\xad\xa1\x46\xc4\xba\xad\xb\xa1" "OE\xcd@lp\x1e\xfd\x9d*\xd4\xeb\xeb\x38o\x1e\r\x34\x7R\x14\xac\xa3u\xea\xa7V\xb7\xbd" "\xd8\xdb\xa5\x9eV\x19\x0\xc7\x0G\xcb$J\x9a\x9b\xfb\xdc\x11\x36%\x89`+\xa4v\x9d\xa8" "\xf\xa9\xf8![h*\xca\x36\x36\n\xc9\x9b\x1a(Y\xc0]?\xba\xfc\x80\xc0\x45\xb3\xb\xa3" "\x6\x37\xca\x84?\x12\xe4\xa3\xd5h\x1a\x30m\xc3\xe9\xcb\xf2\xd7\x30\xb5\xb0\x62\xda" "5\n6\xaa\x9d-B\x94-XL\x13\xd2\xecJ\xcd<\xdb\xbe\xf0\x16\xa7\xff\x13\x63\xa9\xf0\x10" "u2\x4\xdc\xda\x61\xeeP\x1e,f\x8e\x96Y\xf6\xb7\xfe^\xc\xe0\xfdm\xdf\xfx\xf4\x1b,\xac" "`u\x8b>@\x1dGf`e\xb5\xd6\x16]|\xe5\xe\x16\xfaGY8\xb2\xa1\xc1\x14\x2\x13\x8f=\xcb" "\xdci\x9d\xa3\x1\"\x88Ju\xda\xad\x41\xb7\x15\x1a\x36\xc2\xfIh\x9f\xec\x15`\xa4\x1" " \x82\xa1\x0\xe4\xbb\xda\xb0\x83\x7\x1c\x89\xdf^\xe8\xaf\xef\x36\xb9\x8d\xb6\xd4" "\xef\x44\x4\n\x10\xcc\xb7\xc3\xb5\xca\x80?\x3- N\xc4|\xfe\x62SOW\x0\xc3\x1dm\xdf" "s\xff\x9d\x1b Z\xc4o\x1ezQ\x99\xda\xe7\xc0\xb3\x42G\\\xdb\x62l\\\xcf\xdb\xc4\x43" "}\x12^\xb1\xf7\xf4\x16\x1a\xda[tE7h\xe4Nk,b\xb3\x98\x81\xc\x37\x37om\xaa\x1e}E8]" "\xeb}g\x96m\x9eu\xd5u\x9c\x83\xb1'\x1e\xcfp\x4#\xfd\xbf^\xc8\xa2@\xd9l\n\x9a-\xc6" "f\x19\xefo\x81\xed\xa9\x10s\xa1\x36p\x1\x39\xbd )\xd0*\x86\xd3IT\xf8\x80\xfc\xd4" "\x9a\x19\xf3\xeb\x91`\xd2\xcd\xf4{\xc8of\xe4\x8en\x15\xe5.e\x90 !/x\xe3\xd8\x41\x1a" "%\xf2s5\xa6\xe4\xf8\x12\x45H3r*\xe^Bl)LM\xc0,\x99GCb\xack\x9c\xd9.\x9cm\xee:\xdf" "\xc7\xf1\xa8'?\x90*&[\xe6:*/\xc8td\xcd\xc3]\x1b\x31\x7\x3\xbf'Q+\xd0\x12\xba\xf8" "d\x1\xa3\x4\x63Q_\xef\x83\xc6\xce#\xe0\x13P\xe9\xc4\x1dY\x89\xd0\xfc\xac\xd4\x43$\r\xae\x82\x35\x64\xf2\xc\x1f\x30\xd9\xa8QI" "\xa6, B\xf8\x6\x87\x18T\x9d\xe1\xd4\x98pf\xf6\xab!\xc6R\xf2\x44\x86\x9b\xca\x4\xed" "\x4\xa7\xa5\x1f!\x4[\xf!r\xeb&c\xbb\x8d\xe8Z\xf0*\xdcP\xc7`C\xe1\xc7$\x3\x82;|<\xf6" "\xd4\x35\x83\x33\xc1\xb2\xb9\x8\x41{\xb8\xa8/\x9c~\x9b\xc2\xc9\x11t{\xf5\x1c\xd2" "5,Z\xff\x35\x94\xaf\xe8<`Q\x2\xb5\xb7@\x1b\xb4Kk8N\xe9I%IW\xf9\xc7r\xaev\xd2 \xac" "o0n(v~\xa5K\x1f\xbe\xf6\x16xb\xa9\x87\xd1S\xaeh-\x99\x30\x1a\xe7\x8e\xf3\xbf\x3\xf8" "\x1d\xc1\x62*\x8a\xbeW4\x84\xbb'\xdc\xd6\x43\xfcz\x84\n\xf0\x61\xe3\x89o\xf2\xf5" "\x6\xe3\xdb=g\xa2\x46\xb3\xd9\xd7\x64\xf1\x8J\"V\xc0\x45?\xe9\x96\x62['\n\x81s\xf0" "\xd6\x9\xfdQU=\xb\xa9\xc9\xe2j1\xf3\xa3\xcf[\xfX\xb4\xc2P\xf2\x14\xdfz\xf8\x12>\xc6" "j&\xf8\x8\xb\xf8k\x9e\xe5rT[\xe8\xf4\xc6\x19\xd9\x37\x8f\x87\xa1\xe9nf\xd9J\xd2&" "l\x1*z\x9e}\xb8,q#\xd1=\x13\"\xec\x11.(-\x85\xc1\x1\x18\x94\x9e\xa6\xe7n\xbf\xf3" "5:\xaa'\xd4\x7\x87\xcc\xc0t\xf5\xfc\x8c\xbd\xe3#\x91\xd0R\x8c\xb7i \x92\xc9\x80|" "w\xa4\x82\x97rj\xc2\x7f*JR\xf5\xdc\xdb\xaa\xac\xc6\x61\xd9u\\\"\x85\xf0\x11^c\x8f" "!y\xe7\x2\xcd\x35\x84/:tG'O\xc5\x8czt,\x10\x93\x4\xc6J{\x4\xea*\x85\xdbz\xb1\xba" "\"\x9\xd9\x65>k\xa6\x14\xbf\xa0\x85\x19\x9e\xaf\x1\x3\xb8w\xdb\x8e\xa8\xef\x10\xf7" "sq 8\x12\x1f\x33\xdc\x35\xa3\x89\xcd\x8b\xc0\xbb\xe7\xacH\xf1\xbeN9\x97\x9a^\xcc" "\x93\x8f^\x88\xfe\x35q2\xc4sJ\xf0\x9d\x7K\xf1\x33\xae\x8f\xb1:z\xe0O\x4\x15mhOJ#" "\x81*H\x84\xf3\x1\xd7\xb6!\xad\x63?\x9b\x0\x95\xc9M2X\xa9\xa4O\xb\xcb\x1e\x82\x9b" "\xf5\x63\x17izKz\x90\xb2-x\xf9\xdf\xc8\xfb\xb5\xe3\xe5ZW\x97\xe1\xe5\xa8\xb4g\xf6" "\xa0Z^S\xb0\xf8\xedYij1\xf9\xa2\xd0\x5\xcu*\xfb\x9c\x97\x9f\x94gvA8\xe1\x1a\xb8\xf7" ")\xd9\xa7\xabg\xd0\xc3\xcezK\xe8nJg\xe9\xf4S\xf1\xa5&I\x9c\x82\xfd\xb7\xae\x34\xeb" "\xe7\x90\x1\xae-\x9d\xc1\xc2\xad\xe1\x8f\xa0\x90\xb8\x36\x1d\x44\x85h\xdaX\xe4\x9c" "\xa7\x98\x1c\xe9\x86\x87\x8b^!!Kt\xb1\xde\x63\x83PV\xd1\x5\xe9\x13\x42\x95\xfc\x34" "!\xc6\xdcQ\xc\xac\xb6\x1c\xcf=\x4\xbc\x1b\xa6\xcf\"\xc2h\x0\xf4\x1e\xf1\x11\xc1\xf3" "\xed\xfd\x1e\x1a\xe2\xcc\xc9\xcc)\xf\xc9\xdc;\xb8\x61\x1e\xdb\x66\xeb\xbb\xcd\xc3" "/\xf1K\xb6&*\xe8\xa9Jb&7\xeb\xc\xdf=\x8a\x9e\xb2\xe6\x87Q\x99~\x96\xf9\xed\x80\x17" "T@?i\x1f}c\xc9\x17\xc8&&_\xba&P\xab\x8d-\xda\xd4s\xf\x12\xca\xf\x9f\xbcp_A\x92\x65" "\x94\xad\x9e\x19\x14\xf0\x85\xef\x83\xec[\xc6U\x84\xd6\xa4\xd3\xc9\xa0j\xca\x80y" "\x1f\xfc\x1f\xf8X;>\xb6Q^p\xb7\xd3\x34TX7-tZ\xb5sL\xf4\xe\x8d\x30o\x97\xc2\xb3\xb2" "7\xc6\x92^\xc\xb5\xbd\x96\xc6-\x94\x14\xf4\x3I\x92\xbf\x16\x30\xc7y=\xe\xa2\x85z" "\xac\x64(\xc3j\xf7\"\xe5\x8d\xacjUn\x9e'\xbuc\xd3\xe6\x9f\xbc\xcc\x8b\xe6\x9d\x8a" "M\xaf,k\xb\xff\x18\x8bz\xd3n\x0H\rD\xdc\xa7K\xfa\x1d\x1c\x2\x9fS4O\xf2;\xf5\xb0\x10" "\x13\x1b\xbd\x91\x38\xf5@\xd7\xbb\x41\xd3\xdf\x8e|\xc5\xb8\x4\xec[,\xa5!b\xa7\xe6" "\xc8Isf\xd8\xab\xbe~1\xbe\xef\xb3\x18\x9d\xb4\x43\x89\x32\xc6p\xff\x64\x63\x90\x14" "L/E\xb5\xfb\xbc\xe\xf9\x81\xc7o2'a\x9a\xd8\xc6\x87\xe~\xaf\xa8\x65.%/\xe8\x46\x13N>\x7\x15\xec\xe3xx\xb\x6\x66ns\x8cN\xb1" "\x80><\x1e\xf4-\x93\xdf\x45\x10\r\x7w \x9bK\x6G\xba\xd5\xbb_\x8d\n\xe3\xa6\xf4\x62" "\xf5i\x17\xb0\xbb\xe2\xf4\x9b\xb3\x9c\xf3\x99Mh\xb4\xc3\xe3{]\x88\x12st4\xc5\xb5" "\xda\xcaV\r\xb3\xd1\xb0\xc1\xfd\x86\xcv\xb:\x11\x83\xd5YA\xce\xc0\xf9\x97\xb8\xd6" "\x96\x94\x11]\xae\xd6\\\x1b\x38|\x8eke\xc0\x99\x61\x39\xc1\xa7\x14\x6\xf\x64\x39" "\xe9\xcc\xa6\x12T\xfatV\xfa\xe3)\xa7\xb1gK\xa5\x85\x30\x87\x62\xd6\x9e\xde\xa1I/" "--\xe8G2\xd6\xf1\xec\x1\xdf)\xf4\x42\x0`\xae\x80\xa4\xeb\xb\xde\x61\xc5\x37\x2@\xa0" "u*-\xdaid\xcc\xa9\x0\xee\xf8t\x81\xc2\\\x61\x10\x44\xf2\xe3\x12\xc7so8@:\"\x14\xdb" "\xbbw\xc6\x9e\x88\x2\x88JR\xad\x12\xa5\x1cuz\xb0\xe0\xd2\x9aI\xaa\x82\x38\x86\xca" "\xee\xe4=\xa9\x8b\xb4\x83\xfe\xc2Z\xfc&F\xd4\x39\x61,\xd0\x2\xbazU3\xab\x35\xe8\x87" "\xce\xa1\xde\x97\xe9`\xac\x92S5\xf3[\x91\x82\x45Mmo\xb Q1\x19\x31\x91\xc9\x8fY0_" "-\xb1\xa6\xbdw\xac\xe7\x9d\xb\xb3\x31\xfd\xab\x15\xbc\x1eK`\x1a\x9b\xc0Q\xa3\xc\x9b" "\xc2\x9#W\xd4.:S\xaez\xd9\xf4Y\xc5@\x82U#\x12\x81l\x97\xac\x37\xf4\xb1\xe6^\xc6\xea" "\xa9\xff\xc2(\x10\xd1\x9f\x38`\x16\x89\xb7;\xd7Q\x16\x96o\x8b\xc5\xfd\x88R\x17\x86" "\x81\xf5<\xb3\xe5'\x94\x37i#,wzb\xc4\xdf\x10\xeb\xd7msl\x7fI\xc0\x1c\x8\xb5j)\xe4" ",\x98\xb1\xe0\xfbn&\xe4m\xcc\xe3\xdd\xfa\xdb\xa9\xfe\x4\x46\xaej\xfe\xcb.\xa0\xec" "m\xf7 ,\x2\x88<^I\xb6\xa3z\xd6\xca\x37\xa3\xbd~\xcc\x1a\xcf\x63\x15\xc5\xea\xb0\xac" "\xed\x83/\xe5\xe8\x81.\xda\xe4\xba(\xea\xbe\xab\x94\xba\xb2\x63\xfa&\x80\xa5\xa1" "\xe7\xfe\xa4\x1\x32\xf\r?\xfZ.s\xbd\xb\xff\xbf\x98M\x8b\xca-y\xc4o.?\x0\x84\xc3\xdd" "\xb2\xaeu<\xcdNR\xd6xI.\xf0\x63=s\xc0q\xce\x11\x1d\xb4\xefR^\xd3\x82\xf\x46\x64\x82" "#\x92\xb8\x4\x33*\x80H\x8b\xdf\xcc[+\xbcua\xe2Q\xeM\x4G;&\xfd\x8d|U,_\xb5\xac\xff" "\x10\xee\x83\xf5\r\xb1!\xb0\xe4S\xbd{\xea\xceZ\xb6\xbc\x43\xf2\xb7\xcf\xad\xb1\xab" "c\xffr\x8a\xb6\xd2\n*\xfe\xfd\x19k\xe0\xd3\x43\x98\xcav\xf8\xc3\x8c\xa8\x46\x8e\x61" "g\x8bN\xe4\x15\x46\xab\x9e\xf5\x14\xb1\xc4\x91\xaahy0QK\x9b\x83\x61\xa0G\xe2\x91" "\xe6\x88\x1c\xe1\xbh\x8a\x17\xd0\x9Ss,h\x14\xe5\x35\xc9\x18\x9e\x41gn^\x19\xab/\xb3" "\n\xe6W\x99HC\xbb\x19}\x8dP}e\x8a\xe2\x89\x35h\xd8?\xc4\xe5\x82n\xbe\xea\x1bP\xd1" "g\xf0\x7f~\x9d\xa5VZ\xe\x15\xbbq\xee\x8b_\xe5\xfdg\x5\xcc\x33i\xf5\xa5\x96~Az5\"" "\x10\xd0\xa2\xb1\x17\xf2lSi\xa9I\xf5\x83\xbd\x9b_\x9d\x17\xec\xf\x7f[\x9a\x42\xf6" "\x8e\x13h]\xfb\x1\xd7\xda\xfa\\\xb0\x1a\xc4l\x81\xc7\x0\xb3\xd8y\xc7$Lm\xdd?\x92" "u\x8d,ZC.\r\x9dR\x16\xb8\x9e\\OC;\x9br`N\xc9\xcf\xe7\xa6+]\xb\xf9%\xec\xde\xfb\xf6" "\x9b\xc4\xf9\xb\x44\xf2{\xf7\xacgh*\x8b\x9a\x63'\x81\x82\x16X\xa9\x8f)-8\x1bH\x89" "\xa8o\xb6xob\xf7\x42i\x1a\xba*\xcf\xe9\xed\xb8\x80\xa6W~\xb4<\x1c\x81\x64\xba\x99" "\xf2\xadRZ\xc6\xcd\x39o\x19\xfd\xde\x9W\xcf\xec\xd7\x0\xd0 8\xb0\x81\xb7]j \xc6\x6" "X\xd6\x1eN\xc1\xbf\xfe\xd0u19\xb\x61nm\xab#\xdfm1\x0\x94(\xef\xc4\x45\x7f\x1c/\n" "\x8b `\x9d\x9`\x96\x34\xf0gQ\x1c\xb2I\x8f^\xdfn\xc\x13\xaa\xffu\xb7\x3\xec\xf5[\xbf" "\x89\xe2\xc9v\xa7t1\xbai]\x5\xab\x80\x43%\xcc$3\x9d\x8f\x95$\xe3p\xb5\xb6\x30\x3" "\x14\x5`\xfb\x45\xf2\x32\x89\xe4\"\xb1\x94\xe7\x1au!\xa7\x8d\x1d\xc9\xc1\x61\xa7" "L<\x8c\xed\xa5\xb2IKt\xd4_p-\xf1\x98\xf4\xed+\xda\xcb\xfb\xcd\xad\xf6\xae\x39\x88" "T\xfc\xca\x46\xc\xc7\x1dM\x9\xed\x15\xbf\xcb\x1d\xc5S\x15\x88\xa8\x84\xd6\xad\x9a" "q\xf4\xce_Z\x4\xa7t\xb8P5~\x13s\x0\x7\x34x9DXS\x94\xd4\xe8p\xb5z6\x1d\xd6?\x3+S\xed" ",.\x95\x39\x8c\xb\xe9+\xd8\xf8\\\x17\xe3r\xdd\xa5\xf1\x18=\xc0\x1d\x31\x85\xd9y`" "\xfd\xe\x19q\xa6\x4\xf\xe1\xcf\x98\xc1\xdb#D\x9aS+\xaa\x45\xf2\xdbY^\x1f\x85\x30" "R\x97\x4\x8v\xfbZ\xbc\x36`\xc7\x38q\xe2\xfd\xe1[\xca\xf4\x34\xe4\xa9\xba_8\x18\xa1" "\xbaId\xbe\x12\xf5wuH\x16\xb8\xdf\xe6)v\x19\x8e\xfb=)\xf4=W\xf7\x7\x18I\x8fO\xac" "\xfa\n\xb4\xf5\xeh\xa3\xb3\xc8\xbbs\x1d\xb0R\xdb\x93@\x93\xd2\x94\xeb\x13V\xa4\xd8" "\xfb\xce\r\xafr\x4\x2?\xd8\xf6g\\Od\xce\xfe\x8a\x84\x8c\x90'\xb0\xc5\x12N0;\xe7\xd0" "\xb2\xdc~\xddW\xdf\x17V\xe8\xc4?\xe1\xaf\x15\x9d\xab\x14\xbc\x3\xb3\x11\x99\x97-" "x\xbeq\xd1n\x8c\xd7\xa1\x83\x42\x9f\xa5(\xcb\xcc\xb1\xdf\x12TZ\"%\xd7\x87\xe0\x92" "\x94\xb8\x46I\xac\xc8\xb6]UzA\x7f\xb3\x8\x8e\x1\x1e\xfa\xb3\x1fwx\x83\x32\xf4\xb7" "Y\xb7?\xaf\xde\xb9\x98O\xca\r\xee\xc8yt\xc9P\x9cK\r\xd2!\xf8\x89\xcdU\x91\xf1\x1b" "\xcc#k\xef\x81\x39\x94\xc4+e}\x8c\xac\x66\x31\x1b\x87\xb7\x8cR\xee\xf2\x85!l\xfa" "c\xd7\x1f\xf7.\xa4Y/;\xc4+\xccO\xa1z|\x3\xc4q\xe3\x65\x1d\x17\xfb\xd3\xa1\x8b\xfc" "\x5\xb7\xd7\xf8\xda.\xbb\xa0\xc0\x35\x14'A\xd7\xf6\x1dV\xady\xc0Tr'\xde\x9f\xf9\x61" "G\xf7\xf2\xa1i\xd4\x83\xe8pX2\xb2\xa3\x41+\x9b\xd9\xa6\xff\x7f\x83\x98\x41\x41T\xe2" "\xf\x16~\xf2\\`B\x99+=[B\xda\x61\xed\x84N\xc3\x99\xbb\x8e[&\x81<\xc2}\x95]\xeb{E" "\x1c\xd0\xe0\x89$\xad\x99!\xe5\x1b\x2\x80\xec\xe0s\xe3\x16+\xe1\xb9\xb9\xeb\xf4\xbb" "\x9b\xae\x14<\x98\x1e\x10\x15\x9a\xea=\xa3\x9d\x7\xce\xed\x88\x85Re\x19\x9e\xc8T" "w\xa7\xfe\xf0\xd6L\x99\xd3\x9a\xf7\x9f\x97\xed\x1e\x89\xa8\xd1\x63\xed\xd7\xa8Wg" "j\xe2\xfc\xb2(\xb\x0\xa3/\xa4;\xe\x37\xa6\xc2|\xee\xc\x19\xe8\x81\xa8~:f\xe9\xab" "T\xb8\xe4~\x7\xc4\xaf\x9c\n\xea\xae=\x9a\xca\xeb\x93\xa2$\xa7!\xf2rq\\\x90\xf2Nj" "T\xc!\x1a\x7\xc9\x18\xd3~\xa7\xdf\x85\x41H\r\x8aR#s\xb9\x30\xcc\xd5\x8c\n\xdb\xfa" "\"<\xf6\xe1pvTg\xd5\x64\xf3hG\x82\x9f\x1btX\x87\x35\xb8\x33\xc3\xc5\xe3\xe4\x90\x93" "C^\xecw\xbd\x39\x82\xb3\x44\xe1\x46\x81Zt\xdb\x34\xb2\x91\x1b\xce\xfd\x87\xf1\xc" "\x93\xbdn\xf0\xbc{\x83S\x4G6/\x3\x65t\xd4\xc5\x6\xb8\xe7\x8f=\xac\x8c\x65\xef\xb6" "V\x14<\xd5\xbcsq\xf4\n\xa3\x18\x96\xc6\xde\xbb\xe3\xdf\x9d\x86\x99\x66\xc2\x85l\xde" "%\x82\xea\x92\xf5\xff#`\r{\xaf\xa0\xd9\xfaY?\xe7\xc6\xf5\xcdsaD\xe0$\x9d\xc6\x93" ".\xe1\xe6\x0\x7\xb0\x1c\xb9\"W\x1b\x8e^\xdc\xf8\x34q\xb0\xad\xc0W\x99\x8eo\x8c\xce" "\xa3Ur\n\x85=A\xa6\xab\xac\xe3I\x8a\xc4\x97\xb5\xe4\x8cX\xa3\x12\xef!\x5\xc8\xd4" "\xa9\xeeY\xa1/k\x6\xb8\"\x39\x30\x30\x1a\xd5\x39\x16@P\x6\xfc%O|6ip@\xa2\xc6\xe7" "\x9\xe\xe0\x39\x44\xca\x6\xe7\xdb)\x94\xb5w\xdf\xe6S\xb3\xc6]\xc3\xad\xc7\xbd\xb8" "\xe2\x83\x2\x39\xf3\x36\x35i\xb0kr\xcbn\\\x8\x10\x66V\xb4\x95\xd7\xe8;\x1e\xa6m\x9a" "\xcf \xe9*r\xec\xf0\x9c\xdc\xa6\x8f\x82)\xd3\x32\x9f\x14*\x18\x19\xd7\xa0G.\x8b\x17" "\xb5\xde\x1b\x8dZA2&\xae\xbe\xd2W\rs\xc5+\x1eG6N$P\x8dr\xcf,K\x8\r\xa7\xb2\xc1\x65" "3\xdd\xc7!\xfb\xe|\xd4\x8\x41O\x93\xd8\xdd\x14\xbcr\x8a~\xb3\x8e\xc9\x91\xb3\xd0" "\xf7\x80v\xeb\\\x91\xe7x\xd2\xf\x38\xf9\xbdwiI\x81\x17Un\xfc\xfa\x9\xf0\xd7\xe9\xd6" "\xb6Zj\xfc\xb4\x63u\xf2\xd2\xcf\x97\n\xebg\xa2\xb3L\x18z\xb3\xc\xe1S\x91J\xf9\x85" "aW;/L_\x6\x31\x9b\x37-D}\xaa\x1c\x93\\j\xaa\xb6\x95\x1a\x39s\xb7|\xaa\xe\x31\x87" "s\x96N\xfb\x0\xc4\x9c\x16\x36\xa7p u\x9bl[E\x7~M\xbd\xb8\xcf\xb4\xb4\xcb\xb8v\xe3" "\x2-\x83Je\xd3\xc\x14\x6\xcd\xca\x14\xb0\xf6\xa8o\xd2\x61\x9b\x9fKNO\xc2/\x9\x93" "\x10\xfc\xb7\xb6\x15\x9f\x87\x63\xc0k\x1a\xe4\x98\xccZq\xa2\x87\"\x62\xc4\x1f\xe6" "\x8c\n\x97\x90\xa1\xe2\xba\xab\"\x18\x83Sy\x95\xdd;^\x17\x61q \xb2W\x9c\x33\xf7:" ">/\xdcoC[\xe9\xb6\x87\xbdHn\xfe\xd6\xde[\x9dT\xd9\xcb_\xf4\xc5\xfZ(4\xba\x9d\x8c" "\xb6\xf2m\x99\xd6n\xb1\x36L\xcb\xf9)BwQ\xe4\xdc\xfb 4\xc5\x1a@Z5[\\8\xa7\xf0\xc5" "\xdf\x89\x8d\xf7\xd9=\n\xd1\x8a\x13\xd7\xf\xbe\x66\xa3\x4\xefmO;i8\\.\xcc\xd0\x1e" "\x9fZ\xaf\x17\xb1\x7f_\xa6@\xeb\xe6\xe5sqn\x95\xadz\xe2\x1d\xf8\x12\xee$\xc6U\xb3" "\xe6\xc5\xd6\x43=\x8d\x46i\x1d\xecz\x11(\xc8\x34\xe\xf6\x2\xf6\xc4\xa5`D\xcb\xe\x36" "q\xd5\xfa\xf6\xcd\xe6\x96SH\x96\xf7\xa9v\xc3-\x93%J\xab\x9f\xaf\x11$\xb6\xb\xa9$" "\xdc\xa7Z/\xdb\xe7\xd9tHu\x16\xfc\xcb\n\x8d\x1d\xfe\xa3\x82{gU\xdc\xb9%L\x7f`m\xea" "%\x80@\xc7\xd9I\xed\xee\xcc:\xc6\x62\x88\xcf\xbc\xfd\x1bS\x8c\xdd\x8azy\x3\x9a!k" "\xf4\x15?\x84\xe2\x9e\x19i\xdc\xef\x35\xfdP\x99\xb6\x80\xdc\x1f\xe9Z\x14\x95\xe5" "\xf7Q\x8a\x94\xbf\x91\xde\x85\xd0\xed\xdbI\xe8w/\xf0\xe6~\xe1\x94;\x0\xf9T\x80(\x99" "\xef<\xa2S\x1d\xae\x11R*\x9\xf9\xd0\x30\xc2\xd3\xb0\xc9\xd5\xca\x18\x17\x62p\xb6" "\x99*\xb7\x61V\xb\x93\xe2\x42?#8\x87\xf7\"\x83u\r\xeb\xd9\xbc\xcc\xe9\xd0\xddY\x6" "\x0\x89\x98\x8b\x66Y\x8b\x96\x87v\xc0\xddL\xa5\x1f\xfb\xc5\xde$)\xec\x9>z\xf7\xee" "\x93\xe\xa2\xe6p&v\x9aO\x3\rK1;I:\x8d\xa1\x8e\xae\xbc\x86\x9e.\xb4\x34\xdb\xf7,\xcb" "\x8f\xf4\x45\xad\x94\x1o\x14\x81\x35\xa8\x83\xbf\x18\xdf\x2Q\x81\x93\xa4K\xb3\x43" "V\xe5\x9f\x9b\xb8\x8e\x11\x1\x84GC\xbX\x18\x99\x37\xc7p\xd6G\x9c{B_\xfd\xc7\xee\xb5" "\xfds\xc4\xf\x11]\x91\r\xcd\x14\x14\x65><\xe6<_\x1c\x17q\xda?BcMr\xde\xf5T\x95{i" "\xab}\xc6\x1f\xe9\x84\xaa\xde\x36Qw\xc4\xbei~\xdbZ\x83\\q\x14\xb1\x13\xd8\x0\x1e" "\xc7i\x1a\x8c\xc0\xf2\x9c`.\xd7G\xcaY0(\xba\xfaR!\x9d\xc5\xeo\xa0yS\xf\xef\x9f\xde" "H\xd9R\xb4\x3\xb2\xf3\x39Y.n\xa8\xe5\x9bj\xe6\x11\xec\xa5\x1e\x9cw\x90\x0\xe5\xc8" "\xb4|c+\xc6\xb1\xa1\x7\x17\xb4\x92\x10&1*\xbf\xf2\xbb\x9e\xc9\xc7!\x7f\xed]\xd5\xc1" "\xa4\x94v\xc6\x9c\xaeP\xdd\xbe\xa0^\xc2\xb9(\xf8\xd4\xd9R\xe8\xa5p\xa9\xc7\xe3\x45" "\xfc\x86\xd9L\xa8\xb3\x93\x32\xb2/,C\xc3\x15\xd6\xcc\x12\xd6\xc1\x8\x8f\xac\xf6\xd9" "p`a\x96\x4\x1f[6\x1a\x45\xae\x0\x32\x42[\xef,\xb5\xaegN\xe6\xb2\xb1\xbd_&\xa1\xe7" "'\xfc\xbf\x17\x16\xbc\x83\x10\x84\xa0){\xcd\x90)\xe2\x95\xc9\xbe\xeb\xa9 IU'K\xf3" "\xeI\xabp\xca\xc0\x85\xc0v\xc1\x9e\xd0tARP)\xa6%\xf4W\x90\x1d\x65\x38\x43\xa0]\xce" "#\xe9\x44\x39j\x1d\x15I\x1a\xf9\xd9p\xa7\xb6\xac\xf7\x9a\xb\x98M\x11\x94\x10\x9b" "\xb5R\x17N\xf0\xfa)\xde\xc2\xa9\xc4oV\xeb\xbd\xe9\x66\n\xe9\xf2\xe3\xe5\x80\xcd\xf8" "\xe9\xb9\xea\xcf<0\xe6\x96\xbd\xd3\x14\xe4\x62\xfc\\\x9fy\x9e\x35\xc2\xff\xe4Z\x7" "\x13i\xe\x42\x7\xcf\xdfp\x8c\xb0\xa4\x65\xd0\x45\xe7Yn\xfb\x16\x41\x39\xcbl\xe7\xd4" "\\k\x83!$\xd8\x95H\x8c#\xd6\x34\xc3\x5\xc3\xa3\xe1\xeeP\\\xa8\xa4\xb4:\x8e\xa7l\xcc" "\xae\xb8\x97\xd1`\xf1&\xd7\xb2\xb\x92I\xdf\xd6\x62\x8f\n\x83\xef\xa9\"\r\x14r\xf6" "@K\x1a\xa6\x3\x36\xdb\xa6\x1b\x88\x87\xd6i\x92\x9Xn%Y\x90\x8\xb3k\xcf\x15\x1f+\xd2" "\xfd\xaa\xf6u\xdb]z\xc6\xf5\x1f\x9b\x80\xdc'%{\xc0zi\xbf\xb8i\x96S\xb1\x92\x11\xbc" "\x16\xfe\xab\xc2\xd3H\xed\x88\x88'\xdc/\xe7\xe0\x31\xe9\x14MN`\xe7.\x91\xd8\x6-\x12" "\xbes\x90\xfam\x96\xa6V\xd7\xfa\xc7l\xb2\x42\xa4\x34\xc9\xbe\xcc)\xab.\xa9\x90\xf9" "\xfc\x4\xc6\xf0\xb\xdd\x11\xdb\xc0\x10\xe3\xd6\xea\x99/\xf8\xabs^e\xda\xf9\xd9\x89\x1a_\\L\xca?X\xaf\x1f\x66\xd6\x9\x38\x84" "\x4g\xdf\xcczM0\xc8\xf0\xfc^\x90)\x4\xbc\x41K\xf0kQ!\x92\x84\xed\x45\x18\\\x9aSW" "*\xd9\xd9\xd1\xa6\xe2\xf9S\xbc\x12\xf5Y\xc1)\x82\x87\x3Vm\x7K\xd0v\x3\xeb\x3\xac" "\xb6\x34Z\x1a\xc*\xde\xef\x96\xe5S\x5(d*\x1d\x93\x9e\\\xba\x62\xcd\"!\xd6\xee(\xd1" "P\x83\xe4\xad\xf9I+\x8f\xc7\xc5\xeb\xee\xb6\xed*^(\xf0\xfd\x2\x8a;T5\xf5`\xe1\xdb" "\xef\xaf\x44\xf3\xda\x19\xf7sa!\xde\xdd^\x9cJ\x15\xeb\xe7\x37\x5\x1cUbZ\xd1i\xcb" "B\x1a\x11\xfe\x8a\xb0\x80\xe0\xa0\xd4J\x9e\x65\x8c\x8f\xd6\x37\xd1\x61\x66\xd8qi" "KV\xafY(\xb7\xd2l\xc3`#8\xc7O\xf1;k\xe0-\xfc\x18\xbb\xdbo\xd9m\xc3\x8f\xdb\xbd\x82" "\x9f\xdare\xe8\xac\xf0\x6\xae \xc7\x3\xb\x8eR\xfa\xa3Qg\xa4\xc7\xc0\xc7\x90\x8f\xe1" "\x91\x16\xf2V\x14\xa0\x34\x90\xff\x2Zr\x91\xdaq6\x92\x17\x9a\xb5\x36\x8f\xf4\x14" "\x81\xd6(P\x0\xc5\xd7\"\x11\xe1<\xf5\xba(n$\xec\xbdP\x84\x37\xda\xda\xa0s\xed\x8f" "moB\xf1-h\x96\xb1\xc8\xd9\x39k$pR*\x8a\xb9\xc0\x66\xe1R|\xbd\x93\x85\x1a_\x15\xc6" "\x9c\xf2k\xa8\xe2\x7\xe\x13\xa6\xaf\xd3\x64\xcc\xcc\x10V\x81\x1b\xe4\xf1z;[\xcd\xff" "\x1e\xb\xd7`\xfb\x42M\xdega\xd7\xd7\"\xdb\x82\xfe\x34\x1f\x1a\xdb\xa2NJ\xae\x90\x9f" "\xaf\xc0$\x96i\xdb\xejD\x99\xa4;\x10\xb4\x9e\x9\x1a\x2\xc7\xf8\xd1\xc7=\x93\x87k" "\x8f\xc6\xfWX\x1c\xa6\x89ho?&;\xc0\x2\xc8\x36we\xa2\x87\xb3\x16\xf0iI\xd0\x8d%\x11" "Z\x2\x83\xc2s\x12\xe5\x14\x8b\xc7\x19S\xba\xa9M\x1b\xda\x84\x1f\xf3\xc0\xb4\xe2\x99" "0\xb0Yk\x84mq\xe2-|2\xddj%\xaf\xeev\xe8\xcb=PM-%Q.\xf2\xcf\xa1}\x2;\xe4\xea\x8e\xa7" "\xe5\xba\xc5\x9f\xa7;H\r\xa6\x8}N\xc3+ \x87\xea\xcc\xc\xa4N\x8c\x1d:\xbfL\x10\xc1" "\x83$_\x1bs<\x17m\x7f\xba\xby\x17\xc8\x44\x45M\x94=\xca\xbb\xa5n\xf2\x86\x3\xc3\x7f" "b\xed-l4\xf5\xc8im\x7f\x10\xc7`\x99\xc5T}\xc0\xcf\xa5\x80o\xf8\xc8\x66\x9e\xb2\xde" "\x84\xb7\x8\xce\x90\x95\x45\xa0\x7/\xd5\xda\x35\x96>\x9f!\x94\xc1\xb4\x86\x42\xf2" "\xf3\x95\x9\x12\x45!\xc1\xc\x13\xdd\xb\xfc\r\x91UKi\xfa\x13\xf9\xefz\x80\xfa\x9d" "N\xab\xa3\xbb\x8Tl5w\xe8z\xde\x93\xd4\xe3\xfb\xb4\x8b\xeb\xe7\xa8\xe6h\xc0\xb5Lj" "\xe7qw>\x86\x87\\\xa4\xfc\xc6G]7x0\xb8#J\x8aU\xd4\x44\x11\xd2;_!(9Q\x90\x1e\xb6\xc6" "\xf4wu\xcb\xd5\x9e~\xbdr4\xd8\xe4Ym\xda\xc5\xb8\x36\x37\xe7\x36./\x83\xe4\xa0z\xdf" "\xeb\x8c\xdf\xa7\x7l\xea\xc0j*\xdbr\xe7\xcb\x92\xaa\xc7&\xbc\xa8\xf5\x37\xda~w\x18" "\xe?\xc7\x1e\xfc\xba\xc0\x35'\x1e\x33}\xc8\xd6$\x80\xd5\x61\xea\xabW\x90p\xbe\x8f" "\xd7\x63\xb3\x81\x44\xc6\rQ\xf2Vh\xb7\x88\x62QU\xf2\x9c\xa6\xd6\xab\xe3\x6Ot\xde" "v\xb6\x1d\xad\xb2\xb\xac\xe6\xe1\xbe\x31[`\xaa\xc9\x33\"k\xcc\xe5\x32$\xbcP\xe@\xbb" "w\xd2\x7f\x88\xd5k\xd1T\xf3kM\xa9G\x17)\x8c\x8d\xe2r\xee\x14\x6h\xeb\xb\xd8!\xf8" "\xb9\x95\x82\x63[\xc3\x16!\xc2\xc5\xdc\x14\x90/:\xf2\x89\x1\x66K\xcd.\x11\x9f\xdf" "\xe7\x0\x42;\xa6'\x89\x8aNT\xe2\x7\x1e\xbf\xa6\xbc\xf4\"\xc9\xa4\xa4k\xcb\x42x\x86" "pH\x9d\xa5\xc4\x89\xb6\x11\xb2(\x93\xee\x11\x42\x9c\xdfH\xaa\x8b\x63\x9bO\xf5h}\xd4" "5\xe0\xee\x14\xe9W70\xdb\xe7\x5\xf8mD\xfa\x65\xf\x61\xf2\xd3+\xad\xa6]\xbf\xc\x0" "\xeb\xa9\xde\xf3\xc6?\xa1\xd7\x87i\x9\xcaZ^\xfc%\x2\xe8\x8d\x9f\x94)d\x15\xafr\x14" "\x87\x85\xaa:\xbfZ \xa8\x13\xdf/p\xf3[\xdc\xee\xda\xebQMD\x10P\xda\xbx7\xff\x37h" "uc\x15\x87\xc5\xd5\xdf\x9d\xe5\xa2\x36\x33\x89\xaa\xb4\xe2\xd9\xbfO'\xe1j\xfeJ\xc3" "\x1fX5\xeb\x46\x9bHWQ\x97.\n\x94p\x3'\xbc\xaa\x43\x41\x1dJ\xc6\x5\xd4\x42\xc9\xef" "r\xb3\xa8\xea\x8IV\xc\x81Z\x17\xc3\xf0\xf\xcf\x8cjc\xbf\x38\x17\xa7\x63\xf2\xc\x61" "Y\xd1U\xf3&{V1\x11\xe4\xcbp8KZ\xbb\x65\x85(\n\xae~\xef\xc6\\}(\xbd\xca-2O^\x5\x9e" "M\xcd\xe0\xec;\xba\x9bv\x7\xf5\x90x\xcb\xb6XQ&\xf5\x30+\x8r\xadUw<|\xaf\x63i\x1a" " \x9d\x97NqG_\xd7\x0\xc7i\r\xb\xc\xa4Hd \xa4\xc0\xa2\xe4 c\xe1\x39\x7f*\x89\xd9\xa3" "j\xfc\x1d,\xb\x19`\xb2\x86\xc9~\x15\x89O\xa9\x61\x5\x9dT\xf4\xb6\xdc\x4O\"phfg\x98" "\x97(&\xf4\x87\x8f\x62\xb9[\x87`F)\x81\x19\xb3\xe2\xcc\x9aML\xe7?P\xef\xd0$\x91z" "\xf0z\xc9\xee\x89\x2H\x99\xbc.=\x10\x45\xf2\xb5[\n\x10Z\xb2\xa9\x1ao\xe8l\x99\xd1" "s59\xc1\xf0:\xad\x15\xd3\x87\xdau\x19@\xfa\xf0\x1ap\xf9G\xec\x64\xe7I\x4\x10\x43" "}\xff\xcc\xc8\xd6xM\x8b\xcdv\x94\xe4\xb5\xe\xa4\xd6\xe5\xf2\xd6\xef\xdb&D\xb9\x9e" "~T,\xbbnP\x94I\x10{\x10\xc1\x95\x36\x14\xe^\x80\xa5\x94\xe9\x9J\x8bO\xc8{V\x90\x6" "W\xf0\x18\xff\"w|\x1fm\x90\xce\x16\x17\xa3\x18\xf{8\x90\xeeS\xe4\x1d)\xf0L\xefhY" "\x9d\x9d\x16\x16\xce\xf0\xcd\x1e\x1cXv7\xaa\xbe\x97\x81\x38i\x96\x88\x12\xa1\xe1" "\xb2\xbb\xbc\x9e\xf1\xca\xb0#\xf2\xf6\xfa\xb0\xeei?8T\x96\x43\xa7\x61J\xbd\x33\x82" "\xba\xab\xce \xa4\xe4\xb7\x93X_\xf4\xcfg\n\xed\x8e\xf6\x32\xf5\x8c\x9f\xc9\x17\x13" "\xa9\x8e\xe4\xa2t?z5\xc7L\x85\x1K<7`c\"\xfb\xff\xf1Jr\xf3\xb6\xd8\xc1\n\x9\xe4\xeb" "\x94\xa1/R\r\xc7\x2\x0$\xcb\x80\x19\\\x9e(1\xd3M\x1c&\xc5\xfcN\xa4Gfk\x82\xe8N\xc6" "E\x4M?#3\x95G\xbe\xbc\xab\x8\x32\xef\x7>5\x97\x83\xb3RT\xad\xd0\xa0\r\xe1Kw\x0\xca" "DJ}qS\xef\xa5\x65\x8)p\xa5\xc9\xf6$a\xf1\xe3\x42-x2c\x4\xd7ix\xb9!\xaa\xf1H\xcb\xa8" "\xb1H\xd1\xe7\x3\xd3J\xf5\xba\xa5\xdd.\x17\x63L\x88%\x8c\x83\xe\xd0\xd8{\x84\x8c" "b\xddw8\x19\xcIW\x9\xa6[\xad*\xcdr\xcd\xe9\x37U`\xa8\xa2^\xdcR)!T\x14\xac\x13\xfa" "[\x1e\xc2\xe3\x87\xa5\xdf\n%\x3\xdd\x93\xd2n\x18\xe2\x19\xa0\x12\xb5U\xe2\x45 \xda" "|\x88\xba\xb4\xc{#S\xfL\xe2\xfc\xd1\xeb\x1;\x1f\xfd\x97\x8f\xe4\x34\x9b\xe7}\x98" "u\xa6\xe1-\x96$\x94\xbc\xabX\xaa\xa5m\xf\xf8*\xa8'\xad\xb6L\\\xff\xe8i^4\xd7/\x88" "\xa2\xbfn\x8b\x83\xb1\x36\xb4\xff\xf0%k\xa1\xe\x8e\x41\x66\x37[\xd0\xe1\x8b\xb7'" "n\x91\x9e\x9c\xc0r\x1c\x33\xb4\x1a\x9f\xfcq\x18\xdc\x66\xf2\x6\xfa\x91\xed\x30\x9f" "\xad\xf5\xcd\x95n\xe9\x18\x1a\xee\x35\xb8\xae\x92\x17\x8dy\xf9\x8f\xc7\x1c\xc5.p" "\xe3\x11\x87!Fb\xa2\xfc\xf5\x0w.\x0\xa8\xdd\x83\"l%\xc3&CC\xab\x97\xd9\xa8\x88\xcc" "\x80\xb4/\xcc\x14\xc3\x4V\xc0\xaa\xf3'}\xde\xf0\x33\xe6\xb5\x61\x14\xf9\xf1 \x80" "xAS\xf6\xf7/\x80\xf1\xd7\x99\x82\xabh\x8\x9\xfbYj\xf0\xc\xf\\}c\x88\xf8[\x93<\xdd" "\x10\xeb\x8c\x92\xd9s\x84\xf5\x9f\x37\xbc\xec\x8c\x86\x9e\xd6>\x2\xc0\x2O\xa2\xab" "\xe0\x46\xa3\xae\x97U~\x80T\xb1\xc9;L,\xe3K\xfb\xe3\xc2.\x0+\x9b\xe\x32\xa3\xfc\xe4" "BQ\x9bOC\xca\xc2L#\xaf\xa3\x90!\xca\xee\xd2\xa2<\xb6l\xd3\xe\xc9\xcbM\x98\xc8\x91" "\xb9\xa7\xf2\x8a\x1e\xdcRG\xf6y&\xc3\x5>\xb0\x35J}[1]\x9f\xaf\xdbO Gl\xa0\xa6\xf3" "#\x91\xb0z\xe8Z\xa3\xed\xa2\xaf\xbe\x39\x88`%W\xaa\x8a\xb6I\xc8\x93Q\x91r\xda\x17" "j\xcc\xc0\xa6\xf0\xf0\x34qa\xa7\x82u\x81u\xc\xb9\x97\x9b\xe6\x80\xb4\xb3\x10\xd5" "\xd6\x36\x1\xe0\xe0]J\xb0\xbf\xf5\xa7\x88\xb1\xbe\x8a\x42\x46\xa9\x8e\xd8*\x1a\xb" "\x15\x1b\x1d\xa7#\xcf\xdd\xf8v\xd0\xcd\x1d/\xba\xa0\xc2\x13\xd6!j\xfb-\x17\xa8\x9f" "+\x98\x62\xa1$E6\xe7\x91\x46UcUS\xed\xe9\xcc\xd2}\xe8\xce\xa8\x61MQ\x85\xd0-\xea" "\x3\xd8\x90\xff\x37\x97\x41GjX\x83\x7\xc4\xf\x86\x19\x8d\x84:\x14\xdb\xc8\x43\x8c" "\xfcu\x97\xfbq\x97\x83\xf1\xbc\xc6q\x19\xc5\xdd\xc6\x7fl 7\xe4\xd7G\xbe\xc1p\x94" "!\xf0\xc9\xda\x14\x4\xea\x8b\x8d!\xc7\xa1\xdd\xe8\xbc\xed\xfa\x65\xfc\xae\xf1\xba" "p\xba\x17\x17\xfb,\x95\xc4\x64\x19Ot\x8e\xf7\xaaSI\x8b\xec\x31\x7f\x39*\x87\x1a\xa5" "\x97!\x9bv\x85\xfe$`\xa5\xdf\xaf\xb8\xe8Ltd\xddZ\xef\x9j\x83\xd6i\xc9\x43\x5\x9d" "\xc7\x38\xf7\xf7\x85\x43~\xd4\xf9.\x10\xf\xae\xaf>\xa4\xea\xbc\x19\x9c\xe,e\x13\x9c" "8\xae\x9c\x64\x35\xc7\xd3\xe0\xedQ\xc0\xa0?\xc9:\x1a:\xf6\xc7\xce\xbf\x14\x1bO\xa9" "\xe7\xd8\x41\xc3\xdan)r\xd1\x94s\xd8\x38\x83-(W\xfe/\x8\xf2\x8b\x8dG\x12\xbeHB\xf9" "g\xbbq\xa2\xa5\xa9\x65\xe8x\x11r`\\\xb6\n\xd1)\x1d\xc0\xab\x91\xdbI\xde\xe2\x97\xd1" "\xd9\xd0\x5\xad\x9d\xf7l~\x9cK\xc3P\xb5\xaa-\xae\r\xe9\x7f\xbcI\x94\xac\xa2l\xe2" "\xd1\xb1\xd9\xa7\x97\xab\x14\xe9\xc5\x8es\xc1K\x9c\x1e=k\xf3\x9=\x9d\x43Z?\xf7JZ" "\xe9\xd2\x9e\xc0\xa9\x83w\xbat;\xfa\xf4\x9b\x8dhC7W\xf1\xc9<\xb5{JvW\x88\xba\xfd" "\xf9-Y\xfWS\xa4\x83\x3\xb4\x85L[\xbe\x1d\x36\x8b\x87?\xf8\x15\xf9p6\x9bv\xdc\xc1" "J\xe3\x8\xa9\xde\x8e\x6W\x9c\xf6\x65\xfe@t\xe2\xf2\x10|\r\x1a\xa1\xb4n\xb8\x9f\xf1" "\xe4\x13\x81\xed\xba\x93\x9e\x42\xf9=\xb9u\x8\xed\x9b\xf0\x1bN\xf\x88\xee\xb9\xc9" "T\xa6\xb6\x30-\x1e,\xaf\xe3p\x9b\x33|\x1'\x8\xf1\x93R\\ c]\xba})iV\x14\x43\xaa\x35" "W*\xbb]z$\xda\xb1o\x13\xd9\xd0\x94T\xc5\x36\xac\x30)\x9e\xd2\xab\x97\x92N4\xbb[\x94" "_\xd2X\xf3&\xa6\xbd?p\xb2\x80\xe7[8\xd7IO\x11\xf6>\xfdO|=\xa9\x8b%\xb8\xd9\xd3U\xbe" ",e{\x93\xec\xc1\\\xcc\x82\x84\x9c\\\xea\x96\xf4\x1b$q\xac\x8[\x14\x43\x45\xb8\x8f" "K\xe0\xef\xb6\x17\xf3N\x89\xbc\x92'\x1b\xc9\x66\xc:\x18%?\xc0n\xeb\xd1\xe3\xad\x1f" "\x17m\xec\x30=\xbb]\xe4i\xb7\x6\x93:\x17\xfb\xf0\xbf\x19jT\xbbqk\x95#\\\x92\x85\x43" "nXh\xe7Vx'\xbapwF\xe3\x17[\xb6\"\xb9>:\xbf\xb8\x61\xe9tD\x3V\xc6\xec^\xb0\xce \x8b" "{\x9e\xc5\x92\xf0\x1f\x97i)\xadlap\x9e\xf6\xa8\x89\x99\x8f\xfe\xb1Tl\xd2\xc9\xbe" "\xcc\nJ\xd0\x45\xa1W\x8d,F\x89\x43\xae\x4]\xd8\xd4\x8cZ\xdf\xb0\x92\x97\xafX\xd2" "%Y\xbf\xa6\xec\x1aJ\xdd\xd4[\xe0\xea,\xb3U\xa5\x1f\x9\x1c\xf3\xa0\x1c\xed\x7f\x4" "4\x99\xbd\x80\x15\x10p\xb2\x14\x83\xcepn\xfcZ\xb2)UT\xfa\xec\xff\x38\x35\x65\xdc" "\xb2\xa5\x96\xb6`\xf1\xc5\"\xcfm7\xe7\x14LRL\xf7\xc8I\xfc\x1c#\xdaj]\xb5\x1c\x92" "\xd9\xc8\x41\xc7\x85\x1a\x94\xef|\x8ch\x8d\xfc\xbb\x3\x6r-b\x8Q\xf\xc3\x1d\xd8\x10" "\xb0\xd5\x33L\xf5\x8b%I\x0\xcdu51}Z3\xd1\x96\xf7\xc4\x1b\x9al+\xd8W\xb1\xf6\x87\x86" "M\xa6W\x7f\x7,\xa0\x99\x98\xb+\x1c\xb4\xeeRj.\xae$f\xc6@\xcbI\xc'\xb0\xbd\xb4\x45" "\x3\xa5\xd9\xb5\xe9\xef\xf6\x93\x17\xd2>\xecG\xbd\x2%{`\xa8\x43\xaaj\x1d\x30\x35" "\xd3\xba`I\xa3\xb9\xa8(Z,D\xdc\x36\xc2\x36'/\x12\xedsK\x3\x44\xed>Y\xe7i\xc\xf9\xed" "\xaf\xd0\xd3\xe0R\x6\x30\x90^[\x89\x46\x45\xde\xafr)\xa5NHkY\x86\xd0\xa9n\xf6\xd6" "\x9c\x14;\x1bw\xe4\x1f\x8b.1\xec\xf2\x35Y5\x4\xf\xac\xb6\x6\xa3\x8d\x14nkkL\x9a\xdb" "`XA\xb3\xf2\xacp^\xcf\xef\xc6+\x12\xd1\"\x15\x8cr\\\xa6\x0\xc1\x37I\xf6:\xf0\x96\xa9\xd3\xf\xf2\x8f\xba\xcb\xd0" "f\x9\x8a\xf0\x16N\x8c\xe0\x31YZQi\xd7\xb7\xfd\xc8\xb\xf8\xc4\x10\xafU\x9c\x1a\xc6" "\x86,\x86%\xfa\x8c\xa9\x83\xf1*\xfb\x11\x30\xb\x92\x46\x32\xa1W\x3\x45\xd9&\xa1\xcd" "\xb3\xb6\x66\xa3\x82\xa0)\xd5\xc3Z\xa8\xa5\x83\x83\r\x99m\xdct\xa9\x17{\x97\xbd\x8c" "\xce;Rc\xa7\x14\x8cy\x9d\xc2\x19\xb8\xa1\x95\x8c\xae\xe1Y\x8e J\xe5\r\x85\x87*\xae" "\x9\x30\xb9\x65\x13uPD\xddX\xcd\x9a\x8d\x85\x38\xcc\xe4\xa4\xcf\xaaL\xca\xd5\x43" "\x5\x16\xdb\x8f\xe7\xf0i\x16g\xac\x12\x2W\xd2^M\x11" "-\x84\xb2p\x94\x9e\x0O\x18U\x1c\x95\xc\x88t\xa9\xce\xeb\x61\xd4nJ\x7f.\xc8u\xc9\x5" "\xf5\xdd\xc6\xf4Yj\x17H_\xab\xdd\xb5\x61\xd1\x44\x19\x41\xc7]w\xa4\xb4\xcfK\xe4\xc4" "x\xd9\x62\xe5o\xa5\xe0\xb3\xe\x87\x36\x1d\xae\xd0\xca\xb2`\x83\xcb\xae\xb9\x38\xf2" "\x3\x10\x86\xea\x91N\xed\x1c\x38\xd2\xe8\x65\x18\x6\xf6\x15\xd5z\x9cYc\x1d\x46\x36" "\xb2h{@\xb1r\x99\x17&z\x9\x63\x89\xb0\xa8\x1\xce\x30\xe5\xee\x3\x36\x8c\x16\xf5\x41" "\x86\x9e:\xe9\xcc{`\x9;\x18\x66\xb6\xcbq\xa4\x1f\x8\xa5\x1b$\xf\xfd\x98\xb3\xd9\xa5" "~\x81\xb9-\xa1j\xcb{\xeq\xfc\x84\x6\x1a-h\xb\x7\xbc\x34\x87\xc8\x8c\x66\xef\x10\x2" "\x4\x31\xd7-\xbd\x36h\xc2\x85\xb1l\xdcm\x85\x35\xc8\x9f\xde\xdd\xffx\x2\xff\xbb\x30" "\x82Tr\xcbp\x9cxk\r\xef?\xbfx\xfb(wcnE\xd2$\xb3\x85\x3\xaa_\x17\xe9\xee\xc7YO9\xca" "\xc1\x32\xe\xe2\xda\x89\xe6\xd3\xb0\x31\xc8\xec\xfbZ\xd6T(m\\,-\x8e\xf3\x83\xb$:" "\xb5\xb7\x13\xb4\x92jU\x96\x5\xd6\xe0\xa4g^\xe9\xcb\x42\x9a\xer\xa8\xc6~\xc0\x9a" "\xd1\x9f+\x93R\xaev\xa0\xe8\x81\xda\xc1I\x8c\xba\xa6\x42\xd1\xb6\xc7P\xa8m7,\xc0" "\xe8K\xca\x86'\x19\x91O\xbd\x8bO\x8cg[\xb2\xb4\xfb\x86\xd7\xb7\xc8\x8d\x10\xae\x46" "\xb8\x9\x1aY\xe~\rF\xfb\x15\xe\xb1\xed)\x95\xef\xbd\xc0\xb3T<\xd8\xb1\xd9\x46\xfd" "\xe7,hh\xa4V\xd6\xf8i\x88\xaa$\xd1\xd3\xaa\xa8\x86\xa8\x7J\xd6\x92\xc\x91.\xaf\x1b" "\x1e\x34\xb9/<4\xbW\xc1\x9d\x92\x9e\x9a\xb9k!\xfe\x42\x96\x89\xec\x30\xa1\xff\xe7" "\xa6\xdb\xae\x13&\xedGm\x3\xfH\xad\xca\xb3\xe3\xe2\xdb\xc8\x1f{\xb6\x64\x1b\x63\x14" "x\xa8 \xe0\x96\xe9\x87\xf5\x1e{\x92\xc9\xf4\xa8\xcd>\xf;a\x80\xa7\xe7\xe9\xa5\x1b" "\x7z6\xd4^\xea\xc8\xb9\xb6\xeb\xe2\x86\xfc\x9d\x8a\x15}\xd3\x39\xa1\xf2\xabj\xfc" "B\xb7\xd2\x16\x34x Qn\x7\x0%T\x1fh\x92\xb8\xd4\x2\xa7\xf5=\xa3\xbc\x84\xa4\xb0\xa0" "{\xe8\xb0\x94\xcf\xe2\xae\x9a\xfe\x13xQ\xf0*-UI\xdd\xdc\xf6#\xbb\xe5\x7\xd2\x15!" "`K\xe0\x19\xa5\x1f\xf[5?a5\x15h\x96\x63\xcc@@\xbd\xa5\x16\xb6`0\xcm\xb6\xf0\xbdr" "\xf6'\xfe\xb1^h\xf1\xb0K\xdc@\xb5LL&\xc4\x6\x1a\x89\xfb\x93G\x13\x84y\xb3\x8aY\x91" "\x8a\xe5\x62\xee\x32\xd9\x31\x90*\xc2\xa0\xb5\xae\xafk\xf4\xb2\xb0\xaf\xe1\xb5\x13" "\xa3Zn\x9f\xa2\x44\x89]\xb3\xdax\x98\xf1\x1e>\x95\x31\xfe\x9c\xbb\xb4\xb0\xe6\x65" "\xed\xc4\xc6\xb5g\xfc\xea(\xa5\xef\x14\x9\xa2H\x99\x4S/P\xc9\x1b\xcdo\xe7\x4,G\xfa" " 2\xf2S\xf6t\x98\xf7\xd7nd\x12]\xc1\xaf\x7\xd1\"\xaek\x82x\xe1\x46\x8b?\x86\x6s%" "\xb1\xb6\xfb\x64\xd1\xb9K\xec\x96\x10~d\xf6\xec:c\xafsO9\xd6M~\xb2\xc4\x15\xc9\xfe" "1dsnk\xb3\xd5\xb2\xd2\x46_KyL\xa0\x85\xc7\x62\x7f\x88-\x87\x11\xa4\x1e\xd1H\xfd\xd5" "7!\xb8\x10Q&\xfeX\x4#W\xbbI\x91\xfd\xf3\x33&\xdf;\x1b$\x80\xe0\x8eS!]\xebQ6\xce\n" "\xab\xc6@\xaa*gi\xac\x37\x89\x8c\x0\x87V\xae!{Y\xc6\xe8\xfb\n\xdcl\xdc\xf9\r\xb8" "\x4\xe5\x1e\x84\xfe\xac\x91\xeb\xa7K>\xe1\xbe\xec\n?\xa4O\x18\xa3\x3@\xbb\xc6\x17" "i\xf6\x62\xec\xf0\xb1k\x1c\xbc\xf4\x5\x9f\x38\xfe\x93>\xea\xbd\xd9'p\xf4\xde\xfd" "\xfc\xd8\x44\x1f\x7fYm\x1d\xc0\x95\xf9'Y]p\xb8\x9d\xa3\xe9u\x94\xb3:3h\x9fH\x8d|" "\xfbzls\xbe\xc4\x62\x35h\xdd\x17\xcf\xa3\x98\x45\x61\xeb(UQ\xaf\xde\x35\x38\x1a\xeb" "\xe\x82V\xbd;\xa5\x8d\xfl\xd3\xa4\xa9\xc8\x7=AK\xda[y&(\xfeZ\xc\x89M3\xebyv\x8\x17" "\xc2\xaf\xea\x3j\xba\x15\x5\x9b\xcb\x81L\xf2\xee\x9d\xa9\xea\x14\x33\x90vO\x95\xce" "#]\xecI(\xe5`\xf5)\xb5\xa0\"\x61\xe9Z\x4\x8\xc4\xf4(\xc5\xf1\xc8\x63zj\x87\x8f\xe2" "M*l\xbb\"\xaa\x7\x8d\xc8\xaa\xb0\x1\x46\xaf\x33\x89\xbe?\xfb]l\xd9\x6\x98\x43\x8f" "[Z\xf7\xda\x8\x99\xbf;{\rO\xa0O\xe2\x63\xe9\xd7(\x1et\xae!\r\x8aJ\xe7\xb2\x90\xde" "\x17\xea\xee\x36\xcf\x35\x89\x9b\x15u\xdd\x62s\xdcP\x9d\x8c\x15\x6w\x96\x82<\xac" "\x82\xd7o3Y\xf8\x2\xcf\x1ci\xdc$\xffv\x5\x45\x39\x38\xa6\xac\x8b\xbc*\xdd\xf2\x8f" "'\xc9\xba\xfa*\xfa\x1\xab\x43\x99z\x81\x93\x33\xf6\xa4\x96\x62\x86\xe7\x98\x41\x7f" "/\xbf\xbc\x14\xc4\x38\xe\xe9\x65\xed!:\xa5\xca\x64\xdc\x9e\x61\xd4Q\xd1\x7\x43\xb0" "R\xc3\x9f\x3>\xcd\xee\xfd&\x8f\x42\xbd\xd3~\xe3\xc2\x9f\x8a#\xd5\xf4\xb8\xf7\xdf" "\x19m5\xa2\xfa\xfb\xd2\x88\xe5U$r\x16IC\x3Lt\x10\xf3JB&g\xea\xf4R\xb6+\xda`\xe9\xc0" "\x8e\x9ar9\x1b\x12]|Ji\xfd*\xd5\xb8\xb\x66\xb0H\x9b\ny\x8d\x62\xb1\x31\xfe\xbevA" "\x87t\xd4\xaa=\xbcG\xb4\xbe\x9a\xa1\xd8\xf4\xc6#\xb4L\xfe\xd8\x66\x30\x5qM\xb6_\x1f" "^\xe3\x83\xfbX\x90\xdf\" B<\x88>\xf7n\xdd`\xc5\x9O\xca\xc6\x12\xc0\xb0\x1cNMt\xc" "f\x8d\x12z\xf2t\xcd\xcd\x1aV\xcfO\xea\xa7\xa8r\xd7\xc9w\xa1\x44\x0,}-\xad\xf1\x6" "Mx\xeb\x35\xe7s\x8d\x99|\x5S\xfft\xdb\x30\xf1\x94>!\xe6\xe4x\x17r\x1\x34K\xd5\xd9" "\xb5\rr\xbc\xdf\x1\x62\x8fw\xf8\x9e\xe5\xf7T\x99u\xear9\xb2V\xa2\xf3\xec\x8e\xae" "\x2\xa8\xb4\xd2\x8\xddY\xed\x45\x8\x63\x43\xeb\xa7\xfe\xee\x15\x13\xd0\xd6G\r\x84" "O\xc3\xf4\x62Z\xcf\xdb\x2\xado\x1c\xbd:7{\xc3\xb4\xc\xaf\x1a\xf0\x88q\xab;\\\xa4" "\xe8\x38_\xfb\x31v\xa9\xc~\xce\xd2\x83\x91\x2:\xd4\xc5\x15p\xe5p\x11\xa2\xcd\x8e" "\x9^M\xb0\xb0\x89\x99v\xea$\x11\x5\xcc\\\xe7?\x96\xa8\xcd\xd3\xc5\x10\xbd\x9a\xb9" "t\xdf\xee\x1c\xf8\x8d\x84(\x9a\xb1\xe9\x5\xf7,\xd1\x41z\xb8\x63\xc2\x61_\xff\xe8" "\xd5\xf5Sv@\x4\xf6\x41[Y\xe4\r\xb7\x11\x10=\xb\xddu\xb9\xb8\x18x\xac\xad\xc8\xab" "\xe1\x12\"\x65:\xf4\xdc\x64\xc5\xd1\x5\xb5\x3\xcd\x85\x45)\xd5\r\\\xb4\x36\x3\x39" "\x95\xe4\x6L\xd4\xdcY\x3\x81\"\x10\x46\x44\xbbV5\x11\xe1[)\xd3\x91\x93-yt\x10\x8c" "\xa9\xb~\xec*\xe3\xe4q\xa3&L\xf3\xd0\xe9&\x9e\xa5~Z\xe\x38z\xae\x85\xad\xc\\\xba" "\xfd\x83\x84\x43\x86\x95=\x8dy\x1f\xb0\xac\xf3\x87\x98\x1b\xa0\xa8\x91\xb\x17\x64" "\x8\xf7\x64\x17\xc8\x9f\xbc\x45\xb2q*\xc5\xde\xf8\x63\xf3\xc8k\xd0N?\xd5\x86\x38" "\xbc\xef\x83-\x81\x16\x18\x4\x8c\x30\xc9\xdf\xc8\x30s\xc2\x38\x9bm()\xa5.\x92y\xbe" "\x98\x66\xa8\xd6#x\xd0\x0\xb3\x8|\xe0\x9c\xe9,\xbf\xd0\xa4`\x92\xbf\x4\xcb\xab\xfe" "\xd2\xd7H\xaa\xa9\xfa MD\x8e\xb6\xce\x63\xab\x7f\x46k\xd8\x9d\xffP\xcew\x9dv\xe$" "\x7f\x7f\x18\x31+\xe4\x1b\x33n~\xc1T\xf3\xf4\xfc\xd6\xbe\xe1\x41\xba\xb0]\xb7q!\xa0" "\x3\xa1`\x7f\xe6\xb3*\x0\x80\xbc\x95\xb8hkS%\xb8\xe1\xaa\x41\xf8\x16\xa7\x7f\x16" "\xe2&n\xac\xd9\xb5\x91\xe$\xaa\x6\xdd{\x96\x90;\x97\xdf)\xe0\x97\xdc+\xdcG@e\x8d" "`\xf2\xb8\xda\xcdN9\x8 \xb1O\xb9\x61&\xeb\x97\x91\xe4\x66K$\x4\xce\xe4\xea\x14\r" "\xeb\xc5\xff\xaa_8\xb7o5NI\x97\xaa\x42\n\x80\x35\x31\x45\x46\xc\xc9J*\\\xb\xc7r\x15" "T\xf2:\xc7\xda\xcf\x0\x8b\x12H\xc1J\x85'\xad\xd8\x36i-<\x2\xf0\x88\x92\xc7\x9e\x63" "\xcc \xec\xa2\x9b\x98\xc3W7L\xff\xca v\xfb\x5\x33\x97m|\x3\xb\x8e\x7\xecK\x18\xe" "$,`\xb3\xd6\x12\xc0\x8d\x66\x44\xdc\x30\x7f\xef\x9a\xaa(\xc0\x81I\x9a<\xbf\x41\x9b" "J\xd5\xa0\xa6\xfh\xa9\xd6\x13\x11w\x19\xda\nG\xd0\x42\x44]\xc3I\xe\x9a\x1dx\x15\x90" "\xed\xda\xd4=\xd4\x61,\xa4\xf\xd4q\xe5\xa4N\xc\xbe\xc@\xae\xe2\xb5\xc6u\xdb" "u<\xb9\"&86\x1d\xfb\x18VyO\xc\x38;LR\x8a\x80\xe8\x18\x9c\xb1\x89\xbcIg\xfek\x1e\x84" "5\x19\x14\xea\xcfx\xb2$\xe5\x8d\x8\xbe\xe7PnlP\xb1#\xc1\x82QWQ\x1f\x83\x11\x8bp\x85" "\xfe\xf3=1\x1c\x93\xe1\xa5\x1ev2Y\xfc\xb6:\xe4%\x8fI\xed\xa1\xed\x9s640\x5\r.ER\xb6" "U\xe3\x8e\xe6\x15\x15\x44\x97\x44\x44\xda\x9a\x4\x42?\xe9\xb6\x44\xa0't||\x15\x2" "\x9e\x4\x15X\\;\xc8\xbb\x91\xcb\xac\x33P%\x1eKfB\x1a\x12v+7\xc7\xc4\xe8\xca\x94\x39" "\x90\x33Zf\n^\xbb\xca\\{+F:&\x3\xb0\x87;}\xcayO\xa2\x9a\x1*}FJ\x89\xbc\x88\x8b\x96" "\x9bq\x1c\xda\xab\x92\xacI\xb7\x1bi\xf6\xae\xbe\xe7\xb8\x80\xe8\xf2\x1cG0z\xe5Y\xc6" "\x95\xdc\xaf\x11_\xbb\x1b\\\xa3j{\xa9+\x9f\x30\xfe\xd6k\xd9)\x91\x32\xeb\xe8$zS\xd7" "\xc0q\xd3\xe5\x31\x63@\x10\x83\xe1\xe4Jw\xedG\xaf{\x95\x34\xe2\xd2P\x83\x37\xa4\xe2" "7>k\x84\xea\x34\x99X \xbd\x31\xcf\x99\xdeG\xcc\x34>\xe7\xac]yV\x86\xffm9F\xf6\xa7" "\x18\xa2\xb4\xe1\x38\x8ej6a;\xd0\xb\xe9\x8c\x1\x7\xafV\x90\x43O\xb0\xf8\xd6\x41\xdc" "X\xf4u\xa3\x82\xb2O\xe1\x84\xb9\x6\xb0\x1\x14\x62\xd8\xdaXu\xd2\x92\x84y\x99\x9c" "\xc0\x1b\xca\xfb\xc\x15\xeb\xd5\xaf\xc4\x12\xcb\xf4\x11\xd1\x1c\xd2\xf3xy\xa1w\xd1" "\xeb\x1e\x19Qk\xc\x87N\xaa\xa5\xa5?\xb4\xc\xe3\x37S\xe2\xe9\x93\x61\x87\xe4\xdeQ" "HhrG\xb\x15\xbfT\xc6t[C\x86\xd5h[\x81\xf\xa7\x1f\xa6\x8f%\x8\xfb[\xa2\xce\x9b)u\x8b" "m\xa5#\xb8\x95\xd6|\x1\xd3\x1c\x98\xdfM\xeei)d8\xe7 \xbe\x38t&\xc7\xd6V\xd2v.Z\xcb" "\xc2\xa9\x84m.\xfa\x8eI@t\xa1\x81Gs\xbc\xca\xaf\xfc\xb2\xc\x82\xd7\xf7(\xa9\xcd\xee" "\xb9\xc4\xc7\x31\xe7tO\x94W\xf5\xb5u\xeb\x8b\x19 \xd2Y\xc0\x9[6\\\xaa\x35I\x8\nQ" "[\xb4\xa2\xe1\xed\xb5\xda\x8\xe\x12\xb2\xd6\x5\x41\xa7\x12_6B7V\xe\xca\xf4\xa3\xb6" "\xd4\xb5R^\xa1\x14L|\x1d\x66\x9b\xdb\x14\x62U?\x9a\x1\xb5\xd1\xe0\x37\xd6\x12\xda" "\xd9\x5\x9a=\x7fpm\x8d\xe4\x9b#N\xb\xac\x63\xdb\xf6\xed\xd7\x8a}\xe2\x0\xdch\xfe" "\xd3\xde\xb9\x1c\xb2u\x86\xe0\x46\xb7\xeb\x1c);\xc0Kf\x8c\x13\\\x17\x64\xbc\xbe\xfe" "\x4\x9c\xfd\xfdHi\xd6$\xbb\x88\x45\xaa\xb8\xaa\xda\xd9\xb1\x82^\x83\x19\x15\xc6\xbf" "'\x96\xd5\x9b}\x9\x3 \xa7\xd5@\x7f|:\\\xde\xe2\xabt\x8dT\xe1\x18W\xf6\x41\x9b{\x1" "i\xfb\xd1Uk\xfep\x1fR\xb5J+\x82\xea\x1\xf0\xc8\xa1\xa1\x61\xb4\x9a\xe4\xcbq\x11\xab" ">\xfc\x90\xf7\xbe\x35\x99YM\xdak\xc7\r\x36\x45\x39\xfao\xfa\x4-st\xdc$\xbd\x86\xba" "\xf9\xbe\xae[\x11\x10\xa5\xa4\xaeM\xee\x32\xfc\x66\x7HRos&,\xe7)7\xd8\xdb\n\x34\xaa\x91" "\xb2\x30t_Jg\x91\x1eN\x80\xb0Hd\x8e\xcd\x8a\x8e@\xb9\xb\xea\xebr\xaf CB/f\xe3\xa5" "\x91\x96*t\x9b\x95G\xe0\x95\x16\x1fwB1\x85\xeeTNs\xd1T\x94\x18\xd1\x90\xb1\xc5\x81" "\x95\x1f\xf3\x62\x1\xeb\x81t%\xa7s#\xd8\x4\x16\x2I\xdb\xce\x89\x8d\xe3\x95\xf5\xce" "\xff\x17?$\x89\x64\n`\xe5)\x2\xab\x80[\x93\x61H\xa4\xee\xcbg\xeb\xf3\x9b\x93x\xbc" "\xf8\x81\xa2-\xe9`\x84\xd7\x18\xa2\xd0\x44{~U\xc1\xb\x8em\x9d\xaa\x65M\x96\xce\x11" "\x13\xf6\xbd\xd0\x45\xe4\r\xd8\x85\x34=m\xefSW\xf1\xaf\x85\x85\xcf\xcd\x1em#\xd9" "\xfd X\x82T\x9a\x61\xby\xe\x61\x80\xac\x84.:6\xda\x8c\xb5\xe5\x90\xf9\x10^C\xd8\x95" "@q\xdf\x6\x8f\r\xba\xac\x1f\xa3\x96#,Y\xe0\x8\xd8\xc8\x86\x9b\xd8\x11rA\xb1\x7$T" "V\xc9\xf6\xf7\x44g(\xa1\xac!\xd4\xa8\x38\xdf\x85\x96\xe0\n\x98\x14\xad\xc8\x88\x2" "z\x90T\xcf\xc8\x61~\xaf\x1d/\xeb\x66\xbc\x31\xd0*\x93\xad\xa4\xccX(\xcc\xd6\xea\x5" "U\x1a<1W\xf\xf8\xc7$\xccoc\x97\x32\x8f\xb7\x8c\xf6\x10\xb6?\xd1\xee\x82;\x9cu\xf0" "2\xe0\x18Y<\xcaw\x19u\xff\xf\xe7\xc1\x61\x65\x36\xf4[\x9a^)\x85\x39\xe3\x43\x36\xfc" "\x9d\xa7\xb2\x4\x2\xb1\xd3\xf6(]\xec\xf5\x4U\x0*y\xb8\x82N+{\xa0\x6\x9f\xf3\x9b=" "A\xf0S>\xa9\xd7\xea\xd7 \x14\x65n\nbPa\xe8(#_\x11-cc*\x19\xdd\x80\x8c&\x91\x18\x4" "\xdb\xa1\xc7Q\xb3x\xf9\xd3(\xe8\x41\xd3\x94(\x9\xe4\xd9!\x5\xf2,\xf4\x15Uk\x9b\r" "]j\xf4>,b\x1d\xe6\xba\x34\xf5\xb0@&\x89\x61\xbeV\xed\x89\x13\x10\xd8\xbc\xe7x\x9b" "\xe4\r<\x9f!F\xfb\xd9\x8cmj\x87\xce\x61\xf6P|\x8d\xb4o\x1f\xf4PGm\x16\xa8\x14\xae" "dS\x88N\x1b\x6\x15\xeeG\x2\xcd\x85\x66\xb3\xeaU\xcb\x13\xadr%\r\xa1\x9e\x96k\xbf" "\xc2=\x9f\xa7=\xd4\x35~=S\xf9'c#\xa9\x39\x8\xc9g\xb2\xb0\xcc\xb3\xc4\x81Z\xe8\x12" "=\xc8\xe0(\x7\xbc\x6\xc2\xfd\x43)\x8d*\xbfqZ\xaaPp\xd3J\x94X\xb7\xc5\xfa\x31\x37" "\xef\x11\xe4\x81\x9c\xc5\xbe\x17\xcd*\x17\x61]d\xc6\xfd\xbe\xc6\xdc\x61\xf5\xd6\xe3" "\x81\xa9\x66\xf0\xfe\x99\xec\x62\x13Ua#\x5\x83\xf4\x5|\xfc\xca\xba:e\xd2\xfb\x30" "\x92\x13\xc2\x8d\xd1\xd1o\xe9\x8etY4\xc\x86\xdaV\xec\x83\xf6oY\xa3~\xad\xd5#%\xb5" "A\xe1\xb9]\x91\xa5\x91\x17\xe0\x38\xd2\r\xb8/\x3j\xad\x19\xf6\xcc\xca\x3#f\x9e\x65" "\x11P\xb4<\x91`s\xf5<\xe\xfe\xe9\xdc]\xc8\x86&$\xb7=[\xc3\x31\x35\xcbr\x8f\x15Vj" "~d\xf8\xde\xc3\xed\xb6\x16\xf1.#\xf2Z\x8d\xafl;\x9x\xd7\xa5\x1a\x33\xbc\xf1\xfd\x9e" "O\xed\xb\x5\xb8\xee\x95<7\xa8#\x8c\xe6\xff\x43\xd9\xb7\xe0\xf0\xa4\xa4\x1e\x10\x64" "\x1b\xa5\xf2\xfe\x8d\xe\xbd\x43\xfbo\xd6\xfc\xca\x41\x95\xd6\xf9\xb3V\xf6\xb7]\xcb" "\xb8\xeaj \xffP\xe5v\xdf\xa6\xdb\x1c\xcd\xd7\x64t\xc9\xb2;\xea\xa5\xd0\xfeqc\x5\xad" "ma\x1b-\x81\x17T&\xa6]\x1e\xf3^\xbf\xb6\x16\x0\xdb\x18Q\x16\xaf\xd3\x16\xa7\xaf'" "\xca<\x1f\xaa\xdc\x5\x1c\x46\xbe\x46\x1\x18u~\xa1Y\xd8@eSx\xa6(\x91>\x8f\x8b\x9e" " \x6Kv\xd7/v>\x8c\xf3\x1d\xe\x84\xf5\x81\xcf\x65\xd8\xa9\x17\xef\xadt\xef\x3\xca" "\xe\xfc\xc2`R\x15\x34$WE\x1e\xfd\xcb\xfc\x1d\xa6\x1f\n\x81\xd5\x8b\xc9<\x7f\x12\x39" "\x97\x2\x16\x1f\x32Y\xfa\xd6\x8e\x98V\xa2\xeb\x64\x92[^\xff\xcc\xba\x1\xc9\xdc\x11" "5\xb\x41\xcagt\x0\x1ft\x87l\n\x5Na`T\xbf\xf2=s\xfe\x4\xeb\x86y\xb3\xb2\xd2\xfb\xd1" "\xaa\xd1\xab\xb0\xe0Z\x84\x63\n\xad\x1c\x64\xbf\xffL\xb9\xb3\x1d\x8a'\x15'u\xeb\xd2" "\xd3Hb\xc8O,\x8e>\x11\xa4\x15\x61\x1f\x92\x91\x8u\xb9\xcd\x86\x15\x83\xb2\x83\xcc" "\xfc\x9e\x80qF\xb3\x9b\n\x42\x9a\x80\xc2\xc6O\xdfpQ\x2n~w:\xe1\xf\xf5OH\xc6}i\xb7" "\x5\xea`\x98\xae\xd8\x8f\xfb\x83\x97z\xc6\xa2 \xea!)}\xb2\x2\xce\x91I\xd0\x7\x9a" "\xee)\n\xe0\x8c\x63\xfa\x1a\xbb\xe9\xc1\xee\x0\xc6\xf1${\xf7\xc4\xbb\xe0\xc5.\x2" "0\xeasc\xa4v\x96\xa3\x31\x8ao\xd8\xe3/\x1b#\xdas\x1a,\xc\xc1y\x4\xc8-\xf9\xe7\x10" "b\x19\xd8`\xe\xbeLK\xac\x34\xfdX\x9\x65\x96\x9c!\xfe\x63\xefmbss\xbd\x95'\x93\n\xde" "\xe2\x66\xdf\x36K\x9a\x8b\x3\xf3\xf4\xc6\x1e\x85\xf9K?\x17\xc2\x12\xc3\xa1\xe6{\\" ".\xea\xda\xbb\xf7 \xe9\xdd\xb9\xb1\xaf\xa4\xa1=\x9f\xc0\x41,\x15\x17+\x15\xe5\x9a" "\xbbgQM-\x18 0\xabG}\x1c(=\xe1\xd0g}\xc6\x93<<\xf5*\x11\x88\x19\x96z\xe5\xec\x16" "\xd2\x90.\xb4\x9f Y*3\x97\xb0\xb6\xadg\xd2l.\xb6\x8e\xf4G\x12\xe4L\x16\xc8\xbf<\xec" "\xfa\x36S\xa4\x3\xb5\xff\xc7}k\xcd\x80\xea\xa5\xc4\x80lg\xee\x6\xcfib5\x82\xcd~\xb4" ">I@T\x9at\x7f&\xbe\xdd\xd6\nm\x1a\xdbW@%)\xa9\xba\x64p\x87\xa5o\x96Z\x93Qk\xcf.'" "\xab#~+\x9f\x61\xcc\x89\xd5\xc6\xcb\x0o\x6g\xd1\x42\xbe\xe8\x9a\xf8\x0\x9aV\xffM" "\xc2ie{\x11\xf0\xbfW\xf1\xfd{\xea\xc2z\xf3\xfb\xe8[\xf3\xff\xf1Uf\xac)N\x18#\xf5" "`BW\x8K\xb7\xad\x38\x38\xee\xe6\xcc\n\xa0\xc1\xdd\xcfqz\x92\x14\x61\xa4\xedV\xa5" "\xbay\xaf(6\xd3\xc2*Gq\xb3\xf0\x85\x14\x83,\xdd\xb0\x96T\r\xa6>\xb9P3\xd0\x7f\xf6" "\xa0\x46\xe2\\\x98y\xdf\x7f\xf7\x62\x7\xd2\x1c\xff\x63\x97\x1f\xf8u\x2\xf9\x13\xa6" ")\x83\x84T;\x13u\x12[J\xdc=\xdd\xb9\x31\xdd\x88\x1a\xa2\x81\xc8\xb7K\x99\x94!c\xc8" "\xd9<\x1a\x16\x61\x42\xc4\x31V\xf6\xa4\xe8\x15\xe2\xad;\xd2\x91\x34\x9b\xabS\x9a" "\xa8\xfc<\xf0+\x2\x18\x9d\x15\xb8\xf7+\x1e\xc7\xcb\x95:\xbf'\xce\x1q\xca\x63hCN\xd5" "\xc3\x9fZM\xfb'\xb2\xa8Pb\x6\xb9 1\xbf\xb2\xdc\xbb%\xeajP\x92$\x14\xcf#\xa2\x8d\x8c" "\\\x13\xef\x1\x8b\xba\xf4\xac\x95H\xe0\x43\x42\x61\r\x9e\x9f\x37\xd2\x85\x85\xb6" "\xd5\x91\x63\xed^?j\xbf\x3)\xe2 \x8b\x95/-*\x1a\x8c\x11u+\x5x\xac\x88(Fb%z^!\x83" "\x80\xd3]5fl\x1d\xe9,7\xca\x37\xc1\xdagv\x80\xbe\x63\x4\xf6\xfy\xf\x1e\xeeM\x4\xf1" "U\x0\xce\xbel\xdd\xc9\xb3\xe7\xb6sH\x8b\xcb\x4\x92*\xd7\x19\xf1$-\xd9O\x97\x91\x42" "mf\xa2\xba\x8\x41\xc5\x63\xc9\x9eWeG\xcd%\xe2\x8d\xb\x90\xc5\xab\xec\"\x18\x9b\x43" "6\x85\xdbt\x1a\x96j\xb3\xe\x15\xb8-\xcfI\xa8\xd9\x15\x85\xc8\x8e\xc\x31\xc0'o\x7f" "\xb9\x18\x9e_\xb3I\x1f\x15\xbe%\x9c\xd5\x2\xe9\xb4[G\xde\x10\xbc\x87\x8c\xe|[L\x88" "\xeb\xe0\x90q\xed\xff.$\x10\xe9\x14\x1b\xdd\x5Z\xb4I\xe0\r\xe8\x1\x45\x92O\x17\x16" "\xd4\x1T\xf6g\x93\x13k2P\x81\xe7\x31[\x87\x94Or\xf2Vf\xe0'\x10\xcb\x96Y\x99\x8a\xb5" "\x8d\x90\x84\x88\xb6%+\xd5\xef]\xc3\x8\x61\x97\xcb\x9\xbf\x88\xfeS>\xfa\x8\xd0\xa8" "=t#\xb9\x8\x8a%\x9d\x35\xaa\x8G\xb7\xe9\x13\xa5\x43\xc2\xad]\x2\x11\xc7\xa1\xc0\xe0" ";q\xdd\xca\xc5\x17[\x96v \x11\xff/\xd4\x16\xdc\x8e\xf9\xbbn\\D\x8f\x84\xa6^\xf2R" "\x8f\x8c\xd3L\xab\xbf\xdfh\x8f\x14\xb0\xdd\xe9O\xef:I\x4O\xf2\xe2\xcc\xb1\xc8-9i" "\xa7\xca\xf2\x8f\xee_e\x10\x0\x35*E\x1d\x3[h))*\xc0\xaa\x64V\x91\xb0\xa5\xa6]\x19" "\xf0|\x9d\x88\x42&\x8a\x10\xf1\x1e\xcd\xe1&X\xd7\xa1\xd9\x97V\xeb\xf5x\x8f\x3U\xff" "\x1f\xe4\"]\xad>\x19wZ\xfc\xf7\xea\x92\xbf\xcd\x37\x4\x83\xc2\xf_e\x85\x1d\x14\x41" "\xae\x94\xd2_^x\xbf\x17S\xb6\xd3\xb\xc1\xd5@\xe5\x45\xa9\xa5\xe4\x98I\xfa\x18^\xae" "\xa3 \x1f\x12\xf1\xf9ZLM\x98\x44\x39\x95\xb6\xff\x84\xd7t\x86\x65@\xc3\x1\x64r\xf8" "\xde\x1c\x62\xaeJX\xa3\x9a:\xcb\x42\xc5\x6\x86\x39'\xebX(\xe7_\xeV\xb4\xa2\x87\xf6" ":\x99\x88Jamw\xe0_K\xd0\x17\xea\x5\x7f\xd5\xf6\x91\xa6'w\xe3\xbaK(@\x86\x1a\xbb\xce" "\xea\xde\x83\x39\x16\x33\xe4\x9\xa1\x34#\xc3`\x9e\x86\x2\x11\xc6\x82\xca\xed\xfc" "n\xe7\x81*M\x97\xf1,\x13l\xe\xfd\x89\xa9\x38l\xf1\xa6}\x8\xc0m_\x94\x83\xdc\x44\xb" "wr\x8dv\x6\x9d\xae\xde\x8e\x14\xf0\x89^\x90\x97\xb6\xb9 &`\x99\xa2\x10\xa7\x15\x92" "7\x1a\x8f\x30\xb1\xb3\x9d\xa9\x41\x43/\x99\x12\xf9\x9a\xc4Q\xa7\x65s\x10\x38\x91" "&\xe0/\x1a\x45\x64U&\xe7\x18\xad\x38u\xfc\xfu]\xbd\xe9\xdc\xb9\x8b\xe7\xc6\x3Ngu" "\xc2\xf1\x33\xeag=\x8cO\x0zb!\xef\xf0\xd8\x91\xcf\x93\x94\x4\x8b\xf9_\x88\x5\xdf" "1Q\xb0\xe0IL\xf4!d\xae^\xf3\xe6\x81\x35\xb3'\xe0\xe2\xa7\xfc\x8e\xf5~\xba\x31\x15" "\xb5t>\xeb\xe8\xa9\xe0\xdfRUN\xe2-I\xe4\x9\xb9kS[\xfa\xe\xb1\xd2wD\xbe\xe8\xc9w/" "\x18\xb9\x98\x91\xd0\xc6\x92\x9d\"\xfe\x1fY\xb7\x92\xc6\x95\xe0\x82\xdf\x16W\x8d" "\xf8h\x8b\xd4\xf5\x90\x64xX\xad\x43\x44\xef\xd0\xba\x62\xf4\x38\xe0#P\x16\x46\xd4" "\xf0\"\xb1\xdb\xabgG\x8f\xf2\xfb\x65'`\xa5\xe0\x8b\xf4\x2\x1e[,w.\xa9\xa1^vtq\x19" "\x18\xee\xc2\xd5\x1b\xfb\x32;\xd0yY\xbb\xa5\xdb\xa6\x1b\xbb\"\xf0z;\xd1r.0\xf6\x86" "'\x80\xf6\xeaic\xed\x42K\xf5\x10P\x1f\xc3\xb3\xca\xb6\x10\x34\xec\xa4U\x5\x9cG%\x91" "\xc3\xc9\xd5N\xc4\x46.\x1cn\x8f\xb9\x2$`J]\x1a%\x12\xe6\xfc\xcc^h\x9e\x6\xf9\xcf" "x\xea\xb2\x9d\x61\x65\xba+\xdb\xe9\xb9\xc2!O\x3\x17w\xe3Qu7\x9c#s\xaf\x98.\x15\x8" "AY\xff\x8d/\xe6Uo\xc3\x65\xc5\x7f`\xca\xe1\xe\xf1\x8d\xa3K[\xbe\n\x81Hz\r\x1c\x9a" "kkF\x8f\xd8~\x10\xe4\x7f\xcd\xfeq\x10H\xef\x15\x0u\xc\xfdZG|\xc4\x1c\xe3\x9\x1ek" "\x9\xd2i\xdd\xed\x66jE[\xd3(\xa9m\x8b>\xa4\x38\x14P>\xe9\x1c|m\xb0#\xb6\xf5\xb6\xd6" "\xa3\xbb\x10\x66\x88\x36\xd9\xf3_o]4\x9s!\xa4\xcdZ/\x6\xf9\x42\x18\xbdR\x87\xd3\xb7" "\x5\x65q\xbd\xd9\xc0O\xff\xbe\xe3\xeak\x2\xef'\xe1\x17\xb6\xebVa\xe2\xfa\x45\"\xd4" "I\r\xd2\x4\x1d\x9di\xee\xe5\xdb\x1a}q\x85\xca\x32\xf2\x8Q\x84\xdd\xae\xc6\x8c\x11" "\xa9\xe9\xe8\xc1\xf1\x36\xd9\x38\xdb.\xf\x8f\xe8\xe5\xffr\xe1\xfe\xb6l\xb5\xaeqC" "\x10\x15\xeb\xa6\x0\x41\x92\xbc&\xdb\x9e\x45\x65\xec\x1a\x1fv\xa1\x86\xa8\xac\xef" "sw\xadm\x92y\xfc\x91\x94\xe2\x84\x66\xce\x66\xe|8g\x1\xecWd\xf7\xed\xdcU\xec\xa6" "\x8a\xc1\x8c\xc5\x31Zp\xb9\x17\x8eq\xcf'Q\x1c\x1c\x98\xf4\xe\xdb\x1a\x1d\x62\x17" "v\xeb\xbd\x1b.7\xd8k\n\xc6j\xc5\xa5~\xe\xc6\x9\xf7\x12\x80]\xae\xa5\x84,-\x80\xc7" "2\xc1\x12\xee\x8e\x38\xd9Y\xf2\xc7w\xa1\x89$\x14\xae\x82:\xf0\xe4\xba\x8a\x4\x63" "\xddG\xaf\xd5{6\xf\x2\xdd\x42\x86\"\xef$\xf2\x1ay\xcdi\xb4\xf4\xe1\xcc\x4\x1f\x88" "\xe7=\x8a\xfd\x13\x12\xe7\x64\xfe\xc8\x41\x18\x46\xce\x92S\xdfO\x89\xe9\xa2}\xe6" "H\xaf`5C\x1a\x46\xa8TZ\x88\x33|\x89\x8d\xda\x8d*,\xbf\xd8\x32\x93\x7\x98\r\xe1\xa0" "\x88\x35+\xe6\x18\x63\xce\xd7\xc5*\x9a/\xcc\xd5\xe7\xc4\xfd:?\xf8\x19\x1e\xbf\xdc" "\xdd\x96g\xbc\x89s\xa0.\xf6\xcb\xe9x\xac\x9b\x1c\xd4\xcb\x94\xb2\x33\x36\x38\xe0" "bY\xfd\xbfyQ\xe9\xed\xb9\x33\x0>PQ\xc9\xb2\x65\xa7\x9cx0\xb\xef\x42\xee\x42\xf3\xbe" "_\xb4\xad\x88\xb3\xa2\xb6r\xfb+\xd3\xe1\xdf\xb8\xeb\xc7\x17\xe\x1a\xa3\xd2\xb4Y\xa3" "\xbbT\xadLU\xb4\xa3\xc2\xfd\xb2\x98tc`\xeb~\x9d\xf2\xad\\\x99{y\x6\x14\xb8\x9b\x18" "\xd9\x44\xa1\xe9\x10\xc9\x1\x43\xe7\x36_\x88wBM\xc0(\xdf\xa8\x91\x82\xf8\x9b/\x1e" "\xe6:AX[\xe6\xe0\x99\x44\x88Q\x81\xb9\x1\xbdN\x3\x1cn%#\xe7$\xbb\x8Mp;\xc6\xcc\xdc" "\x9\x43\xcf\xc9L\xb2\x11U\x81Sv\xa9Qd_\x8a\xd8\x16\x96-\x1eQZ\x8f\xcf\x9dg\xd0\x11" "6\xcd\x85\xd4\xff*\xdd\x96\xbcR\xfcYJ\xabo[\x10\x32\x8c\x13\n\xe3\x61\x86\xadq\xa2" "\r\xc2\x45`\xf6v\xa4\xd9W\x10\x17=\x88\x82\xbc\x10[\xc6\xcb\xf6\xda\x46\x87 \xb5" "\x5)l/\xb9S)r\xd2\x92-\x1c\x96G\xce\xd4}\xa3#\x9\xc1\x15\x46\x1c\x18\xcfTL\xa4\x8a" "9\"#\xf7_\xa9\xe\x90?\x85\xc6VcRw\xb8?\xfb\x30\xc4\x9c\x9\x8b\xf3\x64\xef\\t\xe7" "\xed\xdc\x43\x9d\xe6\x85\xde\x9en\x96\xa7\xa7\x43\xe8\xa9" "\x8f\x30_\x84u\x97\xa5\xb0\xc5\x43x\x95\xd9s\xa9\xc0\x8c+\xe7R\xbb\x11\r\x5'\xee" "\x9e\x94^\xeb\x5\"\xae\x34\x44\xa6\xf0\x6\x30\xb4\xeaGdLSl\xa7\x66N\xbe\x3\xf0h\xe" "\n\xa6\xf7\x8fw^s \x7\x17\xc0\x96\xda\xbb+\xd5\xbe\xca\x18\xa3]k\x80\xd5\xf2(\xed" "\xac\x1e\xf1\x36\x17p\xc5\x44\xfa\x8aJ{\x83 !\x6\x9e\xd3\xe0\xa9\xee\xbe/\x0\xb2" ">\xb3\xbra\xfe\xej\x1a@-\x9f/\x7f\x1f\xb7\x1d\x9b\xed#\x3q\xef\x1f~/d\xf0Q4or\x86" "\x5k\xc9\x8f\xc9\xe5\x7f\xcaP\x84\x9b\x41}b&\x82\xe\xaf\xf\xa9z\xc2\xe7\xb9N2\xf7" "\xe5\x1\xfe\xe3S#\xef\xcd\x9d!\x3\r)\xfe\xf6\xfdj\xefSAe\xd3\xfb\xe6\x4\xab*\xdc" "\x8d\x9b\x1f\x1fP\xad\x86\xfb\x80\xf\x9;\xc6\xd1\x32P\xa4\x65o\xbc\x8f|H\x81\x1c" "\xf4R\xd9\x64\xf1\xd7nk \x90\x9'x\xd6\xdeV\xa8\xe3\x89\xef\xbb\x4\xc7\xab\x90\xa2" "BZ\xce+n\xc0\x42\x15\xbf\xfeVY\xc8\x2Q\x8\x4\x1d\x6o\x9a\x30\xdc\xa5\xdf \xe5\xc5" "\xc4\xe2\x31\xc1\xaa\x1a\xa1g\x96\xf4\x89\xba\xbd\x45\xb7\x88\xd3x0\x9b\x8e'\x87" "\"\x15Z\xf3M(u\xd4\xe6\xe8>\xda~\xc4h\x85^\xaf\x1d\x63;\xac=\xcap\xe8kG\xe2&%\xfe" "\xc8\xf3*;\xa5\xb9\xdc\xe3\xb9\x2\xe1%\xd4\x95\x66w\x93\x97Nh\xc7\x86\x887m\xf\x94R\x9aW92\xecshU\xc7x\xeb\xbev\xc5U\xed" "{ \xdes\xe1\xd3\x7f\xd4\x1b\x61\xaf\x1b\x42\xdb\xb7!\xe4\xff)SO}&\xb8\xf1\x94\x34" "\xcd\x99~\xcd\xbe\xe3Y\x4\x5\x4\x9c\x9\x84\xc\x91\xf1\x7f\xb7\xbe\xb2\xde\x1fX}e" "L\x93\xb8\xb8S4\xb3z\x1b\xb6\x66\xf4\x46`n\xb2N8g/\x8d\xe1/\xa0\xd2\xe9\x38>\x2\xa3" "\xde@\xf7^\xbb\x18Wl\xd8)\xdc\xfe\xc5\xbe\x1e\xb9\x36q\xd8\xee\x16i\n\xd4\x45#\xaa" "M\x95\x10r\xe2\x83\x12\x7f\xf0u\xa1\x8fU\x95\xd5\xbc\x96!\xfa\x18K\x81\x8f&\x9fX" ",j\xe\xd0\x9d\x86\xf3\x87\x11\xc4S\xb9\x12=\xa0\xda\x11\x43\xca\x33\xaf\xc5\xbbU" "\xe6G\xa6\x12~\x19\xcd\xb2\xf0O\xc9gF\xa3?\xc3R\xfb\xed\x41\xaf\xca\x8d \xae\xb4" "\xe7\x1e\xcd\xed\xd7\x96%\x43\x3\xa2\x41\x9a\x37\xa4!\xb8\xc2\x8bl#ub\xb8ksZ\xa7" "\xa2\xa8\xe1^\xb5\x80\xb8\xc8\x39Q\xb5P\xb4\x19O\x95!\xc5\x66\x1ew\xfdg[\x9b\xfc" "P\x19\x16\x94\xdb\xea\x42\xcc\x38\xf7\x87=)\xcc\xdd\xe3\xfa}\xb7\x61~F\x97\xe4\xbc" "6\xde\xaf\x7\xd7,\xec\x1c\x82\x64\x9c\xea\x10\x7O\xd2\xfd\xf3R\xb1\x15(,\xe3Z\xcf" "\xc2J?\xe6\x13!\x86\xac\x82\xce\x8b\xfe\xab\x9bP`\x88\xdb\x9c\xd8\xd7(\xb8\xce*z" ")<\xb0\x19\x2,\x3\xc9\xe6\xa6k\xee\x1f\xeem\xe\x80\x64\xec`\x18\x45\x66\x39\xd4\x1d" "\x9c[7eA\xed\xa7\x7\xac\xc9 ?y\x9f\x42\x12\x33\nS\x93H\xaf\xa4\xd6)~\x1\xdb\xb4\xe2" "\x7f,\x84\x2\\\x1dg\x8b\xe&\x7\xa2\xa7\xda)\x9cY\xa0\x94\x9f\x38O$z+[\x19\xf2i\x16" "\x88\xb7g\xc0\xc1\xff\x8e\x7\xe2/\x95\xaf\x66\xbb\x3\x37{\x9d\xdb\x30\xf9~kA\xbd" "\xad\x8\x90\xe1z?\xday\x9f@\xf5\x41\x61\xf1\xb7G\xb9\x45\x1a\x80u%\xff^K\xdf\x1d" "\xf9\xa3H|\xca:KQ\xb2\x85\xb4\xcf\x14\x7f\xdd\x88t}\xbcQ\xa1\xd4\x1b\xb7\xa4\xd9" "\xf1v\x1\x81\xc1\x91\x46jd\r\xc7\nt\xbd\x33\xe9\x10\xb9&\xe4\xc8@\xbd\xfc\xcd\xb" "\xb2\xab\x1\xd9\xa4\x8c\xf7\x85\xc1\xdb:\xfcIVZ\xad\x18\x91_\x9d\xac\"\x8b\x9bsV" "(\xce\x61OP\"\xb7\xbc\x1d\x8e\x9b\x90\xfd\x7f\xf4\xa5Vg\x3\xda\x9e\x44\x6\x91\x9d" "\xcb\xbe\x31{N1\x5\x2\xd0\xde[\xec\x87\x95p\xaa\xf5\x94!-\xd4\x9{\xeb\xc1\x95Yh," "\xa7\xd5\xba\x66'yU\xaf=\xd2^X.#r\x98{m\xbf\xc9\x16\x8d\xf8j\x12\x35\x2\xa2\xff\xa7" "\xa8\x8e\xe9\x87\xfbL]\xd1\xc0\xf2\xb5\xd3\xb7\x35|m\xe3\x1f\xbd\xf0\xa1\xb5\x9e" "aMfL\x1a)\xdd\xb7\xcf\xc5\x90\x18\xd5\\\x36\x64o\xe2\x1b\xc0-\x8e\xd5\x33\xdc\xe" "\x8d\x85\xf9\xda]%\xf3\x4\xba\x1f\xad\"t\x1\x1d\xc9qs\x96h\xd5\x9a\x16\x1eh\x80\xb2" "\xc7Ww\xb1\xee\n\x86\x34u@\xa9s\xc4\xbd\xa4\x30jlth\xbe\x82\x41\x5\x1b\x80\xd5\x1d" "8\xb6\x6s\x19\x0\xeb\xac\x8b@b\xc5o>wK\xec\xe6}\xdf\xad)~\xc3\x14\xfe\x5\xf\xaf\x8" "\xe5\x80\xba\x1a)\xbf\xd4\x7\xb5\xc8\xed^};\x87!\xc4\xd3\x8e\x86\xb\x45W\x10\xe4" "q\xe3\xcd\x82\xbf\xbb\xd1\x7\x90=\x92\x65\xd5\xfd\x1d\x45>\xd8\xf7]M\xe0\x43\x32" "\x12oq\x9|\xf8T\xc2\xd6\xfesb\x7!`-\x84\x95|K\xd6\xbe\xee}\xdb\x6\x97T\x81\x85\x12" "\xf7\xad\x93 \x97\xaf\x96;>\xc0%\x36qA\xb7@\x13\xd5\xee\x33\x63=|6\xa0\xaamrh7\xf4" ">\xac\x3g\x15\xec\x18\xfdo\xac\xae\x33\x61\xf5L\xd0\x37\xbf\x82\xff\x9\xd5\xf4\xe0" "\x3\x92\xccL\xcb\x90pz`Pw\xcc(\xae\xa0\x62[4\xe8\xea]*\xc\x1e\xe0\xf1_\xa1q\xcc\xcd" "\xea:T\x85\x87\xc2\xa9|;\xefz=\xf2\xef\x90<\xa4u\xbd\xc0\xc9\x44\xb8M\xba\xc6\x9a" "`\x88\xc7\xd1\xda\xc5\xf1\xf7\x15N\xef\xf\x1f\x85/{\xa8\xadU\xb8h\xe0\x80G\xea=\xdd" "\xa0\xd0\xb0\xec\xba\x7\x38\xf\x93.a\x1f\xc7\x36\xd8\xa7\x35\xd5\xc0\xf3\xa0\x64" "\xc8r\xe\xfi\x8e\x1a\xe6\x8c\x7f\x3\x62\x44\x3\xbco\x84/\xfd\x94@\xa4\xa0`\x17\x81" "ZL1\xc8\xa0\xa1u\xd0\xef[\xbf\xef#y\xf6I\xc9-\x9c\xaf\x94\xa3\xa7j\xdf\x80\x94\x63" ".\x1d\x81\xee\x63\x14\xc1\x90t\xb2\xfeU=\x83\xcb\"\xb1\xe8^\xc2\xf0\x94\xab\x6\xd4" "\x88\xc2{\x90'\xc8\xe7\xb4\x8\x63\xe3\xce\x9f\x66\x8a\xd3~\x8c\xa2\x4\x15}\x9c\xe6" "\xf2\x92\x9\x0\x89\xee\xc1\xb6\x31tb[\xaa\xd7\xdas\xec\xebn\x80}be{\xb3t\xed\xc2" "\xfe\x15Tl7\xfd\x35\x9bh\xde\x46%\xa9j\xc2\xb7\xb\x94:B\xa1\x9f\xba\xdd\xa9j \x82" "\x9e\x80\xc3\xfd\x7s\xb0\xf5!?K\xf\xc1\xfdN\xa1\xd3\xa6#cC\xbay\x18\xe5\xd8\xf3\x15" "\x8\x15\xe9\x9fr\x9f\xe0\xdd\x96\xbd\x10\xd2\xa1\xa0\xd7(\xd1QO!\x8apGT\x1fp\x90" "y+\xde\xf3\xfd\x46\xf7\x39\xa7hv\x86\x1f\n\x99\xdd\xe9\x33w\xf9\x85+C\xc8\xafGDG" "E\x92q\xec\xa4*\x12\xa3r\xe2\xc9)Kt\xb8\xa8\xb0Q\xe2\x83\xb?\x1\x9f\x9b\xf0\xe9\xb3" "\x10\x93`MA\x1d\x91\xda\r\x9e\xf2\xa7\x86\xd3\x66\x64\x97\x9b{\x90\x83\x89\x9c\x8" "\x1a\x33\x8d[\xff\x3\x61g\xa5L0\xc3\xb1\"K%o\xdciK-\xd9\x9f\x14t\x99`\xf0V\xff)D" "\x2\x38m\x98\x16\xa7\x8c\xec\xe1\xf7(pO\xf5\xd2\x8g\xd4\xc6\x13\xddh\xeeW\xf2\xc9" "\xe3\xdb\x81\x1e\xce\xef\x95\x8e\x6;jx\xa5v\x1e\xec\x62tf\xa4\xa5<\xect\xe9\rK\xe6" "\x89\x9c\x61\x1a\x8a;\xbao\xcb\x3\x9d\x10\xca\xe4\x89\x8b\x93:\xa4\xc1\x41\n\xfe" "M\xbe~D\xd5\n\xc\x84\x8d\x33v\xce!$\xaaH\x13J\xe6\xd2\xe5\x46\x8c\x31H\xcdZ\x9a\xeb" "\xa7\x88Z\xaf\x32\xe6\\\xa7\xc1\x62\xc2[\xb8\xe6\xc3\x81\xa3\x97\x0,\x1e\x14m\xb4" "\x18\xba\x3\xa8\x8d'VP\x1e\xfe(M\xf3\xeb\x31\xbc\xf8O\xccGG\xa8Gm\xe7\xb0\xa0\"\xc" "\xc6>\x8e\xb\x93\x19\xa6\xb1\x8f\x87\x0\x37\xdc\x17\x45\xb0\xfb\x34G\x8c@x\xfd\xe5" "@\xba\xa6r\xc4\x87\x33p\x5\xc3\xc\xb6\xcb\xa1\x13\xfa\x94\x9f!.q\xec\xc3\x9eqy\x8" "\x1f\x64\n\x18\xf0\xd8\xd4\xbbt\x91\x90\x2S\xbb\x13X\xc\xad\xa0\xa6\x37\x95\xc4\xc6" "\xae\x17\x1d\x80\xbe\x8\xef\x0Pv\xd9\xb1-\xed\xee\x18S$ry\x11\xeamu[\x1\x14\xb6G" "\x4j+\x0m{\xce\xd2\xb1$0K\xec\x42\xcdoba\xe8\x5\x98\x8f\x19\xfb\xe1\xe8\xaa\xe1\x7f" "\xc8\xfc\xcb\x64\xfc\xc7\xf5|\xe0\"\xcb\xdc\xe6\x8e'\x18?|\xae\x61\x61\xa5\x11\x1f" "@[S\xb2\xad\x82\x37!\xed\xd0\xba\x94\xb5\xd3\x0)\xd5K\x8f\xc7\xb0\\\xf7\xfb\xefh" "\xa5X\xa0!vAU\xbcN\xed\x3\xf1\x80\x9d\x9x\xeb\xd5\x8b\x7\x38\x1e\x95\xe9]\xe\x66" "\xf1\x87\x3]C\xfcH\x1dG\xfe\x86\xd6\x85\xbf\x92\xa0k1\xdbn\xb8\xc0\x93\xdfx\x88@" "\x17\xa0\xe3\xa6\xcbm\xde\xa0Q\xdeW\x8l^X{\xb2'7\xf3\r\xb3\xa6\x15\xb0\xa2i!\xa4" "\x9er\xc3\xfb\x80q:\x2\x9e\x96n<\xa9\x31`\x93\x64\xb4\x91\xf0\xc2\xfa\xd5\xd6\xd3" "\xd6\x93\xc\xednb\xdd\x11\xb7I\x89\x16%\r\xa9\x39\x46\xcf\xa8Y\x85\x8cp(\xc1\xd2" "\xb5\xe9Z\xc9\x12\xee\xe3\x16Q%\xea\x3\x34\x42j\x8\xbe\xa0\xff\xdc\xf8\xa9\xa1\x89" "\x84\xa8Y\xf0S\xe3|NO\n/\xc2\x39\x31\xd8\xad\xa6\xda\xc6\x4n\xe2\x98)\x8a\x0 \x88" "\x17\\\x13\xb8\xc0{\xa1<\xe4gr\xeeJ\xb4\x89\x98\xb4\x37\x34`\xc2\xb6:\x8c!\x90?\x1" "6\xe5\xb3=\xdb\x8d'uf\x97\x88\x14\xc1k\xbf>\x8exJ'1\xe0\xfc\x0i[\x98\xa8\x30\xd6" "1\xe9\xa8\xd3z\xad\x38Z'B;q\x12\x7\xcaIp\x4 \\D\xda\xcf\n\x8tM\xbd\xcf<\xd6\x14\n" "\"\xbd\xfe\xcf\x19\x8a\xa5\xc2\x8d\x9\xff\xec\xa4\x1e\x8e#\x15x\x9c\r\xe0\xfe\xe9" "\xddS>\xa6\xb7\x2{\xe6\x11\x30\xa7\xf0\x94`\x94\xedq\xbb\xabz\xfa\xae|\xa2\xc6\xca" "\xdfiX4\xd4\x9d\xcc\xd3\xafu\x1c\x94\xd8O\x1\xdfuN\xd5\x8\xbe[\xf7\xd2\x90\xe0\x41" "\xf9\xc7z\x94X\x9c\x93\xc5\xc4w\xab\xa0m\x89\x98\xb6/`\x92\x8b\xbaUw\x91\xb1\xef" "\xb\xcX\xb0\x8f\x65\xf9\xda&~\x83\x44G\xa7\xce\x45\xaf\xc9[\xc6\xbc\xe2N.\xa2Py\xde" "\xf5\xcc\xf1\xc0\xf1\xce\x36,\xc9\xa7\x1\xf5\x88\\P!<\xdf\xf\xa6\xdf\xce\x80\xbd" "^\x12[]\xa8\xeb\x8c\xfd\xd9\x1b\x15\x8eZ\x8a\x1e\xf0\x32\x8d\xb4,N\x19\xf7\xb4\x84" "\x10\xe1\xbe\xd5\x92T\x9d\x99\x1f\xf\xa2\x7fS2qu\xed\x8e\x1,\x13\xd6\xd0\xd9\x8a" "\xbf\x81\xa8\xc0\xcc\xa8\x84\xdc\x12\x63\xecwo\x15\x9a\x63\x43\x61\x9a\xfa}\x12;" "P\xeP\xb1\x16g\xba\xcf^\x7\xd3q\x90M\xbc@I2\xdf~5]\x1az\xc2>#zj\x85\xcd\xfz`\x15" "\xc8\xe3\xb3\xb5\x62\x7\x31\xe3l@uJ\x93\x9c\xa9\x12*\xfc\xc6\xf2\x16\xc9\x97/N\xe6" "1{\xa9h\xcf\x1f%\x12\xa9 \xf5\x93\x1e<\xdb`\xd0\\\xc2u\x2>\"\xc3\x31/F\xa9\x62\xcc" "\x6\xbb\xaf\x6\x85\xfeQ9\xff\x8d\x9b\x9\xf1\x89\xad\x19\xc0'\xba\x61\x63)\x0)\xe5" "M\xb0\xb1\x32\xaf\x3$\xcd\xd4k>\xf4K,\xe9\x16\x91_d\xad\x96=\x1\xebI\xa9`\xbf\x65" "\xf9,T\xcc.\x86\xbd\x13\x99\x8cgoV3\xd4\xe7\x94\x64\xfb\xcc\x89\x95\xe1N\xecmZ\x16" "\x80\x92\xe2\x2\x13\x33\xdb\x8ey\x8a\x7\x42\x44\x61\xab\xad\xa6\xf5\xc8O2'\x95\x12\x9er7J\x9c\x9f\x9a\x97\xf9\x91" "\n\x1f\xc5\xec\x6\xc\x88\x32\x92\x9c\xb8\x61\xa9mx\xb6TA~\xdcV\xd9\xb2\x88\xe\xa4" "?z\x13\x9\x97\x81\x15\xd0\x83\xd3[\xc6Y\xb1\xb0\xd4\xae\x5\x19\x1d\xc1\xa3\xb3\xef" "\x1e\xb3p\x9e\xd6\x46ql\x17\xf2\xf6X\xedJ\x14;\xc2\x38M\xbe\xf8J\x8f\xfc\xe1\xd3" "-Zqy\xd0%\x98\x1d\x7f\x9f\x88WT\xb2\xc5s\x80\\\x62\x14\xfO,P[\xb0}\xe9\x80R\xb\x92" "mnB\x7\x30\x3\x63+\xfb\x11\x16\x97/V\x1_y\x7f\x89pf\x95t;\x91\xf8\x33j\x85[\xd2\xf0" "\xa2\xf8\x4\x15\x46-\r\x12\xe4\xc5\x7\x83$\xfeY\xd9W=\xd1\xa1\xf9\xb2\x46\xa5\x7" "}\xf0\xc5\x2\x8fM\xaa '\xb5;i\xba[\xc8\x89[\xab\xa7\x19_.cD\xf6\x18\x1c\\S^\xc9\x9" "\xf2\x19\xaaoq\x83IX\xb9\xfb\xe0\xccr\xb9\xaa\xbf>\xc7 \x1b\xdf\xben\x13\xe9\xaf" "1O\x9f\x36\xfa.5\xd7>\xeb\xfc\x30tO\x10\xa4]HT\x90|c\x15\x61\x34\xaaI\xa5\xce\xa9" "\xe4\x30\xea\xad\x63\x38\xec\xcc,\xd7\x86S.\x86qz\xa0\xb4\xb3\xaf\xad\x46jC\x12\xc6" "<\xe6)`5\xef\x85\xcd\x9c\x3LBgXVp,\x9e\xae\xd6\xce\xe2M\xf\xc3z\xf3\x46ne\xf8\xb4" "\xff\x37<\xb8\x9b\x45%\xcbMRE\x1e#\x17\xa0\x8f\x96q4\xfb\x66\xef\x81\xe8\xe8JD\x98" "}.\xeai&W6\x8fH\x8d\"%\x7\x87@\xec\xd8\xb1\xb\x99\x7\xc4\xc8\xef\xedk\x9c\x10\x8f" "\xc3Lv\xe1\xc0\xd2\xe0\xf1\x82z\xd6\x8d\x65\xe4\xc6l\xce\xc9\xb3\x1dHF\xbf\x37\xa4" "\x9fy\xc3\xa8Q\xe3\xcc'\xb4\rg\x93`\xb5\x33Yt\xd3\x84\xcc\x98o\xcd\x62US\xae\xdb" "\xbe\\\x13\xa3\xdd\xe7\xefUSl\x81\x46\xad \x90Kk\xb1\xc1`\x9\nU\x12?\x9b\xfd\xa5" "\x9d\x92rw\x5\xceU\xc0m\xe3\x30\xa6\xf1y\x9e\xa2\xa4G(\xf9\xbe*o\xf7\x33\x45\x1c" "0\x97qE\xcfZ5\xeb\x88\\\xe0~\xb1\x17@\x5\xed\x46}\x8f\x96Q.\x84\x36\xed\x9f\xb2V" "\xd9\xb4\xbb\xdc\x62;\xdd\xa6\x34\x1c\x37\x41!C\xed\xe7$\xfbj\x1\xe1H\x8d\xbe\xe9" "^\xf5$YM*\xc8\xc4\x9e\x1a\xa3\xc5\x82\x82[\xbe\xda\x65*[b\xeaz\xda?\x3/\x83\x46&" ".\x9a\xcd\x8c\xda~\x9e\xd4Qy\x5\xddN\x7fZ\x0\xa1\x42M\xc8;\xa1\xd8\xcb\xc4\x11h\x9b" "\xb8$}\xd9\x33\x65\xcaM\xde\xf0>\xe5\xf1iZ\xf.cb\x89T\xbfvW\xf8\xcai\xf9X\x84\xaf" "\xcc\xc0\xe3\x46\x91{@\xe5\x14\xa2\xe9\x32\xbd\x2\xd9\x66\xcd\x12\xde\x85}\xe9=U" "\xc7\xe9\xa7\xc0:r^\xf0\x16\x87\xa1\xed\xb4\x6x\x5\x45\xc\xfbu*\xc4h\xf1\x38\xc1" "5#\x8;\x9cZ\x3\xea\x90oj\xc4\x2S\x18\xb8\xb1\xd2\xcd\x33\x9b#\xcc\x41-\xf`\xa7\xfb" "\xde\x8\xe\x66/MC\xa5\xfd-\xee\xf9&\xe7\x86\x9ax\xbc\x61\x32\x2\xdf\xb4\xbP<\xf0" "\x85\xf9\xae\x85p\xc[\xcf\xea\xa1J\xb8\xa0\xd0\xbe\xb4(\xa8\x9d\x0\xc1\n]F\x93\xb5" ".P\xbeT\xfe\xcdG\x93[1y\xbc\x2\xf8\x35HmXb\x1d\xd9\x86jICD~\x1cq\xdd\xc4\x33\x46" "\xb7\x45\xf8h\xde\xdaz\x86\xe5\xf5\x46]\x83\xeb\xd1\x65\x82W|.\xb0\xbe\x1a\x62 l" ")\xc8\x94@\n\xffU6\xd8\xbd\x2s\x80\x64\x1f\xd5$- \xd3\xbb/Y\xc9\xca,\xf2+\xb0h\x81" "\xd7\xa2W\xb2\x1L\x12\xf5\x88?\xa3}ijX\xc3\xda\x34\xf1\xb2\x5\x96\x0\xc9\\,\x9f\x98" "\x80\xb8\x6\x9e+\xe\x88\xf4s\x1b\xe4\x95\xb3\xa0\x86\x46\xfd>:m\xbf\xb4\xfdW\x9a" "o\x93H\x8b\xac\x8blo\x7\\z\x0\xfb\x81\xe4\x30-\xb3\xed\xe6\xa9\x64\x30\xe0X6\xa6" "\xd1\x9e\xec/(J\x95\x80\xc\xb1\xaf\xf0\xaevv\xf7\xacwT\xd8\xe4G\xb4\x1d\xe6j\x1a" "\xfd{\x18\x8f@\xbuB\xdcM\xf8\x90\x93\x90\x14\x16\x16~\xa1\x35\xe9\x86\x82J{\xa6\xf8" "\xf7w\xb3\x81u\xb0\x13\xe7\x82\xf7\xa4G\xba\xaf\xfr \x81\xb6\xfe\xe\xe9\xcc\xb6\xe0" "\x4\x19\xc8\xc6\x31\xeb\x61\xae\xe5PHz\xe1Qv\x1e\x7yu\xa3\x18\x15'\x92%\xd5\\\xa4" "\x1\xd7\xb8\x93\x12" "\x3\x39\x6\x39/\r\xc\xd8\xe8s\xe3\xf3\x92\xf7UP\x12\x84^H\x3\x91#\xc0o\x1f\xea\x9b" "\xb0\x32;`\x88+\r\xf4=7\xa3$\xe3\xc6t\xb7\xe4M:\xb1\xf6\xdd\x32\xcf\x9e\x8fqWf\xb6" "\nHZ\x9c\x65\xa9\xc9\x9f\xddZ.\xb3l\x80]\xd5\xb6\xceH\xbc\x0w\x8a\xbe\xb\x46\x8f" "q\x8d\xf9\xbb\xa2\xfc\xce\xa3\x13\xcf\xfcw>5(\x88\x1f\x34\x85?\x82x\xfeu=0\x8/\xfc" "\xc0\xb9\xad\xf7\xb0\x63\xa8p`\xa5\xf8\x9b\xfb\x88|\xeb\xcf\x85\x83\xe7\xa2Pd\x18" "\xcb\xd1\xdf\xd0\x83s\x9dL\xaa\xc0\xf1|A\xae\xa7\xa7/\x8e\x8\n&p\xc7\xe3\x1a\xe8" "H\xcc\xd1\xa5+QE\x14\xdb\x81\xa5\x9d\xc6t\x1aHw\xf4\x95ujD\xb\x81t\x16>p7\xcdP@0" "p=\xe5\x7\x34\x31's\xdd\xc4\x6u\x97\x15\x4N\xcc\xf6Gh\x9cj\xfa\x45\x45\xdc\x62:\xda" "\xba\\\xf8U\x1dt\xb0\x1c\x61\x1e\x8c\x16m\xa2\x46Ns\xa4\xa5\x7]/\x8c\xd7\xfa\xb0" "\x4\x41\xe5-<\xe3\x97`\x12Q\x89|C0\x7f(4\xb9qK\xb6V4\xcf\xa0\xeb\x36'B=\xfd\xf\x82" "N\x89\xeb\xb9\x8fm\xd3\xbd\xafqq\xa4\xd5\xcf\xaa\xbf\xbe^\x8fY\xa2\x33\xd7\xee\x41" "\x9e\xfc\xc5!\xac\x64\xd0}66H\xa3^P\xd8'\x19\xcc=\xb1\\\"\x35^N\xfd\xde\xf{\xbb?" "\xae\x36\x83\x8HjZ=\xa6\x38\x11~\xb5X\xe3\xba\x17HaJ\xd4\x1c\x33\x93\xce\x89\xd5" "\xf8/\r\x80\xaf\x4\xc7\xf9\x13W\x8f\xa4j\xcb\xd5>&\xc4\xf0\xf\xf6\x1c\xa2G\xe5\xef" "\xd4ZU\xa2\xe2\x11\xdd\x10\x8c\xa4\x1c\xc8\x9a\x11\x8a\xd9~c\xca\xbf\xa1\x85\xd2" "\xe5\x33w\xa8\xee\xd6\xf3\xb6\xf9\xd4.M=J\xa4m\xc7_\x8a\x30\x1b\xc7\x35\x9e\xee\xa1" "wB\xce]\x3]\xbd\x46k\x9d\x1q\xdc?\x3w\x2'\xbb=F&>\x96\x88\xe3\xf9\xc5\xfe\x18-\x1c" "\xc0*jj\xb4\x36\xc4\x37_\xfc\xda(\xea<\x9d\x93\xb8\x1c\x3\xc2\\ic\xce'\xa3|\xa2\x81" "\xcaIj(\xa7\xd7(\xda\xa7h\xdf>\xc6\xb2\xe3\x8b\xf6\x11\xc1Q\xbaLVPx<]\xa9)\x12\xd2" "!\x7\x18\xd5p\xbd\xcem6Pb\x97\x89\xc7\x83\xd8\xfa\xc3\x6\x9a\xb6\xaf\xf1J\xc7\x34" "\x4q6S\x1e\x8b\xb2\xcf\x62\x30\x2\xa4]\x2\x9f\x1c~*F\xc2\xa1\x10\x17\x35\xf9?\x8" "\x95\xe0\x7\x8e\x1e\xe3\xc4\xc1m\x91\xc3\xd7\xb0\x89\x41\rX\x4\xcb\x13\xd7\xf4L=" "\xfd\xfSb\xeeXL\xf1\xfa\xcf\xft(G\x15\xfe\x1\x65\xe0\xcf\xfd\x94\xa2\xe1G\x86\xfe" "\xd7\x34O\xce\xad\xac\x96'\xe\"\x92{\x86\xe9o\xe4\xe6\x93y.G\xb7\xcb\xc9\xa0\x9b" "u\xb7\xd6w\x91\xaa\x12\xf0\x33\xa1\xd5\xd2\xe\xbf\x85\xac\x33\x66\x30\xc2\x91\x12" "\x83v\xa1\x87\xccR\xe1\x86\xe9n\x0\x86\x1e/\x17 9Zqur\xe8\xf8\xfe\x93\x9b\x99o\xbd" "~\x3\xb8\xfa\xc7\xfa\xf3\xa9P\xa5)\x99\xa5\xdd\x1e\x7f=\x7\xd8Z\x19\x8cW\xa2\x94" "\xd6\x34\xa5\x8dN_#eY\xc7\x12]\n\xea\xbb\x91\xb0\r\x89\xa9\xc4tc\x92\xe8\x62\xe8" "#\xc1\x7\xfey6\x4\xfe\xd7\xfd\xe\x44$\xd2W\x81=\xdb\x31\x66\xe7\xf7MCot\xe5\xac\x96" "\x14\n\xa7\xd7`\xd5\xff\x43\x98\xf7\xca\x9\x12kw\x97\x99o\n\r4&\x7f\x8dLY\x93>\\" "\xeb\xddSe\x87&G%\x18\x9b\"\xa8\xc8\xacu\x3O\xe3\xf5\x81\x9\x46\x65\x66=\xe8Im\xa0" "\x9bXV\xb7S\x90\x8a\xab\x1a\x32\xa1q&\xfat\x15\x3\x37\xc6R|\xe8\x83\xaf\xe0\x9ai" "\x9eK)\xfc\xd4\xfb\xb3\xc9?J\x8/\xf2\xd0\x19\x61\xa9\x1e\x64\xb6<\xbf\x15\x9a\x16" "\xb9}\x9bs\xb7;\xb9Y!\xc2\xb7\xa5\x18\xe5\xfa\xeb\xca\xee/\xa2\x86<\\q\xa1\xd7\x14" "\xdc\xc1\x30\xc\xa0\xa8\xd8\x17\xd4\x2\x46\xd6$L\x81\x85\xe9\x8e\x95w\xde\x92(\xef\x7Y\xd2" "D\xa4\xf7\xcd\x17\x15\x16\x64\x37\x3\x8dx\x93\xfI-v\xbl\x14;\xa0\x33\xc\xffK8hzR" ":\xd0'U\x11i\xe7\xad\x97\xf6\x91\xafX\xf2\x9d\x9\x87\x88h\x1c\xc2\x82\xa7\xa7\xcf" "\xf8\xc9\x1\x9f\x1\\\xa8\xac\x2\xc4\xcb\x87\xf2\xfa\xf0n?)\x9e\xbd\xff\xc1\x9f\xbd" "/I\xa3\x80\x9c\xcf\x63<\x82\x1f\xdf\x0\x9d\x39\x84v\xc8\x97*\xff\xff\x14\x1b@\xc9" ":\x2\xb9\x8a\x88\xa9lJ4\xfa\x32\x44\x86\x43M\xd4R\xaa\xb4:\xc5\xbd\xb\x11\xce\\#" "\x96\xebg q\xeb\x5\x88{\x9e\xb2\x95\x7m'P\x89\xb4\xdf\x99\xe0\xf8\x37P\xb3\x19\xfa" "\xefV\xe5\xe4\xe4#\xe4\xdf\xd8\xf6p\xe6;\x82\xaam\xc4\x87\x7f\x95\xa5\x7\xb0\xe9" "\xed\xa9S\xb6.}\xf7\x8f\xbcZ\x98@Z>\x8d\x1\x1e\xa3\xc5\x4\xb1\xf7W\x92n\x12\x1b\xef" "W\xeb\xa5\xa9\xbcw\xabNM\x83\xf2@\xba\x1c\x12\xb5\xe0\x95=\xe9\xe0~ \xfa\xc7\x17" "`\x8dG\xc4\xcf!\xd5\xa9\"=Vt?#7b\xacQ\xbd\x8v?8\r\xb3%W\x8c\xbe\x14\xfaY\xe2\xf\xce" "\xe5\xd7P\xect\xa0\xe0{\xb3\r\xa4\x83\xb3\xb\xb9\xd9\xc8?\xfcV\xc8\x46\xe3\xd6\x88" "\xf7\x65\x15K\"M\xfd\x99\x12r\x14\xdc\x32WG\x6\xd6K\xfe!h(\xdd\xb7\xcb\x8c\x5\xc5" "\x1G\x94\x1c\xc9\x0_0?oM\x84\xe7W\xd2 \xf1\xfd\x1e\xa3\xb3\xc2\xce\x8f\x9fo\xbb," "\xe1\x18\x9e\x1e\xd9v\xdc\xab\xeb\xc9y\x1a\xdd.\xb7\x66\x1f$8\x97\xd1@6V\xe8\xd0" "\xc8T\xbf$\xc!\xc3W\xa9\xdf\xd3t\x9f?&\x1a\xaa\xe8}\x97\xb8\x92\xd8:\xcf\x9e\x8c" "x\xe2\x9a\xb2\x3\x36WF\xec\xd2sv\x94]fYN\xc1\xc8\x43\xef\x86~\xec\xef\xd1^\xd6\xb8" "\xcf\xe0;\r\xdc\xdc\x88\x62\xc9\xfa\x4\x87\"\x8fr>K=\x87\x81\xb3\xdf\xb2zd\xec\xc7" "\xc0\x87pH\x85V.\xd0\x41\xcf\xc7\xd2{\x9d\x16j\x8\x8c\xae\xf9\xbbv\xe\xf0\xad\x83" "\xa4iP\xca\x34\xb5\x64%\xc0\x11\x81\x41\x38\xf8\xd8QC\xf2Q\x16]\xec\x6\xdf\x98\x35" "\x9e\xeb\xc8\x90\n\x30\xc2\xa5\x8\x13\x14s\x90\x85\x36^#\xdf\xc8\xab\x95\xc6\xc5" "\x1cr\xd2lo\x83_\xcf\xb1\xfeq\xc6\x14\x31\n\xfb\xad\xd5\xc8\x8d\x17\x8f\x64*\x89" "\x8d\x99\xfd\xd8z[=\xba\x7\xccj5\xee\xa7\x62\x11\x8a\x8e~\x3\xbd\x38\x16\xd7\x34" "\xf3\x66\xaa\x98\x16\x8b\x15s%9\xa3\x8c\x63H\x9b\xb5\xfd%\x12\xa9*\x1\x9a\xabX\xfb" "x\xa9\x1f\x9\xe7\xec\xc7\xff[\x92\x45\xdb,\x12\xb8\xbc%\xb4\x1f]n\xd3\xb7\xd6\xa8" "\x87\x8\xbe<\x8b\xc6\xc0>mJx1[W\xd4\xd2|\x91\xc2\xb7\xad\x8H\xbd-&\xbd_x\xa2\xf1" ":3\xd6\xbz%\xb3^\xc5`.\x81\x14\xd7\xb6V\x9d{D\x15L\xe2\x99\xc\xe9\x9b\x99\xdf\x14" "\x8eJ\n\xfd\x46\xba:g\xcf\x31I\xb0$\xd7W\xeb\xe4i^\xe5g*!Q\xbf&\x1e\xef\xf9\x16Q*\xb5/e`\x1dXr&" "7\xd4\xffg\xa0\x42w\xee~\xf2\xd0\xc9\x9e\xce\xa4\x1e\x63Ui\x95\xa7\xb4\x90\x90\xac" "$4\x8\x5w\xf3\xec\x42Uli\xcd]\xf5M^\x7fJ\xfd\xc3\x92\xc2\xb1\x13\xe5\xf0|\x8b\xb" "!\x8c\x39*\xf8S\xfe\xb3\x96K\xb9\x8e\xa5\xf\x7\x33\xab\x32\x64\xb5\xa2{]\x3\xdf\xf7" "|)&\x99\xa7\x17S\x8dgo\xb9/\xdc\xae\xe1\x66O\xcc\x37\x16\x7f$\xe1\x16i\xb0\xb4?\x4" "\xee\x8f\x8f\x89:\xa7;^\xf8\x45\x9c\x8c\xdb\xff\xcd\xb5\xc7\xd5\x88OGr\xd8\xa4\xb4" "k\x85\x32\x62\xfd\r<\xcb\xb3\xe4\xda@\xd0\x1d\x2\x8f\xcan;\x19\xda\\\x1e\x91\x8c" "\x5\x38\x97\xab\xa5\xbby\xac\xa1\xc6\xf5g\xe8\x99]Fk\xf2\x1d\x61\x61\x81\xdb\xfa" "\xfb\xfe\xb\x97\xa7\xc2\xb3\x66\xcaQC\x8b\xf0\xffw\xa5\xbc\x31(\x14=\xdf\xe7\xd2" "\xecJ<\x1f\xb0\xdfOO[\xf1\xc8'D\xd3u\x84\xb\xc8*\x6\x64\xbe\x0\x80}\xf6[\xe5\x97" "\x8e'\xe9!\x8f\xe4\xcaV\x9c\x13\xd8I0Rv\xcd\x9a\x1\xe9\x12\xf5K\x9\xddJ\xd5\xed\xb0" "\xff\x9f\x84\xe4\xbd\x7f*\x85\xec\x8\x86\x9Qt\xbb\x12S\x9c\x35l\xea\xb0\xfe\xff}" "\xc9\x63\xf4K\xcc\xe\x16\x12\xf7\xde\x9b\xd8\xc0\x97|\xb3]\x87\xb9\xa7_3\xfa\xf6" "\xe\xf8*t\x93\xc0\x92GP\xef\x9a[k\x98\xf9\xbd\xce\x8c@\xd0\xe5\xa6\x10\x62\x9c\x39" "7\xad\x0{\xb3\xb2v\x14K\xb3\xe7~d\x84SQ\x14q12\xc5V}\xd6.\xdc$\x10.Q\xe9\xa0&E\x83" "l_\x94\xb0\xff\x9d\xd9\x66\xa3h\x19\x13\xa8\x12\x9fk\x15\x16HSK\xf5\x36\xee)\x93" "]i\xf2\x8e\r-\xff\x17(b\xbb\x88\x89\xe2\x46p{#]>w\xa3\x8\xfc\x31\xa1_\x84\x9f\xc4" "\xb0\x14V\xa8\xeb&a*\x99tO\x82\xc1\x44\x86$o\x8f\xe4\xe2\x10\xec\xbd\xc1.$\xc8U&" "\xfc=!\xa3\xf3\x5^7\xc0\x97\x86Zt\xc7\x35\xe2\xef\xb2_,\x88\xe6Ti\xbf\x66\xa8L\x80" "\x3\\\n\xcc?\x81\xd2\xcc}\xe1\x85\xe5T\x88\xc0\x14N\xd6\x8d\xf3\xee\xfa\x17\x1a\x34" "\x81\x7f\xf8r\x93\xca-\xe4\xf8>\\\x80\x1a\xfb\xdc\x43\x9a\xce\x43\xc4`\xe9\xa0vj" "\xc6_p\xbe\xf\x19(v\xd7\x88tU\x86\x35\xe1H$\xbc\xeb\x45=.\x87\x39\xd9\xbdW\xa4\xd6" "\x85\rm\xd5\xcf\x38\xde\xce\xc1\x9\x81\x39\x82\xa1+\xe3\"\x7\xfe\x1\xb4&\x8b\x80" "\xc5\xc4t\xb6\x4\xc0\x12\x1ep\xc6\x34\x43\xb5Q<\xe1\xa1\x1c\xd0\xcf\x9\x37I\xcd\xca" "\x15\xfx\xcf\x1a\x85\xf7\x5\xd8\xe8\r\xaf=\xfa\xb\xc3*\xc3\x89\xd5\xf5\xc7\xd6:\xac" "\x7\xc1$\x8\xc7\x9b=j\x5\x8\xf7\xc9\x36\x12\xb7\x99\xa4\xc7\x97\x9\x81_\xe9\xc1\x7" "\xa4\xdbm\x8c\xd9\x11\xcbvt\xf3Nv\xc\n\x89\x17\x1\x19I\xaa\xf0\xc7@\xf1\x39)\xce" "\x1b-6C\x83w{\xe3\xb7\xb8\x34}\xd9\x37\x45V\x82\x1b\x92\x37\x8=`t\x10P+\x1f\x12\x8d" "\x87L\x1d\xfbo\xc1\xcf\xa6\xd5\xbc\x1\xccv~4\x11\xe1\xa8}\xa4\xe9!\xe0\x64\xeaX\xfc" "\xad\x3^Tp\xf3\x92\xc3\xb6\xc7\xb7\x6\xf7ZW&\xe5\x16\xe2\xbc\x7k\xcf\xb3\x6w\x85" "6\xe2|\x93\xa9\xdc\xd0o\xde\x1f\x88\x3\xc5\xf\xf7\xcft\xee\x89\xe9\xd3\x4\xe6\x9c" "r\xc3\xe3\r\xdeq\x4\xb2#\xd8\x12\x4\xf3\xf6\xaf\x64\x66\xbd=\xec\xfb\x7\xfc\xa0\x65" "\x6\xc9\xd1\xc8!\xc0\xd1\xb6\xba\x8e\x35\x0\x1a\x38:\x90\xeb\x46\xa5\xc3\x8e\x81" "\xf3\xc5@1\xdeo\x5\x30O\xb5\xd1\x36\xb9\xf8\x64\xd9,\x14\x46#\xea\xc6\x7\x30\x14" "\xd8\x6\xe1\xee\xb5H0\xa5\xe0\xce\xe3\xd3\x1c\xcd\xa9\x33\xe9\xb8\xa3t\x1a\x80<7" "\xe\xf9\xe1\x38\x16<\x8a\x8e\xedX\x15\x97\x86\xe5\x1d\n\x9f^\xb2_U\xdcJA\xf3X\x18" "\x9dR[/0L\x12\xe2\xb9\xa6U\x89\xa7\x9Jf\xf9\x62^#\x8p\xce\x65[K\xf5?c\xa4\x8c\x95" "$a\x1\xf\x94\xe3\xe6\x96\x1\x83\x14\x98\x64\x15\x3\xa8\xbf'\x8a\xf\xa5\xec\x9\xba\x9dg\xfb\x63 \x8d\xae)\xbe\r\x3\\o+\x82\xd0go\x11\xd1" "\xfc\x1bZ1\xf6\xe3\xbd<\xc3\xf4\xe0+|\xfb\x32\xafg21\x16*LU\xc7\xef~\x6\xb3\x80\x91" "d3\xb\xc4\xa2\xba\xaa\xb3\xec\x8\x45\xe5O\xd9=\xc6\x0\xae\xae\xe5\x8f\xf3\xe\xbf" "\xa0o\xf0\nz\xbbU\x94\x63\x91\xd3\xf4\x7\x96!\xe0\x14\xb6\xb\xe6\x9d;d\x12\xdc\x8b" "\x8c\"\xd3\x64\x35\x33\x63ve\xf1\x17\x37\x81\x95k\x15k\xb6\xbc\x1e\x7[\xbf\x5g\x1f\xfd\xbe\xeb\x2\x0\xa3\x8b\xd2G`\xcf\x83q\x80" "\xa8X\xe9-\xb8\xb5\x1f,\x84vRu\xb1`\x18\x8b\xf3\xdc\xb5\xe3\x84\xdf\x82\x8c\xcd\x9a" "V\x1\xda\xec\xc6j\xc1\xb2\x92\x38\x15\x7f\xf0\xf3K\xed\xd7\x18\xec\x8a,%\xb6/B\xef" "\x7f\x44\x44\xccv\x8d#\xb4\x10\x87\xc9\xc9\x1bYC%0\x1\x42&K\xd5\xc4\x38i\xb4\xe3" "\x1e\xb7&\xc6\x15\xa5\x9foVM\x95\x19\x4\x66\x10*}fJ\x9d\x1cw\rl\xf\xa2\xdd\xc5\xb9" "\xaa,\x87\xf1\xd0\xb0N\x8a\x39\x8c[\xda\xab\x96\x90\xed\xb2PidD\x87\xb7\x86\xa6\x16" "\xa4T>M\x90\xfc\xcc:\x87\xc1(&\xf7:\xdc\x34.\xbe^\\H\x19_ok\xa5\x10h!\xc8\xc4\x8e" "\xda\xd0\xa4\xcd\xf4\xb9\xcc\xbb\xdf\xb6\xcah\xc0VlF7\xc4\x39\x8f\xc7\xaaN\xb7,c" "\xbf\xb4\x1bv\xe8.9\xa8\x13\xfcH\x91\xb4\x9e\x8b\xfaq\xc2V\xcfKO.\xa5O\x93\x32N^" "WV\x9\xd4%h+\x14y\xf1\xdbM\x90\x9f[\x9c\r(\xc9\x62@0\xe3\xfdO\x11\x35g\xf9\x64\xdc" "\xaa\xb8\xb\x89\x19\x8co\x7f\x61\x95\xe5><\xc9\xceH\x8b\x63\xd7\x92)\x9c\x17\xc9" "\xea`D\xd7\xf7QQ9\x8b\x14\xa6R\xa1\x94\xc8\x81\x9f\xd1\xd4\xc3}\xf6\x44q\xdb\x13" "\xf2L3\xe3\x8f\xd4\x1a\x96]\xea|V\xf5l|\x91T\xc2?\x90\x38\x16\xd2\x19\x12\x6\xa2" "\x7f\x4\xc2\x18!\x9fQ\x85\xa3\x83\x32\x96\xc2T\xd4\xe3\xc3,\x1e\xec\x1e\xbd\x1c\x9f" "\xb5\x81\xd1\xce\x1e\x8\xdd{pn\xb7\xb7\x1\xed\x9e\xb3\x1a\xeb\\\x45\x1d,BQ\xe3\xb4" "I\xd3\xc1\"\xac\x16\xb8#L>\xeb\x1d\x13\xb6\xa7\xdbTVg\xb8\xba=\x16\x46\x14k}\xc4" "T\x99*\xe2^\xc3\xc4\x99\xbf\r\xf1\xfe]\xae\x3\xe8\x1f\xf8\xebj\xe4\x31\xe\x1d.\xe" "\xd3\x30\xab\x8cy\xe3 \xb1\x41\xea\xa1j\x16\xc4\xab\x94\xc1\x1b(yp$q\x99\x86\xa2" "\x9d<+\x12\x95\xf2\x38\xc3\xb9y?\x96\xf5\xca* \xc9\x14\x8dy$Q_\x11\x96~\xe1\xa5\x98" "e\x91\x43\xd4\"\xf9\x39\x65\xfcv\xac\xf1\xc4\x4\xbd\x87R\x2_\x13`/\xfa\xbd\xe7S\x1c" "\xdd\xba\xd9\xa5\xaf^\x92\x1a\x11\xe9N\x94\xa4P\xe0!\x1b-,\xf:7\xc2\xdd\x43\x41P" "TIEt\x4\x91!(n\x13\xfe\xaaV\x8.\xd4\x8d\xc2-E\x80y\x1a\xfe\x92i\x85\x2\xbdW\xa5\x98" "9\xe0\xc3\x16Gk2\x83\x8c\xcd\x1b\xd6\x85\x62\xae\xe7\xa5G\xa5\xc2\x92\x88\xc6(^\xf4" "\xa4\x96\xb7\xa8&~\xc8\xf6]Mz7\x1\xcd\xb7$\x98\xe9\xe0\x6\xbO\x17\xe3kq\xa4\xc8\xcf" "\xba\xf4\x92\x14\x8a\x9f\x62\x8q\xb9:d\x0\x64#\xb9io\x17\x8e-,Q\xf8\xf0\xd3\xa7`" "\xa9M\x18\x83\xa4\x38;)\xc0\x41\xfb\xc0\x90\xcdgS\x11u&Ij,\xc9\xfd/r\xb4\xfd\x2\xe8" "?]\xa8,T\\Sn\xef\x8\xef\x88\xf3`\x7f]2\x85\x35\xbb\x11\x83)\x1f\"\x5\xde\xd2\x88" "oS\x92\xe5J\xf3\xeb$\xb2\x36m\x96\xb\x1bTm\x7f\n{}iU\x84\xe\xaf\xc8\xc2H\x1d\xc6" "\xf@E\xe6\xfav(\xeb\x8f;\x97\xd4)\xf5\xaf\xa5I,\xb0\x9c\xca\xef\xf0\x13\xe6\x8c\x98" "\xa6T x\xfa\xdf\x43\x9f\xfe\xf7\xc3\xce%\xa1S\xf7;\x9a\xe3\xd1KV\x92\xf2.wd\x5\n" "\xfZxR\xea\x0\x37P\x93\xd4\x97\xfe\xf4\x9d\x30\xe2mmG\xf7\x39\xae.u\xed\xc2\xc2w" "a\x17\x32\xc8\x14\x44\xf9\x43N\xd8\x97\x43\xa3\xb4\x11kCm\xd8\xd2\x42\"\x45" "/\xed.\x81\x8e>W\r\xa2\xc7{\xf0\xf5\xdf/\x18\xcdk{h\xb3O\xd5\xc1\xf7\xe4\xab\xc9j\xc6\x81\x1b}Y\xc\x3\xa1\xaf" "\xbc\x32\x8e{m\xad\x7f=\xeeg\x1a\xb1\xcf!1SUz\"\xf5\xe4{{\x1\xb1\x90\x9f%\x19\x89" "\x9fO\xbf(6\x14\x13\x1\xfd\xd8\x9c\x93\xec\x35\xaeQ{]\x16\xc8\x90\xfe\xbg\x3Y]z\x9d" "\xc1\xa3\x62\xf0\xa9\x14\xe4\xbe+\x9i\xdb.t%\x17\xcrTd?\x98\xee\xc9Q\xd8\x1cvS\xcb" "\x1f\x7fM\xea\xea\xb1}\x9d\x61Z\xea\xf0\xa8\xf\x83/)\xf6\xfc\xea\xf9W#\x6\x93\xf4" "m\xd6\x36\x2\xab\xd0\xb0\xd2\xcf\xf4\xb1Ri7\xe3\xa3\xc8T\x92\xfa\x65\xee\x11\xa8" "\xa1n\x94\x1c\xd7N\x9dP\xc9\xeaG\x8d\x17\xb7\x95\n\x30\xb3\x46\x7f/\x5\x6\x1d\xed" "\xbbq\xc8S\xd9\xc3=\x8\nk\x1a\x85mB\x91\xb5\xd1<\xe0\x15\xd8L%]\x1f\x43)\xfe\x92" "\xc8\x14R\xf4\\\x9d\xbf\x66^\xbcg\xd3\xc9\xd2\xbcnO\xe4'cUO7\x19\x98x~\x5Gz\xac\x65" "*5'_\x9e\xaa#\xf0\xf9_\xb3q\xe7X\xacs\xd2\xd6\x7\xc1\xac\x8c\x46\xc6\xce`ZfW\xfe" "\x91\x2\x44\xa8\xdc\x8a=\xfc\xba\xfc'[\xa9\x8\x84\x84T\xd5\xd2\x1a:d'\xd6\xa7\xe3" "\x90\x16\xebY\xbc\xd7\x16\xca\xae\x8a\x64\x2\xbc\xd7\xb0K\xafV\xfe\xff\x7\x1b\xd8" "\xce\xe8\x2\xad\x8a\xf\x6~\xd0\x1c\xa9\x45\x38:\xc8\x97\x80\x16\xf0.\x2w\x17\x87" "\x12\xe9P\x13\xb0\xc0\xf4\x94\x98\x8bM)\x18\x87Z\xd6*V\x86\xb4K<\xdf\x32\x92Jm\xea" "[E53\x18=\xd5\x98\xec\x37\xfa\x8b\x63\x38]\x88\x98gJ\xe5l,R\x8a>c\rF\xfc\x94R\x84" "\xe3/7\xb1\x9b\x8d\x92\xac\xc7\xbb\x83_\x9d\xcbo)\xe6\xb7\x94\x3\xeUj\x80\x42\x15" "\xfd_)d\x8\xf6\x80w#L\x13\x1e\x5\x98h\x98&\xabU&'\xaa\x7f\xdf\x15~T\xeb\x91 \xa9" "\x13\xef\x18\\\xcc\xdf\x94\xd3\xd2\x88V\xa8\xfdl\xea\xc3Q\x95oV\x80\x9b\x3\x35\xb6" "\xd8\x8b_w\x99\x6\xca\xe6\xbe{<\x89\x18KKj\xa6\xb6\x82\x98\xe0\x36\x4\xad+=\x19-" "\x95\x1d\xd7w!m\x9c=Y]\xf8%\xf5\x1a\x0\x18#og\xbc\x10\x36\xbeW.\x8\x83\xd7/\xd4~" "@:Y\xcd\x15\xf1sZ\x91\x41\xbf$\x94\xcd{.\xa8>X\xf7\x7(\x92\n\x9c\xc2o\xc3Z'\x16P" "$\x89\x9a\x4\xce\xfd\xb0\xf0\x89p\xb8\x97\x87\xf9\xdc\xda\xcc\xa8\x4\xf6\xdf\xd7" "\\\xcc\xe5\xc6\x34\x16\xaa\x37r\xf8.\xaa\x8c\xf8\x15\x33\xe\x46+\xe4\xa7?\xe4\x9" "@\x8 A\xb6\xaa\xdc\xcdx\xb7\xa7z\xd7\xe3v\x9f\xf5\x0\x64\x14\x8\x9\xa8\x99O\x97\xe" "\x83JvBN_L\xf4\x65\xb8\r\x15J\x80\r\x7f#\x8d\x3V\xd2<\xe1\xcc\x19\xddH[~\xccS\x8e" "T\x15\xddW\x8f\x8d\xe8\x15\x42\x65:\x1e\xeaJ\xc0\x9^\x1f\xbd\x35r~F\xaeg\xf0\xa3" "+Fm\xb8g {+\xa3\x93\x9cl~\x92\x87_\xf\x80\xcd\xed\xe6G\xbb\n\x9e\x14|\xe7\x1\x36" "F\x8b\x2\xbc\xf3\xce}\x9c\x9-\xfaH;\x80\xabO\xc3z\x13(O\x3\xf6\xf0\x9\xd9\x8a\xbc" "?x\xd3\x93\xb1\xf3\xa4W\xac\xd3\xacL\xed;\xbc\xe0\xe7\xfe\x85Y\xda\xcb\x9d\xdc\xb0" "\x99\xc3\xe6\xbe\xd9\xa3R\xae\x92:\xba`C\x1an\x2\x9I\x9fH.!\xe5\xe5\xd5\xee\x94\xc0" "\xa4j6\x87W\xdblS\x9a\x64\x93\xdd\x14r\xd1j\xa8\x9e\x36&\xc5\x42\xf4@\xe8Y\x9aJ\xfa" "\xeb\x97{D\xea\xea@\xa4\x8d\xef\x1f\xd1\x1a\n\x87U\xcdR\xbd\x84" "ts\xb6P\xc6t\xe7\xbc\xd4\x1\x35\xab\xbcS2\xab\xea\xa1\xd8\x61\xa0\x36\x7fsK\xb4}" "|\r\xb0\x5T\xfe\x84\xe2O\xde*+\xc4\x98\xd2t\xad\xc1\xd9z\xfdx\x1c\x96\x2\x81x\x98" "2\xdfZ\xe5\xe1\x81\xfd\xd8\x37\xe5\x13\xb7\xd3\x4\xb7\xf8\xf0\xe5\xc8\x97\xb2?\xc7" "\xb2\xda\xff\x9e\xdd\xd5[~\xffk1\x1e:\x4\xc0\xac\x8a\xcd\xba\xddw\x14#xj\xf0\x83" "\xe4\x45\xc2/\xca\xd3\x7f\xc4\x98\xad}t\xbd[~A\xb3\xb7<\xc1\xa7!\x9\x9\xe7\x66\x18" "\x1b\xccU\x88\xfa\x1c<\xd6\xbf\xcd\xa4I\xc5G\xb8\xa5\xcfR\xd9\xd7P\x9b\x65\xb5\xaf" "+\xdcsd\xc2\xfe\x10\xf1w\xe\xb1\xc\x14\x98\xd0\x82\x9\xbb,\xb6\xfbj\xfd\x8b\x62\x84" ")\xd3\xcd\x44\x86\x97\xedh\xb3:l>\xc0\x1a\xfb\xcc\xb5<\xe7\x35N\xad\xb6:&\xbbK\xa0" "\x1b\xbb\xef\xbc\rQ3e\xf6\x34\xa8\x96.\xf0\xdb\x61\x8e\xee\xdfV\x14\xdf\xe5\x85\x19" "\xdft\xcck\xbe\xf\xde\xadu\xde;\xccQ\x12?\x9\x39\x92\xc9\xc3\xda\xd9M\x94'\xfd\x13" "\xdc\x16\x1e\xfbH\x14\x7f$\xbe\xb9\xcc*8{\xd2#\x9e\xdb\xf1\xaf\x9b\xb0n\xb7\x84\xe" "\x14>\xb8\xf0\xaap\xb7$\xc2n\xe6\xb3\x62\xf9\xf9\xa1jF\x9b\xbfKu.\x10T\xb9\xa0Jg" "\xc7\x8dy\xd3\xc{:\xdc\xab`\xad\n\x9a\x89\r\xb0=\x94\x6t\xebx\xbb\x45&\xb5zJj\xd6" "\xbd'W\x96\xdc\x82\xa1\x97Ls\x1\xcd\x33\xf1\xe2+\x9\nr\xa8\x11\x46\xc8\x38\x46\xd3" "\xd4\x13\x13\xe2\x6\xf9\x32\xb7@\x94\xc5z_\x86z\x18#O\xc2\xb\xf1-\xf6?\x1\xa5\xd5" "\xde\x38\x18\xe4s\xe0|\xcdp\x1e\xbe\n\xfeX\x80@\xeb\x9d\x8b\xcc\xcf\x8\xac\x5nW\xbe" "\xc6\x82\x96\xdc\x8e\xd0\x9b\x44\x16}\xa9\xef\xe2\x11\xff\xa4\x88\x45\xc0\xa7\xff" "\xb7T\r\xd3\xdau\xea\x81\xf7W\xdb\x43\xe3\xc9\xb1\xa1G\x93\xde\xa9\xd5\xaa\x93\xef" "*u)\x8c\xbd\xc8RM\x89\xc3\x9b\x10\xee$\xbe\x83\xc2\xci\xc5\xd2\xbb\xf5\xd6\xf6\xb2" "\x9dKMF~\x1\xb4\xeb\xb3\xc6+&\x7o\xe4\xb0\xc4\xc6\x64\x96@\xba>A\x8f\x7f\"{\x88;" "\xec!$\x99vhD^\xb4\x35w9\xb5\x91\xf1!D\xfc\x38\xdck\x8a\xb0\x7f\x7f\x85rh\x87&\xbf" "u\xe\x91\xedU\x93\xd1W\x9d\x12\xb4h\xa7\xeeRc\xe2\xbe\xb4\x66\xf7\x64\xa1\xa6\xae" "P_\xbb\x44_\x18\x7f\x39,\xf0U\x9c\x36\x9a\x6\xbe\xe2\xb0\x88o\x93\xfb\xcM\x9f\x84" "\x8b\x7f\x11\xc1\xda\xc3h.\xa0\x37\xb9 \xca\xc2\x97{`\xe5\x96\xfb\xca\xdf[\x8c\xcd" "\x90\xc0\x89\xd5\x86\xcd\xc8;\x0\xc4\n\xec\xf3/\xf1&\xbdO\xd8\x81\x42\xed\xf4-\xd2" "N\xfa+\x95j+I%U!`\xd8\xb2\x35\x15\xde\xe4\xae\x44\x33\xe7(u\xd0\x38h\xbf\x87\x63" "\xd7\xc4\xe8\x9f~\xc0sz\xca>\x85\xed\xb9\xcf\xe\"\x19i%uC\x2\xd5\xfc<\xd7Gw\x9f\xd1" "\xc9\xc5LX\xcf\x7f\xca\xdd\xfd\x93\x89\xf8\xf9tu-of\xb5>j\xc3\x8c\xaaS\x89\x19\x1e" "v\xa5\x5_ox\r*\xa7\xf5\xfdp\xb8\xfa\xf5\x64\xe6\xaf\x38& I\x4\xd9\xb7\x1b\xec\x11" "W\xfb\xe\x1d\x18\xe3\xdah(\x12\xba\xb3\x37\xa8\xc1\x45\xd6\x94\xa2\xc9:\x9exn\xe8" "\xfa\xf8\xc5}*\xc8\xf9\x9c\x7f\xe1\x8\x35\x46R\xa6\xd0\xa6\x9b\xc3\x44\xd6`\xce\xfd" "pg\x17\xab\x8a\xa5\x1\x81\xe0\x8b\xc5\x85/s\x9\x9dO[\xcc\xc\x46\xa8\xe1\xdd\xd0\x13" "\xec\x62\xa2\xa7\xb0\x83\x9dM\xe6\\U\x83\xe4\xe3\xee\xc1\xdd\x42n8\x8f\xad\x89!\x98" "\x8f\x9cZ\xdb\xde^=0R\x80\x35\xc7G'g\x9a&\nl\x3\x90\xach\xa8\xf0\xa6\x8a\xbb\xa1" "\x95\xb6?\xbem=\xdb\xf8\xfc'S\xa7\x13\x9\xbb\x7f\x18&L\xf3\xdcG\xe7\xfe\xaf \xd6" "\x83\xa2k\xbd\x62\xed+\x9e\xd3\xa5\xb6\x8aJ\xa3@\r\xd1\x6i\xb2\x1a\x1b\xbfi\xb2\x89" "\x90\x3\xb3\xbc{\xe1Tg\xdc\xe6\xe+\xa5\x7fQ\\Bt\x98\xe\xc7\xaa@\xf2\xd2U\x6\xa0\x2" "\x1\x99\xf1N@\xc\xed\xb9X5\x18\xe0\xcf\xf7\xf2\xb3\xac\xbw\xcaP\xa7L \xd2\x8d\xff" "\xd9\x86\x0\xc7\"\xefzf\\K^P\x8b\xa6ZH\x9b\xfe\xbf\xc1\x5\xc3\xc0qUT2\xcf\xbd\x66" "Zh\xad^\xda\xb1>I\xb6\xeb.'\xb9\x89\x89\x64\xb0\\\xc2\x90\x64\x97\xaa\xd7\x89\xca" "\x8e\xe0\xb8\xb4w6\xd2\x98>~2l\xeb\xef*n\xa3'\xd3\xab\xd5\xcd-~\x9a\x62\xa2\x1)\xae" ">K\xa0\xc7\xcf\n\x92\x42\xb0.\x95W\xb6~\xa9G\xedwQ-f\xd8\x8b\x82\xec\xe6'(r \xdb" "2\x82\xe6\x11\x38m\x8e\x94\xfd_\xb2\x84\xf1\xcfQ\xd6\xfe{\xa5\x34$x\x8\xabu\xe\x41" "\xb7y\x97\xbb\xf5L\x13\xb4y\xefR\xfe\xd7\x1e\xe1\xce\xe4\xa8\x89\x12y\xb4\x5\xe\x8f" "\x81/K \x7 |g|\xbd\xcd\x1c\xc1\xd0\x37\xe8@8}\xee\xd9\x7f!\x4\x1f\xc7\x8aR\xcfp\"" "o\x90\xec\xc2\x8fH\xee\xa5I\x97w\x86\xa0\x2\xe1L\xeb;r^\xa9\x38\xd6>u\xaa\xf7\x7" "2P\xfct\xb3)\x10{\xfe\x34\xab\xcc\x96$\xae\xb7\x82M[\nk[^\x9a\x19\x37\x44\x63\xc7" "}\x9c\xbb\xaf\xb9\xcK\xd8\x11\x1d\x66\x1e\xb3\xad\xac\xcc\xeb\xf9\x95\xa4\n\x96\xa6" "\x1f\xe\xbd\xfe\xd4W\x87\xfe\x1ej\x4T\x95\xf0nB\x16\x7fW\x1e\xbb\xdcS\xa4'\xf1\xd6" "\xc5\xa5\x97`\xfd\x14J\x14oxO\xbd\x87\xee\x93\"\xb8\x96\xa3\xec.}AW\x9c,\xeaP}UH" ";/\"\x8a/gs,\xf3<:\x1b\x31\xda\x9c\xcd\x8fz\xf8\x84\\\xf7\x8d\x9f\x94\xdd\xb8JAQ" "\xee\xa1\xad\x17;q7\x15\x17;\xf1k\x8cl\xe7\x1e\xc6\xef\x33\xec\xb9TDT'-br\xbf\x41" "\xda\xc1\xb3\xba[\xc1\x34\x82}\x4\xe1\xdb\n\xbcSj\xfc|\xfag\x1Y\x6\x38\xa8\x0g\xbb" "U\xeag\x9b\x87\x19\xe3\x30\x84\x94Sm\x9dK\x9\x44~t\xfGF\xe7\xc6\xe6\xb2\x0\x9b:&" "\xdd\x94\x94\xd1\xc9\xbK\xa2p\x8eV\xc\xd6/\x81u-\x2-\xf2\xbc\x8aT\xe4\x2I\xffr\xc6" "\xcf\x88\x91\xd1\x4\xf8\x83wz\xd1\x64\x86\x45\xc4\xfb\xac\x33\x45\xb2\n\xb9\xc4L" ":\xfe\xde\xe6\xa7\xb6\xc5\x9a\x8d\xf8\xca\xa9\xa3\x9c\xbb\xe6\xca\xe0\x32\xe5\xaf" "\x88\x9a\xd1`\xce\xbd|\x8c\xc0\x7\x1\xd9\xf3\x32\x45Q%E8v[\x2\xb0\xbc\xc0Q\x1d\xd9" "g\x86\x17k \xc5\xea?Z_\xc8\xb1\xc5M\xd9\x38V\xc5\x91?\xfb\xd2\xa8\x9c\x9c\xc7XL\xbb" "\x93\x19\xd4\x38+\x9b\xe2\xc5\xb0\xd2\x1\x2\x84'\xect\xe9\xe0\x1eK\x4\xa6\xbb\x8f" "\xe4\x39!\x97&\xca\xe7*\x9d\x41\xa4\xb\x32\xd5\xad\xa6#\xe4zDXz\x6Re\xaa\x87\xd5" "D\x83\xfb\xe\x96\xd4\xa5\xd2\xbd\x7|Lr\xffs\xe8\xd6`XHQ\x7JN*d\x1e\xe4O\xcdN\xfb" "X\xebj\xd6\xe0\x7\xe\xc1\x63\xcd\xb2\xf0\xafZ\xf0\xbeK\xdai\xbcx|;?\x1a!\xf1l\x13" "\xb3\x61\x62\x1fo\x10\xc1\x9e\x90\x9a\x43\xae\xb1\xbc\xdbg|\xefk\xc7\x45\x35\x97" "\xa1\xf2\rsT\xc4\x31\x38\xec\x2\xca\xfb\xc3\xdd\xd8%\x85\xc1H.\xc7.^\x5%/\xa1\xa8" "#\xaf\x81\x1e'X\x15:\x11'\xf6kL]7\xd5\x8cS\xf5\x15)\x14\xec\x95\x81\x31\x3\x45\xa9" "cC\xe5\xc7k\xe3\xcbJ\x4\x13=\x10\x12\x82\xd4\x31\x9e\xf3\xb6\x8b\x2\x96}\xf9\xfd" "q\x1f\x61\x97\xa6\xae'\x82\x39\xca*\xf8@L\xd0&\xca\x85\xcd\xce\xd7\xa0\xd5\xc1\x8f" "\xf1i\xda\xcc\x89\xe1\xd1\xbc\x9\xf0\xbc\x30\xe4\xc;\xb9\xa2\x65\xf3\x36\xcd\x65" "\xa8ol3\x5\xa1i\"\x81\xf8\x38p\xf9.\xed.\xef\x32\xcb\x15\xbf\xc2\xd2\xbd\x9d\x7\xa6" "/\xaaoDg\\\xdd\xe0\x10]\xc9\x17\x43\xc6\xdf\x86h\xa0@\x1cTV\x7\x1b>1\xac\xb9`\xb2" "\x97N\x98\xf8(\xabz\xf9|\x93\x86\x3\x8fv\x86\xea\xd0\xe\xf\x9dl\xc6<\\\xcc@@v=\xd6" "\xaa\xd3\xcb}\\4\xc\x36\"^S$\xa2\xa7\xdf\x82\xc1p\x9d\x96\xcd\xc2$m\x4o\x83\x34{" "C\xff\xcezI\x8d_\x4\xb4\xc\x62\x87\xc8Gv&\xfa\x35\xf5\x61\xcbPP^\xe6\x91\x44\xae" "6p\x81\x9a\xb8\xc9N\x1a\xbf\x95\xd3;\x83i\xc7\xa6\xbfId\xa7\xfa\x1a\x9d\xb6\xf2$" "\x9f\xbb\xa5\xf0\xf2!\xc0\xc1\xc8\x80\x98\xf\xa1\xb4\xb0\xe0t\xf2\xa8P\xe3\xc2\xdf" "m\x18\x1d\x14W\xed\x36\xa9\xc1Xxc'\xb\xbb\x16\x15\xae\xef\x37\x95\xc6\x9d\xe5wD\xaa" "ma\x91\xdf\xc5\x3&\xd7\xae\xe4\x10Q-\xd0<\xe|&h\x2\x4\x80\x35V\x96\xb2\xf5\xfb\xbb" "xCj]lF*\xa1\x96\xa7\xdc\x33\"\xd5w\x84\x7\xda\x44\xf7\xc5\x94\xa3\xf5\x86S\xad\x83" "a?\xbfq\x6\x1b\x33\xe8/\xaa-\x99+\xca\x1d?.&\xbb\xe4\xdb\x3\xea\x92Ut:\x82]\xea\x36" "{z\xa6u\xf5\x36\xba\xc2\xcb\xe0\x31RcV\x0}\xc9\xb9\xedO\x96w\x9b;\xcaqs\xc0s\xff" "]\x14\xa1\x35\xaaT\xfb\x35\xe5L\xfey\x7u\xf7N\x83\xa0\x84\x86\xe7y\xa1/\xc0\x34\xc" "l[\xcd\x80\xfd\x14\xa5\xb5$\xad\xfbp\xb7;\x5i\xb5\xe8!OX\x87pm\xd9.\xd4\x0\x8em\x5" "*\x81\x30\x19L\x1a\xe8\x1\xdd\x11-/C\xef\xc9\x11\xbd\x9cse\xf\x37\x5\x31u\xee\x62" "*\x85\x9b\xbcL\xad\xf4\xee\xa3\x41j\xf0`o\xfe\xc9R\x1c\xa8\x8f\x82\x2g\xa6Q\x8f\x84" "\x4\x36\"G\x13.a\x99Y[d\x90<\x5\xa9n\xa7=b)\x14n\xf8\xf2\x8f\x9a[\x1dxV\xf7\xaf+" "\xdb\x13X2.\xf3\xaa\x8b\xcf\x39\xd9\x98\x38\xc8\x80\x0\xbe\x98\x30\x85!\x9\x84\xcd" "r\xa0q\xbe\xd3\x7/\xb2\xd9\x3O\xf9\x41\x39\xd5\xee\x87\xb5\xe2N\xc\x7\x6\x94}\xb" "$\xaeJx\x94\xf\x1cM\xfdt\xb1\x7w$V\nZ\xf1-h\xcfP\xec%\x82\xf1n\xbc\xcf\x10\xb6\r" "\xf8\x98g\xbe\xad\xe6:\xf0^9\xd8\xe3rp\x12\xa9\x98>\xc6\"\x7R\xcb\xbf\xa6R!Z\xa6" "\x83\x8e\x8e\"m\xbb" "P\x88\xba\xe0\xaah\xab\xa1\xc9\x8a\x9eP\xa3)c\xd6J\xf5\xf6\xc5&/\xaf\xa9\xf6\xdf" "FF\xb9Z\x1f\xce\xe4\xb9\x18\r>o^\x8d\xd9\x41\xeb\x8a\x39\xbev\x84\x13X\xf4 f9&7G" "\xbc~2\x91z\x5\xa0\x15\x9f\r<\xaa\xc9n\xfe\xa0\x31\xfe\xd7\xd2\xa1\x7\xcb\xa1\x8e" "\x10XZ\xff\xdc(\xaf\xbf \xe0\x61\x19\x93\xd5\x12\xdf$\xaa:\x3\xc\x15\xf3;:3D\xe9\x0\xdd\xd8\xbc\xd4\xaf\x91\xd2\x6\xee\xc3\xafI\xc0/\xd0\xdc\x43" "j\xaf\xdb\xde\x33\xb9n\xf2Oz\xaa\xe7\xd9-\x1b\x8aG9k\xb0\xe1\x30\x45\xfdS`\xdb\xd9" "\xbc\x95\"m*\x9&%\xbe\x1{\xb4\x8\xc8\x7f\xb1\x63\x32n4\x18\x14\xa2zy\x81h\xa7\xbe" ">\x4\x38u)\x17\x45\"+\x15\xad\x19\xfb-\xc1\xcb\xeev\x9e\xa8\xd2/\xe8\x6\xcc\x6\x17" "O\xa4\x82\x35:\xe4S\xe7\x9a\x61\xd2\xde\x96\xa2\xe6\xf3i\x1es&\x1b\x46\xd3\x30\xd0" "\xbaxH\x12\x9e\x8e\xa2\xf8\xc2\xc9\xe2\xd2\xfd\xa6\x3\xd8 D\x92\xb\xe6\xf5'i\xf8" "\xc5\xf3@c\xccw\xdd\x8aS\x98\xe2\x80\x7z\xc3\x9a\xb6\x35\x18\x90\x41k8\xfe\xb9P{" "\x8e&}5@\xf1\xce\xe9\xb4\x95\xfb\xfb\xd9G\xba\xaf\x8f\x93\x0\x5\xdd\xd2T?\x96T\x18" "[\x9fN;\xf3\xc5}\x81xc\x8b\xc4=\xf7\x7W\xd7\x1b\xc3\xe\x82\x9e\xcel\xf\x95\x42r\xe8" "\x2g\xfb\x9\xdc\x85+L\x19\xc0\x36\xe3\xb3\xe0\x99y(\x91\xa3\xd6\x85\xdfKGg(\xe2\xa4" "\x9dW\xd3\xc7\x36)\xda\x99\x3\x1e\xe0\xd5\x13y\xea\x63\x92$0`\x12\x90\xc6\x94\xb8" "d\x6\x31\xb9\xe8}`}\x7\xc7x\xbe%\x81\xf\xe1%\xb5Gk\x96\xb0\x1d\xdb\x30\xde\x8d\xb7" "N\x90=\xd2\x34y\xa3X\x1b\xc1\xb9\x30\xdb\x9aj9\xdb\x65\xe5\xe8\x8f\x35te\xde\xc<" "\x99^{O\x96\xbf\x99\xba\x99\xa2\xc?\x1f^\xd1\x87~\xf9uF\x97\x1e\xbe\x82|J#,\xc2\xb" "&\"\xe8U6\x99\x3\x6\x1a\xc7\xfao\x7\xf6=\x81\xf2\xa9\x42\xb3\x1c\xfd\xcdQ\x13G\x1f" "\x6\x9c\xea@\xbf%\xf7\x31\x9d-I\x80G\x6n\xf0\xaf\xb2 \xfe\x1b\x14\xf8\xf4\x87\x61" "\xf2\x94\x35\xc7\x42[v\x84\xd4P\xd5\xa5\x8c_b\xcc)DW\xe8\x80T\x9b\x5~\xa2\x95\x42" "\xefQM\xfa\xf3mmR\xc\x1&ia\xe\x99\x61\x85\xbc\x11\xf2\x37\x81`\xc9\xc3\xfd\xa5Or" "p\xb7\xb\x7fiD\x82\xbc\nU\x11v\x8bJ.\xf7\xc9/\x84\x3\x98\xbk\xa3m\x13\xdd\xaa\xc0" "!0\x92\xb9\xfb\xf1\xd9@>\xcc\x7,\x18\x12\xf2\x84\xdd\x1b$\x5\x96$kQK\xe*\xdb\x99" "\xf2\xa0\xcd\xc3\x11\x11\x9f\xd6P\xaa\xfd\x81\x19I\xd8r2\xc0\xba\xce\x9b\xa5\x85" "J4\xc4g\x9[{\xd8\x81\x1b\xf3\x61\x16\xe8G\xa1\xcf\x8b\xf9\xcf\xf9\x66\xd2\x7f\x7f" "\x80\xb0\x9e\x9ej\x19\xfd\xf7\x19\xb2\xec?\xb7\x64\xef\x41\x42\xe5\xcb\xb9!oO:\xf" "\xb\x9eI\xd3\xd7\xc\xd8\xf3\x8f\r?\x11\xab\x1f\xecL\xb2\x1?m\xd6\x9a\xb3\xee\xf8\xe7\xed" "\xc3v\xce\xb1Wv[\xaf\x32N\xc!\xa1\xb\xaf\xcfQ\x12\x63\xb3\xa7j\xee\xbc\xd5Ij\x11" "w\xa2&\x9a\xe2\xb\xf9\xe7\x32\x9f\xe6\xb5\x41\xf5\xe\xc4;\xec(oc\x9c\x97\x9c\x6%" "\xe0\r\x32!\xc7\x85\x37g\xba\xf\xe2MA\xd9\x41\x66\xadgO\xdf\x61\xee\x8b\xf5#\xd5" "\x91\x1b\xa9\x98\xefOH\x94\xf6\xbf\xed\x8\xa0\xaa\xd2\x8b\xce?\x83\x61\x1e\x6\xf" "\x3\x1aRI\xe5RD\x9f)R\xe8~\xd8U\x1d\xa9\xbb\x94rl\x90:AI\xa9\x87\x1\xf9\x1a\xbc\x98" "\xa3Pj\x10\xac*X/\n\xe9\xa8\x81\xff\xe\xc6n\x12\xe6Y\xf1\x9e\xbfpW?I\x2[4\xd0h\x9c" "\xbc\xedhH.R8\xdb\x89)\xf2\xe3\x89\x12J\xb0\x38\xce\xd3\xab\xe2\x62~\xfe,\x9b\x8" "N\n(\xf5\x16\xf4\xf\xa8}-$%\xbf\x18z\x92\x0\xc9\xda\x44\xf\x8fM\xf0\x36\x11^\x90" "i\xf2\xde\xf3?\x94i\x90`\\CA\xff\xde\x61\x84\xf2\xa7G\xcb\xbeMZ\x8c\x16\x33w\x14" "\xb4\xf3\xe1\xb1\x15\x8f\xd2X\x8b\xbe\x14\xb4\xe9\x31\x9c\xf8\xbc\xa7U\x8b\xc3\x95" "\xc3\xbd\x9c\xe\xcd>\xc7S&\x18\x8e-=\x8c\x44h\x9^\xedTI\xc6\x31\x9f\xdd\n+\xe7\xa0" "\xef]\xb3\x16\x84\x83o\xb6\xc6\xfa\x45\xf9\xc1\x85\xe3s\xb3&\xb2[\x14\xa6\x96\x31" "I\x9f\xb0[\xb3p\x1\x66\x6\xb0\xb4pd.?W_L\xd1\xc5\xc6\x43\xcd\x44\xca\xc8\x86\x1f" "`\x87\x45\xeb\xc1\x39\xc2\x95\xecM\x11TBot\xb2\xd0[\xe6u\xb1\xd2/hpf\x17\xf^\xff" "2j\x16\x63\x61\x31=\xc4\x46\xfb\xe3\n\x1e\x10\xa0\xc2-J\xae\xb3\xb1\xff\x93\xb1\xb4" "\xcd\n\x6 P\xd1\x94y\xb8+(x9\xb5\xba\xe1\x13\x66\x2\"\xb4\x37\xda/Iw\x95\xa3\x8d" "\xb9!*S\xbf\x45i\xab.\xad\xf1\xd4\x92\x7f\xdb\x45U\xd1M\xf6~CT\xe3\xf1\xd7-n\x86" " \x94\xcf Pq\xa4\x38,=\xceL\xa5\x15{\xa1\"\xc9\x8a\xd3\x33\xc\xf3\x97\x8eS\xa3x\xf4" "\xdd\xaa\xb4\x9c=\n\xea\xc8GFxX\x89\x8a\xd5p&\"LE\n\xce\x9f\xd1\x10\x5\xef\xb2\xcf" "J\xb0\xbc\xc4<\xa6\x87\xb8\x9f\x31\xbfi\x80\x63\xad\x87\xa5\xeb[\xa0\x43\x1c\x91" "\x8a\x87\x18L\xd4\x82\xa3\xc5}/H\xc6W\xb8{F-\x0y&G\xc9\xdb\x8eH\x2\xc8\xe6\xa9/\xe4" "\xe3\xcd\xbc\x99 J\xa6\xad\x13\x9b\x39os\xa4H\xffK\x8f\x7f*\xf0Le\x1e\xccn\x12\x13" "\x9f\xe3\n\x90\x45g\xff@\x8b\x7f;\x15\x5&\xa0\x8a\xe5\xc6\x66\xf6\xe0\xc4\xe2\xab" "\xc8\xb9\x93z\xac\xfb\xd4p\x5Q\xf4\x94\x89\x8=\x11\x14\x11\x86\x15pB\x87\x46\xa8" "r4\x89\x33\x1a\xd6\x86$O3\x18\xe0\x15\xaahY\xc\x32\x98\x64\xcf\xd4\x9ct\xfcQE\xf6" "\xaf\xe4\x8d\x10\xd1\x90\xd4\x1e\xee\xd2\x98\x18\x99\xdd=\x83\xee\x44\xe8S+,\xd4" "\x12\xe9\x66\x8d\x8f\xbbo\xb7L\xeb\xcf\xfd\x3Za\x9c\x12\xb3Sn\xce_\xdf\x1du\xb\x1c" "AP\xae\xce\x1b\x63\x98\xf6\xea\x9b$Q\xdb\x44\xbc\x63\xc5\xe5\xc\xe4K\xc0\xa9\x1c" "?\xe6\xd0" "\xba$\x18\xf5\xdb\x9a\xaeT\x19\xe0\xb4?\xc3\x9XI\r;Q\"IMxX\xe1\x33\xa6\xf5\"\x6\xf1" "\xf1 \xe6\xaf\x97\xba\x99\x92P|\x3q\xd1\xd6r\xeb;\x4\xb9PhKN\x87N\xe1\x81+?\x15>" "\x0\xa8\xbf\xfc\xd8\xb5\x93\x34\x9bO\xb4\xbb \x95TF\xb4\xb4\x11(\xa6}Q\x3,\x5\xe7" "\xd4%\x14\xc9\xdf)t\xf9\xfe\x45LH\xdc\xab\x35\xb8\xb9\x9eHzw\xde\xaas\xc1\x34\n\xbf" "\x1bye\x1fM\xa7\xbb\x92\xee\x84\x1fZ\x92\xea\xce\xb4\xb5\xba%\x84\x62\xb2\xfa\xea" "\xe8\xed.'g\"\xd8\xa5\x8d\xdd\xab\x8d\xe9\x63\xdev\x18nv\\\x9d\x82\xa6 \x1eV\xc\x81" "\x82L\x8b\xca\x1c\xc9\xd9\x6-\xb9X9<;\xdc{\x14\xa0\x65\x93Y$\xae\xe2\\\x85\x43\xed" "\x82\x91\x85\xd0\x1f\xad\x61q\nE\x91vh\xb2\xfd\x8a\x7f\x8e\x3\x30\xe1\xee\xfa\x8d" "N\xe7\xb2w3\x99\xc0\xf1\x65n\x87'\xf\xe7\xf7\x10\xf\x88\xc9Oj\x89\xb8\x94\x97\x8b" "\xe0\xe1\x85\xeb\xe9\xc1\n\x99\xb9\x87\x34\x87\xf\xbak.8\x1b$\xbbq\xa3\xf8\xc1\xf1" "5\xb2\xed\x7\x17\x9bv\xc3\xd9\xbc\xda\xc1\xb8XNB8\x9\xad|\x11\x19\x6\x8c\xbb}\xfc" "\x8d\xf2m\xa8\xfd&\xd9\xbf=A\xb8\x14\xb8\xdd\xe8\r\x46.\xf1\xc5\xcf_\xaf\xb1\xf1" "(\x8e\xe3\xb3Y\xed\x85y\xb2P\xdcz\xcf\xcd\x46\n\xa1Ww\xbf\xe7\x9c\xda\x66\x81\x0" "n\x9f\x8fh\xa4>\x89\x13\x1f\x8e\xa0\x1e\x61\xe6}pN\xd3\xf1&=\x81\xac\x1d\x88\x46" "\xb3\xeam\xe8q\xa0*\xa8\xb9@W:\x1\xd7\xbfN\xcc\x9eZ1+\xb5\x97v\x8\xb8\xb8\x87\xb5" "\xfenb\x8c\x44\xc5\r\x0\xed\x88\x81\xca&W\xa8\xf\x1c\xfb(\x8eU@u\xf6I\x1b\xe9Y\xf1" "A\x8fT\xf0\x43Y\xdf\xa0\xd7<\x19\xb6x\xda\x31z\xa3\x8)h\xbeR\xf2\x32)\xa3\xa1\xa1" "\x14\x91\xa2\xc1g\x9b\xdd\xe7\xf8\xec,|.t\xaf\x2)\x8f\xd6\xfa\xab\x98Zn\xb0\xd2\x1e" ".\xc8\x87\xba\xc7\xa2\x83\x37\"\xf\xe2w\x3`/\x84LM\xc8\xe\x99\x93\x7\xea\xd9\x13" "\xcf\xb5G\x9c\x16\xee>\xcaw\xea\x41\x91\xbd\x34\xce\xf7r\xc4v\xa7\x8e\xc1\xa8\x12" "\x84\xe8z\x18\x95\xd2]\x1d\xd3'Qg\xce\xd1\xe3\x80\x93y\xfa\xd3\x18\x99S\x97\x96\xd2" "3\xde\x46V\xe4\xcc\xc1^\x4\x44\xd2\xe8g\xa3\xf9\xef\x95\xaaR\xd5\xbe\x93\x9c \xf6" "\xa8\xa8\x12\xc1\xcc\x2|\x87\xe8t~\xcc\x95\xbfs\xea\xbf\x9d@)I\xef\xcbP\xd3\x18\xe" "ulmB\xc6\xef\x8d\x65\xe8_\x17\x99\xbc\xef\xfc\xb8\xb8\xcc\xf9PL.\xc3\xb3]\xd2\xde" "\xd9\xfc\x15\x8dm\x97P\x7\xbfn\xfc;\xe0/\x92ow\xb9\x1a\x87\xb\xab\x62\xaf=\xa8\x98" "1\xf0\x1\x1bO\x14\xb0\xa6\xe5\xf\xde\x64\x8:\xa7=\xba\xb3_\xdar\xeeT\xeeyS\xb7\xf6" "\xff\x8b\x65,\xb8k3\xd0\x62\x12j)\xf1n1*\x4\xbb\xd5\x97:P\xe3lc @\x6\x95\x13n\x5" "\xa3\x66k\x92\x1b\x42\xcd\xeb\xba\x1b\xa4>\n!:\x91\x15\x86\xd4\r\x19PI\xbc\xdap\x96" "Yr<\xfe\xc3\xb1\xfeZ1LY'\xbf\\\xa1\xc2\x1b\xb3\xec\x84\xcdZ\xd7\x9fj\xc2\xe3#\x12" "\x96\xf6{\x8d\x93\x93l\xdf\xb4\xf3_}d\x97wKPJ\x9a\xa1}\xa9:\n\x9e\xfdi\xbc\\\xd8" "*\x3t\xd8\xd9\x1c\x1bi$1\xa2\xd2\xd2$@\xa4\xd7\xda\x34Z\xef\x91`\xf2\xdd\xe9\xe0" "]\x99\xcah\xea\x46\xe5\x9fk\xa4\xbcL\xfa>\xf9-\x8d#\xf\x9-\xf6\xf4W\xc4-\x7\xa5\xf9" "\xfe\"\x9b\xect\xfb*;\x5\xa9\x7f\xe2\xc4\x94\x34@#w41\x5!q\xf9\x87\xfaz\xbf|\xec" "\x83k\xeb\xa6Y\xebGP/O\xc0\xee\x38\xd2\xa8\xbb\x8\x46\xe\x1c\xb4\x33\xf4\xd9>\xf7" "\xae\x65vl\xdc\xc3\xe2\x34?\x18\x41\xa4\xd7\xdf\xbd[\x99\x97\x85\x15\xbd+:\xac\xc6" "\xd4!$\xe4\x12\x64\x30}\x9b\x34\x14\x94\xbd\xec\xb\xe6\xde\x1f\xf8h\xb9\xbewb\xde" "\x9c\xde\xd1^\x9f/\x8a:\rYoN\x1d\x93\xe0p\xe9\xab,<\xf6\x1\xb9\x45/\xd3\x64\x11\xcf" "(c\xb1K\xee\xf6\x9an\x99\x10o\x15w\xa9>\x12\xc0\x61{\xcf\x81\xf5?\x8c\xf6\xf2g\xb3" "W\x15\x1e\xce\x86\x4\x9f\x80p?\x86\xd9Z\xc0\xc8\xd2U\x88\xf1h\x92$\xde\x35\x1fH\x9" "\xe8\x11\xe0\xca.R\xa0\xeb+<;\xe6\x87\x63_ \xd1\xbb\xba\xff\x41\xce\x8d\x6\x62#\xb0" "U\x91\x8f\xe8v\xec\x97\xca\x6$\xca\xd9\x1d^\xb8\x8b\xacp\xd7\x5\xc4\xd3\xf5\x31\xd0" "tgsm\xf6\x1e+~\xd6\xb\xc1[PQJ*\xaf\x36\x6g~\x9d;\xf5sC\x1d\x2\x9\xb9&8\x94\xd4y\xaf" "\xc\x7\xa5\xe\\\xe5!M\xcf\xa8t\xdd\x88\x7(@rC\x1e\x32\xd3$y\x8c\x85\xe6\xc7\x46\x4" "\xc4P\xb3\xddj\xe2\x8d\xeb\x33?o7\x9b: \xe1\xc'\xff\xc5N\x11\xaa%H\xc6!\x1c\xd7\x7f" "\xfa\xf2u\xcf\xb1\xfb\x7f\xd7\xff\x5\x98\x14\xc1#\xca\x62G\xf7\x1a/\xbc\x94\xbc\xaf" "\x8eQ\xb6\xbf\x90\xb4*n\xda\x9co\xe7\x1c\xf6\xd1\xe9\x42\xbf\x9fqD~\xf4\x8f\xfat" "\xf2TN\xe4\x5\\\xac{\x82\xf4\xa1\xbc&\xc3Z\xf9\x3\xd2\xc3\xca\x99\\\xb7\x36\xcc\x32" "Gj4\xdc*e\x97\xb\x2\xbe\x39xY\xd7\xe9\xe0'\x87\xdd\xe3\x14\x9a\x18\xf9\x9d\x9bg\xc6" "`%~F\x8f\xcd\xe6(\xd0\x1c[\xe\x8f\xf5\xf6\xc8\xba\xb4\xe5\xa2\xe2\xe6\xb3\xa1\xe3" "&\x9e\xd8\x4\x83\x34!\xb5\xd3\xe7\x97I?e\xe7nDuY\x9e\x32\x8d\x4\xdbTJ\xebY\xb3\x38" "d\xc3N\x6\xdau\xaf\xf5rF\x1e\x99_g\xcdY\xc5\x96\xbd\xde\xf0\xd1\xb0\x41lf\xb2\"\xad" "\xa4\x2\xbc\xbQYh;\xb8\x39\xa1^l}_X\x86\x30u\xac\x88\xd9\xd8\x91_\xbc\xa2\xed\xb4" "\xb5\xfb\x10)\xc1o\xe8\xd4\x93\x43j\xb1\xa0/QL\"&\x3\xc8\xf0\xfeQ\xf9y\xdd\xf2\x14" "\x0\xfaX\xefl\xe3-\"z\x95\x32\xa0RNI\xa4\xd6\xc6\x93\xeb\x34\xf5s/\x8a\x8f\x7f\xa2" "\xd3\x1\xb1\xad\x95\xc6:\xecN\x9a;\xa9\x42\xc5\x81\xb6\xf7KO\x0p\xa9\xb4\xf2; 0X" "t\xd4\xae\xc9g\x4\xbd\x46}wRhU\xfat\x97]\x1c\xd5\xe7\r\x1\x85\xa6\x11\x9f\x11\x18" "\x95\x94\xe9\xf5\x96\xc6" "\x6Sp\x1f\x5\xf0\x8d\x12\xda\xc4\xc7\xdaL\x85\x0\xc9\xa9\x5q\xad\x5\xfe\xe.\xa6\xe2" "\xfdr\xec\xeb\xc0~W\xb5\xd6\x98\x35\x31\x61\xb2\xd1/\xcfG\xf3+U\xf3\xcc?\x1a\"ZV" "\x8f\x8avlP\xb7\xf7\xc2\xca\x7}\x80\x42\xc1W2l\xbah\xf0i\x1a\xd0\xbc\xb6\xb0\x0\\" "E\x9e\x9a\xc7j\x8e\xa1$\x11\x65\x8b\x88\xa4;\\\xf4\xaa<\xf4(\xa3<\xf9\x66\xf0R\xf1" "O\xaa\xe7\x31\x82[k^\x82\x9a`q(\x98\xde\x92L\xa3\xd6R\x14\xb7\xc2\xeb\xd1\xef\x94" "\x2,l\xe0\xb1\x81\xe6|\r\xdc\xaf\x6\x3ZML^\x1a\x92\xcax\x18\xa6\x7\xf5\x81U\x19\x65" "\x80\xedx\x14^\xf8\xd6\xbcK\x4\x8b\x87\x43\x17\xba\xb8\xe9\x43\x89\xba\x38\xf6u\x94" "\xc7\x17\xeeR/\xa7+\xae[;\xae\xf5\xe0\xce\x1d\xd7O\x1c`\x1^\xae\x64J\x99+\x8b\xe9" "\xaf\x44\xd9\x89\xbc\xae\xcc\xb8\xa3\x43\xbe\xf0`\xb9i\xd4\x43\x8a\x98\xde\xe0\xa9" "\xf6\x42\x66\x10k\xcbv<\xf2r1\n\xca\x9d\x9c}{\xa1\x41\"\xf\x16\xfa\xcf+5x\xcbg\x0" "\xc6\xee\x32%\x35T4\xf3'\xbc\x31\x1dh/\x9a\x1e\x18]\xeez\xffi\xa0\xc1\xd0$i\xdal" "\xeb\xd0\x17y\xb6\x30\xbbm5\x1f\xe0\xb6\x1d\xe5\x43\x84\xa3\xd7\x46\x12\xa0\xbf," "=\xab\xb\xf0i\xa9\rs\x1e]\xcb\xb8\x66\xf3\x14\x8a\xe2*1\x83\xa9*\xb1\xad\"\x39u\xbd" "[\x5\x61Q\rb\xf8\x81\xb6(\xef~\xda\x13\xbe\xea\x2\x64\xd3\x9e=\x3\x89%\x3\x89i&\xfc" "\x81\xcd\x88\x87\x8a\x18\xad\xe0i\xce\xd5i:x\x83\x66z.\x1bH\x16\xac\x86\xcdj\xc6" "O`\xff\xeb;\xeb\x93\xb7\xc9\x4 \xffK\x8a\xd0\xa1\x80\xf0XO\xbf\r\x45\x1c\xac\xc5" "\x94\xed\xf\x95\xe0\xb1\xd0O1\x16\xc2\x98\x36\xf9>\xdb\x99\x42\xb6\xd1\xc2\x9b\xbc" ";\xa6\xa8\x9\x98V\x6\xaf\xcb\xdb\xacz\xc3\xfa=I\xb1h\xcf\xcd\n\xf0\xc\xff\xc9l\x99" "\x95Vv1\x10\xcf\xcbM\xce\xb3\x9\x3\x46\xf\xb8\x33tk\xe3\xf9*~b\x5\xfc\xe0\xce\xd1" "s\xc9\x30\x8f\x1d\xf5\xe5\xa0\xef\x5\xca\xfd}\xa9g\xde\x31\x95z\x1f\\N\xbfK\x84\xfc" "\xf6\x1b\x1d\x81u\xba\xe4\x9d\x66OR\n~+qN:\xcb\xbe\x3\xa6\x2\xa0\"\xad\x96\xefp(" "ky\xe5\xd3\x63\xee{\xc6\xe9\xdcRW\xcc\x7LL\xad\x8a\x1a!\xc'-&\xc2mL\x11\xfe-\xa7" "M|p9Y\xd8\xbb\x82\xcbo>\xe0\xe3(@\xe9\x95\xcb\x1d\xc5\xa1Q\xef\x8f\x92\x81Zk\xaf" "\xed\xc3\x99\xc8\xb3\x6\xfc\x16:C\x13\xc5\x8d\x9f)\xb5\xb5\x16\x4\xbe\xc0\x8b\x85" "\xc5j'K\nE\xc\x89Ij~\x8d\x7\xd3\xeb\xaa\x99\x86\x66\x90\xc8\x8d(\x82\xee\xf4\xb6" "\x98\xbb\x17\xdd\xce_\xc2\x82%\xb3i\n\xbf\xa1\x1a\xceh]}\x15=\x9`mk\xfb\n\x63\xc3" "H\xb4\x45\xb1;\xfl\x8a\r\x96w \x94\xf2:\x1e\x80\x97l\xe3\xd3\xc3\xaf\xad\x8i\x0:" "\xc6.\xfc\xe5;hVr\xe5\xb5\xdd\x3\x43\x9a\xf4\xc5\xb7\xdcY\xd7\xa5u\xff\xafTo\x13" "\xf0\x14\xeai\x1\x35k\xa3\xac\xb5QL\\\x1c\x4\xd7hf\xf6\x30\x99,@o\xa0\x17\x8\xd1" "\x1f)1\x99\x97u\xffgU\xa8xK\x81\x1a\xc6\xc5ol\x96\xb9P\xda\x83\xc8\xca\x33\x33\x62" "\xae\xb0\xd0@\x16\x34]z\x17\x38\xfbi\x99\x96\x39\xf3\xf3\x93\xe4\x33\x12\x8\x65\xac" "\xc3\x84\x46\x8b,\xae\xf1\xb2\x10\x9\x97O\xfc\x61\x46\x5\x31\x8d\xbb\x42|\\\x96\xe7" "\xad\"\x34\xeaZ\x9b\xb4\x10R\x0\xbb\xaa\x36\x95\xae\xdc\xb\x64\xe6G9\xe7M\x1e\xe5" "]\xf5\xbb\xd8\xd6\xb0\xfd\xe9\xee\xf2S\x9fu\x1d\xc7\xc3-\x14W1up/N\xaa~\x9\x0\x95" "\xb3\x8e\x12\xaa\xde\xf8\xf3\xe3\xda%\xb\x8b\x2\x83^t\x85\x97\xcdR\x97\x9c\xd3mv" "$\x18\x91+\xb9\xf8M\xdc\xb3\x8a\x7wY\x8c}\xd6$\x13\x94\x9f\xa3\x1f\x84\x65\x7\xcf" "\xf5\xd5\xfd\xeb&\xac\xe3\x1d\xc7\x8\x62\x8d\xfc\"\xf7\xcc'\x99\x7\xe3\x9bh\xaa\x61" "oJ\x90U*\xab\xdaU\xceU\x11\xa8@M\xa1\xcd\xe9\xc4\x8d\xfc<\xa9\xb9S\xca\x37\x66\x9b" ">\xb6tY\xc1\x99\xb0\xce\xf0\xd9y,Y}\xfdH\xce\xf6\x18\x9f\x11\x81\x19,\xc4\xdb\x32" "o\xc1\x90\xc\x10QQo?\x3\x1c\x9b\xba[\xd6\x61\x83\x6\x84\xdeZ\xd2\xd0r\xa9@\xaa\xf9" "&\xe4\x43I\xd2_F\xb1R.\xda}sP\x14Sm\x83\x99\xb6\xec\x98\xca\xaf\xb7\x99;\xa7y]4\xcf" "\xc5(\xa6\xe3\xa1O\x8bZt@\xe\x17\\~\xc3\xec=\xe7\xc0\xba\x86\x65\x18\x64\x8a\xa5" "\xea\xaa\xa7\x8e\x62\xba\x46v\x86\r\xf\xdf\xc7V\xb5x^\x1c\x8eN\xae\x0\x13\x3\xc0" "\xa8\xac\x17$\x1b%\x9d\x19\x93\x46\xb2\xd3\x46\xe\x65h\xc6\xe7\x31\x9cG\xf2\x45\xd1" "\x9dr\x15\x44\x8a}/\"\x2\xach`\\\xbd\x99\x98$\r\xf6\xcf\x18I\xe6\xb9\x96\xdb+\xba" "\xef\x97Y\x93m4\xec\xcf\x14\xee/\xf0\x44;\x4\x65\xc3\x8b\x88\x34\x99\x42'\xfd{\xc1" "\xfd;7\x80\xd6\x9bJ\xdf\x31k\x99/\xa7<\xfb\x8fX\xd5\xb3\x91\xa5\xd2\xdf\x7|R{a]w" "\xb4\xe3\x14\x98\xca\xc8\xbb\x61\x91\x4@F\xfc\xce\"\xe4\x95y\x9c\xe1\xce\x32\xe5" "\xc6\xc0\x43\xc4|\xeb\x61\xe\x9c\xfb\xe4\x8a\xd1\x84\x2-K\x8\x1/\xaf\xe9`\xd2\xf8" "\x89\x1\x8a\xa4\xc9\x13SWe\x1Y\x16\xbf\xed/\xb8,<52\xbd\\\xac\xe1\xe\x8f\xae\x8a" ")gI\r\x8e\xdas\xfa\x30\xe2\xf1\x9d\xdc\x1g\xff\xe4\xe0\x12\xc7\xb1\x9f\x1b\x1b\xe5" "T\xd3Q\x9\xae\xe9m=\xc3-\xe5\xf7z\xbe\x35\xb2\xd6uH;\xc6\x8a\xb1\x1e\xc6y\r\xa9\xa6" "Ej%,Jh8\x0j<\x11j\x18M?\xbd\x5\xaf\xd1\x8d\xf5o1\xb4\x37\x9f=\x8b\x41v\x8a\xa8\x15" "9l1\xaaG\xf8M\xae~J\xc9\xc4\x1\x15P\xa8n\n\xfa\x1\xaf\xb0!\x90\x41\x19\xb2\xbdL\xa9" "\xdeY\xf0\x83>\x91\xd0\xf8\xcf\x89\xf4R\xcf\x17\xd3\x31$1wW\xca!\x8\x93\xd4\xea~" "\x93\xa2Q\xd3\r\xafxw\xf9\xb2t\xc&\x9e\x84O\xff\x85\xf2\x13\x1a\x87\xc5\x9b\xa4~" "\\x_\x1\x1e\x8d \x1ckS\xf3\x18\x9e\x89\xab!n7VP\x93\x46\x12\x8e\xba\xaf\x8\x93\x92" "\xbc\xbe\xb9\x82\x9b\x34\x18\x8bY\xcc*\xb2\x1f Gx\"mplT\xab\x61G\x98\xbc\xfc\xd4" "\xee\xbb\xf0r\xc0\xb\xa2\xfa}:!&&A)@86;\xc0\x1a\x8fh\x96\x95\x9e\xdb\x9a\xad\xd8" "F\xe1:\xfb\xf5+\x8d\x31\xb1\xce\x37\xf5\nt\x1aX\xc2\xe3x\x1c\x6\xc0\x14\xf2\xd2\xd9" "\xa3\x9eY\xbf*e\xa3T\xc0\xdc\x14$'\xef\x4\x35\xfe\xbb\xe\xb3\x80\xb1v`\xc\x94\xfe" "\xcf@P\x14\x97%\xee\xe8;\r\xa1\xdf\xe8|\xcf_\xa0\xc9H\xb9\x2;\xea\xd0L\xf2\n\xf4" "\x91\xce\x10\xc5\x65?W\x12\x66<\xecg\x17\x9a\x97(\xa5\xc7\xae\x19\xc3\xd1\x9\x9\xc2" "\x1e\x85`\r\xcb{\xe3\x18\x38\xf1\xab\xf8\x83\"*\x85\x96\xb5\xb2\x95\x11\xcf\xdbH" "\x4\xde\x8b\xc8\xdb\x1\x85\x93\x9f\xc0\xd4\xd4\x65[\xbb!\xca\xea\x44\xea\x88(\xfb" "}\xca\x15 \x14r\x93\xdd\x61\x1f<\xe6\x9b\xca(\xf8K\x7\xe1\xbd\x82\xfc\n\x12\x36\xde" "}`7\xea\xdc\xdf}\xb5Og\xb\x84\x5.\x9f\x94\x89\x83\x1f\x5o\x82\x39\x95(\x12\xefv\xf5" "+(\xa2\x4\x10\x91H\xf6\xd2\xfe'\xe7R\x13\xe3\xb9l\xe2\x88\xc5\xb2Hma\xbe\xd3\\*\x95" "\xb6M\xc \xbaYC.\x0\xa1\xf7\x45\x63\xfa\xf8\x31\xb1P\xe9n\xeb\xab\x82\xc0\xfbN\xf0" "\x7\xeb\xb8h\xda\xf4\xeb\xb2\x81\x8e,\xc\x89\x82\xcf\x88\xa5\x17\xfeo\x9cT\x99\xd8" "e'\x95\xe1\xe6\x84\xcd\x9c\x7fsv\xffG\x15*q" "\x5\xf9\x42\xdc\x1c\xd1\xaa\xa3-\xf5s`/\xb6\xae\x19\xaf\xbd\xea\xfe" "\xbe\xd8'\x8d\xa2\xc\x8b\xc5\xdf\rL\xb2\xb5JN\xc5\xec\xfe\xbd_\xfc\x8d\x9d\x95\xfb" "\xb4j\x1bK\xb5s\x80\x1dxe\x4\x65\x39\x19\xc9'\xc3\x12\xb2\x66\xff\xe0\xacj3p\xec" "\xf3\x90:\xd1\xd4\x10\xf6\xb4W\xc9\x65\x32\xcf\xac\xae\xbb\x94p\xf1\xb0\xafy:\xf5" "\xa6\xbe\x91\x17}\xa6 \xa3\xb1\x45\x8e\xa9\rhB\xa2\x14}\xa3\xd5\x7f\xbb\x15?e8\x4" "'\x84\xa0\x35\xcb\xc1z\xe\x7m\xaf\x98\xe3\xd4\xfc\x14\x43\xa8\xfb\x1TZ\xc0\xb5M\xa6" " 2I\x9boq\xc6/\x10\xc9\xda\x9f\x38o\xcf\xce\xad\xe6i\xd0\xb8\xd1\xaf\x2\xe0\xddV" "\xb7rM\xca{\xb1\xa0\\\x63\xd8{=\x3\x19\xc4\xcd\xa6x\xd6$\xe4\x4\xd1]\xc6\x9e`P\xcb" "\x19\xda\x8f\xdf\xea\xbb=\x96\x42\xb2\x16\x87\x8aS\x93v\xc5\x46\xf6)`\x8a\x38\xb9" "\x80\x66\xd4\x82\xf9\x15:\x1c\xf9\xf0\x9f\xd9!\xc4]\xbe\x46\x7w\x8\xce\xb1\xcb\xd2" "\xc8]\x8\x34\x8fj:,\x87h\xcc:\xf9\xa0\xc1\xd6\xbdk&}\xbf\x19\xb0&u\xc\xfb\x8a\xd1" "\x96\xab\xd3\x9f\xf2\x95\xban\x8G\xb0&\x92\x1c\x86\x9\x8b\x1d\xbaq\xe1\xcdl\xf2[" "\xde\x9e\x44\xe5\x9e\xa0:\xb6\x93N\x9aNa\x10.\xff\xc0\x1cs\xc2\x8dpN2krT\xba\xf;" "6\x1d\x8\x15\x12\xeb\xbf\x89m\x8d\x14\x9b\xc0\xab\x88\xd4\x0\xa9\xa7\xcd\x1e{y\x9e" "\xc6;\x8f\xd9O\xf5P\x7f\x93\\\xef\xe1\xde\x64\xb5\x87\x1\xf3\xdc\x34S&\xb3\x66\xc1" "'/\xbd\xea\xf2|F\xf8z\xbe\xa0n\x17R\xd0\x9d\xe\xba\x43\x43\xf1\x8c\xe2\xe4\x84*!" ":\xbf?\xd1\x44\xc3\x85_\x3\xfb\x90\"\x94_+\x9\x90*\xfe\x13Q\xd4\xbf_\x7f\x13\xe4" "\x90\x6 \xfe\xd6,\xfe\x37\xa2\xdf\x1c^\xed\x6\x6\x7f\x1\xa2 r0\x80Yw1\x94\xce |\r" "^PcJK\xf7\x1d\xe\xb3\xd9\x1c\xd2\xe9\xcb\x17\x61M\n\x1a\xe9\x19\xba\xbd[X5\xc0\xa8" "\xe0\xa5\x1a\xbf}l\xed\xb8\xb5\xd3@P\xc0\xc9\x94\xd2\xfa\x8fN\xc8\xe\xba`\xb5<\xae" "\xce\x14\xa5\xcb\"\xc8\x66[\xa4\x65l\x87\xba\xc1-\x1d\x9c\x92\xa2u\x8e=\x83j\xf4" "\x15\xcd\x15\x16}\"n\xc0\xc1\xe3\x92i\xec\x7\x16\x8aHF\x9c\x15\xc9n\xe4\x80\xb\xc0" "\xd4\xc6\x34\xd6\xb8\xf9\x7\x9\x44\xc\xe0\x35z\xde\xe5\x98\x8c\xefW\xc9\xb9\x8d\x45\x6\xc9\x83" "5\xab=.\xe3\xb1\xd9\x16\xe9\xeb\xf6\xf6h\x0>1\x96\xa1\xb0\x1fh\xfb\xf-\xa6\x17\x64" "\xcf^\x13\x1c\xe6\x93\x8f\x44W*\xdc\xe9iX[y\xb\xd3x\xff!\xe5sY\xadr\xa5\xb7\x83]" "ZX)8_\xe5\xb1\xdf\xfe\x7fT\xaf\xa3\xf8h8\x14\x82<\xb3[L\xa3(b5\xc\xbcQ[br}\x0\x99" "\xc1\x66\xd1\xf2;\xe1\xc2\xa8\x8f\x61}\xb4\x61\xc1\xa2\x46\x98$\xdf\xf9\x7f\x45v" "\xd8\xd1\xdc\x16\xe3\x12\x9e\xc1\xbd\x13~:\x87'S\xcc\xdb<.\xfe'\xe9@\x92\xf~\xb2" "N\xc8\x3\xc9\x9c\xc\xb1\xda\x7f\x18\x43\x18k\xde\x80\x32=\xe5\xe4VT\xc8',\x94\xf" "D01w\x1c\xab\x84\x13\xd1&a\xbak\x9f\xcf\xc9\x96\xca\xa0\xbe\xd0\x17\xd9m\xaa\x87" "\x80\x65\x81\"\x9a\x37\x46\x8a\xf3i\x0\x85\xd9\x86\x0\x88\xe2\xcf\xa1\xf7\x63M~\xd6" "\xf1\x1a\xe6\x85\xf1\x93\x91qh\xc2\x63\xe4\x97\xaaX\xec\xf0\xd7\xa4V\xc2\x38>z\x18" "\x15\xabOC\x97/\xf9WFf\xb3\x1\xfe\xec\x1c.]K,\xba\xfd\x43\xed\xbbu\xadv?\x3\xf9x" "I\xe0\xbR\xfb\xd4\xf1\\\xa3\x38\x2O\xf8\x1e\x95\xcf\x9a\xe8/ce\x10\xaa\x13\xf7S\xd1" "\xe\x1d]\x11\xbdZ1\xdf\x11\xd9\xb\xb9h\x13\xe9\x6;#\x8c\xd6Iy?\x15\xaamu\xb7Z\xd0" "-\xc3\xb5\x6\xc4\xf3\x9a'\xcc\x83RZ\xdf\x39\x38Z\"N\x1esc3u\x9cJ9i\xd0\xfc\x9e\x41" "=\xff\xed>\xe1\xe7!m\x98\xdf\x1cng\xc0\x42 \x99@\xf8\xb7\x86\xfe\x9\xa9\"v\xd9\xce" "\x14\xd2\xc6\\>9\xa7\xfd\xb7\x18\x31\x9b\x11\x1f\x5\x13\xa8`\xee\x8e\x34\x3\xf7Q" "\x16\x35\x93\xc0_?\x8b\r\xc4\xee\x7f\xa4\xfek'\xf1\x85\xed\x65VD\xff\xa2\xaa\x91" "\xb4\x36\xa7\x46|2\xd1\x63+\xb+\n\xb1Z\x87/h\x19\xa3\xf8\x9dy-\xa8\xaaT,\xf7Y\x90" "a\xc8\xb3\xd6\x9am\xda \xe1\x4\xb0\x80\xc\x18\xb1\xd2r$\x9eX\x84\x15\x41o\x3\xd7" "\x8bR[%b\x91\xc9\xb\xee(\xe0m\x6;e\xb2j\x95\xc3\x3\xf8\x64\xe7)\x9c\x1fQ\xba\x84" "\xebJ\xaf\xd1(\xe4\x87zTJ\x14j\xde\xa4\xa2\x30\x43G\xce\x9c\x90\xefl\x92{ee\x7f\xac" "\xca\xdfx\xb1H\xd3'\r\xd6\x64\x8f\xe0\x10\"\xa6\x8a\xb1q\x81Z\x8d\xf0\xcf\xd5\x43" "A;vq\x7Ox\xe5\x9a\x64\xd7\x99Qr\x9\xb3L\x9c\x14\x1d\xd8Q1\xf1\x64\xa9O\x84kMF\x13" "\xc6\x1f\r\xe3\x1f(\xbd\xdbv\x84\xf9*Kt&-w)\xd1\x66\xc9\x99\xf2\xa0\xc7lM\xfc\x43" "4c+i)\xd0o\x8Y[\xfb\x45\xfe`u\x1f\x8f\xc5\xde\xe3\xf3\x31xSaG;.\x0P\x97\xe6\x1dy" "&\x3\xd9^|\xb7\xd5\x66\xed\x89$\x9e\xfd\xcb\xcb\xb7!\x1c\x9a\x36\xb9\x87\x99\xc9" "*\x11\x9d\xe1\x96\x8bg\xb9\xbe\xb8m\x82\x1bN\x16*\xd6\xb7\x81\xd2\xc1\xe]J>\xe0\xcb" "\xfcZ\xc3~\xa6\x14\xc9\xb7\x9c\xe\x9f\xe9\x82\x46\xeeO\x87\x99\xd3]SY\x12\xbf\x92" "V\xb\xfb\xc4x3\xd6\x8_@|\x13\xa3\x8\xc0\xc5\xbcVt\xaby\x19\xc2z\xbd\xf4\\\x9b\x46" "K\x9d\xa1\xd9\x91\x93\x1c\xd9\x95\xea\x94\x8f\xb4\x95\xb\x66\xbe\\G\xe1\x9bS_~\xc4" "\x19\xf1J%P\x12\x18\x94\xb9\xd2\x80\xc4\xf1\xff\xb2\xfb\x1a\xcal\xc3\x91\x39\xb2" "\x3\xe\x8fH\xc2.(\xf5>\x4\xab\xb3\x1c\n:rt\x8dy\x8cZ\x8e\xc6\xac\xf1\x6\x11z\xb\xee" "\x9aL\xe1\x85\xcd\x30\xb\x44\xe1\x9b\xc2\\\x37\x96\xeb\xcc\x83VNf\xe5W\xa3\xbf\xac" "M\xd9\xaa\xd7%\xdf\xeb\x63%W\x8b;\x1a\x85|p\x98o\xd4\xe2p,\xc3\x43Ni\x81\xd3\xcc" "\x15\xcf\x18\x89\x11N\xfb\xce+\xba\x6!\xc7\xactx\x99\x1e\x86\x88\x1e\xe\x83O\xe0" "\xa9QU\x1c{Y\xden\xcf\x14\x1nIhD\x18I<>\x2z\n\x2\xc9\x34p\x9c\x64\xb6&B5\xf1\xf6" "\xb3\x8d\xc3\xf2/[\xa2\xb9\xca\x7f\x93\xd0\xf5\xa4\xd3!\xf5\x9f{\x19\xcf-\r&\xa7" "\xde\xdao\xe0\x33\xe9\x5\xfay\x99\xb5\xd7V\xa6\xe\x62sp\x85%\x36\xe\xc9\x12\xb9\xdf" "\x1d\xcc\xfa,E\xb2\x10\x9cG\xa1\xbb\xa8/\n%\xf4*\xb9\xeb\x8a\x6\xf5\x85\xe3\xfd\x12" "o\x8e\xe2\xa5_6\x1b\xff^m\xa4\xdd\x83`0\xf6\xf\xe2\x43\xce\x63x\xa2\xc\xe9\xda\xe2" "\xde-cf\xec}\xbd\x41'\x2\xee\xe1\x1d\x94\x5<\x8a\x19vE\xf\xda\xe1\x31\xaf\xb8\x18" "\xcfn\xb6q\x9f\xc2\xd7\xc8\xd2U\x88\xf1h\x92!\xb3\xaa\xc1\xce=}\x9e\xc4\xb7\x65\xbd" "\x8c\xbdM\xe8\x66\xec}\x92]<\\\xe1:\xff\x9e\x14Rk\x19\xe4\xec\x15T\"\x82\x13\xfb" "\xe0\xac\x14\xd1\xc5\xca\x1f\xee\xcf\xea\xc2\x32W\xbe\xab\x9b\"+\xf9k\xa3\x98g+\xd9" "\x9c\x91@_\x87\xe8\xd6\x9t\xbe\xf5\xc8t3Q\xdc\x66\x98\xbb\xec\xd9\xceQ\xb2\xc7\x9a" ")\xf5y\xc8\x0Y\x84\xe5\x98\xc9\xc3Nt\xdd\xf7\xa6\xa7(\xf\x66\x88\xda\x93\xe5v\xa1" "Wy\xd5\xe0 y\x5\x34\xd6\xb0 x\x91\x8c\x66Vs\xc1\xce\x11O\xd0O\x0\x11\xcb\x92Xk\x18N\x12\x93\xf5" "\xe2\xb6\xe\xd7\x97r\x17\xf3l!5W^X-\xb2~l\x1aU\x8a \xa1pb\xaa%*`;>\x95\xeb\x85\x9a" "\xd7Pg\xdc\xd9q)b|\xdc\xbb\x1b>*\xbf\x1e\x45\xf1\x97\xd3\xed\xab\x16\xedz\x1\xea" "L\xb7'\xf3\xa7\xdd\x94\x30i\xb9\xd6\xf6\x42\r\x7f\xda\xf\xc\x7Mp\x83S2\x1f\x15\x46" "\xdf^\xf9\xc8\x43\x85\xecpN\xb7\xe4}\x99\xae\xcev\x8bJ\x82\x46\xa5\xa1\x8d\xe6P4" "\xd0\xcc\xb7\x61\xdd\xac_F}6\xa0\x1\x43\xd8\xb6\x33\xb5\xd9\xa8\x5\xbb\x87z\xc\xdc" "|\xad\x1e\x1d\x37\xaf\x98t\x8a\x6\x62\xb4\x9a\xbe\xe?|\x9fJ9\x95\xce\x61\x37+c\x9c" "\x8\x84\x91\x44\xee\xec\x64\x39\xd7\xad\x8\xe0\xec\xaa#\xf8\xf3\x8b`\x9e\xb\x30h" "z\"\x9d\xaa\xc0\xa9\x95\x10\x42\x14\xb8n\x9f?G\xc6]V\xbc\x6(`9\xe7PB\xd5\x10\x7\xf" "\xa5\xe1\x39\x93\xd5\x14\x1e\x65v\xa6\xd1\xev8\xee\x1p\xf1\x85\xd8\x12V\x99@(Us\x5" "\xaa\xf3@\x1b\xaa\xba\xa9=\x8fh?7\xe8&C\x13t\xcb\x90l|G\xbc@\xceQ\x18\xe2m\x94\x8b" "\x9\xba\x8\xe0G\xbf\x1K\xbe\xafL\xbaQx\x1f\x64!j\xc0\x98]#I\x85\x82\xdf\xd2\x0\x38" "N\xc6#\xfnda\x14w\xcd\xcc\xab\x97Q\xfb+\xa9\xe\xaa\x9\x30\x7x\xea\x35J\xf4\xc3J\xc3" "g\x3h)\x9a\x17\x32\xd9\xb5W\xf4\x88\x18\xddv\xa3\xf2\xe\xf4\xce\x62>\xd6\xb1\x1e" "\xcd&\xa0\x61\x3\xb4\xaa\xe5\xf3\xd6t\xad\xac\x9fn\xb1\xffV?\xf4z\xebU\xe0t\xe0." "y\xd6\xf0\n>4\xb0\xac\x1a\xb5\x92\xc6; ZWC\x8f\x46\x92\x9a\x17\x9\xc8\xad\xa3=\x97" "\x1a\xd0\x9b\xb3@\xda\xda\xb0wrO \xb3\xa9\x42\xa4\\\x17\x94\x1e\xbd\xdb\xa2\xaf\x88" "\x98L\x14/%\x11hi\xfc\xba~@RY\xe6\x81\xaf`\xd6\x7\xe\xd5KwR1\x9b\x9c\x8d\xaa\x85" "\xe8\xa9\xb1\x66\x4\xe5o&vj\xbc+\xaf\xe7{\xe2mN:]\x9b\x15\x8c(\xd9\x1aPo\xd7\xa7" "\x95\x86\x9b\xb9\x9\x1e\xf2p\x9f\xc6Y\xe1q\xb0\xbc\xe\x1c\x62\xf8\x13\xea\"\xaa\x11" "\xa4\x89\xb8z\xb5\xad\x63\xdc\x39\xf4\xe5\xc4\x94\xf7\x80\xeeK\x8b\x11\x6\xd9\xe4" ".\x1b\xd3\x98\x84\xb6'\x8c\xac:\x93\x19\xc5\x61/=\xbf\x84t=\x86q\xa2\n\x0\xc2\x3\xe3T\xfc" "+\x14\x37\x5\xec\x32&\x8b\x13L\xd3\xed\x66\x83\xb9Z/w\xec>\x4\x9d'\xe7\x7f\xb5\x96" "\xa8\rn\xaa\xd8\x61k\xc5\x97\x14\x1a\xda\xccv\x96\xf9\xca}C\x93_!\xce\xf0\x91~\x1c" "\xc0\x15\x0\xd4$\xc3\x38\x19vBP+\xd8\x61\xfe\xa7v6\x90\x98r\xfb$\xd3\xae\x32O\xaa" "\x94\xf2\xc4\x1c\xf5|\xb3V\xa8l\xec\xd2tr\xceSN\r\xb9QQu\x9a\xbdu\x85\x17\xdbG{\x11" "\x97\x46\xfb\x14`\x94\x98.\xe7Q\xda\x35\xc8\x88(\xf1\x8d\xde=\xdbL\x8ar\x16\xc3\x7f" "\xa2}<\xae\xfv\xe2\x19?\xc8yq\xe6-\xe8}\xa1O\x96\x80\xb0z\xb8!Y\xc3\xf2\xbd\xfa\x43" "\xd3\xb3\xbc\xd9\x36\x32\x8f\xed\xb5\xc7\xc8\x93\x97,M\xa1\xb0\x98\x1a\xfe`\xc3*" "c\xcc\x8,C\xaa']\xbe\xb3\xbb\x87j\xe\x90\x1\x0\x7f\xfa\x85\x14\x30\xcb\xb7\xe/(\xa1" "\xe2\x96\x41\xc5:\x94\xc4Qt\x4\xcb\xa8\x8b\xf5zL\x96\xd2\x12\xb7\n\xd8\xa9\x7\xdf" "\xe8\xa4G\x84>\xf&\xeb\xed\x8do\xc8\n\x5\xe2\xca\xd6\xd4\x45\xc5\xf\x35o\xf1\xd4" "1\xab\x8c%H\x8f\xb7\x7%o\xb5\xcfp\x83\x80\xdfv\x85\xe6?qJT<\xd8\xff\x8d\xa4\x1\x87" "\x85\xccM\xb0\x14\xc7\x14kJ\x81\xcf\xdd?U\xae\x45\x36xi\xc2\xfa\xef\xf9\xb4\xfe\xeb" "Y\xca\xfd\xb4]k\xc4\x44\x17\xe8\xcb\x8e\xd7,MF\x8fh\xcb\xfd\x7f\xb3\xf7{\x81+\x5" ">\xe8\xc5\x8b\xf1w]a\x11X\xd7\xcb\x16\xdb\x43\x30~v\xc1>\xd3vU\xf4X\x9a\x30\xcd\x36" "E3^\xa6\xee\xe\x87\x2`J\xe0]\xac\xe3\xc8%\x39\xf\x7\xd7o\xadx(\xe5\xe2\x3\xf3\xa3" "\xa8O#\xa2G\x82\x12\xa4\x32\xae\x10\xe4\x9d\x19'\x7\xb1\xbaj/-\x2_\x99\xdb)\x19\x92" "7\xb9\x8d\xa4\x2\xc4\x2\x92\xc9^!LGuX\xecH7\xe\xabN\x18J\x12: )\xa6\xc4\xdb\xf7\xf7" "\x10\x98\x8\x1f\x33w\x16\xa9\xda{k\x91\x35\xe\x36\xd5\x10 \xdb\xbc\xc7\x62\xf2\xbc" "\x93\xf\x95+\xd5g\xd5i)\xa5Q\xb8\x80y\x15\xeaz\xf1^\x92\xaa@BX\x12\xc5\xc5u\xd0\x9c" "\xe2\xd3\xa9pk\xa7\xf3\x42\xad\xa8P\x1b\x88\xfe\x9cpM\x8f\\Z\x9\x6\xa7p\xf8%\xe0" "i\xbdu\x3={\xbe\xcd\xbe\xd4\x8-\x1d\x82\x9e+N\xa7KUY\xf4\xf1Uf\xac)N\x18#-\xce\x1b" "S4\xde>zQ\x90\xbe\xa3\x93L\xa5T\xa3\x9d,]P\xcaV\xb9j\x92\xb1\x4\xd2\xb6S\xb9:\xf7" "hfh\xa2\xd6\x11\x9f'\x18V\xbb\x2\xf9H\x1d\xaf\xc1P*\x19\xe0\xbd\x11:\xff\x3\xab\xa0" "O\xbe]\xb5\xf2\xbd\x66rjT\xbf\x5\xad\x37\xcfs\xb3\xa7\xc8\\]\x14\x83\x34\x8a\xaa" "\xafRg96\x9\xef\x1d\xc1\x0\x9c\x1e\x9d(D\xaa\xf2|\xd5rl\x96\x8c\x33w)\xbb\x91\xa8" "e\xa7\x34\xb1\x12\x30U\x12\xe2\xa4`b\xb\x8e\xd0\x37\xa7\xbf\xb7\xcd$\x0\x64\\\xd0" "\xad\xf8\x9a\x99\x42\x7f\xba\x1b\xaa\xa1\x9a\x8d\xc2\xe5\xa2\xa5\x7\xaf\xae\xa4\x96" "\x80\x11~HV\xdbx6\xd1\xd5\x82\xe8\x80\x63w\xb0\x17\xd1\xbb#Luw\x8\xcO\x83 \x9f\x1f" "\xcd\xe1\xbd\xb9\x0\xbxhFN\xf0K\x9c\x18\x14\x1c\x7f\x64\x97\xc5_V\x12L\xb6\x9e\xd9" "\xef\xf9\x32IY\xb4\x66\x61\xfa\x89\x18\x84\xa2?^\x19\x6\xa2\x93\xb\x43NE\xd2Y_\xaa" "\x9e\xc7\x7f\xc8\xc4\x98\xc1\xcd\xdc\x41\xae\xfd\x44\x9a\x94x\xc7\xc1\xa1\xd1[R7" "\x1c\xc5\x33\x1\x61j\x89wAT17\x9d\xad`\xce\xf7H\xe7\xc0\xf0Y[\x7 9B\x86\x11\x9c\xe3" "\xac\xc1\xc0\xa3\xfb\x8b;\xb4%\xb2}&(\xe6}\xee\x3^\xf7R+J\xd6\x81\xe4\xb4\x36\xbd" "$B\xe2\x43\x7f{O\xe8\xc5(\xad\xec\x8\xde\x14$\xd2\x42\x9\x10,~\xa7\n\x9bZdt\x81\xd3" "\x84\x2th\x9a\x9cnE\xb1\x36y\xa3:\x3&\xd7\xaf\xab\x31\xd8\x1\xe9\x16\x8dI\xb6\xc" "\xa4\xa2q\x16\x8h\x93\xd9\x83\xb7\x81\x0\x16\x13\x84W\xa7,&\xa7|\x4\x9a\x82\xa9\xb5" ",\xab=[\xcaOZhKow\x86\x84\x35\xf8\xad\x9\xdd$\xf6\xf9\x10%QI\x8a\x8dMD8\xeaP\xfc" "8Y\xc0\xcc\xd7\x4\x43\xe2-\xbe\xec\xc]\xdc\xbf\x32\x12\x30\x12\xc2\x12<`\x1dW\xf7" "R|\xfb\x15\xf9\x6\xb1X`\x82\x8d`\xcc\x8c\xc\x17\x92\x12\xe6\xe7\x86i\xce\x32\xa8\xc\xf0\xb4" "\xeb\x92\x43?:\xc8#Q:\xda\xafhH\xee\xac\xd2\xb6\xea\x9b\xf9\x13r\x1d\x19\x9f/\xb6" "\xfd\x85\xc2\r\xd3\xa2\xf5\xedx6==\x0\x4\x5{\xf9\xdc<\xfd+\xf8\x82\xe5\x9c\xdfn\xd7" "\xf4\x82\xf6sp\xbf\x2\x33\x2N\x18\x16\xaa\x39\xd6\x3]\x86\x18\xe3\x43\x9a\x17xJ\xb2" "\xf2\xb4\xbc\x86\x84\xc2-W\xeb\xc7\xfbO<\x9f\xfc\x80#\xac\xf6O.\xce\x90\xe8V1!\xef" "F\x92\xc9.7\x4IB\xe4\x8dwj\x1fV\x9d\xbf\x5\xa4>]F\x8cJ\xda|\xa6\xec\xec\xbe\xehQ" "\xd9\x7\xd1PUS\xf1\x1a\xb7\x8d\x17\x8b?\xe8\xaa}|\\\xfd\xf2\x87r\x0\x9o\xf0!@\xae" "\xa9?\xcf\x1ah\xb2\xe0\xa0/b\xcc\xb1S\x8c]\x6\x66\x13\x88\x9\x1\xc6`\x86`\xad\xb1" "X]u\xba\xce\x2wY\xdcri/\x8\xf0n\x9\x9a\xb8;\xad\xb2\xddUG\xf6\xe5nr\x86P:\x18\x5" "\xb8\xd4T\x86\xfc\xf8\x2\x87\xa9\x84\xaf\xe3\xcc\xd5~\xe1\xa5\x1e\xc8--F0\x13\xe8" "\x99U\xbe:G\xcdn\x8\x8aH\x92.\x12\x1a\x92\x94\xb4o\xd8\xdf\xd5\xc6\x66\x8c`\xe4~" "\xd8\x84\x0\x14|\xd1\xb\xc6Sl\x8e\x7fIp\xb1\x62\xed\x19!@}3\\D\x1c$]\xcf\xc3\xaf" "\xb7j\x9a\x63J\x87\x42\x97\"`\xd9\xa9\xef*\x95\xb7\xd9\xc4+\x16\x35V\x8`\xca\xff" "\xe7\x65\xcc\xc3\x9ezC*\xbd\xb2\x19\x1\"\xa0\x31\xf0,-~\xcc\xfb\x31\xccM\x94\xea" "\x9c\xffm\xab\xb3\x63\xbc\x8d\xcf\xc8jV\xc5l\x0\x90{\xb5\xc3\x8d\xf\xf5!\x95\x46" "\x93\x90\x19\xd7\xe7>E \xfb\xa7\xf6\xed\xed\xe2\x1e\x8b\xf9h\x3\x9b+\x11\x9d\xa8" "\x9f\xcc\x1e\xc6\xebV\x9c=\xf4@f\x16\x94\xc4\x81\xf0\x8f:\xb5\x83o\xc4\xa8\x8cG4" "\xad_S\xc8Zl\x9cP\xe4\xac<\x99\x7\xbb{h0J2Vw\xc4\xc9l\\\x7YRd\xee\xb6\x63]\x7f\x14" "<\x82\xf4\xe2^\xdaUm\xc2\x16\x8c\x19\x5\x6\xc6)PiH-U`\xa8^\xfe\x9f\xf1t<5zJ *41\xe8" "Ma\xad=\xfa\xa9uwtLS\xb8\xda`\x7f\xb2\xdf\x10\xde\xe\x41\x85M\xcc\xc4\xfM5\xf1xm" "\xee\xe5\x18l\x94\xbc\x37\x1\x9e\" L\x6\x95\xcf\x9a\xd5M6~_&\xd9\xff\xf8J\xbe\x45" "\x85\xde\xa9\x41\xeT\xab\x64\x9`.\xfb\xa2\xb9hz\xe9\x9b\x82\xba\xed4\xedK\xa3\xf4\xb5J\x8b\xc1\x84\x1f~\xa0\xc2\xf5\xd3Q#d\xd2L\x9\xc8" "\xb5\xb1\xd0*\x8d\xbf\xea\xb7{apvGP\x98\xfd\x89\x9d\xf4\x34!\xee\x9eqv\xe6wVuZ\xa9" "s\"\x1d(\xc8\xacR+;\xd5\xdf\x1d~\xbfoENJ\xe9\x12\x13\xe8\x99\x64`\x4\xcf\xe\x14\x93" "\x88t.\xa9\xf2\x8eL}R\xfc\xa4\xc1\xf5%\xf0\x4\xbP!u\xda\xfe|\xbf\xb\xd3\xf3\x36\x8b" "\xf8\x39\xc4\xf6O\xd5hW\xfe\x5\xc}\r\x88=A\xdd\xbd\xa6\x8c\x91\x0\xfa_\xf0\x93\xae" "\xec\xa4\xf7\x1c\x93I}\xc2\xe2\xfb-sN\xa2R|\x9f\x5\xd8I42\xaa\x9a\xe0\x45i\xd3\xfe" "\xc8\x46\x35t\x19\xff\x1d\x1f\x1e\x34\x33\xcb\x32v\xfc\xb7\xcf`\xde\xc6\xbe\x62\xbd" "\xcb\xa8N\xf1\xe7\x1c\xa7\x42M\x97.\x95\xb2\x1c\xf9\xea\x37\xd5\xe5\xb1\x81\rp!\x88" "\xf3\x14\xe\x95R\x88r\x8c\xc7@\xbb\x8f\x43r\xed\x81\x87\xdd\x13\x8b\xe4\xa7\x1d\x9a" "\xdd/h\xa7_\xf2\xaa\x16\xf2\x8b\xf4\xa6@Q\x0\xdc\xb9h\xc\xfc\x34\x30\xad#\x8=&_)" "0L\xe2\xaaH\xc6\xad#\x8f\x97`9\xcb\x8c}S\x88\x17\x94hg\x12\xc3\x1fw\xc0r\x93\x9c" "\xf0\xf5\"O\xc7\xa2\xcc\x16\xb5\xaa\xa1\xaf\xf3\xbf\x37\x8\x90\xeb*\x1d\xb1\x66\xa7" "\x9c\xa9\x1b\xcd>\xd8\xea\x0\x8a\xaa\x91\x3v\x92\x19\xcd\xaa\x19\xb5\xa2\x34\xea" "B\x97|\xdd\"\xe\xe8\x10\xe8\xd8Y\xe9\x92\xe6\xe1\xceI\x1fG_\xe0\x15\x38\x9c\x9d\x16" "\x7f\x19\xd1\x43 \xc4#\xe3\xfdr\x8e\x33M\xd5J\x1a\x9cLF\x85\x63.\xea\xcc\xba\x1f" "\x1b\x99\xf9'\x83%\xd7\xce\x35\x9bo\xb8m\\d\xf3\x81\x15Z\xca\xb8\x86\x62zP\x5o\xd5" "\xcd\r\xaa\x1b\xca\xda\xe2}\xa9\xd5\\!FqI\x97s\xb0xc\xd8\n\x18\xfc\x41\x0\x9f\x86" "m\x81\xd9\xb5\x8b\xd2$\xf3\x1f\xdb\x7f\x10\xa6j\xf4R\xd8\xb8h\x9b\r\xb4\x8b\xf7\xe9" "Y\xe9\xc9\xdf>0je\xeu\xb\xfa\xef\x43\xb4\xd4\x66\x66\xcc\xfa\xe5\x8c\xe0\x85\x16" "\x13\x13H\xd3\xd7\x8e\xde\xad\xbf\xe2_\x91<\x7N\xea\xeb\xe3\x90i\xe\x63\x96\x0g\x97\xae\xf3" "\xc5\xc8U\x1b\xe8\xb0\x8bV\xc9\x11W\xa2\xae\x33o{\xd3\x9a(|\r\xcc~\xe9\xb3\x34\x96" "\x8c\x5\x1c+\x9\x1d\xbe\x2\x9c\xec\xb9\x34\x39\x65\xf0\x10\xf6\x88#\xed\xff\x39u" "\x81?\x81\x36\x10\xf6I\x19gOt\xb4\x11n\x80S\x86\xcd\xccg\x9b\xe1\x90\x7\xd7\x42\xd8" "\x1bX\x96\x11\xdc\n\x84GP\x89\xa6\x39*\xd0\x8d\xa6\xe7\xf0\x9c\x14\rQE\xa4\xd8?\xf3" "_{\xea\xc5iB\xf0#Lq0\xe9\x93\xb6\xea:\x6\x8a,\xde\xc5\x65=\x9c&\xce\xffj\x95Vd\xbb" "\xe1\xc4&\x8\xf6\x9e\x63\x1d\xba\x42_\x82\xc9\xd2\x11&kL\xd5JJ\xc6\xbd\xb2v\xc5\xea" "\x89\x7fXIN\xe5\x19\xf6\x99\x2@\xaa\x9d.\x1b\xd0V7\xf1W\xfa\xa4\xbb\xc8\x18\xc3\xa8" "z\xecl\xe1\xd6@t\x8f\x1c;\xcd\x9fq\xb7\x8dW\x93i\xc7\xa0\xb\xe7\x36i\x12\xed\xee" "y\xa5\xfc\xe0\x88\xb8j.\x87\xc1\x7zq\xe5\xc9R(\xba\xe2z\xb4\x9c\xe1\x9\x33\xf3\x92" "\xd5\x8\xf2\xfe\x66\xdaY\x8a\xc9\xe8mR\x1`g\xfd\x10\xb7(\xe2\x98\xda#zE\x98&\xd9" "\xcc\xd7\x63\xf5\xbav2\xfa\x15\x88\x9dI0O\x88O\x8aZ\x18\x31\xc8\x31\xd6\xc6\x45\x97" "\xe5\x13\x45\xed\r\x90w\x17\xc5z\x1b\xe6\xda\x7f\x81\xc2\xf6\x95+8\xa6:\xdc\x44\x86" "\x9c\xb5\x11\x98\xcf\xd8\xb2\x34]y\xc2J\xfa\xd2h\xbbv2%\x86\xae\x97\x1\x9a\x18\xe3" "\xf4\xbe\xe6`\xb1\xf\xbe\x12\xf0\xd5\x9f\x99\xdd:g\xc4\x1b\xbf\xcbqX\xeb\xb0x[\xcd" "\xb9\xaf\x44\x9l6\xef\x93\x96\xfa\x30 o\xd2k\xef\\\xa2\xf>2\xe2\x8a\xad\xefHv\x89" "\x5>\xe2\x39|Zr\x9b\xf2}\xa4\xcc \xf7\xde\x34\xbd^\xcaS\xa3\xb4Z\xeb}\x12\x97\xa4" "1\xe3\x9f\x8eI\x8a\xa8|\xd5?\xe3\x9cU~\x89\x9\x5\xdd\xc7h\xcf\x14\xec\x44\xbem\xea" "\xc6\x84\xd7\x66\xac\x8\xcc\xd8\xd7\x8b\x16oT\x81\x65\xd7W){\xf8\xf2\x45-\xf8ke\xe9" "\x1cy\x9e\x1b\x45 hx\x17\xc6\xd1\xce\xe3`tWj\x5\xd8K\x6\xf3\x94\xa5\xa2\x12x\x97" "A\x8f\xc4u\xb5k\x92\xeb\x1eKI\xb7\xa9\xd9\x81x\x91u#*\xf0\xffj~\xc6z\x88\xbc\xa1" "%\xec&\xa1\xfb\x85w\xd0\xa0\xc6\x95_\x2\xec\x84\xbf\x9aL8\xa6g\xfd\x90\x34\x32\xa3" "\xa9\xa5J\xcKUP\x16n\x5\xdc?B\x93oc\xb3\"\x19\x66\xb9\xed\xecw[.)\xecs\xce\xbe\x32" "\xd8:\x9f\xcd\x8\xea\x19\xcb\x37w\xc6\xea\xeb |\xaa\x1c,\x81\xed\xff\xbfO\xc9&\x1b" "\x8f\xb\xcc\xd7X)\xc1s\x95\xc0\xd5\x2\x41\xf1rQ6*\x81\x18\xa9\xf1\xfc\x8e\x1f\xf6" "\xe6\x16\xc\xc2\xb1\x13\xf5\xc9\x89\xd3\xbf`,\xaa\x1\xf0\xd5\x13\x9aH\xc8\xb1\xf5" "\x1an\xfc\xc8\xac\nwY\xa5jH\xc3\xe9\xc8\xce\x98I\xcf\xea=h#\xa8\x8e\x8c\"\x89Vy\x6" "\xfe\x1c\x98\xbd\x81\x5\x1al\x8\x8d\xac\xad\xec\x9f\x1e\xb6\xb2\xcf\x8f'\xaf\xb3" "D\x1d:\xf8\x9a\x39-ZSW\x3\x97\x93\xe2\xce\xacGB\x8b\x18H$\xed\xd2*\xa1GP\x87\x61" "\xf9m\"s\xfd\x1c\xab\xc\\\x9b\x91\x95\x16\xb9\xce\xe0\x37\xe6\xccP\xf4\xd7\xbe\x11" "\xf\xb\x16\x39\xa6\x82oV\x4\xb2[43\xdbi!\xaa\xf7\xc7\x2\xca\x84JD\x14l\xb\xc8\xff" "w\xc4}\xfe\xdb\x80\x14\x15\xeb?\xea\rY\xf1P\xcb\x9c\x13r\xd6$\x9d\xc8\xfb\x2T\xc3" "\x96XK\xb7\x99{i:\xfe\xb2\xc4\x7\xfc\xa0\x8aO\x17N&\xd1)\xb5=\xaa\x0\x13\xc7\xec" "\x19m~\x85\xcd\xaei\x1\xbf>\xecs\x7\xb9\xd2M!\x88h\x82\x92\x83\xf\x18\xa7^^1\xc3" "Jc\xaf\x42\xfb\x99z\xaf\x30`g\x1d\xbd;\xdbz4\xd4\x7\xab\x19\x83\x6\x13\x86G1\xc1" "a\xe3N\x9c\x99\x16\x31\x9e\xf2i\x9a+(\xa0\x8f\x44\xb5^KA\x84\x30\x91\xbcJ\xdb*Dt" "\xe4\xad\xe7\xdcg\x10xv\xa0\xe7\xd9\xf0{\r2\x8f\xbf\xf3\xcd\x9e\xf9\xd7\x8f\xf1\xe1" "\x17\x5\x9b\x39\x94\xa6\xec\x98\x9f\x9e\x1c\xe9\xc2W\xb0\x37\xf9\x16\xa4\xe3\xbb" "\x82\xbbI\x9c\x85>\x7\x1c\xd7\xfc\x19\xc0@\x85\x63\xf3\x8c\xc7\x9f^=\xde\x64\x14" "\xa6\x99\x1c\xd6\xad\x32\x31\xeb\x61\x8aZO\xf3M\x86\x98\x82\xb3q\xc0\x91\xb8\xde" "J\xf0\x7~,W\x8f\xcf\xc6Ll\xa8Q>>P~\xd2\x1\x31*E\xd5\xbc!H\x91\x41\x87\x91\x8f\xaf" "\xe6\x88\x94\xae/\xf9\x93\xfb\x8a\x42\x81Nx^\xae\xb9@o-\x1a\xf0 E\x90\xdb)\x9d\xba" "\x94\xec:\x97\x14|\xd6\x63{]\x96\x18\xf1\xc8\xc5\x44}\x11'*E\xf1\xb3\xd8<\x15<\x16" "\x96\x0z\x9c\x36 1\xdc\xd0*\xa4\x8e@\x11\x8d\x81\xf1\xfd\xde/\x2\xfa\xc4\xaf\xdb" "\x90\xfa\xb7\xfe\xe1o\\]a\x10\xdav\xa2\xbe\x32\x41\xb3\x62i\xcexe\xee\x97\xc0R0\x84" "\x9e\x8f\xedu\xc4\xb0\xc4\xe6\xd0\x82\x31\x93Rmla\xce\xb3\xa9\x1e\xe1\x32\x86\xe7" "Nu\xd6\x10\x36\x2\n\xed\xcf\xebjl\xefV\x17\xa2\xfb\xb7\xff\xd7]V\x89H\xf7\x18\r\x11" "\xfd\xb6\x93\x93\x10\xb\xfbq^o\xfe\xae\xaf\xfb\x31U+\x84PM;j\\\xd2\xa0\xa3\xec\xf4" "\x8e\xcc\x9d\xbc\x8bZ\xa3\xaa\xf5\xc2\x32\xad\x38\x99\x9di\x1b\x42\xb*\xf7\x1b\xea" "f\xb1G;%\xc9#Z\xd4\xf2k7\xc6\xfc\xda\x9f\xc4\xe2\x96\x86\x45l\xff\xdd\x16|\x87\xf" "\xaf\xd0\xb7\x42\xd8\x31\xbb\xc2\x8/\x8e\xa7\xd4=\xd9\x46->\x88\x15\x8\xd9\xa2\"" "\x99\xbMt\xbb\xe9\x9a\xa8,\x7\xcbu\xe8\x8e\xe1$%k4\x9\xe?\x9a:k\xbfRzX$\x95<#B\xf2" "\x1f\xa3<\x4\x33u\xbb&t\x8f\x19\xbc)-\xefZJ\xf3\xc4(\xd4\xca\xc\x84hG\x81\xca\x96" "$\xc8\x7f\xe8\x18s\xb5\xef\x85\x82\x98P\xca\xfe\x18\x30`\xce\xfa\xc9X\xdc\xdeY\x98" "\xe5\xd8Q\x1cT\xecks&\xfa\xa5q\x89\xc4\x91\xf\xbeH\xd1\xbbs\xb3\x97\x66r\x81\x34" "\xb7\xd5\x3\x43\x91 .^:\xa8\xe6\n\xf8\x9a*\x96|\x8c\x10?irN[\x9b\x13\x8b\xd1w\xc7" "\xbe\xae\xb8\x8e\xc\x39\xe7\x92\xcbu\xb4\x4\x6\xb5I\xba\xbf\xd2\xb7\x8\xc4h\xe9\xe7" "\xfd\x94mNse*J\xd2\x1f+\xdc`'\x9e\x9b\x84\xdc\x89\x45t\x96\x89\xef+\xc9\xb9\xa5\x83" "\xbf\x3 \xad%\xa7t\x9c\x4\xd5\xab\xf8$>\xfd;\xc3\xf9(\x1f\xde>\x3[\x9b:\x95\x10\xd0" "\x8\xb8\xdf\x64\xc3\xda\x5\x8e\x80\x8c\x81\xb4\xb4\x1f\xff\xf4q\xd8s\x87\x37+\xf7" "\x4\xf2\xa3\\\x80s*\x8eJ\xcf\x89\x91\xf8\xf7-\x8eN\x1e\x1c\xea\xee\xe2GO\xe5w\x19" "\x8e\x8\x92!\xbc\xd1\x0\xe0\xc2=d\x7\xc7\x1f\xaf_/\xa8\x94i\xf7\x99\r\xf9\x9f\xa8" "\x16\xc9\x2\xb5\x36\x13\x82\x94\xf5\xe5\x11\xf7\xec*J\xb0\xda\xcf\x13p[\x87\xf4\xcf" "\x9f\x1a\xab\x8bG}\x1a\x36G\x81U\x3:\x1e\xa6\xd5\x12z\xb8\x36k\xd5\xa0\x63I\x8c\x85" "T`\xfa\x8e\xb3\x42y~\xf\xc@\xc1Y\x9!\x9f\x14~\xa3\xfbLjt\xad\x12\xc8=\xcais\xb \xef" "0qpz\xf0\x37\xcf\x81\xb8\x88\xb5)\xc2\x15\x36\xcf\xf\x43\xd1n\rx\r\xa8%\x37\xe1\xfc" "!\x1c^\xdc!\xf0s\xa4\x15\x9e\xd3\xe6\xf7\xabH\x9dr-\xdd\xaa\x0t\x9bmB\x85\x37\xf7" "=\x93\xde\x83\x62\xe1\x33>4\xd8l7\xefK\xf4\x94\x42\xbfL\x18\xbb\x83\xa1\xe7\xf9\xa0" "2\n\xff\xfb\xd9\xc3\x1f\x18K\x9\x1d\x14\x37\x1e\xbaWy\xa5&\x1fH\x9d\x94\x42\x11\xe2" "\x85\xe9\x99\xa3;=\xee\xe3\xcb\xbf(Rg\xc6\xe6\xca.n\xfP\x85^sfk\xaf\xb7\xc8\x30n" "\xe7|\x10\xc1\xae\xe\xb0\x37\xfdi\x86\x30\x8IA\xf0\x90{\xbe\x87\xbb\x10\xbbm4\x9d" "\x6\xe6t\xa5K\\\\(\xc4\x39\xf5\xd9`\x18\x4\x31\x5\xc9\xd2\xd7\x88\x35t\xfa[.$\x90" "\xe3'\xeb\x82\x96\xf\x9bQ\xcf\x6\xb0wj\xb1)g\x16\xfc\xe2\xc4\xd6\x66\x46&[\xd8\x46" "_\xc5>P\xf1\x99\xa7`\x11\xf7\x3o\xaf)\xb0\xbe\x19\xe8\xf\x36-\xd1\x97&B\x85\xcbG" "\xbe\x9f\x9cR\x91P\x4\xe\x42Y\xfb\x8cs\x87\x92\x43\x5\xd3S\xe2\nX5\x9e\x9f\xcf\x90" "\x8f\xcdS/\x97\xceRz\xd4\xf4K8\xf1\xad+l!!\xf7\xfb\xaar\xf3\xdb\x94\xd3(\xa8\xbe" "re-\xa8UM>M\xe3H\xc8\x9eV\xbcOA\x85\x8c\xe4q\xcd\xe8Y\xb3\xb9\x31\xf7i\x3\xce\xba" "\xeb)\xado:\xbe\x84\x0\x2\x45(\xc2\x18\xc3\xe3\x1a\xden\x80\xff\x80\xbc\xe0 \xe8" "\xdf\x34_w\xbb\x65\xe8\x9d\x35M\xa9*\xfa\xf3\xbbN\xab\xdd\x62.\xc\r\x94]\x1e\x9\x15" "AY\x7\x8f\x8b\x1c\xc4\xc6\x8f\xd4\xf0\x61\xeb\xdc\x16\x13\xa6\xa3\xfc\x43#\xea\x1b" "1L@<\xd4\xe_\x86\xb8+,M+\xc5\x8\xf5\xc1[\x8cq\xfd/\xb1\x8b\xdf\xfc\xa2)+&\xf9\xe4" "`L\x95\x80\x91\xfgB*}\x9dtMK\x7f\xce\x9qa6C0\xa7\xa8\x9a]U\xe4\x94\x38\x87]\x92<" "\x1f\xb1\xd9\x64;\xf5Xg^\xea\xf8O3Uk/\x9fn\xdb\x62\xd0_\xac?\x93#j\xef\x1\x90\xbc" "]\xa9\xb6}\x16\x41\xe5mQ\x1dH\xf5\xf6 \xf0\x15\xf8\xffi\xf4\xf4\xaa\xd3$$\xf0\xbb" "P\x96\x87\xb0\x44\xdb>b\xb9\xa5\xc7\xaf\xd7\x13\xee\x90\x39\x66\x42\xeaR)\x81\xcb" "\xbfi\xe3\x1c\x97\xaa}8\x8c\xeb\xc6\xb2}#!;\xc6\xf6\xb6\x12$\xcf\x63P(P\xd7\xd0\x66" "\xfc\x95\xa9\xeb\x92\xed^iME\x17W\xd2\xc8\x3\xbm,\x88\xb3]\xd8\xdd\x30\xf\x45m\x1a" "\xf3\xfc\x44\x99*o\xeb\xce\xa3\xe4\x39M\xa4\x12W\x1c:\xebpYN\xb5\xc3\xd7\xc2\x11\x19jrf\x3\\\xa7\xf5\x89\x30\x15\xe3\x95" "\xe0\xce\x1c\x18[\x14QO]\x18\xc3\x11\xd0\xb5\x9&\xd7\xc0\x87\xc7\x7\xd1G5\xd5T\xc5" "&+p\x17\x83V\x94\x32U\xd6/\xc\x84\xfe\x9\x38\x8a\xc5\xa2\x85\xd1tX&\xac\xf9h\xa9" "\x95X\xc6\x13\xa0\xd5\xd3\x8b\xc5\x8b\x91\xbf\xf7\x38\x80\xde\xd6H\xd5<\x8d\xd8q" "\n\xcd\xb3x\x17\x34\xea\xb1lm\x8a\xe1\xb7\x37!\xde\xea\xeeJ\xc9\xfe\x96\xd7>t\x88" "2\x85\xee\xaa@YQ\xe0O\xa8\x19\xda\xc1@>\xa9L\x9b\x96\xcc\"\x7f\xb#hB\x92\xe3K\x89" "\xa9\xac\x95Rd\x9d\x1c\x65\xbf!Cn\x99|VB{\x97\xbc\x44&\x13\xf1r\x97\xf9L\xbbU\xfc" "\xa7\x61\x7fT\xb3\x3\x9e\x35\x30\x85\xaa\xd5\x92UU\x95\xd9\xb1\xee\xfp\xe3\x36\n" "\xc3\xc2\x39\xf8\x1b\xde\x90\xba\xd2\xb1\x90\x14\xb0\xb8\xce\x83\x46\x6\x94\x89\xcf" "\x13\xe0 \xc9\xde\xcfq\xc7\xcb!\xcf\x13\xee\xbc\x1d\xc5\xeb\x61\x61,\xf\x11\x8b\x32" "\xe7\n\x66\xef\x84\xb8\x97\xa8\xc9\x1f\xea\xf8\x63\x7Z\x84\x19{#\x84\xca\x84\xca" "\xb5T\x13\xb1\x8e\xc1\xb\x7f\x16\x84\xe4MW;\xf4 \x84\"\xac\xc2%\xfc\x1c\xa8\xe9\xa3" "\xca\x9d\xe6\xfa\xfb\xb7\xc3\xbf\x43\x7f\x9\xac\x1\xbc\x36\x0\x8e@a\xb6\x91u\x1a" "a!J\xfd\x9d\xd1\x11tg=\x1e\xc6\xbb\x1a)\xc6\x1\x9b\xeb\x19i\x14\x43\x35\xd8\xdb\xa5" "{[\x0\xbe\x33[\\\x8f\xde&\xa0\x45\xd5\xbd\x65\xe1Mo\n\xf5\xf\x1f\xbf\xe6\x17o\x84" "\x93\x41\x13{\x5.{\xceHx\x17^:\xdb\x34&\x13-m\x3\xfe\x15j\xb5\xb1\xf2\xc4\xbd.U\xf5" "\xba\x92\x7\xf0\xaa\xbf`\xb7_\x91\xcc\x38J\x93\xf2{,}\xee\xe8\x1c~\x1c\xe5@\xc9g" "\xdd\x64?\xf0\xa8\xb8\xba\xd2O\x13\xb7\x13\xd0pL\\#\x5\xc7\xdas\x91\xf7y\xee\x1a" "\xb7\x7\xd3\xc3s\x9\x46s\xf0\xa0l:\xb5\xab\x90;#\x3\x63\x30\x8T_\xe7\xebh\x13\xb9" "n\xc4\xa2:\xb4z\x5\xbLA\xc\xf6\xfa\x31\xfd\x1bN\x5\x89\x36\xd1\xd7ZE\xae|)i\x4\xcf" "\xbe\x35\x35\x5p\xa2\x8d]T1\x4\x96\x64\x99\xac\xf4\x31\xc0\xc2\xdc\xe0\x1bw\xbe\x9c" "\xb1\x93\x92\x31\xd1\x9b\xbf\x8b=\x1a\x96P\xc0\x8e\xe0\xb7(\x8e\xf7\\\x95\x31:\xf5" "\x99\x91^}j\xc3\xd8Ms\xc8\xb0\x9#\x1f\xea\xbf;\x14P\x6Z\x7%$bu\x8a\xcfL>\xa6 5V+" "\xf0\x11?\x15\x88\xb4\x11r\x16\xde\xdf\xd5zf%\xf6\xef|(\x94\xde\xeaP\xb3\xa2[!\xca" "X9(qO?\xa3\x41\xdd\x84\x2#\x17\xe3\x36\xe9\x3\x85v\xa2\x41\xeeu}\\(\xf2\x43\xe1\xed" "_\x94\xf0\x46\xac\x1b\xa1\x62\xd8\xa7\x35\x1f\xc\xc3\xce]\x86!\xa8\xb2\x9f\x9d\xe" "\xa3]K\xe2\x63\xdf\xd8\xff\xec\xf4\xc4\x9ex5\x84\x97\xde\xee\xf6\x1d\xb8GX\xa8y\xef" "\xda\xa3n{+\xb8\x5\x94P3\x92\xe2\xd3\xf7\xc3i\xab\x8b%h\xdaPQ\xf0,\x1e\xc7\x1f-\xa1" "\x8bY;\xaf\x10\xeb\x1f\xd9\xf9\x2\x61#\xf5\x61V\r\xe0.\xcc\xf7\xef$\xfUt\xd4\xcb" "`>s\x9f\x7\x38Zo\xd6\x30\xbf\x9f\xa4\x96\x7f<\x8c\x9\x9am\xce(_\x9e\xb7\x64\x14\xe2" "\xe0HhlV\xd1\xb1L\x9d\x85\x1bK\xd0\xbe\xfc\x44\x8fJ\xeb\xb\xa6\x4\xa0\xcf\x33\xc5" "\x94\xd5\xa5\"\x38\x91X\x1b\x39\x99\x6S\xe1T/\x1e\xc7\x87KN\x87$|\xea~o9\x5\xac\xee" "\xe\xc5\xcd\xc7\x92\xdd~\xa0\xfd\xbdG\xea\xbb/\x15\x8cR\x86\xf7\xaa\\\x14\xf7O\x1f" "\xf7W\xb6\xca\x66\x65`B\xb6\xfc\x0\xb5\x9a\x90\xf1\x65,}\xb8\x43\x8a?\x18\xff\rS" "r#9\xe4\x33k\xf6\x1a\xf3\x82\xf0\x1a{\xcf\x80\xec\xb\x1a\x1f\x88o++\xbd\xce\xb0\x86" "\xe4\xef\xac\x8d\x6\xbc\xff{N\xdf\xb4\xe9\x35\xc9\xcf\x85H\xf2l{&py\xd5='\xe\xd7" "\xb1\xe5\xbfk\xa7\xd3\x82\x43\x9a\xf1r\xf4\xd0>\xbcr\xc\xa0\xfd\x65\xc8\xac\xcc\x33" "\x14\x97\xdePhC\x96x\xabM\xc8\xc1\xd4\xc0=|\x4K\x9c\x11\x35\xbf\xb5\xe2\x9bj[\xf6" "\xb6g\xf7!h\xda\xc8\xca\xa4\xea\"\xfa\xcfI\xdb~\x9bl\xdf:\xea\x13<\xa6N\xb1\xdb\xb9" "`\xcf\x90R\x9f[\x16{\xcb\x7f\xe2\x10VG*\xad\xa6\x8fj\r\xdc\x1b\xf8i\xf4\xff/d\xbb" "\xb6\xf\x12\xba\xb2\x83 T\xc5\xdc\xf6;_\xd3$\x99\x81\xca\x86L\xf5\xe7#\xa6;\x8a?" "\xd6\x9&\x1f\r\x80\x1&\xfc\x14]\xf7\x8d\xdfQ w'i\\\xb\xf8)\xe0\xf2mu\xaf\xe|\x82" "v\xcc\x1f\x91\xcb\x36\xfe\xbe\xda\r\xd2\x8b\xf1\xda\x63y\x92\x1b\xfc`\x99\x18<\x1e" "\xc0]\xdd\x65\xf7x\\y\xa5\x8c\xab\xe3P\x8f\x62\xeeh\xee\x1\xe7\x32\xa4g\x93\x44Q" "9\xc9+I\xac\xc2\x1d\xd8\xdet\xfc\xaa\xa2X\xf1\x80\xc6\x65\x1b\x16\xb3\xc6\x93kOS" "\xef\x1f\xa4\xb3\xb6*\xb3\xfa\xf1\x4\xa9\xc0\xe4\x32\x38\xed\x85#\x88\xc7\x98\x8a" "\xexx\xee\xc1\xfb\x30i\x8c\xdaI\x83\xb0\xc8[m\x9b\xe3\x62]$\x6i\xa8I\x85K\r\xbe\x8a" "X\xac\x61uV\xdbs\xf8\xbc\x6\x14%Y\xef\x98\x45sC\x14\xfc\x81\x39\n\x98 [Ip(\xfd\n" "0ob\xde\xe5\x9a\xb4\x34h\xc0R\x96\x0\xbf\xa1\x82\x34\n\xcf\xd9\x41~\xa8\xd6\x95\xc2" "R\x94\x85\xcb\xcc\x17\x91\x94\xa7\xd8\x81\xfb\xaf\xf0\x80\xaa\x9b\x19\x97\x12\x1" "]\xb7\xf2\xb1\xdcU\xe4\x7f\x15\x16\x64R2\x1c\xaa\x0>p\xfa\xbfw\xf4\x92\xa6n\xc8\x7f" "\xe2!\xdd\xd2HeL/\x0\x87\x32v\xd9\x1c\xd6v\x8c\"\n\x84\x89\x33\xf1\x2\xbd\xb1s\xc3" "\x1a\x1fOj\xb5~\xc2\xd1\xafx%\xd0)\xc3\xf8'\x82\x9c%\xea\x16*h\x9d\xc8\xe4S}\xcf" "\xce\xe0t\xc6\xbd\x44\xb8\x36j\\-\xf8\x33N\xff\x63r8\xab\xed\x39\xe3\x9a\x31P\xb6" "l\x13\xbd\xf7\x9e(?E\xa4\xf6\xdd\x39\xf2\x10q\x1d#\x95\xd8\x8d\xe2h2\x12q\xdf\\\xd4" "\xaf\n\x8d\x44\x9c\xdb\x45<\x95@Js\xc6,\xd1HU\xdf\x43\x38\x97N\x83\x9a\xe\xad\x62" "&\x1c\x2\x89\xfY}=\x9e\x34qk[\xa9\xf9o\x91G\x15l$\xe5\x61\xd0\xad\xc9\xa2_\xc5o\x1" "_7X!\xa1\n\x81\x9a\x95\xa1{{cE\x85\xf3R_\x90\x8d\n\x19\x16\xf3\x45\xb7g\xfe'\xa0" "m\xe0\xf2\xfb\xbd\\\xfe\xd6\x30#\xba\xf6\xe2\x42\xe6\x84\xc\x93\x1f\x43\xa6\x62~" "BA\xb9\xe8\xcZ\xe3\x80\xb0x\x11U^:!KVe2\xbf\xb2\x64\xee\x86\xad\x8fl\xab\xbf[x\xf5" "MM2\xc4\x83\x66\xd8\x8a\xa5\x94Nr0.\x7fx\xdd\xd8\xd4\xecR\x81\x83\\\xb0\xaa\x61<" "\x9btQ\x2\xa2\xd3W\x97\xa8U\xc6\x98\x82\xc9,\x7:u\xaa\x9a|\xd7v\xec\xb4\xfa\xd8\x16" "\x87\xb6\x1f\x10\x13\xcc\x61+\x99\x14\xdd!\xa6\x42\x15\\\x8a\x19\x88\xc5\x1d$\xa2" " \xbe?\xfc>\x1e@A\xdempz\xcd\x42\xa6\x8f\x30\xdb(\xd2\xf3\xa3\xc9\xc2\xc7$x\x8d\x97\x8ZC^?\x15\xe2}}" "\xc1\\\xa0\xacmSX\xfaX0\xb3\x8f\x39\x87\x8\x41\xfd\xd9\x9d\xba\x85\xd8^\xc1\xd1\xe5" "\xe9?\xa4\xccYQ:\xb8\xb4H\x88|\x96\x33\xa7\x1\xe3\x82Y\xc\x42\x44!\xbe\xbf\xc6\xb0" "\x9e\xcd\xaf\x1bj\xffn\\g[SO:-\xe7o\xfbh\x97\xfd\xfa\xf\x42G\xfb\x81\x39\x97\x31" "\xc9\xfe\x1a\x95\x42\\\xe7\x89\x30=\xcf\x33;\\\xac\x1\xa4\xe2XbA4\xe6\xf6\xf4#\x3" "\xaa\x88\xc9\xc2\x9d\x43\x16\xdb\xef\x89v\xe0\x33T4\xce\xdc\x1b=\xddm\x83 !h'\xa5" "|\xd3l\x8c\x92\x83\r\x30\xd8\xa4\xb7\x42=\xd4z\x1c\x9c\xfc\xads\xbd'U\x94_\x9d\"" "\x85\x99'\xde\x1f:Py\xb0\x64\xb1\x89\x13p2\xe8[)\xa9\xe7\xf7\x94\x33?\x1c{$C\xa9=\xb3" "\xd9\xe1\xd3h\x4\x2\xe4\x96\xbe\xa6M\xb1\xa8\x66\xef\xeb\x11YJ`\x9b\x92\xeb\x97\xba" "\xcd\x44\xef\x8d\x5\xf2\x13\x35\xc\x81\xd5\xbf!\xd2P\xcd\x2\\\xbe\xe4\xcd\x0\xee" "\xa6X/\xe0\x46=\x84\x4T7\xf4Z{\x83+\x5\xa5\x9f\x17\x41\x43\x93@&f\xeli!&\x98\x83" "s3@\x88\xe6\x65\xbb\x1d\xab\x92i}u\x94\xed\xe1\x9f\xf6\x99\xdeq\x9c\xdd\x63$eUW\xff" "\x0\xbf\x88\x8c\x98\x17\x5\xa3\xd9w^\xc9\xdc=\xbe\xd6\x65\xebW\x90\x86\x1a\x97\xa2" "O\x17Wf\xe1\xe7\xccrg\xf4\xea\xab;`\x1\x62Z\x98\xcI\x3\x31\"\xb4gy\x11\x17)\x11\x95" "t\x18{m\xa9\xbc\xe4\x42q;z\xff\x62\xd1\xa6\x7n\x7\x1j\xd3\x34\x1b\xbdX\xb4R\x89\xea" "\xaa\xbH\\pW\xf9\xc4}Z$\x8fH/q\x16/\x92\x88q\xb0!{0\x89\x13\x9cN\xb9\xd2:\xb5\x4" "\x3\xc5\x9dS\x1d\xe7\xf0,\nR\x7f\xb4\x35\x97\xb8\xe5\xad\xa7:J\xdf{\x6%\xdaP\xe2" "\x82*\xff\x9dj\x9f\x38\xafP1B\x1\x81_y\xee\xf6&\xa1&\x80\x31\x8+\x1f\xb1\x98\xc\xb5" "\xb\xf7]9N!\xa8\xba\xe1\x63\x6pE\xbf\xd0\xa5\xce\xe5\xbdm\xb0J\xcc\xd1[\xe2\xd2\xcd" "\xc8,\x92v\xb8\xc6~\x3\x42\xd1\xb0\xd5\xfc\xec\x98\xa0VS~e\x88\xe7MW!N\xba\xd1\xc9" "\x92\x16q\x9b\x35\"'8\x84\x6\x11g\x90\xc4;V\xbdj[\xe5\xf4\xb8\xf\xa6\x92H-\xb8\xc0" "\x1c\xc3\xd1t\x81\x37\xd7\xa3\n\xac`\x9a\n\xea\x9c{\x16\xf6\xfd\x46\xb5\x8b\xa8\xc0" "\x86!\xb5,(O\xd5\xaa\xb3&\xa4\x85\xc7$\x14\xdf\x63_\x1\x8cP\xa5\x9\xac\xfcQ?}$\xd0" "AJ\xb7\x9a\r\xb7\r\x7f\x85\x2{(b\x16\x17\xf9\xd0\\\x6\x5.MBm\xa0\xca\xb9>i'\xe9\xae" "\xe9\x1b\xdc\xcaY{\xb3'|,\xd5\x94\x66\xd2\x92\xeb\x9ck\xe\x80\x9d\x92P\xe1\x46\xfc" "\xed-\xba\xce\x65\"\xa7\x36\xea\x1d\\O\xe5\xf2\xda\x63\x8e]@\x88(0O\xb2\x8fw\x1b" "\x91\xe\xe9\xc7\x9e!\x90_\xbc\xcdH\x12\x63\x36]\xb5`\xfb\xb1G\xb6\x1f\x42\x18z\xa3" "\x1d\xc4\x9f\xf6sg\x8\xf\xc6S7?\x10.9R\xce\xc7M\x94\x9f\x65\x6@H9\xbe\xacY\xdf\x82" ")\xc3\xab\x81:\xe0,!\x3\x62\xd3\xda\n\xf8\x46\xca\x41\x17xC\xce\xd7\"\xbe\xd9\x37" "\xfa\x3\xce(jI\xc1\x18\r\x85g0\xe9\xab\x9a\x44\x9d^\xa5L\x13t*\x8dT\xcer\xa3g9\x4" "\x12\x99\xbas\x93*\xda\x46\x3\xeb}(\x96\xe1\xd5\xad\xe7\\\xe7\xba\xc5\xd7\xe5\x15" "\xea\xd8\x31\xefu!J\xdb\x37\xc9\x17\x41\xc~T\xf2\xb2\xb8\xdd}\x85,@\x84\x44\xfbO" "G#\xa5\xceo\xe3\xe8\x5\x4\x66\xb\xe7\x8a\x9c]1\x3\x82\xe6,\x8c\x12\xc9\xe4{\xcb\x34" "\xf3\xb3\x41\xe6\x1cV\x1a\x1ek\xcf\x12_S\xc\xf9\xc6\\\x8d\x1f\x1e\xec\x65\xf2?]\xb4" "\x84\x7fL=\xac\xac\x8a\xbc\x62\x64\x1eU\xa2\x61\xc8\x99\x80<\xfcK\x8a\x9e\x37\xb9" "\x86\xe\\\xb1s\xb4\xa0><*\n\xcM\x83q\xbavi\xd7_N\xef\xd4\xc9\xd0\x94\x7\xa1\xe2\xe7" "E\x85R\x17\x97\x12\x9c\xd8n\xa3\x14p\x98k\xc2\xda\xee\x82\x1a\xcaGE\x1c\xc8\x91\x9d" "\xff\x9e\x98\x45\x8Y(\x3\x88\x97\xd8r\xae\xe2\x88I'\xa3\x44H\xf4\xde\xca\xc1\x13" "]*[\xb6\xda\xa5\x44\x10\x46\x84\xed\x95\xb4\xc5\x82\xda\x3&\xac\xef~\x99k\xfe\x8" "\xa1\x1b\x0Q\xa9\xae\xcJ\xdd\x1d\x97\x44\x0\xa8\xc2\x1c\xa9\xadq\xf\\S\xb8\x16\x83" "\x16\r\x19\x1f\x9f\x19\xd8\x1b\xb9\xdfGd\xa8]\x84\x8dr\xed\xdc\xbd\x99\x8c\xf7-6" "\x6\xac$\xd9\x65\xed\xdf\x44YPD\x15\xe0\x61\x1c)\x9c\x37\xa5\x93\x6\x36)JF\x98r]" "\xb9\x87\xd5^\xfc*\xe0\xfe+\xea\xca\x90\x34/\x1f\xf5\xfe\x33\xa2\x8a\xd9x\x83\xf3" "\xcd_\x8d\x64\x95\x66\xe9\x37-\xbf\xe3\xcc\\\x95\xfdH\xcc\x83\xbf\xae\x7\xa3\x63" "zJK\xa8\x41\x7j\x82\xc9\xa5J\xfe\x98&\x1d\ny\\y2\xf5m!\xea\x6\xf8\xfb\x7\x64Vi\x91" "1\xd5\x1ek2\xf\x0\xe7\x99\xd3\x35Og\x0\xcah\x7f\x11\xc0\xd5N\x1c\xf3\xcb\xb4\xd6" "\xb9\xff\x95l\xf3Hz\r\xd2\xf9\x8d&\x16\x44M\xc1\x7fUt\x1\xe5\x9\xa1/=\xd3\xef\xf9" "\n\x9c\x32\x61?\xa4o\xbb\x14\x3\xablC\xb1\x14\xf1\xe1\xdd\xff\x16\xf1x\x17\x85!=" "D,\xa4&\xe0\xaf\x87\xba\xcb\xb2\"]\xf2/{d\xf4\x4\xef\xb\x19_=\xe9\"\xb4\x35\xb4\xd7" "\xd9\x1e\xb1)\x1b$\xb5\xde@o\xd5\xd5\xd9M\xe8=\x9e\x8b\xca\xd5\x8n'N\xd8\xa4\x4\xb8" "\xb4[-\xaf\x63\x17\xdc\x5\xf4\x87\x8\xcd\x45\xd7\xfa\xbfx\xd6\xcbJe\xca\x97\x34 " "\xbd\xc\xbd\r\xda??pa\xc1T\x15\x32\xb1\x31J\xe9\x18s\xfa\x9fO\xe2\x99\xe4\x1e\x97" "\x1e\xccY\xb1\x41\xaa\x41\xf9\xa0\r\xb2\xfd\xa8V,\xec\xf7*|\xe7\x90\xe2\xab\x46\x30" "\x1a-\xbbg\x1e\xfb&\xf6\xad\x63\xb4\x1\xbb\xa2\xea}\x83\xefG\x6.\xa5M\xa3\xc3PH\xf3" ">\x95\xe8\x89\x1e\xe2\xd4\x80\xa6\x34\xe6>\x85K\xf6\xb2\xf2\x92\xc2\x1gA\xf5\xdd" "`S\xdc\xa3\xf5\x45\xd8\x41\xdbIGi\xf5u2\x86\xa0\xd2#\xee\xf6;<\xd6\x46\xb9\x96\x66" "jnJ\xe1\x15~\x13`\xce\x82\xa3\x1b}\xac\xd9\x7f\x9\x9a\x33h\x1cgGJ\x91\x45@\xa4\xad" "\xfd\xb5\xc1\xa4\x1e\x41\x7fO\xb7\x95\xecM\x8W\x1s \x98\xdf\x95\xe5\xa3\xa8JM'\xe1" "b\xa5\xf1;\xfbh^\xb3\x8b\xbR\x5\xf9\xe4MC\xdb\xc6\xa1*\x7f/\x9\xc1\x45\xca\x37\xf2" "\xaa\xfa\xf1\x1bZ\xd9\xd7\xf6\xd4\x14m\xf\x61Z\x83\x83\xa6`\xd8\xfe\xaa\xb7g\x9\x86" "vim\x2\xc8\xc5\x95\x85\x8a\x16\x44\xbe\x9f\xa6_\xee\xe4;\x99\xc2\xde\x3\xe1\x15\xc4" "\x1f\xe\xd9\xee\x9d>\x9fw\x97\xb4M\xb0\xb6\xb9\x9b&N'\x1a\x0\xa7\xc8,\xe\xd3\xa9" "\x96H\xd6\xff\xb4\xd8\x84\x9d\xbfH\xae\xa2\xe0;\xb8\x14\x64\xfb\xfe\xc8\x61T\xf\xd2" "s\xec\xc6K8\x94\x81\xe7|VS\xeb\xe1\x10$ \x2G\xc3w\xac\xc2\x4p\xf3\x62\x99\xb2=\x90" "\xdc\x66\n\xc7R\x9o\xfa\x1b\x11\x8e\xac)\xfa#\rO\xf6\x92j\xccI\xef:$\x9f\x1c\x61" "\x97R3?\x84\xf8\xd3\x93Y\x18\xbdmY\x89\r\x1d$\x94\x34\x93\x66}S{\xde]9\x6\x1|\xa6" "@\xff\x1c\xa7ph\xe2\x8dJ\xa1\xeo\x93\xd0\xbf\x12\xa2X\xe1\xfbX\xdfO\x1b\xd6\xb5+" "\xf]\x9d\xc9\xd0\xa9\x1b\xc5\\\x1bpH\xa0\x62OT\x85\xe4\x66\xc6\xa8_Vqa\x11R\x83\x94" "\xf4\x36\r\xc8\xc3\x14\xab-\xa4w\x99o\xb6\xfe\x1b\xc9\x18\xab_\x81\x66\xea\x10\xbb" "vA\xff.d\x97\xab\x33\xfb\xf1\r\x90\x31\xe4\x11\x7f\xcc\xb3\xd7\x6\xec\xdcI\xa8\xde" "S\xbf\x11\xa6{\x9dhY\x9e\xf1\xc7\x43\x15\xa8\xb1\x94,u\xbaG\xe8\x30GGU\x1f\x37\xd0" "\xb7\x44\x7f\xb0\xc5\xd9\xb3\xe9\xf1\x1d\xb8\x8\x82\x80\xe1\xfap\xed\x8f\xdb\x63" "\x10\x66\xb1H\"\x89\x18\x1d\x89\xcft\x84\x97\xa8\\\x8\xaf\n\x9a\xa8\xd1'M/\xa1\xa8" "\xceGO\x19\xcaG\xdc\xb3\x8bKV\xa0[\xcfMp,\x1b\x33\r\xe7%\x87\x13L\xca\xfc\x8c\xdb" "R\x1a\xe7\x43G\xcd\xcc\x4\xa7\xfe\xca\xc1\x19\x1e\xeeSV\x7\xblj<\x9e\xd4-i\"\xe9" "ni`Cc\xd5\x8e\xf8\xc0\x35\xe4\xec\xb7\xb3\xac\xd9\x95\xf7\xfb!V\x15\x3\xafy\\<\xc0" "\x95wC\xf8\x94\x96\x8d\xc5&g\xf4?\x1c\x89\x16\x8a\x93_i\x17\x83\x63H\xbe^\xcdN\xd3" "'\xb4m\xdf\xe5\x87\x90\x9c\xac+\xb9X!Ku\xe3\xf5\x62\x1c\xd6lI\xf2\xae\x33U&\xee\xc4" "\xc2\xab\xbb\x84\xab\x65\xb6\"\x34\x66\xff\x65\x9e\xbfM\xab\xfb\x82\xc0\xc6\x1d\xbf" "y\x85\x3\xd2\x98\xad!\xc5\x36\xd0\x36\xc7\xed\xa2U\xb4\xe0\xb1\xf8u\xbd\xef\n\xb9" "\x95\xb8;/\xbf\x91\xee\xa7\xe\xaf\x80\x95R\xd7\x1f\x92>\xbcvt\xe6\x86 \x1\xee\xe4" "*\x16\x1fjl\x8c\xd3]\xb3)\xf9\x37G\xeb\xd5\xdc\x61O\xea\xc8K\xfa\x4\x44\x33\x34\xf2" "\x0\x8a\xf2\x8d\\\x94\x1b\xa3\x1e\x11\xed\xcf\x9c\xf0\xa5*w\x8Y\x9b\xcb+.I_:\x1W" "\xe5LQHZ\x1b\xd6;\xc3\xe0\xe5\x91\xb9\x8dw\x7fyaoc\xa8w\x1d\x9c \xd2\xa5\xcd\xed" "h\x81\x43\x6\x12\x61;\xd0\x2w}\x9a><6\xbb\x95\x46\x36\x8b\xea\xc\xd1lg\x1f\x61\xb8" "\x8c(\xf3\x9a<\xaf\np\xcP%K\xb1\xfc?r_+\xcf\x39X\x1e\x8d\x9f\x62\x81\xdfO\"\xbd\xfb" "\xacz\xd7\xca\xab\x43J'%\x19{\xef\xca\x7f\x1d+\x16\xf7\xa3x\xd9\xe0X\xbfx\xe2\xe3" "\x9_V\xb0\xb0\x84\xf\xa8\x6\x10\x65\xec\xcb\x10\x9a\x33\xd3\xc6\xae\xdf\x39\x19%" "I<(\xad\xd1\x1b\xe1\x85:\xb\x9c\x14\x33\x39I\xcbm+\x1b\x89:\xee\xe4\x80I\n\xce\xc7" "2\x97\x63\x7f\xa7\x16\xf1\xf4\xe0\xcc\x5\xabVB_\xa7\xe6\xc8q\xc9\x86\x3\x81Z$\xea" "\xb6\xb1\xf2&\xdc\x9d^\xb5\xcf\xd4\x86\xac\x8fw\x11\x5\xf0\x84\xde>\xe0\x41\x32\xbd" "\x14\xca\x8Z\xb6\xe2\xb9\xce\x13\xc1\x4\xce\xc6\x92S\xb5\x33\x8f\xd2u\x1dHB9\x94\x9b\xd8\xc6\xda\xc6" "\xe3\xf8\xe8\xc3\x9aV#\xe1\x18\xf3W\xcd\xea.\xa5\x81\x82\x46\xd0\x42\x13\xad-\xb3" "\xb2\x85\xcb#P'\xdf\x3\xbb\x98&\x6\x9f\xca\xba\xf5\x36\x36\x13\xe2=\xbe\x65\xd8\xf" "\x15\x8b\xact\xfe\xc3\xe4\xafn\xd3\xb9\x30\x0\x1_\x89\x11\xc2\x99\x1a\x6q\xdf\xc2" "\xff\x17\xa8\xf9\xd2\xcd\xde\xd9%s\x9b`g\xee\x81\xa9\xe7\xba\xcd\x84\x9e\xcfj\x8c" "\r\xcc\xa4\xc3\xc1\xe2\xe7\\?S\x1\x1e\xee\x94\x9f\x37\xf6\\\x82\xc9\xa1\xfd\x1<\xee" "\xa5O%\xd5\xc7\x16\x35l\x9\xb7\xa3S\xbc\xdd\x97\xce@A\xe3\xe3\x8e\xf[\x87\xda\xe1" "\xba#\xc4\x97O\xa0\x94\x92\x62\xa2\x1)\xae>K\xa0\xeb\xe1,\xc1\xffr\x6\xb0\x1a\xd3" "\xb7\x1e\x10\x18\xca)I\x89\xff\x6\x2\xce\xa1_\xc3\xcb\xb1\xe6\x14\x18\xa7\xac\x16" "\xcdg\x92T\x97YTHl'\xd0\xad[\x1b<\xc9]q=\x85n\x80Tw\xc6\xf*\x8d\xfb\xc7\n\xd0\x94" " \xa9\xea\x92\xe8\xf9>\x88W\xf2\x9aUu8\xe5\xb7\xd2\n\xa6\xe7\"Z\xeb\x8d@\x12\xc8" "_^!<\xe1\xd0\x43&\x7~\x90\xd0\xa7\xe4\x8cU\xe5\x46\xb7,H9\\\xd9&#{\xb8\xca\xe1\n" "\x2x3\xf1\x66\x12g\xcai\xc2:\xc4\xfb\x10\xf2\x96\nH\xf4\xb6\x90O\xf7\xee\xb\xab|" "q\xc6\xcf\x35\xa6Ol\xdd\xa9\xa4W\x9a\xc6\xb6\xf1\xddO\x81U\xb6\xf0\xbf#t+\x95G}\xe0" "\xd9\xed\xa8\xbc\x96\xf2\x7f\x16\xcd\xbe\xa5\x62\x84 \xf\x14\xf3\x1d\xb1\xdc\\@\xfb" "\x8a\xb7h*\xa3|j\x9b\x61\x91\x36?\x88\xb0<;\x9d\x96\xdc\x64\x12\x3\\:WuB\xfbZOZ\xf9" "\xa4\xb3\n\xe5\x4\xc8\xeW\x87\x34\xc4>X\x17\x44\x7f\x91\x4/_v\xc4&\xb1\x2\x36\xeb" "\x12Y\xd0\x7G\xeb\x8d]R\xbdh*\x0\x42H\x84\x61s'lO\xc0\x30\xba \xb4|\xb6\x38\xbfM" "\xc\x80S\x9\x8e;\xeb\x9e\xd9\x6\xc7\xe5\xee\x33|\xf1\xc4l\x6\x91\xd1\x9\xcc\x97\x90" "a=y\xac\xa4\xf4]\xc0\x1bL\xee\x12%M\xd6\xech\xa6\xc4\xda\x85\x16WcjGu\xcf\x92\xf8" "\xbcQ\xe\xe6\xa0slJ\xf6\xe5\xf9\xf3\xe7q\xecKt[[x\xf7\x44\x0>\xd8\x8a\x33\xfc\xa0" "\x9e\xcd\xca\xdd\x61K\xe6\x15\x99\xd6\x18\xf5yD\xec\x17\xb8\x9f#\x85\xbc\xf8\xe4" "\xf!\xcc\x30\xfd=\x1c\xc4\x63%h\r\x15\xd2\xe3\xbb\xcc\xc4\xe5\x44\xf8\xb0\xa1|\xcb" "\xc4\x1e\r\x81\xec\x4\x46\xb\x93\x84\x14\xbe#}\xb0\xa8T\xad(m\xee\xbe\x4\xc0z\x15" "\xd9rd\x0IxU0j\xb8\x11\x89LEf\x15\x9fV\xff%\x19\xa1,-e\xfc\xa0~\xc8\xc1g\xd9\xd3" ">\x98.\xc1\x84\x18{T*\x18\xad=[c\xa4\xdfH\xb8\x1x\x9f\xc4\x9b\x86\x61I\xe\xfe\xcf" "\xc1\xe3\x9f!\xbb\xc0\xc\xdb\xe8\xc3\x9a\xfa\xb1\xb0\xc8\x32Y\x94+F\nq\x14\xe1?\"" "X\xd5\xcK\xdc\xc\xe8\xc5r\xe3\xe9\x87\x8b\xcc\x41\xbd\x46?\xba\xa7\xc7\x99}\xaf\x9" "\xb\xf5O\xd4\xe7;\xa8\xe1\\(!\xa2\x63V\x8e\xcdo2\xc2\n\x8f\x18\x0\x8a\xba\xc0\x30" "\xeb\xce,\x1a\x64\xe1\xcf\xad\x9c$+\x9f\xfMS\x86h\xca\x8c\xf8\xa1\x8e\xcc\xc8W\xe6" "\xc9q?\xbbx3*\x8\x8e\x66\xea\x89:Jjl\xc3\xf5\xb9>\xee\x45\x30\xfb\xec]\xad\xd1\x46" "\xa4G\n,D\x9a\x46\xaa\xe1g\xaf \x87\xda\xcd\xcd\x6\xfd\x81\xce\x33\xf7*C%I\xbdl\x9a" "j\xc\xe6V\xe8\xf1\x37\x85\x7f\xa3/\x9b\x7fv\xbd\xda\xfe\xf9z[\nq\xdfr\xd4-|Y\x84" "\xc7y~O\x5\x8e\xf6Z\xe7\xbe\xea-\"$\xdf\xd7/B]\x8b\xfd\x6\x8e\x44@\\d\x87.>\xef\x0" "\x1a\xd8\xab\xb8\x87\xd3\xffR\xf\xddR\x0G\xeaW\x9a\xe4]3\xcch~\xd3\xc3\x3\xb1Oh_" "}\x18\xe3\x35\x0t\xfc\x86\x8\xdf\xd8\x17\xde\xeb\xa3u\xf\xbaJ\xbf\xb\x8bQd\xea\x9" "\xe9\xe8\xc9\xb1i\x8c\x8a\x61\x86\xe9\xd0\xfc \x8c\xb6\xa7\xfd\xe6\x90\xeb\xad\xe9" "\x2\xac(\xbb,\xd8\x6\x13l\x10z\x92#&\xe9GZ>\xf4\xa6\xaa\x88\x7\xfa\xeeO$\xab^\x19" "\x80\xf4Z\xe7uX\x95\xe3Q\xae,L\x7\x98\x9e\x65\xfb[i\xc9\xe5\xf9v\xc1<{A\xf4Zl\rY" " \"\\2\xeb\xad\xf0\xd3w\xfc\x0\xa8[\xaf\xa4\x97\xc9\x11p\x1\x87\xc9u\x10\xeR(f/\x0" "e/\xf8\xa3\x90H\\\xd2\x94\x36\xf\xc5\nv`t\xea\xf0,\x83M\xbe%\x8\x39\x63o\x16\x9b" "\xf5\xaa\n\x1f\x10\xf9\x95 \xe2,TG\x8d\xa9W\xfb\x62]H\xf6\x87[\xf2\x87\xc1\x1b\x39" "\x98 \xd3\xf4\x88\xac\x96\xb6\x7mH\xe0tye\x9a\xf2\xe7\x33h+V\xdc\x7\x45\xbdR\xf3" "!X\xe5\x0%\"\x9d\xecg\xb1[\xe2\x42\xd4\xea\x9@N\xc5\xda\xc3Gsf$\x9c\x65%\xc3U\x8b" "d7\x15\xfc\xa6(!\xc3\xa3\xc3\x16\xc2~\x93\x19JoO\x15+\xff\x9PUc}\x9ashLw\x9\xa9\xf3" "}\xe5\x8f\xc0\x9\x1c\x8\xed\xd0[\x9a\x9e\x14\xbf\x42;\x82\xb0!P\xe#\xbd\xa4;A\x9c" "b\xcf\xa5\xa1%Y\xb\x18\x15s\xd6\xdf\x81\xd5\xbd\x9b<\xaf\x94\xbd\x1a\x87<1\xd1&m" "\x87+,\x1e\x89\x9bg\x9dv9\x15\x31\x96z\x90\x9a\xb5\x9f\xebGr\x86\xeby\x14\xb7\xbf" "\xe7n:\xea\x9c\x1a\xd1h\xc0<\x0<\xe5\xd8\x8a\x61I\xb8\xf0\x61\x0\xf1\xd7\x8j\x8d" "3\x97J4~\xd2s\x97?K\xb2\x13'\x88\x1c\x80\xd3\x32\x89P\x10\x96\x88\xd5\xf2\xc9\xd2" "\x90\xe3\xf2+`\xd6\xa9\x9e\xc7&=\x95v\xce\xac]\xc7\x89\xa4\xa7\x83\xf9\x1b\x89\xce" "\xfd#X\xa9\xef}\x0\x32V\xc6\x3z\xaf\xe7\xd7\x0\x8f\xe4\xfb\xdc\x1e\\}\xc7\xe5|\xfd" "\x85\x1eZ\x13jo\x82\xee\xb2\xf5\x90\x1e\x18\xd7\x8\x9!A\xc2\x96\x81\xbd:-\neY\x8f" "\xbd}\xab\x16kg~{9\xd8\xe1\xb5\x45\xc8\x81W\x8d\xa7K\xe5\x7f\x87+\xc3\x1e\x13\x87" "8T\xc9\\\xc3\xb7t\xc6\x32;\x81\x96\x46\x8c\xc2\xc0\xf1\x42\xfKH\xd5\xc1\x18\x17?" "\xe7\xaa#\x9b\x16\xf7\xad\x42\x46\x1f\x62'~K\xd9:\xa7Y\xe\x6\xe7h 3\xb4\x37\x65u" "3\x8f\xd5\x65\x93\x31\x88\x34S\x2\x38\xb7\x3_\xce~Y'\x9d\xe3\x65\x8a\xed\r\x90h\xa2" "\x9f\x92w\xa7\xd9\"\xe5\xe3\xad\xf5\xc,$\x14\x6\xb6\xcz[\x90\x46\xb7\xef\x87\x65" "\x80\xcb\xdd\xb\xecx\xb1\\\xca\xf/\xde\xdcmf\xbb\x43\x85\xc7\x9\xbdu \x85\xf8\xd2" "\xa1z \xf1\xef\xdb:\x8u\x88z\xbdV\x8c\x96\xc0\x34\x32\x93+\xdd\xd8\x1bW5\xddG\x1b" "\xff\x14\xba\x88\xe9\x43\xeiX8\x3\xac\x95\xf6\x1c\x96\xa5\xfd(\xa9M\x7\xf2\xae\x65" "H\xcf\x95\x86'\xafu\x1c]&t\x7\xee\xbd&]\xffTe\xf1\x9d\x83H\xfb\xf8M\xbe\xb1kh\x9a" "\x88\x41\x65I\x14\xa1\xd1\x31\x61\xe9*~M\x9d,b4\xb2S\xa3m\x82\x87\x33\xfa\x1d\xe2" "\x90\xb9\xff\xf5\xe3\x11+.l\xaf\x81\x98\xee\xea\xf0\xccQ\xf6\x30<\n`\xb7I\xf9\x66" "Tc\xc1MA*\xd5\xa2k\x81H^)q\xe8\xfe\xfd\x82\xd0+\xe1l\xb1\xad*\x96\xa0\x16\xc2j\xf3" "\xe0\x1e\xc5M\n\xdb\xc6\x1c\xbb\x7\xb3\xdb\x5p\xd8\xcaH$\xe1\x6\xa7Sb\xeb\xac\x1d" "M\xc3nK\x92\xb5\x83\x61\xf9\r\xc8\xdb\xd7#\x1a=~\xe3\xab\x1th\x8d\x85\xa1\xc2\x1a" "\xe7\xbb\x96\xe2\x16m\xfe\xb6\x64\x82\xe3\x96\xf2\xbf\xc\x9eK\xe1\xde\xec\x38\xc2" "\xa5\x9b_f\x86\x9d\x95\x3\x11\xf\x61\xda\xca@\x19(z'nKl\xc\xfb*\xcb\x16\x8f\xf6\xe5" "S\xe6\x9b\x0\x66\xcb\xa0.]\x8b\xcb\x1d\xa7\x64\xdb\x62=\x1e\n'\xcal\xe\xfd\xcet'" "5\xf5^\xbcN\x1f\n\xe8L\x81\x36\xd3S\xb7\xd0\xd0\xa2\x62(\xe3%t\x85~$\xf2\x15^;C\xcc" "\x81\xf0\xa9\x86\xd7n\x97\xa5\xef\xd1\xc0xj\x93\x8b\x64\xc2\xd8\xcbm\xe1\x64\x38" "9+K\x88VY\xcd\x11\r\xe2\x17)z\xfR\xd5_\xa2\x8f\xd8S\x94\x9e\x90\x1e\xd8\xad\r\xdc" "Wh\xda\xcf\xac\xe8\x8f,@\xe6m\xa9\xad\x64Q\rK\xd0z\xd8SM\x96\xde\x36\xfdo\x1d\xc0" "\xcajJhak\xf6\xbe\xe7\xb9\x85\x87z\x19\x9b\x8d\xcf\xfc\x13\x1a\xfb\x18\x8b\x8e\xc1" " ,\x5\xc1\x9a\xeej\xb4\xa8\xa0wQ3c+\xb3ru7\xe3V\x85\x8f\xd9\x88\x9a_\x4H\xf7\x45" "\x16\xb3\xcb\xfc\x95U\x93ws\x97\xb1,;LN[}#gv\"P\xd0\xf9\x8eY,\x85[\xe\x10\x92\xf2" "\xf7\xdb\x95/\x9n\x99\xf8\x2\x3|B%xd\xbnE\xbd\x11\x33\xa3\xf8\xcf\xfc\xc9\xab\xba" "G\x9e\xcbX?8\xc\xa1\x1f\xca\xf2\xf8y\x97\xae\xbb\xe7@\xb2\xbf\x35\xc0vT\xc8\x19!" "\x96\x66K\xb0\xd4\xa3j\xc5O\xf0\x84\xe0\x1b\xaf\xba\xbf\xc5$^\xd1\x95\xd1\xc3\xe6" "\xd6mC?\xf4#k\xd9\xfd\xab\xcc,\xfc\x9f\x1a)\xf7\xb7\xc3\xf5\xeav\xc9\xf6\xa0\x18" "f\xc8\x15\x7]\xc7\x6hAN*\xa1\"\xc9\x31U\xc7~\x8a\xc9\x95:5x<\x8fs4\x1e\xe0\x1e\x6" "\x18S)\xee\x44k@\x5s$=9V\x96;!\xdb\xc6\x90J\xeeK\x1\xa9\xf1r\xd8gxB`Z\xac\xee@\xe2" "]8{\x1b\x3Y/\xba\x12\xfa\xde\xb0*q\xe5\x14\xe9\x99\xc1\x43\x90\xb8^\\B\x19\x88w\xac" "Au\xb\x81J\x86\x9a\xd9\x95\x90\x66\xa6\xb8\xd6P\xbb\xf0\xd8\x89\x9\xban\xc2\xc0\x46" "I\x90\xb\xa1Z\xd3\xa0:\xe0t8\xfd\xc4\x44\xe9V\x6\x14\x41!\x19\x4\xe4\xc5\x33\xfc" "F\x97\x9d\xe7\x95\xfckc\x91\x46=*>\x91\xca\x5\xf0\xe7\xc9\xcf;\xee\xb3\x1c<\xd7\xf5" "\x13\x1b$\x88\xe\xff\x16p\xfeig\xf9\x80\xf5u\x18H\x8at\x81\xc5M\xc4\xe0\x64\xb8x" "\xd1.M\xa9\xe1\x9d\xff\x1b\xe2;a@\xa7v#\x85\xec\x61YpQ\xdbT\xa6\x8e\x3}\xf5\xb9\x42" "&QB\xa0\xb3\x31\x38\x88\x35p\xe9\xd2\x86\xe4%\x0\x31\xf2\xf4\x91\xae\x10\x8b\xed" "\x9e=~\xec\x9f\xa7\xb3\xba\x9f\xa1@\xf\x81\x18\x9\xc\x96-\x87(*\x84\xf5\xc7kX\x18" "\xc9\xf2\xb9X%eE\xa2\xb0#\xde\xe1\x19\xbf\x95u\xa1\x39\x19\x83Q\x9d\r\xa2\x39*)O" "y=\xeqM\x86\xb3\xbb\xb5Z\xc8iw\xdd\x66\xd5\r\x8\xf3\xee`\xec\xdd>A\xfa\x9\x96\xc1" "0\xfe\xb4\xdc^y\x16\x39\xea\xc\xf1p\xa3\x84\xc9\x94+\xaf\x16\xf1-\xf5\x8\xb3\xa5" "H\x4\xfa\xb8\x38\xd0\x42\xa2\x39Q\xc2i\xc1\xd8\xbc\xe9\x39\xdb\xd9\x1d\xe2\x8\x43" "\xf9~\xe0O\x90M\x9a\x62\xce\x1PvG\x9di\x2\xe3\x10\xa6!\x4v\x95\x84\x1d\x8\xb7\x9b" "\x9bXg9\xb0\x92u\x11\xabsBb\xe8\x92\x17\xaf\xa5\xf0\xc5\xf7\xd3\x1c\xfa\x31%\xbd" "\x92\x1az\x94\x98<\xc\x94,\xd1/\xd9y\x4\x64+\xd4 \x10\xf5\x8d$S \x5\xd2q-\x8f\x45" "x\xd0\x97\x46\x1e\xc4\xdbXU\xe\x89\xff\x62vS\"SZ)\xc\x66n\xe6\xf\xc5&\x1\x1f\xe9" ",\x1c\xbe\xd8\xa2\xc6\x8aMR>\xda\xac\x1f(\xbc\x96\xb2\xca\x31)\xa4\x95\xd2\xbbW\x1e" "4\\\xb3k, CTj\xd5w\xd7.\xca\x81\xfcX\xe0\x80%\x8cM\xc5\xfa\x9f\xa0w\xc9\xdf.\x85" "\x8e\xaeR\xe3\x12T\x8b@C\xa6|\xf9\xb6\x13\x41X\x6\xcc\xcb\xbdJ\xb4\x34\xa8\xe3]\xb0" "`\x18\xfa\xd3\x64\xfa\xde\xd7t\xf2\x12\xc0\xe9\xa6\x8aP\xe8\xe7L\xb6\xb6\x83g\xfe" ".\x9c\xce\xb7\x82|_o\xfd\xa8\xab{\xd8k&\x15\xef\x35\x1a@\xbb\x45T\xce\x13\xb5]\xd9" "\x88\xb5\xe9\xe7G\xfe\xb4T\x8e'\xa7\x63\xd4\x66K?\xe0\xf8l2\xb\x65\x1a\x64]l\x11" "^\xf\x9\x45\x34\xb0\xe9\xe7|\x1\xb0+\x84\xfeK\xfa\x10\x9f\x1\xcfV\xcb\xc5\xd7\x37" "\x87`\x87\xe4\xd7\x4\xa6Uk\xae\xe2\x30\xf3S<6W,\xe2`\xf9\x2-6\xc2\x46\xaan\xf0\xcc" "IT\xad\x90iyw\x17J\xa8!}(4\xfJ\x1bj\xf5\xd5?\xf4\x19\xa3\xf5\x8a#\xb7\x5\x61\x30" "\xc2\xd7\xa8\x91\xd0\nmw\x8f\xe4o,m\x8bm\xb8\xa7\x32\xbd\x46,\xbap\xc1\x39\xc3\xcf" "Ge\xf2\xd7\xc5\xa4\xc2\xcd\xa1\x33j\x10\x30\xddx*V=\xc1\x88^\xe5\xcb\x84\x39\x10" "\xa4\xe7\x1d\x8e\x11\x1c\xcb+\xfb\x15\x4\xa9\xf\xea\xea-\xa2\x1f\x39\xce\xd3\xa6" "\xb\xc6\xfc\xa6\xb0\x97\xe8@\xfe\x0rb0@\xd2\x37q1@\xf1;)P\xdbI\x1b\xe4w[`\x9f\x9e" "\xe5\xb0\xc\xdc\x1aw\x8\x1e\x32\xe8\x89\xae\xe*\xdf\x2\x34\xb3\xe4!\xf2\xa8\xa4x" "\xd4\xe5\"\x1fr\xccMh8B\x7\xe5\x1b\x37\x86\xcbW\xb2V\xda>\xf9\xb6\x83\x64\xfc\x10" "\xce\xd9\xdai\xa0\xfbv\xaa\xcf\x7f\xa4\xcb\xfc\x96\xa8I\xb5\xf6\x10&\xc5m\xdd\xd1" "\xc4\x33\xe7\xbc!P\xb8\x95yDM\xc3\xa4\x7\\\x86\xa1%\xf1\xb7\\z!\xe1\x8e\xccs1>\xeb" "N9\x11^S\xa1\xe0y\xbf\x14\xdc\xc4\x12O|\xc3\xdfH\xe6#\xa9\x9f\x84\xddV\xad\xf3\xb8" "\xc1r\xae(\xec\xde\xc0\x15\x84\xdd\xe1jVN\x98p\x97\xf4G\xa8\x90\xa1\xa3\xb7&\xa5" "\x91\x86\xdc\xa8\x90\xeb#\x9$\xba\x36\x95\xb7\xbo\xdf\x45\xbd\xc3\xd7\xbf\xea\xb2" "\xe2\x87\xc6\x8a`\x84\x0\x11i\xce \x8p\xb3l\x9b\xd5\xdf\xe3\x1a\xd5\x7f\x65<\xb7" "Q\xb@\x19\xe3\x38\n\xcc/\xe5\xa4\x9\xf0W\x0\xf\x14[\xa7j\x87\xcb\xb5\x9c\x45\x30" "9\xce*os\xec\xc6\xc4t9l\xc4Q6.\xbb\x9dg\xc\xeb\\\xdf\xca\xef\x2<\x1a\xe5\n\xefY\xce" "\x99v|+\x3\xca\xf\x5\xb8\x9fg\xa8GZ\x83\x6S\xfd\x8c]\xbb\xb2\xad\xdc\xe7{\xdc\x93" "\x17\xd2\x16\xab\x17\xd5&k\n\xed\xac\xa3\xd1\xc3T\x1a\xaf\x18%\x80k\x8e\xe0\xc1\xe3" "\x8b\xb9\xcc\xc\xf5K\x1e\xe\xbc\xa3\x16\x87j\xb8|P\xc1\x18\xcb)\x8e\x9e;\x87SCJ\x8" "\x82\xc4\xc2k\xc2\x8e\xc0\xb6.A \x16\xd4T\x94\x61\xac\x98\x34\x8b{Z\xc2\x1e\xe5I" "H}\xc_\xbfg\xe7\xdf~l\xde\xc4\x95\xe3LV\xf1\x8fK\x87\xdf+\x97\xab\xe\xb8\xa6\x43" "\x2\xbd\xef\x9b:b\xf2+\xfd\x17!\xa3\x88\xf6\x5\x37\xd6\x83\x13P``\xef\x1dJ\xe5\x92" "\xe7\x84\x83\xd4\x2\xe\xfb\xf3\xbbM\xb2\x2\xbc\xfdN\x2\x9d\x84\x86\xaf\xdb\x18W\xb6" "\x89\xc4\x65\x61i\xd1\x66W\xadj!=I\xd7\x9c\x93\x39\x32\x9a\xe8\xe4;\xbb` \xf9;\xfd" "k\x94\xb1\xa5LD\x17HoY\x8*\xa3ht$\x96\x10/:(\xad\xd9\xe7\x8eT\xd2\x66z\xde\xe3\xec" "\x11\xa2\x4\x85\xeb\xbeO\xf5T\x7f\xca\xcc\x12\xf6\xc5\xc3\xe5\xe0\xf\xbdm\x4\x61" "\x9b\x81W\x8c\xe\xa3\x33\x85\xfdU\xff\xd1{CW\x82\xcc\x90\xe9\x46\xdf\x81\x1a\xba" "A\xe9\xc*t\xea\xc2V\xa0\x90\x1d\xafN6\xa4\x1bi\xe8\xbaq&x\xa8_\x8f\x8\xb\x8d%\xc0" "\x0\x1e\xe9\xb4\xe6\xf3z\x9c\n\x81\x44\xae\xb\xff\x97\xbf)3\x95\x1f\x88;4\xd3\x3" "<^\xeb:^\x8\xeckw\xb8\x82\xfa__\x1ex\x8b,w\xa5\xf8\xb4\x9f\xc9\x83U\xd9(M\x16\xa7" "hh\xae\x89\x12\x84-\x99\xca\xff\xb4(\xfb\xae!\xfc\xc1\x19\xaf\xf7\x9cm\xf\xb6\x91" "gms\nOW#>\x1d\xee\x94\xe9*\xd5\x1\xae\xd9\xd9\xd3\xa6\x92!vC\xc4=9\xb3\xee\xc1\xc8" "\xa6\xfd\xe1\x9\x95\xc3\x66\xaf\xd3*Z\xe3\x18^ X\xd0\xfc\x8f\x16\x64\x64\xe2\xfa" "t~\xe9\xa8\x91\xe6\xd8\xbe\x33I~\xe2\x2\xdc\x38\xe5\xee\x19R\xdeq\xfd\x98\x65r\x9f" "\x1c\xd1\xad\xa9\xf7\xae\x38\xc8\xfb\x17\xdakfx^\x91\xf9l\xb6?\x9f$@\x7\x85X\x14" "R\x91\x36\xba\x9e\xd1\x1a\xb2 \x16\xdd\x95\xc7\xa2\xbb\xce\x9dh\xa1\xbb\xe2L\x8d" "\xa0\x9\xa0;\xaeG\xb0;\xda@H\xb3\x1bT\xa4\x18\x81\xf6\xe8OrLG\x9bp\xe4\x8f\xdegt" "\xbd\xbd\x1\xc8\xf8\xc2>'\x19\x85\xde\xbe\xe1\x39\xc7z9MJ\xb1\xe4\xfc\xbb\xb9\xe0" "\xde_~\x7\xc8\x9f\x87\xd2\x8e\xb5\x8d@\xd4)H\x96\x8f\xf9\xb6\xbe\x9a\xcfY\xcc\xf4" "e\xd5\x93\x8d!\xedm\xa0/E\x88\xf5=\xe2\xa6\xa9]v\x8\x9b\x8cm\x8cLK\x8f\x8c\xd5\x84" "i\xa3\xb9\\~.1\xcaW\x82x\xf3\xc4\n\xc9\xf3\x65\x82\xdd\\\x44\xfa\x39\x93\xd3\xce" "\xef\xe9\xaf_\xa7zi\x85\xf8\xa6\x7f\x93\x43\x98r>\xc6\xa3\xd9\xf8N\"Y\x93\xcf\x43" "\xb0 s\xc5\x1a.\x1bn\xeay,\x16+\xe3s\x91\xc5\xdf\x63\x84{\x91>&@\xc2-b\x99\x15\x9b" "\xf1\xec\x11\xe7\x86K\x12\x96\xdf\x8e\xea\xaa\xe8\x92\xcc#\x94\xc8Yng'\x8f\xce\xaf" "\xd4\x41\xe3'75\xc7\xe3oZ\x95\x88\x30~\x87\x6\xa2>3\xc5S\xb3\x84||\x1c\x96\xb6\x1b" "MC?ff?/H\xa0\x9c[\x8c\xc6L$L!\x8f\xf7\xa1\xb1{\xd9+\xd7\xe3\xe5\xab\x66Kx\xa2m\xe8" "eD\xba\n}@\xd0\x81\xc7\"\xcb\x12p\xf3\xa1\x7\xf5\xd0{\x0\x9c\x14\x33\xa3\x9e\x61" "\xe6\x89,\xd7\xbe\"\x82\x0V\xc\x38\xfcU\x8f~\x84\xbe\xb1\xf4\x0\xffK\xbc+\x82\xd2" "/\xc4h{J-\xfa\x41\xad\x99\x84\xe5G\xea\x85\xe9\xb1\xba^@\x14\xfc\x91\x8b\x1\xc0Q" "\xa4\x4\xfdV\xf3\xcc\xe2\x61\x1b\xe6W\xc\x32\xc\xde\xb9\x94T\xa3\x46\x39\xc7\xcs" "\xbd\xd2{\x8e\xf3\"\xf0R\xf3\xe5#\x5\x43\x14\xc1\xcd\x13wq\x18u$rW\x16+\x8d\xeb\x44" "\xfd\x99\x6V!\x14\x1\x1e\x93\xca\x1d\x98\x8eR\xbam\xd4w\xa4\x10\xcO\xab\x8a\xac\x1d" "\xc8\x31\xba{\xf7\x8b\x34V\x8e\xf9\xae\x46\x16\x61T\x93\x39\xb5\x95\x92\x95r\x91" "I\x91V4\x95\x37-JQe\xec\x81\xea\xe7\x9f\x8d\x19x\xafs\x8c\xf1\x1a\xa5+\xa4\xc3w$" "D/\x12]\x19gz\x9c\x0\xe6\x1b!\x85\xea\x39\xc\xd1\xac\x31\x31\xeb\x8b\xa3\x8b\xaa" "\xfe\x97\x63\xd7R\xad\xab/\x88\x8d=\xc4\xf5\xe3\xf9\xe8\x37h\xb6$$oB\x85$b\xabp\xf3" "\x5R\x93\xd9\xec|\x92\x98k\xb\x33\x83u\xfcRj\xa8\xab?\n\xe6\x1\xbcy\xbb\x9f\xb6\x4" "k\xa5\xf4W\x10\xce\x94\xf8\x12\xdfL\xac$^\xba\x8d\x1e\xec\x85\xca\x14\x30\xd1[\x96" "w\x8e\x83#[\xae\xb0+\xed\x36\xc3\x42!\xa8\n\x61\x91\x65\x8c\x46W\x8f\x2\x61\x46\xe5" "\xa7\x61-S'#\xff\x2\xc3\xff\x62\x2\x63\xa2\x31\x9G\xcax\xdb\xb4,H\x98\x95\n\x46<" "\xe0\x7f\xb1!\xee\xce\xde\xf3\xf1\xa5\x41\xe3\x31]U+\xf2\x39t\xff\x14\xa2\xe3I\xe4" "\\\xea\xb0\xf3\xff\xfaq\xe4\xbd,\xb5\xcf\x9f\xa0\xf1\xbb>g\xe8\x62\xf6\xdf\x9c\xec" "z*\x89\x8cl4\xeu\x9fP$ \x9b\x32\x62\x90\x8\xfd\x4\xe0\x2\xc1k\xab\xa3PHH\x19#\x17" "\x13\x9dl\xea\xb9\xbbMJ\xdd\x9e\xbe{\x8a#`\xb2\x1\x33V\xa3\x18\x92u\xa6\xb9\xf6\xc4" "[\xdf\x1e\xcdX\x99\x8$PNC\xa2\xd1\xe3\xb2\x63\xc2\xf5\x1d$\xf0\xf5I,i\x0k\x6\x2\xd1" "\x12g\x7\xbd\x6\xd0\x17\x90~\xb2v\x10\\\xe6\x37\x8a.\xd9\x13\xd7\xe1\xed\xa9\xc9" "\xa7\xb5\x13\x5.\x8\xd0\xdd\xdc\x37\x65\x39\x65\x36\xaa@;\xb4\xac\x8b\x8f\xc2Q\x15" "\xc2\xb5\x9b}\xfe\xe2\xaf\xa4\x10\xad\xa4\xbb\x16j>n\xe0\x63\xa8\x8e\x8f\x85?\x9d" "\xda\xc0\xc6\x63\xc\xfd\x38\xb\xe8\xda\x45\xa7p\xb3\xfb\x15\xeb\x65\x8b\xdcO\xec" "\xf2\xc\xf3\x82X\xbf\xc_\xc2\xbb\x7w\xcf\xb9\xc9\xa5O,6/!\x17\x1elF\xcH\xec\x7f\xb5" "<,\xba\x8fI\x15\xb5\x13;U\xd1O\xe3\xb7\xf\x95\x13\x8f\x1>z\x14\xca\x92\x90\x8e#\xb0" "\xd6\xdbW\xfb\xed>\x97\x38\x8\x9c\x7\x1d\x99\x9e\x90\xcf\xdd\xb3\xf4\xeeM\xe5\xf0" ".S\xfd*\xe4\xa1\x31\xf5\xca\x91\xad\x88\xa4\x95q\xb3\xc3\x84\x6\xd0]\xeb\x2\x38\x8" "\x4\x44\x91\x83\r\x8d[\x80\xc3?\x1fn\x8aL\xa4 w\xf7\xc1\xb2(Y\x8a\xbc\xe8#\xe3j\xe6" ",\x9c\xe7\x38\xe5\xb2&[\x99/hd-\xb9\xe9\xe7\xa0\x81vQd\xc'\xe5S\xc7\x1aL2\x85\xe0" "\xd7\x80\xfa\x3Q\xdc\xbfh\xb7\x34NA\xcc\x13<'\x98\xaf=\xb2\x65\x9f{\xb7\xbb@\x9e" "\xaf\xd7'\xd7\x92w\xf4\xd2\xd1.\x8f\xfc#a#\x81u`\x9a\xa1\xa5%\x14\x7\xeb\xba\xb6" "\xf0\xa0\xf0\r\xa2\xfc\x85\x9\xcd\x8dy\x18\xf\xa0\x8b\x61I\xadJ~;\xd2\xca\x30\xbb" "\xb1\xb5?5x\xfe\x6\xee\x99\xf6N\x2Vb\xd2\xf0V\xdc+\xc4\xf2\xe4\xd5\xcaP*\xc9?z\xbc" "+0`3\x4\x95\xf4\x84\xd4\x8e\xf7\x43\n{\xe2\x1\x9\xfd\x8\xa3&\x90n\xce\xf3\nL\xa4" "\xde\xa9\xe3\xb9\xb4\xf\x8e\xf4\x90\xb9U\xcf\x85\x38\xa8\n\x8d\xaf\xab\xaa-\xc7\xc3" "\x87X\xef\x1e\xadp\x9do\xe7\xc4\x8c\x80\xf \xbf\\\xa5\xae\xe5GV2Z\x89/\xf5\xf2\xac" "W\xd1\x98I\x92z\xa0\xb7\xa8\x1f\xd3\xa4\xd0Jz$\xba{A \x8dp\x98j\x6]\xd7}\x89>6\xc5" "!\x8qB3;4\xf7\x41\xfe\xe8\xb2\xdd\xba\x8d\xbb%\x9b\x62G\x1\x14\xb2\x6\x95\xc1\xcc" "\xfdy\xbd\xc9R\xd9@HQd\x8c\x94w\xda\x9f\xb3\x44_\x92\x32\x9a\x92)~\xe2\xb4\x30\x5" "M)\xa1\xc4+l(\x93\x83\x8c\x9a\x95J\xab\x65\x8a\xe0H\xbc\xdc[S\x13\xbe\x91Z\xd5\x9f" "\xea\xb3\xeao\xf7\xb6\xd9\xd8\x37\xfc\xbc:=\xf7[{\xb6\x18\xb4W\xd7\x10\xc2\xb8_\xa8" "\xf3>\xe3\xca\x1d\x5\x1fm\xf3~ <\xecV\xb6\x37\xc5\x9e\x8\xc0\xcc\xdc_\xc8\x7\x12" "\x1d#\x8a]\xc7\xda\xabS\x87\xe5\x95~\xa6@\xaf\xfd\xe5\xc4.@aS~(6\xd4\xd8\x18j\xa1" "7\xbf\x16o\xa3 \xa2\xbb\x8f\x6\xeaG^\n.I\x5\x43M\xcc*2\x91\xbd\x90\xa3\xfc\xbd\xe8" "\xac\xd2\x46J\x1fn\xa0\xef\x95\xe\x17\x12\xd5\x9fu\xe6\xeP\xd6*\xda\xfa\x8o\xbf\xc3" "\xad\x0\xff\x8d\xce|\x7\x43\xa3+\x7\xe9\x38\xd3\xb2\xce\xc0`uV\x86\x4\xae\x12Tfw" "\x15\x6\x45\xb2\xda\x80\x10\xdd\x9f\xc9\xd2?\xca\x92KL\xe5\xa0\x33`\xe1\x34\xc9\xa7" "\x9c\xab\x85K\xeb\xe8<\xb4:`\x5\x91\xf4\x80\x11\x4\xa1$\x9f\x31u\xe6Yd\xf8\x37\x17" "\xd8\x62 0\x9eWQ\x82\xa1\xbc\x33\x97\x87\x91\x9c\x46va[\xd5T\xe9\xe5\xaf\xd7\x1\xd2" "y\xdc\x92x\x8a\x0\x8eI\xf6\x8c\xf5\x6\xbb\x95\xb6\xa8I\x96&1\xf4\xde\xe2Na\r\r\xb8" "P\x97\xbe\xb7`\xd8\xa4\x8py\xbb\xb5<\xecUs\x83/H!r\r1R\xa9h\xb7\xc9}\x86\x10\x98" "\xc0$\xbdv\xca\x13&\xdc\x63N\xdd\nN\x7f\xe2\xac \xc0%\xf9O\xa9 \xb4\xb7ww\xe4vfY" "\xdc\x35\xf0\x8fw\xa2\xce\x4\xff`~VN`\x8e%\xc8g-HE\x1b\xd4\xbc\xaa\xd2\xe2\xb0@\xcc" "\xbb\x7f\xa3\x32\x46X\x11\x43\x9_p\x10\xa6\x66'G\xd4\xb0U\xdb\xe7\x9fj\xed(\xde\xe8" "\xb7\xc0\xa2my\x7\x8fLr*\x2\x10\x9fO\xe9?\xcd\x63\x9c\xb3\x6\x1_\xe1z\\ oc\xf3\x3" "p\xadIV\xbb\xe7[qK\x16\xcaV\x9f;n\xb9\x92\xd8Zg\xd5}b\xd5\x9(\xe1\x84\xc3m\xe2\x31" "<=\x2\xd6\xa9\x8f\x16\xef\x36\x17\xc\x19\xd0\x7\x10\x38\xd6\xc9\xd1\x92\xb4\xdc\x1e" "\xf0\xcc\xea\xde\x31\x13H\xferjP-\xff-S-\x1b\xdc\x36\xc4\x90\xd8\x17\x37\x97`\xf9" "\xec\xbex~zh0\xe3 =n\x92\xea\x8e&\x8bJ\x82\xcby\x12\x80\x30&\xa6O\xda\xe2\xa0\xa2" "\xb4\\\xf7\xc3T\x93\x11\xb3T\xce\xdeGs\xa8z@oW\xa4n\x11\x41\x36h[c\x17\xc9\xf3\xc1" "&\xbe\xa7\x38\xd4s\xbb\x33mp\xed\x30\xde\x16]\xc4\x1a\x99\xab\x9c\xfc\xe1\xb\x62" "\xa9},\x13)F\xffM\xf8\xf4[vP\xe7\x11\xcd\xbe\x9aJ\xc3\x46\xd6\xbblD\xa5\xe8!Kv\xc8" "\xbf\xa9\x97]k\x8t\x88\"\xa5\x86\xa8|\xb0\xa8\xb4\x37\x9dw\x85\x87\x94\xc9)\x1\xf9" "\xdc\x14\x61\xd7\xf0\"\xb4\x64\x1b\xa8\xd5\x46\xc0OQ3\xf3Z\xbe\xd3\xf1l\xd5\x37@" "'B\x3P\x3\x38\x8b\xe9\x1e\xf5\xc8\xd7=\xcf\xd7\x1b\x42O\xb2\xc7\xc1\x9e&\xf5\x45" "\x11\xb3\x8a\x13\nt\x89\xe1\x9et7*\x1d\xb5\x3|\xa1\\=\xc3l\xfa\x66\x1b\xcc\xb4?\xd8" "\xd9V\x9d\xbf\xb9mA\xd3\xb7\xffW\xb9n|\xbc\xe6\x10\xb1\xb7\xb1\x19\x82;\x3\x2\x35" "/.\x16\xa2\xde\xc8J\xaf\xbd\x92\x0#\x8ex\xe7\x19\xae\xb8\x9\xbb\xe5\xf0`\xf2n2\xd4" "y\x9eH\xf2\x65@[Gc=\xbdTr6\x4\xa6S\xbf\xe5h\x17\xc8\xfa\xbd\xb8\x34G\xc6\xc\x96\xc3" "\x8c\x91\xb4\xc0\x82t\xc\xb6\xac\x66(\xf2\x84wRa\x80\x31\xce\xd1\x9e\x30\x62Z\xd9" "\x1e\x88#\\\x9c\x8\x83%\xbe\xa7\x66\xa2\xac\xdf\xd7\xc5\x13\xac\x97'=WT\x4\xb2h<" "\xe0\xa6:\xe3\x6\x85m\x82\x80\x9a@`\xb0\x62\x93\x18\x1n\xb2\xd2\xcc\x9f\x83^)\x9d" "c\xc6g\xd2:\xb0{T\xfc\xc9\x44\xe0\xd8x>\xd5\xc7\x35\x36G\xba+8Y\x13^\xa2\x84\x45" "\xb5wS\x90Z\xb5\xb1NP}\x90N\xd1\x1a\xc\xef\xa5\xaf\xc9\xe5\x12\xf3\xed]\xb\x44\xe5" "\xe3\xf4\x90\x87Sa8\x8fz\xf1\xa7\xf8\xddD\xf0!'\x80\x64|\x96\xb3" "\x88\x85\x9a\xd8\xb5\x97\xdd{\xc\x33 \x12\x82*j<\xbc\xea\xeb\xf1\x1d\x37@\xac\xbd" "\x1\x87\x9\xf4\x8f\xc1t\xc5\xb0,;\\\x14\xfa\xec=\xa3\xe0\xce\x8f\xc0\xfc\xee\xb5" "\xc7\x35\xf4\xc5\xa3\xe2\x9\x6\x7f\x9r\xa0'\x1\xb8\"\x85\x10\x1d\xec\xdf\x16\xf7" "\r\xf0\xac\x98\xbf\xd7r\xc8\xb6\x13\x65@\xc8`\xe\xa4\xee%\x80T\x8d\x98#\xb7}\xfd" "B\xc0}m\xe9\x8b\xc6\x99Tz\xe4\xec\xc6\xe3\x43+\xbb\x8dyq]6[PI\xc5O:\xc9%x?\xca@\x92" ">\xba\xdf\xc8\xb8\xb2\xfb\xdf\xd1:\xd4[\x5\x61\xc8M\x8f\xa1\xfd\x5\x88\xae\x15K\x80" "\xb6T\x84\x44j4\xe6\xde 0_\xa4\xee\x97!\xa4\x10'\xb3\xd6\xc5;\xfbg\xb\xa9\x13Y\xbd" "\xef\x4N\xd4\xc8\x1bu\x8dM\xef\x9c\x44\xb2\x1b\x9>\x87\x9c\xb5\xa3\x84\x61\xb3L\x8c" "\x9bGmp\xf8\xde\x2\xe6\xde\xef]\x1f" "\xec\xb0|\xfc\x1]^\x3$\xd7\x1bn\xd7=&\xf7u\xfd\x9c\x98_p\"\xa6\xa6\xbc\xb2\x8a\x1b" "H\xd3\xf1\xa5\x95\xefo\xce}\xa6%\xf1=\x9cP\xc5\xb6\xe1\x1b\x61\xe7/\xa4\xcd;J\xf1" "\x15\xfe\x10|\x8b!W j\xc2\xdd[\x8f\x46\xac\x90*\xd0\xa2\x16\xbf{(\x9bi\xf8n2\xb9" "\xb1\xe3\x63\xea\x35[v\x81RR3m\xab\x44\x31\xbc\xe7G\xc6\x66\xdb\xf8R\xb6\x46\xcf" "\x1:#\xa7\xef\xd7k(\xd7`\x87\x32\r\xae\xb5:\xf0\xd8\xae\xf8Y\xc8l\x9dO\xe2i\xac\x8" "\x95\n\x46_0\xef\xf0\x7\x31\x9e\x61\xd7mQ\x83'\xf9P\xcc?\x2h\xf2L\xb5[v\x8e\xa0]" "\xa4\xcbs\xdci\xe3\xd9\xbf!\x9b>Y\xbe\x45IZ\x10\xa4\x31Q\x98\xa7\x46\x84?\x2\xdf" "\x13\x6\xe9\x63\x13H\xd4p\xd7\x34\x34'\x81Z\"+\xe8\x11\xb4\xb8PzL\xa1\x37\xb7\x13" "S@\x1c\xa0g\"\xa6\x95\xda\xe0\x46\xcd&%\x8d\xbbm4\xc9\x18\xa6\x1I\xa7\x33" "\x81\x61V\x14\xa8/\xeb\x1a\x0@\rU\xb8\x6\xfc\xbb\x1a\xa8\x30\x37\xf1\xd9=TI\x5\xd7" "\x99aO(\xf9\xd9\xc2w^\n\x1c\x46\xd2\x46\xec<\xe\\p\xef\x98$\x1bH\x80\x82\xa5Sf\xc2" "\x2\x81\xcaoZ\xd5\xbb\x88\xde\xcd\xed\xa4\x92mN\x17\x9w\xdf\x91Q\x1a\x8f\x61\xcb" ":\x9e\x63\xdf\xfd\xa5\x39z\xado\xd3\xb5\x91\xcG\x13JL3|\x4\xd4t\x13\x41/\xfe\x82" "\xca\x84\xed\xc8S\x1b\xa1\x1f\xeao\xf7\xb6\xd0\x0\xb4\x98\xc1\\\xe5U\xa5\x11\xc3" "\x8c^\x84OSs\xc3\xce\xbo\x88#tRr\xbd\x46\x30QsU\xf6)\xfd\x42Gi\xb2\x88\x41\xf2\x99" "\xfa\x65\x1b\x39\xe4x\n\xc5\xc\x9e\xee\xf6\xab\x14!\x0~\xa1\xf7\xc5{\x8e\xfe\xa7" "\xa9\xae\xd8Yx\xd3uJx6$\xf2\xa9'\xc1\x0\x8e\xd3!\xd6s\xbe\x1d\x5\"\xa0=\xe2\xaf\x3" "~23\x90\x14\x32WT\xfa\xaa\xb\x61\xb5\x14q\xde'\x81\xcb\x3\x1`\x85\xa2MZ!\xb6\x32" "7\">l\x9aJ_u.\x9a|\xe9\" \xff\xa3\xeal\x9aZ7\x7fk \xf4]\x13(\xe0oTiE\xdc\x1f\xc4" "\xf3\xc8ZbU\xe2\x16\xe1\x93\xd7\x39!\x90\xc0\xcew_\x86\x8\x4\x13\x13\xab\xf\xe0\x5" "\xecJ\xd0x%C<\x84_\xbbja}b\xcd;%_r\x82\xb2hp\xc1\xa5I\xbd\xb2\xe5\xcf-\x13\x9a\xbb" "\xcb\xf0\xea\xa0\r\x62\x1b=\xb0\xd7\xbfYU\xf9K(4\x13\xbb\x89\x30r'D=\x96\xed\xbe" "-\x9a\x98\xd7VDP|\xa9\xbf\xac\xcd\xab\x84g_%\xed\xf4\xda\xe\xba\xcb\x43\xda \x9b" "\xc\x12L\xb7\xa2#\xc6:\x89_\xe6n\x14\xd0\x2\xd7\x15\xadL\xfc\xec\x9f\x3~hdI\x84\xd7" "\xc]\xe3\xe1\xafNG\xa4\x94\xdb\xc6\xbb\xde\xb7\xc1\x1d\xf0\x90\xbc\xe6\x1c\x39\x37" "v\xf4\xa1^[J\x1a\x89\xd5\xe7\xbc\xdb]\xbh\xc5\x12\x91\x8c\x64\x2z\xd9\xb0\xb\x33" "\xd1\xd7\x7\x9a\x97\xf8R7\xdei\xedO\x0\xd0\xa4\xe\x9d\x42\xccG\xa1\xa6\x8e\x1b\xec" "\x9dM\xa6\x8d!\xc2\x99\xa9\xd9\x8ay\x9b\x91.\x4T\xa0\x18\xc5\xeb\xe\xc7\x9fKO3\x9e" "\xbc\x88\x9c\xb9\x1a\xeb\xbf\x12t\xcc\x18\xa8(\xb7\x8f\xb\xb9\xb9\x88\xab\x95\x3" "o\xe0N\xac\xfe\x3\xa2\xb3 \xdc\xb2\xce\x8a\x88\xb1\x87\x65\r,\x9dS~\xd4?\x3\x85\xb0" "\xd9\xe9<\x1a\x7w\xf8>\x14\xa6\x8O'w\xe3\"\x9c\xfe{ns\x94\x10\xd5\x12\xf5w\x96\x1c" "R\xbaS\xac_m\xc4\xc2\x1c\x15\xdao\xb4\xb5\xa7\xc0Po\xd4\x94\x37\xabM\xbc-\x93\xa6" "\xf2\\\x41i\xed\xbc\xbb\xf3sG\xb0P\r\xa0p\xedO\xe8%/\xadj\x16\xd0\xbc\xd2\x1a=\xd5" "\xcc\x11T~\x2\x6\x99\x0_l\r\x10\xa3\x1eP\x1a\x42\xdeiW\xf7\xff\x0x\xd7&\x93\xe8\x8f" "\xd8Q\xd6o\xb4\xb1M9{\xa4\xd8\xd4|\xfd|R\xe7\xf1\xcb\x42_\xa0\xfd\xc9\xe0\x16\xb9" "\xd5\x17\xe6\x32\x10\xdaL\xed\x81\x42q\xbd?\xdb\x90\x82mC]T(f`\xbc/h\x1d$3\x92\x45" "rJ\xfdr\x1coB=\xee\xc3\x37l\xdb\x12\x1eu\x80\x88\xa5\xbf\x38x@\x92\x45\x1c\x80\x36" "\xb8\x95|}\x90\xed\x1f\x5\xf3\xc6Rh\x4w\xca\xcay\x5\x1dY3\xfe\xc1\x61-\xca\x62\x95" "P\xbe\xad\x99\x9f\xcf\x6\x8b\x15\xc2\x0\xe3\xc6(/\xa8T\xd0r\xa7\xeeZwhF\x88\xd4\xc2" "\xab\xc3\xda+2d\x84w\xb4\xf3\xfa\xe1\xc1\x1d\"\x89\x84\xef:\xa3\xffm\xf7T\"\xa5\xdd" "\xed%\x8d\xd6\x8c\x83\x6*\xf9\x39\x63{&|l\x11\xdc\xb8\x44\x85\xadrE\x88<\xa6\x84" "b\xa6\xfb\xb8-.\xa2;\x3\xf9 zX\xa4\x18\xcc\x80\xf0\x97`\xaa\x10\xdeG\xcc\xc8\xd8" "\xe2>Lq\xd3\x8\xe3 \xf9\x93\xf1\\[\xe9p\xd9\xa8\x8er\xf9\xf1_\xe\xa2\xca\x5L\xdb" "\x8cw\xeeo\xec\xcb.\xb2l\xd6\x11\xaaJb\xdcr_=\xcc\xe6\xba\xd6\x91\x41\xaa\x32\xf9" "\xe3\xd4\x19\x39T\xe8t\x5\xf8\xc3\x37)\x81m\xde\x1b\xc6\x1b\x94?\xb4S\xcf\xda\x98" ")\rl\xc0\x96\xe5L\x2\xc8\x1c\xeer\xb8\x9enK\xb7\xb0s\xeeJ N\xa9\x35\xfd\x9a?\xaf" "~\xa0k\xf8\x0\x92\x83\xe5r\xad\x3\xb4\x88\x2)\x19\x11iro&\xa6\xe6\x15\xd7\xdfh0&" "\xc2\xa6\x88\x34\xf9\xcf\x1a\xd1\xbe\xb9q\xfaVf\x7\x66\x38\x81ZV\x90\xbc\x1e{\x8a" "\x7'\x8b\x83\xc4\x87#\xca\xfc\x93\x64\\\xf\xbe\xc0\xe8G\xe6\xbb\xfao;\xe5\x9d$\xf1" "\xd2\xce\x9a\xea\xac\xf2\x9c\n\x35\xa9\x98\x8d\x92)rM,\xf3\x9c]Z.\x1N\xd2\x14\xad" "\xca\x33\xcb\xc1t\xf3?I\xf1\xd0G8B\\\xfe\xb3\x99\x46\x14\x8d\xba\xe9\xfe~ \xb\x64" "E\xad\xbasD\xa9\xcas\xd2\xd4\xe7\xff\x38\x10\xb5\xa2\x5\x10\x96\xd5\x12w\x91JI\xa0" "`\x9b\xab\x8d\x3\xf9\xfbp\x9b\xfd\x87N\x98#\xcd\"\x16\xf3\x9a\xd3\\\xc7J\xdd\xc8" "\xf1\xb0\x4\x32\xa1\xf1\x90$\r6v\xe3\x34\xd6|\xd3=\x98\xb\xa1g\x95\x15\xf0\r\xf6" "i\x8e\xfd\xa5\x2.\x81\xd2\xfa\xa8\xc6\xdf\x1b\xbd\x1c\xb2;gyh\xb0V9c5\x1N\xf0Rt\xe0" "\xd3(\xe\x9bU\x2\x94)\xfd\x64\xa0\x9\xc7\xf6\x1f\xefR7(\n9,>@?\x9fY\xcaR\xa4\xf6" "\xce\x81\xa0\x7\xb5\xad\xecvX\xe1:\xe9\x8d\xc9\x46\xbbze\xb0\x12\xb1!u\xb1\xca\x88" "\xbc\xba~g2\xda\xe1O=>\xd5\xdeXm\xc9\xcel\x99X\xb1K\x8dY\x87\xe7\xe2\x2\xef\x36\xb9" "\xfd\x1a\xc7\xb6\x8b\x41\x9c\xe3:N[\xd0\x14\x41\x63\xe4\x65\x31\xa9k{\x8\xf5\xc6" "V\x1\xf9\x9\xdb\xba\x19L\xec\x9a\xcb-l\x5\xc4'\xe5\x7\xff\xf0\x45\x3\xb9\xae\x8d" "\x15\x97Gs\xba*\xb8\xc5}S\xa3\x10>\x1e\x6\xf0\xd4l\xc7\xd2\xa7\xda\xd3L\xf7\x63/" "\x3\xe3=u\xab\xe*\xd9\xbbI\xb\xaa\"\x90\xb2\x8/\x99\xde\xb8\xb9\nS\xb2\x0\x1?\xfc" "\xd9\xe^\xf2\x82R'VTM\xaa\xe4\xae\xf0[\xbe\xa5\x94\xc6S0\x17\xa3\xb1=*\x8\x32\xce" "-\xbb\xc8Ts\xc2\xd8#)y\x80\xc8\x44\xf1\x13\xab\xf5V!h\xa8\x16\x9d\x15\xb5\xf4\x31" "\xb1\xe5R\xbd\x64\x45\x17\x33\x98q\xb7\x9f\xc9\xc1\x9\x2\x1c\x3\x4\x91n\xec\x88u" "\xcd>\x5\x2\xc1\x9b\x89\x43\xfa\xff\x42\xf4'\x81U\x94x&eV\xbc\xcbT\xe1\x64\x44\"" "\xdf\x8f\xe6\xb7\x46\xf4\x11\xe9r\x8c\xe1\x9d\xd8*T\xe0\x13\x9e\xa3n\x85\x12\x34" "hz\x8a\x30+7\xf5\xe2\xb9\x14H\xaa\x8f\xcb\x1v\x0\xb6+ET\xc6>\xe9s\xe7\xcb\xec\xac" "\xef\x61\x64\xd0\xc3\xf7\xd4X\xe0\xc6\x8\x99>Y\x8\xb7=\x80\xeb\xfb\xf6@\xd9>\x94" "3!\xda\x36\x83\xca_Ccb\xf0\xfa\xb7\x42\x65\x41]F*\x13\x63\xc7\xf0=\xe1{ \xb3\xcb" "\xcd\xe7\x5\xe3Z\x8\xd5Ko-[\xa4\x9e\xd5:\x89H\xa6[I\x93\x1e<\xd4r\xae\xe5\x35\xb9" "\x1b\xea\x1aK\x3\x7n9D1\xb7\x1a\xa6\xe\x33\xa7=\x82\x88\x87\x17\xf5\x63t\xa0\xc5" "`\xea\xe6\xff\xb5MH2!\xfc\xf6\xce\xdc?\xe9&z\xdf\xdc\x62\xa8\xa1\xa1l\x9cP/\xe\xdd" "\xb6\x1cyn\x94\xec\x94\x95\xca\xc7|\x18\x30\xf6\x6\xbe\xev\xe5\xb3\xcf%\xbey\x90" "\xfc\x8a&\xe5\xd6\xcd\x10{\xc2\x42\xf0\xa7\x85\x9d\x31\x34Ws\xc2\xfb^\xf2\xe2\xc0" "\xe4^\xdf,\xc3\xbc\x65(\xe0\x19zTL\xd1\x8f\xc5\x80_30\xb.']\x8a \xa6\xdfT\xa9\xe2" "\xa5\xfbt\xf5*\xacu[\xaaV]\xc7\x33\xe3\xc1\xe3\xe1\xec\xf9;r\x9e\xe0\xd8\x64nO\xc8" "/\x99k\xa6\x97\xfb(\xe5(\xf9TS#\xc2\x1b\xa2\xa4uI{\xcb\xd3\x66\x8f}_`n\x88\xbc\x86" "\x90S\xe5x@\xe8\xc4R2\xdeM\xe5\xfd\xaf\xff\x6U48\xbf\xe8\xb4\xc1\x41\xe8\xe2\xfa" "\x96\x42\xfd\xdd\xba\x65`\x97 y\xdb\xebN\xa5\xb4\x1a\xed\x16^E,v\xcf\x83\x8d\xc0" "N\xddI\xc7\xd6\x6i\xd2\xba\xc5S\xbd\x42\x44\x38\xe2=S$J\"OX\xffW\xe4\xc8\xcc,\x1b" "\x9eS\xaaL\xb4J\x8e\xc3\x10\x42\x61\x62hS\x9d\x85\x8d\xe9p^/6\x4\x1\x9c\x1en\xbc" "\xf1\xcf\x9eH\xb.P\xd4&\xbe\xac\x87\xa2\xc8\x86^\xc9q\xd8\x84\xb2K0B\xa8\x1c\xe3" "a.}H!\x18\xa5\xdf\x38x\x6\x85\xed\xc\xe6\x61\x84\x4\x89/A\xda\xcb\x38\xd0\xb1\x81" "\x91G\xfa(t\xd6:2\x85l\xc2\x63\xa2\x94\x66$\xe7=\xd5\x38\xe\x10\x42&XB\xb9Z\x1e\xef" "\xac\xd6\x1b\xed\x8d\xe4\x80\x45\xdd\xeeK\x0G\xa1\xef\x64\x15\xd0h\x98\xbf\xbe\x2" "\x81\xdd\xa5\xb5\xee\xaf\x81\x16\x9*B%\xe5i\x94\xc7\xae\xaa\x32\x7f\xee\xc9\xd2\x82" "\x93\x37r\xde\xf7\xf7\x9d\xc9j\x1c\xa2iz\x9e\xa5:\xa6\xe2\xa9\x39Jb!\xb6m\x9d`1\xf4" "O\xbe\x86\x9b\x34\xe\xd9\x8f\xd9o\r B*;\xbhc\xd8=\x99\xd6g+\xef\x9e\x87\x11Kg\xfd" ":\x1d\xa8\xd6\xc9_W\x14\x10\xf\xa6\xe2\x97g'\xb9\x1\xb\xa0\x65{\x1e\xd9NI\xc7\xcf" "2\xbb\xf1\x65'\x8\x17\xcb#\xda\xae\xe7\x4\xaf\x64\x88q\xce\xd8\xc9\x16\x87t\x91\xc8" "\x3y\xb6\xc5\xb3M\xe8u\x8f\xdc\x35\x5\x12\xa8\xc8\x43L\xb2j\xaa\xe5!\xc1v6\x90};" "%\xc2}\x10K\xf1\xf7\xf3H\x6\xb6\x2\x33\xb3\x10\x7\x1d\x96\xbep\x8e\xd4\xe6\xb\xb2" "\xdd\x90\xa7]\xe6}\xa6h/\xe8\x37\x97K\xa4\xa8U@\x8b\x9\xac\xcf\xa8/\x1c \xf2#K\xe7" "-F\xca\x3\x2\xf3\xcc\xca\xf6Y\xf7\xc9\x62\xe8\xe4\xec\xe4\x39\x1b\xca\xe4\xc1\x6" "B9Bf\xf8\xd4\x61\x13\xefHx4sO\xe6\xb1\x7f\xb8\xc\x0jK\x6$9\x7G}\xca\x88*\xf2'`\x9e" "\x16\xd3;\xae\xbb\x66\xc9\x1fw\xf7\x94\xb8H\x92[\x9b\xcb\xff\xec\x7f\xda\x11\x8f" "R.\xc6\xe8\xe8\x4\xe7\xf9\xbd\xbb\"\xed\x90\xe8t\x8ao\x8d\x8@\xa7;\xd2\xdb\x4\x98" "\xe9z\xb9I~\xf7\xa6\xe2s0s\x97\x9e\xcey\xcd\xd5|~\x80\xd3\xdc\xd6\x1\x65\xcc\x36" "\xab\x88:\x99\xc7W\x8c\xbb\x1\x85l\x93\xad\xa1\x90\x8c\xec\x18z/$\xf\x98\x44Lp\x7" "\xc1\x7\x36\xf4q\x15?G?\xb5j\xa2H0\x14\xf7\x8b\x96\x33S/;\xb1\xf3\x9cx\x8e#\xf4\x9" "\x6s5\x83\xae\xa4\xc\xdd\xd2\x91>AuTv\xea\x8R$I\xa4\xab\x8c\xdew\xd4v*1\xae.\xc8" "\xa1\x97zi\x7f\x98\xeep{\x1cH)+'Nx\xber\xc3\xb\xe8\xa6\xcd\xae\x9f~\xb8\xadq\xe1" "\xcf\x62\x1a\xd3\x9f|X\xc2.}\xc7\xa5t\x93\x43h\xedVU\xbf+\xca)\x17\xed#i\xf3)\xa0" "5\xc5\xf6\xeb\x1d\x32\x11\x43\xcf\xc9\x97$^7\xd9\xce\xf9\x4\xed\xec~\x16\x9cN\x95" "\xc2\xa0\x64J%x\xa9Y\xc8\xb9\x8)\xb9\xc8\xd8\xeb\x43\xbs\xd9^\xd9\xfe+\xda\xd7\xb3" "9\xec\x10\xba|!\xe1:\xa8\xcb\xa2\xa2 ]T\xbb\xee\x39x'\xdd\x1c=\x1\xda\xfd\x0J\xed" "\xfa;\xc3\xc\xfd\xeb;(7u\xef\xc9\xed\x1b\xb9\x37\xb8g>\xd5\xe1\x36;\xec\xe8\xb7\xf1" "vGX\xa7\xa3\x94\x83\x83\xa2\xfe\xdd\x86/\x93\xb0:$\xc9\x41\x84\xb6\xd6\xac>oG\xe8" "\xe6'=\xcf\xca\xa5|\xc0\x12\xf0\x44\xa6\x19\x4\xefn=\xa7\xfc\xc3,-n\xff\xac!\xec" "\xf8\xc8?5d\x18\xe3\n\r'\xcb\x83HV\xa2\xa4m\x83tH\xe3\\\xd3\xd9\xfd\x18\x1fl\xb4" "\xfd\x61\xf8{Q\xb3\xa0\x6\xa3\xf2\xe4S\xcb\x99\x99\xdf;B\xc4\xf6\x80\x1f\x46>\x16" "k\x1eP\x12R\xbc\x7f\xd0\xe3\"\xcf\xb|\xa1\x39\xdeHR\x13\xfe\xf8\xb3\x34\xad$\xe6" "[\xc5\xcb\x66O\xa6\xea\x81\x98g\xf5W\xc8\xa3\xdd\xe6\xa6\xb0\xfc\x8d\xd7\x5\x18*" "yW\xa2\xe2\xc\xe\xfe\xa5\x8e\r-\xff\x1a\xa7+\xbd\x99\x1dr\xea\xb2@\xf6\x96\xbc\xdd" "\xd1\xa9\xb4\xf7\x9c\x45\x87V\xde\xce\x8a;d,}<\x8cr~\xad\xcc\nq\x3\xcbMG\xa5\xb1" "\xfb\x90=\x11\n\xea\x5\xcf\xb2z\xa4\xe3\xf\xbd|wc\xec\xdd e\xceN\xf7\xcf \xcc\xcb" "\xaf\x37\xee\xa6\xa3\xe4 \x1aSW\xcdLO\xb8s\x16\xbc\x32\x3\x87\xc8\xd1\x12\x7h!\xe4" "2\x1dL:\xbd\xf0\\\x8d\xc4\x62/\xf2Y\xa3\x32~\x90\xf6\xdf\xaf\x43\x9bo@E=\xb1\x8t" "\xcb\xe0\x8a\xf2\xec\x84\xa9+\xa7$0k\xfb\xf7\x17\xdc\xcb\x9a\xbc\r\x66\xe8\xc2ly" "+(\x83\xf5\x89'\x5\xcf\x96\xc2\xecT6Mh]\x4<\x4\x14x'\xe0\xc3pzX\xb7\x94y\xcd\x35" "\x7f\x11rV6\x17\x41\xf3H7z`*-\xa0\x10\x33\xdb\x13\x14\x38'y\xde\xe0\x89\xc8\x8a\x36" "\x85\xa3\x1d\xe3\xe0\xda \x8f\xa7\xa6\xfc\xdeO\xf1\x9c.O\xf0\x8a\x15\xaf/\x1c\xf4" "\x12\x9fh\xdc\\\xc0\x44\xeb'\xd1\xf\x1fk\xc6\x93P\xc5\x8d\xff\xc9p\xa3\xdc\xe9Z\x8e" "h\x8^@5\xe1Tf\xe8\xc5OM\xcf\xa4m\xd8\xd8\x9ci\x3\xc4\x9a\xd0\xef\xd7\xdb\x9b\xb7" "\r\xa3\x8d\x12\x19\x86\xd4\xf0\xdf\x97>\x88\x15\x83\x87\xba\xc2\x6M~\xd5\xd8\x35" "\x1c\xad[\xf7\xbc\xec\xd4\xf4\xa9'|\xe9\x34w\x9d\xdf\x8e\x32I\x7fX\xb9~\\\xf4\x41" "`b\xd0\xb7V\xb8\xcd.\x9a\xea\xb2\x43\xed\x37\x66\xc9\x41\xc2,\x99\xcd\x35)\x9d\x18" "^W;\xda\xeS\x0;W\x89\xaaoj7:t\xafN\xf9\x6\xc8\xc5\xcc\x41\xec\x33|\xd3\xfa\\\x1d" "i\xa2u\x13\x9f^\x9d\x9d}\x2\x92\x91v\xb0\xfb\xe0\xfe\xec\x2\x44;H\xec\x33\x35\x9a" "h\x10z\xb9\xe2M\xf7\xe1\x30`\xe1\xc3\xb3\x93\xc8\x15\xb2\xa8\x1a\xdcW\xcf\xce\xab" "\x98\x2\x42\xbbq\x8\xf9\xf9\x13\x92&0\x92\xdf\xb8\x9d\x35\xf0\x36\xbe\x14\xb5\x9f" "\xa6\xbc\x36\xcavF\xd1\xcf\x8\xab\x87\"\xbeg\xd1\xb5r\xba\xbc\xe2\x66\x32\x8f\"\x9c" "\xe3\x2g\xafK\xb\x36\xb5\xc5\xef\xff\xb9Q\xe9\x1c\xcaH\x11\xa2\xc1\xa0L\xf1.\x9a" "\xb7T\xa2\xfd\x6\xa3\x98\x88\x12*$JD\xa8\xbfR\xda\x16Uz\xebJ\xed\x91\xa6\x86\xfd" "st\x1c\xea\xbf\xef\xf6\xdb_\x9b'\"\xd4\x61\xef.\xe4<\x19\x8\xb5\x30\x90\xe7\x46\x16" "k\xce/\xab\xf0\xfb=`\x8\xeftY\x90\x9b\xd8\x88\xf0T$T\x1f\x92t\xda\x33\xd9l\x83Y\xf3" "\x96\xbf\x34~a\xec\xb1\n\xc0\xbe\x33\xd2'\x16\x2%\x82\x16z\xc9\x9c\x8c\xcenj+\xf1" "\xa3*O+\xa6\xb2r\x5\xcf\x9f\x97\x65\xb1\x7fz\x9bI\x86\r\xfb\x9d\xba\x18\x12\xd8L" "|\xae\x90\xcc\xc0\xac;\xd9\xd9\x17\x1f`yL\xf9\x5\x61:_\xa1M\xc7/R\xa0l\xdb\x33\x1d" "\x14\xfa\xe1\xe\x3\x93\x63\xe5\x11w \x86\x46\xc2\x18\"\xf2l{\xb9\xd5\x87\x86\x97" "\xbf%\x9e\xd4\xf4\xc6\xf4\xea-\xcc\xa4o R\xaa\xc2\xd3\xe2\xad\x1x\xc1\xd5\x15\xd1" "\xa5\x92&\x8c\xe2\xa4\xcb\xc8\xe4\x81\x13\x42s\x19\x84\x86\xbv\x85t\xe7\x1a\x1c\xa1" "C\xe1\xc3\x38\x86\n\xa0.\xdb\xf3~y)\xc\x89\x32\xb4)2\x3\xf7\x96" "\xe3\xa7U\x90H\x19\xcf\x1f\xc1\xf8\xcc^\x87\xd1\x9e\x65\xb3\xb9\x16\x8b\xdd:|\x7" "\xc8O9\x0t$\xfc\xc6:^\xe2y\x82/\xb2\x3\xa7`\xec\x89\xaa\x8fG\xc2Y\xb9\x1ey)~MV>x" "\xb8\x1!\xa5\x34\xa6[\x2{\xe6\xc4,\x82\xcd\x66(t=\x81\xb\xa4\xff`>\xdasn%\x83\xf8" "SjjZI\xde^$\xdc\xa8\xb7\xfc\xf2\xd8\xe2\xb2u\x9d\x42$\xbe\x65\xcbz2-\xf\xce\xe0\xaa" "+Zq\x87\xa0J\xaf\x44\x91\x9f\x93\xe\xd4\xddP\x9d/<\x3\xd8\x17\x42\x34t'\xa3\xcc\x46" ",\xea\xd3\x43\\\x62\x19\x8c\xb9\x7\xfeXiF\xa1\xc6\xce\x44\x46\xd9\x9\x8f\xf8\x37" "\xab\x61\xa8\x12V\x10\x96\x9\xd3n\x86\xe9\xf\x10\x63\xf2\xa6\xab\xe8!\x83`\x5\xb1" "\xa1\x8d#~\x98\x9f\xcf\xdd\xd7K\x1d\xd8q{\xf4T\\}\x18\xa4\xb3\xe7\x8\xd5" ")\xbe\x18=\x7\xe2\xb\x30\x0T]\x92\xc9\x82U\xb8\xe6\x46l\xc9\x9y\xf7\x8f\x8e\x66)" "\r\x96\x9f\x99Q\x8I\xf\x8a\xb2\xaf\xe5\xf8\x9f\xa9\n\xb0\\WhS\xfe\xd0\x63}\xefk5" "h\xc6\xb3\xceT\xac??vt0\xc4\x9c\x95gf\xc7\xbd;\xfcl\xa3\x16\x88P\xe3/O\x8e\x65=\xe3" "\xa3%\xa5\x15S;0\xc5\x8a`\xc7\x99\x89\xd8\xdb\x33:%\xe8\xc1I\xa6\x16\x30z\xa3\xb1\x84" "w\x11\x99\xcb\x16\x37\x83\x7\xf1\xde\x39\xc9\xc0\xb0\xbd\x8e\xd6\x1f\xd3\xf7\xf7" "<\x87\xc1\xdb\xfa\x7\xc1\xa1\xc7\x1dv\x95\x89\xb8[l!R\xe\xe5\xc\x80\xe4j\xe3\xae" "cP\x9b\x93\xc\xc1[\x11\xd2\x83\x1fQ\x4\x61x\xf4\xce\xb3\xc4]MP\xbbp\xae{Y \x18\xd2" "\xed\xf3\xe1\xc2\xc0z\"\xa9\x16\x15\x30G\x8d\x1blw|X\xa4N\xe4\xa4\x92\x80!:\xe\xea" "\xcf\xc8\xfa\xe1@\xdc\xc7\xf1\x43p&\x93^\x97\x82\x94\xa1_\x8b\x31S\xaf\xf7/\x86\xfc" "\xd7\x11H9?,\xfa$\xfa\xf0\x10\x13\xf8\x41\x95G\xdf/\x2_\xd5}\x1d\x5\x45!\x9a\xf7" "\xb7\x9d\xedh\xa8\xd4T\xe5\xce\x99\x1e\x81<0\xe0\xff\xd4t\x92k\xa5\xc4\xb4\xef\xe1" "\xd6\xcb\xbd\x7f\xd2L\x5U\xdf--:\xdbL\xd6\x13%\xa5\x64q\x9f\x44\x62\xb0\x96\x38i" "\xf4\xb\xf1\x9d\xcbW\x8e_\xee\xb\x39\x9\x9\xde\xb9\xa3\xf8\x90~,c\xac\xc2\r\xa7\x30" "m\xd1\x37\x15o\x10\r\xb4Z\x1b\xc8\xc0I\xe9\xd9\xbf\x1f`:\x86.:q\x81\x4\xb8';Y\"\xec" "\x9\x8d\x34\xce\xa5\xf8|\xd2\xe\xf2i\x18'l16;\\\xc6\x44\xa1\n\xbb|\xbc:\x3\xeb\xd2" "\x18\xf2\x64\xc5KK;\x7\x17h\x99\xb3\xfq\x1e\xfb\x80\x65T\xa7\xb5\x83?>\x3]\xf5\x45" "tW\xe1_D\xf1K\x99@=T\xbat\xe6\x18?\xee\xed\x19\x14[\xff\xbf]/\xf4\x80\xe1\x9c\x61" "\x9f\x61\xab\x92G8\x9f\xed,\xfa\x63\x85\xf6T#\x8b\x34\x99\xf8\xe3q\xe7\x17Hr\xa0" "\x9e\x93U\xd5\x99q\x9b\xc6=\xc7\xb1\x86\xf5J\xc8\x35\xbf\xa4VN\xe9\xd1\xa7\x0`Y\xbe" "\xe0\x4\x8c\xf8\xee\xc5\xff\x1d\xe9\x86x\x8b\xc3\x66\xdf\xf7\x11\x93\xe\x1c\xc5H" "\x90\xe6\xc8 4\xed\xd8L\xc1\x5\x66\xdfW\x95\xf3{\xe6\x9a.e\xeb\x10\xbanL8\xe0\xad" "\xcf\xd4g\xc3\xa3\xa3\x16\x97\xc2\xdaQ\xc5\x35\xcd\x61q\xae\x8e]`\xaf\xd1\xda\xc1" "\xd9\xed\xeb\xf9\xfd,\x8d@\xa4\x81\x4\xe9\xbe\xfe\x9\x65\xcb\xdc\x8e\xb0-b\x99\x13" "a\xb4\xa1\xacv\xf6O\x83.\xd6\xff\xdc\xa5\xbc}W\x3{\xb8\r\xae\xc5\xd8\x91Y\x1b\x80" "\xdf\xf0p\xdd\x1b\x99\xb4\xfb\x8G\x8e\xb4\xe8\xb3\x2\x4\xa9\xb9\xe4\xec\x33\x10[" "\xae\x9d|\xde\xd1\\h$?~5\xc2\xeb\x43\x8e\xf2\xe1\xd1\x10\xb3\x18\xb2\xc8\xf0\x8a" "\xe8\xed.[k\xdar\xd8r?~WH\x12\x80\x95Ou\xa8\x15\xe1o\x1c\x61\x43\xef\xeek\x87\x9f" "\xf1MV%\x1b\xd9~\xd8\xe6\xd9\xb6@\x82\xc\x91\xd7\x65s\xc8\xe5)\n\xda\x9d\x31&\xe7" "k6\xcc\xd6q\xdb\xdc\xc9\x1f_\xa5\x18\xeagv\xf6\xe7\x42\x82\x11<\x0\xa5\xb4z\xcc\x30" "\x17\xb6\x9b\xcc\xb8(\xbb\xa8\xe1x\x1a\xa7$^\x11hh\xa5S\x5\x30X\xb\xfd=Q\xe3\xd4" "\xbfr\xef\x94\x10\x46\x91\xe4\x8eNV\x8d\x43\xb3\xa1_\xcb\x9f\x91x\xd8\x88g\x7\x34" "\xec\x99\x5\"\x66\xd6\x62\x37\x9a\xc4Z\xe0I\xf8\xea\xfe\x1f\xbc*\xdb\xb6\x14J\xba" "\xf4\x62\xb1\xb6\x97\xc9\xde\xbz\xba\xe4Q\xa1%N\xf\x1a\x2\xd6\xcf\xc8U\xb3\xb\x1a" "\xcd\xf6p\xe7\xfe\x6\x1a%\xfe\xb1\x94\x45\x45\x8a\x8d\xfe|\xab\x9f\x86\x62[:\x9f" "`\xc2*\x13\xc1G\x92\x92O\xd0\x3\xd4Q\xcd\x1d\xc1\x41\xfb\x91\x91J\xa6IjF\xfd\xaf" "\xdd\x8a\xdaT\xe8\xbdk\xd5\x46\x2\x5\xbf)A\x1e\n\x90\x8d\x10\xe7wn\xd2\x1f=p\xa2" "*\xa6\x39\x9bX\x9e\x3\xee\x1e\xc9\xe1\xa3\xcf\x8a\x30\xff\xd5Wf7\xa8$g3\xb9\x1c\x1e" "\xe8\x15\x36\xa2\x9c\x89;L\xcaq\xc5\xe1\xf5\x90\xb\xe1\xec!\xdc \x1b|\x3\x32\x2\x45" "rY\x9f\x3\x8a\x84$\x18,\x9a\xb6\x0\xb2ik\xeb?\x10/\x9\x90\xe7O\x90\x63\xe1I\xbd\x63" "\xd3\x18u\xfdo\xb6\xc7\xe0^\xc9Z\xf4,\x11\xa2\xe8z\x96\x36\x1\x35\xed\xe4\x86\xb5" "<\x82\xf4^\xb\xc5\x14\xc2\x85k\xf1\xd7\xcd\xc6Nz\x84\xefHbM\xceV\xa0\x37\x8e\x12" "\xaa\x0}\x93\xb0\x43k9`\xae\xaf\xf\x87\xeN\xc0;\x8e.2\x83\x41\x9ap;\xfeI\x9e\x63" "Mw\xe3\xc7\x8\xdbT\xe8\x96j,Y\xafr\xd2mf6\x17I\";\xa0\xaa\xe5\xea\xca`\xbJ\xe\x13" "ei\xfeZA\"\x1b\xe~\x83\xe5\xea'\xde\x7f\x86\xee\xf2\xfc`\xdd\xc8\\\xe2Y\xc5xQ\x10" "P\x12\xd5\xbaq\xa8&Wnl\x9f\x44\x62\x35\x43\x65\x1bn\x1f\xba\xc2,o\xf4/\x9c\xe9\xe8" "\xe9\xd6-\xad\x9P\x12\x10\x2\xd8\xdb\x8f\xae=\xad\xb8]!\x8b\xe8\xe8\x85k!\xd0Q\\" "\x8c\x7\xd5\x1e\x1c\xb5\xb\x87?\xc5G%\xe2\xe0\x31\xd9\xad\n\x18\x8\xdc\xe8\x9b\xe2" "\x94\xf4\x10\xa0\xb0\xfc\xe\xa8'\xee\xd4W\rs\x1a\x66\xae\xb4\x7f\x9f\xf4\x0\x97r" "\x92\ns1\x19sk\x9b\x93\x11~(\x6\x1fOxe\xf3\x90\x34\x18H\xcd\xbf~\x98\x6\x86\x7f\xec" "\xab:`o\x9f`\xdd\xcb\x1fq\xe6o\x86\x87gE\x92*9\xd0%\xaa\xc5\xe5\x84?\x99\xbcwd\xb8\x1c\xde\xa5\xf2\xfb\x1f\xc3" "\xff\x34\x87\x8c\x62P\x86n1\xd3\xf7\x97.\x85\x18\x4\xaa\x64\x1a\xa3\xa4\xc9h\xc3" "\xdf\x0\xc3\xe3\xa6\xa8?*\xcb\x90\x95\x97;n\xef\xe7\x92\xb\x7\xe6\x82mm;P\xa4\xb7" "v\xb5\xf\x9f\xfa}G\x1c\x35\xc\xaa\x1c)\xeb\x9d\x93gD\xf5\xe5v2TO\xc5\xa4\x36\x63" "\x0\xee}\xb1\xa1\x96\x8a(\xc2\x64\xad#\xed\x30\x5u\x90_i\x98\xf1\xd4\xa5\x1e\xfc" ">\xee\xca\x46\x82\x13\x82M\x3^\xa7\x83H\x8d\x94\x39\xb3\xc9\xb1\x92\x37\xb1\xe2:" "\xc0\xff-\x8c\x37\x97qk\xb6\x61\xb4\xde}J\x10\x80\xf0\x92\xa4\xb8m\xdd\xaa\x65\x35" "\xe4\x96\xe9P\xc4\xdd\x13\xe3\x8c#\x81+>\xd6hR:\x1a\x82\"\xe8\x44]\x82Yw\xf9\xe4" "\xb1\xa2\xeb:\xb9\x33\xd3\x88\xd6\x97`'\xf6\x94~\xc3\x37\xfe\xc7\xc2\x66}\x95\x17" "\xfc\xe6\x8dU\xf7\x91\x96\xc6\xf5\x1f\x9b\x8et\xad\x90\x1\x83\x9e\n\xfb\xdb^P]a\x10" "\xdav\xa2\xbe\x32\xb\xbd\x17v\xe7\x89\x84\x66O!\n?N\x86\x37]P\xdb\x12\xd8\x9d\xfe" "\x5\x8f\xe9\xceS\x3\xf1\x44\x9a\xcd\xb4\x85\xbb\x16\x45\x81\xa1#\xd9\x35\xe5t\xe5" "\xc4\x92\x36\xcc\xf9\x6\xc8\x18\xb2\xee\xe7v\xc0\xdb\x45g0\xb7U\x7\xdcR\xf6\x8c\xb9" "\xc6>\x9a\xf0\xdc\x36\x1\x1e\x1b)\xd9\xb4\xcb\xbb\xff\xc3\x9e\xa4\x82\xa0\x1d\x80" "\x83\xe4\xe3\x19\x91\xc5\xb7\x92\x85R\x14\xb5\xff\x1a\x86\x82W\xa7n|f\x6\x8d\x32" "\x15\xaap\x9bXf?p\\\x8a\x9d\x37i\xe2)`\xda\xdb\xa3pO\x7f\xe5\x36\xf0\x86\xd7\x8f" "\x9f\x14\x9d\x12\x62JS\xc\xbb\x30<\x8a>\x13\xa3^g\xe3\x97\x46\xe9\x66iwH\x92\x42" "Y]IL>\xcc\x61\xf9;K\x94J#\xc3\x62\xe9Q\xd2\xde\x86\x6\x16\x39@\xd1\x96\xb8W\x9b\xaa" "#\xf7\x62\xeaG\x14\xe2H3\xe4\xaf\xa1\xb6\xd2.z\xbb\x8c\xd1\x1f\xa4\xaa\x83[\x9a\xf6" "\xdf\xa6\xc1o\x99\xd9\xff\x9=\xb8\x94\xe1\xd0\x8X*\xec\x4\x8c\x43>\xe5\xaf\xb\xf6" "\xe2\x12/\xf4\xca+\x15zE\xe1\x8fJ\x91\xff\x8e\x66\xc6\xc3\x19\xa0\xf7\x7f\xa3\x82" "\x12\xb\xda*!{\x83\x5{\xf1\x9d\xac\xe9\x86\x84&\x14t1\xe5\x88\x1c;&6:\x9\x8a\xf3" "a\xb9\x96\x66\xbf)\xb7\xe1\xf6\xbfO\xf2\xeg\xab\xf3\x19\xea\xf4\xb3\x41]P\x94\xba" "\xd3\xbb\xeb\x35\x1c\xb5\xe0\xfa-\x8\xf1`\xc4MQ\xect\x83\x10z\x19\x19L\xb1\x44\xe6" "\x9d\xdf\xf4\xd6kF\x2~\x9c\x65\x61\x33z\x6\x44\xac\xac\xcb\x99\x88W\xf\x9f\x95\x9b" "\xf8\xca\x43\x87\xeb\xd2\xb6\x66\xe9\xda\x96\x42\xc3p\x5\x5\x97\xff\xf6\xd0p\x18\xee\xc\x9a\xa0<\xb4\xab'n\xe" "\x15\xb7\xa6\x8\xd9py\x16=\x8f\xb2Q\xe3}\xc9\xed\x82/\xe\xe3\xe5\x82\xdcSG.\xe9\x97" "\x91\xef\x96tH\\\xe9\xaa\x81\x92R,\xb7\x15\xd4\xa3hc\xee\xa6\x92\x97\x13\x91\x3\xfb" "\xdf\x1bM\xa7\xce\x9e\x13\xa4\xd5\xe4|JQ\xb2\x42\xfe\x94\xbaI7\xaf~\xba\xfc;#'\xe9" "9\xed\xf1\xf8\xc3\x9c\xe9\xc6\"\x61\xbc\x12[\xfc\xaf\x46\x61\x36\x46\n\x8a\xbdt\xdd" "\xd3\x45:\xdbhla\x7\xe4\xd9!\x99\xa3\x8\xa0\xf\x94\x5\x97\x41\xaa\xfd\xb\xa8\x92" " \xae,\x97/<7DR\x8aU\xd9\xb7H{\xbc\xae\xb1\xc5uv\x8e\xda\x14\xe7\x64\xd5\xe6\x86" ",G\xfd\xcc\xc\xbe\xb0\xa0\x14\xec\xbc\xff[4\xaa\x8f\xc8\xfb\x38\xab\x35\xba$\x83" "\xf1\x42\x15\xf6\xabs\xfd\x12\x34U\xb8\xe6\xdc\xcd\xa8\xe5y`\xdf\xd4\x9c\xca\xd4" "\x91\x8ei\xb1\xd7W:\x7\xff\x80n<}*1\xc6\xb8\x18=4U\x87\xf\xf0\x1b\xf4\xa2:,,\x10" "n\x81\xcd\x9e\xa3\x84\xc8G'\xa1\xa1<`j\ra\x81\xdd\xbf\xf4\x1b\x1P;\xf9R\xad\xd2\xc6" "\xb\xf1\xf9\xe0x\xf0S\x87\xb7\xc9\x1b\x1f\xc9\xfbN!\x99\xf5\xf6<\xae\xc3\xe3\xa8" "\xd7\x30\xca\x33\xba:\x89\x65\x38\xc0L\xd5\xedt\x9c\x87\x9f\x33\xdeXoi\xd8\xc6\xe6" "\xeb\x1e\x93\xac\x80\xb4\xb1\xb1Lp\x9f\xfZ\x84VW\xd2\x80py8\xfd\xfa\xbf\x33\xfb\xcc" "\x85\x81\xfe\xb9\x99\x8ds 7D\xae!\xb3!*>\xbe\x87\xc1\xff\xff\x18{\xa4\xbdt\x8e\x94" "\xb0\xec;\x9bhV\xb2\xd9\xc8\xb2\x8d\xd3\"\x10\\\xf5\xe\xaa.t\xa0_\xa1\x98\x87\xd2" "\xf7\x9TK\xe4\xf7\x13N\x8\x85\x36\x1e\xd5\xb4\x13\xdes\x4\xceK3#z\xf4&\x98\xd4;}" "\xa5(\xb6\xa1\x15\xf5\xb9\x9a\xfa\xad\xf8\xb5\x85\x84\xf7(\x2\x9\xc7q\"9,\xb4g\xa3" "\xa5\x31\x1d\x64\xb2RP\xac\x42\xf7z\x15\xb5\x83\xadq\xb2\xf2T\xdd\x16\xb6\xc4\x33" "\xb8]\x88\xb0\x81\x12\xc7\x97\xe1\x9bt\xd2\x35\\\x12\xa6\xb\xe1\x4\xcb\x8a\xb6\xda\"\x90\x33g\"\xf5\x87\x38\xd6n\xbb\xa6zJX\xfb\xa9" "/\xba\x96\xec\x15\x5\x94\x38\xf8\xef`\x81\xc6\x7fl.\x1d\x8bQ|\xc5\xf\x3\xfe\x15\x1c" "\x8f\xb\xfd\xefr\xab+\xe0\x14\xa2\xbe\xf\x62v:ly\xdc^8\xa1\x90\xe\xa9\x8e\xfc\x31" "\xa0@A#\rW#X\xefm\xda\xc5y\xe\xd7\xb\x34\xc8\x1eK:\x93\x84\x9e\x38g\\c\x8e\xb9xZ" "ZNonb\xf5\x99\xbc#S\xe2l\xb1G\xceZ:t\xa9oB\x9b.\x94l\xf8\x1d\xa1\x90&\xc9\x95\x1f" "\x8a\xdbZ\x5\x8f!&\xf6\x8b\x33\\\xd3Jg\x12n(\xae\xaa\xa9\xe4\xabW\x8c`E\xa4v\xeb" "1'3\xb3}\xe4\x1e\x13\xa0:d\xa3\x2\x9b\xe5\x30\x33\x19\x83\xa8\xf6\x9d\xb3%\xca\xd9" "C\xbd\x44\xdb\xf6g\x18L\x1b\\\xbeq\xa0\x1a\xfa\xef\xcav\xf0}\xbc\xcc\xb9\xfb\xd6" "\xb9\xd5\xe2U\x7f\x8a\xe5J\xfd\x82l\xa6\xbb\xc6L\x5\xad\xac\xca\xbe=Z\xc2\xf8\xe4" "D\xbb\xc8\xe6\x65\x65\x31\x33\x1d\x36/\xab\xdf\x91x]/\xe7]5NS\xfc.\xb1\xefv\x10\xac" "\xafm\x1c\xa1{\x9b\xcb\xdf\x8d\xdb.\xbb\xde#\rk%m,k\xcc?AZ\x87+(\xdf\xb1xT\xd3RG" "KIc\xd8\xe5\x14>\xd5n\xd7\xae\xdb\x94_Q\xf8\x97\xa5\xe9;\xd2t1\xbd\x61\x44*\x88\xba" "\x4\x2\xec\x9d\x1aS>H\xbc\xc\x8c\xf9\x8ej\xb2\xb1\x9\x38&}\xbd\x15I\x6\xe1\xba\x12" "\xe\xde\xfdH\xe2X$6[\xab\x1b\xcdH\xbd\xa4\x64\xdc\x88#\x7\x80\x35\x81ymD\x98vA&c" "\xa2\x9a\xe2\xd7\xc1\x64\x9|\x99|\xfd\xeb\xac\x31\xe2m;\xbcT\x1fS\xe7\xa5\x18\xec" "\xa9(\xd3\x9b/\x81\xbe*\xc1\x7\xa4\xfc\x80\x8fg\x84\xec\xf9\xed\xb7\x10\xbb\x6\x5" "a\xa3\xec\xe4\x82\x42\xc6\xc4\xcx\x94\x30|\x1\x9dT\x11+\xa3\x46\xf4\x13\xdb\xc2\xee" "\xbb\xaa\x8e\xab\xfe#NFH\x81\xacR\x3\x36\xa3x\xb0Q~\xb2}\x80\xe\xdb\x7\x1a\x32zz" "C\xb1t\xb\x9e\x45z,\x1e\x8\xc4\x8N\xdfk\xc5=w\x1\xab\x63\xf\x38y\xb8\xd7\x90\x15" "\xc3_\xd2\x94\xe9\xd4Y#\xc2\x88\xad\x9\x45\x90\x95\x80\xe0\xa4\x32\x3\x4\x8rw2\x9a" "\x9\xf1\x95\xc5\x1e\xd3\xf7\xae\x39\xf4\xd7\xd3\x12\xb\\\x13\x31&\x1d\xfe\xc4\x17" "\xe4\xd6\x85\xe1\xd0\xe5\x6\x8e\xd5\xf4\xe7\xb6\xaa?\xe8\xb9/\xa4\x64\x45 \xcb\xb" "0wp\xcfI\xcd\"u5aK\xacy\x9f\xd7G8~\xb2\"\xdb(\xb4;HW\x8cK\xd6\xcf\xa5\xea\x8c\x91" "1!4c\x93-\xf2\xe8\x9\xc4-\xf4V\x83\xf4Gt\x14\xf4i\xf3\xadg\xe5\xf\x36\x45\xe9\x42" "6\xaa\xd3I\xa2\x43\xd9\x1d\xcf\xb9\xcG\xd7\xc6\xa2\xb\x2rMw\xed\x8M,\xa9\xf2\x1b" "\x8z(\x82t|RG\xfc\x94\x9e\x1b\x90\x8\xbe\xdd\xb3wN\xe9_\xb7\xf1)]\xc9=\x9dzi\xcd" "\xfb\xbd\x38]\x4\x19\xbe\xc4\xa0\xd0\xd8\x82\xff=\xd2\xe7G\xb2\xee\xaeil\xa1^4U\x81" "\xec\xd1\xf4\x34\xe\x2\n,=\xa3\xda\xd8m.{\x9eO\xbR\x9aw\x8a\xf3\x37<\x9f,\x4\xb9" "\xc1Y\xa2\x35\xb0\xdc\x10\x9b\x2\xa8\x6& \x3\xb3\xb2\x45\x32\xc2\xbc'\\\x80\xb5\xd6" "\x8c\x10 %\xd9\x43\x3\xc5X\xc0\xe8\xbe\x9bt\rcX\x90\xe5\xdaX\x19/\xe1\xf8\xa2\xe7" "/%\x1b\x9b`|\x5\x61\xbe\x33'\x8bL`\x15\x33\xd8\xdd|9\xc4\xd4\xf5\\P\xf2^Jk\xa6{\x17" "\xb4}\xe7\x8b\xfb\xcb o\xaf\xf3\x9c)\xfeu\r\xd8\xaa\\\xea\xc8\x80\xc5`c\xc9\x91\x64" "\xd0\x8a\x82\x65\xb3\xa5P\xf6@\xff(\x8c\xe3TH\xc3\xf7\xe2\xf1\xcbz\x1b'\x92w\xcd" "m\xb0\x91\x43\xa7\x42\x16O\x9f\x88\xca\xf9\xbe\x8\x9am}+G\xa0\xf1|L\x12\x99y\xca" "\xa8\xdf\x95\xf6\x62\x1d\x44\xa2z\rN\xa0L\xc0\xe8\x17\x89\x4\x98i\xb2\xa6\x35[3!" "{\xdf\"^}:$\xe9\x80.(\xe5*\xfa\xbc\xb6\xd0\x9b\xd9\xe\x82\xb7Z\xbc\x97r\xeb[\xa0\xcc\x92\xa6\x7\x91\xfe\xafSL\xa5(\xe5(\x1e\xc3\"\xd5" "\xddH5\x5:\x99\xee\xfd\xb3\xcc\xc4\xa3\x84R\x13\x11\xf7\x8b\xda\xf2\xbe\x0O\xf6\xa8" "\xcd\xe3\x83\xd6\r\xd2J:\\\x8f\xf9o\xd0}\xe5\xac\xec\xfa\xe9\xf3\xcd\x8a+8k\xad\xb3" "O\xfc+\xb9m\xb6\xf6\xd6\x81T\x91}3c\xd8U \x8dI\xef\x64\xa1\x8b\x89\xc5\xc6\x9f\xf6" "\x98\xc9\xd7\xfdQ\xf9\x46\xcd\xd1K\x6\xe7\xb5\x9e&\xa1}QM\x4\xb1\x17\xe7\xde\x65" "\xe6M\xe6\x9f=\xe0\xc0\xf\x16\xfc\xfe}\x96{d\x9c\x8dY\xbe\xc9\xac\x1d\xc\xcf\xc1" "\x7\x9d\xb4J\xdd\xe9\x2\x11\x63\x64\xb6\x1a\x90\x45\x87\x5\xb1\xf0v%e'R\x94\x98\x97" ">\xbe\x9b\x8c\xc7G\xceu-*\xa3&6&\xccj\x0\x36\xc3\xf5\xe0\xf\xc7X\xae\x19\xb7\xc3" "\xfbT\xd6\xeb\x8d\x1c\xd1\xbdU\xf5!\xfnu\xff\x9b\xcd\xda\xd5\xf5\x8d\xce\x90\x1b" "NP\x1f+\x85\x64\xbf-\x8b\x85\xcb\x34G\x10M,\xfd|\xdb\x86)\xa5>\xa3\xdb:\xb1\xd4\x8e" "d\xab\xe7\x35\xee\xa6\xf8\xf1\x62x\xffN\xff\x64\xe5h\xd4+_\xca$\xcd\xbc\xdd\x81\x5" "\xaa\xc4^I\x10\xb4\n\xbd\xb3$u\xb4\x13\xc5n\x1aK\x9\x33Y\x19\x19\x30\xfa\xfa\xb3" "*\x98jh\xd3\x9f\xa5\x6=B\xceY\xdb\xfa\xa0\x82\xb6\x8c\x94\x6\xa9q\xea\x84\xb0\x63" "4`\x82\x1b\x11LK\nr\xc6Y\x89\xc9\xaf\xc0\x85\x44\x33G\xfdOo\\\xf1\x7f?\xf5\xb2\x91" "\xb5Xp}\x8\x31\xb8\xac\xcc\x8e\x38\x80I\xb9\xbfm`\xb4\x3\xca\xd3\xaf\x1d\x15\xd9" "\x99W\xa1\xd8\xb\x93KC\xd0\xf8\x12\xceTN\xa3\x6\x65S?n\xd8\xc3Z\xa5\xc1\x9e\xf1\xfe" "\xa2\x93\xda\xfa\xc0\xe7\xd4\x82~{\xa7\xf0gg\xdb\x1R\x11\x31\x43s\x18\x7\xde\x15" "\ri\xce\x33\x2}\x12\xc3\x46uK\x1eo\xea\xcc\xe9\xb1\xdb\x31\xd9\x1bqO\x90\xf1\x17" "\x94u\xbd\x95\x33\xf3\x2\xb0\x9d\xb2p\x80\x38\xe6'1\x19\x66\x92\xed\xaa\x98Tz\xcb" "\x8\xa9\x99\xd3\xbe^\x85\xb2\x9a\xd3\x1e\x1a\x90\xc8\x98\x31\xaa\xb6\xde\x15\x30" "1J\x2\x62'\xee\xc8N\xff\x32\xe5\x1b\xee\x8\xd8\x19p\xbf\x96\xbfLC\x19\xeb\xe6x\xd0" "g&T\xe2j:\xfc\xc6\r\x32\x90\x81\x31\x19\xed;\xe6\x34\x2W\x98oV\xad\x32\x1b{\xe2\x65" "\xd4\x81q\x96g`\xd6\"r\xe0\x46\x66" "s\nQ\x88\xcc\x7\xc\xba\x1b\x17\xf~\xb6\x46y\xc1\x61\xe2s^E\xe4\xe\x9\x7f\xa0\x94" "\x9e]\xf7o\r\xf6Z\xc8\x5\xd0>\xe3\x10\x35:\xcf\xf3\x6\xf2S\xe8\x4 I\xcc\xa3\x16\xc7" "Q\"8\xd6Re\xf9\"\xe4\x38\xf9\x64\x44g\xeb\x14\xa7\xd2\x8d\xac\x9a\xa3R\x5\x93\xaa" "\xbO\xaa\x1f\xe5|2\xf1^\xf1q\x16]\xb7}4\xb7\x93.\x81\x86\x96/(\x8c-\xd8\xe4\xaf\x1a" "\xf4\xfb\xdc\x35\x8e\x92\x38\x94\xb6\\\x30\x5G\x93\xb8.\xbd\xe2\xda\xcb\n\xfd/\x9" "\xd5\x37\x8fZ\xcf\xbb\xb9\x87\x64\xbd\x96\xb8\x37\xe0\x86\x81\xdf\x9\xffl4\x1b\xee" "\x1\xda\x1a\x65\xd5~\xf1\xfc\xe7\xce*\xcd\x88\xf7(\xce\xf8k\x18\xd1\x65\xc8\xd9\xe1" ")st\xd7H\xb9\xcd{\x18\xc8\x8e\x19\x31M\xfa\xe0\xb8\x1c\x99\x82\xc8\x1b@Bn\xcd\xeb" "\x16\x14o\xdf\xbd\xd9?b\xe1\xb4\xe3{H\xe6j\xa5\xc6|\xde\x42\x86Tw\x1b<\xab\xde\xbe" "\xcfW=Xi\x15z\x96\x11:k7\x7fN\xd5v\xc6\xfdV\x7|\x0\x90,M\x13\xae\xbd\xd6\xb\xc9\x88" "\xf6\x89\xc3\x38\xb1,\x3\xe1\xca\xe9\xca\x46\xa8J\x2\x37P\xfc\x31\x93\x1e\xe7-\x93" "\xaf\xd1\xc8\xe2\x63\xe2\xd8\xaf\x39\x6\x82Z\"\x8b\x8a\xbb\x94-\xf1\xa0\x1b\xec\x2" "\xactgynR\xbc\xc6\x1b\x14\xc2\x31\xec\xbc\xa2\xdc\xb6[S^\xfb\xbb\x1e\xed\xf8\x6\x8" "\xb0\xc8\x8d^\xed\x8d\x0\x96\xae\x9a~%SoPf\x6\x36j/\xd5\x1f\xf7\xa1\xa2\x1\x1b-n" "J\xbb\xd8\x39\xee\xe7l\xb8\xfdt\xb2\xb2\x0\xd6\x34<\xf4:\xb5j\x93\x9c\xea\x8\x1f" "\xef\xea\xd2\xdd\xee.\x16GZ\xb4\xfe\x1fR\xc7\x80\xa6.\x88\xaf\x43L\xf8pyg'\xb0\xb3" "\xb9\x8f\x66\x87$\xe7m\x1\x93\x7f\x9c\xfe\xe7I\xb6\x91t\xbaR\x1d~\xe4V_\xde!}\xc8" ":\xb8\xab\x63\x39-C1\xb9\\l}\x10j\xb4\xa2\xcc\x33\xd4iJ\r\xe7\xde\xf4\x9f\x1cL\xc2" "uy\xbf\xf5\xa5\xbd<1\xa0\x1\xc]\xf6 B=!\xec\x65\x88\xa4\xeb\x1b\xe0[\xa3}L]O\xc0" "\x7\xe3\xe7\x3\xc1P\xe6\xbd\xfc\x42gr\xc7&\xe\x8\x9bv9\x97%\xd7\x82\xd4\x37v\x86" "\xf5\xb4\xb5\xcc\x36\x8d*\xce\xe8I\x11H\xf0\x94\x96s\xe5V\x8bN~\x4\xc2\x37\x31\xdd" "\xdb\xfa\n\xb\x1\xfd\xedx\"+\xafgM\xc0\xb2N\xc1\x15\x65\xe5\xa6\x1b\x8f\xaa\x2\xba" "\x9e\x81+\x14Z=3\x9e\xb9(Fk\xe0\x9c\xcd\xc1x'\x8b\xd1\x1f*\x99nxh\xc3\\\x33\x8b\xd2" "6\x98\xc5\x63\x37\x9a%\xba\x4\x8c\x0\x18\x39\xbak\xdd\x8blK\x87\xb1\xa0\xd7\x30." "\xebT\xb5\x8a\xaa:\xb2\xca]\x96\xfeW\x96}\xd2mE\xbe\xe7{@\xceS(\xcdQ@w\xdc\xa3\xfd" "8\x96\xda\xb8r\x5'\xbb\x31\x8f\x1c>\xdf\xc5\x1eU\xf4\x90\xc-\xfd\x87[\xb0\xcaY\xa5" "\x9d\x93`\x8e\x66\xa6\x45\xe6TW\x11\xda\x37/C0dM\x1e\xc8'\xe1l\xdb\xaai3\xe6\x8d" "k\x12\x8\x7f\x8dTC\xb5\xeaR\xc1_Z\xef\xcd\xef\x35I\xf7 \x98\x37\x1e\xb9\x1c\xf0\x5" "\x1f<\x98\x83\xea\xe3)WYNb\x87\xe8\x1d\x87\"\xe8x\xa3`\xa1\xc4\x82\x8d\x3,\xf6\x8a" "[\xb0Oz\xaf\x65+\xdf)\xa0\xdc\xe\x37\xc6\x8a\x9\xbb\xca\xbd\xcf;\nu\xbb\x1d\x99\x45" "\xe\xd5w|\xf5\xfaU]`A\xef{\xd4\x8cnd[\x11\x97W\xe7[s\\\x99\xdbnO\x16\x41\x84\x1\x95" "\x9a\x9d\x35\xae\x4\xebl\xfe\x65\xa4\x81YY\x87\xe4\x1b\x15T\x8c\x93.\xbe\xc1O\xcd" "w\x9dl\xe2\x9a\xfaW\x8e\n\x82\xb8\x13k\x10\xe4\xd6oLe\x9b\xe4$\x9c\x13\x14\xc4\x37" "l\xf9\x41y\x9a\xad:j\xefr'\xf5\xec\x93n\x16\xe0m\xe6\x9\xd5\x44R\xd5\\\x81\xb8\x1b" "\xc9\x36\xf0\x9b\x32\xa6\r\xc6\x1\xaa\xef\xde\x44\xb7W0\xe2\xf3\x83\xec\xdc o\xab" "l\x92\x9c;\x89\x44G\xa9\xcd\x1cO\x12\x14^\r\xc1\x64I\x2\xa2\xc5\x62\xf4\x92\xby\xc4" "\x1d\x4\x8f ,\xf3\xe3\xc6$Xy\xf2\x9c\x8c\xd6\xa1\xb7;+\xfe\xaa\x9d\x8f`\x95\x30\xbb" "|,P\x97\x36^\x8.6\xf2\xacyd\xbXk\x90\xc7nP\xb8\x39\x17=\xe2!@\xba'/!3\xb9\xd9\x14" "\xe4\x9dh\xbc;lN\xcd\xbe\xb7\x9fznM\xcf\xe5\xc0p\x15TJ\xce\x62q\x8d\x88\x7f\x39\x8a" "\xabi|\xc3\xeb\xbe\x7fy\xa5\xcd\xc9\xf0\xd6\x9a\x83\xbe\\T3r\xb7U\xe\x45\xcb\xed" "V\xfR\xafy\x83\x8d\xfa\x32\x92'\x1c\xbd\x12\xc1\x38hA\xb2\n\x95\xbb\xbd\x9\xdc\x6" "\xbf\x9e\xfa\xabZ\xaf\x16\xdc\xa6\xd7\x93\xfe\xcb\xba<\x6T\xfbR\x89R\x99\x33\xed" "\n\x8eU\xe3\xef\x14W[Q\xe1.\x17\xf9JU\x13\x9m\x8c\x91\x81?\x80U<\xf2\x1f\xaa;\xbb" "\x99\x11\xb2\x82\x8f\xd9\xf3n\xfe%\xef\xf5\xe8K0\xed\xf8\x85{\x10$am\xdc+\x19\x9c" "\xf7lpq\x8dk\x8fur\xd8\xd3\xe0V\x5\xfb\xeb\x1c\x84^6\xa0\xceYRA\xbc\xb9\xc\x35\xf4" "\xe0\x32\x1b\xb4\x4\n\xd4j\xed\xc4%r\x9d\xa5\x3\xb3R\x16\xf8M\xf^>kZ\x91.\xb8\xaf" "1\xdd\x8\x1f\xd1\xbe\xf7\\\xad\xf4\xbe\xe8\xe4\xb9\x2\xef\xe2k\x96|\x16\xcc\xa0\xad" "\xd4>U\x83j\x1a!K{B>\xd5\xc2PE\xc1\xf6O\x5\x8a\xd9\xf8\x13+3\x95\xdd\xe2\x86m\x81" "\x9\xcQ\xbeW\xbf\xd6m\xb5\xd7\x84#S\xc4Q3\xcf\x4\x8d\xc7\xa3\xd7~E\x9cj\\\x87\xac" "\xfeT\xa5\xcbiC6s%4\xf3;\xb0[B\x96\xda\x61`6\xe8\x1m\xe\x99\xe8n@=\x4\xe5\xaa\x85" "\x1c\xc5\x1d\xebn\xf8\xf0\xa0\x42<[\x2\x80\xcb:r\x17\xab@\x0\xbfk\xe3\xae\x83\xf8" "\xa8'\x82\xad\xab\xc1+/\xb3\x1\x62\x8a\xaeo\x96\x8e^\x3G\x92\xdf\xe5\x39\x83\xb9" "\xfa\x3\xd5\xc8\xda\xf7m97!\xa1\x8a{\xe7\xbc\x87Y\x9d\x9f!\x90\x9a\xc5\xee\x93k^" "\xf0\xb5\xaa\x10\xd4'\x4U\xab\x89\xd7\xf1\xba=\x9e\xca\xb8Q\x96\xf2\xd3L\x82\xbb" "|\xa0\xdc\xfa\xa1Z\xe2\x84\x6\xf2\xfbG\xba\x9d\x84\x8c\xa5\xc4\xcc\xf4\xdfH\xb6\x65" "y,j\xad\xb\x1a].\xc9u\x18\xbf\x39\x19\x82N\xa7s\xa6\xf7N\x9d\xf8\x94#\xf1Lq\x9d\xd0" "\xe6\xab\x16&\x83 \xb9\x30\xad\x32IO\xa4\xd5\x64\x8f\x16K\xc0\x9e\x8b\xca\x7f\x19" "#\xfa\x8e\xa3\x42\xe7\xbe\x87\xec\x83\x1c\xef$\x6wW\x1c\x65\xc5\x36\x89\x61['\xef" "\x85\x61\xde^e\x95n\x5\x8\x14o\n\xe6.\x14\x9d\x65Zr\x9e'J\x87\x19\xca\xbc\x1a\xef" "T\x9e\xb6\x80\x8d\x35\xedw\xc4\xc6>cb\xa8\xd8\xaf,\x8c\xd5'*\xe\xc6\x36\xf\xf<1H" "\x86;4\xbd\xc1\x31v,\x9e\x9f\xce\x81\x96\x14\xabJ\xec\xd0\xec\x14\x8c\x81\xca\xbb" "h\xf6-#\\\xf6\xb\n\xdd\x1c\xcd\xfaJFB_c\xa7\x63\x3\x39)\xa8\xf3\x62xW\xf6\xe0\xa6" "6\xbe\xb6\xf9\xc7\xb8\xc6\x8a\xbex\x9d\xe6\x0\xe2k=\xbdm\xba\"\x95U\xbe\xbb\x15&" "\xa5\x45\x64\xfa\xf4\x85\x12\x63\x7\xb2\xf3J&\x99-\x8a\x9e\xb7\xehS\xf\x1d\xdf\x39" "\xeb\x30'[t0s{ \xe7\xa3\xf6\xbb\xd9Xb\xf2\x88O\xff\xa1\xddR\x8a\x0\x1a\x63\xcfJ\xad" "\x88\xf\x89p\x92\x8s\xac\x8e\xf2\xf3\xe8i\xa2\x8d\xbd\xaa\xb4\xc4\r\x88\xbc\x43(" "=\x89\xd9\xdf\x44\x4\x9\xf9\xcb\x96o}\xba\x90\xb7\x8d=\xae\x89\x13\xb1Mm\xde\x8a" ")\xf4\x5*\xbd\x32G?Sv\xec\x13\xd4\x82L:/\xd0\xf8\x1_\xc9\x66\x15\x39\xfdU\xb2Lm:" "\xec\x1f\xc7\x9b\xd8\x42\xbbm\x1e'RH\x86\xef\x91\xc3h\xf9l\xb0\xbese\x8\x1b\x62\xff" "\x8\x8a\x38\x16.\xa0\xfa\x95\x5\xd9\xa0\x9c\x8f\x44X4\xa1\xde\x18]\xe7R\"\x8e\x3" "\x8d\xcf\x32!a+\xd1\x85\xc3~\xd3\x19\\.E\xb4Y\x8\xb0\xbb\xbb\xb3\xee\xa0I\xdb\xd3" ";\x1b\xa8\x9cm\x3\xe0\xd0\x65]\x8c\xe9\xf8M^\xa5.!;H\xd4*\xf5\xf4:\xc8\x81\xaf-\xcf" "\x0\r\xa3:k\xf6\x18 \x97w\xd6\xaa\x8b\xe5\xf2S\x1f\xb2\xff\x9c\xb4\x18;\x4\x6\x41" "\xa9\x9e^\x9\x8z\x89r\x94\xc6\xccpD\xb4\x2\xf5\xb5\xaa\xb3\xad\x43\xc7V\xe<\x8b\xcb" "G\x85\xb1*\x8e[\x15\x96k\x9cv\"\x86'>\x2M3\x83\xc6\xbe\xd4\x0\x8c\xed\xad'\x9[0R" "9\xfb{x8cv\xe2m\x98\x85\xf3t9\xee\xa4#Y\xe5\xc8\xf6q\xe2`*\x86\xa0\x97\x9e\xe2\xb4" "\xf2/\x1f\x8\xb5\x31\xcd\xb8\x10\x9e\xe3\x96\x45\xdf\xcS\x96\x84\xc0\xeb\x15Rh\x95" "h`'\xd9\xcc\r\xc\xa7\xddl\x84\xa9\x2\x95\x15I\xfd\x10H\xc2\x17}o\xf5\xf1}(c\x87y" "u\xc7jIa%\xcb<\x5Y\xd3\x17\xc9\x38\xca\x34\xe1\xf1r\x14\x1aQR\x99\x4\xb6ZM<;\x1f" "\x13\xc4\xe7G3\xae\xf8T,\x98\xdbi\x1f\xb1\xbb\x98\xb1\xabU;\xc5\xe0\xba\xaf\xbah" "\xb4\x0\x14\xf7G\x86\xcz\xd2\x16Q\xef\x12\xa2\xd2\x34\xc4\xeb\xce\xcbL{h\xc7\xc8" "\x1c\xe3\x8a\x4\xa5\x8d\xb4}7Z\x13\xe5\x15\xeb\x91\xc7\xff\x33\x17\xf4\xa4\xb3\xa1" "\xe5\xbd\x7\xba \xe\xfeuyA" "f\xa4\xb0\x93\x19\x8|\xaa;\xfe\xe5\x65k\xa0x\xf\xc3\xee\xde\xf5\xf5\xf6\x8a\xb2\xee" ">s\xf6\xf4V\xb0\x8c\x6\xfe\x61\x32\xa7\xe7\xcf\x37z\x2\x65\x44\x12\xe6\xd4i\xb1\x81" "\x1d\xda\xe2\x8f^\xed\x46\x8a\xca;\x8e\xa9\x93|6f\x85<\xd0\xdf\x8c~\x9c\x98\xd5\xdf" "5\x16\xbf\xbbO\x0\x13\x93>\x8\x65\xec\x98\x8cR\xde\x63\xa0k\x1bv\xd5Oks6\xd6\xcc" "]Wz]@\xaa\x98\x1f\x13\xce\x82|\xd2\xd3\xbd\x9f)U\xdb\xd4QR\x16\xf4\xb6]\x8\x42\x18" "\x9d\xc2\x2\xa2Q2\x8a\xbd\xeb\x92\xa1n\xb6]R_\xb9~\xb0\xf3\x10\xce\xab.\xcd\xd6N" "\xb4\\\xf9\x83M\x95\x84\xe2z\xee\xa5?\xd8>\"f\x1a|\x4\x43\x1d\x14\x11-\xc9\xca^\xe6" ":s\n\xbe\xc9$m\xdeU\xdc\x9kTu@&O\x9c\xd0\xed\x84\xd4 `V\xf3\x17\xfb\x31J\x92-)*\xe4" "T\xd9\xc6]G\x99\xdb\x19\xeeql\x9dW6j~\x8f\xc2Vui\xac\x92\xd1\x1dR\x99&@\x1av\x4\xb2" "B}\xb9M!I\xad\x18\x1e\x91\x6\xb4\xcf\x83\x38\x1d\xa0\x63\x87\x90<\x8f\xdc\x17\xff" "a\xf7\x18$\xf5\x13\xa1\xa3\x18N\x81\x8#\xef\xbd\xe3@_\xb6h\xbe\x9\xb0\xb3\xb8\x0" "Wv\xe3\xa0\xa0\x8c\n\xae\xa4\x64ROzy\x8f\x1b\x82\x94\xbf\x9f\x3v\x84\xd2\xd8\x83" "\x1u\xdc\xaa\xbf=L\x1d\x8cW\xc2\x9a-\xc5r\xdb\x8c\x61\xdd\x33\x33\xe0\xbb`kAV\xc" "\xba>\xd7\xf6\x41O\xbe\x43\x83\x37\x93\xa6\x46&\x1b\x86\xdb\xfd\xa2)\xa9\x84\x61" "\xfb\xfd\x95\x35\x1aQ\xb6\x81\xccQz\x83\xb'\xb6\xd8\xd1^\xbf\xfcVs\x7\x87=\nB\xc2" ",yOc \x0)y\x15\x17w\xa4\x9d\x13z\x96XN\xe8\x97\x62\xf7\xce\xfd\xe6\x8Z?\xf1\x61^" " \xc5\xd0z\xea\xc4\x13\xff!\x1d&\xe3\x8b:{\xec\x8c\x18\xcaUC\xdf\xfd\xa4\x85>H\xf" "\x9b\x8\x7f\xb7\x64\x39\xbc\xb3\x86\x43\xf3v\x96jD\x19v\x6l:\xb8\xaf\x87\xed\xbc" "f9Yw\xf7$\xd5`\xb\xb5\xe4\x89\xb1\xd3\x9e\x9d\x17V\x80\x1\x14\x2\x0\x0\x30\x30\x30" "0000000000000000000000000000000000000000000000000000000000000\r00000000000000000" "00000000000000000000000000000000000000000000000\r0000000000000000000000000000000" "000000000000000000000000000000000\r000000000000000000000000000000000000000000000" "0000000000000000000\r00000000000000000000000000000000000000000000000000000000000" "00000\r0000000000000000000000000000000000000000000000000000000000000000\r0000000" "000000000000000000000000000000000000000000000000000000000\r000000000000000000000" "0000000000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n022003l_afm_len = 31926; char* n022003l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusMonL-Regu\n" "FullName Nimbus Mono L Regular\nFamilyName Nimbus Mono L\nWeight Regular\nItalic" "Angle 0.0\nIsFixedPitch false\nUnderlinePosition -100\nUnderlineThickness 50\nVe" "rsion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Development\nEncod" "ingScheme AdobeStandardEncoding\nFontBBox -12 -237 650 811\nCapHeight 563\nXHeig" "ht 417\nDescender -186\nAscender 604\nStartCharMetrics 316\nC 32 ; WX 600 ; N sp" "ace ; B 295 0 295 0 ;\nC 33 ; WX 600 ; N exclam ; B 240 -15 360 618 ;\nC 34 ; WX" " 600 ; N quotedbl ; B 146 315 454 604 ;\nC 35 ; WX 600 ; N numbersign ; B 92 -62" " 508 647 ;\nC 36 ; WX 600 ; N dollar ; B 113 -92 487 655 ;\nC 37 ; WX 600 ; N pe" "rcent ; B 87 -12 513 611 ;\nC 38 ; WX 600 ; N ampersand ; B 105 -16 478 519 ;\nC" " 39 ; WX 600 ; N quoteright ; B 135 314 340 604 ;\nC 40 ; WX 600 ; N parenleft ;" " B 294 -124 458 604 ;\nC 41 ; WX 600 ; N parenright ; B 147 -124 311 604 ;\nC 42" " ; WX 600 ; N asterisk ; B 113 250 487 604 ;\nC 43 ; WX 600 ; N plus ; B 72 32 5" "28 530 ;\nC 44 ; WX 600 ; N comma ; B 135 -145 340 145 ;\nC 45 ; WX 600 ; N hyph" "en ; B 72 258 528 299 ;\nC 46 ; WX 600 ; N period ; B 226 -15 374 116 ;\nC 47 ; " "WX 600 ; N slash ; B 113 -81 487 668 ;\nC 48 ; WX 600 ; N zero ; B 113 -15 487 6" "18 ;\nC 49 ; WX 600 ; N one ; B 113 0 487 612 ;\nC 50 ; WX 600 ; N two ; B 84 0 " "478 618 ;\nC 51 ; WX 600 ; N three ; B 96 -15 499 618 ;\nC 52 ; WX 600 ; N four " "; B 105 0 478 604 ;\nC 53 ; WX 600 ; N five ; B 96 -15 499 604 ;\nC 54 ; WX 600 " "; N six ; B 136 -15 510 618 ;\nC 55 ; WX 600 ; N seven ; B 105 -1 478 604 ;\nC 5" "6 ; WX 600 ; N eight ; B 113 -15 487 618 ;\nC 57 ; WX 600 ; N nine ; B 136 -15 5" "10 618 ;\nC 58 ; WX 600 ; N colon ; B 226 -15 374 417 ;\nC 59 ; WX 600 ; N semic" "olon ; B 139 -145 350 417 ;\nC 60 ; WX 600 ; N less ; B 72 44 522 518 ;\nC 61 ; " "WX 600 ; N equal ; B 51 190 549 375 ;\nC 62 ; WX 600 ; N greater ; B 78 44 528 5" "18 ;\nC 63 ; WX 600 ; N question ; B 134 -15 487 577 ;\nC 64 ; WX 600 ; N at ; B" " 105 -62 478 624 ;\nC 65 ; WX 600 ; N A ; B 9 0 591 563 ;\nC 66 ; WX 600 ; N B ;" " B 43 0 541 563 ;\nC 67 ; WX 600 ; N C ; B 63 -16 534 576 ;\nC 68 ; WX 600 ; N D" " ; B 43 0 520 563 ;\nC 69 ; WX 600 ; N E ; B 43 0 520 563 ;\nC 70 ; WX 600 ; N F" " ; B 43 0 520 563 ;\nC 71 ; WX 600 ; N G ; B 63 -16 562 576 ;\nC 72 ; WX 600 ; N" " H ; B 53 0 551 563 ;\nC 73 ; WX 600 ; N I ; B 113 0 487 563 ;\nC 74 ; WX 600 ; " "N J ; B 84 -16 583 563 ;\nC 75 ; WX 600 ; N K ; B 43 0 572 563 ;\nC 76 ; WX 600 " "; N L ; B 63 0 541 563 ;\nC 77 ; WX 600 ; N M ; B 11 0 593 563 ;\nC 78 ; WX 600 " "; N N ; B 22 0 562 563 ;\nC 79 ; WX 600 ; N O ; B 51 -16 549 576 ;\nC 80 ; WX 60" "0 ; N P ; B 43 0 499 563 ;\nC 81 ; WX 600 ; N Q ; B 51 -115 549 576 ;\nC 82 ; WX" " 600 ; N R ; B 43 0 589 563 ;\nC 83 ; WX 600 ; N S ; B 92 -16 508 576 ;\nC 84 ; " "WX 600 ; N T ; B 72 0 528 563 ;\nC 85 ; WX 600 ; N U ; B 40 -16 560 563 ;\nC 86 " "; WX 600 ; N V ; B 9 0 591 563 ;\nC 87 ; WX 600 ; N W ; B 20 0 580 563 ;\nC 88 ;" " WX 600 ; N X ; B 40 0 560 563 ;\nC 89 ; WX 600 ; N Y ; B 51 0 549 563 ;\nC 90 ;" " WX 600 ; N Z ; B 103 0 497 563 ;\nC 91 ; WX 600 ; N bracketleft ; B 280 -124 44" "5 604 ;\nC 92 ; WX 600 ; N backslash ; B 113 -81 487 668 ;\nC 93 ; WX 600 ; N br" "acketright ; B 155 -124 320 604 ;\nC 94 ; WX 600 ; N asciicircum ; B 113 354 487" " 615 ;\nC 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ;\nC 96 ; WX 600 ; N q" "uoteleft ; B 260 343 465 604 ;\nC 97 ; WX 600 ; N a ; B 72 -16 541 431 ;\nC 98 ;" " WX 600 ; N b ; B 22 -16 541 604 ;\nC 99 ; WX 600 ; N c ; B 84 -16 535 431 ;\nC " "100 ; WX 600 ; N d ; B 63 -16 583 604 ;\nC 101 ; WX 600 ; N e ; B 63 -16 520 431" " ;\nC 102 ; WX 600 ; N f ; B 105 0 541 604 ;\nC 103 ; WX 600 ; N g ; B 63 -186 5" "62 431 ;\nC 104 ; WX 600 ; N h ; B 43 0 551 604 ;\nC 105 ; WX 600 ; N i ; B 92 0" " 508 624 ;\nC 106 ; WX 600 ; N j ; B 147 -186 458 624 ;\nC 107 ; WX 600 ; N k ; " "B 63 0 541 604 ;\nC 108 ; WX 600 ; N l ; B 92 0 508 604 ;\nC 109 ; WX 600 ; N m " "; B 11 0 593 431 ;\nC 110 ; WX 600 ; N n ; B 53 0 541 431 ;\nC 111 ; WX 600 ; N " "o ; B 72 -16 528 431 ;\nC 112 ; WX 600 ; N p ; B 22 -186 541 431 ;\nC 113 ; WX 6" "00 ; N q ; B 63 -186 583 431 ;\nC 114 ; WX 600 ; N r ; B 84 0 541 427 ;\nC 115 ;" " WX 600 ; N s ; B 103 -16 497 431 ;\nC 116 ; WX 600 ; N t ; B 43 -16 499 563 ;\n" "C 117 ; WX 600 ; N u ; B 43 -16 541 417 ;\nC 118 ; WX 600 ; N v ; B 30 0 570 417" " ;\nC 119 ; WX 600 ; N w ; B 30 0 570 417 ;\nC 120 ; WX 600 ; N x ; B 51 0 549 4" "17 ;\nC 121 ; WX 600 ; N y ; B 51 -186 549 417 ;\nC 122 ; WX 600 ; N z ; B 115 0" " 489 417 ;\nC 123 ; WX 600 ; N braceleft ; B 197 -124 403 604 ;\nC 124 ; WX 600 " "; N bar ; B 280 -124 320 604 ;\nC 125 ; WX 600 ; N braceright ; B 197 -124 403 6" "04 ;\nC 126 ; WX 600 ; N asciitilde ; B 92 212 508 348 ;\nC 161 ; WX 600 ; N exc" "lamdown ; B 240 -216 360 417 ;\nC 162 ; WX 600 ; N cent ; B 113 -13 469 630 ;\nC" " 163 ; WX 600 ; N sterling ; B 63 0 520 578 ;\nC 164 ; WX 600 ; N fraction ; B 5" "0 138 549 470 ;\nC 165 ; WX 600 ; N yen ; B 51 0 549 563 ;\nC 166 ; WX 600 ; N f" "lorin ; B 87 -93 518 618 ;\nC 167 ; WX 600 ; N section ; B 66 -62 534 603 ;\nC 1" "68 ; WX 600 ; N currency ; B 103 95 497 489 ;\nC 169 ; WX 600 ; N quotesingle ; " "B 236 315 364 604 ;\nC 170 ; WX 600 ; N quotedblleft ; B 93 343 507 604 ;\nC 171" " ; WX 600 ; N guillemotleft ; B 63 0 541 417 ;\nC 172 ; WX 600 ; N guilsinglleft" " ; B 63 0 312 417 ;\nC 173 ; WX 600 ; N guilsinglright ; B 293 0 541 417 ;\nC 17" "4 ; WX 600 ; N fi ; B 10 0 585 624 ;\nC 175 ; WX 600 ; N fl ; B 10 0 587 604 ;\n" "C 177 ; WX 600 ; N endash ; B 72 261 528 302 ;\nC 178 ; WX 600 ; N dagger ; B 12" "4 -63 476 604 ;\nC 179 ; WX 600 ; N daggerdbl ; B 124 -62 476 604 ;\nC 180 ; WX " "600 ; N periodcentered ; B 226 217 374 348 ;\nC 182 ; WX 600 ; N paragraph ; B 7" "9 -62 525 604 ;\nC 183 ; WX 600 ; N bullet ; B 202 141 398 337 ;\nC 184 ; WX 600" " ; N quotesinglbase ; B 135 -145 340 145 ;\nC 185 ; WX 600 ; N quotedblbase ; B " "93 -116 507 145 ;\nC 186 ; WX 600 ; N quotedblright ; B 93 343 507 604 ;\nC 187 " "; WX 600 ; N guillemotright ; B 63 0 541 417 ;\nC 188 ; WX 600 ; N ellipsis ; B " "51 -15 549 84 ;\nC 189 ; WX 600 ; N perthousand ; B 34 -9 564 614 ;\nC 191 ; WX " "600 ; N questiondown ; B 113 -175 466 417 ;\nC 193 ; WX 600 ; N grave ; B 155 49" "0 320 639 ;\nC 194 ; WX 600 ; N acute ; B 280 490 445 639 ;\nC 195 ; WX 600 ; N " "circumflex ; B 155 490 445 639 ;\nC 196 ; WX 600 ; N tilde ; B 145 516 455 605 ;" "\nC 197 ; WX 600 ; N macron ; B 155 536 445 576 ;\nC 198 ; WX 600 ; N breve ; B " "155 490 445 620 ;\nC 199 ; WX 600 ; N dotaccent ; B 250 511 350 611 ;\nC 200 ; W" "X 600 ; N dieresis ; B 140 511 461 611 ;\nC 202 ; WX 600 ; N ring ; B 207 480 39" "3 661 ;\nC 203 ; WX 600 ; N cedilla ; B 210 -173 377 0 ;\nC 205 ; WX 600 ; N hun" "garumlaut ; B 155 490 445 633 ;\nC 206 ; WX 600 ; N ogonek ; B 280 -155 433 0 ;\n" "C 207 ; WX 600 ; N caron ; B 155 490 445 639 ;\nC 208 ; WX 600 ; N emdash ; B 1 " "261 599 302 ;\nC 225 ; WX 600 ; N AE ; B 10 0 590 563 ;\nC 227 ; WX 600 ; N ordf" "eminine ; B 155 279 447 574 ;\nC 232 ; WX 600 ; N Lslash ; B 43 0 541 563 ;\nC 2" "33 ; WX 600 ; N Oslash ; B 40 -43 560 605 ;\nC 234 ; WX 600 ; N OE ; B 10 0 590 " "563 ;\nC 235 ; WX 600 ; N ordmasculine ; B 154 284 448 577 ;\nC 241 ; WX 600 ; N" " ae ; B 12 -16 578 431 ;\nC 245 ; WX 600 ; N dotlessi ; B 92 0 508 417 ;\nC 248 " "; WX 600 ; N lslash ; B 92 0 508 604 ;\nC 249 ; WX 600 ; N oslash ; B 53 -43 543" " 458 ;\nC 250 ; WX 600 ; N oe ; B 12 -16 578 431 ;\nC 251 ; WX 600 ; N germandbl" "s ; B 43 -16 499 604 ;\nC -1 ; WX 600 ; N Udieresis ; B 40 -16 560 761 ;\nC -1 ;" " WX 600 ; N Uacute ; B 40 -16 560 789 ;\nC -1 ; WX 600 ; N Scedilla ; B 92 -173 " "508 576 ;\nC -1 ; WX 600 ; N Tcaron ; B 72 0 528 789 ;\nC -1 ; WX 600 ; N Scaron" " ; B 92 -16 508 789 ;\nC -1 ; WX 600 ; N Rcaron ; B 43 0 589 789 ;\nC -1 ; WX 60" "0 ; N Racute ; B 43 0 589 789 ;\nC -1 ; WX 600 ; N Sacute ; B 92 -16 508 789 ;\n" "C -1 ; WX 600 ; N Otilde ; B 51 -16 549 755 ;\nC -1 ; WX 600 ; N ucircumflex ; B" " 43 -16 541 639 ;\nC -1 ; WX 600 ; N Ohungarumlaut ; B 51 -16 549 783 ;\nC -1 ; " "WX 600 ; N Uhungarumlaut ; B 40 -16 560 783 ;\nC -1 ; WX 600 ; N Yacute ; B 51 0" " 549 789 ;\nC -1 ; WX 600 ; N Eth ; B 0 0 520 563 ;\nC -1 ; WX 600 ; N Dcroat ; " "B 0 0 520 563 ;\nC -1 ; WX 600 ; N Zacute ; B 103 0 497 789 ;\nC -1 ; WX 600 ; N" " Uring ; B 40 -16 560 811 ;\nC -1 ; WX 600 ; N gbreve ; B 63 -186 562 620 ;\nC -" "1 ; WX 600 ; N eogonek ; B 63 -155 520 431 ;\nC -1 ; WX 600 ; N edotaccent ; B 6" "3 -16 520 611 ;\nC -1 ; WX 600 ; N ecaron ; B 63 -16 520 639 ;\nC -1 ; WX 600 ; " "N Ugrave ; B 40 -16 560 789 ;\nC -1 ; WX 600 ; N Thorn ; B 43 0 499 563 ;\nC -1 " "; WX 600 ; N eacute ; B 63 -16 520 639 ;\nC -1 ; WX 600 ; N edieresis ; B 63 -16" " 520 611 ;\nC -1 ; WX 600 ; N dcaron ; B 63 -16 650 616 ;\nC -1 ; WX 600 ; N cce" "dilla ; B 84 -173 535 431 ;\nC -1 ; WX 600 ; N ccaron ; B 84 -16 535 639 ;\nC -1" " ; WX 600 ; N cacute ; B 84 -16 535 639 ;\nC -1 ; WX 600 ; N aogonek ; B 72 -155" " 556 431 ;\nC -1 ; WX 600 ; N aring ; B 72 -16 541 661 ;\nC -1 ; WX 600 ; N atil" "de ; B 72 -16 541 605 ;\nC -1 ; WX 600 ; N abreve ; B 72 -16 541 620 ;\nC -1 ; W" "X 600 ; N egrave ; B 63 -16 520 639 ;\nC -1 ; WX 600 ; N agrave ; B 72 -16 541 6" "39 ;\nC -1 ; WX 600 ; N aacute ; B 72 -16 541 639 ;\nC -1 ; WX 600 ; N adieresis" " ; B 72 -16 541 611 ;\nC -1 ; WX 600 ; N Uogonek ; B 40 -155 560 563 ;\nC -1 ; W" "X 600 ; N ugrave ; B 43 -16 541 639 ;\nC -1 ; WX 600 ; N uacute ; B 43 -16 541 6" "39 ;\nC -1 ; WX 600 ; N udieresis ; B 43 -16 541 611 ;\nC -1 ; WX 600 ; N tcaron" " ; B 43 -16 508 616 ;\nC -1 ; WX 600 ; N scommaaccent ; B 103 -237 497 431 ;\nC " "-1 ; WX 600 ; N Zcaron ; B 103 0 497 789 ;\nC -1 ; WX 600 ; N ecircumflex ; B 63" " -16 520 639 ;\nC -1 ; WX 600 ; N Ucircumflex ; B 40 -16 560 789 ;\nC -1 ; WX 60" "0 ; N acircumflex ; B 72 -16 541 639 ;\nC -1 ; WX 600 ; N Zdotaccent ; B 103 0 4" "97 761 ;\nC -1 ; WX 600 ; N scaron ; B 103 -16 497 639 ;\nC -1 ; WX 600 ; N Amac" "ron ; B 9 0 591 726 ;\nC -1 ; WX 600 ; N sacute ; B 103 -16 497 639 ;\nC -1 ; WX" " 600 ; N Tcommaaccent ; B 72 -237 528 563 ;\nC -1 ; WX 600 ; N Ydieresis ; B 51 " "0 549 761 ;\nC -1 ; WX 600 ; N thorn ; B 22 -186 541 590 ;\nC -1 ; WX 600 ; N Em" "acron ; B 43 0 520 726 ;\nC -1 ; WX 600 ; N Ograve ; B 51 -16 549 789 ;\nC -1 ; " "WX 600 ; N Oacute ; B 51 -16 549 789 ;\nC -1 ; WX 600 ; N Odieresis ; B 51 -16 5" "49 761 ;\nC -1 ; WX 600 ; N Ntilde ; B 22 0 562 755 ;\nC -1 ; WX 600 ; N Ncaron " "; B 22 0 562 789 ;\nC -1 ; WX 600 ; N Nacute ; B 22 0 562 789 ;\nC -1 ; WX 600 ;" " N Lcaron ; B 63 0 541 566 ;\nC -1 ; WX 600 ; N Lacute ; B 63 0 541 789 ;\nC -1 " "; WX 600 ; N Idotaccent ; B 113 0 487 761 ;\nC -1 ; WX 600 ; N racute ; B 84 0 5" "41 639 ;\nC -1 ; WX 600 ; N Icircumflex ; B 113 0 487 789 ;\nC -1 ; WX 600 ; N o" "hungarumlaut ; B 72 -16 528 633 ;\nC -1 ; WX 600 ; N otilde ; B 72 -16 528 605 ;" "\nC -1 ; WX 600 ; N Euro ; B 11 -16 534 576 ;\nC -1 ; WX 600 ; N ocircumflex ; B" " 72 -16 528 639 ;\nC -1 ; WX 600 ; N onesuperior ; B 191 259 410 612 ;\nC -1 ; W" "X 600 ; N twosuperior ; B 175 259 405 612 ;\nC -1 ; WX 600 ; N threesuperior ; B" " 181 251 416 612 ;\nC -1 ; WX 600 ; N Igrave ; B 113 0 487 789 ;\nC -1 ; WX 600 " "; N Iacute ; B 113 0 487 789 ;\nC -1 ; WX 600 ; N Imacron ; B 113 0 487 726 ;\nC" " -1 ; WX 600 ; N Iogonek ; B 113 -155 500 563 ;\nC -1 ; WX 600 ; N Idieresis ; B" " 113 0 487 761 ;\nC -1 ; WX 600 ; N Gbreve ; B 63 -16 562 770 ;\nC -1 ; WX 600 ;" " N Umacron ; B 40 -16 560 726 ;\nC -1 ; WX 600 ; N Kcommaaccent ; B 43 -237 572 " "563 ;\nC -1 ; WX 600 ; N ograve ; B 72 -16 528 639 ;\nC -1 ; WX 600 ; N Scommaac" "cent ; B 92 -237 508 576 ;\nC -1 ; WX 600 ; N Eogonek ; B 43 -155 549 563 ;\nC -" "1 ; WX 600 ; N oacute ; B 72 -16 528 639 ;\nC -1 ; WX 600 ; N Edotaccent ; B 43 " "0 520 761 ;\nC -1 ; WX 600 ; N iogonek ; B 92 -155 520 624 ;\nC -1 ; WX 600 ; N " "gcommaaccent ; B 63 -186 562 666 ;\nC -1 ; WX 600 ; N odieresis ; B 72 -16 528 6" "11 ;\nC -1 ; WX 600 ; N ntilde ; B 53 0 541 605 ;\nC -1 ; WX 600 ; N ncaron ; B " "53 0 541 639 ;\nC -1 ; WX 600 ; N Ecaron ; B 43 0 520 789 ;\nC -1 ; WX 600 ; N E" "circumflex ; B 43 0 520 789 ;\nC -1 ; WX 600 ; N scedilla ; B 103 -173 497 431 ;" "\nC -1 ; WX 600 ; N rcaron ; B 84 0 541 639 ;\nC -1 ; WX 600 ; N Egrave ; B 43 0" " 520 789 ;\nC -1 ; WX 600 ; N Eacute ; B 43 0 520 789 ;\nC -1 ; WX 600 ; N Gcomm" "aaccent ; B 63 -237 562 576 ;\nC -1 ; WX 600 ; N Rcommaaccent ; B 43 -237 589 56" "3 ;\nC -1 ; WX 600 ; N Edieresis ; B 43 0 520 761 ;\nC -1 ; WX 600 ; N nacute ; " "B 53 0 541 639 ;\nC -1 ; WX 600 ; N uogonek ; B 43 -155 556 417 ;\nC -1 ; WX 600" " ; N umacron ; B 43 -16 541 576 ;\nC -1 ; WX 600 ; N Dcaron ; B 43 0 520 789 ;\n" "C -1 ; WX 600 ; N lcaron ; B 92 0 508 616 ;\nC -1 ; WX 600 ; N Ccaron ; B 63 -16" " 534 789 ;\nC -1 ; WX 600 ; N Cacute ; B 63 -16 534 789 ;\nC -1 ; WX 600 ; N Cce" "dilla ; B 63 -173 534 576 ;\nC -1 ; WX 600 ; N degree ; B 155 346 445 636 ;\nC -" "1 ; WX 600 ; N Aogonek ; B 9 -155 600 563 ;\nC -1 ; WX 600 ; N minus ; B 72 261 " "528 302 ;\nC -1 ; WX 600 ; N multiply ; B 118 100 482 464 ;\nC -1 ; WX 600 ; N d" "ivide ; B 72 25 528 540 ;\nC -1 ; WX 600 ; N Aring ; B 9 0 591 811 ;\nC -1 ; WX " "600 ; N trademark ; B 4 243 598 563 ;\nC -1 ; WX 600 ; N rcommaaccent ; B 84 -23" "7 541 427 ;\nC -1 ; WX 600 ; N lacute ; B 92 0 508 789 ;\nC -1 ; WX 600 ; N omac" "ron ; B 72 -16 528 576 ;\nC -1 ; WX 600 ; N Atilde ; B 9 0 591 755 ;\nC -1 ; WX " "600 ; N icircumflex ; B 92 0 508 639 ;\nC -1 ; WX 600 ; N igrave ; B 92 0 508 63" "9 ;\nC -1 ; WX 600 ; N ncommaaccent ; B 53 -237 541 431 ;\nC -1 ; WX 600 ; N lco" "mmaaccent ; B 92 -237 508 604 ;\nC -1 ; WX 600 ; N plusminus ; B 72 0 528 529 ;\n" "C -1 ; WX 600 ; N onehalf ; B 23 0 573 612 ;\nC -1 ; WX 600 ; N onequarter ; B 1" "6 0 580 612 ;\nC -1 ; WX 600 ; N threequarters ; B 6 0 580 612 ;\nC -1 ; WX 600 " "; N iacute ; B 92 0 508 639 ;\nC -1 ; WX 600 ; N Abreve ; B 9 0 591 770 ;\nC -1 " "; WX 600 ; N kcommaaccent ; B 63 -237 541 604 ;\nC -1 ; WX 600 ; N Omacron ; B 5" "1 -16 549 726 ;\nC -1 ; WX 600 ; N imacron ; B 92 0 508 576 ;\nC -1 ; WX 600 ; N" " emacron ; B 63 -16 520 576 ;\nC -1 ; WX 600 ; N amacron ; B 72 -16 541 576 ;\nC" " -1 ; WX 600 ; N tcommaaccent ; B 43 -237 499 563 ;\nC -1 ; WX 600 ; N ydieresis" " ; B 51 -186 549 611 ;\nC -1 ; WX 600 ; N zdotaccent ; B 115 0 489 611 ;\nC -1 ;" " WX 600 ; N zcaron ; B 115 0 489 639 ;\nC -1 ; WX 600 ; N zacute ; B 115 0 489 6" "39 ;\nC -1 ; WX 600 ; N yacute ; B 51 -186 549 639 ;\nC -1 ; WX 600 ; N uhungaru" "mlaut ; B 43 -16 541 633 ;\nC -1 ; WX 600 ; N eth ; B 72 -17 528 620 ;\nC -1 ; W" "X 600 ; N uring ; B 43 -16 541 661 ;\nC -1 ; WX 600 ; N Ocircumflex ; B 51 -16 5" "49 789 ;\nC -1 ; WX 600 ; N commaaccent ; B 234 -237 367 -60 ;\nC -1 ; WX 600 ; " "N copyright ; B 3 -15 596 578 ;\nC -1 ; WX 600 ; N registered ; B 3 -15 596 578 " ";\nC -1 ; WX 600 ; N Acircumflex ; B 9 0 591 789 ;\nC -1 ; WX 600 ; N idieresis " "; B 92 0 508 611 ;\nC -1 ; WX 600 ; N lozenge ; B 89 -11 511 575 ;\nC -1 ; WX 60" "0 ; N Delta ; B 43 0 557 563 ;\nC -1 ; WX 600 ; N notequal ; B 51 94 549 464 ;\n" "C -1 ; WX 600 ; N radical ; B 27 0 628 699 ;\nC -1 ; WX 600 ; N Agrave ; B 9 0 5" "91 789 ;\nC -1 ; WX 600 ; N Aacute ; B 9 0 591 789 ;\nC -1 ; WX 600 ; N lessequa" "l ; B 53 0 525 535 ;\nC -1 ; WX 600 ; N greaterequal ; B 59 0 531 535 ;\nC -1 ; " "WX 600 ; N logicalnot ; B 72 168 528 438 ;\nC -1 ; WX 600 ; N summation ; B 113 " "-127 507 563 ;\nC -1 ; WX 600 ; N partialdiff ; B 71 -17 529 582 ;\nC -1 ; WX 60" "0 ; N Ncommaaccent ; B 22 -237 562 563 ;\nC -1 ; WX 600 ; N dcroat ; B 63 -16 58" "3 604 ;\nC -1 ; WX 600 ; N brokenbar ; B 280 -124 320 604 ;\nC -1 ; WX 600 ; N L" "commaaccent ; B 63 -237 541 563 ;\nC -1 ; WX 600 ; N Adieresis ; B 9 0 591 761 ;" "\nC -1 ; WX 600 ; N mu ; B 43 -200 541 417 ;\nC -1 ; WX 600 ; N .notdef ; B 295 " "0 295 0 ;\nEndCharMetrics\nStartKernData\nStartKernPairs 998\nKPX A C -33\nKPX A" " Ccedilla -30\nKPX A G -27\nKPX A O -27\nKPX A Odieresis -27\nKPX A Q -28\nKPX A" " T -27\nKPX A U -32\nKPX A Uacute -32\nKPX A Ucircumflex -32\nKPX A Udieresis -3" "2\nKPX A Ugrave -32\nKPX A V -74\nKPX A W -12\nKPX A Y -28\nKPX A a 8\nKPX A b 4" "6\nKPX A c -19\nKPX A ccedilla -15\nKPX A comma -39\nKPX A d -10\nKPX A e -14\nK" "PX A g -23\nKPX A guillemotleft -49\nKPX A guilsinglleft -49\nKPX A hyphen -30\n" "KPX A o -16\nKPX A period -67\nKPX A q -24\nKPX A quotedblright -78\nKPX A quote" "right -98\nKPX A t -26\nKPX A u -15\nKPX A v -55\nKPX A w -19\nKPX A y -60\nKPX " "Aacute C -33\nKPX Aacute G -27\nKPX Aacute O -27\nKPX Aacute Q -28\nKPX Aacute T" " -27\nKPX Aacute U -32\nKPX Aacute V -74\nKPX Aacute W -12\nKPX Aacute Y -28\nKP" "X Aacute a 8\nKPX Aacute b 46\nKPX Aacute c -19\nKPX Aacute comma -39\nKPX Aacut" "e d -10\nKPX Aacute e -14\nKPX Aacute g -23\nKPX Aacute guillemotleft -49\nKPX A" "acute guilsinglleft -49\nKPX Aacute hyphen -30\nKPX Aacute o -16\nKPX Aacute per" "iod -67\nKPX Aacute q -24\nKPX Aacute quoteright -98\nKPX Aacute t -26\nKPX Aacu" "te u -15\nKPX Aacute v -55\nKPX Aacute w -19\nKPX Aacute y -60\nKPX Acircumflex " "C -33\nKPX Acircumflex G -27\nKPX Acircumflex O -27\nKPX Acircumflex Q -28\nKPX " "Acircumflex T -27\nKPX Acircumflex U -32\nKPX Acircumflex V -74\nKPX Acircumflex" " W -12\nKPX Acircumflex Y -28\nKPX Acircumflex comma -39\nKPX Acircumflex period" " -67\nKPX Adieresis C -33\nKPX Adieresis G -27\nKPX Adieresis O -27\nKPX Adieres" "is Q -28\nKPX Adieresis T -27\nKPX Adieresis U -32\nKPX Adieresis V -74\nKPX Adi" "eresis W -12\nKPX Adieresis Y -28\nKPX Adieresis a 8\nKPX Adieresis b 46\nKPX Ad" "ieresis c -19\nKPX Adieresis comma -39\nKPX Adieresis d -10\nKPX Adieresis g -23" "\nKPX Adieresis guillemotleft -49\nKPX Adieresis guilsinglleft -49\nKPX Adieresi" "s hyphen -30\nKPX Adieresis o -16\nKPX Adieresis period -67\nKPX Adieresis q -24" "\nKPX Adieresis quotedblright -78\nKPX Adieresis quoteright -98\nKPX Adieresis t" " -26\nKPX Adieresis u -15\nKPX Adieresis v -55\nKPX Adieresis w -19\nKPX Adieres" "is y -60\nKPX Agrave C -33\nKPX Agrave G -27\nKPX Agrave O -27\nKPX Agrave Q -28" "\nKPX Agrave T -27\nKPX Agrave U -32\nKPX Agrave V -74\nKPX Agrave W -12\nKPX Ag" "rave Y -28\nKPX Agrave comma -39\nKPX Agrave period -67\nKPX Aring C -33\nKPX Ar" "ing G -27\nKPX Aring O -27\nKPX Aring Q -28\nKPX Aring T -27\nKPX Aring U -32\nK" "PX Aring V -74\nKPX Aring W -12\nKPX Aring Y -28\nKPX Aring a 8\nKPX Aring b 46\n" "KPX Aring c -19\nKPX Aring comma -39\nKPX Aring d -10\nKPX Aring e -14\nKPX Arin" "g g -23\nKPX Aring guillemotleft -49\nKPX Aring guilsinglleft -49\nKPX Aring hyp" "hen -30\nKPX Aring o -16\nKPX Aring period -67\nKPX Aring q -24\nKPX Aring quote" "dblright -78\nKPX Aring quoteright -98\nKPX Aring t -26\nKPX Aring u -15\nKPX Ar" "ing v -55\nKPX Aring w -19\nKPX Aring y -60\nKPX Atilde C -33\nKPX Atilde G -27\n" "KPX Atilde O -27\nKPX Atilde Q -28\nKPX Atilde T -27\nKPX Atilde U -32\nKPX Atil" "de V -74\nKPX Atilde W -12\nKPX Atilde Y -28\nKPX Atilde comma -39\nKPX Atilde p" "eriod -67\nKPX B A -9\nKPX B AE -9\nKPX B Aacute -9\nKPX B Acircumflex -9\nKPX B" " Adieresis -9\nKPX B Aring -9\nKPX B Atilde -9\nKPX B O -10\nKPX B OE 10\nKPX B " "Oacute -10\nKPX B Ocircumflex -10\nKPX B Odieresis -10\nKPX B Ograve -10\nKPX B " "Oslash -8\nKPX B V -29\nKPX B W -12\nKPX B Y -50\nKPX C A -9\nKPX C AE -9\nKPX C" " Aacute -9\nKPX C Adieresis -9\nKPX C Aring -9\nKPX C H -26\nKPX C K -11\nKPX C " "O -21\nKPX C Oacute -21\nKPX C Odieresis -21\nKPX Ccedilla A -5\nKPX D A -42\nKP" "X D Aacute -42\nKPX D Acircumflex -42\nKPX D Adieresis -42\nKPX D Agrave -42\nKP" "X D Aring -42\nKPX D Atilde -42\nKPX D J -31\nKPX D T -40\nKPX D V -42\nKPX D W " "-17\nKPX D X -55\nKPX D Y -63\nKPX F A -38\nKPX F Aacute -38\nKPX F Acircumflex " "-38\nKPX F Adieresis -38\nKPX F Agrave -38\nKPX F Aring -38\nKPX F Atilde -38\nK" "PX F J -95\nKPX F O -27\nKPX F Odieresis -27\nKPX F a -47\nKPX F aacute -47\nKPX" " F adieresis -43\nKPX F ae -20\nKPX F aring -47\nKPX F comma -168\nKPX F e -56\n" "KPX F eacute -56\nKPX F hyphen -67\nKPX F i -47\nKPX F j -54\nKPX F o -63\nKPX F" " oacute -63\nKPX F odieresis -48\nKPX F oe -21\nKPX F oslash -63\nKPX F period -" "193\nKPX F r -32\nKPX F u -1\nKPX G A 6\nKPX G AE 5\nKPX G Aacute 6\nKPX G Acirc" "umflex 6\nKPX G Adieresis 6\nKPX G Agrave 6\nKPX G Aring 6\nKPX G Atilde 6\nKPX " "G T -25\nKPX G V 6\nKPX G W 1\nKPX G Y -14\nKPX J A -7\nKPX J AE -16\nKPX J Adie" "resis -7\nKPX J Aring -7\nKPX K C -42\nKPX K G -36\nKPX K O -37\nKPX K OE -19\nK" "PX K Oacute -37\nKPX K Odieresis -37\nKPX K S -9\nKPX K T -12\nKPX K a -1\nKPX K" " adieresis -1\nKPX K ae 26\nKPX K aring -1\nKPX K e -24\nKPX K hyphen -61\nKPX K" " o -25\nKPX K oacute -25\nKPX K odieresis -25\nKPX K u -25\nKPX K udieresis -25\n" "KPX K y -67\nKPX L A 17\nKPX L AE 16\nKPX L Aacute 17\nKPX L Adieresis 17\nKPX L" " Aring 17\nKPX L C -11\nKPX L Ccedilla -10\nKPX L G -10\nKPX L O -6\nKPX L Oacut" "e -6\nKPX L Ocircumflex -6\nKPX L Odieresis -6\nKPX L Ograve -6\nKPX L Otilde -6" "\nKPX L S -24\nKPX L T -52\nKPX L U -29\nKPX L Udieresis -29\nKPX L V -66\nKPX L" " W -27\nKPX L Y -53\nKPX L hyphen 3\nKPX L quotedblright -66\nKPX L quoteright -" "73\nKPX L u -16\nKPX L udieresis -16\nKPX L y -45\nKPX N A -3\nKPX N AE -3\nKPX " "N Aacute -3\nKPX N Adieresis -3\nKPX N Aring -3\nKPX N C -12\nKPX N Ccedilla -12" "\nKPX N G -11\nKPX N O -9\nKPX N Oacute -9\nKPX N Odieresis -9\nKPX N a -19\nKPX" " N aacute -19\nKPX N adieresis -19\nKPX N ae 11\nKPX N aring -19\nKPX N comma -5" "8\nKPX N e -6\nKPX N eacute -6\nKPX N o -10\nKPX N oacute -10\nKPX N odieresis -" "10\nKPX N oslash -7\nKPX N period -83\nKPX N u -9\nKPX N udieresis -9\nKPX O A -" "27\nKPX O AE -26\nKPX O Aacute -27\nKPX O Adieresis -27\nKPX O Aring -27\nKPX O " "T -30\nKPX O V -31\nKPX O W -5\nKPX O X -43\nKPX O Y -52\nKPX Oacute A -27\nKPX " "Oacute T -30\nKPX Oacute V -31\nKPX Oacute W -5\nKPX Oacute Y -52\nKPX Ocircumfl" "ex T -30\nKPX Ocircumflex V -31\nKPX Ocircumflex Y -52\nKPX Odieresis A -27\nKPX" " Odieresis T -30\nKPX Odieresis V -31\nKPX Odieresis W -5\nKPX Odieresis X -43\n" "KPX Odieresis Y -52\nKPX Ograve T -30\nKPX Ograve V -31\nKPX Ograve Y -52\nKPX O" "slash A -26\nKPX Otilde T -30\nKPX Otilde V -31\nKPX Otilde Y -52\nKPX P A -79\n" "KPX P AE -76\nKPX P Aacute -79\nKPX P Adieresis -79\nKPX P Aring -79\nKPX P J -8" "2\nKPX P a -52\nKPX P aacute -52\nKPX P adieresis -52\nKPX P ae -25\nKPX P aring" " -52\nKPX P comma -156\nKPX P e -42\nKPX P eacute -42\nKPX P hyphen -46\nKPX P o" " -48\nKPX P oacute -48\nKPX P odieresis -48\nKPX P oe -13\nKPX P oslash -48\nKPX" " P period -181\nKPX R C -27\nKPX R Ccedilla -28\nKPX R G -26\nKPX R O -25\nKPX R" " OE -4\nKPX R Oacute -25\nKPX R Odieresis -25\nKPX R T -28\nKPX R U -32\nKPX R U" "dieresis -32\nKPX R V -33\nKPX R W -13\nKPX R Y -29\nKPX R a 7\nKPX R aacute 7\n" "KPX R adieresis 7\nKPX R ae 35\nKPX R aring 7\nKPX R e -15\nKPX R eacute -15\nKP" "X R hyphen -48\nKPX R o -17\nKPX R oacute -17\nKPX R odieresis -17\nKPX R oe 22\n" "KPX R u -11\nKPX R uacute -11\nKPX R udieresis -11\nKPX R y -15\nKPX S A -22\nKP" "X S AE -22\nKPX S Aacute -22\nKPX S Adieresis -22\nKPX S Aring -22\nKPX S T -42\n" "KPX S V -10\nKPX S W -16\nKPX S Y -31\nKPX S t -18\nKPX T A -27\nKPX T AE -27\nK" "PX T Aacute -27\nKPX T Acircumflex -27\nKPX T Adieresis -27\nKPX T Agrave -27\nK" "PX T Aring -27\nKPX T Atilde -27\nKPX T C -29\nKPX T G -30\nKPX T J -79\nKPX T O" " -29\nKPX T OE -7\nKPX T Oacute -29\nKPX T Ocircumflex -29\nKPX T Odieresis -29\n" "KPX T Ograve -29\nKPX T Oslash -29\nKPX T Otilde -29\nKPX T S -43\nKPX T V 10\nK" "PX T W 5\nKPX T Y -10\nKPX T a -60\nKPX T ae -33\nKPX T c -88\nKPX T colon -136\n" "KPX T comma -108\nKPX T e -83\nKPX T g -92\nKPX T guillemotleft -122\nKPX T guil" "singlleft -122\nKPX T hyphen -94\nKPX T i -58\nKPX T j -80\nKPX T o -85\nKPX T o" "slash -54\nKPX T period -136\nKPX T r -54\nKPX T s -63\nKPX T semicolon -111\nKP" "X T u -84\nKPX T v -93\nKPX T w -88\nKPX T y -103\nKPX U A -18\nKPX U AE -27\nKP" "X U Aacute -18\nKPX U Acircumflex -18\nKPX U Adieresis -18\nKPX U Aring -18\nKPX" " U Atilde -18\nKPX U comma -76\nKPX U m 6\nKPX U n -19\nKPX U p 0\nKPX U period " "-101\nKPX U r -41\nKPX Uacute A -18\nKPX Uacute comma -76\nKPX Uacute m 6\nKPX U" "acute n -19\nKPX Uacute p 0\nKPX Uacute period -101\nKPX Uacute r -41\nKPX Ucirc" "umflex A -18\nKPX Udieresis A -18\nKPX Udieresis b 25\nKPX Udieresis comma -76\n" "KPX Udieresis m 6\nKPX Udieresis n -19\nKPX Udieresis p 0\nKPX Udieresis period " "-101\nKPX Udieresis r -41\nKPX Ugrave A -18\nKPX V A -3\nKPX V AE -12\nKPX V Aac" "ute -3\nKPX V Acircumflex -3\nKPX V Adieresis -3\nKPX V Agrave -3\nKPX V Aring -" "3\nKPX V Atilde -3\nKPX V C -29\nKPX V G -31\nKPX V O -31\nKPX V Oacute -31\nKPX" " V Ocircumflex -31\nKPX V Odieresis -31\nKPX V Ograve -31\nKPX V Oslash -31\nKPX" " V Otilde -31\nKPX V S -34\nKPX V T 10\nKPX V a -60\nKPX V ae -33\nKPX V colon -" "124\nKPX V comma -129\nKPX V e -52\nKPX V g -53\nKPX V guillemotleft -75\nKPX V " "guilsinglleft -75\nKPX V hyphen -43\nKPX V i -60\nKPX V o -56\nKPX V oslash -53\n" "KPX V period -154\nKPX V r -46\nKPX V semicolon -114\nKPX V u -15\nKPX V y -19\n" "KPX W A -8\nKPX W AE -14\nKPX W Aacute -8\nKPX W Acircumflex -8\nKPX W Adieresis" " -8\nKPX W Agrave -8\nKPX W Aring -8\nKPX W Atilde -8\nKPX W C -8\nKPX W G -7\nK" "PX W O -5\nKPX W Oacute -5\nKPX W Ocircumflex -5\nKPX W Odieresis -5\nKPX W Ogra" "ve -5\nKPX W Oslash -2\nKPX W Otilde -5\nKPX W S -24\nKPX W T 5\nKPX W a -20\nKP" "X W ae 10\nKPX W colon -88\nKPX W comma -66\nKPX W e -6\nKPX W g -7\nKPX W guill" "emotleft -31\nKPX W guilsinglleft -31\nKPX W hyphen -2\nKPX W i -43\nKPX W o -10" "\nKPX W oslash -7\nKPX W period -90\nKPX W r -29\nKPX W semicolon -69\nKPX W u 2" "\nKPX W y -2\nKPX X C -46\nKPX X O -43\nKPX X Odieresis -43\nKPX X Q -44\nKPX X " "a -7\nKPX X e -30\nKPX X hyphen -75\nKPX X o -31\nKPX X u -31\nKPX X y -53\nKPX " "Y A -24\nKPX Y AE -27\nKPX Y Aacute -24\nKPX Y Acircumflex -24\nKPX Y Adieresis " "-24\nKPX Y Agrave -24\nKPX Y Aring -24\nKPX Y Atilde -24\nKPX Y C -51\nKPX Y G -" "52\nKPX Y O -53\nKPX Y Oacute -53\nKPX Y Ocircumflex -53\nKPX Y Odieresis -53\nK" "PX Y Ograve -53\nKPX Y Oslash -53\nKPX Y Otilde -53\nKPX Y S -55\nKPX Y T -10\nK" "PX Y a -60\nKPX Y ae -32\nKPX Y colon -135\nKPX Y comma -107\nKPX Y e -78\nKPX Y" " g -81\nKPX Y guillemotleft -115\nKPX Y guilsinglleft -115\nKPX Y hyphen -91\nKP" "X Y i -57\nKPX Y o -83\nKPX Y oslash -54\nKPX Y p -35\nKPX Y period -135\nKPX Y " "semicolon -110\nKPX Y u -46\nKPX Y v -39\nKPX Z v -50\nKPX Z y -61\nKPX a j -87\n" "KPX a quoteright -56\nKPX a v -28\nKPX a w -21\nKPX a y -38\nKPX aacute v -28\nK" "PX aacute w -21\nKPX aacute y -38\nKPX adieresis v -28\nKPX adieresis w -21\nKPX" " adieresis y -38\nKPX ae v 21\nKPX ae w 21\nKPX ae y 10\nKPX agrave v -28\nKPX a" "grave w -21\nKPX agrave y -38\nKPX aring v -28\nKPX aring w -21\nKPX aring y -38" "\nKPX b v -12\nKPX b w 1\nKPX b y -22\nKPX c h -3\nKPX c k -9\nKPX comma one -14" "4\nKPX comma quotedblright -119\nKPX comma quoteright -136\nKPX e quoteright -41" "\nKPX e t -29\nKPX e v -22\nKPX e w -19\nKPX e x -2\nKPX e y -33\nKPX eacute v -" "22\nKPX eacute w -19\nKPX eacute y -33\nKPX ecircumflex v -22\nKPX ecircumflex w" " -19\nKPX ecircumflex y -33\nKPX eight four -58\nKPX eight one -75\nKPX eight se" "ven -68\nKPX f a -38\nKPX f aacute -38\nKPX f adieresis -22\nKPX f ae -11\nKPX f" " aring -38\nKPX f e -55\nKPX f eacute -55\nKPX f f -42\nKPX f i -36\nKPX f j -59" "\nKPX f l -25\nKPX f o -62\nKPX f oacute -62\nKPX f odieresis -27\nKPX f oe -20\n" "KPX f oslash -32\nKPX f quoteright -56\nKPX f s -41\nKPX f t -6\nKPX five four -" "52\nKPX five one -86\nKPX five seven -72\nKPX four four -62\nKPX four one -66\nK" "PX four seven -93\nKPX g a -10\nKPX g adieresis -10\nKPX g ae 16\nKPX g aring -1" "0\nKPX g e -4\nKPX g eacute -4\nKPX g l -33\nKPX g oacute -8\nKPX g odieresis -8" "\nKPX g r 0\nKPX guillemotright A -43\nKPX guillemotright AE -39\nKPX guillemotr" "ight Aacute -43\nKPX guillemotright Adieresis -43\nKPX guillemotright Aring -43\n" "KPX guillemotright T -121\nKPX guillemotright V -71\nKPX guillemotright W -29\nK" "PX guillemotright Y -114\nKPX guilsinglright A -43\nKPX guilsinglright AE -39\nK" "PX guilsinglright Aacute -43\nKPX guilsinglright Adieresis -43\nKPX guilsinglrig" "ht Aring -43\nKPX guilsinglright T -121\nKPX guilsinglright V -71\nKPX guilsingl" "right W -29\nKPX guilsinglright Y -114\nKPX h quoteright -49\nKPX h y -32\nKPX h" "yphen A -26\nKPX hyphen AE -20\nKPX hyphen Aacute -26\nKPX hyphen Adieresis -26\n" "KPX hyphen Aring -26\nKPX hyphen T -95\nKPX hyphen V -41\nKPX hyphen W -1\nKPX h" "yphen Y -92\nKPX i T -58\nKPX i j -142\nKPX k a -6\nKPX k aacute -6\nKPX k adier" "esis -6\nKPX k ae 21\nKPX k aring -6\nKPX k comma -53\nKPX k e -29\nKPX k eacute" " -29\nKPX k g -38\nKPX k hyphen -99\nKPX k o -30\nKPX k oacute -30\nKPX k odiere" "sis -30\nKPX k period -81\nKPX k s -9\nKPX k u -3\nKPX k udieresis -3\nKPX l v -" "83\nKPX l y -93\nKPX m p 22\nKPX m v 14\nKPX m w 15\nKPX m y 3\nKPX n T -42\nKPX" " n p -5\nKPX n quoteright -47\nKPX n v -21\nKPX n w -12\nKPX n y -31\nKPX nine f" "our -51\nKPX nine one -75\nKPX nine seven -66\nKPX o T -85\nKPX o quoteright -39" "\nKPX o t -22\nKPX o v -21\nKPX o w -6\nKPX o x -26\nKPX o y -31\nKPX oacute v -" "21\nKPX oacute w -6\nKPX oacute y -31\nKPX ocircumflex t -22\nKPX odieresis t -2" "2\nKPX odieresis v -21\nKPX odieresis w -6\nKPX odieresis x -26\nKPX odieresis y" " -31\nKPX ograve v -21\nKPX ograve w -6\nKPX ograve y -31\nKPX one comma -91\nKP" "X one eight -86\nKPX one five -67\nKPX one four -119\nKPX one nine -75\nKPX one " "one -62\nKPX one period -119\nKPX one seven -141\nKPX one six -111\nKPX one thre" "e -61\nKPX one two -47\nKPX one zero -94\nKPX p t -15\nKPX p y -19\nKPX period o" "ne -119\nKPX period quotedblright -108\nKPX period quoteright -125\nKPX q c -2\n" "KPX q u 42\nKPX quotedblbase A -3\nKPX quotedblbase AE -3\nKPX quotedblbase T -7" "8\nKPX quotedblbase V -83\nKPX quotedblbase W -23\nKPX quotedblbase Y -79\nKPX q" "uotedblleft A -59\nKPX quotedblleft AE -52\nKPX quotedblleft Aacute -59\nKPX quo" "tedblleft Adieresis -59\nKPX quotedblleft Aring -59\nKPX quotedblleft T -37\nKPX" " quotedblleft V -14\nKPX quotedblleft W -3\nKPX quotedblleft Y -35\nKPX quotedbl" "right A -59\nKPX quotedblright AE -68\nKPX quotedblright Aacute -59\nKPX quotedb" "lright Adieresis -59\nKPX quotedblright Aring -59\nKPX quotedblright T -45\nKPX " "quotedblright V -14\nKPX quotedblright W -20\nKPX quotedblright Y -35\nKPX quote" "left A -80\nKPX quoteleft AE -73\nKPX quoteleft Aacute -80\nKPX quoteleft Adiere" "sis -80\nKPX quoteleft Aring -80\nKPX quoteleft T -59\nKPX quoteleft V -36\nKPX " "quoteleft W -24\nKPX quoteleft Y -56\nKPX quoteright A -140\nKPX quoteright AE -" "149\nKPX quoteright Aacute -140\nKPX quoteright Adieresis -140\nKPX quoteright A" "ring -140\nKPX quoteright comma -196\nKPX quoteright d -126\nKPX quoteright o -1" "31\nKPX quoteright period -220\nKPX quoteright r -145\nKPX quoteright s -140\nKP" "X quoteright t -114\nKPX quoteright v -108\nKPX quoteright w -105\nKPX quoterigh" "t y -118\nKPX r a -20\nKPX r aacute -20\nKPX r acircumflex -20\nKPX r adieresis " "-20\nKPX r ae 7\nKPX r agrave -20\nKPX r aring -20\nKPX r c -24\nKPX r ccedilla " "-28\nKPX r colon -81\nKPX r comma -97\nKPX r d -14\nKPX r e -12\nKPX r eacute -1" "2\nKPX r ecircumflex -12\nKPX r egrave -12\nKPX r f -18\nKPX r g -11\nKPX r h -1" "9\nKPX r hyphen -120\nKPX r i -28\nKPX r j -35\nKPX r k -29\nKPX r l -47\nKPX r " "m 33\nKPX r n 6\nKPX r o -19\nKPX r oacute -19\nKPX r ocircumflex -19\nKPX r odi" "eresis -19\nKPX r oe 18\nKPX r ograve -19\nKPX r oslash -19\nKPX r p 28\nKPX r p" "eriod -125\nKPX r q -11\nKPX r quoteright -37\nKPX r r -13\nKPX r s -24\nKPX r s" "emicolon -69\nKPX r t 17\nKPX r u 17\nKPX r v 24\nKPX r w 24\nKPX r x 2\nKPX r y" " 13\nKPX r z -19\nKPX s quoteright -48\nKPX s t -13\nKPX seven colon -148\nKPX s" "even comma -140\nKPX seven eight -79\nKPX seven five -84\nKPX seven four -111\nK" "PX seven one -67\nKPX seven period -165\nKPX seven seven -62\nKPX seven six -99\n" "KPX seven three -72\nKPX seven two -69\nKPX six four -46\nKPX six one -61\nKPX s" "ix seven -48\nKPX t S -35\nKPX t a -20\nKPX t aacute -20\nKPX t adieresis -20\nK" "PX t ae 8\nKPX t aring -20\nKPX t colon -102\nKPX t e -37\nKPX t eacute -37\nKPX" " t h -7\nKPX t o -39\nKPX t oacute -39\nKPX t odieresis -39\nKPX t quoteright -9" "4\nKPX t semicolon -80\nKPX three four -52\nKPX three one -74\nKPX three seven -" "67\nKPX two four -92\nKPX two one -66\nKPX two seven -71\nKPX u quoteright -38\n" "KPX v a -6\nKPX v aacute -6\nKPX v acircumflex -6\nKPX v adieresis -6\nKPX v ae " "20\nKPX v agrave -6\nKPX v aring -6\nKPX v atilde -6\nKPX v c -25\nKPX v colon -" "71\nKPX v comma -113\nKPX v e -13\nKPX v eacute -13\nKPX v ecircumflex -13\nKPX " "v egrave -13\nKPX v g -11\nKPX v hyphen -24\nKPX v l -82\nKPX v o -21\nKPX v oac" "ute -21\nKPX v odieresis -21\nKPX v ograve -21\nKPX v oslash -21\nKPX v period -" "139\nKPX v s -19\nKPX v semicolon -62\nKPX w a -6\nKPX w aacute -6\nKPX w acircu" "mflex -6\nKPX w adieresis -6\nKPX w ae 20\nKPX w agrave -6\nKPX w aring -6\nKPX " "w atilde -6\nKPX w c -10\nKPX w colon -71\nKPX w comma -70\nKPX w e -1\nKPX w ea" "cute -1\nKPX w ecircumflex -1\nKPX w egrave -1\nKPX w g -3\nKPX w hyphen 1\nKPX " "w l -50\nKPX w o -6\nKPX w oacute -6\nKPX w odieresis -6\nKPX w ograve -6\nKPX w" " oslash -3\nKPX w period -95\nKPX w s -18\nKPX w semicolon -62\nKPX x a -2\nKPX " "x c -29\nKPX x e -25\nKPX x eacute -25\nKPX x o -26\nKPX x q -30\nKPX y a -17\nK" "PX y aacute -17\nKPX y acircumflex -17\nKPX y adieresis -17\nKPX y ae 10\nKPX y " "agrave -17\nKPX y aring -17\nKPX y atilde -17\nKPX y c -35\nKPX y colon -81\nKPX" " y comma -117\nKPX y e -24\nKPX y eacute -24\nKPX y ecircumflex -24\nKPX y egrav" "e -24\nKPX y g -21\nKPX y hyphen -24\nKPX y l -93\nKPX y o -31\nKPX y oacute -31" "\nKPX y odieresis -31\nKPX y ograve -31\nKPX y oslash -31\nKPX y period -144\nKP" "X y s -30\nKPX y semicolon -72\nKPX zero four -58\nKPX zero one -81\nKPX zero se" "ven -73\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n022003l_pfb_len = 45758; char* n022003l_pfb = "\x80\x1[\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05\n%%CreationDate: Wed D" "ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n" "% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING" " (GNU General Public License) for license conditions.\n% As a special exception," " permission is granted to include this font\n% program in a Postscript or PDF fi" "le that consists of a document that\n% contains text to be displayed or printed " "using this font, regardless\n% of the conditions or license applying to the docu" "ment itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readon" "ly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the" " file COPYING (GNU General Public License) for license conditions. As a special " "exception, permission is granted to include this font program in a Postscript or" " PDF file that consists of a document that contains text to be displayed or prin" "ted using this font, regardless of the conditions or license applying to the doc" "ument itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (UR" "W)++ Design & Development) readonly def\n/FullName (Nimbus Mono L Regular) reado" "nly def\n/FamilyName (Nimbus Mono L) readonly def\n/Weight (Regular) readonly de" "f\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/" "UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusMonL-Regu def\n/Pa" "intType 0 def\n/WMode 0 def\n/FontBBox {-12 -237 650 811} readonly def\n/FontTyp" "e 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding Stand" "ardEncoding def\n/UniqueID 5020945 def\ncurrentdict end\ncurrentfile eexec\r\x80" "\x2;\xaa\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2\x35" "\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r\xde\x9f\x8em\xf9" "%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff++\xde`[\x8e\xe3" "&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed" "\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95" "\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff\x9c\xdcz\x1b" "\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>j\"a\xc6\xf4\xe6\xcb\x13\x85\\\x81u\xe3\x14\x17\xd1" "\x90\xd0\x36\xb3\x87\xd3\x95#D\xa9P\xf4\xd8\xc7x\x1b\x30z\x9M\xf1\xec\xae\xe4\xd2" "\xc2\xfdt{\xc6\xf7\xf9\xc6\xbd\xe\x90\xc1\x92\x94\xf9l\x8c\\\xfe\x88\xfb\x34\xc4" "wWJ\x1b\x16\x30\xb8\xccY\x15)\xe5\x9b yM\xa3.a\xde\xcd\xa8\xab\xbd\x1a\xe9V\xcft" "\x1*\xa0\x1d\x42\xee\x1\xe8\x61\xb0\xaah\x97\xc8\x64x\x8a\xe5\x9d\xef\x43\xc4\x93" "$o\xdb\x1a\xcaUL\x12YK\xc7\xb3\x36W\xa9\xec\xc9\xe3\xd1G.\xf8&\x7?c+\xe5@\xc3_\xf6" "\xfb@Vgs\xf3\xbb\"\x4\xd3\xa5y\xa0\x8c\xcb\xc8\x44\xc1K\x18\xc3P\xf0\x3\xb9\xda#" "\xa5p\xc3\x62\xd6\x0\x38\x93\xca\x32\xf8oY\xb8)\xc7\x8e\xe3\x18\x8bn?\x7f\xa8\x1d" "\x7f\x62(%\xc6\x39\x63\x8d\xfbx\xb7\xaf\x1fP\xf[E\xf\xa5M\xbf\xa5\xcb\xa2w\xc7\x94" "\xec\xe9\x32u\xa3\xde\xb\x45/\xdc\x8d\xdc)\x93\xba\xa4/(\xa6\x36\x0\x8c\xdc\xb0>" "\xbfq\xbd\xca\xf3P\x19w\x89\x93\x44?\x88\x41*\xd2\xad\rqU\xa3\x94\x46\x6\x46\x32" "f2-\xbc\x2\x44\xb0}\xa1\xe9\xc2z'\xb5\x96\x64\xe8VmzT\xcc\x3\xe9\x95\xaa\xd0\x8\xb0" "\xa1~,>\xf6\x1fr\xc\xe7\xf7x\x85\x99\xc4\xe4Lp\x9c\xd5\xc3\x1b\x11\x10\x7f\x16\xad" "p\xb1{\x9a\xfe.\x8c\xd9\"\xa7\x42\x8d\xac\x17\x14'\xff\xafQ\x6s\x7\xfa\xb0\xad\xb5" "0\xe7\x1\xfd\"\xda\"\xc4\xcd\x30\x64\x6{\xd4\xf6\x8\x9cK,\x87\x93}\xd4&\xe4\xe9\xd2" "\xf6\xe`\x82\x88\xba\xc9\x5\x65T\xd0IG\xe6\x92\x0\x61\xe3y\xcf^\x81\xbf\xd3/\xd3" "~\xfa\xc1\xf6\x1c\xeb\xeeU\x1b\x8QQdq\xa7G,`\xdf\x89\xda\xa9\xeb\x1d\xc5\xa6~G\x97" "E>i\xb9\xe2+\xafN<\xca\x41\x92\xd6\x3)[\x1\x8cJ\xb6\x9d\x18\xdeR\xdf\xdf\x15\xe9" "kU\x7f)\nK\x8c[\x1ezl\xac\xa8\x1f#Q\xb9z\xdf\xc3i\x95\xab\xa4\x38\x3\xa6\xe5\xac" "\x4\xa3\xc9\x34\x95\xf6\xd3\x81\x6\xb8\xb1\x44\x44\x9c\x7\xd1\x35\x82\x10\xf9\x17" "n\x15\x65r6<\xfb\xdeWk\xfd\xf9\x9f\xa3)\xdd\x13\x46\xe8?y\xe0l\xf6\x82P\xcaW\xa6" "\x89\x31\xbc\x7f\x34*\xd2\x95\xd0\xcb\xa1z\xa9[\xb8\xee\xb5>\xa6\xe8\xe6`\xb8\x14" "\xe9\xf8W\xce\xcb\x14\xf4JC(\x8bi\xa9\xe7\x90\x8dU\xbf\x19\xe8\x44\x35\x98y\xd2\x8c" "\xae\xf1\xc3\x8a\x36\x42\x1\x85\xd2\r\xfb\x32\xc2\xe0\x2 (\x0\xe8\xef=g\xc5\xd5\xe" "\x91\x96W\xca\x95\x8bS\x8dS}P4D\x86S1\xd7\x9b\xfc@1 h\xd7#dP;\xd0\xcc\x84\xb5\xf3" "\nt\xd8\xb5\xb6\xa2j\xf2\xdbvEd\xfb\x65\xa6\xba\x8f\x90Q\xae+N\xa4X\xd4jEi\xf3\xc" "nw\xdc\x9sVw\x3\x62\xe6\xcf?\x16\x61\x7Gx\xeb\xb4O\xf7\xd1\xe3\xb6O\xf7^w\xe1\x1f" "\xe5%\xbb\x12\x1c\x65\x46\xcf\xd1\x33\x0\xca\x1f\x2\xd5q\xb8*X%\xe6\"m\x14\xfd\xcf" "'\xf0m\x87\x45*\x8bl]\xca\x65\x85\x35\xce\xe2\xa7\x95\xe5\x81\x37\xd4\x8eVki\xd5" ":\xc;vn\x84\xc5\x1e\xaa\"\x1c\x46\x99\x9c\xc8\x6Z\xdb/\x12\x9d[c\xf\xab\x18\x14\xc0" "\xc3;Z\xea\xe\xfb\xb6\xe9\x94\xd8\x9\x41\xb5\x30y\xaf\x96\xd9\n\xb\x92O\x9b\xe\x31" "\x9b\xed\x98\x36\xb8\xf9\x5?\x86\x83\x63\xd3\xcaUL\xbb\x18\x18\x63\x30\x1f\x8c\xb9" "@\x87.\xd5\xfa{\xd1\x8c\xe3\x92\x18\xb5\xad\x8a\xc5}\xfu-\x94\x10v\xb1\xc6M\x99\xbe" "\r\xb8mzm\x96Q\rw.\xb2LX\x7f\x11w\x9b\xd2\x1c\xfe[\xde\x1f)\xc1\xef\x90\"\xb2\xb8" "\xbc\xd7\xf9\x11S\xc8\x45\x90g\"Gx)\xc4\x1\x11\xd8\x10H\xf<\xf6-\xe8\xdb\xa7\xfd" "\x86\xcd#nef\x18\xca\xf6\xfc\x46\x82\x7f\xbcH\x98\xeavr\xf8\xc9\x97\x1a\xfe\x43\xe0" "\xe0\x1e\xc8\xb7}J\xf4\x8c\xbf\x12\x10\xe9\x8c\x1d\xb1\\\x16\xd1I\xbf\xf5\x8a\xb0" "'\xc\xf0\x15\xb1\x7\xa3\xa5\xf]\xc8\xf3\x7f\xfb\x92\xee\xc8\xcbgx\xdd\xb7\xceJ\xab" "\xc4\x64\xc4\xaf\xf6T\"0\x6\xa5P\xebRHZ#\xd2\xb4\xaaq\x98\xd3\xcdTA\x81\x2\xf1\xe9" "\xa4\xfb\xde\x37\xb8\x41\xe5o\\,S\x96m\xb9\xb6k\x0\xe\x45\x88(.?\xb8\xc,Q\x93\x39" "\xf0\x0-/\x83\xc9y\xed\xc5\x82z;<\x8e\xf8\x81\n\xf\x9d\xac\xb6\xb9\x99\x8e\x9a\xf6" "U\x1fV1=\xc4\x1\x19\x4\xcb\x97\x9a\xa2\xd3+\x11\xa8\x11\xbc$\x81\x41\xe4\xb9sM\x9f" "\xb7\x98*Vq\x0-\x82y\xca\xb9:\xbe\x5ttb\x8d\xef\xc9]C\x89\r\xb1\xed\x34\xcf\xa8\xa2" "\xb\xdc=\x87Nvy\xa3\x96\x15\x8eR.\xd0\xab\x96\x9aN>\xc7\xe4GN\x19%\x90PMT\xde\xb7" "\xb2`\xb7\x93\\NVT\x8a}\x12\x1a\xc1\xf7\x41\xf8\xcd\xf2Y\xea\x1bX\x13\x17Zw\xa1\xd2" "\xd3\xb\xa2oe\xebvZ\x4\xc0\x9e\xd5\x1fi\xf4\x15Q\xad\xf3\x99\xe6\xaa/\xc0\x97\x88" "\x13{\xeaI\x13\xf1{\x8e\xb8\x38\xc3\x8f\xb2r\x1f\xdc\xb5_\xd6V\x97\xff\xb\x85\xe" "}=\x1c\xe2\x66\xbf\x90\xf7\xec\x6\xa9\xa0\x87k\xdf\xe7g\xd3\xa9\x18\xb0\x92\xfcx" "\xc7u\xf9\x45\xcf\x1f\x96\xe8Y\xc0=\xbf\x63\r\x9a\x94\x9\x39\x65L5I\xd8\xf7\x92\x1c" "\xb9N\xe2=Z\x5\x35\xde\x9d\xf3\x1e\xa0\xf9\x37\xf8`\xb4\xf2 \xa9\x9a\xdd\xfc\x34" "=|\xf7\xbf\xa0\xb8\x3\xc1,&@?\r\xcf\xfc\x8e\xa7\x86\xd0\xd8\xa8\xd9\xc3gA\x9c\xa8" "\xae\x41\x19\xc\xe9:\x80\x86X:\x1el\x9dp\xb6\x12\xc8M\x87\xd2\xee\xaaq\xec-\xc1/" "L\xdej\x82\x13\x3\xd5\xf6\xa9\xbb\xdb~\xed\xcd(\x9e\x80\xfa;u\xf4\x7fH\x1bPq\x9d" "\xcfJ\x14 i95\x93\xb9\xaf\x9c\xce\xea\xecV\xa3[\x87\x87\x19=|\x88\x11>\x9e\x1e\"" "\x1d\x15\x1e\x9;\x1\x9e\xf8\x9f\x61\x18\xbe\xc4sQ\x3\xcc\x80\x3\xccZ\xd1\xb6r{2&" "\xcd\x44\xc4\x97\xdapR\xddh\x16\x95\xdb\xec\x33\x97\xf9Y\x8c\x91wp\x1cs\xbf\x5\x94" "\xce\x93\xf2=P\xec[\xee/\xb9\xda\x1f\xc9\x66\xdf\x14\x8b'\xb2\x8e\xe3\xc8\x95&\xdd" "f%\xe2\x88\x7f\x9f\xa0v|\x12|`\x9e\xe3\x15\x62k\xc1M'O\xbe\xa5\x65(\xdc\x6\xa2{-" "GmF\xe9\xe7\x91\x65\x90\xb1V\xa5\xdf\x4\xa6\xcb\x15\xe3\x62\x45\xd7p!v{n[\xdf\xcc" "g\x96p&?\xd8\x91\x44l3q\xb1\x1b\xb6\xe1\xdf`\xf9`\xaa\xb4\x14\x9dwS\xe6\xa5\xc3\x38" "\x10\xc4,\x8b\xffN\x93P\x3\x38\x85\x6\xf8'\x8b\xd7\xcbg/\x13.\x6Z\xe6\x84\xdc\xa0" "\xb9\x6M\x1\xdd\x62\xe\x7f\xfd\xfe\x4\xf1\x42w\xef\xe8\xe6\x1Y\xba\xf\xca?\xe2\xf2" "\x8b\x90-J\xc2u\xd1\x9f\n\xc6\x97\x1e\xbe\x82|J#-\x87\x65\r&\x88\x34[\xcax\xf8y\x7" "q\x14\xf0\x46<_\x5\x81\x7\xb6iVo\x81q\xe4\xe2\x84\xd2x@U\x80\xf0K\xff\xc9\x90'\x84" "!n\xc\x9a\x17\xaa\x9b)5\xe6n\x18\xa7\x83\xf7#\xbe\x4\x43\x89\xb7\xe9\xd6*\xa3h\x18" "\xff.\xa4\x6\xc3\xc1\xa9\xd2\xf3\x43o>\xe7\xdb\x8b\xe8j\xfa\x8d\xaajK\x1b\x84\x61" "\x13P\xd8\xd2v\x5P\x96\x12\xb5\x15\xe1j\xa8\x43\x16M]\x8\x5\xe3j+\x9e\xf7L_j\xb\x9d" "Y\xa0KUiq#'\xf4\xb1\xb3\xe\x95\x87\xcd\x10\x33\x37\x63\x99g\xcb\xdc\x65Z\xa4n\x80" "\xd2\xcf\xd2K\xebP\x81[S8\xe5\"\xb3\xa7\xaf\xe8\x36*\xb4\xf0]\x8b\xc5+\xba\x9cP\x89" "\xad\xa8\xc8\x95)\xb0'Z\xf4\"\xebT\r1\xa9\x38\xb8t\x8`uc%\xb9\x66\xb3h\x17\x11R\x13" "\xfa\xaf\x92\xde\x63\xf6\xba\xe1\xe0\x6K\xfb\xc5X\x80\x98\xb6\x1e\xb8\x1e\x44\x90\xad\x1a\xc7\x93\xbd(\xfc\xd5\xef\xel\xc3\xe" "\xf3\x9a\x8\xc5/q\x93\x9b\xc\xef\x62\r\xc6\x9e\x31\xe3\x9dm\xb9i\x4\x90\x31\xb0\xc9" ".\xf2\xdb\x65=\x97\xf3p\x14\x14V\xa5)\x85\x7k&\x86R\xfa&H\xc7\x92x\xb\xad\x63|Mu" "\x81\xfb-b\x1\x1dW\xe2\x93q\x94\x87\xcf-\x1f\x1<\xfa\xa5\x32\xe1\xc2\xd3\x91x\xd5" "\x12r\xa6\xaf\x4\x14@\xbc\xa1t\xb5\xcc\x90+\xd7\x39\xc}6\x95\x5l\xb4\xbdw\x91\xf9" "\xfbm\x88\xe7\xa7\r\xef,\x97\x86\x9f]\xbc[\xd8#\xc5\x17\xc7\xb7\xc3\x9d\x62M\xf6" "'\xdc\x96S\xeaSG\xbf\xda\x80\xb7#\xf0_m\xbbL\x9e\xa5\x1\xd8\x62\xac\xe0[\x9d\xbd" "\xf2\x1bpV\xfb\xcd\x8cmK\x85\x87=\xce\xe6\x16l\x8bZ\xdc\x3\x16\xca\x12\xd9\x63\x9f" "6\x1b\x15\xa4/\x0\xe1\xd6.\xdb\xca\x11\x11\x97/\xa0\xf4WX\xbe\xcb\x31\xdb\x38\x31" "o<\xdf\xe1\xb4\x17H\xc9>\xd5\x8bg\xe9\xb5z\xbb\xedY$\xa6\xd5>\x99\xfb\xc9\xa9\x94" "\xa6H\x9a\x8b\xdf\x13\xebhUH\xb4\xdcmb\xdat&\xc2\"'\xd4\xd4;o\xfc{^\xa9\x1c\x89g" "0%>\x89\x41\xaf\xeeX\x83Y\xc2\xbe\xcfo\xfc\x41[\x9e\xb6\xd3\x1c\xcb\xfl\x7f\x85\x85" ">dI\xfambz\x97\xa3\xce\x83\x3\xf1H9:\xdc\xcc\xdf\xa2\xfe\x8\\i\x8\xbe\\<\x5\xaf\x0" "\xa6\xf0(@ l2S\xa5Y\xac\\\x4\x9b\xdd\xfd\x11\xad\x9b\x11\x84\x3\xb8M\xa1\n\xe3\xc4" "p\xcb\x9a\x9a-\x1d{s/Y\xf5\xfe\x14m\xed\xa6\n\xe7P\xf5Q\xaa\xc9\x34\x62\x1b\x44p" "\xe1\xbc\x32LCc\x3\xe2_\x81\xd0\xdc\x31\x88\xbe\ro\xecT\x14\xc2\xeL\xb1\x89R\xe1" ",\xb6\x42=\xf7\x12\x46'\xac\xde\x14U\x0\xd7z\x97\xa8\xbf\xd9\xcbP\xd1\xfa\xa0\x8" "\xe2\xce+%\x5\xa4t\x9f\x1e\xbb\xb0\x92\xc3G\x2\x37\x14\x5Z\x9b\x63\x35:\xf9\xe7\xfe" "\xe0[\xb5L\x98\x43i\x81\x1\xf7\x98\x88\xa9\x15\x31w80\xc2\xc9g\xb5\x88\xd3\xac\xd2" "\x19(\x83\xd5\xce\x39\x62\xd5\x10\x84\xfc\x65>\xae,_\xb2\xda\x41\xda\xce\xfb\\v\x81" "-.\xdb[\x10\x96w(\x9c\xd1\x99\x8d\x45\x7f\xb1\x2:\x19\xacg)[\xbc\x1a\x9a \xa4&\xb0" "j6\x8d\xf3\xc5\xdd\x8<\xb1\x18\r(\x7fU\x0\xf2\xc6\x35\xed\xe1W\xee\xfc\xee\xc5P4" "G8-\x15\xc7H\xc1\xe3_hu9\x92\xe5\xc9\xf\x90\r\xe5M\x18\xf8\xe1\xb3U\xd1\x7j\xdf\xb1" "\xf3Y\x1\x35\xfa\xd1\xa3o\x2\x8e\x44\xf4\x8a\xbb\x14\x9b\x80\xca\x9aTaMF\x7f\x8d" "q\xcb\x31\xb\xbcz\xc7\x10\x2\x61\x9-\xb8\xc5\xbf\xd3\x9e\n\xc6\xbc,\x9dl\xbc:\x8c" "\x5\xff\x8at\xcb!`\x8e\xc4\xa4\xcf\xe4\xcb\xaa-\x5m\xba\x14 a\x6\x4M\xec\xf5\x9f" "\x95~\xf8\xa9\xca\xdeL\x9b\x19\xd8\xd3\r\xd4\xfd\xe6\xa9T\x8eP\xdbQ\xac\xa7\x33\x30" "\x14!S\xfc\x36\xb6\x9c\x1c\x8d[&\xd0\xc6\x89\xb7\x4\xe\x81\xac,\x86O\xd7\xc0\x97" "\xc9\x9b\xe5\x95\x38\x43\xe1r\xc9z\xb5hO5\xfb\x3\xa7%\xa8\x9d\xbf\x37\x1f\x8\xdd" "\xf4\n\x15\x31\xfc\x1bgm\xb0\xe1T:\xecn\x97\xd3\xd2\xe4\xaa=X1\xd8\xb3\xc9R\xab\xbf" "\xa1\x12\x35(\x14\xfbo\xab\x61\xa0\xd6\x80\xe6\x64\xfj\xec\x84& \xc\xf6\x12\x86\xf7" "B,\xb2\xf7\x8c\x61\xeb\xaa\x36\xd4~\xc1m\x7f\xaf\x8bJ\xf3\x1d\x9\xc\xdf\xa2U\xd9" "\xd7\xc6\x1d\x46\xcf\xb2*}n\x17X\xe7\x1e\xd5g\xe0\xc\xbd\x8e\x8f\x46\x8d\xdf\xb4" "w\xf0\x91\xa2\xf9\x15\x62\x7f\"\xffG\xb8vTK\xc1\xf0;k\xbb\x98\x38_\x0\x9c \xbb\x1a" "\xa2\xa7\xa7\x86ti+\x8e\xac.<\x80i\xb7\x9eg\x93\x38\xdaW\xf7)v\x81\xf\x84[\xebk\x9a" "\xdd\x32\xb9]x\xe5\xe6\xf\x16\xdd\x16h\x9c\x5\xfd\x82\xd3j1\x15\xbe\x8e\xd4\x94\xa7" "M\xd2\x11\xd5\x8a,\xdf\x98?\xcb\x9c\xdc)\xbf\x7f\xe)\x98\x8f\xa2\x35`\xed\xf5\x14" "\xbc\x1d\x18?;*\"\xc0\x9f\xb1y\xb4~\x5\xad\xefH\xdf\x2\xf3\x1c)\x87]\x19\x15\x3{" "\x19@wd\xa4)/\xe4Nt\x16Q\xa8\xe3\xbe\xb5\xf0\xd9r\xb6\x32p\x90\xf6\x64\x41|\x84\xf8" "O\xfb\xf0\xaf\xff\x8b\x1d\x85\xc8\"\xd9\x7\x30\xab\x41@\xc4*Q\xaa\x8b\x1d\xbe\x43" "\x98N\xa8V`@\xeb\x8b\x34\x1c\xce#\xfd?i\xdd#Z\x8\xb\xa5\xc6\x9a\xec\xb9\xbcs+\xc2" "\xd7\xd4\x6\x17\xdd\xa6\xb7\x9f\xb6\xee@\xc3Ul}\xf9\xb2=\xad\x89\xe9@T\xb1\x34]\xb8" "@*\xe6y\xfc\x46U\xa4\xa7v\xc0\x15\x4\x63\xf8\xdb+\xfc\x6\x8\xea\x1f\x12N\"\x1d\xda" "\xe6\x2k^]\x0z~J\rk;\xc\xf3\xa2\x66\x9eg\xc5\xe4\xf0\x15Q\x96j{\xc4\x8f/Kj\x87\xe7" "@\xd8\x9^c\xf7|z\x2\x7f&\xb5/\"\x99\xde[\x8a/b\x9\xbc\xf3\xd3\x1c\xb0#_\x99\x8fx" "\x1e\\\xc8\x1e\x31\xdc\x42N\x0\x8d\x46\xec\x9 )Q\xe5hH\x4\xa0Y.\xa4}lx\x8a H{\xea" ".\xc8\xf2\xe6\xc1\xd7\xf3x\xb6-\xb4<\xa4\xe4\x8e%\xffI\xd5\x87\x1b\xd3" "\xe6\x6R)\x8f\xe3\xe8\xd4\x0`\x9e#.\r\xdcyL\x5y\xac\xef\x89\xe8\x41\xb2\xed\xcaP" "\xd5\x11Q\xf6^\x8c\x1c\xc3\xb0\x1e\xf1\x87\x5X\xf0\xbfWCq\x8c>\x6\x86\x17\xe8\x1b" "\xfe\x12\xcl\xa1n\x9$\xbf\xc2T\x11w\xd5\x36q\xca\xa3\xab\x64\x1c\x41U}\xcd\xae\x1a" "4aG\xb5\xe9\x99\xc4T\x1b\x8\xb4\xaf\xcb\xc1\x87\xaf\xd6S\xd5\xb5\xf8\x38m\xf6\xad" "\x8f\xe6\x9e!\xbd\x5g\xdfIOslj\x18O\xa4\xdeH\xdc\x9f\x34w\x87\xca\x96\xe2\xe0\n)" "l-\xa0\\*\xd9\xbc\x42>\x9c\xa4(\xd7\xf1\xfa\x12\xdc\x93S\xa3\x2\xfb\x8cR\x9a\xf8" "h\x8c\xbbT;E\xb2q~\xbf\x8flIy5\xf4\xf3\xbf\xfd(^\x4\x2\xabuD\xb3\xca\x46\x43\xae" "Z\x8bRP\xed\x98z\x95\xfc\x1f'[\x97\x7\xac\xd0\x64\x1b\xd0\xee*\xe9u\x84\x94\xf8\xd8" "\xa5\x1d\xce@\x8a\x38\xac \xea\xf0\x85-r\xd8M\xck\xe9s2g\x93\xae\xb9U\xea\xc6\xfe" "\n(\x13\xa3U\xdc\xd2/o,\xe5\x65\x88\xd1\xc0U\xcd\xdf\xa9\x88x\xbc\xebj\x1\x8d\xb2" ")\"\xd2\xb6\x0\xa2\xf\x81\x84.f]\xf4\x10\x13\xca\x9G\xc4#|+\xd6\nu\xe2\xfd\x1a?\xb8" "\xc8\xfa\x19HW0\xb8ta\xad\x46j\xcb\x2\xdf\x8c\xa2@\x91O\xb0\x90\xb3\xd2\xb4\x1e\xb6" "\xb8\xff\x5\xe1\xa5\x9d\x9f\xd6h\xafp\xba[\xb7'x\x95;\xa5_\xc5\xf9\xf6&\x4\x34P\xe1" "\xd0\x9b\xc8=\x86\x5\x9\x8a\xbe\xf8\x84\x63\x9a\x37\x80\x9a\x32V\\\xbe\xfb?\xf3\x9e" "\xe5=l\x18\xc5\x8c'+\xb9(\xe4\x41\xe\x36\x1eY\xa5\xf$-itz\x3&\x17\xc5-\xeb\xbf\x62" "6J\xb5\xa9n\xfa\xf6\x42\xd9\xd8+\xa6y\xb1\xd7\xf\xac\x10\xa4\xeb\x62\xfa\\\xfc\x30" "\x8e\x86\x36\x8a\xaa\xd7\xe7YH\xf4\x35\x98\xcd\x1cTJ\r@\x91\x37M~\x88\xd4R,\xbe\x90" "#\x91\x64\x13'\xe8\x88\xe7t\x8f\xa8\x89\xdc\xe6z\xde\x61i\x9e}wv6\x81\xca\xee\x9b" "\x1c\xa8\x83{/~\xf9\xc1\x8c\xbc\xc5\x38\xc4\x65\xc8\xe2\xdd\x34\x61iS\xcc\xb6\x3" "\n\",r\x8b\x83I\x11\xc1\xa1y\xe2\xc7p(\x94\x7\xab(\xb3\x3\xe7$\xd9\x7ft}a4\xb4%!" "jd\xc6\xe0\xb6\xf\x63>+\x85\x30\x0G\xe4\xc9\x3\x39\xce\x3\n\xf\xae\x31\xe8\x30\xc8" "\xab\xa5\xab\x33\x86\xa3\xb6\x92g5\x1a{\xfd\xd6\x63V\xae^W\xfb)\x94\x45)\x93\xe9" "\r\xe7\xc4\xe2`\xab\xab\x93\xc3x1\x85je\rV\xe4\x41r\xfe\xca\x1\xd6\xc7\xc3\x80\xf2" "P\xb8$s\x96\r**_\xb6\xb4\xda\x66\x8f\x46\xe6$\xac\xf7\xfa\xf\xd4I\xfH]d\n:\xdf\xc9" "\xf8\x65.z8\xceW\x99\xf7p\xc3`m\xb4\xb8\xb9G\xf9\x39g\xf7y\xe3\xa3\xc0W/\x13\xa5" "\xa1\x87\xd3\x1d{\xd1*\\{\xe2<\xb6\xed\x61\x92\x8\x62\x41\xb7l[\xa6\x98=\xb9\xc9" ">K \x8dp}7`\xf0<\xd6'.\xf3\xa4\xce\x89\xb8\xe5.j\xc5\x87\x1a=\x3\xeb\x97WY\xabK\xe2" "9\xe5\xecxB\xcb\xb3\x33\xe6\x92\xcc`|r.\x18]<9\x16M\xd3 \xc6\x94V)\xc7\xf\xf6jR7" "\xc0\xa9R\n\x1f\xadn\xb9\x81`i5\x1a\xb0\xf1\x35\xd9\xc\xc0\x98+\x14}\"\x94\xaeJ8" "\xa5'\xee@\xbe\x9c\xde%\x12\xaa\xeb\xb5\x90\xe1\x34\x38\x8b\xb1q\xd0\x95j|Ef\xd6" "Z\x9a\x4\x1b\xe6\xc4\xf8\x83k>\xc3\xd2\xed\x1bH\xb5\x66\xa7\x83)+\x15\xb6\x12y \xd2" "G\xd4\x94\xf0p\xbb \xbe\xff`d\xb\x11\xb2v\xdd\xee\xe4\x97\x6\xe8\xb2\xb2\x1b\xb4" "\xb\x7f\x0\xaa\xfcYLI,%\xdc\xa7t\xe0\xb8\r\x82\xe9'D\x8d\xe2\xe7J\x9d\r\xc7\xac\x92" "`\x9n\xaf\x18{l\xd6\xae\xaam\x1d\xc4 [D\x11\x12'Q\xa5\xb2&\x88@N\xa7\xc5\x86\x17" "07\x1f\xfa\xc1\xfZ\xfdG'\xa0\xe4\x2\xab^\xa7W`ku\xeb\x86\xa0^\x8fwMnC\n\x1a?\xe2" "\xa3~\xbb\x6p\x4t#\x9f\xb1\xcf\xa0^\xe4K\x91\xb8\"\x44\xc5u\xb5.\x7f\xaf\x93K\x4" "\xee\xb0\xd9\x33\xfe\xb5~\xbe\x32mu\x82\x1c\x8b#\xea\xa8[X:\xed\x43 \xb7\xf0K\x9f" "-\xc5\x91\x9\x12\x16\xfd\xe5.\x6K\xaa\xa9\xc2\xc9\xd9qK\x95\xa4U\x8c!\xf3\xce\xbe" "bKT\x3\xb3\x15\x8\xf1xX\x1a\xf6\x86\x30\x83\xedv/\x1e.4\xa4\\\xfd\xd7\x16`\xd6&\xff" "\x86H\xf5\xd6\xc5\xe5\x80\xd4vZg\xfb\x61Y\xec\x80w\xa9\xf0\xa8\x80\x38\xc8\xd3\xd7" "\xc7\x7f\xf0\x92n!#\xbe\x87O{\xca\xf1)\xd5Z[Y`\xf8$\xbd\x17(\xab\xcf\xccQ\xd2\x39" "6\xde\x9a%\xc4\x8\xd7\x86\xe4L:+\xaf\xa4\x42\x31w\xad\x6\r!\xd3\x8e\x15\xe2>\xb6" "\xff\xc0\xb4\x12\xe\x81\x46\x95\xd4#\xee\xfc'D\xa1\xfc\x81\xb4\xdf\x89\xd7o\nh\x3" "\xd8\xb1NuS\x8c\xaa\xd0:rQ{\x86QOiR\xf6\xfd\x61\x9d\x9e\x91\r\x98\xf\x0\x96M\xb3" "%1\x8c\x4[\xdfyd\x7f\x45=J\\\xf4\xe6\x1d\xd5\x35\x97\x82\x82r)1\x4\x5\xfb\xcf\x61" "\x7\xc3\xad\x9d\xde\xf9\xa9\xa3\x39\xd5\xd5\xa6\xeb.x8\xa0\xa4\x32!\xbd\x62\xcb\xdf" "s-\xb0\xa6\x38\xa5 \x16\xfb\x35\xbawa\xae\xc8\x46\xa0#\xd3\xbf-\x1b\xb1\x83T>\x81" "\xeb|\xac\x1eYp\xcd\xc6\xf0h\xc5\xea\x11\x8cz\xaeR\x8d\x13\x96\xe6\xdc\x93\x91\x12" "\xda\x44`\xc8\x90\xea\xd5\xc0\x1b\xdc\x43\x8f[\xb7\x34!\x8b\xa6'\n\xdd\r\xc1w\x8f" "\xd8\xab\x16\x83\x1dj0+\x81J\x1a\x44\xb0~\xdc\x65\x95l\x9el\xf4\x87]\xf5!\xf3\xce" "[B/q\x8\x1bmi\xbd'\xfs\x90\x95\xc9\xe8\x1c\x3w\x93J\x8b\xc6\x39\xc\x42\xcNL\xdd\x9c" "\xf7\xe3%\x44\xc6\x8d\x88N\x15\xac\xa3\xbc\xc0\x7f\xc8\xc1\x32\xd8\xfb\x9du,\x15" "\xd7\\R\xc2\x88W\xe2\xea\x46\x1ao\xca\xd9\xcV\x84\x35\x13\xf7\x44\x61\xf1\x8dqd\xbc" "Yz(\xaeK\xa7\xc8n\xe1p55\xa9\xb9\xedP\x12&'q\xfc\x12\xf1\x2\xe8\x0\xe0\xe1\xaf{\xb4" "f\x81\xbd+\x14\xb6\x14\xce\xa9\x1b{*\xaa\x35#]\xe7l\xe\x11<\x92h\x8f\x8e\xc8\x12" "w\xd5\x8c\x34\x6w\x8e\x1e\xc1\xcc\x15\xf1\xcd\x9a\x13|\x8f\xfd\xaa\xb9\x9a\xce;\xfc" "x)\x16\xf1\xa8w\x17\x5\x89\xa9-\xc9!\xe6t\n\"\xb8M\xc6\xba\xcd\xab\xccv\xe6Ly\xe3" "\xa5\x88\xd8\xf\x8fM7n\x1b\x42o\x15u\x1c\xf7\x39\x11\x2\x10/\n\xfa\xfd\x8b\"\xdf" "\xde\xb5H\xae\xb5\xf3\xb\x16s\x2=\"\x5J\x13\x39\x1a\xe\xc0\x8d\xe6\xe7\xb6\x85\xa0" "\xd0\x31\xaa\xbf \xb7\xc6!\x87\xc0(H\x92\xd5\xea\xad\xf1!\xba(&>\xb8\x63\xd5\xe3" "n\xa9\xc0jw\xcc\xfc\xe\x17\xf5\x93\x96\x15\x91\xf8M\x82\xaf\x82>\xfe\x41\x4L\x8d" "`o\xef\x83\xcc\xc7\xb0\xe9\x61\xe7\x99M\xf8\xa3\xcc\x36\xb2\x9\xd9S\xe2P\xad\xab" "\x8d\"\xd7\xf2\xb4\xe2\xc9\xca\x39\xef\xa2\xd9>V\x19\\\x15`\xe3\nQ\x90\xcc[\x17\xfa" "\xef\xcf%\r\xf7\x9fkbJK\x91~\x11\xc3\x32\"/\xcc\xfe\xc4\xf6\xa4{\xd9\xe7]\xa9\x85" "O\xc3\xf7\xaeUN\x91\xed\xde\x14Mz\xef\x38\xa0\xe3\xed\xb5\xe5\xa5\x62\x63t\xdb\x94" "\xf0\"\xc8\xcfT\x90\x93\x4\x1d\xe0\rri\xb7\xceTNt\x84\x39\xba(pq\x8c\x8\xe5\x8f\xb4" "\xa7}\x93\xeb\xc0KyW\xd2r\xae\x16\x1\xd4\x1b\xf8Z+\xad\xaa\r\xf7;\r8A\xd4\x83\x9c" "\x85g\x7f\xb2\xe1_\x1dl\xe5\x92\x66\x9f\xf4\xbb\xc9\xc6\x9d\xba\x33M\xc3w\x6\xf2" "\xf6\xbe\x83\xd5\x86>\x8c\xd6\xa3\xc\x8\x64\n\xacL#6\x84\xe6kO\xe6\xb6-J\x8b\xe9" "\xd5\x31\xe4{\xefV@\xd9\xb5\xc2}\x99\x0\x92\xbe\x15\x97\xf6\x99\\\x8aw\xbe\x9c\x18" "\xaa\xe6\xc1\xcf\x13\x7u\xdd\xac\x41\xd3\x44\x38\xfcz\xd8\xe0\x42\xcbV\xcb\xf2\x94" "I2\xeb\xa7\xd0S\xe9\x37o\xf3\x98\x36tP\xe3Z\x19\x45\xfe#\xe0\\\x92\x10\x96\xa1TT" "r\x1f\xfd\xf\x42\x9a>\x6\xdc>\xd3o\x1c\x17\xb\xe7\x9c\x66\x99n\xf8\x33z\xff\x85\xb9" "\xc]:J\x94\x45Z\xe9\xfa\x32\xe2\x11zc\xe5\x90\x1\xf0R\xd5\xf6\"\x31%\xbf\xaf\xa4" "\x9\x1\xe9\x89`\xad\xf7\xbb\x88g)\xdc\xa8/\xc3\xb8\xccR\xb3\x7f\xf2Qr\x99\xe1\xd7" "i\x5\x7f\x81T\xfb\x95X/\x2\xcb\xb\xec\xc8s\xa9\xc7\x17\x96\xad\xbd>\x91\x32O\xaa" "\x94\xf2\xc4\x1c\xf5|0\xb5\x89}\x3\x1c\x2\xd2V\xc9\x9\xe0\x80\xe7\xb\xfd\x1f\x32" "\xe6\x9e\xf6p1\x13\x8c-\xdc\xd1\xa8\xe4\xb6^H\\#\xc3\xe4P\xab\xdd\x98\x15Q-o4\xa8" "K\x9d\xb7\x15\xdb,z\x93\xbf\xb4$1n\x1a\xa4\x43\x97t\x9c\xb0\x10\x88\x42\x8f\x14\x9a" ";C$s~\xd9\x95\x7f\xd3\x88$\x84\x62\xac\x1b&\x10\xd7+\xf5\xc0s\xec\xa5g\xe7\x38\\" "\xc9Y\xe3|\xac~\x5G\x1`\xff\xa5\xa9\xf6;\x8e\x9b\x8)7\xe9\x11Xn\xa1\x65\x37I8\xf4" "\x92\xed\xf2\x8c\xe6\x2\x9S\xa5\xb5\xcc\xecw7\xf9\xd9\xcc\x85\x38\xc4\x33\x95g\xaa" "\xed\x37\x94\xab\xa3\xb9\xf4\xea\xe6Tf\xe8\xe3&\xf6\xc3\x99\xb3\x63U\x93_\xbd\xcb" "\x99r\xf1\xb\x13IM\xc2P\x97\xfc\xecZc\x98\xf2u\xc8\xc1QU\x8et\xc5\x17_{\xaf\x41U" "\xe3ks?u\xcf\x9d\\Yy\xb0vO\x14\xd8\x30n\x6\xba$\xbfy\x11\x41\xe4\x4\xc6\x9f?\x8f" "\xcc\xd9\x1b\x9cX\xc2\xc6q\xaa\xe7\xd4\xf9\xe5\xd6\x41NF\xed\x63:_x\xaa[\xf0Ne\"" "F\xa0\x66\xea\xd9\xe5\x82\xb1\x81\xcc\x19n\xa2\xd3\xcf\xaa\x38;]\xeL\xac\x93\x36" "\xe1\x19\xc0\x8c\xc6\xacU\xcb\xfb\xae\x14|b;@\x4S\xbb\xf4G\xe9m\xe0\x36\xfc\x2V$" "8CY\xee\xd7\xc7\xd5\xf7\x85\x8d\xc0R\x13w\xcf\x64z\x15\x7f\xc3\xf1\x88\xde^\xef\x9" "M\xba\x12U\x10\xfd\xe3LW\r{\xe7j\xb5\xdf\n(\xbf\x45\xdd\xaa\xdb\xea~\xee\xdb\x93" "c2\xdf\xe9\x30\x81\xe0\xaf\xd3\xfd\xd4k\xed\x8\xd6\x91K.\xfc\xfd\xc4\x16\x62\xa3" ";\x90\xb0=v\xd3OH\xd3\xf\xc6\xbb\xbb`\xe\x90\xe6\xacrC\xfd\xf0&v*D\xb4\xd6\xe4\xec" "\xbe\xf4\x8c\x9d{ij\xf2\x9e\xee\x6>U}\x8f\xcf\xf\x9\xe0\x13oE\xd1~`\x8d\xa3nY\xf2" "\xae\xcf\x84\x93\xf8\xd6%\x36\x11\x9b_~\x15T\xdf\xe3\xf6\xe8\xd7\xc9\xa2\xc6\xf5" "W\xd1\x8bJ\xf9,\x9fn\x5\x9u\xc3\xb5\xc5O\x9b_N9\xd6\x0\xb6\xfa,\xd6\xde :\x17@(\xcb" "\xb2\xa2\x1\xaf\x12m\x10\x13\xc2)\xbb\x82\xcf\xd0\x13\xed\x19\x9d\x1\xe5\x1e\xe2" "x\xf\xe8\x96\xe0\x1c\x63\xc6U\x8z>a\xa7\xf1\x2\x9f\xa5\xe9~\xa1\x87/\x1b\x45\xf2" "\"\x82\xdd\xc3\x17\xe1y&sh\xcbR\xda\x94\x44\xf6\x5Z\xd3\x95\x46\xa6\xaf\x1cR\xbf" "\xcf\x81\xa2\x9b\xe8,G\xc9\x9e\x80P\xe4\x88\x9e\x45u\xb7_9\xe6\x62\xf2\xdbt g7\x97" "\xe2\xed=g\xcd\xa7\xae,\x15\xd0\xa0\xa7\x94\xd5}\x16\x8e\xbe\x13!N\x89\xe0 \x9a\xb2" "\xc0\xebw\x84\xe9I\x1a\xef\xa3\xc0-\r\xf3\xaeSe\xa0\xfcJ\xe0#\xca\xb5(\x16,z\x1b" "\x17\x36\x64\x9d\xfa\xdd\xac\xa8\xda_\xa1\x8b}d\x89\xe4\"\x9e\x9e$\xd3\x8a\x62\x4" "d\xa7\x44\xa5\xc6\xfo\x9d\x33K\x90\x87\x6\xb7\x38\xae\xd1\x86i\x8a\x8b'\x83\x41\xfa" "Me\xa0\xa8\x86\x80\xbaHF\x94\x92\x15\x12\xf7\xde\x93\x33\x7f\xc1\xc0+\xbend\xaf-" "\xad\x7`2y\xd8s)\x1d\x1fM9\xc1\xddm\x89\xc9\xf\x65$\xfH\x8\xf6\xf1\x11\\\xa5[\x88" "\xe2\x42V^Y\xf3\xbb\xf1\xf1\xe\xc7\xb8\x88r\xe9\xae\x61\xd4L\xae\x18Tc\xed\xfa\xf7" "\xdf\x63\xdeM\"\x7\xd3\x7\xaf\xb6\x15\x1\x89)e\x17\r)E\x84o\xcfYs\xa1\xd4X`\x7fP" "\xc1^\x6\xe5\xbe\xc7\x15\xe0\xc1V%\x9a\xaalsU\x93\xe5VOe\xf4\x43\xb7\x8c\xc7Q.\xc3" "ZV\xf1&\xdf\x9d\x30\x97J@\x87.Be\xe1\xae_\xd4\x83\xcf\xcb\xbb\xa2m\xee\x42l\xdcG" "!\xf1\x9c?\xda\x86\xedz\xd4\xfa\x11 \xf6\x36i\xbe\xfep\x2\xb1(\xce\xaf\xd8\xc6>\x8a" "\xc0\x99\x43\xb6\xcb\xdf\xb3\xd2Gj\x2l\x0\xa8\xff\x81\xb1\xf6Q\xb9\x7f\x31\xc\x82" "\xab\xa5\xf3\x88\xcc\x1d\xb5\xaf\xcf\xf5\x99mRR\xa6\xa4/\xa4\xd9r\xe4\x1e\xe5`\x88" "\xf7\x8c\xb9\x66\xf9\x5\x11q\xc4r\xc7t\x87\x9a\xec\xff\xf0\x8b\xfd\x9c\xea@\xd7\xc2" "\x98\x92*\xce\x64\xf2\x8c\x14\xe0\xb8\x1fM\xca\xde\x81\xd7\x1d\xe3\x98=\x87\xd9\x5" "\x19.\xf1<\xeeq\xb2\xd3\xff\x1a\x88\xae\xc6q\xec\x31\x89\x17\xdf\x98\xa3\xc9\x5N" "7-\"\xa3\xce\xc8/\xcc!\x7fG1\x9a@\x90\x3\x12\xf6\xe3+Sk\x9ez\x7f\xa0\x83~\xc6\\\xcd" "\xb5\xfb\r\x41\x43q\x17Yl\xb3\x9d\x93\x82&-\xe6\xe6Sy\xd3\xa9p\x9b,\xfb\xab\xf5\xfc" "][5$%\xf0o\x88\xcd\x31\x1**AG\xb1\x12\xf0\xc1\xc0\xac\xcc\x80\x8c\xd6%\xe0\"\x8e" "\xef\x66\x66\x1fp\xaf\x96\xd3\xdc\xfe\xcd@'\x0\xe4\xf6R*\xc9\xa8V\xda\x46mU\xc8O" "e\xbe(\x10\xa1VQc\x87-b\xeb\x81\x33:i\x8e\xd7\xb6\x83R\xca\xcc\xa2\xd7\xad\x38\xab" "U\xc1\x9eOU\x82\xf7X\x18\x30/_\xda\xdf\x1d\xce\xd0\x9d\x94\x87/-H\xfb\x63l\x8e\x38" "\xc7V\xec\xeb \xf1\x94]U\xf4" "\x9b\xc\xca\xc8IgY\xfc\xc7).F\x93\x89\x43\xc2\x62\xd7\x8f\x32\x12\xd3\xf9\xd0\xf7" "\xb1\x3\x15\x7f\x42=q\xb1\xedT\xb2\xa6\x3\xf4\xc2i\x2\x99\x18\xf2\x38\xech(\xff\xce" "\xc6`\x9\xdb\x9c\x9eYSN\xab\xb1\x83\xf3\x1dz\xd4\xc5{\x1b\xdf\xb\xd2\xceZB\x18\x82" "\xbc\x10\xcc\x1b\xcej\x97\xe+Xk\xb2!V|\xcaH9\x89\xdd\xb\x8d\xec\x42L\x1d\x1f\xf0" "B\xdc\xb7\x83\x44#\xcf$N\xda(\xd2\xd9i\xb1t@\xca\xea\xf0$\xa6\x11\x9d\xb0\x10\xce" "6h!\xaf\xa4$\xd1\xb8)\x96\x9\xc0\x41H'Z\xe6\xe5%zz\xcb\x9c\xf\x7f\xc9\x80\xb3X>z\x8b" "\x1\xc4\x65\x90\xe3\xbc\x4\xeb\xa5\x65\xc2\xea\x94\xf0W\xd9\x64\xa7\x8a\x90\xea\x9f" "R\xab\xfdp\xf8ND\xe4\x34\xbd\x10\xa4.\x98\xc7\x94\x6W$4\x1f\x90~5\xd3\xcb%qa\xe0" "\x1cp\x84\xe3\xa0\x16m\x15\xce\xd6]\xa7\xba\x87\xdb\xb2\xea\x33\xd3\x9b\xd9\x9a\xfb" "\x93\xd3T\x83X\xd0\x83\x30\xe8\x7\xf8U,\xec\xf6<\x84\xf8\x5 T\x91\xba:\x1a\x62.p" "\xc2\x32\xfa\xdf;\xf2\xdc\xfdo\x5\x39\x15\x8d\x33\x6Po\x15\xb\x5\x18\x37\x19\x12" "\xa2^\xb9\x61\x63\xd7>\x9e\xee\xd4.\xdc\x84\xd6\x88\xbc\x7fw\x8\xd9\xdc\xa3H\xfa" "\xb4\xdf\x62\xe5\x80\x9b\xd0\x94\x84-\n1\xdb\xb7\xc4\xb4\x1f\x94\xd9\x46\x81\xc^" "\xc1\xbi\xaa\xbc,\x91\xa5\x95\x0\xb2\xe5\xd3\x7fGU\xdd\xfbz\xe4\xab\xf7W\xf4\xc5" "\xbc\xf7|\x7f\x95\xe6\xa6\x16\x64\x64V\xfe\x8f\x18@p\x80\xbc\xab\xbf\xa5w\x4(z\xd2" "b\"\xdf\x91\xab&\x13\x95\x1e-g\x94r\xf8\xad\xf0n\xa2\xa2\x2\x5\xec\x19\x97\"\x99" "\xa7\x8b\xacR\x11\x43\x34G\xc_X\x90\xc2\xf8\x46\xb4\xc6\x4-s\x94Q'\xf2\xe3\x91\xe" "\xca\x1cL\xd7\xa1n\xfeKK\xe3\x8a\x15\xaa\xa7\x10h,86\xa8\xca\x83\xfd\x38Ip\x13\x9d" "\x8b\x46\xfb\n\xeb\xb0\x2\xdd\"\x41\x99g/\xfa\x2%\xf\xbc\xfaNd\x9e\x33T(\xfcq\xf5" "\xf\x45\xe4\x98\x41\x9e\xdb\xe\x97\xf\x46\x89JH\xf6U\x80\x88\x1c\x9c\x42P\xfc\xef" "e\xc9\xb2\x86\x99@\x8e\x18\xb2o\xe6\xdb\x7f\x1c\xbd\xb7gVNs\xcbYT\xc6\xd6\x39\xce" "3\"\xc\x89O6\xe7\xfq\xc9\xf9\xaa?\xe2\xae\n\xa0\xe3\xf2\xe3\x4\xecZ\xbc\x66\x16u" "\xcd\xe2\xe7\x5\x19\xe4\"\n\xe2o\xba\xcb\xd0\x1dQi\xeb\x84GPu>l\xedS\xe3g\x8f\xdc" "\xd0\x8a\xb9>\x10\x6~\x9c\x64\xf3\x8b@\xb7m\x99\xb6\xcd\x92\xbd\xf4\x15Z\x1e\xa5" "\xcc\x82I\x98\xb5\x9a\xad\x6\xe0\x9e_\x15\xeb\xb2(\x8d\x66\xeaq\xb2\x96\x61g4\xfe" "\xf2yo\x7\xff\r\x8b\x4pt\xa1\x11\x1dh\xb9\x9c+p\xfcV\xe7JQ\xb0\x62\xf4\x99\x8a\xcc" "\x85\xb1\x94<\x94w\xe4\x36\xe5\xcdz\xb1\x8d\xbc\x89\x8d!\xbb\x93GZb;\xdd\xa7\x1d" "{\x89[\xa2\xd4\xc1\xfK\x90\xbf\x33Q&\xf4\xfdW\xd7:\xfaP\x17\xfk<6I\"\xe5Q\xd4\xe" "5\xdau\xfa\x89\x17\x62\xfa#@\x1d\x39&\xf.\x92\xc7\x80|to\x13\xbb\x35\xce\xf9\xdb" "\xf2\xe7nf\xa7/\xef\xf0\x95\xdaH*M\xe8\xa4 \x91pesl\xf4\xde\x90O\xb5.d\x9a\x32%^" " 0\xa7\xb3\x1bhcSI/1\xc0\x64\xa3\xc4\xb0\x44\x8cK\xfd\x44\xb8\xe1S\x84\xfd\x80\x9b" "\x87\x61\xee&\xa7\xdf\xa1u\x8dW\xceO\xb\xc3v\xeb+83SK\x15\xa8\x34\x36\xbaU9U\xac" "\xb5\xa7\xa6g\x96\xac[\x92\xdbS\x88\xbcS\xef\xa2u\x8\xb0\x8e\x82\x82\x1e\\\xf6i\xbc" "\xe5+\xb8`x\xft\x9bO8\xac\xdf_\xf1'&\xbf>\xc2t?\x1\x1L\xde\x96\xfekL@\xa0\x34\xe9" "\xea\xfc\xa2\xa3\\\xccwl&i\xe6\xad\x13\x80p\xa4\xfH\xedy\x13m\x7f\xf5~\x99>\x9\xb8" "\x1cT?\xba\xdd\x35\xf\xf5\xb5\xf7\xa4o\x6\xf\x88\xe3\xf\xe2\xd8#82\xd1\x8bl2>\xe0" "\x17\xeb\xc1\xdf\\\x83\x83!\xcd\xc8\xa8L\xab\xca\xb2\xb`\xa1\xa3\xaa\x2\x8f\x36\xea" "n\x87\xc8P\xaf\x8a\xf7\xcdP\xaa\x63Y\x3\x8b\xfa\x88\x18\x82\x1d\x2\xce\xe8\xf5\x1d" "\xab\x8c\x5\xf7\xae\x97\x97\x81M\x97\xf3\xdb\x8c\xcd\xde\x45\xb2\x1d\xbb\x15\xce" "\xe2\x92\xfa\xa5\x34\xa5\xf3\x17\xb3W\xf4\x9\x1f=\xa3W2[\x8b\x9f^\xdb\x45\x86T\x15" "\x97<\x14>^[\xaaH?\xbf-\x6\xcd\xd4$fu\xecX\xb8Lj\xe6\\\xa7\x43\x11\x7f\xf0\xf\"\x92" "Cw%a1\xa7\xf2\xba&\xa9\x11Z\xfd\x96\xc1\x82\x16\xcf\xdf\x41\xb7\"\xe\xd0\xcb?\xcc" "&\xc3\x63\x80\x0{8*\x2\xae\xae\x42\x88\x87\xdc\x8b\xe5\xfd\xd6\x30\xacW\xee=\xc1" "V\xc7\xb8\xb2\x9eh\x7f$D.5\xce\x10\xba@\x87)Zd\x1fq9\xc8\x31\xf7\xcc\xdal\xce\xb5" "\xda\xfeS|\xc1\xa9|Z3}\xe>\x95\xf8^j\xc0\xf9T8\xacL\x12n\x1f\x1e\xcf\x33n\xd3\x1c\xca" "~\xb2\x16\xd2y\x87q#\xfd\x9f\xcd\x8f\xb5\xe5+X|\xff\xc4\x42\x84V\xdd\xca\x81h\x19" "\xa8\xa4\xa2\x11\xd8\xf1\x62\x9e]B\xbaL\\5nX\xc\x8a\"\xc6\x1d\x98uR\xfa\xa9x\x93" "\x81m\xa7=B6\x86\xe4\xeb\xd4\x43u\xc2W\xf0\x31\x31\x88\x65\xa2\xf\"\x11^r\xbf\x1e" "\xb9\xf9:\xaa\x16\x9c\x14\n\x33\xa0l5\xbd\x45&\xa3\x8b\xe7\x9c\xf4\n\xd1\xef\xa1" "\x4\x11\xe8\xf3\x30\n\x8a\x8b\x97\xab\x14\xe\xe6sN\x1b\xeel\x8e\xe4\x43\xd6\x98\xd3" "AY\x97\x64\x9co\x10\xf2\n\xcd\x80#d\"\xe2\x15\xe1\x46\xd7\x44\xa2\x62\xda?\xc8\x8d" "\xc0\xd8o\xf6\x65\x12\xf4\x9d?\x95}<\\\xff\xeb\x42H#P\x9f\x33\xf1U\x5zLo7\xb5/Fg" "v{\xa9Ok\x8b\x62\x85kU?0~]#\xc\x44\xcb\xfd\xc9\xa9zE\xb1\x39\xff\xb2\xf2V^\xb0\xe2" " &\x97/\xad\xf\xb7\xb9Wo\xb6\xf3h\xb6\x19y\x94:9\x87s`\xe~\xe1\xdf\xef\xbf&\xd4]" "@\xbd\xa6n\xbb\x96\xa5n\xe9\xca\xe0\xb2\x42\xc]\xd8>$\xdb\xa9\xff\x88[\xb8\x44\xbf" "=+\xf9;\x7\x32]\xff`\xc0\xcb_\xdc\xca\n\xc8\xfbZ.\x11\x9dZ\xf2nS\xab\x8e;B\x84\x81" "\xc2\x87\x1d\xda&\xef\xb\x62\x1c\xd8W+\x91/\x9aO/\xc0\x42" "~\xd0pY/q\x10\x18;\xfd\xb2\xc4\x0\x39;\xa7V\x90X\"y&5\x1f\x7\xfe\xd4\xf3\x36\x33" "\xba\x3\xa7*\xa2\xdckY\x8eI\xb9`!\xdd\x86\x8d\xad\xf\x35.W\"\xfbqOf|\x15\xc6\x8d" "I\xc0=\x82-\x82g~\xdf\xe8o\xe9\x66\x8eS}\xa2\x84\x6\x8c\x9b\n\xed\x83\x7L\x92\xa5" "\xb9\x39)mP[\x83~j\x9d\xda\xb1\xae\xabtU\xa0\x8a\x11L\"\"\xb3\x39(Ft\xb7K\xf4\xca" "\x9e\xe0\xc0 \xbf*\x14\x8b\x43\x9cq\xc6\xbeQ\xa9L\xb6O\xbeJ~\xb2\x95ZEPG\xcf\\\xb3" "H\xb0\x62\xedOdq\xcb\xc3\xe9\xad\xd9\xbe\x9b\x96\x87\x9a\xc7\xbcq\xbc\xe0/\xd0/\x17" "\xc6\x6\x39\x85\xa5\xe8\x98= Z\xa1H\x9d\xa1<@\x89\x90\xab\xa1\xc5O/P\x1a\xa1r\xf5" "0H\rx\x9c\x84\x81\x18\xc0\xa7N\xf9\x8d_`z\x6{\xaf\xf6\x3\r\x88z\xc6\xa6I\x7f\x9a" "\xb\x38\xf9p_2\x8a\xadK\xfb\xb6\x34\xf7\x39\x38\x61w\xb0\x7f\"\xd5w\x12\x82\x44N" "^\xe1s5\xb4\xd0\xec\x86\x11|i~y\xa5\xf4\xf6_\xdc\x8\xe4\x90M\xae\xda\xb2\x0g\xea" "\xe2\x44\x8f\xd4\x30\x18I\xe4V\xd0\x85\xf3\x92\xdd\x13\x16z\xdfu\xcc\xfd\xb7#\xe2" "\x90J\x9c\xc\x97mk\x84\xdd\xef\x9d\x92\xb0\xe1_\xb2\x46\xc3\xec\xc2\xd0\xbf\x31L" "\xfb\x95wW\xb3\xa3\xe8\xe5\x80\x1fR\x6\x44\xe4`\x1d)\x1d\xa0\xf7P|\x6\xf3\xb9\xbb" "6\xfc\x1cp\xea\xa4\x44\xe1NV\xc0\xcf\xf0l\x7f\x85=\xf3m\xa9\xd8\xb6\xaf%\x44\xb8" "S\xdf\xffSZ~\\o\xc1\x45%\xc\xdd\xa2)\x95`\x19\x65\x9d\r%:\x19\xa7\xb5\x1aNS\x8b\xdc" "\x1\xf7Mw\x4\x99I\xc2\xc9|~\xc6\x39,.a\xcc\xc0\x99+f\xda\xf1\xab\x8U\x10\x63\xe5" "1\x80\xd2\xa6}\xe4\x96ql\xcb\xaa\x45\x46-\x9f\x91\xb6j\"TYb\xdd\xab\x12\x5\x11\xff" "\x8\x62q1\xb9^]\xee\xb8\xb4\xdd\x96\x43\xe7\xb2\xaf\x65\xc0\xfd\xce\x11\xf5\xf1\xe8" "\xdd\x46\x8d\xa1\x8d\x41\xc8\xc4\xf0\xe\xa7\x38\x36\xf4\xf7\xe\xc5\xf\xc3\xecm5\x8c" "\x6X\xa4&\x1cm\x15\xa5\x82\xa2\xc7\xc9\x94\xe7\x88.f\x18U\xb3R\x1\x45v\x85\x8a&_" "\xfb\xc4%\x16\x6i\xce\x15\x9d\x7\xed\xac\x4\xd0`\xb4NX\x0\xa7\xaa\xe8\xe3\x39\xc2" "\x9b\x92\x9a\xa8\x1d/Q\\F\"\x9d \x80\xd5\x91z\xb2\n\xb6\xb3O\xdc\xa8\xe4\xaf\x64" "\xed\x66\n\x31sxo\xb1\xa1\xd0\x5\xd5u\xc2\xa5\x18}?|\xfd\xc9L\xcc\x44\xa3\x8c\\\xd5" "#\xe9\xdarm\x8e\xfam\xa7\xb6\x13\x1d\xff\x34\x35\xfe\xe8\x38\xb2\xc7\xd6\xb9y4)_" "\x6 -0\x7f\xf7\x8d\x90\x66\x99\xcb\x9c[\xbb\x10\xd1\xd4\xde\xa5\xfd\xa5\xbf\xb0\x94" "\xe7\x4`p\x83\xb6\x46\xd3\x7f]\xa1\xfcz\xd2\x1b\x81?D\xd8\xc1\xaf\xea\xb6\x66U\xaa" "\xa1\x97\x3\xbe\xa2\xe7}\xf3\xbf\x35\xe\x17\xc7K4G\xa4R#Y\x19\x45+QuW\n\x0lv\x80" "\xac\x5\xe8\x95\n\x62\xe1\x1d~:\xca\x35\xa3\x97\xd1\xe1\x96\x30\xd0\x94\xa8h\x7Y" "<\x97\xf4\xc4\x84\xe4\xe0k\xcf\xf7\x8\xb6\xdc\xa9r\xe3\xa0\x0\x9e\x1c\xac\xe\xa4" "\x14\x15\x30\xf5\xc1\xb8\xae\xf5\xe1\xb9\x33\xf3\x7f\xdd\xbcK\xe2+t\xfe\x34m\x1a" "?_\xec\x8\x18\xf8\xe6\x17\x65V\x8a*\xc0G\x13\xe8(\xf9\x8c\x44\x9d\x9a\x1c\xceR\xd1" "\ra\xdd\x8b\xfd\x8L\x8d\x9\x9au\xd8\x9d\xea\x64\xd5\xa7\xcch\xbd[\x5\x93\xd9yS\xda" "\xda\x97\x63\x83\xf5\x1Y\x15\x61\x8a\xecV\xd7\x1d\x1d\xcdU\xb8\x97\x36\x39\\`\x9b" "1Z?\x1e\x12UC/\xdb\xd3\x7f\x38\xcc\x43\xc3T\xfbK|D\xf1\xa7\x31\x8b\xb~\x99\xc3\xc0" "\x8c\x33\xb9Sr{jc(\x5\x17\x83\xa0\xa3><\xd9\xe4\x98\x34j<\xa6\xa7{Qp\x96\xed\xd5" "*\xe4\x43\xb8vC\xa6\x46\xc3\xa7\xbb\x97\xf7\x42\x88\x8d\x33\xf9\xb3\x12~a\x94/A\x3" "\xc1\xdb\xdc\xd8\xea\xc8\xf9\xe2Yw0fsl\xa6S\xceW\xe8\x82&Q&\x1d\x84|\x13\x13!\xbb" "\x9d\x66&\xa1\xacP\xd0G\xc0\xbaG\xb4\x11\xdf*\x99UE\xbdh\xec\x2\x87\xcc\x9b\x31\xd5" "\xdd\xca\x87U\xeb\xeb\x10\xac\xcb\x39\x3\xab\xf\xd5x\x8e\x98\x42 D;\x84Y\xe7\xc0" "x\xda\x42\x89\xf1\x35\x9\x5\x88\x1a\xd6\xdf\xde\xc4s\x2\xb0\xac\xb0\xd4\xaf\x8c\xae" "\xd0+Kp\xdf<\xf8\xfe\xc1\x18\xf0\xfc-=\xde>IL\xd1`\xe6v\xe3\x0\xbc\x46K\xd4@\r\xb5" "\xe\xe4;1N\x5\x17\x3{\xf9q\xac\xd7\xcd\x32|\xb2\x13H\x93\xb8\xa0\x41\xeh\xdd\xc5" "\x18\xf5\xde\xc9\x66\xc7\x88L\xf5\xfd\xfetr1w\xf2\r\xed\xc0\x39\xd8y\x5l\xaa\xb4" "\xbf\x4Pb\xd3\x90Oa\\\\\xfe\x10\x9a\xc7\xa3U\x99\xc9@$\xb4\x10\x19\xb9\xaf\xd4\x4" "\xa8\n\xca\xa4\x83y)\xf5\xc9\x31v\x80\xa1=\x15z\x3\xb5\x9aU\x88\xdfy\xd2\xe1\x13" "\xf5\xf5\x10!\xd6\xf6\xf9\xe\x8b\xbb\xa2\xc2R\xfd\x10\x65\x1b\xe8\xb\xaf\xd5\x9c" "S\xa3\x36{\xa3\xc2\x8d\xb6\xeb\x9d\xab\xf1\xea\x99\xf4{P?b~\x15\xdc\xf3\xfd\x64_" "\xc5,]]\xf/\x7\xdbL%\xc0\xd1\xe1\xc0\x1\x46\xe1\xc4\xd9s\xe6\x13\xcc\xdb\xd3\xf9" "E\xc\xc0\xf5\x34=y\xf0^\x94\x92\xe8j\x1b\xb8\x89\xad\xf4\x5\x3\xbd\x7f>uCChY\x18" "J[ \xbd\x8a\x17/5\r\x84kup\x80\x39\x90\xad\xaaH\xd4\xb9\x15Z+LK\xfb\xef\x1e\x1a\x6" "\\\x8\xe0\x39(U\x97\x35\xbd\xd4\x42\xff\x1e\x83\xe1\xfa \xa5\xdaW\xd8\xbd\xb2\xff" "T'\xc0\x34\xcf\x1(\xaf\x11\x1ens\x9\x9e\x4n\xc$\xe\x80\xa7={\xe7+\x87\x83NE\x89\x8d" "GU!\xca\x33\x6pv1\xf5\xc6\x13\x61\x99\xf3Tc-\x1a\x8_\x12\xa1\xc7\xc4s\x86\x8b\x62" "\xe5\x34\xd1_T\x84\x32>c\xd0WA\x96\xa1\x9e\xf1u!N\xb3Z\x90\x87>\xfc\xfb\x92\xd6\xcf" "hv\x1d\x45\xe3~\xaa\x61\xe1\xa1\x97\x9a\x82\x0\x95\x7\xca\x19>D\xb3j\x80\x64\x86" "f\\\xed\xbc\xf3\x87\x5:\xce\xab\x97\x9b\xd3]0\x97\x8f\xc7\x65\x9a\xbb\xe8\x44\xf4" "\xec\xab\x33\x3\x31\x8e\xce\x80wz_\xa5\xa9\xdd\x91\xb3\xd0h\x4\xc4\xb4\xe9\xb4\xef" "\xcf\x7\xeb\x89\x86m\r\xd8\xca\x39\xc\xfd\x15\x98\x65\x14\x17\x11Mxwk\x1a\x1d\x36" "\xb4\xba\x17tmk\xe7\xfc\x12=G>\xf1\xef\xed\x1c;\xc1\xd5U\xf9\x14Shi\xfd[\xc\x35\xf9" "\xc8?e\xb0\xe6\xbfzb{\x92\x2\xd7\x87\xd7,`\r\xdbk\xcc\xe6\x13\xd8\x84\x92\xe1<\xa0" "\xaa\xab\x19n\x8aI\x92\x8c\x62\xce\xa4\xff\xe2\xd0 \x8e\xda\x33J\xcfG\xf2\xb\xd7" "\x93\x12M,UF\xc0?J6Ci\xa7j\x4%&/\x9d\x91\x18\xafT\xe3}2\xe3:\xb2]\xd5\x33\xa4\x9d" "\xf5\xfb\xf1\xba\xf4\xce\xac-\x9d\x37\x8c\xdc\xd1;\x0\xfd\xa4\x32\xd9\x4/b=\xa4\x1a" "\xfb\x80i\x9bU8\xa2T\x3\xb0\xb3\xea\xbe\xc9\xe8\xef\xcf\x42\xfe\xf3\xea\x9f\x91v" "i\x2\xcd k\x7\x87\xc1\x87\xd5\x37\xb`\xadm\xcd\x0-\xe2\xde\x8d\xcd\xc0\xb4q\x9ay" "|^&\xba\xa6ve\x1m\xa0\xd9g\xfa\x13\x46\xf9X\x8a\xed\xa1t\xca\x0\x1b\x31!6\x17\xfe" "\x19\xea!\x8e\xc2\x35\x97y\xd9y\xe2\x66\x31\x66H\x9c\x6\x99\x32\x30\xb0\xd0ys\xa1" "\x17\xc4\xe3\xf4\xa4\xc9<\xf8\x42\x82H\xddS\x89\x41Mg\x9cidABg\xc7\xfe\xa1~5\xb0" "\xce\xe4Vfz\x9b\x18u\xc8\x1b#\x2\xbd\xde\xa2\x81\x8d`\x19\xfc\x16\"\xa8 Q\xf6\x5" "\x84\xab\xc9\x4\xcd\x91\x86v0]\xc0?\xfb\xcc\x64\xfd\xda\xc8\xd8\xaa\x9c\xe2\xea\x0" "\xd6\xc9{\xc6<\x8a\x61}\xed\xfc\xe@wVIC\x8e\x9f\x61\xaf\xd1y^; V\xb\x1\xbe^\x9\x83" "\xf1\x36\xcfH\xab iT\xe4\x1d\xee\r\x9d\xdd\x95=\xfd\x1\xca\xebV\x91Q\xd6\xbc\r\xfe" "\xf2\x9dp\xfa\xe3\xe1\x98\xe7\xed\xd8\x92,\xe\xb\xcb\x8b\xcc\xf1\xc0\x16\x14,\x1a" "\x8b\x33z\xfaz\x5\xa9\xd7SK\x18K\xf3\xbf\x82\x7f\x37\x1e\x9b\xd1\x9aq$N\xca\x1b\xa7" "=HL\xd2\xfa\xd5M\xb2\xf0\xee\xfb\xd5KSn\xbc\xb5\x9Nk\xc2\xf5\xb2\xaa\xe4\x1f\x5\xb4" "\xb3\x11\x11Xv\xed\x42\xc3O\x8e\x64;S7.?cP\xdb\x8a\x38\x44X\"\xea\x9a\x33\xe2\x7f" "\xb0\xcc\x42\xce\xdc\xd1\xfe/\xdfr?\xc4|\x99n\xe3V\xc4\x2\x11/$\xd0\xaf\x89\x9b-" "\x0\xbe\xa1\xcf\xd4'\x99\x8b\xd2+*\x9\x4mg7\x81\x44H\xac\xfb\x10\xd3\x87T}p\x9\xfb" "8J\xf0V,\x85iL\x7\x15\x84#m\xf\x1f=?\xcd\xc\xfb\x38\xb7|\x81\x88\x90\x61\xe6h\xba" "z\xb3z\xa6\xfX\xa3\x96}\xe2o\x93\x9by\xcb\xf1\n\x9d\xcc\x42\x85%\x61\xd8\xd6uO\x1b" "f\r!j\xab\x1e\x13?\xba\xa3!\xc5n%\x84\xbe\\\x9b\xae \xcc\xf0\xe\x8d\xbem\x9c/\xce" "\xbe\xba\xd9\x45\xc3\xc0\x41\x1\xd2\x38sQ\xf1\x32\x62\x87\x86\xf6\xd9\xd4\xca\xb8" "4\x19(\x8d\x31\xf9\xbc`\r\x96\x64\x12\xe6\xaa\x45|\xe6\xca\xd2jL\x6q\x9{\x98\xc2" "8L\x81\xdd\x8b\x9a\x32\"\xd4\xf4\xbb\xdap\x17\x89\\>\xdc&f'y\xae\xe7@\xd9\xd7\xe2" "A\x85\xfb\x82\x19p\xb0\xa3\xa9@A\xa6\x9eH\x5\xec\x88\xee\x1e\xe5!\x98\x15\x36\xf2" "\x84O\xb8\xf5\xef\x64_g\xd4,\xe5\x14\x8e-\xde\x43\xadZ\xef \xe\xdb:,xf\xc9\x84X\xa9" "&f\xe5\xf9\xe0p\x17\x8b\xcc\x39\xf6Z\x89\x31\x2\xa1\x5\x64\xafN\x8c\xaa\xa5\x7]/" "\x8c\xd7\xfa\xb0@\x1c\x3\xaf)\x9e\xa3Q\\\xc9\x30\x66tN\xb5\xaf|\xf0\xed\x6g[\xf0" "I\xa6\xe3\xc2\x11\xa8\x9e\x16\xde[\xf0\x44Z|\xcan\xe8\xeb\x3GEIPH]\x88\x46\x6\x65" "\x1eX\x87\xfe\x8b$2>*\xa1m\xe2/\xc1\xfc\x8cO\x6\xa8*\x1f\xdeWX\x97`$\x6\x81\x97\xe1" "\xf4PnM=\x8a\x16\xd4\x4\x61\xa4Xc8\xb3t\xa5\x92\xdc`3D\x2\xf7\x63\x88\xadjE}\xc3" "\xf5Nai\xcfz\xe3\x95\x96v\xe9\x66\xa4V\x9\x62\x10U\xec:\xf8\xe\x18&30\nD\x18\xe3" "Jf\xdd\xfakV\x9eZ\x13\xc9\x11[_\xd3\xec\x1c\xeb\xe5\xf\xba$\x7f`\x80:\xa8\x39v\xf0" "\x1\x17ScB\xdc=\x98\x90\xc4\x9b*\xc7\x1\xd3p\xe4:\x95Q\x18\x96x'v\xfp\x91\x46\x9c" "T\x6\xf0\x8f\x18\xd7\xe3T\x81H\xcf\xe\x31+\x1d\xc7\x1d\xf6z^z\x16V\xcf/G\xf3\xaf" "\xf3\xddP\xff\xc2\xfc\xda\xb7\x17r\x85\xb2\x9c\x17\xca\x43\x1\x9f\x62\xaco\xbaR\xd1" "I>\xd7\xc4'Rdp\xac\xc8\x38\x9b\xae\x82wYIX\x90\x8fQ{(c\xb8\x32\x92\xebZ\xb3\xf5\x7f" "\xff\xb0\x83\x93\xca\x61\xf\xb1\xfe\x90]\x88\xa0\xa1j\xc3\x95\xe2\xa2\xa6\xdd\x3" "=j\rh\x99/\x83\xb.\x1b\x95\xfe\x35{\xf6rqn\x88\xff\xb9/\xfc=b\x94]\x1e\xad\"\xbc" "h\xc5\x1e\xe0\xe1\n\x43\x1\x1d\xb9LDhZ\\Ev\xf6\xef\x44\xcb\xfb\x45\xf2\xa4\xbf\x11" "\n\x1\x65}\xb5\x1f\xd4\x99v~x\x5\x81\x99\xb3\x1d\xfd`\x81?\x1a\x34O\x86(\x9f\x93" "x#\x1d[\x15\x1c\x92\x38^6P\xb4\xfe\xb1\xdc\x91\x1\x8e\xab\x84t\xcb\xf6\x9f\xdc\x14" "\x96\xa4\xd0x\xd2\xc3Q\xc8\x19\x64Q$z\x9d\xcf\x81\x17\xe5\xb6\x37\x37\x1d\x8e\"\xe2" "H\xc6M\x99\x90\x15\xc3\xfd#\x11\xe9\x95\xb\x8e\xe0\x92/\xbd\xd3\xd7\xbf\xf7\x66\xbf" "\xe9\xe7\xce\xb\xe1/1\x8f\xf2\xa7\xb5\xa9\xc6\xd0\nT@\x16\x9\x30N\xd2\xc5_\\\x1e" "\xac=K85[\xbd\x85\xd6maco\xa6\xe3\xc.\x82\x82\x93v\xbe\xc9y\xa6\xfe\xee\x4\xe\x45" "#Yv\x8e\xcf\x90\xccS\x9aTo\x17\xae\x90lv\xf1O\x86\xffiw\x97\x32+\x5\x1e\xb3\x11\xa7" "Y\xfe&\xc\x1e\xee]\xac\xf3\x83\x81j\xaf\x12\x94\xcf\xfa{\xf8zM\x9b\xc5\x95\xee\x8f" ",/\x86\xfe\xee\x11\xad\x95\x9d\x86\xf2/\xda\xf4\xce\xc0\x98\x94*W\xe5x\x13\xa0\xfa" "\x99#\x9e\x99O\xff\x35<\x1ex\x1d\x66k\x89(\xcf\xc6H\xfc\xf0\x86\x9f\xc6\x84h\xbd" "\xbd\xa7\xd2\x80\xdf\xab\x8b\xb:L\xa3[\x7Khm\xe8\xd3r\xc6\x1f\xb3#\x5\x16\x9a\x1a" "\x99\x12\xf6T\x1d\xa1l\xd6\x31jn\xa4QRGW\xbe\\\xf6\xe8 \x1\x1b\xe3\x85\x9f\xb8\xb8" "W\x8c\x10\xf\xf0)h\xe\x5\xf0\xe0\xbf\x11\xd3?\xe1\x94`\xc8^\xa5\xe4\xc0\xef(\xe2" "\x94\x7\xc8\xaek\xe0\x1c\xfa\rP\"\xbf\x9f\xb0\x14\x16\xff\xf7\"\xa7\x84\xdf\xc8\xfc" "\xe3\x30\xec\x95sz\x85\x44q\xd3\x34\xfd\xc5\x8f\xab\x42\x86z{b\x83j\x8bVFn\x9al\x12" "G\xd4n\xba\xff\xb9\x5\xcd\x43!\x97\xfY\xfb\x8do\xf6_\xdd\xd3K\xf9\x13\xad\x32.hE" "\\_\xf2\xd2<\x1a^\xaeh\x7f%\x9b\xc9\x82\xb6\xa3\x84\xd3T@\xf7\xc6\x93\xcfP\xb9\xec" "\xac\xbUx\xca\xee\x87X\x8bV.\xb6\xb7\xf4 4\xc9\xf2\xe5\x45\xec\x86\x63\x16U#T\xeb" "7(\xc7\xd2\x65'\xedu\x17N\xaf\x63^\x4\x8b\x8\xdc]#\xe8\x89\x81\x7\n\xd5\x64\x1a\x65" "/#D\x95n\x9c\xf4\xc1ne*\x99\xf4\xa6\x44\xd1x}m6St\x89\xdaMt\xe6\x1b/\xc4\xdf\xdf" "\x1d\x1d\x9dX\xf9\xc2l^\xb6\x32\x0Rj\xfd\x16\x8a\xc5}V\x11\xad\xe4\xd4\xa3\x82\xfc" "(\xbb`\xf9\xe7\xd6&\xa6\xc6z\xfb\xcc\xd1\x18<^<\xf2\xef!\r\xb\xf5\xcf\xa7\xbb\x10" "\xfa\x38\x87\xbd\xd4\xcd\x96\xee\xea\xa8\xf9!\x9a\xa2\xf1\n\xbc\n\x96\xc;W\xc0\xec" "\x3\x13\xae\x10\xcc\xff\x1fR!$\xcf\xc8\xd2\xd4\x9b\xfb\xb0\xc1\x93\xea\xff\xc5\xb4" "\x8f\xb3\xff\x30\xb2\x1c\xb7o\nL\xf\x13w\xc9\"\x31\x45\xbb\x4h\xa5\xd7\x1b\x9b\xc2" "Xs\xea\x12\xe1\xc6\x3\x34W\x1cg8\\\x0\xd0\xb5p\xd3\xff\xc6\xc7\xff\r\xe6,\x18\xc3\xad\x39T\xea\x9c\x84\x61X`1\xd3i\xe8\xb9\x9eS@\x8ay\xd6L4\xebZV\xde\x8ag\xde" "\x91\x83y`\xe9\x8a\x66\xfc\x4\xdf\xa0\xeb\xde!\xdb\x0\x32\x34\xbbxf[\x3\x9d\n\x46" "\x9a\x2!\xbdT\x1a\xf7\x14\x9a*e\x9c\x30\x1\x32\xc1\x45\x81\xefvo\xff\xbe\xcb\xa8" "\xb5\x8a^\xb3\xf9TF\xde\xf4\x9a\xf8\x63\xa8\x11=\x17\xb2\xe7\xe6\xec\xde\xaf\xc3" "\x83MM\xf9\x0\xe3GU\x96\xe8o\xbbN)t\xc0\x90\xdbJ\xd6\x1as}a\x1d\x92\xb4SZ\xc2\x91" "\xc5j\xd8\xb1\xc0\x31\xd2\xf9\xb5\x5\xbbwQ{s}p\xab\x37#\xdbR\xae*\xcc\xd5\xdd/at" "#\xed<\xc3\x9c\xa8\x82\xef\x41u{\xf7\x15\x18\x6\xa9\xb8\xb0\xf3\x12\x80\x88\x63\xe3" "g?\xb5M\xe9\x39\xb3\\\xde\xca\x7f\xbcM\xc3\xbd\xf5\xa5\xf4}5\xe3\x45\x91l96l\x8b" "OC\x9c\xe1\xc6\xf1\x83\\\x32\xb\xd1\xe6su\xb0;]\xe1\x8c\x93%o%\x17\x61\xa4\xc8\xce" "\xc0\x10\x19\xc0h\xe3\x44G\xbc\xc5\x3\xb9W\x1f\xe8\x0\x6'\xa6\xb3\xda\xd5\x85L\xbc" "\n-i\xe5\xa8\xf4k\xc7\x8fj{\x14\"\x33N\xc7\xa9\x8a\xbe\xfe\x9b\x83\xe0\x1d\xcf\xb7V\xa1\x37o.\xdc\xb7\x18\x9dx\xcd=l\xa5\x86U7\xee\xc3\x1c\x17\xd8" "\x1`^\xfd\x86\xb\xb\x62\x94ri\x5\x88\xd0%u\x2\xc6\xf7\xa7[\x9a\x1c\x1b\x39w\x81\x32" "\x98\x32\xcf>\xc4<\x9\xf1U\x9c\xd5\x62\xc4\x8f\xa9P\x2\x95\xcd;\ny\r\xd3\xfc\xd4" "hJ|z\xc4\x9a\xc9\xbf\xff\x36\xb3\x9a\x9f\xb1H\xbc(\xd3y\x7\x43\x39\x43\xcb\xbf\xc" "\xbd\xab\x46\xd3\xea\x86\xdc\x8f\x81\xc8Y\xc5-\x15\x30+\x94\xa9\xb5\x1c\x19\x9bq" "\x4\xde\xec\x9dv\x9c&4\xce\xcf\x8bp\xc\xe9\xc0\x41R\xccY\xc9\x32k\xda\xcb\xec\x43" "\x12\xde\xed\x92\xdd\x8z\x1cH@\x86\x8d\x9f\x97\xca\xc0\x46X\x1fv/u\xe8\xd2MdE7\n" "?\x1e\n\xe7Jdx\xd9\xda\xc3~\x7f\xa5\xbe\xbe\xc0\xa1\xe0\x81\xaf\x89\xc1\xbb\xf7\xf5" "\x1e>.\"\xc8\xc4\x5\xe8g\x1b\xa8_\x1b\xf0\xdfy\xa4\x65\xda\xc7\xec\x7\xf7\x31\xe0" "\x6\x32\xe0\x17\xd1\x90\xa9\x9d\x83\xe2~\\.c\xd7\xda\xbb\xa2;.\x88\x33Lcr\x1a\xc5" "\xa4\xcb\xc5\xd4_L\x17rY\xf3L.\xad\xe0\x1f\xa0\x8\xaf\x65\xeb\xc6\x1\xd8\xdd\x16" "Cm\x86\xaa\x94\xc9\x9f<\xc0\xa2\xf8q4\xe7;\xf2/\x10\x8b\x82Z\x89\x63\xb4\x9clhTt" "\xaf\xe4\xa5\x42\xc8\x64\x1d\xc0\x37]~\xfe\x9a\xc1\x16\x8d\x97\x0\x45\x9b\xe5-\r" "\xa3\x99\x2>\x14\x19i\xf2\\\r\xac\x46hSKfG\xec\x85\x45K\xe9\x45\xe8&\xb2m\xe6\xe3" "\xc4XK\x97\xa3\x8e+@\xa0\xd2\x34\x81\xbc\xa7\x80\x84\xfe\x80\xe0\nq\xa7\x90\xbf\x31" "\xdf\x46\x8a\x43^\xcc\x88\xe6\nW\x86\xb\xbc\xa3\xd6Y0\x18n\x99\x17\xcb\xd2\x9\xc2" "0\xe8\xf8%Zz\xbc}?\x4:\xe4\xd7\xad\x63\xd9\x98\xb\xed\xf0\x62\xb7\xd5\xc2\x98\xc4" "\x2%\xb6\xd0?)\xa0\x33\x9e\xf\xca\x2\x13\x8eRo\x6\xb9\xefG\xf5\xe7\xa8\x6\x8a\x84" "l\xfd\xe2\xbf\xde\xbd$\xf5\xa7:f\xc0y\x18\x66*\xec\x80\xb4\x32\x46(O\xa4\xe2\xee" "\r\x9a\xab\x17+\x1eY\xa6\xcc\x46\xb8\x1\x14\x9d\x8c\r\xf6\xde\xc9\xa5]\x8e\x1b\xe" "\xfd\x9d\x30/\xf6\x18\x7YD\xcc\xcbh1\xd3\x36\xb1\x16\x17\x10{\x5\x30\xd0\x98\x85" "\xe5\xca\x11\xa5\xf1\xfc\xc8\xd6\x9d`=\xa1k\xeaQ\x11mB\xca\xb1\xaa\x1eM{\x9bMy\x99" "?+\xfeS\xea\xc9\x4\xfe\xb7\xb-3\n\x89x\xe\xac\x10\xd1,\xc0\xc3[\x83\x99\xf2\x18\xac" ")v\xe5z&\xba\xd2\xc\xe2\xfa*\xe2\x36=?\xd2\xa8\xa9qtuV\xf2\x95\x9d\xa7J\x89\x63\xc2" "\xbPG\x11\xae\x1c\xb0\xd0\xc0$W\xff.\x9b\xf6\x96\xb1Y\xaf\x3\x1d\xd5\x15_!\xc0\xf5" "T\x9b\x4q\xa3\xc5\xdc\x89\x18\xb6u\xce\xbc\xb2>)2+\x95\x9a\xbc\x5(:p.\x87\x8d\xe8" "\xef%\xeav\xf<\\{{I\xd3\x98(=\xe2\xed\x83\x7f\xd5\x9f|\"\xd6,X\xfe\x44H\xb1\x4\x9f" "\xde\xbf\xc8x~g\xd7\xda\xfe\x97t\x97\x9b\xb3\x80\"T\xdaY\xbc\xc0!\x9f\x98\xc2\x19" "\xf8M\x99\\\xa7h\xb8\xb5\xd9\xd4\xa3%%\xdf\xec\xe0\x3g^\xe4\xbd]\x8d\xff\xc1\x10" "%\xaf+F\x8f\x92\x7\xb5\xb2\xb4#I\xb9\x82\x32\xba\xc0u\x97X\xc1\xf4\xa2\x83@X\x15" "\xbdqE\xc9?\xa0\x8f>\xd2\x82\x66U\x5:<%Y\x7=\x8a\xcd\x19\x9d\xea,[\xa5\xf6\x16\xa2" "\xe4\x85H\xb4\x37\xe\xc7\x34\x93\xba\x7\xe1\x97\x16]\xcawD8\xb0vhg\x81\x9c\x11T\xd1" "\x95\x9f\xe6\xe0\x1e\x63\x12\xe0\xab\x91\xfc.+\xd2@\xfc\x86R\xa2\xd4V\xa1\xde\x7f" "4\xef\x37*SyMLN\x5\xb\xf3\xca[{\xd2\xf1\xb8\xde\x93\xb4\xc8\x0$\x85\xcb!\x9a\xd2" "\xd0)s\x9f\xd3\xc8\x1c\xc6\xe7\x8e\xdf\x38r5v\x1aW\x14>\xed\xe5\xcc\x88\x7f(/\xec" "\xd2\x61\xf6\xa2]\n~\x15N\xcd\xf5\xdc\x38\xe4&\x81\x1b\xe8j\xaa\x45\x85w\xe5\xe0" "\xc5\xf0\xf7Z\xaf\xa9\xc4\x1e]\x1d\xc9\xd9\x1e\xcdy\xb5\x14\xf8\xcd\xf7\xa5\xf1\xa1" "\x89G\r5\xfd\xf4\xf9\xb8x\x88y\xcc\xbd\x91\xb4'\x82.\xd6X8\x9e\x98\x1e\xe\xe5\xf7" "\xfb\x87i*>>\x93\x1d\xf8\xa1\xd1W>;\x1\x66 B@\xb7\x8\x0\x89\xa0\x9e\xf7H|\x9a\xee" "-f_Z\x82\xf9L\x87\x7f\xb5\xb0\xdcS\x1c\xeb\xf1\xe7\x1c\x65\x92\xce\xa2@\x1eKQ\"\xe5" "\x9\x1d\xf0= =\xf9y\xb9\xa6\xef\xba\x12\xe2\xf6\xb4\"\xfd\xf1]I\xac\x9\x14\xd3r\xd2" "\x1e\x87\x1d\xe6\\\xbe\xcd\x10_\xd4\xa3\xe4qK\x9c\xca\\h\x3\xfa\x39\xdb\xb0\x15\xea" "\x8a\x88\xbey\x13P.V.[\x17\xb\x87\xbf\xc8W-\xc9\xdfI\xad\x63iC\x11\xef\x13\x34\x44" "K\xdf\xbL\xa3$Rq\xc1\xf7\xa4\xd7\xfa\xf1p>:\xa0\xe1\xea\x8d\\n\x82\x1b(p~\xe0\xc9" "\xb4\xf2/#yo\xe8sV\xc5\x8a\xe2\xca\xdc\x19\x1fLX\xe1\xfbX\xda\x3\xb4Z%\xac\x95\xdb" "\xae\x13\xa2\x93GB\x17\xbd\xb2\x14t+\x9d\x9dj\xf3_p\xfe\xd2\x89\x19\x42\xea\xce>" "b^U\xff\xb8 T?\xbb%\n\x6-=9[\xc0\xf2\x19\xec\xfe\rvhj\xc1H\xbc\x41Gj\x88{\xc4\x94" "\xdd\xbd\x39k\xe2\x0\xfd>\x3\xcf\xa1.\xc9\xafk\x93J(\xb4\xd7)\xf\xf5\xfa\xfa\x8\x8b\x1c\xec\xcbl\xf5\x1aX\xda\xad\x99\x8f" "\x8\x39l\xdf\xd6\x8fZ\xbc\x9c\x1c\xcb\x8f\x65\x14\x10ws\xc6\x9c&\x87>\x88\x9d\x1f" "y\xd1\xe\x86i\x10\xe4hA\x86\xfc\xd7\x1c\x96Z\xdf\x62\x39\xba\x34\x18\xb3\x13\xa2" "z\xd6\x32\x30\x9i\xb6\xf2\x84Q\x93\x66\xed\x85\xe7\xcd\x96\x8d\x64\x82?\x8cY\xb5" "\x91\x1ar\xd0\xa2\xe\xb7+`:a\xe3oR\xf2V\xff\xcd\xf7\x6\xb4V\xbM\xfa]\x91\x8f\xbc" "S\r\x83\xa4\xb3\xc0\x1b\xdd<\xb4W.$$-\x14\x1b\xf9\xe7u6i:\x4\x7\xd0\x2\xe0\x9c\xda" "[\x19[\xf1\xcc\xf4\x30\xae\x98$\xc0y(\xa0P\xd0\xb4`\xf2pK\xe8\xf9\xe6G\xa4\x88LE" "g\n\x81\xea\xcf|\xc0\x38\x64>\xb0\xff\x18\xa3v\xffo2\xb6\xfeO\x19rs2\x7f\xbb\xde" "\xc6\x44:)\x9c\xadK&\xf7w\x8a\x99\xf6Z\x11\xbd\xe0G\x15>v@9\xed\xb2Q\x93j\xa4=\xee" "P\xdd\xfd\xf8\x85\x65\x19\x5j\xaf\xc4\xc5\xaeo Q\xaf\x5y\xa9\xac\xd4\x1d\x0w]}\xbe" "p\x2,\xc2\x63\xdc\xa5\xe0\xa2[\x9c|O\\A\x85\x87\x66k/\xe2H\x16\xb1\xe0\xec\x92\xf9" "\x7O\x14\x3\xbb\x83\xaf\xc3\xf1\xd5,\xa7\x9c\x38{\xde\xf8\x64\x36n4\xc9\xb\xe5/z" "\xa0\x99\x35\x37:\x7\xe4\xe0&\"Nv\xf9\xec<\xb9\xe7\xed\xe5\r\xef\xdaH$\x8d\x61\xf3" "\xce\xc8\x80\xa3\xb8\x84\x33\x6\x37]\x97\x11\xe5\x86\x45\xf3\x62[\xdb\x8e\x87\x5" "-\xa6\x7f\x97\x94\xefJ\xf8\xdb\xb\xcf\xe0\x6w\xc3\xa2i\x7\xdc\x65\x1b\xc8\x38\xc4" "\xe\xc3\x9e+Z]\xc0\xdb\xd3\x45\x94Jl2\"`\x89\xd6\xb5\x9a" "\xad\x42\xa8:\xb4\x1b\x43-\xb4\x62\x65.)\x81\x37@\xf4h\n]K\xd4{\x18\x32\x8f\xaek" "\xdf\x42\x0\xcf\xa4\xce\x37s\x80\x9b\x45\xe8\x88|\x9b.B6\x98\x9flH\xd6OY\x86\xf5" "c\xd9\xa7S\x8a\x87\x16\x8/\x81\x93j\xeb\xd0\x46\x1eoK\xd4pCm\x8bvV\xf0\xfd\xf8\x91" "\x8\xe6\xdd\x2\xab\xde\xf9\x7s\x1d\x45\x8di\xb\xc6\x8\xea\x9c\xed\x9\xeb\x1end\xc0" "y\xcz#x \x1c\xe9\x97\xff\xe0\x31vy\xee\x1dN\xe9\xf9\x11WD\x93#\xe5;J\xda\x80\x96" "\xcd\x62\x8bXa\xbfyEC\xa9\x8f/\xa2\xabT\xff\xf%\xa1=\xad\x43\xda\xf9\x39\x43)\xb9" "Z\xa5<\xa3'I\xfe\xcb\xb+\xc0\x35\xdd\x1e\xbdS\xff\x9f\xb5\xad\x8b\xce\x6\xcd\x89" "\xe5V\x80\x91\xc1\xcc\x31L\xfb\x1d\x98!\xd7\xf9\xac|U\xf5^\n\x16\xe3\x9a\x87\xd4" "1H \x1b\x92\x8fP\xbf\x80\x99\x98" "\x95y6\xd3\xbfj\xbc$\xb0\xa3\x97%\x8f\x9e\xb4\xdc\x8f\x65i,\xb0#\xd9\x9\x1f\xb1\x80" "\xc6\x94\x98\xcd\xc\x8\xbb\xeb\xad\xc8J~\x0\x16\xe8\xf8\xbe\xa3%\xd9$\xeb\r\xf8." "u\xd2\xcc,\xcb\xf0\x39\xb1\x19\x34\x36=C2\xc5\xfb\xc5\xecUk\xe8^\xe4\xe7\x7\xcc'" "S\xcc\xc4=.\xd5\x5X\xe5\x1a\x10\x42!\xc9\x32<\xdc\xb0\x19\x9b{\x83\x45M\xe3\xfd\xc8" "\x10\xd0\xf3\x62\xc0)\x9f]\xd9\x81\xb3\x1d\x8e=\xda(O\xef\x9d\xc8\xf9\xc8\xde\x13" "\x8d\x30\x65\x43z\x7f\xe8\xc3\x5r\xad\x6\xd6.\x85'\xad\x37\xae\x39\xaa\xb0\xb2%\xf7" "j%\xf6\xc6PRA\xeds\xbaIL\xf9#\xe9\x19\xf6\x88\xdd\xeb\xf1\x93\xe1\x88\xf8\xc4\xc1" "T\xf2\x16\x31\x8\x7\x63\xb4\xd0\x91\xe8\xad\x1d/\xd6\x64\x9e\xc\xd9\x36\xe\x8d\x1a" "g\xa5\xb5\xfa\xfcgT|\xa3\x1c\x95\xa5\xea\x8dN\xb5\xd6\x8b\x9fme2\xdb\x9bTXG5\x95" "XT**\xe5\x8c\x9\xf3\xbd)\x18\xef\xbe\x16\x99\xe9\xc8\xf2\xc2\xa1\x1e\xa4\xd2$\xc7" "&\xd2\xac\xd4\xa8\xd8\xab\xae\xdc\x65\x88\xcf*\xe5\x66R\x8b\x94\xf5[\x82:*\x1f{\xe1" "\x90\x0\xf3\xe7W\x9d\x9N\x4pu\xdf\x18\xc8\xc8hv\x2\x95S;&\xeb>\xd9\x6\x35\xb1)\xc1" "z\xcag\x9c>\x88\xb0i\x98\xceZz%D\xb7\x0\"\x9fZjPK\xd3\xe4['dq\x95\x9c\x8a?\x81\x91" "zSB\x87\x39\xb5\xef\x9e=F;;\xa7\x31\x84H\xe2\xa3\xe7\x95 \xd2\xd2\x45\xa2\xa7/1\xff" "pp\xb6\xe4\x62N:^!k\xd1\x3\x64\xc\x8d\xf3\x87\xe4\x9ds%)\xc6\x11\xf8\xb9q\x7?\x17" "\xeb\xd2\xf6\xeb\x18\xf9\xb7Jg\xe1\x99y&\xdf\x17\x8dL\x9e\xde\xd4\x35\xb9h/\x1a'" "\x9c\x81\xbb\x9f`\xda\xfe\x12XE\xa2\xff;\x2\x97\x9eT\x81\xc7\x8a\x45\xc4y\xbe\xfb" "\x9f\xef<\xe2\xba\x9b\xc4lw\xb5\xb\x3\xe4\x8d\xa6\xd1{v\xf0o:\xd1\x18\x37\x1a\xdc" "i\xe1x\xc5+_\xb4\xb2\x61\xc9\x31\x18t\xed\x7\xddm[2&\xa0\x5\xfd\xd7\xa6\xd5\x38H" "\x9\xe7\x6?\x3l\xde\xa4\x16\x19\x12&5\xe8\x35\xd2\xd7L\xbbj\xa9\xb3\x8c\xaaM\x81" "\x9c&\xe9Q\x15\xfe\r\xba\xb4\x19\x8f\xc5\x83\x8f,\x91\xb7\xa8{\x7\xd7\x34\xc6\xd4" "\xf4\xf8\x34\x44\xc1\xe9\n\xa9\xbf\xc9\x8\xa2\xba\xc4\xb3\xde\xf9\x15z\xfc\xa5$\x8f" "-\xa3\x1c\xa8{\xd3\x63\xac%\xe9\xe7\x7ft\x1dK,n\x2\xf0I\x87\xa6\xf4\x9d\x30\xe9\x3" "\x8c\xef\xc4\x1b\xa1r\xddgZ\xed\x8b\x39!dA\x11\x44\xe5\xb7\x38\xf3!\xb\xe\x66\xb1" "z\x13\xcb\x96\x31\xc3=DHNy*|\x8-\xd0\xa5\x38/4\xc5\x63vS&\x1b\x1e\xb6\xd2\x3[\x8" "\xb4\xd9\x1f\xa9\xabw\xc\xaf@\xa1\x3\x62\x95\x11\xf7\xb4?'C\xd7\xe5\x83\x43=\xec" "\xfb\x19\xc2\x1f\xd4\xfd\n\xfc\xc2*A\x19\xe7|\x87\xbf\xe6\xfeP\x6\x8b\"G\x90\x15" "\xbeZ\x9f\x6\xbe\xabM7A.\x6*E\xe0\xcb\xcd{\xb3\x9f\xeet~\x96\x30oy\xfcO.\x89\x42" "\xdf]\x9d\xa0\xe5Z\xac\xcd\xa5G\xda\x19\xd3\xb\x84\x4\xfa\x12\x12\x98\xb4L\x9c\xce" "\x19\x8cp\x8ci\xa8\xd6\xbf\x17Y\x1c\\P\xd3\xfc[\xe6\x96\x1fz\xba\x8f\x36m\xae\x95" "z\x1c\x37\x30\xdaJ[O\x3Z\x92tg^\xe3\xbb\xf0\xca\x8c\xe9\xd8\x34\x9fP\xca\xbb\x1c" ">\xa4\x94\x8a\xbeo\x9f\x14\x35\x92\xf1\xea\x95@Ni\x9\xa9\x9\x16\x8e\x32y\xa9W\xae" "\x19$$\\5c1\xa7^p\x8\xbe\xe9+\xea\xa3\x4\xba@\xb7\xc3\xf4\x8ft\xd9\x1\x8b\x32G\xdf" "P\xeb\xd7\xceT\x1d\xa4\x8e\xcc\xb1\xb0\xbeQ\xa4U\xc3\xc1<'\x9dM\x86v\x7\x8c>\xbe" "C\x8t\x8dR\xc9\xb0\x41\xd3\xe7$Lt[\x1f/t-\x1\n\x9e`i_>\xc4\xfd\xc1\x5\n\xc0\x82\xb9" "\x5\xd6\xa5~\x8f@z;G/s\x10\x11\xa5y\x89\x65\xb7\xb1\xa3\x7\xe2R\xfe\x2\xc8\xf7\x9c" "\xee\xdd\xebn\x16_\x1a\x94\xd7\xff\xf1\x8d\xdb\xdfyG\x7f\x14\xe9\xe9\x39\x81\xab" "\xd2\x0\xfewq\xb2\x9d\x1d-\x12\xe\xe7\x9d(\xb9T8\x18Rp9\xact\x8^\xaf\xf2\x41\xb5" "m\x8\"\xc\x95\x8b]\x9c\x87\xc0\xc0J\x14\xd5*\xfdG[T-9\x1b\xc5O\xf3=\xef\x8d\x94\x84" "\xaf\xf6\x87;\xee\xd3-\xdaK7\x11\x12\xb5#\xb6\xce\"\xb4\r\x1b\x41kd\xc9\x37\xf\x1c" "\xdf,T\x8fL\xcb\xe9\xe1.!\xc3l\xc3\xeaR\xda#-\xcf\xb6_f\xb2+^.\xc0HRQ\r^&N\xe9\x39" "\xbbg\xae\xc4vK\x87\x6*\xeb\x7fh\xb@\xbc\xee\x4\xad\x45\xc7Q\x9e\xb3\xb6\x19\x9c" "\x9e\xe\x33&aF6G\xf2\xfb~\xdf\x30>\xfe\xf8H\x91\xce\xbc\xf0\xfa\xc5\xf7#\xa9\xd0" "Gl?\x8c\x9&\x4\xc8\x7f\xc6\x9cz\x90\xf4\xd6J\xe4ZG\x8e\xe8\xba-\xf5\xf\xb9?U\xa3" "Ta#\xf0\xb0\xe2\xc1\xc4\xc\x98\xea\xae\x9f\xf&\xb8\xf8\xf\xfenk\x94\xb7\xe2}(\x84" "\xd5\x8b\x8a\x11\x96\x62-\xf6\xbe`\x8cUi\xd7\x86K\xb7V\xdf.\xdd\x18K\x90\x81+D\xed" "J2\xd0\x1\xc3\x13\x83\xa4\n\xee\xe9t6Q\xf7\x95\x8\x46\x15\xc4\x8e@-\xbc\x1\xc8\x18" "\xd4w\xea\xc0\x34w\x95\xcb'\x92\xe9\xc1\x1e\x8f\xd4\xa0.\x19N\xed\x1c\x91\x9d\x45" "\x98\xfe\xc0\x3\xb6\xd9\xa8\xa0\xbc}E`G\xa1\xc0W\x94S\xfc\x1d|\xb2\xd1X\xd4\x66\x93" "\x9a#\xd7\xa7\xb8\xab\xed~'w\xect\x87\x97>s\xf2&m\x9c%\xc\xe3\x7)\xe3\xc5\":\xd9" ";\x9a\xe8\x44;5q\x1e\x44j=\xc6`\x12>\xd4\\\xe1\x94*\x1a*\xd0\x61\x4g\xe0\x81\xce" ",\x8b\x92\xa6\xc8/\xb\x17\xb5\xd2\x42\x9e\x99\xf1\xa6&\x80r\xc6\xb5\xaa\xaan\xb6" "(:\x87,T\xd3iL\xd8%\xeb)&\xe5}\xbb\xc7\xc1\x66\x30u\xe6\x87\xa1\x44\xe4\xd6\x1c\"" "W\x81\xd8\xf\xca\xe1I{D#B\xb4\xa3\xf1\xcdk\xdbP\xe3\x17\x91\xcc\x39(\xc3\x8\x35\xfe" "\xf8\x45\xb6\xbe^-~?/_\x8Z\xa3\xfa\xeb\x45\xca\xd0\xd7k\xcb\xb1\xed\x85\x9a\x9c\xeb" "\xb9\xf7\x45p6\xf0\xbc?\x19\\\xb1\xa9\x8c\x9c\x86H\xf6X<\xdb\xb2\x38\x94\xbcq\x9d" "h\xc2\xdb\xd8\x0;\x10\xd0\x8c\x8c\xaa@\xbc\xe7\x84\xd7\xbf\xb4\xee\xc9\xeaSY\xac" "\x5nW\xb8\xb0\xf2\xeb\xcb\x1fL\xe4\xc\x87\xfcxa\x18\x1\x33\xe0\xcbl\xe2\xfcO\xe6" "\x90um2z+Z\xe0\x63\xe3\x2\x1c\xc\xb\xd4 \xd0V\xf0\xb9\x41\xe6\xb3`\x88\xa5[\xa1\x1d" "\xc\x35\xfd\x1\x32\xd5\xf4\x8e]\x96sW#G\x17\x1b\x43(\xd4\x80{\x97(1\xc0\xd7L\xff" "\xa5\x63\x8c\x14[\x89\xc9\x89\xe6\xec\x94!H }m\xb8\"WXYX\x3M\x9f\x9d\x42!\xc7\xc9" "\xf7\x1\x37\x90\xdb\xd1\x30\xf2w\xe0\xbc\x88\xbb\x17\x9d\xd0\x9e'\x6#y\xed\x6\xf2" "^\xea\x8b\x7f\xb3<5\x86\x1a\x0\x34wn8\x13\xd2\xe9\xe5\xc1\xe\"|\xc5i\xab\x36\xcb" "-\x9d\xf2\xe7\xb7\xb4GX\xf9\xdcO\xfa\xd7\xa2J\xc7\xe9\xf4z\xa8P\xc2!\x4\x8c<\xb3" "Z7\xce\x8e\xa7V2\xae\x65\xfe\x32\x12\x17QF\xfe\xcd\x63\x34\xae=<_I/\x6\x7fy^\x1e" "\x8f\xf3\x86\xba\x19\x8c\xb7O\xb\xb4\xdc\x0\x0\xda\x38;\xc4\xcc?\x7\r\xe1w!C\x19" "\x88\xd6\x9c\x8b\x1aZ\xfd\xcc\xc8<\"\xe1j\x87\xe0\x1cm>y\xdcz\xfa=\xb0\x37\x1b\x8" "f\xef\xb8\xb6\xf8\x89\x0G*\xfe\xf1\xc4\xa8x$\xb9\xb9\xc6Y\xa5T\xe1\xfc\xe4*^\xc6" "Z\xc3\x91\x90\xefKf\xde\xafo\xc0V\x9a\x0\n\x9e\x14\x95\xf4/po\xbe\xa4\xd3.\xb7\xef" "\x11\xa6H\x91\x2Yje\xcf\x89\x9c/2/Vy\xc6\xd1#F\x91\x92\xa9\xbf\x1a\x7f\x1f,\x81\xc5" "T\xad\xb9{\xd1\x9a\xdbtjO\x81\xa4\xd5U\x9e`\xab\x94\xc4\x83\xdb\xab\xf6\xce/(\xcd" "\xb4\x12\xd5\xf\xf3\xfc\xfa;=\xaa\xac\xc6\xa8<\xfe\xd9\x10\xcc\xb3\xb8\xd2\xc1\x95" "\x90\xaf\xf4\xd7S\x3Jl\xe7\xf4\x15h\x96\xa1\x38\x8\xe0\xdf\xea\xc5G\xe6\x9d<\x88" "f\x91r\x8eJ5\xac\xd5u\xb4\rr\x1e\x8f\xccS\x85\xa2\xeb(\xd7\x8\x10\x1d\xc5\x8\x11" "R\x95(\xf5\xcb\xc\x0\x9b\xa7\xe3\xc8\x84h\xe3wh\xfb\r\x83\x89Z\xb5M\xb2\xddT&V*\xf9" "\xd8\xaf\x30K\xf6\xed\xa5N\x9c\x92\x64=\xf9&\xf5\xc3W\x82iu\x1 0*7\xcb\x14\n\x18" "\xbaV\xba\x1\x10\x8dJ\xca\xce\x8f\xea\xe6@\xa6\xc6\x95\x8e\xf1V\xb5\x88\xad\xb0\xea" "_;\xf\x37\xbb\xa1+{\xcb\"\x1c\x81\x14\x15\x38{\x2Kpv\xfa\x44\x3\xa3\xadn\xbb]\x9c" "&\xef\xeb\xdbz\xde|`\xb4\x44\xab\x9f\x90\xeaI;e\x8bwg\xae+\xe6I\xbd\xbb?\xe8_F\xf" "\x1e\xd1\x37\xc6\x1b\xd9_|\xd3\xd8\xb0\x15\xce\x45\x13\x85\x38\x93\n\xb6*\xa0\xe5" "KL\xe1\xa5\xec_\xec\n+(\xb3\x45\xb6p\x89\xa4\xe4\xae\x14\xd2\xe1\xf5\xa9\xc8\x84" "\x8d\xa6\x88\xca)\x8f\x93\x86\x6I\xec:\xaf\xef>\x82\r\x86\x98\x8c\x8e>ZMK\xb9\x37" "y\x18'\x99J\xa3\xe8\x1d\xb\xb3\xee\x11^\xc3m_\xb9\xa3\x92\xd0\x9ey\xafQM\x11\xc7" "\xb3\xa0<\x9f\x9c\x13\x35\\\xe7\x9e\x11\x9a\x19\x17\x7f\xfd\xca\x34pM8\x11\x8a\x89" "v\xd1\xeeZ\xa0-\x14\xfe\xb1\x41\x44\x19\xf5\xe8RD\xad\xc5\xc0\xa7\x65\xa5\"\xee\xf3" "ap\x6K\xb1\x9f\xee;_{D\x1eM\xb9g\xda\xe0\xba\xc2\xc4\x8f\xc6\xa8\x36\xe0\xefZi\xf0" "s\xbe\xe1i\x9fU\xe9\xc7W\xeb\xd6\xfd\x8bQN+I\xd6\x33\x38\x15\xb7\xdb\xd1\xe0iF\x95" "\xfc\xa3\xd2\x13 \xa0\xc4\xb8R\xd9pm\xad\xd8\x36\x9a\x95\xfd\xd9\x17\x32\x8b\xe9" "=\xd3\x38\x18\x95M\xbd,!-,\xa8\x15`\xed[\xc2\x84\xeb\x4z_8\x9e$\xe4?O\xa8\xc9\x7f" "\xec\xf4\x65\x89\xfasA\x7\x65U\xcfU\xb1\xc2\x1b(\xe0\xc1\xcb\xb0\n\xb8\xb6\xf6tr" "\xf2{\xc0\xd1\x11H\xf4\x7\x82K\x1Y\xb5\x18\x8dK\xb7\x38o\xbd\xbf\x1c\xf\xaf\x34r" "\x1b{\xcb\\\xf\xcb|@\x10\xdc\xb6\xa1(N\x9dx\x83\x9e/\xea\xbd\xb7\xf3'" "y\xaf\x8e+P\x94\xa6\xe9\xb7\xa7\"_$\xc4:\x8e]+\x97~\x1e\x19\xe6\x33\xc2gq\xe2\x30" "\x17\xed#=\xbb\x2\xc6O\x8c\xf0\x39\x92\xc6HE(\xd0\xc8\x46KF\xf2O\x9e\x83\x80\xf3" "\x85\xd5\xd0\x1b\x88\x93\xc6\x7f\xc1\x3I\x89\x83\xcf\x93\x94\x32\xaa\x38\xc\xa5v" "\xd0\x90\x30\xcdR\xfd\x99\xbd\xc3\xbe\x16\xc7 L\xdc\x33\x65\xbfv)J\x83\xa1\xfc\x14" "\xa2\x36\xf5\xfeS!\x90Nw\x9b\x13#*v\xf8\xfeR\x1f\x42Ubg\x84\x36\x35\x9c$a\xbe\xa5" "\xab' \x95\x41\xf5W\xae*\xa6\x0\x9\xc9\xca\n\x9f\xc7\x89\x8c\x14\x30l\xe3ZP\x1{\xad" "\xef\xde\xcb\xbf\x94\xee)\x5\"\x7\x6\xdc\x80\x64\x9\xef\x87\xdb\x1ds\xea\xb0i\x8a" "\xd2\xdbr\xcd\xcd\xb2\x93\xe7\xfb\x13\xc9M\x9f\xc8~tP.i'\xa2\x12\xf0\xd7\xd2\xf2" "\xd1\x94\x64\xf7\xa6j\xc0xr\xe1\x8c\xb1\xdd\xe8\xf1\x18\x35\xdc\xbc\\N\xf0\x39\x33" "?\xff\xc0\xfc\x14V\xda\xad\xe7\xda\xe3\xec.\xe0\xd3\x41[\xc\xab\xb6\x9f\xc5\x0oM" "\x14\xa4\xee\x1a\\\xa9\x9a\xd4\xd5\xe6)\xc0\xdd\x1e\xf\x9{[\x93\xde-\xd0\x1\xa8\xc4" "\x18#L\x9c\x45\xe8\xc1=\x1a\xe0N\x94\x66\xda\xb8\xcf\x1e\xcb\x88\xa4\xe0Y\xc1\x11" "\xa6\x46\x8d-\xab\xb9\r\xa7\x9c|y\xe9M\xb2\x8fih\xb1\xa6\x32\xf8\xc5}\x9eV_\xf9\x1c" "i\x16\x2o\xfa\xc0\x66\x18V\xb9\xfb\x8d\xe9\xc8\x16\x61\x81\x62!\xb1\xfc\x15\x9c\xfe" "\xf1u\x1e~@?_,\xe3%)\xddT\x7\x92\xfc\x17\xa1*=\xcd|P\xd3\x8e\xea\xad\xbd\x10\xad" "\xbf]\x8a\x82\x44*\xa9\x0\xce\x61P\xebzF9\xdd\x9f\xb6\xe3\x85\xb2\xfd\x9\x34\x93" "\xdc\xcd\x90\x14\xb2>\xb1r\xe2\x1a\xa8\x96\x43\xa6\xca\xd1\x9\x33\x43\xd8]\x81&\x19" "r\xde\n\xcb\x16\xa4\xc6\xb5\xf0\xbeL\x97\x8b\xfa\x12\xd3\xca\xf0\x13O\x9e\xa4\x9f" "n\x96\x87\xc8\xf9\x9a\x45gE\xea%/\xb\xa9\x96\x8c\x7f\x95\x86\xe3\xdd\x84\x1a\xa9" "-\xc7p[\xddh-\xae\x41Q\x8a\x9\xdf\xe \x9f\x32\x1d\x7f\xa3\x41r\x2\xf4\xbav\xa9\x84" "\xda:\xdd\xbcX\x13h\x85\x36/\x2\xf0\xa2N\xbc\x43\x9b=\xbb\xda\xcf\xfd\x84\x98\xeb" "\xd2\x9f\x88\xf0\x16\xb1\xfe\xab\xc1\x7\x85\x43\x8e\xac\x86\xbUE%\xf3&`\x97\xa6u" ")\x9a\xa0\x96{\xd3\xb7\xa0\xee\xee?\xc5x\xd1\xbe\x99\xd3S;\xd9\x15q\xae\xd9\x4\xbf" "\xc9\xda\x1a\x14Q\xfd\xc5@n\x1c\xd6\x14\xe0\xc7\xfb\xc7\x33V<\xd6\xcel\xc3\x1e\x92" "7\xca\x15?\x1f\x4\x11\x11\x43\x61\xd7\x31\x63k\xcf\x98UZ\xbf\x12\x84\x8a\xd1\x9\x37" "\x1a\x42\xb6\x36u\xa4\x13\xb\x81\xe9|*.\xe2\xbb]\x8f\xae&@\x15`\x1\xaf\xfU\xd9\xd5" "\xdf\x8f\xf2<\x8a\xef\xe1O\x12\x0\x0\xf1\x41I\xa3n\\\x94\xcd\x90\x81\xde\xc2w\xc2" "\xc3Hp\xd0P\x11\xf9\x9dH\xb0\x87Z_\xf5\x42\xf0g\xf7\xe9\x88\x1\x9\xf5\x86\xbc\xf2" "\xb5\x5\"\xa1\xf2>\xce\x44\x34\x9eS\x9ep\xf8N }\xc9\xbe\xc7\xcd\xf8V\xa0\x46\xf1" "\xa0\x32&\xaa\x41\xf5\x41q\x9a\xd1\xaf\x88\xff!\x1eW\xdd\xc\x12u\xdd\xb{GD\r\xa0" "\x89\xb9\x8cn\xe9*}\x94p\xb\x83\xce\xbe\x19\xea\xed\xd8\xa6\x15\xf6Xu\x87\xba\x8b" "\xba<\xe3\xaa^\x8e\xaf\xb1\xfb\xfHk\xe3`\x9b\x16\x9e\xfb\x17\x8a\x42\x92\xf4\xc0" "7\x8a\xfe]$\xee\xd1\xca\xabQM\xdc\x66\xc6\x96\xd8\xe3\x7f)Jey\x13\x1d\xdfT\x88\xe9" "Cf\x9\xac\xd7P\xc3\xdb\n\x94\xc\x84\xfe\x2+\"\xad\xc2gob\xe9\x1e\x8f\x89\x12%\xf8" "\x91\xfb\xa5\x37g\x9b$T{\xbb\xf3_\x4\x91] \xb1\x17\x39\xf6 \xd1\x8b[!i!\xd2\"\xf1" "PD6\x85i\xaa\x30)\x80\xb9\"[\xb8\x39\xf4\x94X\x84\x81\xb9K\xcrCR\xb2\xdf`\n\"\xb0" "bV\x1d\x86\xcb\x8f\x81QO\xbd\xaaO\x8a\x4:\x2\x65\xf9\x92\xfa\xb7\x1f\xc9\x12JE\xb8" "G^\x1e\xf3\xdfkm\xe3\\\xf3)w}E\xf0\x83%\xe8P^\xc0\xd9y\xf5\x42\x80z\xe7~W\xe4SR_" "#\xbcY\xa5\x7@7\x1e\xfa\x98g\x8a\xeelBSt\xae\xb7\x45\xb9\x9d\xdb]\x8d\x90\x8f\xdb" "U\x1f\xbc\r\xb1X2\x10{\xbe\xccN\x11\xa1\xa8\xde\xc6\x93X\xa5t\xa2\xed\x46\xcc\x31" "\xd5\x64T\x9e\xff#\x10-\x92\xbf\xdc\xbb+\xb9\x85\xf7\x8f\x36\x3>4\xf5\x9c\xe\xba" "\xfa;\xddq3\x87\x36\x46L\xef\xdb\xa9\x13\x98\x33\x99^\xda\x42\x7\xbf\xd4\xa9\x86" "}2\xe8g\xfb\xeb}\xe6\r\x13(\x3\xef\x93G\xcb\x17\xbd\x91\x31T\x84\xef\x65p\x89\"\x97" "\xdd\x8b}\x96\x61\x3\x33\x95\x35\xe2\x8a\x0\xcb\x1e\xec\xa4\xa9w_`\xa9\xf5\xfc\x9b" "\xd8\xb0mx\xfe\x8e\x63\x18\xc3\x1d\xa2\xe8G\xe3\xf9\xcaX|\xb0\x1a\xe2\xba\n.\xbd" "\xe3\x8\x31\x44\x13\xf4\xf2\x30\xa7X\x18N\xd6\rOq\xf6\xce\xc2*\x93\xa0\x1blT\xe0" "D\x9a\x38`\xfc\xa8\x95J4{u\x88\x32\x9a\x80\x97N\xcb\xec\xda\x10p\xfb\xc0Ufcu\"\x9f" "\x13\xdd\x99^\x99&]\xf8p\xbc\x8b\x8c\xc6\x34\x7f\xad\xbc\x1aj\xf6\x45\x99'\x1aG[" "\x91#I=F\xbe\xc4\x12\x89\xbe\xebg\xeb\x97\xa8\xde\xd7\xa9\xc9s\r7\xc6Qd\xcf\xbd\xc2" ".\\\xa5\x89\xd2\xe7\x95Lq6\xefN\x8LC\xa6\xc7\xf3\x61\xa3\xe9i\x89#\x9b\xdd\xb9\xa5" "\x93\xcc*\x80\xba\x16\xde\x9e\xe9\xe\x95\xcd\x39\x39\x9n\x0\x9c]<\xb7$\xb4\xca\xbb\x32\x83\x8d\xbeR\x7f" "\x83\xb1\x8c\xb4W\xe5{\x9,0.\xe5W\xfdO\x0\xdb\x9cV\xe6l\x9f\xdfN\xc9\xff\xaa\xb8" "_`\xd0+\xa7\x96\x94\xfa\xbaGj\x19\x9a\x3\x31\xc3\nx\xa9.\x10\x41{\xa2\x36\xe2\x33" "d\x81t\xc8&3\x1d\xc1\xba\xb8|_\x95\x2xF\x13\xcj+@'\x93\xe\xbf\x9a\x97\xba\x1b\x3" "\x9d\x38o\xc5\x1c\x30&H\xe2Y\x80!/jX,\xde'x\xc6w\xa0\x1f\xbf\xb3\xc5\xd1\xb8\xa3" "t\xad\xafj\xdb\xf7\xdc\x94\x7_%\xed\x66\xd4@\xb3\x92,_%_\xb2?\xd8\xf6\xe2\x1e\xa6" "[\x1d\x93\xbb\"V\x84\xb5\xf\x11\x31\xe$+\x8uu\x97\x33\x45\xb2)\xba\x62\xc1\xe2\xc3" "[\xda\xec\x4\xd1\x1H\xf5\xb2\xf3\xbc\xf7\x39\x9b\xdf\xdf\x1f?y\x11\x97\x14\xae\xa6" "\x97$[\xc6G1n\xa1WHN\xcb\x95\x1b\xe3g#O\xd0.\x8b\x1f\x9\x1a\xac=)\xbf(-\xff@\x11" "\xbc\xc\xba\x8eU#M\x94=\xb3\x1|\xc7\xa7\x66r\xb\xbc)\xb2\xd0\x97\xa9V\xc0\xf1\x6" "qw\xf0\x12\xd4*\xdc\xb4s\xcd\xe8\xd1\xba\x35\xb4\x3\x7W\xfa\x1d\x82\x11\x98\x9d\xf3" "\xbd\"\xce]P\x1c!\xef\x87\x8\xfb\x34I\xdfG\xd8\x86P\x9f\xf7\xb5\x9bv\xc0\xdb\xae" "D?3o\xee-a]~\xed\x1c(O\x14\x33[\xc8\xa2k\xf4\x62\x1e\x10\xde\x96\x11\xfb/\x1d\xbd" "R\xe4\xb7V]\x8c\x65\xb5N\xa3mP\x8b\xcf\xcW\x8aI\xa2\x66R'\xcd\xe1\xf9v\x8e\xfe\x84" "\x7f\x9d\x94\xf1\xbb\xb7\xdb\x83p\x1c#!\x98\\r\x83\xd4{.@\xb2z&\x84(\xaa\xef\xe7" "_k/\x87\x64\xa8INX'W7X\xcb\x9c\xa4o\xa9\x32\x8\x83k\xcc\xc8\xb5VJi\xf5\xad\x88 R" "\xaf\x1c\x14\x17\xc3\xfa\x7fX\x5iR\x86\x82\xc7p\x80\xf3h\x8b\x65\xe7\xfc$\xd2\xa3" "\xae\xb6\x15t\xb4\xa3!Y'(\x15\x44\xdd\xd7\xa6\xee\n>\x93\x88\xf8\xf6\x31\xcerQrM" "\xf7\x7&\xe5\x91-\xdc\xcc\x8c\x65-\xd6\xc9`\x8f\x84\x62\x30=\x86\x7fX\x9d\xe0\xf2" "\xf7\x17\x11\xb3QB\xeen\xf9;d\xd6\x32lM\xd7\xdc\x83'\x8e\x5q\x0\xeew \x82\xe6\xba" "6\x8e\xd9\x1aUS\xec\xfe\"\x93\xa4\x81\xe4/\x83\xbc\x8f\x91H\xc7\xe\xac\xe9\x1f{}" "\x9c\xb8\xa7$\x15\xbd\xb3\xaf\x66\xf6\x8e\xa7\x33\xa1z\xbe\x9d\xb0\x5;\xf1Hb\x91" "2\x96\x95\x89\xf3\x8d\x30\xea\xbf\xa9j\x1\xfa\xc7&P\xb5\xa6\xff\x39\x35g\x1\x98\xa1" "\xea\x33\x81\n\x9b\x11\xe3\x30\xeb\x8b\x45\x1f$\xf9\x35\x44&46\xf6i\xabZ\x90\xa5" ";\x16\xcc\xee\xac\x36\xb1\x44Ut\xef\xa7\xe8\x2\xdesR+\xe7%\xe6\x87\x4\x82,\xb7\xd3" "\x91'\x17\x33\x33g\x89[\xbf\xbe\x6\x96j\\\xc6S\xaa\xb5\xe9\xb3Yg\x2\x8k\xf0\x1\x0" "\x85\xb9\x0q\x19\x32\xa9Z\xcf\x15\xcaM\xc4ZuN\xa3\x34\xe9\xeb\x84\xd6\xfc\x8e?\xc4" "\xf8\x97\x45k\xed\x64\xbb\x93\xb5\x93T\x9f\xf0\xd5\x35\"u\xd8\xe4\x17\x17*fd\xc5" "\xe0\xec\xed\x10\x19IJ~\xd4\x9a\xb0\xb9\x65\xbe\xc1\xa8.Xsvk\xb3\x8d}\x85`I\xcc\xe2" "\xfc\xa6Z\xaf\x61\xe9\x61\xb6\x6\x34\xe2\xa6\x9e\xf0YuL\x9d\x81\x63\xd8\x7f\x92\x8c" "\"'r\xd0p\xd8?\xeco\xa5\xacsJ\xf6^@\xbf\xdeR\x1f}\x9c\xb1\x65\xf\xdf\x64uK\xff!\xea" "?\xf0\xafv\x11\xa9=R^\xc9\xb2\x8cQ\xaf\xec\xb0N\x7f\xc8\x32=\xd6\xc9\xb0\xd8S\x9a" "4\xfc<\xd8\xce\xb7\x95\x8e\x8e\xbb\xfe\xd4\x31\xb8\xf9\x6OR\x92\xf7\x15\xf8 \xb4\xbb\xfd\xd5ov\xd4.z\x1a\x6\x8c\x1c\xbd" "\xce\x46@\x8/n}X-\x19\x39\x99\xc\xe6\xee\x8d'\x0\x15\xa2\xc4\x61y\x8b\x37\xdc\xb5" "y\x8e\xe9\xf7Q!h\xb7m&\xc2\x8b\xe4\xa4\x9a\x1b\xf9l\x89\xd2\x35\xf2\x1a\x1d\xb6\xa9" "n]\xa4t\xd0\xb1\x9b\x80\x8d\x13\xd7\xa1\x1b\xf3\x9e\xa8\x64t\x99\xc4\x10\xed\x98" "\x94\xa1\xad\xf3=A\xb6\xfc.aM\x80\x87\xf4\xc8NC{\x13o<\xb3-\xb8\x39\x9\xe3\xc7\x46=\x2\xa2-pV\xbev\xb8wc&" "\xe\x46\xe4\x8b\xb8\x32\xb7\xee\x13\xf8\xdc\x5\x37\xec\x8e\x81\xe9\xbd\xfe\xad\x8c" "'\xeb\xdf\x1a\xd7\x6\x93>\xfd\x11\x13\x1e\x12\x81O#n\xbb\x1\xbe\x85\xb7\xf1\xb2\xd6" "'A;2I\x18\xd2G`OV\xec\x12\x89\x9\x87?\xec\x38W\x2\x8b\xefv\xa3ICd\xc2\xa7\x0-\x10" "MHb6\xc3\xbH\xe2\xb7]\x85\x1c\x34\xeaP\xba\x7f\xfe\xb4\xe1\x91\x90\x89\x8a\xe2\x17" "h\xc1W\xc0\xca\xc6(\xa2\x18\x1a\x32yo\xbc\x1arq\xd2G<\xd8\x8eS\x95\xdd\xbd\xb1\xfc" ":\xa8\xdf\xf=X\x86\x37\xf1\x9a\x8b\x83:\xfd\xeb_eZ\x88\x38\xee\xcdhN#\x15\xb7,u\xce" "\xef\xbc\xef\x94\x34J\xce\x8dj\xdb\xe3U\x0\x8e\xc7/\xe7\xce\xea\xb0\x13\x63\xa8\x95" "\xf4\xe7?\x86v9\xbe\n\xb\xe6s3\x84\x88\x16\xb0[A\x92!\xbe\x8f\x90\x66\xc3\x62\xc2" "?\xe8[\x7f\x39)0\xbf\xe4\xc1+\x95&\xff/\xde\xc3\x8f#\xa1Y\xed\x61\xa0q\x8eq\x15\xc2" "E\x97\xd8I\xfav6\x91ST\xa4\xc\x96]Mr\xec\x94\xda\x61\xa0\x37\x66\xab\x39\xaa\xb6" "\x84\xe1\x34\xfd\x14\x7\xa5\xb1\xb1\x9b\xfe\xbaR\xaa\r\xa5\xd9\x9c\xbe\\\x82\xdb" "\xaa\x66\x37\x11\xe6\xde\xba\x18\xe\x1dJ9\xc3 QjCP\xd2\x96\xbc\x19\xbf\x1b\xe0T\x85" "\x9a\x8\x89\xc7\xe9rz\x2\x1f\x31v\xfe\x62\xf\xb0\xc8\x37\xe4\x14\x1f\xec\xe5\x31" "\xa9P\xc0=1\x9e\x32Up2 \xb7\x18[\xd2\xf\xe5\xdb\xa6s\xf8\x12\x9a\xb2\x11\xef\xcf" "6\xee\x39L~\x0\xeb\x8vbK\xc8@\xfa\x86\xe5\x8b/XGT\xcbk\xfd\xfdv\x81\xe\x30\x7\x41" "\xeb\xe4TNZ\xc1t\x13\xad\xeb!\xc6/f\xcaO\x7\\\x32\x38\x17\x96\xbap\x97\x82\xde\x34" "\xa6u\xb7\x17\xa2\xc7\xf6\xd8\x81\x4\xcb\x92O\xde]\xf7u\xb4\xf0\xb6\x8e\xe.\\/x\x8b" "\xbd\xea\xf0m\x8e\x1f\xc2\x10\\\xcb\xbdX'\xc0\xb0?\xd6\xcd\x64\xf0\xd0s\xf3\x19-" "_\x94\x83\x96\x44\xe5\xeclQ\x85\xba\xdc\xf0\x41\x12\xa6_I\xa8\xc8\x31t\xa9\xae\x95" "\x8ev\xa2\xf5\xaf\x46\x9e\x8bv\xc8\x33x,_\xfb\x8b\xd7\xb1\xbb\xbb>\xa0\xcb|\x97\x86" "\xc3\xbe*\xde^z\xfa\x8c\x8f \x89&Y\xa5\x9b\xc4!\xe2\x88\x45\xa1\x8\xe3N\xe1xd\x4" ".\xf5\x87\xa6\xd6}\xec\xdf\xb3\xf5\x10\xeb@\xd2\"\x95\x85\x34z\x0\x35g\xf\xccv\xc2" "\x83zNMh0O\xe1\x13\xc5\x39\xb3\\\x1f\x2\x34\xb5\x7\x9b\x8e\x32\x93\x45\x46\x98)x" "\xc5\xe4\xdf\x95ZEN\xa2\x63\xc3\xca]q\x1\xf3\x1a\x31\x8d\x82\xa3\xf9\xfc\xb5\xa8" "\xaf\xd7\xa6R\x9\x66;\xf\xc9\xda@\xb&\xf2\x85\xef\x46\xd0\xe1\xea\xf8\xac\xb1\xf1" "\xcb\x80^9\x86\xd0K\xc5\x85\x7?\xc6H\x95\xe4\xda\xe1\xcc\xb7I\xbb\x43\x9c\xb3.\xa9" "\x11v\xd5\xc3\x9c\x36P\xd1\n\xfb\x9c\x98\x84\xd5\xfb\x90\x18\x34$\xce\xe6~\xf2\x17" "]\x1\xd2G\x8dgQ\x1e\xc9\xf5O\x88v<\x15&\x97\xb0m\x94\x8b\xedI$\x0\x96\xee\xe3\xd0" "j\xb4W^\x8e\x8b,\xb8&;[\xcfO\xa1`\x87 \xf5+gS\x9\x83\x30q\x87\x9d\xf5,>\xc2\x87\x1d" " \xf3\x98\xb5\xca\xc8\xf8\xa4\xd4\x1d\xf\x1dGXM\xd9\r\xcd\xae\xa4\xa1\xcf\x16\xc" "K;\xf1\xaa\xb8\x90\xb5\xce\xb6\xcb\x34\x88g*\xa6\x8f\xbd\x93\x82\x81\xdb\xc1\xd8" "\xbc\xfe\x92\xfb\xf5\x14\xdaSXD<\xb6\xe0\x14rT\xe9\x1b\x38\xceg\x87\xb2\xbb\r\xed" "\xd2\xd3\x8fY8sz\x97{^\xa4(\x92R\xcX\xf8\xfb\xb5<\x99KW8#y\xe9I\xf\rip\xb9\x80\xe1" "\xbd\xf8\xcf\x9fL<^\n\x18\xf6n\x86\xee\x93\xff\xe7\xfeTm\xe5\xf\x41\x36K\xcb\x37" "!\xb6\x37\x7%q\xfa\x17y\xf1\xd6r\xfa\xd2`\xc1m\x7f\x13\xcb\xdf>Cv\xe7\xffV\xd2\xa7" "\x10\xacZ\xc3_\xcb\xdb\xce,\x9c\x17\xe5#\xbb\xe6!\x86\x17\xb1<\x1f\xa6g\x9b\x30\x89" "y\xae|a\xdanh6\x93$\xc6\xcb\xc7\xdd\xec\x36NZ\x86prf\xc0\xb4Y\xee{,\x3\xfeXNR\x9b" "\xff\xdc\xe9\x8c\x90\xa2\xf3\xd9\x30Z\xa7M>\xd8\x43\r\xbf:I\xfe.\xcf\xd9\xc4\xbc" "\x9f\xef\xd2&\x18\xfe\x9c\x8a\x97:\xd0r\xaboq>M\xf0-\xcd\xa7\xacSY\xb2\xd6R\x1>\x13" "\x1bv\xb3\xedlu\xfdS\xbaX\xd8\x62\x84\x62\x64\x62\x7fk\x9ep\xd8\x80\xfm\x9b\x32$" "+tzg\xbb+EgX@\xd3O\x85*\xa8\x6/\xa6\xb0\x1e\x31\xed$\xda\xe0/l\xf7\x88\xa1\x7f{\x93" "h\x17Q\x95\xdb\x0r%\x9c\xce\xf\xfb,\x10\x35\xc1\xd2n\x17w\xcc\xa3\xd5j\x82|2B\x6" "\x9ev\xd6\xddi\xb6Sv\x86\x14\xb9\xac\xff\x16V\x7f\xea\x61P\x8dQEK\xc0/l`\xf7U\xae" "\xf6\xaf\xae\x35\x36\xbb\xfa\x18#\xf8\xe1\xa5Q\xf8\xad\x14\xd1\x1d{d(\xe2tCq^\xbaN\x9c" "\x5\xd6\xf2\x38\x37\x8f\x94\x98\xae\xf0\xe7\xeeO\xe6\x85\x66\"\xcc\x8en\xd1\x41\xee" "_\x10\x9e\x34<\xb6i\\K\xe1\xe0\xf6\x66\x1\xc2yu\x98;\xf5W\xc0J\xcf\xc1\x92'\xa1\xad" "~lD\xc0\x5)\xfc~\xdd\x7f\x88m$\xb7\xe0)\xb9\xc3\x95&\x0\x88\xbb\xfb\x96\x97!\x99" "\xa7\xb3'\x96\xd2rW\xde\x83\xa7@\"\x91\xc1O\xec\xdfy\x98\xc5\xc9k\x1e\xda\xde\x2" "\x80\xf8V\x8a\x8fP\x7\x85.\xed\x30\x39i\x18\xb\x33)\x91ys\xc2\xd3,\x8\xc\x97\x65" "\xb6\xba\xb0g;\xc7\xec\xfd\xbb\xfb\xea\x98\xc&8C9\xb7\xf1\x5%\x91\xd9\x16g\xd4\xfe" "\xe4\x13\xaf\xc2=\xe2\xd4\xb9\xdat/Bi\xc6\xc9\x39\xf5\xfc\x32\xa3\x80@s\n\x1\x81" "U\xads?#\x1eM[\x9d\x1\xc0:X\xea\xe7\xb5\xf5\x90\xcc\xfa\xf2^\xdc\x85R\xcf\xc8\xd9" "\\`\xeb\xae\x18\x37\xd7\xa9|\xa1\x37\xe9\xd4\xa4\xbd,\xd3J\xef\xd6\x8d\x64\xb3\xf4" "\xf6#&\xac\x42\x99!\xd7\xfb<#Q\x84\xfe\x8\x99i\n\xbw_\x1aVn\xc2\x9dX0\xd3#re&\xf7" "\xe7\xf5\xaf\xddq\xb7~\x7\x61=\xdcO\xc6>\xdfI\x5\x1a\xebY\xe6\x33z\xc0\xa4\xb6\xdd" "\x87.wl\x9c\xd0\xcc\xb8\x61\x30S\"\xd8\x16s!$\xf5\x97\x8a\x86\xc1\x86\xbf\n\xf\x88" "\xe7\x33\xce\x38\xe4\xd7\xc1\xbaSx\xc5\x62\x9b\x1e\xfc\x97\x80`Y\x99\xe\xd4,\\\xd1" "\x83\xba\xd7\xe9@p\xe4\x5\x85i\xda.Q\x83\x1f\xfe\r\x8\x3\x1\xae\xab\x43P\xba)\x3" "\x18\xae\xc5\x82\xc7\x8d\x5\xdd\x92\xe5\xaf\xb4\x42N\xa8\x8\x62\x9b\xc9r\xe6\x8f" "O\xf2H\x9c$U\x93\xf0uU\xcaj+%\x96G\x94\xcf\x31\xcb\xd3\xae\\\"\x9a\xb9\xb8\xc2\x98" "\x6\xc0\x1d\x11n\xbd\xf\xf0\xf1Y\xed-=}\xfcs\xea\xb4\x91\xb\xff[\xb\xbX|\xd9\xea" "no\xc4]c\xc0\x97\x66\"M\x83\x46\x1f\x5\x88\x14\xb%\x8b\x17)\xf7\xb\xaeyb\x18\x9b" "\x15TH3\x92\x98\x8c\xf2\x30\xaf@w\x19>S3\x5\x19\x39M\xd9\x9b\xa1\x35mG0\xab\"\x1d" "\xc6\xa6`\x19\xbf\xaeVH\x93\xdd\xad{\x17}\xad\xd1j\xdd!\xd3\x96\xcf\xa6\xc3\xdc\x81" "\x80R\xe2\xf7\x11I\xfdYJ\x16\xde\xc/\xfd\xd3\x66\xc9\x9bHlU\xa6\xe9\x91\xe4\xd2," "\xcb\x15\x84?\xc\x33\x63gj\xf2\xf5\xb2\xd1\xb7\xef\x66\xcc\xf2\xf1-\xc5\r\x63wk\xff" "\xb0X\xd7\n\x9cv\xdc\xe9luHr\xd7,\x82\xa0\xc3?\x90\xd4\x9c\x93T\x2\xcd\xd2kmt;\x1f" "C\xbe\xd5\xd8\xb5\x39\x42HI\xc1I]\xaes\x4N\x88Z}\xf\x30\x7f\x18\x16\xdf\x62\x44\xa6" "\xf2\xd9{\xfdN \xe\x93\xf6\x9b\x8\xaf\x39\xea!\xe6\xe3G\xa4|\xee\xbf\x80?s\xb9x\xad" "\xbf\xcf\x5g\x89\xbb\x8en%c\xde\x87\xdd\x9a\x8c\x87qW\xb9\x34\x10-\xce\xda\xc5MH" "z\x1b\xb2iO\x0\x34\x9<\x6\xc.\x1a>\x80\x5\x4\x9f&\xd7\x16\xe1\xf3" "\x81\xb9\xf8\x31%\xe4h2d\xa0~-\x89\x38\xf6\x5\x97\x8e%\x13\xdd P\xb3\xd8\xa1\x1'" "\x97\xcb\xa8\x96\x16\x32\xbe\xd2`\x91\x63\x38\xa8\x12\xaeu\x1c{e~\x8j\xc}\xdc\xd3" "\xbf\xdd\xff>H\xb8GQ\x92W6\xd1\x31\xcI\x10\xfc\x11\x43\x87\xf3\xed\x7f\xe1\x63\xf9" "\x18\x95\xeb\xf5_\xcb\x42\\\xefW)\xd9\x9b\xd8\xf2\xc0r\xe3l1\x5#\xe7\\\xd8\xe5\xde" "I\xc0\x31\xc4&4\x10\x9dV\xe9\x1a\x46\xc8\xc8\xe8\x9f\xd9 \x12\xa0\xc\x33\xd0\xde" "\xc5%\x97\xb5\xc6\x93\x32\x91\xa7\xbd\xc5\xce\xda\x95\xdc\xdaV\x0\xf9\xae\x1c\x82" "PT\xe7\xee\x10gE\x8c\xcb\x66\x61\x7\x4\xc5\x8eJO\xc0\xcb_\xc9\x33\xd0\x32*qk,\xd4" "0\xa3\xadH\xda\xb3\xd4\xcb\xe9\xd2?-\x9#h\xcf\xc4\xe1\xf5I\\\x13:\x92\x94.\xc6!\x18" "\xd4\\\x17r6F\xe6\x94\x7\xb4\xa8\x9d\xcd\xfd*\xb3\xff\xc0\x99\xa2\x1d\x9d)t\x1dh" "'\x6)\xaa:AO\xe5\x86X\xdc\x91p\xc2G\xb6\xe2?5\xc4\xbc_\xf8\x30\x9\xf4\x62\xf2\xee" "\xf4\xdb\xac_\xd1X\xa6XW\xf9\xb6\xdc\x1fQ\x92\xdf\xb1i\xdc\xb6V!\xca\xb2\xf1\xb0" "{\xd2/AU\xa8\xe9\xe2\xb6\x38\x8d\x43\xf\xde^\xc1\xc8\x34\xd2.\xa0\x35\xc5.\x1e\x34" "H.\xad\xc3kL\xae\x90*\xae\x89\xa7(Nb\xb3\xc8K`\x8dk\xd0_u\xbc\x31\x31\xb-\xd3\xb2" "\xc0\x8a\x0\xe0s\x7f\x10O\x3\xa4\x19\x89\xd5\xf6\xb9\xa2\xc3\x8b\"\xf1\xd1\x80>\xe5" "\xd7\xa4\xd8\xde\x44\xe4\xab\xd4\x96\xa1\xde\xc\xe\x12\xc4\xbc\x96\xd0\x12(F?\xe" "\xa9\xce\x95\x9\xfe\xe9\x87\x13\x9f=\xd3\xf9\xd0\xdf\x43\x13\xf5U\xbe\x85\x43\x37" "\x18\xf6\xd0_\x19|A\xa9\xd9\xc7\xa8\xb0\xd2t\x1\x96\x82\xd4\x9fX\xdd_f\xb1*e \xd9" "\xf2&\xd1\xdf\x1f\x1b\x65\xcd\xfa&\x1f\x98\xc\xa2Z\x92\x64[\x86\xb6\x46\x6)?\x8b" "\xfd\xe3\x64\xc4}*\xf2\xc7\x9\xbb\xe7zp\xa5q/,\xc2o=f\xf5\xbe,0zH\xe6\xf8\x87\xf6" "\x81\xd3\x1!\xe3+\xbd\x87'\x1b]\xc4\x61](\xc3\x9\xf1Z\xd2\x63\xfb\x37\x42NV\xdd\xa6" "\xe1{\x99\x8b\x45\xbel\x7f\xc6\xc2\x8e\x33\x94\xa8vL\x9e\xb2\xdf\\\x6\x62\x65\x93" "\xb5\xc6\x65\xd5P\xd4`\x1ry\x1c\xd2\x8\xae\x9f\x37\xbc\x8+\xb$+\nPKu\x1b\x18\xf4" "\xd7IQr\xb6\x97\xee!x4\xa8\xa4\xfb|\xc1mo\x9e\x8b\xb4\x0\xbe\x8a\xeb\x8P\x96\x2\x83" "\xdc\xe7%$\x9f\xccM\xe9}\x98\x86tZ\xb6\x6l>/d\xdd\x8a\xb7\x9a\xa1\x16g\xf1\x11\x88" "\xd7\x96]\xc1\x1e\xb7`\xb7r\xe2\x82\xdb\xf1\x32I\xf3\x19\x86\xach\x98\xfe\xbf\xe2" ">>\x8b\x8d,3\xe0\xe\xa6\xfcI8P\xec\xb2\xe6\xd8\x31\xd1\xef\xca<.\xc8\xee.9E\x99\x9" "\x1e\xd5\x8b\xed\xe9}zC\xb6\xf7\x39\xeb\xf\x84^\xac\x1d\xf6\xb1\xeb\xfe\x87`\x9\xcc" "]\x80K\x15\xedKVv\x1b<\xe1\xafY\xc0{I\xdcy\x8a\x44S\"\x97\xads\xd5\x10\x1e\xd4\x7f" "6\xa3g\x8f\x81\x82\x97\xcc'\xf6\xaa\xa2\xaa\xcc\xc9\xaa\x9boTY\x91\x1d\x8cV\xcfI" "\x9e\x39\n\xe6\x7\xf3y\x4P\xb2\xb9\xc9\xbe\xf\x0n\xda\xcq[\\\xa0H\x17\x34\xcf\xb0" "Ytx\xe7`+\r,\x1eOx\xf0n\x11\x10\xde.p\x9c\x1c\x1b\xed\x13p{p\xa4!\xb3\x84\xf2" "\xc\xa7\xa9\xa9\xd2\x3$\xdd\x38?(\xb2\xd3\xc7\xa9\xc5?]Lk|7\x8d&\xdf\x11\xcfU#\x8b" "\xe1\xb2O\xa7\r\xcc\x17\x8d\xad=5g\xf\xe4\x91\x90\x85\xeb\x1c\xd9\x5\x97\x1dv\xa3" "h\xfd\xfc\xf9\xd2\xf0\xa2\x37\x39\x85\x1a:m.\x2\xd6]T\xde\xe6\x9e\xd5\xd8\x13\x15" "\xd3\xea^5o\x94\xef%m\xd2g\xfd\x1e\x1a\x9e\xdc\x9c\xd6>t?)\x9b\xccJE\x6#;\x8d\xd7" "e,\xa0g\xf7\x41`?\x93%\xc\x8}6\x8f\x9e\x9c\xc4\xcc\x1am\xedVt\x87\xc0[\xaa\x99+\x0" "V\xa7\x7f\x63\nr\x0\x8e\x39\x46\x15\xa9\xdb$\xfeV\xa9Ve\xe\xc9\xde\x90\xa6\xc2%\x91" "\x89\x44\x2G\x97\x5\x41\xca\x19\x87H\x92\x82\x15\xc0\xe1\x32\xa8\x1a\xa1\x32\x8\xd8" "c\xc1\xfe\x81\x7fp\xcaW;TW}\x10\xb7\x31\x0\xaf\x8e\xa0\x88 \x8a\x44\xfb\x92\xac\xa3" "\x14\xaeXypa\x80x\x8c\x17\xbb\x1d\xb\x81\xb6\xb9Z\x1cN\xf\x9e\xa6o\x9b\x39\xbf\xe1" "$D\xa6\x44\x66\x91\xa7\xbd\xb0>\xf\x3\xd9\xf0z\x10\xa7Y\x8f!f\xf1\x8R\x9f\x34\xcd" "\x90\xe6\x1\xff\xed\x34y\xab\xcf\xcb\xde\x8f\x5\x1c\x34\x8eH\xc6\x1d\x95\xb0\xcY" "\xea\x12\x87\x42?\x5\x66l=6(\x88\x44\x6~\x83\xe1OkR\x10\x84,t+\x89\xf1:\xcd\x12k" "\x9f\xc5\n\xbe,\xa7\xd7\xedQ=C\xb6\xac\x7f\x41\xee\xda\x41k\xff\xfc\xc5\xc8\x44\xab" "-#\xd4\xdc\x9\xb2\xd5\x10PL\xe9\x8d\x2\xe7 \xd9\xe6i\xdd\xaa\x34Lc\xa1\xb7V2\xf9" "\x12\xa1\xc0\xda\x38\x85\xdaJ\xf7\xe2\x43\xe4\xa4\xc6I=e\x95\xbbmV\xb0\x35\x91\x6" "\x95rY\xe5\x9e\x33k\xaa\xf3[\xd1\xce\xc5\xcd\xe7\x35'.\xbc\xca\xe8\xd4\x90J\xeb\xd2" "\xb3&\x10\xc6\xfe\xa2\xb6\x99\x41\xd6T.\xcb\x44\xd7\x10\x92\xa3\xcf\x6w\x8\xa3\xd0" "\x87\xae\x99\xff)g\x1a\xb7\xdd\x87Xu\x9b\x97\x1a\x8\xae\x1b\xadx'\r/\xbe\xe3z\xa2" "\xdc\xb1\x19\xd7/l{\xc\x85\x9\x1\x8ap\xd0\xb0\xbe,h0\xef\x8e\xb$\xb1\xce\x11\x41" "\xef\x87:M}\xccP\x1f\x80\x8b\xfd\x94\xe4\xdc\xf)\x15\xaa\x2\x30v\xbc\xc8\x0\x64\x90" "\xa4\x36\x85\xea%\xaa\xfc\x18s\x2\xeb\xde\x7f\xe1\x96Z\x4\xa5\xa3\x98\x98])\xf0\x8e" "\x8Q'\xb5k\x5s4\xd8\x8e\xb6\x38\xa4\xdd\xe6J\xfd It\xc3\x93\x95\x36\xb1\xb6jT\xb4" "\xdb\x81\x15\x18S\x91W\x18\xf7\x8\x13\xf0\x96\xcc\x1b\xe\xa2^6;I&L*\xd1qX\xa4H\x9f" "\x91\x45?\xbe\xdb\xde\x15\xd7\xb7M\x7f\x98\xe8\x1d\xf2\x32Qx]X)[\xa2\x97\xf2\x95" "\xaa\x62H\xa9\x12\xcd\xd4\xf1\x11\x1ekb\x8e\xec\xbbQ9p\x9ev\xeaJ\xb7\x43\xce\xc8" "&b\x1d\x8\xe6\xbc\x64i\x1c\xc9\xb<<\x17x\x93\x1a(\xd3\xd5\xb1\xe2\xe\x96\xc6\x43" "1f\x13\xfcH|\x9b`LCF?\xa4S;\xca\x12\x36(noZn\xeb/\x1d\x9c\x34\xbd\xde\x45\x95IZ6" "_\x88\x5]\x92hT\x1c\xf1\x65J\xcfG\x8d\x38JT\x96\xa8w.\xa1@'Q\xa0\x93X*f%\xa0\xa4" "H\x16\xb5\xfd\xbe\x16h5\xd5\x98\x64\x42\x96$\x9b\x92\xcc\x90\xaa?\xd6\x44\\\x9a\x19" "\xbf'\xf5\x9c\xb0\x61ls\x6\x7\xf\x33\xc7\xdfN\x1d\xe6J\xc8\xc5\xbb/\xfa\xc1\xef+" "\x1b\x30\xe5\xa0'^`\x4\xcf\x64\xbb\xe2\xc6q\xe\xdc\xfc:\xa4\xad\xd6\x1\x6\x33G\x8" "\x86/\xfa\x66R\x82[\xc8HBsnG\xaei\x17\x18\x3\x65\xc7['P^\xed\x1f\xcc\xa7\xc4>\xe5`\xf0g\xf1\xaa" "*\xfd\x64/v\x9d\x1a\xce\x8e*\xaa\xf3\x88P\xf0\xd7W\xcd\x80\x8c\x92\x1dqn\x96\xfb" "\xc0}\xa7\x86\r\xfap\xce\xae(\x88\xc0\xed<\xbf\x95\x86\x44\x35\x32\xb6\x8d\xae\xd9" "\xa9&e\\\x15zAl8:S\xd8\xf2\x83*NgF\x81\x12\xa0\x9a\xdc\x83~\xd8\xec\x95\xf7\x8R\x92" "\x1fP\xd4\x41r9\xfc\x42\xee\x36$\xca\x97\xf6\x82t\\\xc5\xe7l\xc7\xc6{\xd9\x9f!\x80" "\xf8\xc0\xb7\xfbIS\x9c\x8c\xc4t\xc2\\\r\xdeI\x16q\xff\x32\x9eQ\xbc\xfaw\x93\x46\xd4" "hh5\xa3\xad\x66\x33\xfc\xb5\xe0\xf6~\xc\xa9\xce\xd8\xf2\x15\xbe\xf4\xd2@E>\xb2\xed" "\xd6\xad\xb2\"x\xaa[\x98_\xa1@\xc9\x83M8u=\xf2\x1O\x8c\xe\xe6\xda\xd1\x9e\x8f\xc5" "L\x3\xc1\xf6\xcb\xf\x85\x89\x86i\x1d\x99Y%b\xca\xd9_\xa0\xa5\xb2\xab\xe4\xa8\xb5" "KE}B\xe8\xc3:-\x19Q\xc0\x41\x9ar\xfb\x94\xfd\xa7\x8e\xcd\x92\xbd*\x14\x16\x45\x9e" "\x9d\xec\xa9\x46\x9f\x35\xe4\xc4}\xb5\x31rm\xee\x8f =pB\xed\xb3/\x2]\xf3\xd5\x82" "T{\xb1\xd4_z[p\xd3\x17\xdfN\xbb\x16\xe3k\ry\x8e\x9\x32\xfd*\x85\xb0O\xd6qC\xe4\xb2" "\x87\xa5\x4\x16,\x1fZ\x3|\xcdx\x0\x88\xc5Gc\x85\xaf\x81h\xe1-\x97\xd4K\x6\x30\x62" "\x17Y\x17<\x8f\x1e\x30\x6\xb5\xb1\xc6\xd7\x13\x8b~\xef\xc3\xcc_T\xe2K,<\xa7\xb4\x1a" "\xac\xfd%\xe5T\x88\n\xaf@n\xa4\xc3\xc6\xe2\x1d;U\xb\x4\xf\xb1\x95%\x98\xa7\xe8\xe6" "H\x8f\xe3\x82\x88\xb2\xae\xb6\xc4q\x83\x38Y\x8a+\xfeM+\x9d\x14\xc6W2\xda\x30L\x16" "\xff>\x1f\x8f\x3\x4n\xf0\x95\xb6_\xd6\x9\xda\x87\xec$\xa6\x92x\xbf\xe6\\\x90\\\xd0" "2\x9fjHk\x85%\xb7\xee\xa4\xf7\xaeV\xc2\x63<\xd8\x35\x43&\x9e\x8a\xcdmq\xf5\x0\xd8" "/\xdf\xbd\xe7\xf7\xf7\xb1\xae\xe6s(T\x92\x32\xe2l\xa5P\x85\xb6\xe8M\x9e.\x7ft\x6" "\x8f\x93\xa9\xc\x46T\xf2\xf3\x96\xe5|_v\xf7\xe6\x1c\xbb\xe5#\xdb\xfb\xa6\xe7\x66" "8\xbb\xa3\x6M\xa0%\xa7\x9e:)O\xe7\xf1\xcc(\xa3\xb4\xc5}\xd6\xfd\xc4\x8eT\x1a\x85" "SK%\xe1\xbc\x11\xb4\xf7\x80\x19\x45r9\xea\xef\xd4\xbe\x90\x7\xd2\x5\xf1\xd9\x85\xf3" "\x89\xdb\"@\xb'\x9c\x10\x94\x85Q\xa6\xb4\xa1\x7f\xbd\xa0\xff\xc9\x42\x8b\x18\xb4" "=\xc7n\xfb\x15\xfc!\x82!o\x1b`\xb4\xe3\x44\xa0:\xd6\xc0\xf\x14\x1e\xf9\x9f\x89\xf2" "L\x81\x9c>2\x87z\x92}\x84\xc2\xd0\x6\x94\xf\x39\xca\x8bq\xe5\x95\x16s\xea\x9b\xfd" "\x17I\x92\x32\x19\xde\x38\x92\x9e\xca\xa9\xce\x43\xb0l\xfa}\xa1\xbb\xed\xfd\xa5l" "a\xffl$\xf4\xeY\xb1\x38p\xd5\xfd\xeb\x82\xd9\x81\x15O\xae]mQR\xdei3\x93YF\x1a\x41" "\xa9q;k\xbeG\xe8h\xc9\x33\xcdt\xc7]\xb7\x1d\x13\xba\xe4\xde\xc8^\x2\xfa\xa1N\xad" "l\n%;\x16\xc7\x95\x14\x65{\x15\xe6\x8c\xcf\xf9\xeej\xa3\x85\xcf\xf9\xe2\xc5=\x9a" "\xe4\xf\x85\xc7\x93\xe4\xe8\xffP\xb2\xb7\x42\xfO\xe6\x98\x7\xbc_7\xc3\xe3\x0\xe6" "\xb3\xc3T\x9d\x1d\x32\x46\xa2\xe7\xf\x9\x10T\x11\x35\xbd\xf8\x5\xe0\xa6\x98\xe2\x36" "\xb6Ig\x2\xd0\x61$\x16\x87\xb7\xb8\xd1\xa0\xe5\x17\xdf\x4v\xda\x9\xd8\x96g\xa7\xab" "7_\xd2g-\xcb\xab\x81$\xe5\x11P-\xdb\xd0\x8b\xa0M\x94\x1d\xf1\xce\xbd\xcc\xf7\xed" "H@\\\xbc\xc3\x37t\xa6\x8cR\x12\xfco\x13&A\xff\x41<\x98O\x8b\x43\xbd\xfd{\x1a*45\xf1" "Z\xf0~\xf4\x97\r>J\xb\xb9G\xc1\x81\xe9\xca'\xcc\x14\xa3[\xd1\xbd\x9hu\xb4Xs\x8c\xa2" "D\xf8\x8c(r\x8bt\xe2\\\xb8\xc4\xfc\x10\x95\xa5l\xa7^Ei\xad\x30\x82\xef\x19J\xdd\x11" "5\r\xb3\xb7K\x96v\x1d\x45\x38Yo\xf7$;\x1e\x1brG\x16\xa1\x44\x10n\x8\r\x42\x3\x64" "D\xfdG)\x98\x46\xc\xe9\xab\xbd\x5\xb4*\xf9\x38\x9a\xc4R\xbd\xbb\xa3\xa1:\x96\x89" "\x0%x\x9f\x16\xb9\xd9\"Q\xfd;;\xeb,a\xed\xdb\x37\n En;\xfe_@9\xe2U|E\x1cRO\x80\x87" "\x1[\xaf?\xf0_Q\x86\x9f\xb9u\x12\x96\x8b\xdb+IX\x9c\x1cz\xf1\xe0\x85%\nGete\xf4\x80" "\xb7\x2>$\xc7g1\xac\xe\xabg\x4\x12=w\x97}:,LV\xb6\x91\x34n\xbeX\x9c\x61\x9c\x4Q]" "4\xf8\x1f\xc6\xa1u'\xd5\xd8\x31\x90\x13\xc5\xd4\xff'\xcc\x39%\xe2L\x99#\x1a\xc7\xfb" "\x9e\xaf\xb\xbaH-;u\x80z\xc8]\x3\xcd\x9\xde]\x9a\xe0\xb0{z\x81?\x4Ixe\x0\n\xe8\xa7" "\xe0\x0\x80\x30\xf\n\xb8\xc3\x99\x5~\xdd\xba'=\xd2\xe1\xb2\xa0\xdc\xef\xad;3.mJ\xc1" "\xff\xad\x84\x61g\xdf\xd7\xe\x3\x46\xda\xf8J\xf2\x92\xd4\xf4$%n\xd5\xacN\x10O\x80" "ipP\xd5\x8\x44\xa7\x8\xea\xc9\xe7\xf7xO\xd0\x16\x46\xf3\xbd\xcY\\\xa5\x1e\xe6\xbd" "`}%Nx\xad\xdc^\x15\xc3\xb6\xacI@\xec\x86Z\\#\x10[k\xe0\x9e\xa0\x9f,\x5\xd6\xd7i`" "\xa8\x43\xb8\x1e\xe4\x33\x97\x7f\xaa\xc3\xcb\xda\x85\xcd\xd2\xf4\xdb|():w\x82V5\x99" "*\xf8\xf3\xb3\x8b\x44\x80\xd9\xa1\x39\xb1\x66#E\xa8\xab\xe1\x63JwIl?WY})\x85\xe9" "\xe5G\x17\xab.\x99\xca\x35x\x94\x41\xbc\xdd\xed\xe9\xa9\xe2\x10k@\x1d\x96\x84\xad" "\xbe\xfe@\xd6\x7\xf0u\xc1y\xe9\xcc\x3\xe5\x9e\x65\x43\r\xb7\xb\x44\x1d\x43\xdf\x3" "\xf2\xaao\xf0o\"KnE[\x1\xc6O\xb8\x9e\xec\x91\x3\xe4\x84S\xa9t\x9bM`(\x8\xc7\xe4\x8" "\xa8\x90\x30\x91\xd8^\x6\xaa\xf6\x35\xd0\xd5)\xc3\xcd\xd1\xb8G\x9a\xc0\xf4 \x8c(" "K\xb6x\xa5G\xf2\xbdw\xbb\x17\xc8mE`COz\xd1\x93w`\xa6\xaaU\xb6\x14\xcf\xa9\xff\x8c" "\x9c\x96V\x1a\xe6\xc8\xf2\x12\x1cN #t(\xbcQ\xdf \x99\xb6\xc4\x9e>\xfa\x18\xe6\xd4" "9\xe6\xe6\x98\x1etn\xbb\x1d\xc4\x61%\x9d\x8e\xa0\xf8\x9\x9cG\xcc\xa2{-\x98+r\xc9" "\xa0|\xf2\x1b<\x5\xd6\xe2nn(n4\x8b\x89\x44\x7\x8e$\x80\x9f\x9c_=\x1KL\xba\x2S?V!" "\xbf\xba\x1f\xe\xdbwlcGFp<\x9fs\xba\x89\xb1\x96\nId \xc6\x8fT\xe5\xb9\x1\xa6\xd7" "3\xd7\xac\xc7\x9f'_\xff\xb2S\xf3\x89\xaaH\x0\x84\x46\x8b\xb3M\xa1\xe7\x97\xe4;\x7f" "n\x8c\xaf^\x8c\x93\x6\x9a:'0\xe5~\xc3\x9bg{\xb7>?\x7\xc2\x5U\x99\xf7\x6.S\xb3z_\x0" "\x99\x90}.\xd8\x7f\xf7\xa8,\x95\xfb\xae\xb8\x88\x3;\xdf\xd6{\xa3\xa6\x3\x1aL\xdc" "V\xcb\x1eL\xf5\xb0kF\xe1m\x98\x8b\xec\xce\xfa\xcb\x9e\x1c\x3p#\xd7\xbf\\\xcf]e\xaa" "f\xa1z\xb3\x61\xbey\x81\xf1\x32\xa5x\xf3\xab\xfb\x97\x96\n`4\xf0R\xd9\xd5\xaf\xdc" "\x6yx.\xc9\xf$\xf\x94:_\x9a=\x96\x9e\xd7\x39\x92T\xffg\xd8\x9d\xf6h\xf7\xc5o\xce" "\xa1\xff\xdc\xf2\x4\x81GJ\xc8I]:\xf4\xb6\xd7\xee\x9>6\x9c\x5\x7f\xbp\x85\x82 i;9" "\x8a\xcf\x8e\x81\x43U\x81\x32\xe4\x39\x14\x5\xe3\ns\x93|S@.E\x9fJ\xa3S\x9c\xf7\xa9" "\x9a?Q\xc0\x30}\x4]\xf8\xb7wW\xe9.\xa2\xf5\x1b\xf0\xbbOw\xd3\x90M\xd3UfXp\xc2\xb5" "\x9f\x1e\xd7\xf8O\xc7\x1f\xdd\x7f\xbl]1\x82\xdbw\x82|\xa6\xa2\x6\r+\x8c\x83\xc4\xea" "JC.\xf4:M\n\x95,\xc6\xcb\xbeR\xa9\xf0\xcd\x66\x1aS\x89s\xde\x41\xff\xe9\xc5\xcfU" "\xf2Pk\x9e\xfe\xe5\x1f\xba\xe5\xe6;\xdc\xf5R\x84\x99\xa4|\x3\x11\x63\xc8\x8d\x30" "\"`g\x84\xde/F\xa9\xc9#Z\xee=Oq\xd4\x95\x9b\xc\xfd\xc5\xb7\xe7\x8c\x8c\n\x8f\x9d" "\xc9\x94@\xc2&=\xba\xcb\x34<\\d\x85w\xf5\x61\xbP\xea\xb1\xcf\x7f\xd0$\x19\xef\x39" "A\xc7\xca\xb\xe\x64\xeb\xadK,\xb0Z\x7\x93\xdb\xc3\x8f\x19\x46\xd4Gg\xbd(\x7f^\x97" "y\xc6\x11\xca\r\xaa\xa1\xe7\x39=\xbe\x6\x83\xc8\xd3\x45\\\xdf\xeb\xc0\xe6KT\xb7\x37" "\xe2\x98\xdd\xa6\x5\"|\xcK\xba\x87\xaa>\xc7\xfan\xba\xec\x39\xe6\xef%\x37\xd5\x97" "C\x91\xd3\x17\x39\xd9\xfc\x42\x98=\x81\xae\xe4G\x11\xc8#\xf3_\x8e#!\xact\x94\x38" "qs\x9d-\xbe\x97H\xfehY\"c\xe7q?'\xe0\xd4\x9b\x9b\\\xb7\xa4\xe5]\xe5Nk\x80\r\x15\x85" "dP\xff\xd3\xae_({\x12\xaeOC\x8b \xae\x9e'\xe6\xca\xa0\xf>\xae\xad\xbe\x8\x43&\x84" "\xfd\xf9\x93\x1e\x92UD\xa6\x80\x18&\x2\xa3\xc1\x99}\xe5\xd0\x63\xb\xd5\xa0\x10S^" "f\xe1\xc1#\x1=#\x96k5E\xc7\x43\x1c\x39\xb9r\x95\xbf\xa4\x9\x9d\x14\x46\x10\x4\xc4" ",\x85\x9^\xea\xcb\x9bG\xc5\x93\xbcm\xb8\x63S:\x86\x19\xba\xe0\x90\x95\xde\x8e\xca" "C-M\xddI\xaa`\r'~u\xdc?\\f1\xe2\xa0S\x82\xcb\x0x%\xfa\xdbwC\x8d\xcf\xa7\x8e%-y\xb6" "\xa1\x96\xd5\x16L/\xeb\x85\xd7^\xca%\xff\x80\xb1\xd9\x7f\xe1\xe\x87\x96\xc\xa0\xfc" "G\xc4\x1d:!;\xf1\x41\xb4\x8b\xc3\xaa\xa9?\xa8\x62\x45\x6\x46h9Fe\xbf\xd5-\x12\xc3" "\xbeL\xe3\x9e\xfd\x81\x11uC\x98\xa9\x44\xc3\xfd\x1a\xfa\x98\xec\x33{\xaa\xaf\x89" "\x9d\x35\xe8\x4\xcf\x41j\xd7\xfe\x45\xff\xf1?\xc6\x35@\x7P\x10\x43\xf9\x8f\xe8\x42" "\x8d\xe8\x1\x39\x1\xbaj(q\x1a,\xa8Z'\xb\xb1\x35\xb7/\x1dP&\xe8!u\x81\x86\x7)\xe9" "O/\x18x\xa0\xe9lY\xe9\xf6'\x14\xfb_\x8f%\x0=\xfcsG\xe9\x90\x7\x8a\x9a\x33\x1c\xb3" "\xa6\xa5\x35\xbc\x61\x86o\x2Q=\xeb\x98,J\x13\xad\xbf\xba\xc3\xffp\xa7\x33_@\xd5H" "\x9eH\xe5\xed\xed\xef\x16\x19\x19s\xd9\x32G\x9c\x62\x18;\xe%\xee\x8cOv\xd4\xf1\xae" "E\xda\xeaJ\x12\xae\xdd\x9e\xf8\x1d$\x8e\x8d\x19\xf8\xc8\xa5\xbe\xcd\xd1\xea\x1e\x98" "x>\xb7\xa3\x81I\x17\x8Q\xb1\x94,\x96\xc5=\xe0m\xef\x80\x91;\xfc\x4\xe5\x39\xecg\xc1" "\x10I\x8d\x15\xb7\x82h\x85>\\r\xf4\x85\xf8\xa2{v\x85i\xe5\x42\x41\xf6\x11Xu\xe2\x97" "2\x92\xcfH\xff\x91\xd4^\xbe\xd6'\xae\x9f\x7\x66\xd2\"\x1\xb2\n\xfd\xd4\xe[\x17\xcf" "3\x7f)\x99\xe0\xbd\x15\xb8nF\xeb<\x18\xfc\x12\xb7\xdc\xad\xcf\x9d\xd5\xcl~?7\xe6" "\x15\xa8\x92\xdb?W\xe2P\xa0r\xa4\x9frw\xddj,\x80\x42i\x82\x33\xd3Zi\x9b\x17\xec\xa5" "\xdb\xdam%\xe\xd4\xa1o\xcc\x89;\xf0\xdc.3\xfb\x1e\xbd}\xed\xea<\x1c\x39`<\x8b~\x1a" "Z\x83:\x8f\xcd\xd5W\xb\xd0\x88t\x9b\xb2\x32\x61Sfhyb\xc7\xe5n\xd0\x89\xcd{\x9%\x5" "\xca\xfaZ\x80\xf5\x3\xc4\xcf\x33\x7f\x7\xad\xf0\xd1\x6\x93~%g\x8\x39\xd4\x91\xf7" "\xbf\xf7\xa5#\xdb`\x9d\x12\x63(\xc1\x61\x13\xec\xbc\xbf\x9c@\x4\x90\x44'\xa1\x8\x61" "\x8a\xe5\xd4\xed\x80\x9f\x8c\xca\xf7\"Q\x10L\x94\xec[\xee!\xf9\x1b\x17\x9d\x31\xdb" "\xa7\x9c\xee\xe5\xec\x7f\xf6\x98\xeb\x84\xab\x1d-\x1a\x62OX\xb3\x62*x\x84L\xe5\x14" "\x98\xb2\xce\xf3\x8e\xaf\xe2Y\xd2,{\xa6\x11\x4\x65\x1a\x86 \x8\xbc\x1d\xdd\xa5\x8c" "\xc4_f>\xb2\x64(\xda\xa8^w\x85\x36:i\xd2y\x9\x96\xef]\x96!\xd5\x30\x42\xf4/yIb\xfe" "\xa4nF\xf3{\x8a\xd1\xfbv\xfc\x8d\\\xf2\x14hC\xf8\xcc\x62Q9\xc7_\xb4-\xdaq\xa7R\xba" "\xc4\x8f)NL\xc\x82\x89\xfc\x46\xda^\xfd\x9c\x91\xbd\xa6\xd0'Q\x8b~\x81\xe8\xb2\x1f" "uZ\x96\x15\x62}X\x12\xac\xa6t\xd1Rz\x11\x85\xee\xd4\xe3\xc6(\x19n}\x7Y\xb1\xca\xe6" "\xb9\xb7\xe9\x1\xe9Y\x9a\x65#\xf\x1e\xe4i\xcd\x33\xb9\xbd\x9c\x10LD\xe3\xc1\xab\x96" "l\x96x\xbd\n\xd7\x81\x11\xa4\xe0\xf2\xd0z\x1\xa0\x38\xce\xdep6\xd0SMhJ\x15\x62\xa1" "z\xd6J\x0\xf2y \xc\x3q\xb1\xcb\xa6\x17Gg\x1d*!\xd3\xf9\x64l\xa2\x90\xf6\xb8$\x18" "\xa9o\xa1w\xc6'\x82wPK\x7f\xba\x93\x63%\xf5\xfa\x12J\xb0\x18\xa1]\xc1\x8d,^\x8f\x93" "\xcd\xee\xa5+\xee\xdbx\xa5x(\xd8\x1a>l8\xb9\xfa\xf3\xdcN\xb7'>\xce>\xa4H*\x1c\x62" "B\xa3\x35\x86,,7\x17\xf9\xc9\xed\x95\xf7{\x14\xcN\x15i\xb2\x19/\xc7\xdc\xf7\x2\xd0" "\xbc\x9aPB\x8e\xc4\x6\xf8\xbd\xc\xaf\x88kM\x97\x93 \xd3\xe4)\x81m\x88\xf7\xc7\x14" "m\x96\n\xc1.p\xf2\xcbz\x9fN>6fe\xab?\x1bKd@\xf5^\xea&\xdc\x9e\xe0\x9k\xb7v71t\nS" "wfI\xc\x8c\x17G#\xbf\xe\xb4\xcSp\x1a\xad\x12\xb2\x1d\x43j\xdc\xe2\"\x3\xc1\x5:\x9d" "\xc4\xe9\xf1z\xe6\x17\x88\x8cKNo:r\xeNcf\xba\x62\x82!\xa3\x87\xd8\xab\x15\xe0J\xd6" "\x93\x87\xc3\x10\xd3R\x8b\xd2\xfa\xa5\xb2+\xff?\xa4\x94\xf5\xfb\xfa\xc4\xf7q\xc9" "\xc7@+\x95X\xcZ\xc4\xbb:\xf6\x92\xa7\xc\xb2\xc8Q\xfa\\\xf1\x17>\xec>\xc2\x9bZ\x5" "\xa0\xb7(\xbb\xbbQ\xd3\xb7\xad\x8b\n\xf1z\x15\x63\xe8/\xaf\xd9?\x8bq\x18\x1f\xb7" "\xaf\xe3R\x87ON\xc6\xd3\x34\xabgGQ\x9a\xb8\xe8G\xb7\xbc\xed\x33\xebTX\xa8(\xe0t\xe7" "K\xa6!\xbd\xcd\x3\xfe\xa6\x4\x7f{j\xbd\xa0\x1f\xc7QK\xa1\xaf\xf0\xd4\xd0\xc0\xcb" "\x8fNB\xd5\xa8~9]\x9a\xcd\xd0,\xcc\"\xc\x15qSB \x18rXF\x0\x9a:\xcd\x8c\x8c\xdd\xb6" "k\xc6\x83k@&\xfd\x9fRj\xa2u\xd0l\x81\x31y\xe5\x92O&\xa2P\x94\xe7\xbd\xa8\xbd&\xaf" "\xc4\xce\xb4\x1d\x89\x64\xd4\xfcJ\xf1\xdf\xb0Y[\xc5\xd6qL2\xf1]\xc7\x19N\x9a:s\x1" "\xe0\xfc\x95" "\xe7\x8d\xad\xd2\x5\xb5\xf4,\xc6\x30$bK\xaa\n\xb4\xdd\x44x2\xb4\xe1\xdb\xa7{\xdf" "\xad\xd2#\x98\x9f\x8e\x95\x8c\x8du\x9a\xaa\x37\x93\x6\x64\xc6\xef\xecp\x81\x16$\x8a" "*z\xf3\xd6V\xdd\xea\xfd\x0\x9b\x7fS3\x85\x46\x8\xe6~^X\x8a\x85qg\xad\xf9\"\\\xf6" "\xc6\x41\xf5\xe1\x9c>\x8g\x8a(\x11\x99\xed\xda\xc8\x31\xb5r#\xb1\xbe\xea\xdf\xdc" "\xbc\x8fo%\xd3/\xca#6\xc8\x8\x16.\x8f\x38\x16V\xe8G\xfbl\xb1\x39iW$%\xaa\x5\xac\x83" "\xc\x33\xden\x3\xf\x86\xa3\xa8]*f\xa7\x7f\x10\xd6\x45\xab\x45#\x97\xbf\x0\xdb\x8b&\xe1\x15\x2n%gF\xcd\xcx\xa9Y6O\xde" "m\xed\xdc\xd0\xf4\x41\xa6\x1a\x1e\xba\x32\xc7\xbc\x17+\xb0\x95\x12\x14\x8d\x1e\xba" "\xc9\xe7\x91\xb7\xd5\x1bq\xca\xd2\xdc\x9b\x83\xb2\xf9\x9b\x37&`}\x9c\xbeX\xb4\x99" "\xa1\x37S\xce\x87\xfc\xdc\xe2\x1c\n\xd0R\x8e\xd0\xef\xb9\xb2\xc9'\xf5|x\xc6&$\x8a" "\xa2\xb8\x35\xa0y\x12\x44\xc5\x89\x66\x86\xa6\x61s\xec\x9f\x80,Lc:B\xb0\x86\x33M" "*Hx\xeS\xd0\x8\x9${\xe6NR\x9f\x96\xad/\x8b\x39\"\xa6\x9}AM\xde\x1e\xc7o\x95R\xf9" "\xb8\xd5\x8b\x8e\x34\xf3Y\xady++\xe5\xc&\xdb\x5\x3^t\x97\x16.|I\xc3\x8d<\xd9\xb9" "\x8d\x62\n\xa6t\x92\xbeZ\xfc\xa3\xa8\x1ap\x80\x18\\\x7f\xbQ\x5\"?\x1f\xa7x\x5P*." "\x8c_\xee\xa2v\x99\x85\x8d\x84\xa9XB\xc5\xf2\xfbhhmY\xfe$\x9\x1f\xcd\xde\x13\x9b" "dc\xbcl{\x1e\xe\x90\xd2\n\x83\x65\x1a\xf0\xc\x85y{\xb9\xf5>\xce\xc1g\\~\xe6\x36\xd0" "\xd9\xe7}\xbd\x8f\x89g\xf\x85^\xe4\xd4\x80\xf\xf3\xf6\x95\xe\xff\x9\xbb\xf8\xa0\xda" "\xf6\xb8$(@\xcf\xa5\xbas\xbe\xb9Q\x15\xf4\xa7\x8b\xcc\x2\xd8^\xcc\xe0\xc0\xf2\xef" "o2\x8a\xd1\xddl\xc0IZ3\x15\xb4\x14\xa4\xd6\x1d\xa5\r\xa4mz\xcc\xef\xf6\xeeVE\x18" "\x5\xd2k\x3Y\xaf\x19\x35\x31\xf9_e\x89\xce\xado\xa0\x41\xaf\x15\x30g\xf8\x8a\n/\xec" "\xd1\x35\xc5\x66\x82\xdb+E\xa7\x1d\x1f\xa7\x37\xc0\x64\xee\x9aO@K\xb7*p\xb3\xaf\x3" "05\x93\x93$~\xc7\x81Q$\x82W\x98\x65$\n#\xcd\x84y\xf2\x1c,D\xa1\x19\xeb\xc4\xe8\x1b" "0\x8d\xd8\xaa\x86\xe6\xc=\xd8\xad\xa5\xe\r\xfe\x83\x8\xeb\x1a\x7f \x1e\xde\x8d\xcf" "\xda@Z\xef\xb4~\xel\xa7\xdd\xb3v\xdc\xb2\x1d\x37\xf7\xac\xc4\xd3\xe9\xf2k\x3\xa8" "\xde\xe\x89@\xca:\x9eu\x96:8\x9d\xf8\x3\x8d,H`r\xf6\x1c\xc\xea\xf5\x0uZ\xa6~f8\x82m\xb1\x34VM\xb9\x93\xce\xebnzfY\xc7\xc5\xc0\\\x31\x2g\xd5\xf8\xa2" "N\xec-\\\xc3\xe3\xf3\xc8\x8\xe6\xd6\x6\x8d\x1aWdk7\xfa\xbd\x98\xec\xb7\xba\xf9\x9e" "}\x9a\xc4\x41JI\x1as\xca\x34\xc5/9CR\xf6\xb5\xa1_\xf\xc4\xd8\x86\"\xda\xc6\x94i\x9c" "$d\x84\xad\xac;\x1d\x36j\xfe\xde*,\xd2\x4,\x90Qjfj\x19\xa9\x1c\x80$\x8b\x11\"K\xed" "\xdf\x1a\x32\xe#\x7\x39\xe7U\xd0\x98\xb6\xa6s\x15S_L\x18|\xfag\xed\x81z\x3PV5?\xc8" "Y\xbf(c\x17\x99o\xff\xb4x\xa2$\x8b\x90\x8f\xf1*\xbd\xe7\x5@\"$\xa3\xee_F=\xd3\xd2" "C\x87\\\x84\xe0-\xb9h\xec\xa1\xccR\xc7Qq\xeaP\xd6\xa8\x8c\xa9\x13'\xa7\xaaW\x95\x1" "\x9f\x36\xc0\xa1\x9c\x9:\x1c\x9d\x37#\xc7V\x8f\x9d\x41\xf2\xe4\xff\xb7\x12\xfdG\xf8" "\x97p=zb\xbXk\x81\x93l\x84\xaa\xed\x61\xd8\x43\x32\xb3\xbe\xbcO\x95\xb7\x96\xb9>" "\xf7\xa1\xf5\x65\xc4\x94\xf8\xa6^\xdb!\xe2\xee\x18\xdc\x2U\"\xef\x8eY\x98\x87\xca" "(6\x6\x9c\xdd\xd8\x89\x88\xe5\x86)w\xb7G%\x84\x30\x31\x98\xcc\xe9~\xf9\xf9\xe1\x44" "m\x1f\x1f^\xd1\xcf\xc6\x66\xa8\xa0\xc3\xa0>\x17\x92\xef\xb6\n\x9b@eI\xe0\xde\xdf" "j\xcc\xdb\xd9\x87\x42V\x8bG5\xa7G\xd8\xe5\xde!\xe6\x30\x12Z\xe0\xc6\x91\xd0T\xe4" "!\x99\xc1[\x1f\x80\xca\xfan{\xb2\x0_7J\x9a_\x99\x0\xab\xb7@\x9c\xcdP\xc3\xaf\xcc" "\xab\x12\x14\xe6\xa8V\xf7\xc7\xeb\xa8\x9b\xc3)\x18\x1\xe1\x34=\xa9\xda\xd2\xc6\xed" "\x7\\\x8e\xca\x14#\xb4>Xz\xecg\xe6\x14Rr\x81K?\x19\x1b<(V9\xf9\xe2\xd6\xe1H\xa0-" "\xc2\xcb\xc0\xe0T\xd6)\\\xd0]\xba\xc1\x95\x4\x0\xa9\x18\x93\x16\xf0&[\x86\xa7\x32" "\xd3\x2\xc5\xbe\xe8\xed#7h\xf2\x37\xc6&\x0\xcb\xaa\xff:\x11\r^\xfbl\xc7\xca;\x92" "\xd9\x65\xca|^\x8d>d\xec\xf2\x39\xfe%\x7\xfcy\x7f\xdb\xe5L\x11\x12\xb2\x8dM\xa4L" "`\xab\x9\xd9\x94\xc5\xbax\xd6\x63\xa2Y\x19\x34\xcc\x5+\xc7\xc\xd1\xdc\xa3\x32\\\x66" "\xc9\xcb\x98. 9\xf5\xdbp\xc8H\xd3\xdc\xef\x65[\x1c,\xd0\xce\xc8\x86_\xe8\xe1\xc0" "\xa2g\xbeOp~\xceoZ=\xfc\xa3\xcc\x1e\xdf\x92\xc7`C\x9fQ\xaai\xa4\xc1\x80\x1e\x96\xca" "Mn\xa4\xad\x98\x2X\xf3\xd1\\\x89\x39\x13\xab\xce\x9\x10\x19\x84\xc6\x1b\x91\xd6\x3" "\x5>I\xa9|\xb8/\xbap}\xae\x8a\xf1\xd5y\xfdi\xc8H\x1c\xb7\xb7\x12\xcb\xcd\xdbM({\xe9" "\x95\xe3,\x2\xb3\x99`*\x8\xb9\xdd\x84\x90\x39\xb5g?\x19\x30\xbe\xc7\xbf\x36n\xb0" "\x82\xd2\xca]\xb2\x38\\\x8c\xc4[\xe3\xfc\xe\x31\x82\x1\x91\xa8\x14\xeb\xa7\xc4\xf2" ";\x19\x38\xe6\xc4\xd8\x0s'\x87\xcd,\xb9\x7fv-\xfc\x85\xd4\xb7\x98\x80\x9b_\"T\xd8" "&\xca\x42\xb3&\x95\x42\x8d\x12\x2\x98\xb4L\xf3\x84\x94\xe5\x62@\xb7]\xf1\xe4\x1e" "F\xe5\x83\x95\xca\xad\xd0mm\xa0\x33\xe8\x1a\xde]\xc3\xb8=\xaf\xf7\x43" "\xc6\xe9\xe4\x87\x16\x0=5\x8d\xf6<\xd7\xfd>/r}\x1f-\xc)\x96/v\xd5\xc9^\xd4Ko\x8\xd0" "R\x2ZfW\x85\xf2\x64\xa3\xd5\xf5Y6w\xb6\x30\xe6(\xb5\xea\x81\xfb\x37\xcf\xfdz0\xb7" "\xfa\xd2&\xb6\xfd\xc8+\x8x\xafL\xe\xc4\xf4$:\x80{\x98\x39\xea\x62\xbc\xbd\xf7\xc2" "\xe9\xb3\n\x62\x38v\xe6\x32\xe0\x84\xeb\xf4\xa2\x1e\xda\x4\xfc\x88\xa1\xc0p!\xd0" "\xc7.\xc3\xe9i\xd4I\xfe\xb0\x8eX&\xec \xe5[!\xeaq\xeaY\xf6\xe3\xb0q\xb\r\xda\xb3" "&\x1bJ )\xec\xabh\xc1\x9a\xddQt\xe5]^\x98JN_8\xf5\x92\xa3\x2\xfe\xe6\xec\xe7\x32" "\xdd\xe8\x41\xa2\x86r\xc6 \xcc]htU\xa5\xc0o\xa9\xfeh\x83\x94\xa0O\x96\x31.\xd0%\xb7" "\xaao\xbc\xe2\x92_:\xe5Y\xcc\x18\x86\xbe\xec\xdbp\x82..\\\xa3\xf7\x32\xa8t\x4\xb1" "Sj\xac\x46\x99\x89\xe9\x61\xc\xfa\x44\n\xce\x43\x87Zp\xcaQ\xf3l\xb6\xf6)\xd9\x42" "L\x1e\x35\xa8\x8f\x92\xd5\xda<\xd8\xcb\xaen\x84%\xa3ih\xe2\x1fO04\x97I\xe0 [\xff" "\x8dU(7\xd6\xfc\x39S%%7\xb\xba\xc8\x33\xf7_\x18T\xc9?\xc5\x33\xa4\xaaS\xad\xf7\x0" "\x81s\xa7\r\x94\xa4\xeb\xf5\x38\xea\x9e\x62\xbc\xda| \xe0\xa0s\xbe\xe2\xef\xac\x34" "\xd2\xef\x1d\x3\xba\xbdQGe\x9eP\xb5W\x4[.\xb8\x9d\xb3\x3t\x9b\x4\xd3\xf5KC\xfe\xd6" "\x12\xfc\xc6\x82\x6\xe0\x1\xa7\xaf\xe9\x2\x30\xd9\xc1/t\xa3,~\xdb]\x2\x41\xdc:]Q" "H\x1f\xd7\xc8\xfa\xe0\x8f\xee&?\xbc\xed|}\x91\x1b:0<\x83Z\xf5\xfa\xdf\xd2\x18\xf6" "\x1a\x9dm\xe8\x4\x85\xab\xca\x88 \x0G\xb0\x94\x44\x1fwg\xb9z$\xe8\xc6\x12Y\xf\xa2" "@{\xab\x1e\x8bV\xc7\x19\x14\xee\xf2\x35]\xd9|\xfa\xfc\xc1\x92\xbc\x6\xfc\xe0\x63" "\xd3\xd9\xd1\xa6)\xaa\xdcu\xe3\xbf r4\xc2\x8\xe7\xe3\x6\x63\xed\xd6\x91\x4\x30\x65" "\xc9\xcb\xc4s\xd9|mM\xd3\xdf\xf5\x9dj\x9a\xbc\xdd\x44\x12\xc3\x12\x8f`1`\xaa\xd8" "\xf8\x1cnzM\xca\xf3_:\x99\xb4\xea\x10\xa3\x43u\xb4w\xc2\xbf\x84\x65!\xa7\xea\xbd" "M(\x7\x8e\x93@E*\x19\x8f?Z\xcc=\xb7\xe3\x90\x89\x39\xffn7\x9\xc6\xa3\xfd\x98\x89" "C\x9aJ\xe3\xe1\xb\x61\x8c\xc9.\x14\xb6\x84)\xa3\xad,\x80\x94\n\x10yE.\xc2\x66\xf2" "Te{\xe7\xd7\x9a*$\x8J\xf7?m\xf7\x1f\xbc\xd3+\xf6\x91:?\xab%\xf9wx\x7f{\xb0\xc3\xa3" "\xe8\xba\xb3\x8dz-\xb0\xb4\x82iPd=\xd1\xe0;\xd7\xdd\x1f\xb1I\xa3\x38\x62\xa8\x92" "&\xb7\xcb\x45M\xaf\x61\x31(\xc2\x7Tp\xe4.p\xa9\x44J\x8en\xcaRcE\xabH\xe6\xf5\x16" "\xb\xa2;[\xdd\xfd\xa6\x4\x9e\xc4N\xd1\x46\x1c~\r\xd5\x14\xb1n/\xb2\x85\xf7 9\xde" "\x80\xd2&\xe1|\x8c\xf0\xd2k\x9f\xa3\xa6\xe9H7\xeb\x9e\x93\x3\x36\x88\x97g\xa8\xd7" "\xea<\xe9\x80\xa8\xea\x95R\x8b\x0IW\xbe`g\xcd\x9b\xd8\xe0*\xf#\xcc\x17\x62\xcc\xa6" "V\xd3\x34\x12\xff\x45\xe9\x17\xfdJ\x3\xebn\x8c\x1f\x43\xfd\xb0\xa8\x96Z3\xb4\xfd" "&\xbc$\xa2\xb\x30L\xa8\x17\xe8\x84\x95\xba\x9b\x36\x1a>\x93\x37\x17\xff\xb0'\x1f" "\x7fp\xc5\xd3\xcb\xa1\xe8m\xfQ\xbf:\xba\x19M\xaf\x32\xc3\\yf'\xd0\xc{\"q\xac\xe2" "F>7\xe9{<\x82l\xf3\xdb`\x2\x8f$\xf\x94R\xcb\xe0\x8f~\xbc\xc5\xfd\xb1\xbc\xbb<2z\x9f" "E\xb\x9eVq\x91\x61\x1\xd6\xe3\xe5\xe4X\xca\x31\xf0M\x12\xf5\x92\xf8;\xad\xa2\xc3" "h=8\x86\xaa;@9c\xab]\xbe\"\xf\xec\x0\x3ztX9\xf6z65\xdf\xd3\xbf\xf0\x8f\x36t\x82\x96" "-\xed\x88\xec\xf6\x32(R\xd6\x43\xa5M]0>\xb0K\xfd\xde\xe9\xbb\xa1\xeb\xcc\xba|e;:" "a:\x8eq\x9a\xde\xbe<\xe1\xbd~uN_Iw\xe8\x63\xe3\xc2\xd3\x88\xa6R'\xb4Q\xd4\xf3\xa4" "\xf9N\x6Q<\xbaJ\xc1\xf2\xf5\x11\x61?\xf0\x35\x61\x16\x84\xcc\xc4\x61Y\x90\x0\xe5" "F\xe4\xd9r\xcai`\xe0\x95\xa5&\xe4sZ#B\x1aL\x9bY~\xce\x8\xaf\xa2u5\x92\xbd\x16\xde" "\xd9\x32U\xa1\xe3=\xee\xce<^\xb7{\x94g\xe\x81\x37\xf2\xa4\xa4\xb9\x8a\xc1\x93%\x8e" "}\xea]\xb8@\x8a\x80\x61\x88\xf2\xd1\xdd\xc4@\xcc\xf0\xe9\xa6\xe2\xf0\xc7\x8f\xdb" "\xd7\xb6\x8d\xd4\x93\x9d$X\xc1\x96[\xf8\xbe\xd4VK2F/\xff>\xc8\x92\xc0;\x11\xd3\xea" "\x81?\xabL\xfb\xe8\xd3\x1\x63)\xc5\xb7\xe3\xdf\xed\xf\x8(MD\xaa\xbz/k\xc9n\xa4P>" "\x8e\xf5*d\xc2+\xedkE%\x81\xae\x8f\xf8\x91}S\x97\x64q\x94\x1a\x91\x16\xa2\xd8x\xfb" "%A\xb5\x61vz\xbdN1\xcc\xd8\xa5\x90\xca\x3ILb\xaf\xfd\x64\xea\n\x1b\xc7y\x17=\xad" "\x84\x99\x9cz\x8d\x84N\xb1%\x9d\xe7\xbb[%\xcd\x2\x35\x37\xa4t\xa5$\xeb\xe4\x66\xb" "\"V\x89I\xe6$\xd8\xfe\xa0\xad\x37\xf4\xce\x1e\xc7YU\xee\xfaI\xc6\xbf\x18\x3\xbe\x87" "\xe9\xc9\x86_\xf3\xf6\xb8R[\x8c\x15\xfe\x88\x35\xca\x15='\xe6\xc0\xff\xc\xa5\x10" ")\xa7\xa9\x18]%\xf0\xf1M\x86\xfcy}\xcc\x1f\x99\xee\x97\xe2\x5K\x9c*.\x6\xfd\xbe\xb8" "\xde\xf6\xcd\xd3h\xbf#\xa8X\xd9\xf8\xc1\xde\xfd\xce\xaf\x1bJ\x8d\xe5\xea\xfc`L\xec" "\xcf\r([\xe0\n\xa9\x12\xea\xb6n\xffM7\xad.\xfe\x34\x85;\xbf\xd8|\xe0\x9b\x18t\x9b" "H\x99\x43\xee\xca\xe7\x88{\x0o\xb8'\xd1\x1\x91\xda\xd1\x84\x66\xcd\x1f\x86PXy1\n" "\x8b\x17\x1f\x90.\xa0\xc2j8\x8e\x13\xb5\x9e\x8f" "A{5\xd1\xc8Q\xf9 :\x89\x97R\x15)\xf2\x1a\xd8I\x8f\x96\x93\n\xa7~\xba\xf8.\xe0*W\xbc" "w\xc7\x92\xd9\xf2 )KE\xf4\x8e\xa8\xfd\x94\xe0\x1c\xd2VE\xd3m\x16\x89#V/?\xdc\x93" "\xcby\xddG`\xda\xc\x10<&ur-z\x1by\xfc\xb4$^\xd1/\xa0\xdbRI,\x9c\xceX\xb3\x33\xcf" "\xee\x82(\x12\xf7\xdc\xa6\x8e\x80,E\x1b\\\xfa\xeb\xac`\x8b\x95\x3\x86\xb6\xc5\x82" "9\xd1\xc6-bM\xd5\xd1W\x82\xfcU\"\"\xcc\xa0m\xdf\x38{7>2\xc3\xc2\x86Lc\xc7h5\xc\x37" "(7`\xf3QZ[\n\xfd\x66\xc4\x8a\xb5\"\xeb>\x80\x8c\x6\x1f\\\xd6\xbd\x96\xcd\x18\xc9" "\x83\x9d\x30P\x8e}N\xdb\x88\xe8\xf1\x1e\x31\xe1\x9\x19\xb1kyq\xf0mxw\xa0X\xd8\xa4" "\x94L\x84\xfcl\xae\xdf\x33\x41\xb4\x8bn\r<{\x85\xd7\x10\xe0\xc3_[PS\xcfKG\x98\xb3" "w\x8c\xc2\x8b-\xc7\xae\r\xf3\xa4\x9f\x9f;\xcd\x8e\x95\xd7\x46\xc3\\?G\xd6\x8b\x8a" "\xa3]\x97\xaa\x8\xe7\x11\xb5\xfb\xe7\r\x1a\x62<\x82T\x1e\xbd\xc5\x1a\x82}\ni\xe6" "\xc0I\x8z\xd2o%n\xb7W\x7fX\xcc\xff\xbc\xcb\xa5\xa9]\x9=\xc2\x94\x64\xc9\xa3\x8d\xe9" "[\xc6\xb1\x85\x39\x63\xb2\xde\xb0\xb5z\xd1$\x8do\x16%\xe1\x15\xee\xb9Q\xbWr\xaa\xe4" "\xe3\xc8\x66\x65}\xb0\xb3\xbf\xe\n\xc3\x45\xe1\x16\xf8\xd4\x97kw\x8v\xff\xe3t\x8c" "6\x16U\"\x99\x1f\x46\xa3o\x19=\xd1\xa1\xc9G\x13g<~L\x81X#\x91\xb6\x36\xc7-\xe9L\xe6" "%Ct\xf9\x9b\x62>V\x86\xc1=\x8a\x83\"\xe8>\x11\xbb\xb\n\x89lj\x8c,OulS\x85\xcdp\x17" "\xf2m#\xf7\xc3\xee\x97\x37,\x86\x8c\x8c\x91U\x81r;\xb6\xb7kL<\xe8\x99\x8eO\xa6\xca" "@\xb6\x33\xdf\xda\xa5\x9b\xa9\x2\xa4\x95-\xa9\xe\xc4\xfc<\xf0\xf2gj\xcf\xa7\xf7o" "x#o\xa2\xde\x10\xfd\x35\x45\x35r\x15$k\xb7\xe5'\xf2w\xc2\x8b\x35<\xc6\xd7\x9d\xce" "\xf2\x1b\xcc\x8fw`<\xddX\xa2\xcc\xdd\xbe:\x98\x2\xf9\x41\xce\xd8\xe0\x35\x31\x38" "u1\x95H\xc4\x19\x92\xa2\xbe\x93\x9a\x17\xcc\x10\x94&\xe3\x38%\xaeY\xbc\xd1|\xb1\x9f" "P\xd9r\xff\xcb\xe7\xd9\xb4\xb0\xbb\x9S\x3\xd9\xdc\x9d@f\x96\xc2P\x8dl\xe9\x9e\x11" "\xcf\x0\xf6\x46\x11G\xe9tI\xed_HmH\n\x86\xd3\xa7\xac\xec\xb7\xe9\xa9\x45\x98G$\xef" "\xc2\x1cPy\xb1\xfd\x3\xed\x80<-\xea\xfc\xe3\x32}-x'q_\xd6]\x95\x6!l\x88\xb0\xfa&" "\x93^\x95\xc6\x41\x14\xa5\x19\x19\xd4\x19\x3\x8b\x1a~\x9c\x1e\x82\x9f\xbf\xb5\x32" "u\x9\x37R\xdf\x19\x89\x1a\x97\xf3\xcb\xf7q\x9c\x1f\xd6\xcb\x17\x1\x9am-%6\xe\xca" "\x80LK5\x17&b\xccGi\xd2\xb7\x85\xc6\xc8~ZN\xcc\xe3\x17\x4\xe5\x9fq&;|<\xae\xc8\xac" "\xb4\xc7\x42n\xc2_\x11\xa0\x4##\xeel>\xeb\x4(M\xba\xe2\xc7p\xbc\x41\x9d\xcey\xbd" "E`\xae\xa4\x15q\xc3\xb5\x95\xf5%`\x19\x1d\xc7\xa8\xfb\xf6=A:w\xa0\x90^QtA\xb1l+P" "\x1e\xa2\xf9\xe9\x9c\xc3\x8d\x5&y\xf2\x88\xfd\xf1\x89\x45\x42\xe3\xa6i\x89\xa0\x9" "\x1\x85\xeb.u\x13K\xfa=\x91G\xc3\xdb\x8a\x62\x1d\x9d\x35\xe3w\x86\x85\x37y\xe1W\xb4" "\x7fqbmk>c0\x5\x91Y\xc1u\x96\xc1\xb8\x7f\xe2\xb4\xffG\xed\x9dx\xfaL!`\x7rv\xc8\xb5" "\x8c\xef]\xc0\x30\xb4\xa5\xd8<\xf2W\x9l\x4\x7f\xe6M\xe3\x7\xc5\x98\xb8\x15\x5\x8e" "r\xd5\xf5}\xf5\xc3i\xe6\x64\xe1\x37\xde)4\x9e/\x9d\xcd\x8c\x9fN\xbanv[c'\xd7\xa2" "\r\xfc\xb2\x7\x11'?\xd8\x9\x1c\xba`\\LIBH\x7o~\x3\xdf\x65\xa6\xa5\x1\x64\x98\xb\xbb" "\xb7\x8t\x1e[\xf6\x5no\x99m\xc0\x7f\xff@\x8c[\x8e\xab\x8d\xce\xc3\x15\xe9(s\"\x8c" "\x80]D@\xa6G\xe>\xe3\x98\x37X\xdd!\x1c\x9c\xec\xdb\xfa\xa4\xc9\x30\xc\xba\x0`\x8a" "K$\x4\xa3\xc7\xaf\x1z;~g\xf3\x9f\xbQ\xac\xf9P\xd3\xe7\\\xc7\xbc+\x8d\x34\x80 /\xa9" "X\xe8\xee\xb$\x5\x1R2\xee\r&L|\xa0,\x18\xca\x45\xcb<-\xe3\"\xd3\xeb\x7f\x0\xf9\x45" "]\xb6\xc5\xb1\xf4\xe5\x9c>\x95R\xe\xc3m}\x90<\xbb\x62]p\xb5K\xf6\xf8%^A&\x4\xbb\xb2" "\x9f\xee\x2l\xc6`W\x7f\x91\xdb\x1d\xb4\xa6\x13\xee\xef\xb2\xc\xf7\xae<\xd8\x9dVZ" "\xc8\x38\x41k\x1\xb5\xdeO\xfaUP\xd1\x7f\xb5\x1f\xbb\xeb\xe2\x1c\xf1\xd5`8\x86>\xe9" "1\xb9\r\xec.!\x1e\xd4+\xa9.\xc2\x44\xd4\xce,N\xc5\xca\x87\xa0&\x99'r\xdc*\xf7T\xfc" "\x98+\x94\xf3n\xa7\xb7\xbfu\xe0\xec\xe9\xc\xbb*j\xa1\xa0\x12\xe8\x89\x8b\xd6y\xc2" "<\xb3\x82|5\xd5\xd0/\x5i\xc7\xaa\x82\x61]J\xa6u\x18\xec\xf6h\xd3\xb5}n\xf1\xa8\x1" "4$\xac\"h\xba\r\x9at\xd5\x88y\xed\xcf\x63\x82\xa8\x9d\x39xd\x94\x3\x3\xea\xec\x45" "\xa3\x83\x4\xba\x8b\x1c\xb1\x98\x96z\xe2>\xb8\x10T\xbet\xb1i\x9\xa4\x5\xe8\xa7y\x9c" "\xee<'\xf\xe2\xa6\xdcP\xbdsp\xb6\xb2\xc8\xfd\xb9\xa8}\x88\xd5\xd4\x3H\xd3\x98N9\xc6" "\x93\xb6\xf4Hm\x99Gx`z\x80\xa3\x12(r\xdd\x65\xe4\x4\x92\x10|q\xc3\xcfp\x8a\x97\x17" "\xe9\xee\xfa\xfb\xdd\xc2\x39\xc5:\xa9\x64[q\x10\x38\xe5\x9c\x8b\x86\x1b\x37\x41\x1a" "\xb2\x3\x9b\xed\xf9\xcf\xd0\xf\x8\xd9\xc5\xd7\x61TB\x7f\xf5\xdd\x39\x87\x8c\xec\xc5" "\xd7\xbf\xb3\xf1\xf0\x35\x8q\x85\xc0\x98\x1f\xc7y\xe8\x85\rP\x99-\xfd\xcf\x91\x32\xbcU\x1e\x98YC\xb0v\x18" "\xac\x10\xd1\x15\x4Q\xf0\x84L\r\xc4\x1dn\x17\xebP\x8d\xc8h\x9e\xc7&@\rZ\x7fo\xeb" "<\xc7\xbc\xe0_\x9\"\x8b|\xb2\xc5\x39\x36\x64\xd8\xdd\x9aK\x96\xb1\x2\xe\xf2]p\xaa" "-\x91\xca\xe9:\xfb_+\xf0\xaa\x18\xca\\Y\x9f\xa1\xa7\x8\xef\x35\xbf\x8f\x7f\xfe\xc9" "\xaf\xc1\xf2\x42\x87\r\x2\x8b+\x14Y\x6;I9C\xef\x12\x83\x82\x97\x83\xe1\x1\x2\x42" "\xe5\xcfM\xa3\x9d\x93\xd5\x6\xf3\x89)6\xe7\xd6\xcf\x11$p\xa5!\xd3\x97\x43\x87\x33" "\xd0S\x94L\xff\x12\xd6\xff\xae\x82\x46\xf2\x6\x18hO&7\x15\xaa\x98\xe1]r\xa5&8>\x5" "\xc2\x32\x14\xb7\x83\x38\xe5\xb4v\xf0\x98\x1d\x90\x5nn]\r\xb6k\x1d\xf2)\x8eY{*\xbe" "\x1d\x81~\x18\xbe\xb0V\xe6^\xdb\x42\x34\x34-\x96\x0G\xb\x14 \xc9!\x4\x19\xd8\x34" "\xe4\x31\xb8/X`\x8c\x87\xac\x36\x1a\x2\xd0\xf1\xfeKG\n=q\xe0\xd2\x1b\xb8~\x10#\xd4" "(\xe2=Yl\xb9\xe1\xa2\x18\x44\x3\xa1n6\xe6\x44\xbc\xcf\x9b\xbd\xe2r\x90HPW\xe6('(" ">s\x80\xafxk\xf3\x95\xb3\x96\x1b\xa5\xea\x46\x9c\x31Wc\xfaY\xe0\xf1v\xef\x81\x98" "_8\xb8\x82\xdeV\xa7M\x12\x8e%m\x1b\x89\x93\x97(\xe5Z\x92\xab\xa2\x1akxD\xfa\xc1\xba" "{\xbd\xd8\xb3J\x18\x19J)\x84\xb0\x0\x38\xf\xe9\xf6r\xe8>\xfd\xbf'o\xe7\x97\xa3%\x81" "[\xf%\xcc\x95\xc9z\x9d\xac\xf5mX4\x86\x30]|\x9eQ\xa7\xe3\x37\xd1N;\x90\x3\x33\xeb" "8\xfd\x93\xa9\x95\x87\xda#A\xb1\xc\x5\x9cq\xce\x8\xf\xe7S<\xf\x5\x9f\xa4\xeV\n\xf9" "\xc4\xa4\x1aK\xe6\xfb\x45\x84o\xf8\xf7\x81\x65\xe1\xbJ\xd4\xf&K\xcfU\x96\xa1\xe8" "\xef\x8c\xb6\xeaK\x1a:\\i\x5\x9a\xb1V8Cg\x9e\xcb%\x11\xa9\xe\x88\x98\xf5\x42\x95" "d\x9c\xb7='w`\xd8\xd0J\xba\xcc{\xccnwz\x5\x30\xe2\x6|\xcb\xc0\x86s\xf9\xc8\xc1x\xf9" "\xd6r\xac\x8a\x15\xe5\x36\x7f\xcVQ\xb5>u\xe0\xcf\xa5|\x93\x17\x46\xae\x1ag\x9c$m" "|\x94\x17\xf1\xcd\x89\xdd\xdb\xd1\x17Q\x83\x36~{\x9R\xdcK" "\xc2v|LbG\xb1\xd6\x10>R\xbc{~\xa6)\x8f\x45L]\x97\xacW_\x19\xc1\n\xcd\xffN\x10\xc7" "\xd3u\\\xfa\xb4 \xc\xacTRi\xff\x1d\x8d\xb0\xd6\x7\xc7\xadG\xf4\r\xdf%z\xb4\xe7\xd0" "u\x5w\x0<\x13\xe4\x94\x19`\xc3\xdd{\x7t\xdd\xac\x18\xe8\xab\xaf\x8fS\xe0<\xbe\xf6" "\xd5{D\xf2L\xf8!\x1L\x6\x42x\xfdQ\xb3\x42u\x93\xd1v\x94\xb4\xab\xce\x81\xf4\x9c\xbb" "\x98LXx\xcd\xf0\xc3\x8d\x1e\xd7\xfd\x99\xb0\xb9\xa3\xbd\x8d\x8f\xf6!\x95\x88\xb3" "\xb8\xfaY\xd0\xcd\xd1\xd9\xb2\xf6Q\"\xab\x45\xe4\x8f\x17WF{\x92\x4\x92\x61@\xe3\xc3" "P\xc5\xa9'\xa2\xe7\x0\x17\x30S\xec\x35\xd3\xf1\xda-rXqL\x97\xfa\xa8W\xf0\x89\x89" "\x17\xbd\x94\x62\\m\x1e-w\x13\x8e\xfc\xaa\xafQ{\x17\xfe\x18z\"\x12\xc2J\x88\x1a," "jd}\xef\x63v\xed\x80\xae\x41u\xc5\xee\x80\x92\x1f\x0\x19\x95\xb4NI\xf0\xd3=\xd9\x7" "Z\xcf\x33\xbb\x3g\x1c\xb\xcc\x34\xadW\x84\xad\x1c\xdf\xed:m\x9b\xa1\x3\xb3\xdd\xc1" "\xcc-\xe7M\xbbWj\x2wqRu!\x8c\xd1\x9c\xa8\x89\x92\x9\x12Rf\xd8\xbf\x12\x86\xf8\x81" "\xdc\xc2\xc3\x83t\x9d\x1ev\x8dg\xf@\x99\xf7\xde\x95\x9e\xdf\xe8RX1\x83\xc9\x11\x16" "\x1(\x81\xa5j$\xaa\xf0 \xea\x45\xcd_9f\r\xeb\xce\x30\xac\x1c{\x8c\xfc`8{\x1b\xc>" "6\x1b\xe6\x12\xfd\xfa\x9f\x1\xb7\xe4\xb4\xa1\x88\x39\xa2\xc7\xe0\xe3\x93\xeb\xc5" "\xad\x9a\x8aN\xbc\x31jt\xc\x1c)]\x9e\xf5\xf4\xdf\xfa\x6g\xf9X,\xb\xb8\x37\xb1\x42" "\xc4\xcf\xc6\xb1y\x8e\x94v\xd0\x63\x11\x11\x3;\x8b\xa7Z\x10\xfd\xc8\x0\xe2\xab\x1e" "\xe\x82\x96\x32\xf8i\xcf\xe4s{\xe9\xe2\x80\x7Y\xee\x8\x31\xdc}\x11\x95\xea\xf8\x5" "Uw\x19\x81\xddm\xc6`h\x12\xd9,\xb8\xef\x86\x44\x7f_lobm\xe&\\g\xe5*c\x19\x18\x9e" "\xe3I\xd4\x8eI\xdf\xe6\xa9\xe9\x8fv\xc4\x14\xa1\xe3!z\xe0\xa2\x15\xa1~T\xaaI\x8f" "N\xcd\xc5\x2\x42\xac\xc7\xe2\x32/c\xbb/\xf2\x18\x9d\x5~sT\xe3*>\xd1\x80\x31\x16\x17" "k\x9b\x9d\x1)\x93\xf\x91\x9e/\xec(\xb,\x89$\xe4\x9e{\xb7Wh\xa2\xee\x1d\xa8\xad\xbe" "\xd4\xe3X\x99\x6\xdf\x1b\x92:\xef\x84\xc1\xbd\x32t8\xb7\x31\x1.i\xbb\r\x43\xa1\x84" ",\xb8\x8b\xb5N\xa4Qdw\xf7\x4\xcf\xeb(n>\xa4\x83\x44Z\xd4\xd7\x45\x86\xfc\xf3.\x96" "\xd3\x66\x90\x10\x84\x36_i:S\xc5\xfbS/\xbf\xe7\xbc\xc\xad\xc4\x4\xc4\x98PB\xd6\x8d" "\xbb\x90\xa6\xdc\xda\x35\x31\xee\x32MU\x8a!O\x93\\\xd9\xfc\xc9\xa0\xce\xbe\x9b_\xb0" "2?K8 R\x95\x99\xefH\xee\x6\x8bZ\xce\x85\x0O\xea)\x84\xf0\xa8oZ\xc9\xd5\x61\x63\xbb" "\xfe\x11\x42\xb7t\x14\x8f\x1e\xb0\xa4\xdc\x89\xc3\x34\x90RS:}\xe6g)\xdb$A\xb8/\x8f" "s`\x11\x1d\xac\xf6\x92\x93\xc9\xb2\x81\xa0SO>\x9e\x92$\xa7\\I\xa8\x32\xf2\x8b.Ir" "bGU\x7\xb6\xdd\xfa\x9f\x1\xca\n\x66\x96\xe3\xf5\xac~\xa6\x85\x95\xeb\xa0\xc2\xeb" "\x8aG\x81?\xf9\x36\xd8J\xc1\xb2>\xcaz\xa2\x86+y<\xcb\xb0\xdf\x9f\xddI1\xbe\xf3T\xce" "\xc1/\xbfG\x85Y\xfe\xc2\x9f\x81\xad\xf4\x45.\x83\x96>VT\x1d\x31\xf3i\x1c\x93\xa5" "\xf\xb\xba^\x95R\xc4\xf2\xa2:nS\x6\x7)\x85J=\xd7\x1c\xc4\x30\x8b\x91\x95}\xb1\x9e" "f\xaa\xa1\x8f\xa6pU\xa9P\xf1\xc2\xcf\xf7\x8a\x3\xbc\x1aX\x8c\xf6$i`h\x6\x87\x19\xaf" "\xb1\x0\x1c\x45\x81\xee\x7!\x13\x88-\x90R\xb2\x1e\x35]@\x1e\xd8\xcd$\xd0g\xb9\x9e" "ak\xdaZ\nZ\x93\x36\xfcI\x96\x32\xb7\x9f\xf2\xfd\r\xef\xb0\x96\xef\x46\xb7^-N\xfH" "\xda\xea#\x97\x19\xfe\xc4\xd9\xa2\x98\x18\xf5\x87_\xc5\x4\x1a\x9e\xdb\xd2l\xaf\n" "\xce\x14\xcc\x80\xbaI\xbb\xa5\x9e\x91\x8e\xb3\xd8\xf1\xe5\x41\xaa\x16\x2\x65\x85" "\xa2\xf7-\xf7\xd8\x35\x41\x81m\xe4i\x81\xfb>\xfd\xc\x30\xe4X\xcf\xad\x4\xc7\x94!" "\xab|I%\xe2:\xea\x7\xf9\xf0\x18\x43\x1cy\x0\x2Ym&\xbd\x96\x63\xb5\x1bi\x9d\xf5>H" "\x82\xcb\xc3N\xde\x88\xebU\x4[\x88\x9b`b\xe3_\xd1\xe0\x18\xbc\xe7\x85\x15{\x85\xec" ";\x9c\xa6\xc8]K\x16#\x82u8[\x82\x85\xdb\x1-\x8f\xb7\xc9\xf5\xb9\x46\xa4\x1dz\xf\xb8" "x\xffr\xc3\x96\x83\x14M\x8a\x0|\xff\x63\x1b\x43t\x8f-_\xc6\x90\x30\xf\x9b\xc0\xc8" "7\x0k\x92\xec\xeb\xe0`^\x8c:J@\xe\x18\xae\x89\x97\xd1\xb4_\xee\x10\x6\x8e$|d|\xf8" ",m\xfb\xe5\xe8\x81\xd5\x11\xff\xa6\x87\xb7\xae\xb7\x85\x46\xbf\xd0}_~\xc2\x42\xdc" "\xefI0\xd8\xaa\xad\x8c\x61R\xb6\x64*\xac\x32Yc\xfd\x14\x7f#k\xb8P\xa9\x96\x65s\x9d" "\x6\xcd\xbd|\xa7\x9aR}\xcf\x46\x1e\x33\xf2+\xc9\xc5\xdb\x0\xda+\xd3\xdd\xdd\x8c\x99" "\xd9\x97\x93\xbc\x98(*\xa8\x87/\xf9l9B\x85\xd8-\x94\x19\xebx\xb6\xae\x37\xa5\xf5" "\x19\x39w\x0\xf7]bJ\x9\xbd%[Wn\x95Z2>xN\x8f\xc3\x11\x31\xf0\x3\xb0\xe3\x2JOX\xfe" "\xf2\xa6\xc0\x43yb\x1\xfc\x42T\x82\xe1\x15^\"\x9d\x1b-C\xef{\r\"2+\"\xef\\\x9a\x1b" "\xe0&\xa1\xc3\xd3u\xed\xaf\xf9\x95\x97\xe1\xe5GyR\xa4\xe8\xd2\xac\xf5\xd0\x14\xbc" "\x0\xdc*'/\xa6+i\x83\xe2}\"\x88\x81\xe2\xef+\x8b\x95\xa6\x81\xcb\xe9\xc_\xde\x16" "3\x1c\x85\"/\xe2\xa1o\n<0\x0\xa6>.!fl\xc\x11\x9f\x8a\xf8\x9aT=7\x97pi\xa5\xac\xf1" "Uc$\xf0R\x4\xce\x8c\xadP\xffO\xb6\x30\xd9\xcb\xbf\xc3$\xde\xdaXJ\xa5j\x99\xd3\xa7" "o\xf5[\xdc,.\xa3\xa0!6\x1c\xcdJ\x83\xc7\xa5\xe2v\x8d!\xf\xa6\xde\x88\x9f\xd4\x8a" "9\xd6y\xc9N\xc3\xc9\x9a\x8d\x33\xff\x11\x37}\xa7\xf6\xf1\xb7\x1a*\x5\xb3\x2\xec\xde" "\x95O&w?9\xac\x88\x15\x42\xf0\xd0\x96\x9c\x39\x95\xc3Q\x9a\x8e\xf7\xb\x42 \xd8k\xf0" "\x1b\xee\xcc\x64\x62\x85^{hn\x1a\xff\x1c\xa9\x1f\xb8\xfd\x8bJi\xe1\xe\xe0\xc2\xad" "\x94\xad\xd4\x44IPo\x9bn\xf4\x36\x41\xf2\x2n\xffn`\\g\x5`\xc2\xb7G\x6\xfb\x94\x9a" "\xa7\xe8\xccj-\rb\x7\xe4W\xe7\xfd\x87\xec\x1b\x90\x92\xdch\xb9\x14\x39G\xcc\x8e\xd1" "J\xfd\xdc\xbf\x8f\xdd\xa2(\xa7hG\xf9h\x2\xe5\x61\xf6|\xee\xfd\xe4Z\xe5\x87g9\x83" "\xfc\x4\xc9gD\xdb\xaa\x83\xf2\xdc\x83\x8d\x63\x39\x43\xc7]\xcb\x9e\x64\x10GN\xb2" "{4\x8f&\xe5\x5\xf0\xab\x90\x87\x89@\xe8\x46\xc5\xe9\xf3\xc5\xfe\x8c\x35X\xc3#k\x1b" "\x88\xc4\x5qiI\xb8PhA\xca\xbe\x17\x17GK\xb7\xc3\r\xb9\x1c\xde\xe3;\xf\x84H\x11v/" "\xae\xc5\x35\xbd\xcf\x84\xc1\xc7G\xce\xf9\xb1\xfa\x61\xd2\xaf\xb5\xa8\x13\x35\xbc" "B\xc0j\x94\xd7\xd5\x9b~\xdeU\xbc\xf6\xf9\x86z\xee\x10uU\xcd\xd0\x84\xb7hL,\x87\x8" "tu\xa3\x9a\x9d\xa6\x34{\xe2\x81\xceV5\xa4\xd0xe\xba\x98\xce&\xc1\x46[\x1a\xb0\x34" "?I\xff\x37\xb4\xd0\xca\x9f;\xb6\x93\xd7\x8d\xc3\xb2\x19%\xcb\x99j\x3\x8d\xcc\x17" "%'\xfeW\xc0t`\xef\x39\xc0}C\x96\xe7\xfa\x97\r\x9f\"\xab\xd2\x1a\x9cyKd\xad\x96v," "t(\xf5\x9a\x87W\xc3mlO\xfb#!a\x95\xa0L*,.{\x10\xefq\x93\x93\x15\x44\xd7\x82\xfe\xe4" "\xb9\x1e\x1\x11\x9cUS\xbb\xc6%\"p\xa8\xd8\xc5m\xd6-D\x8fZ\xd8\xdci\xcc\xb4^\x1f\x17" "\xf0\xaa\x1e\x44Q)\xdd\x0\xf0\x0\x0[#\xd3\x8d\xe9:;\xe5ZL\x4\x19G\xf3kNE6\xe3\x7" "\xd0\x18\x5S\xf9.F\xb7\x43\x88\x1c\xb5\xd5\x38lH\xc7\xd5\xf8L+\xcd\x6\xb9\xc5\x1" "\xf7\x8c~\xe6\x1f\xa2\x35\x16y\x1f\xcfM\xb2x\xafh\x8a.`\x10\xa5\x66\x92\xad\x92\x0" "\x84\x97H~\xdf\xe4\xbd_\xa0\x83\xfaTA8\xb2\ri@\x2\x8\x87\xe3]F\xe0\x93\xb7\x1fz\x4" "\xa6t`\xdc\x81\x16\xb4\xd4\x83\x96%\xd7\xcaiY\xd6\x83\x1c\xd9?\x81\xacN\xa2p\x90" "6\xdds\x83\x64\xfd\xe7\x11\x13\xbf\"\xeb\xf1=\xfe\x16\x42\xe5\x64p\x1eo\xf\xfeu\x11" "\xed\xf0?\xe4H\xc2\xb2\x8c\x64\xfb}T\xb9L\xa5v\xe4\x81\xfaV\xb2\xb1\x8a\xf1\xcq\xf6" "\x99\xb6\xbf\xd4tY\xcd\xe1\x86\x9d\xf\xd3\x6\xbfH\x9aoB\xe5\xb2\xf0\\\xcfU\xbbk\x95" "&\x97=\x19\xcb\x13L\xa7\xf1?\x1d\xb3qo\x8c\xc2\x17s\xa8\x32V\x8c\x16%\xb\\\xdb\x16" "\xdf$\xbf\x81\xd4\x9f[7\x1\x8b\xd3\x10&.\xa7\x7\x81\x7\x86\x8a\xb0!l\xec\x83\xce" "\xfc\xab\x1e\x9f,fZ1X\\\xa0M\xc0\x18y\xca\xa7\x9a\xaaZ\xb2\x1\xb5\x16\xf7\x5+\x1" "\xb1k\xeeV\x6\x9\x83\x93\xb0\xe5\xd9\xf9\xe5\xe3\xf4\xeb \xf6<\x95\x8eym\xf4\x1c" "\xf2\x88\x39\xf5\xc6*\x4\x31\x64\x87\x45\xd7\x83{Q\x9f:\xa3k\xc6\xc0\x8e\xf0@\xcc" "\xf5=\x9bm\x8c\xc}\x1a\x84\xd7\x7\xecW\xa3\xc6\xac\x9a\x62\xab\x37%\x1a\x1\xa5\xed" "@\xfd\xeco[\xe6\xe3Lj\x91\xd0X1\x94\x39w\x8a.\xe5\xd0\x36>.\x1f\x33\x46<32}\x5\xff" "\xc0\xcb\xf0\x8d[\xc4W\xc7#\x4H\x97/\xb9\xb4\xd0\xd7\x82\xba}\xbf\x10\xd3\xff\xef" "\x8b\xf5#n\xc1mM\xd6\xd0\xd8p\xd9\xd5\xeb\\\x64\xc9\xa4jOX=O\x83\x1f\xeet\xb0\xe5" "\xb3:\x9\xab\xfd\x44\x44\x92\x9b\xd8\xf6\x38\xcdr\xea\xb9\x9c\xf2\xe9U\x1d\xf4'h" "9d\xa5\x92\xe4\x9d\x18o(RX\xc5\xd5\xf6!\x96\xa9\x85\x32\x42\x1ds\xe3I_\x82i_\xee" "\xc6\xe1\x95,V-Tk(a\x8f\xfa\xee\xbe\xff\x3\xa5\x7fM\x85P!\xf8[\xc{\xc3\x7f\xccm\xa9" "\xae\xca\x9\x9b\x64k\x99\xd4\x18\x96\x9\xd3\xff-VB/\x8c\x37\xe9v@)>\xc7\xc9\xe\x33" "\x80\x88x6\xf4\x93\x8f\xbfI\\\xac\x14\xfb\xa5\x64\x8d\x89(-\x8dI\xd9\x1a\xf7>\xd3" "e\x81\x13\x9d\x8b\xd4%Q\xe2\x63\xe8\x30\xea\xf6\xb3>\xa0\x98\xc2\xc3*\xde\xa2\x19\xab*\xac\x8b\x9?@\x0\x9\x95S\x9d" "\x12v\xd5\xf2\xef\x84\xcc\xd0\x99\xb7\x1f\xe4&\x9b\xdb\xdbj\x8dY\xc8o}.?\xbc\xcf" "\x87s\xd0\xfa\xe9v@\xbc\x1a\xd4<\xb4\xb9\x92\xbf\xad\xfb\x9\xdb\xd0\xca\xae\xb8\xcd" "\x9d\xa2\x64\x18|O\x97\x30\xe\x9al\x9d\xee\xd5RTy\xe6\x5\xc6Z\xe3\x36\xcb\xbd\xf4" "\xe5\xd7\xf7\x9a\xd0\x98\xf9w(^\x6Uy\xb7H\xfe\xaa\x97\xf2\xa7S\xe1\xf9\x62\xfc\xab" "h\xd7+\xaa\x8e\xe4\xff\x66\x91\xc2>1\xbc\xf>\x98\x1a\x96\xfb\x44\x4\x4\x85j\xe1\xab" "2\xa7 [\x17\xd4\x11\xd8\xf2\x1c\x8c\x93\xb7\x4\xd0~\xc5\x94\x42*\xbc\x36\x8c\xda" "+\x16\x10\xcej\x97?Dt\xe1+x\xb5\x32\x66g\x97\xf5u]&\x97r\xc9\xf5@\xb;\xfclX9]8R~" ",\xcc\xf2\x9bV\x12?}\xce\xf3\xbd\xe5\xdc\x1d\xfc[\x2\x93\xbb\x12P\x85\xb1\xd2\xd9" ")\xbc>\xe8OO\xadW\x1aI\x91\xc3\xde\xe0?-\xb3\xa3\x9~R\xb1\xa7\xd5\xc7<\xcb\x61H\xea" "\xc6.\x8e\x36\xde\x9aq\xc5v8\xc6\xe4\xd5\xd9\xde\xd1\x81t\xe8\xc3\x90\xe5\xbJ[\x91" "<\x7N\xea\xeb\xe3\x90\xb2\x14\xb3\xa6\x8f\x2\x86+\x9a)m\xb4\xb4\x9v\x96I\xe5\x1d" "s\x8c\xbb\xdf\xb7p.\x15\xc7<*\xfck\xc3|\xe1Qq\xf4\xe8\"\xcf \xef\xe5]\x9f\x6\x1a" "\xa4>d\x89\x89\x62\x8f\xf7\x9e\x65\x93#\x90\xcb\xb1]\x8e\x62\x13\x33\xb1\x8b\x11" "\xc3\xbd\xf9o\x84\x1dt4\xe0\x1a\xd5\x1\xfe\xa9\x64\xa7[$\x8a\x35\xcd\x9d\xf9\xa3" "~H\xa1\xe5\xa0\x9c\x62K\x93\xce\x44\xf0\x4/\xa0\r\x7f\x9e\xe8\x9b\x9fz\xb7\x85\xe9" "\xc7\x18\xcfnr(\xf7\x43'\x1c,\x9b\xba\x17\xe5 \x8b\x92\xe\x44\xe7\x65\xd9\x9d\x86" "e\xe\xb4T\xb0\xfa\xaa\x11'S\xaa\x1b\xd3\xa2\x42\x39\xe9\xc5\xfcG\xee\xb1Tz\xc9\xd2" "71\xb8\xdcH\xb9px0\xda\xec`\xc8\xd3y\xb\xba\x11 \xf7vN\xfa\xc5\x42\xcf\xfb\xcd\\" "\x5\xf9Q\xb'\xb2SKpN\xcd\x36\xc8\xb0\x41\xfdI\xa9h\x81\x30/\xff[\x1\x63\xa2\xdd\x9" "\xc7Q\xd6\xd6\xaf\xea\x91p\xa4\xf4\xc4\xab\x8d\x46\xe6/v?\xe1\xbd\xa5\x1d\xd1\xce" "J'\xe7r\xf3\xa2\x86\x91U\xf7\x62\xff&\xb7\xaao\xcf\xa4\xf1).V\xf0:\xab\x63\"\xbf" "\x86~w\x10\xc3MC\xb5\xd8[E\xaah\x1J\xd7\x87\x9e\xed\x5\x1b\x19\x33\xe4\x91In>&\xd9" "\xaa\x8b\x80\xa0{\xf2\xb9O\x10w\xe8J\x97&\xf0\x81\x99\x88}f\xdez0{\xf3<0\xdd\x9c" "\xf3\xda\x18\x80\x88\xc0;+\xad\x9\xa2\x17k\x11\r\xb2\xc8h\xb5=\xa9\xa6l\x85s{\xa6" "l\x93\xc5\x8a%\x98`\xe2\x94\xad\x1\x91\xe3\xa7,s\xf4\xb\xb\xd9\x86\x99\xaa\x8\xda" "\xf0\x35\x87\xb7\x8f\x39\x1f:C\x13\xc5\x8d\x9f)\xb5t\x9b\xdd\xcb\xf8\xa3\x17\xfd\xa0" "\xae\xfd\x95+\xb1\x85\x45\x61\xf\xfa\xd3\xac\x14=5\x1b\x8d\xb3\xf6\x62\x93\x37^\xe" "P#_\r\x4\x66\x93!\x81\xd3w\xed\xd3*_\xf\xfaN\"\xb5\xa0\xcbO4=\x9a~J4.\x9d\x9\xdf" "\xf6\xc6\x97\x63\xc\xd3\x97\x18\x2\xc2w\xa5Y\xb\x8c\xa9K\xdek8DlyM\x7+\xbc\xcbrM" "[\xc2\x8\xee\xf1\xb0\x18\xd7\x39\x37;\xb9\x10\xd6h\x88,\xaaw\x9c-h`\x81\xdej&\x6" "A{T\xd7\xc2\xe\xe\x7fr&H\xd8\x93\xe4\xed\xba\xe8\xf0\rjm\xa3q/\x91\xae\x86\xcum\x11" "'\xd1\x33\xab\x82\x8e\x9d\x80\x2;P\xb1\x62\xc5\xa1\xc5\xcd\xf7\xc\xcb?\xdd~\xa0`" "\xed \x83\x8b\xe1\xe5\xc@\x94\xc9\xe7\x9e\x1a\x1\x87\xcd\xf7\x80\xca\xf4ZrYd\xf0" "\x4%>\x3L[\xe4k\xbf\x89\xd9\x46\x31\xf1\xa3;\xaa\x35\xb8O\xa2\xa9\xd0\x84\x81\xc6" "gA&\xcd\x96\xed\x5\xdc\xe4\x8b\xda\x6\x9d\x90-h6\xd5\xdf\xbap\x1d\xc0\xf9\x8a\x86" ">d\xf0\xe3\x12\x14]\x8d\xc0\xb7\x7f%\xb4:\xecr\x9a\x12\x43\xb4[\x8\xca\"\x8d\xd6" "\x10\x1c\xaa*\xc5\xad\xcc\x8e\xff\x84\xa4\xca?%Av\xc2\xccq\x1e\xe6\xc2s\x83]\xf\xd3" "R\x8e\xca*\x97k\x88\xe5\x1f\xe3G\xfd\xb6\xf\x32\x37\xb\x66\xd3\x38\x93\x1d\x65\x81" "c\xe\xd5\x86\xf3I\xc6\x38\x96\xc\x31\xae\x42\x4\xe8\x95!\xa9n\x12\x19\xe6\x96\xb9" "\x13\xde\xb2\xaa\xb7\xa3\xb0\"\xd0o4\xfd\xfc\xb8\x10\xa0N`\xa4\xfe\xbe(L/\x6>\n\xe9" "\xed\xf8w\x4\x92\x1c\xcf\xa1\x93\xbd\xc9\x12\xb7G\xe1\x35p\x6\x62#\xa4\x9f\x1fn*" "\xf0\xd4\xd6]\xa0L\xa8v\xffzF/\xfc\x9c\xb\xa2\xccT\\;\xd3m\xbev/2\xb2\xd6\xbeXg\xc5" "\x9fG\x91\x95\xc9$@\xdc\x16P\x98\xb7N\xa5\xc3\xad\x93\xcd\xf2\xd4\x10\xb0L\x16\xbc" "x\x1\xe7\x95oNQ\x7\x45\x7\x87\xaaY$\x93\x17\x1c\x36(\xe6\xb8\xf4\x9dO\x84)\xeb\x98" "\xdcR\xef\x2_\x0\x13\x87\xbc\x1ap\x93\xf7\xa9\x9f\x10\xb5\xd2\xd7\xdd\x8b\xbb\x39" ";\xf6\xe5o\x8\xf4\xf7\xfa\x1a\x34?\"\rZ\x1e\xaeqh\xc7MA\xbe\x1d\xc1\xa8;\xd6[r\xb9" "\x82\xf4\xf7\xb3O$\xf9\x7f\x9e\xc9\xa9\x10\x11\x6@1\xfa\xcf\xf2\xa1I!\xa3 $8_N\x6" "\x1c\xd0}\x15.t\x1b\xf9qV\xd9Q\xa3\x42H\x8f\xa7\xf5\xef\x93L\xca\xd1>'S\xa0\xabz" "\x1fV\\/\x7fk4\x9d\xf0;\xbc%\xbb\xd9r\xa9\xad\xf8\x9\xbb\\PH\xa8\xcc\xef\x92\x97" "\xb2\xed\x33$\xd1\x88g\xf2\x93\xcc\x66\xe8\x8b:9\xd1\x7\xb6\x10\xdf\xe7\x9a;N\x83" "\xa9m=R\xa1\x7f\xe8\xa6,\x9f\xdd'\x11\x30\x14\x83\x66\x94,\x9c\xe5uX\xd0#\xda_u\x1" "1\x9e\xbf\xa3=\xe9\xe6\xd1\xe7m| \xdb\x8a\x9\xb6W\x83\x9d\xa9\x9f=\x81\x43\xf1\xee" "bS\xa3)\\\x96Q\xfa\x43\x66Tx\x93\xc2\xdcz\xbc\xbfK\xb7`\x9d\xe5\xd0\x1\xe0\xa3m\x9f" "\xfb\xe0\x1f}\x9\x3\xb3 \x8a\xe8T~._\x14\xec\x1a\xf4\xc2S\\\xa8\xf4\xea\x37\xe3\xf3" "\xce\x17,z\x1e\x83\x8\x99[\x1c\xc2>n\x81\x19\x2\x46\xbc\xabnu[\xf8h\xd4I\xbb\x2\xa2" "\xaa\x87\xc4L\x9c\xc0\xf5q\xad\xc7%G\xce\xec\xbe\x10K\xb2t\xb8\xac\x16\xdc\xb7]_" "E\x8d\x35\x64\x66\xb9!\xac\xde\xea\xe3\x84\xe2\xeb\x1d\xf6\xef\x39;A\xb9t\x7f\nO" "\xae\xb4\xaf\x19(\xd9\xado\xb7\xe0o\xdc\x62\x1eLo\xc9\x8c\xfb\x43\xf8\x85\x84\xbd" "U\xd9\xb9|\xc9T\x90\x93\xed\xe5\x86\x91!a\x93\x11\x62\xb1\xb1\xd5-\x4\x43&\r\xab" "\xa0*\xf2\xb4\x43!\x0\xd5PeF\x1=\xa7\x3W?\xa8\x1\x36\x85\xccy\x8c\xe5\x1\x96\x0\x93" "\xde\xd7\x13\xff\xcc\xf8\x9c\xa2\xb9\x10\x63\x90\x19\x8c)\xa0\x8\x64\x10\x8c\xdc" "\xc1\x98J\x8b\xabS\x91\x90(\xc0\x1b&\xec\xc7\x92^8\xcb\xe6\xcc\xa8\x97\x8e\xe2\x1c" "+\x6\xe7\xb3\xe4\x8f\xba\x97\x8e*}\x18nV<\x8\x8f\x84\xaa#\x17\x8b`\xe4r\x9e\xe8}" "g\xb1\x9\x1f;isgl\x1c\xbf\xe6S\xe\xb7s\xc6.,$\x97\x1J\xb0\xe8\xb7\x1a\x1fN\x86\xa3" "x\xaa&Y\x15\x11\xbe\xe3\xcf=d\xc9HHX.\x13T\xe1`[dW\x82?,^d\n\xd3\x80)F\xbb.~\x8e" "YN\x8c\x4\xb4\x30\xc2\x38]\xd4\x7\x46\xce\x85\x34\xf5\x8\x42\xe7Mq\x15\xf3\xdb\xc" "r\xd1\xc9\xc6\x7\xc6W;\x9J\xebs\xb7\xa7\x98v\xcf\xfc>/\x8c\x9f\xea\xaa\x7\xd3\xbf" "\xce\x5\xb6\x1fwI\xa8y;\xe9\xc\xcc\xec\xa2\xd7\x7\x7f%\xe8\x99\xd3\x33\x1f\xe1\x61" "\xa7\xe8l\x84$\x95\xd5\x84\xc6\xe4\xa0\x88\xb)Q\xd8\xa1;\x88\xc4g \x80\xa0\xb1\xbe" "6\xbfG\xc3\xac\xe7(\x8c\xfe\x41\xa8\xc1\xba\xa6\xf0\x81J\x94\x7f\xbdk:\xa7+ls\xa8" "\xc5x\xcaQ\xcc\xc9o#R1lF{\xb9`\xe9\x81\xf2\xb6H[\xfb\x44\xb5w\xe7\x1e\xfd\xa1nt\x5" "\x95K\xc7\xc9\xf0u\x9fZ\x9f\x1e\xbc\xd2\xfa\x9c\xc9\x64\x8dX1\xa6\x88\x87\xf4\x1b" "\x15\x8\x1a L$\xb4\xb9\x92\xa2\x31\xde\xf9\xe6\x98\xd4\xc3\xa2[oTt\xf5\xbej`\x1f" "-3zX\xa0\xd2\x1f\xf3\x7f\xd9\x1e\xb8m\x1ds\x88\x93\xa0:i\xf0\xcdt?a\x1c\xdf\xfei" "\xdb,n\xd0\xe4\x61\x1dV\xf8\x3\xbb\r\xc0n\x7f\xe8Z089a'\x7\x64{\x1b\xe9\xfa\xf8\xd6" "\x84\x12,\xa9\xe5\xcb\x8b\xde)6\xd3\xf4\xff%M1R\x9du8\xbb\xd4\xd3U9H\x9f\x9es\x16" "\xf2\x42\x14\xb9\x96\xbc\xdc\xf1\x81\x8et\x9aq\xcf\xe\x88\x45\xaa\x1e*X\xaa\x62\xa4" "\x8e\x2\xba\x45\x64\x62] \xaa\"\xe\xe7\x19`\x85!\xd7\xd7\xa7\xfc\xa0\xbd\x89\x4\xa4" "\x1\x98\x19\xd3q\xf3\xf5\x9d\x46\xc1\x35N_\xc1\xa6\xe5\xf7\x9b \xcfJ\xca+\xf0\xf2" "\xdes\xda\x19:o\x9a\xcb\xfe\xbG1\xc4\xbc\xeb\xe6\xd9o\xe8\"\x96]\xe9\x65#\"\x82\xa3" "\xa1\x30\x36\x1f\x18\x8b:\xab\xda\x95\xa8\xa2y\r\x92@\xbe\x0\x8bjm\xe4\xbb\xfc\xad" "\xa0[g\x86\xb9\xbb\x8e\r\xfa\xc\x30\x4:;\x7\xed\x46'~\x7\xb9\x80\x84\"\xc8\xed\x16" "u\x8b\x9c\x39oN\xa9)\xd7ix[,\x95h\xe5p\xa8;\x98\x9b%\xce \xf\x17'\xd4\x1e+p.\x7f" "\x88\xf1xOL\x83\xfa`\xa7N\xb2k-\xa9Q&\xe5\x8\xedQ\x9a\x61\xcc\x15\x1d\xb6\x80Oa\x82" "l_\x86\xd8\xfa\x89\xd0nRo\xed\x97\xa0\xdb\x88\xed\xb4\x32\xff\x32\xc1\xac\xc9\xb6" "\"\xee\xdf`\x10\x81\xaf{\x96<\x9c\xfc\x1d\x13\xe4\xa9\xc7O\xea\n\x1c\x8e=\x86S\xcd" "\x92\xa9\x44\xd4\xcak\r0f\x19\xaf\xd5\x3Pmws-e\x14\xf6\x4\xbe\x46\x10\xc2V\x9\x31" "\xbd\xe0\xb4\x9\x39\xbc\x1d\x12k\xe\x97\xf7*\xe1\xb4\xa9%!#\xb5Oz'\xe0\xcf\xa4\x42" "[EFRo\xd7\x41\xcaw\x95+\x10\xd1>\n\xc2\xe3 \x6\xa9\x3\x80\x8f\xf0\xcd\x1?\x93\x62" "8\xc7L\xc7_\xd9\x15$LV\xa8\x41/7\xf0\x13H@4v\x99P\x8do=\x7f\x32\x3\xa2[|p\x10\x7" "\x19X,\xd5\x88Y\xe\xe3K:\xb1>%[a:m\x0\x38j\x1\x4\xcc^\xd2\xc6\x46\xf0\x9a\x88\x88" "\x8d\x37Qe\x1dVF\xc5\"z<\x80\xe8\xda\x1b\n\x33\x11!\xdd$)\xf1\xf4w]0VM\xffG\xd0\x1b" "\xbe,lr\xceM\x1f\xd9\xa2\x7|\x4\xd2\xb0'K\x89\x16\xf6\xa9\xd1\xa4\xa6\x96JSOG\xcf" "$\x1dZ\x8e\x34\xb2?\x85\xbe\x9a\xcf\xfc/\xea\x96\x1f'u9\xf2\x15\xf8r\x8dg\x88\xf6" "{\xea\xf4U\x2\x83\x9b\xcf#\xd8v<9I5/\x0\xc5y\xa9\xa4\xfc@\x8e\xc6%\xe3\x10\xda\xe6" "\x15\x12\xdf\xe6\x84N\x82\xd3j/\x81p\x9e\x1f\x5\xb3\x8a\xe9\xc2\"\xed\x62\xc9\x61" "\xee\x63Y<\xedz\xafs\xce.\xd3\x66w@\xc7{0\x9b\x93\xee\xfe\x1bK\xa6]HWZf\xbe\x86t" "=\xc9\xe5\xd3\xc2\xff\x41\x8d\x11\xf7\xf2\x11\xb8n\x82~\xe1\xdf\xc3\x61>t\x98\x3" "\xf\x7\x5\x5$Sm\x1f\x8a\x94\xdd\xb6i\x8b\xe7\xb9\x63\xc5\\\xb3\xf7Kgl\xd8\x15\xa7" "\xb3\xdfK\x1a\xe\xa2\xbe\x1b\xb\x9a\x11\xff\xbf\xd5\xb1\xfaIf\x8a\xee\x14\x62\x93" "\x16\xaf\x43j\x8!\xc2\xb\xee\xf7\xb3H\x8G\x93J\x99\xf6\xd8[h\xf4\xdd\xf8\x85\x9a" "uN\x0\x94(\xaf\x89\xa9\r\x18R\xc2 \xa6\x7\xff\x8\x6\xe8\x8\x7&\xed\xc9Mi\x1d!KE!" "\xc1G\xc4':\xeb\xdd\xbbJi~\xf1\x64H\xcd\x9b/\xc9R\x93\x30XX\xde\xcf\xd4\x6\xb8\x9b" "\x9f?\xda\xe2\xacW\x9e\x80\xcf\x32\x1e\xba\xe5p\x1f\xb2\xf7\xca\xd8\xed\x4\xb4\xa6" "1\x15\x88mE\xd6\x12\xfi\xae\xf1\xa2\x1d\x80\xad<-5\xd2\x89\x9f\x19\x2$+\x96\xcd\x34" "\x9e\n\xaa\xda@\xf7\xa1\x12\x82\xb6\xb5+\xdd\x97p\x8eX\xdc^-\"\xd1\x15>_\xa3\xf3" "\xb3\x0\xbc\xdf\xaf\x98\xde\xc2\xf4\xe3\xc8*\x1c\x85\xf9\x85s_9\x87OUuy\xf4\"\x66" "N\x7\xcb\xe1\x9d\xa6\x80\xef\xb0\xfc\x82\xc3#\xec\\\x46\x44\xc5\x17\x9\xac\x8dgF" "\x8\xa8\x4<\x91\xe6\xc7\x98\x8d\x43\xf\x10\xbal\xe1\xfc\x7f\xc0`O\xcd\x8fr8\x95%" "\n\xec\x36\xcc\x35\xb3\xfa\x14\xfe*\r$\x9]\xcc\x30\xb2\x9?\"\x98\xf5\xf0\xa9vv\xa0" "\xbe\x66\xc3\xdc\x9a\xda\xcf\xe2\xfc\xfr\x1a \xe9\x45\xaf\xc1\x9ja\x90u\xd5\xe9\xa2" "d\xc7\x96\xecl\x90\xef\x1a\xee\xa8\xdc\x8\x9b\x44\xff\xc1='\xcb#p\x7\nR\xd4\x41l" "S\xf3\x64\x39>F\xed\xd7\xed\xe0\x7\x99\x96\xc\xe6\xe0\xd5~I\x9\xe8\x8a\xdd\x64\xbd" "\xd2\xb0\xeb\xe2\xd7?\xa6\xac\xf8\xb4\x2\x80\xda\xa0\x63~p\\e\xaa\xbdR;\x88\x15\xf2" "/#\xe9\xff\x81\xe7\x82\x9c~K\xc9\x80\xc9\x14:\xeb\xe1\xa0M\xc0\xd2S9k\xbbrh\xbdZ" "\xee\xa3V\xb6\x10\xd5\xdc\xee\x3\x13^\x0\xae\x34\x38\x82Q\xf3\x17\x14\xa1\xc4\xe" "\x18&R\xc4\x8c\xda\"\x11\xa2,\xb6\xf0$\x90\xe6\x9a\x44\xce\xcb\x16\x97T\xc5;\x16" "\x2\x8d\x35.\x1\x19\xf5\xd5\xfa\xe0\xbd~\xa1\xcd\xa6G\x12\xa6\x14st\xb6\x42\x44\xe2" "\x1e\x9e\xc9\xf0\xd1\x38\x1a\xd2-[b\x12\xb2l?\x9a\xa5\xf6\x4_%\xdd\x9f^\xb4H\x9e" "\xa3\x9b\x19\x45\x33\x1a\xc7\x5\x10\xc5u%W\xde!\xd0\xa6\xcf\xc1\xeb\x10\xa9\x8f\xa8" "g\xb7m\xa6\xe4$\x94i\xf5\x91\xfd\x15M9\xe8\x93\x64\xa4=\xb0\x7\xaa\rz\x91\x1c\xfa" "\xe6\xce+Uy\x97\xfb\xc4OU\xa2\x7f\x62+\xd7\xb8\xb1\xe\xc9\xf5\xd1\xf&I\xa6\x46\xfd" "\x96J\xe1\xb1\x11\xb3[F\xa2R\xc4\xde\xe4Nt&\xebW9\xf2N\x8a\x39\x6\x94Y}\xb3\xa1\xfe" "x\x0\xc9~YU\x83\"\xf0\xe4\x9a\xc\xce*\xd9K\x1e-\x10&\xaf\xa7qr>?R9\x16\xf5^\xd8\x66" "\xc9\xfbJ/u\x96Q\xc6\x13\xa2\xcf\xf3\x62\x2\x8c\xdf\x9d\x38\xf0]L|`$\xc5\x33\xe9" "0\xb6K\x9\x9f\xb1\xaf\x4\xb0\x1f_\xb9\xcahg\xe6\xef\xf5Zw,S\x91\x83\x10Y\x98~\x10" "\xcb\xf9\x87\xe3\xf3x\xe0\x13)\xf7=T\xdc\x4\x84\x17}<<\x6\xf6s\x97\x95_\xf1\xcaN" "\xf8\xad\x16\x6\xb7\x4U%]c\x1a}n\xb9+\xfd\xba\x14\xa0\xff(\xb2\xac\xe7\xe8\x1a\xd6" "f\xea\x9b:\xfZk\xa3\xb5\xdf\xe3PD\xfaK=\x8e\xd9V\x0\x9c`\xe9\x8c\xc1\x32\xf2\xe8" "Ig\xf4\xa9\x8ag\xb3\x36\xd5\xee|\xaf}\xd1\xf7M\x1f\xa0\x86\x19\x94\x13\x61\xfas\x12" "\xcf\"]\x89\xce\xf9~\x86L\x83i\xea\xfa\xb9M\x97\xf0VU\x5\xd8%\x97+uOg)Yn\xea\x91" "!\xbu\xdd\x8f\x64S\x82\xac\xe3m\xe6\x8\x19\xa0+;H\xdd\x0\xf5H_\x92\x64\xf9\xfa\x92" "ms.,&{\xb\xe8\xca\x98Ro\x12O\x97\xef\xdb\x86\x13,^\xf1k\x10\x39\x8\x17/\xc5\x1f(" "o\xfe\x45\xff%\x35\x12\xe0\x3?\x3\x7f\xf1\x82\xbaSj\x9e\xb2\xdf-\x1d\xb2W\xd9\xc8" "lF\xe1\xb0\x2\xfb\x32\xacp\xca\x94\x62\xe6\xebH\x99GR\xce\xbc\xe3\x9f\x8\xab\xd4" "\xf4\xb0\x88\x92\x83\xe5U\x0p!\x85\xa8\x41\xe3(\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30" "000000000000000000000000000000000000000000000000000000000000\r000000000000000000" "0000000000000000000000000000000000000000000000\r00000000000000000000000000000000" "00000000000000000000000000000000\r0000000000000000000000000000000000000000000000" "000000000000000000\r000000000000000000000000000000000000000000000000000000000000" "0000\r0000000000000000000000000000000000000000000000000000000000000000\r00000000" "00000000000000000000000000000000000000000000000000000000\r0000000000000000000000" "000000000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n022004l_afm_len = 31779; char* n022004l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusMonL-Bold\n" "FullName Nimbus Mono L Bold\nFamilyName Nimbus Mono L\nWeight Bold\nItalicAngle " "0.0\nIsFixedPitch false\nUnderlinePosition -100\nUnderlineThickness 50\nVersion " "1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Development\nEncodingSch" "eme AdobeStandardEncoding\nFontBBox -43 -278 681 871\nCapHeight 583\nXHeight 437" "\nDescender -205\nAscender 624\nStartCharMetrics 316\nC 32 ; WX 600 ; N space ; " "B 375 0 375 0 ;\nC 33 ; WX 600 ; N exclam ; B 220 -15 381 638 ;\nC 34 ; WX 600 ;" " N quotedbl ; B 136 312 464 602 ;\nC 35 ; WX 600 ; N numbersign ; B 62 -92 538 6" "75 ;\nC 36 ; WX 600 ; N dollar ; B 83 -123 517 684 ;\nC 37 ; WX 600 ; N percent " "; B 80 -15 521 617 ;\nC 38 ; WX 600 ; N ampersand ; B 75 -14 508 550 ;\nC 39 ; W" "X 600 ; N quoteright ; B 147 331 351 623 ;\nC 40 ; WX 600 ; N parenleft ; B 264 " "-153 488 632 ;\nC 41 ; WX 600 ; N parenright ; B 117 -153 341 632 ;\nC 42 ; WX 6" "00 ; N asterisk ; B 83 208 517 622 ;\nC 43 ; WX 600 ; N plus ; B 42 0 558 560 ;\n" "C 44 ; WX 600 ; N comma ; B 147 -158 351 134 ;\nC 45 ; WX 600 ; N hyphen ; B 42 " "229 558 329 ;\nC 46 ; WX 600 ; N period ; B 225 -15 375 117 ;\nC 47 ; WX 600 ; N" " slash ; B 83 -113 517 695 ;\nC 48 ; WX 600 ; N zero ; B 83 -15 517 638 ;\nC 49 " "; WX 600 ; N one ; B 83 0 517 638 ;\nC 50 ; WX 600 ; N two ; B 54 0 508 638 ;\nC" " 51 ; WX 600 ; N three ; B 66 -15 529 638 ;\nC 52 ; WX 600 ; N four ; B 75 0 508" " 622 ;\nC 53 ; WX 600 ; N five ; B 66 -15 529 622 ;\nC 54 ; WX 600 ; N six ; B 1" "05 -15 540 638 ;\nC 55 ; WX 600 ; N seven ; B 75 -1 508 622 ;\nC 56 ; WX 600 ; N" " eight ; B 83 -15 517 638 ;\nC 57 ; WX 600 ; N nine ; B 106 -15 541 638 ;\nC 58 " "; WX 600 ; N colon ; B 225 -15 375 437 ;\nC 59 ; WX 600 ; N semicolon ; B 147 -1" "58 351 437 ;\nC 60 ; WX 600 ; N less ; B 42 54 544 501 ;\nC 61 ; WX 600 ; N equa" "l ; B 42 138 558 422 ;\nC 62 ; WX 600 ; N greater ; B 56 53 558 500 ;\nC 63 ; WX" " 600 ; N question ; B 104 -15 517 598 ;\nC 64 ; WX 600 ; N at ; B 76 -152 509 62" "0 ;\nC 65 ; WX 600 ; N A ; B -21 0 621 583 ;\nC 66 ; WX 600 ; N B ; B 13 0 571 5" "83 ;\nC 67 ; WX 600 ; N C ; B 33 -14 564 597 ;\nC 68 ; WX 600 ; N D ; B 13 0 550" " 583 ;\nC 69 ; WX 600 ; N E ; B 13 0 550 583 ;\nC 70 ; WX 600 ; N F ; B 13 0 550" " 583 ;\nC 71 ; WX 600 ; N G ; B 33 -14 592 597 ;\nC 72 ; WX 600 ; N H ; B 23 0 5" "81 583 ;\nC 73 ; WX 600 ; N I ; B 83 0 517 583 ;\nC 74 ; WX 600 ; N J ; B 54 -14" " 613 583 ;\nC 75 ; WX 600 ; N K ; B 13 0 602 583 ;\nC 76 ; WX 600 ; N L ; B 33 0" " 571 583 ;\nC 77 ; WX 600 ; N M ; B -19 0 623 584 ;\nC 78 ; WX 600 ; N N ; B -8 " "0 592 583 ;\nC 79 ; WX 600 ; N O ; B 21 -14 579 597 ;\nC 80 ; WX 600 ; N P ; B 1" "3 0 529 583 ;\nC 81 ; WX 600 ; N Q ; B 21 -145 579 597 ;\nC 82 ; WX 600 ; N R ; " "B 13 0 619 583 ;\nC 83 ; WX 600 ; N S ; B 62 -14 538 597 ;\nC 84 ; WX 600 ; N T " "; B 42 0 558 583 ;\nC 85 ; WX 600 ; N U ; B 10 -14 590 583 ;\nC 86 ; WX 600 ; N " "V ; B -21 0 621 583 ;\nC 87 ; WX 600 ; N W ; B -10 0 610 583 ;\nC 88 ; WX 600 ; " "N X ; B 10 0 590 583 ;\nC 89 ; WX 600 ; N Y ; B 21 0 579 583 ;\nC 90 ; WX 600 ; " "N Z ; B 73 0 527 583 ;\nC 91 ; WX 600 ; N bracketleft ; B 250 -148 475 627 ;\nC " "92 ; WX 600 ; N backslash ; B 83 -113 517 695 ;\nC 93 ; WX 600 ; N bracketright " "; B 125 -148 350 627 ;\nC 94 ; WX 600 ; N asciicircum ; B 83 325 517 652 ;\nC 95" " ; WX 600 ; N underscore ; B -12 -125 612 -75 ;\nC 96 ; WX 600 ; N quoteleft ; B" " 249 348 453 602 ;\nC 97 ; WX 600 ; N a ; B 42 -16 571 450 ;\nC 98 ; WX 600 ; N " "b ; B -8 -14 571 624 ;\nC 99 ; WX 600 ; N c ; B 54 -16 565 450 ;\nC 100 ; WX 600" " ; N d ; B 33 -14 613 624 ;\nC 101 ; WX 600 ; N e ; B 33 -16 550 450 ;\nC 102 ; " "WX 600 ; N f ; B 75 0 571 623 ;\nC 103 ; WX 600 ; N g ; B 33 -205 592 451 ;\nC 1" "04 ; WX 600 ; N h ; B 13 0 581 624 ;\nC 105 ; WX 600 ; N i ; B 62 0 538 623 ;\nC" " 106 ; WX 600 ; N j ; B 117 -205 488 623 ;\nC 107 ; WX 600 ; N k ; B 33 0 571 62" "4 ;\nC 108 ; WX 600 ; N l ; B 62 0 538 624 ;\nC 109 ; WX 600 ; N m ; B -19 0 623" " 450 ;\nC 110 ; WX 600 ; N n ; B 23 0 571 450 ;\nC 111 ; WX 600 ; N o ; B 42 -16" " 558 450 ;\nC 112 ; WX 600 ; N p ; B -8 -205 571 450 ;\nC 113 ; WX 600 ; N q ; B" " 33 -205 613 450 ;\nC 114 ; WX 600 ; N r ; B 54 0 571 449 ;\nC 115 ; WX 600 ; N " "s ; B 73 -16 527 450 ;\nC 116 ; WX 600 ; N t ; B 13 -16 529 591 ;\nC 117 ; WX 60" "0 ; N u ; B 13 -13 571 437 ;\nC 118 ; WX 600 ; N v ; B 0 0 600 437 ;\nC 119 ; WX" " 600 ; N w ; B 0 0 600 437 ;\nC 120 ; WX 600 ; N x ; B 21 0 579 437 ;\nC 121 ; W" "X 600 ; N y ; B 21 -205 579 437 ;\nC 122 ; WX 600 ; N z ; B 85 0 519 437 ;\nC 12" "3 ; WX 600 ; N braceleft ; B 167 -153 433 623 ;\nC 124 ; WX 600 ; N bar ; B 250 " "-153 350 622 ;\nC 125 ; WX 600 ; N braceright ; B 167 -153 433 623 ;\nC 126 ; WX" " 600 ; N asciitilde ; B 62 179 538 385 ;\nC 161 ; WX 600 ; N exclamdown ; B 220 " "-227 381 426 ;\nC 162 ; WX 600 ; N cent ; B 83 -44 499 661 ;\nC 163 ; WX 600 ; N" " sterling ; B 33 0 550 598 ;\nC 164 ; WX 600 ; N fraction ; B 21 102 580 500 ;\n" "C 165 ; WX 600 ; N yen ; B 21 0 579 580 ;\nC 166 ; WX 600 ; N florin ; B 57 -123" " 548 638 ;\nC 167 ; WX 600 ; N section ; B 36 -170 564 583 ;\nC 168 ; WX 600 ; N" " currency ; B 73 64 527 519 ;\nC 169 ; WX 600 ; N quotesingle ; B 236 312 364 60" "2 ;\nC 170 ; WX 600 ; N quotedblleft ; B 98 348 502 602 ;\nC 171 ; WX 600 ; N gu" "illemotleft ; B 33 20 571 415 ;\nC 172 ; WX 600 ; N guilsinglleft ; B 33 20 342 " "415 ;\nC 173 ; WX 600 ; N guilsinglright ; B 263 20 571 415 ;\nC 174 ; WX 600 ; " "N fi ; B -14 0 619 624 ;\nC 175 ; WX 600 ; N fl ; B -17 0 617 623 ;\nC 177 ; WX " "600 ; N endash ; B 42 229 558 329 ;\nC 178 ; WX 600 ; N dagger ; B 94 -92 506 62" "2 ;\nC 179 ; WX 600 ; N daggerdbl ; B 94 -92 506 622 ;\nC 180 ; WX 600 ; N perio" "dcentered ; B 225 214 375 346 ;\nC 182 ; WX 600 ; N paragraph ; B 49 -174 558 58" "3 ;\nC 183 ; WX 600 ; N bullet ; B 150 154 449 453 ;\nC 184 ; WX 600 ; N quotesi" "nglbase ; B 147 -158 351 134 ;\nC 185 ; WX 600 ; N quotedblbase ; B 87 -120 491 " "134 ;\nC 186 ; WX 600 ; N quotedblright ; B 87 348 491 602 ;\nC 187 ; WX 600 ; N" " guillemotright ; B 33 20 571 415 ;\nC 188 ; WX 600 ; N ellipsis ; B 25 -15 575 " "117 ;\nC 189 ; WX 600 ; N perthousand ; B 0 0 600 618 ;\nC 191 ; WX 600 ; N ques" "tiondown ; B 83 -227 496 386 ;\nC 193 ; WX 600 ; N grave ; B 125 496 350 696 ;\n" "C 194 ; WX 600 ; N acute ; B 250 496 475 696 ;\nC 195 ; WX 600 ; N circumflex ; " "B 125 497 476 696 ;\nC 196 ; WX 600 ; N tilde ; B 115 523 485 656 ;\nC 197 ; WX " "600 ; N macron ; B 125 546 475 626 ;\nC 198 ; WX 600 ; N breve ; B 125 503 475 6" "87 ;\nC 199 ; WX 600 ; N dotaccent ; B 240 534 360 654 ;\nC 200 ; WX 600 ; N die" "resis ; B 136 534 464 654 ;\nC 202 ; WX 600 ; N ring ; B 177 486 423 727 ;\nC 20" "3 ; WX 600 ; N cedilla ; B 180 -229 407 0 ;\nC 205 ; WX 600 ; N hungarumlaut ; B" " 125 496 475 694 ;\nC 206 ; WX 600 ; N ogonek ; B 250 -208 463 0 ;\nC 207 ; WX 6" "00 ; N caron ; B 125 497 476 696 ;\nC 208 ; WX 600 ; N emdash ; B -29 229 629 32" "9 ;\nC 225 ; WX 600 ; N AE ; B -20 0 614 583 ;\nC 227 ; WX 600 ; N ordfeminine ;" " B 118 182 489 595 ;\nC 232 ; WX 600 ; N Lslash ; B 12 0 571 583 ;\nC 233 ; WX 6" "00 ; N Oslash ; B 9 -70 590 638 ;\nC 234 ; WX 600 ; N OE ; B -20 0 612 583 ;\nC " "235 ; WX 600 ; N ordmasculine ; B 122 182 480 595 ;\nC 241 ; WX 600 ; N ae ; B -" "13 -16 612 450 ;\nC 245 ; WX 600 ; N dotlessi ; B 62 0 538 437 ;\nC 248 ; WX 600" " ; N lslash ; B 62 0 538 624 ;\nC 249 ; WX 600 ; N oslash ; B 23 -70 573 494 ;\n" "C 250 ; WX 600 ; N oe ; B -11 -16 613 450 ;\nC 251 ; WX 600 ; N germandbls ; B 1" "3 -16 529 623 ;\nC -1 ; WX 600 ; N Udieresis ; B 10 -14 590 798 ;\nC -1 ; WX 600" " ; N Uacute ; B 10 -14 590 839 ;\nC -1 ; WX 600 ; N Scedilla ; B 62 -229 538 597" " ;\nC -1 ; WX 600 ; N Tcaron ; B 42 0 558 839 ;\nC -1 ; WX 600 ; N Scaron ; B 62" " -14 538 839 ;\nC -1 ; WX 600 ; N Rcaron ; B 13 0 619 839 ;\nC -1 ; WX 600 ; N R" "acute ; B 13 0 619 839 ;\nC -1 ; WX 600 ; N Sacute ; B 62 -14 538 839 ;\nC -1 ; " "WX 600 ; N Otilde ; B 21 -14 579 799 ;\nC -1 ; WX 600 ; N ucircumflex ; B 13 -13" " 571 696 ;\nC -1 ; WX 600 ; N Ohungarumlaut ; B 21 -14 579 838 ;\nC -1 ; WX 600 " "; N Uhungarumlaut ; B 10 -14 590 838 ;\nC -1 ; WX 600 ; N Yacute ; B 21 0 579 83" "9 ;\nC -1 ; WX 600 ; N Eth ; B 0 0 550 583 ;\nC -1 ; WX 600 ; N Dcroat ; B 0 0 5" "50 583 ;\nC -1 ; WX 600 ; N Zacute ; B 73 0 527 839 ;\nC -1 ; WX 600 ; N Uring ;" " B 10 -14 590 871 ;\nC -1 ; WX 600 ; N gbreve ; B 33 -205 592 687 ;\nC -1 ; WX 6" "00 ; N eogonek ; B 33 -208 550 450 ;\nC -1 ; WX 600 ; N edotaccent ; B 33 -16 55" "0 654 ;\nC -1 ; WX 600 ; N ecaron ; B 33 -16 550 696 ;\nC -1 ; WX 600 ; N Ugrave" " ; B 10 -14 590 839 ;\nC -1 ; WX 600 ; N Thorn ; B 14 0 523 583 ;\nC -1 ; WX 600" " ; N eacute ; B 33 -16 550 696 ;\nC -1 ; WX 600 ; N edieresis ; B 33 -16 550 654" " ;\nC -1 ; WX 600 ; N dcaron ; B 33 -14 681 637 ;\nC -1 ; WX 600 ; N ccedilla ; " "B 54 -229 565 450 ;\nC -1 ; WX 600 ; N ccaron ; B 54 -16 565 696 ;\nC -1 ; WX 60" "0 ; N cacute ; B 54 -16 565 696 ;\nC -1 ; WX 600 ; N aogonek ; B 42 -208 580 450" " ;\nC -1 ; WX 600 ; N aring ; B 42 -16 571 727 ;\nC -1 ; WX 600 ; N atilde ; B 4" "2 -16 571 656 ;\nC -1 ; WX 600 ; N abreve ; B 42 -16 571 687 ;\nC -1 ; WX 600 ; " "N egrave ; B 33 -16 550 696 ;\nC -1 ; WX 600 ; N agrave ; B 42 -16 571 696 ;\nC " "-1 ; WX 600 ; N aacute ; B 42 -16 571 696 ;\nC -1 ; WX 600 ; N adieresis ; B 42 " "-16 571 654 ;\nC -1 ; WX 600 ; N Uogonek ; B 10 -208 590 583 ;\nC -1 ; WX 600 ; " "N ugrave ; B 13 -13 571 696 ;\nC -1 ; WX 600 ; N uacute ; B 13 -13 571 696 ;\nC " "-1 ; WX 600 ; N udieresis ; B 13 -13 571 654 ;\nC -1 ; WX 600 ; N tcaron ; B 13 " "-16 530 637 ;\nC -1 ; WX 600 ; N scommaaccent ; B 73 -278 527 450 ;\nC -1 ; WX 6" "00 ; N Zcaron ; B 73 0 527 839 ;\nC -1 ; WX 600 ; N ecircumflex ; B 33 -16 550 6" "96 ;\nC -1 ; WX 600 ; N Ucircumflex ; B 10 -14 590 839 ;\nC -1 ; WX 600 ; N acir" "cumflex ; B 42 -16 571 696 ;\nC -1 ; WX 600 ; N Zdotaccent ; B 73 0 527 798 ;\nC" " -1 ; WX 600 ; N scaron ; B 73 -16 527 696 ;\nC -1 ; WX 600 ; N Amacron ; B -21 " "0 621 769 ;\nC -1 ; WX 600 ; N sacute ; B 73 -16 527 696 ;\nC -1 ; WX 600 ; N Tc" "ommaaccent ; B 42 -278 558 583 ;\nC -1 ; WX 600 ; N Ydieresis ; B 21 0 579 798 ;" "\nC -1 ; WX 600 ; N thorn ; B -8 -205 571 624 ;\nC -1 ; WX 600 ; N Emacron ; B 1" "3 0 550 769 ;\nC -1 ; WX 600 ; N Ograve ; B 21 -14 579 839 ;\nC -1 ; WX 600 ; N " "Oacute ; B 21 -14 579 839 ;\nC -1 ; WX 600 ; N Odieresis ; B 21 -14 579 798 ;\nC" " -1 ; WX 600 ; N Ntilde ; B -8 0 592 799 ;\nC -1 ; WX 600 ; N Ncaron ; B -8 0 59" "2 839 ;\nC -1 ; WX 600 ; N Nacute ; B -8 0 592 839 ;\nC -1 ; WX 600 ; N Lcaron ;" " B 33 0 571 598 ;\nC -1 ; WX 600 ; N Lacute ; B 33 0 571 839 ;\nC -1 ; WX 600 ; " "N Idotaccent ; B 83 0 517 798 ;\nC -1 ; WX 600 ; N racute ; B 54 0 571 696 ;\nC " "-1 ; WX 600 ; N Icircumflex ; B 83 0 517 839 ;\nC -1 ; WX 600 ; N ohungarumlaut " "; B 42 -16 558 694 ;\nC -1 ; WX 600 ; N otilde ; B 42 -16 558 656 ;\nC -1 ; WX 6" "00 ; N Euro ; B 4 -14 538 597 ;\nC -1 ; WX 600 ; N ocircumflex ; B 42 -16 558 69" "6 ;\nC -1 ; WX 600 ; N onesuperior ; B 166 247 434 638 ;\nC -1 ; WX 600 ; N twos" "uperior ; B 149 247 429 637 ;\nC -1 ; WX 600 ; N threesuperior ; B 157 238 442 6" "37 ;\nC -1 ; WX 600 ; N Igrave ; B 83 0 517 839 ;\nC -1 ; WX 600 ; N Iacute ; B " "83 0 517 839 ;\nC -1 ; WX 600 ; N Imacron ; B 83 0 517 769 ;\nC -1 ; WX 600 ; N " "Iogonek ; B 83 -208 517 583 ;\nC -1 ; WX 600 ; N Idieresis ; B 83 0 517 798 ;\nC" " -1 ; WX 600 ; N Gbreve ; B 33 -14 592 831 ;\nC -1 ; WX 600 ; N Umacron ; B 10 -" "14 590 769 ;\nC -1 ; WX 600 ; N Kcommaaccent ; B 13 -278 602 583 ;\nC -1 ; WX 60" "0 ; N ograve ; B 42 -16 558 696 ;\nC -1 ; WX 600 ; N Scommaaccent ; B 62 -278 53" "8 597 ;\nC -1 ; WX 600 ; N Eogonek ; B 13 -208 587 583 ;\nC -1 ; WX 600 ; N oacu" "te ; B 42 -16 558 696 ;\nC -1 ; WX 600 ; N Edotaccent ; B 13 0 550 798 ;\nC -1 ;" " WX 600 ; N iogonek ; B 62 -208 540 623 ;\nC -1 ; WX 600 ; N gcommaaccent ; B 33" " -205 592 721 ;\nC -1 ; WX 600 ; N odieresis ; B 42 -16 558 654 ;\nC -1 ; WX 600" " ; N ntilde ; B 23 0 571 656 ;\nC -1 ; WX 600 ; N ncaron ; B 23 0 571 696 ;\nC -" "1 ; WX 600 ; N Ecaron ; B 13 0 550 839 ;\nC -1 ; WX 600 ; N Ecircumflex ; B 13 0" " 550 839 ;\nC -1 ; WX 600 ; N scedilla ; B 73 -229 527 450 ;\nC -1 ; WX 600 ; N " "rcaron ; B 54 0 571 696 ;\nC -1 ; WX 600 ; N Egrave ; B 13 0 550 839 ;\nC -1 ; W" "X 600 ; N Eacute ; B 13 0 550 839 ;\nC -1 ; WX 600 ; N Gcommaaccent ; B 33 -278 " "592 597 ;\nC -1 ; WX 600 ; N Rcommaaccent ; B 13 -278 619 583 ;\nC -1 ; WX 600 ;" " N Edieresis ; B 13 0 550 798 ;\nC -1 ; WX 600 ; N nacute ; B 23 0 571 696 ;\nC " "-1 ; WX 600 ; N uogonek ; B 13 -208 571 437 ;\nC -1 ; WX 600 ; N umacron ; B 13 " "-13 571 626 ;\nC -1 ; WX 600 ; N Dcaron ; B 13 0 550 839 ;\nC -1 ; WX 600 ; N lc" "aron ; B 62 0 538 637 ;\nC -1 ; WX 600 ; N Ccaron ; B 33 -14 564 839 ;\nC -1 ; W" "X 600 ; N Cacute ; B 33 -14 564 839 ;\nC -1 ; WX 600 ; N Ccedilla ; B 33 -229 56" "4 597 ;\nC -1 ; WX 600 ; N degree ; B 125 243 475 596 ;\nC -1 ; WX 600 ; N Aogon" "ek ; B -21 -208 621 583 ;\nC -1 ; WX 600 ; N minus ; B 42 230 558 330 ;\nC -1 ; " "WX 600 ; N multiply ; B 100 80 500 480 ;\nC -1 ; WX 600 ; N divide ; B 42 28 558" " 532 ;\nC -1 ; WX 600 ; N Aring ; B -21 0 621 871 ;\nC -1 ; WX 600 ; N trademark" " ; B -33 220 620 583 ;\nC -1 ; WX 600 ; N rcommaaccent ; B 54 -278 571 449 ;\nC " "-1 ; WX 600 ; N lacute ; B 62 0 538 840 ;\nC -1 ; WX 600 ; N omacron ; B 42 -16 " "558 626 ;\nC -1 ; WX 600 ; N Atilde ; B -21 0 621 799 ;\nC -1 ; WX 600 ; N icirc" "umflex ; B 62 0 538 696 ;\nC -1 ; WX 600 ; N igrave ; B 62 0 538 696 ;\nC -1 ; W" "X 600 ; N ncommaaccent ; B 23 -278 571 450 ;\nC -1 ; WX 600 ; N lcommaaccent ; B" " 62 -278 538 624 ;\nC -1 ; WX 600 ; N plusminus ; B 42 0 558 624 ;\nC -1 ; WX 60" "0 ; N onehalf ; B -34 0 629 638 ;\nC -1 ; WX 600 ; N onequarter ; B -34 0 629 63" "8 ;\nC -1 ; WX 600 ; N threequarters ; B -43 0 630 637 ;\nC -1 ; WX 600 ; N iacu" "te ; B 62 0 538 696 ;\nC -1 ; WX 600 ; N Abreve ; B -21 0 621 831 ;\nC -1 ; WX 6" "00 ; N kcommaaccent ; B 33 -278 571 624 ;\nC -1 ; WX 600 ; N Omacron ; B 21 -14 " "579 769 ;\nC -1 ; WX 600 ; N imacron ; B 62 0 538 626 ;\nC -1 ; WX 600 ; N emacr" "on ; B 33 -16 550 626 ;\nC -1 ; WX 600 ; N amacron ; B 42 -16 571 626 ;\nC -1 ; " "WX 600 ; N tcommaaccent ; B 13 -278 529 591 ;\nC -1 ; WX 600 ; N ydieresis ; B 2" "1 -205 579 654 ;\nC -1 ; WX 600 ; N zdotaccent ; B 85 0 519 654 ;\nC -1 ; WX 600" " ; N zcaron ; B 85 0 519 696 ;\nC -1 ; WX 600 ; N zacute ; B 85 0 519 696 ;\nC -" "1 ; WX 600 ; N yacute ; B 21 -205 579 696 ;\nC -1 ; WX 600 ; N uhungarumlaut ; B" " 13 -13 571 694 ;\nC -1 ; WX 600 ; N eth ; B 42 -16 558 646 ;\nC -1 ; WX 600 ; N" " uring ; B 13 -13 571 727 ;\nC -1 ; WX 600 ; N Ocircumflex ; B 21 -14 579 839 ;\n" "C -1 ; WX 600 ; N commaaccent ; B 183 -278 351 -59 ;\nC -1 ; WX 600 ; N copyrigh" "t ; B -7 -15 606 598 ;\nC -1 ; WX 600 ; N registered ; B -7 -15 606 598 ;\nC -1 " "; WX 600 ; N Acircumflex ; B -21 0 621 839 ;\nC -1 ; WX 600 ; N idieresis ; B 62" " 0 538 654 ;\nC -1 ; WX 600 ; N lozenge ; B 72 -19 529 593 ;\nC -1 ; WX 600 ; N " "Delta ; B 15 0 585 583 ;\nC -1 ; WX 600 ; N notequal ; B 42 22 558 525 ;\nC -1 ;" " WX 600 ; N radical ; B 12 -60 642 697 ;\nC -1 ; WX 600 ; N Agrave ; B -21 0 621" " 839 ;\nC -1 ; WX 600 ; N Aacute ; B -21 0 621 839 ;\nC -1 ; WX 600 ; N lessequa" "l ; B 3 0 549 591 ;\nC -1 ; WX 600 ; N greaterequal ; B 35 0 582 591 ;\nC -1 ; W" "X 600 ; N logicalnot ; B 42 115 465 445 ;\nC -1 ; WX 600 ; N summation ; B 45 -9" "7 538 671 ;\nC -1 ; WX 600 ; N partialdiff ; B 102 -16 524 590 ;\nC -1 ; WX 600 " "; N Ncommaaccent ; B -8 -278 592 583 ;\nC -1 ; WX 600 ; N dcroat ; B 33 -16 613 " "624 ;\nC -1 ; WX 600 ; N brokenbar ; B 250 -153 350 622 ;\nC -1 ; WX 600 ; N Lco" "mmaaccent ; B 33 -278 571 583 ;\nC -1 ; WX 600 ; N Adieresis ; B -21 0 621 798 ;" "\nC -1 ; WX 600 ; N mu ; B 13 -153 571 437 ;\nC -1 ; WX 600 ; N .notdef ; B 375 " "0 375 0 ;\nEndCharMetrics\nStartKernData\nStartKernPairs 998\nKPX A C -14\nKPX A" " Ccedilla -22\nKPX A G -10\nKPX A O -15\nKPX A Odieresis -15\nKPX A Q -16\nKPX A" " T -27\nKPX A U -23\nKPX A Uacute -23\nKPX A Ucircumflex -23\nKPX A Udieresis -2" "3\nKPX A Ugrave -23\nKPX A V -59\nKPX A W -13\nKPX A Y -27\nKPX A a 15\nKPX A b " "45\nKPX A c -4\nKPX A ccedilla -8\nKPX A comma -47\nKPX A d 4\nKPX A e 2\nKPX A " "g 0\nKPX A guillemotleft -40\nKPX A guilsinglleft -40\nKPX A hyphen -19\nKPX A o" " -3\nKPX A period -62\nKPX A q -4\nKPX A quotedblright -84\nKPX A quoteright -11" "3\nKPX A t -20\nKPX A u -12\nKPX A v -39\nKPX A w -13\nKPX A y -39\nKPX Aacute C" " -14\nKPX Aacute G -10\nKPX Aacute O -15\nKPX Aacute Q -16\nKPX Aacute T -27\nKP" "X Aacute U -23\nKPX Aacute V -59\nKPX Aacute W -13\nKPX Aacute Y -27\nKPX Aacute" " a 15\nKPX Aacute b 45\nKPX Aacute c -4\nKPX Aacute comma -47\nKPX Aacute d 4\nK" "PX Aacute e 2\nKPX Aacute g 0\nKPX Aacute guillemotleft -40\nKPX Aacute guilsing" "lleft -40\nKPX Aacute hyphen -19\nKPX Aacute o -3\nKPX Aacute period -62\nKPX Aa" "cute q -4\nKPX Aacute quoteright -113\nKPX Aacute t -20\nKPX Aacute u -12\nKPX A" "acute v -39\nKPX Aacute w -13\nKPX Aacute y -39\nKPX Acircumflex C -14\nKPX Acir" "cumflex G -10\nKPX Acircumflex O -15\nKPX Acircumflex Q -16\nKPX Acircumflex T -" "27\nKPX Acircumflex U -23\nKPX Acircumflex V -59\nKPX Acircumflex W -13\nKPX Aci" "rcumflex Y -27\nKPX Acircumflex comma -47\nKPX Acircumflex period -62\nKPX Adier" "esis C -14\nKPX Adieresis G -10\nKPX Adieresis O -15\nKPX Adieresis Q -16\nKPX A" "dieresis T -27\nKPX Adieresis U -23\nKPX Adieresis V -59\nKPX Adieresis W -13\nK" "PX Adieresis Y -27\nKPX Adieresis a 15\nKPX Adieresis b 45\nKPX Adieresis c -4\n" "KPX Adieresis comma -47\nKPX Adieresis d 4\nKPX Adieresis g 0\nKPX Adieresis gui" "llemotleft -40\nKPX Adieresis guilsinglleft -40\nKPX Adieresis hyphen -19\nKPX A" "dieresis o -3\nKPX Adieresis period -62\nKPX Adieresis q -4\nKPX Adieresis quote" "dblright -84\nKPX Adieresis quoteright -113\nKPX Adieresis t -20\nKPX Adieresis " "u -12\nKPX Adieresis v -39\nKPX Adieresis w -13\nKPX Adieresis y -39\nKPX Agrave" " C -14\nKPX Agrave G -10\nKPX Agrave O -15\nKPX Agrave Q -16\nKPX Agrave T -27\n" "KPX Agrave U -23\nKPX Agrave V -59\nKPX Agrave W -13\nKPX Agrave Y -27\nKPX Agra" "ve comma -47\nKPX Agrave period -62\nKPX Aring C -14\nKPX Aring G -10\nKPX Aring" " O -15\nKPX Aring Q -16\nKPX Aring T -27\nKPX Aring U -23\nKPX Aring V -59\nKPX " "Aring W -13\nKPX Aring Y -27\nKPX Aring a 15\nKPX Aring b 45\nKPX Aring c -4\nKP" "X Aring comma -47\nKPX Aring d 4\nKPX Aring e 2\nKPX Aring g 0\nKPX Aring guille" "motleft -40\nKPX Aring guilsinglleft -40\nKPX Aring hyphen -19\nKPX Aring o -3\n" "KPX Aring period -62\nKPX Aring q -4\nKPX Aring quotedblright -84\nKPX Aring quo" "teright -113\nKPX Aring t -20\nKPX Aring u -12\nKPX Aring v -39\nKPX Aring w -13" "\nKPX Aring y -39\nKPX Atilde C -14\nKPX Atilde G -10\nKPX Atilde O -15\nKPX Ati" "lde Q -16\nKPX Atilde T -27\nKPX Atilde U -23\nKPX Atilde V -59\nKPX Atilde W -1" "3\nKPX Atilde Y -27\nKPX Atilde comma -47\nKPX Atilde period -62\nKPX B A 4\nKPX" " B AE 3\nKPX B Aacute 4\nKPX B Acircumflex 4\nKPX B Adieresis 4\nKPX B Aring 4\n" "KPX B Atilde 4\nKPX B O -9\nKPX B OE 11\nKPX B Oacute -9\nKPX B Ocircumflex -9\n" "KPX B Odieresis -9\nKPX B Ograve -9\nKPX B Oslash -5\nKPX B V -18\nKPX B W -6\nK" "PX B Y -39\nKPX C A 8\nKPX C AE 7\nKPX C Aacute 8\nKPX C Adieresis 8\nKPX C Arin" "g 8\nKPX C H -13\nKPX C K -8\nKPX C O -14\nKPX C Oacute -14\nKPX C Odieresis -14" "\nKPX Ccedilla A 3\nKPX D A -25\nKPX D Aacute -25\nKPX D Acircumflex -25\nKPX D " "Adieresis -25\nKPX D Agrave -25\nKPX D Aring -25\nKPX D Atilde -25\nKPX D J -32\n" "KPX D T -27\nKPX D V -30\nKPX D W -13\nKPX D X -37\nKPX D Y -51\nKPX F A -39\nKP" "X F Aacute -39\nKPX F Acircumflex -39\nKPX F Adieresis -39\nKPX F Agrave -39\nKP" "X F Aring -39\nKPX F Atilde -39\nKPX F J -78\nKPX F O -24\nKPX F Odieresis -24\n" "KPX F a -40\nKPX F aacute -40\nKPX F adieresis -40\nKPX F ae -18\nKPX F aring -4" "0\nKPX F comma -168\nKPX F e -47\nKPX F eacute -47\nKPX F hyphen -55\nKPX F i -4" "6\nKPX F j -54\nKPX F o -51\nKPX F oacute -51\nKPX F odieresis -51\nKPX F oe -16" "\nKPX F oslash -51\nKPX F period -187\nKPX F r -32\nKPX F u -1\nKPX G A 6\nKPX G" " AE 5\nKPX G Aacute 6\nKPX G Acircumflex 6\nKPX G Adieresis 6\nKPX G Agrave 6\nK" "PX G Aring 6\nKPX G Atilde 6\nKPX G T -25\nKPX G V 6\nKPX G W 6\nKPX G Y -14\nKP" "X J A -8\nKPX J AE -16\nKPX J Adieresis -8\nKPX J Aring -8\nKPX K C -24\nKPX K G" " -19\nKPX K O -25\nKPX K OE -4\nKPX K Oacute -25\nKPX K Odieresis -25\nKPX K S -" "9\nKPX K T -13\nKPX K a 6\nKPX K adieresis 6\nKPX K ae 31\nKPX K aring 6\nKPX K " "e -6\nKPX K hyphen -44\nKPX K o -12\nKPX K oacute -12\nKPX K odieresis -12\nKPX " "K u -22\nKPX K udieresis -22\nKPX K y -50\nKPX L A 16\nKPX L AE 16\nKPX L Aacute" " 16\nKPX L Adieresis 16\nKPX L Aring 16\nKPX L C -10\nKPX L Ccedilla -11\nKPX L " "G -10\nKPX L O -7\nKPX L Oacute -7\nKPX L Ocircumflex -7\nKPX L Odieresis -7\nKP" "X L Ograve -7\nKPX L Otilde -7\nKPX L S -24\nKPX L T -52\nKPX L U -29\nKPX L Udi" "eresis -29\nKPX L V -57\nKPX L W -22\nKPX L Y -52\nKPX L hyphen 9\nKPX L quotedb" "lright -72\nKPX L quoteright -99\nKPX L u -10\nKPX L udieresis -11\nKPX L y -33\n" "KPX N A -3\nKPX N AE -3\nKPX N Aacute -3\nKPX N Adieresis -3\nKPX N Aring -3\nKP" "X N C -7\nKPX N Ccedilla -6\nKPX N G -6\nKPX N O -5\nKPX N Oacute -5\nKPX N Odie" "resis -5\nKPX N a -11\nKPX N aacute -11\nKPX N adieresis -11\nKPX N ae 18\nKPX N" " aring -11\nKPX N comma -75\nKPX N e -3\nKPX N eacute -3\nKPX N o -8\nKPX N oacu" "te -8\nKPX N odieresis -8\nKPX N oslash -3\nKPX N period -93\nKPX N u -8\nKPX N " "udieresis -8\nKPX O A -14\nKPX O AE -14\nKPX O Aacute -14\nKPX O Adieresis -14\n" "KPX O Aring -14\nKPX O T -15\nKPX O V -23\nKPX O W -2\nKPX O X -26\nKPX O Y -43\n" "KPX Oacute A -14\nKPX Oacute T -15\nKPX Oacute V -23\nKPX Oacute W -2\nKPX Oacut" "e Y -43\nKPX Ocircumflex T -15\nKPX Ocircumflex V -23\nKPX Ocircumflex Y -43\nKP" "X Odieresis A -14\nKPX Odieresis T -15\nKPX Odieresis V -23\nKPX Odieresis W -2\n" "KPX Odieresis X -26\nKPX Odieresis Y -43\nKPX Ograve T -15\nKPX Ograve V -23\nKP" "X Ograve Y -43\nKPX Oslash A -10\nKPX Otilde T -15\nKPX Otilde V -23\nKPX Otilde" " Y -43\nKPX P A -61\nKPX P AE -59\nKPX P Aacute -61\nKPX P Adieresis -61\nKPX P " "Aring -61\nKPX P J -73\nKPX P a -49\nKPX P aacute -49\nKPX P adieresis -49\nKPX " "P ae -27\nKPX P aring -49\nKPX P comma -160\nKPX P e -38\nKPX P eacute -38\nKPX " "P hyphen -33\nKPX P o -42\nKPX P oacute -42\nKPX P odieresis -42\nKPX P oe -13\n" "KPX P oslash -42\nKPX P period -178\nKPX R C -14\nKPX R Ccedilla -17\nKPX R G -1" "0\nKPX R O -14\nKPX R OE 5\nKPX R Oacute -14\nKPX R Odieresis -14\nKPX R T -28\n" "KPX R U -16\nKPX R Udieresis -17\nKPX R V -24\nKPX R W -8\nKPX R Y -28\nKPX R a " "14\nKPX R aacute 14\nKPX R adieresis 14\nKPX R ae 40\nKPX R aring 14\nKPX R e 2\n" "KPX R eacute 2\nKPX R hyphen -25\nKPX R o -3\nKPX R oacute -3\nKPX R odieresis -" "3\nKPX R oe 29\nKPX R u -7\nKPX R uacute -8\nKPX R udieresis -8\nKPX R y -18\nKP" "X S A -10\nKPX S AE -10\nKPX S Aacute -10\nKPX S Adieresis -10\nKPX S Aring -10\n" "KPX S T -41\nKPX S V -10\nKPX S W -12\nKPX S Y -31\nKPX S t -17\nKPX T A -28\nKP" "X T AE -28\nKPX T Aacute -28\nKPX T Acircumflex -28\nKPX T Adieresis -28\nKPX T " "Agrave -28\nKPX T Aring -28\nKPX T Atilde -28\nKPX T C -19\nKPX T G -19\nKPX T J" " -65\nKPX T O -14\nKPX T OE 6\nKPX T Oacute -14\nKPX T Ocircumflex -14\nKPX T Od" "ieresis -14\nKPX T Ograve -14\nKPX T Oslash -14\nKPX T Otilde -14\nKPX T S -41\n" "KPX T V 10\nKPX T W 4\nKPX T Y -10\nKPX T a -34\nKPX T ae -12\nKPX T c -37\nKPX " "T colon -112\nKPX T comma -130\nKPX T e -26\nKPX T g -24\nKPX T guillemotleft -7" "3\nKPX T guilsinglleft -73\nKPX T hyphen -91\nKPX T i -42\nKPX T j -49\nKPX T o " "-31\nKPX T oslash -31\nKPX T period -148\nKPX T r -28\nKPX T s -39\nKPX T semico" "lon -100\nKPX T u 4\nKPX T v 10\nKPX T w 10\nKPX T y 0\nKPX U A -19\nKPX U AE -1" "8\nKPX U Aacute -19\nKPX U Acircumflex -19\nKPX U Adieresis -19\nKPX U Aring -19" "\nKPX U Atilde -19\nKPX U comma -95\nKPX U m 16\nKPX U n -8\nKPX U p 0\nKPX U pe" "riod -114\nKPX U r -34\nKPX Uacute A -19\nKPX Uacute comma -95\nKPX Uacute m 16\n" "KPX Uacute n -8\nKPX Uacute p 0\nKPX Uacute period -114\nKPX Uacute r -34\nKPX U" "circumflex A -19\nKPX Udieresis A -19\nKPX Udieresis b 27\nKPX Udieresis comma -" "95\nKPX Udieresis m 16\nKPX Udieresis n -8\nKPX Udieresis p 0\nKPX Udieresis per" "iod -114\nKPX Udieresis r -34\nKPX Ugrave A -19\nKPX V A -4\nKPX V AE -12\nKPX V" " Aacute -4\nKPX V Acircumflex -4\nKPX V Adieresis -4\nKPX V Agrave -4\nKPX V Ari" "ng -4\nKPX V Atilde -4\nKPX V C -24\nKPX V G -24\nKPX V O -23\nKPX V Oacute -23\n" "KPX V Ocircumflex -23\nKPX V Odieresis -23\nKPX V Ograve -23\nKPX V Oslash -23\n" "KPX V Otilde -23\nKPX V S -27\nKPX V T 10\nKPX V a -54\nKPX V ae -27\nKPX V colo" "n -132\nKPX V comma -146\nKPX V e -47\nKPX V g -46\nKPX V guillemotleft -75\nKPX" " V guilsinglleft -75\nKPX V hyphen -39\nKPX V i -59\nKPX V o -52\nKPX V oslash -" "48\nKPX V period -164\nKPX V r -45\nKPX V semicolon -120\nKPX V u -15\nKPX V y -" "17\nKPX W A -9\nKPX W AE -9\nKPX W Aacute -9\nKPX W Acircumflex -9\nKPX W Adiere" "sis -9\nKPX W Agrave -9\nKPX W Aring -9\nKPX W Atilde -9\nKPX W C -4\nKPX W G -3" "\nKPX W O -2\nKPX W Oacute -2\nKPX W Ocircumflex -2\nKPX W Odieresis -2\nKPX W O" "grave -2\nKPX W Oslash 2\nKPX W Otilde -2\nKPX W S -17\nKPX W T 4\nKPX W a -11\n" "KPX W ae 17\nKPX W colon -99\nKPX W comma -83\nKPX W e -3\nKPX W g -3\nKPX W gui" "llemotleft -31\nKPX W guilsinglleft -31\nKPX W hyphen 1\nKPX W i -38\nKPX W o -8" "\nKPX W oslash -4\nKPX W period -101\nKPX W r -25\nKPX W semicolon -82\nKPX W u " "1\nKPX W y -2\nKPX X C -28\nKPX X O -26\nKPX X Odieresis -26\nKPX X Q -26\nKPX X" " a 0\nKPX X e -12\nKPX X hyphen -50\nKPX X o -18\nKPX X u -28\nKPX X y -43\nKPX " "Y A -25\nKPX Y AE -28\nKPX Y Aacute -25\nKPX Y Acircumflex -25\nKPX Y Adieresis " "-25\nKPX Y Agrave -25\nKPX Y Aring -25\nKPX Y Atilde -25\nKPX Y C -45\nKPX Y G -" "45\nKPX Y O -44\nKPX Y Oacute -44\nKPX Y Ocircumflex -44\nKPX Y Odieresis -44\nK" "PX Y Ograve -44\nKPX Y Oslash -43\nKPX Y Otilde -44\nKPX Y S -48\nKPX Y T -10\nK" "PX Y a -53\nKPX Y ae -28\nKPX Y colon -150\nKPX Y comma -118\nKPX Y e -59\nKPX Y" " g -59\nKPX Y guillemotleft -94\nKPX Y guilsinglleft -94\nKPX Y hyphen -81\nKPX " "Y i -58\nKPX Y o -64\nKPX Y oslash -51\nKPX Y p -30\nKPX Y period -136\nKPX Y se" "micolon -133\nKPX Y u -43\nKPX Y v -33\nKPX Z v -41\nKPX Z y -52\nKPX a j -81\nK" "PX a quoteright -78\nKPX a v -21\nKPX a w -12\nKPX a y -31\nKPX aacute v -21\nKP" "X aacute w -12\nKPX aacute y -31\nKPX adieresis v -21\nKPX adieresis w -12\nKPX " "adieresis y -31\nKPX ae v 28\nKPX ae w 32\nKPX ae y 18\nKPX agrave v -21\nKPX ag" "rave w -12\nKPX agrave y -31\nKPX aring v -21\nKPX aring w -12\nKPX aring y -31\n" "KPX b v 0\nKPX b w 4\nKPX b y -10\nKPX c h 11\nKPX c k 6\nKPX comma one -128\nKP" "X comma quotedblright -137\nKPX comma quoteright -166\nKPX e quoteright -65\nKPX" " e t -16\nKPX e v -9\nKPX e w -3\nKPX e x 6\nKPX e y -20\nKPX eacute v -9\nKPX e" "acute w -3\nKPX eacute y -20\nKPX ecircumflex v -9\nKPX ecircumflex w -3\nKPX ec" "ircumflex y -20\nKPX eight four -58\nKPX eight one -72\nKPX eight seven -65\nKPX" " f a -32\nKPX f aacute -32\nKPX f adieresis -32\nKPX f ae -7\nKPX f aring -32\nK" "PX f e -43\nKPX f eacute -43\nKPX f f -43\nKPX f i -37\nKPX f j -60\nKPX f l -25" "\nKPX f o -47\nKPX f oacute -47\nKPX f odieresis -42\nKPX f oe -15\nKPX f oslash" " -29\nKPX f quoteright -73\nKPX f s -42\nKPX f t -6\nKPX five four -52\nKPX five" " one -73\nKPX five seven -73\nKPX four four -62\nKPX four one -66\nKPX four seve" "n -93\nKPX g a -4\nKPX g adieresis -4\nKPX g ae 23\nKPX g aring -4\nKPX g e 1\nK" "PX g eacute 1\nKPX g l -34\nKPX g oacute -3\nKPX g odieresis -3\nKPX g r 0\nKPX " "guillemotright A -37\nKPX guillemotright AE -34\nKPX guillemotright Aacute -37\n" "KPX guillemotright Adieresis -37\nKPX guillemotright Aring -37\nKPX guillemotrig" "ht T -71\nKPX guillemotright V -72\nKPX guillemotright W -29\nKPX guillemotright" " Y -92\nKPX guilsinglright A -37\nKPX guilsinglright AE -34\nKPX guilsinglright " "Aacute -37\nKPX guilsinglright Adieresis -37\nKPX guilsinglright Aring -37\nKPX " "guilsinglright T -71\nKPX guilsinglright V -72\nKPX guilsinglright W -29\nKPX gu" "ilsinglright Y -92\nKPX h quoteright -69\nKPX h y -23\nKPX hyphen A -18\nKPX hyp" "hen AE -14\nKPX hyphen Aacute -18\nKPX hyphen Adieresis -18\nKPX hyphen Aring -1" "8\nKPX hyphen T -90\nKPX hyphen V -38\nKPX hyphen W 1\nKPX hyphen Y -81\nKPX i T" " -58\nKPX i j -143\nKPX k a 1\nKPX k aacute 1\nKPX k adieresis 1\nKPX k ae 26\nK" "PX k aring 1\nKPX k comma -63\nKPX k e -11\nKPX k eacute -11\nKPX k g -14\nKPX k" " hyphen -50\nKPX k o -17\nKPX k oacute -17\nKPX k odieresis -17\nKPX k period -7" "5\nKPX k s -9\nKPX k u -3\nKPX k udieresis -3\nKPX l v -77\nKPX l y -77\nKPX m p" " 32\nKPX m v 18\nKPX m w 22\nKPX m y 8\nKPX n T -40\nKPX n p 4\nKPX n quoteright" " -68\nKPX n v -12\nKPX n w -5\nKPX n y -22\nKPX nine four -53\nKPX nine one -66\n" "KPX nine seven -57\nKPX o T -31\nKPX o quoteright -62\nKPX o t -13\nKPX o v -6\n" "KPX o w -3\nKPX o x -10\nKPX o y -17\nKPX oacute v -6\nKPX oacute w -3\nKPX oacu" "te y -17\nKPX ocircumflex t -13\nKPX odieresis t -13\nKPX odieresis v -6\nKPX od" "ieresis w -3\nKPX odieresis x -10\nKPX odieresis y -17\nKPX ograve v -6\nKPX ogr" "ave w -3\nKPX ograve y -17\nKPX one comma -99\nKPX one eight -74\nKPX one five -" "55\nKPX one four -87\nKPX one nine -73\nKPX one one -62\nKPX one period -114\nKP" "X one seven -141\nKPX one six -98\nKPX one three -53\nKPX one two -47\nKPX one z" "ero -86\nKPX p t -3\nKPX p y -6\nKPX period one -113\nKPX period quotedblright -" "131\nKPX period quoteright -161\nKPX q c 2\nKPX q u 41\nKPX quotedblbase A -6\nK" "PX quotedblbase AE -7\nKPX quotedblbase T -90\nKPX quotedblbase V -104\nKPX quot" "edblbase W -43\nKPX quotedblbase Y -78\nKPX quotedblleft A -62\nKPX quotedblleft" " AE -60\nKPX quotedblleft Aacute -62\nKPX quotedblleft Adieresis -62\nKPX quoted" "blleft Aring -62\nKPX quotedblleft T -24\nKPX quotedblleft V -22\nKPX quotedblle" "ft W -13\nKPX quotedblleft Y -49\nKPX quotedblright A -76\nKPX quotedblright AE " "-75\nKPX quotedblright Aacute -76\nKPX quotedblright Adieresis -76\nKPX quotedbl" "right Aring -76\nKPX quotedblright T -39\nKPX quotedblright V -30\nKPX quotedblr" "ight W -26\nKPX quotedblright Y -51\nKPX quoteleft A -87\nKPX quoteleft AE -85\n" "KPX quoteleft Aacute -87\nKPX quoteleft Adieresis -87\nKPX quoteleft Aring -87\n" "KPX quoteleft T -49\nKPX quoteleft V -46\nKPX quoteleft W -38\nKPX quoteleft Y -" "73\nKPX quoteright A -154\nKPX quoteright AE -153\nKPX quoteright Aacute -154\nK" "PX quoteright Adieresis -154\nKPX quoteright Aring -154\nKPX quoteright comma -2" "27\nKPX quoteright d -140\nKPX quoteright o -143\nKPX quoteright period -244\nKP" "X quoteright r -149\nKPX quoteright s -150\nKPX quoteright t -117\nKPX quoterigh" "t v -110\nKPX quoteright w -105\nKPX quoteright y -116\nKPX r a -17\nKPX r aacut" "e -17\nKPX r acircumflex -17\nKPX r adieresis -17\nKPX r ae 4\nKPX r agrave -17\n" "KPX r aring -17\nKPX r c -18\nKPX r ccedilla -15\nKPX r colon -95\nKPX r comma -" "108\nKPX r d -8\nKPX r e -7\nKPX r eacute -7\nKPX r ecircumflex -7\nKPX r egrave" " -7\nKPX r f -16\nKPX r g -5\nKPX r h -20\nKPX r hyphen -41\nKPX r i -25\nKPX r " "j -33\nKPX r k -30\nKPX r l -47\nKPX r m 36\nKPX r n 10\nKPX r o -12\nKPX r oacu" "te -12\nKPX r ocircumflex -12\nKPX r odieresis -12\nKPX r oe 18\nKPX r ograve -1" "2\nKPX r oslash -12\nKPX r p 30\nKPX r period -122\nKPX r q -4\nKPX r quoteright" " -41\nKPX r r -11\nKPX r s -21\nKPX r semicolon -83\nKPX r t 20\nKPX r u 20\nKPX" " r v 26\nKPX r w 26\nKPX r x 7\nKPX r y 16\nKPX r z -21\nKPX s quoteright -60\nK" "PX s t -11\nKPX seven colon -156\nKPX seven comma -157\nKPX seven eight -74\nKPX" " seven five -82\nKPX seven four -101\nKPX seven one -67\nKPX seven period -176\n" "KPX seven seven -62\nKPX seven six -93\nKPX seven three -72\nKPX seven two -64\n" "KPX six four -49\nKPX six one -54\nKPX six seven -46\nKPX t S -35\nKPX t a -16\n" "KPX t aacute -16\nKPX t adieresis -16\nKPX t ae 9\nKPX t aring -16\nKPX t colon " "-117\nKPX t e -24\nKPX t eacute -24\nKPX t h -5\nKPX t o -30\nKPX t oacute -30\n" "KPX t odieresis -30\nKPX t quoteright -102\nKPX t semicolon -103\nKPX three four" " -52\nKPX three one -71\nKPX three seven -64\nKPX two four -67\nKPX two one -66\n" "KPX two seven -68\nKPX u quoteright -56\nKPX v a -3\nKPX v aacute -3\nKPX v acir" "cumflex -3\nKPX v adieresis -3\nKPX v ae 18\nKPX v agrave -3\nKPX v aring -3\nKP" "X v atilde -3\nKPX v c -11\nKPX v colon -81\nKPX v comma -136\nKPX v e 0\nKPX v " "eacute 0\nKPX v ecircumflex 0\nKPX v egrave 0\nKPX v g 1\nKPX v hyphen -23\nKPX " "v l -77\nKPX v o -5\nKPX v oacute -5\nKPX v odieresis -5\nKPX v ograve -5\nKPX v" " oslash -5\nKPX v period -156\nKPX v s -11\nKPX v semicolon -69\nKPX w a -3\nKPX" " w aacute -3\nKPX w acircumflex -3\nKPX w adieresis -3\nKPX w ae 23\nKPX w agrav" "e -3\nKPX w aring -3\nKPX w atilde -3\nKPX w c -6\nKPX w colon -81\nKPX w comma " "-90\nKPX w e 2\nKPX w eacute 2\nKPX w ecircumflex 2\nKPX w egrave 2\nKPX w g 3\n" "KPX w hyphen 3\nKPX w l -48\nKPX w o -2\nKPX w oacute -2\nKPX w odieresis -2\nKP" "X w ograve -2\nKPX w oslash 2\nKPX w period -109\nKPX w s -11\nKPX w semicolon -" "69\nKPX x a 5\nKPX x c -14\nKPX x e -5\nKPX x eacute -5\nKPX x o -10\nKPX x q -8" "\nKPX y a -13\nKPX y aacute -13\nKPX y acircumflex -13\nKPX y adieresis -13\nKPX" " y ae 8\nKPX y agrave -13\nKPX y aring -13\nKPX y atilde -13\nKPX y c -21\nKPX y" " colon -91\nKPX y comma -134\nKPX y e -11\nKPX y eacute -11\nKPX y ecircumflex -" "11\nKPX y egrave -11\nKPX y g -9\nKPX y hyphen -19\nKPX y l -78\nKPX y o -15\nKP" "X y oacute -15\nKPX y odieresis -15\nKPX y ograve -15\nKPX y oslash -15\nKPX y p" "eriod -155\nKPX y s -21\nKPX y semicolon -79\nKPX zero four -59\nKPX zero one -7" "6\nKPX zero seven -68\nEndKernPairs\nEndKernData\nEndFontMetrics\n" ; int n022004l_pfb_len = 50493; char* n022004l_pfb = "\x80\x1U\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-Bold 1.05\n%%CreationDate: Wed D" "ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n" "% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COPYING" " (GNU General Public License) for license conditions.\n% As a special exception," " permission is granted to include this font\n% program in a Postscript or PDF fi" "le that consists of a document that\n% contains text to be displayed or printed " "using this font, regardless\n% of the conditions or license applying to the docu" "ment itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) readon" "ly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See the" " file COPYING (GNU General Public License) for license conditions. As a special " "exception, permission is granted to include this font program in a Postscript or" " PDF file that consists of a document that contains text to be displayed or prin" "ted using this font, regardless of the conditions or license applying to the doc" "ument itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by (UR" "W)++ Design & Development) readonly def\n/FullName (Nimbus Mono L Bold) readonly" " def\n/FamilyName (Nimbus Mono L) readonly def\n/Weight (Bold) readonly def\n/It" "alicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePosition -100 def\n/Underl" "ineThickness 50 def\nend readonly def\n/FontName /NimbusMonL-Bold def\n/PaintTyp" "e 0 def\n/WMode 0 def\n/FontBBox {-43 -278 681 871} readonly def\n/FontType 1 de" "f\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/Encoding StandardEnc" "oding def\n/UniqueID 5020946 def\ncurrentdict end\ncurrentfile eexec\r\x80\x2\xc0" "\xbc\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a\"\xc3[[5\xedj\xa2\x35\x93" "\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9ct\xb4r\xde\x9f\x8em\xf9%\xf6" "\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4\x19\xff++\xde`[\x8e\xe3&N\xdd" "fA-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e" "\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9d" "n\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13" "\x1d\xee\x0[AX\x5\xa1m\x8a\x12>j!S\xda\xaeZ\xc3\x44\x9a\x45\x32V1\xb2h\x84\xc3\xdb" "\xa4\xccO:\xee\r\xad)\x7u|8tl\x94~\"y\xcf\x35\xbfw\xcb(\xbd\xa8\xe*\x1a\xd4\xb7\xa8" "v\x2\x62\xb6\x92-D]p\x15.+\xc1t|sJ\x8c\x63U}\xd0\x42\xf7\xdf\xdf\x15qE\x0i\x1c\x84" ":l\xab}A\x9e\x81\xfe\xba\xadzo\xc0\xa5\xd7\x8b\xf6\xcc\xa5-\xe8;k\x9f)|\xaa\xad\xf2" "1\x83\x11\xea\xbb\x9dO\xb4\x90N 7\x86+\xe8\xee\xf5\x10\x1f\x87#\xcb\x1f\xeZ\x1d\x82" "-2!\xclt#\x11\xd9\xc4\\Z\xb9\xc6\x9d\xd6\x41\xbf;\x15\xec<\xd3\xf7\xbb\xd3\x31\xca" "\xa9\x32\x42y\x94&\xe\xac\x31\xc9\xe8X\x9f\xa4\xc0:J\x98" "\xe4\x1c-S\xf2\xa0\x13\x9f)\xf8\xb7/Y\xfd\x64\x17\xf\x2q\xc2\xcf\xe0;a\x82R\xda\xec" "\\\xb2r\xe0\xdb\x98Vl4\xa6\xe9s\x8e\xcag\xbf\xbfK\xff\x93\x86NX\x9fs\xbc$s|\x4K\xbaU\x1a\x41\xc9N\xd3" "\x9c\xef?\x92\x92\xdd\x8b\x9e_\xab\x3\x1e{9/\x80&\x11\xb7*\xaaj\xc\xf1\xdb\xb3T\x82" "e\xb\xde\xfaz\xe9;K\xd6!\xb\x8b\x42\x9e\x9a^S\xd1\xc1\xc1\xe4\x30o\x83\xca\x36`\xab" "\xfbq\x1\x8b\x1d\xd3\x9a\xd4\xf\x82\x1f\x88o\xb4In1\xda\xc1\x1c\xde\xe1Z\xda\x9f" "\xa8th\xc4\xa4\xe9\x84\r\x9dO^\xe6\xce\xf4\xca\x7\"\x38\x45%\x46\xdb \x8e\xfc<\xe2" "sV\xdf\x2\xf4{\"\xc9.\xab[mi\x87\x5\x2\xc2!M\x1Ml=nE\x95y[/\xef\xec\x32\x34\x8d\xab" "\xf6\xdal\xe5\x1a\x95\xc7;@\x8\xf0Hz\xbc%\xb2\xd9\xc6\xf8*\x90\x42\xd0|\xf5#f0\x83" "\xdej\xa2*\x99\xe1\x1f!\x12{\x9c\x61\x82@\xf2\xaf\x8eOR\x97\xef\xfb\x39\x18/\xaa" "f\xe1\xe3W\x89\x1b\xfc\x37\xdf\x3'\x92\xd3\xc7\xdeZ\x16\xf4\x39@q\xbbLT\xaf\xa1\x90" "\xc5\xb3\xfb\x36\xe7\xa8\x9\xc6\xb6^\x3\xf1\xf1\xd6\xdb\x9eH^\r\xc5\xa9\r`\x94%\xa9" "\x85\xfb\xa0\x37\x31\xa0\xfa\x92\x97\xb4\xddSY\xf8\xe7\xcaqF\xa6\xee\xad\xe7\"\xb0" "%\xd1\xb\x9f\xcc\x4[.\x8a\xfa\xc2\x99\r\xa3\xa1\x12!\x7f\x9f\x10\x86hV\xd9\xce\x9" "?e\x9c\xe5\xeb\x10\x66\x36\xdeZ`\x83\x1a\x61\x3\xa5\x1\x5\xc5\x62\xbd\x66\x12\xc7" "A\xd5)\xc5\xc1\xfo>#\x2S\x16Loe\xde\x8bxJ\x9dj\x84\x89\x39\xadu\x80\xff\xe\x7~\xba" "\xe7\xe9$P\xa2T\x90\xe0\xa1\x0\xad\xea\xc5\"^\xf4_\x9ai\xdaSM\xd6I\xca\xbf\x39 \x10" "\xcf\xd8\xb1\xdf\xacO\xc1\xdao\xd8\xecp\x82\xc9{0\xac\xdcv\xcbU5 W\xd6\x89\x30\x81" "\xe9\xbeX\xc3=\xab\x65\xc6\x9e\x1a\xaf\xf\r\xa2\xc?@\x13\x5h2\xa6\xb0\xa9o\x88\x87" "\x19\xe9\xc6\xf8\x99\xb4\x91\xdc\x19\xft\x89jD\x17\xb9\xf6g\x3\xde\x1f\xa0\xcc\xc7" "\x8\x82\xbf\x61;\xd9\xe3\x62\xde\x9f\x90\x85\xc5\xbf]\x8e\xdf\x64\xb9\xf7}\xce%\x33" "\xf6N\xc5\xdf\xfe\xe6\xb2" "~QqG\xc9\x84\x9dt\xc8\x9f]\xca\xe2\xcc+\x93\x30\x89\x10x99\x6!|*\xe7\x4\x84^\xe7" "\xe5\x19\x5-\xa0W\x98\xd7\x39\x88\xd2\xc7~\xe4q\xd7/\xb1\r\xef\x97\xe1\x35<\xef&" "3\xe1\x85Z.\xf2\x9c\x38H\xd1pY\x4\x43y2H\xb8\xb8N\xe3j3\xc3\x7\xfe\xe7\xe8\xe4\xc0" "(\x97Upb\xe3-\xa7\x9c\x0\x10P\xf2.\x9c\x9e\x8a\xca\xfb\x45\xd7\xaf\xffPl\xf4\x33" "W\xaa\x85\xa6\x89\xd6)B\xb7\xcd\x39\x10\xf4S\x8f\x9a\\R\xb9\x61\x46\x39\xeeMr8\x96" "0\x9\x1f\x30\xf8^']O\x8\xf3\x95\x88|\xe6l\xcd\xb6\xe3\x80\xa9;\x5\x19\xe2q3\x9b\x1c" "\x99;t\xe7`B\xfdi{\x81\x8b\xaf\x83\xae\x98\xe\xaf:\xe0\xb8\x6UW\xae\xffQx\xd7>%\xe8" "\xb7(\xe9N\xda\xc7\x5\x39\x4\x8f\xb1\xels\x4\x97\x8e\xad\xc4\xa5\xd3\x9\n\x38\x37" "\xfc\x31\xb0?\xbb\x96\xd7\xedJ\xe3\xc0\x94\x8b'\xc0\x12,\x7f\xa4\xd6\xc8\x9R\x96" "\xc3\x16.\xdd\xea'\xa9\x99~u#v\x91UZ\x8aW^T.-@\xdc\x1e \xf6k\xf2\x8c;\x9\xbc\x1d" "F\x12\xb9s\x10\x63\r\x1\xc3&\xd8\xc7.\xfe\xeb\xec\x8d\xc2O\xde\xb0\xb8\xd5\xc9\x94" "S\x85\xa4uC\xe6\xc4\x96\n\x2\xaa\xcf\xc\xf5\xb0\x1f\x8a\x66\xc7\xca\xfe\xf4\xb8\x81" "\x11\xee\\y\xa7k\xc\x94\x9c\x3\x91\xe2\xc8p\xb3\xf:Y\xce\x6\xc5/\x95\xf6\xeb~Z\xee" "\xc2\x43\xc0\x1bP\xd1Y\xa1\xb8\x17\xdd\xa7\xf6\xdeU\x9e\x13\xd6\x31\x96\xe8\x1eu" "2d.\x8\x34\xf9\xb1=\xd1\xc\xa0j\x91\x94;6\xaf\xdb\xd7\xa4\xa2\x61\x81\xdf\xed\x9c" "\xc7\x37R\x98.\xcf\xc5\xbc\xa1Q<\xee\x97\x10\x99\xb\xe0(\x15\x14\x45\xf2\xe2\x5t" "W\xa2\xba\xf7\xe7\xb3!\x88_\xd5\x91\xcf\x42\x81\x99%\x33\xae\xeMO\xdc\xbb\xce\x65" "9\xa4\xf2oN\xf0\xe\x6\xd5x\x84\xc7z\x90\x3\xc2\x16\xc0\xb6\\\x4\xda\x36\xd6\x8c\xc5" "i\xed\xc0u\xea\xdf\x9dpy\xe0\xf7H_2\xe0\xe5\x46'\xdb\x15\x39\xd4I:_\xbb\xbe\xc8\xee" "i\xec\x7f\x85(\"\xc5\x15\x84\xa2\xf5,w\xbb\xbagR\xce\xefh\xf7I\x7f\x61\xe4\xa2\xaa" "\xe3>Zc\xc\x6t\xbbm\xc4\xc3\x1dX\xe1-?\x95\xcd\x33\x83\xd4\x9b{\xac\xe7\xa1\x36\x94" "\xf8\xffj\xb5\xa7\xa6\x83\xa9N\x98\x4\xc2\xb\xfept\xf`\xe,Z\xf0\xab\x83\\s\xa5_\x7f" "h\x1d\x42\x92\xe5|\xf6\x61\x98\xf1\xf3\xaf\x82\xcf\x33l3\x1f\x9\x1a\x85yjr\x94:\x13" "\xc\x34\x66\xb4\"\x9dH\x0\xd7\xf6\xf\x43\x9a\x32\x7f\x32\xaf\xd0\xfc\xbe\x14\x1f" "e=\xca\x1c;\xff\xdb\x5P\x9e\xcf\x1e\x41\x9d\x4\\V\xac:\x90\xf5'\x0v;\x93\x9\xd2\xe8" "n\n\xd2\x1a\x36\x8d\x84\xefL\x7x\x99\xee\\\xf2\x1\x36]=\x90\xdep\x91\xff\xab\"R\x86" "\x9e\xde\x93\xfc\xce\x32\xcG\xfd\xfa\xb2\x31\x12\x85\xd5\xb2\x63\x14\x0\x89\xa9\xb3" "\x82\xf3<\xa6\x1b\xc5\x87\xa5}\x90l]\xb9\x1ezgX\x98\xee$\xe\xae\xdeS\xb2\x8b\xba" "\xc1\x3\xe0\xc7m\xf8\xb1,b\xa3\x93\x7f\xc1\xae\xa8\x1f\xfc\x30\xd6\x97\x93\xb4k\xbf" "2\xe1\xf0_T\xe*\xf2\xd7\xd5Jw\xef\x2\xba\x9eQ3\xc2\xea\x31\xd7\x8b\x4\x1a\x1b\xa7" "\\-jz\xe1\xa2\x35+a\x1\x34xQ\x16\x43`\xf1\x45\x1d\xb5\xe3\xe9\x1f\xeaS\x0\x2\x10" "P\\\xc0\"\x1c|Q\x90\xa4\x36\xac\x8b\x81\xe9\xa4\xe\xe8\x34\xcd\xf\xde\x4[\rF\xaa" "\xa4i=\xf0\x37\n\x98\x4\xaevC\xd1\xde\x81<\xfdu\xcbxX\x84\xd6\x86\x87\xe8\x84\x94" "\"PNJO\x1L\xe4\x0\xdale\xee\xbc\x9d\x98\x86\xdb\xe5\x2\xcc\xef\x99\xa7\x8\x8f\xe3" "c\xa1\x85\xbbu\xf7\xb\x2#\x11\x91|*c\xe2\xe4\x1f>\x95\x42\xcf.K5\xa7\xb4.%\x3\xd6" "r^q9\xc1\xcf\xa3\x1c\xcf\xa4k\x99\x86\x36\x1b\xbd\xd5\xbc\xd3\xa8\xe9H\x80U" "^\xfcH\x19\x85\xd6\xdc\x64\xc7}\x5\xed\n\xa8&I\n\x7\x9a\xe4\xd1\xee\x1\x1e\xf8k\xd8" "?\x7f\x9e\x65\x43:H\xdb\xf1$\xf1Z\xc3\xda\r_\xaalm\xaa\xc1\xc4\xfe\xb7\xdb\x8b\x84" "C\x7\x16\xe\"\x81\xffz-+\xc6\xad\xd4;5DT\xd3I\xa3\x34\x14\x1bK\x1e)Sn\x88\xf2\x89" "\xe5\x44\x8e[&\x81<\xe0t2c+RS9?fyh3#\x87\xa1\xbc\xcb\x98P?C\xabL\xc9\xb\x12\xe1\xf" "\x8d|d5\xaa\xcd\x62\xfc\x8e\xf3/\xb3}\x13\xfa\xb\xf\xf1\x8a\xe2\no//\xd6\x39MU\xa8" "\xfa\xff\x9\xff\x91\xab\xc2&A+\x0Q\xc2\x82\xb4\xb4\x9cU\x8a\xb0\x1\xd2Im\xba\xb6" "\x8e\x66S\xdb\xb7M!\x3\x2\xa7\x84W\xeb&\xec\xaf\xcb\xec\x89o\xa5\x8f\x4H8}\x17`\x8d" "z#\x13\xc2\"\xb4\x13\xd3\xf3.\xd2\x9bh=\x9d\xecy'\xfd\x93\xa8\xcb\r\xa0k.\x17\x94" "\r\x19_|\xaf\xc6\xe5\xed\xcb\x31\xa8\xe0\x1\x87\x90\x3\x12\xee\x9b\xb1\x2\x5l\x15" "\xea#>-C\xb7\xc6\xab\xbd\xe4M\xda\xd3\xa1\xf2\xcb\xcds\xe\xb5\xbe\x1f\x36\x91\xaa" "\xaf.\xfe\x94\xa4snlLu:\xfb\xe1\xc0\x5\x14\x99\x18\xa4\xe5\x44k1\xce\x0Z\x99\xd6" "A%\xc9`\x1c\xb0\x16\xa5M2A\xab!\xee\xb5\x5\xc4\xf1\xcf\xf6\x17\x83\x66\xb3\xcb\xc0" "\xcb\xca'r\xdb}[:v]\xc6\xdb\x8bq\x16\x10\x9f]\xf2\x10\xa8 \xae\xae\x41\x63gE4M\x7" "\xcf\x9a\xe1\xab\x5\xa5\x64\xa6\xa9\xc5\xee\xd8\x13\x7\x80\xe9>\xf\xcb-\xf9\xee\x1b" "\x85\x87\xd8\xfa\xcb\xdcN\x19'1]\xf3\xa8\x81l\x95_\x19\x41{\xf5\x8\xae\x5$\xcd\x4" "\xacS\xaf\x19\x61\x9c\xd9\x38I^L\x7f\x2\xc2ki\xa0\x91\xf2\xf9\x81^O\x8e;\x95\xa6" "\x10\xc3\xba\x14\xa6\xd7rK\x88\x39.k^\xdb\x8e\x9c\x33>&.\xd6\x82\xf2I\xe9\xdf\x39" "[\x94\xe7\xdb\x99\x43i\xeb\xf5Y\x10?\x9b\xdeQ\xea\xab\xde\x38T\xad^g\x5\x1f\xbb\xa7" "\xea\xe4\xd5\x96\x8d\x82S\x87\x32\xd6@s\x9e\x1f\x9\xd5\xc0\xd3\xd6\x19k\x7f\x39\x99" "\n\xee\x1a\x43\xcf\xe9\x87.\xf0\xe9\x8b\xcb\x8d\xe9\x37t\x16%_\xf0W\x18\x8d\x9f\x15" "s\x13\xcd\x65\x4Q\xfa\xac\x8a\x1f\xae=\x0\x81Jj\xa4\xad\xc5H\x17y\x98\xcb\xa4\xd0" "\xf1\xfb\xb0\xc7\xf6\xb3w2`\xe6\x0\x1cv\xb6\x81g_^\xc4\x88J\x16m\xb4\x39\xeb%\xf5" "\xd5\xf5\x9aq$\xf0\xb2\xed\x99\x16\xe>w\x9c\xb6:\xe2\xa7\xf1\x18\xe9\xb\x18\xb\x45" "\xd0\x97\xbf\xdc\xb\xc9[\xc7\x90\xfc\x8d{2&k/\xe2/v\x87P-m\xa4\xe3Q\xa7w\x8c\xbc" "\xcd\x31\xb3\xc8\x32P\xc3\xd2\x1b\x1Q\xb7z\x5y*\xb5\n_c[-\x93,1.\xabK\x1c\x6\xbd" "\xff\x13\xcc`h\xe1\x41\xb0>\xe8\xd8\x63\x8eW\xd5\x9c\xa1\xd8\xb8\xcc\xad\xea\xc0" "W\xce\xff\x7\xf\xf7\xfd'e\xb0\x85vwL?\xf5\x1d\x88Z\xa8iN\x14\xdc[\xffy$0\xd9)\x8b" "GN\xe\x1c\xdb\xbdK\x9#A\xfb\xdaH\xd1-\xbf\xd9\x8b\xc2\x37\xe1\xaf\xf1\x8d\xfay5&" "\x1b@\x90n s\x8b\xfd\xca\x16\xb5\x84.*\x14\x5\xb2.I\x90\x2\x4H\xbcK\x93\x9\x12\xe4" "\xbe\xc5\x80(\xd9\xd8n~\x15\xa6L\xfe\x18:\x94\xf8\x1e \x88\xff\xdc\xdfS&\xbd\x86" "\x83\xb3\x3\xee\x8\x45\x9\x41\xba@de\x85\x4=\x86=\xd7\xd4\xcf\xbt\xe6\xfc\xf9iv\xdf" "\xef]&\x16Wv6\xa4h\xea\xa1\xf4\x1b\xae=\x82\xf7\x1`\xd0+(\xb3\x18\xaa\xa9\xbbtVt" "`\xa8\xcd\x43\x6\x66w\x86\xf6\x96\x7f\x39\xbd\xb9\xf2\x10\xb5\xa8\x6\x8e\x16{n\xe1" "\x94\xb0\xff\xc9I.\xc4\xef\xe9\x66%\xfdG\x0\x39\xa5\x95Q\xb2\x82\x84LV\x1b&\x85\x1b" "\x9a\xf6\xb3\xf3\xa6\xfe\x9a\xefR\xd4*\x81&P\x4\xbb\x64\xda\xd8\x94\xa7\xd6\xd0\x43" "g)3\x7\x62XVd\xe8\xe7\x8eL\xfb\xf8\x9\x91\x9b\xae>N\xc7\xb\x61\x44O\x8eh\xaf\x0\xa4" "\x19\xeb\xb7\xb5\xaa\xf6hf\xa7\xdb\xe0jQ\x6\xe9\xe6?o\x19\xb0\x41z\xbf\x32\xab\"" "\xb0+\xcf\xc'\xaf\xe\x89\x85\x33\x11_\xaehn\xaf\xca\x96(\xba\xd2\x63\x18\xf2T\xdd" "T\xe8vsl\xeb\xce\x82}\xe1o\xd3O-\xf6\xaf\xc7\xa9\xf3\x9fZ\xc5\x1\x64\xb5\x0\x13\xf2" "m\xda\x83-\x9\x1e\xe0\xf7r\xd9\x19\x9d\x31^\xbfX\x95\x7\x65\x8c\xd7\xfc\xf2)\x89" "q\x8f,1\xec\xc1\x82\x9\xd3+\xea+)\xbd\x1a\x88 *\x7f\xbb\xcd\xca #\xc7\x9d\x7\xb8" "\x86\xb6u\xb0\xcf\x82\x4P\xd6Y\x9a\xf7\x1\xc1\xf2:\xc1\xab&M\x9c\x62\x35*,\xf2\xdb" "h\x85\xab\x1bw\x1a\xa2\xf2\xd0\x37\x83\x34T\xd0\xc6\xe6\xab\x9ex\x84\xba\xd1)Y\xf9" "\xd6\x93X42Q^\x9cN\x8e\x17\x85\x1f)+XYv-\xc0\x93\xfa\xc6\xd1\xc4\xd7_\x83\xe6\xc4" "|\xf7;_\xe3\x90\xa1\x61\xef\n)Bd\xe\x86\x83\xc3<\xbe\xe2\x92\xaa\xe8\xcb\xce\x89" "\xe2\xc1\xe8\xdc\x99\xddK\xcc\x9aQ\x1a\x7f\x0\x45S\x81\x9d\x85\xc3\x90\xea\xcc\x95" "\x96\xe6q\x3\xcc\xe2\xc2\xe8jM\xb0tb9f \xc1\x1bn9\x16R\xbb\x35\x8f\x82@\x1a{G\xfc" "V\x93\xb8\x98\xdf~\xb1\xf7\xa7\xdf\x6\xbe\x16hd\xb8$\x98\xe7\xa4\xa5.]x\xe2\xb4\xe3" "y\xcc\xe4\xef\x1a\xed\xdf\x80\x93g\x13x\xed\xb4j\xb0\xf1\xaa{y\xfa\x1c\xe\n\x12G" "\x11\xca\xe6\xfb\xe2\xb5jt\x1\xe\xe3im\x11)i\xb8\x1f:\xec\xf9\x9b\xab\x36\xfa\x93" "\x17\xfd\x9a.Y\n\x8d\x1c\xc4G\xcd$\xc4)\x95\xd7\xb0\x44T\xa8\xfd\xe2\xe5\x89% '9" "#C\xa1\x17\x85x\n\xde\xb>\xeb\x8b\xb2\xb\x63\xd1\xbd\x61\xbe\"\x99\xf2\x64\xa8\xda\xa9>\xd1\x45" "\xf1\xb6Q*u\xa3\xeeI\xd0\xeb\xf7?\x90\xebk\xc7^\xcc\x5te\xaf\x93\x1b\x30\x3\x89\x7" "?T\xe5\xe0\xa5\xe1\x34\x6p9;\x83\x33T\x8f\xb4\xc9\x44\x4\xb1m\x8\x13\xa8H\x14%\xe9" "\xad\x9\xbe]\x8aO>\xec\x62\x39\xf7\xb1\x41\xa0;B\x8d\x45\xb6\xe3\xc9\x81\xc3\xee" "2\xa0\x65\xf2\xd1\x62\xe2[k\xb7\x9e\x9d\x46\xe1\x83\x8a\xa5\x10\xdf\x9d\x8cq\xf3" "\xde\xe6\x37\xa9|E<\xc&\xea\x8a\xf6\x8e<\x0L\x8d\xe9\x97\xa6\xf5\xa0\xe2q:\xf2}\x8f" "\x98\x3\x12\x33\xc6\xbf^\xf5\xc1\x3\xe5\xaf\x8\x62\xcen\xa9\xd5\x98\xab\xbd\x8\x35" "\xb\x18\xd9\xea\x84s\x8due\xcf\xcf\xec\x7f\x97\x43\xb5\xde~\x9d\xe5IUU9\xb\n\xd8" "\x9c\xe0\x1aZ\x5\xd6\xc5:#Z\xa3\xd8\x9c\xf3)\xb2\xf4\x35\xb\r\x98\xdaMIs\xcbYT\xc6" "\xd6\x39\xce\x36~hwm[\xa8\xdf\x9ey[\xd9Q\xa2^\xb1?\xf3\xbd$F\xc8\xed\x32g\n" "\x19\xf7\xd1pi\x94\xfa\xd9\xbb\x9f\xf4Hf\x89Q\xca\x2\xed\xbd\x95\xb\x82\x33\x0[\xaf" "\xf1v\x8a\x1c\xc2\xa4M\xa8\xe0\x12^czk\xcbQ\xbb\x64\xaf\"\x7fj?|~\xbeN\xfa\x39Ye" "\xd4\x9b\x13\xb8\xaa_\x1d\x41\xfa\xe2\x90M\x82\x9,l%\x88\xb3\x81\x82\x89\x1a\x39" "\xd7/\x1e\xb2P\x82yc\xd6\xce]\xc8\x4\x93\xb3\xab\xab\xb9\x11\x18\x9aks\xec\nt\xd9" "\xde\x15\xf0\xdd\x99/\xe1\x1a\xde\x38\x36w\xd0'\x92\xa7 \xb8>\xa2\x1a\xb3\xc6\x31" "\xc9\xf7\x5\x8eit\x93\x6\xa4\x9^\xaf\xbd\x82\xb8\xdf!\x9eS$?|\xf2\xef\xb3\xc6~\x16" "\x9fvc\x2\xa2\x8Mj\xb6\xda\xcb\xdd\x12\xa6|\xa3i\xaa\xa0-\"b\x14\x81\xc0:\x8d\x43" "v=b\xd2\xbe\x32\x62\xd1\xaf\xba\x82<\xfd\xa9\x19\x92\xec\xf8\xc\xdd\x36VP\\S\x99" "\x11\x8c\xa1\x35\x2\xd0;\x12, \xa2\xbb\xbf\x80\xaa\x66\x42w:bU_\xb7\xce\xe5\xde\xbb" "\xae\x61\x1e\xb2\xd4\x43\xf2\xed\xc2K\xb1S\xdc\x63L\xb6\xd6\xb3rIrD[\xa3\xad\xf9" "z\xb0u\xaf*\x95\xd2\xf1\xbbt\xcf\xb2\xdb\x1e\x43Q0)l\xee\x19\xbb\x8c\x15~\xb8\xdb" "p\xbf\\\xfc\x1ey\x1f\x35\x31\xd3\xae\x33UJN\xdf\x16\x7\ns\x1b\xc8\xb7\xc7J\x84\xbb" ";\xe0\xf2\xbf\x45V\xc\xdat\xb4\xc1-\xd7\x18\xc6(\x3\xfbOJ\xba_\xe8\x9do|\xba\xaf" "\xcf\xe4\xbbQ\x80\x31\xda\xcd\xea*\xe6\xc8\xd0\xc0;\xf6\n\x9b\x6\xc\xce\xbbHX\xe4" "\xcf\xe1'\x1e\x31k\xf7\xaf\xb0W\x14\xc2l\xfa\x91\xbd\x96\xd0\x62-\xa3\x1e\xd6%S;" "%\x2\x6N\xec#%{G\x85\xf4\xf0\x13/?D\xb0\xc2\xb8;\xb6\x42\xdd\x88R\xee\x7f\x37w\x95" "n\x98G5\xf5\xd1\x61u\xc4\xa2~\x92\x82\xa4\xe4\xff\xc\xaby8\xd9!\xd3=\xc7\xe8\xb6" "*\xe2J\x90\xb1&F\xb3\xa5\xfe\x88\xfd\x94M\x83\x9\x41\x1fn\xb3\x3\x1a\xbbg\xfc\x9b" "\xb2\x88\x9a\xec\x45\x82\x10 V\x1c\x15\x19$7s\xb4H\xd6[\xbd\xad\xc1Z^\x15[\x8d\x1b" "6\x8c\xbd\x97\xb7V\xa8\x95+B\x8a\x35\x8c\x39\x86\x30\xb4n\x8a\xfd\xae#\x85\x93\xc3" "\xfdX\x9e\xc4kw\xb8\xd8.\xc7\xe1\xecZP\xcb\xc7~\xd5K\xc1\xe2\x42la\xd2:\x8X\x1e\xc1" "\xd7\x1c\x9\x8\xf7u\x9d\x1d\xa9$\x1b\x8v\x18\xe9\xf7V\xbf\xb8`#\xda\xf9\xa7\xca\xc" "N\xff\r\x45\xaa\x95\xcf\xdeZ\xac\x19w\x91\x1e\xc6\xb2\x2\xbbGT~;[\xf3\x32~\x95\xf7" "\xe1\xa4\x86>[\x90J\xf4\xb3zR~4(,\xb6Y\xa2/\x85\xba@k\xcc\xbe\x30p\xeaS\xf6Z\x87" "k\x9d\x1b\x9a\x10\x96\x41/\xef\x87\x6\xbet1S\xd4\xdc\xac\x16\x81\xa4\n,&Zr\x91!\xf2" "\xd3\xfc\x9e\xfe\xb\\\x18\xe0\x2\x62o0#\xa5\xeap[G\xce\x1a\\Sq\"\xe7\xc3Z\xf7\xbf" "1\xf6m\x5\xe1\xaa\x33\x62\xe6\x8c\x1d%\x9f\xca\xcd\x0y\xfc\xa7\xefP\x16TtN)Nh\x18" "\xca;\xad\xcb\xae\xb8\x8d\x44\x31\x9f\xba\x90\x42\xe2Z\x82PY\x9a\x8e\xed^\x1c\xc" "\xbd\x9fs\x9b}\xb3\x1c;\x18\x12\x81vP\xe7,\x97\r\x30\x90\xf8\x32^\\\xa0\x1f\xc8^" "S\x10x}\xb8\xdb\xa0\xca&\xd7\x7f@<\x6*d\x7f\x9f\x99\x82\x46\xf2\x64\"\x37HY\xde\x43" "T v\xb4Y\xb7\xfa\x82\x9d'\x18#$&%2\x99\xfd\x38\x86\xac\x4H\xba\x12rl\xca\xb4z\xf3" "\xcd\xc6\xf\xb6\x9d\xda\x65\x13\xc8>\r\x12w\xab\x88ME\xff\x39vSj\x13\xad\xf8\x9\x39" "\xcf\x1a\x1d\xb0\xa6\x34\x7f\x9aOv\xac&t\xadI\xa4n\xf1\xd4~\xe4\xfaq|I11\xe0\xa5" "!,=K\xa1\x34\xa7\xa6\xcc\xaf\xf9\x98*\xbe\x9fy*\x91y\x87\xe5\x9d\xcd\x19\x84\xb5" "\x99L\x8c\x89\xb3\xf9\xf0\x87\x8c\xc3\x17t\x89\xa3\xb9\xb4\x1e\x44g;\xb2S\xec\xde" "\xb2\x8?B\x93\xed\x9d$\"<\xbf\xef&\xcc\xe5\x64I\x91XH)\x12\x87\x90\x82\x80m\x4\x8f" "\x1e\xa9\x99\xab<\xb2\x16\xa5\xc2}`'F\x8b\x8a\xffKU\xfb\x31\x9f\xde\xd4\xee-0\x8c" "\xf\x8c\x96\xfb\x7f\xec\xa0+q\x88\xba\xc0\xdd\xd4\xbe\xe0:W~\x91\xd2X\xea\xba\xd8" "\x87\xbe%\xe7L)oc\xbf\xda\r\xa6p\x9a\xa6k\x81\x41\x89\x44<\x8b\x94+\xe5W\xf2``n\xe" ",\\\x8\"\xadJ[3\xfa\xcd+\x90\xac\x82jv\x8c\xcc\x37\xd2Y\x1d\xd2\x8f\x1e\x1`2\xba" "\xe5\x87\xb1(I\xd2\xf9\xe5`\xe3\xf8\xc0|\xc5\xf%o\xf2\x9\xc9\xcf\xb3l\xf9!q>y\xcf" "\x2(>\x14\xe5,\xdc:\xda\xd8\x1e-*\xdb\xfao\x1a,,\xa8\x1c\xf9\x7f\xb6\x8d\x61\xf8" "\xc5\x1f\x8c-p\xc5\x9a\x94\r\xbc\x31\xa1\xc0@\x1d\x41\xb9\xc1\xe5\x90no\x9d-DF\xda" "\x96\xd3j\rL\xc8\x97~fZ\xae\\\x43\x16W9\xb2\"k\xa5\x98\x7\xa4\xe5O\xe9\x90\x1d\x9e" "=\xfa\xf5\x31\xef+)9\x8d-\x10\xc2O\xd2R\x9cGDi\xca\xf\xc1|,\x6\xf6p4\x85\x45\x82" "a\x12\xe8\x34\x65K\xec\x7f\x3\x9d\x11\x99\r\xc8#\xc4y\xca\xf0\xb9\xffq\xf9\x83\x45" "{\xe4\x88\xa3jT\xd9\xdc\xe4\xb\x83(\x82\xee\xf4\xb6\x98\xbb\x17XZ\xb2\xc9\x81\xb5" "\xb4-\x99\xa5\x46\xa9\xc5\xbV\"~vxm\xbc\xc6\xa5r\x80\x9\xa7\x7\xa5\xc8\xc3\x9f\x65" "\xbcm\x10GB\x96\xa9\x38\x33\xfe\xe3\x89\x92\xde\xdaL\xee\x62:\xb3\xe6rs{\xe8\x3\xe9" "\x84 \x3\xe7)\xa9|\xff\xa1\xa1\"\xd9\xab\xb\xfaX}\xa6{\xa7\x0_Q'\x8e:\x6\xa7R\xf8" "mZ\x8b/\rz\x87\x1e\xa2\x9a,;r`\xfb\x62\x1z\xa4JimY\xc6\xee\x91\xa1\x30" "\x0\x35[\x92\x34\xcc`03\xddtWr\x97\x10\x8\x92\xfb\x8cwE\xdf\x45\xd1%\x3O\xb2hK\xd4" "\xd4\x64v\xe4\x37\x65\x63p\xe1\x35\x37\x11K#W]\xa9\xab\x9cW\xcd\xe|C\x86PI\xc3\xfb" "\xea\x9b*\xd3X}\xa4\xb5\xb0!8A\x15\x86t\x8\x66l\x11\xc1\xbc~4Z\xf1\xddJ%\x93\xb7" "c5E\x1fW\xfc\x6!\xe2q/\xa2\x31\x12\xc4\xec\xfc\xaf<\xdcXq\xd3\x92\xfc+?\x9\xed\xb5" "\xb8q\x5\xb6\xdeK\xf2\x65H\x92\\\xbf\x45\x95\xbb\x7$)\xb3GXk\xfa\x43l\x10\xd2T\xe4" "\xcd\x15\x42\xad\xc1\xf7,\n\x15\xee\xe\xb3\xe2\x1d\xe3>\xd4\x19/\xbc\xe9\x5\xd1o" "\xba\x12\x2\xe4\\\x0{\xd1\xbaZ[\xf4\xf4V\xa4\r\"\xd0\x32o?\xa5\xf5\x7f\xe5\x33_{" "\xd2\xd7LF\xc2\x32M\x9" "@\xa6\xdf\xd0\x66}\xc4\xc4\x83\xbe\x82\xab\xf8\xe5\xed\xdb\xde\x2\xf5\xb1\xa1\x1b" "\x1e\xc4\xf2 \x1c\xa9\xfd\xa9\x7z\xa5\xbe*c{\xaa\xe8:\x18\xe0\xd0z\xca\x46/\xe5?" "\xab\x32HLMy)\xf8\x30\xb6\xef\xd7\x89\xb2#\x11\xb6\x14\x1a\xa2\x7\x92\xc2\x96\x98" "\xc0\xc0\xc9h8'\x87L\x80\xb9~l\x8f\xaf\xc6#\xf8\xe2wo45j2\xc0\xe7\x61>\xbfI\x1b\xcf" "\xaa\xad\xc4v\xec.\xb9\x4\xc5.:e\xd6\x1f\xcfM;\xaa\xf6\x8d\xd8\xa2\xdf;k\x99X\xad" "`m\xbc\x16\x65;\x13\x4\xf0;\xac\x8e\xe4\x99\x34\x92\x87\x93\x93\xde\xc1\xc3\xb9\x93" "\xf\xe\xdc\xbaUB\xc2*\xf1\xaaMuOe=\xc8\xe4\xf7j\x92\x98\xe0\xae\x85\x9cl\x13\xf8" "\xab$\xb3\x34\x9c\n\xbe\xce\xc2\x9e\x89U\x16\x85\x9d^'ls\xfc\x38\x4\xd1\x94\xec\x15" "L\xaa\x7f\xb3\x80\x38\x9\xc6\xd6i\xd8l\xb7Z\x1\x9\xa2_\xd4\x81$\xbe\xf\x89\xcc\xd2" "G\x99\x61\xfa\x11\x14M\xb0\xd6&\xe3/\xee\x84\xaa\xfe\x9f\xf7\x93%L,(\xcc\x32\x8\xe4" "\xc1;\xf3\xfe\xef\x16]\xe8\x43<\xd6\x30\xf\xc9~\xd2\xe\xbH.\xfa\x38&~\xc\x19\xa8" "\x2\xa7\x95\xc6\x2\xa0\xf3M2t\xde\xdf\xc3\x92\x89I\xf1m\xd1[\x81\x1f\x61\xd6\x82" "\xff\x30<\xb\xe3\xc9\xb1\x42\xe4\x34\x89~,%\xc9k\x9b\x31;FB\xe6)X\x81\xa5\xa2\x66" "\r\xae&r@\xe8\xfd\xe3\xa4\xb5\x8d\xfa\xa1\xc\xaa]\xe3\xa7\x30Hg'\xa4\x3\x7\xb4G\xb" "\x94\x62\x45\x12H\\\xee\xcd\xa1\x9c\x9d\x9e\xbbh\x82R\x97\xac\xa3z\xa3\xe5\xbe\xc4" "\xc4\x97\xb3]\xc1\xe\x86\xbb\xb9\x32\xd5\xe6\xa0?\x95\xb\xf4\\\xb1\x9a\x9f\\\xf7" "#O\x89~\x16\x34\x91\xd7\x33\xb5Q\x7\x90\xeb\x10\x18U\xb4-\x82\xd2\x33\xde\x46V\xe4" "\xcc\xc1\\p\xd3\xc1\x9a\x36|~\x8c\xd9w\x12R\x8\x31\xff\x30.Y\xc6k\xd6`\x81\x92\xc2" "\x9b\x17\xf1%\x87jM\x0\xf8@Lt_6\xb8z\xba\xaf\xb4\x1b \x85K\x8aqAzE\xbe\x9am\x9d\xff" "q\xacI5\xe7\x9d\x30\xe6\x65~w{\xff\x19\x36=lX\x88)\xafVK\x1b'xK\xf9\xc5\x16\x98\x17" "\xed!\x83\xb0\xcb\xd4\xberW]\xd4\x84\xbfm\xc8\xa9#OT\xbf\x7\x9dY\xd5\xb8'\x96\xce" "\xe3\x8e\xfd\xbc\x30\xd9\xf3\x9d\xfP\x5\x82\xf2Zr\x9a\x1f\x86\x2\x1d\xdc\x17\xe0" "\x1t\xd8\x42\xd0_!\xc4\xd6\xf5\xd0w|\x99\xfd\x99\xf5\xbdz\xebJ\x8f\x89\x97\xb6\xae" "\xa5J<3l\x8ehXZ\xb5\xf6Td\x8e\xf3\x5`\x12\xf3[\xd4\xb3\"\x89ww\x80`&\xa0\xd4\x5\xf0" "\xea\xab\x93\x61\xd8\xd6uO\x1b\x66\xe\xee\x9\x16\x95\xf3\x9b\x8f\xa5\xf6\xfb\xa1" "\xd5[38\x1aVtG\x90k\xde\xe9\x89++\xf7U5?\x89<\xd9\xd9\x12\xbb\x8c\xcf\x1e\r\x30\xcc" "\xa1\xc6\xf2\xd3\xffU/V\xacu\xc3\xc6\xe8\x92()\x10\xda-\xf6Pr?7Zh\xdc\x9e\xb6L\xa7" "JQ'A\xc4\xa6R\xb2#\xdb-%\xca)\xd2r\xed$\x19\x94L/3v\x99&\xd6\x9f)\x1d*F-\x10\\S\xde" "\xe4\x39\x91r\xc1\x1a\xa0v=H@\x15R\xec\xbd\x9c\x8b\xab\xe6\xb4\xda&\xe7\xf9\x62\x33" "U\xe4\x30v\x82\x84\xfa\x9bSfz\xb6{\x6!l\x5\xeeT\x16X\x92\xd5\xcc\x44\x35\xa0\xe5" "\xfe=\xb1i\xb\x8cpC&\xde\xf9\xe9\xe3\x1a\x65\x9a\xe2\x6\xf8\xc6\xc\xfd\x66?\x91h" "\x85\x81\xa0\x17\x9c\x9b{\x9d\xab\x97\xe1\xbf_$\xfd\xa6\xed\x33\x94\x33\xaf\xb2\x8" "9E\x8d\x18\xbe\xd5I\x1b\xe9\xfb\x11\x8b\xcd\x33\x61\xcd\xcf\x3\xdd\xf6}\x11v\x7f" "\x7fzB\x13\x46\xda\xcfq\x1d\x37[\xf5\x19\xfc\x93u31\xe1\xa0\x91\xfd\xf6\x3\xca\xb4" "\x1f\xelH\xe1\x0\xe7\x81W\xe0~\xb1\xb\x30\xc6\xf3P\xa1\x46\xce\xc0\xd3\xd1\xd0\xe9" "D\xa6\x9e\x85 \x92\x90\x9f\xa5O\x1b\x43w\xadGh\xfb\xeb\xdfS4\xc8\xf1\xe3&\xec\xb1" "T\xee\x6\x85\x83\x42\xa2o;X\xa9\xe0\x14\x1dW\xc2\r\xf8\xc4vk\xe3 <\xed\x1ek$\xfa" "*\x98\xbc\xa3\x91\xb8[\x7fW-I\xac\x38\xe4H'3roV\xd5\xef\x42\xd3\xc9R\xdb\x9d\xb8" "-\x91)\xdc\xc3\xbK/\xcd\xd2\xf\xcap6I\x7p\x1b\xd1\x90(b*:\xedrV\x9c\xd8\x30~#\xe4" "\x8ej\x9d\xf0M\xa2K\xc0\x46\xc\xf8\x8bu\xde\xe4\x37\x9a|\x0:l\xba\x11$\x15\x38\\" "C\x5\x8a\x46\x89\x9d\x63\x2\xabV\x5\x36\xe5\x9cg\xf4\x62R\x8a\x81!=\x9c\x90\x9\xfd" "9u\xa3\xb6\x1\x41\xe\x98\x9e\xfe:h\xe1\x65\xfa\n\xe6\xdd\x9c\x3\x61\xe0\x62o\x18" "Q\x7~\x8e\xd9\xfcL\xd7\x66)\x1c\x7f=\xf8\xe5\x1e.\xb3\xb8\xe9'G\x98\xf3.-\xfa=Z\x8" "\xab\xb6\x10\x61\xd4\xca\xf4\\\xc8\x37\x30\x97G\xdf\x9b\rV[4\xd0\xc0J/\x9e\xcd\x64" "\xf0\xdf\x42,s\x8\xed'\xa7\xb5\xfb\x8a^]q\xc3\x0\x39\x14\x64=%\x88\x95\xa0\xe2\xf1" "6\xc0._\xc6\x65\x9d\xeelx\"\xda\xc9?\x8e\n\xa4\xb5\xa5/\x9\xc2\xf4\x9d{\x9aq\x92" "\xa2/\xe8\xef\xc8\xf5\x14-7\x91\xd3\xe1\x1b\x88\xfa\x8c\x9a\xfc/\xc5h\xdf\x2\xc4" "\n\x10\x9a\xb9NY\xcd\x46{\x9b\xb\xd9\xf9@\x3\xb2\x1fR,\xb5\xc8\xb1\x91\xa3r\xefU" "\x83\xe6oR\x17\xa6]<{\xaa\x13u\xd5\x9b\xbdT\xdd\x9a\xf7\x13\x95\x1\xb7J+\xa7K\x87" "\xdb)\xacx\xf1\xaf\xa2\x1b\x81\x7+X\xca\xc2\xdf\x32\x9fZ\x7f>\xddlB\x83\x9d\xb1p" "\xcb\xfb\xfcW^\xf1r\xb3\x9c\x18Y\x87\x14\x1f%}\rm\x90\x9c\x1a\x95\xfe\x10\xd3\x13" "\xb8\xc0\x84k\x80\xc0~\xd5\x12J\xdf\x1d\x36\xadz\xf7)\xde\xc0R\xb2\xe6\xc6\x16\x9" "!\x1e\xe5vEJ\x86\xa0\xc2\xe6\xca\xcl\xf\xf1\xda\xba\xb4\x91\x43\x8b\x32`\x88\xd1" "n\xa1\xff\x32\xe6\x98q\xcd?Z\\\xef\x38H\xb7\x34\xee \xe2Q\xc\x97\xc5u;&)\xb9\xeb" "0,H\x83\x19\xe3\x84\x16lY%~\xb0\x45J\xf6\x96\x1b\x87\xa7V\x9a\\\x82\xe1\xd9\xf1\xbc" "\xd8\x43y\xa5\x90\xb4\xb4\x11\x66\xa6~\xcf\xf4H\x90\xc1\x5\xd1o;\xc8\x99\xb6R\xfe" "\x11PE\x98:\xc7\xf6\xb7\xd6;S9\xfa\x99\xce\xf5\x88\xf8\"Qn\x13Z\xb4\xf\xcf\xae\xe9" "\x5w\xbd\x87\x8f\x92\xec\x14;\xdb_\xe5\xff\xaex9\r\xdc?}\x83\x61u\x9d\xfb\x39\x96" "\xaa]\xfd\x33\x1d\x9b\xa3o)\x1\xc6_^Jl\x95\xa9@\rc\x16\xadt^h\xc\xf8r\x9f#\xbf\xe0" "\xb1\x1b\x14\x8ct\xb6\xc\x36\xc2\xfe\xd2\xebq\xec_\xafM\x5\xae\x96!3\xc1\xb8wm\x1d" "W\xbb\xf4o\xba\x30\xa1_34O&\xdd\x85\x41\x1b\x16Tn\x1c\x9d\xd9\x63\xf1\xb3\x34\x2" "l\xdb\x9\xab\x97=\x1f\xa6\x15\x38\x18G\x1c\xd3\x10\xd7\x35u\xd3\xe0\x39\x2\xf0\xbd" "\xf0\x4\x8f\xf5\xef\xd1\xbe\xb2\xe8W\xf8 \x84\xb7\x43\xe1\x0\x91\xd3\x37\x45\x93" "\xba\x94M\x5\xee\x97\xbf\n\xd7V\x8b\x45\xa9Z$\xf4\x9f\xb\xa2\xd9\x37\x14\x85ve\xea" "\x9a\xc4W\xa9\n\x63W\x7fr\x93\xfc\xc0\xd5\xbd\xcc\xdf\x61\n\xa8#\xf7\xdb\x43\x11" "\x92\x63\xfdY\x1a \xf3\xf6\xd2\x61$\x12\xbf\xb5x=\xb3\xc0\x86^\xec\xd1\xe7\xc2\xca" "P\xd9\xde\xa0\xba\x8aP\xa4\xa6\x9e\xe6x\x99\xbf\xa6\xb1\x1b\xc5\x8b\x31\xc9\x8ak" "\x8c\xd6\x36\x33\xddk\xa6\xe4\x1a\xff}\xe6\x44IiB\xb7\xe8\xc3\x33 \xc2?\n\xaa\x8" "\x10\x98\xd5U\xdf\x9b\xf6kJ\xf6\xcb\xa3\xa7\x1f\xc9\xfd\xb0\xa1\x94\x97\xea\x0\x17" "\xdf\xa4s\xbf\xf4\xadk\xad\xbcm\x97\x11W\xce\x98\xfe\x12<\xa2\xa5q\x1e\xf9\x36\xf" "\xea\xa0\xf4\xc`i\xd1[[\"O2\xf7Ie\xd9\x7f\xd4\x81\x5\xf4:\xd7M\x8\xb0\xb2\xbe\xef" "\xbc\xb3\xd3\x1\xda\xbep}\xa2(\xe8\x2\xc2'4%N\xce\x98\xads\xc0\x80\xda\xfa\x9\xdf" "\x15\xb9\x34\xb\x84\x15J-\x1b\xa6\x99/\xed\x36t\xaa\x9a\x9e\x0,M@5;\xdf\x87\xed\xb7" ">a1\x8a\xa0\x3\xae{8\x8f\xe9\xf8\x65o\xdfW^\x19\x5\x9r}\x83\x85\xe5\xb\x87\x1c\xcd" "\xfc\xd4\xfd\x18\x13\x80\x1b\xfd\xfds\x87H\x4!3\x8~\x98\xa8\xc6@\x83\xa4\xb9\x8Y" "M\xec\x38\xac\x9cn\xfd\xd2o\x1e\x13\xccY\xa2\x3\xab\xd3\x88\x7f\xff\x6\x38\xc5\x10" "\x82\xd3*2\x8c:\xac\xcaY\xe1s\xd5m;;\xf2yv\xc6\xbc\x95\x45r\x89\r\x80\x92\xe9>5\xf1" "\x88\xe2%]L\"=]\x9f\xca\x45\xbd\xf4\x33\x12\x1f_\x8b\xdb\xc3\x84\xf1\xc0\xeb\xef" "\x83\xa8\xce\x7f\xa1\x86\xd4\x13\xd7\xfb\xdez\x9d(\x18\xee\xe5\xa3\x5\xa5z\xfb\x63" "[\x8f\xf6\x63_\x17\xcb\x3\xb\r)\xeb\xd1\x9c\xe2\x9c\xd9\x32\x3J<\xc\x9\"\xc7 \"\x88" "\xf2\xa3\xa1=\x1b\xbe\x38Pjt\x4m\xcb\xac\xf7\xd8\x9a \x1x_\x12\xf3\xd8\x85\x87\x1f" "\x99P\xae\x34\xed\x2\x8a\x98\xb5\x37\x34\x3\xbc\x13\"\xd1\xf2\xc5\x83\xa8\xdc\x11" "\x82KB\x83\xc2\x33\xc8tO\xd5l\xb2\xf\xd6\xbf\r\xdfv\xfe\xf1\xd0\xec\xa5\xa8uZ/\x15" "\xdf\x3)\xd0\x98\x3\x32\x83\x66J\xef\xe0\xc5\x9e\xda\x92\xbb%\xe4h\x11\x82\xe2\xc" "\x0\x8cs\xf9\xc7\x36q\x1f\xdf<\\\xa4\x1a\xccp\xf3 \x94\x9d\n\x32\xe5\xbd\xb\xf4\x82" "\x9d\xe9HH6\xc8\x18\x35\x42\xf1+\xec\x32\xfc\xebZ;\xfd\xbb\x1a\x19\x38\x31\xcbu9" "\xfc\x12\xf1\x81\xfa\xb9[\xa6\x10\x37\x98!\xa9\xa0'\x91\xdb\xa3\xb2\xf1T\xd1\x37" "\x88\xbd$\x8d;\x94i\xdf\x1\xbb\x9f\xfd\x8di\xc1\xe\x34ws\xc7\x81U\x9b\xa7\x7fP\xc1" "r\xe3-\xd7z\xde\x64 .\xa8\x8f\x9b\"\xcc\xff\x86\xf1\xf2!t\x1cL\x9d\xe7\xeeq\x9c\"" "8`De9H\x8en\xcf~\xec\x8cq\xf8+*;T\xda\xd1\x91\xdcyr\xee\xc0\xa5q\xe8\x39\xc7\x33" "\xae\xbe,U{\xee\xb5\xa6\x9b\xff\xa2\x64\xd6\xf?m\x1a\xf9\xfa\xe5\xe6\xdaU\xf9\xb5" "\xe5N)\xc9x\xa6\x86\x8c\x2\xf9\x36\xb8\x9c\x8b\x11\xca\x87me\x95\x86\x1d)?\xe9\xa2" "P\xe7#\xa0\x97\x16\x16\x7f \xc0\xf@\xa3\xff\xab\x37\xb2\x36\xcd\xb3i\x1e\xda\xfe" "\x96~r\xa6\x9b\x87\xf6\x9d\xb6\xe9\x8d\x32\xc9v\xf9\x44\x85uFL\x16\xf4\x36\x66\xce" "Dv\x84\xb\x89\xc8\x80\xac\xc1Y\xe7\xea\x96#\xc9\xc4\x9cL\xae\x91\x1b\xad\xda\xf1" "(\xe4\xe3\x36\xe4\x1b\\v\xd4\xdf\x94\x64\xf7\xa6j\xc0xr\x80\xf2{.\xa2\xcc\x3\x63" "}j\x9e*\xc6\xd2\x8b\xca\xda,]\xcb\x42_\x99\xa0\xb7\xb7g{+y\xc4\xf5\x94x\xc1\xe0\xbf" "\xd2J\xef\x19\x96!\xb2!\x17\x83\xcc\xc1\xb4\xdcV\xda$\x12\x3\xb3\x99\xcf\xbc\x46" "\xa8\xc\xd1\xd1r\xc2Zv\xb5]\n\x7\xc\x0\xa1}\x9e\"\x0\x19\x12\x1c\xf0l\xee(m5\x82" "\xfa\x2\xf1Kl\xe\xd7\x8a\xe5+\x96\xfg\xd6\xd5\x33\x1cNo)\xc5\x1a\x14\xb4\x1qHt\xd0" "\xdf\xe0\xfb$\xd2\x64\xe9\xf7\x5\x81+\xc6{cJ\xd5X\xec#G5Vb\x3\x19\x9d\xd5X\xfeR\x97" "\xcf\x1c\xf5\xcdT\x92\xc9\x30V\xc5\xe0\xa7\x12&H\x1f\xe1>[\xba(\xb1\x13\x94\xfc\xed" "!1\xee\x45\xef\xb3~\x12\xf0\x63\x83R\xeah\x8c\xc6\x88\x1b\xd1\x82\xd9\x9L\x88U!\x11" "\xbf\x87\xf8\x8e\xbb\xa5\xae\x96y5L\xdal\x88\x88\xb1r\xd4\x66\x35\"\xf\xb9\x84\x95" "\xb2\x64i\x0,\xb0WZc`\xc4\xb6\x90\x96r\xac\x6\xf7\xe\xc5\x88\xdf\x11{\xea\x7^\xc8" "\x9e\x86^Wz\r\xef\x15\x80K\xad\xb8\xd4.\xf5\xc6\xd6\xfbp\xeb\xfd?I\xa5\xb2\x18\xbe" "\x90\xda\xcbz\xb6%\x35;\xd5Nh|F\x17\xfc\x10\xa5\xd5\x1\x7X\xc6N\xa0\xd6X\x1fO=O\xcc" "\xb7\xb9\xc\xa9\xc8\x85\xb0(\xd2\x9f\x83\x8aR\xad\x11R3\x10\xa8=a\xa7>r\xa9\xb1." "\xe9\x41\xc3y\x6\xe3{^?Z*\xab\x32\xf4\x10V\x1f\x36\x82\xa8\x1c\xcf\x95\x9e\xc6=\x96" "\xb8\x9f\xdf\x96\xa7\x8a\xb0K#nP\x5\xba\xccyt\xf7\xc6.\xea\xa2\x45\xac\x41\x95\x8c" "\xa8\xfe\xa6\xad?\xceS9\xe1s\x9aS\x12yd,\xeb\xa4&\xeeM\xda\xf9\"'\x11R\x8LL\xd0\x8e" "\xde\xf5\xe\xdb\xfa\x39\x9d\xe4\x97(D\xfb\xa6\x82\x87\xdf\x1a\x1d\x98x7t\xf7\xb\xa7" "eZ\x9f\x89\xd6K\xab\x11\xad;UE\x9d\xb4\xabvc\xe2\xad]\xfcx\xbe\xe4.\x88z.v\xb5\x11" "\xa1Y\x81.H\x91Y\xac\xca/\n$\x9a\x41+\x1e\xe4\xa9\n\x46\xdc\x9f\xf8\x32RZ\x9b\x9" "\x13$J\xc3\xceY\x93\xe1vt\xd1\x66\x5\x63\xc6\xd5Mf\xb5\xdd\xe6\xb6J\xa7o\x0?\xf3" "S:F\xeeV\xbb\x91;n\xfe\xe\x9d\xa6\xfaNS\x19\xb6\x7\xd5>\x9d}\x96\x36\x80\\\xf8\xc3" "\xb3\x94{\xf1\x95\xea%\xcd\xe5G\xb4\x45\n\x9e\xb8\xac\x84\x14n\xf5Mv\x93!0a\x89{" "\xc9n\xd8!\xfaW\xc0\xbd\xa3$O\xe4\xa1\xee\xa3\xde\xf6y\xf4^\xf9\xf6~\x10\xb5\xde" "\xcd\xd3\xe4\xbe\xc8\x97\x1\xf5S\xbbK\xccmM\x1e\xf\xb8\xc9\x9\xb\x96\x61\x19`Y\xb1" "\xbf\x1a\xbf\x1b\xe0Mkt\xa5\xccW\xe4\x9q\x88I\x11\xf4R\xc3;X\xcb\x4\xf2\xc6\xfe>" "\x1dq\xbf\\\xb1>u7\xd9\xfame\xea\x93^\xd5\xe9n\xf7#c\xbfx2*\x8f\x87\xbfz\x11\x8a" "\x9d\xebq\xb7\xf2\x46\xaagl\xdaR$\x9t\xe6\xe9\xda\x44\xd6\"\xe4\xf2\xa4=u\x11\xb8" ":\x1&\xb2\xb9-\xb\xf1\xb0(v\xe5#\xd9\xd0\xa4\x92\xb5\xa6=\x96\xb1\xf4~\x96.\xe7\xac" "\xa6\xfb\x9d?\x9a\xecG\xad\xc5\"\xda\xe8\xaaq\x8b\xc5@\xcf]p1\xa7\xd3\xd1o\xfo\xf3" ":\x97h)\n\x90\xa5\xfc^h\x95\xcf\xf9\xdb\xab\x42\xa7p\xbd\x11\xb7\x87\xb5\x7\x8d\xb3" "\xde\x91\x7f\x92<.\xb6\xea\x11\xe7\x61\x36\xa8\xbe\xe3n\xb7\x84x\x8e\xa3\xe2\xb9" "\xd7\xbe\x95\xe6\xd4$;\x16lILKuLm\xd1` m\xba\xf3\x99\xaeI\x2\xd3\xdc\xa7\x42Om\x1e" "|E]V #F]\n\xa9\xde\x46\xb\x18\x66\xd7\xa5+Z\xf7N\x92=/\xbbI\xc4G\n\x9e\x18I{\xd3" "2\xf3\x65\x88\x6\xed\x19\xc6\x7\x7f\x4l]\xc0\xd0\xbc\xcc\x1d@\xdd\xd2\r\x1d\xd3\x66" "'\xd5\x39O\x9d\x38\x15\x9c\x84u\x1b\x35Z\x8eHuLm\xd1` m\xba\xf3\x99\xae\x46\x9b\x9c" "\xc7\xbd\x8e=\x14\x14y\xa7\x1*\x4_\xf7-Q\xa4H\xfd\xff\x39\xd7\x8b\xe6\xff\xc0\x46" "\xe5\xcf\x7\x64L~\xd0\xa1\xb8\\\xc2\x39\x8d\xf:\xd5\x42\xd1\x10=-\xe1\xf3\xb3\x41" "\xbe\xc7\xd2\x86t\x96\x1fk}1;\x85\xf9\x8\xf2OM\x18\x8\n\xb2\xc4la\xf2\x15U|\r\x81" "\xfd\xa6vuR\xc2\xb\x3~\xb4\xc9~9\xddQ0\nT\xcf\x30\x1a\xf3\xae\x93\xdd\xf\x95\x8d" "B*X\xe6h\xe9\x1e\xb1O\xb2\x95\xd6\x92?\xfd\x65\xa2\xda\x9a\x88\xfa?\xe7\xf9\xad\xe3" "\xd7\x33\xf9\xee\xb5J\x12z\x12\xf0\xc7\x91\xd0\x9f\xb1/\xd0&\xe0\x9a\x82\x32\xca" "\xbe\xc8\x9a\x8f\xf3\x90\x84\xfe\x11\x17\x95Q\x8e\xc8\xbe\xab\xcb\x9e)I\xd3\xc5\x84" "V\xff\x16\xdd\x18{\xc9\x6\xed\x19\xde\x8fmj*c\x9e\x1f\xd6k\x2\xc\\\xa8\xe6\x9a\xde" "\xb7\x7f\xc5\\\x84\xadX&\xb2\x91\x9e\x9\xbd\xd9\x9aS\x7f\\\x92\x43z\xa9\xad\x18~" "\xce-$])\xa9\xa0\xd5O\xf6\xecxA\xbb\xe6\xd3\x9d\x1e\x6\xb6\xce;\x19\xea\x98\x82>" "\xc\x31\xa1\x8b\xc5\x64\xdd\xe2\x18\xb9$\xe3\x8b\xafu)\x92 \xb2\x81\xca\xbe\xc\x94" "\xb@M\xbc\xf5M\x19\xec\xd6\xf2.\x99\xe9\xec\xbf\xcd\x8a^\"])\xd4S[ \xe4\xfbi\xb6" "f*:\xf1>\xc3L\x1bX\xb8hJ\xa0\xc7\xce\x8d\x84\xf6\xe7\x11SHa2\x8a^Fs\xd4\xbdl\xd0" "Y\xa1j\xbf\xd8\xe1W;\x9j:\xaa\xea\x32tGO\xb3\xa9}\x7f\xfb\x16x7\xa3}\xf2\xbbi\xf4" "\xd5\xc3\x1a\x1b\xc9\xf\x7\xb0\x45\x8e\xf6\xc8^Q\xcf\x61\x63\xa4\x9\xd0\x1fgQ\xa9\xb5\x1b\x1f*q\xa1\xb9\xa4\xfd\xd1\x91R\x7f" "\xed~%\x16\xc9^\xbf\xf0\xe7\xc2\xce\x92\xc5\x3\x99\xe1\x83\x86\xed>\xe3\x9aH\xb2" "\xda\x92P\x13\x89\xcb\xc1\xf6P\x18\x41\xe8g\xf8\xb9\x15\xa3\x34\xa0\xab\xb7\xa9+" "+\xe3\xaf\x10\xde\x37\xcb\xa4\x82?\x93,'y\xc3\xb0\x8\xaf\xb6^\xc0>\xdc\xec\x84~A" "*\xf7x\x7fp\xc7\x9a\xc8LX\x1N\x8d\xe\x41\x64\x46\xb3jP\xc9\xe6\x17W&F\x8d\x9f\x39" "\x9a\x18\x61\x43\x1a\x8b\xd3\x11\xff\x5gr:\xa3_\xbb\x65\xb\x17\x36\x63\xba\x31\xbf" "\xf5X7_t\x3\x46!k\xff\xd4r\x98o\xf3{\xeeJ\xa3gVE\xa8>\xab\xe1\x85:\xa0\x61\xfb\x36" "\x14\xb7\x8c\xc7\x80\xa4q\xc3\xc0\xf5\xda\x37\x8c\xa9\xc\xe6\x7f!${\xc1\x5\xa3\xbd" "NJ\xff\xf4\x39\xfc\x15\x8b\x9a\xa9\xf\xd0\xe8P\xb1P\x83U\xbf\x1R\"Z,\"\xaf\x9e]\xed" "\xf0\x38\xf2\x8a\x11\xa2\xa5S\x12\x8c\x94P\x86\xe8KJ\x14\x66\x17\xe9\x5\xa3\xa1o" "\xaaH]jWI\xa7\x6z\xec=-\xef\n\xad\xa7\x43o\xb1\xe1\x85\xbc\x66\xd0\xe3\n{\xb3:\xf4" "X\xe6\x5\xec\x97\x8d\x14\xb6\x18\x1d\x8d~\x9d\xeb\xe2wQ\xa6\xf5\xfa\xc1\x15\x94\xf6" "`\\\xbe\x63\x8d\x9a\x98\xabl\x1c?l1%\xa5}\xc5QX\xdb\xa2\xbdM6\xfe\xbe\n\x85\x90\xe8" "\n\xfc\xbb\x13@\xc5U:f\x8e\xf2\xd6\xf5\xb4\x30Z\x9d\x8d\x38\xaf\xbdWY \x9f\x9e\xb9" "\xcd\x1c\xee\xf\xbe\xcem\xe7\xad*\xaf\x9m\xbeG/\x83\x38\x9dt?\rz\xad\xc6t?vF\xf7" "\xbf:\x9fs\xa2:C\xf3}G\x1a=m\x12\xde\x84\xe8=,\xf5\xb4\x1e\x84\xf1\xac\xc0\xcb\xc4" "\xcdR\xd0\xce\xc7\x38\x8f\x34\xea\xd4{Ei*I\x18\xb3\x65\xeb\x9fn\x81=\x92#\xa9_\xec" "\x8d\xe3\xd3\xed~\xc8R'\xf8!r\x12\xbe\xc2\x18\x93\x5?t\xe6R\xba\xe9)\x9ep\x9f\xd2" "[\x9b\xcb\x82\xe8`\xc0\xc5k\xce\x1fxq)b\x8e$\x99\x13\xf\xe6\xefvA\x8e\xda|\xc6H\xd7" "i\xc6\xf5I\x84\xde\xa9*\xf4wn\xba\xdb\xe1\x61\xd1\x80\xda\x9e_=e\xca\xc4\xa7\xa4" "\xe\xc3\xa3\xa7\xc2SX\x15\x97\xb6\x9eu&\xf3\xe1\r\x61\x9e\x61O\xc-\xc4\xf6\xfe\xba" "7\xc1\x95%\x18\xfe\xc1\x1b\x39\xfb\xd1=\xdc!\xfd\xec\xca\xaf\x95\xca\x8f\xb8\xd7" "\xd6\x8\x9e\x1b\xcf\x9bWM\x9d\x8f\xe5\xc2Z\x82\xa0\xb6\x8b\x90\xf1@\xb9\x34\xebX" "Z\xf7\xbc\xf8\xc8\x8f\x9c\x1c\x1a\xddt[\x2\xa7\xe1\x9d\xb4@w8\xa4\xed\x92\x8c\x83" "q\x80\x5\xa4\x1\xb7zVb+l\x8d\xcb;&\xcb_\x5\xec_\xba\x7f\x85\xb0\xa6\xa8\x1a\r\x8e" "u\x88\xe\xf3W\xd7\xadU\x12\x92\xd3|~\xea\xbdr \xafq\xed\xf2gv\x5q\xcd>9\xaf\x32\xb" "\xbf\x13\xc9\xdd\xd8\x5>\xf4\x1c\xc8\x1e\x42[2\xdb\x2\\\xc6\x66I\x5Z\xe1\xc6\xbc" "F\x8b\xdc\xd6\xd6\x9d<\xe3\x34\xd0\xb7\x8c\x45x]\xfbp\x9f\xf9\xa7zF\xa8\xc6`\xf6" "\x84\xd6\x1b\x36\x43\xb2\xbc\x83\x8bn\x98=IP\xae Cas\xe9=\xb3r\x17!To\xce\xa7\xa2" "C\x90$\x5\x13\x0\x6q71;$$\xe1\x62~\x5\x35\x32\xbd\xb9\xca\xeeQ\x9e\x9d#\xedg\r-^" "\xf3gO\"]Q\xe1\xed\x8e\x8,_\xc9\xf5\xf9\xb9\x34\xc0#\x8c\xf6[=\xd3\x64\xb4\x66\xb2" "\xae\xae\xa3\xd3$\x1cY\xc9\xcb\xd3\xeb\xf9\xea\x9a}\xfa.\xea\x9b~\xe8o\xf~%l\xed" "\x10\x99\x37Q(aP\xe6\x63X\n\xbbT\x11G\x83[\x9f\x14\xb2\x1fR\x89\x99\x16\rI-\x9et" "\xb0\x1bU\xda\xb2\xc2\xe2\x64?_ \xb0\xf4\xecN\x8a:-\xf4z8\xfa\x1d\x36\xd7U/\xfb\x34" "\xc1\xd4\xc8\x15.)\xb7#U\x8\xe0\x1fy\xd4\x1e\x1f-\xba\x80~L\xf4\xa5\xfc\x87\xae\xf5" "\x98\xec\x7\xf4\x32\x1a,\x17\xdb\xcb#t\x8b\xba\x86\xa2\xac\xda\xe6\xb9\x30\x86\xa2" "\xe2mR\xb0\xa1\xf\x83\xff\x41\xcd)\x1a\xd0G\x1f\x9\xe6*y\xbbu\xe1\x8eh\xb\xe6m\xa6" "\xf3\xb2\xa5j\x8f\x61\xcd\xc1\xdf\x9c\x7f\xad\xd0\x81\x43p\xdd\x82\x64\x8d\xb1\x61" "\xd8_\x8b*\x9a\xeQ\xde\xba)z\x12P\xde\xca\x1a\xf6\x94M\x89\xb7\xfb\xa2\xf3\x13\xef" "=au}\xfb|(\x1w\x8f\x39;#\x83\x98\x9f\x16\x17n\xee\x1ai_\x96~\xfe~\x4\xeey\xed\x93" "j\xa1!\xabG\xaf\xc0\xf0\x80\x99\x11\xa2\x90\xa0\xfc\xaf\xd2\xb0\xfbl\xfc\x5\x9e\xd1" "\xb7\xf7\x5\x13\xa4\x94\x10#$\x13\xc1\xdc\xb6\x7\xa6h\xcc\x18\x4\x37\x62\xef\"M\xcd" "\xd7\xb5\xd6!\x1a\xc2(e\xe\x46\x7\x36}O\xb1YY\xb8\x12m\xec\x17Pa\xa3\xca\x7f{\x1" "\xdb-\xd7-\xfbVun\xcey\xfa\x61\xa7\xc8\x45\x33j\xc4\x12\xbd\xa4\x34|X*o^%\xc9\xce" "\xcb\x66\xb6\xd0(R\x8f\x61\xf0\xb7\x7f\x1b\xc6\x3\xd2\r\xc1\x4\xc9\x46/\xcd\xeb)" "\n[\xf9\x63?\xe6\xa2\x92\xb5 \x98\xf8P;\xed\x17T\x8c\x5\xd8\x36T?s)\xdc\xdd\xb5\xca" "\xd7\xf8\x9b\xf2m\xde\xfe\xb4\x91-,\x1b;\xd4\xf\x92\xaa\xb2\x1a\xe6\xf\xe8\xc3u\xb9" "`\xf9\x9eI\x9a\xe1L\xb9*]\xda\xb8\x8~\xf4\xd4\x1f\x44P\xa6\x80\xc4T\x9f\x33\xf2\xb6" "P\xda\xbb\xe\x6\xf4\x18\xfb\x62\xbb#L(w\xea|Vn0\x17\xb0\x8c\xb4\xc3\x81\xca\xf9\x84" "\x19\x1b\xa7\xdf\xa4\xe9xJ\xb4T< \xa1\x83.c\xd0\xf3\x62\x44\x8c\xd2\xeer\xf9\xa4" "Z\xc\xd7H\x1\xdf\xb3,m\xf2\x8b\x83\xc2\x18=\x13\xd3z!\xfe\x8fU5NB\n\xd3\x34\xe5\xe3" "l\xa1\x13\xa1\xff\x16\xbd=\x14'Q\xb5\xc\x12\"T\xe3\xbb\xdc\xe4\xff(\x85\xd2\xc5\xe4" "\xd6\xa5z7\xb3J%\x93\xf5\x1dj\xd8\x9c\xc2%\xdfk\x84\x65\xf5{l\xd0\x34\xce\x66\xe5" "\xe8o\xfe\x88\rP}r\x93<\xe7\xc9\x39\x64\xbe\xcf\x15H\x1d\xef~d\x9eJ\x1c\xf9m\xex" "\x17\x35}\xfa\x81\xba\xc3\xb3\x35\xe5\xeb\x95\xbe_\xe'\xaaQ\xbe\xd0\xbbG\xd5VA\x7f" "\xd0\x7\x9d\x64\xba\x14T\xff\x95\x31\xc9\xb0\x90\xeb\x64V\xa8\xe5%\x44\xc1\xbf\x84" "\xa8\x41\x87g\x1fl\x18\xf7&\x91\x62\xbd\x0#\x85\xdd`\xdc\xbd\xe7\xc5\xfei\xc3M\x0" "K*(Ed\xa9\xcd\xe4\xe3\x88~\xa7\x8dV\x98\xbay\x1aq\xf\xbe\x92\xc7\x98\x8b\x36\x1a" "3Re\xc7\x7\xc2\xf0\xeK\xaa\x38Uy?\xe2y\x8e\xe5\xf3\xc1\xafqry\xed\x9d\x86\x6\x64" "\x99k&\x9U\x6\xbd\x99\xc8\xa7*\xe7\xeb\xb4Z\xd7J\xf4Mk\xa4Z$\x1\xc1\x95\xe4O\x1a" "\xeevt4\x7\xa1.\xd6\xbb\x80p\x1eh\xa2\xea\x2\xf0\xdd\x1a\xf6\x32\xbY\xec\xa2\xc5" "\x1a\x38\xf1\xcek\x8d\x1c\xda\xdem\x9at\\!\x9a\x31\x1d\x64j;\x6\x9c\x44\xdc\xd2&" "\xf4\xec\x7\xcc\x1b$\x9f\x65\x1f\x1a:\xad\xed(M\xdf\xc8\xb8\xf8\xeb\x33\x37\x1aR" "(#\xfe+\x92u\xe2\xec\xfG!R*\x7\x4v\x2\x5\xe8\xb9$\xef\x1c-\xf0\x9e\x43\xe3\x98Z\xc4" "\xd3\xd4\x96\xe\xf1\x9c\xbcv\xa7zv\xabG\xe4\x1b\xe9\xcc\xd0\x32\xedp\x81<-J\xf6\xf" "\x91lQ\xf\x9d\xf1|[\xb5w\xff\xd1\xcd\x9c?X>\x8b\xc0R\x8b\x87\x87\x46\x38\x62\x12" "\x85\xdfUM\x1f\x8b\x16\xc4\xd1\x18>q\xa2,w,6-\xbd\x14'\x98\xc\x0,<\x1\x12\x6\x1e" "\x8e\xe4\x85\xd1\x9a\x2\xco\xc\xaeu\x19M8GX^\xfa\xcd\x14\xe2\xa1\xf5\xcd\x1c\x8d" "\xe\x9f\x43^\xdb\xc0m\xb6?\x1d\xcc\x42\xb6\xb8\xf3\x81\xd2!\x91\xfb\xft\xe3Os\xb1" "\xbe\x39\xb6\x1d#\x1f\xe7#1]\xe7\x7\x41\x33\xb1\xe4R\x9\x3\x31\xec\xa0Ol8>\xab\x13" "\x7\xcd\x90\"\xab!\xe9vC\xc5\xff\x32\x96\x61;\xc3\xcc\xd8`\x1f@ex\xb6yz\"\x8a\xcf" "fcy{zu\x92\xb6\x65\xfd\xb2\x83(\x98\xc9[[\x81O\xb3\xe4_g\x8e\x37\xb7\x9\xa2:]\x88" "\xc9\x99\xb8\xeeG4\x8d`\xe3X\xf7\xcf\x8e\xe7 i\xa5#\xd6\xc7N|\x16\x92\xdd\x17\xed" "\x1c\xc4SZBcoSO+\xe5\xc3\xb2\xb1YB\x99z\x9b\x12\xdd\xfc(\xd4O!]\xb9\x14.1\xf1\x98" "\xc5\xe6\xb0\xd2_\xb2\xeaw\xbc\xf\x9c\x8c\xa4-o\xf6|\xb4\x2\x33\xe8\x39n\xd1h\xb9" "\n:\xe5\x80'\x94\x46\x65\x4\x9eT\xf2\x91\x64gn\x9e\xfe^Q\xe9\xeb\xb\xe4\x93\xde>\xe9\x1c\x45\x61\xb9*" "\x5\x7f\xb0>\xd4\xf0\xdf\x61\xe\xe4\x7f\x89\xef\xd4\xb1\xb0\xe1\x86\x9d\xff\xe2\xcd" "U\xf0\xe0Q\x4\x1c\x9" "\xaf\xc8G\x15o\x96\xd9\x45+\xb8\xe1\x87\x85\xd8\xc7\x83\x13\xe8\xab\xa3\x85,\xa8" "\xdc\xcf\xc8\xc8\xa6\x9d\x42\xfc\x9e\xb3\x66)n\xf9\xf3;BX+\xeb\x9c\x7f\x2\x1b\xc6" "\xc9\xd2|\xd1\x9a\xd3\xd8\x8e\x19\xe8\xb8\x30xi\xb8'/\xcb'\xb1\xca\xfd\xce\xb9@\xd8%\xf9\xb7\xbe" "\xb7\xea\xa5\x16p\xdb\xcc\x38\xde\x9e\xe3\xb2\x87\x92\xe3\r!1\xc8\xf2\xf4\x7fy\xdb" "l\xa4\xb1\xb5\xe2\xf3\x6>hjma&p~\xff\n`\xa8\xb7\xca\x85\xb\x9f\x8f\x91\x41@i5O\xf0" "\xca(WC\xb3\xfb>p\xaa?>X\xce\xc9\xd0\x1c\xba\xb8\x62\xd1\x85m,\xc6Y\xd1\xb8P*d\xb3" "\xf9\x89-\x1\x8dp\xc=\x92\x3\xb\x11KR\xe\xe2\x85\xff\x17\x66\xdb\x12\xc1\xfd\xc5" "`\x1c\x15\x34\\m3\xa3\xc4\xa9\x94\xe3kBz\xccs2f%\x96\xf2\xd3o$\xae\x18\xc1X \xd0" "\xfcS\xe1\x65\x92op\x15\x99\xa3\x91&3\x12x\xe3\x1f]\xd3\xdd\xdf\x8b\xbPJnM\xbd\xd4" "Sc\xb\xea\xcc\xe7%\xde\x85\xee\xc-\xd7YDJ\x15\x7f^u\xc6Q\x88\xad\r\xecq\xd7\xcaS" "\xfa]\x8fm\x1a?\xf6Hc@\xd8\x1e\x37\xd8\xcd\xd0@\xfT\xfa\xaa\x35\xc\xbc#.b\xc7\x95" ":5IW0\xdb\xa6(i\xa2|\xa0>\x85\xecZ\x1\xb9\x8H\xa5\xad\xcc\x95u\xfb\xe`\xc3\xd2j\xde" "-r\x88l\xeb\x35\x61\xaf+;\xb1/.\xff\x93X\xd3\x13\xcd\xce\"\x8a\x46\x8d\xa5\x66\xf9" "Za\x98p\x0r\xc\x62\xab\xd6\x7f\xb7\xb9\xcd,\xb5\xd5\xf7K\xe8\xe0\x91\x9d\xcb`\xa5" "6K\x17\x35\xd3\x1f\xb3\xfd\xb5\x9f\x9c\"\xf0\x62/\x8d\xf3\x91)L\xc/\xed;\xcd\x18" "\\\x9d\x93/\x9{\xcb,\x6ko+Ta?0\xee\x99\xcf\xe0\xb3\xb7\x8\xcf\xdd\x5\x65\xba\xdf" "n\x1e{ A\xcf\x1n;:\xd1\xa5\xc0;\xe3\x31`3\xda\x9\x1c\r\xa1ts\x92^y\xe7\x8f\x8a?H" "\xee#H\xb2\xa5\x1c\xeek\xdb\xe2\xa2\"\x44\xb3\xff\xd8\xe2\xf1\xf6\xeb!\xa3\xaf\x0" "\x1d\x14\xe8\x95N\x80Y\x89\x37\xec\xaa\xd0\xfe\x81\xa0\x30&\x9f\x9a\xeb\x13\x43P" "\x83m\xa4-\xf8\x1f\"\xbf\x35TM\xaf=b\xff\x87\x1M=b\xeaXhn^\x18-\x93\n-\xc3\xfa\xc2" "X\x8bI\xb6`\xa2,:U\xbf\x8c\x99\xde\xc4\x36\x9d\x1dg\x82\x10\xdb\x13S\\\xf\xb3\x46" "\xf0\xcb\x9a\x8c\x35\xb2\x96R\xe7\x63\x30\x8v(~\xd1\xbd\x8e\xe4@\x8dXo,'\xf3\xc1" "\x1c|\xae\x9e\xb1\x11;\x1\xd5!\xa9\x1b$\xc5.\xd8\xf9\xe5\xe1\"\xb1Y\xfarG\xaf\x41" "\x9a#x\xea\x9\xa5\x9dr\x14s\x96\x37*}\x1em}S=\n\x9\x39\xce\xc9\xa2|k\xac\xc9K\xf8" "\xeb\xa6 \xa1\x4\x83\xb0\x9c\xa3\x10\xca\x41\xa6\xc2`n )\xf3\xec\x1e\x61*\xfc\xd9" "\xe5\x30&\x80\xd1\xfc\x8\x8e\xa2m\x83U1\xf1W\xe9\xd4S\xc\xc9|\xac)\xd0\xde;\xb8y" "\x97\xe\xb3\xd7\x81\xa2\"\xb0\x6\xb0\xfa\xe9~b3\xfcG\xd7\x1f\x1a\xb1\x94\xe6r\xcc" "Qc\xc4\x5.\xeb\x88\xa3\x1a\xb3\xa3\xf9\xa5\x9f\x82\x15\xccr\x9e'\x1e]\xb5\x0\x36" "\xb8\x10\xcd\x95\xcf\xd9\x82h\x84\xaek\x1d\x9e\x97ttz\n\x9d\xf0\x39\xa7|z\xc8\x34" "\x6\xb9\xd2:\xf7\x96\x41%PRM\xf4\x8b\x18\xac\x8a$\xe3\xc7\x9c\x46J%?\xe3\x32\xa3" "\xc1\x83\x99\xfb\xac\xf4\xe2\xa0\xc6o\x15,\x9f\x89\x95zb\x8b\x35\x90p\xc7s\xeb|{" "\x8tP(\x82Z\xfa\xb0[\x9 \x89\xa5\x98\xce\xeb\x34\xa1\xf4\xb\xcc\x61\xe0Rp\xbe'\x9e" "P\xed\x91\x3\xf3\x13\xa0\xea\xb8 \xf0S\xb5\x36i3\xe\x8fn\xef\x45\x4\xa0]\x8\x17\x83" "U\xf2\xc5\x16,\x1\x6\xa4\x66\x17\xcd\xb\x42O\xc0N=\xadn\xa6k\xf3\xf3\xaa\xbc\xc6" "<\xd5\x4\xa4yzv\x98\xa4\x86\xea\xf5\"\x4\x45\x7f\r\x14\x96\xd6-'\xa0W\x17\xb2;\xab" "\x14\xf3z\x80\x82\xbf\x9b\x90\xb8\xbc\x82\xb1\x9f\xd9\x84\x4\xd9\xac#\xacs\x8a\xf0" "\xe6$\x80\x86\x13S\x8d\x34\xf0\x1\x1a\xe7u\xad\xb3\x61\xe3\x30\xdb\x97W\x13\xb6r" "\xe1\x6\"\x8d\xaa\x1cg.\xee\x18\x83\xb3\xa4\x89\xe9\xf3u\x14>\x95\x63\xd6\x8d\x17" "u\xba\x15\x13\xe7y\n|\xa7\x46\x80\x11\x42\r\xbe\x3\xf3r3\x9a^5J\xee\x1\x8d\xfe\xa0" "v\xdc\x89\x62\xdf\xfb\xb4\x43\x35\x6\xa5\xbf\xc4K\x5\x12\xe8\xa8\xeb}\xb\xa0\xf8" "\x1f[\x12\x31q\xa6\x9b-B\xff\\\xf8\xa8\x1e\x89\xa8\x31\xe0\x6\xffR\x18\xda\xf4O%" "\xf7\xe0\x46\xc6\xb0k\xb1\xb0ww\x86R\xdc\xf6\x85RS\x12\x9a\x41\x88O\x86\xdb\x91." "W\xd7\xc4\xe0m}\xc8\xa1\x16\xce\x65\xb6(9\x9c\xb2\x1b\xf5\xdd\x8f\x94\x2\xa5\xa1" "\x16T\x8cVS\xa3\x8>A+S\x7f\xd8\x32Nm\xb3\xf1]\xf8>\x1\x85\xcb\x8dL_\x13-\xdf\x1f" "\x88\x11\xe5t\x2\x9f>\xfa\x8(\xf9\">1\x8c\n\x83\x8b/\x92\x3\xf7\x7\xf2%Nd\x9b{xu" "~\x94\x5m\x90\xf6]\xf0LG\xe7;\xd7\xf5\xccWr\xc1%?\x1f\x14\x15g\xefT5\x87\xad\xd9" "\x7\xf2\x6\x18{a\x12\x35\xc6\x34\xc9wa\xe4\x83@w\xe6Y\xb6\xe\xe0\xf9\xd3z\xf8U`\x18" "\xcf\x5N\xaa@\n\x82\r\x87\xb7/3\x13~\xb2\xfa;\x8c?\x8f\xeo!\xc2\x81\xcb\x94\xc\xf" "\xa9\xfa\x0X\x92\x43\xd3'\x95\x12Z\xae\xda\xd9\xd7\xce\xba\x39\x9b\xa1Q\xf8\xaf\x63" "\xbb\x38 \xbc\xf5\xe5\x9c+\xac^\xb8\xa4S\xc8\xeb\xa8\x10j\x5\xe6\xc8\x46\x3\xd2\xf9" "\x16(\x87\x8a\x94\x81\xe\xbc\x9cu\xd9Q\xcbI\x16\xb4\xa4\xc8\xd4q\xbbs\x9d&\x98L~" "\n\r\xad\xcf\x44\xaa\xcb\xf5\x98:T\xd9y\x9b )\x8c$!f\xc4G\xb8.uR\x1Ja]!\x9\x1f\x33" "\x96\x1b[\x8L\xf7g\n`\xce\xe6\xaf\x19\x19\xe4\xd1(\xa4\xe1U\x9`|\xaa\x80 \x93\xc5" "f\x8b\xe1\xd5\xfdT\x3\xb9\xcc\x13].\xa6\xc2\xd9\x18(5\xe4\xbe>\xd5\xc4\x84\xb9\x14" "H\xaa\xb3\xca\x39oL\xba\xb5\xb6\xd2\x94=z\x4\x7fQ\xad\xdf}\xc9\xbe\xc7\xeeO\x95+" "\xcb\x9\x5\x9b-\xa0\xb1\xadV\xba\x99\x99K\xad&\xeb\xda\x9a\xa2\x62kl\xd8\x81\xc6" "\xb7\xca}\xc9ny\x85\xd7\xa4\x9c~\xe9\xd0\x35\xbb\xdd\x1?\xf8\x9b\xdb\x18\x1c\x1c" "-\x7\x81Y\xd9\x5\x9f\xd4\x45\x9d\xc9g\xaf\x31\x31\x1\x95\xa3\xcf\x9b\xbd\xe2\x42" "#8w?\\\xb4\xbb\xf7\xfb\x37#\x13;\xd3\x98\xa3\x9f\xcd\xfb\xcb\x88\xac\xb0\x0\x80\xcd" "\xe1\xea\xdb\x80\x19\xf1Q\xe3\xb1\xfa\xe7h\x14G\xc9\x98z\xfbM\xf4\x65\x34\x45\x90" "\xf4} \xe4~\xc4(\\[\xf8(\xfa;\xa2\xe3\xa3>\xbe\xb4\x84\xf4\x13\xfe\x1a\xf\xa6\xaa" "\xd9\x7f\x90\xe'Ac\x2\xa6\xaf\xf1y&\n i\x99\xdbr\x3R\"\xb1\xbc\xd1\xee\x30\xf6\xd2" "\x2\xe2U\x99\xb5\x36\xdc\xb1\xc\xe7\xb0\xc2\x83\xf2T<\xb7iW&t\x1d\x1aG~\xc\r\xb1" "\xd1\xec\x8_X\xe6\xa8\xea\x91\xe0^\xda\x30\xf0\xf6n\xd6\xf3\xa7\xbeq\x17\x6\x43\xcd" "\x5\x8e\xa6\x1f\x64\x9b\xcf\xd9\xdb\"\xa0^\x8c\xe&L\xcd\xb0\xde\x19\x8a\xb6\xe6)" "\xacL@C(\x2i\xf0\xbe\x43\rj\xdfp\xb8\x81\xf5n\xd5\x11(W\xfa\xe\xa0\x8c\xa2\xbf\x9e" " \x98\x9c\x12JT\xc7I\x8b\xef[\x8d\x62{\xf0\xb4-]\x3\xcc\x6?\x8e\xae\xcd\x39\x32\x95" "gi6|r\r@C\xd6Kh\xaa\x99\x62\x82\xee\xe2\x96\xc7\xf4\x41\xa2&\xed\x81Y\xb1\x66\xe1" "\xaa\x99m$\xac\xa6^\xce\x80\xb6t\xe9}o~9*\xd6\xbfY:\xb4\xf3\x8a; l\xa0\xcc\x31(\xd8" "G\x84Xs\xbd\x11\xb4)0C\xa2)R\xda\xb7\x98\x35-r\xce\xfe\xf8\xff\xe0\x15\x19,\xa8\xf6" "\xc\x90\xd3\x14\xa8\xab#\x8a\x13\x61\x3\x82\xf9\xf8\xec\x1d\x8c\x1f\xca\xfa\xd7\xc2" "\x16\r|\xe4~\xf3s\xc0\xc5]{\xae\x9b!\x14\x87\x1\xf7\xa8\xc0\xe7\xcc\x82\xde_&\xd7" "6=\x95\x16=\xe1\x87\xa5p\x98 \xe3{\xbe\xadn\x14\x80$aR\xf5\xcc\x86[\x81\x9d)Q+\x96" "z\x90\x44}\x98\xf9q\xf4\xc4\xc2\x8c)y\xd0|\xb0\xe6\xec\x8d@)\xdc\x64\xaa\xe3\xdb" "\xef\x8e\xbaW\x12\x36!&\x0\xce\n\xce\xa3\xea\x44NA\xcS\xe9\xe5\xf1\xd9\xd5\"\x15" "\xaa\x5\xe6\x90\xfa\x34\x83\xcb\xd5\x45\x1f\x43\x11\xcd\xf\xd2?9\xd4\xe1\x6\xe6\x9d" "h\x15\x65\xac\x1\xa6\x8$$9\x90\xcd\x9b\x3M>\xd1\xfd\xb5\xc0u+^d\xe2\xe4\x17\xc6\xb6" "M#\xc8\xe4Z\xf1\xb4X\x96\xec\x87|-\x87\xf8\x8fOJ\x85\xd0\xa4\x7\xb1\xd1\x13\x7fS" "e\xc\x13\x46id\x98\x6\x88l.\xb0I\xed\xd7\xf3\xb6v\xf5#E\xfan\xf9\xabJA\x80\x66\xe0" "\x8a\x81S\x2\xf3\xaa\x8f\xfb_\xbbu\xd1,\xc3\xba\xc7\xd9\xdd\xab\xba\xc6\x44\xc2\x94" "JDioi\xd1\x30\xe3'\x8d\x9a\xe4W\xc3\x9c\x99\x65\xe2}\xce\x8aG\x96m\xab\x12]\xe8\xe1" "\x10\xd2\x66\xb7\xfc\xd6\xee\xf2\xd8 \xc0)\xfa`\xdd\x32\x80\x84\xfa\xf8\xae;k\xd0" "\xf5p\x85[\xfcU~\x15L}I1\xbam.J\xab\xa5'\xe0\xd0\x98\x33L\xa3\x8c\x9ax\xed\xdd\xc0" "\x86\xcd\x1f\x3\xbb\xb8\xe5\xact\ra@\xf6}t\x96\x5T\xaf\xe9M\xda\x9e\x1b\xd3\xa5\\" "MY\x1c\x34\xec\xc2rw\xfb\xd6!\xab\x9d\xab|\x96\x99\xc1\x1c\x88\x1\xe\xc9{\xc4m\xd1" "\xaa\xd6O\r\xf4,%`{U\xb8\x85\x44\x45Z\xa8r\x81\x92\x32\x37%\x8Qoq\xcf\xcb\\r\xb4" "\xef\xdf(\xf\xbe\xe2\x81\x98\"\xcd\xbb\xeaL\xaf\x86':\x82\xd3\xf0P\xe1\x42\xe1\xe0" "\xb8\xb6(\xe3O(\xf4=W\xf7\x7\x18I\x8f\x46\x90\xdb\xb3\xe2\xcf\xfe\xd1;\x81u\x84W" "T\x18h\xa1M\xcs\xb9\xda\x8f\x43:\xd8\xa7\xff\x1d\x1e\xe3\x83H\xce\x1am\x95\xf6%\xc8" "\xc8r\x87\x8c\x46\xd8| \xe9\xcd=,B\"\xd4[\xb5M>\xbf\xeb\x30\xe5<\xfag\x17\xb5*\x90" "%\x92\\\xef\xd1\x7fy_x\xdf;\xab\xda+\xea\xe6\xb2\xc1\x99WQ\xc3\x34\xfa\xde\xcb\xa5" "\x98\x17U\xbe\xbd\xd7`4\x87\x1e\x14\x45\x17\x1aq\xf6\x2\x82\xe6xPY\xcb@F\xad\xb\xac" "\x98\xd5\xa1\xe5\x66\x8a/\xc7\xfc\xca;\x91Xu\xfc\xd0\xd5)\xa6\x35\xd6L\xb3\x43\x87" "\xcd\x90\x94}<\x90\x9f=2\xc4\xeb@\xa6\xf\x30\xc3\xe1\xf8\x19\xbd\x8a\xa2\xa0\x35" "\xdb\xc3\xdd\xb2i\xc2\x62p$L\"L:\x93\xba\x43P1lfK,\xe7\x15;\x9\xea\xd7\xd3\x9b\xc4" "\x9dn\xf0L\x83p>\x8bt\xe6\xa0#,A\xa0*}\xe0Z\xfe\xe\x94\xda\xda\x8b\x1f\xe6 \x8f\x12" "\xb8~\x0\xef\x8c\x65\xd5\x8b\x2\x46o\xf6\x97\xd6\x46\x7f\x66\xa0?4(NcB\xb2\x11\xa0" "\x2%\xa6\x7\xa5V\xab\x1dL\x8c\x42\xa1\x1\xffg]\x95\x1d\xfZu/$y\xce>\xd7\xa4\xf8\x44" "\x88\xd3\x9f\x62.\xe5:T\xc3 -N`\x17\x83'\x8\xd4\x1eS8\x13\xa8\xd6pvB\x1f\xc7n\xb2" "\\kcs\xf4\x13\xf6{\x1\xd6\xfb\xc1\xa8m8\x1e\xfb\xd1\x44\x85\xc7\x15\x98J\x13\x18" "\x9dw\xf7\n\xf8\x3\\\x8d\xf5\xd1\xd2;\xf2SREay\x11\xa4\xbdX\x6\x89\x41\xe0\x6\xe7" "\xd3\x66P\xfc\xe0i\x4\x8b\xb0\xbc\xf8\x31\xd3`o>s\r\xed\xb\x87\xa8\xd3(,\xcc_\xf5" "\xf8\xf0\xdcq\xc4\xe0\xf7\x2\xdc[\x8a\x8e\xb7\x18%\xe0\x9bi*\xda\xe6y?\xb\xd6\xdc" "\xd9/^\xc3q\x15\x9f\r\x61\xb7\xe1t\x97wf\x91\n] \x13\xaf@&NU5\x1d\xe8\xf7\xb7\x7" "{\x5\x89\x18\xbb\xdd\xec^M\xc7\xfdT\xb8;\n\xf4_\x11\xa7\x1a\xe5\x96\x46\x93SA\xbd" "8\x1br\xb1\xc6K\x82G,\xc9V\x1f\x1e\xd5\xadk]\xf9@\x88Oet\xd0\x30N[\x9d\xcc(\x87Z" "\x8a\xe9~\xf3\xfe\x34\x6\x8e.6\xfa\x46\xaa\\\xbd=\xd8\x7f\x92\xee\x8bV9\x94\x13\x0" "\xa1\x3OP\xfa\xd4`\x2NF\xc2q\r\xbc\xff%\xe3\xd1z\x9c\xcv\x97\xe3\x18\xb1\x44\xa7" "\x7f\n\x39\xb1\xfb\xe9\x10\xcc\xa9\xa8\xd8\x63,\xe\xf2\xc2\x85\xd5\xab\x8d\x1M\xb" "-\xce\x8d{\x6\x89\xaf\x4I\xd1\xa2(u\xcbz\xa6\xd8\xc0;TN\x87+\xa8\x4\xad\xe4\x61\xc9" "\xeb\xff\x87\x46\x16\x41\xbb{\x9e\x1eh\xd1:\xdc\x8f\x41\x13\xe2\xe0\x8ey\xb0\xdc" "0\xd5\x97\x65\x81JG\xa6Kj3\x14;\x99\x94\xd4+v~\x0\xe\x44\xa1\xa7~RA\xdcZ\x94\x64" "\x87+\x11\x93\xdf\x31\x87\xc6\x90'E \xb4lM,\x4\xd0\x42\x84\xb5\x8d\x5\xe7\x37\x8d" "G\x1e\x34\x44N\xed\x39\x87G\xda\xe9\x17(\xb8\xb1\xf3\x9\x9a\xb3h\x8dL\xe7\xd8'\x5" "\xa6\xa3\xdfI\xe7\x61\xf4\xc5\x9e\x7\x1e>\x1dw\x1c\xa1\xb8\xa6\xc\x35\x9b\xf0v\xe8" "\x6\x1d\x14\x8am\xd8\x4\x81:YlT\x14\x9f\xaf\x1b\xd2\xe2]\xc4N\xc4X\xaf^&\x19\xa4" "\x18\xc5;~\xaf\x9c\xc7_\xc2\x13\x87\xad\x8b\x7f\x8e^\x98H<\xae~\x86\x85\x38\x90\xd7" "E\x88\xc8px\xc5\x82\x37\xec\x97\xdb\xfe\x8a\xab\x84\x88\x13\x84\x2\xcb\xda\\\x87" "kC\xc2\x80\xef\xb3W4!x!xy\x90\x9d\xfe\xf6Z!\x97\x9c\xaf\xf8\x30gY\xd8\xb4u\xc3\xdf" "\xd7\x18Pt\xc1\x85\xe4\"-\xebx\x1f\xca\x1c.{e\xe3\xd7\xbcx\x8e\xab\xd2\xa7\x45Q\xc5" "\xbc\xd2\xd0v\x95\x10vs\xc8\xb3\x8cS\xcb\x42^\x3\xe4&\xe1\xd9\x88\xc4rno\xbb\x98" "\x8e\xa2\x8b\xda\xcaQV92\x13\xa9\xcb\x1c&\xea\xae{\x95\x34\xe2\xd2P\x83\x37\xf2\xbf" "\xa5tPJOzyF~\x97Q\x1e\xe0RXb\x88\xb2\xe0\x95\xc4\x19 \xcew\x3MR\xea\x9d\x7\xdf\xdb" "\xf3\xf0\x94\xd7\xd1_\xf=\xbd\xaf?\xdd\xf1\xd4J\x1fQ\xd4p\xec\xfg#\xf8+\xc0\xe8t" "\xbd\\\x8d\x1e_\x5\x30\xf6^kg_\xfa\xb3\xcd\x19\xf1\xe3\xbfj\"n>\xcf\xd2\xb5\x1\x85" "\x90\x39_\xbf\xbb\xe5\x88\x62\x1c\xdf.R\xe1H7\x94\xc4LeH `y\xf1\xb9\x98\xbf\x31\x11" "w-\xb5\xcb\xb8\xca\xf6\x93\xf\"Ss\xd8\x91\xe1\x9aO\xe6,\xf8\xa4\x30\x95\x61'J2\x9a" ";\xeb\xa8\xf5\x89\xbf\xf6\xcb\xc5\xa5\xd6-,\xe0\x38\xd3\xb6K\xef\x96\xb\x41\x85y" "oPl\x9a\xdb\x7\x14\xf4w8\xc7l0\xec\xca\x61\xa0\x19\x42Mj\xd5\xed\x46\xbe\xd1\x32" "\xb\x66\\H@\xb5\x14i/\x9ak\xd0\xf9\xa3\x65\xaf%\xa5\xc1\xeb&\xb1;\x13\xc\xae\x81\xbe\x16#\xa0\xc8\xdbu\xec" "\xd6\x88\x6!\x9b}\xb3\xac\xf4\xe5]PB\x12\xe4s\x4\x44\x65\xa6\xf8\xbb\x66\xf7\x30" "\xf2\x82\x41\xf3\x15\x99S\xea<\xa4\xaf\x93\x39[\xbe\x9f\x1bZ\x1c\x32!\x10~\xd4\xcc" "\xe1\xc5\x9\xf5\"\xbb\x17'\x90I\x4\x1du\xee\xd8\x31\xa0\xf6\xa6v(m\xb0s\x9f]\x9e" "\xfa\x13\xa8\x1c=8\xcd\xecm\xf6\x1e\xec\x1\x14Q3\x8d\xb2\xbcn\\\x16\x88`_\xab\x1c" "\xcf\xeb\x84-\xe1\x10\xd2\x4|\xc8\x91\x38wJE\xb3\xc2\xb1t\xa4$\x1b\x99Y\xab\x39\xd6" "7\x8d*\x1b\xdd\x2\xd2\x0)\xc\xffp\xa5\xfc<\xca\xbf\xa1\x66\x38\x1cG\xf7>>\xf8\x1c" "5\x9d\x35\x61\xf\xe0\x0\x37\x1el\xd4\xf3\x8eRZ\xee\x9c\x2\xfc\xa8\x62\xc8\xcc\xc" "\xc5H\xa8\x46\x92\x8bP\xe4\xa1\xa5\xaf\x19\xa7\xca\xb7\xddT\rY\xea\xa9\x30\xbf\xff" "i\xcdg)MG\xb\xdb\xe\x1\x9\xf}\x7\x11\xff(z\xecL\x95\xf5N\xce\xbb\xef\x45\xaeh\xe0" "{ \xe6\xc9\x66o\xb2\x35Z\x97\x1d\xea\xaf]\xew\x11G\x87\xd5ysN9\xc2\"\xa0\x14Vuo}" "\x5\xa0y\xe7\xc7(\xd8\xae\xd3N(\xb4\xfa\xed\xb5\xe4K(\xd3\xde\xf6\xf3Q\xd4\xab\xe4" "\n+\x2\x87\x8aGG\xb1\xad\x6K\xb4:\xc2\x94\x8c\x9d\x62\xe3\xbdm<\xa3,\x8e\x6%R\xab" "Ah\x8e\x10\x8f\xd8\x38\xc9i\xdb\x1c\xe8\x43_\x17\x33I\xa9n/\xb\x15k\x9c}\xc2\xb1" "\xd9\xa3\xd5yjfN\xbf\xb\x61U\xe5 \x8d\x97j\x95\xc6\xdaJ\x80\xca|\xae\x1nFo\xb4\xce" "N\xcb\xc9\xcf\xcc\x9f\x46\xf3\x89\x46K\xa2\x1eQH\x2\x86\xfe\xf0U1\x8dt\xday\xa0\x61" "/\xf3\x16\xdb\x41\x85W\x94U\x9e\xa7\x33\xcc\xf0\xf9\x64\x62m\xa3)\xb2\x1Ie$\x8\xad" "7Y_\xd2\xa7\x86\x9a\xd3\x7RB\x11\x10\xd0\xf3\x1b\x39V \xb8+2\xe4\xdby(\x4U\xad\xf0" "(\xa5|`\xcc\xe7\x32>p$\x2?\xe9\xcb\x11\xc4V9%\xc1\xe6\x93\x92\x92\x9f\xaf\x4l\x16" "\x81;\x0Qn\xc1\xf5_\xd6TE\x95\xd1\xea\x95)\x1Z\x17\xcc\x81\x6p\x92\x41\xe3[iXl\x1f" "\x0U_\xf\xdd\xfatj&vO\xd1\xfe\xcf\x10\x1f\x63\xc4\xf2Zu\xb2\x64\x92\x0\xfc\\w\x0" "=\x85%\x1\x15:\xfb\xa3\xd2\xa5\xb9\r\x44\x85.\x14\xe6\xb6\x82~oqD\x81\xbd\xef\xec" "zh\xb2\x32\xbdH5e\xd3\xa3\x1d\xe8\x61v\xb2\xdd\xf0\xa4/\xc9p\xc\x64<\xa6i8\x90\x12" "{\x84+\xa5\x9\x99\x8\xbe\xd8w\xd2\xa2\xbf!\xb6\x9e\x1f\x9a\xca\xfei\x1f\xa6\x84\xf4" "\xe\xfa\x7f)\x7f\xfI\xb9\xb2\x8e\x64\xfd\xb3x\xe0\xe6n\xe7VqB\x96\x9c\\\xb9/\xe9" "\xf\xa1\x90[\n\\5J\x14\xed\xf7\x5\xb6.\xa0i$\x8bm>~\xef\x1b{&\xd2\x65ua\xa4\xda\\" "\xb3\xd2|\xa9\xbe\x8c(>#\xa0S\x1c\xbc\x99\x92\xeaX\x9d:9\xa6)\xa9M\xcf\xda{\xfa\x3" "G\xc8R\xa3\xad\xa2\xd6\x31\xa2\xf7M\xd1\x9a\x7f\x96\xa2=a\xa7>r\xa9\xb1.\xbe\x45" "\xf3\xc0Q\xf7\xa1\x0Q}_\x1e\xd4<\n\n\xc5\x96\x1f\xcb\xc0\x98\x7f\x91\x91\xfa\x17" "\x8a\xcb\x9d\x15\xfd\x97\x17@\x95.h\xea\xcc\xbd\xd7\x8\x39kkk9\x95\x97o\xd8\xa5q" "\xe5%>\xe8\xcf\x1c\xc3\x1a\xf5#\xdd\"=\x13\xd4\xae\x62\xe9\x32&\xd8\x34y\xd6\x43" "R\xd7\xa5\x17s\xbc\x12:X\xa2O\xc1\x19\xb:\x2\xcc^\xbd-4\xa4\x2@\xb1\xddwZ\xb4\xdd" "\x90\x41Y&\x4\xec\x1\xd5\xa9m\xe6\x12\xb\x37\xcfg*\xa9\x12\x42 \x3\xffO\x93\x8e\xe5" "q\xb9\x8d\x19\xc\x9a\x43\x61;\x11'\x9dXo\x9d@\xa0\xbf\x94\x2Qa6:\xf5%\xa2\x43\x2" ">\xed\x30\x84#\xd2{\xd6$`w\xae\x64\xd3\x86%\x44?\xd1>x\x91_\x88\xe2\x84\x2\x10\x9" "V\x8b\x9e*\x9\xd9\xf7P\xb9.\xb5\xb4\x8a`\xd1\xd9\xae\"{\xa4|\xb6\xfeI\xb1\xc5\x1b" "\xffZy}\x8\x7f\xe6\xc8\x45\x84\x65\xcd\x33X\xbb\xdb\xb5O\xd6&<\x1a\xba\xc6\x97\xac" "8\xft\x17\xdf\xe2Sf\x2\xf0\xa7o\xact\xc2I.RO\xb7\x43\xfb\x61L\xc4\x9f\x82\xbfY\xfe" "\xe5\x42\xa6\xde\x34\xc3>\xbd\x13S\x18h\xe\xc1Kw\xbdr\xb0\xa5y/\rPQ\x98\x13\x38\x84" "\xe3\x46\xd3\xd3\xa8\xda\x17G\xa5\xe3\x41\x35\x63\xacu\rm-c:\\\x90\xab\x13k\xf0\xf4" "\xc4\x1e\x19\x0\xe1\xdaUUpym\xd7\xc6oO\xbc\xf\xde\xef\x0\xe7uD\x90\xd5\x89\xccL\xc2" "W\xfc\x43w\x6\xcc\x10N\x0\x90\x34(\x1d\xa8\x1et\xfb\xcd\x8c-\xde\x35Y\xa5\xebY\xa6" "q\x92\xbc\xa9\xedI\xff\xc4\x9b`Z\x9d\xac\xa1\x94\xea\x2\\Q\xc5\xec\xbc\xb3\xa7\x90" "\n?\xbfM\x1c+\x97@\xfavw\x4\xedu\xc3\xb5\x8c{\x93\xa5\x35\xbf\x43\xfa{\xe\x1e\xe" "ikl;\xf8\xfc\x89\x5\xf4\xe5\xee\xd8\xc#\x9b\xd1\x9c\x95\x34\x92,'\x86\xc2\xf9\xff" "\x18\x1\xd2\xe1\xe0\x89\xe\x1ana\x91\x8aL\x90J\xd8\xf8\xb7\x9e)|\xf2\xbe\xae\xc8" "z\xfb\xac\xa9Q]\xc9\x87\xe2\xdd\xdc@\xf2\x1cZp\xd2\xa9=\x8d\n\x62nna\x84\xa2\xcf" "\xe8_\x86\x63\xb\x3\xd2\x37\xd1R\x95\xc3\xc5\x4o{\xd5\xa2OY\xa8\xbc\xae\x80\x90\x9b" "\x96\xeb\xef\xdfl\xe2\xc5\x82;\x13R\xf5\xa7j\xdf\xb8jf\x93\xcc,\xb6T\xad\x9\xcf\xab" "\xa6\x8e#8\xf5\xce\x11v\x4\xfc\\\x3u\x12\x85~C\xac\x9\x7f\xb0$\xccQF)N\xa0\xc7S\x14" "^\xa5\xc2\xf1j\x18\xfcu\xf6\x8d\x3\x62\xd4GZ\x1e\x90/\xc3\x41\xa3\xc8.\xe3\x7\x44" "\x17\x9d\x39\xc3\xe5)\xb9k\x11-\xe5\x7\x11\x95JB\xff\x30\xecw\x7f\xea\xa3\xd7\xc2" ">\xfM\xa5\xd0\xa5;\xed\xab\xd6\xe4\x64W\xaa\x62\x92X]:\x14\x8a\x31\xf0U\x9e\x85U" "d\x14\xbf.\x9e\xb\x62\xc2\n\xb2J\xe5\x38*m%\xc2J]T\xb2g,V\x89\xc3\xfft5\x8am!\x1f" "MD\xe1\x85\xc6K\x9e\x95*\xc2\xd6\xem\x9c\x81m^\x19\xd6\x62\xd6\xef\x1d\x18\xb3\x80" "\x93[,\xcc\xa3\x10\x66\xfdx\x90\xf9\xb4\xd3\xc3\x9d}J\x11l\x16\xd8\x95\x37\x37\xed" "\xfc\xf5\x11\xe9I\x10\xf1\xbc\xc3\xa5\x31\x9\xc6\xa2\x1e\x17z\xd2\x41\xba\x16\xf5" "\xd0\x9cq\x1e\xdeYC\x0\x9c{\x8bj\x2\x97l3\xc3\x8d\x43\xb8s\x2\x90\x97\xdcZ\x93\x84" "\x18\x98\x12&\x8\xfcL\xf3\xac\xdc\xca:,\xb0\x82\xd8\xaa\x45\x39\xd8$=\xbf\x36<\xfb" "\xde\xe3\x38\x87\x9d\xa2\x64).\xdf~\xdfwv\xa8\xd1+\xf4\x95?\x1f\xe3\x19v\n\xckbu" "\xdbN\xd1\xb2q5\x13 b\xebKz\xcf\xb2\xbd\xa8\xb2\xdd+\xa9\x7fRM\x91\x3\xc4>\x81\xfc" "\xe\xf9\xe0\x8a\xf1\xac\xbc\xf0\xee\xe0X\xec[\xec\xb0J\x1c\xad\xe9\xc2=^P\xdf\xf7" "\xa8\xfb,\x81?O\x92\x1f\xe2\x2\xa9\x64\x82\x7\xe9\\\xb9\x5\x8dv\xc6\xe3K\x13\xea" "\xc2r\xea\x1f\x36)\xd0\x13\r\x31\xebHT7_\x17\x12h\x86m\xa5\xec" ".\xc7\xfe\x61+\xb9\xf8\x30\x8c.\r\xf3H\x1c\xdbO\x97\xf8\xd5&\xeb\x4\xdcW\xd9\xa8" "D\x3\x90)gQk}k\xa8\x94X>t\xc5\xc9\xa2\x46#\xce\xa4M\xf1w.*\xca\xbb\\\xe\x1f\xde\xc5" "\x82\xb1\x43\nsX\x7f\xd5\xf1kxF\x82\xc0\xd0*\x80\x11. D\xff\xae\xab\x35\x80\xf3\xe4" "\x0\n%t\x1d\x8\x99\x81H2Er\x90\xbevQ\xb8\xef\xd7+H_\x95\xd4\x5\xc6Q^\xcc\xed\xc4" "[\x9b\xbcv\xb2\x6v\xa5\xf6\xa9\x1aXP\x1eh\xf9l\xb0\xbe\x65\xde\xf6\x62\xcd\x1d\xb1" "\x9e\xa8\x3\x1f\xee\xfb\xcf@5;pYGj\xaf\xa3;\xa2j\xf9;`\x95j\xeamx\x9f\xf3\xd8\xe" "\xd3\x0\xf&j-\x87s\xee\xac\x7f\xef\xd3wm\xa6^\xd0\x1a\xcf\x9b\x43\x17V\x2\xc2jS\x8b" "\x1d\xf0\x61\xbb;RO*j\xe4\xdd\x5.\x9b\xa2\x88\xb2\xd3_\xee\xd1\xa2\xf3%\xc2\x3\x7" "\"W\xdbh@M\xd5\xb9\xae\xb6=D\x1e\x41\xad\x38_\x17\r\xddJ\xa5Y)j\xcf\x42\x66\xc7\xe3" "\xbb\xca[\x93n`(\xab\x1b\xbaJD\xc7\x9bG\x0\xb2\x9f\xa2\xed\x65\xd8'K\x8fT\xc1}\xe9" "\xf4\xf1Q\xed\x8\xc5wL\x1a\xc5\x36\x44w\x7f\xe6u5]\xab^T\xb1\x31\xd6K\xbb\xaa\x81" "\x1d\xacy%\xe0\x2\xf6+\xbd\xa9x\xc6\xec\xe9\xb7\xc5\x1c\"W7\x2\xbb\x8\xbd!\x86\x6" "\xf2\xa7\xc9\xc8\xab\xab\x1b&+\x92M\x7\x36\xad\xbf\xcf\x36\x65" "\x96\xf5\xe3OY\xf9\xea\x15\xd3\x8eL\xc2N\xf8\x8\x6\x64W\x98\x63\x99\xd3\x9\xce,\xb7" "\xfe,\x1d\x1b\xa9!\xf1\x19\x8a\x91vn\x1d\xe4S\x19\x80\xf5Gwpx=\xac\xe9\xde\xc5\x99" "\"aK\x1f\xd8\x89\x88\x0|j\xdf\x10\xcc\xee\xe1\x38\xef\xc2\x34\x63\x90\xfc\x88\xd1" "\xad\xf8\x61~NV\xff\xa7 \x92\x91<\x1b&5\x84\x8\x9bN\x1e!B\x13\xf5j\xf4Gg\x8a\x45" "s\x9\x1e>\xdc;d8\xc0\x5\x39\xd0\x3\x0k\xb1z\xba\x98\xf5\xe7\xb9\xcb\xcc\xad\xffh" "\x3\xb3\x1ej\xd9\x41\x99\x4\x62\xfe\x1b\x93\\g\xff\x9eJ\xa4\xb6\x15\xb2\x85Z\xd2" "\x88\x41\xb2\x96\x84\x1a\x9f\x1a;\xf8o\x9e;\x16Y\xd7\xe7{Kn\x7\xda\x31\xaf\x84\xc1" "\xf5~P \xcf\x8c[5/\xd4\x12N\x13\x11\x7f\x34V\xd1\xea?\xff\xbe$\xa8iq\xb7\x12RU\x5" "\x10OD\xe2`U=\x10\xd6Yx\xa5\xeb\xf7\xee\x66\xc7\xac\x66\x3\xe7\xbe\x95\xd2\xb9\xe8" "\x12i1\xba\x13\x89i\x87\xf9|\xae\xa5\xb7\xeb\xe1\xc5@i\xde\xa7KaW\xf1\x9b\xfc\xbe" "\xa2\xe5\x9a\xd5u\x10\x32\x91\xeb\x36\x92?14\x1b\x9d\x12\xc4\xce\xdc>\xd0\x38?\x19" "\xe6\xdd\xf3k\xa5&R\xde\xe8\x1e\"V\x91\xa0\xbI\xaa?\xa2\x1b]\x1a;pf3E&?\xb5\x9b\xf0" "\xd7\x16g\xa2x9Mqac\x12\xe1\xf8\xb2\x33\x15r\xb7\x90/\xa2\x96\x8di\xad=B\xa9\x38" "\xd7\xe6\xf9\xe9\xf2\x63\x9\x44:m\x97|da5\x1\x83\x9d\x9\x87\xf\x2\xd2\x82\xd9\x10" "'s\x8c\x17\xd1\x64\x38K\xf4\x9e\xdf\xbeXY\x1pRH:8_=l#\xc8\xec\x31\xee\x9e\x7\xc5" "v\x1d\x85\xd6p+\xe4#\x1b\x95\xfe\x35{\xf6rqEM\x8b\xa5\x41\x4)\x1d\xf5\x1c \x92\x82" "=X\xd7\xd4P\xc9\x92\xee\xdc+Y\xa7 \xc7\x19W\x90\x44\xda\xe1G\xb7`\xba\x9c\x83\xf6" "n't\xc3\x63R\xca$-K\xc6\xdf\xb0}\x15\x89n\xdf]\x7\x62\xa1\xb9I\x1b\xc4\xf4\xa2\xec" "\xe2\xa0\xc4N\xb8\xf3\xa4\xe2\x6\xbe\x87\xc8W\xf3\xc3\xba\x1\xe7\xc1\xb3)\xd7U:/" "[\x8c\x17\xeen3\x9e\\\x32\xc7Z\x91N\xd9\x33\xc6\x1gm\xceu\xf1\x9fv\x97\x37VP\xfc" "q\xa0\x1f\xeb|\x88\xcf\x93\xb0\x87\x8\x89\xdf\x96-\x94\x9a\xc0\xc6r\xcaZc\xfb\x9b" "n\x9fs\x1b\x7\\\x2\xba\xb9)~\xd2\x31\x80\x99\xbd\xc3\xd2\xeb&\x82\x1c\xf9\n/8\x8a" "ib\xc1!\x8\x9b\xf3M\x8\xe3\xceQ\x9\x99/0\xb9\xf8\xe8\xb5 *\xd0=\x3\xd0\xe0\x0\x12" "\x85\xcc\x46G\xd9\x19\xb3(F\xec#\xfb\xc8\xc9\x10k\xbazI<\x81\xb3\xa5\x8b\xb1=\xd5" "\xd7\xa4;\xb6\x62*\xd6\x8c\x84\x1d\x7f\x11\x36\xf8\x95\xb1\xd4\x94\x96\x88z\xc7\xad" "\xc4\x94\x44\x80:\x16J\n\x1f\xae\xc2\x99\xda\x1c\x1a\xb9\x64\xfbu1K\xb9\xd7\xd4\xaa" "\x4\xff\xb3WVA\xf7{\xdd\xf~x\xe\xb7\xcd\xc1z\x88!\x8c\x18\xe7\x10\xe0\xf8)j\xde!" "\xfb\xdf\x35\xba\x6\xe8\n\xa6\xbe\xc8\x9f\x1b*\x3\x7lm\xaf?\xf\xba\x84Z[\x88\x14" "\x2\xd2\xc0\x33[h{@0@\x96\x88\x96?m\xacTE\x9Mf\xd3=x\xa7\x63\xb6\xf5\x0\xfdL\x9b" "\xc8\x80M@\xf5,\xf4\xba\xeb\xc6\xd3]\xa9\xcd\xeez0\xb7\xf\xde\xd0\xf1\x85\x87\xa1" "~\x8\x15@p\xb0\xa3\x8d\xe0\x0\x35\x1a\x89\xf4Kl\xd6\x66\x8\xd8\xa8hD\xf9\r\x88\xcb" "%zJ\xf9\xc6\x7f\x15P6\xe8\x33\xd5\xf5\xd0\xfcx\x1d\xc9\x8b\x1f\xc1\xb7LB\x82.tvS" "\xd0\x66\x0g\xda\xa7\xaavTq\x92\x9e\xd4\xe3\x8d\x9c\xd6\x9b\xdd\xb4p\x7f\xb1\xd1" "\x1d\x12\x37\xb3\xa5\x6L\xf8\xc1\xc6(\xe2=\xe9\xee\x9d\xfe\xccK\xde\x42\x97\x8d\xb5" ")u*:\x84\xb9\x12\x46ui\xea?\x9do@\x97\x88\x96\xb8\x64\x17\xc1\x14$\xcd\xa3\x8\x34" "G\xf5\xc2\xdf\x66\xc2\\U\x2\xea\x42N:m\xdc\xd2\x30\xe6I\xff\xc8+;\xc0\x16\x8b\xb9" "\x99\xbcQ\x8\x1b\x36\xbf\xe6\x11w\xae\xabl\xc7\x44\xd9\x94{\xc5\xa8\x93\x81\x62\xc7" "\x9a&\x8eiE\xc3\x84-\xfd\x87\xb7}\x14\x8f\x9cyA\xcc\x62\x9dST}\xa9\x30\x86\x30\xeb" "{\xd3\xe1\xc0\xf2\x7f\x8a\xc2\x8c\xcc\xe8\xb\xa0\xaa\x0`\xf2k\xba\xb7\x1d\x17W\x7" "\xab`\x90/\xfb\xd9\xc9\x9c\x38\xd8R\xf1\x14\xf0\x12x\x96s\x18\x9b$n\xb6N\x9\x8c^" "\x9d\xd1\x97\xab\xf6&\x9e\xe1\xb4\xad\xfc\xf6\x8c\x1c{>R1x\xfM\xab=C\x5\xa1\x8a\x89" "\x8a\xe3\xd3\xfe@S\x90RH\xc4\xcer\xa1\x1Sp)\x87\xe2\xcb\xfb\x1\xcf\xee\xf8j\x19\xed" "_\xd0\x6\x66\xff\x93\xf1\xf4xF\xcc\xbf!mBC\x92\x18\xab\xbc\x95\xe4V\xc0t\x91\xa7" "\xc1\xe4o\x1d \x1c-\x80\x66I\xfc\xd2\x34\xdf\x12/\x89\xb3\xb6\xc0\xd8\x64\x5:\xc7" "\x12ha\xa7\x1f@\xcb'\x1c\x14\x99\xe4\x65\x1eR\xa4\x94\x11\xbeQ\xc6\x46\xd5\x9d\xdd" "\x91\xdd\xe8sj\x2\x97\x88Z\xe\x2\x81\x43/%D\x8\xac\xaa\xec\x81\xa3t\xc5\x6\r\xf\x7" "vw\xaa\x42\xa0kM\xbcG{F\xf\x8d\x66\x17\x89\xff\xc\xfe\xb8)\xab\xec\xd6\xc0o\xa1\xad" "\xb7o'\xfeS\x81\xbb\x0\x9b\xd0[\xab\x34j-e-$x\xb0\xa8\xc7j\xa6\xc9\x98\xc9rn\x87" "\xcb\xda\x66\xf9\xbc\x62\xfc\x44\xe\xba\x14\xc7\x34p\x14\xb2n\x84\xf3\x5V\xb8rK\xea" "\x81\xbfv\xd3\x42\x63\xf8\xe4Z\xeaV\x84\x1e\xbb`\x18R\xc0\x82\x1mW\x5\xa7\x30\xe" "\x8b\xe1'k\x93\xc1\x1ek\xff\x84o\x1c\xb5\xf3w4\xc4g\xbf\xa6N\x93X\x97\xb7\x89\xd5" "\x98\\\xe3\xda\x9a\x8e\xb8\xb\x97\x36]\xf2^^\x87^\xd1\x65\x84Vj\xfa\x39)\xd8i\xa3" "\xfa\x9c\xd7\xaa\xf4{x\x93\x98\x12\xfb\xe1\x8f)!\xb3\x93\xd7\x88\xf7[\xf0\xf0\xc6" "*[\xd2Q$\xcc\x98\x84N\xeN\xde\xcc%\xd9\x37\xdfVp\x9\x65x\x7f\xc4\xd1\x91\xa3=\xb8" "\xc2O\xfb/\xf5PJNa\x8\xe5\xfb_f\x12\xdbV\xbb\xd7\xd2\xf4\x33\xfe\xe1\xb8\xf0\xd7" "\x80\xecOv@\xb4\xff\xc0\x1f\x35.\xb3\x98\xb7\xc4\x11o\xf4?\x93\xa1\x18\xe0V\xd6\xd8" " \xbf;A\xa7\xc0\x9e\xad\x1c\xc4\xff\x90RB\x17i\xc5kE\x99\x38~\xb0\x8fu\rji7\xb0l" "\xca\x43R\xa3\xf4\x96\x16\x16\xeb\x12\x39\xefY-r\xf7\xa7\x80\x12\x95\xa1\xee>\x97" "\x82\xbc\x95\xeah2\xf1\xb2q^\xf1\xae\xa0\xf4r.\x85\x16\xfd\xad\x1b\xf4\x14\\\xd2" "a\x3!\x8\xe7\x89*\x8d\x4\x7q\xf8l\xe9\x89\x94\xe1\xb4\xb5h\x8dY\xd6\x4zQ23\xd8m6" "\x8\xacM\xa4\xcc\xe4\xca\xd7x\xe3\x66'\x1c\x16\x9\xdd\xc5\x6\x30Le\xb7P\xb8\xbd\xb9" "5\xce\x9f\xe\r\xb5\x33}.PqZ!\xd1\xdd\x4\x92\n\xfd\xba\xdbjAi2\xbd\xc6\x97\xaa\xe5" "\xcc\xf3.\x99p\xff\x5\xa1\x8e\xc7\x66\x84\xd1%`~&\xd3q\xefni\x17+\xf0\x66\xf7\xeb" "oRqx\xa0\x9b@w\xae\xfe\x5\x90\xa8\xbf\x0\n\x9f-H6\x89\xb7\\\xfd\x2W\x14SCR\x9\xec" "\x99^l\x7,x\x8c\xb3h}c\x6\xd7\x9fw\x1c\xcf\xf4!M\xf3\xe6\x8d<\x81\xba\x19Y\xc1g\x82\x33ubn\xdal\xa3" "\xf9\xd6L#\xdez\x9f.#\xbd\x32\x15\xbf>e\x83\xc\xd8\xa3\x64\xfcS<\xec\xa8\xb6{Far" "\xd7\n\x89\x1eK?\xe3Z\xdc\xf6\x1e>\x1fwq\x7f\xa3\x92K{\xbe\x80\x43\xb9\x81_\x97w" "\xa4\xf0\x7y-mo\x99\x42\xd0$E\xc2\xb0\xdc\x7\xb4Q\xc\xa3\x35#Y\xaa\x31\x62\x32\r" "4p\xd0\x14{\x15h\xb8\xa9\x14\xe0\xdf\x10\x8c.Zv\xd2\xbd}X\xc8\xc2\xd7@>u_\xe8\x96" "\xaau\"\x5;L\xb8\x46\xbd\xa0\xa4\xe9\xb5k\x97\xa9\xd0\x89\xe3\xe7\x41nk\x1d\xd0\x14" "\"\x9b\x90\xfd\x31\x9a\x45\xfe\x16\x1a\xe\x30\x92\xe6\x4\xbe$\x12[Q\xf3\xe7\x16\x1c" "d\xff\xfb\xd2\xed\x9e\xb4\x8b\xd1\x43\x42\xca\xc1\xe3\x3\xc\x63?\xbdk\x87\xd2\x85" ")\xfa)\xa5\x45g\x99\xbe\xc8\x1dX\x1c<\xe8'\xfc\xda!\x1\x41\x9b\x11\x9aJ\xf6\x80\x1c" "\x94\\\x31O\x80\xf4\xd7\xab\xf3os\xe3\xe7RyS\x6\x36\xfe\x9\x34N\x98\xc3h$\xb\x9e" "Cf\xd9\xe6ja\x5t\xeb\xeeo1\xcc\x11\x1e\x83\xe0TJ\xd3!\xcf/b\xf8\xc5\x30\xbe\xcc\xfa" "\x91\xc5\xf3\xc5\x64]b\xe\xcb\x35\xdeo\xa3\xda\xd7id\xdb:\x83\x7\xe8\x92\x8c\x9a" "\x18\xbc\xb7-\x91\x9f\xeep\xf1\xb9u\x88\xdb\\\x18\xe1k\xc7\x45\x35\x97\xa1\xf2\r" "z\x9d\x91\x31\xb0\x2\xa5mL6\x8dk\xf6\x9e\x8b\xadN\nD\\v\xfb\xe0\xaf*\xf7\xc7M\xb7" "\x9a\xb8\xf7g\xfd\xec\xef\xfa\xb0\xc\x62\r\x3\x8f\xde\x83\x41\xad\x14h\x87\x4T\x89" "H\x9dh\xe\x10\x41)):?'\xe5\xfc\xceu)\xbbJ'r\xe5\x4\x5\x41W,\"S+\xf5\n\xa2\xfc}KM" "\xb9\xa6\xb3\x8e&h\xce\xd8\xfd_\xb3K&\xf7\xed_)\xdf\x43\xa5\xb1\x7f\x9f\x1f\xe1\xf9" "3\x4\xe3\x1a.\x17\xcc\xd8\xf2U`\xf1`t\xb1\xdc\xa2\\\x11\xe0\x86\x36=>\xbd\x61\x39" "\xd3%\x94\xcdY\xa2\xd8\xb6\x0\xac\x9e\xe7\xc0 \xd2+J\xcevb\xb3I\x82L\x92m)\xaa_\xdc" "\x9c\x1d\xc4\xfc\x17\x18\xb0\x1dz\x4\xffq\xfb\x10\x18\x1b\x5\xcd\x61?\xfb\xa4\x39" "(Xb\x97:\x2\x8\x95Xj\x5\x43(\x1c\xb6\xe9J\xb1\x85\xd3\xfe\xe9\xc8\xca\xef\xdf\xfc" "\x95\x9e\xe7\xedQ\x1\x8dR{!\xdc\xa5\xba\x42\xba.:\x8aw\xdb\xa8nd\xce\n\xb2~\x9b]" "\xb0\x14\x0\x1b\xdd\xc8\x90\xdb\x7f\x61\xe0\x90\x4Y\x82\x1a|pc\xdb\x65\x13n\x8a\xf0" "Zh\xd2od!\xfa\x86\xe4\xae\x62\x65'\x97\xb3\x85\xc8X\\\x16r\x93.\x15G\xd2\x18=\x84" "\xad\xf7\xe6\xf8\xcf\x42\r\x3\xa4\xe7\x8a\xd1q\xac\x8dR\xf4\x43\xc7i\x89\xefQ\xa0" "wL\x13q\x11\x43\xeb\x0\xecTJ+t!r\x8byP.\x8b\xfa*9L\xd0\xcc\x15\xafq;\\\xe0\xbbx\xe7" "\x16\x89\x18\x2\xa2\x81\xbb\x8f\xe6\xc5\xf2\x14[f\xe6M\xff\x65\x9\x31?5\x3($`\xe4" "\xc9L\xcf\x85V\x9b\x1c\xe5\x84\xf\xd6\x38\xefQO\xda\x9d\xe8\xb1\xb1\xe8wW\x9c\xd4" "{\x87\x85\xb9\x91\x64\x1aH\x1b\xa0\xef\x46\x3X\xc\x8e\xdb\x94N'\xf4\xe9)5\xee\x2" "~*U\xfb\xaf\xf9\x92\xf7\x9e\x3\xf7\xb2\x42h\xbf\x93\xb2K\xa6\xc6\x4\x35-\x14~\xa9" "\xb3\x37\xd0\x8e\x2\xdb\xc7_\xec\x7fP\xadHA\xae\x65Q\x6vAS\xe6\xe0\x8c\x84\xa2&O" "*\x18\xc\"%\xfa\x1e\x39\xac\x8\x1f3\x83\xbb\x9dQ\x7\xec\xd0v\xed\xc6\x1az\x80" "\xd9\xae\x7fU\x97[`v\xe2\x45\xf0\x8e\xc3\x64\x45\xd8\xf0]\xd1\x37H\x99Z\xf6_\xff" "\xe7U\x97\xe9\x86\x83\xe6\x88\xa2@S\x1\x1b\xc7\x1bi\x9a\xe1\x61\xdc\xda\x83Z*\xad" "\xcd\xf4\xd9\xa8'P\x95\x8a\x39\xaehPX\xcet\xf8\x91\x62n\x99I{\xc8-b\xd2\x35IM\xd8" "?\x87\xe4j7V\x82>#CMG\xaeO5\xa2\xde\xe8\x31\x46\x80_\xb5\xe2\x8a\xf9\xe2\xdfx\x12" "I~\xf6\xa4[\xad\x66\xdf{)\xe4\x95\x12\x80\x31\xcd\x96VC#\xc7Z\x88\xb9\x8es3\xf6\xf8" "\xde\x1c\x8eu&\xfb_\x8c\x11\x10\xff\xaeK\xcc\xfe\x32\xe5\x32\xf1\"\x8fz\x9Og\xb3" "Q\x8e\x0\xa0q\x89\x7fN\xdbh\x8b\xf9\x97Q#\xcb\xe1\xde\x8\x95\xea\n\x88'zi\xa5\xd7" "iLD\xb1Z\xe4\xb5\x92\xcf:\x17j\xb6\xe9i=\x80\xd9\xb1\xb8\x9b\xd3\\\xd8\x88\xb7\x64" "\x92\xe\x86^~\x9a\xd0\xe8&o\x17\x4N\xd6RQ\x8d\x87\xff\xee\x1d\xc3\x64\x42/Wb\x1a" "\xfe\xa9\x16\n\x8cy]D\xa6\xce\xc\"\x62:\xa8\xafZ\x8\xcb#\x19\xf3\x35\xe7\x36N\x10" "pml5}\xfd\xf0\x82\xd3\xeb\xe3\xb0P?\x6H\xb7J\xad\xddS\x8fX\x5\xb1\x1e\xedX\xd6\xe5" "\xf}~n\x1a\x63\x1e\x89\xc8\x1e\x32\x1fk\xa3.\x13\xa2\xb7.$\x9a\xb2\xdc\x31\xe7:#" "\xba\xe5\x96\x15\x36\xf1\x63}\x1a\x1e\xc1\xf9\xf7w\xc7U\xe7%\x10\xdfN\x86\xc0\xac" "\xb8\xfb\xda?\xa8p\x84\xfdqSl\xed%\n\x8f\x31\x85\x1f\xc\x9b\x41I\xa4\xff\x19Pn\xe0" "\xd6\xb5peW\xb8\x31\xe0\x9ch{\xab\xcexM\xca\xb0\x17\xc4\xa6,\xf3\x9d\xf2\xbf\x8b" "%\xe8\x1b)\xf8\xe1\x1c\xb5\xa1\xf4\xf3\xeb\x0\x14V\xf\xbf\x1b\x8eG1\x96w\xe8\x30" "de}\xc2\"\xf4\xb8\x9f^\xcd\x6o\xe\xf9,\x19\x93\xd1\x62G\xceq\xae\xe7\xc8\xb4\x64" "w\"\x13\xff\xa7\xb8\xec\xc9\xb4\xfc\xb\xc3\x7\x83-\xeb`^h_n\xe7\xd5J\xd0\x64\x42" "N\x12y\xe2\xa1\xec-B\xb1\xd2\x93\xe3\x96\xee\r\x84\x32\xa5\xa0\xdc\x32\xe5)\x9a\xa7" "\x91\x13 \x1a\xa5\xd2 z\xf4+K.a}\x80\xa5\xaaK(\xba\x84\xd0\xe5r\xec\xff\x34\xfd\xc2" "\x2\xb6rc\xb2\x90\xe[\x8a J\xf2'/\xb3\x88\xc0\xc1\xc1\xc2:\x8a\x82\x1bo\xb3\x35;" "\xf6l\\\x1\xa9\x6\x8a\xfe\x1e\x8dp\x10}\xc1\xb8\x84\x61\xaft\x12@\xe\xa8\x9b\xe6" "\xd9\xeeH\xb3\x6\x62\x96\x83\x62\x1f\xafZ\xd5\xf9\xf8{\x8d\xb3\x1dy!\x8\x41.N1{\n" "O\xa1\xf8\xf\xa1\x97\x31R2\xdc]M\xd2\xa3\xa3\xb1l\x87g\xfa\x33\xe2\xf2'\xcc\xb7\xe7" "_\xbe\x98\x9d\x1dQ\xe2\x32$&\xba\xe3Z\xe9L\xa8sV\xc5\xcf!}\xde\x81\xad\xf0\x62S\x86" "\xe8\x10O\xca!x!xy\x90\x9d\xfe\xafu3\x14\xb4\xa5\xdbX#\x0\x1dz\xe5Nio\xf\xceP\x6I\x1f\x9d\x9f\xbb" "OA_2\xc6\xcb\xac\xa1\xe0\xec\xe0\x8eo56\x1b\xa4\xcb\xd3j\xb7\x0\xe7\xd6\\\x9e~h(" "\xc7\xa0^\xf3G\xec*C?M\x14\xee\xd7\xe0\x6iV8\xf8\xc3\xeb\x83\x43m]G\xdd\x65X\x3\xc2" "_\xa1\xac\xaeu\x6pq\xcc\x96\x89idrP\xcb\x8*\xeb\xfe\x19\x9dv?SHP\xad{\xec\xc6\x11" "\x9c\x88\xc3j\xe5\xdeM\xc0\x16\x31\xc7K#\xbf\xc0\xbe b\xdc\xa0\xf4\xc\x36\xb9\x86" "\xd0ouj\x8fj\xd3\xeeQ\x1bs\xb9J!e2\x1\xa8#\xc\x66\xde\x11\xaf\xc5\xdd\x11\xf0\xc7" "\xbb\xcan\xdaN #\x96\x10\xd1\xb7\xc3\x97X9Uw\xa5\xd8\x34\xce\x80\x8c\x81u\xd7\x41" "\xd8\x34\xb1\x84\xc8\x65\xc3\xd8\xa6\\xs\x13\xa9\xfb`\x7f\x97wQRjs\x84\xc1S\xd9K" "j\x92\x9d\xb2\x65\x12\x8e\xe0\xeb}\xa9\xce\xb1_y3\x84y\x3\x17\xc8zJ+\x18\xe7\x65" "Q\x8e\x92\x8d\xc5\xcd%}\x17\x34\xef\xd5\xf1V\x13\x45\x30\xafy\xe7 \x4\xc7\xb3\xef" "\x5\xd0\xe1\xfb\xcf\x9!6\x99H\x9eg\xaa\xeb\x39Y\x8bq\x8b\xaa\xd8\x66\x30;V\x1\xea" "V\xc1x\x4,%\xb5\xcbX^\xc1*3k\xf7K\xb3\xe6U\x95\x9eo\x85\x9e\x63\x12\xec\x18r\xea" "\xc5\x8f\xe9If\xfb,h\xe1`\xb4\x90\x1ao\xe7\x1\xda`~\xb6\xe3q\xe2\xa2=.\xa4\x37T\x17" "\x8f;\xddm\xa3\xe0\xda\xb5\x13\xf2\xcc\x3\xdd\xe8]\xe5\xf6g\xa7\x46'\xdb\xc8\xc9" "2J2\\\xccR\xc2\xce\xd3\xc\x66\x15\xbdp\xbf\x7fY\x86\x9c\xc9\xa2\xd5u{j\x14\xbc\x8d" "%\x96\xb9I\xbeu\xc3\xe6\xa3\x38\xed\xf1\xb1<\xef?\xe2\xa0-\xe7)\xdfV\xcc\x7\xb5\xcf" "%v\xe9qXJ\x97'\xb8N\xaen\xd9\xd3S\xf5\x42\x9L;\x11\xfc\x9a\x7Q\xc9\x86\xf3\xb\x10" "\xd3ZZ\xdd\x9e\x31\x2\xd0\x8c\x0\xdd\xa4\x8f\x94$G\xa2\x1]\x96\xc7\x8b\x1\x1e\xf7" "c\xd5\xd4M\xe2\xab\x8c\x95\xbb\x38\xet\x13\x8a\x93n\x3\xe1\xb8\xc5\xb6\xba\xb7\x11" "\xc9\x95\xfe\xdf\xb9\x10\xb6\x37\x14_\xea\x17g\xc9(=\xc7\x89%\x14/>\x87\xe\r\x13" "\x99T\xb8\xdf\x66\x64#\xe5&\x1c\xb2\xc\xaf\xc2\x89\x8e\xce\xb2r\xc\xee\x92\xaa\x62" "w\xf1\x12\x82r\x90g\xef=\xfe\xe0\xaa\x9dJ\xbb\x32\x19\x2\xc4WDva\xbaxRat\x12O|\x9d" "Uf\xfd\xab]\xdfO\xb6\xc0\x8a\xc\xb7\x80\x8cY\xbb\x42\xdeI\xc8\x7f\xad\xd4\xf7Y5\xa0" "\xce\xd7\x14\xb8\xf3\xb5\xf6\x84\x8a\xe7\xa6\x5\x96\r\xb4\xb2\xbc\xb4w\x97\x62\x64" "\xe2\xa8JC\xcfhT\xb8(D\xd5\x9nB*9\x2\x11\xaf\xf3\xa6\xf6'\x1c\x3\xc4\xbd\xbd\xb5" "c\x17g\xf3\x45\xd0\x9c\xceKO\xa0\xe9\xc2\xf9\xcf\x36\xa7\xff\xb1/,\x8e\xa3\x13iE" "\xc0\x87\xf9\xc2\xbd\xe9~Z\xa7\xe0x\x1e\x14L\xe7\xbf^\xfa\xfaqP\xd7\x3P[\xf7\x41" "+\xb9\x32\x9\x1f\x92\xb3qS\x9c\xe4\x44r>\xac\x99\xaaP\x83\x99\xd3\xed\xde\xbfOL\xa9" "\x5\x64\xbb\xa4J\xbes\xa5\xe\x62\xec&\x8b*\xee\x66ro\xfc\xe2\x32\xddHh\xcd\x19\x81" "\x85\x81`d\xb6\x31n\xae\xd2\xf4\xfd\xbb\xd4\xcbu\x14_\xda\x87\x39k\xaanXx\x15L\xda" "\xbm\x8b\xc7\x99\xae\x7\xd2*\x85\xf4\xb3\xea\xdd\x5\x1\x5\x1c\xf\x46\xc6\x9c\xc2" "jhs\x8b\xb2\n\xcb&\x98\x15\xf9|\xabI9i\xfc\x16\xf0qN7b\x9c\x83Q2h;O^M\x7f\xcf+x\xb6" "\xc8\xf2\xf2\x9\xc4\xef\x7_\x83\xeew\xd5\x32\xd6\xaap\x98\xc8\x93\xe6\xf1K\nwz\xbf" "|\x1\xe9\x88L\xeeU\x6i7\x17\x83V\xbd\xf9\x7f\x9c\x1bX\x9d\xe1\x61\x94\xfc;\x15+\"" "\xbc\x6\xe4\x84.\xcf\xdehG\xdb\xe6\x95\xdf%\xbap\r\xd7\\\xe.\xc2\xcc\x97\x16\xdf" "\xe2\xa4\xe7\\U\x8e\xe^R\x1ep\xd7\x30^Sy\xbd\xb0\xf5\xac\x30\xf0\x91\xa7|d\xb7\xbb" "\xd9O\xcd\x4H\x86]\x86oM$\x1e\x19!\xefR\x91\xc4\x14\xaes\x82\x46\x7\xd9\x96\\\xa1" "\x85\xc3\x0[%\x83\x84\x62\xb9\x37\xc9\x1e\xd9\xc3\xa6I\xd5,\xdb\xcd \xcfj\x1d\x8a" "02\\\x97\xa0\xf8\x33\x1a\xf0\xc4\x1a#e\xf0\xe3t\x83\x3\x46\xef\x9d\x89_\xe9$S\x10" "\x98\x87nD\x7\x91@\xbcMv' \x8b\x1d\x9\xe4\x66*\xa4[\x97\x96\xac\xa2^?\xf8\x62O\x14" "\xee\x12|j\x86\x37y\x96\xa4\xfa\x8e\xbdK\xe5\x32/\xec\xd2\xf1\xff\x85\x64Z\x9a\x11" "D]\xc7\x32\x8azi\xbf\xf5&:\xc3\xb7\x7f\x96\x8fi^J\xa3\x81\xb8X\x1d\xf3\xf8\xfa\xa2" "\xce\x46Y\x87\xb1\xf2V\x89\xd8\xb4\xffoy\xd3v\xa3\xea\xe3\xaa\xc7\xc8\xcc\x64\x36" "\xe5q:a\xad\xc6\xd5\x8e\x8a\x9e\x9e\x97\x89\x93\x8b\xf3\x9d\xde\x35\xf3\xad]/a\x9d" "\x7\xb6\xbb]5'}'\xd0\r\x15\xbc\x34\xab\x44\xee\x8f\xeb\xc2\x99\x35\xf4\xd7\x8fq\x83" "G\x1b\x32\xfc\x32zc\x1c\xb8v\x97\xdb\x1b\xf9\xea\x35\xba\x9\x97\x61#[\xd0\xfb\x8" "\xc9\xec\xed\xc0*V\xf2\x1\x32\x80\xbe\xf6\xc5|\x9d\xac\xcf\x1c\xfe.dymA\x85\xed\xc4" "i\xa7\x1d\x96\x88\x9e\x64\x46\xc4\xcp\x5\x39\x9b\x89_\xf1\xe5\xbc\xf4j\xc2\x30\x10" "\x1y\x1f\xbf~\x89_\xbf\x64\x87\x9\x37\xee\x66r_,Vq-\xa4\xd4\x80\xb8\xa6\x38,1~\xef" "\xa0&\x82\x11\x66H7\xc0\xaeH\xe6h\x86\xe0I\xc\xf8\x65\xc\x13m\xea\xe1\x36(\xfa;\x1" "4\xe~\xd1z\xeeH\xe3\xf8\x32@\x96\x90\xbb\xe4\xee\x1eN0\xf9\xd7\x93\xf\xb5N\xf7.\xf0" "o\xbd\xe9\xd7\xaeh\xfd\xae_\x14nz\xdc\x44\xb8\x99\x64<\xc2\x7\xc5>\x14\xc7\x66\x7" "\\\xea\x41\x32\x14\x6\xab\xc8\x91j\xd2\xf7\x63\xf2h\x88\x61\x36\xab&Q\x12]\xa2\x93" "H\xb6\xbbM\x17! >`\xf8PI5\xce\x98\xb7x\x1c\xec\xe0\x0\x65\xb6\xa2\x46\x99\x2\x2n" " \xfc\x30\xef(\xad\xa4R\xf8 \x97\xed]\xa4\x87O\xd5@\x9fpV\xa0.P\x18\x95\xc0\xf5\x61" "v\x82\xad\x95\xa7@\x13\xd9_\xcf\xc7\xbf ;_\xef\xe8\xad\xed\x7f'\x13u\xb\xd2$\xb8" "6\x1d;\xe7\xb4\xef\xf6\xecr\xc4\xe4\x84Uj]}b\xde\xc6\x1e\x7fO\x90,\xb7\xd1Z\xdd-" "|\xf5\xb9\x65Sq8L\xec\xa7\x36\xae\x87\x84\x8d\x97T\x1e\xc6\x45\xfc\r\xe7\xde\xd4" "\xe3\xc8\xbaK\x8a\x99qnvz/BB\x2\x8b\x61\xfa*\xc2\xe8\x10\xfd\xca!\xad\x7\xa2\x8e" "\xa5\xab\xa5\x32\xcd\x61]\x8G\x92lD\xe7\xd4\xfdk\xf4`c\xaerTw\xbb\xe9\xff\xd0\x1c" "\xca\x11l].5\xcb\x91\x43k\xa0\xd7\x13\xe9n\x81\xe1\x88!|\xbc`<:\x1e\xc4S\xf8>\x95" "\x80\x63\x5\xae\xc6\xd5&\xd1\x9f\x9" "eG\x6\x1e\xe7\xc4\xcbZ\xcq\xbc]\xdf\x9\xc\x36:\x8d\xe6H\xd4L\xb7qfRY\xe5\x5s\xff" "\x94[R)\x1e\x82%\"\xc0\xdd%Z\xd3\xad\x42Ge\x8a\xc1\xbd\xf7\x1e,\x8b\xb6/C\xc2\xf3" "\x99\x44\x11\xb8\x98\x84\x82\x1f\xbf\x96<\xaf\xa4X\x9a\x41\xf\x8e\x61\x31\x7f\x4" "\xcb\xf9\xb8~\xf2\x36rL\x85\n\x42\xf9\xaf/6\xa8Pr\xbb\x16\x91\x1dx\x10\xce\x35\xb5" "\x8ak:\x97\x8cn\xee\xb3y\xbe\x44Q\xf6&\x1#\xa5ks\xfeT\xdb\xbcO\x19\x34\xfd\x18_\xb3" "t\xa2\xf4\xb2\x5\xedx8\xc2$w\xf8\xebL\xd1\x2\xc5;L\xa5\xadtx\x9a\x44h\xcf\xa7\xcf" "\xdd\xdd\xd2=\xb2+\xa4\x31\\p7c\xd6\xb3\xdaW\x8e\xdcN\xc0@\xd4\xf0HBx\xef\xf6\xb2" "\xf4\xb1\xe3\x18\xa5u\xdcS\xbd\xad\xb2K\xe8\xc5\xa8\x1fH\xfc\x97\x4\xc9\x63ZW\xf2" "\xbc\x8b\x87\x92\x1f+?\\\xab\xe5\x17\xb7\x90\x9fo\xac;\xb8ZO\xf6\rQ'\xe4]\x9b\x38" "\xd7\x66 \xe6\xed\x90\x1a\xd2\xf\xeeU\xa9\x9a\xec\x87\x99_T\x80\x9f\"\x61{(\x9f\x30" ":\xc7h\x97\x19\xce\x10\xf9\xd5\x45ozH\x4\x11Z\xbeL\xdb\\\xfe,\xc7\x15\x94\x1a\x95" "\xb8\xb1\x87\xb5?t\xc2\xb8.\xaa\xdc\xa9k\xd8\xb9\x2\xc5\x8e\x17\xd1\xbb^\x8e\x87" "\xbb\n\xa3T\xcb\xed\x83u:\xef\xde\x1d\x1b\xf5N2F\xaa\x14\x85\xf7\x96\xfe;\xe9\xcd" "]\xb6\x99,&G\xe4\xd3+\xa1K\xfd^\xf0\xcb_\xb1\xf7\x7f\xe]\x13\xd7\x1T\xbe\x1e+\xe0" "\xeall\xa7\x1aP$\xddL\x80\x92\xc4\x65\x91\x30\x19\xcc\xb8\xd9I\xe2\xdd\\\xd8z\x19" "f@\xbd\xf6@$\xcc\xf3\x8d\xca\xb7\xf0\"\xa6\x88\xb9\xc6p\xe6\xb4\xfb\xfb\rz\xa5O5-\xf6[\x81\x30\xa4]_\xef\xe6r)\x1e\x15\xf3O" "\x8f\xb8\x65`\x9\x31\xd1\xc7Q\xab\xd8\xdc\xa8\xccn\xc3\xc7\xe7\x35\xa3\xac\xcbk@" "~(\xba\x94\x12v\xbc\xd2\xe2!\xf0j\xa2\xe1\x80 \xc8\x8au\xe0,\x87QPX\x0\xa1\xd8\xe8" "\xdd\xa4\xc4\x17\xc4\x8f\xaf\xd7\xb2\x85\xf8w\x19\x89\xd0\xe8O\x89\xad\xca\x1d\x96" "_\xfb\x37\xc7Oc\xe0\x8f\x9eZ\xcb\x8Zf\xc8[\x84\xad\x8c>\x85\x35M\x17\xe0T\x94\xbf" "\xaf\x92\xddN\x91\xef\xa6\xfcS\xfe\x92\xb7\xc2\xcb\xd9<\xe6\x9b\x35\xcf\x44\xba\xca" "\xa3:Y\xde\x80\xd5\x0\x46\xa1$\x3\x9\xe2\x61\xf1\xfb\x35^I\xf9\xb1[V\xcaP2z,b\xc0" "\xb9\x44\xef}D\x8b\x62\xfbu\x80Ve\xa5\r\xdb\x30\x9c\xdf\xc7\xcbsh\x17*uB\xfa\xb7" "\xeb\x9d\x38`\x19\x88t\x93\r\x42\x8f\x37Q\xd8\\\"\x8a\xc6l\xa1\x9f?{_+\xb9\x33\x3" "\xb2\xdd\x15\x32\xbf'\xe6\x86\x39v+\x9c\xb5%\xf9\x16\xd0G\x8e\xa7\xedn\xe9s^v\x81" ")\x1e\x17\xb2\xd3,\xae\x41Y\xcc\xfew=\x9a\xcc\x97&\xer\x1a\xf0\x94>+\xcc\xb8\xcc" "\xbf\x17\x7\x7f\xf7\xff\xd3\x89\xdc\xf0\x6\x6O\x8d\x89\xe4!\xa2\xe8\xd8\x9\x8fr\xbe" "\x9e(l>\x82N\xa0`O\x89W\x89\x86l\xdb&\xea\x1\xda\xd4\xb4o\xaf\x38\x4\xf4\xac\x97" "\xff*bk\xc0\xf0Y\xd2\x14:\xb0Z\xad\x94\x45\x89\xac\xb5\xe1T\x13,\x93\x92\xd8#\xc0" "r\xaa\x87\x99\x94\r\\\x98\x38j\xf\xd6\xb4\xd0\xb5\x36R^0V\x99\xf4\x17s$!\xbbX\xa7" "Uh\xadN\xdbS&\x8c\x81h\xf9\x14\xbe\x85,\x86\xea\x2\xd3i1]\xd5\x92\x36\x39\x15\xdc" "F\x97)\xf0\x1e\xf1\xbf\xfa\xf4\xa5\xd2\x9e\xe7\r\xa6\x32\xb9\xe6=\xd3\x83\xee\xcd" "N\xa3!\x14\x64,\xb6\x16\xc8\x97\xb7\x95\xd2" "\x93\x61\xf8%<&}\xcb\x65/`Z\x96\xd6I-\xdc\xac+\x13\xbf\x90N\x88\xc9\xf\xd7^\xc7\x7f" "sd\xbbu\xae \xb\x61\x36\x15&\x4J\x94\xc7\xe0\x33\xbb\x86\xd4\x45\x97\xed\x39\xb1" "\xad;{\xce\x8e\x10\x65\x9c\xad\xbf\x9e\x7\xb3\xfb\x4\x1c\xf1\xa8\xad\xc4\xb7L90j" "\x85\x90\xd5\x8d\x36\x36\xed\x87)\x9cG\xcc\x12\xa8G\x12\xc\xa9\xf7q\x82`o\x86\xb7" "$y)\x8\x36rUg}VI_\"\xaa\x12u\xb2\xff\xaf\x1c\xef\xda\x12:\x89\x84\xc6\x7\xd4\x38" "\xcd|\x0\xb7iI{\x9a\xf6!\x94\x89\\ly\x81\x93W&L}\xbL\xe7\xa2Y\xdd\x16\x96\xe7s\xcd" "\x7\"\xe2\x8a[\xea\xfe&\xc7\xd0J\xd8g\x88j\xc5\xd9\xd1\xf8=\xfe\x97\xf6p\x1c \x0" "\x7\xce\x81\x85\x9e\x8d\xa0\x65\x5\x46\x8f%\xe7|\xbd\xb\xe5\x91\x94p\xe\xc5\xb3\x9c" "0\x0\x18\x13\x98$\x8b\x39\xe6P7k/\xbd\x97P\xbb'E\x7f\xb4\xca\xe1\x61]\x16{j\xde\x44" "\xd5\xd4\xb9\xb0\x84\x92\xe7\xd2\x12*\xf1i\xba\x8d\x1f \x1e\xe\x83\x33v\x9b\xf9\x1" "\x86*\xd4n\xcc\x9dX\xb8\xf7+X\xfe\xc6\x1b\xddi\x1c\xc1J\xef\x8f]z4\x11?\x9b\r\x8" "\xea\xa4\xfb\xbf\xd5\x30\xb7<\x15\xf0\xfe\xefLE\xa7\xc8\xc7\xb6\x8eS\x10\xe0\x93" "fr\x82G]\xa5\xdbge\xffV`i![\xc0\x9d\xd0\xa8\xe5\x18l\xc2\xc1\x1e\x35w\xb5n\xb1:\xea" "`5\xd2\xdc:\xdd\x1d\x13z\xe1_\x8f\x9a\xa9\xb5\xb\x64\xc7\xb7\xc1\xdf\xd5\x81[\xdb" "\xff\xac\xc7[\x84%H\x4\xb8\xbe\x14I\xb3/E\xae;wL\xb6\xf:\x9b\xa3\x45\xe\x8\xa4\x43" "/\xf2Rv\x86\xe3\xcd\x4\xa7\xf0\x35G\x1b\xb4\xbd\xdfNN\xd9\x30\x9ep\x8b\xe0\x43S\x9d" ")\x81\x6\xcbLnx&{V\x82!\xcf\x64X\xf5\xa2\xee\x17\xce\x8\xcb\xa8!\xd9\xb8r\xb5\xb9" "\x85\xee\x93\x9c\x10\xa4]\xb0\xcb\xb3\xa0\x94\x32\xbd\xac-\x10\xb7<)\x99\xf\xda\xde" "J\xc1\x61\xa5\xdf\x44\xc1\xbc\x8d`\xdf\xcc\xe1u\xb9\xfc\xa5\xfe\xdc\x34\x7f\xcfz" "\x9c\x89{7\x85\x7f}\x8c\xb1\xe7\xaf\x13\xf4Xj#\xbf\xc9\x86\xb\x88\xa2\x8b\\\xdd\xa2" "[t\xb4\xbb%S\xe8\xedyk\x3#\x13\xe5\xc6\x1f\xf4\x14\xbbn\xeeM\x9e_>\x8bKx\x11\xd5" "\x80\x9a+\xe4\xa6\x9\xe3\x9a\xc\x8f\xac\xbb\xab\x96\x61\x9a\x34\xdf\x96\xaa\xf4." "\xc5\xbb\xf\x16\xc9.\x10K\x95%\xc\xe2\x3\xaa\x9c\x6*@\x9a\x4\x8\x9d\x2\x96oEK\x8f" "\xc5\xf0',\xa0\xf4r\xaa;\xff-UsO\x9e>\x93\xc9\xef\x83\xd7\xc3\xfS\xb3\x34\xcc\n\xe1" "\xe8\xb0\xca\x1c\xd4\xc7OY\x93\xca\xb7'O\xdc\xdf\xe8k\xdb\xbb\xf3\xeav.V\x8d\x93" "y\xdd\xf4\x1f\x9ZT$3rw\xf8\xe4\xf1\x10\xbf\xdb\x65\x44\xbc`\x8e\xfd\xa4Qw\xbe\xb4\xb1\xa0\x9e;a!\xdb_\n%\xde\xc3\xb8\xa1" "h\x89\xb0\xd2\xda\xc7\xce\x9e\xe7\x33\x90\x31\xb5\xddH\xb2\xe2\x17\"L\xce\x66j[!" "\x8d\xfa\xed\xabk\xb9\xdb\xa3kkX\x8e\xd0\xed\x38\x4\x4\x7\x85\xf8g.\xa1zk& \xf6S" "\xd9\x8e\x65\x87\x64R\xca\xac\xeb\xd4\xf8\xd3\x99\xe8X\x1e\xea\x89\x9cY\xe5\xf5\x8" "2\xdc\xba\xc\x17\x14\x1c\x8\xa6\x9\xf4pG\xf3:\xa2\xb\x81U1\xd7\xdc\x90r*&\"\xb0;" "~\x82\xcfL\xfc\x87\x1f\x45\xf7\xb7\xf0@\xbf \xf2\xa0\xdb\x10\xb\xf9\xf3R#:\xcb\x10" "P\xd1\x42\xba[\xe8\xa9W\xf1\xb2\xafO>e\x1b\x1a\xb3\x8?\xc\x7f\xba\xcc\x93Hc\xd2\x84" "^Pq\xfa\xe1\xe3\x98\x9e\xf2(\xcV\xa8/y\xee\xe0Z\xa4\xeb\xdfka\xc2Y\x18\xd7\x4\xd7" "\xf7m\xc\r}\xbc\x1b\x88?aO5D\xe0%I\x9c\x16\x96{\xc6m\xd5\x9f\xc7\x1e\xfe\xfd\x9b" "\xad>\xc2IE\xbco\xe1\xb5\x88I\xa8\x19\xbcTL`\xd4\xdf\x10 \x1b+\xe4\xb7\x65\x9dLD" "\xbb\xc2\xbc\x31\x1\x5\xb8g\xc6\xe8#z\xf1&(Sl}B\x87\xe7\xcb;\xfc`\xfd\xc8\x44o1\xc" "j\xad\x45\x7f\x1b\x42\n\xa6\x1e\xdat\x92m\xc9i\xd7R\xd0\xb7\xcfo6\xad\xd8\x8a\xc6" "g\xbfI\x12\xa2\x37\x18K\xc2\r\x38\xfc\xa2\xe5\xc\xf9i\x8f\x97\x13\xfb\x15\x42u\x9b" "!\x2\x41\x9\xd0m]\xf5\x12\x66\x34\x44\xec@\xb5\x8d\x82\x87\"\xf0\xfau(T\xa4\xfa'" "\xf2\xe1z=\x9d[fv\x96\xa8\x87\x1c\xf2\xfc\xee%\x85R3\xb6p\xe7\x8e@\x1e\xa8\x4\x65" "\x10\xa6\xcd\xb7\xf3I.\x8a\xbcM#\xf5\xf1\x18\x9a\xe5\xb1[\xb1\x43\x7\xc2\xaa\xbc" "\xde\xb\x39\x8b\xcd\xc8\xcb\x33\x9e\xe3\xfaH\xbb/\xc5\xb1\xa6\x36\xb3\x8\x84\xb3" "B\xc4\xd1\x65\xba\x9)\xea\xa8\xd4\x11\xf8z\xb8\xb3kP\xa5\x1b\xa2\x30^hh\xfz[K\xc8" "UPR5J\x1d\xa9\xa6\xfd\xa6\xa2\xb3{\xb2H#~t\x18!l8\x8a*j\x18\xf2x\x88\xbd-W\x15\xb2" "dc\xb3\xbd)$\xa3\x19\x98\x1eh|\x15\xddG\xe4\xeaq\xeb\xc8\x7f\xd7\\rE;r\x88\xc8\xc5" "x\x0\x62\xb3\x18+\xb\xab\xb9\xcek\xd6\xed\xe5\x63'\xd3\x37\xba\x1c<\x7f\x6\x99\x32" ")-w\xea\xa0\xb5\x15\xd3\xeb\xe1;[\xb7\xe\x17\xc6\x66Xc\xac\x3O\xeb\x83LU\xd8\xcd" "\x1c\x7\x83\x4\x87\x1b\xf7\xd1\xa7\x82\xa4#\xb9\x15\xf6p\xa5\x9c\xdb\x30\xec\xc9" "M*\x0OO\xb3\x94\x63\xa2\x81[\xcb\x1a\x96\x81{]\x10Z\x8d\x1c\xa1\xa8\x11\x97\xa3\xa8" "<\xd6K\xb1\\\xc9\xbf\x31\xcd}\x17M\x1e\xa7\x8c\x95uz`zm<\xe4\xde\x0N\x84\xf\xfey" "\xc\xb9\x8f@\x0R\r\xa3\xaau\xe0\xc5\x11V}\x8d\x9'\xe7\xb0\xc2\xca\xc2\xde\x17 \x94" "\x81\xed\xae\x91\x8d]Zv\xcaj\xbf_\xf3R\xf1\x1a=\xec&\xdbJ\xc6\xb7(k\xa4]M\xe5\xed" "\xdd\x38\x62\xad\xe7\xf6\xbc\x13t\xffV#\xfc'I\xecK_\xd8\xe8\xde\xc4\x82\x10Q\x1b" "I\xff\x88\xaag\xa7izA\xb7Ux\xa6`\x3T\xab?\xf8\xdf`\xef\x83J\x6\xe0\xa8\x8fj\x9bP" "P\xe3\xdd\x32$\xb5\x11y~\xf8+\xb0\xccr\xa3w)\x8aqM\x3\x80\xec$\xa6\x64\x63\xe8\xd1" " \xca\x66\xbd\xc4\xbf\xf4\x1q\x8b\x89\x89\nL\x3\xe2\xa3J\xad\x99I\xdb\x66\x94\xae" "\xe7\xd6;2y\x81$\xe5L\xdc\x35\xaaN\xf8\xfd\xb7H\xd2\xc6\x81\x85\xe4\"-\xfc\xf0\xb0" "=<\x12\x15XC\x89V)$P\xe7\xbc`\xe0\xc\x36\xf3\xbaZ%X\xc1S\xb3\xa7\xb3\xe5\xb6x\x99" "A\xf8\xc8?e\xb0\xe6\xbfzbh$\xb0\xe9\x30\x8\xc9\x90\x9bmlr\x10\xf3H\xc7%\x84\xa6~" "\x86-\x84\x34\x84\x1\x5\xb2\x81\x13\xb5\xb5\x1e\x86H\xe2\x83\xaa\x62\xe6\xc\xe2\x15" "\x4g\x3;\xde$\xac\xb1v\x6\xe1\xed\x9c\x15\xf9\xd4\x64\x39\xdd\x0\xcf[ \xe8\x38M\xa2" "\xba\xee\xc4\x8d<\xfb\x7\x63\xff\x37\x83\xa0\x5\xb9\xa4\xe7\xec\xb\xf3j\xf1u_\xfb" "\x8,i\xf0\xe8\xf4\x80z)\x87\xd7\xa3\x8c\xe5\xe\x1b\x7f\xff=i\x14\xdf\xe2\xb1\x9a" "\xd4\xb8\xa4\xc3X/\xf4\xa4\xa3\x83\xb1^\xb1_\xe5\xf3\x61\x34\xb9\x6\xb1\x8fk#\x1e" "\xac\xf4z\xbd\x1bR\xabW\n\xc9\x64\x14\x19\x97\xd8N\x87T\xac\xb5\x9d\xe5\xbc'sp\xef" ". \xe1\x44h\xd2\xc5\xe6\xc2\x32]%\xc3\xa1" "y\xe\xb0\xdd\xa0\xd8\x88\x61\xa7\x7f\xd0\x43\x91 e\xf0nr\x92\x90M\x96K\xcaT\x83\x95" "\x9fo\xd4\x37\x2\xd7\xef\x13\xe0\x46\xfcgM\x8f\xdb\xf3\xb9\xf4\xad\x11\xd2\xb1L\x1f" "\x12\n\xe5\"\xae\xbi\xb0\x1e\xb1\xde\x89\xb3\xa7\x94\xb5\xfe\xb4\xd6\x46K\xd1\x38" "\x2\xdd\x61z\xb5:\xa8\xf1\xbb\x96$RY4V1l\xf6\xa9\xadj\x4\xc8\x93\x30\xbd\xa5\x8c" "\xe2\xad[0\xcb\x36\x8f\xdc\x8e+b\x84^\x11|\x96[\xf0R\xee\xd2\x9c\x2\xc4:\x88\xb0" "D`D_;-I5\xceMF\xf9,\x99I\x89\x46\x61\xa9,$\x1d\x8\x8d&\xa7\x44\x14@\xb\xef\xf5\\" "\x1b\xa2\xc0\xech\r\x5\xc5\x41.u:\x10Vn|\x8d\xb2\xd2\x30=\xb5\x16\x1d_3\x17q\x5\xd6" "\xba|\xf4\x8f\xac\xcb:N\xac\xa9#\xd5\xa1#\xf2\x95\x1f\xc3}\xf9J\x86\x1ap0TdVti\xd5" "G\"\xfb\x82\xa3\x1f\xe1\x8a\x65\x5l\xad\x43\xa8r\x96=\xe7\xb4\x8P\x5\xdb\xb\xe6\x97" "\x8b\x2\x84\xe5\x13\xa8\x98\x87\xba\xd0\xd8\xf3\x8b\xba\xa5r\xf6\x66\xc|\xc5&T\xc7" "\x6\xf0\xb8\xe1\x98)l\xc2\xc6\xee\x65\x61{8:?I\x1dV'F\xfc\xbd\x1M\xb7&\xa5\rOD\x10" "\xe6N\xd6\xf\x10\xd5\xe4\xf5\x88\x9dt\x1e\xde\xda\xd2\x90\xc0;\x9d\x9c\xa9\x95\xf4" "\x9e&\x4\x42\xe7\x30}|\xcd\x36\xea\xcb\xd5\x7`\x1d\x66\xaa\xeb#&\x5`\x1a\xa2\xb9" "\x90_n|YE?\xe]l\xe8\x45\xb\x8a\xdb:7+@\xb7\x65\xb~\x81\xb0\x98\xf\x9R\x9\xe8\xda" "\xb1\x94\x1L)\x9d\x65\x91\x44\xaf\xef,\xdf_\x12\xc0_1\x1\xc7\x39\x44\xd7n\x9e\xe2" "\xfd\x92\x90k%\xb6(W\xb4\x92\xb2:f\xcc\xff\x19\x8\xcU\x95_\xa1g\xb7\xaa~\x13\xbf" "_\xa8s\x11\x66\x95Q\x83\x41\xa7\n\xa4\x18\x44\xef\x3\xc4\x81\xc2\xa3od\x16\x1dr\\" "\x15\xe\x86\x9e(\x4%\x99`8G\x7f\xc5\xa6\xdb\x6K\x8d/\xd9\xbe\xd3\x11\x9b\x8d\x93" "\xd1\x9c\xfb\xe4\x18\xb9]d\x83\xbb\xf8\xd3\x4|\xb7\x88\xe3\xb5\xd3\xeb.\"\xe\xec" "{H6z\x91m\xf7rdY\xbb\x90\x46L`\x96\x2\x9d/x\x1d\x30P(\x89\xac,\x93\x44\xb8\xfa\x45" "\xec\xfb\x1fP\x99U\x1fX\x0K'\xc0\xe4\x89\xfe~\xc5\xeam\r\xfc\xe3\x1c\x1b" "P\x6\x80`sr\xbe\xd6j\xe3=\xb1\xae\x66\xa2\x15\xefW;R\xdd\x7)\x9d\xb4\x1\xee\xd5\x36" "\xeeK\xbX{\x91\xc\xcc=Qr\xb4\xac\x15H\x90\x98\xa6\xec\xbd\xcb\xef\xf2\xc9h\xd2n\xdc" "3\x9a\xcd\xfb|0\xe4\xb1>\x9bSb@&K\xcc*4\xa2\xea\xbd\x64\x1c\x9e\x9a\xedpo&lI\x1b" "j\xc6\x18\xc0\"\xb2?\xdf \xe5\x80\x9f\\\xaf\x1\x98\x87k\xa9+W{\x12\x8f\x81\xd8\n" "\xff\xc4\xb6\xaa\x9b\x8c\xa7G\xb7\x83.Q\xf@L\xbe\xb6\x39\x39\xb5\xd8\xa7\x7f=}\xa7" "\xf2?\xb2v\xd5P\x9Y\xa3\x94\xa2\xa8T\xda\x1a\x36\x1b\x8e@\xd1\xa0\xf4\x1f\xc6}Q4" "\rh|+\xeb\xcd\xa5\xbb\xa4\x18iL\xc3\x92\x30\x1e(\xe3\xc2\xc2>\x7\xae\xaa\xf4Ip\xe0" "\xdb\x8f.D\xe6\x7f\x9f\x37*\xffg\xf7\x35\xb1\xdf\x1a\"\x8b\xe4\xdf\xd3\xeb\xc0\x92" "-\xf5\xbe\xce,\xb1\xbc\x8exC1\xaa-@_G+\xb9\xed\xb4\x1b\x80\xc7\x84\xf5\xa7\xa7\xf3" "\xbb\xda\x85h\xb7\xb2\xea\xcb\xa1\xc\xfaW(\xf5\xa6`\x9a\xc2\xa5\x90\xb7H\x83\x16" "\xc\xb1\xf1-\x1d\xd3n\xbT\xce\x38\x8c\\\x8f\x30\x34\xf8\x85\xa2\x99yY\x9f\xe6\xd5" "\x9e\x93s\x9f\xf9\x8b.\xacyx_\xf9VB$\xd6\xb4T\xfc\xc2\x8\x43 \xd2\x8c\x90\x3\x2\x37" "\x94u\xb9\x11\xdf\xd9\x95\x1b\x7^O\x14&\x86\xa3zCz\xef>\x15\x81@\xdfq5>\xf\x93%\x46" "\xff\x92\xb9\xfb\xb7\xc4M\xb1Sp`\xe9JB\x11\x64\xe8\x14\xde\x32\xd1\xf3\xd4\x8\xd4" "4V&\xb8\xbe\xe3\x88\x96\xff\x33PF\xaa)1\x85I\xcc\xc7\x8b~\xcb-\x17\xd6\xfc%[i\xc9" "'\x81\xf9\xa5\x61\xdd\xd8\xbd\xe0\x9f\x4\xc4\x37L\x2%|\x98\xe2N.\xe4\x7t\x1a\x8f" "\x2\xb8`\"\xd9\xdc\xc4I\xb7\x30\x96\xf\xcf\x1b\x9b\x8d\x65\xaf\x9e\xf\x10\xaf\x8e" "\xdf{\xd3\xf1\xcd\xaa\x9d^\x15\x4\x16\xb6\x33@\x89\xdc\x86.?\xde\x66\x33\xfa\xd9" "@\xbf\x88\\\x97\x61\x85\xadVg\x99\x1eu\xa2Y08\xfc\x8c^\xda\xc8/\x6\xc2\x13\xb0\xda" "\x99\xcp\"D\x9bvza\x9b\xbe\xe9\xc2\x9e\x65\xd9\xcaS\xce\x96\x1m\xc\xd4\n\xaa\x18" "\x8a\xa7\xc6\xb\xce\x10\x14&^\xfd\x92\x6\xdd\xab\xb6\xc0\xab\xbeT\xf1\x89\xc@EH]" "\x1dO\xa0\x3\x87K\x10R\x14|\xd2iU+f4`\x93\x1b^\xf7\x82L\xec\xb7\xd7\xb8_fd\xa7\xbf" "\xec\x44\x8a~Y\x1d\xafh\x91\xf8\xf8\xb0\xc5\xf8\xc8$\xd5\x6\x7,\x9e\xf6\x83\xbc\x85" "\xbe\x1e\x7fN$\xe\xe4\xb\xb1\xe2=N\x8fo\x8a\x31\xf4\x64\xf1\xa5\xd1\x39\x89\x45\x64" "\x4\xff:P\xcd\xe1IV\xdb;$\xe0j\xf7\xbd\xb5Rz\x0\xf*\x85>\x95\x35\x91MF$\xcd\x39\xea" "\x90\xa4\xef\xdc\xac\xaex\x11\x37\xc\x81\x30\x9e\xf3`\x2\x1d\xcy\xf6V\xbf\xd4,\xee" "\xf8\xf2\xa7\xacofGH$D\xf5\x87\x87pk\xe9\xc7\xab\x84\x44(\xaa\xbb\x66y\xe4\xb8\x98" "'\xaf\x8c\xf9U\x0\x93\xb0\xf7\xeax\xa5<\xa2K\x8c\x89g\x9\xae\"\x13\x30\x85 ,[\\>" "I3\x9+lZ-N\xf8\x8c\xd2\x46\x97)L\xd7Jz0W\x1e\x14\x32wp\x8fT\xfL\xee}\xd8T\n\xc1n" "\xc5\xf4\xde\xd4\xd4=\xce_#\x8d+`}w(\xa3zL\xd1\x10\x87\x93%\xf5\x83\xc1\xb3p\xd1" "n\xbf\xba\x95\x80j\xb6+\xf0\xfe\x93\x1c\xa5\x8eh\xfc\x10\x10W\xcc\xe1\xbe\x64\x8b" "\xa9\x9dj\xf6\xf4\xf2\x88\xa8\x1a>u\xc2&=\xc3*\xab\x93\xd4\xed\x5,\xd9\xf9\x7f-\xd9" "\x12}\xd3/\x89Z~v\xbl\x4\xbc\xa8\x4\xec(l1\xd5\x88P\xac\xb7\x83\xe4\"~\x8f\xe6\xa5" "^\xb5\xfk\xb9\xaa\xa2_\xe4\x64!\x16\x9a\x10\x88\xc3\xa6\xc?\x83\x91\xac\x82,W\xa4" "\xd8?\x1\x8e\xd3\x39\xd5\xa7\xf9\x1b*G\xc9Q\xee\xa9\nsh\x3\x93&A\x83q\x0\xc5\xcd" "L\xb6\xce\xff\xdf\x15z\x98\x35\x85_S\xd8\xbf\xe1\xe5J\x98T\xd8\xf7XN\xd4\xe9w0cT" "\x97`J\x9d\xf1VB\xbb{\xbe\x85L\x87\x15uUo\xb\xfb<\xcf<\x8a~\xf1\xae\xaf\xf3q\x87" "Z\xd2\x30\x14\xe0\xe5\xcf\xa1\xd1\xec\xceZ\xc4+\xb7/\xf4\x63\x33<\xef\xb2\x37{\xe4" "\xcdq\xcc\x6T}\xcet\x82z`\xbb=,\x92\r\x91\x8f\x65\xb0\xf4\xed\x43l:9\x98ye 4\x99" "r\x8d\x7f\xb\xa4\xa3\xde\x62\xb3\x8a!h\x91K'\x9c\x94U\x95\x9cQ\xf2\xdcI\x5\x81\x31" "-&\xf3\x91\x13\xe4,\xfc\x81x|\xd3\x9e\xd8\x84\x19\x86u)\x8c\x99p\xcek\x7\xa4\x39" "\xae\x17\xd3\x46\xf1\xa1\xc4\xc5\x41\x7f\x0\xd3\xa2\x85\xf5\x9b\x8\xbe#\x1\x80r`" "\x8e\x8d!\x3\xddn\xb5(%5$lx\xc0j\xbe\xe2\x8e\x89\x81h#\x19om\xa9\xf6\xd1U.\xba\xd2" "\xa2\x86\x33\xac\xf3\xf2k\x86\xde\x65\x1fZ54\x92;\xf5GX\xf3\x94\x46\xfd\x8c\x96\xb" "\xc1\x8\xff\x90 \xc8\x8a\xd0\xbf\x94\xf2O\x8c\x44Ia\xbf\x17\x42\xde\xdf\x34\x83\x9a" "N\x86\x96Q)L\x8c\x9a\x83\x83)\x1a[F\x4\x16\xa6\xc3\xf\xc8\xb2mttM;\x6\x99\xbc}}\xf9" "\xaf\x19\xe6\xc2\x97\x3.\xd6\x1c\xd9\xbe\x4\x1d\x42\xe1\xa8Rr\xd9\x81\x17j\x8d=\x2" "\x83\x46\xd2\xb3\xfdl\xf3\xbf\xebu\x9av\x14\x9f<\x83\xa3r\xb1j\xa1}\x8d\x13'SQ\x90" "\x1eU\xbe\xf3G}\xd1\x44\xe\xd8P\x9aV\\\xfe\xbK]\x83%:s\x82\xb9\xea[\xae\xd8\x30;" "z\xb5!ZL\xd3\xac\xbb\xd2\x8a?\xc2O\xd8\xe6\xebY\x0>\x8\x80\x83G\xea\xc9I\xce" "\x18\x7f\xa8\x16\xf6\x9en\xden\xb7\x95\xf9\x10\xdb\xfc]\x85\xc9\xf5\x81\x62\x1b[" "~\xa9\x82\xab\xbfY\xe7\xe0\x1e\xb6\x65iSUHmF\xa3\"-\xcc\xf7\x9e\xfa\x5%\x42\x9\x3" "N\xab\xb0\x14{\xc5\xe2\x1d\xbb\x36\x12\x96\xae\xb0\x14\xe2\xa6$qf\xd2~VC\xbf\xc0" "j\xc4\xb1\x38\xc0\xbb\xdd\n\xed\xd1\\\x46\x8e\xae\xf7\x43$e\x1a\xcag\xc0\xf7\xbe" "B\x12&\xdb\x7f\xbf\x4\xb2\xba\xed\xaf/\xe6u/\x13\xd9\xdf\x1f^0nS\x94Q\xdemp\x8eX" "2\x8d\x19\xb8$\xe8\xef\x30\x8d\x30\x44\xf8U+[\xa5\xb3\x1e\xb1\xfa\xed\x15\xdc\x9a" "\x99\xf0\xd4nQ0\xb5\xe6=w\xc6=@}'t\x91\xfb\x9d\xa2g\x1d$\xe5\xcd\xc1Z8\xb2g#\x19" "\x14\"?\xfb\x45_}\xf8\xbb!\xf9\x65\x43\x8c\x37G\xb7\xc1\xf0O\x8cZ\x9f}\xab\xe1\xea" "C\x5\x14s38#%g\xc4\xa1#J\xa8\xaf\x98\xe4\x45\xe2g\xd3\x9a\xf7\xe\x9e\xb8\xc2\xa6" "`\xa2\x15<\xce\x33\xab\xe4u\xb3\xa8\x94\xe2<1\xfb\x10\xc0\xf0\xab\x99Lh\x9b_\xdc" "+m\x7\xa7\xf\x9a\xf7\xfbO\xf8\xb3\xe3L_\x1d\xe2\x96\x89i\xf1\xbd\x83K\xabZ&&\xf1" "\xf2[\x19i'\xc6\x80\xb9\x43\x8fy^O\x1f\x31\xc4\x1e\xab\xf1\xed\xe6.\xbc\x46\xbaR" "F\xd0\x86\xac\xd1\r\x32I*\x12\x9e\xed\x91\x1a\x18\xa4\xb3\xdfy*M\xbf\xc8\xe4O\xbc" "kq\xd7\xdc\xd6\xde\x91V\xf2\x3\x9(\xc7\xd7\xc1XO\xf4\xf5\x34\xf2!7}\x8b.t\xdf\x80" "\xcb*\xbd\xcchW4\xab\x84\x66\xef\xb9\x81\xa3\x61\xdf\xdd\x85\x9c\xa6s\x1\x84\xfv" "I\x1f!\xc6=\xd5V\xd4{Q:\xa6\xbfV\xdc\x42|\xa6\xca\xc2(\x9g\x1a\xf9\x9\xf8|'H\xbe" "\xe4\xc7\xacM\xba@#\x90\x94\x30o+@\xe2\x8d\xcd\xbf\x90\xcf\xb2.\x12|\xd5\xf2|\x1d" "T<\xa0\xc5I\x96>\x94\xd9\\\xa0\x7f\xf0\xfam\x1fJ\xfd\xfe\xeaR\x89\xe7\xa3:\xb1\xa3" "\xee\xae\xd3+\xbcWm\xf1\xd5\x87\xaa\x9c$\xaf\x35\xe\xe5\x34\x9f\x1e\x1e\xf9\x6\xad" "\xfc\xdd\xeb\x97\xa8\xafUV\x19\xb4Z\x8b|qB\n\xce\x89\xfa\xde\x1f\x98\x7\x97\x90\x92" "W\x8>&#,\xc\xfe\r\x38~\x18\xd4\xd4\xd1\x0\"\xa0\x1\xbfz&P\x12q[\r\x9c\xacS\rmn\xdf" "%\x91\xfe\xcd\x9e\xbb\x19\xea\x15\xa9\x31\xf5\x81Ln\x83\xd6>6\xcc\x36R\x19`\xfb\xfe" "iv\x85Ucvf\x1e\x35M\xfe\xcf\xd1S\xfc\x87\xb6\x1\xba\xcd\x3\xb1\xca\x85\x37\xccx\x8c" "F'\xa4s\x1\x17Z\xba\x9d$\xa6\x6\xfaY\x15\x96~\xcG\xb1#\xa5\xa6U.\x8f\xb\xfdt\x8e" "\xa7?\"\xfe[]\xe2\xef\xc0%\x1d\xa7\xd2\x91|`\xcd\xed\xca\xec\x63\xe3M-\x16\xbc\x17" "z\x9e;.\x9b\xe7\xf2Vc\xdep\x8bt\x92\xeb\x9d\xaa\xe\x9czz\x8cQ\x17\x46\x14q\xa3\xf8" "\xa9\xd7\x4\xfd\xfchH\x95o`3\xe9\x80\x6\xd0\xfbS1E>\xdc\x8d\x38T\x14<\xa5I@\xdd&" "\xdbV\xc9\x4\x83\x9a\xf1\xce\x8f\x7f\xb2\x97\x3\x8\xa4\xd1it\x16<\x8c\x86\xe0\xa2" "\xb3\xb5\xee\xaa\x1fN\xabYEw\xb7l\xf3Z\x1d\xda\x94i\xeb\x31\x9c&h\xba|W\xb4\xec{" "\x80\xc4\x13\xa3\x84\x12{\xa4\xb9)\x18&\xd4\x81Zc\xd9\x87\x65\x7f\x9e\xa8p\xc7\x63" "\xcc#\xcbt\x1\x3\xff\x30\nP\xbb\xbb\x30\xc2\x9a\x8d\xf5\xb0\x81\xd3\xef\xd3\xd8\xcf" "d\x12k\xa3`\x84\xfa|\xef?M]O-\x8b&\x1\x1f\x85L7wGp\xa6\xc3O\xfd\x0\x86\xa5\rka\xce" "\xc6\xe2^\xd8\\\x36wj\xd1\xd5\"\xf0\x6\x9coo\xb1 \xf3\x19\x1b\xfJ\x6\xc0\xbaP\xc2" "\x9a\x42\x83\xc7\xd8v#>#\xc1\xef\xa5W`\xca\x46I\x1bi\xa3\xc\x8e\x63\x82y\xa4\x38" "[3Y\xce\xb5\xbcJaj>\x1e\xce\xbe\xe2\xab\x42y\xc5\xcc\xb2\xaa[uv\xd0wr\x15!|\xac?" "\x16\xdbs\xfb\x15&\xc4\xc9[\xdb\x66$H\xcf\xf2KH\xb\"H4\xf8\xb2\xb3\xe4\x9e\x42\xe7" "\xb6h\xd9T(b\x14\x11\x65;@k\xff\xbd|\xd5\xfe\xae\xbe\x10\xda\xde L\x86\xbf\xd3\xa3" "\xc0\xc\x12\xaby\nY\xd9\xe4~w\x98\xe5\x80q\xdd\xbb\xb5\x83\xe2\xc9l'\x87m\xfd@\xf6" "\xad\x8e\x8!&~O\nWM\x8e^hL\x9a\x45\xa7\xf\x99\x9e>\xde\x8b\x0\xc1Pk^\xf0\x0\x1c(" "3J\xef\xd1\xf6\x30\x9c\xf2\x90\xefX\xfb\x7Sy\xda\x9f\xc6\x9\xc3\x1b\x1f\xd0\xbd\x33" "\xdf\xae]\xe4\xa7\x4\xe0(\x86\xa3\xfd\xa2,\x5T\xbd\xe2\xc7\x1f\x65\x88\x3\x62\xba" "\xdf\xea\x14q\xb5L\x6K-\xde\x3\x61\xb5\x86\xb9\x7\x15T\xd7~\\E\xd7\x4\xae\x13\xf6" "T\xa3J\x9d\x34\xc1\x98\xce\x8fV\xbe?\x99\xd3\xc6\xa3\xcd\xa1*oH\x8b\xaa\xc8\xff\x82" "\xb7\xce+*4\x1a\x1e\xb6\xd3!\xfc\xe0\xa1\xfe\xef\xb4\xc1\xa1$\xa9\x12?b\x80\xdb~" "\xfe\xf0\x43O\xdd\x9c\x1fW\xc=\x1fp\x85\\\x16kv\xfc\xdf\x37#~\xc0m\xf0\xba(\x97\x10" "\xb1\xa1\x46qB\xa3\"\xca\x14\x12\xc9kA\xbe\xb0\x0;\x12\xf6\x42?\xa9*D`%\x9b\xad\xa3" "p,!\xe2\xbby\x9ep>\xac>xu\xf6s\xaf\xc8\xa7R\x93\xea\x9d\xa1o\x1f\x87\x46Z\x8f\x9" "\x84\xe4\x45~\x96{\xa7\xc5\xd2\x65\xf2\xd9\x97\xee\xfcQ~'f8!Dg1b\xd6\xf9\x37\xbc" "m\x7Zy\xe8\xf5G#\x9b\xd8\xa4.\x80\xa4\x65|\xc\x92}>zq\xcd\xb8\xd4\x95\x34\xce%L\x1f" "\xb\x16\x1coI\x87\x66\xd1\x1b~@\xbbG\x0\xec\x8e\xc6\xf6(%5\xc7\x8a\xce?\xdeS\x9f" "\xf7m\x85\x44\xc\xac\xfe\x7\x2&Qc\xde\xf\xed\x12\xf3\xcc\xd1\xd5\xfd]T\x4),Q7\xf3" "\x89\xdaN\x5\xb7Q\xc3!\x97\xdcm\xfe\\\xcbM\x80\x16\xdd\xa6\xc9$\x81]m\x80\xfd\xbf" "\xd0N\x13W\x92*\xe9\x31):\x92U\x9e\x61\"\xe0\xf9\xa1\xabI:O\x82\xac\x62\x90\xf4 " "\xc1\x8d$(\x7f\xecL\xd4\x1c\"l\xc0o\x5\x12\x12\xfe\x8eN3\xf3\xe9\xd5=7\xe0\xfcx\x19" "\xce\x85\x9f)c\xe2\xbe\xbc\xc4z\xef;\x87}\xf8:\xd2\xe7\xa1\xe3\xbe\xc7T\x7\x9e\xd7" "\xf3\x30\xf6\x84\xdcS\xcd#\x89\xfe\xa7%\xd1\x0%\x30\xf5\\Mr\xae\x38[n\x83j8\xd3\x6" "\xe7\x64\xea\x1c\xc4l\xa0\xb\x6\xc4\xa9\x1\xbd\xd4\\\xd7nE\xdco|\xcc\x2\xce\xe1X" "\xea\xe3\x19p\xbb\xed\xc3\x1d\xab\xd5\xfb\r\xc2\xe5\x1f\xf8U\xe5\x31\x43\xc7&\x10" "o8\x8J\xff\xef\x8c\xec~\xad=\xe1\x94\xdc\xff\xafwX9\n!\xae\x63\xbb\xfc\xb1\x8cM\xb3" "\x91\x38\x43T\x92x\x12G\xe2\x9f\xe2\x8\x9a\xf2\xc6\xcc\x99\xfa\xd2\xaf \x0\xf0\xc1" "\xf4\xb5\x94N\x15\xcc@/\x99\xd7\xe9\xea\xee\x3\xf5\xa9mA\x98\xbd\xd3\xdcQ@\xb3\xab" "\xd0\xb5\x30\r\xb7\xb4\r\x1a\x39\x86\xd7\xab\xdf\xb5\x99\x34\xd7\xdd\x0\xeaT\xc9" "\x86x\x5\xbaj)\xf6\xe\xfd\x98s\xd7\xad\x8f\xf5#\x99\xda\xf4S\x11\xc6\xdd\xbd)c\xb3" "\xdb\xe5\xad\xe0&\x2\x9\xf9\xfc\x81\xea:\x88\xb4\x2L\xb1\x7f\xb8\xbc\xf0^i\x6\xfd" "\x95\xfb\xc5\x4\x39\xda\xac\xb2\x86gY\xe8\xc8!-\xeg\xa7\xebJ\xad\xd6\xbc]\x94\xf8" "\xe9\x7fg\x5s\xc<\xd2\xbb\xd3\x3\xd6\xc1qL{\xa6\x41\xea\xda\x96\xdd\x89\xcbo\xe1" "\xd6U\xf4\xb6sT\xa1p\x8f\xf1[\xc6\xa4RE\xd5v\x95\xcdR7~\x7f\xd3\xe3\x8f\x94\xa9\xc4" "\xda\nz\x92\x1b:h|^\xe8\xd0\xbd+r\\\x95\xe8\xdc\xb5\x82\xf7\x9e\xa5\xd5\xa7(\xc6" "i\x1e\xa4yPaLx\xc4\xc3w\x19\xde\xfb\xc6\xe5\xb\xad\x81\x65\xf1\xed\r\xcc\x2\x8\xaf" "\xd1#e\xe7\x9H\xd4K\x14\xf9\x1b\xf9\xc\xfd\xe8\"\x96\xc0!\xaa\x11#d6\x94WV{\xf5\x84" "\x97\xec\xe9\xa3o@X\xc8\xeb\x17\x13\x96\x92t\xd2\x98\x16h\x6#pM\x3N\xaf\x90\xcR\xe0" "IuUkX\xc3\xea\x63\xe5\x44|\x19t$\x8dq9\x88\xc5\x8d\x1b\x66\x63!\xd5\x35\xbe\xc_\x90" "\xe0\x61\xa2\xa2\xf7\xc3l\x1e\x5\x8f\xb2\xc0\x1fMvu8\xa6\xe4\x1e\xca\xe2(T\xb8:w" "\x10\x1b\xf8\x65\xd6\xdd\x44/\x89\xcf\xca\xce\x8c\xbd\xa3\x93!\xef\xbc+y\xda\x45" "\xfb\xb3\x9f-D\x8b\x3us\x10(;\xfbs\xb9~\xeb]\x16\r\xc0\x2\xd1x\xeb\x38h\xa2\x93\xbe" "w\xf\xe4\xb6<\x1L\x1b\xb\xbf\xdf\x1a\xf1\x91<\xd5H\r\x96\xd0\x90\x80\"Q\x83\x38\xf1" "\x8a\xe7\xc3\x96\x1e\x1d\x87\xcb\xa5\xb6\xa4%M\"Z,\x9c\xaf]\x97o\x17\x64\xa1\x42" "v\xea\xb0\xffGh\x8aY@\xc3\x0\x85\x14$\xea\x93L\xd5\"\x7iG2Xz\xe[\x1kj\xde\x30" "\xbe(\x87\xb8\xed\x2m-\xf4\xc5\x39\xd1\xa0\x30\x8b\xb\x9w\xb\xe6\x1d\xdb\xa0\xfb" " \x92o\x7\x39\x9a\xe6\xc9\xc9\x37@\x1e\x1e\x16\r\x3u\xa8\x9e\x87\x9\x17\xde<\xf4" "\x96Y}\"\xa8\xacg\x13\x8d\x43\x13PxA\xae$\xba,\xc\xf8\xfc\x1e\xfc\x1a\xc5\xb8\xbb" "Q\xefkP\xb3@\x86 \x17u\x9e\xe1t\xb4\xbc\xca\x90\x87\xf5\xc4\x63\x19\x84\x7\xf4\x1d" "\xf4\xe\xad\xbf\xbd\xd7\xd7\x37Y\xcc\x41\xa9\xa4P;\xea" "&\xd1\xed\xbe\xd3\xff\x45\xc\x9a\xd2\x1f\xc0OOi\xf6q~\xd8\x9e\xe\xf9gb\xe\xdb\x85" "\x9b\xb0\xd7\xef\xa3\xb0\xed+\xa5\xe4\xd5\xba \xeQ\xd9\x87\xb0P,\xa4\xb2\x1fn\xfe" "\xc5\xd2\xf4qhO\xaeq0\xea\xe3\xe4\xed\x90\x6\xee\\\xb1Nk\x98\x83\x62(r\xb1\xbeU\xe0" "\x9b\xe1\xe4\x9f;\xb6\xbf\x7\x63\xcX\xc5\x98V\xf2=\x1f`\xd4\x45\x89\xe7\xc9Y!\x7" "\x19\xf7\xe9 \xfa\x6z\xd3\x43?\xddI\xf(\xc9\x4\x8c\xd9\xfaJ\xa4=\x13N0X\x13z\x9\x18" "N\xe4\xff\x44\x12\xcf\xc2\x4\xffJ\x99u\xb9j\xf8\xbe\x17\x3\x1f\xfe\x14\x83\x4\xaf" "\x1cN\x1-r\xfa\x65\xba\xaa\x96\xeeW\x9a\xb5H\xec\"\xd8\xa4\xe\x8f\xcb,.\xfa\xb5)" "\x84\xc7\x7s\x9S\xf8\x66\xbf\xfc\x31\xa8\x1e@B}\xce\xc5)\xa3\xbe\"\xf7w.&\xec\xf" "\xbc&\xeb\xc4\xa3\xb5\x61\xefu\xe9,wv\x84\xea{8\xd3=\x99\xd8\xf7\xceN\xbb\xe1\xef" "6\xce\xc7\x12`Y!\xe0\xcc\x42!\xfs\x8br\xb8\xb0n,i\x9djxcy\xa2\xfe\xce\xa0y\x91uV" "\x9f\xe7v\x0\xfd?\xa6\x61\xf5\xe9\xd8\xe6&\x4\xf5\x9c\x33\x18\xcfS\xe2\xfa\xfdh\xfc" "\xe5\x44\x8f/\x4\xc3\xa5[\x84\xae\xe7\xf2\xbb\x12\x95\x30\x4\xaa;h\xf8\x12\xce\x7f" "%\xcf/\x8a\x9\x2\xd3\x8dsZ\xb\x9e\xfcGR\xaa?\xe8\"\":r''c\xd6IjN\x82\x63K\x8d]fl" "\"\xc8\xf3m?\xa2\\\xb4\x9c\xd8\xcbW\xa6\xac{H\xd6\x97\x90W\x80\x1e]\xe9\x1bP\xdd" "_\xad\x99\x99\x99{c\x86;s\xbb\x96\x94Y\x8d\xbf\xe2W\x5\xb1\xdd\x46h\x91\x9U\xa5\xe6" "\x12\x87iD\x8d\x35\xdc\xe\xd2\x1f\xb4\xc0\x17\xd1\xc\xdc\xd5\xd2K8lA\xe2\xd0o><\x10" "^\xda\xde\xfd\xa6\xa5\xffn\x10\x16\x13\xbe\x39\xba^\xf5\x11y>\x96\xa5\xaa\xec\xd4" "\x1e\xe1\xbfK\x85\xa1\x44\xe1G\xed\xec\xc3m\xfd\xec\x82\xcT\xbcZ\xe1{\x13\x8b\xff" "\xf4\xa3\xb]\x10\xb3\x7\x63\xcd\x94I5\xbf}>\xc0\xae\x83\x96\xf1\xbd\xf0h\xb5\x19" "Q\xd2\xa7\xde\xac\xaa\xde\x5=\n\xae\xc5\x9\xd2}2mUb\xc6\x86*\x3\x82\x96`\xae\x96~\xca\x18" "\xebK\xfe\x4\x19\x1d\xdb\xa3\xe0?\xb6\xdb\xab\x9\xec\xc0\x1c\x66\xa4K\xfa\x7t3\xa0" "H\xb7\x41\xd9\x8a\x4\xf7\xea^}1\x4\xe4\xd6\xb1\xb4,\xf3\x8f_H!\xebg2\xc6\xde\xf7" "\xe2\xb0g\xc9\xee,\xb4\xac\x2<\xa4\xc3)\xd3\x81\xa1\xa7Q\x1e\xcc\x33\xb4\xbbK\xd3" "&s\x91\xba^J\x88\xd8H)\xc5\x41\x38-N\xc4\xee\xe3\xa4h?|\xb\xad?!\x9a:\xb5\xd0\xf5" "\xa7\xdc;\xe3\x13\xdd\xd4\x34%]\x12\x99\nv)\xc7\x12\xa5[s.\xc7\x65\x1b_\xa6\x1f\xbc" "l5\xe3\xf2\xb7\xe2\xc3\xb6+r\xc8}\xf0\xa6:\xac\xe3\xa2\xc7?\x9@\x9d\x0-\x83\x11Z\xf1\x34{\x99\x9" "\xd0\x8c\rT{fCFm\x11\x9f\x42\x96\x9OL\xef\n\x10\xe\xb2<\xbd\x1c\xdc|\xf6\xe8\xbf" "#c\xa0\x42\xc6M\x82\x34\xbe\xb4\xbb\xdd\x32\x9d\x62\xc\x99\xa6\\V\x4'w\x80\xc3\x43" "\xb5\x1f\x84)\x8\xef\x1e\x66\xb1%\xb6S\x87\x88[\xc1R\xb5\x5\x66\xda\x9c\x8bq\xce" "6\xf}rH!\xc5\xa0o\x98\xb3\xd5@\x8c\x1!~H=-@\x6;\xd2\xbe|D\x7f\xbe\xb3\x98\xe0P\xe6" "\x8\xd2\xdb\xfc\x8a\xe8\xb7QmV\xa8W\x85\xa6\xa6;\xa1\xd5Y\x97n\x8ci\x99\x38\x63\x1b" "\x10\xb5\xe3\x14I:F\xed\xd7\xdf\x42\x9a\x7fu)\x10\x1e\x32\xc5\x7f\x8\xbb\xa5\xbb" "n\x98\x6Q\xc\xc3\x9e\x14\xce\x46\xdd\xb6&\xfdJ[\xe\x89\x44\x44\x9\xb4#4\xe7\xd6\xa5" "\x87\x83m\x1c\xb0\xc0\x96);\r\xcf\xec\x87\xd7=\xc4\xe9\xf9\r\xdc,1*\x2\x1a\xf0[\x95" "\xf3+\xdcK\x96\x16\xfbm\xb1\x44\xd7j*)\xe8\xcd\xe2w\xa7\x3\x36 \x88\xa7m\xb6\x41" "<\x84\x6\x61\xb3\xaa\xe4^\xe5\x62\x31Xl!\xf8\xff\xe8|0\xc2\xf0\xbk\x95Sp\x94\x97" "?T\xa5\xc1Su\xe6T\x9f\xe4^.\x2\xbo\xc5\xf6$\xe8\xc3\xa9\xb3\rs\xd0\xa3\x97\xe5\xa3" "-\xe1\x92\n\x15\x99{\"\x2v\xba;\x9dp\x19%Z\x88\x45U\xb7{\xc2|\x12\x41\xaf\n\xf4\xd6" "\x1dl\x8aN\xcd\xbb\x15\x8d\x86\xe2\x1e\xed\xe3\xcck(\x90\xbq\xac\\\x94^Yl\x9a\x85" "F\xab\x1\x12_\x8a\xb5\xfb\x17\xc9\xcc\xf7Z\x8a\x33J\xab\xd7pZ-\xf1\x16\\\x97\xc1" "~\xd6x\xa1\xaa@\xfd\xe4\xf4\xa6+P0\x99r\x7f\xefZ\xfc\x32\x80|\x5\x18\x66\xcao'\xac" "G)\xac\x1\x91\xed\xf0\x2\x81\xa9\x14\x84n\xa0\x85&\xec\ris\x1(Q\xe8u0Y\x1b\x16\x8b" "l\xd6\x9b\xf\x44\xa4P\x88\xee,\xed]S\xe0^\x1b\xa5\x63\x35\x1c\x99\"\"\xf2:X\xa2k" "\xe2\xdc\xec\x43\xce\x16\xe2\x81\xf7\x91\x84\xfd\xa1\xc9\xe4\x6\x4\x41'\x9\x1dW(" "\xd7\xd4\ri\x6\xe0\xf5(\xe1-\x8f\x82\xa6\xb1u\xe3\x9b\xba\xb4Z\x96S\xb2\xb4\xbb\xe4" "h\x1d\xa4\x93\xb3\xc1j \xe5\x64v\x86\xbe[\x7\xe7\xf4\x10I\xa2\x64K\xef\xe2\x8a\x10" "\xeO\xf5\xee\x34\x10_sn!o\xe3\xe8\x1a\x1e}*\xb8\xad\x82;\xd5\x37\xc4\xb6\xc2\xbd" "\x9e\xe4\x6\x16q\x17\xc8\xb3\xaf\xd2\xca\xaa\x36Y_\xe3S\xaf\x33\xd3\x6\x6\xdb\x99" "/M\xcc\x8ct\xe1\xc1\xb5\xea\xe\xb4r/l\x9d\n\xb7\xaaND\xe6\x1d\x64\xea\x9c\xc3\xef" "cz\xaeT\r-\n\xc7\xd9\xcb-\xab\xb1\xa3\xbe\x34\x63\x36\x1\xa5- m\xb3_t\xf1H\x1aT\xcd" "\xee\xf2\xff\x63\xbb\x31\x2\x83\x61\x9d\xcd{-R\x8|\xfe\x95{\x93\x1ey&\xef\xb5\xc4" "{\xed\x86O]\xd8\xe7\xe5X:\xd6k4\xeeQ3\xdf\xd7\xb8\x8c\x96U\xf1\x96\xd4\xd5\xc2\xd0" "oG\x8c\x89\\\x46\xa2\x7f\x1e\xf8\x2\xf5\x12\x64w\xfa@\x7f\x80\xd4\xd2\xcbU\x11\x9b" "\x8c\xd8r'/\n\xe8\x8e\xc5\xc3\x15\xaa\x46\x9e\x37\xcbz\xf9i\xd8\x88hQBj\xe3\xe6\xed" "[\xc4H\x13_\xccX(/\xb2\x38g%c\xa9o \xc2\xd3\x8dknC\x1a\xf7\x6\xef\xe5\x94Og\\\xd1" "i\x9e\xcc\x46\x44\x45\x89\xb0\xb4\xab\x41\xc5\x38{\x1a\xe8\x44\x39\x9c\xcb\xaf\xe4" "\xcdwr\xd9tH\xea\xa4\x2\xcb\xdf\x9f}\xf5P\xaa\xb5MG\xe2\xf6}u\xf2\xc3\x64\x31\x8f" "\xad\x9d\x8\xe4}\x15\x38\xc7\xaf\x6\xd6\x1\xf0\xc3\x1c\xa9)XI\xf8\x9\xe6\xea\x17" "\xa1\x13\x88;^\x19+\xa7\xeb?\x9a\xckU\x15\x9eg\xc0\xc0\x85\xfe|\xe9\xcd\xeeH\x9f" "\xbc\xa0\x66-/\xf1\xa6\xd5_\x8a\x1e\xe8}\xc\xac;F\xbbO\x8f\xb5\x8d\xfb,\xf0\x46\xf5" "0s*\xf1\xcb \xeb\xbd\xa8\n\xdb\xb9]\xff~\xc2\x8bW5_\xfd\xd4+\xaa{\xb3k'~lv\xf1\xb1" "\xda\x39\xc\x37\x88\xe4/\xdd\xd3\x93\x17\x85\x62m\xb5.\x94\x6\xd8\x87\xad\xcc\xee" "\xc2\xacn\xe7\x36\xbc\xf3\x45J\x8bQ\x7\x18\xfd\xf\x42\x9a>\x6\xdc>\xc9\xde\x4{\xd9" "\xe6\x1\x86\x65{\x12Rd|\xbf\x37%v{\x14?\xf9\xbd\xc0\xa7\xb5\x8a\xda\x9d\x94t^u\xb0" "L\xbc\xddu^,\x1e&\xb0\xd6\xf8\xa7#\xa0N\x4\xba\xc4\x94\xb3\x65\x91\xae\xa5\xc8\xc7" "\xa8\x38\x8f\xb8>$o\x98?P\x9a\xe\x91\x17\xda\xb\xd2\x10x\xc3\xbf\xf2\x45\xb5\xe4" "x\xa2\xb7\x33\x1eO<\xbd\xde\xf0\xd2\x0 \x8\x11\x87\xc2\xc9\xdd\nY\x1a\x38\xb\xf3" "\xf6\x95m{\x8d\x65\xdc\x13\xa2\xd5\x86\xda\x84q:\xe5[tXS\xaa\x9\xb3\xf3\xb5=\xe3" "\x93\xc0=L\x8f\xdd\xd8)\xd8@\x9c\x41\xe9g\xb6Z\x0i\xf\x95(\xcb\x18\xb3\xfb\x94\xb5" "Y\xc8j\x82\xf\x17\x92\xe5\x8b\xbc\x45\xae\xdc\x2\xeb\xbf\xa0\x84\xc\x8er\x98\x1e" "\xcc\xa6\x98\x8b{\xeb\x93\x12\xe8\x63\x6KXa\x8e\xb1\xcf\xf2kM\xdbR\xa5j\xc4\xc3\x64" "\xe3\xe\xfc !\x1do\x10&\"\xa5\x37\x8c\xff\x95\xb\x1b\x38\xb8\x85$#\xeb\xaeQ\xa6\x5" "HuQ\xe4\xce\x99HM\xf7\x62w\x91{\xee\x19\x33\xa1\"o\xa1\x2kmtW\xbd\x36\x92\x80y\xc5" "\xfc+\xcc(\xae\xc9\x96g\xd1\x1\x8d\xa5<\x90o\"\xb7\x1cR\xc9\xee=\xc4\xe7$9\x15W\x17" "\xa6\xd4\x45\x10\xca+\xa6\x14\x46\x1\xbf\xa6u\xc5%:DC\xe1\x83P\xc6\xb7\xa9\xbc\x7" "N\x8a\xc9s\xe4\xb6\x19V*C\xa1;\xe8\xd3\x1e\x34\xaf\x31\xdap\xcf\x8b\xc3\x99\x9\xab" "\x80\xc0>\r\xc7\xe8\x42[\x1f\xdf\xba\x89\x8e\x35*\xaa\n\x1cL8\xc7\x11\xb3\xc3\xac" "`\xa7r^\x95\x8c\x9t\x90\x8f\xa3\r\x6 \xb\xfb\x84\xb\x90\x89\xe9\xca\xba\xf=\x9b\x0" "#%\x16\xad\xcf%.\xa6\xb7<\x17\x8e\x62X\xebjE\r)\xbe\x8c\xf6\xf6n!\xd5\x30\x9f\xb" "u\xb4\x9f\xe6\xab\xabJ\xb0~H\xdd\xf7x\xe4\xfb\xe1\x97H\x12\x46\xd6\x80\xe9\x66|}" "\xd1\xe4 %}\xb7\x62\xdf\xfexv\xf6\xf8\xe3\x5\xd6h\xcf\x44V\xb9\xa0\xb8\xec\xc6\xe0" "\x1f\xf9s\x14OU'\xa1\xe6\x6]/g\x97\xfc:\xcc\xb8\x8e^R\xdd\xe2!FO\xd7x#\xce\xf7\xa0" "Y*@\x8c\xc0\xeb\x37r[\xb3\x39\xee\xa0\xf7\x92\x10W\x88\xb2\xff\x98\x14\x84\xd6\x94" "\x8d\x15\xbaQ\xef\xe3\xea\xc6\x0\xc4\x2\xb6\xac\xe1m\x14_\x96\xeeu2Ji\xa7|\xf8\xdc" "C&zV\xcb\xdf\xa1V\x90=#\x92\x39:\x8f\x12\xf3>\xf3?\x9b\x9a\xa7\xa9\xd9Z\xdf\x7f#" "h\xa3M,G\xba\xcc\x93\xb2\xa3\xa9\n\x12`\xfc:3B\x18\xbf\xec\xcd\xed\x1d\x7f\x41\x82" "\xcc\xaa\x98y\xf6\xe0\x6\xf2\xfbp \xe1\xd1\x91]O\xb1,\xf2\x6\x95\x7Rv\xd2~\xce\x0" "(e\xfa\xf6\x6\x1e\xdb\x14\xd1[\xb4\x34\xe0q\x97\xa4\xa1\x42\xea\x65\x9c$\x9\x80\x88" "\xbew~\xaf\xbb\xe5\xf)\x2\xc1/o\xa8\xfd\xb5|\xe4\x85$B\xbf\xe1j%\xa3\xae\x9a\x1b" "\xf3$\x86\xcc\x4HS/S\xf8!y\xeb\xcf\xf\xdc\xd7\xeb\x36\xea\x8bz\xbc\xbd\x95\xa6\xe6" "z\xee\x38\x82=\xc6\x32\x38\x62)Ds\x98.\xee\xf3\xfb>\xb5\x10\x18:~\x17\xe3\xf8{\x1" ",H^\xb8\xeb\x87`\x0{\xbd\x1d\xea\xec\x8\x10l\xda\xb5\x90\x32\xce\x18\xaa\xe\x81\xef" "\xbe\x9\xc8z\x9d\xfa\x3\xe6vO\xbb\xae\x8\xe7 !\xaa\x9a\xea\x46\xa4\x80@\xeaH\xe6" "j\x2\x86t}\xc4\x63oh\x6\x6\xaa\xf2\x9b\xccQ\x94?\xb0\x9b\x80\\\xaf\x15\x34\xa6[\xe2" "g\xb9O\x14\x89\xadn\x81\x1\xb9\x10\x1b\xed\xba\xca\x87\xf\xc9Y\xce(\xa2\xf8N\x2\xa8" "\x84q\xee\xb5\x3\xd3\x6\xb1\x1f\xfc\xd9\x98\xca>C\x91\xc1\x88\xf6\xd2\xc7\xccn\x82" "GZ\xa5\xc3u\xd2\xd1X/\x98\xfb\xa2\x16\x8cK\xf2]\xc8\xe2\xabi\xa5/\xa5\x11KQ\x9d\x15" "\x99\xfc\xdfR\x1b\xb4\x0\x8a\xcd\xc9\x1c\x61\x64\xcf?\xe4\xcbw\xb7\x9e\xc7Kb\x5>" "]Tl\xe1\xfc\xfc\x38\xe<\xc\xad\xcf\xd0\x12\xb^l5\x9f\xdc*A\x89\xd6\x95N\xc7\xd3U" "\x10\xeb\x9\xd5\xd3\x5\xc9nH$1P\\\x91sK\x96]w>\x9e\x37yyQ\xce\x86\xd4\xe2\xdbv\x7" "Wt\xbc\x94\xda\x13\x35@\xd5\x66G\xeg\x8d\x8e\x92\xcb\xc9\x7fV|\x8e=\xa2\x8f\x9er" "\xc\x80}\x92G^\xa4\xb5\xa8\xb0\x8a{N\xa4.w\xa9y\xb0\x38\xe\xb9\xd1hsT\x6y\\\xe1G" "\n\xe\xb3\x15\xe9\x94Z\xfc\x15\xe8\x0Z'0G\x99\x43Ku\xb6\x6m\x5\x1eq+\x9b\x92\xd8" "*\xb3\xfb\x89\x7\xc5\xca\xdbu\xebYs0\xfa~\xed\xd1\x64Rp\xa8\xc`**\xee\xa0\x63\xa0" "\xaf\x30T\xd2\x8c\xab\x34^%\xc6\x17\x1d\xa1\xf0`\nK{\xb1\xfd@\xe4\xae\xea\xac\x89" "A`\x9\xe9\x91\xb9\xc5I\xce=\x9e(\xfaX3\x2\xf2\x2\x35\xab|\x4\xd9M\x6\x46" "\xb1\xeeK(X\xcf\x97\x97\xa2\x83\xa9\xf0\xb2\xc9\xb3i_\xaf\x0\x84]}\xa4\x8\xf5\xcd" "UsJ\xd7M\x16\xe\x97\x43-=\x5\x98\x14x\xedsauD\x88\xa5\xccN?z\xe1\xa3s\xfc+\xb3\x3" " \xae\xb8\xba\xf4(d\xed\x7f\xcb@\"\xaf\xa9\x8*\x7f\r@{\x17\xa7\xd3^O~w\xb\x7f\xfc" "\x3\xff@\x91\xee\x9a\x9dO\xef.\x8ct_25\x8d\x89\xf0'\x82\xb2\xe5\xb&\\hE\\q(+\x98" "\xcQ\xfe\xc4\xfa~\x85\xad\x61\x90\x98\x62)\\\xd9\xf\xc\xa7\xef\xc0\x83=\x9ep6\x1f" "i\xa8:S%\xca\xe0\x13,\x90\x7n\xfb\x41o\xda&E\xf3G\xf9\xe2\x9f~; \x9\x80\xdc\x32\x13" "\xbe\xbco\xfd\\\x45\x9b\x8c\xad\xd0\xeeS\x3@\xf8\x34}\xb6'\xc7\xa0nh G\xa8L6M\x7" "J3\xf\xa9\x1a\xa3 ;\x1e\xc8\xf8\xa9l\xc9\xc5\xb\x36\xbfu\x16\xb8\xb3\xdf\xb6\xfc" "\xfePO\xfb\x37\x42*]+\xaf\x1\xceR\x97\xc3\x8b\xb\xc1\xa7\xec>5p\xc1\xde\xc0\x8a\xec" "y\x91\xba,\x89\x7\xd2\x9r'\x8d.\xdb\x5.@\xef\xff\x95\x38\xcf\xaa\x17\xfc\xa6\xa5" "\xc\"\xcd\xe6\xa2\x9c:\xddt:r\x0\xa4\xd8\x99v$\xe1\xf7s,\x81\x35\x46\xf4\xbf\xf9" "\xf0\x1cZ\x94\x4\xe8j+\x18\xf7\xb6u\x9b(x\xaaO\x8a\x8f\xf5[6\xa4q\xbe\x7f\x5\xd5" "\x88J\xa0\xbf\x8\x8b\x87\x66Y\x1\xcc\xf3^\x8c\xcd\xce\x86\x81\x1c\\NOU\xca&\xce/" "\x10\xb6g\xdf\xd5\xe`c\xe9\x91M\x83@\xd9S;\xc0\xcc\xc8\xeb\xce\x39\xf4]>D.\xeaJ\x99" "\xa7>[T\xe8\x89i\xd9\xd7\xef\x2)\x8c@\xf6\x0\xbb\xa2t\xa9\x11\xcf\x19S,\xd0\x14G" "\xf0]\x1e\x42L\xe6TE\x86\x61\xd9\x8dL\xdc\x1atr$\xe9\xe`\x9c?\xaf\x44\xbb)\xcb\xdd" "\x1e\x9a\x97[G^%\xef\x46\x44\x7f\x43\x80\x9b\xa7\"\x92T\xc\xf8\x1d\xe6\xccu\x1a\xa9" "e\x14'\x5\x8%$b\x91\x84\xeO\x1a\x9cjE+\xda|\xe2\x9d\x9e\xf6\x8d\x0\x7\xe7!}\xfd\xa8" "\xcc\xcb@\x5\x30\x81\xc4\xe9\x12\xabJ{\xc5\x64/\x89\x85g\xfc\x16\x4\xc9_5\xd8\x85" "+\x7f\xe5\xf8|\xaa\xf2Gb>\xb6\xaaS4-#\x1aPG\xd8-\xcd\x33\xc9k\x91\x97\xb5\xa4\x1d" "\x82\xac\xf5S\xf3\x18o\xab\x1^\x9f\xb2\x1ch\x1a\xc8t\xd2\x36\xc9\x38/\x13\xfeg-\xde" "\xe5\x33\x9\xb5\xa4j\x9e\xff\x19kBn!\xdd\xd3\x97\x84\xac\xa3\xf8\xb9\x5\x88\xac\x9b" "\x4\xb9\x93S4\x83\xac\xb6\xe3\x12Z]\x8e\x95\x65\xb\x85\x8dM\xd0\x17\x4\x38\x88\x90" "\xb2o\x1ep|\xc1\x17\x8fT]\xc4\xa3\xcd\xf2\x1a\x97\x30\xd3\xe6\xd2\x9b`\x0\x66\x31" "\xeI\xbeP\x18\x13o\xba\xbc\xb0(y\x9bt\xf7\xf1\\G\xaf\xbe\x30\xe1K\xc4\x13\x35$P\xb3" "\xfc\x87\x41\x84\xc5\xe1(\x3)\x18\x84[\x3\x9b\xf2\xdf\xe2\x9b\xa8z/%\xa6\x1ek\xef" "d\xf2\xd0\x64\xb1\xcd\x13\xdc\xa3\xd3\x85\x44=\xf6\xd6m\xdb\xcb\xf9\xad\x97t\xab" "\xfd\xff\xc0_\x12'\x15\x9b\x8a\xcc\x8d\xaf|\xc7q>\x7fv:\xc8\x99\xb0\x66h:?\xd1N\xd9" "\xc7\x8e\x18\x15\xfe\x88\xa7\x92j\x8d;\xe3\x44\x81\xb9\x1f\xeb\xb4\xc2\xafV\x9e\x87" "\r\xa8\xf9\x64\xa7\x8b\x46*R\xc9\xa9q\xcf\xf4V\n\x9a\x46/\x95\xd4\x9fu\x97r\xefu" "\xcc\x14i\xfc\xc6\x1c\x9d\xddl\x90\xe6\x82s\xe1\xb0$\x93\xbf\x38\xff\x9c\x11Mu\xe7" "\xb8I%$\x98\x61'^%\x8\x85j\x86\xdf\x8e#\xf5\x90\xf2\xe5\xa1\xd2\xfb\x10\xdbs\xff" "\xa3]\xdd\xbf\x1a\xbb\x0,\x93{\xa9n\xff\xcb\x82\x8c{\xadn\xba\x66\xae\x93\x37\xac" "R\x10\x37\x8c\x34G\xd9\xb3X\xa6\xc4I\xca\x1c\xa8'\x12\xc4\"\x17\x38\x93\xb9`Z?\x1f" "\xaa\x92\x94n\xda\x7f\xb2\xb8\xdd\x8e\xd5\xf4\xe5\xc6\xe\xfc\xdf\x38\xa9'9\xe1l\xe1" "\x82\xffww)QK52e\xce!\xfb\xb4\x87\x10\x33\x83\x4\x31\xeerB \x84\xa6}\xea\x90.\xe" "\xef\x97\xdd\xf9U\x92Q\x13\xef\xf9T\x8c\x9f\x95\x63%\xa1\xef\x9d\xc7]\x5p\xf4*\xd1" "O}\xbd\x9\xb2W\x83\x32\xbcp\xb0\xee\x8ag]\x8c\x0\xe2\x45uv\xaa*(\xd8&\x86w<\xcc|" "\x89\x42<\xaa\x64\x11\xfaY\xff\xe0\x1e\x4\xf0K\x97\xb3\"\x8\x11\x5\xbd\xaa~\x9\xff" "\x85\xf9\xe7\xcf\x33umJ~%B\x95\xc\xe2\xae:\xca\xa6,[O\x10rF#pgl%\xc4\x13\xb1\x38" "\x88\x90\xcb\xf6L\xc9\xe2\x1aXD\xe3\x7\x91\xe9\xcf\x85M\xbfm\xc8\x95/jb\x9e\xc0\x8c" "\xec\x95\xdc\x9f\xa1\xeb\x16jP\xd1\x35\x3\xcc\x94\xb4\xd9\xbe\xf\xa1\xf9\r\x8c\x91" "O\x83\xferh\x6\xbeT\x92\x83z\xbd!\x1c\x18\xf8.\xe4\xed\xf9\x85\xe1-\xf8s\xd9\xbP" "\xd4o\x1b\xde.\xba\x9d\x18#\xb4\x8e\x8cg\xf8\xe3\x45&\x0\x46k\xe3\x9c\x9b\n\xb5\xea" "U\xa9\xb6\xd5\x13\xb0%\xe1\x99\xce\xb3\xd3\xee\xd9\xf7\xb1-H\x16\xc1\x37\x61\x80" "\xf5\xe3R{2l\xf1\x12\xd1\x38\xbc\x92\\g\xb4\x7\x98\x32\xdc\x8n,S\x9d\xe0?r\xfa\xb6" "\xf0\x9c\x92\xb8\xe8\xac\xcf.\xd7j_\x5RA\xc2\x5\xf1\x12hdIIM\xe6\x9dm\xd0\x13\x0" "&\x9b\x1b\x5\x44Vp<.\x82\xd8\x39\xb\xc7\xd4k\x87\xc2\xf0.e\xaeJ\x1dGH\xbf\xf\x1\xcd" "\xe3(\xbd\xb\xef\xbd\x31\xc3\xbf\x30\xca\x9\xfb<\x18RK\xc7\xf6\x1c\xf2\xe9|\xec\x85" "\x4[\xf8\xea\x96\x9\xf3\x64N\xe7~\xf0\x1b\xf5\xf3\xd8\xdc\x1e\x7f\xf0\x13p\xc4\xd0" "\x7\xfc\xd0n{\xb\r\x1f\xa1\x90xN\x9c^L\x93\x32L\xf4\xfe^\xedx\x11\x96*\xd0\x8a\x13" "\xef\xf\xd2\x99\x7\x37\xfe\x1\xcd\xa0 \x10QS`\x91\x16\xce`Vt\xd0G\xb\x43\x8ds\xf3" "\xdd\x61\xf3\xb0\x5\x9fq\xa2\x91\xf3,\xf4\x63\xc3\n\xe3\x8c \xd2\xf4\xcdR\xbf/\xde" "\xd7LY\xf1\x9d|\xdb\x97\xa0\xdb\xfc\xd1\x38w\xae@#\xcf\x7f\xf1\xdb\x8dvU\xfd\xe4" "o:\xab\xf9_\\J0P\xc3\xf9\xc3V5\x92_\x6\xe8 \xe3X\x99\x83\x90\x43\xfa\x41kO\xc2\x84" "\xec>m\xcf\xd8\xb3\x5\x66k\x93\xa0r\xe2\x63\xd0\xd2\xb1\xdd\x85Y:gB\x1\x9b\x9a\xaa" "\x98\x9bs\x7\xaf\xbd\xfe\xee\xb6\xe1\xc2\x42\x96h\xc1w\xaa\xa0\xaa/N'I[\x18\x18\x8e" "\xb7{\x93\xf3sH\xe5\xe9\xf1\xc3\xde\x96\x1b[g\xb1\x9\x30]\x84\xb1\x17\x8d\x35v\x9a" "\xf4\xab\x92\x8c/\xf5w?\xa7\xbd\x0\xect5\x87\xda\\L\xbc\x19\xbd<\xbcO|\x15\x46\x2" "\x13\xc9\x10;\xf7\xe1\xbc\xfd\x8f\x38\x99\x42/\x83\x46\x1fz\x8c\xb\x9d\x11\x1f\x64" "f\x19U\xf4\xbd\xba(x4\x9\xf6\xcf]T\xf8\xc6!\x8e\x7\x97\xa0\x34p hB:K\xfc\x1b\x19" "\xd0\xbe\x33m\x99\x0\x44\xf0\x84\x46j+-A\x98Gn\xec\xd1\x30\x9e,0\xe3>\x8d\xb6 /\xd3" "\x1c\x14\x84\xf5\x31\x5h\x16\xcd%\xb8\xcKn\xd9\xb1\xff\xde`\x8d\xdd\x16\x84\x45\xe" "\xaa\xf4]\x81<\xaa\xf9\x38\xe4\xdd\xf3\xed\xe9$\xa2,\x80\x14\xa2\x63\x31U\xd9\xe" "\xe2:\xcd\x2\xcc\xd3\x7f\xe\x99\x10\x80\x18\x1\x91\x7\x9e\xb3\x30>\xc6\xc6\x85h]" "\xeb\xe2\xedg\xef\xd2\x46\x1a\xbdp$\x2\xa4'\x7f\xd0\x63\x81\xf9\x16[\x87/\xd8w;\xe6\xd2\x63+#\x97\x63\xe4\x63#\x7\xb3 xY\xb2" "\xbb\x1c\xa3\x9d\x13\xbc'c\xd1'3\x9e\xf4\xae\"\xe9\x1a\xdb\x9c\xb0\xb6\xc6\x14|\xee" "\xa0y\x96\xaf\xaa\xfa\x19\xe0\xbf\xdf\xdf\x9e\xb0\xac\x43\xf7=\x80\xafrE\xd8\xc[" "\x3\x4~N\x5`\xfc\xb8\x32\xee\x1f\x8e\xf0-@T\xe7(y\xa3\xfd\x64\xfe\xeb\xfc\xadu\n" "\xbc\x65uXZ\xd5\x9dz!h\x1e\xe4'\x5*\xb9\\\xcb\x12\x83\xd2\xf7P\xbd\xcf\xca\xf1\xe6" "ni\xc9\x90\x5\x14\x12k\x90\xab\xc6\x9e\xfe\\\x97\x61\x66\xb8\xc4\xc0\xe1\x8f\x94" "\xcc\xb0\x14\xa3\x3\xc6\x1b\x80)\x8c\x66\x1a\x66\x42\xf3\xaf\x81vn}\xc6\xd6\x99\xa7" "x\xf\x93\xa5\x38\x86\x33I\xdf\xf7(\xa0U\x7f\x30\xf9\\\xc2\xb3\x13\xdf\xc4\xc8\xf1" ".*\x94\xc9\xe3\xf3$\xbe\x1b\x98\x14+\x10o\x19\xe\x30x;\x8X\xaaQ\xe9\xca#\r\xd6I\x88" ";o|*\x8d\xba\xe3\x99\x8\xb3K`\xa6{\x14sP\xbf\x8a\xe7pa\x9f\x34\xf9\xc6\x4\xc7\x0" "\x86\xc8\xae\xe4&\xceZ\x92\xfa\x92'\xfbR\xba\x82\xfb\x17\xcf\xad'\xee\xb2\xb5\xef" "\xd0\xc7\x6\xf1\x46-\x1$G\xae?h71\x12\x83\xd7\xab\xc3\xe8\x66\xfch\x95}<\xb4\xf8" "au\xc9$!\x8a\xa9_u\x93\xc4'z}\x9\x38\x86\x9c.\x7\xf1\x4\x46\xf2\xd4^\xa9\xa2\x84" "\x97!\xdeT\x10V\x11\xb0\x86\x98\x8d\xbdV\xffr\xe8\\M\x1\xad\xdb\xaa\xc1\xb0S\xf9" "\xa4}\xda\"\xdd\xc6\xf0\x1e\xc9\x8d\xf4\xctt?Y\xd1I\xeb\x35\xb7\x1eU\xe7K[\xab\xd3" "l\xeJ$\xefZ\xfd\xb7\xdd\x38#\xd7%\xe2\x94\x98jf\xbdT\\\xce\xccP\x10\xf8\xa6\xef." "\xb6\x4zt\xe6\x8c\xf2\x62;l\xe8Nj\xb\x37\x93?\xd2I\x99\x1b\x1\x8b\xb\x62\x17\x97" "P2p\xc\x81\xaa\xe0r/]\x91VT\xcb\x99\x91\xc8\n\x61\x62[7B\xe7li*\x4*\xe4/\xb7\xf4" "\xed\x35_l?\xcf\xfd*\xccyM\xe9\xe0\x8e\x9d\xbb\xd3\x95Yb\r(\x19\xa2>\x85\xf7I\x8f" "\x0v\xb6#\xb\x7f\x93\xde\x99&D(\xad\xe3\xff\x32r\xba\xcf\xd3\xb5/\xfd\x92(\xe\x1d" "\x19\x37\x97\x1erC\xef\xf8\x3\x84\x83\xde\x1a\xc2\xcc\x0\xf\xb3\x94\x31\\\x35\xda" "Do\x9\x8c\xe7.\x8a?\x89*qQD&\xab\xbek\xae\xf9\xec\xedv\xff\x16\xbf\xb3\xe\x86G\xf0" "\xe6\xcag\xa9\x87\x35<_\x88H\xe0\x36\xb5I\x99\xb1\rlx\x99\x80\x9f\xfc\x66\x11v\x89" "-\x7f\xfd\x14=\xc1\xb0\x97\x8a\xd2\xe6\x81o\xcc^\xde\xfeQ\xb6\x9\xf1\x36Ji\x1c\xd8" "\x80{N\x96\x34\x8e\x98\x42\xee\\$W\xe2\x66\x31\x8dSb\xd7\x8c\x17\xb3\x3\xd4\xcd\xa2" "\xf8\xdc\x91q_\r\xde[v\xc3\x86\x36`Z\x1a\x15\xd1\xbe\x95\xd9\xf2?\x12\xfa\xb5\xe4" "\x80\xde\xd3\xfe\xd2YJS\xf8R\x1b\x2*\xffL\x1a\xb2\xb4K\x1f\xbbl\x0(li7^\x9e\xb\xe7" "0gf\x87\xff`\xd6\xf2\xf5o\x8au9^\x15\xceTZ\n\x1e_\xb6\x8d\xcc-\xdb\x64\x7f\xe9\xdb" "ai\xaf\x98H)\x85\x9b\xc4\"s\xa3Jh\x6\xb8\x1d|\xa4\xde\xd3\x92,\xb3\xe9\r\x9ci\x9d" "Wi\x4\x13-\x84\xc6\x9e\xf7\x93\x9{\xc9\xcY\xa1\x3$\x9a\xc4\x9f\xeai0\x4\x2\xe5\xdb" "u\xb1\xd6\xe3n\xdes\x9d\x91\xbcm\x83\x4-\xb4\xec\xaf^h\xe7\x8b\xfe\x0\x9ajeI\xbf" "\xb7\xd5\x38\xfaZ\xc8\xe'\x16\x36\x80\xd9Q\xa4\x8a\xa5\x42\x9\x35\xd7\x1b\x66$K\xbd" "\xf4\xb2\x65\x86\x97\x61\xc7\xae\xd0(B\x98#\xf5\x30\x13\x8c\xf1~\x85\x1f\xd3>\xef" "\xcf\x1c\xb7\xe3\xa5W\x98\xf1IY_\x94m\xae\x33?7\xab\x8c\xea\x88\x46\xab\x80\xb0\xfd" "5D\x4\xb5\xe5\xea\xc4\xcf\xe7\xe6\xc3\xe7\xa6\x63\x11\xaa\x8d\x8b\x94\xe8\xc5\x9a" "\x1e\xc\xe7\xe3I[\x17o\x8e\xe8\xed\x14\xc1\xe0\x33\xfe\xde\x44\xf8k\x1a\x30\x17\xb8" " \xd6\rv\xde@\x8bk\x1\x4\x1cI\xb6\x9cq\\HJ\xa6\xad\xd4\xdc\x31G\xec\x63\xe3\x17+" "\xfc#\x80S^&9\xd4\x15\x37\xb0S\xa8\x80\xe9\x9d\xe5\xc5\xbd\xd8\xc9g*,8N\xa8`DT\xb6" "\x5\x64\x92\xcc\x86l/\xe2\xf1\xf9Ui0\xed\xff\x9cm\xb7\xf0\x8dp\xad\xdfP\xb7\x36\xc9" "'\xfc\xbe\x43\x97\xa5r\xd9\xae\xa5z\x7\xc4\xddj~\xa0$\x2\xfb\xf2\x1dr\x81\xfd\xec" "\xd1\xf\xaal\xc5\x19\x65\xfap\xcb\xd6\x82\x83\x42'\xe4\\\xff\xd1T\x99\xaaywL\x99" "\xc0\xaa\x9a\x31\x41\xa2\"\xe4\xdb\x99\xfcJ\x91\xe5I\x80\xec\x9c+\x10\xba=\xdeG<" "@-\xd7\x1d\xc8yx*)\xc0\xf7\\\x1b\x95L\x8f\xec\xd5\xc1\x81\xcf\xcc[\xac\xb3\xed\xc3" "\x8bq\xact\xf0\x98\xfa\n\x1f\x0\x3)z\xc9 \x9eO\xfd\xde\x94\x8f\n#P\xcc\x84n\xac\x61" "p{\x7\x87\x15\x90\x85^U]9^\xfb\x16\x8a@\x11\xc9i\xae\x12\xf9\r\xc8z8\xe5\x44\x9f" "\xd3\x0\xf6\x11\x1aP\xaf /\x1dZ\xd3\xa6,q\xcb\xf6\x36\xd8,'\xc3\\\xb4\xf7\x3\xe7" "w<\xa3\x34\xb5\xc7\xbcj\x95\xca\xda\xdc\xb5^\x9c\xe6\x8dqk\xd7p\x83\x85]\xb*g*)$" "\x97@\x97{}\x84\x8a\x34\xad\x83:\x1d\x9d\xddK\xd8\x1e{\x11\x8a\x62\xe3\r\xa7p\xbd" "\x8b.\xec\x33\xad\x19\x94\xa5\x81\xc8\x36\xec\x81\xf9\x92\x43\xa9\xab#;\x9e*\xf\x1b" "\x10\x62\x37\x97`\xb\x82\xcd\x5i\xa2\xda\x41J\xb6Q\xc8\xd6\xf4|\n\x81\x95\x98\x86" "UZF Mt\xcb\xe4\xf2}\xe0\x8a\x42\x11\xadvK\x9a\x33\xe[o\xec\xc9H,9\x1a\xe0\x86\xe7" "TN\xbfVk\xa4\xe\xf6zj\xb4Rm\xdf\xa4\xcb\x98s<\xca\nX\x99\x3\xe2\xb5\xd7\xb8#d\xb5" "qM{p\xe3\xd9N\xeek\xc2xfS\xcf\x65\x91\xf9\xfe\xb6\xa6\xd2\x9b\x38\x92\xf3\x30\x14" "\xf2\xb0\"w\x6\x13k1\xech\xacl\xd6\x8dU`#\xc8\x5M\x8f\x8\x63\x32\xdf\x1f\xf3\x8c" "\x2\x81\x1\xed-\xb0\xb4\x1b\x61\x6@\xcbY\x92\x1b\xa2\xe2Q\xbf\x8dk\xdb<\x8e\xac\x81" "\x89,\x19\xe3T\xf7N\xae\x8c\xe1\x1d\x62\xae\x12\xdc*>\xa9uQFy\x7\xd1\x3\x81\xe4\xdf" "XG\xff\xd1\x4n\xe9\x94\x90*LB[\xa9\x17\xf8pL\xa6T\xcb\xe9;\xd0Lh\xb4\xc\xf7\x91\x9" "\xdd+\xb3r\x4\x4#\x9fZv\x11\x9b\x63\xb3\x97%/\xc6\xac`o\xdc\xb4\x8\xbf\xba\x0\x31" "\xcc\xd2\n\xd3\xe6\x46z\x9\xfe\x11x\x8d\x91\xe0\x80Y\x12\x38\x9f\xe2h\x9c\xbc\xa1" "\x3\xe7\xd1\xb\xd3xE@ye\xf2P\xaf\xder29!\xfc\xcb{\xdb\x11\x96\xd8\x1f\xd4\x9f>\x99" "\xa8u\xe3\x1\xe6\x83\xa3z\x9a\x9d\x95v&\x13V\x1f\x41\xba\x1c[|d6*P\x8a\x17rG\xeb" "\xcd\x63\xb6\x18W}%,\xb4\x42\x80\x1c\x37\x9f\xf3\x46#oMA\xa8:\x1a\xdc\x16'O\xfa\xa4" "\xb2\xf9SD\x11nq\xb\x11\x9f\xf\n\x1d\x66\xf8M\xf\xc9|``\xf9J\xd6\xe7,K\x82\x1dmx" "\x10\xa2J\xb2\xeb\x94\xdb%\xe4\xcd\xe3\xb5\x81<\xf9\r\xa1\x62\x65\x9e\xff\xcd\xd3" "Ho\x8e\x45\x1d\xbd\xc4\x33\xe4\x8b\xea\x1cUA\xb5\xcb\x35\xd5\xdbP{i9{\xbb\xfb\xe" "\x12\xcdH\x1f!\xd1\x0\xb9] \xbf\x30\x42\xa9G\\\x9c\x9d\xd9\r\x8cN\xb7\x83P\xc9m\xd2" "\x91\x1d\x15\xed\xfa\xb3\xb4\x65\xc7\xa7ic\xae\xdc\x86+\xa6(Uj\x99;3W9\xce\x7\x43" "\x5\xe6\xde\xa4\x5\xfd\xf5\xd8gX{u\xe@\x1a\xd1p\xfc\xba\xdf\x94\x8a\xb9/Y$\xfb\xca" "\x8d\xd8\x65\x9f\xb8\xd8\x8f\xcf\x10\x44\x9[=>\xcb\xb8\x8fKw\x7\x2\x36\xc5\x14\x38" "ld\x92\x33\x45(\xdb\xf9\x86\xef\xc8_\x9f\x8e\x97\x17\x90\xd2u\xe0\xc7\xaa\xf0\xba" "\xfc\xe2\xf4p\xad\x3\x94\x13\xec\xf2\xb3\x9d\x84iI\xc9\x32\x34j\x1b\x4\x45,\xa1\x1f" "l\xe3n\xf3(f\xec\xb6P\x12U\xc1\xda\xca\x1[\xf1\x42\xbf\x33\x95m0\x9\x83\x88\xc8\x17" "Q}\xf9]\x8d^Q\x6+\xf2\xaf?\xaa:\x8f\n\xc4\x63rPX\xf1\xebiC\xd6\xd0\xa1x\xd6\x90\xeb" "\x13\xa9\xef\x87\xfb\x1f\x85\xb0\xfa\xdb\x8bk'\x9\xae\xdc\xbb\xcbX\xffz\xe6\xc5\x83" "p \x9a\xa6\xb\x15/\xee\xe0\xa7G\xb6\xf\xb\x42R%&\xc7\x82\x31\xd7\x92\xf8;\xce\x10" "~\xccN\x83\"Yu\x11\xc7\xfa\xfdZ\xba\x8b:\xb0\xf5\x19\x2*\xde\xed\x89\xc0\xe6\x1c" "\x89\x9e\xaf~P\x9a=\xab\xb3\x99\xa6\xf4\xc5\xd7\xff\x9ah\xb5\n\xfb\xdbg\xb8\x9eL" "\x7f\x39\xd6WO\xca\r\x64\xc4\xfc\xb0\xe5L\x15\x89\xce\xf9'\xf9\x83\x94\x3r\xf6\xe2" "\x1b\x8;{\xf5\xa8_\xe0\x99\x92g~\xb3,\x9f\xd4\x62w\xc5\xf\xd9\x92\xc4x\xc2\x92\xaf" "~\x5\xa3T\x9fq,f\xbd(\x18\xb8'\xbb\xfd\xe2\xc4\x81\xbfH\x97\x37\xa7\x1e\x88o7\x8" "*\xfcZ\x8c\xb\x2\xb7\xbf\xa7\xfc\x89M\x88I\x98wX\xa4\xfb\xac\x8G\x8\xa6)i\xd7\x19" "$cS\x8c\xc4\xcd\x31\xee\xc7\xde\x6\x1b\x0\xdaZ\x9\xcb\x1e\xb9~<\x9a, A\x2Jb\rz\xe2" "\xba\xa9\x9c\xb0p\xfc\x1\xbc\xbf\xb1$?\xfd\x6\xa4\xc9\xeajMM\xf4/\x87\x38\xfeR\xa7" "%,\xdeW\nr\x96\xae\xb5\xed\x35\x1c\xd4\xb2\xf6\x43\x88\x12\xcd\x61\x91\nMU\xd7r\xa8" "\x81\xcb\x18m:7C\xcc\x13+'0k\xdf`\xc3\xabMu^>\xff\x8e\x10\xc2\xca$1\xa5\xfOK;\xcf" "`\xa5\x11*\x8f\xf9\x1b\xd5\x1e\xb0\xc2\xc1\x44\xae\xe9\xe9'\x85\x88&\xe2\x3\"i\x87" "\xb2\x92\xc1\xd7\xf8\xfe\xe5\x33\xb5z\x9b\x5P\x84\xca\xc6\x15\x91Z\xc3\xa5\xa8'\xee" "\x4\xd9\x1f\xa9\xe9\xe2g\xe3\xae\x44\xef\x11\x1I\x1a'\xa0q)!\x9e\x9bN y/\x1e\xed" "B\xd5\xca\x89\xc4\xc4\x97S\xafpx\xb6\xebnzV\xff\xf7\xce\xca\xb3\x96\xb8\x39\x8a\xfd" "\xd7\x33\xad(\x84\xf7\xbc\xff[B\xf6KK\x5jp\x9d\x65k\r^\xb4\nv\xa5\xf6\x65\xa6\x9b" "\xdb%\xe0#\x8a\xac\x35\xc5\xc0\xca\xff\x83+\x98\xe6H)1\x9a\xef\xb0\x7f\xb9t\x3n\r" "\xa9\x82\x61)\xdbz\xc5\"\x92w\xf\xac\xaf\x2\xbdj\xfb\xa8\x86!R\xbfGbB^\xbb\xb2-{" "o\x8\xd2\x99(\xa5;\x11\xaa\x35Qn\xae\xa9\xd2IP\x90\x63\xc5\x39\xac\xfe\x39T\xe1\xf9" "e\xd2qK\x86%~\x9f\xce\x32\xcc\xeb\nPf\x1f\x87Y&\xad~W\xeaU\xaa /b\xf8\x8dQ\xa1>k" "\x91\x19\x39\x1b\x7S\x98zW\x13\xd7\xcd\x96Pl\xd2\xbc\x9d\x9aT\x9ekn\xc7\xda\r$\xde" "\x97\x84\xffu8\xdc\xf3,\xa7\x36uL\xce\x16- \x8\xa4\x1f\xa1\xc7\x99\x9c*\x8fr\xda" ",Q~\x6\xf0\xf0w\xbd\x88\xa2\xff\x89\r\xb0Xb(\x84*\x1\x14 \xef\xe3\xe9\x10\x2\x44" "\x92\x16\x1e\xb4w\xfb\xda\xff\xaf\x1es\xd2Ku\xbar\xbe\\\x14\x35\x8c\x45]S\x85\x85" "uN\x9fh\x16\xa2&\xf6\xem\x17\xc6l\x94\x1fQl\x1f\x5\xa6\x18\xc0\"\xc1\xa7\xa8\x87" "L\xb0\xd3\xf7\xac\xfbo\xd7\x9dv\x1\xadm\xda\x61\x1d\x31\x3\x7f\x37\x39\xbd\x12\x86" "\x16'\x8ep%\xca\x83g\x8\xc8U\xde\xe5\xe3\xb4I\xc6\xc5\x90K\x95\xca\xf4\xc2\xeb\x9" "Q\x95\x64\xc4\x8a\xf7\x81\xfb\xccI\xf0\xde\xdel\xb2\xbe\x87\x18\xc5\x15\xc0V\x8T" "\x9f\xd5\xe5H17 v%\xb\xe2*\xf\xbc\xde\xe1\x7f\xb5\x84\x9d\x30 ^4~c\xb8\x84\x1d\x1a" "\xe5q\xb2\xc3r\xfd\x96\x34\xe9\xf1kH#\xf9M\xfb\x80{|\x9\x84\xf\x92@\x9e\xd8\x4\x1b" "\x15\x15\xdb\x9d\xf2!\x87\x45\x1f>;Bsz\x11\x61\x1aJ\x94-\xec\x95<\xfb\xf9\x87]6\xa3" "c\xe3\xa2\xd5\x5\xd9ko\x8f\x3\xb7\xea\x1c%\x1b\xab/\xf7\x9d\xd8\xcd\xb2\x87\x96\xd1" "\xfd\x36K\x11\x3\xda\x11\x9b\xea\x64\xac\x34\x65\x90#h_\xb8\xd5\xb2u\\\xe5#\xb3/" "\x85\x32\x84^L0X\x3o\x8\x62\xcb\xd7\xb7\xd4\xdc \xf7\xd2\x96@\xb5\x0zx\xafm\x93" "\x15\x12\xaa\x1U\x85\xbf\x80\xda\x89\xfd\xdc\xe1\x37\x2\xef\xaa\xeaQ\xc5\x1c\x85" "m|\x8a\x7f(Z\x99}t\x9e\xf5\xfd\xdb>\xb1\x45\xf5\x1b\x10q\x84:\xffHlz\xde\x39\x43" "\xca,\xe5\x38r\x15\xfa\xad\xda-\xb4\x14\x33\x11\x61\x7f\x62\x81\xfb\xc3\xf8\xd2\x61" "\x2r\xcf#Udp?\x83.\x85\x16|\xb4\x44\xed\x14\x7f\xaegVT\xfe\x8\x94V\x94\xf9\xe6>?" "\x1f\xc2\xf6\xa6On6\xc0\xbawJ\x8b \xba\xd6\x11Z\xc5\x44P\xe3-5\x3\x1euUH\x1d\xcc" "\x2)\xdfY\x99Q\xe7X\xa6T(-\xc7^bB\xe1\x41\xa3\x15j\\\x98\xc5\x33\"\x8e\x8bQ\x18\x1" "\xc7\x16\x66]\xfa#\xfe\xc5\xaa \xf3\xfb\xa6\xba\x37\xfc\x88%\x8d\xec\x64|;L\x85\xb6" "c\xc8\x30\xd7\x63\xaa\xf5h\xbd\xa3\x85X\xe4\x31KkQ\r\x97M\x9f!\xc7\x83\xc4I\x8e\xed" "b\xc8\xdb)\xbc\xa2\"\xf2y\x10\xb3\xd1\x96\xc0\xe8P+#Js\x9d\xa3*\xf\x64\x14\xbf\xc5" "\xe4\xc9\xcc\x16y\x89H\xf9\x96\xf1\xb3\r\x17\x65\xfc\x99u\x1b\xeb\x12\x16\x88\x32" "\xb5\xf7\xf9\x1a}\xf5\x94\xe\xb7\x63s\x1fi\x93\x9d\xb4%\xed\x38\xc?\xfe+AZ~\x96\x0" "U\xbb\xb7\xab\x43nk\x8c\xd6j\x12\xa6\x66,\xf8\x8d\xf2l8\x90\xbe\xacK+k\xc3\xc0uq" "f\x14\xd2\x4Z\x18\x9\x5\xeb\x92p\xdb\xf\x8e\x42\xc6\xc4\x11O(Y'\xbb\x3\xe9,=\x93" "\x1q\r\xcc\x17\x19\n\x1fx\x15\x13\x88\xd7\n\xec\x38T\xf\x3\x1e\x37m\x8f\x31\xda\x95" "Y8\xb2!\x96\xaeVwh&\xc7\xa6X\x82%\x82\xa5\x38\xaaGR\xb9iJ^\x81N\xf3\x9c\x1d\xf4\x10" "\xb7]\x0\xcb\x90i\xcdG\xb8\xbf\x18\x38\xf9.\xf5\xa1\xb9\x1d\xac\xa0-\x87\x98\xc1" "\xdf\x83\x9c$0\xe8\xd0(N\x1d\x16\xefr\xb3\x63g\xe\xf5\x19\xd0\xd0j\xfe\x32o7\xea" "\x4\x8f\xd2\xe0\x9c\x15\x11\x3\x11xy\xc2\xef\xa2hdU\x84\xffJ\x1c\xd4xSd\x93\xad\xbc" "\xb3\xe4\x9e\x42\xe7\xb6h\xd9\xf0\xe7z\xc5\xa3!\xfd\x7f\x33\x9c\xaa\xfd\xc9\x32g" "\x14O\x94g\xb6\x5\xc8i\x4\xc3\xd1\xb8k\xc0\xe1p{G\xc3\xa4\xc1\xbf\x99\x1c\xa3V\xfb" "\xc3.cV#\xf4\x42v\xccsX\xdaTAC\x8b_\xcbJg[\xd6\xb\xd1\x12\xcd\xdbL\x83WY_z\xf0\x82" "\xaf\x9$\x12>g:\x1et!N~A\x98\xfd\xe4\xae\xf1\xe8^\x12\x9bjx\xa1\xe9u\x97\x8e\xf2" "E\xc\x63#%\x88m\xa4\x65!\xb9\x37HA>\x2\x18^\xe0\x61\x64\x8c\xdf\xff\x10\xcaRI\xd1" "\x9f\xaa\xd7\x86\x19x?\xc1\xc\xb7uT\xbbP*d\xe[$<\x9e\x90\xff\x16\x9a\x85[e\xd2\x9d" "%\xb4\xd3\r\xe4\xe5:\x13\x9e\x8a \x5\x9c\xdbyci\xec@\x5\x7ft\xb7\xdcKZM=\xd4\x63" "\xc6k\xe4\xe8\xa0\x2m\xedo\x1\x10\xc4[\xaf!\xf1\x97\xb6I\x2j\xeeV_G\xc2zJ\xbc\x15" "Sy\x3\x3\xbc+4\xad\xb7\xc6\xe5G#yN\xef\xaa\xc4\xdcqE\xa7\xc3\xae\x16\xc6\xbb\x63" "ZpN\xfc\xb2\xb9\xbb\x65\x16vT$Z\xe5\xd4\x66\xb4\x36#*G\xd9\xa2$|:ZN\xe9\xa7\xe6\xf2" "\x9b\x83\xfc\xb9\xd7\x8/\xae\xc5\xca\xf6\xb4\x89v\xb0\x0\xad\x92\x19\x9d\xf6WB\xcd" "\x8d\xe4\xaf\x5\x41\x46\x1f\xdf\x7\xf4N\x91\x17\x8e\x8f\xf2\x42>\x1\x7G\x4\xda\xe7" "7\r\xf7\x8\r\x17\x45\x19\xc\xc2\x94\x35\xf1\x87\xaf\xea\x37\xe3\n\xa2\xc5\xdf\xd9" "\xc4\x7n\x15\xc1\xd8\xbh\x8a\xca\xee\x8a\xc7\xf4\xf6\xf5\xb5\xa2\xea\xb3\x97\x8d" "\xa7\xc7yXq\x9cim\x9aT[\xe2\xd4K\x88N\xb9N\x87\x39\x42\xce\xf0\xffItP\xfb\n\xb2\x1c" "9.\xa6L\xbe\xc0\xab(2\x83\xeaKs\x9e\x36\xf2\xfc\x14_\xa5~\xff\x43>6\xfb\xdf!}\xb3" "O\x8e\xfd\x2\xf7\xa1[w1\x1aPgIG\x85Q\xf1\x1e\x1c\xf0\xc9\x84\xeb\xd2~\xec!\x97\xba" "\xbc\x95\x6$/|B[\xc0\xbb\x35\xa1\xd3\x32\xc3\xd7\x44$3\xba\x80\x9a\x15\xa5\n\x64" "\x87\xa1\xce\xe9\x0\xa9\xb6\x4t|h!Q+\x93\x45x\xbe\xbb\xed}5\xd9,5\xbe<\xa1(\xde\xce" "\r\xd8\xe6\xd6\x15r\xb5l`\xa7Z#\x9\x32\xf6\xc8\xf1:\xc\x82G]\x81\x9d\x41\x98I\xc0" "F\xbe\xb6\x18\xff\xd2\xba\x9bN5Y>\xce\x10\xeb\xba*\x92\x36H\xae\x9d\x92\x12U'{n\x81" "R\x83}tx+3\xffZ\xd6\xa0}\x8cl\x1eY\x13->^\x1f\x1c\xce\x86O\xad\x1fyc\xb5\x1|~\xbb" "=)\xf2\xaf\x65\xb0\xdds\"\xddn\x94\xe8\x12\xf0\xed'pFjA\xcc@\xa6\xcbWE>\xe0\xde\x32" "\xa6\x33\xa8g\xd5\xfa[\xa2\xb8g6\xa2\xd2\xc7\xcd\x94\xaf=\xbc\x92]\xfc-\xdf\xeb\x4" "\xf4\x4\x81Pz(~\x1c\xed\xbf\x35\xeb\xfb\xa9\x44)\xceT\xe6\xb6\x36\xc3=\x88!p\x8c" "\xfe\xc3\xa4P\xe1\\\x39;][\xf7\xcc\x84\x8c\x9cW\x80\xdd\x96m\x1\xb3M\xb5\xf9\xc3" "\x13\x7f\xa0\x9\x63h\xf2\xae\x88\x83\xe6,\xdb\xfc\x61\x32\xf7h\x7f\xd1\xe9\x61Gy" "'Ok\x92\xa1*mJ\x8c\x41_YQ\x9\x13\xcd\xde\xf6v\x85\xcbO\x97\xfe\xf{\x8c\xe9\x90\xca" "\xe9\xd8\xb1R\xb1\xfc\"\x33`\xfaT\x80\xe2=b\xbf\xa6\x9d\xf1\x1d\x97\xef\x8b\x9dO" "\x8f\x4s\x1\xf5\xdb~\xe3KO9\x96\xa6\xe2&\xb8\xb9\x32\xa1\x95\xcc\x8e\xcd\xfb\xeb" "4\xcf+\xc2\x4v\x9a\x1a\x1a\xb2\xe6\xbe\x18\xd1V\xd3\xc1\xb0\xb8g\xceJ\xc4\xe5r\x3" "X_\x98\xad\x8a\xd4\xa1\xc2\xcd\x98#\xf6\x9\xaf\x8b\xe9\x66\xf7\xcc\x89\xe7\x87\x43" "_1+|g\xc2\xf9\xef\xa2/\x16\x9a^\x81\xc8\xf3\xdet\xaf\xd4Vu\xb4w\xae\x9d\xf1\x98=" "\xe2GG)\xec\x80\xfdVF\x5\x80Q\xd8\xf0\x9b%>W\xbeU@\xba\xb~\x9c*X\x88y\xd4]\xac.\x94" "\x94\x1bG\x5\"\x95\xba)\x9\xb9\x1d\xb7\x31;\xa5\xd3\xc7\x80\x11>\xe7\x36\xefW\xd7" "\xa9\xaa\x88\x3\x1a\xe6\x14\x11\xf3.\xd3\xab,\xb9z\x97\x8a\xbb'\xb8\"\xc4\x42\x82" "\xefQh\x14\x8f\xc3.\xc9\x91\xf7\x5(\x8c\x8c\xfdl\x83\x8a\x37\xdaN*]\xba]!W9\x0_\xec" "\x9a\xc0\xcTh\x84\xf8`\xdb\x13\xc\xfc\xc1\xf1\x81\xcc_\x91?x\x9b\xfe\x61\x0\x99\xcd" "\xe5\x84\xd5\xdb\xb1V\x4\x66V\x17\xd1\x35\x9d\x61\x10I\xef\xf6y\xae\xd9\x36\xaa\xe7" "\xc2\x7f\xcd\xe3\x5U\xf0\xee\x39\xed\xb8Q+\xdeP\x7\xaa\x9b\x1b\xffjKkV\xe8\x83\xbd" "(N!6\x2\xdf\xb4\x46]1\x11h-N+>3\x9f\xbb\xe\x4UUr\x81x\x8akU\xea\xa5\x88\x1e\x62\xad" "\x1c\xbc\x65\xd0\xeb\xaa\xd4\xa5`\x8\x99\xb9\x32\n\xf\xc9\x8e\x8c\xa2\xe7\x96|l," "\xe4\x89\x10\xd1\x80\xbd\xcf/anu6\xf7'\x97\xe3\xb1\xbf}O\xdd\xd0\x81y\xf5\xf3\x42" "\x9b\xc3\x88S\x7\x8\x9b\x9fM\xaf\xb2\xfe\xaa\xdc\x8av\x1fkA\xf9\xd7\xe6\xceu\r]\x8f" "\xfe\x99\x9d\xa5]\xc2\x39\x93;\xca\x15$\xaa\x0x\xee$\x88\x1e\x12\rwK)?\x15\x93\x62" "\x12\x30\xfdR\x94\x42\x86S\xeb\x45?\xbf\x97\xb2u\xbf\xea\x38\x9b\xac^\x8e\xca\xe1" "#\x89\xb1_d3\x8aY\x13\x1fj\xba\xfe?c,!^8\xf9z\xbe\x80\xd3\xfc\x93\x35-\xe'p+\xf8" "3\x6\xa0?\xae\xd8\xf8\x91`Ao\x1c>\xf5\xf5\x38\x8f(17\xb\x64\xbf|\xb7\x37\xaf\\\xa9" "Z\x80#\x81Z\"+\xe8\x11\xb4\xb8\\\xf5+\xeb\x4o\xc\x45\x87\x64?\xc0\xdaw\x81\ni\xbf" "\xacL\nJq\xdf\xd0\xc0\xab-V5\x2\r&IX\x8a\x8a\xd4\xe8%G\x86Q\x95\n\x83\xd5\xf0\xf2" "\xbd\x8c\xc3\x1e\x82Pt@M\x16\xc0ST\xd1\x87\x30\xfc\xd4,\xcc\xd5\x14\x37\xa2\xf2\xa9" "\nj\x9e)M0\xa5\xf5\xe5?\x18\xe5>\xd4\xb6\xf\xe\xf\x61YO\xea\x13o.\xd0\xc8\xaf^\xf7" "\xca\xe9\x46\xb3:\x18\xd9\xe2\xd0\xc8\xb8\xad?\xf0\xe1\x90\x8d\x30\xff\xcd\xabX\xa2" "\x8eY\xfb\x12\xd1\xf2\x8ex>\xd5\x8e\x34N\x91\x5\xd9\xbd\xba\x8e\xcf\xb7\xb0\xdf\x61" "\xcb\x7f\x43y$\xffq`V;\xe7\x9Lv\x9f\x36\xfa\xb8\xdct {\xc7\x89\xee\xc0\x11\xe3N\xf8" "\x1e\x37G\x8c\xc4\xc9\xd5\xa1\x11\x8a\xc0\xa6\x85\xd2Q6\xf7\xe2\x95\xb8L\x6\xfO\xb6" ":\xe4\xcc\x8a\xf1\xb9j\xdaK\x18;\x5M\xf7\xef\x8c\xa3\n\xef\xc9\xb0\xcd#E\xb7(\xa6" "\"\xe2\x42J\xe0\xaaW\x8c\x6^X\xe8\xc3N\xbd+m\xf6H\xa9x\r\xea)9w\x94j\x9a<\xd8\xec" "Gy\xf3\xf\x8aKQ\x0\nU\xdb\xef\xb3(\xe2\xd5\x9\x8d\xbc?\x98Y\xd4\x9a\x46?\xd2L\xd8" "\xc2\x8e\xc4&\x8\x82\x45\xb0\x90\x80\xc7\x9b\xa4?\xc4m\xd5_+\xa2\xc1\x90\xf8\xc1" ";\r\x88?\xb6s{\xc0\xf9\xac\xb5\xf0\xac;\xfaN\x8c\x34n\xf5\xd0\xa9\xa6\x17\xbf\xb9" "\xe2\xfd\x9f\xbch\xe3\x94\x1\xd5\x97\x83\x19\xfeRy\x10\x86u\xe8\xe7h\xf4.\x1\xa0" "\xb8\xc1\x33\xdb\x1c\x8b\xe7\xe0\xa5S\xed\x1c\x16v\xedH\x8b\x5\x83\xa3\x31\x7f#?" "zC5\xb7\xb4\xee ]\x1d\x32IW JQ\xa0\xb3rA\x93\x8f\xe2\xa5M\x8a\xecJ\x81I3\x84Y\x4" "2\xd5\xaf\xad\xc3\xa8KN\x8w\x1b\xe8\xf&H\xac\xf9\xfb\xc7w\xa5\x1bS\xf\xc\xa3O\xa7" "\xa8\xa8\xa1\xcb\x39\x1d\r\xb8\xf0\x9f\x10\xbd\xfc\x19\x35 B1q\x84\x94\xdb\xa1+\xdd" "\xc6\xff\xfe \xd4\xf3\xb7\x6/\xee\xc9x\xa0yx\x4\x89\x8d\xb2\xf1\x42y6;rp\x8dn\x7f" "\xda\xefq\xaa\xa4\x95\xed\x16\xdb\x39\xe5\xcc\xea\x30\x90\xcf \xc2\xc0\xd6n\xb9\x8" "\xec\x81M\xaf?T\xb4\x46YV\xef\xcd\xfa\x46\x7\x1a\xe\xaez\xb7\x9a.\"\x7f\x8b(\x19" "\xc1\xc5\xca\x1\x86\x46\x10k50>\xcb\xe7=I#\x8c\xc1\xf;\xbb\xc9\x43\xbf\xb7\xd5G\x13" ",M\xeb\xc1\x92=\xf4\xe8\x12\n\x32&\xcb\x99\xeb\x8e\xf1\x62Th\xabr\x0\x65\xd6\xba" "\xcc\xca;\xf4\xcd\xfb/\x92\xb6\x14(\xb0\x33\xf2k\x98^\x84\x11\x82\xc\xa0\xcdKS\x4" "Qde\xf2\x9c\x89Jl\x1b\xad\x89\x42\xde\xe1\x38$!\xa6\xc0`v\xdd\x6\x45\x1a\xe5\x83" "\xb9\xe7\xab\xe0\xe2s6RG\xfa$\xcdh\xe9\xb2 \xf2\xbf\xa3Z\xdb\xd6\x2Y\xf5\xa0\xde" "Kf\xb\x2\x41\x84\x1e/\xf4X\\e\x86\x83\xdd\x9em\xc8G\x0\xb#\x82%\x99\x8 \xc1\xfa\xee" "\xf4\xe7\x39x\x9b\x9e\x44\xab\x3w0\xdcOl`\xdb\x5\xe7\x84s`\xe4K\xc\x14\xe5\x9a\xf4" "x\xcfT\xa9g\xc\xa3]N\xe3\xe3\xf8\x1e\xbf\xc5\x80\x43G\x81\x99\xaa\xe\x35\xdat\xb4" "\xee\x11\xc0\x11x\xe4\x42\x35.\xee/W\xa6Q\xfb\x1b\xe5\x12:\xcc\x97\x38H\xddy\xb1" "\xbf[i\xdf\xc2\x18\x66\x62\xc9\xa5H\x17\xc3<\xb1\xa6\xb5\x89\xeb\x64\xa5\x88Z\xe8" "\xed^\x8f\xfc\xe9\xcb\xc9\xf1\xd0O\xaa\xfd\x2t\xd5p,\"\x9\xef\x9eR\xb3W\xe2/E\x8b" "\xd3\xbe\xb2\x44\xfe\x88\xc3m\x8\x8d\xda\"\x9eP\x12'\xca\xaar\xc5\x8a}Z\x95\xfb\x1d" "~8\x8\x19\xda\xab\xa5\x9d.\xeb\xdc_|\xc2\xbc\xc0\x42\xe7?\x13\xf2\xdf\xb1\x9e\xf5" "\xbap\xd0\xet\xbe\xd0\xadsrm\xcc\xcd{>\xcd\x1m\xc0\x10\x18[\xc3J\xacg\"\x92~\xc4" "\xcf\xc8\xd4\r[\x88\xcd_\x1\xf2\r\x1b\xeer\xb7\x15\xb9\xd4\x93\x1d\x81\xdc\x97,Y" "\xb3\x12L\xa3^w6\x12g>C\x93\xde\x8b\x93\xb9\xb3\xc6\xb3x`3\x7\x0QL\xd3\x19\x19\xf4" "*(\xf9\xb7\xc8\x14\x31\xac\x89\x12\xad\xca\xe9\x82i\xd6\xa6O\x82\"\x8f\xe\xdb\xc5" "\x9d\xe4\xf6\x90\x66\xc4v\xfe\x35\x1f\x98i\xa4\xbb\xdb\xec\xf6I\xa2\xe3]\x1\x9e\x90" "\xa1\xd2\x80\xa1\xfeU\xbc\xf5(\x15\x8f\xfb\x1\xfa\xcf\x46\xd9\xf6\xeb\x2\x66\x14" "\x9e\xd4\x3\x7\xd9\xb0p\xca\x8c^CL\xb7\xa5U\xb7M\x18\xa6\x6\x97\x84\x89n/%\x3i\xfc" "ko\xc4&wK\xe9\x80\x64\xe0\xfeW\xb8\xc9\xd5\xca\xab\x1a\xa9\x97" "\xaf\xe6\xfb\x62S\n\xc8\x83\x32\x36\xd5\xac\x7f\xcd\x65\xdc\x18\xe1\xe0-\x5\x91y" "\xee\x2\xc3<\xfco]\xbd\x6\x9\x1d\x8\x94/B\r5\x97S\xff,\x9e\xdb\xe1l\xc2:\x97\xcc" "kf\xd3+\xe0\xb4\x1e\r\xcb\x98:\xa1\xcb\xb6SJ\x16\xe8\xf6\xe8\xb2\x42*\x95\xb8\x80" "\xc6\x13Q\xa7n\x1dS\xe5\xbf\xa9\xaa\xc6y\xb6\n\x7f\x9b-\xfd\xec\x87\x8e\xbb\n\xd3" "\xe\x9bo\xeb\xd3?\x98\x65&\xf0>C\xdd\xce\x13\xadRdR\x1a\x89qu,\x1\xca\xe7\x38\xec" ";\xd4\xe5V\xdck\xeev\xa8\x85\xf\xe\xf7\x38\x98\x2tD\x8a\x0\xd8h\x17\x87\xa3\x14\xdc" "k\x1c\xfb\x81\xe8\x38%\xf3\xb0J\xe2R\xeci\x81\x87\xd0\xa2\x42\x38\x9e\xef\xe1\xea" "\xfc\x5L\x9b\xc0\xc3\x3\xa8\xec#\xc0\x63\x30{!\xb2\xa9\x80\x34\xf6\xe7\xc4u\x8b\xe5" "\xc\xd3Tt\xea\xbf+|K\xaen\xa1\xcdP\x88=b\xa3\x8a\"\x81\x9c\xd6\x66\xacm/9\xb1\xfa" "\xd6\xfa@4Al\x3\xd9y^L\xafY!Vr\xf2\xae\x88\x61\x9f\x17,1\x1a+{0\x1f\x30\xcc\x31%" "0v*\xa4#a\xdb\xdbv@4)(\x98\x95[\xff\x38\xfc,\xf6\xc7\x16\xabRQ\x18\xbf\xbrW1|\x81" "\x18\xe9%:\x1a\xeal\x87\x8b\xc6\x37}d(\xe8\xce_\xb7\x85\x44\x93\n\x46\xd0+K\x8\x8" "\x1b\xef\xc7\x84\x2\xca\x44Lt, =\xd1\xfa=\xbc\x35\x1d\xf1\x12\xdd\xa7x\xb1\xe5\xc3" "\x98K\x3\xce\x9e~\xab\x15\xdcH\xdd\xc4i\xc7\xef\x35\x43\xf8\xe1\x95\x33\xac\x32\xa3" "\xf6\xb8\xb1!\x3X#\x3\xcb\x46\x8m~\xb6\x99\x17\xb9\xe2/\x92\xb0\x7fyK\x80\xf5\xb3" "\xa3.D\xd8\x8d.f\xc9\xe4\x1d\xc9\xd6\xe\x34n\xc\x99\xab\x66\x4\xbb\xeaU\xf\xbeJ\x1d" "\x96V\xd3\xd8\\\xd9\xb8\xd6\x32\xa1\x35Kv\xde\xa1\xd8v\x14\x8d\x9b\xfcmq\x8\xaa\x1b" "\x12l\x17\xdd\x16\xa3\x91?\xa2\x63\xfb\x94'J*\xa4\xce\x87\xa1\"\xd7'p\xf3\xd0\xaf" "\xed\xac\xca\xa1!\xbf\xc2\xf4/z\n\xd1x{\xc8X\xc3\xf6\xab\x8c\xda\xe7m\x86\x8a\xa3" "\xbb\xab\xd1\xe1\x66\xa7\xea\x5`\x8e^\xb1\x6\x8dL\xf2\xd7rd!\x8d\xa1\xba\x33\xe4" "\xf1\xcc=$\x86\x87ht\x7f\xc0\x8c\xdc\xafW\xc6{$\x98$m\x7f\xf6\xf3:\xcb/\x83\xa9p" "\xb6\xb6z\xee\xb/\xc0\xb7l+K\xdd\xbb\x9b\x98lZ\r##Am\xd9T\xf7\x3\x62\x37\xb1\x8c" "\xac\x8a\x1c\xea\xfeNo\xa1\xd2\x39kHz\x3\xb9\xb3\x30\x1c\xa9\xb7\x95\x62o\xed\xb3" ");6O\xcb\xe2\x9b\x8e`o5\x86\x32\x84\x32-\x82\xbb us~\x80\x62\x45H\x91\xe2\x45\xe0" "\xf1\xecwC\xf1\x99{;6\xd2M\x94\xf6\x9b\xe4\xba!\x8a\x94\x36\x46ky\xd8\x16\xe6\xa7" ",s\x6\xe3\xc2q\x18I\xe9\xa9\x41\x98<\xc5\x89\xe2\xf1\x9e\xd1\x8d\xdf\xf7Q6\xe2S\xed" "\xae\xbfW\xb6t\x13\x46\x84\xd1\xfa\xa2\x1e\x1K\x9dTu\xae\x81_V\xb6\x6\xab\x62\xf9" "\xae\x1c\x32\x31Z\x14H\xdd\xd4\x15\x1d\x6\xf4\xaa\x13GDM2@\xdfO\x82\xf9\xfc]\xc8" "p\x91\x12\x93\x8a\xcf\x9b\xb2^zK\xf\xef\r\xd2Q[\x15\xdf\xb4\r\x17@H\xed*=\x84\x1b" "\xd0\xe6\xc8!\xe0|^\x95\x9c\x17\xd6\xf2\xba\x65\x9dy,\x97g\xb9\x17$S\xae\x9c\x41" "Zj\xa8\x18\xf3\x99\x91gy\x3!\xdfv\x95\xfb\xeav\xec \xfb`\xb5\x16\xf8MY\xbf\xdd\x9" "\xa2\xfc\xa1\xbd^\xb3\xec\xe3>Q\xed\"Z0\xc3I\xfd\xe4\x33\x61\x63\xd7\x9b\xa2\x5\x33" "C\xed\x4\xec\xcd\xf8\x45;3\xf9\xbf\x3>\xad[\xf5\x92%\x85mzi\x16W\xcd\xfe)\xee\xaf" "\xb1\x46\xf4\x1dL\xc9\xc8\xd4\xae\r-(z\x93\xc1m\xc8_s\x8\x39\x9)\xbe\xf5\x32\xae" "\xef\x87p\xb9\xafn\xa7\xfa^n\x96\x8d!\x1d\x1f\xc\xee\x98\xa0\x9a\x45G\xad`\x9f\x62" "\xdck[\xa7\xb\x9a)\xdd\xb3\xfa\xa1Q\x2\xa5j\x1{\x9f\xda\xcb\xa8\x95_h~-N\xba\xc5" "q\x93w@\xf1\xc6\xa3\xe5\xd9XN\xc9\xd7u\x8f\xd2zF{'>\\]+I\xa1\xfL\x93_v\xa0q\x83G" "\xaeY\xf9\xf5\xe2\x9e\x8f&\x95\x66L\xef\n\x10\x11&6H\xd4\x86\xe5\xee\x9c\x31;\x8b" "/\xe\xd6\xe9\xc9\xa6\xa5\xae\x15N\x1f\x1d\xb9Qd\xfd\xa1!\xfe\xac\x7xa\xc8ZvY)\xa6" "\x9e\x15~\x13\xd2^^\x5;\xd5}\x16\x7\x91\x19\x32\x93\x96\xe4\xb3\xacH\xfd\xe8\xe\x9" "T\xb6\x65\xd6\x1b};\xeb\xe{8\x0\xb4\xfe~\xcc\xc7\x41X\x1b\xd4\xeb\xe4_\x1d\x9\xf" "\xf8\xa1?\xf6\xec\xff\x9bv\xef\x31.\xbfHw^f\x0\xe8&\x1dW\xdc\x89\x8e\xdb\xec\x1c" "\xe7/\x98\x6\xacZ\x9a\xb5\x85\x33!3\xaf`\xff*\xc3\x1bn\x97\xd2\x8b\xd2\x32\xa5\r" "(#\x15\x95\xd2\xb2\xc2\x1b%:'\xa7\xd4\x30\xa7x\xff\r\xd4\x46\xbb\xf9<7\xc1\xa4\xfb" "\x1a\xb7\n\xd1\xc6\x61[Q]rF-\x81SQE\xff'c\r\xeb\xb4\xf\x84\x39\xe0\x93\xc9\xf\xec" "~\xbd\x4\xad\x81\x86\x63\x90\xef\x8d\xf9\xd4\xd4\xaaG\xb8\xda\x9f\xf7\xf5\xba::l" "\xc6\x19\x18\x63\x99\x1\xf4\xc5\x8c\x86\xfd\x18\x44\xc0_\xe7\x95\xec\xf8\x82N_\xf5" "y\xb3\x39\xe1\x8c\xf2\x98xh\x6\xe9\x15\x9b\xc9\x86\x94\xcb\x45\xa3\xc3\x8d" "\x11\x35o&\xc4\xd6\xdf\xc4\xcc$\xd1M\xb7\xd1\xf5i\xddPDX\xd6\x42\x12\x41\xa9\x46" "\xbv\xc\xc8\x91\x82\xa3\xbeM^'O\xba\x17\xb0\xc6js\xa3\x12\x44\xf9N\xe%\xa8\x9a\x43" "I\xfe\x3\xbb{+v\xd5\x8\x7f\xcf\x1\xe2:\xb8\xa9\x46T\x12\x95\xfe;\x81X\xc1\x9f\xd5" "(\x19\x82yK\xab\xd4\xd8\x81K'\x82\x18\xe8\x9e\x93\x38\xc7\x3\x14s\xcb\x6p\xc0\x1" "\xc\x62\xec\xb8\xd0\xc3z\xbbt\xa6\x8fU2\xbaI\xf4y\xdf\xa2v\xb9\x1d\xfd\x95\xd4h\x9f" "uS\xdet2'\xaa\x96\xb6t\xdc\xec\x81\x86Uk\xa8\xaf\x62\x9ay\xc6$\xde)|\x19\xea\xa8" "n'KL\xcb:l\xef\x80ti\xa7\x97\xea\xe6\x37\x90\x9c\x19#/(\x1\xb5\xbf\xad\x8ak\xdc\x65" "e\xbf\xc0\xc2\x17\x0HT\xdc\x65L}\x98ix1\xa6%\xb3\xee|\xe2O_\x5\xb0\xaaj\xe0\x18|" "\x98\xc2!\x82\xcZ#\xa2u3\xde\xd3\x3T\xc4\xca\xad:\xad&\x1e\xbb\\\x0Sr\x14\x7\xd9" "\xebk\xd5S\x80\x93\x8@}\xe0\x38\xd2\xc6\xa6\xac\xd7\x7f\xeft\xcf\xb5\xd9\x61\xdc" "\xbe\xaa-\xa6\xb8\xde\xec\xa6NJ\xdd\xa7\x36rV\xc1\x36\x1c~\xa9\x9ak\x95P?\xe9\x1" "\xd0V&\x7fn6\xdbx\xd1\x65\xb7\x44\x83Wn6\xab\xa1\x9eh\x1\xa3>\x9e\xb\xc2\x1e\xae" "*\xe\x8eV\x94?L/\xbf\x94g\xaf\xed\x7\x98IcUy\xea\x81\xfd\xe7\xe0z\x1c\x9b\xd1,r\xeb" "/\xfc\"P\x3\xb\xed\xf8\xd8T/\xfcK\x8e\xd5&\x89%\xc5k\xff\x45\xb3>\xb\xb0\xf9N\x12" "\xeeiM\xcf\xd3JWrL\xf3\xb9\xd3G\xd7\xa8\x45\xa0\xc5\x8d\xa8\x3\xb9\x99\xdaS\xcb\xc1" "\xe3\x95^\xad\x7l\xe8ob\x8Y\x85\xc9\xd9\xfc\xfd\xab\x90\xb2\xd2ls\xd7g\x8N\xbap:" "\x13\xae\x41\xff\xdb*\x98\xf>\xa0\xf0\xb6~\xd5\xa0\xaf\xf4\xb4\x18k\xdc\xf2\x17\xff" "W[\x15\x8\x43M\xfc\xe6z \xe4\x9h%sY\xd0\xc2\x10\xb2\x8d\xffV\x1b\x8e\xa8Z\xa7O\xb4" "C\xda\xa5oL\xc3z\xc6\xf5\xcd\x39QY\x1a\xcb\xb8M\x3\x61p\x15jf@\x0\x9\x82\xe7\xaa" "\xae\xa6\x36\xf7&`\x99\x82\xcc\x39\xcf\x9f\xc\x42\x86\x8ai\xa3\xa5M\x18\x4\x0\xb2" "\x90\x94\xc4>bO\xbc\xb7\xa0\x87\xb5L\xc2\xea\x93\xf\x87@\x82\x8bkmr\x19\xac\"\x37" "\x83\x8f\x63\xdfs\xfb\x99\xf4\xc5\x1d\xe0>W\x8c\xf7\x4{\xcb\xa4\xf0\x8a|V\xe0\x8" "(N\x95\xcc\x80\x1\x14\x2\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" "000000000000000000000000000000000000000000000000000\r000000000000000000000000000" "0000000000000000000000000000000000000\r00000000000000000000000000000000000000000" "00000000000000000000000\r0000000000000000000000000000000000000000000000000000000" "000000000\r0000000000000000000000000000000000000000000000000000000000000000\r000" "0000000000000000000000000000000000000000000000000000000000000\r00000000000000000" "00000000000000000000000000000000000000000000000\r0000000000000000000000000000000" "000000000000000000000000000000000\rcleartomark\n\x80\x3" ; int n022023l_afm_len = 32136; char* n022023l_afm = "StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design" " & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING " "(GNU General Public License) for license conditions.\nFontName NimbusMonL-ReguOb" "li\nFullName Nimbus Mono L Regular Oblique\nFamilyName Nimbus Mono L\nWeight Reg" "ular\nItalicAngle -12.0\nIsFixedPitch false\nUnderlinePosition -100\nUnderlineTh" "ickness 50\nVersion 1.05\nNotice (URW)++,Copyright 1999 by (URW)++ Design & Deve" "lopment\nEncodingScheme AdobeStandardEncoding\nFontBBox -61 -237 774 811\nCapHei" "ght 563\nXHeight 417\nDescender -186\nAscender 604\nStartCharMetrics 316\nC 32 ;" " WX 600 ; N space ; B 319 0 319 0 ;\nC 33 ; WX 600 ; N exclam ; B 246 -15 463 61" "8 ;\nC 34 ; WX 600 ; N quotedbl ; B 254 315 582 604 ;\nC 35 ; WX 600 ; N numbers" "ign ; B 137 -62 589 647 ;\nC 36 ; WX 600 ; N dollar ; B 131 -92 582 655 ;\nC 37 " "; WX 600 ; N percent ; B 137 -12 591 611 ;\nC 38 ; WX 600 ; N ampersand ; B 132 " "-16 527 519 ;\nC 39 ; WX 600 ; N quoteright ; B 207 314 468 604 ;\nC 40 ; WX 600" " ; N parenleft ; B 335 -124 583 604 ;\nC 41 ; WX 600 ; N parenright ; B 124 -124" " 372 604 ;\nC 42 ; WX 600 ; N asterisk ; B 211 250 586 604 ;\nC 43 ; WX 600 ; N " "plus ; B 131 32 588 530 ;\nC 44 ; WX 600 ; N comma ; B 110 -145 371 145 ;\nC 45 " "; WX 600 ; N hyphen ; B 131 258 588 299 ;\nC 46 ; WX 600 ; N period ; B 235 -15 " "386 116 ;\nC 47 ; WX 600 ; N slash ; B 99 -81 625 668 ;\nC 48 ; WX 600 ; N zero " "; B 156 -15 571 618 ;\nC 49 ; WX 600 ; N one ; B 117 0 492 612 ;\nC 50 ; WX 600 " "; N two ; B 84 0 572 618 ;\nC 51 ; WX 600 ; N three ; B 110 -15 579 618 ;\nC 52 " "; WX 600 ; N four ; B 141 0 545 604 ;\nC 53 ; WX 600 ; N five ; B 113 -15 584 60" "4 ;\nC 54 ; WX 600 ; N six ; B 184 -15 631 618 ;\nC 55 ; WX 600 ; N seven ; B 21" "5 -1 606 604 ;\nC 56 ; WX 600 ; N eight ; B 143 -15 576 618 ;\nC 57 ; WX 600 ; N" " nine ; B 142 -15 589 618 ;\nC 58 ; WX 600 ; N colon ; B 235 -15 450 417 ;\nC 59" " ; WX 600 ; N semicolon ; B 114 -145 426 417 ;\nC 60 ; WX 600 ; N less ; B 131 4" "4 627 518 ;\nC 61 ; WX 600 ; N equal ; B 95 190 625 375 ;\nC 62 ; WX 600 ; N gre" "ater ; B 92 44 588 518 ;\nC 63 ; WX 600 ; N question ; B 231 -15 581 577 ;\nC 64" " ; WX 600 ; N at ; B 139 -62 561 624 ;\nC 65 ; WX 600 ; N A ; B 13 0 596 563 ;\n" "C 66 ; WX 600 ; N B ; B 47 0 591 563 ;\nC 67 ; WX 600 ; N C ; B 110 -16 635 576 " ";\nC 68 ; WX 600 ; N D ; B 47 0 592 563 ;\nC 69 ; WX 600 ; N E ; B 47 0 619 563 " ";\nC 70 ; WX 600 ; N F ; B 47 0 640 563 ;\nC 71 ; WX 600 ; N G ; B 108 -16 636 5" "76 ;\nC 72 ; WX 600 ; N H ; B 57 0 646 563 ;\nC 73 ; WX 600 ; N I ; B 117 0 603 " "563 ;\nC 74 ; WX 600 ; N J ; B 100 -16 699 563 ;\nC 75 ; WX 600 ; N K ; B 47 0 6" "62 563 ;\nC 76 ; WX 600 ; N L ; B 67 0 585 563 ;\nC 77 ; WX 600 ; N M ; B 15 0 7" "00 563 ;\nC 78 ; WX 600 ; N N ; B 46 0 678 563 ;\nC 79 ; WX 600 ; N O ; B 102 -1" "6 616 576 ;\nC 80 ; WX 600 ; N P ; B 47 0 587 563 ;\nC 81 ; WX 600 ; N Q ; B 102" " -115 616 576 ;\nC 82 ; WX 600 ; N R ; B 47 0 594 563 ;\nC 83 ; WX 600 ; N S ; B" " 96 -17 602 577 ;\nC 84 ; WX 600 ; N T ; B 152 0 648 563 ;\nC 85 ; WX 600 ; N U " "; B 136 -16 676 563 ;\nC 86 ; WX 600 ; N V ; B 124 0 707 563 ;\nC 87 ; WX 600 ; " "N W ; B 122 0 696 563 ;\nC 88 ; WX 600 ; N X ; B 44 0 662 563 ;\nC 89 ; WX 600 ;" " N Y ; B 153 0 665 563 ;\nC 90 ; WX 600 ; N Z ; B 103 0 590 563 ;\nC 91 ; WX 600" " ; N bracketleft ; B 254 -124 570 604 ;\nC 92 ; WX 600 ; N backslash ; B 250 -81" " 474 668 ;\nC 93 ; WX 600 ; N bracketright ; B 132 -124 448 604 ;\nC 94 ; WX 600" " ; N asciicircum ; B 192 354 567 615 ;\nC 95 ; WX 600 ; N underscore ; B -61 -12" "5 564 -75 ;\nC 96 ; WX 600 ; N quoteleft ; B 388 343 544 604 ;\nC 97 ; WX 600 ; " "N a ; B 93 -16 546 431 ;\nC 98 ; WX 600 ; N b ; B 26 -16 591 604 ;\nC 99 ; WX 60" "0 ; N c ; B 121 -17 596 432 ;\nC 100 ; WX 600 ; N d ; B 102 -16 630 604 ;\nC 101" " ; WX 600 ; N e ; B 104 -16 570 431 ;\nC 102 ; WX 600 ; N f ; B 109 0 663 604 ;\n" "C 103 ; WX 600 ; N g ; B 105 -186 647 431 ;\nC 104 ; WX 600 ; N h ; B 55 0 556 6" "04 ;\nC 105 ; WX 600 ; N i ; B 96 0 513 624 ;\nC 106 ; WX 600 ; N j ; B 112 -186" " 547 624 ;\nC 107 ; WX 600 ; N k ; B 67 0 578 604 ;\nC 108 ; WX 600 ; N l ; B 96" " 0 513 604 ;\nC 109 ; WX 600 ; N m ; B 15 0 603 431 ;\nC 110 ; WX 600 ; N n ; B " "57 0 546 431 ;\nC 111 ; WX 600 ; N o ; B 111 -16 577 431 ;\nC 112 ; WX 600 ; N p" " ; B -13 -186 593 431 ;\nC 113 ; WX 600 ; N q ; B 105 -186 668 431 ;\nC 114 ; WX" " 600 ; N r ; B 88 0 619 427 ;\nC 115 ; WX 600 ; N s ; B 108 -17 558 431 ;\nC 116" " ; WX 600 ; N t ; B 127 -16 518 563 ;\nC 117 ; WX 600 ; N u ; B 127 -16 569 417 " ";\nC 118 ; WX 600 ; N v ; B 114 0 655 417 ;\nC 119 ; WX 600 ; N w ; B 114 0 655 " "417 ;\nC 120 ; WX 600 ; N x ; B 55 0 611 417 ;\nC 121 ; WX 600 ; N y ; B 22 -186" " 634 417 ;\nC 122 ; WX 600 ; N z ; B 115 0 563 417 ;\nC 123 ; WX 600 ; N bracele" "ft ; B 248 -124 528 604 ;\nC 124 ; WX 600 ; N bar ; B 257 -124 444 604 ;\nC 125 " "; WX 600 ; N braceright ; B 175 -124 455 604 ;\nC 126 ; WX 600 ; N asciitilde ; " "B 145 212 575 348 ;\nC 161 ; WX 600 ; N exclamdown ; B 222 -216 439 417 ;\nC 162" " ; WX 600 ; N cent ; B 175 -13 563 630 ;\nC 163 ; WX 600 ; N sterling ; B 90 0 5" "41 578 ;\nC 164 ; WX 600 ; N fraction ; B 84 138 645 470 ;\nC 165 ; WX 600 ; N y" "en ; B 161 0 665 563 ;\nC 166 ; WX 600 ; N florin ; B 74 -93 643 618 ;\nC 167 ; " "WX 600 ; N section ; B 91 -62 624 603 ;\nC 168 ; WX 600 ; N currency ; B 127 95 " "597 489 ;\nC 169 ; WX 600 ; N quotesingle ; B 344 315 492 604 ;\nC 170 ; WX 600 " "; N quotedblleft ; B 221 343 586 604 ;\nC 171 ; WX 600 ; N guillemotleft ; B 108" " 0 626 417 ;\nC 172 ; WX 600 ; N guilsinglleft ; B 108 0 397 417 ;\nC 173 ; WX 6" "00 ; N guilsinglright ; B 297 0 585 417 ;\nC 174 ; WX 600 ; N fi ; B 14 0 615 62" "4 ;\nC 175 ; WX 600 ; N fl ; B 14 0 611 604 ;\nC 177 ; WX 600 ; N endash ; B 131" " 261 588 302 ;\nC 178 ; WX 600 ; N dagger ; B 208 -63 561 604 ;\nC 179 ; WX 600 " "; N daggerdbl ; B 154 -62 561 604 ;\nC 180 ; WX 600 ; N periodcentered ; B 285 2" "17 436 348 ;\nC 182 ; WX 600 ; N paragraph ; B 152 -62 648 604 ;\nC 183 ; WX 600" " ; N bullet ; B 253 141 449 337 ;\nC 184 ; WX 600 ; N quotesinglbase ; B 110 -14" "5 371 145 ;\nC 185 ; WX 600 ; N quotedblbase ; B 73 -116 538 145 ;\nC 186 ; WX 6" "00 ; N quotedblright ; B 170 343 635 604 ;\nC 187 ; WX 600 ; N guillemotright ; " "B 67 0 585 417 ;\nC 188 ; WX 600 ; N ellipsis ; B 57 -15 557 84 ;\nC 189 ; WX 60" "0 ; N perthousand ; B 91 -9 598 614 ;\nC 191 ; WX 600 ; N questiondown ; B 105 -" "175 455 417 ;\nC 193 ; WX 600 ; N grave ; B 286 490 429 639 ;\nC 194 ; WX 600 ; " "N acute ; B 388 490 577 639 ;\nC 195 ; WX 600 ; N circumflex ; B 263 490 554 639" " ;\nC 196 ; WX 600 ; N tilde ; B 258 516 579 605 ;\nC 197 ; WX 600 ; N macron ; " "B 273 536 564 576 ;\nC 198 ; WX 600 ; N breve ; B 280 489 574 621 ;\nC 199 ; WX " "600 ; N dotaccent ; B 368 511 470 611 ;\nC 200 ; WX 600 ; N dieresis ; B 258 511" " 581 611 ;\nC 202 ; WX 600 ; N ring ; B 326 480 516 661 ;\nC 203 ; WX 600 ; N ce" "dilla ; B 181 -173 356 0 ;\nC 205 ; WX 600 ; N hungarumlaut ; B 263 490 576 633 " ";\nC 206 ; WX 600 ; N ogonek ; B 258 -155 408 0 ;\nC 207 ; WX 600 ; N caron ; B " "286 490 577 639 ;\nC 208 ; WX 600 ; N emdash ; B 60 261 659 302 ;\nC 225 ; WX 60" "0 ; N AE ; B 14 0 690 563 ;\nC 227 ; WX 600 ; N ordfeminine ; B 229 279 511 574 " ";\nC 232 ; WX 600 ; N Lslash ; B 66 0 586 563 ;\nC 233 ; WX 600 ; N Oslash ; B 3" "4 -43 685 605 ;\nC 234 ; WX 600 ; N OE ; B 62 0 690 563 ;\nC 235 ; WX 600 ; N or" "dmasculine ; B 243 284 543 577 ;\nC 241 ; WX 600 ; N ae ; B 36 -16 630 431 ;\nC " "245 ; WX 600 ; N dotlessi ; B 96 0 513 417 ;\nC 248 ; WX 600 ; N lslash ; B 96 0" " 524 604 ;\nC 249 ; WX 600 ; N oslash ; B 47 -43 637 458 ;\nC 250 ; WX 600 ; N o" "e ; B 50 -16 630 431 ;\nC 251 ; WX 600 ; N germandbls ; B 47 -16 539 604 ;\nC -1" " ; WX 600 ; N Udieresis ; B 136 -16 676 762 ;\nC -1 ; WX 600 ; N Uacute ; B 136 " "-16 676 789 ;\nC -1 ; WX 600 ; N Scedilla ; B 96 -179 602 577 ;\nC -1 ; WX 600 ;" " N Tcaron ; B 152 0 648 789 ;\nC -1 ; WX 600 ; N Scaron ; B 96 -17 618 789 ;\nC " "-1 ; WX 600 ; N Rcaron ; B 47 0 594 789 ;\nC -1 ; WX 600 ; N Racute ; B 47 0 594" " 789 ;\nC -1 ; WX 600 ; N Sacute ; B 96 -17 602 789 ;\nC -1 ; WX 600 ; N Otilde " "; B 103 -16 618 755 ;\nC -1 ; WX 600 ; N ucircumflex ; B 127 -16 569 639 ;\nC -1" " ; WX 600 ; N Ohungarumlaut ; B 102 -16 672 787 ;\nC -1 ; WX 600 ; N Uhungarumla" "ut ; B 136 -16 676 787 ;\nC -1 ; WX 600 ; N Yacute ; B 153 0 665 789 ;\nC -1 ; W" "X 600 ; N Eth ; B 47 0 592 563 ;\nC -1 ; WX 600 ; N Dcroat ; B 47 0 592 563 ;\nC" " -1 ; WX 600 ; N Zacute ; B 103 0 590 789 ;\nC -1 ; WX 600 ; N Uring ; B 136 -16" " 676 807 ;\nC -1 ; WX 600 ; N gbreve ; B 105 -186 647 621 ;\nC -1 ; WX 600 ; N e" "ogonek ; B 104 -155 570 431 ;\nC -1 ; WX 600 ; N edotaccent ; B 104 -16 570 611 " ";\nC -1 ; WX 600 ; N ecaron ; B 104 -16 577 639 ;\nC -1 ; WX 600 ; N Ugrave ; B " "136 -16 676 789 ;\nC -1 ; WX 600 ; N Thorn ; B 47 0 566 563 ;\nC -1 ; WX 600 ; N" " eacute ; B 104 -16 570 639 ;\nC -1 ; WX 600 ; N edieresis ; B 104 -16 586 611 ;" "\nC -1 ; WX 600 ; N dcaron ; B 102 -16 774 618 ;\nC -1 ; WX 600 ; N ccedilla ; B" " 122 -173 596 431 ;\nC -1 ; WX 600 ; N ccaron ; B 121 -17 596 639 ;\nC -1 ; WX 6" "00 ; N cacute ; B 121 -17 596 639 ;\nC -1 ; WX 600 ; N aogonek ; B 93 -155 546 4" "31 ;\nC -1 ; WX 600 ; N aring ; B 93 -16 546 661 ;\nC -1 ; WX 600 ; N atilde ; B" " 93 -16 570 605 ;\nC -1 ; WX 600 ; N abreve ; B 93 -16 574 621 ;\nC -1 ; WX 600 " "; N egrave ; B 104 -16 570 639 ;\nC -1 ; WX 600 ; N agrave ; B 93 -16 546 639 ;\n" "C -1 ; WX 600 ; N aacute ; B 93 -16 546 639 ;\nC -1 ; WX 600 ; N adieresis ; B 9" "3 -16 571 611 ;\nC -1 ; WX 600 ; N Uogonek ; B 136 -155 676 563 ;\nC -1 ; WX 600" " ; N ugrave ; B 127 -16 569 639 ;\nC -1 ; WX 600 ; N uacute ; B 127 -16 569 639 " ";\nC -1 ; WX 600 ; N udieresis ; B 127 -16 573 611 ;\nC -1 ; WX 600 ; N tcaron ;" " B 127 -16 593 618 ;\nC -1 ; WX 600 ; N scommaaccent ; B 108 -237 558 431 ;\nC -" "1 ; WX 600 ; N Zcaron ; B 103 0 604 789 ;\nC -1 ; WX 600 ; N ecircumflex ; B 104" " -16 570 639 ;\nC -1 ; WX 600 ; N Ucircumflex ; B 136 -16 676 789 ;\nC -1 ; WX 6" "00 ; N acircumflex ; B 93 -16 546 639 ;\nC -1 ; WX 600 ; N Zdotaccent ; B 103 0 " "590 762 ;\nC -1 ; WX 600 ; N scaron ; B 107 -17 584 639 ;\nC -1 ; WX 600 ; N Ama" "cron ; B 13 0 596 723 ;\nC -1 ; WX 600 ; N sacute ; B 108 -17 577 639 ;\nC -1 ; " "WX 600 ; N Tcommaaccent ; B 152 -237 648 563 ;\nC -1 ; WX 600 ; N Ydieresis ; B " "153 0 665 762 ;\nC -1 ; WX 600 ; N thorn ; B -13 -186 593 590 ;\nC -1 ; WX 600 ;" " N Emacron ; B 47 0 619 723 ;\nC -1 ; WX 600 ; N Ograve ; B 102 -16 616 789 ;\nC" " -1 ; WX 600 ; N Oacute ; B 102 -16 616 789 ;\nC -1 ; WX 600 ; N Odieresis ; B 1" "02 -16 616 762 ;\nC -1 ; WX 600 ; N Ntilde ; B 46 0 678 755 ;\nC -1 ; WX 600 ; N" " Ncaron ; B 46 0 678 789 ;\nC -1 ; WX 600 ; N Nacute ; B 46 0 678 789 ;\nC -1 ; " "WX 600 ; N Lcaron ; B 67 0 638 576 ;\nC -1 ; WX 600 ; N Lacute ; B 67 0 585 789 " ";\nC -1 ; WX 600 ; N Idotaccent ; B 117 0 603 762 ;\nC -1 ; WX 600 ; N racute ; " "B 88 0 619 639 ;\nC -1 ; WX 600 ; N Icircumflex ; B 117 0 603 789 ;\nC -1 ; WX 6" "00 ; N ohungarumlaut ; B 111 -16 616 633 ;\nC -1 ; WX 600 ; N otilde ; B 111 -16" " 586 605 ;\nC -1 ; WX 600 ; N Euro ; B 60 -16 634 576 ;\nC -1 ; WX 600 ; N ocirc" "umflex ; B 111 -16 577 639 ;\nC -1 ; WX 600 ; N onesuperior ; B 249 259 469 612 " ";\nC -1 ; WX 600 ; N twosuperior ; B 230 259 514 612 ;\nC -1 ; WX 600 ; N threes" "uperior ; B 245 251 516 612 ;\nC -1 ; WX 600 ; N Igrave ; B 117 0 603 789 ;\nC -" "1 ; WX 600 ; N Iacute ; B 117 0 603 789 ;\nC -1 ; WX 600 ; N Imacron ; B 117 0 6" "03 723 ;\nC -1 ; WX 600 ; N Iogonek ; B 117 -155 603 563 ;\nC -1 ; WX 600 ; N Id" "ieresis ; B 117 0 611 762 ;\nC -1 ; WX 600 ; N Gbreve ; B 108 -16 656 777 ;\nC -" "1 ; WX 600 ; N Umacron ; B 136 -16 676 723 ;\nC -1 ; WX 600 ; N Kcommaaccent ; B" " 47 -237 662 563 ;\nC -1 ; WX 600 ; N ograve ; B 111 -16 577 639 ;\nC -1 ; WX 60" "0 ; N Scommaaccent ; B 96 -237 602 577 ;\nC -1 ; WX 600 ; N Eogonek ; B 47 -155 " "619 563 ;\nC -1 ; WX 600 ; N oacute ; B 111 -16 577 639 ;\nC -1 ; WX 600 ; N Edo" "taccent ; B 47 0 619 762 ;\nC -1 ; WX 600 ; N iogonek ; B 96 -155 513 624 ;\nC -" "1 ; WX 600 ; N gcommaaccent ; B 105 -186 647 668 ;\nC -1 ; WX 600 ; N odieresis " "; B 111 -16 581 611 ;\nC -1 ; WX 600 ; N ntilde ; B 57 0 570 605 ;\nC -1 ; WX 60" "0 ; N ncaron ; B 57 0 577 639 ;\nC -1 ; WX 600 ; N Ecaron ; B 47 0 619 789 ;\nC " "-1 ; WX 600 ; N Ecircumflex ; B 47 0 619 789 ;\nC -1 ; WX 600 ; N scedilla ; B 1" "08 -173 558 431 ;\nC -1 ; WX 600 ; N rcaron ; B 88 0 619 639 ;\nC -1 ; WX 600 ; " "N Egrave ; B 47 0 619 789 ;\nC -1 ; WX 600 ; N Eacute ; B 47 0 619 789 ;\nC -1 ;" " WX 600 ; N Gcommaaccent ; B 108 -237 636 576 ;\nC -1 ; WX 600 ; N Rcommaaccent " "; B 47 -237 594 563 ;\nC -1 ; WX 600 ; N Edieresis ; B 47 0 619 762 ;\nC -1 ; WX" " 600 ; N nacute ; B 57 0 577 639 ;\nC -1 ; WX 600 ; N uogonek ; B 127 -155 569 4" "17 ;\nC -1 ; WX 600 ; N umacron ; B 127 -16 569 576 ;\nC -1 ; WX 600 ; N Dcaron " "; B 47 0 592 789 ;\nC -1 ; WX 600 ; N lcaron ; B 96 0 593 618 ;\nC -1 ; WX 600 ;" " N Ccaron ; B 110 -16 635 789 ;\nC -1 ; WX 600 ; N Cacute ; B 110 -16 635 789 ;\n" "C -1 ; WX 600 ; N Ccedilla ; B 110 -173 635 576 ;\nC -1 ; WX 600 ; N degree ; B " "257 346 553 636 ;\nC -1 ; WX 600 ; N Aogonek ; B 13 -155 596 563 ;\nC -1 ; WX 60" "0 ; N minus ; B 131 261 588 302 ;\nC -1 ; WX 600 ; N multiply ; B 143 100 577 46" "4 ;\nC -1 ; WX 600 ; N divide ; B 131 25 588 540 ;\nC -1 ; WX 600 ; N Aring ; B " "13 0 596 811 ;\nC -1 ; WX 600 ; N trademark ; B 90 243 710 563 ;\nC -1 ; WX 600 " "; N rcommaaccent ; B 88 -237 619 427 ;\nC -1 ; WX 600 ; N lacute ; B 96 0 572 78" "9 ;\nC -1 ; WX 600 ; N omacron ; B 111 -16 577 576 ;\nC -1 ; WX 600 ; N Atilde ;" " B 13 0 596 755 ;\nC -1 ; WX 600 ; N icircumflex ; B 95 0 536 639 ;\nC -1 ; WX 6" "00 ; N igrave ; B 96 0 513 639 ;\nC -1 ; WX 600 ; N ncommaaccent ; B 57 -237 546" " 431 ;\nC -1 ; WX 600 ; N lcommaaccent ; B 96 -237 513 604 ;\nC -1 ; WX 600 ; N " "plusminus ; B 76 0 597 529 ;\nC -1 ; WX 600 ; N onehalf ; B 82 0 627 612 ;\nC -1" " ; WX 600 ; N onequarter ; B 74 0 619 612 ;\nC -1 ; WX 600 ; N threequarters ; B" " 70 0 619 612 ;\nC -1 ; WX 600 ; N iacute ; B 96 0 535 639 ;\nC -1 ; WX 600 ; N " "Abreve ; B 13 0 596 777 ;\nC -1 ; WX 600 ; N kcommaaccent ; B 67 -237 578 604 ;\n" "C -1 ; WX 600 ; N Omacron ; B 102 -16 616 723 ;\nC -1 ; WX 600 ; N imacron ; B 9" "6 0 564 576 ;\nC -1 ; WX 600 ; N emacron ; B 104 -16 570 576 ;\nC -1 ; WX 600 ; " "N amacron ; B 93 -16 564 576 ;\nC -1 ; WX 600 ; N tcommaaccent ; B 127 -237 518 " "563 ;\nC -1 ; WX 600 ; N ydieresis ; B 22 -186 634 611 ;\nC -1 ; WX 600 ; N zdot" "accent ; B 115 0 563 611 ;\nC -1 ; WX 600 ; N zcaron ; B 115 0 576 639 ;\nC -1 ;" " WX 600 ; N zacute ; B 115 0 577 639 ;\nC -1 ; WX 600 ; N yacute ; B 22 -186 634" " 639 ;\nC -1 ; WX 600 ; N uhungarumlaut ; B 127 -16 576 633 ;\nC -1 ; WX 600 ; N" " eth ; B 111 -17 582 620 ;\nC -1 ; WX 600 ; N uring ; B 127 -16 569 661 ;\nC -1 " "; WX 600 ; N Ocircumflex ; B 102 -16 616 789 ;\nC -1 ; WX 600 ; N commaaccent ; " "B 159 -237 322 -60 ;\nC -1 ; WX 600 ; N copyright ; B 57 -15 663 578 ;\nC -1 ; W" "X 600 ; N registered ; B 57 -15 663 578 ;\nC -1 ; WX 600 ; N Acircumflex ; B 13 " "0 596 789 ;\nC -1 ; WX 600 ; N idieresis ; B 96 0 568 611 ;\nC -1 ; WX 600 ; N l" "ozenge ; B 149 -11 571 575 ;\nC -1 ; WX 600 ; N Delta ; B 43 0 557 563 ;\nC -1 ;" " WX 600 ; N notequal ; B 96 94 625 464 ;\nC -1 ; WX 600 ; N radical ; B 88 0 773" " 699 ;\nC -1 ; WX 600 ; N Agrave ; B 13 0 596 789 ;\nC -1 ; WX 600 ; N Aacute ; " "B 13 0 596 789 ;\nC -1 ; WX 600 ; N lessequal ; B 56 0 635 535 ;\nC -1 ; WX 600 " "; N greaterequal ; B 71 0 600 535 ;\nC -1 ; WX 600 ; N logicalnot ; B 160 168 62" "1 438 ;\nC -1 ; WX 600 ; N summation ; B 90 -127 616 563 ;\nC -1 ; WX 600 ; N pa" "rtialdiff ; B 111 -16 580 581 ;\nC -1 ; WX 600 ; N Ncommaaccent ; B 46 -237 678 " "563 ;\nC -1 ; WX 600 ; N dcroat ; B 102 -16 690 604 ;\nC -1 ; WX 600 ; N brokenb" "ar ; B 257 -124 444 604 ;\nC -1 ; WX 600 ; N Lcommaaccent ; B 67 -237 585 563 ;\n" "C -1 ; WX 600 ; N Adieresis ; B 13 0 596 762 ;\nC -1 ; WX 600 ; N mu ; B 86 -200" " 569 417 ;\nC -1 ; WX 600 ; N .notdef ; B 319 0 319 0 ;\nEndCharMetrics\nStartKe" "rnData\nStartKernPairs 998\nKPX A C -41\nKPX A Ccedilla -39\nKPX A G -36\nKPX A " "O -35\nKPX A Odieresis -35\nKPX A Q -37\nKPX A T -34\nKPX A U -41\nKPX A Uacute " "-41\nKPX A Ucircumflex -41\nKPX A Udieresis -41\nKPX A Ugrave -41\nKPX A V -78\n" "KPX A W -20\nKPX A Y -35\nKPX A a 1\nKPX A b 40\nKPX A c -26\nKPX A ccedilla -23" "\nKPX A comma -47\nKPX A d -17\nKPX A e -21\nKPX A g -27\nKPX A guillemotleft -5" "7\nKPX A guilsinglleft -57\nKPX A hyphen -35\nKPX A o -22\nKPX A period -70\nKPX" " A q -27\nKPX A quotedblright -82\nKPX A quoteright -102\nKPX A t -33\nKPX A u -" "23\nKPX A v -59\nKPX A w -27\nKPX A y -63\nKPX Aacute C -41\nKPX Aacute G -36\nK" "PX Aacute O -35\nKPX Aacute Q -37\nKPX Aacute T -34\nKPX Aacute U -41\nKPX Aacut" "e V -78\nKPX Aacute W -20\nKPX Aacute Y -35\nKPX Aacute a 1\nKPX Aacute b 40\nKP" "X Aacute c -26\nKPX Aacute comma -47\nKPX Aacute d -17\nKPX Aacute e -21\nKPX Aa" "cute g -27\nKPX Aacute guillemotleft -57\nKPX Aacute guilsinglleft -57\nKPX Aacu" "te hyphen -35\nKPX Aacute o -22\nKPX Aacute period -70\nKPX Aacute q -27\nKPX Aa" "cute quoteright -102\nKPX Aacute t -33\nKPX Aacute u -23\nKPX Aacute v -59\nKPX " "Aacute w -27\nKPX Aacute y -63\nKPX Acircumflex C -41\nKPX Acircumflex G -36\nKP" "X Acircumflex O -35\nKPX Acircumflex Q -37\nKPX Acircumflex T -34\nKPX Acircumfl" "ex U -41\nKPX Acircumflex V -78\nKPX Acircumflex W -20\nKPX Acircumflex Y -35\nK" "PX Acircumflex comma -47\nKPX Acircumflex period -70\nKPX Adieresis C -41\nKPX A" "dieresis G -36\nKPX Adieresis O -35\nKPX Adieresis Q -37\nKPX Adieresis T -34\nK" "PX Adieresis U -41\nKPX Adieresis V -78\nKPX Adieresis W -20\nKPX Adieresis Y -3" "5\nKPX Adieresis a 1\nKPX Adieresis b 40\nKPX Adieresis c -26\nKPX Adieresis com" "ma -47\nKPX Adieresis d -17\nKPX Adieresis g -27\nKPX Adieresis guillemotleft -5" "7\nKPX Adieresis guilsinglleft -57\nKPX Adieresis hyphen -35\nKPX Adieresis o -2" "2\nKPX Adieresis period -70\nKPX Adieresis q -27\nKPX Adieresis quotedblright -8" "2\nKPX Adieresis quoteright -102\nKPX Adieresis t -33\nKPX Adieresis u -23\nKPX " "Adieresis v -59\nKPX Adieresis w -27\nKPX Adieresis y -63\nKPX Agrave C -41\nKPX" " Agrave G -36\nKPX Agrave O -35\nKPX Agrave Q -37\nKPX Agrave T -34\nKPX Agrave " "U -41\nKPX Agrave V -78\nKPX Agrave W -20\nKPX Agrave Y -35\nKPX Agrave comma -4" "7\nKPX Agrave period -70\nKPX Aring C -41\nKPX Aring G -36\nKPX Aring O -35\nKPX" " Aring Q -37\nKPX Aring T -34\nKPX Aring U -41\nKPX Aring V -78\nKPX Aring W -20" "\nKPX Aring Y -35\nKPX Aring a 1\nKPX Aring b 40\nKPX Aring c -26\nKPX Aring com" "ma -47\nKPX Aring d -17\nKPX Aring e -21\nKPX Aring g -27\nKPX Aring guillemotle" "ft -57\nKPX Aring guilsinglleft -57\nKPX Aring hyphen -35\nKPX Aring o -22\nKPX " "Aring period -70\nKPX Aring q -27\nKPX Aring quotedblright -82\nKPX Aring quoter" "ight -102\nKPX Aring t -33\nKPX Aring u -23\nKPX Aring v -59\nKPX Aring w -27\nK" "PX Aring y -63\nKPX Atilde C -41\nKPX Atilde G -36\nKPX Atilde O -35\nKPX Atilde" " Q -37\nKPX Atilde T -34\nKPX Atilde U -41\nKPX Atilde V -78\nKPX Atilde W -20\n" "KPX Atilde Y -35\nKPX Atilde comma -47\nKPX Atilde period -70\nKPX B A -15\nKPX " "B AE -16\nKPX B Aacute -15\nKPX B Acircumflex -15\nKPX B Adieresis -15\nKPX B Ar" "ing -15\nKPX B Atilde -15\nKPX B O -15\nKPX B OE 5\nKPX B Oacute -15\nKPX B Ocir" "cumflex -15\nKPX B Odieresis -15\nKPX B Ograve -15\nKPX B Oslash -14\nKPX B V -3" "7\nKPX B W -15\nKPX B Y -58\nKPX C A -14\nKPX C AE -14\nKPX C Aacute -14\nKPX C " "Adieresis -14\nKPX C Aring -14\nKPX C H -34\nKPX C K -19\nKPX C O -24\nKPX C Oac" "ute -24\nKPX C Odieresis -24\nKPX Ccedilla A -8\nKPX D A -47\nKPX D Aacute -47\n" "KPX D Acircumflex -47\nKPX D Adieresis -47\nKPX D Agrave -47\nKPX D Aring -47\nK" "PX D Atilde -47\nKPX D J -38\nKPX D T -47\nKPX D V -50\nKPX D W -20\nKPX D X -60" "\nKPX D Y -71\nKPX F A -45\nKPX F Aacute -45\nKPX F Acircumflex -45\nKPX F Adier" "esis -45\nKPX F Agrave -45\nKPX F Aring -45\nKPX F Atilde -45\nKPX F J -100\nKPX" " F O -34\nKPX F Odieresis -34\nKPX F a -52\nKPX F aacute -52\nKPX F adieresis -4" "9\nKPX F ae -25\nKPX F aring -52\nKPX F comma -172\nKPX F e -61\nKPX F eacute -6" "1\nKPX F hyphen -72\nKPX F i -51\nKPX F j -59\nKPX F o -68\nKPX F oacute -68\nKP" "X F odieresis -54\nKPX F oe -26\nKPX F oslash -68\nKPX F period -196\nKPX F r -3" "7\nKPX F u -6\nKPX G A 0\nKPX G AE 0\nKPX G Aacute 0\nKPX G Acircumflex 0\nKPX G" " Adieresis 0\nKPX G Agrave 0\nKPX G Aring 0\nKPX G Atilde 0\nKPX G T -31\nKPX G " "V -1\nKPX G W -4\nKPX G Y -22\nKPX J A -14\nKPX J AE -23\nKPX J Adieresis -14\nK" "PX J Aring -14\nKPX K C -50\nKPX K G -46\nKPX K O -45\nKPX K OE -28\nKPX K Oacut" "e -45\nKPX K Odieresis -45\nKPX K S -16\nKPX K T -18\nKPX K a -8\nKPX K adieresi" "s -8\nKPX K ae 19\nKPX K aring -8\nKPX K e -30\nKPX K hyphen -66\nKPX K o -32\nK" "PX K oacute -32\nKPX K odieresis -32\nKPX K u -33\nKPX K udieresis -33\nKPX K y " "-72\nKPX L A 9\nKPX L AE 9\nKPX L Aacute 9\nKPX L Adieresis 9\nKPX L Aring 9\nKP" "X L C -19\nKPX L Ccedilla -19\nKPX L G -18\nKPX L O -15\nKPX L Oacute -15\nKPX L" " Ocircumflex -15\nKPX L Odieresis -15\nKPX L Ograve -15\nKPX L Otilde -15\nKPX L" " S -31\nKPX L T -59\nKPX L U -36\nKPX L Udieresis -36\nKPX L V -71\nKPX L W -31\n" "KPX L Y -60\nKPX L hyphen -1\nKPX L quotedblright -76\nKPX L quoteright -84\nKPX" " L u -20\nKPX L udieresis -20\nKPX L y -50\nKPX N A -10\nKPX N AE -10\nKPX N Aac" "ute -10\nKPX N Adieresis -10\nKPX N Aring -10\nKPX N C -18\nKPX N Ccedilla -18\n" "KPX N G -16\nKPX N O -14\nKPX N Oacute -14\nKPX N Odieresis -14\nKPX N a -23\nKP" "X N aacute -23\nKPX N adieresis -23\nKPX N ae 7\nKPX N aring -23\nKPX N comma -6" "4\nKPX N e -10\nKPX N eacute -10\nKPX N o -14\nKPX N oacute -14\nKPX N odieresis" " -14\nKPX N oslash -11\nKPX N period -87\nKPX N u -14\nKPX N udieresis -14\nKPX " "O A -33\nKPX O AE -30\nKPX O Aacute -33\nKPX O Adieresis -33\nKPX O Aring -33\nK" "PX O T -37\nKPX O V -40\nKPX O W -8\nKPX O X -47\nKPX O Y -61\nKPX Oacute A -33\n" "KPX Oacute T -37\nKPX Oacute V -40\nKPX Oacute W -8\nKPX Oacute Y -61\nKPX Ocirc" "umflex T -37\nKPX Ocircumflex V -40\nKPX Ocircumflex Y -61\nKPX Odieresis A -33\n" "KPX Odieresis T -37\nKPX Odieresis V -40\nKPX Odieresis W -8\nKPX Odieresis X -4" "7\nKPX Odieresis Y -61\nKPX Ograve T -37\nKPX Ograve V -40\nKPX Ograve Y -61\nKP" "X Oslash A -31\nKPX Otilde T -36\nKPX Otilde V -39\nKPX Otilde Y -60\nKPX P A -8" "7\nKPX P AE -81\nKPX P Aacute -87\nKPX P Adieresis -87\nKPX P Aring -87\nKPX P J" " -90\nKPX P a -57\nKPX P aacute -57\nKPX P adieresis -57\nKPX P ae -29\nKPX P ar" "ing -57\nKPX P comma -161\nKPX P e -47\nKPX P eacute -47\nKPX P hyphen -52\nKPX " "P o -53\nKPX P oacute -53\nKPX P odieresis -53\nKPX P oe -18\nKPX P oslash -53\n" "KPX P period -185\nKPX R C -32\nKPX R Ccedilla -33\nKPX R G -31\nKPX R O -29\nKP" "X R OE -8\nKPX R Oacute -29\nKPX R Odieresis -29\nKPX R T -35\nKPX R U -36\nKPX " "R Udieresis -36\nKPX R V -42\nKPX R W -21\nKPX R Y -36\nKPX R a 0\nKPX R aacute " "0\nKPX R adieresis 0\nKPX R ae 27\nKPX R aring 0\nKPX R e -22\nKPX R eacute -22\n" "KPX R hyphen -53\nKPX R o -23\nKPX R oacute -23\nKPX R odieresis -23\nKPX R oe 1" "5\nKPX R u -16\nKPX R uacute -16\nKPX R udieresis -16\nKPX R y -20\nKPX S A -28\n" "KPX S AE -28\nKPX S Aacute -28\nKPX S Adieresis -28\nKPX S Aring -28\nKPX S T -4" "8\nKPX S V -18\nKPX S W -23\nKPX S Y -39\nKPX S t -25\nKPX T A -34\nKPX T AE -35" "\nKPX T Aacute -34\nKPX T Acircumflex -34\nKPX T Adieresis -34\nKPX T Agrave -34" "\nKPX T Aring -34\nKPX T Atilde -34\nKPX T C -36\nKPX T G -35\nKPX T J -88\nKPX " "T O -34\nKPX T OE -12\nKPX T Oacute -34\nKPX T Ocircumflex -34\nKPX T Odieresis " "-34\nKPX T Ograve -34\nKPX T Oslash -34\nKPX T Otilde -34\nKPX T S -50\nKPX T V " "4\nKPX T W -1\nKPX T Y -17\nKPX T a -68\nKPX T ae -38\nKPX T c -83\nKPX T colon " "-145\nKPX T comma -116\nKPX T e -83\nKPX T g -76\nKPX T guillemotleft -129\nKPX " "T guilsinglleft -129\nKPX T hyphen -99\nKPX T i -51\nKPX T j -59\nKPX T o -87\nK" "PX T oslash -60\nKPX T period -145\nKPX T r -37\nKPX T s -70\nKPX T semicolon -1" "19\nKPX T u -92\nKPX T v -98\nKPX T w -96\nKPX T y -108\nKPX U A -26\nKPX U AE -" "35\nKPX U Aacute -26\nKPX U Acircumflex -26\nKPX U Adieresis -26\nKPX U Aring -2" "6\nKPX U Atilde -26\nKPX U comma -80\nKPX U m 3\nKPX U n -22\nKPX U p -5\nKPX U " "period -105\nKPX U r -47\nKPX Uacute A -26\nKPX Uacute comma -80\nKPX Uacute m 3" "\nKPX Uacute n -22\nKPX Uacute p -5\nKPX Uacute period -105\nKPX Uacute r -47\nK" "PX Ucircumflex A -26\nKPX Udieresis A -26\nKPX Udieresis b 17\nKPX Udieresis com" "ma -80\nKPX Udieresis m 3\nKPX Udieresis n -22\nKPX Udieresis p -5\nKPX Udieresi" "s period -105\nKPX Udieresis r -47\nKPX Ugrave A -26\nKPX V A -10\nKPX V AE -19\n" "KPX V Aacute -10\nKPX V Acircumflex -10\nKPX V Adieresis -10\nKPX V Agrave -10\n" "KPX V Aring -10\nKPX V Atilde -10\nKPX V C -39\nKPX V G -38\nKPX V O -37\nKPX V " "Oacute -37\nKPX V Ocircumflex -37\nKPX V Odieresis -37\nKPX V Ograve -37\nKPX V " "Oslash -38\nKPX V Otilde -38\nKPX V S -41\nKPX V T 4\nKPX V a -65\nKPX V ae -37\n" "KPX V colon -130\nKPX V comma -134\nKPX V e -56\nKPX V g -57\nKPX V guillemotlef" "t -83\nKPX V guilsinglleft -83\nKPX V hyphen -49\nKPX V i -65\nKPX V o -60\nKPX " "V oslash -57\nKPX V period -158\nKPX V r -51\nKPX V semicolon -121\nKPX V u -20\n" "KPX V y -24\nKPX W A -16\nKPX W AE -21\nKPX W Aacute -16\nKPX W Acircumflex -16\n" "KPX W Adieresis -16\nKPX W Agrave -16\nKPX W Aring -16\nKPX W Atilde -16\nKPX W " "C -14\nKPX W G -12\nKPX W O -10\nKPX W Oacute -10\nKPX W Ocircumflex -10\nKPX W " "Odieresis -10\nKPX W Ograve -10\nKPX W Oslash -7\nKPX W Otilde -10\nKPX W S -29\n" "KPX W T -2\nKPX W a -24\nKPX W ae 6\nKPX W colon -93\nKPX W comma -71\nKPX W e -" "10\nKPX W g -11\nKPX W guillemotleft -38\nKPX W guilsinglleft -38\nKPX W hyphen " "-7\nKPX W i -48\nKPX W o -14\nKPX W oslash -11\nKPX W period -95\nKPX W r -34\nK" "PX W semicolon -74\nKPX W u -2\nKPX W y -6\nKPX X C -52\nKPX X O -48\nKPX X Odie" "resis -48\nKPX X Q -48\nKPX X a -14\nKPX X e -36\nKPX X hyphen -81\nKPX X o -38\n" "KPX X u -39\nKPX X y -57\nKPX Y A -31\nKPX Y AE -34\nKPX Y Aacute -31\nKPX Y Aci" "rcumflex -31\nKPX Y Adieresis -31\nKPX Y Agrave -31\nKPX Y Aring -31\nKPX Y Atil" "de -31\nKPX Y C -60\nKPX Y G -60\nKPX Y O -59\nKPX Y Oacute -59\nKPX Y Ocircumfl" "ex -59\nKPX Y Odieresis -59\nKPX Y Ograve -59\nKPX Y Oslash -59\nKPX Y Otilde -5" "9\nKPX Y S -62\nKPX Y T -17\nKPX Y a -67\nKPX Y ae -40\nKPX Y colon -145\nKPX Y " "comma -116\nKPX Y e -81\nKPX Y g -84\nKPX Y guillemotleft -119\nKPX Y guilsingll" "eft -119\nKPX Y hyphen -96\nKPX Y i -63\nKPX Y o -86\nKPX Y oslash -59\nKPX Y p " "-39\nKPX Y period -144\nKPX Y semicolon -119\nKPX Y u -50\nKPX Y v -44\nKPX Z v " "-54\nKPX Z y -64\nKPX a j -93\nKPX a quoteright -60\nKPX a v -33\nKPX a w -23\nK" "PX a y -44\nKPX aacute v -33\nKPX aacute w -23\nKPX aacute y -44\nKPX adieresis " "v -33\nKPX adieresis w -23\nKPX adieresis y -44\nKPX ae v 16\nKPX ae w 16\nKPX a" "e y 5\nKPX agrave v -33\nKPX agrave w -23\nKPX agrave y -44\nKPX aring v -33\nKP" "X aring w -23\nKPX aring y -44\nKPX b v -17\nKPX b w 0\nKPX b y -28\nKPX c h -6\n" "KPX c k -12\nKPX comma one -148\nKPX comma quotedblright -123\nKPX comma quoteri" "ght -142\nKPX e quoteright -43\nKPX e t -34\nKPX e v -28\nKPX e w -20\nKPX e x -" "5\nKPX e y -39\nKPX eacute v -28\nKPX eacute w -20\nKPX eacute y -39\nKPX ecircu" "mflex v -28\nKPX ecircumflex w -20\nKPX ecircumflex y -39\nKPX eight four -65\nK" "PX eight one -85\nKPX eight seven -77\nKPX f a -44\nKPX f aacute -44\nKPX f adie" "resis -26\nKPX f ae -17\nKPX f aring -44\nKPX f e -58\nKPX f eacute -58\nKPX f f" " -46\nKPX f i -40\nKPX f j -63\nKPX f l -31\nKPX f o -65\nKPX f oacute -65\nKPX " "f odieresis -31\nKPX f oe -23\nKPX f oslash -36\nKPX f quoteright -62\nKPX f s -" "46\nKPX f t -10\nKPX five four -56\nKPX five one -90\nKPX five seven -78\nKPX fo" "ur four -68\nKPX four one -73\nKPX four seven -99\nKPX g a -14\nKPX g adieresis " "-14\nKPX g ae 13\nKPX g aring -14\nKPX g e -7\nKPX g eacute -7\nKPX g l -37\nKPX" " g oacute -12\nKPX g odieresis -12\nKPX g r -4\nKPX guillemotright A -50\nKPX gu" "illemotright AE -46\nKPX guillemotright Aacute -50\nKPX guillemotright Adieresis" " -50\nKPX guillemotright Aring -50\nKPX guillemotright T -128\nKPX guillemotrigh" "t V -80\nKPX guillemotright W -37\nKPX guillemotright Y -119\nKPX guilsinglright" " A -50\nKPX guilsinglright AE -46\nKPX guilsinglright Aacute -50\nKPX guilsinglr" "ight Adieresis -50\nKPX guilsinglright Aring -50\nKPX guilsinglright T -128\nKPX" " guilsinglright V -80\nKPX guilsinglright W -37\nKPX guilsinglright Y -119\nKPX " "h quoteright -52\nKPX h y -37\nKPX hyphen A -29\nKPX hyphen AE -23\nKPX hyphen A" "acute -29\nKPX hyphen Adieresis -29\nKPX hyphen Aring -29\nKPX hyphen T -98\nKPX" " hyphen V -44\nKPX hyphen W -4\nKPX hyphen Y -95\nKPX i T -64\nKPX i j -146\nKPX" " k a -12\nKPX k aacute -12\nKPX k adieresis -12\nKPX k ae 15\nKPX k aring -12\nK" "PX k comma -60\nKPX k e -34\nKPX k eacute -34\nKPX k g -43\nKPX k hyphen -104\nK" "PX k o -35\nKPX k oacute -35\nKPX k odieresis -35\nKPX k period -89\nKPX k s -14" "\nKPX k u -7\nKPX k udieresis -7\nKPX l v -86\nKPX l y -96\nKPX m p 19\nKPX m v " "7\nKPX m w 13\nKPX m y -3\nKPX n T -48\nKPX n p -8\nKPX n quoteright -50\nKPX n " "v -25\nKPX n w -14\nKPX n y -36\nKPX nine four -58\nKPX nine one -84\nKPX nine s" "even -75\nKPX o T -89\nKPX o quoteright -41\nKPX o t -24\nKPX o v -25\nKPX o w -" "7\nKPX o x -28\nKPX o y -36\nKPX oacute v -25\nKPX oacute w -7\nKPX oacute y -36" "\nKPX ocircumflex t -24\nKPX odieresis t -24\nKPX odieresis v -25\nKPX odieresis" " w -7\nKPX odieresis x -28\nKPX odieresis y -36\nKPX ograve v -25\nKPX ograve w " "-7\nKPX ograve y -36\nKPX one comma -99\nKPX one eight -94\nKPX one five -76\nKP" "X one four -127\nKPX one nine -81\nKPX one one -69\nKPX one period -128\nKPX one" " seven -147\nKPX one six -119\nKPX one three -69\nKPX one two -54\nKPX one zero " "-102\nKPX p t -20\nKPX p y -25\nKPX period one -125\nKPX period quotedblright -1" "14\nKPX period quoteright -133\nKPX q c -4\nKPX q u 37\nKPX quotedblbase A -6\nK" "PX quotedblbase AE -6\nKPX quotedblbase T -82\nKPX quotedblbase V -85\nKPX quote" "dblbase W -24\nKPX quotedblbase Y -83\nKPX quotedblleft A -66\nKPX quotedblleft " "AE -57\nKPX quotedblleft Aacute -66\nKPX quotedblleft Adieresis -66\nKPX quotedb" "lleft Aring -66\nKPX quotedblleft T -46\nKPX quotedblleft V -18\nKPX quotedbllef" "t W -8\nKPX quotedblleft Y -46\nKPX quotedblright A -67\nKPX quotedblright AE -7" "6\nKPX quotedblright Aacute -66\nKPX quotedblright Adieresis -66\nKPX quotedblri" "ght Aring -66\nKPX quotedblright T -53\nKPX quotedblright V -22\nKPX quotedblrig" "ht W -26\nKPX quotedblright Y -43\nKPX quoteleft A -87\nKPX quoteleft AE -78\nKP" "X quoteleft Aacute -87\nKPX quoteleft Adieresis -87\nKPX quoteleft Aring -87\nKP" "X quoteleft T -67\nKPX quoteleft V -39\nKPX quoteleft W -29\nKPX quoteleft Y -67" "\nKPX quoteright A -145\nKPX quoteright AE -154\nKPX quoteright Aacute -145\nKPX" " quoteright Adieresis -145\nKPX quoteright Aring -145\nKPX quoteright comma -201" "\nKPX quoteright d -129\nKPX quoteright o -135\nKPX quoteright period -224\nKPX " "quoteright r -150\nKPX quoteright s -144\nKPX quoteright t -118\nKPX quoteright " "v -112\nKPX quoteright w -108\nKPX quoteright y -122\nKPX r a -26\nKPX r aacute " "-26\nKPX r acircumflex -26\nKPX r adieresis -26\nKPX r ae 1\nKPX r agrave -26\nK" "PX r aring -26\nKPX r c -26\nKPX r ccedilla -34\nKPX r colon -86\nKPX r comma -1" "04\nKPX r d -18\nKPX r e -17\nKPX r eacute -17\nKPX r ecircumflex -17\nKPX r egr" "ave -17\nKPX r f -24\nKPX r g -15\nKPX r h -24\nKPX r hyphen -125\nKPX r i -34\n" "KPX r j -42\nKPX r k -34\nKPX r l -51\nKPX r m 27\nKPX r n 0\nKPX r o -24\nKPX r" " oacute -24\nKPX r ocircumflex -24\nKPX r odieresis -24\nKPX r oe 13\nKPX r ogra" "ve -24\nKPX r oslash -24\nKPX r p 21\nKPX r period -133\nKPX r q -16\nKPX r quot" "eright -44\nKPX r r -20\nKPX r s -29\nKPX r semicolon -75\nKPX r t 11\nKPX r u 1" "1\nKPX r v 17\nKPX r w 17\nKPX r x -4\nKPX r y 6\nKPX r z -23\nKPX s quoteright " "-51\nKPX s t -17\nKPX seven colon -154\nKPX seven comma -146\nKPX seven eight -8" "6\nKPX seven five -91\nKPX seven four -116\nKPX seven one -74\nKPX seven period " "-169\nKPX seven seven -69\nKPX seven six -104\nKPX seven three -79\nKPX seven tw" "o -76\nKPX six four -52\nKPX six one -68\nKPX six seven -55\nKPX t S -40\nKPX t " "a -25\nKPX t aacute -25\nKPX t adieresis -25\nKPX t ae 2\nKPX t aring -25\nKPX t" " colon -107\nKPX t e -43\nKPX t eacute -43\nKPX t h -8\nKPX t o -45\nKPX t oacut" "e -45\nKPX t odieresis -45\nKPX t quoteright -100\nKPX t semicolon -86\nKPX thre" "e four -58\nKPX three one -82\nKPX three seven -75\nKPX two four -97\nKPX two on" "e -73\nKPX two seven -79\nKPX u quoteright -43\nKPX v a -9\nKPX v aacute -9\nKPX" " v acircumflex -9\nKPX v adieresis -9\nKPX v ae 17\nKPX v agrave -9\nKPX v aring" " -9\nKPX v atilde -9\nKPX v c -22\nKPX v colon -75\nKPX v comma -118\nKPX v e -1" "7\nKPX v eacute -17\nKPX v ecircumflex -17\nKPX v egrave -17\nKPX v g -14\nKPX v" " hyphen -30\nKPX v l -87\nKPX v o -23\nKPX v oacute -23\nKPX v odieresis -23\nKP" "X v ograve -23\nKPX v oslash -23\nKPX v period -143\nKPX v s -22\nKPX v semicolo" "n -66\nKPX w a -9\nKPX w aacute -9\nKPX w acircumflex -9\nKPX w adieresis -9\nKP" "X w ae 17\nKPX w agrave -9\nKPX w aring -9\nKPX w atilde -9\nKPX w c -12\nKPX w " "colon -75\nKPX w comma -75\nKPX w e -4\nKPX w eacute -4\nKPX w ecircumflex -4\nK" "PX w egrave -4\nKPX w g -6\nKPX w hyphen -4\nKPX w l -53\nKPX w o -9\nKPX w oacu" "te -9\nKPX w odieresis -9\nKPX w ograve -9\nKPX w oslash -6\nKPX w period -99\nK" "PX w s -22\nKPX w semicolon -66\nKPX x a -8\nKPX x c -35\nKPX x e -30\nKPX x eac" "ute -30\nKPX x o -31\nKPX x q -33\nKPX y a -20\nKPX y aacute -20\nKPX y acircumf" "lex -20\nKPX y adieresis -20\nKPX y ae 6\nKPX y agrave -20\nKPX y aring -20\nKPX" " y atilde -20\nKPX y c -33\nKPX y colon -86\nKPX y comma -122\nKPX y e -28\nKPX " "y eacute -28\nKPX y ecircumflex -28\nKPX y egrave -28\nKPX y g -25\nKPX y hyphen" " -29\nKPX y l -98\nKPX y o -34\nKPX y oacute -34\nKPX y odieresis -34\nKPX y ogr" "ave -34\nKPX y oslash -34\nKPX y period -148\nKPX y s -33\nKPX y semicolon -77\n" "KPX zero four -64\nKPX zero one -91\nKPX zero seven -82\nEndKernPairs\nEndKernDa" "ta\nEndFontMetrics\n" ; int n022023l_pfb_len = 44404; char* n022023l_pfb = "\x80\x1m\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-ReguObli 1.05\n%%CreationDate: W" "ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme" "nt\n% (URW)++,Copyright 1999 by (URW)++ Design & Development\n% See the file COP" "YING (GNU General Public License) for license conditions.\n% As a special except" "ion, permission is granted to include this font\n% program in a Postscript or PD" "F file that consists of a document that\n% contains text to be displayed or prin" "ted using this font, regardless\n% of the conditions or license applying to the " "document itself.\n12 dict begin\n/FontInfo 10 dict dup begin\n/version (1.05) re" "adonly def\n/Notice ((URW)++,Copyright 1999 by (URW)++ Design & Development. See" " the file COPYING (GNU General Public License) for license conditions. As a spec" "ial exception, permission is granted to include this font program in a Postscrip" "t or PDF file that consists of a document that contains text to be displayed or " "printed using this font, regardless of the conditions or license applying to the" " document itself.) readonly def\n/Copyright (Copyright (URW)++,Copyright 1999 by" " (URW)++ Design & Development) readonly def\n/FullName (Nimbus Mono L Regular Ob" "lique) readonly def\n/FamilyName (Nimbus Mono L) readonly def\n/Weight (Regular)" " readonly def\n/ItalicAngle -12.0 def\n/isFixedPitch false def\n/UnderlinePositi" "on -100 def\n/UnderlineThickness 50 def\nend readonly def\n/FontName /NimbusMonL" "-ReguObli def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-61 -237 774 811} read" "only def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly de" "f\n/Encoding StandardEncoding def\n/UniqueID 5020947 def\ncurrentdict end\ncurre" "ntfile eexec\r\x80\x2\xdf\xa4\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9\xdci\x9a" "\"\xc3[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K\x89i\x9c" "t\xb4r\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88\xed*\xc4" "\x19\xff++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3\xf3\xe5" "Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2P2Q\x9d" "\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81\xd8\xd7" "\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x12>j \x85\x11\xc6" "\xd0\xc2U\xb9\xa5\xbb/\xde\xdbM9\x9cl\xf1\x94\xff\xac#h\x83v|\xfh\xf4\xef\x84\xee" "ikg}\xe7\x4\xec;\x9s\x84\xf2\xe6s\xa1\xf5\x16\x92\xb7\xb2`i78\xc2\x11\x9f}\x90\xff" "\xdb!\xebq_\xd5\xb8\x13O\xc8}\xba\x32\xe\xe5L,\xecjMk\xb3PU^\xaf\xf2\xecO\x84\x36" "\\\xcc\x8\x2\xdb\xb3\xbd\xe?\r\x9f\x85\x86G\xdd\x63w%\xc2\xca\xf9U\x7f\xdf\x84*\r" "\xa6\xa0\xca\xf\x1b\x44.\xf8\xeel\xbf+\x3\x85\x84h\xa4\x66\xacX\x83\xcb\xbd\x38\x15" "\xb2\x83\x34;9 X\x3\xc0,\x91}\x6\x82\\\x9\xe2\xbb\x14`\x9f\xa3,(\xd7 \xc0\xe1JK\x12" "\xd4\xf1%\xff\x62\x81\xff\x32M\xa3:V\xfcI\x98z\xc7\xd3\xaa e@\xf8\x12rs\xff\xe9\xa3" "\xda\xcf\xfe+\x1c&\x9d=\xb9\xa8\x11W\x8a\xc7\xd5\x32\xc2\xef\xc1\x83v\xf4s\xfb\xb2" "\xb3.\xf6\x42\xb1\x9c\xde\xc1\xd6\xde\x83\x64\x37#\xe3\xc6\xdf\xc8\x7f\x97\xa7\x0" "{`\x81\x89K\xbc\x45\xc9U\xb7\x0\x1e\xb3\x62\x11\xb2j\xd7\xa3\xd0tY\xcf\xb3?\x9cT" "\xa4\n\x36\xc\xb8\x2\xfd ,\x8e\x93\xd4\xdb\x88\x8b\x32\\\xe2\x46\xd0-\x12 \xab\xf5" "\\\xe6\x46\xdf\xb4_\x7\xcb\x84\x84\x6\xe4p6/\x80\xceL\x2\xd9\x8d\xd8\x45\x18\x98" "ws'D\xcc\x16\xc7\xf5\x66\x9fw\xef\x9n\xa5Z\xff\x98\xaa\x10>\xea\xef\xb9qs\x1e\xbf" "7\x82\xe6\xabr]N\x9e\x35\xb2\x96\x86\x89\xe8\x0|\x3\x8c\xf2[j\xe6\x94Q\xa4s\x1ey" "\xac\"\xbd&\x8fV\x94*#>R\xd7\x18s\xe8>\x0\xa1\x87N\x4\xd3\xb2.r\xfb-\x6q\xaf\x81" "\xc6\x98S\xc3\x89\xb5\x1fJ%ss\xae\xbfM\xe2\xda\x1eM\xa5\xe2\xca\x88\x94\x1f\x81\xea" "\xe0\xe3-\x98 d\xc8\xaf\xddz\x9a`\rV\xd7\x36\x5\xb9\x46\xbb\xf7\xabV\x87\xc3\xe1\xe6" "y.@\xf9*zFm\xe3R)@dSu\x5\xee\xf3\xf9\xc3\x8\xc9\xeb\x94Pm\xb0,\xfa\xe2\x89\xf1\x0" "\x5\xa6\xe4--\xce\x43s\x1az\xe3hVK)\x83\x3\x8d\xadi\x87\xf6pb\x19\x90\x18\x39[\xc0" "\xfc\xaf(z+\x4\xcq\xf7\x32_\xa1\xe9\xa9\x80\x89y\xb2\xfe\xf1\x90\x96\xb9\x8b\x8a" "\nr\x8e\xb9\x8f+\xa3\xd3;I\xe3\xc2\xb\xe9\x92\x82,z\x1b\xcc\xa5\xb4\xe4\xd1\x9\x9d" "Em\x8d}\x83\xc5~\xcb\xa0\xff!B\x80$\xf7W*\x14p1|\xb8\xcb\xc8g\x9a\x97N\x13\xd8\x8c" "h\x13\x38\xc6\x8c\x9a\xc9U\x7f\x97xON\x1c\x8c.a\xf2`#\xac\xf4\x62\x32\xcb\xbd\xf3" "\xc0\xbc\xc5X;\x93_\xe9\xfa\x9\xa5\x62\x12\x9a\x89'\xaes\x98\x8d\xb0\xf7\xe7\x33" "\xc6V\x1c\xa7\xc9qm\xca\x9b\x88 \x8aqQf\xf2\xfa\xe6\xd5\xef\xf2\x89\xa9\xb2\xed\xce" "\x81\x34\x3\xa4\x16\xf2\x43\xf1\xb5~\xed\xe7\xd8\x1e\x10\xc2\xda@e\xa3\x8+\xc9*8" "\xb2\x45sh\xee\xc9\xc3\xc1r\x96\xcb\x9\x81\x9e\x9e\x64-se\xf9\xa6\xef\x43\xf\xc7" "\xdd\x61\x1e\xa5\xfd\xbd\xed\xfarcJ\xb5\x99\xeb\x66j]\xc1x\xb0\xa0\xbd\x1f\xab\x4" "'\x92\x11^\xf3\xb6\",\x12\x41\xdc\xe3l\xb3\x8bs\x8fh\xb1\xb3\xcbH\x9f\xed\x9eS1U" "S\xf3\xc5\xc3\xbb\xce@E\x1eG\xb7\xeaS\xfd=:\xbal\xe0\xad\"]\xae\xe7\x34\xbd\xfa;" "\xf1\xd8\x1c\x1b\x42\xc6\xd8V\xa0]\x9$\xe0?v'\xc5\xeb$\xd7\xfb\xea;\xd8W\x16 \x7f" "\x96\x1bV\x80=\xbe\x4n\x81\xed_\xdc\x37\x8f\x9c\xa5,\x14\xfd\x85\x44\xca|S\x92\x1" "\xbe\xe0\x64\x87\xeb\xdc\x30\xff;(\xe8&N\xc7\xfd]\xa7\xe0\x80\x65\xb0\xa9\x14sD\xce" "(\xdaQ\x82\x33Xu\xe9\xf8\xb2\x34zD\xe3=\xfa\xa1g#*\\>i\xe8\xc5\xb5\x8b|r\x16Sx'\xc9" "6\xf5t\x1b\x87\xfchu>\xb0\xd4\xa4\x66\x96\x1d\x0P\xdbY\xdf\x31\x95\xbd\x33y\xf5\x64" "\x7f\x8c\xfe\xd3]\xa9R\xd7\xcf-\xed\x45\xeb\x44-\xbf\xe9\x92q\x1d\"\xeb\"\x8b\xdd" "\xf3k\x8d}\xba'\x6-`\xd2'\x1e\xa8\xe8\x41/B\x90\xb5\x8f[\xe2o\xf0o\x5Y\x87/\x9d\xe4" "\xde\xaa\xba\x1^\xabI\x4\xba\x1fP\x9fmQ|n\x89s\x12\xdd\xd5q\xd7i\xbcGO\xd3x\xaf\x43" "`\xe8\xb1\xf1\x3\xaau\xf4\x87!\xb9\xe0\xbaX\x93\x19\xe1]t\xac\xb\x3\xd7\x30\xc3\xef" "p\x8c|PG\x87H?\x13N\xa6)p\x97\xb4m&\x80\xff\x8a\xa5\xbz%Uc\xc8\x8dYK\x91/UtVJ\x13" "qF6ty>H4\xaf\x11\xd1Ly\x91\xe7\xfd\xb3\xa6\xab\xf8R\x9e\x1aO\x10\xca\xe7\x9c`\xd3" "t)W\x90\x93\xdb\xd0\x41\xec\xaf\x3\x82M\xf9\xc0\x7\xe9oEYZRK'\xef\x87t\xa8:\xee\xbd" ":q4\xab\x44\x35\xc8\x9\x44\xde\xff\\\x1c\xba\x92\x1b\n\x41\xb9\x65\x19hX\x1d\xa4" "\x83K<\xemM\xe1<\x1ey/\xce\xed&\xa7*\xdcM\x9e\x39\x3\x66\x1d\x88\x3\xdd\xb5\x8e\xb2" "\xb9)\xce\x31\xfc\x9fP\xa6\x94\x11k\x0\xac\x9f>\xefS\xff\xdb\x1a\xca\x33\x94\xbf" "\x11\x16\x10\x38\xf3\x99\x17\xb0\"\x39Lu\xa0\xd4g\xd6K\x89\xa4NU\x5\xde\xd7\xd9\xc6" "\xb8\xbak\xa0\x98\xf1@\xc9\xc0\xe\x9 \xe\xb4\x82\x83V\xa2\xd6\xbe\x9e\xc1\xd5RK\x9" "\xc0m\x9co\xcb^(\x8\x5\n\x33\x9b^_\xd4\xddl 5\xa4\x8f\xe9gE \x90\x1e\xdc\xad\x10" "\x7fg\xac\x8c\x8eP\x8e`\x3\x1\x19x\xd7~\xd2%\xf3\x61\xbc\xf\x86\xa9\x8b\x61 \xee" "\xaf\xb7?sw\xdb\x1er\x13\xe0-\x12\xc3\x30\xf5I%\x11\xb4\xdd\xe0\x85X\xd7][\x8a\xa2" "\xd5j1\x11\xdc\xcd%~\xe9n4F\xef\x1cv\xf0\x0\xc8\x91lL\xe2\x61\x42^\xd9\xd1[X\xce" "\xd1(\xda\xa6\xc1\x30\x4\x66\xe7\xb1R\xbc\xfb^o\xaa\xb2Q\x9b\x8a\x98\xf2k)\xf9\x81" "3\xaf\x88j\n\xa7\xe5\x86\xa0\x90\xbd\xa1\xdc\x61 \xdb\xb5\x64\x8\x85\xc6\x9\xa8\xbd" "\xad\xee\xfe]\xe0\xda[u\xa8\xa2\x9e\x92Q^\x86\xe7\xe6k\xb2\x95\x81\xe5\xaf\xf8\xcb" "eQ\xd8\xd1\x10=\xf6\rU\x8ey\x87\xe6\xf5\x61&\xa1=\xb2\xc9\xa0H\x86\xc6U\x6Nh\xa0" "\xa2\r\x1b}\xe2M\xad\"\xbb\xfe\xe1\xb7\xc3\xc2\x8\xd4\xfdjX\xdex\xd6\xa0\xa6\x12" "n\xfd\xee;\x1a\x97\x13\xde\xe9@i\xa9\xf0\xa2\xb3\x92\xa2\xf3\x91\xc4\xc7S'\x80;S" "\xf2R\xcc\x9e\xf0\x32?\x84\x92\x9b\xa4qlP8V\x81\xff[N\xd5I)\x82\x15\x94\xf9\x2k|" "\x12\x97\x94\x1b\x17\x8c?\x8apL\xe0\x97`S=\xbcl\xf4\xb1\x8a\xfb\xcb\xad\x3\x9e\xcb" ".\xbd\xc7\x83\x8a\x94\x10\xe7\xb2'\x92K\xedq#\x94\x46u\xa5\xdb\xca\x38\x8bq\xf\x8a" "\xf6\x4\x8b\x3\xdf\xb7\x13\xf8\x81\xea\xf;\x19\x1a\\\xd9\x89\xea\x15\xb\x97\x90Y" "\xc8\xaa\xde@8U\x81]\x8fy\x80\xce\x62\x88\xf4~\xaa\x37\xc1\x9}3\xf1\x37v\xf0\x87" "y\x6\xd8-\xd7\xc0\xf2\x9d\x35\xbd\xae[\xb2Q\xb8\xa2\xd4\xb1\xdc\x97\xe2&" "M\xce\x3^5\x9d\xfb\xad\xde\x84\xf7\x37\xeajY\xc2=\x1a\x64\xd9\x63\xe6\x35v\x92\x33" "bOv\x82\xea\x34\x63kY\\\xcd\x6J\xaf\xf3\x88}\x91hgGW1\xbf\xcb\xf7\xf9m^^\x1f\xbe" "j\xab\xf4T\xc2\xf5\x4\xeaN\x8e\xb3\x82\x91\x15`\x19R\x95\xc8w\x93\xd5\xf7s\x9a\xd7" "\xecqv\xe1&A<\xd4\xd1\x5\x8e\xbd}n\xbe\xe1K\xb9J\x1e\xcf(\xb6\x86\x41\x1d\x91\xe0" "ss\xe8\x91\xf7\x8cL\n\x5\xd2\xe8\xd9\n\x8a\xe2\x61O\x7f\xc2\x63\xa7\x62\xd0\xf4\x34" "\x85G:T\xc3\x17&\xf8Tw\x1\xd4\xa3\x8d V^\xd1pxG\xae\xd9\xc8\x5x\xf\x6+\x84~f\x8e" "\x15V\\\xba\x7\xa7+\xb\xa9\x9f\x3\xfbW\xd2o\xa2o\xf5y\xc3\xe\xed\n\xabo\xec\x1b]" "\xbe\xa8\x1a\xa8\x8f\x16\xf0\xc9\xbe\x86\x95\x5\xbe\x18\xc1\xcbye}\x91\xd6pn*?\xb" "\xe9\x92\x6U\xb9>\xbb\xae+M\xb]\xf6\xbe\x62,\x95\x1f,\xfa\x42\xae\xdb\xf7\xae\x64" "\x9e!P\xfe\x87\xcd\xbf\\&\x85\xef\x36\x5\x10\x80\xbf\x39\xd8\x64W:E\xae&H\xad\x97" "f+\x1fixp1\xb9\xbc\x43Q\x1f\xb8\x41U\xec\xdc=\x91\xe2G]\x7+\xdejR\x7\xac\xea\x1e" "\r.\xcb\x1d\xa8\xa1\xbcK\xee\xc3\x35\xa5\xc7\x10)c\xe8K\x97\xbet\x1c\x44X\xac\xc3" "\xd7*~S\xb1\xf0\x8c\x95_3\xed\xc3\xa0\xdc>s\x8'\xc\xf\x7f\xf8\x14\xb1\x11\x45\x99" "\x85s\xcc" "D\x7u1\x6T\xda\xf7\xf4\x1eV\xff\x45\xf8\x97\x1) \x19\xa9K\xf3\xe\xb2\xd6^\x14\xb1" "\xa1\xd6\xbf\x89\xd4\xcc\x43\x18z\xda\xdf?n\x3\xa9\xe\xd0\x1e]\x87k\xd3\xaaV\xe5" "\xee\x84\xdb\xaaM\xad\x98$\xde\x99\x84\xbd\x45\xaf\x96\xfb\x8aV\xc0\x10\xb3\xc3\xa3" "\xc6\x13\x9dX\xe9\xd6\x9d\x91\x9\xdb\x18V\x1bU\xea\xd6\x45$\x97\x84\xb\x9a\xe9\xc" "t\x9c\x15[c)qo\x1R\xa7\xadR\xdb\xd0\xb8\xa2[\x99\x95\xe1\x41\x66\x81\xf3\x8f\xdb" "\xdf\xa4\x43\x87\x9b\\L%\xaa)\xe0\xdc\xc0}\xe8\xbb\x16\x1c\x36\xd7n\xf2\x86\xec\x88" "\xd5|t\xbf\x44\xdb\xcbO\xef\xf7q\xd3\xbd\x82\xc8\xf4\xe2\x33\x35|H\xe5\x16\xef\xe3" "\xdb\x9e`\xef\x16\x8e,E\xb5\x46Q\xdf\x9aZ\xcb_\x17\x90\xf7\x92\x9b\xcb\x16\xce^\x9f" "jC\x91\x9a\xd2\x87\xdb\xc8\xe1-\x9f\x9e\x97\xe5\xdb\xaaY(y\x1aZ\x2\xd3\x9d%\x9f<" "\xe2s\xa8p\x90jd<\xc1\x8d\x86\xe2?\x11]*5\xdei&\x5=\x8c\x84\xb9@\xb3\x62\xe7\xdb" "\x18B\xb9P\xd9\xbb\x1c\xa2\x2\xf1[^Y\xe" "\xe7U\x98\xfa\xe4=\\\xf1Terw\xb\xba\x9a\x63s\xf1\x0\xcd\xc6\x1d\xb4\xe5\xeb\xbe\n" "\x93\xe0\xe5\x1c\x86\x0^3?i\x11\xb\x1c\x8eI/+\xf2R\xca\xdd[s\xe7\xd3\xeb\xb5>u\x93" "S\xf1\xef<\x9b\x8b\x39\xc2\x30\xd1:\xb7\x15\x8a]\x92\xeeLE/\x81\xf6\xdf\xc1\x88\x3" "(\n\xa0#\x83/\xd0\xdc\xb4\x82\xceZ\xf6\x15\xc9R\xbc?~X\xf6\x41}iw_\xc7\xc0\xd5\xb4" "\x5\xaa\xc6\x32\x85w6\xac\xf3+.\xe0\xf2\xa2\xc0\xf3\xb3\xca\xd4\x83\xc6\x14P[\xe9" "G\x6\x32/*(0\xfcZ\xb5\x92\x90}\x2\x91\xed\x18s7~zaX\x14\xc,\xdb\x1b\xe'\xee\xc9\xca" "P\x17\x61\x2 \x9\x92\x30\x80\x45\xcc\xb5\xa1i\xb6\x1e\xa0Tgx\xb8\xd2\x80ss\x19\x4" "g\x16`IE\xa2\x1f*\x1c\xb9\xe1^:]\xb3\x1e\xf\xb5\xa3\xb0\xaf\xdf\xdfo4$\xb7SmG?\x97" "V\xca\x36\x94\xde\xe4\x30\x1f\xb1\xab\x1a\xe4q(\xf8\xd2\xb4\x61\xc0Q\xc1\xb9\x99" "\xdb\xb0\x10\xe7\x8d\xd1:\xfc\xbb\xa6\xf7\xd5\"mT\x5'\xf1x\x81\xa1\x8fU\x1b>\xef" "v\xa7\xe2\x8bO\xdd\x87\x93\x81\xa2!~\xf2\xff\x9f\x99\x82\xe9\xeap\xad \x3\xb8\x62" "\xd7\xc3mW\xc5\xff\x9f\xbe\xaa\xb5`@\xfe\xe9s\xef\xc3\xb3M\x83\x19\x19`\x1\x1\x10" "\xba\x10iL\x17\xb7\x63Z\xe0<\xc1\xcd\x8|\xb\x5R*zy\x1f\xc\xa3@\"\xa3\xf5\x86\xbS" "m\x95Q\xbd\xfd\xbfV\n\x7\xf6:\xa4\xe6\x87@~^HXNh\x95\x91\xf1\xb5&q!>C\np\x8c\x6\xa3" "M.\x1dQ\xcf\xa6\xb3(\xa1\"\x0|\x81\xb5\xeb&;\x96wF\x96\x1b\xcf\xc8w/\x85\x2\xdd\x95" "\x89\x87$\xab\xf3i\xb0\x87\x7f\x33\x13\xa1g\xf3\xf7\x14\x2<\"\x9cWW\xd4\xd4o\xcd" "\x9bJ\xfe\xcd\x9=\xca\xbeR\xb7\x81\x32\xce\x9a\xb6\"\\\x9a\x34LK\xf8\xd9o,P\xc4'" ",\xb9\xaa\r`o\x1;&B\xf8\xc8\x80\xe0\x8e\xa2\x82,\x8c\xf5\x9},\xdb\x64\x93/\xe1\x95" "\xab\xd5\xfd\xf3m;\xe1#\xae\xdd\x8b\xa2\xf8*\x8a\x62\x8d\xbe>\xd6\x12\x9d\xc0\xfd" "\xc4\xbeP\xd5WJ\xe4\xfe\xcc\x65\x6.p\xf4p;\xfe\xcb\x35\xea\xde\x19\x62\x94\xfe\x17" ">\xa5y8g\x9d\xbam\x15\x44\x8f\xf4L\r\x1a\x90; $9\xda\x93\xc0\xb0\xe6\x12\x11\x0h" "\xf8\x7\x92\x19\xaa\x89\xf4\x35\xe4M\x4\x64\xf5H3\xbe\xb3\x38g\xb\xd8 \xd9\x41\xdf" "K1\xf5\x1b\x89[\xed\xf8\x33\xf9\xc4<\xb7\x61m\xb8\xf\x98\x8c\xe7/\xd3\xc1,}I\xf7" "@\xcf\x85\xb4vl\xe\xd3\x98\xeb\x83v\x95\xd1\x2\xde\xc1n$\xb7GZ\xf]\xde\x88\xfb\xf2" "\xd6\xb9O\x12\x64\x17\xc8\x11\xe8\x36+\x9c\xccR\xd8\x89\x1c\x13\xc1\x9\x37\xaa\xcc" "\"\x8d\x62\x1dG\x12\xcb\x9d\xe0\xba\xb6\xe\xde*\x97\xe9)+\xe0NB\xe6\xd3\x42U\x94" "\xdfV\x93\x1a\x61\xe1\xf9\x61rj\xf6\xe6\x89\x1d\x63\xb2@\xe6\xe7\x9e[\xf3\xc\x5 " "\x91\xd6\x81\xba\x11\x2@\x98t\xcf\xd8\xed\xc3\xee+\xe3\x31gn1\xac\x0\xf8\x7\x91\xd1" "\x1\x9b\xb7\x89\xcaOY\x7\xf4\x82;\x0*\xf3X\x14H\xc3R\xbbg\xd8\xf\xdf\xfc\xd1\xc5" "\xbe\xef`R30\xaa,\x4V\x0\x8f\x62\xde\xb5^i\xac/\x86\x36\x9f\xab\x1e\xcc\x90\xd2H" "yT\xe6\x11\x17\xa9\r\x92i\xa6]\xfb\xdf)~\xbd)\xc3\xdd\x1f\x62u_\x8f(\x9c\x42\xa5" "4\xf5\x96Ph_\x85v\xea/\xc5\xd2k\x99\xb8\xe3\xdc\xd3\xf1\xfe\xecs\x13\x10\x0\xf9\x9a" "\xa9\x86\x8e\xa9\xba\xc0\xb5m\xae,\xf4m\xa6\xcc\x1d\x18\xc0\xab\x8dw\xbe\xcf\xf7" "\xb8\x99\x92\x17\\\xba.\"w\x9c\x13\xdb\x9d\xf5?\xf5\xb1\xc8\xfe\x95\xe1\x64\x99}" "\x94 ,7\x17^V,\x86\"\x98\x9b\x7\\\xdc\xde\x17\x34R\xc0\x64'CT\xd5\xdb\x8f}Zx\xd4" "\x8a\xd4\xa1\x3\xb9\xe4u\x0\xd0\x8e\xdc|Q\xc1\xf3\xcf\xa7\xf4<6\x86\xa3\xc2J~\xb5" "\x1\x8b\xf\x41\x99\x61VO\x87\xe2\x12\xce\n\x7\x41\xach\xd6\x82,z\xb9\xfdh\x85\xf5" "\xd0\xb2\xac$\x9c\xb7\xf5\xe#S\xccK\nj$V/VO\xbb\xc7\x9\xc?\xdf\x12\x84\xab\xe\xc6" "\x15\xe0\xb3\xfb\xe1\x32\xf3\x15p\xc8\xa6\\\x81O\x93\x91\n\xa4\xbb\x80\xd5\x16\xcb" "p\xd2\xe1\xd1\x19i#\x8eo\x2-b\x8f\xa2\xf3:\n\x15\xc4\xef\xc\xe7\xf7S\xdf\x80\xa8" "\xad\x94\x94\x88Z\x1b\x9a\xda\xe6\xc3\x8a\xc9\xdao\xb0\xa6\x16\x96\xad:P&0%*\xd7" "\xb5t\xc8\x41\x11}4\xbd \xbd\x65\x81!}\x97{5\xf5\xd0N\x2\xb9\x33\xe1\xe8O\\\x9\xf" "f\x15\xafHMc&](Q{\xa7K\xea\x88v\xfd\xa3\x32\xa8J\xea\x12\xe6\xcd\x82\xb9J\xe1\nw" "\x8c\xd3\xa2\x16\xab\xc0\x84\x95\xef\x31\x9f\x6\xado\xf8\xad\xd2\x37\xd9\x11\xf8" "F\xa5\x14\xfd\xbf\xaa\x8a\x1e\xc8\xe0\xaa\x9f\x80\xf1\x1f\x1c\xe6\x15Q\x9aK\x4O=" "\x1c\xf1\xa1}\x7f=!t\"*_\xfa\x8b\x39\xf2\x1\x97\xffl\xaf%\xbj\xdb\xdb\xf5\x19\x1c" "RPp\xc8\xd3\x82 \xfbP\x1c\"?I=\x80\xf4\x98\x62\x1a\x2\xeb\xcc\xd6\xef\xe9\x14\xf1" "k*C]`\xc0\xa1\xa4S\xe2\x88\xa5=\x81\x8f\xe1\xed\xca}U\xa2j\x1\x7f.\xe4z\x81n\x90" "\xd6\xc3\xfc\xdf\x0\x35\xee\xa3\x7\xdf\xb0m+\xcc\xe4\x34X\xa6sT\xa4\xed\xb6\xe5\xc5" "r3\xdeO\xbe\x41\xed\x7\xee^\xc7z]\xfa\xdc@2\x13\x8d\xa9\xe1\xb7\x44(\xca\xd0*\x91" ">@\x15/\x80\x63\xa7t\xd4\xfd\xd4\x7\xeK\x8al\x8\x9f\x19\x9a\xf7\xc5)\xc2w\xe9\x2" "\x19]\xb7`\xd8\x1e\xc6U\xdf\xfd\x1b\xb2\x83\xf3\xc5\xaa\x8b\xb5\x8f$v\xbcy{(\x92" "\xe9\x44\x14\xab\xbe\x96\xd4\xdb\x93\xe2\x80\xcf}\xe2>\xb8R\xe7\xca\x95Mf\x82\xa6" "\xf1\xa4\xbe\x5\x7\x88L*\x5\xac\x86=+\xa7?;Tf\x83\x97\xb6\xc5M\xc2\xf4\x18\x31\x30" "\xab\x41Hu\xf3\xc3\xd8y+\xf7\xe5\xfcM\"\x8d\xf8wH\xbf\xb\x14\x17\x8d\xb7\xe3\xff" "\xb7\x89\x1dp\n\x1e\x95 \xd7x\xb0\x95\xda\x80\xe4\x80\x1fSD-\\\x7>\xde\xb7\x6\xa5" "\xdb\x84\x66\xff\xe7\xe7\x1\xab\xa9\xc3\x64\xa3qi\xf5\x85\xc8\x83\xa8\x37\x13\xa6" "\x1c\x9c;\xd9\x33jf~\xa4\xe3\xdb_M\xf6\xbcjU+\xe8\xd3\xef\x9\x36\x39\xecg\xe5\xff" "q\x89Y\xf9\x90$w\xf5\xaa\x89N\xd2\xd1\xcd\x31.\xd8.\xe4\x17\xd9\\I\xc9\x66q\xb2?" "\xb0\xe1s\x8e\x89*\xdf\xfe\x62\xec\x1c=L\xbe\xb6\xcd\x8\x9c\x98\xde\x8d$}\xf7\xed" "\x17\xdf\xa2\x95\x9d\x36\x62\xf1\x5\xe8\x38mu\xad\x30\x84\x80SiY\xf8\xe6\xcf\x8f" ",i7\xb0\x9f.\x81\x37\xc8\x11\x32}k\x16Z\xbe\x46\xc5\x18\x34\xa9U\xfe\x83\x6\xd1\x0" "3\xf8\xc2\xa3\x46g\xf1:\x8b\xa8\x31\xcc\xf5,z!\xc1=\xb9/>w\xb5\\\xe2\x91\xf6\x19" "\xb\xb1\xd1\x94\xa3?\xd7\x31Q\xc3\xf6\x1a\xbd-\x8a\xc\x9b\xde\x90\xe7\x96\xbd\x99" "m-\x0\x94\xdb+\xe9\x86W\xe7Q\xbd\xee\xfe\x8a\x43\xee\x45\x1\xb9\x8f\xc\xc6\xd8\x8" "\x5\x18\x94\x38\x87*`\x4z\x8c\xaa\x90\x39\x89\x35\x30\xa3\xe5\xf6\xbdu\xbb\x46k%" "\x16W7\xc9\x39\xaf\xf3\xeaY\xbf\xf4\xa7\xdb\x9\xc2\xa5\xb3k\x8a\x1f\xcl^Xp\xc7\xc9" "A%\x89\x87~\xf4O\x84(K\x8aS\xb5\xb7\x43\x15\xcer\xd2\xea\xfc\x63\x1b\xc4\xcc.[q\xdc" "\x95\x8bZcP\xcb_a\\:E\x2\xe9sb.>\x18\x19;iW-\xef\x1d\x2\x30:7^\xd6\n\xba\x1b\xc8" "\xa1y\xfa\xa0\xf2!\xa4\x90x\xfe\x15\xae\x13\x38\x35\x85\xfb\x45\xffM_;\xb3\xd0\xf6" "\xd8\xbf\x62\xe9\xbdk\xab<\x9a}8\xc8\xa5\xab\xb\xe5z\xcd\xad\xcb\xd0+\x1d\xc7\x95" "-s\xae\xf7\x2\xd4\x6\xf6'\x19\x92+\xea\x96\xb8\xfd\xc9\xb8yp\x8eyH\x91\xc7\xa0\xa4" "/,\xcdh\x12\xc3\xf4\xdb\x3\xbQx\xe3\xa6'\xc3\xe7v!\xd3\x12\xceN\xbe\x81\\\xd3\x87" "r\x8\xfa\xd9'a\xa5\x39kg\xe8\x35\"&\x9\xf8#r\x8b\x1c\x98xW\xcf\xea\xae!\xf2\xad^" "\xa9\xd8\x41!)\x93P\x80\x91\xa4\xa2\xc2h\xbf\x1d\x8d\xa1\xc6P\xf6\xab\x93\x99^|\x13" "\xa3\xf8M\xb5WH\xc6&\xfd\x9\xc0\xda\x1e\x33%\xcc\xb0\xbf\x9\x1e\x99\x62\x45\xbfQ" "\xebHf\x80\x16+\xae\x63\xb6Qk\x9fx\x9d\xaf\x37\xefSo\xcf\x96\\\x39z\xf1\xb7\xf9" "\x8a\xf8\x64\xb3\x1\xf3\xf4@\xb7\xac\xf7\x4\xb5\x95@E6x\xfdl\x15\x4Q\x94\x81\x89" "8\x12>/G\xb2\x65\xecO\\\xf2\x17-9EC\xd8L\xd4(\x11\x65\xcb\xeb\x11\x34\x9b\x31Z\x85" "\xde\xb2\xd1i\x95\x7\xb0\xc8\xc1\x10\xc7&b\xea)Y\xc4\x96/\xf0\x93\xaa^\xe6\xf2\x1f" "\x89\xb3\xcc\xb0\x14\x9c\xef\xef\x18U\xb9\xa4\x8d(\xbb\x36\x34\x16\xc0\x15\xa1\xf4" "\xea\x19u\xc3\xd8\x80\x7f\x61lX\x17\xc8\x16%\x36\x17oFJ\x19\x8e\xbe\xe6\xc9p)\xf1" "_ABu\xa3\x9b\x82\x19\x12\x8b\x8c\x85\x42\xe9H5P\x7f\xc2\xd3\x90\x8b\xb0\xec\x37W" "q(\xb\x9e\xbe\x87\xe8'\x81\x14\x18\xef\x93\xe5.\xf7\x5\x46\x89\x1b\xfc\xf\xb3Ii\xfd" "}\xeaL\xe7RM\x9e\xef\xf2\xb4k\xed\x90\x8c\xf\xb2\xe0.\xfc\x1d\x16$d.\xae\xa1\xca" "\xc1\xebHA\xe0 S.\x88\xe5\x9a\xc8\x90\xe6\xc3\xf4G4\xb9\x97\"\xe9\x81\x64\x2\xd1" "\xd0\xfd\xf8\x4\\T\x81\xec\x5Q\x0\x83n\xbf\xb4\x8e\x9f\xbc\x39!C\x3,\x90\x98S\xc9" "\xba\x38\xa1\x93\x63\x14\x1b\xed\x9\xda\xf0/\xdfN|\xc9\x80\x83!\xcd\x7\x8\xa1\xb4" "Rp\xbf\xfc\xc3\xa0\xd7\xc2\x7f~x\x17\x13\xd5\xde\xce\x82\xc7.\xd3\x3\x86\xb0-\x14" "WZ\x1a\x64GT~\xcc\x7f\xaa\xc1\xbd\xff\x33,\x92\x98GX\xe2\x42%l\x5\x46V\xcd\xd2\xc4" "]F\xe6z\xeco\x83\x9f\x95\xd7N\"*n\xae\x12\xef\xaa\xb7#\xa7\xc8\x16\xd4\xe4-N\xd2" "rZyGC\xf6u\x97\xf3\xdb\x8c\xcd\xde\x45\xba\xab\xc2W&\xb8Q\xe0.V4\x1e\xbei\xe4\xd9" "\x1f*#5\x83\xec\x81o\x18\xa1\xde\xcb\xdaJ\xb6\x93 \xf5^s\x6\x17\x36\xf\xcf\xb8\xac" "-+svu\xb4\x6)\x7f\x7f\x8cK\xc3p\xcb\x8L\"\xbf\xec_\xef\x2\xe9\xab)\x2\x82\xf7\xb1" "S\xf0\xa4\xb1\xaeV\x9f\x1eR7\x1a\x43\x46\xa7H\xdd\xe0\x93\x36\xca\xd1\xf5\x33\x7f" "\xc3\xd7\xcf\x6w\x9\x1eYH\n\xb1P!\xe0#\xe3V\xb0\xe1\xba\xc6\xc6G\x1a\xd5\x36%\xc7" "\x2\x6\xc3\x38SoM\r@s:\xb2\x17\xe2)\x7f\x86\xb5\x93q|aE\x8bl\x93\xa1`'\xcc\x88j\x8c" "\xfd\xc0\x1e\xf1\x9c\x34\xc9\xa6\x8\xb9Z\x84\xb6\xa2\xe3\x14T\xbc\x3\xc1\xf\xa5\\" "\xdc\xb7\xb1\xeb}\xc1j\xc1\xe9\x39\x81\xa4m\xec\xd7\xe7\xf0\x6\x38\xdc\xacV\x87\x44" "i\xa2\xd9\xb4\\\xbc\x81\x39\x87'\xe4\xed=\xb5\xdb\x31\x96_5\x8d\x81y\xcb\xf9\x34" "\xee,Me,\x9c\xc2\x11\x80\x7f\x7\xc\x80\xe3\xa8\"+L1\xff\xec\x8d\xfb\x9e\xe0z\x94" "\xc9sF\"T\xbc\x1b\x15\x81\x90>\xe6\xf9\xad\x91RJxq)\xa6?\xce\x4\x8b\x45\xbb\xe6\x85" "X&u\xcXkk#\xb8\x5\xfe\xc3\xe7\xaa\xac\x7\x95v\x94\x9a\x6\xf4\"\xfc,\x82k\xdbx\xae" "\x96\x13^\x9e, \xc2\xb2\xef\xf6\x17\x1d\x61\xb.\xb8\x63Z\xca\xb7\xc5\xc5\xed\x9c" "\x9f\xfc&\xcdT\xd2\xfdL\xb9\xe4)N\x17\x8c\xec\xa1\xe1l\xc8\xe3\xfc\x6Q\x8b\xd1oM" "c\xae+CWSS\x88\x34\xcd\xd9\xd8\xae}\xe6$\x0l\xe6\x88\x93\x80\x31\x33\x63Q\xa6W\x8c" "0L.T\x80\xa3\xfc\xb4:\x8b\xeeIS\xda\xbc\x30U\x8bw\x90\xc6\xe7\xa6\xf0\xf9\xff\xa5" "W\xc5\x4\x17@z\xc6\xa0\xdd\xa1\xe7\x36\xf7\x7\xb\xc8\x94U\xfc)4S=\xb0\x4\xaa\x90" "psL\x8c&\x8\xa0s0\xe4!\xa0\"\r\xab\x99\xf8\xa7t\x89\x13/d\x13\xad\xb9\xea\x63\x7f" ";u\x94\x80P\xe6g'jU\xbe\xb0\x9d\x41S\xdc\x12k\xbd\xbe\r\xb9)\x8a\xc7\x99\xa9\x43" "\xd7*\xfbv\x9b\xfa\x14\x88\xd3\x11\xbe\xb8j\x90~\xc9\x38Z\xaeOw\x83]\xff\xe4\x38" "\x9e=\x9a\xde\xd1\xb0\x8b\xbc+\x1e\xd6\x8K=\x10t\xa3&\xcc\xbf\x38\xe0k\xd0&\x91\x91" "\x7\xbd\x3\xbd\x9c\x30G\r\xb7yP\x8d\xfe\r\xc8-\xff\xd2\xde\xd7I\xe8r\xeb~\xb9\xdd" "\xf5\x9\xd5\x31\x98\x65\x7\r\xd7hF\xc3NNCi\x1a\xf4)\xaa@\xdbK\xf2\xcd\xd5\xb'U\x89" "\x98}\x80\x81\xf7\xc5\xa0\x46\x1a\xa5\xd1\x45Zf\x1x\xa9J\xb\xa0\xdc\xb6\x9c<\xeb" "\xf5\xee\x4&\xd6SOo\x91\x9d\x97\x95\xadj\xe\x1a\x1f\x45*\xf3\xb4\xcb.\xa5M`\x11\xfa" "\x80\x91\x32\x42\x1d\x11\x1e\xfcQ\x17N\":\xb6\xa1\x35\x96\x41\x1a\x97#\x7\x92\x31" "\xb0P\xce\xda\xe7\x65\x9c\xf1h\xc3\x9a\xea\x9ci\x2\xc2\xcd\x37\xd2T\x92\xce\xe0\x0" "\x96\xed\xd6=\xc7\x64;f\x7f\xdf\xde[Y]\xc5O\nr\xc2\x65\xe\x1e\x46\x99\x5\x84\xc7" "\x8a\\\xef\x9b\xfc<_\x88\xcf\xb0\xc4\x9c\xd6\xca\xdd\x9d\xbagQw\xd6\x1\x92}u\xc6" "\x90+U\xaa\xed\xe\x9e<\xb5*W|\x88}X\x1b<\xe6 \x1a\x1cw\xc9Tl\xeeZ\x13\xb9)c3\x7f" "\x17\x7\xe+\xf9\xf5\xc5\xe8k\x84\"Xc\x87\x46\x18\xaaP\xf4\xde\x85]\xe5g\xbf*\xb7" "\x16\x39\x44\xed\x43\xdb\xd7\xf4\xbb\xc0\xe1\x62\x31\x80|C\xdc\xb4{.\xb6\x94\xe6" "\xfe\xdc\xfb\xe2\x61\x94\xd2\xd9\x94:\x1b\xfe\x32\xaa\x1eS\x5\xf5\xe3\x41\xea\x2" "\x1f\x91S!b\x97\x8d\xd1\xb8\xc5)Z^uQ\xe2\xde\xe4m\xc2\x34|k2\x19z\xf4\x30\xaf;\xb6" "v\xa5;\xca\x9b\xd1\xea\x88g\x83w\xdc\n\x9a\x86\xe2\xabm\xe2\x9e>&\x1b\xfdUs\xc6o" "\xb5h{\xa9\xc0TM\x89Ju\x98\x66\xb0\x66\xe1\xdb\\\x66\xe6\n\xe0q\xcc:\x1cJ\xe4\x1" "\x97\xcd\xe4\xecr?{\x80\x13v\x19\xde\xdc\x99\xafW\xa5I}n\x3\xc1\xc9\xe6r\xe7OH\xf6" "\xc2\x13\xa3\xcf\xac\xf2i\x9c\xaer4ZQ\xc7\x1c\x1di4\x8d\xe5\xbc_D>\xc0\xea\xde\x1e" "v\xa8\xa3\x30\x66\x92,\xf3\x86\x9e<\x1d&\xa3\xb3NT\r\xc0\x8e\xa4\xda-\xde>\xeb\x17" "\xc1g\x90\xdaN\xf1\xa3\xa7mq\xd3Kx\x8a\x87\x83\x8b\xf2\xa5\xa3\xdb\x81v\xf9\xc0\x97" "\xd2\x32\x0P\xa7\x9e\xa6\xc4\xa9I&\xda\x11\xab\xcd\xcd&\xdb\xa0\x9f\xd3?0\xae\xed" "\x97~\x8bZ\xd9(\xf3\x96\x7f`v(\x85\x94)\xdc\xb4\xec\xec}\xa3\x41\x1b\xe3Z\x3\x85" "\x10\x17\xb5\x35\x98V2c\x9d\x37\x8c\xdc\xd1;\x0\xfeSzI\xfd\x9e\xb6\xdf\x1e:\xaf\\" "A\xeb\xe3W!\xfah3\xc2\xfe\x8\xaa<\xff\xc3G~\x7f\xce\xbf\x9e\xf9\xf4\xda\xe6/\xf7" "\x8f\x31\x94\x81\xc3\xf1\xe7)\x99\xc8\xa4\x93\xecn\xe2\x95\x31kX\xa5\xcd\x62\xff" "\xab\x62\xc8\x96\xe5!\xb6x4/\x4\xbc\xe1\x61<\xf7\xf6w\x8c\xbfR'\xba PE\x0\xd7\x43" "'\x7q\x95:\xcb\xd5\xc6Xd2\xf3\xfal\x9\x87\xba\xd3;\x88\xbcl\x15\xd2\x9cK<\xc5J\x9d" "\xd7*#W\xaa[\xae\xb2\xcb\x5|\xdc\xe7-\xc8\xc\xc9\x8c\x62\xb1j\xc5\xbLjvA7\x9bvl\xdd" "\xf9\x90\xdb\xb2\xfc\x7f\x9c\xdb\xbau[n=\xea\x43\x8f\xd6i\x9c\x30\xa9\x9a\x8b\x31" "x\xe6\xd6\x13\xaa\x93\x81 \x83^Qt1\xd2\x81\x14\xbc\xa1\xabt\\\x11\xfenR\xad\xb8+" "\x9d=S\xa3;\xccIt\xc\x93\x1}\x95\x31\xec\xf4\x38\x31\x35\x9c\\\x93\xcb\xe\x92m\xb4" "@\xb1\x39\xe3\x12\\\xc2\xe0i\xb1\xcfm\x96\xefh@\x7f\x32\xdbQrB\xc3\xae\xb\xc6r>V" "\xb\xf\x45\xfc\x7f\x87\xa5\xe4N\x17Q\xc8\xb7\xf9\xf6i\xc2J\xd5\xcf\x16\xf8O\xb0;" "\xa1!\xb8k\x6\x94#M\x8f,\x9c\x94ri\xaf\x96\xfc\xa0\x8ax\xf7\x36\xe4\xe0J\xce\xa4" "L[\xaa\xfd\xe3`\xfc\xd8\xbajYrL\xa8\x61`\xa5R\x7f\xd5\x64\x46\x81#\xd3\x2\xdb\x45" "\x17<\x1b!k\x1\xdc[m4\x15\xb1?\xbd\xbb\xd3\x12\x1aT\x93\x37K3W\xef\xb1\x31\xca\xbf" "\xe5\x8z\xa1\xd2\xc7G+\x3w\x6k62\xc8 s\xc6\xa8\x46(\\\xc9S\xa8\xf2\x8e\x13\x1c\xf5" "\x87\xb3R\x17\xeeI\x8d\x9a\x1d\xb5{\x6<\xe0h\xda\xf5]\x8c\xc1w\x1c\xc\x30\x99\x9c" "\xa4\xfd\xc5\xd6{\xe4\xe7\xe6\x94\x18\xf6\x33K\xc6\x14\x90\x0\x82\x1b\x89\xa7\x43" "|\xcd\xf9\xa6\xa0\xedp-Yh\xf1\xe0O~O\xe9\xfe\xc9\xd1\xe9\x94\x88\\\xb6$\x3[\xbcT" "&\xcb\x8e\xdf\x4V\x82\x8f\x8e\xeeu\xbeI\x1b\x45\xfa\xc1\x92\xa4\x5\xeb\xa2\\\xaa" "OLf\xc0\xdc#M{Av(\xdaRv\xc0\x82`\xbeQ+$2%l@\x1a\x66\xe3\xb5\x83\xe6\x9d#\xe9\xfd" "'\x8c\xd5\xf2\x17\x85\x44\xd0T\x16\xb9\xb4\xf6\x1a\x88\xa4r\x8a\xf2\xce\xed\x7\xc0" "\x8e \x7f\x31\xd6\x44\xe8\xe3\xba\x1eN/\x9d\x8e\x30\x93k\xcb\x9cj\xebT\xe3}\xb4k" "\xd6O.\xcc\x10!3m\x5\x64\xdf\xf\x18\xe5\xa6\xb6\xbaG\x2\x33\xd8\xd4\x1f\xdd\x9d\x10" "ypn\xa6\x85\xb6\xd8\xa7@W\xb\xfbx\xe3\x98K\xb1U\xc3\x15\\i\xbc\xcc\xb4\x1c\xb5\x19" "u\xee\xa1\xc1\xb4)L\xb5\x46\xcf\xb0=\xc3\x1b\xf8n\xc3\xbc\xb1\x97~\x8f\x94\xa7q\xca" "\xb0\x9d\xe1*\x82\xf1\xd6\xc7\x91\xfax\x0\xe5\xa2\x1d\xf8\x1c\x9c\x8f\xcd\xa7\x86" "\"\xab\xe7[T\xae\xeatz\xa4\xf2mV2\x0\x99.3r1\xa4\x30\x13|r\n\x17\xd4O:\xd6\xcf\xfe" "c\xb2\xde\x12\xd3\x18K\xd3\xe1Q\xf9Uxk\x8d\xdc\xcc\xb2\x90\xc4'\x18\xf3\xa2\x19\x17" "Y\xdfv7\x1c/\xc1wTJlB\\\xab\x14\xaa\xab\x31\x62\x8a\x9c\xf9\xd7\x1bRW\xaf\xf0\xd5" "\x98\x43\x98\x9c\xf0\xd7G7Z&\xdc\x9e\xd2\x9b\x66\xac!G\xda\x1h0lH\xc2HLp\xca\x92" "\xf3<\xc\x13\x8f\x92\xf2v\xf5\xea\xf5\xea\x30\x82\xa8\xa1\xcb\x12\xdb\x66\x16\x33" "\xc2\xf7\x1e;i\x91\x8fP\x90`\xac\x94\x9f\xcdR\xc3\x64\x98\xa2\xab\xb7}\x13\x9d\xf1" "\xeb\x33\xe3\xb8\x46\xa7\xc1\xbb\xdc\xef]\xee\xcaN\xf0\xad%\xc\xea\x9c'Q\xe1>\xf7" "h\x1e\x8f\xae\x4\x91\xcf\xa6\xc1\x44\xdb\xac\x1f\xc3\x9d\x39\xe7n\xb1->\xe9\xca\x15" "\x9a\xa7}'\x94\xf0\xc4\x33\x34[\x13[\xa6\x32\xf5\x44\x8+\xbd\xc9G\x1e\x9f\xa3\xae" "\xd3\xa7\xd4\x65\xabqX\xe8\xac\x97\xf6\x8b\x1f\xbc\x8d\x36\x8e#PE\xc1\x8e\xfc\xca" "\xde\xe9\x87x\xd8\x94\xd9\x63\x1\xf9\x3(\xbb\xf2\xb9R5w\x8ar\x91N\xb3p~\xa7\x82\x94\xb3" "\xa3\xbcJ\xcb\x19\xfe\x87\xc7*\xa1\xd9\x82\xe4\xb8\"\xf0{\x11\\\xad\xf4\xd3\xe7\xee" "=\x1b\xa7\x8\x65;\xeco\n5*\xc\x33%.\xd0\x63\xert\x96\x18\x96\xd4\x61\xee\x8b\xf5" "#\xd5\x91\x1b\xac\x1c\x8a\xc7\x63\xe5\xfb\x11\xfd\xd2\x17N\x1f\x12\x96u\x96\x9c\x19" "Tv\xc7\xa5\xe1\x8a\x81\xbf\x9a\x11\xed\x9f#6\xd5\x30\x1e;\xd3!t\xed\\\x93>\x8c\x85" "\xd6'.\xa2\x18R\xa6\xf7\xe2\xaa\xb1t\xe0\x96_s\xe0\xef\x89\xe9\x6\xba\xfb\x18\x1d" "\xbc\xf8\xb1\xf5\xaa\xc\x12\xd1,bru<\x1j\xfe\xc2\xec\x9f\x95\x41\xb8uxt\xd6\xf2\xe0" "a\xab\xbe\x8b)(\x16w$c\x5\xb3\xc4\x1e\x90\x41\x84&\xc5u\xba\xa2\x16\xce\xe3\xc5\xec" ")\xb2\xfd\xee\x1cw\xc1O\xdf\x94\x7\x92\xf4\x8aV\xae\x80\xaa\x33\xe3p\xb0\x37\xcb" "(\xa7\x37?\x88 \"\xaf\x37\x8f&\xb6\x0j\x4\x9f\xd3\xb3Pt\xa8\x65\xc9}\x15\x33R\xac" "\xc1V\x99,\x0\xde&\xad!\xc9\x82\xc7\x1f\xe\xdc\xfe\xb6\x15\x93\xbb@\xfa_,\xeb\xf2" "\xe5\x62\xec\x9f\x65o\x12\xf3\xe8\xf2}\xaa\x9cu\xdb\xf" "\xa9\x46\xfd\xe\x1a\x98+\xb5\x8e\x4\xb\xfc\nI\xa4\xad\x8c\xd6hI?\xcbW<\x84\x9e\xc5" "G@I\xa6\x93\xcb\xeb\xd4\xd7\x9a\xc7QPG\xcc\x34z\x9aup\xc9\x8\x61\xf3\xec\xfbW\xb9" "\xf5:\xb9\xc0\xd6\xb0\\\x8cW\n\x8f<\x4\xd5\x85U\xa4U$\xc9\x8f\xf0\x91\xb8\xf8\xa4" "\"\xf2\xe0\xe9\xe5\xa7\xb7\xffi\xf1\xce\xfc\x13\xe4/\x1c\xa2v\xbc\xd5\x84Qm&k\xa6" "\x83\x8d^\x9c\xa9\xe9\x85OP\xc7\xd9,\xae\xd6\x1a\xac\xafu\x8a|{\xe5\x9c;\xaa\x82" "\xbf\x32\xb6\x91\xac\xa3\xe8\xeb\x17\x1e\x8\xad\"\xc3\x9f\xbeXjT\xe6\xe4\xde,\xd8" "k1\x13\x85\x46\xbb\x8d\xa5\x83K,nH8Tz\x1bg\xe6Q\x96NC\x98\x8c\x80\x36\x93\x10\x88" "\x90K\xbbX\x9c\xa9\x1\xe7\xeb\xbc\x9L\r\xa8\x1e\x9\x19\x15\xd9\xe4h(\xad\x85\x96" "\xfd\xf\xca\x39\xff\x12\xa6\xc2z5\x93\x37\xf9s\x80\x9e\x81\xb2\xe9\xe3\xd4;1F\xf2" "Qfg\xe6\x7\xff\xeb\x9a\xc8\xf\xc9Z{}M\xedU\x1f\xee\xf\x35\x61\xc7\r\xb2\xd6\x9a\xba" "\x96g>9\xe3\x39\x7f\x1c?\x8f\xe5\xf4\x8b\xab\x8a\xd6\xe0\xed\x89\x1\xf9\xfl\xff$" "\xe8\xc\xb5\xdc\xacI\x85\x6\xc4\xd0\x10\x33\xe4\x97\xc1$\x1e\x41;\x2\"'\xa3&M\xa6" "\x8b\xc3\xf9\x1b\x35x\x1f\xa2\xd0\x18G\\\x19\x9f\x43\xcb\xa7\xd3\xa0\xd5i{E2\x1b" "\xad,9K q6\xe1\xe1kAyIu\xe8\x90>\xf2\xb2\xe1\xc3?\x87\xcfr\xc3%\xc1\x1e\xc0\xb9/" "\xd3\x89\n\xcd\xf6\xbR\x1d\xa3%\x96v;\xdf\xcd\xca\x83z\xdco&\xf1)\xb2<\xa3/\x9c\xd3" "\x9b\x33\xe6\x45v\x97\r\xf3\xc0[\x8d\xcaK\xfe/\x17\xe6\xc5g\x8b\x84\xd6\x94\x94\xf1" "\xdb\xa9\xfe\x4\x46\xaej\xfe\xaa\x1f\xf2\x45\xc0y\x16\xc7\xb7V\x9e\x62g\xc4+E\x94" "5\xa1\xd1\x16\xce\xc6\x65\xb3\x11\xe4\x4\x17\x17t\xc0\xac\xc8\xdd\xe9k\r\x91g\xc8" "\xcc}\x99\xc4$\x5Y-t\\D(uU\x0\xebG\x19\x34\r/\xc6\xbc![g\x82?i\xfa\x94\x9c\x8\xb5" "\xec\x98]z\xa8|\x9a\xc1\xf9\xbc\xc8\x99Ll\xbc\xe6\x2{}\x1e\xc\"\xa8:]\xe6\x1d\xba" "\x5\xd4\xafh\x84\xc9_F\xba\x7f%>\xb#7\xe3\x12\x91n\x16<\xaf\x9d\xb2\xecV\xc5\x42" "Y\x90\xfes\xeeS\xe4+;\xcc\xa1\xcf\x64/\x2\xb0\xc5\xab\xd5)\xb5h\xe9\xad\xff\x86[" "\x9d\xc1\x90$\n\xd7\x8a\xd2&\xed\x88K\xed<([L\xb0\xe3\x92\x9e\x80\\g\xf1\x31\x8d" "\x18\x65\x4\xd9 \x85vKp\xdej\xb5\xabi\x90\xf1\x81\xbd\xa5\xf\xc3\x12\x62\x34\x8d" "\x98\xe\xc7\x66\x8\xcf\x8\x17l%\x2\xe0\x65\xac-\x8e\xa5\xcf\x9e-D\xe2\xb7\n}\xdc" "{\x92 G\xc4q\xdf\x8a\xb \x87\xd1\x10k[\xd8\xa8\x30\xec\xeS\"<\xe3\xc9n\xf5nUA\x19" "\x11g\x86\xe\xeaX\xd6\x96\xec\x35~\xc5W\x99\x43\x8c\x90\x15k\xbf+\x13\xa0\xd5\xc9" "\xee\x93\"wFeN\xd7>\xa5\xb9\xca\xb6\x1d\xac[\xc6\x90\xf8\x9c\x87\xfe\xca\xf9\xad" "\x3\xbd\x39\xe4\x38\xf4;\x81\xd3\x9e\x7\xe0\x42/\x94\xe8\xb0\x96\xab\x38\xc8\x8b" "\xc2\xe1\xa0\x43\x81\x1d\x81\x41\xc1\xa3]\xd3\xa6\xdb\xe4\x16 \xe8<\x8e\xd3\xa3y" "\xcd\x80\xd4\xf9\xbc\x30\x41\xbb\x44\xb9\x33\xda\xca|]D'\xae\x94\xa1v\x82\x9f$\xb5" "\x96\x8bq41\xcb\x8b\xd9\xf5\x30\x80\x83,kxL\xea\x9bQV\x87\xf1!\x98>\xb9\xd9\xc9\xce" "\x8b\xd4\xfa;\xecH\xaf\xe6Nd;{\xd8m\x83\x83\xd0u!\xfe]\x9\x13\x92\xbe\x12L\xcc\x91" "\x11\x36\x4\x38$\xb6\x86\x98\x8e|\x83\xae\xbf@m-\xa8\x8f\xd9R\xd0\xfa\x93'\xf4\xad" "\x4\xc5_\xed\xbf\xbf\xa7n\xca\xe8\xa1v\xc5\x16G\x9a\xe1\x46q%\xb7\xeb<\x9e|[\x10" ";\xc0\xc4p\x94\x63\x46\xdf'\x1f\x8e\xe1\x9d\xf7\xe3\xfftx\xc3^\xe0Y)\x7fK\xf2\x1a" "\\{\x95\x99;\xe6 .\x89wv\x95*~\xd0\x61:\\\xac\xaf\xa7\x31\xff\xc6\x33\xca\xb6)c\x15" "\xe\x86\xed\xacy`&\xce\x2\xeb#[\x9fzT\xe0\xb0\xc5(\x15g\x13\x8a\x61+\xaf\xe4\x9\xa8" "\x18\xc2\x16\xda\x8e\xac^\xdf\x9d\x1e:\x1e\x35\x14\xaePsZ\x11\x1bM*\xa0\x83N\xc6" "\xc1\x1e)\rX\xff\x34\xf\x82\xf0\xe0y\xf1\xc7\xb3Vo#6\xea\xa4[\xf7+\xcf\x88V\x99\x88" "\xdb_e\xd4\xc1\xe5\x9bP\xf3\x41\xe4Z\x89\x96V\xa0\xb5\"\x84~\xd5g\xb4\x9c\xd5(O\xe5" "\xe_\x86R\xcd\xac\x1c\x7h\x4\xf2\xb2\x18_jQ\xed\x19\xddIA.e\xa0\xd2\xdb\xc8\x44\xb7" "^-\xf7\x1b\x0\x97v\xd9\xf9zLoxn\xff\xeb\x87\xa3\x7\xfbk\x91+\xb6Y\xdc+\xccmP\x9a" "\x9f\xbd\xe8}\xe8\xd7\x16\x4\n\x85Q\xb6\xcc\xfbwC\x97\x8a\xd9\x92\xd1M+\x85\xca\x5" ".\x87\x32\x61\x38\xdb\x19l$Y?\x8f~\xcdoHo\x85\xd1\x66k\x9d\xe2\xac\xa6\xc7\x90\x0" "D\xee\x36\x9d\"\x35$fJ'\x90\xb7s\xf9\xea&\xe0\xa4\xcd\xfdp\x99\x42\xa4\x42\x98\xb8" "$\x95\x6\xeb\x9bw\xbc\x88}\xc0\xef\x94}\xdd\xc7\xcb<\xfckH\xf0`\xdb\xf0\x32\xa1\x18" "\x84\xe6\xc2&\xd9\xd4G\xa5\xa4X\xcb\xa3%\xd5~\x14Lm\xc2\x95&'c\xe7\xbb\x8f\xf6\xa0" "\xcaG>\xb7\x66\x1c\x12\xe0\xe8\xe2>\xa3~\x8a\xb3\x38{\x9eTho>Wv]@g\xe5!\xbc\x1a\xfa" "\xe5#\x94\"w\x93\xc7\x37\xc1\x92\x8\x80?/-\xa9 \xb5S\xe2\xaa\xf9N\xb9\x92\xab\x17" "\xe3\x1bX\xc1\\\xc4\xaa\x8a\x1b\x44M\xf5\xb3\xe7\xcd\x93|\xf0>\x1f\x7f\xac\x63\x34" "'1\xb4X\x9f\x16\x93\x9d\x16\xe8\xe4\x97\xa7L\xdeV\x86\xf5)\xe9I^\x16\x3\xd7Hu(\x8c" "\xf5\x32q\xdb\x93\x13\xa4Q\x1b\x10O\x80\xb1y\xfc\xf2\x13U\x89p\xa0\x2\xe9\x45(\x1b" "\xf3\xaeQ\xe6h\xddm\x13\xd9\xe8QRt\x7fV,\xa0\xb7]\xde\xc8\xfe\x9f\xe3\x1f\x8d\x5" "\xb0\xf5\x9e\x80(\x88\xa7\xa4\xf1\x9b)\x95J1\x10\x8d/\x4\x13g\xde\xbdj\xa1\xca\xd8" "V\xbd\xd1\x42~\x9e\xfe\x89\x95o\xe2\x8dP\xc\xdcj\xc\xb8\nv\x90*\x8\xd0\xbcg\x5X2" "C\xf1\xdd\x80 t\x9b%~\xdfH\x3\xbc\xaa\x65?\x7f\xd6\xd8\xb9\x16\x90\x99[\xa5\xea>" "\xe9/\xcd\x36|\x11`\x1ck\x8a\xdc\xed\xceg\xb1lYl] \x6\x93\xac_\xa1]L\xc6\xce\x9d" "\xf7\xa7\x1c\x8a\x92^\x99\xf5\x8S\x13\xd6\xf\xad%\xc1\xbb\xaa\xd2\x8dJ\xc2\xb6\x90" "b\xd6\x8f\x39\x5\x30\xa9v1\x9a\x39\x4\xce\xe4M\xc9\x45\x1e\x44\x1a\xabG\x80\x42T" "@\xf8\xc4\x99\xb8\x14`\xb5\xd3\xe2h\x97\x41\x45\x11~\xd8\x43\xb1q\xbb\x14\xaa\x84" "\xc3\xa0\x84\xa7\xd8\xe0{\x99y&\x6u\xd5\xce\x65\x34\xdc\x17m\xdb`\xdd\xe9\xfj6t\xf6" "tb\xefx\x19_\x8d\xfft\xfbX\x82\xb0y\xde\xe3\x1f\xe9(\x16\xf1l\xe1\xa7\r\x7u.\xa2" "_\xafP\x0\xad\xf7\x9b\xbe}\x17\xeb\x1b\xd2\xf9\xbfl\xdb\xb6\xf0x\xca\xf9y\x86\x44" "&\x80\xa8\xfc\x41!\x86o\x9c\xe8l8]\xe3N0\xd8\xb9v\x8a\x1\x36\xd9\xee\xf7\x9aK8\xee" "\x99\xcb\xb9\xa4\xd3#\x16VL\x9dV\x99n%\x95u>\xa7\x1b\xefhH4\xfd\x3\r\x38\xbb\x10" "\xe#2\xb0&\xb0\x46\x31jS'\n\x96\xda\xb2\x18.\x99N\x91&/\xb0=\x1a\xff\xba\xd6#\xf1" "h\x92(@\x98\x84\xf9\x1d\xba\x15\x30\x30\x87\n{\xeb,~\xe2\xde\xc5\x18u\xb1\x37\x33" "\xb7\x92\x90\x41\xf8\xd2:\x94\x90K\xd5M\xd4\xbc\x9b\x43-\xd0\xc7\x8d\xd8\x16\x39" "\xf4mho\xfa\xd3\x9a\xaf\xbd\x1bl\x1a\x37\xe2H\xceH\xf2>\x12\x46MSy\xb4\xae\xd0\xd5" "\xbZAW~n\xcbu'\xe\x9a\xd3\xea}\xf\xc0\x9d\xab'\x1f\xb1\x8bQ\xdc\xfc\x0i\xf1]rTnl" "Q\x4\x9f\x34%\xad\x0_\x88\xfd\x7f\x2\x4-\xab\xe9\xf0\x97\xf9\xd6\xa0v\xb3\r\x8c\xd7" "w\xb1\xec\x12\xbd\x16?\xda\xbaYr\xea\xa6\x1e<\x87\xe9\xac\x0z\x5+\x1a?\xfe\x14\xd7" "\xd41\x2\xce\xc5{\x8aX\x91\x82\xfc" "e\xa4pFa\xa9\xe3Q\xfc\xcb\xc7\x31Z\x87\xe6/e\xd2N\xeb\x9c\xee\x97\x9cn\x10\xdb\xcf" "\\\x16*\xdb\x92n\xc8\xcc\x9b\xff\xe3\x81\xf6\xb8\xa3\xac\n\x19\xd1\x63\x1b\xea)8" "s\x1a\xfc\x99\xe8\xea\xa3\x9b\xc7]\xdb:9\xd0\x1a\xd8\xf0\xbc\x18\x38\xf4\xd6t\xb9" "\xbe\xe9\xf6\xf7\xbeM\x9c\x8b\xd9~\x8d\x17\x1e\xff\x33\xc\x15\xb7\x66\x14\xa1\xff" "\xd2[;\xe1\x9eJ \x1b\xcc\x85\xf\x92n\xd5\x16\x16\x31\x8c\x96Z\xd2\xf0\xe5o\x94\x33" "\xb1$|m[r\xed\xf3\xd4\x8\xa3\xe0gJP\x9b\xf3\xb\xe8\x13\xa5\xe6i\xd7+\x97\x87\x94" "h<\xa8\xb8^4i\xea\xcb\x16|0\xf7\x66m\xb5\xe0\x81\xb8\x1e\xe9\x9e\xcf\xbc\x17\x4\xb9" "dk\x1a)\xe4\xa4\xceVT\xca\x84\x9\xad\xd6\x1\x45\xdf\xc5\x42%\xbd\xb8H^9\xcc\x98\xcb" "\xc3\xf3\x8f\xd0\xa7\x97\xe5\xdf\xc2\x9\x94R\xa2\x41\x8c\x66\x36\xbd-_k$4Z\xcf\xa6" "_N}\xbd-\n\xa0\xc1wjI \xb4\x46lP\x9b\xb5\xbc}f'\x94lM\xcb\x38\xa2p\x98\xb7\xb5\xbe" "\xed\xc2\xb3\xba\x18\xf9'\x7\x7fq\xe3\x86\x44Yw\x19\x65 7b\x1b\xb3P\xbbSi\xdc\xcc" "\x7\x39T\x2nd8\xfd\x83\x93\xdd\xb3\x63\xc\x44s\xf0m\x9f\xb9\xe4\"\xe4\x35Vl9k\x12" "\xfd\xcdV\x5\xdf\xea#!q\xcd\x8e\xf2\x98xh\x6\xe9\x15\x9b\x84Y\x9c&\xd4\xc7\xd8\xc3" "\xbb\x6\x46\x65\xcd\xd0r\xe2\x8\x31\x90\x37*\xa8\x8\xb2&\x8b?\xec\x88x\xb6\x42\xc" "\xa8)\xbc\xf9\x95\xdc \xe0g\xeek\x8e\x44\xd2\x86\x9dQ\xba:\xed\xd1v?\x7f\x8d,\xfb" "\x8e\xc4\x1en\x9e\x1)\xdeSC\x14W\x96\xc\xc5\x1dTk\x10\xb8\xb6\xce\x8\xa1\xc2\xb7" "\x9f\xba\x44\x8d\xf9x=\x81V\x8\xa1lU\xe5\x89\xdc\xd8\xefk\x4\xc6\x62\x32\xf4zG9s" "\xa3V\x18\x0\ry\xb8\x17\x32X\xb7\x36\\\x96\x91\xdd\xfeG\xb1n\xeb\x8\xb2\x8f\x88\x18" "(\xb9\x46\xfb]o\xe1\xe\xccj\xfcN\xa1\xf7\x62\xe9\xb\x33 @3\x82\xe4*\xf4\x88[\x18" ":\xa4\x8d\xb5\xe4\xdf\xc9\xa5N\xbO\xfb\xf7\xc2n\xb1zO\x13\xb4\xbb\x93\x12#D4\xff" "\xf0UI\xe7X{\xa0\x37:\xcb>1A\x8b\xfa\xf4\x0\xd8\x93\x8f\xc6\x46k\x94'=\x17\x35\x30" "j\xb9\x12\xaa\xb1>1\xda\x35\x41\xc1s>*~M\xa5\xb8'g\xd3\x7f\x30\x84\xaaz|H\x8c\xdc" "\xa7\xab\xefw\xd1\x9e\x42\xb4\x44\x8a\xbb\xd3\x46\xe9\xbc(\x8a\xbc\x45@\xc0\xa1\xcf" "\xd0\xbf\x46\xc5\xbctT\xb2^'\xe9\x90j>l\xbfg\x8b\xfe\xca\xd1\xb1\x9bNB9\x8a!\xc\xd5" "g\xec\x35\xfb\x11]\\\r\xf0\xee\xec\xe5\x93\x98 V\xb0\xe1\xd1L)/p\xb3\xe0I\x98O\x88" "\x81\xc8\xb4w\x95j\xd3\x14\xbJ\xa2\"V\xda\xac\r\x11\xc4\x12h\x8\xb5\xb9\xf9\"\xbc" "\xc5\xf2Jw\xff\x35.,b\x1a\x39\x41\xac\x7\xa2\xeU\ni\xc4\x9b\x1b\x87\xd1\x16\xeeo" "/\x97\x9\x18\xf0\xf1\xa5\x1\x16j\xc4\x42?\xc2\x12\xe4\xec\x80\x39\xac\x7f\x9c!-\x86" "OA\x8c\xbb\x92\x94\x8f\xbdX\x82(\x10\x8f\xac\x1a\xd1\x83ppQ#\x5\xc1\x10\xf0\xfc?" "\xaf\xe6\xe1R\x9c+\xd0\xdd\xe8h\xa9\xeb\xe5\x13}\xfd\xfc\\\x12\xa3\xd0\x80\x14\xbf" "\xe\xe2{\x10\x80\x2\xaa\xd6\xb6\x7\xf5\xc5\xc0\xf1\xb1\xee\xd3\xc5R\x91\x9c\x9a." "\x97 J\x81'\xf9{\x10\x66`~\xcf\xb4{\xa9^\xf2\xb5\x1f\x0|);/jc\x4\x1a\x9c\x11 \xd9" "\xcf\xcdSW\".[\x2\xdf\xc7<\xf9L\xf9\xb5\xcb\x0\xea\xf0s\xe9\xbf%>0\xe0\x9bP4\x1e" "W\xbf$Ztn\xa3\x1b\xff\xd0\xb0\x2\x1\xc3L\xf0\x88\x1b\xbd\x10\x6\xbc\x9b\xa7\xd4 " "\xa4\x8eShkY\x8b\xed\xb3\x44\x99$\xeb\xa5\x8d]\xb1\xb1\xb0\x1a\xe2\xba(\x1dWX\xc9" "\x9e\xfe\x38\xad\xce\x18\xf7\xb1\x82\xfb\xd0\xd0\x62*n\xa4\x97\xa4\xe7\xc0\xc}\x17" ")\x9a'e\xef\xd8\xde\x37l!M\x1\xa2\x18\x19\x45\x1f\xc0J\x2w\xec\x84\xa1Q\xff\x93\x90" "=a\xc7\x8a\xb7\x88i\x11\xe3n\x12Rn\xd8U\xab\x43\xf6(\x9c\x18\x90\"&\x2\xb8\xef\xbf" "\x15x+7J\xc1\xe5\x80\xb6\xe9\x63@=m\x15\xa0Q\xdb\x85X\xf2\xe6\x1c\xb\x94v\xc6\xde" "]HaX\\\xf5\x15\xce\x95\x17\x32\xf2\r\x32\x96\x9f\x39\x19/\xbf\x16\x90\xd2\x42\xac" "\x4\xd4~\xcS\xd4g\xd0\xfe\x46V\xb9Rl\xf\x7f\x85#H\xb0\x43w7\xcb\xf)\xec\xf9\xb5J" "^\x17\x18R6\xdd\xc\x16\x34\x9c\x34\x96\xf3\xab\xa5i\xea \xe3\x43\xf6\xd7q!\xc\x39" "\xdc\x93-\xc6^\xce\xf9\x45u\xc6\xe7i\x2\xcd\xf6\xc8\xc8\x36\x1f\x9cuz%w\xdaSQ\x87" "\xfdRf\x99\x91|\xfe\n\xd4\x38\xc2\xa7Xr{0k\xc7\x97\x95G\xe6\x8b\x94\xe8~\xd8 aK\xdb" "\xc6I\xd4i\xefkNN=\xd2\xea\xeb_\x80\xb2/\xe5v\xce\xd2VITg\xc7ju\xf5\x89\x46\x0\x61" "\xe0?:\x1b\x6Q!\xa5\xab\xe3\xe2\xc5\x11H\xb3\xdd\xc9\xf6$\xc9x\x89\xaa\xf7\xfb\x84" "\xb1X\xc0\x15\xed\xa5g\x7\x46\xc6\x35\x9d'\xb0\xc2\xbd\x65\x14O+\x88\xa6\x43\x31" "\x81m\xa9\x4W+\xe3\x98\xe0\x15\xa9\x92\x42\x18\xb3\xee\xf9Q#\xaa\xbf\xc3\xac\x82" "\x17\xb7\xb4\xf6\x91!\x9a\x1c\x9d\xd0\xa3\xed\xd5\xc0Nc\xac\xbd\xe7\x1b\x42\x35\"" "S%a\xf4\xb7\x1bp(A\\47\xe3\x46\xber\x8a\x41U\x96\xabt\x90\x15\xc1\xd5\x9b\xd8\x32" "\x8e\x39\xa8P\xcb\x98\x8[4\xb5\x7f\xb5-\xd1\xd1T\xf9\x8f\xecI\xb3\xae\xbf\xcb\x16" "rv.M*\x1e\xcf\x2x\x7fY\xdf\x1e\xbf&%\xc3\x63\x1b\xed\x84\x9b)\x8cm\"k\xe4\xe6\xea" "*\xb6j(}+\xa9*l\x9c\x61*_\x84\x9b<\xb3\xc2_\x17\x16K\xe2\x86\xf6\xe4\xf5\xe7\xe4" "\xc9\xeb\x17\xbch\xaa^\xf0\x19\xb\x64ijW\x4\x42\xe1\xd9\xbd\xd1\xa3\xev\x92RN0\xe4" "\xb4\xc3\xdf\x84H\x1d\xce\xc6\xe1\xes\x8\xe6]\xe9\xd9\x0\x99\xf3\xfa\xbb?Ovk\xb8" "l\xc9\x85\x94m \x3\xe2\x12\x87v\x1as\x86\xcd\x84\x61\x61[W\xb\xda\x1_^\xfa#\xd1\x8e" "\x83\xc3%\xee\x44N\xc1\x66\xa1\xa3-\x98\x18\xc2\xa6Z\x9-D\x15l\x6\xd3\xfd\x7\x9b" "\x92\x45\xb\x8aI\x1c\xbb\x35)\xdd\xac}\x95\xaf\xe8\xea\xf3\x37w\xfb\xb2\x65\xfe\xb8" "\xa4\xb9\xaf\xf2\xce\xce\xff\xf4\x9a\xfb\xdc\xf6\xc4\x19t\x97\xd3\xb4H\x86mp\xef" "(\xd8\xe4\xb1~|\xe9_C\xf6K\xb4\x8cJs\xeb\x84\xb2\x66P\xf6->Q\x99\xd6M\xb0\xb5\xb8" "w\x2\x65\xe\xd0\xb8P\xfd]\x16\xc8H\xd0\x96\xe4\xc7\xe6\x1b\xc6;*>\xcf\xc0\x99\xcd" "q>\x12\xc9\x1a\x65w\xa8\x8doU\xd3Ha|zI\x89\n\x86\xea\x8f\xe2\x4W\x4\xb5\xedR\x9d" "\xb1(\xc9\xb1\x9e\xe1)\xe5\xfe\x64\x98\xcc\x97\x8\x7fk\xde\x96\x0|\x9d\x1\xce\x9c" "\xafudnZ[2\xbf\xea\xd9\x36*R\"=tiC\xa2\xd0\x9cSl\xfa\xf7\x8e`\x1b\xc2\xd2\xf0\xb7" "c\xadr.:z\xe7\x6\x9d\x65\xf9\xf2\xbd\xedrxQ\x1d\x1 \xf5\xea\x7\x1d\x41\xa6\x9f\x8c" "*-r\r;$\xb4\xbe\x61\xc8?\xfb\xef\xfa\xe2\x1b\x5`\xa6\xfd\x1a\x44\xe5>B\xe0\xd1\xe" "\xe\x93\xf4!\xa8\xa7\xe1g\xbb\x65\xf0\xd7\xf1\xdd\xe2\x80\x9f\xa3\xcd\xfd\x93\x1c" "\xcci\xb1\x19\xc8\x32\x38\xc1\xc0\xe\xc1\x0\xd8\xe7\xab\x1c\x7f\xb0.\xde\x97\x7<" "\x8aX`7\x1a\x81\x32\xbe\x39\x1e\xb1\xc3\x97\xb6\x1f\x93\x87o\xeb\x43\x8c(\x8e\xf2" "\xe3\x8d\xdc\xd1\x82\xa5\xcf\xbb\xa9\x94\xa9J\x1b\xf8\x18\x31,\xd8#B\x15\xfc\xcd" "|$\n\x15\xac\x1\xa8\x85\xe1\x17\x9e]}c\x5\xdc/SK\xaa\x14\x1f%\xeaj_5d\x86\xe5\xfa" "\n\xe3\xc6\x98\n\x9f^\x8e\x99\xe7\xae[\x95\xac\x42\x97u\x10\x97\x2\x45O\xc9Q\xe4" "1\x9a\xe4\xb1\xdd\xc9\xb0}\x9\x98\x37,\n\x95\xab\xa6\x98ZM\xbem\xc6\x33\x15O\xaa" "0\xac\xe6\x89\xd3j\x7f\x17\x1\x1b\xf2\x9c\xed\xc5\x8a\x66\x92\xa8\xb3\xb0\xa5t.l" "\xec/i\xb2U\xbc\xed\xa7\x62\xde\xe7/\x12^\xba\x98\x89\x1c\xffM\x88\xaa\xc1\x41\x88" "\xa1\x8d\x81\x42Iy\xc9\x7\x9e\x44\x89\r\x94\xee\x9ML\xad\xdc\x1cz\xc5\xf6y\x1f\xab" "\x88I\xcc\x2@\xa5y\xab\xd8\x0\xef\xe3\xaaN\xe2\xf7\x81\x19\xa3\xc2\x80l\x5\xc2\xb1" "\xf1y@\xbes\x98I\x82\xd1\xc0\x6T3\xa9\xbd\x65\x8e\xa3\x1a\xc8\x19\xda\x9a\x11\xb8" "tu\xbbV\\\xc2\x94\xb6\xf3\x2\xfe?wR\xed\x9b\x96\xcc*{\xb8\xcf" "\xbf$\x87\n\xba\x38\xd2\xcc\xf7\x86\x9e\x93\x63\xdc\n\xd9O\xac\xae\xd5\x92+2M\xc3" "\xb6\xfe\x83\xe7\xb3O\xe2\x9a\xbc\x1e\xad\x62\xb4\x9f\xfb\xcb\x81\x1a\xdb\xb5\x14" "\x8dZ\xc2t>:\x5\x83\x86\x3o\xad\xabo\xf0q\xbc\x1c;\x80#\xf9\x8\xb6\xffH\xdb\n\xb1" "\xc9\xc6t\x87\xc3R\x11\xd4\x9\x95\xe1\x89,\x8b\x66\xadl\x9c\x62\x3\xf6\xf8\xb5\x13" "\xb1\x11\x17\xb1\r\xa8rZ\xb4[D7\xb5\xa8\x8a\x96\xaf\x31x\xd8V\xd6\x1\x19n\x81\x62" "\x86\x8a\x83\xda\x64\xe4\x8\xfd\xde\xbd\x14\xd6Y\x18\x81\xea\x65 2\xcf/\x88\xb3\xfd" "l\x4y\xc8\xf8\x9a\xc6\x8d\x14\xd0\x1a\xf0\xce\xaf\xd9Z\xd1\x46\xe6\x8f\xae\x1\xa0" "\x7f\x39\xe7\xa0\xc5\xe4\xff\xa6\xd6\xa9\x1dq\x8'\xcaZ\xcf\xe7\xd1\xf9\x46\xa8\xd7" "\xb6v!\xd6\xfSA\xf3,\x12\xa6\xef\xb0:\xe5\xacSs\xa3\x82\xc0\x44\xa2v\xf6\xb4\x1c" "\x17=\n\xaa\xae\xc\x1d\xe4\xc3\xccq\xec&7\"\\\xcb\xfb\xd4^\xab\x92\xbf\x39\x35|W" "\x19[A\xft(5\x85\xb1+\x92\x64\x38\xacr\xaf\xad\xaa\xd2\xd0\xfa,\xcar\x8c\x8e\x86" "\xbd?\xe7]G\xb8\xbe\xb9j\xb1;T\x80\xf7\xa3\xd5t\x1e\xb5\x1e>@\xc2\x1f\xf2\xed}\x92" "!\xd9\x87|}\x1a\x8c\xec\xf3\x94\xe4\x2?\xcf\x8cN\xfd\xb3\x8b\x83\x94\x99\xff\\\xd9" "jF\xabO\xdb\x46\xf3];H\xb9\x17W\xc0\x15\x93(\x12\xe\x93\xcf\x1f'9\xe9\x36\xe2\x89" "\x8\xfb\x19G\x1d:\xd7\xf6\xf1\xad+\xd1\xec\x36I\x86\xa4\x11\xcc\x1bT}\xc\xa1\x4\xfb" "\xc1\xb\x1c\xa7\xb6\x38\xa6\xeuHUt\x3\x45\x61\xdb\x34]\xdahAQF\xaa\xc6\x32\xdf\xa3" "Gi\xb6\xed}}F\x94\xe9,\xbf\xf4\xef\xb1kUIY\x8\x10.\x85\xe8'\xfc\x62<\xf1\xbb\xe6" "\xa1<\xbf\x64\xe8x\xe1\xa2\xa1Y\x94\x8bU)\xb7^\x7\x17\x44\xa5\xf0\xe5\r\xf1\x8c\x11" "\xb\n\xf1\x17\xce\x7f\x33\xf8\xc9Y\xd4\xc9\x8c\xedZ\x9dI*\xe6\xf5m\xa5{\xf\x17I]" "\xac\xb1\x30\x66\xb\xce\xfb\x6O\xd8\x30\x9d\x96Z\xbe\x8d+\xe9\x8fh\x98\xc1\xb7\xa3" "\x9c\xbb\xe3\xe7]\xa0\xff\xefl\xc3\x94\\\xe7m\xa3\xbe\x91UF\xfe\x8aS\x10\x13\n\xe0" "\xac\xaa\x9a\xb7<~\x4\x1c\x0S;K\xc7rFW\xaa\x64\x9b\x93\x88\xb7\x91\xaa\xc5\xea\xbf" "\xcd\xdd\xea,\xc6z\xf\xd0\xae\x9b\xe3}\xf9\xad@ce8\xeeU\xa8?`\xe9\xe0&\xc6O\xbd\x8b" "\"\xc\xeb\x46\xe6t\x10\x14JR\xf\xce\xac\xa2R\xe8\x16TH\xf8M\x8e\xa0\x83\xc7\x93\xad" "\x9\xb9\xb>\xe8;s\xfe\xfc\x33\x65\xc7)\xe3\xc7\x38\x89K\x8c\x1\xc2\xf8\xae\xe0\xcc" "\x8b\x11N\x11u\xef\xb4L\xc4\xc6\xce\xf5\xc8uK\x1c\xc7\xce\xc2\x0\xad\x8b\xf1\x18" "\x9dt\x1c\xb7[\xcaN\x88\xbe\x95\x9e\x32!j\xd3?gOI\xab \xa3T\xcf\x39i\xf1\x61\x1a" "\x95\xd3\x93N\x14\x88\x31\xae|\x81\xa7\xeb\xe3\xc5$Ot>f\xa8.\x10\xd1l\xc0\x9f\x81" "\x94\xeazYk\xc5\x98\x1d\x83\x33\x18\xabO}\xbf*\xbc\xe5\x43\xe4\x10\xb6I\xd1\x8d\x14" "o\x1HaYh=\xf6\x1a?\x88\xf\x9b!\xeb\xfa\xb7~\x90\x8cl\xfcy\xf8\x9b\xa5\xf5\x11\x14" "\xf0\xbf|<\xce\xc7\xbf\xf;\x5|1\x95\xcf\xbai\x8\xe3\x1e\r\xf1\r\xf6\x91\x63\xc9\xda" "{\xab\xc0\xe\x9aX\xf\xa7\xfa\xc2\x2\x91\x6\x15\xbdG\x9b\xbfv\xfb\x80hc\r\x1e\xc2" "\x1c\xd2\x92m5\x1e\x86\x9e\x16\xc2\xcf\x1e\x2<\xf0MO\xc6\x16\x7\xda\xef\xee\xed\xff" "U\x93\xe6\x2\x34\x92\xf0\x0)\xe2\xaeKJ,\x14P\x95N\xfa'\x92\xf3+I4\xa7h\xf8\x92\x17" "\x12\x45\xa1\xe2\xf0\x34\xe2\xb9\xf3\x98\x33\xf1\xb3\x31\xa1\x9a\x38k\xaa\xcf\xec" "\x8c\x92\x9b\xa6\xb6|\xd8\x92+\xbc\x9d\xc0\x5\xec\x39vW][\x5\x8\xd0q|k\xf1\x11#\xea" "6\xd8\xfd\x37\xfaw\xa6\xf1\xf5\xaa\x84\xd4\xad\x8d%\xb2\xc1\x1d\x18w\xa6\xe2\xf9" "\xb7O;X)\xfa\xef\xd4\xf7 \x9c\xe9xZ\xa6\xfd\xe6\x86rUJo)\xd8\xbf\x3\xfe\x10\x8e\xd9" "\n\x7fXi\xf\xac\x39\x9a\x8a\xd3\xa2h\x99\x7+\x83(t\xdd\xb6)X\x1aQ\xb3\x32\\\xd9\xed" "\xfdI\xe8\x90\xea\x89Y\xdb\x93}\xab\x83\xc7w\xf2\xa4&\xb9g\xafX\x88\xc3:65\xb7\x8d" "dz\xd6\xba\x44\x1e\",\x95\x8e\xa5\x8d\x61\x94_x\x1d~\xf4\x9w\x1b\x89\xb2\x2\x42\xad" "}\x7\xc2\xefY,\xbf\x41<_\xc8\x9e\xc3\xf\xc9\xeb\xeeK\xc6\x37\x9\xae\x33\xb6^\xe3" "\x9\x1c\xec\xbe\x61\xb\x84~\x12\xc5V\xa2y\xc8\xb1\x14\xc3\xe4`\x82-30\xad\xfdr\xbd" "i\xf5L\x8\xa8\x18H\xc2\x0*\x8\x32l\xf3\xb0\x9b\x13\x5I\r5\xae\xe5\x91y\x8\xe1`N\xce" "u\xbb\xe8\x11\xa7\x15\xae\x8a\xf7\xea\x9c\x37\x1b\x32-\x4(\xed\xf4\xc8\x93\xfd\xea" "`~p\xe1\xb6\xf6\x61IG2a\x1\xea\xef\x18\xe2\x9b\xe0U}*\x92\xcf\x1f\xc1P^\x8b\x43K" "\xc3h\xce\x7\xcc\xaa\xbc\x7t\xf8\xa6>\x10s\xfb\xbc\xeb?@RF*\xa9\x0\x8a\x1eS\xf1\x88" "\xc9\xea\xe3\x39\xfa\xbat\xaf\xd6\xd6\xfG(,\xd9\xffr\x1f\x64\xbdQx\x7f<\x13\xb5\xa6" "\xc5\xa5\xf7\x86\x11q\x1\x11\xf5\xe0G\x1e mrR\xf\x1d\xfa\x46_J#\xc7\x1d\xcf\x99\xa0" "L\xee\xf1\x1b\xe;\xdf\xc3[ta\xa6\x7S\xd3\xac&\xdcP\xa5\x95l\x91\x95\xa4\xf5\"\x63" "\x88\xe0\x95=\xdd\x3\xaf\x12\x8a\x98\xf0;\xdf\xa0`,\xbb\xaa \xab\x9e\xcc\xdfrU\x96" "*3.\x16\xd4\x38\x7\x62\xe4\x98\xfd\xa4\x88\\\x64\xff_\x9bH\r\xa4\x87\xc5\x8ex\x94" "=\xf6&\x16\xe6\xe2\xc6\x9e\xec\x88\x36\xdf\xcf\xa9\xeb\xf5\x89\x38\xa8x\xf3\xe7\x92" "\xe8\xbd\x8c]m\xf5W\xa5\xd8 \x18\xdb\xae\x1c\xa9\xc6K\xa5\xaf\x8e!\xbe\x1b\x66\x80" "\xfc]\xb2$\"\"\xbwn\x9b\xa0\xbf\x1e\xd2\xb7!/\x8b\xf1\x11\xec\x8c\x8cw\xb2#\xc0^" "\xb5\xe5\xf1\xcf\xab\xd2\xd0\x37\xf4\xba\xf\x95\x3\xe2\xcd\x83\xf4Q\x9d\x18\x4vc" "\xf0\x9e\x30\x88\x83\xf5\xdaR(\xf8\x30\x45\xff\x41!M\"s\xb2\xfe\n\x90\x17\xd5\xe0" "U{\xc2\xa1\x98\xc3]\x1e~\x81\xf7\x96TDW`\xcb\xa1\xd3\xf0^\xa4\xb9\x6X\xe5?\xdf\x8" "#\xbd\xb1P\x1e\xd5\x1d\xa7\\G9Ps\xd8\x98\r\x1e\x35\x4\xe3\xf6}\xb3%\x9eN\xe7:\x87" "\xcf\xd9o\x84\xe2!yes\x95\x8d\x36JQ\xe6\x35\xfcUG\x8c\x9c\xbf\x9a\xea\x16\xb7\xd8" "\xc2_!\x15\xcf\xe4\xb7\xf5\x98T\xe2Ih\x83;\xa0\xd6M\x1d\x33*fm\xfa*?\xd7\x1b\x5\xa2" "k\xab}\xa3\x82\x90{\x13\xde\xb\x80\x87\x1d\xf1\x84\xd3\x62+b=~\x9\xbc\x32\xa4\xf6" "\xea.m\xa4P\xa9\x6\xea\xd3mS\xfd\xec\x7f\x83\xe1\x1\xfe\xf3/O\xae\xc5\x81\xb0\x0" "hm\x86\xa0\xd3\x86\x1c\x1eg\xf1\x8aLFG\xf5\x1f\x97\x84\x84\xd9\xe3\x10\xb\x37\xbe" "\x9d \xae\x84\xc0\x85\x46\x1c\x1f\xbf\x92\x9c\x66\x9e\x93\x66Y\x5\xc&'\xac\x1b\x1" "\x98\x37\xba\xa7WW\xf5\xb0\xa8.\x8a\xe9\xcf!\x11\x93\x1a\x38\xbf\xc9GD\xe2\xfd\xe3" "\xf8q\x3\x42\xac\x61R\x86\xe4\xac\xe7\xf2it:\xa0Tc\xafS}\x94\x16#\xe\xcc\xa8Y\xd8" "\xc9\x9b|np\xbe\x7f\xe1\x1d\xb6\x98X\x9b\xe9\xe1\x19\x0\xc8\xe9X*N\xf5\xea\x94\xb5" "\xf6( \xc9\r\xbc\x2*b\xe\xc5\x36\xe0l\xb8\xbeu&\xa7\x89\x99m\xet\x1a\xad\x98\x8\x80" "\xa3\x38\x0\xa6\xfe\x92(l\xcd\x2\xc9\xcb@~\xb3\x1f\xb9]\x9c\x9fJ\xff\x38\xb3p\x87" "\xacX,\x1f{d\xa7\xc3\xd2 +\xdd\x62\xe9\xae\xb3\x1b\xca\x85\xc4\xcf\x32?\x3\xda\x9d" "1\x8b\x91\xf7\x8f\xdc\r&f0\xf7\x44N\xd0h\xb5\\\x5\x46\x1c\x97U#f\xa8,.t<\xec\x35" "=Q\x2\x8f\xdc\xf5@;;t\xd3y\xb8.\xb6\x9c\x43\x80\xed@#\x9e\x15\xa8k.\\\x86\x8\x91" "\xe2g\x81\xcc\x11\x1f\xb5p^;|z\xf1\x94`\x6T\xb5\xfa\x1b_\xc5O\xd0\xba\x43\x66n{\xab" "\xd2\xc9\x1c\x85\x9f\x39>\xd4\x9fq#\xed\xfb\x64\x8a=aR\xf2\xc1\x7f~C\x8c\n\x63\x89" "h\xac\x6\xb4\xfb?w\xf6O5\x8a\xe0\x63\x82\xb\xd3?\x2\x13\xc8\\@\xe4\xd9~\xd1\x0\xec" "-\xa1\xc2\xe1\xea%\x8b\xf1\x7\xafgZ\x9d\x99_`\xbf\xa3r\"\xb9\xc2\xb3%\xc0\x5+\xb8" "S}+'\xdd\x43\xa1)\xc7\xe8\xff\x42u{:\xc9\xb4Gp=8!\x8\xdaR\xb\x8b;\xb3\xe8\xc7)[w" "kD\xed(\xf8\x63\xb8\xe1\xf8\x1b\xb\xd1\xda\xee\x8a\x17\x15%\xd0\x9d& \xc0M\xd3!\x9d" "\x88\xc.\xccy(-\xd7\xb1w*\x9c\xbb\xcapi\x9\xae\x8b\xc7y\x8en\xc7\x37Q\x89\xb6\xcf" "\xce\x8a\x87XI\x17nY\x13\xb8Z\x18\xfb\x19z3\xcaK[@X`<\xf1\xfay\xa5hV\xb4=S\x8e\x9e" "\xce\x11}\x99\xaf\xa7;W\xe3\x7\x36OU6D\xde\x1\xed\xb4\x62\x34\xef\xac\x13\x4kn\x4" "~\xcc\x8f\x63\x94/ \x9z\xd7\xac\xf0\xa4\\\x5\x1\xa9Rc\xde\x94\x39\xa8\x80\xd6\xb5" "\xc5!M)\x18\nT\xd7\xfe\x9b.b~\xf4\x9e\x18\x9bY\xfc\xc7\x87\x45\xe8x\xe4[F\xc0\xa6" "H\x95]>\xa8\xc9\x35\x11=\x94\xf9.\xc9\x63\xf6l\xf3\xcf:Rk\xa7\x1c\xdf<\xd4\xcai\xef" "\xab\x8\xb7\x38\x9e\x33\x90qh\x92\xa4\x87+\xd2\x9d\xc1\xe0\x88\x9a\x42\xd7\xff\xb4" "\x19\xe\x9a\x8d\x5\xd8N\xb9\xc5t\x1b\xe6\xb0'\x16\xbcu\xe0\x10o_\x94\xbd\x37x\xbe" "\x98^\x3\x86\r'\xe4@\x88\xc3\xcb*\x5\x9d\xeb\xc4 \xdc\xe3\xa8\xf4\x8z\x95HH^al@\x9a" "\xc4\x0\xdd\x1c\x41\x1c\xe4\xb6\xa2)\xd0\x91\xb2S\xebh\xf0nCQ\x1e\xc5\xaan\xcaMn" "H\x18\xd6\xaa h\xda\x1a\xef\xca\x37v\x11\xbf\xa8\x16\xb5!Q\x82\x43-V\x83)Mg\xa7\xc1" "\xfdv\xc5\"\x33\x8|\xa4IC\xecr\x80\x0^\x93\x14_^z\xe5\x1\x0\xc1\x83\x64\xe1\xb3g" "A\xe9\x64|M\xc1\xf6\x8aX\xec\x44\x9Y \xfd\xcf\x5S/`7\x17\x80\xf7\x84 \x7~\xf5\xc2" "Mc\xe2`@\xcd\xdf\xf8\xdf\xd6]\x87\x1d\xb9\x43\xf5\xc\xde\x84\x90\xc\x13r\xef\x33" "\xfd\x8a\xb9\x88\x9c\x82\xf9Oa\xa0\xe6\x84\"\x19\xa0\xf3\x9e\xc7\xb2\x32\xcb\xf8" "\x2\xc4\xa7\x44\xf3\x31YC.\x82p\x6\xc7\xcaw\xe4\x80\xa4\x8a\x9b\xej\x87\x61X\x8a" "1\x2\xe3\xf9\x8aw\xbb\xd6*:#\x15\xf\xd1@\xd3\x94\x17s\xbf|\xbb\xa2\x33\x8f\xf3{\x9e" "\xb6@U\x8a#\x13\xe8\x82N\x8e\x62\x3\x31V\x8a\x9bv\xf4\x89q\x98\xa7\x9\xf9\x31?J\xc4" "\x8'\xd8\xc3\xa7\x1f*\xbf\xf0+\xfdW\xd3\r\xb\x14\x1/\xb5\xc3\x9b\x85\xafT\r\xda\n" "\xdc'\xa8[1iN\x8d{a\xf9\xd9\xb4vW\x10\"\xd9\x8f-v\x82\x46U\n\x87r\x93\xf3\xffn\xd9" "\x18\xa4\x98\xd6\xa6\x0\">\x1a\x61\x89\xcI\xac\xfb`&Xg\xce\x94\x64\xf9\xc3,Y\xe9" "OvA\xc3\x87?\xb4\xfan\xb2\x37\xf8\xed\x94W\x99W'\ro\xd6@\xbd\x95\x43\xe6\x83\xf2" "7,\xcd{`\xaa\xd2i\xe0:r\xc5\xcd\xb7\x32\xb1(\x81\x8d\x41\xa6\xdd\xd2\xbc\x13\x9f" "}9\x11\xf4\x8e\x1b\x1d&=\xd4\xae\x8eL\xe1\xa6\x86\xf3\xa0\n,\xbfH\x97\x86\x31\xcd" "$5f\xe2.h\xf8\xd7\x39q4\xa3S\xe\xa3t^O\x1e\xac\xb4\xd6\xa5\xfd\x84\xc3\x1\x10\x94" "\xf3us\xf7\xf9\x90#\x5\x2\xcS\x92g\x16\xd4x\xck\n%{\xf7\x11\xad\x94\xc8?\x1d\x41" "\xa0,\x1c}\xd2\x3\xa3\xe6\xe4\xb1N\xda/\xdb\xb3k\x6:>\x7\x44\x95\xf6&\xb0\xee\xa1" "F\xd2*\xc3\x34W\xf4OAgYgm*\x5\x66\xec+rm/\x5@\xab\xf2%\x33\x9f\x2\xf4\x6\xd4\xe7" "\xa6.R3\xdd\xf2\n\xe7\xc8l\xa0\xcd\xd5\x61\xf3\xde\xd0\x2\x35/\xc6lowA\xa5\x42\x15_J\x15\x9c\xd7x" "\xbeV\xb9I,\xd9Q\x15\xc1\xa0\x61\x89\xa2\x16\xcf\xd2\xe6rYe\xa1=\xe9svZ\x5\x11M\x9a" "ZK\xe0\x61Z\xf8\xbfj^\xaf\xf8\x44h\xb8I\x95M\x15\xbe\xae\x1c\xddW\xc4\x35x\x8b\x33" "\x19\x5\xc0\x14!\xb5\xf \xb1\x84Pj\xb\xeftc0\xbc\x98\xe9\xc8\x9a\xaa\x8f\x9d\x10" "/\x15\x80\x43\xbe\xb6\xa6\x82\x5\x9a\x1c\x8b\x8c\xf6{/=z\xf4\xd8\xbb\xe0\x86%L\xde" "Sv^2&\xba/\x95\xae\x80\x63\x64\x9f\x9f\x94\xbd\x95\x19\x41\x1d\xaf\x8a\x2\x87\x30" "s5f\x81\x90\x63\x88\x6\xe2\x94\x84\xa4\xff\xbc\x1e\x46\xb1\x80\xe\x3\xb1\x62\xc2" ";\x1d\xc0\xb4\xc0\xddL\xc5\xaf\xe3@$1\xb2" "\xc8\x16\xda\x14\x86\xc3K\xc9\xdc\xa4\xe2\xd5\x1c\x86\x86\x88\xa7x|\xd1\n\xbb\x9a" "\xca\x14\xb7\x18\x13i\xde\x89\x91<\xd8\xfa\xb5\x8f\xc8\x45\x19\xea*\xa1NT\xb7\xa8" "\xceGO!>\x7\xcf-\xe2\xe8\x88\x9=\xee\xc9\x37Rh\x16\xb7\x1c\x96\xedu\xfa\x9e.\xdc" "\xf\x9en\x84V\x9c\x12\xbb\x8e\x39\xaa\xed\xbfTf0tUS\xd6\x8O\xf9RO\xecjrd\xf8\x8c" "\xeb~\xc3\x35\x8e\x92;9$t\xe3\xa4\x88\x65VD1f)\x88\xfe\xa7h\xceUZ\xb0\xdaH\xbdRj" "\x84\xb0\xcb\x17\xb4X@f\xc1\x64\xc\x10#\xd9\x1fxi\xef\xcMp\x1b\xe1!\xa6\xe3\xc8\x32" "\x1\x4'I\x7X\xae\xd7\xa2\xb3\r`(\xf2!Z\xa4N\x86\xd8R\xfd\xc6}\xa5\xcc\xbay\xee\xa8" "c\xba\xc9\xed\xc2S[f\xab\xeT\xecMD\x11\x39\xf\xde\xb8\xd1\xfb\xc1t?\x15\xc3\xb6\x8d" "\xc9*\x86Y\xe7\xa8\x92\xd5\xe5\x38r\xeaQ\xee\x8c\xa7\xefQ\x10>\x87\xc2\x9a'\x14\xe9" "\x7\xc7\x9d\xb9\xcf\x37\x44\x17\x85\xd2\xf7:\x1e\xe5\x85P\x11\x1aM\x9b\xcc\xbe\xbf" ".9\xcd;\x93\xdc\xa3\x0\xfa\xc3\xed\x1a\xdd\x82\x15\x30\x1eWf\xc3\xc\x8c\xf2\x96u" "tlZw\xbf\x1f\xe3\xcdu\xd2\\\xf1\x93\xde\x8d\x9a\xf0*\xf8\xf7\xa6\xe8\xf8KT\x80X\xcd" "\xd3\xc6\x99\x8e\xd1\x34\x63\xfa\xdes\x91&\xd8=<\xe2\xc7 \x1f\x95S\x82\x83.2\xc1" "\r\xcb\xcc\xa3X5\x98[\x9a\x93\xf8\xe3\xb0 \x8b\xe6\xe9$(x|G\xd3\x80\x8a\xfw\xb8\xf1" "\xd7nk\xf6\xa1\x7f\xf8\x1c\xdb\x6Q\x80\xe0\x38\x9\xd0\x36\x38\x30{\xd7\xbf\\\xed" "\xbf\x64\x90N\x91\x8f\xc8\x5\xac\x90Sy\x92\x8b\x81\x64\x80\xf6\xe3\xbd\xeeG\x4,\xba" "\x98S\x9d\xa0\xe1\x13\xb1\xa5\xf2>\xaf\x1a\x32\x10\xbd\x18V\x19\x85\xe6\x43n\xab" "\x90\x39]\xa4w\xc7\xa6\xd7\x88\x8d#w\xb3\xfc\x41i6\x83W\xd8\x80\xce\x4\x1e\x1f|\x87" "^\x95\x66\x0\xdb}\x9b\x35\xd1\xee\x66\xbeGn\x9d\xd8\x6L\xc0\"\x30'h)\xc2\xc0\xa0" "\x98\xf0QP.\x82\x8a\xc\xc5\x5\xaf\xd8\xc3\xdf)=\xa1P\x8a\xc4\xd2Xf\xbe\xeek\xbdZ" "#\xe\x9c-\xcd\xd4\xf0h\x83\x93\x63\x81\xf4v\xdd\xcd\x86\xcc\xfe\x15\xc2\xce<2C\xe1" "H\xcb\xe6\x3\xb8Q:|\xe7\xa6\x91\n\x66\xa9\xbp\x89\xe5\xcc\xd4\x36\x8b\xef\xff+\xcf" "\x8e\x91\x8b\xfe\n\x1b\x6\x9a\xb2\xa9\x14\xca{\xb9\x1a\n\xc3\xb3\xc0\xb0`\xfa\x1a" "\x3\x16\xf6\x13^\x89\xe\xe5I1X\x97\xc8\x46\x44\x96\xccm\xea\xf~:\xf4?\xfaL2\x81\x15" "`gX,\xa2U\xb1\xd2\xe8\xf\x99\x9a:\xc0@+\xbd\x17\x1\x82L;\xb5$\x13\xf[\x82\xa4Ru\x80" "{\xc2\xf3\xa0\x65^\xa2\x8\xf9h\xb2\x97\xf9\x8c\x36\x91\x92\xc8\xac\xa2k\xeb\xa7\xdc" "E\x6\xfb\xd1\x30^.\xfaM\xbeSu(\x1a\x88\xee-o\xc8\x8f\xc0\xa7U\xe7)4\xb4\xb5\x8fm" "\xd3\xbd\xafqq\xa4\xa3\xc7vWg5$\x92\xbf\xa9\xa7u\x85\x4u\n\xb7\xf3\x87Th;p\xe9\xe2" "\x93\xcb\x1c\xd7\xb2;\xa6+\xd7\x39z\xbb\x84\xd7\xed\xb2.\xf6\xc3\xf5\x8b>\xea\xf6" "V\xe3\x61t~\xd0@ \x16\x32S\xd1\xcf?\x90[^\x85\xf8?\xff\x30\xab'x\xca\xe4\x37\x81" "f|\xf\x65\xc8\xfd@Mk\x92\x2\xa9\x9e\xa7j\xf9\xae\x12\x36\x63\x15P\xb6k\x6\x38G\x18" "\xbm\xca\x83.\xa8\xdcJn\xfd\xb6t\xb5\xa2\x65R\xa7\xc7\xd5L'\x99\xc7\xd4\xe0<$\xf6" "a\xa9\x11\x3\x8m\xe3\xa9\nwJi\x88\x34vV4L\xfb\xa0`e\xab\"Gk\xb0\x9f\xb6\x8f\x99(" "\xc0\x4_'d\xaf\x64<\xfe\xf0Qm\x87\xfd\xe6\xdb\xf9;\xae()\xb1v\xcbP{\xb9\x98\x35\xe0" "\x1b\xad^U\xc2\xf8y\x8c\x93\xfa\x35\xeb?\xef\x2\xcf\xa3\x1d=!\xb0\x30T\x7f\x86\xd2" "{\x94H\xd6\x8e+\x15Ze\xc7\x42\xbd)\x99\xda\xa0\xc3\xae\xd6\x44G\xb9\xccg\xf7\xaf" "3\xb6:\xfa\xf2_<\xf7\xef\x86\x65\x7f\xe8\xf9R(\x8c\xa4\xb6\x91\xd3i\xe8\xf1\x93\\" "\xda\x44\xa1\x80\xa6vu`\xc2\xed?/\xcc\x38\xb6\xbdy\x91\xd4\x17\xc|Vmi\n\x8a%\xbe" "\x3!*\x80\x87\x11\x8\xd1\x8c\xce\xff$f#\xe6S\x10v1\xf2\x92'\xd6GT\xb2 \x8d\x19\xf8" "NTw\x99\xe6\x91\xcaG7\x80\xdd\xd5j\xe6 \xcd\x95=Q3\xd1\x35\xe3\xd5\x1f#px\xfe\xeb" "\xb7\x37\x14T\xee\x63<\xfe#\x8a\xea\x63\xf9\x99\x9e\x32\x85\xel\x19v\x87\xa0\xec" "NY\x8\xd2\xa1\x8cSIb~3j\xb5\xe3\x18[!\x82(`:K\x18R\x6\x9f^\xe8I\xd5q\xb8\x38}\xce" "\x1f\x8f\x8e\x9f\xe9O\xad\xef\x12\x8b\xa8;\xdd$_\x8c\x1c'\xc1\x1f.\xd1\xa8\xab-m" "`\x17&\x84,\xeetN\xe7\xaa\xc6\xb6\xfa\x16\xcc\xaa\x39\xdb\xf5\xb3\xb1\xd4s9\xf3\x1d" "\xfaV&q\xa9\xcf}\xdei\x15\xfe\xf9\xf1\x9b>\x6\x8a\x46M\xd3P\xa3\xad\x14m\x1a$\x16" "s\xb5\x11*J\x87h\xf9vr>n\x18G\x90\xc0`E\x6\xc4\x65\x91\xbe\xf2\x10l@x\x9bs31\xa8" "\x7@\xd5\x9a\xbe\xd3\x98h\xf8\xb\xec\xc2\xaa!\xc4\x0\xa0\xbd\xc\xc3&\xd1\x86\xff" "\xf9\xeb\x37h\xf\x1e\xdc\x32\xacx\xf9\x5\x92\x80\xd0{_\xf2\xe3T\xfe\xd5\x45\x12\x9f" "\xa5\xfa\x8f=C\x17\xff!\xe0'`/\xdb%\"\xf0I\xbbT_\xf4\xda`$\x81\x30\xf8\x1fN4\x83" "s\x14/1H\xde\xd0\x38\xaf\xba\x81\x8f&\xd5\xb4\x9f\xc0-\xe9\x80\r\x89N\x92\x39\xc8" "\x8e\xe0\xed\xe4\x31\xf8\x8\x36\x97\xcb\xb\xe3\xb4\x97G4s\xe5qG\x17\xc9\x14\xa1\xa9" "&s\xc$\x94\x13\xfe\xa2\x61^\xf7+\xdb\x9\x6\x93\x33\x87\xa8\x92\x37\xfw\xee\xbf\x62" "\xd2l\xd5\x83\xee\x64;\x2\xe3#\x82\x13y\xc0\xdc\x96\x64\x7\xd3j\xe3\xcd\xf6\x46\xb9" "]\xed\xc7\xd7\xfd\xf(\xe9Px\xf1-\xfc\r\x64\x0\xb3'\xb7\x43\xc5H\xa0\xa3Qz\x17Z~\xd9" "c\xeduk\x1e\x10z\xe7\x8~$F\xbap,\xd4\xe2n-\xcd\xc1\xa8\xb6\x97\x10\x8b[^\x81\xe9" "\xf0\x31\x5\xf2 \xc7-J\xeb\xc5ve\x88|\x8cyd\x8\x9f\xbe\x94$\x12\xe\xfd\xb1Mv\xee" "\xf8\xc6\xf7\xa3\xb\x13\xe1\xae\x90\xcb\x9d\x93\xd2\xe1K\xdeG\xf4\xa1\xd0^\xd5\xb1" "\x8d\x32\xaa\x39\x91\x1b\x92\xd2L\x93\x97j\xce\xb7\xefYzu\x16\x19#\xa7;,\xc7\x61" "xT\x93\xd0\xee\xdc\x8\xb5\xaf\xe9_<\x0kAC\x8a\x7\x85\xc9\x62\xb0p\xde+\xd0\x96\xcb" "c\xb8G\xc8u9\x88\n\xa3\xd3\xfc\\\x34^\x9\x92\xd7\xbew\xc6\xcf\xf4\x94\x86\x17\xfd" "\xdaxL\xc5VR\x19+\xe\xd7u\x12\x9cN\xa4$ZA\xbc\xf3\x87[\xe3\x19\xda\xe\xe2\xda\xfe" "\xfa\xe9 \xcd+ll \x1v/\x88\xc0\xc5\xc0PS\x2\\\x3I\xdb\x17\x10\x43`\xfc\xe1]\x7f:" "\x8e\x30\xed\x13\x15Zt\xfa\xf9\x1d\xc7{\x8a\xab\xddo\xbdZ\x1e\xaf%]\xb2\x9\xd7\xf2" "\xb9\x8\")kV\x3\xfb^,\xc9\\\xbc_z`D\x5\x8b\x80\x44\xad\xces\xac\xfd\x89\x61w\xf1" "\xf7\xe\xad/e4\xdc:\xd7U\xab+\xa8q&\xd6<\xa2\xe9\xc4\x41\xdf\x9\x65\xbd\xddk\xe4" "\x94\xe5\x8dkPW\xa5\x61\xd1\xe3\x1b\xd3\x8e\x92\xcbs\xc1\x46Z\xf6\xb9\xc0\x1\xf7" "\"\x90Y\xbc\xa4\x10HG\xd1\x63\x9e\x12N\x8/sd\xb5\x65H\xbf\x81\x12\xd0\xeb\x46\x1b" "1k$I\x4\x9fjGm6\xd6\xb7\xc0\xc1\x12l\x8\xf2\xe9\xa1$j;[!\xe7\xc8\xfa\xc6\xe2;\x82" "\xe3:w\x83\xe4\xf3\x1f\x2@\xe9ni\xc9\x44N}z\x92\x86\x36\xcf\xd0\x86G]\xf1\xe0\xa2" "\x84\x64\x81\x38{\xb2\x1\x6U\xb9\xf8\x1a\x7\x44\x12\x16\x99\xb4\x90Z\xae\xdc\xc8" "K\xc5\xd5\xab\x36t`\x1d\xbb\xb6Q\xed\xe7\xb5\xdf\x5\xc8\xa4\x63\xda\xb4\x1fypm(\\" "O\x90\x63\x99\x7fz\xc8\xce\xf3\\\xadQ\xfb\xe5\xf5\xbb\x1b?\xa6\xda,:\xbf+>\x92U\x81" "4\x97(\xd6\xda\rY\xc1\xef\x64\x44S\x97\x42\xee\x9a#\xa5r\x7f \xcf\x93w\xf4\xf8M\xea" "B\x6\x7\x1Z0\xfb\x14\x63-\x8J-\xd1\x81\xbb\x2\xfc:\x84\xfcI\x9b\x31\x81V\xb6u\xb9" "\xca<\xca\xbd\x87\xfd\xb2I|g\x5\xfap\xeb\xa4:\xdd\xb6\xcf\x96\x1b\x30\xe8\xf6\xab" "\x9f\x84\xe1\xdd\x8dm\xb3\x31K4\xb7\xf7\xaa;\xbe\x19\xd5\xbd\xc7^\xca\xdf\xd8\xea" "\xe1\x9e\x7\xb3\x87\xa1\xfcXo\xf\x30\xdbiY&vKT\r\x89\xf1\xd8T\xb0\xff\x86R\x8a\xd9" "R<\xafV7\x1e)I\x8c\x11\xaf\xb2\xf4\xd5 &p\xc8\x34\xe9\x30\x10?\x3\x9d\x13\x34\x88" "$\x16\xa4\x9b\xf9;\x84\xfd<\xf1 \x9e\xef}I\x94\xc8\x30$6\xc0yD\x97\x46\x1c\x11\xf5" "\xb8\xba\x15+\xac\xbc\xc0\x8a\xf8\xa1_JM\xf3\xef\xfbr'\xca\x97\xfc!\xd2\xd0\x35l" "\x93\x39\xct\x9c\xbe\x97P\xb8!\xf1\xa7\xbc\xfa\xe2\xc8\xbcm\x9a'\xf8\x44\xd8\xad" "\x8\x83 y\xab\xf0\xea\xd8\xec\xd4\xear\x84m\xfe\xed\x2\x18W\xf3<\x1a\xceL\x7\xbe" "\xc9\x3\x98\xb6)\x81LI\x8d\x33\xbe\xb3u\xb9\xa5=\xa0\xf9&\xfen\x89\xe7\x3\"\xc7," "\xb2\xdd\xbf\xb1k\x13\xefzOP\xdfx3\x16XLj\xc2\xbd}\x90)\x12I3\x13;\")\xbft\xa2(\x86" "\x8a\xb3\xe\xa5\xc3\xe8|x\xc3\xf0\x96!\x99H\r\xbc\xad\xbe\xf5;\xdd\xe4XI\xda\x85" "zO\xd8[\x96h/\x1e\xde\xb8S\x84\x92\x9d\xeeJ\xfa\xf8LQ\xa0\x9f]W'\x5g=\x88Pp0?\xdb" "G\xdc\x89\x8f\x87N\x10:\x9e|\x1e\x89\x41\x15\xdf\xdd\xad\x81T\x9csu\xd4\xae\xdc\xce" ".R\xc1>Q0\xb4\x7f o|Z\xfa\xf1\xf9\xee\x83\xda\x81\x88\xd7\xbG2i\xca(\nj\x2\xde\x85" "0\xb\x93\xd8\xa4\xf6\xb4\x2\xfb]\xf5\x8f\x13'G\xc\xe1\x1c\xc6>\xce\xf2\xef\xaa\x39" "jf\x80\xa6tj 8-\x95)\xb5\x8e|\xe6\x84\xb3\x9a\xc0\xfp\x86\xbc\xb4|\"0\xdf\x3\x43" "\xbe\xd9\xb9\x15*a\xc9\x82j\xef\x9e\x0\xa1\x45-\x91\x30\\\xf0T\x90\xd4\xbc\xb\xad" "\xc9\xc6\xfc\xbf\xa9?\xadR\xc3\xa8\x7\x5\xa1\x95h\x90IuW\xc0\x87>\xbd\xcf\x61\xcc" "\xdd\"\x19\x35JOV!\xab\x33\xb1\x19\x32\x6\\\x1d\x99\n\x9bh\x85\x83\x31\xeexu\xca" "\xc8U\xf9\x85\x63\xb1N\xf9\xe1\x6\xb\xea\x90\xf1\x95\xaf\xff\x94r\x8a\xe9\x35\x45" "48\xda\xb3Q#\xd0\xe2i\x94u\x88M\xda\xfcs\x7\xa5\xcc\x6\x92\xf\x35\x34\x17(\xd8Ye" "\xf5\xba\x86\xf2\x61\xcf\xfc\xb1\xe2\x9b\x42\x9f\x97ip\xd4-\x10\xe6\xaflKy+C\x84" "\x12*\xef$H\xe2*X\xd3\xaa\x0wC\xc7\x13$\xea\x8\xd0h\x19\xfe\xd1J\xc1\xf2*O\xb\xe4" "x{\xc8s\x8e\x1c\xef$\x6wW\x1c\x65\x80N\xd3\xe7H\xd7.\x89\xc9Ko1\xb\xe7H\xfa\xea\x31" "\xee$hY\xca\xf7\xa1\xea\x17\xcc\xb5\xb2\x46\xc8~\xabw\x1e*\xc5\xd3xe\x1\x91\x8\x15" "\x14\xdd\xc2\xc6hx\xe3vl\xb2\r\xc4\x9f\x63\xf'C\xa7\xfa\xec\xbe\x9d\xbe\x9e\x81Z" "<\xb5}\xad\xf2\xbf\xf5\xef/\xce#\xa5\x62\x98\xa3\n.\x5/\xea\xef\xbdi\x81\x1\xf9\xdb" "\x99&\x13pf\x93\xcb\xe\xfa\xf6\xf6\xc\x8b\xb5\xe7\xd0\xa5\xb\x33\x92\xb9\x83\x1e" "\xf3\xa3\x4\xa8\x46\xcdJ\xf4\x31\xe9\xf0\x18\xfc\xd3\xa5\xb1\x63\x87U-U\xda\xeah" "=6%t\x18\xaa\xa0\xe7\xbf\x8a\x3\xed{\xab\x11M|\x15\x11\x9elq\xc1\x94k\xd7\x90<\x1c" "B\xe1\x15\xe9Ta\x90Q\xb8S\xbf\x5\xae\x31n\x15\xe6\x19\xa7\xde\xe4\x98\xf7q\xe8\x9" "\xd9\x43Yi\xc1\x5\x64\x2r^\xf4\xc\x2\x0\xe0\x83\xf3\xecn\xe\xc2{\x8e\xd3\x8d\xfe" "2\xea\xe^\x15j\xc3lK\xb9\xac^\xd1\x11\xa1\x16x3\x97\x3\xf1\xb9)\x93\x45\xae\xb1\xf2" "Q\xfc\xef\xa1\x1f\xb3\x10\x1c\xc4\x99\x90}\xc8\x62\xb4\x46=U#\xb9\xb2\\[i\xf7\n\xb6" "\xb2\x9c\xfc\x1d\xf1\xec\xab\x82'\xeb>\xd1\xf8\x82\xe9\xb\x12\x8\xe\xe0\x3qM@>\xc4" ";{TI\x14\x46\xb6\xa3\xddn\xb6\x41\xef\xbf\xef\x6\xc\x45\xe8s\xe7\x39\x80%\xb1\xcb" "peD\x1f\x17S\x2\x8fo\x8cI\xa9h\x1\xc0\xd5\x98\xe0\x98\xea\xdc\x96\xa2\x11\x17\xf8" "\x17\xb6\xfdniGd/\x93\xe2$%\xa0\xe\x8fkY*\xd5\xb\x31{i\xc0\xf9@G8jE\xe5\xeb\xc9P" "O\xe5TQ\xa0\x1e\xb2\x9d\xdf\x9a\x41\xd4\xba\xd8_\xc8L\xe2\x80\x97\x1e\x83O\x6\xce" "\xf4\x9c\x8c \xed,\xea\xc8\x89\xf1X\xcb\x14\xa8\xc0p\x90\x4x\x80L\xff\x1d\x16\x37" "\xcc\x88\xc\x81\xaa(}\x83\x82\x83\x7f\xfa\x8f\x41\xff<\x9d\xf2\xf2,\xb2\x0\x44\xc1" "q\xe4\x81]\r\xfl\"\xd1\x9aR\x11Nx\xc\xec\xd7\x1d\xaf\x63\x42w\x82\xe8^F=\xcb\x33" "7\x89\xf4\x96\x34\xe\x8c\xff\x88Z\x9d\x9a\x42P\x11\x8b\x43\x9cq\xc6\xbeQ\xa9\x33" "\x8b\xe2\x92Q\xaayN\xdcg\xde\xec\x63\x37\xfa\x63\xca\x9b\x3\xc1\xc9\xf7^s:J\x91\x86" "F\xe7\xbc\x97\x92Hl\xb5\xa4\xbc\xc5\xf8O\xba\xbd\xfe\x33\x8c\x37\x92%J>\xea=\x88" "\x90<,G\xb9\x1e\x7\x62Y\xdc\xcc\x8b\xd3\xdc\xa9\xe\xcc\xc8\x32\xc0\x9c\x45\x14\x1c" "bB\x2k\xfe\x30\x90)\xa5\x62\xc3\xee\xf\xcc\xdc\xd4\xe\\\xf2\x65\xed\x9c=\xe5\x82" "\x88N\xe\x14\x81\x9d\xb9\x8b:\xf7\x34\xb1\xb3'j\xc4\x1d\x43\x38N\xbes\x0=\x15\xce" "9\xff\xcc\x4\x10\x95\x83\x39\xeG\xf\x43\x1b\x44\x7\xf9\x85P\xe1\x38\xf9lEd\xb4\x94" "\xe5H\xfG\xc8S\xbd\xd2\x37\xe2s\x1\xf5^B\xa3\xbe\xd1\x8f\xad\xa1RW+{FZX\x1d\xbf\xe7" "\xdb&\x19\x36\\\xf1mq\xbf\x8f\x9\x18\x62\xb9\xfc\xf0K\xf8\xd0\x85\x9av\xf4n{W\x12" "\xf2u~\xdc\xe3\x32\xd3!;\x8a\x30\xac,\xe7\xd7y~\xefo0\x90I\x6\xb0\x80]\xfa|\xa3m" "2\xa2\r\x98\x98XIzf\xcerI\x13\x93\xddy3 \x3\xd5\\\x9ZZ\xb5\xdfv\x1cK\xe5\xc0\x41" "\xfa\x84\x7&=`NS\x9\x1f{k\x15IbE\xdb\xbe\xe9jc\xf1\xf\xc2\x97\x8d\x99\xe6W1(h\x93" "f\xfe\x8b\xb\xad\xa4\x8bP\x18[\x86\x1b\xad\x3\xe3`\xf\"\xba\xd4'O%B\xb6\x35\xf6\xc7" "\x94K\xef\xc3\xbct\x1b\xde\xf1\x1a\x8d\xd6Y\x3\x8c\xb4\xf\xef.\x16\xad\x1a\xe7\xeb" "\xed\xb7\xd9\xba\x15\xfd\xcf&5S1PZ8m\xd7\x39\x9f\xb9\x99S]`a\xea\xbc\x61\xddv\xef" ">\xb4WDo)\xd0\xbbn\xc2\xfc\n\xab\xac \xb2z<\x12<'\xbc'\xa7\x63\x36\xd0\xa0\xa6\xd4" "V\xda\x7\x3gM\x95\x9aJ\xfe\x42\x8e\"\x6\xa5\x11\xbf\xc8\x0\x39\xec\xd5nu\xf6\x97" "\x86\xda\n\x80\x84\xd8\x1a\x66\x64M\xd9\x8b`\x18h\x1f\x1dp\xad\xe0\x9b\xd9\xbf=\x16" "\xd6\x8d\xd5\xd0\xa0:\xe2m\xcf\x15RT\x9e\x45\x9f\xe1\x90\xb3\x10\xa8wk,\x84h\xc1" "L\xa8\xb1\xb9\xa7\xaf)VPz;pZ\xd7Z\x17\xa0\xee\xa7\xfe\x8\x92s5<\xec\xd0{\xb8V4e\xec" "\x8d\xec\xa0\xeb\x42\xf4?\xe3\x66N\xb5\xf3\x1e\x1d\x13$\x18U9\xb2\x8dP\x8b\xcd\x6" "^\xd5v\xd8\x81N\xd3\xfd\x63}Wo\x2y'\x16#D\xaf\xb0%Z\x91\xff\xc6\x16\x94\x8eN5\x88" "g\xe9\xfcv\xa9\xaf\xfa\xca\xeb\xff\xe1\x10\x80\x8c\x15\x32\xa2\xbb\xb0\xdb\xef?\x1" "\xe\x45\xff\xc7?\"\x8d(\xf1.\x98G\x8b'9}\x8f\x45g\x81\xed\x9e\x19q\x1d\xf2\xe9\xee" "\xcb\xc3\xfe\x61\xf7I?\xdf\x1aY\x12\x46h\xa9\x1b\xe5\x1f\x12/\x93\xdc\xa4\xbb\xd2" "-\xee\xa3\x39\xe6\xed\xa3\xd6\xeb\xee\x3\xdf\x95\x81\x13\xe1\xcaI\xc8\x39\x8d,Y\xda" "gd\x88.\xe3\x66?b\xa5Z\xe5\n~\x91\xb4\xfe\xad\x1b\x11\xfe\rP\xac\xcc]u\xf1\xa5\x15" "\xf0\xc5\x36\x16\xa5\x0\xf1I\x13\x81\xdf\xd0\xe2G~@*\xb0\xcf\x9fg\xd5\x1\xa4\x42" "b\x9c\x85\x93\xed]%\xa7.\xdb\x97\x46\xb0/+\xf\x7Y\xcc\x9c\xdc\xb4\xc9\xd8\xb4Q\x9c" "\x8c\x61~V\x9b\x43/\xc\xf6\x89\x3r\xaa\x87\x9c\xa7\xde\x46\xe1\x10\xd9^#\nO\xeR\xcf" "e\x81\x1cT6]\xf4\xa3\xe4\r\x81\x9e/\xd3y\xb4}\xa3#=\r\xef\xe\xfb\xce\x4\xad\x8b\xaa" "8\x88Oji\xfe\\\x37>8\xae\xf\xd0$\x14\x80\xf2\xbe|\xcd\x18\xaf\x85\x91m'\x3\xa0Iw" "\x9f\xe7\x39\x8f\xc4}4\x84T\xcf\x3\xf2.\xb3\xfe\xcc\x6\x46\x6\x95x\x98\xb5\x64\x34" "d\x84TE\xc2\\\xc}h\\\x8d\xb0\x42\xaf]X\x82\x17\x43t\xac\xe9\x0\x81\xc6\x86x\x9b\xca" "\x96\xac`.\xb4\x1d\x31{\xd6R)>\xe6(\x95\x18ud\x16\x61\xec\x86\xa2\xc4\n\x42\xe8\xf0" "\x81:\x86\x1d\x41\xa0\xf5\x17\x8eUCe\x1c\xa0\xe9\x91PF-\xb5\xee\x0\x10\xf0\r\xe6" "\xd5[\r\x7f\xd7\xec[\xae\xa2N\xd3\xe9\n}j\x5\x89v\x19\"\xb9\x1aj\x91:\x7f\xed\xdd" ";h%M\x89\xec\xf7g\xce\x8e'\xf9\x66\x42j\x8bO\xb1\xb4\x8S\x84\xfd\x9\xd6>(\x84\x5" "\xb7\x8a\x64oD\xc8~\xee\"\xc8Yk\x13\x18\x80\x85G\x9fu\xf6==\x97\xa2\x8f\x9c\x83\x6" "\xfd }\xbf\xd3\x8d\xed\xf0\xff\xeb}\xd8\xb*2\x92\xdf\xbf\x1e\xd6\x5\xad\xf1\xb3>" "\x85\xb0\x10\x30\x9e>\xc0X\xfc\xd9\"\xb1\x32_\xeeq\xef\xf2\xdb\xbc.h\xdbR\xd5\x13" "\xe0$\xc0\x1dG\xcf\x65{\xb6\x1c\x97\x34\x64\x9aJ\xb6<\n\xf4r\xe\xc3\xef\xcd\x82\xdd" "<\xa6\xe8\xb\xb6;\xcf\x1b\x8d\xe8\x10\xa0\xc6\xc5\x17\xc6;v\xfeh\xc0\xb2\x86\x86" "{\xe1\x2\x42O\xc3\x1cI7\x4\x8bo2=\x3\x96\x18Xo\xc2\x17\x31\x0]\x94\x9e}\x80*C\r\xf8" "\xd2\xf0\xce\x99\xf2\xa2\x37l)S\xef\xc4\x18\x43U\xe4\xd1/B,\x9e\x1e%\xc4\xdf\x38" "\xde\xa3\x34\xdb\xc8\x9bT\xe\x14\xc6\x1awi\xd7q\x15\xce\x89h\xfbv\xb2}\x8\x63\xce" "\xa2Ig\x83\x11L$\xd4\xcc\x81m\xa8\x84\xd9S\xda?\x9b\x9d:\xf8\x93\x8b\xc6\x7\xbf&" "\xa0q\x95l\xa0~jU\x9\xea/]\x80\xe5\xcb\xeb\x98\x4\x1b\x19\x7f\xacv\x9v\xeeu\xb4p" "\xdc \xaa\x2;\xa3\xf6<(v\xeb(\x1f\xf5\x17;\xb4\x90\xd6\x81V\x4Qz\xa1\xb1\xfa\x6\x31" "@\x1b<\x1a\x4\xca\x10>,\xa4\xec\xcd\x83\x87M\x9c\xfc\x8a\xbc\x13L\xc0\xf9\x14\x1d" "\x9a\xfaV\x84\x8b\xf2\"\x34 \x16\xc5V\xc1K4\x82H-\xce]\xbn\xf1\xabR*\xa1\x81+\xdd" "\x8d\xd3\x39~\x5\x32~\xc1'H\xfcH\x8\x42\x9b\x97 .$\xe1\xde\xc|\r',\x4k\xa7;7\xd3" "\x9\x30\xc5\xdeZG\xd9iU\xcb\xf]\xed\x8f:\xd9)\xa8\xb4-(9\x4X\xf5\x91\n\xf\x93\x61" "\xfy\xed\xdb'\x7\x89\x43\xdf\xe1|qme\xf9\x65\x89v\x93I\xf3\xb6j\xb7\xb8\xc0\x4\xcc" "\xc5\x9e\xf6\x88\x1ft^\xc7\x12\x98\x65\xa7o\x9c-\x2\x9d\x46`\xcc\xfbM_\x9d\x41+\xa3" "7*'\xcb\x17^\x9d\x65\xf7YW\\\xf1JX\x99\xa8\xd3\x1f\xf0\x39\xac\x2\xdb\xd8\x39\x1c" "3\x97\x42\x8a\xc0\xd5q|\x0R\x0y\x7\x85\x35H\x13\xc8\x85\x9b\xe9\xe\xe\x17\x91Ol\xb9" "\xc6t\xf1\xe9\xa9\x64\x86W\xb5N^\x1fRulO\x98-\xf7Ns\xf6\xe4\xd4\x7\x18\xc7\x1d\x1d" "\xe$ \xfbtb\xfe\xc9\xe4W\xc0\x41J\x96\xe4u\xc6\xbe,\x10\x43p\x96\xfc\xa0\xc9\x42" "\xe9\x95\xa9\xad\xa7\x89\xab\x63{d\x87\x81\xd3-\xfbh\xe6.\x91\xc2\xce~\x13h\xf\x8d" "1\xec\xf8\xc8$\x88_\xa7\x61\x89\x81\xcd\x5\xfb\x33Z\xa1\x11\xb4\x9\xc5\x9e\xe3\x37" "\xdfN_\x9d\xcc\x92\n_\xc0\xd6 \xdc\x7\xf2\r\xad\x63\xf4\xff^\xe\xe5\xa2\xf3\x90\xaf" "\x1c\x32\x12+\xa7x\xf!\x2)\xe5\xa5\xe3\xed\x97\xbc\x1c<\xdd\xdd\x45ns\x9c\xa7\x82" "\xed\xbfK\x81\x5R6\x8e\x9csK\xcx\xb0\xb8\xe3\xf8\xb2\xddx(b\xb7\x43\x18\x87\x1b\xb1" "\xef\x8x(\xcc\x17={\x4\x98\x11\xfc\xf5\x98\xb8\xef\xdeM\x9b\xc5\x44\x7fHH\xc9\x80" ")\xc8T\xf3\xae\x46\x1b\x9d\x46\xdd\xad\x8c\xe6zR\x1f<\x81\x1a\x81\xa3\x96\xcb\xf" "\x80\xf3\xc8\xd8\xec\x88\x30S/\xb7\xf9\x62O|\xae\xf\x8cm\xf8u\x7\x33\x33\xde\xb2" "\x8a\xaa\x90\xaa\xf4\x86\xab\x8c\x93%S\xcei{\x88^q\xec\x8e@\xc7\x83\\\xd5\xd5\x9a" ",i]\xb9\xe5\x12\x16\xff\x9bw\xa1[\r\xa6\x37\x17\xff%\xb0[\x93\x9e\x45\xcf\x7f\xbe" "I\xeQ\xe9\x34\x42\x13\xb3.\x11\\-\xe1Mv\xdf\xd5\x84P\x88\xde\x64[\xeu\x4*a\xd8/\xb1" "uZ\x9kh\x1d;\xc5\x1a\x9f\xf3.\xba\xff\xf7\xec\xa8\xb5\x9d@\xf0" "\x93~\xef\xf3\x83\x12\xaeWF,{\xf3\xb1\xfe$\xd2\xba\x8d\xfe\x84QRp\xe0\x90\x63\xce" "<\x80\xdfI5\xe4\x9\xf6.\xb4\xf5J\xf1j\x18mC)\x97+\x9b\xdf\x15\xfb\x8\x46\x1bh\x8e" "\xd4\x99(B\x92&\xca\xd9\xf6|\x9d\x63m\x13u\xcb\xb7\xb0\x8aV1\x95k\x7f\xe2\x9c\xc9" "\xef\xa8\xd7\\\x9eI\x19\xc8\xc2\xc5O@\x1d.\r{\xfb\xa4\xcP\xca\xe2\x14\xd2\x10\xc6" "\xf3\xeaX\x2\x33\x9f\x63\xfcL\x1c\x19\x95xv\x17\xf3\xec,\x80l\xe4L\xf8\xe2\x9fv`" "l\xd5\x83onZ.B<\xd7\x91\xbe\xcd?\x11/%e}\xfe\xd9\x36o\xc4\xad\xf9\xbh\\\xceJV\x98" "\xe5\xfe\x16\xd7T+\x91?\xbc\x1\xb2\x88\xdd\x13\xf4=\xb2\xb1\xed\x8c\xcb\x80\x15\x9d" "\xbd\xc9\n\x81\x32\x12]\xf8\xdfT|HQ\xca`\x9d\x1foMdwA&\xe\x84[Ey7xx'\xa8\x9e\x37" "\xcd\xa0k\xb1\x91\x66\x9a\xc8K\x86\x8\xea\xe1\x32\xd1\x1w\xf3\xfc\x38I\x80\xf3\xa6" "\xe4\x39\xb0H\xa3\x8d\rk\x9c\xef\x9\xf3\xf2\xd7\x32\xaaq\xbd\x5\x81i\xd6\xd0\xf8" "\xc9\xd1\x46\xd9\xda\x4gt\x2uY\xa8\xb3\x84?a\x16\xb4\x18\x42~xGj\xd8\xf0\xf8\x1e" "\x8ak\x12\x9\x80`\xff}\xd6\x86P?\x97-lB\xfdl\xc2\x9c\x8:\xc3\xd7.7Q\xf2\x1d.D\xa5" "r\xee\xc8\xe\x81\xee\x44\xc9\xf\xaaz\xfa\xbc\xd3\xec\xeb\x98\xfd@h\xf6\xc3\xa4\xde" "\xd0\xe6\xce\xc5#\xc9\xa0\x5M\x1f\xc2\xa8\xd6\x1aJ&\xf9\xbc%\xb\x8f\x30$\x16\x92" "J\xb2.r\"\x97\x88\x8b\x85\xb9\xc1/\x8d\xfd*tL\xbd\x14?\x9b%\x14\xc1\xcb\xe9\x88\xd9" "\xcbNw\xd9\xb.\xfd\\*R\x83U\xa3_|J\xf0\x39\xc7\xd1\xd7V0Yg\xb8G\xd4\xac\xbb\x81&" "=I\x92\xc0\x1\xe2\xa2\x62\xb9\xfe\xe2\xd1\xf5\x2+\xe5\xb1^\x1d\x8f\x1dg\xbcR\"sD" "\xee\x91,\x1\x8c\xb7>_G\xce\xd5O\xd2\x2\x62ww\xbbw\xaa\xcf>\xe6\xb2'\x6\xfb/\xa9" "\x6+\xee\x87\xe2,\xd2\x80.w\x6\x32&H\xda\xa0\xc6$\xea\x88T0\x17_tn\x1fSo\x9a\x8e" "\x1c\x61\xcJv\x1d\x7$\x84&\xdb\x63\xc9\x31\x9a\x88\xa3\xfa\x44\x9c?\xb8\xac\x94\xc6" "\x0\xdd\xd6\xfb\xebSJ\xf1_t\xf6n\xf8" "\xd1N\x7f\xf7}\x8a](L\x82\x2\xddZ`S\xce\xaa`k\xf9%\x99#\x82^\xf4\xef\xfa\xa8\xd8" "xe*L\xaf.\xe4>\xd2k\xf3Y\x4\x2hl\x87o\x86\xc1\xae\x95\x4nRv\x17\xcd\xd3\xc4)\xbd" "L\xc3\xf9\x65M,v\xdd\x41\x2G\x1f\xf7\x46\xfa\x9f\xa3y\xb1m\xf9k\xfe\x38\x36\xd4?" "\xcc\xb\x8e\x95\x12\xc'7\x0I\xac\xa4\xac\x31>\x1dP\xd7-\x18\x14\xf2Vk\x8b)\xfa\x9c" "\x9c \xd0H\x87\x43r*vd6wg\x83\xb9\x39\x17\x1f\xff\xa0\xe\x4\x80Z\x8bX!MO\x11O{\x9c" "<\x17\xcet\x86\xae\xa2\xbc\xc8\x95\xec\xde\x80\x95\x2\xbd\xe5y\x81\x31\x8a\x93\xf2" "0\x16\xf0V\xa4!\xb7\x33\xc4Y\xe\x34\xab\x8\xbb\x34\x8d\xa4\xa4\x8f\x19\xb6\xbe\xfa" "\xa1\xdd\xd2\xa4\x9alD\x4\x43\x2\x83\x33\xcd\xd4\x8c\x85\xcdi\x8a\xda\xf3\xfd\x86" "vs\x9e\x44@\n\x98\xb5u\xbe\x2\x35\x5v\xf9l\xfaT\xd4\x18K\xa4uU\xb8\xd1#t\xb8m\x3" "\x8d\x8_\x7f\xa5\x1f\xf4\xbe/\xf5\x98\x14\x8\x99\x9bH\xb2\xfa\xf3\x5!.\xd5K.7\x1f" "Z\x0t\xcfh\xd1\xb0\xe5\xcd'\x9b\xbc\x8b\xba\xefiJ\x89\xa6\xc4?Q\x8d\x1\xbbN\x84\x2" "\xaa\xdf\x34\xe9n\x9b?\xcc\xabL\xbe\xa2t\x1d?\xd9\xad\xf7\xaf\x32\x38\x8fwq\x84Z" "\xf9\x99\x65\xa6\x7\x8fM\xa3\x35\xef\xa4\x36\xbe\x36\x90>3\xa7\x43\xc1\x12\xc0&s" "\x9\xf2\x66\xdd\x44\xfa\x99\x8c\x9a\x13\x97\x4\xe4\x0\xb8\x9d\xab\x95.\xec\xfe*\xc0" "\x9c\x82\xd9\xf4\x97Sq\xcc\xc2}\xa3x\x90\xec\x84\x12\x31\x93\x31M\x8azp|!\x7f\xfc" "\x95\x1aT~\xe5\xb6\xd1\xb7\xc8\xed\x85\xbe\xbd\x9d?K\x9b\x9jx\xe5\xf7\xdf\x88\xc9" "1\xe3\xf3\x96\x97\x39tENY4\xc\xa5\x1d\xbf\xea\x1a\x0\xde\x8Kdc\xe&\xc6\xd6\xa3Y;" "\x82\x88\x14\xe2}\xb0\x18k\xf2\xa8~\xef&\x8a\xa1\xb1\x35\xac\x9\xb5,\xfeS\x5\x1c" "\xbc\xc8\x8c\xecVW\xbdG\xf6\x3\xc8\xe1\xa6$\x91\x61hO\xd9\x8J\xc2y\xf5zO\x9b\xbd" "\nTj\x87\xe1G\xb6*\xc8`\x91\x19i\xa2\x9b\x8a\xa2\xe:\xaa\xd0\x7\x9d\x64\xe6\xbf\x1b" "\xf,\xe8\xf0\xc5L\x90\x19 ~\x1b@3X%\xb6,j\xfa\xd8\xa0\xd7\xad\x16)" "\xf2\xce\xca\xd8+\x8f\xde\x38\x97S\x3v\x8c}:\x8\xb9\x14x\xed\xb3\xc4Z\x8ckw%\xea" "\x85\x96\xa8\xedP\xb8\x35_\xb8R\xfb\x89\x66G\x9d\x12\xe1\x8\x62#\xb1\xe6R:e\xfb\xa8" "\x1d\xd1\x6\xfe%Os\x9q\x87h\xab\x0\x9f\xf7qJ\x8c\x36;\x9\xdd\xa7<\xd3\xf8\x1b\xf9" "\xc0\xcd;\xc\x80l\xf3\xb7\xbb\xfa\xb7>F\xfa\xca\xd2H\xe\xeb\xa9z\xe6\x8e\xc9M=y\xaa" "\x1\xec\xc2 g\x85\x8e\xff\xa9\xd7\xb7\xf9\x97\xab\xd2\xceZ\xaa\x87\x81\xe5I\x9e\x85" "\x80\xc4\x5h\x1c\xc6>\xeaS\xbbG\xe5^\xcc[\xa2\xa7\xa3\xc5G-\xf0\x34\xb0\"\xf4U\xc6" "\xf\xff\x97\x1b\x1X:)\xe2\x11\xa8\x7fqc\x18{\x19\xb\xc\x10\x83\xd6\x96\xb5\x86\xe9" "C\x8f\xd8\xba\xa4Q\x1\xa5\xed\xcd\x1b\xe5\xab\x9aXU\x11\x8\x9d\xda\xc8\xdf\x1b\x1f" "\xdb\xe5\x82\xab\xd9\x45\xe6\x7f\x99\xad\xc4\x45)\x88\xa9\x85\x9e\x39\xc9\xe\xf7" "\x94\xc5\xc4\xe6)\x97\x8[z\x16\xa0\xd9\x1\x7\xd0\x86\x10\xba\x17Z\xd6\x63w4Vb\xda" "}\xa4\xd8\xfe\xf8G\xee]W\xe3\xacT\xb9(\xa0\x95|\xc1\xc9\x44\xe7\xff\x14\x65\x8f\xe4" "\xa6\x41\xcd&\xc6\x11\x5\xc0\xf1\x36\xa7YPvKi\xca\x17P\x9e<\x19\x35\x1d\x45k\"\xc8" "|U\xe8\xdc\xc4\xac\xd3\xe1P\xd9\x36\x33?\xf3\x64\x99\xadk\x2\xb6@=\xe0\xf1)\x1\x30" "\x1e\xcb.\xba\x10\x32K\xa7+X j\x13\xb8\xf3{\n\xeb\x12\x11]\xc\x12\x87\x9c\x8e\xa8" "\xa2\xebp\xe8\\\x95\x43\x45\x64\xba=\xffH\x1c\x89rX~\xfft\xee\xbb\xba\xb1O\xb3+\x8a" "\x84\xb8\xfc\x42\xeb\xec\xa6]%\xe8\xc3,\x19\xcaYb\x83+\xf4]\xfd\xa4\xe8qP\x8a\xec" "1\x84\x95\rm\xbe\x89\x1\x9c\xea)\xe4\x4\x84\xc3n3\xd7kubUS\x1a\xdd\x1d\xb2L\x3\xb2" "\xa6JG\xbd\x8f\xba?\xdc\xb1\xf5\xb9o\x8e\xec\xb6\rX4\xab\x0\x1apt\x4\x98r\n\xfbn" "\xc0\x34\x45\xcc\x35\xb5\x1fy\x87\x10\x96\x18\xc6\xc7\x8c\xbe\x30\x41\xbe\xdci\xb6" "\xfb\x12\x81\x42\xce\xc5\xc8h;U\x8a\xfe\x30$\xef\xf7\xa1-\x4\xefY\xa7.\x15m\xf1\x1d" "3\xab\xa0\x8a\x8e\xeb\x16%\x9d\xd9R\x9c\xd0\x3\xadN\xf4\x13{o\xf1\x65\x42\x36G=\xfb" "\x93\xf5\x97\x33\x1a^&\xc7yoR\x8f\x65\xc9O\xe0{;OM\xd4\x90\x34\xfa\xc\xc1\x89\xdf" "\xcd\xffp\xc2\xf1\xc6\xd3\xdf\x30\xae\x10>*\xc5\xcf\xf2\x6\x64\xab\x93L\xe5\xc1\x96" "\x93) q\xc9;\xd5\x90\x38>\n\x19\x31\xe0M\x1d\xdd\x18\x7\x1d\xaf\xb6(\xf5\xd7G.E{" "\xf8\x1d`d\xed\xfa\x8d\xeb\xff\x91p\x1cP8\xcb\x30\x86]a\"\x7j3g2\xdb\xcd\xb0\xa6" "%T\x87s\xd0\x1\x36H\xa7o\x7\xbb\xdc\x9c\x16(M\x15\x8e\xc7\xa1\x5\xae\x37\xa6\"yA" "\x9c:/6\r\xczt\xd6\xfd\xd0\xe3m\xca*\x8b\xd5\x99\x45\xa4\x19\x65\x98\xf6\x90\x87" "\x8f\x84\xc8\x94\x85,\x18\x11\xaf\xeaK\xe3\xb9\xf6\xa5!\x9e\x66(\xc6\x66i\xdb\xd8" "\xfa\x9a\xc\xfc-\xdew\x16\xa3V\xfcO\xb2q\xd8\xa2\xcd\xdc\x8d\x46\x84\xde\x44sU\xbc" "z(}\xc5hR\xa6\x38\xc5wx&\xebn\xb7/\xac\xcc\x86\xf8\xb\xed\xdd\r\x64\x9a\x88<\xfe" "\xefMtu\x1r\xa9\xb]\xd8%%\x92\xfc\xfe\x19\xff\xaa\xd8h\xe9\x95\x62\xda\xea\xe7\x5" "\x14\xf5\xde)n\xf7\xb5~o\x19\x37\x37\xab\xb6\xaa\x31yVXD#\x81~\x11\x66Jg8\x91\x97" "\xad\x9f\x8fw\x1e\xa5\x95Q\x98\xc9\xee@\xa0v\x16\x39\xe6\x38\xce\x9d\x89\r\xf4hd" "&p#_\x13s\xd3\xack\x1f\x43\xb5w\x7f\xc0\xa9\x1a\x96\xe0\x95\xe8\x9b\xb9\xfd\x62\x61" "M\xe4V\xcez\xfdk\x85Q\x12\x36us\xfd\x9f\xcb\xbdJO\x9cgng-b\xdd\xd3J\x9b\xfe\x83\x11" "\xb6\x17Z\x0<\xd1\x43\xc0\xdf\x15\xe4\xc0\xb4\x8csT\x4\x8nH\xae\xedko\xa2\x1f\xd9" "\xf4\xb\x84!]\xff(\x7f\x6w\x90N-\xdf\xdawJ@\x19\xdf\x45\xcc\x87\x7fU>\x95\xa1\xc6" "]\xf1\xd6{\xc0\xc6\xe\xb\xbaM \\\r\xa3\xda\x80\"\x9f\xddq\x85\x9f\x65\xad\x4Pk0\x8c" "+x89\xf3\x1c\xfe\x44%&2$\xf0\x8c\\~\x98\xa2\xc9\xd3\xdc\x8e\xa5\xac\x19 \xf4\xe3" "\x95\x41\x32\x62\xe0\x83k\xc0\x19\xa0\x92\xa0\xde\xca\x10N\xb2\xdfkc9*\xe8\xe2\x13" "cy\x14\r\xe5\xfc\x98\xb0\xb6\x98`\xfe\x8e\x31\xda\xb5\xc5\xdfx\x7\xd1\x9b\xea\x34" "\xac\x14\xe0\xab\xc6\xf6Q\x9cQ${\x10M\xe7\xd9\x12\xc5\xbfn\xf1\x1bH\xfcm\xf8\x45" "\x12\xe9\xf5\xfe\xbbH\xf7/\xf1\xb7\"\xbd\xc3\xbb.\x83[.|\xc6\x32K\xee\x84\x89\x39" "\x96\xb8\xdc-M\xc2y:Oi\xc1\x8e\x63\xda\xf0J{\xb5\xc0\xa9\x7n-Z4>\x13L\xc3\xc8\x9c" "G\x12\x90\x6V\xff\xc2\x2\xe1\x98\x85&\xd8\xc\x7f\xd9(\x1f\xe4\x7f\xba\x8a\xb5\xd0" "%\xe6:\x84\x5\x1fk\x13\x16{\xec\x15\xb3\x46!,\xbd\x5\x1a\xfez\x98\xbe:$\x91\xf3\xc4" "iq\x8aX\xe7\x83\xed\x91\xf9\xe'O\xb4\x97\x8f\x87\x19\xe9*\x99\xa1\xe8\xf1\x42\xea" "~\x1f,F\xaf\xf0\xa2\xfbP\xf4\xd1\x5\x13\xc\xe8\xea\x30\x9b\xeH\r\xc8\xf8\rPar\xb6" "\x9\xeaK\xb4\xe2\xbb\xae\x98\xd8\x88(\x14\xfb'>i\r\xa9\x90\xb6\n\x9c\xda \xa2\x41" "\x82\x46\xbd\x10\xaeg\xd8\x46\xa0\xfa\x81Z\xc2XX\x14Z\xdd\xa1\x6\xa6w\x8a\x11\x87" "\x7f\xe5\x9a*\xbe\x30\r}\xb9\xbb\xab\x31\xcb[\x96\xb~N\xf9\x1d\x46\x0\x88m\x87\x95" "\xdc\x36\x1c\xbd\xdd\xde\x5\xeb\xd5K\x19\x41\xf4&\xf7\xfa\x83\x99'\r/T\xc9\x98\xbe" "\x92\xd1\x46\"rp\xa8\xe8\x9a\xf9\xcH\xba\xfcN\xcc\xca\x1\xe6\x32*\xfc\x16WCG^u/9" "\xbd\xae\xc4\x92\x97)\x5\x10\xff\xa2\x64\x34*\n\xfe)\x85\xf8]\xee\xc6l6\xebJ\x1d" "Fh>\xe7\xc5\x91\xa8\x9b\x81V\x9a\x85\x66\xaf\xbc\xa2h\x10\xdd\xb0\x97\x5w\xa7n\xc8" "\xa0\x66\x62&\x6\xb0\x83\x15\xdb\xf.lg\x1f\x32Y\xc7\x36\x37\xd7s\xd1\xa1\x80\xaa" "\xd6j\xda\xda*e\x95\xb5\xf4\x81\xe5\xf5\x9eQ\xcb\xa8v\xfa\x6\xd2\x1e\x1dgL\xfa\xb4" "j\x2\xd2g\xe2\x2\x34\x32M\x8\x91\xe7\x84|\x13\xc6\x9b\xfc\xee\xa3\xacU\xf2\xea\xf7" "Srk\xce\xb0\xde\x1e\xec\xf4*\xda\x96K\xf9\xe4u\x95\x33\x2\xc2\xfc\xa8\x4\xb7\xbw" "\x94\x82\xdc\x93\x19\xb4\x3\x81\xe0\x9c\x0\x96\x46\n\xe1\x13\xc1\x9a-\xc9\x15\x7f" "\xa1\x38\xcf\xewX\xf7\x10\x8\xe7\x1d\xfu\x99tMd{\x9\xb1n\xbf\x14\x37:\x5\x87X\xc4\x42\x93\x9d\x36wD5UHQ\xe9Q\x9b" "o\x9\xc3\x1e\xf2kl\xd9\x97\xda\xfa\x11\xda\x91\xfa\x97Y\xf1{py\x16L[G\xb9\x9c\xcb" "z\x87o\xba\xb1\xd0\xd5\xd1\xe1\xa2h<\xd6\x91Nk;uY9\xce\xf1\xc9\x16\x8d\x30\xb2s\x8c" "CIe\xc\xf8l\x90\xd2T/\xc9\xb9\xf\x36\xa4\x94\xc0\x35\xa1\xc8m\xd7\x16\x1J\xa1nk\x9e" "\xc7\xaa\x3\xb1\x65T\xbe\xc4\x36Q\x1d\xd3\x9\x7f\xab\x1f\xd0\xcdI\xed\xab\x96\xf7" "N\x8f\xd2\x64\x0\xfct\x8c\xbd\x9e\xe1\xee\xae\xe2M\xa3\r\xb6\xf8sKR\x81\x8b:^Q\n" "\xa5\xc1NB\x6\x8\x98\x3>~6\xcb\xa9\xa6@B\xcf\x94\xa7NKR\xe3z\xc0'\xc0\xdci\xba\xc4" "\x94L\xce\x12\xe7\xad\x81\xae\xdc\xe6\x42\xec\x34\xca#\xe3\xff\x7\xb8\xcd\x35\xdf" "\xf1\x9f\x33\xc8\xd4\xdb\xb5jRSO\x8a\x82{\xe4z\xd4\xae\xdc\xad\x83\xb2s8@\x9f\xd1" "\x10\x1cM\xff?\x12\xd3\xdfy\xad\x1f\xce\x65\xb2\xf4\x19\x45\x1d\xd0Y\xc8\x8b\xf0" "fA>#\xde'\xd3\x62\x1d\xac-\xcc\x8f\x9f\x36 \xda\xd0\xf4\xb1\xa6\xe8\xc9\xe6\xe8\xad" "\xb5R\xe1\xeb,K*;s\x98j\xd5>\xd9\xed\x89\x11\xf8/u\r\xf0\\\xd2\xeb\xa3\xe1\xb0\xdf" " \x8a\x87\xfb^\xd4L2\x96\xb8\x3\x88\x1c\x1d\x97v\xd1\x33P\xcd)\xc3\xf7\x16\xf0\xb5" "\xa8\xb8Ux\x12\x2K\xa7\x0i\xbe\x65\x89\xaaW\x9e\xad\xb1\xf6Wq-\xf2W\x8\x43\xd7\xc5" "\xff\x7f@\x9\xd4\xd2\x32\xd3T}\xc8\xb9.\xd5\xc4\xdbw\xb7\x62U\xe6\x61\xff\x8b\x16" ",a\x91K\xd7\x96\xef\x8a\x8s\xf7\x9f\x96" "O\xde(\xb7\x92\xba\x99\xa2\xc?\x1f^\xd1\xfd\x18\x9f\xb1\x86|\x84\xdc\xd6\xaf\x43" "\xd4\x94 \xc8\xb1\xf3\xdc\xe7\xdb\xaeq\xde\xb1\x7f\xe4VD\xdb$OD\xb1\x1\x1c|v\x8e" "\xbbrT\xf4\xda\xca\x64\xe9\xba\x87\xaa|\xd0\xf0\xc4\xb2\"\x8f\xfb\x9e\xbd\xcf=\xde" "M\xce\xd3\x93\x99\xff\xeb\x34\x88\x11T}\x2S \xa8\x8bH\x9\x43\xa3\x39\xe2\xcd/\xa3" "`Z\xaa\xe8y9\xb1\xd7\x90\x14\x65\xa1\x87\x9b\xcbL[\xe1\xa1y\xe7\xe3q\xf1\xba.\x8" "D\xf8\x8a\xfb\xae\x9bx\xdc\xcaG\xae\x8a\xed\xf5\xbd=E\x8c}Jz\x8\xac\xcb\xf8\x80\xd1" "\xf1\xdci\xc6\x36\x62\x8d\xf1\xeb\xdc\\\x42\xff\x88\xff\x8b\x66\x35\x1f?r\xd7\x3" "\xe5/<\xe9\x1eN\x0u\x97S\xa5\x99\xfd\xd8\x63x\x8e\x99\x85\x84\x98\xb6k\x93\xe5\x8" ";\xc3P\x1c\x39\xa9\xba\x92\x8b\rv<(\x82o\xd2\x37\xe9I\xef\xb\xa8\\\xca\x9a\xa2\xc" "@]\xb6\xd5\x61-\xb7\x18\xf7\xb4\xad\x31\xd2S\xae\x30nM|\xb6\x15\xc5\x9a\xe6h\xd3" "G\xa4\xe6\xf\xff{\x10?\x8b\xd0\xe7\xcb\xdb\x14*v;\xe8\x8a\xb4\xe\xefk\x8f\xc2\x0" "E\x8dr\x89\x30\xad\xf\x94\xfeR\xac\xbf\x6W\xc4\x90|\xc7\x94'\x10\xab\x1f\xd8\xbd" "\x14\x9a\x9c\x9d\xefk\x8d\xca}\xb9\x6*\xa7\xb1\xb0\x11\xab\xb5\xaa\xe8\xb7x\x93\xa0" "#\xf9\xee\xee\xd4\xa2\xf\xbc\x30\xf9\"(*z\xe2\xf1\xac\xff\x64\x15\x10\x13\xd6\xb8" "\xac.\xaa\xe5\x81q\xa1\xf\x80\xbc\x18\xc3\xbb\xb5\xde\x1e\"\xeb\xe6\x3;\xf8\x30@" "b\x90#\xd7L\xcb\xab?\x19#\xcf\xa4\xa6s^\x1d\xfa\x8a\x1b&\x1f\xbf\x1c\x39~&\xf3\xba" "\x9c&)\xcf\xda\x84\xdf\xa3\xd1\x8~\xbb\x19\xdd\xa7\xe2\xd7n0\xdc.\x15\xb8\x82\x1d" "R\x91\xda\x1d\xfds\x94\xeU`\xa8\xa6\xdc\x91\xbe\x0u\xe3\xed\x8d\x9e\x8c\xac\x85\xac" " v\x8d\x86\x8c\xd2\xdc\x45\xde\xad\xcc\x8bY\xaa\xben\xe5\xb2\xf8\x91\xe0\xd7\xcb" "\xae\x82\xf\x83G\x93\x32\xbf\x97\x7Hf\x98\xfe\x19lr\xefr\xb5/T1C)\xfcI\x81qx+\xf1" "`\xe1\x11\n\x19\xb8 \x8f\xc5\x91\xef\xf\r\xa7\x1a\xf6W\xb4:|\xc6I\xa8H\x8bu\x9f{" "i\x13KO\x9d\xcfy\xda\xeb\xc1\xceR\xcc\x80\x15\xf3$\xc9\xd4\x63 \xf4N\x15Q\xed\xa6" "\xd8\x61\x39\xdf\xd1\xdb\x81L\xf3\x8a\"\xa8\x9f\xab\xb4\xf7_\xb8\x96\xb0\xev\x98" " \xf7\x63Hn\x86\x66\x82S\xcc\x46l\x15)\xa5\xa9$\xcc\x33|HD\x88Q\xa3\x81\xdc\xef\x63" "\xa0\xa3\x2\xb6R\x3\xd6W\x1a\x1d\xd1\xfb\x9d\xc0\xc3\xbdj\xefH\x91Ip3\x10\x9c\xeb" "ZH\x1b\xfe\x44\"I\x94\xe\xc5@\x96\xf1\xd0\xf2\x43m\x9e`I]\n\xcf\xf9g\xa7\x41\xb3" "\x4g\xd2J\xc6\xb0\x3\"\x13\x18\x66k\x95\x1e\xfd\x45\x32I\x87\xb1\xb\xefJ\xaa\xf\xf1" "\xdfh\x87\x37z\x7fp\xf5U\xdf\xb9\xff\x10\x1\xc6t8\xa1g\xa0\xb\x5\xd2\xc3peeQs\xa7" "\xed\x9a\xe3\x42\xdf\xa1I\x7f\xb1\xf2\xfe\xd6\x9\x89\x1$\x9a\x8]1\xb6m\xbbj\xc2^" "\xf1l\x10k\no\xf3G\xcd\xf6\x64\x34\xdc?\x0\x12\xda\xad\xe8\xb\x94-R,\xd5\x9a\xf4" "\xc3\x1c\x1c\x6!W\xb3\xd0\x0\xb9\xcb\x86\xe2\xaa{J[\xf3\x16\x5\x8a\rZ\x14\x8e\xaa" ",g\x97\x7f\xaa\x9\x66\xe4\xc3\x45N\x8\xdf\x14\xc2I\x8a\xd7n8\x9a\xf6],\x13\x9am\x86" "u)\x8c\x46\xac\xeb}\xbei\x4\xc3s\xc0n_q9\x9b.\xda\xb@\xab\x96\xe8\xbe\x99\x1d\xdc" "9\xf9/\x1d$y\x7f\x9e\xc9\xf2\xfa\xe2Vi\xb4\x37T\xe2I\x8e\x8e\xa5\xc4K\x17l?\xb3\xe8" "\xf7\xa7\xa1H\x12u\xa4\x61\xf2T\x9a\xfcL\xc7>(A{\xd8\xc5!,\x13\x10^\xab\x96}\xaa" "g\x9a\xe8\"\xb9\xb7[7*\x99\xc7\xe8-k\xd8:\xa2\xba\x0\x31M\xa4\xacQ\xb9\xca\xa3\r" "\x80Pu\x5\xbe$\xba\xd0\xa8|]]s6\xed\xf6\xc\xcaL\xec\x82\x1\xd2\x43\xc3\x93/t\xd1" "q\xe2@\x9dx\x9a\xad\r\x4\xa7\xbb\"\xfbm\xc3\xab\x92\xae\x33\xff\xea\x89|HMt\x10\x39" "\xf3\x8c\x31~\xa3\x96\xa0\xfb\xb9\xf1Z'\xd8\x7f\xcb\xe0\x7U\x87\x99\xba\xb7\x32\x12" "\xb6\xe5\xfa\xf2\x8\xb\xa0trN\xac\x87\xd8\x81\x66\xdb\xc1\x46L\xf5\xd4\x1b\x99\x42" "\x88Q\xff\x1d\x99$iDQ\x1c\xf4,?\x92HQ>\x9eQY?%=\x89\xc6\x4\x38\x8a\xd7\x13-j\x16" "\x9e\x9d\xd8\x88\xe0 \xac\x1f\x8b\xa6\x6\xf2\xe1\xeb\xb9yw\xe5\x5\xd8\xc4\x8Se=\x8f" "9\x8fq\xcc\x9f\x8f\x9cT\xc\"\xa1\xe6\x19[\xa5x\xaerb\xfc\x84_\xcc\xf7{3\xf3>\xef" "&d\x89\xaf\x8b\x81\xa6\x15\xd6\xa1\x34\x64\xbc\xa5\x8b\xec\x16\xc2?1\xd6x\xf1J\x93" "\x8b\xec\x31'-\xac<\xcb\x1b-\xaeWz&\xbe\xd8R\xfcY\x84\x31v\xa5\xfc\xfc\xfa\n\xb7" "\xfb\x0\xd2\x30\x9d\xe5\\\x82\xcb\x90I\xf4O\xa6\x1f\x1e\x31\x32\x5\xa7\x63\x17\xc4" "\xcfR\x9a\x44V\x1\x9d\x97\x6$\x12\x96\x81\xf4j\x9c\xd7\x95\xb\x8b\\@a\x85\x30@\x11" "<\x81\x15\x31\x9eh\xb3\x7f\x88\xd8\x64\xc6\x95}\xf8\x13\xb3\x5\xd0\x9ej\x17\x16\xb1" "\xf&\xf2\xef\\r\x7f\xc7z\xab\xbas\xe1+Z\xe6\x41j\xb1\x9f\x65\x63\xce\x14\x4kq[\xd4" "\xcb+\x1eM1_B\xd1\xft\xcd\xed\xe8+\xcd\xd5$\xa1\xa5\x46\x9!\x90\x84\xcf\x1c\xda\xbf" "\xe7,\xc8\x37Tx\xb4\x16\x14\xbc\x18\xa9\x14\x90\x35\x96\xd6\xfc/6\x1e\xe5\x19\xf8" "u8_N\xcbP\xf7\x5\x31'N\xbd\xeb\x14\xa5\xdb\xd9\x6\xa6\x8\x17$`B\xe3y\x9b\xb3\xac" "d|\xdarD\xb7\x99\x8a\xe4\xf3\xbf\xbe\\v\x7f\xd2\x14.HQ\x8a\x42\x17Y\x9e\xe\xc2\xcf" "^\x86\xc8\xc2p\xff\x8b\x2\xf9I\xee\x0\x1djC\x9b\xcbK\xc7\xd7\xf7\xc8\x16|:\xe0\xa7" "\xe5\x96\x87\xfb\x8b\xf6\xf3{\xea\xa1\x64T\x1b\x8e\xaf\xd9.\x9d\x15.?\xd0\xf4\x13" "\xc9\x9c\xcc\x34\xfc\xd8\xaa\x45Z\xbU\xde\xc8\x46\xa5\x87K\x94\xfc\x95\xcf\xf1\xbb" "8k*\x1e\"\xcd\x1c\x39\x14&Km[\xd1tir\x85|\x92\x35\x5-w\xa6\xc0\xdd\x30\x19\xf8\xa3" "\x7\xfb\xee\x63\xa3\xef\x12\xb0\x39\xb2$\x10\x82v\xff\xa8@!\xf1\xac[t\\Ti\xb?\xf5" "\x87\xb4\xb1q\n\xc3S:g\xbc\xef\xc5\x3\xad\xf1\xf4\xb6+)\x10\xb3\x19\x65\xe3\x64\xee" "\xc9\xcc\x43|\xc4\x1\x81\xa7\x32\xc\xd5+\xe9\xc5\x46\xb8\xf1\xdc\x82\x43\x12!l/\xd8" "#.+\xb8\xd4\xe\xe2\xe3\x14T\xc0\x97r\xa3\x87\xf9R\xe\x33\x14V\xc2i\xf5\x1a\x7\x8e" "j\xbd\x9f\xb6\xa6\x8b\xfd_Ur\x15\xb0\xbb\xd2\"{\x89Y\xcb\xd1\xbdJ\xee\xab\x9M\xd1" "\x8e\x89\x1c\x61\xfb\x0\x93<\n\rv\x17M\x16\x9c\xb\x64\x45\xd3L\x0\xdc\x9e\x6\xd8" "^\xb0\x86\xc1\x8f;\xe2}\xf7\x34\xeb\xb9\xcf\x7\x8a\xff\x65\x14\x43\x85I\xcb\xe9*" "\xc\r%\xef\xe4\xa5'\xd8o\x15\x8bN\x9d\x88p\xc7\xac]l\x5\x96\x43\xa3)\x80y\xcc 9\x83" "$\xca\x87';\x86\xed\x80\x10W\xd7\x97\xd9\x1b\xc3\xcf/\x96\xc6P\xee\x15\x66\xcd<\xf8" "el\xc5w\xd3\x8b\x83\x2\x1\xbeq\x8d\xc9\xa4\x94&\x81w\xa5\x1\x95\x46\xee\xed\xbf\x10" "\x19\x96\xbeY61eKc\x8cu\xa6\xba\xa6H\xcd\x1ez\xa9\xac\x1e\xa6\xfL\xd6\x4\x7\x1c\x89" "\xdc\xcf\xf8\xb3\xe4\x30\xa5~\xd6\xde\x11\xc5\x83~x\x95n\xd9\x91\x5\x8f\x36\x46!" "\x9b\xea\xe9NM\x93\x81\xa3=H\xca\x9b\x8f\xf1+T\xa7?\xf8i\xd0\xee\xed~\x9\x8d\x80" "\x15\"\x95\xe6\x1l\xdd\x80\x91s\xc5}\x1f_\xce\x90\x8a\x37\x1\n\xd4\xc4G\x1aSE\x1d" "\xe9\xb4\x36;cC|7LY\x8fT\x8f\x14]=(\x8f\x42S\x1f\xcf\x36\xa9\xcd\xf7%!\xf1\xc0\x86" "\x8f\xce\xee\xb1\x85~\xa9\x83\xf6\xb7\\\xe2\x45\xd8u\xbe\xad\x1b\xcb\x88\x19\xe5" "FE\x18\xe0G\x17\xb7\x8b\xd6\xe3\x35\xf0\xadw\xb8\x32\xafV\x82\x6*\x1e*\xc7|\xd5\xed" "\xd5\xdc\x37.\xe4V\xc9m8\xbf\x8b\xf3H\xda\xc2\xb4\xeb\xbb$@\xf2\xce\x97\xb4\xb3\x37" "\xf2\xe2\x32G\xe3\xe8\x42;\xfa\x92\x37\xcal\xebo\xb9?\x96\xc\xad\x89J\x96\xf0\x37" "\x11h\xa3\x32\"\x5-\xe9\xb3\xbe\x4\xb0\"\xab\x95\xc0\xc2\x43Hn5\x19w!\xfcU1\x1d\xc5" "_\x87\xbcr\xd0\x9bl\x94\xc\xa3nf@\xae\xb6l9JYI\xa6\x4\xe7\xf1]\xce:\x0\x8b\xb4\x1b" "\xe\xef(@\xa3W\xf3HD;M\xce\x6KL\x15\xe5\xecR\xe4H\xc9\x85\xfa\xa1\xc3\xd6Rbp\xb1" "\xcci\x10\x9\x95\x9av \xc9\xa6 &\x19\xa1\x9b\xe4\x10\xff{\xd5\x35\xa8\xb2\x64\n\xaa" "E\x9d\xfd\xcb\x8f+\xb3Q\x12\x62\x64\x97\xe8\xa3\x97\xd4\xf9\xe0G\x88\x32*s\x8d\xc8" "\x90|\xb6\x43\x15\xcf\x63\xc9X\x9\xe9\r\x6\xef\x2\xf7*\xb0J\xa6\x1f\xe0.\xcc\xf7" "\xe9\x4\x9f\xf9\xf3\xef\"X\xa7VV\x17\x8a\xaa\xc9\xf3\xc2\xa2l\x0\x13\x41\x86-Rl\xc1" "N\x92\xa8\x1b\xd6\x35\x2\xf9Y\x6n\xb\xcd\x65\x9c\xb9\xb5\xa4V\x6\x15=\xd7p9\xb8\xc5" "\xd5\xb1\x35\x65\xf0\r\x95\xa4\x19\x37\xcf\x97\x8\x9f\x39\x38\xe3\x96Y\xa6M\xc3\xd6" "\x4m\xe\x9e\xf6\x65\x44\xca\xf8\xa2\x6\x63]\xf4\x99&\xa3\xee\xf3\xfd\xbc\x9d\xcc" "\xea(\x86\xec\x85_\x18!\xc4\xb9\xce\x1d\x2\xa1\x9a\x11\xbb\xbe\xf4:}MSg\x15T\x8a" "b\x80/d\xaf\x30\xbb\xcb\xea\x8c~U\xadV\xc8\x1\xd8\xa5i\xc8\x18\x36\x15\xa7\x8c\xd3" "\x93\xca\x42\xc1\x3\xf1U\x94\x1e\x84W\x12\xc3\x35\xf4\xac\xfcx\x7 +\x92\xa9\x83\x11" "\x1a\xed$\x1b\xbb\x85\x1\xf1U`\xe8\xf2\x15|)u+\xdc\xdb'@\x8\x13rw\x92\x0S\xd6\xd7" "\xdc\xdc\x62jWJ\x82\xa8\xa3O\x1ew\xb2\xfc\x8c\xf7\xc1\xa7\x32/\"\xdf\xcb\x45\x2Y" "\xeb\x45\xcR\xb7\r\xf3XJ|T\xc8\x13\xdb\x41\xe3\xdd\x81%:\x3\xb0+\xc2R4j\xf0\x16\x7" "\x16\x35W\x97\xb6\xf8!\xc\x45=\xd7\xe1\xe7V\xff\x8\xc7\xe6\xa5\xf4\xf8v\x5\xe1\xdf" "\xf3Z\x13\ry\x14\x8aW\xb7\xad\x12\xd9J\x12\x9f\xe3\xf0U\xcf\x97N\xba\x9\xa2\xb1=" "\xee\xca.\x2\xea\x81\x8aX\xb8\x1e\x87\x43\x0\x46\x46\xc7ta\x10\xbc\x61\xb8j\xdf-" "]\x8c\x45\xa6\xa5\x46\x1e\xb3\x44\x97\xfc\xcd\x9\xe7\x11\xf4{\xfat,s\xf8{%{S\xf3" "\xc\xb6\x8d\x15\x14$\xdc\x8a\xc6|$\x95\xa8#n\xa2\xd7\x98Z^\x1d\xea\xc6\x99\xd7" "\xb7\x0\xe6\xd3\x8e\xee.\x93\xb1\x91\xba\xa5\xa8\xa2\xc9\x16\xd2\x6\xc6?\xe6\x34" "'\xaa\xaf\xed+W\x84'o\xc2\x1e\xef\xf2\xd7\xeG\xc8T\r\xcc\xc3\xe0\x1\x34\x64+p7\x95" "\xcd\x37\x2\x63\x1a\xe2\xa9\xe\x6:!\x8b\x61\xe5\xb8\x9b\xbc\xff\xf8OV~7\xa3\x1a\x9b" "4\x97\x17\xa8\xcd\xb9\xc9\x37r\x15\xba\x83\x8f\xf7\x46\x9b\xc4\x86\xb6N\xf2\xb6\xd9" "%\x19\xc0\xbf\x8&\xe3\x65)\x3\xf4\xe@\x6\x89\xf5t\x9d\xf8o\xe3\xde\x17\x8e!\xe2\xe" "\xdf\x90S\x8\x1f\x65\x10\xd8\xf1\x9a\xcd\x2\x1c\xbaH\x1cHM0\xea\xd3\xb8N\xd0\x19" "\x0\x87\xeeG\x8a\x17\x15K$3F\xc3\x93\x8f\xddS@\xcfnG\xb1\x85\xe6J\xbd\xf4O\x8c\xbc" "\xdb\x82\x94I+\x91\x92\x9b\xfe\xb9\xda+\x3<:\xce\xe5T\xf0\xf1\xa7\xf8\xa5m\xf7\xc0" "j5\x83\xc1\xe9\xc5\xca\x45\x8d@\xe5P\xfd\xf3\xe2\xf2\xe7\xbe\x83\x12\xd5\xfe\xe9" "\x85\x43\x38\x8e\xdc\x8a\x4\xca)\xf1\xb8+z\xb4\xad\xab\xba?,3\x1e\xff\x35!\xb2\xb9" "/\x99\xc4\x37z\xb8'\xa9\x89\xb4#u\r6\xad\xdd.(n\x7f;iN)\xb8\xbc@6\x93\xc6\xf7\xca" "\xb5\xfe\x34\xf1\xe4\x8c\x8d\x41\xb4x1\xe8\xc3\xf5\xbe^\xd5\x14.KD\xd9\x9b\xa5\xcd\x33T\xf\x34\n\x35\xdd\xd4\x66" "\xab\xeaNr\xe5\x4\xfc\x9b\xaa\xe5\x1d#\x1c\x33\xa8\xce}\xc2\x97\r\xe4\xc1\xfb[\x9" "j=\x9c\x64\x1e\xf7}\xc9\x3\x98\x86\x83\x1d\xdd\x1\xc4\xf2\x1en\x16\x8e\x38\xbb\xdd" "\xa5\xf4\x30\x8c\x95\x9c{\xbf\x36\xa4-\x4-\xa6\x86)7\xeb \xd4\xfa.Y't\x1aX\xda\\" "\xbf\xfd\x95S\xbe\xff\xbd\x92\xe6\xd6Hq\xd8\xb2]\x90I\xf4\xe7\x19p\xa8\xffUW\xd1" "\xde\x83\xdd$(ml>Gp\xee\x0\xf9\xa1\xa0\xb0\x6<\x99\x99J\xecu\xe8Mo\x9cH\x84\x34\xd1" "\xf3\xdc\xfd\n\x8b\xee\x9e\xd8%|\xa9~u\xe8\xb1(WG\x18Mm\"(\xef\x95\xd4\xa0\xb8\xda" "%#\x18\xab\xd3\\\x83\x98\xfc\x65h\xb2\x94\xd9\n\xb3\x8\xa7g_\x9f\x16\x1@\xf0\xa0" "\x8c\x88\xad\xc\xa1\xca,\xf8^M\x3\x1c\xfa;\x87\x63_\x13\x98\xeb}\xbc\x66j%\x9f\x2" "\xdbgA\xd1>\x11\xb2\x30\x2]\xd6\xdd\x64\xc4\x38@\x9a\xf1\x9\x9\x0X\x15\x1eM\xfb\x8c" "\xe\x9c\xd6Y5\xc4\xcc\x6<\xc6\x10\xf\xdep\x89n#\xe3\x66\x1c\x7f\xc1\xb8\"\x8b&\xa5" "Y\x3\xe9\x97\xf8\x2\x7\xed\xd8\x86?\xa0t\xeeO\xf2;\xe5\x85\xba\xf7\x8\x4\xc\x9f\x8c" "\xfd\xeb\x42\xfb\x8e\xb7\x1dL\xb6\xd7u~\x97>M\x8c\x9d\xdd\x8'\x12\xc2?\x86\x8e\x11" "5\xec\xd9\x12P\xbb\x43\x35\x95\x8b\x7\xc1/\xdau\xee\xb5k\xe1\x9d\x16\x44\xc1\xf7" "j\x88\x11\xc0!\x12&\x19\xf7Q\xcb\xbf\xeb\x1d=\xc9\x12\x99\x90\x17\xfa\x16\x36r\xa1" "\xefuL\\\xb7\x89\x62\xba\xabv\xecHF\x1bI/\xa8\x8f\x98\x97\x17\r\xe8W\xcc\x83t\xc8" "\xba\xe4\x17\xd4\xc7\x8aV\x4p$s\x1fJE\x14_\x3\x93\xa2|\xab\x61J\x7f\xf7G\xbb\xc2" "\x8eh\x80\xd4\xd0\x1c\nl\xf3\x17\xa1\xde[\xb5\xad\xfaK_\xbf\xe0\xc5u\x98\xc7\x9f" "%\xaeW\xbbyzH\x9dQ\xf8Z\x9b\x9c\xf8\xbe\xa6\x42\x93\xf8\xfc\xc4;\rT\x84\xdf\x99\xdb" "\xe1\x91Ri,\xe7V\xf6\xfb\xe8\xceX1\xcfK\x8aZ\xf4u$\xe2r\xc4\\\x62\xac\xbf\xbd\xfe" "~`\xb0[\xb1\xa1\xa6\xaf\xe\x92\x10\x1 \x14i\xb3\xdb\xb4\x9e\xc7\xb2:6?\xa6\x84\x17" "\xb7\x11\x8d\xce\xa7\x1dJ\xca.6\xf8\x8cm\xde\xfbp ]\xf3\xab|t\xcf\x65\xcf\xd0\x1f" "\xf8_\xaf\x99\xf1rh\x97\x37\x33\x1dLl\xffz)\x2\x97r\xf4\x87\xfb\xf6%\xf1{\xda\xd8" "\x9bJ\xc0v\x94\x82w\xb4\xedhx@0\x10\x16\xc2\xb7\xadLm\x2\xf8\x1e\x88\xc7[z\x4\xd7" "$\xe2\x34\xe3\x8a\x38&\x93QX\"E\xe3\x61\xa4,u\xb8%j\xfdV$\xb5X\xad\xa2\x19\xf\x96" "\n\x89k\xba\xe7\xa8\xc5~v\xda\x10\xdc)\xe6\x9b\xbf:\xa8\x62\x14\xc0\x1\xa2{9\xc1" "\xd1|T\x8d\xa5`\x1e\x86\xa5\xcfS\xe7\xb1\x89k\xf0\x3\xaa\xe9\x38z\xba\x9b\x10.\xb1" "\xe9\x0-\xd3uJ7\x8f>I\xf2\xc6\xee\xcfG\xeb\x1b\xac,\xfc\xe1\x1a\xc0\xc5\xcb\x6\x36" "r\xd3'3V?>\x1e\x89\x1b`ss\x9b\xc5:\xaa\x0\x43\xfc\x45\xe9\xe\x41=\xfb\xd4T\x8d\xd3" " \xb6\x81\xedp\xa7\x44:#=y\xe3\xf0\x38\xd2iuXn\\\xdd!\x15\xaa\x61G'\xb1\xf6\xdd@" "$\xb8\\\xcc\xfcy\xd1\xb{j\xfax\x9d\xb3{\xd0\xe8\xc4#\xc1\xa4\xa8h\x1b_\xf3\xa9\xfa" "\x1f\x61\xa4nF\xc4\xb1\x83m\x1a\xa4\x1a\x89&J\x7fK\x1c%\x9eK\x10\xec\xdf\x37[\xd2" "j\x1f\x41/\xe0\x1f\xbd\xc0\x33h\xfc\xafH\xaa\xe\xc2\x8b\x1b\xd6\x3\xa6\xa0\xd0\xda" "\xde\x66\xd1L\x9br\x85V\x92\x30\xfa\xb7h\x3\x35\xbe\x10\x43\x5\xe4\xb7H\xfa\x99\xfa" "1\xf2\x39\x91`\x8d\xfd\xd2\x9}\xa2\x92U\x11\x36\xf2U\x5\x1c\x9f~\xef?\xb7\xc7\xfd" "\xb4\xe6Q\xc3\xd0:L\xa3W\xb5\x87$R6\xf4\xff\x32RV?k\xe0\x8e\xf8\xa3\xec\x9\xbe+\xf2" "{\x91 \xf7\xd3x\x1\xf6\x99\x9e\xfb\x1c\x8a\xd1\xa0\x86\x98\xccY\xce\xae,\xfc\xdb" "\xf6\xbd\x8f\x94\xde\xc9O~\xbf\x33\xaf\x5\xf5,\x85v\xc\x63\x95\xb\x45U\x10\xc6\xab" "\x93\x98\xd0\x9a\xc2\x88\xef\xa0\x9e\x8f\x63\x1aY\xb0?\xbb\xc7[\xbd\xaf\xd6u\xff" "\xac\xcc\xf8\xad\xf7\x1e\x81ZJI\xf1K\xf7\xe\x42\xdb\xbsG\xb5(N#L$\x1\xe!w\xdb\xbd" "Wd\x8e\x39\x8f\xa6\xb5\x45q\xa3{\xa8\xc9\x89P5\x94\xd0x\xd1\x8\xe4\xc7\x34\xf6N\xe2\xf1,\xc9V,\xbd" "\xf3\x63\xef\xafR\x1\xb6s\xad\x0X?\xf1\x8\xaf\xf6\xb6\x80U\xa5\xf2\x99\x45-\x17n" "\xaa\xfb\x92\xc8O\x11L\x8c\"\xa0^\xad\x65\x64\xa3\x37\x14 \xea\x9e\x64\x63\x8\xde" "\x97\xd4\x7\x5\xe1\x63\x8d\xf0\x87\x4\xfc\x90$\x9c\xbc\r->\x88JEb\xcc'7\xb\x1a\x97" "8\x9d\x8e\xfd#~dJsp\xb8\xb3\x8e\xd1\xc3w\xf5\"\xc7_\x98\x1d\x87\x8a^\x87\x10\x1e" "b\x1d\xf9\xd8\\r\x7\xbb\xe5\xa8|\xcb`\x7f\x93\xa2\xe5/f\xe\x5\xc8:zl\xe6\xd0\x1a" "\xb4\xb6*\x1e\xf8\xdaG\xcf\x97\xd4\xbb\xa0\xfa\x8e\xff\xa9\xc0\xf6\x1a\x32Z\x97\xad" "\xa6\x94\x45\xf2:\xb1\xfe'\xa6l'\x16\x39\xf8\x39 0@\xd4K\x11\xec\xc6\xe8\x5\xfb\xe8" "\x88\x43\xb3LO\xd5-\x1d]\xa1\xb0\xaf\x7\xc2\x37t\xb1" "\x9c\x9e\xf5\x92\x81\xf5\xd8\x84\x99\r\x61\x94\x17\r\x82\x93\xa8m\xb5*\xf\xe1~\x88" "\xda\x82 \x9a\x0\xa1k\xd2\x9b\x8b/\x13\xfd`\xaa%\xfc\xfa\x97\x45\xf5|\x82\x16(<\x1d" "n\xa1\xc1\x19\xcb\x9b\x8dW\xc0\x4\x19R\x10\xff\xbdV9Z>\xc2\xd3\x9\x8e\xd3\x8f\x38" "\x9e\xfc\x3$\xfd\xeU\xea\x33\x9b\x38\x92V\x82)\xd8\xd3\xe2\x5\xa8!\xe8!\x9f\xcb\x1a" "w\x13\xfc\xf3\x45\xf\x8b\xef\x97l\xa0\xbe\xcaG7j\x8c\xa7=\xf8[4\xcg\xef\xe4SME\x96" "\x17\x99\x65&\xb5\xe5\xd3\xd1\x9e\x17\xccTI\xe5\xef+\x82\xb2\xc4\xc2\x13\x1f\xf8" "\xa1\x9f\xcf\xe6\xa1\x86\xa9\x84\r\x87-\x85\xc4\x6\x65\xa7\xa0Ng\xee&\xb8\xbc\x92" "\x6\xc3[D\xc8\xf8\xa1\xaf\xc3\x86}\x96\xdcmH\xbd\x45\x6;\xe2[\x88.\x9b\xc0\xd0\x94" "\x8c\x18\xdc\x87\xei%\x81\x8e\x1f\xe1}3b\x17\xf1t\xeb\x44\x81\xf5\xc0\xed\x37\xa3" "\xbe\xaf\xafMF\xf8W\x81\x1bg(\xbe\xc4\x61\xae\x64h\xd8zser\xf4\xff\x95\xb5\x8b\x4" "VJ\x9d<\"uE\x87\xdf\x15IZ1\x9d\x82+\x83\x84\x61vKsH<\x1f|\xb9\x30\xee\xccot$\x84" "\x1e\xe1\xe@\x87\xe9Q /\xe8\x8a\x39\x13u\xc9k\xec\x44\x80\x32\x8aTt\x2\x13\xf7\x41" "\x10[\x12\xa3\x9f\x19\x80\x8f\x38#P{\x88\x11]F\x8c\x61\xb2\x12\xa8\xab\xaet\x80\xe3" "\x9b\xa5#\x90\xa1\x89,~\xc5\x2q\x15kN\x80v\xfc:\xda\"&\x95\xdf\x37#\x85\xda{\x11" "z)\xe0L\xd2\xb8\n\x32\xf\x18ma\xc9\x63\xfb\xda\xfe\x92$\xe5\x37\x5|I\xe8.@Q\x96\xaa" "\xb6!\xb5\xfe@\x11\xe1x*t~\xf9\x35\xed\x8b\xb1\x1b\xda\x39\xa1\x41\xcc\xb\xa4-\x4" "\xae\x12\x33\x83\xbc\x95\xa1\xd0:\x85\xa9\x44\x0\x10\xc3\xb9\x61\x30\x64\xff\xec" "\xa7\x61\x97\xe1\x9\x19\xbaP\x6\xf3X7\xed\x9b\xcd}\xe5\xe6\xd9h\xaa\xcbo\xc9\x11" "x\x9\x1f\xa4g\xefo\xde\xb7(\xe1r\x93\xdc\x89\xdd\xe5\xa5&\x1f\xaa\x95\xa2\xb0\x0" "\xf\xc7P\xe7\x7\x39\x0\xd4\xd8\x82G\xda\x46\x46\x13\xad\xc2\xb3\x90:a2\xd9j\xc0\xe1" "\xc5\x64\x38_\xfb\xf6$\x9d\xeav\xbe\xa2\xa9\x91`c-\xd2\xfc+\x99\x13>\x9f/G\xfr\xb4" "]o\x18\xb4P \xf6\x4\xb0l\xd9\x17K\xa3\x80]\xb6\xe\xb9\xc5\xe6\xa9\xc7\x89\xac\xe7" "j\xe9\xc7\x9c\x1b\xd3\x44\x34\xe9^P\x1b\xc9hc:\xf9?\xf4\x88B\xa7%\xa0\x34Y\xcb\x36\xee\x34\xa0\x94\x13\x9a\xf5\xfc\xf4" "\x87\xd3\xdf\xe6?\xad \xbf\r\xfb`\xde\xed\xa2\xac\xca\x35\x10\xe9\x63\x18\x9d\x12" "V\xea\xbd\x81%?\x7f\xf9\xd1\x12\x63\xfd\xbc\x1d\xcf\xda=\x1e\xa2\xe5 \x5\xce<`\\" "\x99\x32\x31%\x8aqt#\xf6K\xfe\xeb\xc3\x46\x84\xef\xa6v5\x8b\x9bT< B\xbe\xf9T\x82" "\x9f\xe3$j\x87\x98\x45\xb3\xe\xba\xcb\x43\xd8\xddz \xfc\xfe\xdfv:\xd2\xc5\xd2\ny" "\x8bi\xe0\x87\"\xdc\xe6\xa5v.$\x9a\xce\x30U\xb6P\xd9\xe1\x10Y\x9e\xa3\r\xe5\xc4\xfe" "r\x0\xd5\xa8\xda\x9e\x1f\xe2hcP\xd0\xdf\x33Hw\xd0\xb9\xf6RLU-\xbm\xff\xae\x12^\xc4" "\xc1\x8fuG\xbdQ\xc1\x42\x88\xe4\xab\xb7\xf8\xa1\xa0\x4XYl9\n\xee\xe6\xfa\x30\x8a" "\xc1\xf7\x88\xfa\xe3\r\x7f\x89(\xaf\xc9\x1dM\xe6\x35- \xb1\x9d\x8d\x8a\xb1\"\xb7" "7\x8c\xb3y\xc5\xbe~<\xe2\x92/\xe6g\xea\x5{]{?\xbQ\xc7\xbf\xc\x85\xf8z\xc2\xf3`\xd8" ",8\x96OM\xab\xcc\x91\x4\xb3/\xf\xb8\x80\"\x35\xe8\xe8\xd9\xa5\x99}9\"Y\x7L\x0\xaf" ",\xe1\xd2\xbf{\x8e\x90\xe2\xe2\xac\x34\x18\\h\xa0;\xab\x8b&wx)+\"rE\xd7\xff\x86p" "xn?to\x86\xb9\xd4\xd1q\x90\xdb\x85\x9a\xe\x14K*a\xe6\xac\x92T\xde]\xba\xef \xe2\xe9" "\xdb\xb/\xf6T\xb9\x96\xe9\x62\xf5^F]\xd2\x38\xbd\x16\x43\xceY\xdc+ZX\xb1\xe6\xe4" "\xae-\xdc-t\xd7\x9a\xff<4\xe4\xe5\x93\xe0Q\xfd\xa2\x36\xb7\x9c\xc0\xdb&\x8d*\x89" "\xb1\x87\x80Q\";\xb8\xf3?\xf9\x9b\xa8zH\x11\xc0\xb3\xbc\xc0\x11q\xd0\xa7\x31\xeb" "s.\xcd\x87I\xd2yR\xc2x\x86\xb2R\xf9\xc3\xd1\x90\x41\x9f\xd2\x90\x9\x87\xa0\xa2U\xb9" "u?\xb7\xaap\xc3tb\x13LFz,Ky \xbe\xd9\xf9\xe8o\x8f\x98\xb9m\x0\xaf\x8b\x5\xa4\xbd" "_\x14\xc2\xa0\xd9\x14\xa9\xa8\x41`\xd5T\xfd\x7\x18\xf5\xe\xcb]\xf5\xe7\x66#\x6XR" "\xda\xa7L\x9a\xd6\xda\x7\xa1\x19\xdf\x12\xc3W\x7f\xe2v\xaeU\x1dH\xb1\xc5\xcd\x8a" "P\xe8M\xec\x9c\xb0\x84\x5 \xd7\x8f\xa7\xf9\xa7\xc2\x7\x1e(\xcd \xecvI\xb9\x91\xf3" "\x81\x8c\xde)\\\xdb`\x85\xf2O\xcf\x93\x14~\x9fM\xd0\x84\xfb\xd3%%\x32m.\xa1G\xec" "\xd5\xb6\xc9\xd9\xf4\xa7\x16\x66\x63\xad\x18\xbf#N\x9c\xb9/\xf7!8\xa8\xa4\x9es\xe5" "'\xe9\xa6H\x8aL\xa8\x8\xae\xca\xbc\x94\xd6\x93\xcd,\xc\x35}(_e\x0o\xa2\xf9\x19\x7f" "a\xfb\xcan\xf0{\x1>+U\x8a\xb5\x31\xd2\xfd'\xc\xee\x7f\xa8\xe4g\xfa\xb8\x85\xe9\xc" "X\x84\x84:\xa0\x8e+\xbf\xea\n\xa5ud7'\xba\x18\xac\xc4\x99\xff\x34\xe3\x43\x86\x45" "\xbe*\xa7\x1e\xa4\x91\xe5\x46\x87\xcd\x30^\x12\xbb\xc9O\xae\xc8H1\x1a\xe8\x16I[\x1" ";\xc5\x7Z-*\xe5Jz\xd7\xc9\x10[d5l\xb5\x1f\x18\xc2\xc2\x8e:\x83\xb9\xd8\x1a\x45T\xdb" "\xec\x9b\xea\x9a\x66\xc\xf7\xe1\xba\x89\xe6\xd4\xdf\xb3\xee\xc6\xa3\xde?\xcd\xed" "\x9b-aAV\xed\xae\x8c\xfd\xad_\xf0\xef\xee\x31\xda>jT\xd9L\xe9\x45:\x1c\xaa\xd9um" "\x91\xbe\x85\x31_e\x14\xba\xfb\xc8!\xee\x81\xb\xb5\xd8\xe1\xb8\xf0_d\xf3\xf7,K5\xd4" "$\xf7\xe4\xdc:\xb5\x81\xb7J\xde\xb6\xd6)|\xdez\xa8'\x89\x9\xf2i\xfe\xd7\x9b}\xfd" "9\xb1\xc0\x33\x8e\x1\xd5V\xc4\xdb\x9c\xa3\xa8W\x8a\xce>\xc3\xd7\x43\xedK\x9c\x1\x45" "\xe4R^\x8c\x31_z\x1b\x98XK\x97\\p\xf0\xd4\x15p\x8c\x8c\xcc\x13\xf8H\xb1\xd3j\xc8" "$\x9bsc\x8f\x95\xde\xc\xd2|~\xfbR\xbe\xd4\x33\x9e\xbd\xa4\x81%\x64\xd7\xa7t\x16\xdd" "\xf4\xcc\x88\xcf\xb5-\x7\xa2R\xd8\x93S\xc6\x82l\xa1\x83*\x15\x32\x42\x97\x9bl\xee" "x:\xbd\xe6\\\x8b@\xcfN\xa7\xb4+\x8d\xbc\xc0\xe0$#\xddi1\x8\x0ojJ\xeb\xf0S\xb6\x66" "\xc3\xcb\x63\xd1\x86\x1f\x86\xea\xac\xd4;\xb9\xbbo,:\x17)<\x18\x93\x31\xd2S\xb4G" "u~\xe7\xcb\xf4Q\x8b\xab\xb7:\x1d\x44\x87M\x7f\x6%\xe6\xa0\x13\xc6\x8\xe9\x91\xb4" "\xad\x17\xa9\xad\xb3g@\xd2^>5\xb4Y\xb4\"\xf7\x37\xb\x13L\xdf\xff?;\xccL2\xb4\xe9" "\xeb\xf6\xa2G\x80\x13\xf6i3\xa1\xfa\x94\x3\xa2\xf1\x16\x1e\xc6\x32\xf1\xf0N\xdf\x95" "\xed\xf\x33\xda\xd9\x66]T\xdd\x9d\xb2VNQ\xda{e\x97\x8c\xabP\xd6\xdc\x15h\x97n\x83" "\xb0V\xeb\xe:gXQ\x8bn\x17\xe9\xeb\xfeI\xb7.\xb1H\xb4r\xba\x14K\xdc*\xc9WD\xc9\xbf" "\x12X\xf0\xa2\xe4tp\xab\xe\xff\x90\xe1\x90\xa4\x11\x8\x91J\xb8\xc1\xedk\x11\xe0h" "\x17xR\x18p\xe8\xc\x16\xaf*\xfcr<\xad\x87\x19\xad\xb6-99\xd3\xbc\x8c\xc1\xd8\xa4" "\xe0~\x9dsOT\xec\xa3=\x93m,9\xd5\xc8\x5W9\xc3>S5\x9b\xd4\xeWl\x11\xe9;KL\x12+\xdb" "\xc9\xb1\xbb\xf4\x42\x43\xafO\xb\xcd\xbd\xfa\xdeh\xc5&\xb5\xcdt\xe2\x9c\xe3\xf7\r" "b\xba\x83\xc4\x89\x3\x41\x11\xfe\x8eM\xae\xa2\xf0\x1f\x9d\x93\x8a\xbbS-\xee\xac\xe" "2\x9f\x42\x45?\xf5\xc1]\xec*\xea\x8c\x19\x83#\xc9\xe8\xfe\xa5[?]\xc4u\x1d..\x16\xb6" "\x15N\x7f*\xdd\x46\x86\xe\x9c\xa7\x1d\xc1\x14\xc9\x9d\x80\xe7\xea\x1d\xabQ\xe9%\xde" "\x16\x1c\xed\xd6x\xee\x62\x82\xaf\xf3\x8e<\xd0\xe6YT\x9c\x97\x6\x13 \x99U\xa3\xf5" "\x81\xe1\xab\xe4\x85\xe5\x64\x2\xa3\xdb\r\x1e\x9b\x8a\x9d\xfd\x5\xc4\xb0\xb7\xf9" "\x7f\xc6\xd0\xee\xd0\xb6\x9a\xd6\xf1\x82\xb1\xd0(\xad\xd2\xf2\x44\x63\x83K\x13\xf5" "\xc1\x30\x7f\x91\xd3\x63\x89\x18$\xe8\x11\x8\xe5|\xfdR\x11\xf8\x64\x0\xd3\xe9k\x10" "\x7f;\x1f\xe8\x9cI\x8\x64\x9d\x4\xa4m\xc3\xce\xe0\xde\x66\xaf\x3\xa7\xff\x9fM\xaf" "\xec\xddm\xf4\xd9\x37\x84\xcc\x89\x9bRw\x84\xdb\xe0q\x80P\xfc\xe1\x85\xbd\xe3\xf3" "\x9d\xeb\xcd\xd6`\xb2H\x8d#\xab\x1c\xff\x87\xb0Tm\x2\xb4\x8e{w$\xc9\xe8{q\xbf\x34" "\xb5\xd6\x64\xe\xfn\xceG\xb1\x82\xd4\x1c\x89\x46\x1fq(I\xc6\xcf\xdb~?^\xbc\x1a\xcd" "\xd1-e\xa4\"\xba\x36*\x8f\xd6\xca\xacQ\x4\xcc\xc5\xab_\xc0JF\xe4\x30\x9a\xca\xc8" "=e\x9d\xdd\xa2V\xcc\xdd\xd1\xbf\xf9\xab\x36\"\x45\xcO\xbc\x89\xc8\"\x14\xf0\xc\x42" "\xfb\x3\x11\xbc\xb1\xb7\"\xa6\x91\xed\x83\x9c\xaf\x90$\xfb\x16q\xf1\x8e\x46\x39\xc9" "m\x84q\x8c\x66:CA\xde\xc0\x37\x17\\k\xbd(\x8b\xbfZ\x4x)\x8c\xa7&Vz\x9bt\xc3*Rs9\xc6" "f\xa2\x94\xa1\x7fh!\xcb\xf2\x43\xd1>\xa4\xb1`<))S0\x8bVfSB>s\x1\xa0\x32\xe5\xd5\xe2" "\xb9?\x1c\x14\x34\x89\x36\x33\xdd\x19P\x1a\xd1'(\xb5\xa1\xd9\xd3\x66\x35\xb5\x89" "\xfa.\x15\x11@\xb5\x43\xd7\xc5\xe4i\xaf\xae\x8e\x80\xc4\xfc\x1d\x9c\xb6\xc3\x82<" "\xc1\xbb~\xe4\n\xec\xb5\x8c\xbc\x14\x65y\"&\xb1\x9e\xf\xe7\x92\x35\x11_j:\xfe\x19" "\xf9\x8c]\xb6=7-\xd7\xc0\x41\xcd\x94\xfOy\xf2GM\x9c\xee\xa0\x33O\xa0J\x97\xdc\x97" "s\x6H\x95\xcf\x11\xcfs\xf1\x1b\x46\x84\xf0nH\xf4\x46\x9fj\x1a\xeb,\xbb\xc5)\x94\xdf" "\xab\x33\x19\xdc\xe3\xa0\xc8\xc2\xef\xa9\x62t\x96\xf8\xcc\x84\xd3\xdf;\xdcO\xfc\xb6" "\x16rx\xf)OE2x\xae\xb9&.fHhV\xd3{vG\x14\x1a\x82\xe0I6N\xd3\xd0?\x92R\x84\xa3\xf1" "\xfa=\xdfL\xbH\xb3\xfe\"\xe7\xdf\x9a\xba#\x9d\x33\xcd\x30\xf\xfa\x8f\xd4\xb9\x61" "\x92\xbdV\x8f\xb1\x8d\x32\\\xaa\x8e\x1f\x1f\xd4\xb2u'A{\x3HA\xfdI\xe4\xa7\x7f!pb" "<\xc8\xb2!\x1\x16m\x80\x36\x1e\xb1_\xa9\x2\r$\xf6\x10\x7\xb0\xa8'M\xf9\xdf\xcd\x8e" "\x97\xc8Uh\xe7m4\xad]\xb1w\x9b\x2\xf0\x34\xa6\x9c\xcf\x9dN\xba\xa1\x88\xeb\x30\x17" "\xee\xf5\xb2*\nU&\x96\xa5t\x90\x7fiP\x98\xbd\x8aHI\xd5\xc8\x31\x1f\x12\x94G\xcdz" "<\xf8\x8b\x81\x91\xae\xc0\xaf\xf3\n\x38\xa9\xab\x81\x35`\x8ax) z}$/n\x1f\xa7\xdd" "\xa1\x9f^L(V\rB\xdb\x44\x5w\xcc\xc_X\x3\xee\xe8\x97\x10>\xca\xb\xd9\x44\xe3 \xac" "&U;\xeexR\xea\xa7\x33\xbd\x13\xdfv\x0V\xb2\xf5\xbd\x12\x43\xbe\xda\xbc<\x1e\xa0S" "\x10\x17\xd7KG\xe1\x8f\x80\x1a`\x7Mm\xf8I\xfd\x5\x32#EE\xe5\xb5\xe1\x12\xd1\xe7\x38" "SA\xd3\x9a\x89U\x1c\x80\xdc-\xea\xed]]\xa2\xa4\xbeP\x15\xd2\x97\x32N\x92\xbe\x64" "\xc6\x84(\x13.n\xc6T\xddK\xdc\xc6\x64\xch\x83_\xf8\xa0^\x9\x96\x4\xb8\xcd\x43\xd3" "\xaf+/\xe1\xc\x8a\xfe\xde\xc5\xa7\n\xf8P\x9d\x12\xf6\x62\x33\x8c\xbf\x16m\x94R\xcd" "63\x17X\xacOL\xbd~\xddR\x13\x9a\xd2}\xc5%i\x87\x7f\xe7\x9\xf2\x97\x44LO1\x89\x9d" "\x19\x45\xc8\x1b\x14\xab\xde\xcb\xf3\x1d\xc4\x63\xa4\x14\x8f\x4\xecO\xb9p<\x15\x82" "\x16\xc0\xfb\xe6\\\xcd\x45\x0\x43\xab\xfdNe\xbf\x8b(\xcc\x14\x82R\xe9\xf3\xe7\x97" "\xea\xbW\xb8r\x1c\x94\xcb\xc2\xea`-\xf2\xc5~\x87\x93\x8c\x88z8-&Y\"dc\xbc}j\x1d\xa8" "\x7fJ4\x1aY\xbe\xa4X\x17}?\x18\xd1!59\xdc\xe\x30\x1fn\xfe\x1\x11\xfc\xf6\x92\x13" "h\xbe\x17\xcc\xbbt(\x12~\xc\x5\x9c,Z\xdb*?\x1\x97\xf0\xce\xabw\xff\x7f<\x2z\x8e\xc3" "\xeev\xcf\\\x98n\xb4|\xb6\x5\x61\xc7s\xb3\xa2\xdaG\xb5\xa3S\x94\xe2\x93s\xdb\xd5" "\xc3\xffL\x92\x13\xa8\x9a\xedw\xccO?\xcf\xc4\x9e\xf6\xecuW\xc5!\x97\x9aTi\x83\xc1" "\x6\xb3\x62{_\xd2\xd7\x1c\xc5\xf0\x8a\x32\xbfI3*\x89\xc5\xdaq\xaf\xbf\xb9L\x94\x9a" "\x91\"\n\xb1\xf8\x85\xc9\x81\x42:\xf9?s\xbc\x1c\xa4\xd9-\x9d\xba\xe3\xef\xe6\xa7" "n-\xe3\xd0\xf7O\xd3%X cn?\x1ak|\x18S\x6#\xc1*\xf9\xc\xdc\xd2\xc0\xa7(R\x1e\x9b\x63" "\x9e\xb6\x34]\x1d\xe8\xff\xfc;\x19\xc7.z\x93\x82=\xfe\x31\x15\xe9\xe7\xbb\xbe\xb2" "\x8c\xb7=\xb1!\xae\xd8\x92\rG\xd8\xcc\x8\xea.G.9\xa4\xca\xd5\x88\x1b\\\x42\x4\xf2" "\xb7\x32\xaf\x9dQ\x89\xd2Z\xbf\x41<\xc7\x87\x14\xcb\x1\xb1\xd8\xcaUe\x16\x9a\x91" "\x9d\xc4\x81\xf6\xd2\xe6\x7f\x1dI\n\xeb\xc5\xcc\x62\xa8\xf6,\x1a\x32>\xbbU\xed\x35" "\xaa\\\x8do\x8b\x97\xe\x93 \\'\x1\xcfH\x17\xbd\xa9\x94\xfc\x16\x19{F\x9e\xcc_^\x9d" "\xdf\xf\xa0V@\xc2\xe5q\x84\x95q\xcb\xd2\x64\x2\xb1\xeb\x1e\x80?\xcf\x42\x33\x45\x0" "{\x9bR\xb1>;\x3N\x8c\xb3\x98K\x92^\xbf\xfeq\x9e\xd4\xf3\x9f=\xe\x33\x43\x31jo\xdc" "&\xbd\xbe\xa8\x8c\x43\x66\xd3\xb2\xf8Q\xd2\xb2\x44\xcc\x44\x8%\x1a\xe2\xc7sH\xcc" "\xe9\xdd\x8b\xb9\xc8\x98\x0\xb5r\xd3\x8c]\x1c\xc3Lt\xb\xee\xbb]\xdb\n\x8b\xb2Qe_" "\xb9\x89\x84\r# ]\x16\x31\x1a\x9f\xcc\xf7\xc8_m\xff\xea\x97\x4I*Nz\x8fl\xb\xdc)t" "Z\xac*\xbf\xae\xba\x2\xb0\xe7\xae\xfe\xb9+\xa6:\xb0\xdf\x84N\xb0\x9dP\\=\xfc\x10" "X\xce\x42\xcd\xd8\x4;v9\x84\x1\xe1\xdb\x86/\xf9\xf7l\x5\xe8\xbc\x62`\xa4\x44<\xf4" "\x94\xbc\x17U\x91=Qt[\xf4Z\xdf/\x8cz\x95\x46\xd7\xefO\xb1\x1e\x9d\x94\xe4S\x96\x32" "\xc2\xa3\x96\x6\xd0\x44\x80\xee\x45\x94\x8\xd7\xa2\xa8i\x80zL\x1\x88\x1c\x1b\xb2" "\x1c)j@+^n\x7\x9=\x83<=\xff\x7_M\xd4&\xeb\x87\xb1\xb8\xde\x16\xc1\x46\xdey\xf5/Y" "C\x1S1\xee\xb8R\x80\x9c\xbb\x8e\x1d\x64`\xacM\x17o\xe9o\x8d\x19\xf6\xcc\xb2*\xbb" "\xba\xa2|D\x97\xd9\x13\x12\xc3\xcf\xb5\xbb\x91;1NC\xd2\xecj\xb6\x89{\xa7\xc3L\xf2" "\xca\xa6\xdbK\xd6\x9e\xb5\xdf\xce\xe0\xaa\x91}iP\xe3jh\xa4\xc2*`\xdc\xc6\x93y\xd4" "uD\xa5\x8d\x64\xe\xb1\r\xfe\x12\xf\xca\x84;X\x8c\xa8\xb9Oxi\xf9v\x9\xa6\xfe\x3\xac" "\x86\xec\x1f|\xea\xd2\xec\x8e\x81\x97}\x1b\x94nE\x9d\xfc\xfe\xfe\x65\xa7\xbf\xf6" "~f\xf5\xf7\x8a\x45\xd8\xdf\x65\xaf\x1\x46\xdft\xe0$\xfc\x4#(\x88l\xc1\xddwy\xf4\x9c" "\xdb\xb7P4\\\xf8<\xd6x\xa6\xa8\x89uw)\x9d\xeb\x38\xad\x66]\xc4\xf2\x1c\xe1\x89*\x18" "\xc2V\xf3\x18\x10}\xd3\xe9$\\\x1a\xd3\xbc\x93\xce\xf7\xb7\xbf\x5~3\xec\x9a?\x95\x32" "Q&\x1a\xa3\xd1\xa8\x34ra\xe7\n\x46\xf7w:\x84\xf3\xd4\xd1\xa0\xdfm\xd2*\x96\x42\x93" "I\xde\r\x18\x3\x10\xe1yU\xb1\xf\xbfS\"\xe\xf6H=\x3\xc6P\xa8\xd5\xc1mc\xda\xf6\\!" "\xad\xcdl-\xb]J\xde\xb2\xf5Rj\xac\xf7\xcf\x42\xf9\xa8\xbfH2\xfb-Os\xf3\xd5\xff\xd9" "\x84\xb5r#/\x87\xbd>Y\x13>\xd3\xd2\xfa\x19\xf7\x85j\xd8\x12Q\\t\xf7\xd8QW@\x19\xc5" "2\xc2_\x8e\x16>Y_\xc9\xc8>>\x82\xc<\xbfi\r\xa6%x\xa9\x80\xfc\x8\x3\xebm\xb9\xb1\xe9" "\xe\x32V\xbd\x46P\x81j\xbe^\xa8l\xe6\\.\xb4\x18\xd0\xad\xda_>\xa0N\x17\xaa\x8c\x45" "6\xccG\x1a\xc2\x2\x36\xe6n\xca\x36\x19\xf1\x61\xdf\xef\xa4\x85\x38l0\xeb\xb8jz\xd9" "0\xfd\n\xad\xf2\xdai\xdc\xaf&\xc0\xf6w n 0\xe3\xb1[6b\xc0\xad\x3\xdb\xc1\x63n\xbf" "\xad\x1f/,7\xf5\xfa\x98V\xb0\x19\x8c[\x1d\x80\xb6\x9c^\xff\xd9L\xe0qQ5\xc6I\xc2k" "\x9b\xa1&k\n['\xc\xd0\x8apaf\xc0\xb3 \x91\\\x87\xb2}\xe2\x1d\xeb]~H\x6\xf6\xe7\x0" "\xb7\xa0jN)\xb6)\xcb@v\x19\x83\xe9\xca\x8e\x34\xe8i\xab\xd0M\xda\x19\xb\xfeZn\xe8" "\xb2-~Q\x1b\x84\xeaXJ\x84!\x1f'\xaf\x89\x18\xdcZ\xf8\xa1\xff-6\xbk\xe3\xca\x8e\x66" "\xbaL\xd2\xcej%\xe7\xe8\x94\x6hM\xa8?\xfb\xcc\xcc\xbf\xd0\x84O\xe3\xbe\xcd}\xe6w" "d\xc5\x9c\x2-\xb1\x16\x8dX_\xe2Ps\xfe\x0\xe3\x2\x18\xd1\xdf\xe1\x15\xca\x1f\xc6\x6" "\xaf\xcb\x4\xf2\xa0\x82\xef\x91x\x8bk\xd0\x96\x84\xde\xa3\x1f \x3J\x91\xab\x9d\x97" "\x13\x66\xf9{P\x9\xfe\xfb\xf1\xef\n\xd9\x41\x65@\x81\xb1\xe8\xf0\xb2\xeaIPi\xa1\xdd" "\xf1\x1d\xc5hW\xd2\x95\x33\xdc\x85yX\xb4\x9d\x1a\x7ys(\x19\xfd\"\xe4\x37\x8K\xd9" "\xf3\xc4\xf2\xcd\xa4\xd1,\xa1\x44\x31\x93z\xb6:\x3\xf9\xc0@\xaf\x1d\x80\x1f\x36z" "\xbd\xcas\x2\xe1\x8a\x90P\xd6\x2o\xbaZZ\x7f\xad\x44\xe3\x15\x93\x17<\xdf'|\xd7\x37" "\xd1\xce\xf5\x9f\xe9hBR\xbc\r\xdd\x0\xa8\xe\x2;\x88\"$\x94\xc1\xc8\xc0\x88\x42\x30" "\xab\x11\xd1\x8\x32%\xaf\xdc\xdb\xc1\xe2MJ\xd5\xfa\xb3\x96\xd2\xe3p\xe4Juq\xb2\x30" "f\rQ\nPv\xd8\xe3_}\xb7,\x5\x66\xdf\xc1\x19\xee\x1b\x8a\xc3\xc0@iP\xa3\xc4\xa4\xda" "6\xbd\xe2\x97\x4\n'\xf7\x7S\xa8~l\xd5\x93\xdck\xe9\x96\"\x61\xa9\x9a\xe5\x94\x93" "@\xc5\xd4\\\x94\xa9\xaa=\xd6\x36\xce\x8bI{\xbb\x81#E|\x82OD:S\xb3\xeeY\\8\x98?\xe3" "\xe0}\xbd\xc6\xac\xd5\\\xae\x8b\xe1\x8\x1a\xfdHW\xa5\xf5*<\x92QCPz<7\xf1\x99,\xf7" ".\xd0\xd4\xc4\x8d\x94\xael\xad\xdc;\xc8z\xc3\xa3\xef\x3^\x2\x18\x1fxD\x9eK\x6;\x8" "5\xe8'd@QU\x1c\x16\x3\xe2\xea\xb5\x87_(\xfcw\xbe\xbai#B\x8dU!\xc6\x98\xc6\xb7\xf1" "3\xb0\xf6\x89\xf1\x5\xfd\xba\xc3\n\x8e\xd2\xf2\x9f\x2U\xdd\xf8\xa0\x37\xb8\x1f\x4" "\xed\xf0\x4\xcb\xe6\x39\xc8\xdb\xf\x94\xd0\xc5\xdb\x92\xd3Mf\xc2\xfe\xd6l\xf8\xb8" "\x95\xaf\xc4\xe6Y\xd0\x83\x88\xea\x44\xea\xe8<\xe4Y\xe5\xbe\x30gP\xa6\x82\xb6'\x80" ")\x90\x3qW3\x9b\xf1\x42\xbc\xb9\xc0\x8f\xaf\xdc \xccO" "\xc7\xca!\xe2\xc3\xf6\xc5\x46\xcdx\xde\xe3H\xf1\xa4\xc8\xcbT\x8e\xf2\xc\x4\x96x\x91" "gq\xd8:\xcc\x9b{\"xJ\xd8X\x1\x34G\x1ae\xf\xe4\xa3\x33\r\xa9\xc3~\x9e\xb4\x99\xdfZ4-\x8b\xa4" "\xc0\xa0\x33\xc3\x34|\xb2Z1\xbe\x14>\xcb\xf9\x13\x84\xf2\x38\x1e\x32>\x7f\xd3\xa8" "*1\x97\xc1\x89\x5\x32\x0\xae,\x86\xb9\xd0\x1a\xb0\xb2\x89\x84\x1e\xa7\xe9\xe9\xa2" "if\xe0\xde\xf5M\xe0\xb8]\x8d\xf0\x84\xb8\xc5\x90\x8\x1e\x44K\xaf\x1e\x1f`g\xf\xa1" "*\xb9qY1\x86$\xf2\xaf\x1b^\xc7\xdd\x83\xc1\x7:\x99\x39\x8d!C\xa5-\x10\xa1< \x1f\xb3" "V\xbc\x9e\x90\xc6;\xb0\xbc-LB\xafJ\x8b\x9c\x8cMX\xa1\xb3.\x5\x97\xc6;?\x8b>\x89;" "\xd3\xbe\x8c`#\x18\x38\xf1\xbcx\xe7:l\x8c\xdd^\x7f)\x7\xf8\x97\xfc\x8e\xe9\x9b\xff" "\xdas8\xbc\xef\xb5\xae\xf9P\xe5T\x9a\xdf\xd2\x7\xae\xb1XF\xb5\x9\xfcW\x98\x98\x83" "d$\x98\xa3\x81\x1b\x8e\\\xdei\xc0Y$\xef\xae\xc2\x32\xfaL\xef\x30.\xe3%\x13\x66\xec" "\xae\xf5}%\xcf\xa3\xb4\xa9\xe6\x39}\x99oB\x1c\x90\xb\xeb\xcfs\xb0\x38\xfe{\x16\xfd" "\n\x11r\xac/@\xd1\x9c\xe0\xb0/\xce\xb8\xbcG\xdaSD\xcb\x93<\x7f\xec\x95\x1\x84\xf7" "\x8a\xcb\x32\xd3\xe5\xe2\x90\xe8K\xe7S\xb9\xe7\xa7\xbf\xc4\x41l\xcf)\xd0#v\xc\x6" "\xcd\xde\xf2PX\x6\xa6^\x15\x8\x99\x5)$PY\xaf\xd3\x1\xdb\x66\x9d\x41\xbdr\xbfz\x80" "\xa9\xdf\x66\xb8v\xb3U?\xdfM\xd3\x8d\x15(\x9a\xf7\xa1\xaf\xbcS\xff\xff\x13ZcH\xdd" "xJ\xb4*l\rj\xa3\x30\xb0i`~-\xf3\xcb\xef\xcey\xd6\xf6>'L\x9es\xa3>\xb8RF\xd5\xeb\xb9" "\x86\xbf\xa9#\xdfh\xb2\xb8\xcf\x82\xafl3\xe7\x85\xf3[%\xb1\xd1\xd6\x14\xde\x85\xa4" "\xf4Q\n\xdf\xe4-u\xb5\xfaT\x8\xa5\x9a\xbeS\x85\x9e(\xb3\xd0\x0\xeb\x9cj}/g\xc9\x1d" "\xd1L\x89[\xa8{\x9c\xb5{\x85\x1eQ\x93\xfc\xc2\xa4\x43\xaf\x85\xfe(\xdfo9S\x7f#\xa0" "X\xbc\xf8\x1d\xd8\xc0L\xb2\xc2P@0\xfLU\x97^\x85m\xcbN!\xe2\xb5H\x1b\xdc\xc0V\x1\x94" "/\xb2[\xb8\xa6\xb6\xf9>,*3\xcdG\x8b\x44\x65VW\xc5W\xeb\xb0\x80\x17\x9e\xe5\xd9\x8c" "\\\xeb\xe0\xb2[\xfd\xd9R\xff\xeb%\x80\x14\xd7\xa5\xbcK\xcaO\x1a#\xbb\xa7\xf6\xcenwv:#\xaa\xc7}\xa8\x8c\x8e\xfa{\xbb)\x91\xe4" "r\xff u\xfb%\xa7Z\xcf\xa7\n\x4\xc2\x87\x64\xf4\xaeL\x12\x5\x1b%\xb1 \xca\xd2\xe3" "\x4M\xa3\\\x1f\x94\x13]\xbdi\xb1\r\xe1G2\x1c\xbb\xdc\x81L\xe9\x99\x82\xac\x1dv\xce" "=30\xe4\x1a\xb3\x1f\xfb" "S\x5\xf4\x9c\xb8\xc7\xbc\x45\x13!\xad\xd7\xd8\x96\x39]&\x9d\xcd\xfd\xd0\x84\xeb:" "\xa7\x3\x38l\x6\x97\xe9\x62\x92\x96Q\x16\x41\x35\xc0\x94\xd9\xbb\x1c\x9b\x94\x9d" "^\xeb\xd3\xbb\x17\xf0,\x98\xc8\x13\xcc\xbf\xb2<,&!\x8a/Lc\x9a\x8b\x9d\xff,)@`7\xf9" "\x19\x38\xa5\xe1\"s\x10r\x84(\xb5oH\x10\x8c\xde\xb3;\xd3\x19\x1e\xca\x89\xf9G'\x19" "\x83\xdbwk+\xc8\x97\xa3\xe\xec\xf2`\x1e\xe3\xb2\xa6\xf0\xe1\x35\x39v\"\xaa\xc1\xf2" "\xdfR<\xe6\xe6\xbcr\xe\x13\xcbS\xc\xefJ\xb9\xc8';\xd3\xd8\x15\x63\xac\x8a\x8elD\xa1" "\x95\x11-\xaf\x82K\xc7\xa7/\xcd\xc4\xe1)\xa4\x80q{\xeb\x1\x8]\xee\x65\xee\x43\x44" "\xd0\xb4\x1e\xc0\xbc\xdf\x84%\x66\xb1\xd9\xf5\x35;\x1fj\x6?\xfal\xdb\x6\xef\x63L" "\x8b\xd5\xa7\xa6?\x99\x1d\x17\x8fV\xea\xca\x65=\xd6v\x85\xceI\xe9\x8cuTtZJ\xc5\x33" "!vb\xd2>\x1di7\x13]\x13\xbc\"\x8\xeb\x8dPV\n+\xaa\xc3\x19\xdf\xaeG\x8bk\xa4\xca^" "\xda \"/\xe\x9b\xdb\x8\x6\x32\xe\xd1\x66[T\xa3G\xde\xc\x42\xe9\xf7xB\xdeM\x18\x8e" "~\x82N\xb2\xf0\xd7\xad\x16?\x5H\n\x7f\xa9\x9cZ`;\xbc]\xbc\x84\x37t\xca\x66\xe8\x89" "\xb9\x45\x5L\xe\xd0\xb1\xa4\xbb\x14\x32N\xf9\x1\xb0#\xc2\x8\xcb\x95\xdf\xce\x92\x84" "\x89x\x96\x90\xcc\x45\xba\xb9{\xe4I\xf8\xe2\xf5\xaa\x92v\xc0W\x13\x3\xe9x\x8c\x46" "\xe7\xf7\x89U[\xfc\xdc?\xa9\xed\x8d\xa8\xad\x9b\xa4\x8b:\xe0\x94\x4\x66\x43\x91\xe6" ":\x98\x9e\xf1\xe2K\xb4\x64\x4:\xa0\x99\xe4\xf2\xd7\x96\xe3R\xeb'q\x6\xd8\xd8\x1b" "\xaf/\x85\x62\xef\x46\xbc\xfd\x1e\x0G\xe8\x1\x8c\xbd\x97\x30!\xdc\x1c\x1d\x82\x1a" "\xf0?\x8?\xb\x8\x8a\x62\xeb\xcf+\xf6\xc5\xb0\xfc\xfa\x44\x1a\xad\x16%\xfd\xb8\x34" "\xf9\x43\xddG\xa5\xa4.\xb3\xe9\xa5\xb4\x96\x41\xf7\x97\xc2\x88\xb7\x99\xa6H\x97\xf1" "4`pF\x1bmS^\xcN\xd0\x99\x19\x9c\x38z1v\xae\xdc}\xa7\xe7\xd9\xe1\x18\xe5Ue\x9*6\xf7" "\xc7J\xbf(\x17 \xc0\x14\x7fNO7\xd4\x94\x36\x46la\xff\x12vN0C\xd8\xa6\xd0'\xe7\x5" "7\x16O\xeyB\xf4\xac\xa4+\xb2\xcb\x13\x61w\xefq\x97\xe7oI\xab@?t\x1c\xe\xf9\x2\xfe" "\xbcG\x1a\xd6\xc6'BC \xa8\xc3\xa1\xf0L1\xcQ\x1b?\x91\xc3\x93}\x9a\xcf\x45\x99\x99" "\xc1\x8a\x33\xf2\xc8R\xec\x38\xca\x80\x65\x99\xc7(\xc5\x43q@\x18\xc6^,_C\xf\x62p" "\xafR\xadq\xed\x38\x81;`D\x7yE_\x95)\xa4\xa1\x62<\xb9\xf5\x42+\x92\x16\xf9\xcd\xba" "\x91;\x9a\x1c\xd9]\xa2%\xe2T\xe8\x10\x12\x16\x8P f\x5\x9\xd0:\x3K]~2\xe3\xdb^Yb\xa9" "\xa2w\x11\xd4\xc3\xe2\x9c\xd8@W\xf7\xd0\xd7\xe8\x0\x9G\xaf\xe8\x96\xf8R2S9\x1d.\x11" "\xff\xfeR3f\xb0\\S-V)\xa9\x7\x41\xea\xb3\xd4\xa7\x31\xd3\xf6\xd4\xf0?\xf9\x32\x33" "\xdd\xf8\x8b\xb1\x91:\xba\"\xeb\x9a\xa6\x31\x1e\x31\x44\x38\x1d\xae)\xbc\xc8\x63" "\x99X\xee\xe5\x9a\xcc\xfa\x6\xf3]\xcc\xc6>\x6\x9\xf5\x42\xf3\xee]\xfb\x1c\xf7\x18" "\xca?2\x84Uro\x8f\x65\xe2:\xcd\x97\xe@I\"Y\x98\x37\x1b\x63\xe3Z\xe9\x8d\xc5M\x83" ")\xb8\xdb\x9\x1\xfa\xa6\x31)\xed\xe2\x1b\x15\x87v\x98\x1dM\x9@\x13\xc0\x96\xe9\xcd" "\x2\x3\x15\xd1#\xc0=\xeb\xa2\x1e\x97\xe4\xb5\x84\xb4\xbc\n\xf2_]\xceS\xc2\xdc\xf" ">a\xf9\x9b\xec\xab@y\x94x\xbe\x7fZ\xfd\x7fh\xe2>\xf5\n\xd6\x64\\\x96~\xe1\x12\x6" "\xb6\xe7\x91v\x94(\xac\xdc\x37\r\x64\xe4\xf2\xb3\x97.\xeOD\"\x97\x19\x93Pf=nw/\xc6" "wz\x9b\x9d\xe2\x15'=\x8,\xceN\x86x\xfe\x99H\xdc\x8d[\xe\x45\x9c\xd0/\x16\x45\xac" "V \xf3W\x1a@\xb4\xd5\xa1}\xf5\xcf\xf4\x8bl\x84=\xde\xab^\xbfX\xfe\x13\xd7\xda\x8" "\xe8\xaay\x2\x11\x92H\xb3\xb1Q\xdaX1\x1\xcf\x80\x85;\x1P\xfe\x5\xbd\xed\xbf\xb5\n" "\x7f\xb0\xf6W(\xc9;\x9d\xf4\x8c\xe8\xaf\x1d\xf1\xfa\xc2\\\x1dX\xe1\xad\x30'J\x0\xeb" "T\xcf/\x16\x2\x9e\x1a\xc0\xa0\x91\x9c\x6UGK\x9ai6\xae\xe0\xfbt\xbd\x18_\xe7\xd7\xb" "\xb8G\x86\x99}4\xa4\x3&\xa7\x43V\xa4\xaf\xae\xe6{k&\xd1\xc1\xa7\xbc\xff\x86\x97\xb5" "\\\x81l\xcdw1,3*U1]\xc5O\x9b\xc0\xa0\xf1%\x0\xe0\xa7k96)*=\xa2\xdd\xf5\xaa\x8c\xbb" "\x9b]\xc3.\xda\xccH'\xd6\x84\xd2t\xe6[\x8bv\xfb,+\x19\xf7\xd5`u#\xfa\x95>4\xbb\x39" "\x3,\x5\xb1\xc1$C\x4`lUf\r<\xa8`~vN\xa5\xb0=\xb7\xfc\xab\\\xf7x\x8cn`\xec\x8c\x44" "\x9b\xca\xfd\x90\xbc\xab\xa4\x13+l\xbc\xcf\xf1g\x84\xfbY\xb3kw\xcf\n\x9e\xa5r\xe4" "\xca\n\x1\xc7%\xa6\xcf.E\x0\xcd\xdf[\xac\xcb\x90\x94\xd4\x89%\x43O\x4\x41\x18\xcf" "\xdc&\x96\xaf_\xc0\xca\xb3\x88\x41\x7\xed\x17\xb9\xbd\xe0\xc0\x10K\x12\x92\xa1\xf8" "\xc9\x9b\x6\xfcJc`\xb2\x44\x80\xbdY\xdf\x4\x88\x64\x18\x99\xb0\xf4+\x13\x11\xb5\x82" "q{\xa7\xec\xfe\xe1\x41\x43\x65KSq\xc8\xb9\xb2\xd8\x6\x85\xad\x38\xd8\x97\xad\x1e" "d\x87\\(\xc7\x2\n\x84\xfb\xb3\xa3\xbb\xee\x16\x61}\xcb\x9b\xc8\"\xb7\xc5\x9cZ\x18" "\xc0\xcf~\x80\x16:\xdf\xb7\xaa\x3\xb7\xcd\xe8I|\x16\x97\xd9\xf.\xd9\xf\x81\x30\x95" "\xc5\xb9\x16W\xfc)N\xf0\xe3\x41\xdb\x33\x92\xed\x86\xc\xb2\xe0\xaa\x9)=\xf\x99\xae" "\x9e\xb5Lv\x1c\xa2\xdb\x1eQ\xe1\xce\xae\xab'l{\xd9\x16\xc6\x85\x10\xd7-\x9agF\x8b" "\x9\xb3\xc3\x9ax\x15\x62\x8f\xb1&\xcd\xfd^\xffY\xcc\x81\x84\xc0\xd3Z[Y`\xf8$\xbd" "\x17T\x95\xdd>\xb1*N\x96\x0\x8c\xb1;\x8cWE0>f\xcf\x86\x8\xff'\xc4p\x9c\x1d\x85N\xb7" "\x96\x8\xe5/\x6\x8f\xec\x1Q\xa7L\x12^\xde\xae\xa5U\xc1\x98\xfc\x8\x2{\xbb\xb8\x2" "\x83^\x1d\x43Pw\xaeK\x1c\xcd\xbfr#T\xf6\xc5r\xbe\xb1\x37m>4!\x95\xfa\x80\xac\x97" "\"\xeb/F\xe4M\xe0_Z\"{s\x1b\x8dJKn\xde\xf0J\xf2\xc5\xde\xc2\xee\xf8\xffH\xc5\xb1" "\x87\x10\xad\xe3\xdb\xfa\xc\x95\x65\x5\xb6\xda\x9c\xcb|\xbb\x83M\xb6\xccuIH\x85]" "\x83\x36p\xff\n\xc4*Gs\xfe\xa8\x32+\xec\xee\x4\xcat\xac-f\x85Q2\xd1\x1aQRD\x88\xc5" "Gq\xb5\xb7\xa5\x12ym}z\xe0\xf9\xc1\xfb\xc9\xcb\xdb\xa0\x83\x10t\xf4\xd2\x0\x34\x9d" "\xc\xa4\x5\x37\xb9$\x96i'f\xf0 \xac\x43\xac\x1\xdb\x8b*\xa2\xef\xa9\xd2\x17\x32\xbe" ":1_l\xaa@+\xb2\xe6\x1d@\xdd\xeb\xde\x11'm\x90\xc2\xc6\x1\xa9\x35\xc1h\xbe`\x4\x64" "v\xad\xed\x15\x8}T\xa1Lh\xee\xcb\xbb\xb5\x90\x92|\x1e\x10\xd2\x91\xc9(S4\xcb\xc\x80" "\xed\xbd\x39+\xdeMS^\xb6\x1f\x8evA\xf5\x8a\xc1\xdf[\x1cZ]\x91\xe3\xe2~\x5\xca\xf7" "\xec\x97\xec\xf0\xc8[d%\x19z\xa8VR\x1e\xd7\x1\xe5\xae\xb8*\x7fR\xa8\xbd}\xc9}[?\xb5" "\xc9\x9a]\xf8M\x1b\xaf\xf8\x90r\x92%\x9\xd7k\xc6\xed\xb1\\\xe5\xf9\xeb\x8f\x41T\xbe" "\xe1\xe8 $\x2\x83\xbd\xc8:\x8eI\xaa\x9a&I\xb7\x95]\\\x5\x8f(\x18\xa6;\xd0\xbf\xe7" "\xea\xce\xd4\xa4\x90\x63\xc4\x89\xa6&'z\xe1$or\x1c\x99&\xe2\xa2\xb6\xc3\x10\x45\xfb" "\xcd#_<\xc5\x8b\xc4\xddlW\xfe\x99\x8e\xbd\x1e\x9f\xa5\x15\x46R\xbe:\x16\x85\xbc\xd2" "\xef\xaa\x7\x9a\x32\x93\xf7\x81\x42\xa6G8\"\xfa\xb6'\x92~\xac\xcd\x61\xb3\xe9\x9c" "0w\x10=-\x19\x38+\xc7\xee\x15\xba\xd0\xfd\xe4\x89`-\x5Z\x1\xdb\xbc\xf9\x1aVitU\x9d" "\x1bG| \x94\x16\x88pS\x16\x9c?\x8fY\x95[\xe4\xde\x82\xb6\x5X\xcc\x9a\xe1V\x2\xa9" "?\x2\x9fkC)\xe0\xe6*\x3\x98-\xb3/R)qN\xfa\x14\x91\xa7\xb2J\xef\xe1\x8f\xeb\xc2\xc9" "=\xfeP\xb3\xf6\x41\xb5\x1b\xdd\x33\xda\x38\x87\x1b\xf5$<\x17P-\x0\xae\xa2\xd9\xe9" "sN\x80\xa9g\x88\xd4\xcf[\xc1*B\xbc\x38\x61\x62\xfc\x88\xa7\x43^\xe1\x32\x0\xc1\xc2" "\xc6\xcc\xc5\xd2\x1a\x3\x94\x10\x7\xb4\xc4)\x1b\xdbq\x14\x46\xce\xaf'\x14\x81\x4" "\xbb$\x3W\xd5\xed\xa0\xeaZ\\\xe2}J\x83\x90\x9du\xbf\xc0]u\xf1\n\xa7Jm\xe3}}\xe1\\" "\x1d\xda:\xc3\x4]\xa6\xcdH2=\x90NqkD^^\x9o\xcb\x37\x93S\xedp\xcfKo\xac\x10,v'\x11" "\x7\x9e\xfa\xf1?\xb7L\x9bG\xafu\xf3\xf6\xbd\xa2\xa4\x64}*\xb4~\xca\xb6M\xa6\xcc\x1" "G\x9f\x61\x8e\x8d-\n6ED^\x87\x44h<\xbb\xc5`\xd4|\x98\x7\x8b\x84 n\x90\xeb\x83\x9b" "\x2\xd3|\x85+\x8e(Dc\xd4\xe4\xd8\x90 <=[ 5!\x10\x3N\xadk\xd7\xf4\x14V\xb8\x7\xe1" "\xdb\x16\x31\xa9\xd4\x99\xe5.\x9d\x98S\xd8g(\xb1\xa2\xe5\x11\xf4\xf\x8c\xa1\xe4r" "J\r\x17\xec\xd6@\xb5/\xf6\xc6n(i=\x89v_\xc3\x91\x61.X\x89\xe7t#\xec\x85\xcb\xd0\xa0" "8\xb6\xba\x98\xb6\x7p\x1d\xc0\xc4\xb6k;(\xc7y\n\x1f\x1e\xb8\xd0Q\xdc\x98'm\xd9\xcf" "\xef\xab?e\xc1\xc9(\xe4\x8a\x6\xc\x99+9*C\xe5n\xaam\xed\x89m\xeb\xceq\xf8$[\xe4h" "\x7f/\x1b\x8f\xc0\xf4>\xce\x8d\xb0\xbd\n\xb0\x81\x1c\\\xe7<\xbe\x33`#\xa0\xd6\x61" "h\xb3J\x95\xb4\xb0\xa7P\xb3\xbf\x1d\x19~<\x4,y\x14\xfas\x1dx1\xafy\x8e\x94)W\x1c" "\xbb\x97~bX$N\x84p\x1e_\xf9\x1d`\x8f\x98\xfc=h\xa4\xee[\x81\xd5\xff\x38\xb6\xc1\x84" "\xf6\x11\x8b\x87_\x2+L\xe2\x7\xdc{7\xe1\x45-\xfd\xc5\x91\xa3\xe5\x6\xae\x82\xc7\xe7" "\xbf\xf0\x1\x1b\n=\xbd\x61j\x99?\xbf\x87\x8f\xb0;l\x9f U\xa2\xb0\x95\xd2\x93\x61" "\xf8%<&#e6\x87\xfe\n\xb9\x80x\xf6\xae\xe5\xfc,+\xde\x4\x5\xea\xbe\xdb:3\xeb\x7f\x4" "\xcbh7\x17\x62\x45\xf1\x90\xc6\xbb\xbc\xd6\x45\"\xb1/\xe7\xf9\xcd\xcf \x1a\x1a\xa8" "\xa1\x9a{\xbcJ\xc0\x64\xb4\x95\x8f\x44\xaa\xf\x8d\xda#\x83Z\xd2\x8a\x1f\xd0\xea\x10" "]\xe2\xf3\x95\x38]\xcc\xfb\xe2&\x1d\xc5\xa8\x9a#\xaf`j9\x85\xe5\x3\x87\x6\xb1\xfe" "\x9\x10@\xe\x16\xbf\x0\x8f%\xf;\xde:\xd8\x6\xc7\x35I]I\x9f\x16\xf9\x92u\x1\x4x\xfd" "!'\xbf|\xed\xd6\xb5\xbdP_\xbe\x9b\xd0\x6[Jp\x90\xc9\xd2|\xd5\xb3l:\xd3>\x1b\x31\xeb" "mD\xe3u\x0;Q\xb9\x9\xdaP\xbd\x18!\x84\x18\xb3\xcd\"\xb4\x32x\xb1\x44\xbex@n\xaf\x16" "\xc7\xdfkl\x1c\x62\x38\x0J\xabssk8\xe1hD\x1d\xc1o\x9a\\\xf6\x7\x93\xa1\x86\x33\xbc" "C\xd7\x86t\xd1-8\xcc\x97\x9f|\xaa\xdan\xfe\x80|\xeaI\x9c\xb9\xfe\x61\x64\x96h*f\xe0" "K\xbd\xac\xe1\xdc\x11+!V\xb9\xb0\xb2\nX\xa8\xcb\x43\xff\xe\xed\xb9\x98\x5#K\x9aW" "\x89v*\xc7\xd6_Z1\x9c\x33\xf4\xf7\x43\x8c\xd1^\x6\xbb\x80\xa7\xa9~\x97n\x8c\xec#" "\xf4\xc6\x46\xa5\x82\x18\x80\xa8+/\x1d\xc2wg\xf0\x90\x99~\x91H\x8b\xfa\x15\x6Kp/" "\x86O\xce\x65\x5\xd6\xce\xf8}*\n\x12\xb5[\xa1\x89\xaf&\x98\x11\xe3\xb8\xb8P\xc8@" "\x1f\x39\x6\xc0\x80\xd3&\x18\xd9i\x8avg2\xa4\n\x9f\xc5\xa9N[\xdd\xa3\xd0(\xd8#\xd6" "\xb6\x3\xb6\xd1}\xd0\x46\xde\x18\x1f\xd9\x89\xea\xf\x80\xb4\xca\x62\xf7\x97>M\xf5" "\xe0\x32\xa3\x1f\xe6\xbc\x8f\\\xdag\x8dJrx~\xb8%>\xa5\x88,3|\xdf\x9a\xa3\xe1\xe7" "\xd9Sm\xd0\x9b\x4|\xd8\x96.w?r\xf6\x41\x8a:\xefZ(\x9b\x34\x6\xc1R\xa5\xc\xe7\xbd" "KI?\xff\xc2\x7fj\xa5/y\xeag\xe3\x62\xfd\x92U\x9a\xa4\xf9J/x\x7fls]\xfa\xdc\xf2\xf0" "\x8a\xaf\x98\xb8\xcS\xcaV\x7\xa9O%\xf0J\xa6Zp\xa7Y7\x84\xes\x5[=e\xfb\x5Lc\xe2\xe4" "\x8ehH\x8c\x93\x15\xa1>\xe9I\xe0>Fr<\x11\xccu\x9d\",\xbf\xad.\x1a\x87\xca\xd7y\xb2" "=8\xf7\xe2\xf6`\xde\x13\x88\xea\xf1\xcfM\x18\x99Mu\xc6\xcc\x63\xf1\x87\xfd\xb9I\x94" "\xc\x18\xb5\x37\xa0\xaf\xb1*\xc5\xf6{\x2\x83\xca^\xfe.vLCi\x10K\x9d;\x6I\r\x12\x44" "\xc4\x1d`\x85\xc8_\x11\x6\x8.\xc9\xdb\x84Xb0Q\x1c\x5\xc8$\x12\xd2\xcd\xf3\xda\xfb" "\xf4u\x9awV(\x87\x8f\x99t\x15)k\xc4\x16\xac\x83R\xa6\xc6\x98\x86\x91\xfc\xb8\x31" "\xcf\x95\xc1\xb\xaei\x1a\xdb;\xa2\x91\x8b\x35\x92K\xd5\xc3\xac\xad\x8b\x13s\x97\xb1" "\n\xf8+G\x98\x0\xfe\x16\xd4r\xcd\xc\xdb\xda\xabO\x88*\x6I\xcfV\x10\x4\xb8\xcb|\xa3" ".\xc1)\xd0\xa4\x15\xbel\xb9\x1d\xa2\xb6_D\xe8\r\x13\x88\x8\xa1'\xe8Q\xa7\xfc\xf9" "'\xe9\x9d\xaa\xe\xa2\xd6&\xb7z\x16\xc7.7\xf0X\xa3\xb8\x82\xfcIU\xdc\x8c\xb6\x31$" "4\xbd;\xce\xd7W\x80\xb1\x35\x90\xbfO\xe8\xd6J\xcf\x3q\xf9\xfb\x1d\x36\x1b\x5\x2X" "R\xaa\xb9\xed\xa1\xa0\xc9\x97\xcf\xa5\x80R\xc4T\xfd\x45\x1el\x1f\x19OM61\x14\xe3" "\x12\xf6\xdc\x35\xbb\xaf\x35z2\xcd \n=\xd9\x65\x41U\x13\x42Y\x88}gz\xcc\x44\xf8\x9a" "\xa4\x1\xca'(-\xf7\xdc?/\x4\xa1\x8\xcb\xef%X\xdc\xce(\xba\xc2\xd8{\x8d[q\x81\xea" "\x92\x7f\x61\x97wd\xf8\x82\x62mJ\xb3\x38\xd9\\\x94w\xc5N\x9c\x36\x1*<\xff\xbe\x19" "\x9e\xc8\x12\n\x99\xd2\xd7\n!\xf9\xd9\xa0\x35NN\xacyG\x99\xe\x8an\x6\x1yj\xafo\x14" "\xe7X\xca\xbc\xab\xdf\xbd\x82\x4\xa8\xe7H\xa3\xe5\xfe\xbaW\r6\xe2\xbfGL\x0\x83\"" "\x9a\x63\xf9\x61\x14\x18#!\xb2\xeb\xe1\xbcv\xdd\x19\x37$\xc4X\x8c\x1d\x39\xd1\x84" "\xc3\x32\xfa\xea\xf4\xc6)\xf2\xb3\xb2\xf4\x99\x96\xe4j\xa6\xc9\xf4\x97\x42\x8b\xea" "R\xd5\x88v\xb0\xdc\x7\xb4`$\x8b\xc8\\\xc1gs\xa5\xda\xc3l\xde\x8b\x15-\x96\x5\x7f" "N\xfa\xaf\x8b\x1d\xc1\x0\"\x3\x85w6\x80Wi\x9b:7\x17\x8a\x9f\x1fll\xc6\xb\xae\x82" "\xbz\xdd\x7\x17\x91\x1b\xd2:m\xcd\xad\xaf\xa3$sI\x1a\xa8\xc\xfe\x90\xf2\xa7~$\xce" "(&\xffw\xb1\x8b\x86\x9c\x33\xfa)/\xe0\x1d\x64wvPD\xc7\xd1JT\x8b(\xb1\x36\x1%\xc6" "\x93?\x5\xc5\x8b\x8\x89\x39\x5\x37\xcd\xd1o\x8e\x96~\xb\x38W\x94I\xdf\xc1\xe0s\x89" "\xb7\x6\x9a\xa8YLQ\x3\x46]PA\xcc\x92\x92h\xde\x86?\xad\xb6\x92[5\n\xa9J'\xd4!\xfb" "\x7f\xcc\x81\xc6\xb3_\x90o\x12$kzQ@Q\x1a\x97!\x1b\xa9\xbdh1\xa5\x8\xe9\x63\xfe\x8b" "\xe9\x61\x33/Ux\x8H\x8f\x6\xea\xd7^\x86\xd6\r\xe3\xfa$%\xae\x84\x39\xec\xb9\x11+" "\xc3\xe4\xd7\x37G\xc1\xc8\xe8zd\x99\x19\x82pI\x83-\xb0\xbfm\xa8\xc8\\\x9a%\x92\xac" "\x0(\x9\x7\x9\x0\xec\xadR\xa5o\x1b\xfd\x45j\xfe\x6\x65\x9iN\xac\x7W\x88\x45k\xb\xb" "\xdd|\x19-2\x1e\x9f\xb6\xaa\xdc\xae\xf0\xfW\xf\"\xcdJS\"\xfb\xce\x8f\xa9\x8f\xae" "\xb6\x81\x94\x8\x95\x42\x62p\xbb\x43\x19\xc1\x1d\xa6}\x88U*ss9\x8a\xec]\xa7\xc9\xca" "\xa9\xf3\xb3\x45\x81\xc6\xe9h\xda\xaa\xb2u\x1c\xc0\x12\x19\x9d\xd8\x97\xb4H\x98l" "\xff\xba\xe4\xd4\x12\xbf\x9e\xcb\xf4gBqZ\x95i\x93%\x16%\x9d;:T1\xcdp(\xe4/\xc7Q\xc4" "4\xe2\xb7\x14\xc7\x18 +\xf0,\xaf\x9b\x8a u\xde\x92#\"\xea|\xfa`\\\x83v\xfa\x95\x8b" "\x8f\xbe\x43\x3\x1e\x10&\xfb\xe6\x12j7u\xf6\x43\xeag\xeb\xbd\x97\xf2\x39\xfb\xc7\x1c\xab\xf\x89\xe3M`\xc6" "\x9b'/\xad\xc2.\x8e{\xdc\x62\x10\xdb\x9\xfd\xd9\x13\xe2\x9\xf4\x9f\xd2\x8e\x87\x12" "\xb8P\x89\x4\x62\x2Ptl\xa3\xb2\x1b\x2n\xda\xe6\n(\"\xf5\x9e\x91.bk\x93\xe0\xd2\xbf" "\xb3#\r\xfd\xeT\xe9\x1a\x1d\xba%\xa6\x9\xb6MA\xab\xd8\x97\xa5\xd2\x17\x64\xc3Q\xe8" "_\x9e\x87\xbe\xab\x9e\x64QI\xad\x32\xae\xeb\xb3\xb1\x16\x10\x32\xc7\x1\x64q\x15\xf9" "\x8c\x1c*\xae\xce\x87\x18\x62\xd9\x1d\x32\x1a\xb9\xf>\x92;\x1f\xde\xe0\r\x92\x7f" "\x89z\xa9\x81#se6\xe2\xe0p\xf\x10\x5=~lX\x9b\xf6`)\xd7\x94\x88>\xaeL\x82(\x94\x1c" "\xe9\x65\x65\xb5\rH\x88{S\x14\xa2\xe5SyYc\x82\"\xa6\xcaT\xc7|\xba\xbd\x46\r\xac\x11" "\xb0\x63Q\x9a\xe4\xf5\r\x93\xde\x41v;\xa7\xcf\xbfLw$6\xeu\x4x\xeb\x62\x89!\xda\xa0" "e\x85\x83\x41\x95\x8eO>\xb5\x96lm\xd7|\x5\xee\xec\xdfK_l\xf1\x9a\xb5\x7X\x9b\x42" "\x19\x37yY\xbd%\x8e\xc9!\xc3O\xe1\xdb\x0?}\xf\xea>/\xd6\xf5\xdd\xb0\xa2\xd6,\xa5" "\xa2\xcdj/\x9d\xbf\x9f?4\xa0\x85" "\xf4/\xe6:\xcd\x93\x1c\xd8\x46\xb5}0\xdb\xe2\xd6\xb4\xb4+\xa7\xb3\x84\x12\x4\xcf" "\x18Z\xae\xeay{\r\x16\xdf\x1d`\x6\xb\xeb\xe8?\xbd\xd4\x93\x1a\xf1\x82{D\x9b\xef." "\xab\x88y\xeb\xef\xe5Y\x1 \xef\xfb\x8fx;\xe0\xe`/\xa7nS\xeeN \xe9\xa5Q\x89\xbe\xe4" "\xe\xcb\x84-88\xdc\xc5O\xbft#\"\x9a\xd6\x8b\x98\xe0\x33\x81;\x1a>F\xfJ\x9b\xae\xa1" "\x87`\xd0]\x85\x98K\xb>\x16\x1f\x13\r\x92\xab\x90\xa1\xf4t\x16\xb3\xf2\x1dw\x97\xd2" "\x84\x42+\xbf?\x18[\xff+-\xe1&\x4m\x9\xb\xe4O\x9a]\x8el\x80\r\xef\xd3\xa5\x39\x44" "\xff\xf1uf\xaa\xb6\x9c\x8f^X\xcd~&\xc1\x5\xbb,\xa8\xac\x7\xb6\xff\x10\x43u\xa9\x8e" "#\xe4\xef_7\x3\x11\xee\xaa\x19T\x16\x9c\xde\xc1\xa8#\xb5\x1f\x1d\xa9>P\xa6\xc0\x32" "c\xf\xe\xd2\xf0\x10\x98$\xf7\xae\xb6\xb3\x85\xe\xc9\xd1\xc2\xa9\xbe\xe7\xdb\xd8\xc7" "\x87\xf7\x8a\x94\x2\xf9l\x7f\xd7V\xf9\xc6\x31Q\xca\xft+\x8a\x1e\xe5\r\x12~\xa8`\\" "\x1c\x1f\xe1\x94\x83\x32\x18\xe9\x1e\x6&\x1c\xbf\x15N|\xe4\xce\xcb\xb9\x41\xd7\x65" "\x9fm\xa4\xbd\x99\x8d\xf9\xfd\x18Nol\xb0X<\x8b\xa1\x8a}&\xc9\xe8\xcd\xa7\xf7\x97" "\x84\xf0S$6\x84i7\x0\xa4\x82\xa8\xf2\x18,\x91\x42\x11O%S<\xbf\x9b\xa2\xb4=\x83:\xa0" "\xfc\x1dz\x95\xee\x86\xcd\xb1\x99!\xb4\xe2{H~.5<\x8b\x94+\xfd\xcd\x6\x97K\x81\x15" "\xfa )\x1f%q\xfa\x63UQ\x10\xb9\xfd\x8e\xe1\xbc\x94g\xeb\xdc\xd4\x14[7,\xca\xd7\xe9" "\xf9\x34`D\x9f$3\x1a`0)L\x17+\xc9\x18\xb1&bq\xe8\xc3\x9eR\x85\r\x83\xd2\xa7\x8d\x8f" "\xd2\x63m>\xb9'ru\xf1\x44\x98$_\xdf&-T\xab\"\xc9\x19\x87m:\xb4\x7\xf0\x7f\xec\x8e" "#\xd2\x8a\xcb-=A7W\xedO\xba\xf2\xd0=\xba\xae\xe7\x3\x45\xf6&r\xa2\x38X\x9a\x3\xb2" "\x8b\x3\xa3\xa1\xabk;\x97\r(\xd2\xf7G\xfa\xcb\x7\xbe\xf7\xe8\xcb\xc0\xa8G\x89\x8f" "\x0\xe6\xa2s \xcfQ\xdb.\x14\x39\x35\xf1n,m\xa9\xd1\xebT\x81\xf6\xe7XR\xc3\xbc|\xbd" "\xbb\xde\xb5\xb2z)\x9e\x1a@\x3\xb0\x89\x65j\x96\xde&\xfbT\xd3\xfd\xe4\xb\x8d\xd6" "M\x1\xe3\x30\xda)Hku(\x90\xa2\xe0\x80/\xc8q\xca\x86\xcb\x8e\xb4\x3zr\xfesP\xe8\xa8" "{\xdc\xae\xaf\x18#3\xa6\xbb\x92\x9b} +\xd5\xe4\xd1\xac\x9e\xd6\x9d\x15\xf8\x16\xe3" "\x9d\x45\x8\x9d\xbd\x9e\xd2\x34\x3\x2\xf6\x39Im`\x18\x1c\x0\xc3\xc8@\x17\x15\x85" "\xc3M\x97\x91\xfc\xf0@\xf1(Xt6~\x12[\xe5\x82\x8\x8c\x1\xdc\xf7swP9#}\xa5\x33\xe6" "y\xfe}\xfb\x9br!\xb0O-i\xad\xd1\x9e\xcf\xda\xb\x94\xbfS\xdc\x38\x9f\xd0\x66n\x7f" "\xc2\x92\x38\x39\x95Q\x8f\xb7\x81s$\x8d\x9e\xe7\xf0\xfey\xca\x89\xad\x1J\x19\x16" "\xda&z\xee<\xe7\x1\x5[\xc8\x8cL\xc0\x5=\x8d~\x9\xca\x7*\x4\xf1[\x18q\xa3\xc1\x11" ";)\xdf\x7f\xa0\xc1\xa6\x8\x8d\xdbk/\x97\xe0=\x82\x9fm\xe8\xfb\x1cQ\xd4\xe3\x44\x87" "0\xfc\x94\xaf]b\xb6\x9e*\xfb\x84:\xe2\xa8\xb1-PF\xe7\xbf\xe9\xfb\xfc$\x4\xbc\x62" "2\xe3R\xb2Z\x12\x8e\x8aP\x1do\xec\xf0%q\x9e\x1e\x1a\xd7\x89\xb@\xff\xff\xb0\x6\xdc" "\xd4*e@-\xf3}\x8b+\x91\xcc\xff\x1b\xed\x30\xb8\xe1\x92\xb5\xf2\xf5=&:\xde\x7\x98" "\xf2\xfc\x94\xd1\x96\x93sK\x16\xab\x45\xae\r\x0\r\xee\x66+ \x9d\xb9%\xadT\xaf\xc3" "\xb5?\x15%\xa4\xbb\xb1.\xa7\xec\xd7\x12\xb1\xa4\x2\x97\x42\x98Z-W\"7b\xd6\xd8\x36" "\x88\x45u\x15\xd9\xc\xa3\xff\xe2\x1d\x90\x99\x97\x9eN\xbcy\xbf\xacp\x8d\xa0\xad\xc4" " \xc6v\xadYq(\x8a\xaf+\x8d\xacJtq\\\xfcv\xb1\xe6\xd5%\x1\xe0\xf7v\xb6PeE\x8e\x63" "\xe1m\xc2\xc6\xd6\xce\x18\xad\xc8\xba\x94\x13\r*\x90x\n\x12|\x9b=\x87\x8e\x94&\xce" "\x14\x96\x7f\x8e\x65\xe4\xbf\xd9\xf4u\x82\xef,7\xc3\x61\xc1\x0\x8d\xb7\xfe$Zm\xd6" "\xc5\xbf\x8a\x84\xcc\xca\x5\xcd\x96\xcd\x1a\xea\xe0r\xc0\x98V\xb3\x36V>fA[r}X\xd6" ".\x9d\xcbs\x82\xc2\x1b\xc7\xe4P<04l\xe2\xbc\xf4\xba\xa2\xc8{p\xf1\xa7\x13\xea&\xfd" "w\x93\xb1\x14\xe3\xb7q\x4\xd5\xf1\xc5\xee\x8c(+\xc0\x1eY\x1c\x6\x89s\xf8S\xc5x\x81" "\x19\xd0\xcfS\xae!<\x17p\xab\xdb\x1c\xf3\xfb\xf8\n>w\xf7\xdbY\xf9\x30.\xa5[\xbb\x16" "\xe9\xf7u\xd0O2B\xca\xd8\x8e*\x1c\xec\xe8\x7\xdbY\xda\xec|\xf7\xe8\x9c\xcc\xf7\x36" "\xe\xc6\x11\xde\xcc\xfdPC\x1dg\xfb\xe3\xe\x80\x84:\xb2\x8c\xc0\xe3\xe9\xe1\x37L$" "\xc1UgE>\x8e\x92\x8es\x5\xfe\x9e\xea\xb4\xe3\xc8\xb1\xbd\x92\x14\xb\xb0\xd4\xd4\xf" "\x80\xbc\xe7\x63\xc2[\xb9\xf\x35\xa6\xe9\x7u\x9eWL~\x9d\x34*,x\xb1\xb7\x8bh\xcd\x93" "\x1\x7^j\xa6X:N\x18R\x8b\xf0\x66\xbc\x84\x37R\x10\xa9s\xdd\x1a`\xa6\x93\xb4^\xff" "lQ\xff\x89\x9\x46\xad\x33\x1a\xc0^\xf8\xb\xba`\x84$\xa5\x82\x96\x85H\xd1\xc5\x64" "\xc\xb8(W\x86\xfd\xe0\x1c\xf8\xfb\x15\xc5\xb8!\xc5W\x7fz\xbe\x96\x83\xc1\x64\xba" "\x9ai\x19\x6p\x9a\xc4mfK\x83:\xa7\xfeZ?\xad\xb6z\xd3\xbd\x82\xae\x43\x8|\xe7\x2\x12" "\xb4i\xce\xa0\xe2\x8b\xfc\xce\xc3\x4\x96\xf8\x3\xd3\xec\x1f\xca\x36l\xa9%\xba? \xbe" "\x9c\x34\xd8-\rr\x15\x19\x9e\x82\x9fM\r{N\x96\x30\x87\x9d\xa6\x8c\xa0Qa\xe4\x31\xb3" "e\x10\x80M\x97\xab\xc1\x89\x1c\xb7l\xa2K\xfbz\x89x5\xe6\x7f,*\xd7\xd0\x97\x1d\xbb" "\xd6\x81N\xb6T/~O\xa3\x6\xfc\x97\xa0X@`\x98\xc5\x35\x64\xef\xbf\x46\x89\xdc\x44\x8f" "\xb6\x90\x80\xa0\x8aT\xc3`+U\xa6\x81\x9\xd3\xad?\xb8>\xed\xa6\xdd\xed\xa6\xdd\xea" "N\xa4$U>\xc2/\xbd\xde\xf6RTH\x8f\x91\xadN\xd3\x8e\xf1\x95\xc4\x18\x42\x8e\xea\x7f" "\xe8P\xc6-\xba\xc2\xf9\xe3\xc9\xcf\xc8\x65\x42\x15=\r\\\xaf\x94\xc7\x89\x16\xc\xee" "\x1f\xc0\x9\xd0\xceh\x95\x1az\xe1\xb6\x66\xe4\xab\xbe\x82\xa1\xc6\xa3\xe9XY5.\x84" "\x0\xe1\xf3\xe2\x7fN" "\x6\x80\xba\xb3~>\xb4\"\r\xe2\xe2qs\x8a\x5\xc3\x33?\x7\xd0\x44\x41\xa4\xc7~\\\xb0" "\xfe\xdd\x6/=\xc\x93\xd0&vD\xf5k!\xb1\xef\xda\xd3\xb6^\x8c\xc0\xd2\xccRdY\xcf#\x91" "\x19\xf0\xda\x1b\xfd\xd8\x1fz/\xc1]\xe8\x65\x8c\xea\xc0\x1f\xa7\xf8~`(\xa8\xf2\\" "\xe7\x11\xf2phB\x98\x1e\xde\xa8\xc6g\xf9\x8b.\x1a\x44\x63\x98\xee\x1a\xaf\x31\x1a" "\xa9\x11\xed\x16\xdf\x8\x91\x93\xbbXaM\xf7\xbfYc\x11/\xc1L\x0\xdd\x18\x8f\xcdo\xfd" "\xa5\x12\xdc\x8f\xd7\x1c\x30\n\xdc\x86\x61\xaf\x41\xcf\xfb\x7fp\xbap-\xfa\xdd\x1a" "p\x1c\x1et\xab\xd0~\x80\xf9\x31L>\xa6\x6\xac\xa7WOM\x1d\xdd\xebK5\x8\xc7\x8c\xbb" "7fw\xdbH0CX\x94\xa6\x1\xc8\xb3\xc7\x9f\xdb\x4\xaa\x4\x8d~\xeZ\xe3\xa5\xdbI\x4Y\xb1" "Bf\x8f\x84\x81&.=I\xea\xeb\xaa\x86\x37\xce\x2\x11s\\\xfd[\xf2\x98\xbc\"t\xa3Uw\xb9" "[\xd6\x9d\xc5\xaf\x9\x9f\x64\xf3\xc1\x1d\x64\xd6\x45}\x9d\xad\xf2-R\xf1JP\xd7\xd0" "\xd8{-\xb6\xb1\xe1\x92$\xf7 0\x88\x8e$A\xf\x4\xc8\x9a\xad~\xf4Ut\xee\xf2\x3n>\x9e" "y\x8d\x2\x10/c\xc6\xb8\xbb\x1\x8a\x91^Z\xf6*\xb7\xbc}\xb9\xb4\xda(\x9\xbd\xbe%\xe5" "u\x16\xe8\xd1\x88\xe1\x98h\xbd*\xe0*\xf6\x9\xee\xda\x35\x88)h\x9f\x61\xd8\x11]\xca" "\xe3\x8b\xcd\x8e\xf8\x61]V*\x83\xcf\xfe^\x97\xe2\xf0\x17\xe0\xb7\x89WV\x98i\x13\xe1" "\xbf\x88W\x86\xe5T\xdd\x46M\x9c\x9e\x98\x44\xcd\x35z\xfb\x85\x8b\xfc(W[\xa3" "\xe3P\xe8\x8b\xba*\x4[\xe0.\xdc\n$\xbc?\xf2\x1f\x98\xe3\x18\xd8L\xf2;\xa7)1\xaa'" "\x8e\xe2\x1aG\x93u\xe0\xd5\x1\x93\xd8\xf8\xaa\xdf\xe2Ta\x9c\xfd\x82ZU\x9f\x96\x39" "\xf1\x98\xce\xb4\x91\xba\xd5R\xf\x11\x99\x33.\xa0\xcf\xaa+\xcb\x8f\xaa}\x0\xf9\x7f" "\xdck\xa2\xe1\x1f\x15\xd3\x0\xa9gj\x12\xf0\xe4Q\xf9-.\xd5G\xe2\xdf\r[\x8b\xbd@\xbb" "Z\xa2\xdf\x66\xff\xbehS~\x82=\xa6|)6\x1d\x9c\x89\xc1\xfd\x19\x1d\x9b\xab\x91\x30" "\x9e\xff^\xcWX\xd9\xea\xb\x9b\x19\x97\xcc\x10\x1f}\xb3x\x8b\xd9\xff\x8e\x1\xe1\xcf" "\x1b\xa0\x32\xec\x90\xddYR\x85\x87&\xdf\x33\xcf\xb6\xa0\xb%I|\xd5\x14N\xda\xf4\x81" "I\xf&\xc8\x2\xa0\xa3\xd2\xe9\xe8\x11O#\xb3\xf0\xff#\xfe\xe2M\x1a\xad\xbc\x36I.\xe" "\xdf\xab\xec\rO\xa5|\x3LG\xd2\xe8\xac\xb5\xe9\xff^\xc4\x86\xda*\xc3\xedQ\xa3\xb3" "i3\xd5\x2\x4K\xce\xc7\xca\xee\xbd\x38W\xd3\x83\xdd\xc2\x8f\x97\x63\"\xaa&1^?\xd7" "w\x9aP1\xab\x41\xef\xe\xfb\xb2\x95\xaf\xe0\x66\xe7\xc1\xe8\x8\x36q\xe5\x16(\xecy" "\x9aT\x9b\xdeH\xa5\x2\xf8y\xf1\x36\x1a\xf8\xc1w\xb1\"\xfe\x8e\xac\x38\x66\x8d\x88" "\x82\xa4n} X{\xd5\x61\xb3\x44\x86\xda\xd3l)\x15\xc2O\xc4\x46\xd2\xbb\xc4\x1e%j\xf4" "\xea~\xdd(\x91J\x1\x91\xee\x41\x16\x96\x1f\x33\x9b\xb8[\xdd\x38\xc1\x41vi\xb3\x45" "\xd4okn\xa2\xe3 \x98\x12\xac\x61\xd0\x80s\x1d\r\xc8\x96#\xc9\xa2\x85\x66\xa7&\xa6" "fZ\x5\xc7\xc{\xd2\xe1\xe7W\xc0\xa0;\xf8\x9b\xe8\x1\x6>@\xd6\xb6I'\x9c\xf4\xfc\xce" "e\\\xc6\xcb*-\x95\xc8\x46\xd6\x4\x88S\xd6T(m\\,-\x8e\xea\x94\xfe\xfbgb\xfc\x17\xcd" "\x93\xee\x1f\xba\xc2\xdf\xfe\xf8w\xc7K\xda\xceqc\xb6T\x98-\x86Kh\x81\x39\xdb\xf4" "|z\xd4\xf3\x8c\xda\xb4+\xcaS\xee\xa1MBb\xda\x83(\xb7\\\xc8\xa3\x42W\xcs\x3\xc0S\xb4" "\xc5\x7\xec.<\xcd,\xa8\xde\xf5Q\xeb\xcc\xc4\xf6\xfb\x92[\xa2\xac\x8f|\xaf\xbe\xd0" "\xb0\xbf\xae \xa2~\xec\xce\xda\xf7\x90\xeb\x90R\xfc\xb6\xa2T\xa3\xedQ7L\x92U\xcb" "DH\xf9\x9e\x41\x87p\x98z\x19(\x2vd\x17\xdb\xf6\x92\x9f\xed\x93{\xb3@V\x8e\x82\x62" "w\xe8\xdc\x38\xf4\xdc\xed\x64N#\xb8\xf2\x98\xb7P[\x11\xb3{\xff\x88\x64\xa7\x18\x82" "\x1dQ}\xc7\xaf-\x9b\xaa\x66\x19^{\xeb*l\xf3\n \xcbzr\x81\xc1;\x1e\x95\x39g\x6\xeb" "=X\x8f\x93\xd2\x17-\xc5\xd0\x16X\xcc*F\"\x8f/dW\xae\x88N\x11\x81Y0\xe9\r\xe7\xef" "f\xec~V\xd5\x39\xa4\x1bs\x90\xb4\xc1;)\xcdT\xb4>\x4\xef\x10v\xd4\x42\xab\xd4\x1b" "\xad\x91\xf6\xbd+R6f\x9e_\xb\x83\x37Z6=\xb7\x5\xac\xd5(\x80>D[ 2\xf4\x10\xa6\xaa" "\x9b\xfc\xc1\xc7\x4\xd9\xb9\x36M\xc7\xed\x9f\xb3L<\xbc)\x1c\x1aiH\xcb\xe7+\xd0\xb8" "`\xf4;\xd4?\xfc\xabl\x19\n\x94U\x98\x30xjX\xeb\xebK\x88gs\xa2L\xefT;\x6\xb9\xde\xf3" "\x6\xe8h\xdf\xb6\x9f\x80\xdd\x18\xb0w`n\xfa\xa2\x88\xf3\xa5\xfc\xc5\xad=\xd1\xd1" "\xa3\x8e\"\xe8\xab\xeeP\xa7\xa6\xc5\xcb\x44\x7\xcb\x9d\xc3\x39\xfc\x4\xff\xda\xd6" "\xe4\x81\x85\xbb\xe2\xe3\x96\xfe\x1c\x39\x86\xf\x94+\xc5\n\xa4\xcc\xdb\x2\xe5\xf9" "a\xf8\x44\x1d\xaeT51i\xcf \x86t\xa9\x9e\xae\xf7l\x99\xc4\xac\x8al\xctP\x8c~Gp.\xc1" "\x7f\x90\xe4\x2GI:\xc9\x6\xf2\x88\xde\xab`\x8f\xf6\xa5\xe6\xef\xa2`\xe0HR\xe7\xdb" "\xc7\x9c\xad\xc1\x9a\xe8\xbf\x33\xbd\xe2\xf{\xdd\x11\xc6\x0\xe8\x36\x9e\r\xa0;\x87" "|\xb4\xa0\x8fq\x91\x2\xd3\xc3\xf2\xf5\x8a\xb4\xb0\xa3\xaf\xc2\xa9\x10\x90\xbfj\xa5" "\xeat\xac\x7\xcf\x30P<\xf5\x15\xa1\xbe\xd7\xd5\x94\xbf\xec\xbfo\xa5\xcc\x43\x61'" "\x9f`|\xbcz\xce\"$\xaeO\xdb\x89\x83\x97\xc5\x0\x63\x1eo+\xfcS\x7f\x45\x7f\x86>\x9d" "\x8e\xa5\x15\x34\xad\xac\xd7\xa1\xea\x8\xf4M\x8a\xe8\x82\xed\xa4\x11\xb0\x7f%\xab" "\xedT\xfcR\x84?\xef\xe2\xfe\x3\xc7\xbc,\xfc\xc9^\xad\xa5'c\x15\xbd\x13\x83\x97\x10" "/\x5\x65)\xec\x7f>\x12\xad\xd6\xa2\x90\xcc\x96\xda\xc9\xa4g\x87\x88\xc0\x63U\xc6" "#\x5\x94\x85\"\x1c_\x3!S<\xfd\x0KO\xd7\x9cG\x92\x8mdX\x8c*\xbd\xc0\x34w\x1f\xd0," "|B\xc5\xe1Lv\"\xcf\xb2\x19\x34\xce\x2\x11>\xbf\xe7\x1c\x9e\x36\x14\xe7/\x1c\xde\xbd" "N`Ng\x9NV\x94\x12\x97\x4\xa2)\xd2\x5\xf1\x16\xb4<\x1cv\xcb\xed@\x9e\x1d!\xe\xf1\xa4" "\x5\xf7\xf\x61\xc3\xb$\xaf\xc0s\xa3\xa5\xb8\"\xeb!}\xb4\x61\x88v\x7f\xe3:\xd1\x8e" "\x9b\xeYEm\xb4\xd3:\xdc\xf\x18\x9b\xa4\x86I\xe8Ml\x9\x9b\xbe\xc7\x8c$\xf4\x87\x4" "\xc6\xa9\x34\xdd\xb1\xa9nXf\xf3\x89\xf0;65u\x8a\x9d\xffoc\x9b\xc6\x45\x61\xa5\xab" "\x17\xaa?\x1bK\xdf\xb0\xc0\x5\x9d\x33\xe0IF\xe9\xa5\xdaM\xe3\xfdU\x10\x7f\x9d\xa9" "\xa9q\xdd\xb1M\xa8\xf3ur\xe8R\xb5T\xdbj\x88\x80oFa\xb0\xae#B4\xe1[\x99\xa6\xc4\x16" "\xab!\xd3h\xdf-\x1c\xa6^\x9a?\xb7\x36\xdat\x6\x88\x43\"\r\x91\x63\x1bW\xd7\xb0\xf" "\xcf_$l\xa9+\xb8\x38\x9d\x95\x1b\x9b\xafPp\x87\"m\xa9\xb5\x30\x62w\xbe\x1fR\x8f\x3" "\xdc\x61\x16\x81\x13\xeeVG\xa7,\xddhlt\xd7.\x13\xa0w\xc4\x6\xebX\x89LW\x1e\xc9\xd5" "\x8cs\xa4H,0\x2*\xe3\x83\xda\xbb\x44\x15\xde~u\x8a\xd9\xf6\x92\x44\xea\xbf\xe5.\x8b" "\xe1\xe1\x42\x9c\x1a\xe5\x9b\x31\xfc$\xa5@\xa3\x1b\x91\x14\xab\xb6u\x8c\x43\x9no" "\xa3\xe7\x14\xf7\xc2\xa4#\xa6q\xdd\x42\xd5jS\x3\"\x8fh#\xd5\xba\x62\xe1\xad\xec\x2" "\x8b\x0\xc4\x38\x96\x9c.\xd5\xc1\xc2[\x9e\x8f+Zi\xf8\x9c\x9b\xfe\x8b\xbfP\xc4\xfc" "k\xef\x8c\x8b\xb7\xd6\xf3\xb4\x85\x8d\xc5,Z\x8a\x90\xe5\xb1}\xfb\xab\xfa\x38\xea" "\xf5?Qq\xacn)\xaf\x9a\x64\xc1=gn\xdb\x7f\xe8UVa\xbf\x42kq\xfb\x80\xf9\x84\xa3w\x8" "\x96^q\x98\x13=d\xba>\xb4\x65\x98\x8eq\xf5\x91\xe\xc1\xb\xe=\xb6\x81\xe7\xec\xba" "\xc9\xbd\x99\x91\xe6\xbe\xd1\xc3\xc7Z\x8a\r\x98\x6v\xddY+\xdag\x9a\x37\xcf\xeeMM" "\xf2\xfa\x84\xe0\x1c\x98P\x7q\xcd\xef\xd3\xe5\xd7\xc8\xfeT5\xe3\x90V\xc0\x32\xe5" "\xf4\x99L\x8e\xf1\xf5y\x9c\xa7\n;3\x12g\x9b-\xae\xb3:\xfb\x89%$hg\xf7\x10\xa7\xed" "x\xaf\xf3)\x8b\xdf\xd5\xbb\xf5\xf4\x30\xc9\xc1Y\xc5m\x5\xc6^\xf4@OLRU\x1e\xbd|\xe6" "H\xad*D\xb6\xbe\xf6\xd1\x8e\xbf\xebU\x2\x96\xc2\xb\xda\xe0\x46(t=\x7f\xfa\xff\xcb" "\x8dG>\xb8q\xb6\xfbN\xd9L\x8c\xbb\xb0=\xd6\x9b\x1f[\xb4\x5\n\xb4\xf0\x92\xe\x88\xac" "\x9e\xad\x11K\xc5\x32\xda\xb6\x98\x14\xf5\xc0\x2\x0J\x95\x9c\xa6\x30\xbd\xb0\x63" "\xbe\x3\xbc\r\x35s*\xa5\x80#z\x5^\xba\xe9\xa0\xc\xa1\r\xb2\x83\xf6\xe1\x93\x99\xd9" "\xfb\x9b\xd6l\x86%;\xd0\xd3\xdcs\xb_\xc8\x98\xbf\xa5P\x88\\N<\xbdkr\xf4;\x9e*\xb" "\x1d\x36-c\x1g\xd5&\x95\xf0wR\x5*7\xb6U*\xa2\x90\xd1\xe7\x30#\xbb\x66\xa4\xae\x15" "\x6\xa3\xc9\xa0\xdc\xe0\xa5\x8c\xeaV#hc\"\xa8\xfen\x88\xf2\x18\x2\x1%%r\x84\xf1R" "\xcc\xee\x92\x31\x34(\xeb\x65\x33UCtY\xe1Z\xd3t\xe6\x86\xac\xa6ns\x7f\xdf\xb7\xc2" "\x87\xbe\xa4\x14 \x1\x9bi\xb6\xa3\r\n\xc\x65\xb6\xd4\xb0`\x8a\xaf\x9a\xb4V\xe5\x64" "\xa8\xca-\xbe\xed~\xe6\xba\x9cJ\xb1\x6l\xa0\x98\x35\x97\x1N)\x86\xb0\xd9\xf6" "\x88\x90\x8a\x43\xee\xac`K\xcf\x9a\xb<\xa6\n\xba\x15_J\x3VZ\xc9\xf9\xfc\xc5\x61\x1f" "\xbf\x5\x97\x8\x44\x31\xd3}\x97\xa9\x15.Q~\xf0\xf6\xac\x30\xc7\xaf\x14\xcaI\xbLv" "\xc3\xa8\xc8@6\x11\xf2J'\x14\xbb\xf9R\xa4\xefwgQ\x8b\xf0\xb6\x97\x37\xb6[{j\xea-" "h\xac\xb1\xf8,^\x96k\xe6\xab\x8b\xb3\x8a\xb1\x82\x37u\xbb\x35\xd6\xb\x1e\xc0\x1e" "\x1a\x95nu\xad\x8f\xf6>\x90\xd7\xc3\xa0\x97\x98\xcb\x1a\xc0\xe1#WBuy\x85\x8~r~\x13\x93O\xb1\x37\x82\xe7\x19\x1c\xc0\x62\x83$\x6\xa8\xbc\x38" "\xc5v\xb5\xd9l?\xf1%\xfb\x92]q\xf2\x17\xd7\xe6\x7u\xc0\xc6\x36`\x19\x37\xb7\xb5\xd7" "\xbb\x35\xb6\xae\x8\xf1tZ\x1f{B\xdd?=\xc1Y\x9a+\x89v\n\xf2\x34\xd0\xcaU}\xf5\xf3" "\xbe\x13\xd9\xe7\xce\xdd,>\x98'\xf2\x9f\x46g\xe4\xa5^\x8b\xac\x85\xba\xcf\x33qos" "T\xeak\x96wl&\xbft\xf8\xc6\xdc\x18\x81\x41\x3\xcf\x41l\x82\xb2\"g\x85\xdb\x86\xe6" "n\xdd\xe4]\xa8\xe5\xaas\x89\x34\xd0\x84\xed?\x8b\xab\x45\xc5\xa4i@\xed\xd3&\x10n" "\xe1\xaal\x8b$\n\x98\xf1\xec\x82\x84\xbc\xac\x2/\xef\xbe\x97\x38\x85\xa2\xc5\xfe" "\x2ZD\x8e\xf2\xec\x64\xc5z\xc0i\x98\xaa\xf2Op+p\xea\xd8\x62\xf4\x32tg\xdcUX\xb5!" "\xb5\xa4u\xfa\xe8YSM-\xef\xf3k\x8f\xf2\x89\xc9\xc0U\x7m\xbeG/\x83\x38\x9dt0j\xa6" "5\xa7\xd3s\x8f\x9\x0_\xa7;\xd9\x3\xa9?\xa9\x8fZ\xdaHZdJ\x11[\xedt\xa7\xfc\xc\x90" "\xfe\xbc\xe2*\xc7\xce\n\xd8\xe6\x41\x43\x30\x1ag\x1e\x98\n\xc3\x35\xa9\xf\xa7\x35" "\x17-\x98\x43\xf6^L\xf&\x7fIiud\xf8\x42\xce\x34\x9d\xda\xac\x38k1r\"\xa0\x13\x65" "!\xc6\xec\xae'kc\xbe\xb2\xc1\x92}\x4\x88\x61x\xec>\xd9x=\xdf\x41N\xe1\x34\xd8\xb1" "N\x92?\xfe\x1eZO\x1e&~uS\xe3\xb0!\xee'\xe5\x36\xbdIc\xc6\x94U1\x8e\\\x1d\xed\xa0" "\xbbO\xaf\x81L\xd4\x99\x8ajJp4\xef\r\xa8\xc6O0\xef\x18\xc6\xab\x16Nb##>a\x83\x41" "\x9fS\xa8\x1d\x92!\xa9\x64h\xdd\x39X\x8a~\x9a\x38\xfc\x7*\x96\x81," "\x8cQ~\xea\xd5o6\x10XF\x86\xce\x91%\x5\xd5\xfa\x81\xcc\x1d\xe9\\{\x9c\x96\xc1\xc7" ">\xa7ip\xb2\xc3\x43\xca\x86S\xe}\x1b\xecV\xf0\xbc\x43\x7\xc6\xa4\xaa\xd3&\xad\x32" "\x96\x97\x18w\xa6)H\n\xfa\x1a\x9b`*h \xf2\x1c\x65 \xbc\x9c\xde\xfc\x1\xa7\xc4\x8d" "\xb7\x9c\xaf\xf6\xcf\xcc+\x9f\xb\xcai\xd4\x11%Go-7.\x1c\x8bkI\x9d\xab\x94>\x11\x30" "\xa7\x64m\xd1\x7fn\xba\xe2\xbe\x1f\xaduxKP\x6\xf2\xd7\x13\xae\x30\xa4\xcb\xab\xcd" "P\xd0\xda\x9a\xfaL\xf3\x38\x3X\xe5u\xb7i\xc6\"\x8b\x38tC\r\xb6\x8a\xa0\x41\x1e\x11" "b\x18q\xd3W\xe2[\xc3\x99G\xe2W<\xc6\x8b\xfcS,\xcf&\x6\x83\x91\xdcQi(\xf8\xe7\x32" "\xd2\x8\xe5H*\xd3\xc7>%]\x1a\xe8\xa9\x37\x0\x96*V\xc0\xf8:\xbe\x63\x8\x9f,\x9clB" "\x16')\xd7M\xfe\x84\xbfr\x2\x6\xd4-\x82\xd2\x2-\xf2\x38\x18,\xd3=\xc4\xbc\x0\x13" "\xc0\x30\xa9)!\xc4\xf9\x43\xcc\x8f\x13\x42\xf3Z\xc1\xdd\xd2\xa6\xff\x37\xb9,\xe6" "\xc9S\xa9x\x8e\xe8\xc4\xca`2\x8cv\xfc\x37\xdf;\\\xbf\xb7\xbe\xe8\xd1\xa0\xf5\x93" "N5;2\x9e\xc6\x9b\x91\x0\xc4\x1fR\xa0>\x80\xbf?\xaeQ\x90\xaf\x63\x17{\xcc\xee\xab" "+D]\xff\x1b\xc\xfa\x37 \xc8\x9f\xfe!\x10\x81\x66\xe6\xcb\x33\x83Y+\xa4\x4<28n\x17" "\xab\x84\xd5\x9a\x46\x32\x30\xa1\xe3\xbd\xb4(\xf3\xa0\x62L\xb0.\xda/\xdb\xcfk\x10" "kr\xd9\xa3?\xb\xf2\xe\xf7\xe4\x65\x44\x89L\xf\x95\x8d\x9d!\xa5\xbe\xaa\x95\xdc\x9c" "\xa8\xb3\xaf\xd3\x3\x98\x86\x1d\x41\xe8\xd1\xf0R>\xcf\xf6\r\xc3\x99Z\xdf\x84\xa4" "d\xda\x46\x11\xc6\xf4V\x7f\x17O\x93\xc6\x89\xabr\xcd\x38\xc9!Wz\n\x13r\x81\x5\\[" "\x8b\xbd\xdbp-\xca\xe5S5\x8\x12Ob\xc6\xb6\xae\x94~\xf8\x88\xdf\x84@\xb\x91\xf1]-" "\"\xaf\x9f\x36\x86\xe\x8e\xfd\x8d\x31\xcd\x1dP|*\x93H\x1bR.2\xf8\x6?\x81\xf6\x8e" "\xce\x98\\\x35\xec\xb0\xd8|\xcd\xa2\xbf\xdaI\xa7\x45\x1b\xf8?O\xfb\x45\xdb\x63\xb6" "q]N\x11\x61N\xbZ\xdd?\x90\x13yh\xab\xb3\x39\x45\xa5\x36y\xc4\xa3u\xc6J'\xe7r\xf3" "\xa2\x86\x91\xc5\x6K\x13\x35\x19\xaa\x12\x97\x9\x38\xc3\xbcG&\r\x8d;\x1e\x6\xbfj" "90\x15\xe3im\xb9\x9\xea\x8a\x80\xef\x4\x37Y.\x88\x10`\xbe\x81\n\xf9o\xc1\x13\xda" "8k\xa7`\xf5\xdf@\xfa!\x9e\x14\xa1\x1b\xa6\xa5\xbc}lT\xab\xf5\x9eq\xf3\xe8\xeb^\xb0" "/\x8\x81\x94\xac:\x2\xdek\x89\xbf\xd5v\x82k\x14\xe2%\x34%\x1f\x63\xf8\x9fL\xa0Z\xb6" "\xc7(t\x8a\xdf\xfd\x2\xe6\xb2\x1d!\x97\xe8~\n\xcf\x1c\x8\x1b\x65S\x90\x83\xce\xe9" "ZG\xe2m\xd8\xf8H\xc2\x42%um\x9b%\x2\xe5\xfc\xf4\x82\x1v\xf5\x19\xe1\xfe\xb8uI\xf9" "j\x0\x38\xb7\x97\x80ht\xd6v1\xb3\x41\xdc\xcfZ\x84\x14\xe8\x65x\x83\x9d~\xc3)h\xc5" "~+p8{O\x1b\xa2\x11\x97\xac\x8d\xf1\xca\xc6\x17^\xf0\xa6\xf4he\xc8\xac\xbb\xeb\x12" "\xab\xfb\x83\xd3OKR^\xac\xc1-'3\xc2\x9d\xf3\xccJ(\xa7\xe0\x30\x92&\x9\xe0\x39\x85" "e\xff\xa5[\x1\x18\xa9\x4\xa4\xcb\xf\xedZ\xf5\x85\xc9\x38\xa8\x9\xe1W?c\xd8)\x1b\xcf" "\xaa\xc2\xbb\x1d\xecVJ\x94\xd3\x90\"\x36\x97\x32;\xa9\xd5\x8a\xc7M(\xe3p2\xafo$\xf6" "\x7l\xe4\xe9\x19\xb7\xb8Vy\xe2(\xc7\x43\"\x30\xa8]5\x5\xd6\xf6Y\xbe\x33\xb4i~L\xb" "kn\xe2\nQ*\xdc:\x1d\x2v\xc0i\xe4k\x8bh\xe8\x1eH\x93\xfc\xf9\x1c\x64\xb8Nc\x1e\x92" "\xa5+\xa9}\xae\xcc\xf4\xc3R\xa7x\"Ye\xf2\x9a\xcah\x9ft\xc1WZP\xc3\xfen\x90\xbe\xe" "\x1d\xb1jnG=g\x9eZ\xd5\xf4\"\xbf\xb0\xa4\xba\xf0)\x81\xb0\xa1@\xa3P!\xd2\xa9\x91v\xd3G6>\xa7h\xb7\x1\xa4\r\xc7" "h\xd5S^\x18`a+\x84\x19\x8e\xff\xd0\n\xa7\xbc\x9\xf3\x6zqk$\xdd\xe0M0\xb7?\xc9\xfb" "x5\x15\xc6-\x3\x91\xc8,\xf8\xb3\xbf\xby\x96-\xb0\xbb\xb6\x99)_2Oi\x9_\x1a\x43\x8" "=?t6\xa5\xf4\x96P\xba\xfb\x86\xd2\xd6\xad\xee,\x97S\xdf\xbe\xc5\x12\xbd\xc5\x1e\xf2" "T\x9e\xcf\x37n\xc0_k:\xa3\x9\xd9\xc7\x9b\xe2\xc\x35\x9d\xdc\xe0\xf1\xbfO\x12w\xde" "\x85\x64\xa2 $\xe2\x88\"\xe7\x34w\xcq\x7fp\xc7+\xc3\x99\xfa\xf5\xd8\xb6\x80\\:|k" "\xad\xe9\xf1m7\xd5\xe7\xed\xa4\xd7WjE\xa9\xad\xa1\xe9\x99j\x99@\"\xb7w\xbe\n\x1c" "m\x9c\xb5\x8b\x9\x87\x31\x9d\xeev\xe0\xd3p\x97\x94\xc0]\x15\xadJ\xef$\xb\x2\xcd\xba" "=\xd5\xad\x38\xae[\xcb\x9c\r\xf2\x34+rw\xa0\xe2\x41\xaa]\xc4\xb7\xc0\xb5\xd6\xc6" "j\xe3\xc8\x1c\xc7X\xd9\x7\x1cw\x9fqO2\x8b\xef\xff>\xbe\xc~~lN\xeb\x16\xc2u\x85\xa8" "\xb2-g\x91\xb3MN.\xb9\xc8\n\xd9%\x46\x9b\x3pm\x99\x96\x2\xe)\x8e\x93\x1\x90\xeb\x9a" "0\xf5jb8\x9f\xb4\x9b\x0\xd1\xf9\x1aj\xf2\xfa\x86\xd8_\xabO\x9b\x89\xdb\xd0v\xa0\x36" "@S\xe7\x1a\x91<\x88un0TP\xc4\xa8 \xc8s#\xe4\n\x61[qX\xd8\x93\x12\xf8G&s\xce#r\x8a" "\xae\xd2M\x4\xba\xee!Y\x1a\xeew%\x8eW?v\\C-\x1c\xd4\"\x1a|\xe5#9\xb7\xbaY\xa1\xac" "+\xac\xf1R\xfb\xec\x1X\xe7\x87mA \x13v\x95\xa8\xbe\xad\xb5\x8a\x10\x7\x63\xa5\xed" "\x95\x9b\x9c\xa8\x9fH\x1d\x9d\x9e\"o{`\x9aY\x9b\x30\xa6\xa4iK\xc1\x66\xee\xff\xf9" "T\xe1\x87\xd5\x39\x87\x86\x8eM\x9f\x11\x12\x38\x8e\xb1+\x9eP\x17\xe3Vh\x1\xfb'\xa0" "\x10\x12'\x84\x9d\x15\n\x64\xfb\xb6\x10N\xc6\xd1\xe7\xc3T\xa1\xba\xf4%\xc5\x83\xfc" "G\xdb\xdb\x95\x8b\x8f^\xb6S\xb5\xa0\x45\xfe\xf9\x92y\xa4\xa7m\x9H\x12\x1fM7\xc0\x34" "1\x9\x31\x15\x13\xe8#_qyH3}w|\x8\r\x13\x30\x17w\xab\x89\x87\xb3\xd6M\xe\xafp\xfe" "(\xe9W\xa1\xe9*\x7f\xfe\x93\x82\xa5p#{=;\xd3y\x10\xda.Q\xbc\xf0KVl\xad\xca\"j\xe0" "\xb8\xc6!\x5s\x8f&\xbfW\xedOn\xf0\xf4\xfe\x16\x41\x45\xdbY\x2\x86\xd1k,\xa3k?w\xa0" "\xb4\xd2\x43G\x8cY\xcb\x34IK\x9 \x9e\xa1MO\xe0$\xf3s\x87z\xf8\x87\x93\xed\xa2\x93" "W\xfd\x90\x81\x95\xa1\x95%\x7\xb7&\x13\x8e\x37{W&\xd2\x84GV-\xf5\x8e\x2\x66;\x86" "\xcb\xfd\xf2t\r4\xa0\xcf\xb1\xc5\x14R>\xa1\xb7\xb2\x6\x1\x97\x13\xce\x97\x94?\xf8" "ny\xed\x7f=\xbbY\xa6\xfd\x96h\x2\x64\xe6\x93\xf0k\x3\xe9P\xe4\xa2\xc3\xed#M\xb5\xc" "\xa2\xa6U\x94\xc8\x90\\gJ\x9b\xef\x1f\xdf\xae\x8a\x6\x88P\xaf\x66,\xd0\x4)\xafOA" "\xa8\xa9]\xbc\xbb\xa1\xbd~+T!\xa1\xfa#|\xf3\x1b\xc5/sj\xed\xdb\x18\x14\xf5\xa2)\xa1" "\xe8\x1a\x3\x16\xc6\xf7\r\x17rC\xad\xc4\x81?\x84)\xad\x87M\x9e\xfa\xb\x92y\x97]\xc1" "[\xc1\x41\xdd?\xa2\xc5iljd/\xdeN\xeanTvM\xa5\x9\x10\xe5\x1etPm_\x0}\x1b\x19\x46\xac" "a\xf4\xb5\x46z\xe9\x44\x91\x92\xd3\xf3sg@pM(\xdf%\xa0\x18\xa6\x81\xc2M\xca\x18\x62" "\xcf\x19\x89\xf1\x17\x9c\x80\xed\xf7\xea\x97\xebH\xb7%\x13\xa2\xf5\xf9\x41\n\xd3" ";\x1eg\xafJ\x9b\x84\xb7\x3\xc6L\x91H\xa4V@Zk\xdeK\xef\x9e \xd3;\x91\xb9!c%\x15\xd9" "\xb7\xd0\x7f\xbf\xe4\x2\xd1\x61y\xe9\x11\x1\xaf\x1e\xbe\x99\xdfqX/\xbc\xc1\xaa\xeb" "\xa1\x37\xcf\x37w}\xb5\x93i\xeb\x36\xeb\x8b\x88\xfdl\rq\xb8\x9f\x34\xfd\x1d\xf0\r" "\xcf\xf\x1dXL\x12\xcd\x99\x8b\x8d\x31y\xf9Z\xe3\xc1\xdaH5C\xbd\x19w\xd8\x83\x10\xb7" "f\x90\xd5VTk0\xc5sd\x1d\x1b\x63\x10\xd3\xf3\xc9\xe8\xc3\x98\xcam\x1b\x4\x8c\x62\x9d" "\x14\x35\x84\xf6\xb5\x11w\xa8\xca\xe3$p[\xe0u\x1b\x1dv\x9cOz\x80\xff\xe8\x10\xf0" "v\xd0\x7\xe0\x1aM\x8d+\xb8\xe\x6\xa1\xdd\xb\xc6\xa7\x9a-\xb1\xffQ'h\x80\x35+\xc\xa2" "\xaa*s\x99\x91\x8b\xd9\x11P\x91\x7(\x92\x14\x9eQ\xd7\x8:G\x1c\x8\x35\xa5\xf5\x95" "\x7f\"GKI\xeb\xc6\xec}j\xe0\xef\\\xde\x36\x34\xb8xT@\x99\xc5\x8c\x31%Il\xde\xb9\x88" "t3[\xf1\xc7V\xb8\xf6\xcc{\n\xa4\x9d\x93\xc0HE\x1anH7z\xee\xf2\xef.\xdd?\xfd\x1d^" "\xfe\x84\xe2:\xaa\x14\x38\x84\xd6\xf\x6\xf3k=_\xa9P\xc3sq\x5\xcd\x80\xbf\x38<\xaf" "\x1e\x1c\x46\xe\xe9\x30\xe4$\x1#\xb3K\x83\x30z\xcb\n\x2\xa3\x82\xfd'\x93\x16\xc9" "\xf\xa6\x9c\x1f\xdc\x17\x1fL\x7f\x30\xf6\x45\xd4\xfb\x88y9\x90\x30R\x1a\xf4\xee\\" "\"^l\xef\xd3\xf1!\x5P\x19\x37\x85\xe2\x17z\xe5\xcd|\x13\xe%M\xf3\x9bM\xe5:{KK\xea" ">t}\xe4W\x7\x3#3\xb2\x1e\x13\x62\x1c\xd6\xab\x91/\xc7\x1\xe7\"\xd7\xfa\xc2n\x92\xc9" "\xd7y\xb6\xd6\xbbI\x12\xe3\xc8I\x7f\xdaPH\xd4\xc8V\x1c\xa5\xe8\x34uEy\x86\xa8\xaa" "%\x86\x9e\x83)\xc5\xaf\xc2\xbexP\xef\x12\xc4US\x10\xfb\xf4$\xecUh\xff\xe9.\xd1\xea" "#\x96\x5Q\x81V]K\x11\xf9\x8cr\x18\x9a\xbeo I\x18\x0\x46\x91\xdb\x14\x11\x81\x93\xc5" "\xe2\x91\xe0}5\xc4\\\xea\xfa\x1b<1U\xc4\xc2\xc9\xa9\x1a{\xaa\x9b\x11\n\x97\xa0\x94" "h'\xe2R\xdch\xd6\xa1\x95\x92\x88\xff\xb6>\xb6r\x1f\xdc\xa0>\x1er\xc0\xd3|\xa7\xdc" "\x7f=\xea\xbe\x15\xf4\xe8\x4\xcb\xb7\xf5\x65\n\x14;\xdf\xf5\xe8m\xe3o\x9f\x82lO\xc0" "]Vg\xeaJ\xdf]\x8\xa3\x1c\xd4\xf0\xd2\xfc\x95\xf5\xec\xcd\x87J@\xc0\x84{\x2\xcfO\x9c" "K\x4|'\xe5\xc7\x2\n#\xe2\xf4PJ\xa1\xb7\xa4" "QJ\xf7\x96\xbc\xdd\x85\x94!\x12\x45\x82`T\x17\xda\x88\xf9k\xd9\xbd\n\x44\xf6\xa1" "\x3R\xf3\x1b\xe3\x88\x61\xee\xc0=^\xf4\x34\x9c\x62g\x81q\xbc\xbb%\xc7\x89\xcf\xa6" "P\xeavqj\xd9\x9f\x9e\xf4\xa3\x61\x46}\xfK\xdd\x30[\x16V\xc8\xe2&\xbc\x61\x99>\x98" "\xfe\x31\xdc\x93l\x90\x2\xf6\x9c\xaf\x89\xe0\xaa\xd3\xa2\x15hZ\x82'SW\xfc\xe7%\x87" "{R~\xecV\xa7NJ\xa3R\xa0\x7f\xce\xc7\xb6m\x2Z\xd7 \xc7`\xec]\xcd\x46\xcb\x18\xcz\xec" "\x17\x1a\x32\x0\xc2\xbfi\x7f\xd3\xbc\xf7\x84G\x5M\xc8\xc3\x8c\xd4\x43\x96K'(\x5T" "\xa6\xb3\xa8x\xea\x93\xb9\x95\xba\n\xcbt\xa4\xe9\x61\x18\xb2]\xae/g\xab\xe2\xee^" "X\xb\xc\xb.\xeb\x8a\rs\x9x\xe9r\x5'x#A\x1f\x1c\x4\xbe\xca|+\xa5\x88\x63\x1a\xb1\x2" "pp\x8b\xa7.\xb0\xc9\xd7\x64r\xe9\xf\\s9\x97\x3\x1dR\x88\xc0l$I\xed\xea\x82\xb0\xcf" "e<\xf1\xdcZ\xfd\x64\xc1\xb\xbd\xed\x31\xa2\xc3\xa2\xc7\xa0\xb\xf7\xb6\x88\xc7x\x88" "\xd6\xe6\x17]\x8c \x99\x43\x82\xea\xae\xc1M\xf3x=K;\xc9\x7f\x1c\xc3\xee\x61\x13\xd5" "\xb\xbb\xc2\xfb\x1b\x82\xda\xfc\x12|FmY\x9\xdb:|,[1\xa1}\xd5\x88\xf1[\x8bR\x11\xdf" "1O\xb3\x34\xc4\xf5\x41/\xb2\x38\x8\xbb\x1a{\xb3\xf8Wb\xa0\x88\x17\x65\xb0\xd5\xb8" "\xcc\x8al\xa8\"\x8f)\xe7\xe7;Iks\x16\xe\xe8\xf9\x1b]\xc4\xa5\xc\n\x9=(\xc0\x18P3" "lV\xa1.\x95\xc0\xb5;9\xc8u\xf8jdo\x14\x92\x41\xaa\x7\xf\xed}j\xd4.\xff?\xec~\x3\x9c" "6\xa3z\xa3\xe5\xbe\xc4\xc4\x97\xb1\xf5\x1d\x7\x5{\xf4\xe9\xbd\x6r\x9\x85\xf#\xa6" "\x14\xb0^\xe5\x99=[a#O\x94V\xfevt\x8a\xca\xd8\x1m\xc2\xfeH\xeb[M\xc7\xf2\xf6\x98" "s\x4vLH\xa7JPb\x1c\xab\xc3\xd8R\x8d\xd0\x8a\xadMKU\xaa\xb3\xa0N\xfa\x8ei\xc3\xf5" "\x9e\xf9.:\x81\xc8\xbe#\xbe\x14\x36u\x8c\x1a\xc3WBl5X\xeb\xf6z\xc9guQ\xdaSc\x8a\x95" "\xf1\x65\x32\xe,1\xde=\x9d\xadz\xaf\xc9\x9a\xe3\xd4\x14\xb\xd6\x90\xba\x98}\xa1\x61" "\xe8\x95\x1cg\xa9\xa7IH\xc3PM\x1b\x7\xd5\xc7iLL\x81t\x14\xd0W\x93\x8\x11p\xd3\x87" "\xbe\xed\x9f\xcbZ}\x9\xa6\xc5\x6\x8a\xef\xf;t\xe3U`\xd2\x15\x93\xec\xfcQ\xb9\x12" "=\xa0\xda\x11\x43\xca\x1b\xe6\x4H\x9jf9\x87O5[(%\xa4\xc8\x61\x35\xd3u\xe8\x83\x13" "G\x88\x61\xf1\xb9\xaa\xf8?9\xe2\xe1\x8a\x9d\xa3\xee\xf7\x94L\x98M\xe5J\xdf\x42$\xd6" "\x1f\xfb\xb8_\xdc\x6|\xcbl7\xf8\x16\x87\xa5\x8g\x4\x35\x66P\xd4\x87g\x8f\xa2\x38" "OH\xe9\xe4\x3Y\xccn\xfa\xfW\x9f\x8a\x18\x1d\xbb\x8a\xa0\x1f\xff\xce\xae\x9e\x1a\x97" "f\xe6\x2\xaa\xfa\xfc\x42\x45\x9c\\\xc5\x97\x9\xcf\xd3\xc7\xc7\xb7#[\x9d\x9f&\xa5" "\xb!\xc1\x13\xdb@\x1f\xa1\xe9\x94h\xe5\xbf\x42\x9d\xdf\x94o\xefjo&\xaa\xfu\xd7rb" "\x11\x9e\x30\xebU)\xb9\\\x8c\xa5(\xafx\xde\x86\xa4\xe\xd5\xdb\xae\xf\x1c\x36\x62" "Z`B+\xe9\xe6\xf7}VrV^\xbc\x80\xe3\x99{\x15\xdd\xd5\x90=\x85\xf3\\\xbfv\xb3\x88\x84" "\x8\x6\x5\xfa\xa1\xc1}?\xdc\xdc_e{\xc4\xab\x38g\xe9\x17\xc9\x8c\xe6\xc3P\nvY\xd3" "\"\xc9\x81\xe3\xb2\xe0`+Fb\xd2\x10n\x1f&\rd\xa8\x94\xaa\x1e\xd3\x8eh\x1a\x1d\x1\x64" "0z\xf8\x1f\xa1\x9c\x1c\x8e\xd2\x62\x7]\xf3\xe9x\xa1\xe2_\xd5\xa8\x95_\x9\xeb\\\x8e" "\xc7\x9c\xe0#\x9\x66\xec+\x90\x19\x8a\xc6\x96\x1e\xdfJ\xb\x9d|Y&\xd1\xb5UbV\xfd\x15" "\xeb\xdeP\xa4uj\xa1\x63\xb7\x9\x18\xe6\x97\xad\x9b\x8y:\xde\xe1\xa5\xbf\x9d.\xd8" "\x6\x9f\xb5\x65\xb\xb6\xa2\x15\xb1\\\x80\xa2vN\xbb\xd6U\x87\xe3h\xfaQ\xf?%\xb\x30" "\x2\xf9%o\xa6\xc2\x1b\x14\x44\x35\x5\xb2\x3\xc7\xe1\xf0\xe0\xb6H-\xe3\x17\xbdV\xb4" "F0\xb1\xa6\xc8\x36\xa2\xe3\x98\xec\x36\xdb\x92\xa9\xa3\x18mU *~\xe8\x8f\x98\x1f\x14" "6\x8c\x44G\xa1ra\x9cO\x9c\x9etz\xd2\x86\xd0\x1f\xd2#\xb5Q\x3\xc1\xe0g,\x97\x8\x4" "/c\xbat\xbd\xd0\xd5y\x95\x3\xb6\x42\x9bp\xc9\xa4\x92T\x81\xf6\x34\x8}\xbd]\xc8i\xda" "\x8dW\xfcv\x1U.\xdbQ\xb9\x91\x87\x9\xbb\xec\x37\x65\x83\x92\xa2\x87\xf5\x7J\x8c\x1" "\xcc\xfbI\xcc}\x83:E\x1\xcc\xef\xb4\xe9\xa9\x82\xed\x89\r\x18\x7\xcb({\x9d\xdb\x8e" "~/C\xf2\xfd\xfd\xd1\xb4\x17KE\xacK \xca\xfc$\xe2_\x87\x1b`\xbc\x41\x92\xb2\xe6\x43" "\x1d\xd2K\xfa\x8a?\xad\xa8\x94\x10\xd0\xbbh\xb8\x65\xf3\xe4;\x89{\xa4\xf9\x8f/\xb3" "\xda,2(\"\xbc\x80\xa5^\xff\xa4\x98\x90\xf1\x92\xc\xb8$\xa1mg\xd1\x9a\x33\xd8\xcd" "\xa9\x86\xc8\x4\\\xc8\x39\xe2\xe\xf9@w\xd1\x91\xf6-\xd4\xa8\xaf\x82\xc2\xf4\xe9Z" "d\xe1\xaf\x8d\x88-\xad\x32\x3\xff\xf\x86\x35(\xdbr\xef \xa1\xbd\xf8\xd9\x98\xaa\x85" "\x1\x1b\x31t\xc0\xef\xa0\xca\x63x\xd4\x88\xde\x30\x96\x1@\xf9\xdf\x85\xb\x36\xbd" "1\r\x1a\x18L\xf4{p\xd7\x66T\xa3\x9d,]P\xcaV\xbb\xc9\xa1\x66uH*\xb0\x1d\x14%\xff\xfa" "&L\xfb\x84\x9b{\xb6\xa6\r\xd4\xdd\xfc\x43\x95\xed\xa9\xf7\xdb\xac\x1f\x9b\xd1g\xfc" "\xb3\xe2\xa5\xc7^X\x14\x82\x86+er\xc5\xab\x18_\x13\x4\xfb\xc9\x1\x9!ea\xc5:vk\xae" "\xef\x42\x81\x1ak'\xcf\xe7\x34%\xa8s\xc6\xf2\x33\x13\xce\x98\xa1U\xa6z\xf5\x94Q\xb8" "Z\xf8\xafQO\x1e\xbb\x9c\x8bU\xfb\xbf\x17O\xaa\xc6\xa1\x15\x15@\xe5\x9d\x11\x18Z\xe7" "0F\x83\x83\x80\xe3\x84\xb2\x34\xa7o\xedt\xda\x8f\xe2\xdf\xb1o\xe8\x80\x5\x61\xea" "\xa8\xbe\xf5 \x1a#\xc3\xc1\x62\xf1\x15 ~\x1fp\x8c%/\xc\x80\xeb\xc0\x10/\xa1\x85\x9d" "\x1d\x14\xd6\x37ol\xa3\x93\xe1\xb7^Y\xe9g\x86\xe4\x43\xcc\xfa|\xff\xa5\xd5\xa5\x32" "\xea\x30\x1d\x1a;\x11\xdc\xa3\xe9RH\x89\xbbG1\xfas\xe3\xc7\x10m\xe3\n\xb\x10;\"\xa0" "?\xf9\x10\x31\xf8\xb3\x5\x84\x9a\x12,\x18\x14\x96\xf8k9\xef\xc0\xa3\xc3\xf0\x36\x1" "\xfb;\xea\x64\x1e\x4\x9akj[\x94\xc3\xd2\xfc\x43%\xbe\x8b`\xd5pv\xe6\xc6\xb3\xc9\x19" "\xd0\xe9\xac\x9a\x35.b\xc5\xa1\x8b\xc1t\xf4@\x9\x17V~Z\xb8]\xa3ZJ\x0\xb9\x9d\xb2" "\xd0\xa0\x43\x95\xb5\x32\xa5\x89\x83\xb7\xe1\xd9\xcan\xc1\xb3X\xe0\xd5/\xfb\x82\xe0" "\xa2\xb6\x1b\x38\x18\x65\xc9\x13\xaaT\xac\x9\xbc{\x90\xdc\x93\x6\x81\x83\x45\x9b" "\x1e\x9c\xa7K\xe6'\x18\xeb\x1a\x33\xc0\x38[\r\xb5\x11\xdf\x9c\xde\x3\x0>\xe8\xa0" "\xaf\n]\xe0\x5\xd9\xc8\xd1\n\x96\xc0T\xa1\xd4uh\xcc:\x18i\xbeH0^Z^\xb2}g\xa4\xe9" "\x93\x1f(\x98\x1f\xc4\x82\xc0Q\x9e\x33\x1b\xab\xc2\xb0\x16\xd4N\xb1\xd5h\x91\x82" "5\xed\x2\x34\x98\x84\xde.\xda\x44\xf\xe7\xb9\x8b\xc0-\xea\xd0\xea\xf7o_\xa8]*l8K" "it\xc8\xb1\xec\xde\xde)\xe\x81\x39u2\xda\x1cQO\xe3\n\x34I\xca\x33\xfa\xa2\r$\xa4" "}=\xdd\xc4N\x3\x7\xe\xb9\x44\xb4\x41I^\xf2\xae\x38;\xd2\xb9\xb6V\xbb\x0\x15\xd7\xd8" "\xe\x81>3\x88o\xba\xdb\x1c\xe0\x8f\xcb\xec\xef\x19\x34V\xec\x9e.\x9c\xe0\xfb{\x8e" "\xb7\x15\x34\xd6\xecV[\x9P\xcb\xb\x9d\x92\x1bJi\x80\xf6\x39\rO\xaa\x16\xcf\x46j\x2" "\xae*U\x14\x65\x41\xa2\xcZ\x99\x96\xc5\xff\x61\x45\x8\x87\xb5\xdar\xaa\xce\x42\x83" "@\xd9\x88k\xec\xbd}\x8b\x7!&\x98\x83 \x1f\xfa(\xd1\xa1\xba\x32\xafw\x98\xae\xbc\x6" "L\xcf\n\"\xfc\x9f-E\xb\x9f\r&\xfe\x2\x30\x99\xa9W\x91\xc7\x31y\xba\xaf\x84n\x9f\x10" "\x2\xa9\x30\xc5\x8\x62\xd5\xe4\x9f'\xd4i\xf6}\x94\x85\x80\x87~\x85\x83\xc4\xcd\xf" "\xd4\x8e\xd9\x85\x1\xe3\xf6\xd0\x94\xaa\x0\x14P\x91\xcf\x33s\xb7\xadlPP\xb9\x7\x62" "\xa9\x8d!\x84=\x1d\xf3\x12\x93\xe5\xb8\xa5\xf2S\x91!;\xd3\xf8\xefx\xf1\xed\x91\xa5" ",P\x8\x9c\x34@\xe7\x85_1\\<\xe3\xc5\xd0-\xa2\x1a\x17\x10U\\\xbe\xad\xa8\xd4\x6\xe0" "\xf6\x44\xbf\xc2\x64\x9ck\x5\x9a\xe0\x9e\xa3\xce?\xdfU>\xb6)\x8eih\xf0l\x1f>x\xa3" "\xda\xdb\xf8\xe}\xfe\xb2\xbd{\x87\x62\x0\x83\x95\xb6$\xe0\xcc\xbc\xf\xabn\xc0'\x9b" "\x95\x1c\x7\x91\xb6\x5n\xa7\xe0m\xd3\xa7\xea\xc1<\x93\x90\xab\xd9\x8e\xa4',\x99\xde" "\x1a\x65\x34[d\x0T\x9e\xd0\xc8\xad\xf4\xeb\xbb\x46\xf0Rb\xe2\xf5\xc4\xfa\xe6*'\x9d" "[\xe6\x39x]\x7f&\xa8\x15\x8aw`v\x12\xcf\\\xf9\xb6\xcb\x35\x39\xcd%]\x9b\x94'\xaf" "\x6\x65\xad\x63\xc1\xe8\xdf\x8c\xc9<\xff\x8d\xb2:\xc5=\x16\xf6\x1fm\xc2qH\x8b\x0" "\x88\xe5'M\x1f?>\xc8\xf8\xf2\x8c\x85#\x83\x45T+\xa4\xd5\x38\xff*K\x8\xaf)d\xc_\xa7" "\xcc\x8c\xd8\x9aG\xa0\x83\xdb\x93\x9n\xa8\xd4\xb9\x92:\xc\x6\x9a \xe0\x0 \xdc)oX" "7\x10'\x9e\xb6\xf4\x4\x16-\xa3\x38\x31?\xb4\xdbPU\xf0\xb5\xf6\xddK\xe\xcdnj\xe4\xbe" "e\xf4\xcb\x8e\xc6\xb1\xf7\n\xdeIp$V\xa0\x1\x31/\xecV\xb\xd2\xbb\x6\x87\xd6\x1a\xdd" "\xe\xf2\xe2x\xa1\x34Rsow\x81N'{\x15:\xf6\xfdO\xd9\x9e\x9a\xdc\x65&\x9a\x9e\xf9\xcd" "\xde\xa9\x89S\x89$D\xe1\xf4\x9d:j3u\xed\x9a\xcb\xd9\xa9\xf1\x10p5\x9e\x8e\x8d\x97" "R\x7f\xc8t\x5\x9b^\xa3\xb0\xa8/\xd7\xd9&]\xe7\x15>\xff\x41\xb2\x8e\x39wg\xe9\xd0" "\x93\"\x61\xf8\x39\xdd\xa7\xb3Y\xb0=M\xdf(!\xa8\x39\x8f\xe7\"\x16@\xe0\x35\xe4\x9e" "7\x1bU\x94\xb6\x1a\xda\xcf\xa5\xde\xe8\x38\x9d\xbd\xa0N\xe3I\x7*\xe5\x6\xc5\x19\xef" "C\xcd\x8c\x1b\xc9\xf\xc8ww\xd9\xbfo\xef&P\x88\xe\xe\xcc\x17\xc4\xd4\x8d\x1c~1\xdb" "_E\x5\x81\xee\xeez\xf6_f\\\xe4r\xda\x87\xbc\x90\xd3\"\xc0\xfd\x87\x8f\x81.\xbd\x66" "\xc9\xea\xa0\x33\xd5\xd9\x62/\x8fuI6\x10/\xd5\x14\x89\xab\xa3{rSe\xbc\xc3\xdc\xf1" "\x2\x30\x0\x6\x1b\xab\x41\x87\x37\x90\x1c\xc0\x15\x0\xe0\xdc\xb2\xb3\xbc\x19n\x89" "\xd1\x64\x62-\xab\xa2m1\xef\xc6\xb6)Q\xb1\xd2n\x15\xfd\x1b\x14H\xd7\xdcgP1\xb9\xc" "\xa1\x35\xe4%p\xb0\xa9H\xe3N\x1e\xd7\xe0\xe3\x6\x63mG`\xfbU5 u\x2\xfe\x96\xca\xc6" "\xb9\xb0\xa5-\xb7\xf0LA@\xea\xa8&\xb0\xf6\x84\x96\x88\xc4\xa3S\xadv\xd7\x80\xd0\xba" "\x8a\xaa\xaa\xd6\xd4z?\xd7vG\xc9\x15\x9a\xf9\x1e\x9bt\xcb\xfd\x38\xee\x17\x88\xcf" "7\xddl\x9c\xb7!\xa9v0d\x93Z\xce*\x94\x1b\x65\xd5\xb1\x1c\xa2\xec\x6\xcdp\xe@\xdd" "\xa9}Ss\xc5\xd4\xd3\xa9k\xda\x17\x3\xc2\x8\xcf\xa2\x35\x90\x9e\xc7\x9d\xfc\xff\xea" "(Nt;\x7f\x4\x88\xe7\xcbh\xfc\xc3\xe6\xc4\xf7\xa4\x9f\x94]\x85\x98\x89\x44'H`z\xcf" "\x89\xe8\xd2\xb2\x1ev\xde\xff\x12\xdf\x17|\xb5\xb7\x12\xf0\x38_2\x8f\x65\xd2\x38\xab\x8a\xe\xdc\xf6\xd6\xb8" "\xed\xa3\xb2\"\xdaT\"\xc0&\xdbq\x2\x37_x2>\x84\xfa\x86o\x1e.Q\xc5\x13r\x1d\x66l\x17" "\xa4\x89\xa2\xe0\n\xc5\xad\xd0\xael\xe4\xd4O\xde\xfd\x65\xdf\x43\\IE~\xc1\x41\x91" "5\x1c\x5\x44?4\x9e\x41\xb6\xb6\xeb\x46u\xc0o\x82\xbbU\x84R+\xf8\xf3\x16\x85H\x19" "\"\xacz\x1b\xd5\x1b\x86$:\x97\xdc\\'\xf\x7\xc7+\x9cZ\x80zj\xa7\xc3o?\x13\xf4LFI\x1f" "!l\xb1\xf;]\x1b\xc0\xe8M,\xc9[\xdd\xa6\x46\x19\xd8\xe9\xe0\xf2\xb9\xd1\xb3\xa5\xe8" "\xa9\xaa\x18\xd4\xeb\x41\x87#\x9e\x10\x10VkV\x1e\xf6\x13\xfaX*Kf\x14\x9c\x1b\x1e" "\xed\xed}\xba\xd6\xc2\xdc\xec\x39\x31_sZ\xd2\xc3\r\xfbv\xa9\xe4+s\x91-\x1\x8d?\x19" "\xf2\xc7~\xb7\xf9<\xe2\x43\x33\x9\xd7\xd8\x2\x94\x9d\x9e\xd4\xfa\x7f\xf6\xcd\xe7" "5w\xc9\x1b\xb2\xb0\x65\xea\x38\x9c\xe!\x4W\x98\x7f\x98\x14g\x9b=\xa6\xc4\xda\x85" "\x10\xcd\xd4\x46.$\x9a\xa3pH2\xc\xddH\xba\xcbo\xc8)o\x12\xaa\x31`)z\xd9\xe3l\x1\xac" "x\x7\xb6\x99\xe\xe7\xd6\x46\xd8\xad\x8d\x65Wc\xa2\xd6\x85\xaeV\xaf\x11\x0\x99\xec" "wJ\xc8m\xf2\xbc\x8c#\xd4\x4\xda>\x4'z\x14\xd2\x91\xc6\x4\x0\x16=VBr\xb1\x5\xc6\x17" "%\xbf\xec\x1b\x1e\xe7\xf5\xdc\xfdz\x10\xb1N\x1\x84\x97\x8e\x12>?&Y\xb\x32\x88w\x12" "C\xfc\x11\xa4%+\n\xf0-\xb6x\xeb\x84\x62\x16H\xe2[\xfc\x32\xe9\x42\x6\xc9\x8bzJ\xdf" ":\xf6\x35\xd5\xb5\x90\xc6\x6\xb4r\x99n\x7f\xfd&\xb7\xf0UK\x97QBG33\xa0\x61\xeb\xf7" "\x98g4\x1b\xd0j[\x5v\x1cYP\x87\xf2\x3I\xee\xeahE\xc8w\x85\xe7\x91\x17\xc3\xa9]G\x1e" "\xae\x9dSG\x97\xe\xccG3\x1c\xf6\xa9\x4<(\x83\xf4\x98x{\x90\xe6\x94\x9c\x8e\xf3\x11" "\xe3\xc9}X\xe6\xdd]\xeb\x0\xc8\x8cG\xe3\x91(:\x9aP\xbd\x0o\xe5\xa1\n:\xd0\x41 Cs" "\x93\xe8\n\\\xcaY[\xce\x1bz\xe0^\x6\x85\xdc\x0?\xac\x9a\x8e]\x86\xe,#%\xa5h\xf4\"" "*\xf2\xfb\x7fQF?\xc3\x5\x1a\xa6\x43\xb3\xc3\x6\xeb\xd9\x86N\x8\xd3M\xe7\xa9\xb4\x9b" "\xb6\x9d\xcfi\xdb\n\xd5\x4\x7\x86\x38\x3;\x14<\xf2\xb7\x30\xd5\x98y\xcJ\xf2gf\x94" "\xec\xf\xfa\xef=\x9dn\x4\x45\x94\xe\xacZ\x90" "+0K]\xe5\xc0\xb9\xde#\xeb)\x8f\x37t\xb1wS\x94\xa2l\x89\x63\xbd~\x7 K\x81u\xb7\xf2" "\xc5\x7\x32'\xa1m\xcat\xe4\xbb$\xca\x63\xc8o\xa6^mQ!\xa7)\rX\xa1\x1e\xc{\x98\xca" "~\xb6_\xd6\x36\xb2\xe\xf5\x61V\xbe\x14\x3\x8a\x42\xd5\x1c\x87=R\xa6V\xb1\xa5}\x8b" "\xdb\xde\x43\x5=\xd0\x96\xdf\xf8\xec\"+\xde\x65wl,F\xa0\xd6M\x92}\x8f\xfa\xb4\xea" "\x1e\x9e\xf1w\xa7\x11\xa8\x1f\x7f\xc6\x66\xd3\nh\x19\x96\xf1\x94\xe4\xd5\xc5\x33" "\xc4\x3\xa9\x32q\x6\x8b\x1\x99o\xe%\xe\x1\xc2\xee\x63\xfd\x1d\n\x91\x63\xbf\x8bg" "\xf\x97\nm\xd4\x16\xb2\xae\xbb\xc9m\xeb\x2\xd2~\n\x83\xde<\x87x\x1e\xda\xc6\xaa\xa5" "\xa0\xd1\xfdxw\"(\x97\x94\xd3\x5k\xc7O\\\x89\x9f\x64\x98\x8a%\xdcg\xc3\xf1M\xa8\x87" "\x1di\xfc]\x8c\xf6\xb0\xe7\xbcp\xe3\x98iBv\xc6\x9bw\xa4\x80\x19\x98\x9b\x93uS@\xe0" "\x0\xcc\xc4\xfa\x98\xcf\xca\xaa\xf1Y0U\x13\xa5o\x89\x87u\x8c\x97\x9b_\xbc\x87\x94" "\xca\xde\x87m\x81\xe4\xec\xf0I_2\x9a>\xc2\x92~\x95\x9a\xec-&\xc1\xad\x32\xa3\xd1" "\x11\xd0\x1d\xc\x93&$\xb9\x4\xda\x42\x12=DB\x1c\x84\xbcq0z\xd1=\x0\x41\x30\x8f\xab" "\x8d\xe\xe6\xf9\xdetd\x0\xaa\x4\x1a|j\x99\xa7#\x0\xa9\xb9\x11\xfds\xf0\xcf.\rA\x92" "\x12\x32\xf2\x43\xec\xa8g'wh\x90\xbd\xf9\xd1\x38u+\xb9'\xb6H\\\x1b\x45\xb9\x41m\x10" "x\xa7\x3K\xa2\xb9\xfb\x1c\x7f\x9c\xb5W4\xf8}N\x1f\x8\x1d|Jf\xb5$\xb2\x42z\xba\xba" "^\x91\xc1\x31\x89#i\x9a\xe3\x82\x6W\xe8\x9a\xc8\xc7S\"\xf0@\x17\x43\x9c~\xc5>\x18" "\x91(\x88.v\x1b\x3\x63\x93\x8b\x7f\xaa\xe\x64@\xe1\xb6\x97\xdb&\xdeO\xc2\xb2\xf3" "\xe1u-\x0\x7X\x97\x82\x92\xda\x3\xc7\xfd\xdd\xf1+_\x11`g\x98\xa4\x1kubp\xc1\xea\x9" "_\xca\x4\xef\x36\xb1\xa7*\xa2}\xa0M-\xc9\xf3\x8\x43\x13x4\xa4\xb3\x39~\xb8\x7f\x10" "v1\xbb\xab\x8erO\x0\x14 \x91\xb5X5z\x7S\xbd\xd8\x85\x98\x87{JP`x)!\x86\xa8R\xf3n" "8\xe6\x6\xb1.\xad\x12\x0/\x2s\x10\x8cYM\x86\xd0\x42y($'\xed\xd4\x9f\xc3\x32]|\xde" "v\xe9\xe5\xe\x17\xc3\xea\xd4\x8d\xa0\xb5\xb3@\x9d\xf1\xe7\xb7\x11\xdej\xc9\xcd\x1a" "H\xb9\x7\xe0\xe6\xfa\xb8\xdf\x98x/\xdfH\xdc\x44\x43\x31HBC\x4i\x92\x42\xce\xcf\x9b" "\xb4\xd6\x99\x11J\x95\rS\xc7\xd8\x16`\x18\xb0\x8a\xb5$m\x83j\x6\x33\x4Zl\xf\xdfs" "@\xabs\x9e\x4\xab\x89(\xff|\xe6Huh+\xc5\x14&\x18\xc2!\xce{l8c\x7f\x5[w&[u\xd4\x16\xe1U\x91\x33\xc4" "\xb9\x11\x9b\xf6\x9c@W2\xb6\x1b\xc6i\xbako\xbb\xea\xc9)\x8c\xee\x1f\xce\xf2kA\x89" "I\x90\x86\xd2\xdb\x96\xc8\xaf\xb5\x34\xeb\xcf\xf7IAw%*\xec\xe0\xb1\xb9h\x9b\x7f(" "I9#\xa6\x1m\xcf\xa0\xee\x1P%\xf8\xbf\xc4\xea*)):|[\x83\x42\xf4\x44\xdb!Z\x9evRp\x9a" "g\xb1\x9f\xa0\xbd\xa6\xa2\x89\xa3\x94\x39}T:DL\xe4w\xe5\x43\x41\x43_Nc\xf9\xd1X\xd8" "\x12\xb4\x34\xf9\xf5\xec\x1e\x9f\x8e\x1dSB\xa2\x8c\x9b\xe4\x94\xb4\x95\x1\xc6\xf9" "\xef\x34\x9c\xf2\xc0\xd2JbD\xa3\x65+\x90y\xa1(\x9b\xa7\x3\x1dM\x97\xde\"]\xf6\xec" "B\xa8\xdc\xf1>\xd3\xa3uq\xd6\x0\x99\xd5\xdfgv\x9b\xee'\xa1\xb2\x18\x19\x8a\x36\x65" "\x93.\xfe\xb7\xfe!{C\x14\xd3\xa4\xd7\x99\x1b\xefj\xa5\xff\x8b\x80\x19\xa5\xf3\n`" "\x9f'\x99\x80\x45\xa2\x7\x8\xb9\x66\n\xe8'\xd5\xac\xca\x4\xe9L\x0I\xe0\xecW\xaa\xe4" "\xc0\xe6\\\xcc\xbb\xa8R\x88g\xa1\x86\x36\x89qe}W\x96\xc1\xcb\x1c\n=,S\xd8\xe2\x15" "\xe0\r\xad\x14S(#\x89\x97\xa7\x1b\xaa\xaes\xc2\x1a\xfc\x81\xc5\xb7\x19\xeb\x10\xdd" "\x8b\x9e\xe8\xf3\xec\xb7y\xa3\x94\x5t\x1b\xfc\x7\x8b\xcc\x99ZO\xc2n\xb9\xd9i\x8f" "\x6\xa0\xf8?\xc\x0T,\x85\xb7\xb4\x82{r \xb0q\xc8\x81\x94\xd0\x33\x1a\x35\x31\x9b" "c\x8a\x66\xed\xd7\xbe\x30\xe8j\xa1\xbf\xf1\xd2\x9b\xe\xbc\xaf\xb9h\xc6\x8fj\xc5\x17" "f\xb7\x4\x80\xf1[K\xe0\x30\x1a\xc6\x9f\xc8\x45\x9c\x39\xbf\xdd@\x15\\\x14\x1f\xaf" "\x8f\xb1\x12;m\xc2:t\xf7\xcb\x86\x35$\xb9q\xea\xea\x15t\xc6|\xf\xd7\xbf\xbc\xbe\xd4" "\xb9\x94s\xe0}\x8d\x41H\x11)\xfdU\xb5w\x91\x88kbo\xb\x1c]\xcd>\x5\x0\x86\x1a' \x95" "\xb1\xea\xc0\x96\xbe\xc7\xf2\xddS\xb1\xe4\x89\x1d\xde\xf5\x41\n\x63\xce[\xf7H]\xfe" "\x80\xfb\x96\x15\x94\xa8\x33\xc8\x1c\xa8\xa5\x81\xe6Ww\x18\xeVp0|\x9by\xca\x97\xff" "8\xbc\xbf\x6)\x95\xbd\xad\xbe]\xdbM\n\x90\xa5\xde\x1f\x35G\xd8\xcf\xa9\xec\x14$\x85" "\xab\xa9MY}\x13\x87\xb9\x37\x39_\x13n>\x93Ksd\x9d\xc4\xbdX|xPH7;I6\xe7\x37rJ\xaf" "l@\x7f\xc5{\x8a\x1b\xe3\xf7#\xfaOJhQ\x1d\xf9\xf7\xb7\x1ckpe\xc1<\x15\xfd\x11\xff" "tivG\xdb)\xdc\xdd\xb0vX'IY\xe8\xb5\x11\xa9\xb3^DeA\xd3\x9c\xff\xe1!2\x9a\xb2\xd9" "L'\x9\xe0\x8c\x13\x89\xffz\xfa\xd2ucP\xbf,\xcb\x35\xf3\x42(\xc4\xee\xc4\xee\xe5\x65" "iA\xe2\xe8g\xad\x1d(Tu\x93\x9ciP\x92\x9b\x33\xcb\xfb\x30\xc5\xc\xd4\xb3+\xdfk\xb2" "V\x90\xf3.\xca\xbe\x1aq\x93-\xddo\x19\xa3\xb6)\x17=\x1a:$0\x83\x96$L\x85\x7\xe4r" "\xf6\x39U\xcb\xa6\x93\xfan\x18\xb1\xc6\x1e\x80\xd5\xfey\xa0&h1E\x8a\x37\xe4\x39\r" "D'd\x94\xdc\x3\xce\xf7\xde\x44\x93?\x1d\xb9K\xb1\x95\x8d\x8cw\xcb\x65\xb7V\xafK\x87" "\xb1\xad\x13\xc6\x43\x9eO\x98\x3\xbd\xb2\x64\xd6_\xce\x94\x16\x89\xb}\x5N\xb3\xd4" "L\"MR\xdb\x95\xd8\x3\xd1\xcf+U|\x0\xf2)\x81\xfa\xff~\x9d" "zC\xb7\x8b!\x82\xae\xd2[X%\xb0\x37\x94\x94\x89\x46\xd3\xb\x30\xca\xc8'C\x80\xad\x33" "\x6]\x14\xedJ\x3\n\xe0\x5\x33\xc0\xe0r\x85\x90\xef\xee\x41\\\xac\xce\x63\xe8\x14" "\xa0\xfdT\xbf\x98\xb2\\\xdd\xd4\x12\x12\x61\x7f\r\x39\x88L\x86%\xcb\x19\x5\xae\x42" "\xdap\x1b\x3o`h\x7\x11\xee\x85\xe5\xf4}\xc0V\x4X\x90\x15k\x14iiB. \xf8\xa2\xa6l\xc4" "\xa6\xf6\xfa\xbd\x6:\x16\x8f;\xef\x11\xd6\xa3i\xf1\x41\x8b\x84\x14=q\xd3\xcm\x96" "_\x18\xabO\xc0\x89\x87H/\x83\x13\x8c\xddo\xb4\"jI\x8\xfc\x9\x1f\"\x9c\x62\x65\x17" "\x1f\xc\xb5#(`\x80w\x93 \xb3\rK\xd6x`>\xcc\x91\x61\xad\x8c\xb5\xa5\x1\x83\x32\x87" "\xba\x6|\x97\x3`\x80\xc9\xc9;\xcc\x12\xd6\x90\x13p#\x2\xc7\x5\xda\xc2V\xd7\x64\xfe" "o\x1d\x1dW\xb0\xc5\x8e\x80n\xb4_\xa4-\xac\x9fg\xa7\x9d\xf2\xb4\xe9\xe3\xef.w\x9d" "\x0\xa7\x7fy#\xd8\x66\np%:?X\xed\xbe\x1dK\xd6\xb9\xe8`n\x9e\xe9\xc\xcar]\xb8R!b\x87" "I\xc0-\xdd\xc1\xb2\x9b\x64\xee\r~,FI\xd9r\xf5\x4\x7f\x9b\x37nI\x8bz\xc2\x8a\xc6\xd9" "\r\x1e\x34H<$\xf1tca\xb6\x12v\xf1\ro\xc3\x83[G\xe2\xfe\xf1\x43\xbf\x95\x0\xb9\xb8" "2F9\xa7\xaex\xb2\xdf\x88$W\xc4\xd3\x99\xe5\xfe`Z\x96\xc9\xf6\xdb]\xe2\xcb\"\xc7\x11" "\x9a\xec\x39\xbe=\xc6\xc2\x8\xed\x1f\xe6\xfa\xe4\xe1\x1d\xd8\x90Up\xec\xa9|C\x8a" "\xcd^\xb7\x41\xfd\x8b\x35Ud\xe3iqIe\xa6.\x86\xf9\x1d\xf8\x10nDE\xd4\xd9Y\xa7\xb9" "\xc-\xcc\xdf=\xf6\x1c\x9f\x4\xc\xff\xc7\xbd\xe8\xc4\xdfPPT$+\xb0\x1e\x98\xb0W\xc6" "K\xf6`3Jz\x1\xdf\xb2\xf1\x43`l\x7/\xd1\xb4j\x5L\x9e\x62Vv|M\x8a\x93\xf0\x61\xad\xca" "\xfd\x45\xcH{\xd8\xe6\rk\x2U\xf5\x88\xc8\x4\xdf\xef\x12\x8bM\x8d\xcck\xdc\xfcT\xda" "U\xe1\xe3\xdb\r\xcd\xd8<\x1a\x94s\xdd\xf6%\xb0N\xf8\xca\xbf\xe7\xffy\xd7\xad\xec" "\x16\xcf\xb8\x36Z\xb8t\xf0\xda\x37\xb9\xc7\x93)\x1b\xcd{+\x9f\x35\x41\xb1\x85\x10" "\xcbz\xde! v\"j\xb0\x0\xbd\xeb\xc4\xee\"\xbc\xdd\x9c\xfel\x14\xaf\x1a\xe4\xb5;\xa2" "~\xba<\x85\x61j\x80\x86^z\xfd_\xcb\x87\xf5\xa6!g\x8aU\x83\xd6\x9at\xc5\x1a\x61\xe6" "LJ\xa8y$V\xcc\x9d(\xa4\xae\xec\xa9\xfeGd\xf9\x82\xe5&rJpw8$\xf9\xdc\xbb\x91=\x87" "\xab\\\x45\x1f\xd8X\x15O<\xecMh?\xb1\xa1\xf3\xd7\"t\xf4=\xb4\xb0\xa9\xfb\x32\xe1" "\xe3\xed\xc5\xb2\xabM\x19\x1\xf\xec\x11\xe3I\xcc\x96\x1e\xf0\x16\xab\xbd\x36\x81" "\xd6\xb8\xf3t\x9d/n\x19\xab\xba.-\x8b\xc2\xa6N\x92nZT\xd1\xbd\x86\xb5\x9aT\x9\xd5" "\x89G\xbb\x1u\x97w\xe8\x92\x45\x7\xae\xee\x61\xbb\xe3n\xba\xbc{\xce\xd4&\x93R\xbd" "\xe9\xda\x7\xc9\xb0U\x14R\xf2\x2z\xf0\x1c\x13!\x8e\x9a\xfe\xc7\xc6\x84\xf8\xa8k\x11" "\xd4\xe3\x3\xe1\xe9\x84u\x8dt\x87\xbf\xd5\x96S\xee\x86\x99\xa9|W\n\xe0\x91O\xc2\xa9" "E~%\x1a\x9a\xfb\xa9MAW'\x9c&&\x2[\xc7\x9b\x18\x93T=\x1a\x35\xc8\x66\xff[\xc3\xc0" "!$\x1e\r\x16\x84\xcb\x16\xb3\x88Z\xf9\xd2\xf0\xa2\n\xb7[\xc5j\xedR-N2(j\xae\xfc\xc8" "\x2@-l\xc6\xb!)\xba>\x6\xa7\\r&\xbd\xd4k\xed\xb2\xb5Yb\xb5\x86\x37\x8f\x16\x8b\xa9" "\xfaJ\x9\xe6\xa9\x10\xa3_W\xfep\x80\xe5\x32\x90Sz\x83\x7\x8P@P\xd7y\xd6\xd6\xa7\x46" "\xe8\xf2\xf0\xae\xda\xcc;.\xb0\x34\x17W\x90Y\xce\xed\xe7;;\xc\x61\x1fW\xcaM\x10." "\xad\xea\xe2\xb4\xf9\x61\x12p\x96\x9a\x45\x43\xb3G1i\xce\x8b\"\xd2\xfe\x62\xb2\x41" "\xf6\x61\xe0vq\xd8\xc2\xd9]TD\xb9\x5\x61[\xa5\xb4\xc2\xccyH\x89*,j\rw'\x1c\xb6\xf2" "\x84\x7\xea\xba\xd0 .%\xd8@\xf\x0n\xe3\xf2\x41\xf5\xbe\x1fH\xec\x0GuF\x97\x17\x65" ";z#o\x87k.\xdd\x88\xd4\x33\xd4\xb8\xed/G\xf7=\x96J\x9b\xab\x3\x8c>A@\x0\xc7P\xec" "\xbe?\xbd\x39\x2\xf8\xd2O\xd6\xcaR\xd4G\"pS\xe3T\x9c\xcd\xc4\x9f\xea\x46\xec~5x\xec" "rG\xf7}\xfa&Z\x0z\x1b\x88\x9d\x36\xe5\x5\xf7\xbf\x8f\xab;h\xe7m\x9b\xc0\xeT\xda\xbd" ")\xb1\xb3\xd9\x7t\x8c\xa1\x34\xf0g#\no\x8a\x7\x9c\x8d\xaa\x81\xb2\xbd!\xa7\xab\x19" "\x99ZD\x7fn\xee\x35\xe6\xd8\xc5\x3\xcc\xcfg\x9bl\x8f\xcf\xac\x7\xc3\xa8\xee\xc2\xca" "\x9dQ/Z\xf7\xac}\xa2\x8c\x39\x1f\xa1q\x15:9\xcanG\xc\xa7,\x81;\x84.\xfc\xda\xb6\x32" "\xf3\xa3]'\x8eHxj\xdf\x30\xc6q\xa5\x0\xdf\x99;L'\xd7\x8f\xe6g|'\xa5\x89\xba{R\xd0" "\x1c\xf\x89\xae<\xa6\x94\x41\xd0\xcf\x32Q=b\xe6S\x90\x8c\x0\xfe%\xa2J\xcM\xce\xb1" "\xff\x98\xb0\xa4\xb7\xa2\xf5\x9,\xad\x2\x8f\xc2\x16\xb7\x1e;\xd4\x99\x14\xc6U\x81" "\x1b\x46\x88i\x85\x38\x38\xc9\xcb\xc\xaeZ\x95i\xcc\x97\x89\xdb}R\x91\xf2\x9?o\x2" "\xc2\xaa\xfe\xba\xfe\x8fk`'\xae\x4?~\x9a\x6\xe5\xe0\xc7J\xe9\xc1y/\x88wg\xf\xf1\xdd" "\xbd\xc4\xd3\x32\xb8ob\x81X\xf6\xf0\xd9v\xd5j\x12s{!\x9eV\x15y\x1i\xd2\n\xa7\xca" "\xa6v\xa8\xf1{i%\xb1\x36\xbd\x18\xed#L+\x96\xe9\x93\x34\xc0\xdc\x4\x2kW\x9cZ\xa4" "\x7\x88\x13\n\xa8\x4\x34\xe\x62\xdf\x9c\x85\xec\x99n5\xc4\xa9\xf9\xf4\x9b\x81\xd5" "\xc8|\"F\x11\xa2\xd9\xd5\x18.\xf8]\x1\xeb*\x7f\x9a/\x9f\x96\xd4]S\x8a\xfc\xef\xae" "\xacr\xe2\x36\x1b\xba\\J\xc1\x61\xae\x12\xf1\x65-\x1f\xd8\x42V\xaf\x1a%\x96\xe4\xcb" "\"}[\xe5t\x81P\xf1\x37\x1d\xaa\xe\x4\xa7\x85_\xf1\x91\xe6\xc2\xe4R\x1fVP\x80oTEF" "V\x14\xaf\x80\x1eO\xac\xe7\xa7\xa1I\x89U\x1bj\x0IY5\xed\x1f\xf4\x17*\xbf^x\xf5\xa0" "\xc3\x1e\xa6\xb7\x7f\xb9\x30\xd5\x8d\x80\x8fG0Zj\xc\x98|\xd6\xb2\xd9;\x1~\xcb\xfa" "W\x7\x1Q\xf1\x8UL\xfb\xbc\x6\x9b\x9dQ\xcd\x37/m\xbb\xb~\xf7\x8e\x65\x4\x46\xb0\xe7" "\x16\xf0\x9a\xbb\x1f\xf0\xcc\x1f\x81\x46\x64)t\xaf\xc5\xed\x85\xe5\xe8{\xc9\xb0\"" "\xc1\xa1Mr\xfbY;\x9e\xb7\xe4\xf0\x99\x85\xe\xb8\xab\xbf\xec\x11\x8ai\xad>\x17\x8e" "\x8b(\xbc+\n\xf9\xba:\x8b\xa6\xc4\x15\xfbU\xd1\xfc\xa1\x17\xb8\x37\xe4\xc2\x65\x9e" "\x86\x39x\x9c\xc3XY\xe1N2\xf\xdb\xc3\x99\xdb\x88\xfb\xa0\x95\xad)\xb0\xfb\xa7\x8f" "\xec=\xa2S\xe5Hrm\x96\xac(\r\x98\xb7\xf4]\xfa\xa3\x1b\xc5=/\xdc\xbb\xad\x10\x63\xad" "F,D\xea\xb2\xaa|\xc8\x32\xec\x1f\\\xadp\xe2@\x9d\xfb:H}\xdd\xfd;6PL\x1c\x85\xad\x4" "\xd1\xb4\x10>\xbb\x92\xa3\xf8\x1\xc8\xaf\xb7hWU\xb2\x66t.r\xaa\xfa?\x87|G\xc5r\xbc" "\x96\x9a\x18\xa7\xfb\x80K\x16\x43\n^\xad\x8b/\x7f\xdf\x9f&\xac\x92(\x84\x90l\xc1" "\xeb\x17\x15\x86\xdc\xb7\x92\xb2t\xb2\x13L\x4\xf7Y\x9d\x87\x17\xb0\xee\x5z9\x89\xa7" "!\xeb\xca\x30\xaa\x85\xd3\x1a\xb9\x43yp#\x6\\_dF\xa8\x91\x1d}\xa2v\xe6\xec\xb4V\x9a" "\x9e\xbe]o\x18\xb1)g\x16\xda{G\xdb\x14\xc3.9\x83=6\x1e\xcc\xc8\x11R\x13\x94\xcc\x38" "\xb4}&\x9bk\xb0O\xb\xd8\xbf\xfb\x63\xcd\xb%\\\x96\xc9\x8a\n\xc\x46\x5\x65\xc9\xa0" "\x88\x90\x0Q\xfb\xc6\x62\x34\x1\x32\x45\xc1/\xa4~\\eY\xc5\xc1\x90*:<\x19\x35\xce" "\x9ax\xe4\xf\xcd\x17\x86=\xc6\x93\xeero\xb7\x88L{}\xe5\xa6v\x1ciBK\xf9\"\x43w\x9f" "\xf6\xa9\xe5\x66\xaeSr\xadZJM\xe\x8c\xed\xa9\xe\xa1-\"W\x9b\x1_ln\x9dTE\xfbU[E\xbf" "(\xc\x3\xf5\x4\x9d=\xb3h!q\x1c\x8a}\xd5\xe7\xa2\xc1\xcd\xe2\xb3|\x80OP\xfe\xdd\xae" "\xaa+\x8a\x2\x9b\xf4{N\x91}Y4\x18\xa2\xe7!8@\xe7\x9f\xd2\xd1\x61\x0\xd8+v\x95i\"" "\xfb\x93\xef\\\xb7\xa1j\xfe\x18\xcc\xcak\xc8\x9c+d\x3\xb3\xa1\xce\x8a\xbc'h\xd8\x92" "0\x5<\xb2\xc1>92,\xa4\xe4h,\xe1\xf3\xeb\x9c\xa5\xdd\x64(\xb9\xba\x1c\xcW;\x9b\xac" "\xaf\xdf\x8a\xa1)\xcd\xff\x32\x1a\xdf\xd5\x14\xb2Yj~\xe7\x36q\xd8\xcf\xdf\xfa`\x14" "\xdfq\xa1K\xcf|$o\xca\xc1\x19T\xc4i\xa5\x8[\xcbXeE^xD\xf8\xa4\x11:\xeat\x98-\x1e" "\xc5\xe0k\xc8\x8b\x6V\xaam\xceo\xf1\x94\x91\xd0\x33\x1b\x9e\x12\xd3Hb/\x11\x89t>" "\x97L\x19\x3\x4(\xd9\"\x43!\x6<@E]\x14 a~\xe0VW. r\xab%J\xf4\x33\x9b\xc9u\xf9^f\xb0" "\x93\xfb\xe3\xce]k\xd5\xc6\x1\xa7\xec\x41\xbe\xa5#I\xf9\xfX_\xc5.W\xdb\x9f\xed\x41" "\xc6\x10n\x15rL\x8d%\xe9\xa9*\x97`G\xe1L\x2\x83\x98\x1c\xd5\x32 V\xcLGy\x85\xe5\xff" "\x9\xddW\x86\xa3\xd6\xb2\x3\x37\xea\x6\xe4\r\xdd\x15\n\xed\xa6\xe7\x41oC\x9b\xb8" "\x18\xe2g\xa9p\xa5O\xbd\x46\x8\x8e\xa0,\x1e\x8bh\x9d\xf8\x1e\xd5\x17\xa2\x37#\r\xf2" "6\x9a\xcf~\xe9\xce\x6\xc3\xe2N\x83\xa5\x62\xc\xe4pG\xc7%\xfboW\xa1&\xd5W\x81@lg\xb" "\xa0\xdd\xe4\xce\xdb\xb7\xb2\x8c=\xa9(\xb6\xb8(\xef\xda\x0\xf2\x1b\xdc\x87\x63\x8a" "k\xb5\x9b\x12\x9fP\xaay\xff\xef\x5\xcd\xdb\xe7\xf3kY\x97\x88\xd9\xb8\x13\x80W7\x83" "\xdb\xde\xdd\xd0\x8bW\xaa`\n\x8c\xf8\xa2\x94\xfd\xda\x95-m\x1d`\x98\xf\xea\xdd\xb0" "\x90Q\x17\xf5P!\x98\x18n\x8aW\x1\x9d\xe9~\xd3\x36\x9c)\xd2\x17\xfa,\xae}\x94\xa8" "*\xcd\xdc\x8a\x32\xbc\xfe\xbf\xdb\x16}U.\xa8@\xb9\xe8\xb2h\x9b\x3rI\x7\xbe\x1a\x8f" "\x97\xbaN\xd0\xe0\xfd\x98%y_\xdcTd\xa4]6w\xfc{\x14oo\\f\xd8z\x7W\xdf\x35\xd1^\xad" "\x8c\xadL\xcf\xe9\x86Y\xb6\xc5\x81\x1d\xe8,\xf5\x64N\x0\x43K\xcb\x8b\xdc\xda\xc7" "\xcf\xc5\x17\xcd\xc4.\x8bu\x84\x94\xb6\x93\x9b\xec\xc2\xd6\x42\x66\x2\xf1v\x7\xfe" "\xb9\xa7\x18\x36\xb1\nY\x80^\xc4\x30\xfbn\xfcI\x17P\x10\xcb\x9a\xb1\x95>\x90l\xf6" "o\xcd\xe4\xd2R\xa6\x83\xcf\xba\xc8\xf4\x1e\r\"\x1e\x35\xfd\xa9\x6}\xec\xaaq\xda\x1d" "C\x93\x80\x33\x92\x45\x9\r\xf4\xe2\x1d\x81\x84[#?d\xad`\xddm@F\xb1\xa2W\xdb#\xe6" "\x82\xd0\x66\\U/\xd3\xacn\x95\x65\xa7?\x8f\x91=\x84\xd8\x62s\xc5\x7f%\x14\xb2\x89" "\xbfQR\x87\x98\xefL9\xc\xb2'\xa5g\xc1\xb0\x16\xe7\x1f\x2\xbf{\xf0\xae\x89I\x9d\xe5" "=\x7LJ\xe4\x95X#\x17\xa5\x9c\xf5\x94\x7f\xc4i\x5\x46H\xb8\x81u;\"\xf6:\xb9\x36\xc8" "b\xec\xe5\xab\xfa\xfc\x1\xe0\xab\xdbL\xf1\x63&y\x11\"\x9c\x36\xdd\x1d\xf0\x42\xac" "\xf9\x32\xf1\xc5\x87;\x5\x91\xc2oWl\xad\xccjS\xad\x63~\xb1\x1c\x8c.\xe6\xcc\x84\xe1" " @%\xa9(\x90zY\x1a\xe\x8n5L\xf1\xf5\x83\x5IS\xaa\xeb\xcfN\xf8\x9cN\xb2\xc3\xf0\x1f" "@\x9e\xfe\xf3u\xcf\xd8\xed\x93-n\xc3J\xc9\xabk\r\x95\x84\"\x63%\x9f!\xdf\x66\xde" "]Z\xe7q\x88]\x85t4\x9b\x89Yt@}\xe4i\x5\x8c\x94\xcc]^\xcf\x94\x99T\xf0\x80\x1e[\xe8" "\xde\xdb\xac\xba~\x89?\x9a\x14\xe2\x11\xe2^\xb9\xa8\xd4&\xdd\xd6\x92\x66\x9fx\x5" "D\x17\xba\xf8\xdc(*\xab\xd7\xef\xb1H\xde\x94\x15\xb5\x63\x46\xe5Z\x8f\xc3\xe5)ms" "\x9e\x83v\x97\x31\xc4\x8a\x95\x31\x8d\x95\xebI=\x0T\xb9\xd5\x88|5\xcf.L8\xeP\xe1" "\xbe\x66\x90\xc5\xf6\xe9\xe7\x1\x8c\xda\x11m\r\x8a\x98=C\xee$dV[\xf8\xc1\xfbVa\xb7" "X8\xd1\xc1\x82>\xae\xcb\xd2\xed'!\xfc\xc3SQn\x94\xf5\xca@\x13\x9b\x8ci\xf6\x9a\xbf" "H\x9f\xd3\xe0\xd7\x6lZr,\xf5\xcav0s\x4\x1b\xae?\xe9\xff\xac&\x1fuE{\xa5\xd0\xf5\x46" "\xee\xc5t\x1aw\x0X\xb2\xe8\xb7iX\xab\xe5\xa2|\xde\xd4\xa8\xd1\x90\xad|\\S\xb5\x1e" "2\xc1\x5\xf4w=\xaf%\x9em\x1b%\xe9]\x8c\xb0\x1\x80R;Q\x80u:\x18\xe7\xfa\xac|G\xfe" "\x9cJ\xa7\x19\xea!n\xfa\xda\xecR-\x1d\xf9\x6\x32\xe5O\x8c\xca\x66\x96:]\xb7\x84R" "\xdf\x42iEy\x8b\xf\x91Q\xa9)W\x15%\x99^\x15\xee&8\xc7K\xdau\xe8\x14\x1\x61\x1a\xa4" "H\xe9\x36\x14\xd4\x84\x1a\xb[\xe4\x1\x98\xa4L\x5\x8d\xdf\x14\x8\x98\x81g?c&\x82\x1" "\xc1\x99\xdeP\xebH*\xe&\x87\xf0.\xd9\x9d\xe1\xaf{,@\xef\x8a\xe4>\x84\xf7\x99#\xbe" "\xd8\xdc\xa6\x13-v\x2\xbb\x1e\xa2;\x10\x46\x96(\xc6\xc2\x63\xac\xba\xfb/\x1b\x9a" "\xe5=\xf\xc9\xec\xdc\x64\xf3\xb9\xd5\x13\x61^\x1b\xaeT-\xd4\x7\xc6h\xd3\x8b\xcf\x1f" ")\xc\x82#\x4\xaaI%\x1e\xd2R\xf0\x36P\xee\x62(\xe\xd4\xe1i\x2\xca.\xdd\xb2Mq\xe4\xb1" "f\x17\xf4G\xc6\xbc\x90}\xb1\x87\xa0\x1e\x9b\xe9\x1aG$\x81\x61\x36\xbe\x46\xee\x38" "\xa4\xcf\x91\xcf\xf5\xf4j<\x19\x95\xc1" "\xd3\xfe\x17\x16\x7x~\xe0H\xf6J\x17\xea\xe6\xaf\x90#\xe9Wo\xb4\xca,\xee\xd4]\x91" "\x95\x65\x10\xb8N\x7{\xc6-\xdaHwv\xa2\xa2ie\xd1o1\xd1\xea[\xf\xc1W\x1\x38\x89\x16" "\x80+\x84SP\x10\x7\xd6\xce\xe7\x95\x32\xbc&\xc3\xda\xa5\xa2\xe0]\x8a\x17\xf4O\xa7" "\xfdL\x2\x66^\xd1K\x93\x9e\x8b\x85;08\"\xbc\x1b>\xc5-\xbb\x8c\x88\x85\x2\x7\xea\xed" "\xe9\x17\x66;\xb7Q\xe0W\xb6\x90Ih\xca[\x86\x85\xc5\x84\xc1\x1b\x9c\x98\xed\xa0\xc7" "\xcf\xa5\x31\xa3@\x9f\xc0\xc7\x66L\x95K-{|\xed\xdf\x9b\xb4\xbc\xdf\x14\xa3\x41\xa8" "\x10\xffI\x82\xd9\xa4:\xdb@1MVY\xfd\xc2\xc7\x90Q\x1c\xc0\x85W\xe3P\x11\xef\x1c\x0" "\x5\xe\x93\x82\xc5p\xd7\x16\x19\x80\xc0\xe3S\xfb\x17\x85\xcf\x9c\xb6\xa2\xa4\xe6" "\xb5\x82 e\xac\x84\x91*10\xa1\xa8\x62\x7f\x98j\x95G\x1\xf8\xa4~\x8a\x9d\xa1-'N\xe9" "^Q\xdc\xbem\xce\x62.\xbf\xf3X\xe6=A\x9d\xed\x6\xaf\xff\xd7\x14vaV{h[2\xe1\xc1\x7f" ")=y\x17^\xd1\xdf\x33\xd1\x0\x82\xe3\xfQ\xcd\x8b\xc8\\~\x81}\xba\xba\xe\xa6\x3\x41" "\xd3\xe0\xab \xbe\xc2\x87?\xd3\xd1[\xba\xe3{K\xa1\xfd\x32\xd0\xc\x13#\xbej\xa6\xcd" "\x85&\xcc\xb2\xfa`\x18\xe0\"\x1b\x84\x42\xe1\xe1\x86\xf4/I\xe7Hfk\x1ag\xdd\x61#i" "\xc1\x9a\xfe\xcbY\x8f\x1f\x46\x1d\x45\xd4\xac\xf5\xb6\xfb\xd0\x12@\xc4o\xe3[\xf9" "\xf9`\x19\xfb(\"\xaeM\xa1\xac\x88\xe6\xd9\xa5\xa4#L\x92\x84\x31\x84w\xbbR\xb0\x6\x12\x95:\x9a" "\x8e\xbb\"\xbbt\xec\x37\xb9\xe3K&q\xcf\x85\xebV\x1b\xb2\x9f\xc8N\xa3\xd8\xb8J\x92" "\xcd\xc6\x31\xb\xcf\x9eVC\xf4\xb4\xecU\x8f\xd6\xabO\xae\xe1\xaa\x15V8q\x16\xc8,\xfd" "\x9f{^6j\xaf\xbd\x36[\x1e)\x13R\xf5\xa7|\xd1?O2\x3\x8f\xc8\x65\xbe\x94\x2\x92\xa3" "\x11M1p \x1a.\x1a\xf0\x5\xe1\xd1v\xecW?3\xe0\x34?fVyn\x1f\x2\x16z\xcd\x81\x37\x8c" "\xbc\x3\xf1\x86\x99\xb5\x35\xff\x63[\x80\xbc\xc4\xb4I8\r\xa8\x30`\xfb\x7fw\x3\xd9" "N\x19\x94\x1a\xcf\xec*\xe9\xdd\x11\xab\xf8]\xa4\x9d\x99\xf3\x8d\xa1\xe7mW)\x91\xaa" "\x89\n\x8bl\xb7\xf9\x17O\x14\x45\xc5\x92jFff\xfa\x8e*\xba\xae]z\x16\xdf.\x91\xdc" "\x3\xf0~.K\x90\x17\x31\xd6\x9b\x7f\x84:\xa4\x1f\xd2\xa7\xdc\x2\x9c\x43Q\xe\xf3\xf7" "\xd6\xb8 r\xbb\xbcM\xef\x97+L\xc2\xfe\xe6v\x99\x10\xe2Qg*\xf8\xfe\xbe\x1{\xa7m\xb5" "\xc2\x1bWi\xb6\xca\xb6\x13\x14VR\xfanW| \xe3\x44&\xc2\xc9\x2\xc5\x39\x84\xf2:kV\xf4" "0 \x0\x1c\x39\no\xd6U\x2g7\x8f\xe8\x9K\xaa\x64\x8br&\x88\xff\xaa\xdf\xb0\x8c\xf3" "0\xd0\x96\x98?nC@\x85\x33\xb5\xea:R\xf\x89\x44>\xb\x88\x19\xb7\xc1\x18g\x5\x1\x89" "\xb6Y\x11Z\x9a\x19\xe8\xf5\xbb(\xf2}m\xee\x19\xfe\x63\xfc\xbe\xa0o?\x1d\xed.\x81" "\xfcOI=\xbe\x6\xe2gB\xab\x96\x1d\xba\x19]\xdf\xe8nI9\rp\x94\x0\x8a\xc5!M1\xc4\xfe" "\xaa$j\xbf\x1a(Se\xed>e\x4*\xd9(J\xb8T\x86\x43\x34\x8\xb9\xad\x90\xf2\x45z;b\xb6" "\xfd\x99\x7?\xb:\x11k\xe3\xbbjV\x8e\xc2{\xab\xabZZ7\xd1\xa1_\x97\xe9\xe0u\xe1\xff" "\xa1\xa9\xbe\x38\xbf\xf6N6kVS\xd0\xf2\x90\x1a\x38\xdc\xfa\x9bz\x95\xa9\xa6\x61\xbe" "\xf4\xdf\xee\x91\xe6\x8d\xd6\xa7G\xc7\x12\x96\x34\x15\x30\x9f\x95\x12\xa7_\xcc\xb6" "\x8e+S\xb4\xff\xe5\xaa\x14\xc4\x9a\x43\x46\xda\xe1\x93\xef\xe9RSF7\x90\xd3\x7Y\x2" "\x14 \"q\xc4i\xae\xb5\xdc\x1d;\xa6\x66\x61\x88\xe5\xe1)\xa8\x43\xf9" "{\x84\xa3\xd8\xcc\xfc\x84\xc1Ww\xb8\xd7\xdb\xd5\xe3\xf7_\x8~\x6\x88W\x17?y[dJjO\xf0" "\xe1'F\r\x15\xc\xf0\"S\"\xdd\xc0\xde/ \x11\x37>d\x99\x15\x46\x39M\xd2~\xd6\x8b\x81" "\x82\xfd~\x98\x85\xcck\x5\x7\x15z\x8a\x7f\x5\xec\x99\xb7\x44\x31\x80\xfc\xa4\xa1" "t\xb7\xaa\xb1\x10\xd9\xea\xe5`n\xbf\xb5o\xf5\x35\x82\xbd\xa0\x12(\xd9[8\xa4\xd8{" "\xd8\xae\xe6\xdf\x9e\x95\xd6K\xbb\xac\x35\x84\x1aG\x86\x94S\x1e\x1\x43'\x2\xc\x12" "m\x4\x6\xc0\x46mV\xb6\x34\x9\xe7z\x9d\xaf\xae\xd1UE!qe\x19\x88\xf0\xf6\xef\x1c\x35" "}\x9b\xb\xde\xc9\xb4\xa3\xeb%g\x14\x98\xcbk\xf5\xd5r\x3\xb\xaf>\xb6\x37\xcb\xed\xa7" "d\xf7PC\x1c\"j\xa9\x90\xab{\xf1\xd1Y=\x2\x43\xc1\xd4\xda\x65+dP\xaf\x33\x1\x30\xc3" "\xbcI\x0\x8e\xc4\x9J\x12\xa1\xd8;_E\x11\x41!\xae\xf1\x63 \x9e\x39!3&\xd3_8\x8$\xb8" "\xe\x80\x41\xd2\xe9\x8bl~c\x10g\xa4:\x5\xf5\xea\xf6\x1\x8e\xda\x38}\x8e\xf3\x42\xa3" "{\x8\xba_\xc5\xc8\x61\xd8\xbfpH\xcn\xdf\x82\xf9\xc9s\xba\n\x8c\x1b\xa3\xa7\x63\x96" "\x15\x45+\x7\x39\x0i\xb0x\x83#C\x8 \x96\xe4\xda;\x8\x85\x96\xe\x8e\xc6qQ:\xbcs:\xfb" "\x94s\x81$/L ~\x13\x41\x91\xc7p\x7f\xfc\xe8\x33\xca\xb3\x9b\x31\xe4\xb6p\x97\x12" "=\xaa\x32j\xb0\x6\xdd\xc7}&\x85\xf7\xbb\x9b\x12\x35\xea\xea\xf8\x4\x33\xbc\xd7\x42" "K\xca\xd8\xc6\xb2\x61q\xf7\x46\x38\xac+\x7\xfc\xdb?\x8a\xaf\xdc_P\xb8\x3\xc0\x1b" "\xae\xf5\x80\x89\xb0\x7\xb8\xaa\x30\"r\x8c\x5{\x1aq4=\xac\xc4\x1c^\xacO\xc4\x43\x8a" "\x82T\xf5\xaa\x93.A[In\xc9\xcb\x16\xba`\x8f\xde\x83\x41\x9d*\x1d\xdfUo\xe8\xd6\x3" "`l\xeb$\xa5\x81(\x8c\x45\n\x62\xec\xf7wU\xfb\xfa\x98o\xa0\xb0\xde\x13\x34{/\x90\xa8" "\xcd\xb7\xe2\x35\xdcYz\xea\x9e\xe2\x87\x65\xbHi\xabX\xc9~\xa5Y{\xea\xfe\x42SZ\x8c" "j4[\x97\xaf\x14\xb6\x9c\xe6\x36\x91%Q\x8c\xb6\xf7\xa8\x96\x82\x91\xc6\xa6\xb1\x61" "`\x19=Z!\x87\x2\xb7R:\xd3W\x10\xef\xcfL\\\x8e\x9a*0\xd9\x95\xdc\xeb\x13\xea\xe7\x17" ":#\xb4\xaa\xae\xf5\x85t\xa2\x66\x30^\xa7\xacZ\xae\x80\x1c,\x17\x4Z\xe%\x19]\xb4\xa8" "_\xe7\x8c\xf8\x42\xfa~9\xa2\x3\x84-/t\x81`0YC\xc3mE\x10\xf3\xfd\x82\x9d\xd1\xe4\x81" "\xd6\xdd\x88\xa1QE\xa9\xdd\xe8\x8a-\xbf'+\xa5\x16\xda(\xe4\x14\x8\xd6^\x9a>P/a\n" "#!\xe9qJ\xd0lB^\x96\xd1=P\xeb\x8dO\xf1T\xc1z\x85N\xfe\xcb\x9c\xc7)'\xa5\x42\xb8|" "\x80\xc4\x85\x62\x1d\xeb\xb5\x30\x44>\x9a\xec\xa2?\xe2\xff\x9f\xeb\xa3*M\x8c\x96" "\xbf\xe7\x97\x91;\x8k\xec\xc4\xea\x17\xddt\xc2\x8bO\x7f\xca\x43\xf4\x31\xbf\xb6\x88" "\xf1\xfc\xda\xe5\x65\xaak}\x14\x1\x39 \x92\x30{\xf3_\xb5\xbb\x38\x37\xe8\x85\xf7" "e\xf1\xc4\xef\x31HwhW\xf1\xc1\x84\x62j\x9c\xa1\x98\x92\xb1\xc7\x2\xb7,\xf9\xb4\xa6" "\x98\xa8\x8f;\xaa\xfb\xa2Wxt\x82/Kd{>\xf9m\xa5\x8e\x45\x89\xf\xc9\xa0Vac\xf4\xca" "C\xe1\xc5\xe2\xa8\x62\xa7\x61\xda\x31\xf8\x97\xc5\xe\xe5\xd0\xef\x12@m\xabrGQ<\xac" "\xc1\xbe\xbf\x84\x2\r\xd0\xca#\x2\xf3\x45\x82\x10\x95\x4! \x81 \x80\xea\xfb\x7f." "\x94\xc6|\x88\x1b\xef\x5\xdaY~K_\xc7\x97\x44\x1a)\n;Z\xeb\xcc\xa1\xb9\xf2\x37\xf2" "\xb9#5\xc8\xdc\x10\xb0\x8e)\xae\xd7\x42)\xab\xba\xf5u\xabZ\xed\xb9\x44\x11\xc5\xd1" "\xf8\x37\x15\x13\x9e\x61\xaa\x9aV'mHc=\xcd\xeb\x7fZ\x9f\xff\x32\xc9\x95qh\xee\x9c" "\xb1j\x99\xa4k\xe0\xd6\xc0'\xc1\xfaQ\xb0\xcc\xf4\x85\xb7\x9f\xf0\x65\xa3\xa5t\xab" "B\x11S\xde\x39\xe4\x19\xd6m\x12\x43x\xc3\x83\x19\x44\x96{\xc1q\x9c\xdf\x90\xc\x14" "~_\xea\xe7}j\r_e\xcdW\xc8`\xda\x6\xd8|\xb8}U\xb9s\x4\xfdw\xa6n(e\xf4p\xa4\x1d\x86" "`T\x1f\x31\x87\xcd\xac\xe3\x46QTx\xfb\xe5\x5\x82\xb9\xce\xb2n\x94\x9\xbc)JC\xb4\x1d" "\x8d.\xea.3\xa9\xdc\xe8=\x1f\xae\xc4\xb0\xaf\x9d\xabgr7\xb0\xd4\x42\xe0~\xe7\x9c" "%\xdc\xeb\xb8\xfa\xa9X\xed\x89\x8e\xf9\x91\xd1\x66\x34\xbd\x80\xdbt<\x7\xf0p\x81" "\x2\x14\x1c\x9c\x32I\xe0\x99\x99H:\xad_\xd7\xe0j\xbf\xa5\x9c\xde\xd8\xf5\xaej\xf6" "N\xc5\xf6\xe6\xc2^\x10\x1bvX\xb\xc4\xa7v\xdd^\x90\x9c\xe9,\\\xc2\x32\x41\xfbr\xba" "\xcf^\xc9\x35P\xb6\xba\x30\x13UL\xa9\x8\x8c\xce\xd4Z\x8c\xc6\x0)\xf3\xa7\xec\xc5" ";\xe5\xea\xfb\x16\x90Y\xabKsP\x6h`\r\xc1\x45\xc9*c\xc9\xbdM\x1b\xc9\xa9\x2\xbc\xd9R\xa0\xdb\x12\x96\x35Z/\xe0\x9a\x65\xf7\xfc\x34JR\xe2" "\xbQ\x91\x30_\xffL\xcc\x97\x32^/\xffV3J\xf2\xa3O$t\xfd\xe3g@28|\x8\xfc\xee\xc5/\x19" "\xc4\xf7\x32\x46\xdd\x30:\xf9\x97\x1c\xa8\xc2{o\xde<\xd2\xb6\xd3&~\xc8-\xd3i\xbe" "\xaa\x19\xc0\x8b\xeb.\x2\x11<\xc7\xe9>9\x88\xcb\xd6\x65{!\ro\xe7\x96\xf0\x32^\xcc" "1\x5\xf4m\x6\x36\x43\x85\xe6\x9G[\x96~R\xdbNCH\xe3\x9dQ\x9c\xea\xc2\x13W`\x8\x93" "\x19\x9a\x1\xd7\x35\x9c\x8e\x45L\x10.\xc6\x97\x44\xb0{\x87\xfeS\x9f\x4q\xa4t\xa6" "k\xa6\x2[\x12h\x8bM\xa2\x65\x61\xacm\x7J-<\x85Y\xa0\xe\x9b\x8e&\xcd\x64\xaf\xba\xf6" "s\xb8:\x89\xc8~\xdd\xf4\x62&\xae\x41s\xaf\x9\x64\xb5\xdc=\x91~\xb2\x45\x62\x95\x37" "\x82\x8d\x8e\xb0\xb2\xa6\xad\xc5\x11\xd2h\xdb\x2\x9b\x1c\x42\xcd\x36\xe6\x1b\xa3" "$\x89J\xe4\x33o?\xeb\xd0\x8b\xae\x32\x34\xe3u\x1c\x1f!k\"\xc5#L\x81L\xdc\xd5\xa5" "\xf0\x9f\\z\n\xb0.j\xd3\xd0.\xe4\x2_c\xf9\x13\x9e\xe7\n\xb5\xf5\xd2\x98\\\xe1\x1b" "8\xe0\x14:\xdd\x2^\xe4o\xc*\x1d\xb3\xdd\xca\xa1\xf8\\\x6\x89\x3\x45\x85\x41\xce~" "\xa0\x38\xaa#\x8c\xc6\xf4\x0\x85\x65\x9d\xda\x5\xc9\xf3\xe5\x9e\xf1nK\x14\x7w\xce" "\xc0k\xa3\x89\x6\x34\xf7\x66\xb4OE\xb\x98\xc3\x32\x33\x81\xe7\x9bJ\xbc\xee\xf7\x85" "+\xc5\x84\xcf\xa3!\x15\xc1\x93\xd2\x7\x94\n\x8f\r\xd1\x0\x81\x6\x81\x88\xfbG\x87" "{\xc5r\x9\xe4\x81\x89\x17\xd5\xd6\x19\xb7\xa7\x16 \xf9\xf5iO\x81Y\xf1\x14\xb6\xbb" "\x9f\xb3W\xb9\xc5\x6\x37\x97\xce\x14\xb0\xdcjv>\x80\xba\xf1\xe2G\x85\x99\xbe\xef" "i\x9e\x9f+|\x3\xb8g\xa5\x9e\x61Z\xd4=\xdd\x1e\xab\xc5\xca<\xd4\x9c\xfb\x89]8\xee" "y\xa2\x92UL\xd4\x1d\x16\x6k\x6\xb0\xc9\x62\xe6N\xae\xec\x8c\x38iSr\x15\xc5g\xfe\xe6" "\xf3V\xcd\x46\x10$\xbf\x4J\xf0`\x7\xcal\x7'\x17\x80Q\xea\xe2\xb5\xeb)z\xdeVs\xae" "\xae\x3\x1a\x8d\xc7\xbf\xa4#\x8bIH\xb2\xbd\xb8\xa7\xad,\x89\x99\x82[M\xbb~^\xf3K" "3e\xdc\xc7\x1clD\xcbzl\xc0\x1b\x65\xa8\x17\x1f\xb\xdcJJv\xb0W\x9a\xba\x33\xc4\x38" "\xcf\x7f\x10\xb0\x9eTk\xa2\x1e\xf3\xfb)\xcb\x38{\xc8\xe9\xc7\xf6#\x98\x1\xbf\xb5" "pR\xee\xd5\xc7\xadu\xedQi\xe\xe5\x91M6|\xce\xa4&\x9d\x95\\'\xf1\xf0\xf6M\x1eO\x16" "\x9b\xdb\x86!\x91\x86\x17\x43<\xf8-p\x80\xcf\xe8 \xe4\xf2\x8d\xc5\xcb/\x9c\xb6\xe7" "\x89\x92\x84\x7\xdd\xaf\xc4'\r}^4\xe4\xc0\xcb\xd3\xe1\x82+I\x86\x91o\xac\x9f\xb6" "\xd5\xdf#\xbf\xef\x93\xdb-z.\x89\x16\xc4#\x9a\x13\xf1\x9c\xf6\x38\x92\xf0\x45\xd0" "e\xbc\xf5\xc8@=3Z\xc0\xfe\x41\xd4(o\x0\xc3\xd8\x9a\xdc$\xe1t \xf7\x97\xee\x45t\x9c" "rq\x8b\xea\x13\xc2\x43\xa9\x1e\xb7l!Y\xdd\x85\xbb\xb6\xa7\xa9#:\x3\xd5\xdb\xed|\xf7" "\xa7\xd2\x4\xcb\x61\xa4\xc\xb6W\x88m\x18\xa2\x94pP\x9b\xc6}Z\xfc\x33\x89GF\xef\xbd" "\\h\xe4\x91x\x8f\x17\x83\xb9\xa1v\xab\x9bH5\x80;\x9bQ\x90\x98\xd4\xcaR\xde\xb1\x8c" "\x9\x9b\xba\x12\x1\x85\xf8\x62T\xaa\x8c^B\xeb\x9al4I$\xf5\xbc\xd6*\xe4]2R=\xad" "\xad\xdb\xc0\xc\x39\x8u\xfb\xf5\x89:\x5\xd0hZ\x2\xa4\xbc\xfb\xb{\x86\xd5\xb5#\x1b" "\x4\x18qsyA}\x2\x7f\x30\xd3qz#\x1\xca\xde\xdf\x99\xc7\x37\x38\xab\xf2\xe9\r\x16\x32" "\xe6\x2\x39\xe7Z\xc1\x42\x1b]\xfd\x9\xda\x8f\xfl\xfe<\x91\x44\x97N\x1e\xf3\x92=R" "\xe2\xfb\x96\x8a\xbe;=\xe2xe\xf2\xd9)\xcf\x84O\x9c\xd6\r\xe0\xe1{\x10\xde\x17q3P" "\xa8Y\xce\xea\x43v)\xfa\x31!\xfc\xc1\x86\xc@K\xea\xac^f\xa9\xe9\x15\xb3\x5\xfc\xfa" "mO\x4\xc3\n|\xb5\xf9\x35\xc6g\x8d<\xd3\xfe\xaf\xa1\xcbn\xa8`=4t\xd9-g\x4\x0\xba\x9" "@\xa0\x90\x33\xa3\xdc\x38#@Gd\xd5\xa4" "\x80Q\x8e\xfb\x63Y\xbc\x32\xa5\x39\x12\xe0\x8c\xc1\xc8H\xdd\xb9\xe8\xfc#\xe1\xd2" "\x87\xa8\x88/\xd8\x33\xb8\x84\x9f\x0!\xfc\xce\xa7\x64\xbc\xec\xc0Y\xd2+q0\x3\x18" "\xe5.e1\x81\x1S\xb5\xd3\xf1+\x82\x2\xec\xd5\x8f\xa2\r\xa6'ad\xe4\x43\xea\xcc\x34" "!\xf5}\xdf\xb5}E\xdb\xed\xbf\x8\x8)=\xf2\x96\x88\x1e&!\x9f'\nF\x8e\xa6\x95\x91\xd5" "\xee_\xae\x92\xa9\x13\xe2\x90_\x1\x1b\xcd\r\xc7\xb7\x94\xcc\x8b\x1c\x8d\x16n\xf1" "\x15\xe4\xa0\xf3g\x8e\x9eS\xc9\x36\xc9\x82^0\xe3\xed\x62\xe6\x89\xc6\x7fl1\xbf(*" "qOA\xd9\x88\xa0\xf3Z\n\x1\xb8\xc7\xd0\xa3\xde\xba\r\x94}\n|\xa5\xa3!\xe3y\x83{+\x1" "u\xfcl\xd4m-\xd2\xb0\xc6\x64-\xdd\x14\x96y,K\x1d\xfa\xe6\x1\x1a\xf1\x65\x14\x99\x2" "z|\xd1\xe5\xabOR\xeb\xaa\xc9\xc6\x0\xbe\xf9&\xf9U\xc9\xd8\xda\x1a^\xaf\x46\x98\xa7" "\x1f\xc0\xfcp\x95\x30\x36_\x2ZU\x87G\xe1\x1a@\xc1!\xa1\x30\xa0\x13\x3\xf6hS#\x86" "\xd0\xc9\xa5v\x93|\x19\x85G\xb4\xddO3\xc2R\xcb\xfe\x9d\x90o\xc9@\xc5n\xea\xa2\x42" "\xc0\x8a^\xc3\xb4O}\x8f\x42\xb3\xd9O\xb5;ZJ\x8c\x9c\xb1\x1fk\xb4k\x15?\x0\xb6\xd5" "\x8c\xa6\xa0\x31L\xb1nKe\xd5\xb7\x1cs\x9c\r\x42Y\xbd\x30\xa2\x13\x45\xab\xb5\xd7" "\x85s\xa8\xfb\x7\x9\x94^_Sm0h\x96\x63\xb3\x1e\x64\x30\x98\x43(\xe7\x63\x9\xec\x9d" "\xb\x81m\xff\x66\x96\xd3JVOiK.\x8b\n\xd6-T\xfc\x97\xd2\xd0\x9c\xa9\x45yu\xbd\x86" "I?0k\xe8\xae\x62V\xf5\x8f\xfd\x6\xb1\xd9\x6jK:\xd2\x64nIC\xfd\xa6\xf1\x31\x63\xca" "\xbc\xffX\x1f\x8b\x92\xd5\xf3>\xdfQ+\xc8\n\xbc,\x84\x35R\xd7\xc7\xdc#d\xbd\xee\xfa" "\xdf\xee_\x84,\x10\x9\x81\x7f\x11S\xbf\x9+1\x91\xee\xab\xa2\x9\x91\x36&PR\xca\x19" "\x92\xf7\x93\xa8[\x1f\xe1\xc1\xac\xd6\xd6\xb5\xab{\x16\x9c\x5\xbc\x65\xbb\xa8\xa8" "\xd4}\x1\xf5\xc4\xb0\x14z\x97\xca\x15l\xeep\xd3:\xbb^X\xaa$f\x9b$\x5@\xfd\x1d\xe6" "g\x1e\xf0g\xa3\xfc\xc2\xda\x39\x33\x7f\xfd\x87\xe6}4\xfd\x4$$\xa4\xb3Z\x1f\x89=\xe8" "\x97iv\xfaj(\xf3xf_\xcQ#\x7f[\x83)K\x9e\x89\x85#\xbe[\xd0\x92\xf\x14W\xc4\x80\xdc" "\x88\xb9\x7f%\x10Z\x4\xae\xc0\xd0\x9cj\xad\x91]\xe6\xb2\xd5\xb8\xf0\x1\xefh\xd3\"" "\xbf\x42\x1c\x98 T\x83\xb2/{by~\x12\x36\xde\xbe\x1\x96\xbe\x1a\x42;4\xdal\xc4\x1a" "\x15\x8\xdd\xe4\x99\xb5\xba{\xe0{\xde\"Zex\x88\x3>\x8\x13K\xf4$\xc5\x39\xea&f\xb3" "\xc1\x32\x2\xb5\x6]\xde\x6MdL\x13\xa5\x1an\x9\x83\xd0\x42s#\x8L\x0\xbc\xabs \x1f" "t\xcc\xda\xe0.\x95\x1d\xe4-\xd4@9\x89\x16\x1\xfa\xb4\x45{K\x0UQ`y\x10\xd2!8\x6V\xb1" "\xec\xdb\x91\xf4\x9a\x96>\x9f\x90\xf4\xa8\x46h\xf2\xda^\xe9z\xec]\xaa\xfe\xd5\xd1" "\xb7n\xc9\xf2\xb6\x63\xd3\xff\x10\xb3P\xfb\xa4K\xc4 \x83\x88\xcf\x30\x84\xa2m*r\x0" "\xa0\xf9\xe5\x93\x30\xb8s\xe5\x82\x61N\xd9\x62_3\xb1\\\x32\xe5O\xf&\xc8\xc4\xb2r" "a,\xeds\xb7\x5\xf0\x81\x43\x82\x18\xb9\xeb\xe6\xa9\x34\xa4\x43\xb8\x66w&\xfd\xc4" "\xac*\x1d>%\xc%|o\xb7\xf5%\xb5w\x85\"\x62\xbe\x1c\x11\xe6\\\x99\xb0\x65\xfaI\xdf" "\x16X\xe2$ley\xc2\xc3\xd4@\x86xo]\xf5P\xf7\\\x97\xdc\xd4\"\x99\xd3\xffO\xe3i\xda" "\xfc\x86\xc6\xff\xb8\xb4\xbb\xe\xd2U\xf0\x89\x90\x42\xb4\xa5\xa2\xe\x34H\x7\x6\xfb" "W\xc6\xaa\x7\x8\x45\xaa\xb5\x1cR\xa4\xaa\xbe\x1aO\xcc\xd2\x84xp\x9bo\xb7\x82z\xa0" "h\xba \x81@\x9a\x39m\xab\xd3\xb0\xb7\xfe\xf9\xad\xeb\xbf!\xbe\x84\\~\xa7\xea\xa6" "\xa0\x8a\x44J\x13<\xb4\xe^\xca\x88\xbf\\\xef\xf2\xdf\x18\x1euI\x95\x14\xcb\x88\x37" "r\xe4jj\x88\xfe\xdf\x8f\x42\xa8\xdf\x5?7\x9e\x89\xda\x98]\x1b\xaf\x95]\x9c!\x80\xc6" "\x1f\xe8\xd3\x89\xd2\xf7\x83\xc6\xecGB\xb9~\xcf\x86\xdb\xd8\xdf\x35\xa1\xb8\xb3+" "\xc3\xba\xbdXo\x13\xf\xc7\x8d\n\x45\x8a\x92\x36\xdd\x38\xcf\xef\x1b_\xd9\x9d\x36" "\xc6Lg\xb2&!L\xd2N#m!\x85\xa8=\xc7\xc1}\xe1\xfa{^\xf4\xa8)s\x9a\xa9\x9e,M\xf2/z\x97" "%\xc9\x8f\xf1\xefIz\xd9\xdfN#\xa0\x7fl\xe\x13!|\xe2\xbb\xce\xa3\xab\xeew\x19\xd1" "@7\xb7\xae\xffZ\x8c\xd2\xa1O\x96'\xc%u\x1\r\xdf\xf8TO\xe3\xfd\xb7\xb2\x91\x94\x38" "\xfa.\x82\xc6\x10 \xceOS\xb6\xbc\x8\x9f\x35\xe\x33\xdc\xf7W\xce\x8a\xe3\xf\xc8~/" "R\x19\x83\xeeHJ\xae\x9b\x17\x80\xe3\x3\xc2\x81v\xc\xb7\x1\x1a\xe1\x45\x42\x97t4\xe7" "\xd4\xeb\xf8G\xe8\x9b\x9d\x7f\xe4\x80\xa4NV\x3q\xec\xd8\"\x80\xf5\xabG0\xe0g\xef" "\x1d\xd2\x45\x8eg\xe5\xd5\xa6\x88\xcbY7nF\xdb\xea\x7fm\x1\xa4\xf7\x9a\x1b\xbd\x8f" "t\x16\x64y\xce\x63\xd7\x9e\xa0!\xae?\x97\x87\x34\xd3+J\xf0\x80<\x19=XK@\x12z5\x17" "\xff\x31\xa1\x8a\x13\xbe\x94\xb6\x39\xb6\x0\xb0\x15\x97]\xbf%\xfa\x63\x37\x7w\xe1" "\xd4\xaa\xef\x38\x1d\xa4}/\xe4S\xb2=\xfb\xec\xc\x42z'FQ\x97,\xd3-j\xech\x8f\x2#4" "\xb0\xcc\x1b\x1e \xfeZ\xce/\xf5\xb8\x42\x8a\x80\x32\x30tT[\xbb\x66\xe9\xa0j\xa0z" "c_\xc7\x7f\x98\xc1\xb3\xa3o\xdf\xb6\xeb\xb5\x98\xc1\"\xd8\x17\xe\xa4\x66JS\x13Il" "pZ\xd1\xff\x7f\x8c\xee\x9eL\xd2\x42\xac\x1dn_\xea\xf0Ve`_\xa6\xf4\xf6i\x19\xc7\xf1" "{\xc4\xce\xdbslF\xe8\xe8\x14\xb1)\xc3X\x4\xe\xa8\xb2\xbc\xd8|S}zr\xea\\\xcd\x32/" "q36\n\xee\x10\x8c\xb7\x88\xae\xf1\x90w\xcb\xfe\xde\x4$\xd7I\n\x9b\x9c\x9Z\xa5 \x8b" ".\xb1{\xe0\xb)2\xd1[\xe5{\xf\xc0\x33+\x9c\x7\x18\xfd\xde\xe1\xec\x98\xfdY-\x9f\xf4" "R\x6\xa8\xc5\xfe\x38\x93\xd9!\xe3\x65x`a\xab>?>\xec\xabX\xee\xa5\xda\xff\x2u\x8f" "\xb7\xac\xbd\x8f\xbe\xdb^~\xd2Z\x19\xcd.\x80\x30\xb8\xb6\x6p\xf9\x19\xb0\xef\r\xf" "w\xd4&\xfc\"\x89\x44\x46Z\x8c\xc1G\xe5\xfeh@\x7\xc5\x96\x1f#P\xab\x38\xe0\x31\xb3" "w\x88\xad\xd0u\xc9\x9aM\x85\x17\x39K_\x0}\x93\xbf}On&\xd0\xca\x16\x81\x8e\x1b\xd0" "\x15\xc9Q\xce\xea\x44J\xf8\x36\xf3\xe5NZq}\x15\x42\x62\xe2\xe9L\x13\xac$fp\xc6\xe6" "\xa2\xcc\xf5WJ\xbbu*p\xf5L6\xdc\x93\x8a\x1c\xd1\x93\xad\x89\x8b\xdb\xbf\xfb\x6\x86" "\x7z\rv\xb9n\xe0*\xa4^\xd3\xe3\xf1\xd7\xd8re\x15\xd5\xdc\xc2\x96\xed\x1e\xaa\x36" "\xb4\x36\xb9@M\xf2\xee\x1e\xdf\xcb\x7\x62\xe3\xc9\xc3\xb3\xa9q;H_'nj\xdc(?\xb3\x1a" "\x8f\xc\x8e\x30\xb1,\x9f\xb0\x1b\xc2\x84\x8f+\x87\xe7j\x93J\xd5X?\xcc\xb0\xbe w\xbf" "h\x5\xe7\xbf\xa2\xb3\"\x63u\xc2\xc1\xc5~X\xf8<\x85\xcc\x39@h\xa7y\x86\x12\xdcG\xfc" "B\xf\x10\xa6\x13\x1f\xb\xb5)\xc8\xc7\xf1\xcerZ\x9c-c\x10\x81\x16\xb3\xf4\x86\x6k" "\xf4\x41\xbe\x65X\r\xfsW\xb3\x92\x3\x41J\xd2\xe1\xed\xc5\xde?\x8b\xc8\x9e\x35\xd4" "\xb\xbf\x43\x43\xdd\x7fyOq\xc2;\xb1\xf5\x44\xdc=\xf7\x1b'\x1e\xa1\xa0I6H\x1c\x6\xdb" "\xa5\x8e\xc\x14\xa3\xb4\xc7\x65\x31\x1eo\x9aR]\xdap\xfc\xd3jP\xe\x95\x92\xa2\xd0" "\x9arOX\xb1\xbd\xcb\x9fk\xee\"\x2\xc5\xc3K\xd4\xda\xb4\xfd\xa3q\xb2\x63\xc6\x38\xb" "\xaa\x85\x88p%\xb1\xb3\xf8.\xe0,\xb9\xdf\n\x35\x8f\x46\x91\x31\xccj|}\x10\x90\x18" "I\x98\\\xc0R4\xcd\x31=\xa5p\x93\xc2\xb0S9\xeaJ3\xef\xcb\xae|o\xean\x83\xb6u\xe6(" "\xaa\xe9\xee\x4\xd9:\xa0P\x2\xdb\xdf\xac>\xc4\x39\x13GA\xd3\xb5\x83.\xc5\x9b.\xd5" "L\xdc\x1\n\xb3\xf2\xf7u\xcf\xfa\x46\xa7\xf1\xad\x14\x8b\x85\x12,\xed\x80\xc7\x1b" "\xda\x36\x9\xd6\x46\xdeO\xcf\xa6\xee\xa5\x99\x9a-rS\xa2\xa2\x93[\x81\x90\xea\x39" "\xfd\x8b\x8b#3{;\xa3\xd2\xb7\xb2\x8c\x97K\xdc\xba\xe3\xce#t!C\xbftNm;\xfa\xck\r\xe3" "\xa3)\xaeI\x97,\xdc*ZT\xcf\xed\xd4\xc3v\":\xe6\xfb\x11Vm4k\xe7\x1cM\x94.G\xcc\x5" "\x87\xbb\x1d\xfd\xf5\xd4\xdb\xd2\xc0\xdb\x44\xb1@J\xa3\x65-,I\xcb\x0w\x9d\xfc\xb3" "\xb9r:l\xd4`H\xb1\xc5\xd6\xfd\x1c\x62\x64\xd9\xc1\xce\x8eU\xb7\xf5\x31L*\xd4vMi\r" "log\xc8\xc\x87\xe3\xba\x18\x31\x87nF\x2\xc2\xec\xcd\xfa?\xc1\xf5\xe3\x86\x30\x31" "l\xf4\xb1\xa7\x8c\x8c\x19\x1*|B\xf9Us`tu\x8aP\x94\x9f\x7f\xe5o\xf2\xcu\x0\x7f\x0" "\xef\x89\x16y\x8$kcjI\x9d\x10g\xbeV\r\xd5\x38\x98,\xb\x43-\xce%\x15\r\x9c\xf5\x1b" ">+7nB\x8b\xec\x13U\xd4-4\x18\xfd\xd8\xcd\xcf\x15\x32\x13\xfb\xa7|\x2\x11\xae\xaf" ";\xb5\xbf\x9d\x8a\xec\xaa+\xe9\xfc\"\xbfY\xab\x4\xb9\xb8rup\x3:1\xc7\x96\xf8\x18" "%\x91\xa9r\xeb\xf0\x1b\xfX\xb2|\xda$\xdcM>\xbe\x96\x14\xb5\x39o?\xabg`\xb7\xa4z\xbb" "(\xc6\x39\xdcvu\xe2\x7f\x89\x84\xbb\x7\xad\x37\xb\xe6\x31\xee\xe6\xc6\xbf\xf9\x3" "\xf2vF\xa5\xb1+,\x9f\x8f\xc2\x44n\xd6\xd2\x9a\xfb\xe3MR\xa0\xb5\xaa\xc\xd2\\\x15" "\xe6T\x16\x3\x1b\xb9\x1f,\xf9\xa8\x42\xdc\xb6\xdcwVB=\xfd\x18}bN\xe3\xfc\xb3\xec" "\xa3\xbd\x9e\x64\xcc\xd5):N\xd6*\xb2^\xf0\xd3\xf4\x65=\x94\xddJ\x12\x91>\xcfX\x19" "\xb1\x99-\"\x81\xc\xf6H\x94\x9d&\xbfKu.\x1d\x8fp\xab\x42@\xcd\xc4\xa3\x7\x90\xa9" "\x8f\xa8\xa7\xb8\xe\x8e\xba\xbe\x34?\xda\xeb\xa4\x1a\x10\xd0UL%\x1\x82\xd0K\xea\xcd" "\xcc\xdc\xfbow\x9b\x88\x92o\xedq\x16\xee\xbc\x9f\x9e\xei\x10\xd3\xb3\xa4\x80xZ!\x17" "1K\xf0k\xd2\"V\xba\xaa\xb6j,\xe4\xbb\nMX[-R\xf8\xac\x37\x44]x\xfb\xa1\x86\xf\xe5" "\x94\xbb\xda\x12\x7\xc7,\xf7\xa3}\x14\xa5\xea\x9b\x95\x3'\x97q\xaf\x9ct\xbdsu\xe5" "Qr\xad\xf6\xd8\xab\xccR_\x1b\xb1\x99\xf8%Ya\xd0u\x2\xc\n\xc6\xab\xf4\xbe\n\xe6^!" "#\xfa\xf1\xc9\xbe\xb3\x38\x32\xe0\x8d\xf2\x8b\xe%\xe9\xdcm\xc8\xb8ie\x99\x8c%\x9c" ">\x1d\xd0Y\x96\xc0\x30\xbd 6\x80X\x8d\xddh\r\xe3\xfc}\xcdk\xdd\x32\x9e\xc6yY~D\x8" "\xd2H\xd6\x10w\x8b\xc2\x86\x8e\x9a\xa3\xff\xb1\xb4\xb\x8d\x38\x91\xcd\x3\xe7&\xb1" "\xea\x1d~nY\x15}\xf0\xbd\xd8Zg\xb3\\\\\xe6q\xacY]\x95\xfbZ\x99\x6\xd7>$\xe5\xe0L" "n\xd0\x89tqcX\\z\x89Yj7\xef\xaa\xcaj~\xef\xc7\x94\xfc\x65\x80\xb\xe7\x9f^\x8$\xaf" "\xb0\xc4\x30\x30\xb3\xbd\xb3\x42\xa9\xb4\xf0Tcf\xd9?+6\x99\x8d\xed\xb8Z\x8c\xe1\x86" "\xa7\x8b\xb3/\xb4\x84\xca\xbe\x86t\xda\xfa\x5\xda\xbd\xa1\x80\xfb\xc3\x8e\xaa\x84" "\xd4\xe3{M\x17\xe7qz)#:)n\x95\xef&\xb0K\xcd\xe0\xc0\x19o\x96\xbd\xde\xaeo\xeb\xc6" "\xe\x9e\xf0o\xa1/\xaa\x16\xda\xe0\x17\x8d\x4R|Yl5\xab\x31\x12\\\xf1{#\xae\xb6\x8f" "\x84\r\xa1\x46R\x5\xe4\x82\xfa\xa1s\x88\xf6=\x18\xc8\xf6V\xba\x94\xa1\xa8\xe8\xc7" "K\xa8\xb0\xbb\xc8\xba\x45M;B\xe8[\xbc\xbf\x8d\"\xfb\x0\x8b\xe8n\x9d\xd2,\x95\xd1" "<\xf0\xa4q\xc2\x7\xb2%\xa4\"\x62\x65\xd6\x8c\x8a\xaa\x17\x46\xe4\xee\xea\x66\x7f" "_j\xeah\xfd\xcc\x91\xde\x8a\xbd\x88\x33\x86\xd2\xa1\xa8\xde{yS]\xb2\xaf\xf8<\x13" "\xaf@\xe4o\xae\x1f\x92)\xe9\xa0{PK:\xd1\xa3\xcf\xd9$\xc0\xb7\xb0\xf8\xcY\xd9\xcf" "\xcd\x0\x19\xb1\xb\xf8\x0\x4\x1\x15[\xb6!E\xd5\x61\x18\xb3\xde(\xfaZ\x98\n\x9cZ\xa1" "\xdf\xdb|\x99!\xd7!E\xfd\x64\xfa\x62<\xf7\xf8!\"\x9e/VB\xa6n\xf5!\xf3\xd7>\x11\x17" "a\xee\xe0\x46\x38\xeb\xd9\x33\xf3\xb1\xaf\xcf\x9a\x14\xcd\xf8\xe3\x9a\x95l\x1b\xad" "S<\xc9\xbd\xb0\xc1]\xfe\xaa\xe1@2\x83\x90y\xabU*\xd6GhX&\xac\x14Q\x95Wl\x18O\xcd" "\xae\x44\xfcRMt\xd3K[C\xbb\x98\x85\xb8\xe3\xf0\xed\x13\np\x87`\xe9&P\xf8hh!@Dy\xa8" "\x8a\xb1l\xc0\xfa.\xd5\xbb,\xd3\xbc\xc0\xb3\xbb\xc3vD\xec\x84k_\xa0\x8dS:K:s\r\xd4" "\xb6\xe9\x41qRk)\xb7\xf8\x9d\x5\x1\xac\xcdo\xf7\n E\x18w\xfd\\\xf\n\xd6\x91Q\xbe" "\r\x12u\x2\xdb\x63\x84\x1b)\xe9l\xb3\xcd\xf0\xb\xa2\xe4\xd4\x1d|vW~\xe1\xea~\x99\x1c\x88\xa1\x91\xca\x1a\x98z,\xed;\xe8\xc7\xb" "\xc5\xf9\xb2\x63\xb7Vr\x1e\x1e>*\x85\xc\x46\x82\xa1j{F\x10x\n+\xde\xd9\xda'<\xb7" "D<\xb5\x9amz\x1Y\xc2T\x1,Kb1\xff\xf2\x38\xceN\x11\xef\xf9!A6n\x8c%\xcf\xa8\xc8\xaf" "\xc\x80\xa8\x9\xad\xb5\x62\x33\xed ]\xe8\xb0\xc#:\x1d\x66l\x8 BD\xc0\xf0\xd2%\xe3" "\x8c\x85\x34O\x92G\xe1\xacY\xd4\x65\xb7\x41\x9\xba\x18\xfd\x4I\x12\x31Z:\xb5\x8c" "\x80|\"\xa3\xe2\xf0}\xddLx\xc5\x1fNh\xf1\xa8Z\x1a\xb4}\x18\n\xe3s\x94\x31n\xe5\x13" "\xe3/\x8b:\x94\x16\xbf\x96H\xd5Ug\x91\xe5\xd4\xfd\xe3\xd1\xf9\xf1\xe4\xa0\x13\\\x64" "\x9d\xe3\xe7\x30\x89\x33\xdb\xba\xb8@\xf5\xe7\xac\xa8/\x96&\x19h\x8d\x9d\x92\xfc" "\x10\xf0\x1a\xb5\xe4\x61h\x9b\x16=\xe8S\x8i\xa7\x33\xed\xed\x11<\x1bK\xd5\x6\x63" "\xf3N/\x12\xed\x35y|\xc6\x45\x7f\x90\x45o\xd5\xd2Of\xcb\xc0\xd7:\\\x1\xa2\x18\x92" "Q\x8f\xff\x9\xa3\x1c]\ni(:g\x1f\xd0\xed\n\xa9\xbd\x8f[\x90\x0\xe0\xde]F\xe7Q\x3R" "\xc4Zf;A\x8d__\xf9\xef\x32\x8\x84\x17\xe0\\\x66\x86(m\xd1\x41\x31n\xbe\xf4\x8b\xbb" "\xb1\x1a\x7f\xd9{\xfe\xaa\xe4(&>\xc2\xc8R\xf2H\x93\\\x17Ii\xb0\x43g\x13v\xa3\xe9" "\xfe\xf9\xd4w\xccxS=ln\xedRIEN]p\xce;(\x84\xdd\xd4\xf\x9epy\xac\x84\nY\xba\xd2w\n" "\x4\xa7\x46%\xe3\xfc_`\x9e\x90?\xeb\xa6\x16UM\xa4$;\xb3\x89\x35\x1bU\x92:q2\xb0\x46" "_\xe4\xbd\xf2\x93G\xb0\x91\xe3\xddy\xeI\xf9\xab\"\xef\xc4\x17\x45\x82\x99Hy\xf2\xd6" "\xcb\\\xf\xcb|\x7]J\xd3\\\xa1\\P\xcd\x5\xb5\x12P(\xfb\x1\xb1\n\x94nG\x90~\xe7\xdf" "\xee\x98\x16\xa4\xba\xac\xf5\x8cl&u\x86Y)'\xbb\x42\xf7\x98!\\\x7\xcb\xb8pY\x0\xd0" "\nl\xb7q\xe0\xb5\x3\x94\x30\x7fZ\xfc\xeik\xae|\xeb'X%\xcfK\xd2r\xcd\xc8>L\x92\xc1" "\xa7K\xa4\xe4\x9f\x36\xb6\x65\xf2%X\xe5\xb\xf2P\x8dG\xd0\n=\xb1v\xd0t\xa9z\xc3\x84" "\xbf\x91/\x15\xa1\x1dy\xa1\xd8\x34v_K\xa6x\xc0\n\xcd\x9b\xa9\xf2\xfe\xd3\xba\n\x82" "Jv\xb9\x15\x94\xfcWQvg\xa2\x8a\xb6\xec\xb3p\xa9\xc9\x9ey\xa6\xc1\xe2j\xc0Q/\xa4U" "\x11\xa1\x88\xde\xa7\x62\xac\xdb;L\x1d\x0#\x85\x45\xcd\x8f\x66\x84TD\xb9\x38\x9b" "3\x86\xcd\x1aJ\x99(\xc1\x99\xbc\x90\x38\x95\xb4\xfzGp\x11{\xa8\x89\x94\xd3\xb0\xbd" "\xa8)\x18\xacLezEbk\xcf\xb3\xc2-\xa3\x85]7t\xf7PQ\xb3\xd7\x43\xaf\xef\xd9\xd7Y\x14" "\xc\x95\x9\xd7\xca\xb6\x84\x97\xa0\x9f*\xc7\x85o\xfa\xb\xef\xd1>t\xbc\xc5\xe3\xdd" "\x8e\xd7\xf0\xb5\xf3\x1a\xd4Ph(K\xe0\x89\x8f\x44\x65\xdc\x13\xbf\x17\xe4\xadi\xe2" "\xb8\xe4\x90\xec&p\xe1\x84\xab\x81\xb1\xe9\x66\x63\xce\xdf\x95\x33%|\xbe\xcb)\xeb" "\xf2p\x89\xf6G\x8f\x17\xd1*\xb9>R\x1f\x8a\x31\xc3\xf6\x31\xd1\x8d\xd3Pj\x0\x1\x9e" "\x86\x61\x12\xa6#\x9f\xe5\xbb\xda\xf1^\x88\xc1\xfe\xc8w\xa8\xbd\x8d\x1d\x2\x3\x8f" "(\x15\x9a{\x18\xfc\x4\xd9\x15\x5;\x84\xa9\xd1\xa8V\x8c\x44\xac\x1b%\xac\xe3\xdb\xe9" "\x13\x41\xb\xc3@\xf1\x32\x0\xe0X\x92\xbd#\xef\xd7\x88\x8b\xa0\xf8\xa1\x9fq\xb0%\xcb" "\xa0_\x1cR\xd8Nz\xf9<\xffz\xee\xe6i,\x8\xae\xc4J:\xe4\x46\xe2pH\xb4\xdf\xf1g\xa4" "\xd1'\x4\x93\xa2\x8c\x84\xe7/\x8c\x91[\xd9\\\xb6}^\x7\xac\x85^\xf0gP\"PqvN\x1f\x85" "\xa4jb\xb0w\x8f\xa0\xd1n\xdf;\xb7\x14\xc5\xa0\xe2Y\xae\xc7\x1cm\x9b\xf8\x8\x35k\xce" "r\x19\xac\xe6\xbc\x87Pe\x89\x3\xd5\x8b\xa7}x|A0\xe1.\xfe\xddN\xad\xc9\xdc\xf6\x7" "X\xcaOm\x18\x4\xd3n>\x8d\xcc\xe4QR%5\xbe\n\x13\x62\x31\xb2\x8b`\xcar\x85\xd9W<\xf1" "%\x99\x1a\x7\xe1\xb9\xb7G\xb0\xc2\x7f\x81m\xfd\xd3\x91\xc4\x46\x10\xb5\x8eW[A^r." "K)\x83\xd0[\x19R\xe8x\xa4\xac\x16\x66\xc9\xed\x61=\xe4o\xcf\x14\x8b\x14\xde\xc3\x80" "\xb1\x1f\x80\x61\xf3\xde\x38\xb9 \x15\x87\x8aPL\xda\x12\x38g\x9d\xb3\x19\x11\xfe" "\x82\xa0\xb8\xd4\x8b\x8c\x1brX\xaf\xdd\x18&\x19\x66\xae\x42\xb9\x30y\xe9\xfb\xa6" "\x83\xa9W\x18\x8f\x9j\x9e!\x9b\x7f\xed\xe7\xbf\xd5_L\xe5\xae\xe9G\xe8\xfe\xe2" "\x13\xf0\x34\xad\xb2\x19[\x84\xcd\xfa\x8\x90\x63\xea\xef^H\x95\x83\xc4.\x94u\xcc" "]\xfa\xed;\x90\xaa\xc4\xf8\x9\xcf\x9f\xe5*h\xa5/W\xc3)\xb7\xd5\xb1\x91\xbbMu\x3\x88" "9\x80\x11\xea\xf8\x11\x16\xcf\x82\x10*\xf3 \xc9*\x8f\x45#\xf8\x8\xd2\x8\xce\xfe\x1c" "\xd7\xc4\xc1\xe3j\xf0\x30(\xdc{\xcf\x61)\xe8.\xbe\x32\x8c\x62\xe8\xb8Qw[\xb4\xdb" "\xb9\x93\x14\xbcK\xcKJ\x6h\xd6\xe8\x91\xf4\xb5\xca\xfe\xe3\xcc\xa7\x9\xb5\xe\xfb" "\xdc\x63\xa6\xe4\xf0\xb6\x45\xc2\x41)V~J\xa9v\xfe\xdf(Z\xbe\xc1\xb2\x1a\x94\xe1\xab" "\xe1@\xf5O\x16\x5\xa0\\=C*1o\xe9/t.\x99\r\x16\x39\x62\x88\xa8\x12\xa9\x95\x11\x14" "\xd8\xcbh\x8e\xe9K|Iw\xe3\x98\xe2O\r\xa3gF\x10\xdek\x83J\xdf;\xa0\xd3$\xa3\x95\x85" "\x7f\x1fka2Q\xdar\xe5W\xe0\xb5\x1Vk@\xa6\xba/\xc3>2}\xe7\xeen\xc6\x30\x63p\xfe\x89" "\xd1\x6\x8bn!\xd3\xfd\x16\xc6\x43\xe7^\x8d\xae\xf9\xe2\x1dLM\x1a\xd5\xeb\xc2\xbY" "\xa4\xec\x8dHq\xaa\xf6\x1a\xfb\xe6\x12I\xb9\xa7\xc9\x8c\xb1\x17\x13\xf7W\xbd|\xc4" "\x95\xe9\x90\xc8\xf4\xc0/\x16vC\"o\xc7\xbcQ\x9bj\xd1<\x10\x8d\xf\xcf`\x11Rb\x11(" "qI\x17\x9c\xb3\xa3\x65\xbe\xab\xd9V\x98\x8bt'\xa6\xc9\x9e\x31\x38\xcf\xca\x94\xb" "\xd9\xa1\x0\xcc\x42)\xa4\xe3\x93\x94\xf1\x31p\xe0 \xf0 \x1d>\x12\xfd\x87\x33\xdb" " \xd6\x42\x93\x97\x16/\xa8\xc\xf6Q\x8d\xf7\x32\x93\xfc\xf7\x13\xc0q\x8fL\xee\x89" "\x8e\x44X\xd2\xf\xca\xbd}\xf1\xd5\x15\x16\r\xea\x8e\xe6W\xba#\xb9\xcf\xa0Kw\xe9s" "^\xa8\xa2\x86\x30\xf4\xb5\x9cl\xc\x88\x4T\xd8\x31\x63'm\x15\xa4LT\x95N\r\xb0\x1a" "\xb9H\xe5\xd4=\xc3\xd9\xc3Q\x88\xb5\x98_\x90\xd3\x83n\x98\x39\x1c\xb1X\xe0w\xdf\xa9" "j\xc6\x32|\xff\x10\x9\x8b\xb\xd0%\x1c?\x8dkR\xa3\r\xf2\x5~\xe7\xe7\xefGm\xf0\x8d" "\xa9Omr\x5\xdb\x46\x1cY\xa5\x37\x46)]\x97$S\xd3RY\xaeX\xe9\xc8J\xba\\\xe7\x8e\xdc" "\x9d\xc3\xa3\xbb\xbf\x9a\x84v\xfe\xd3\xdc\x7f\xb0\xca\xee\xa4\x1eO\x91\x33\xdf\xf" "o\xdf\xca\x3\xfc\n\x9)\xb8\xc9\xaa\xe4q0n\x8f]jJ\xcf\xfa\xf9\xca\xd0T\xba\x13\x1f" "\x95H\r\x9c\x39\xacX}w*B\xa5\xebh\x4\xe1\x94\x90\x34\xbb'\x97\xd2m\xaf\xd1xi\xbf" "\xcbn\xf7\xeb\xc8\x65\x34\xcf\xc4r\x85\n\x38~c\n\xdf\x1f\x44\xef\x30\x30\x41J\x4" "=\x1aG\xb\x42\x43\xdf\x8fO!g\xad\x1d\x41\xfc\x46O\xf6\xa2\xdd\xe9\x46\xa4\\@\xb2" "-\xfb\xd0\xd6\x95\xe4\xa4\xe2<3\xdf\x35\xa6\x31\x31\xd5,\xeaI\xc3\x8bl*\xf7\xff\x86" "a\x18\x8f\xad\x7\xc1\xb9\xb6\n\x8a\xbd\x8cXeJl\x7f\x15i\x9WD\xb6\xb5\xea\xad\xeb" "\xb9\xbb\x84\xf3\xea\x89i\x16\x99\x13-U\xb\x3_)\r\x98\xd0\x91-s;IS\xb8L\x8c\xc\xe3" "j\x84\xa3\x19\xd7>\xd6\x9a\xdaG\x10\xe2\xa1\xe\n\xd5\x92\x17\xc7\x16\x8e\xd9\xdb" "\xb9\x9eR\xdb\xaf\x90NZ\xb2\x80\x12+}\x92\x94\x97\n\xd8\xf0\xc5\x2T\xb\x15\xdb:|" "\x92\xbe\x0L\xd2\xac\x7f\xb6q\xa7`\x2\xca\xd4r\xe7^\xe1\x88\xcf\xbdjR\x96\xb2\xb5" "\xba\xfe\xa2K\xe2=\xf3,76\x99\xf3\x96@\xce\xdd\x84o\r<\x17\x9c\xb0.\x1c\xdb\xee\x87" "\xfc\n\x64\x84\x5\x10\xd3S?{s\xc9\\l\xd2\\\xf4mS\xdc\x8fu\x16n*\x8eT\xbb\xd8*\xf5" "2\xc5\x19\xc3\xe5=\xd5\xc6TN\x97\x37\x30\x1!\xfe\xc\x63\xd4\x37<\xc9\x44\xfd\xba" "\x94\x37\x36\xa1\x4\xc6W\xc0\xbf\xe8L\x6\x98RA\xe1\x1c\xbe\xac\xacp\xc1\x37\x8a\xb3" "\xb\xa5\xd3\xa5\xc9?\x4\xb0\x62oZ\xe\x5^\xfc\x1e\xd8r\x9\x0\xe6\xd4\xa4\x91L}\x6" "0\xe9\xed\xek\xf9\x8ar\xeb\x93\x81\xa3\xd9>r\x0t/\xb6[\xae(\x85\"\x12r\xbe\xec\xbe" "{$w_D\xbd\xc9\xa3p\x8e\x84\xbbi\x17\x32\xaf\x1f\x39\xf7$=`\xc\xf7\xee\x9b%\xc5\xa2" "\xa5+\xf\x1a\xbe\xej\x98\x45\x90\xc7\xe4\x30\xcc\xfc\x85$\xfa\x7f\x1e \xc9.\xe1\r" "wc\xd0\x96\xb5\xb7\x92\xd4\x8l\x8d\xd2\xba\xfe\xa1Z\xd1\x9a\xb7T\xc0\x8a/\x81\x19" "\xcd\x7\x33\xc3=G\xea\x1d\x84yO\xc4z/\x83\x43\x9a\xc4\xa6^\xaeu%\xde\x87\x45\xb2" "\x97\x1b\xee\x81\x16\x86\x7>U\xb1\x87\x8\x94^\x4\x45\xd6\x95\xde\xda\xabV\xf5\xaa" "\x1f\xa2\x9b\x46W_\x99[\xf6\x4\xfc\x45\xae]\xc0\x43\x11\x95,\xcc\xde<\x99\xe2\xfa" "hpO\xc4s\x8\xad\xd2\xfc?\x83\xcb\x63\xb2\xb8s\xc2\x13\xeb.\xf#T\x8d\xe5+9\x8\xcd" "1G2\x13\xc9\xeb\x64U\xe\xe1\x90\x8a\xb3\xc2\xf1\x34\x1M\xf3<4Sl\x17\xd8\x12\x90j" "\xf4\x9cuP\x90NY\x90.\xdbQS\xd3\xe8nd\x9e\x37)@\xe9\"=2\x95\xcc\xde\x8\x7\xc9YV[" "T&\xca\x1b\xa9Y\xdd:d\xb6\x35z\x7\x89\xdeTs\xba\x11u\xd6zS\xd9\xdb\x96\x8d\x96\x82" "\xfe\xbdL*\x1\xcf(\xe6\xbd~Z\x14\x11\xf4\x88\xf9\xbcW\x1d\xe0!\x0=\x98\x8d\xe8\x31" "\xa3\xd6\xf1\xe5\x1f\xae\xcc\x90\x2\x9bR{\xef\xd5\x9d\xa8\x43\xe5\x8b\xa9\xf4\xd0" "\xacG\xd7\x9e\x91\xc5l\xc4\x8cZ\xd0\x7Y\x11\xdf,\x7ft\xc3\x82o\xa7\xdc\xabof\xf4" "\x92:\x19\xe4\x38\x9d\xc4\xe8\xf0\xa2\x0H$H*JL\xb9o\xa4\x31\xd2Q\xa5\x1f\x3RX\xb9" "\r\x8c\xe3\x65\x19\x14\xb3\xc9\xd9U\xb7\x7f\x36\xb2\xce\x3\xf8\xcb\xdd\x7\x93\xf1" "\xf2\xebq\x16\xf2@5\xf3\x33\xf3\xd1\xa6\x9z\x1a\xebq\x5\x46\xa0\x9c\x9b\xab\xee(" "\x81\xeb\x44\xa0\x9c\xd2\xd1\x92Q\xca\x80\x44\xb7\x8c\xf3\x1cm\x8a\xce\x83\xc5X\x0" "\xbf\\;\x10\x41\xa6T\xbev\xae' \xb2)\x0\x31^\n\xd2\xe9\x33\xbe\x99\x45\xe4~l\xa6" "\xb7Gz\x94\xcc\x95\x82'N\\\x89J\xec\xd1\xb5\x44\x85kh\xc7,WNP`\x2Q\x95\x45\x32\xbd" "\x9e\xc0\n\xae\x14k\xb1\x4\x8d\xfc\n\x6\xff\xe8\xa2\xf2\xc0\xa2\x80ziT\xb4U\xbe\x7" "\x8c(\x9bZ\xf2\x1c\xdf-\xee\x3h\xb6\xb8\x85\x90\xed\xf8\x13W\xc3\xccN\xe3\x16R<\x1c" "\xfn\xdc\xe3\x39:Z\xca\xda\xfcV\xdc\x65\x65\xefUK\x8c\xcb\xde\xf6\x95\x43\x85\x16" "[\x86G\xaf\x8c|\xf2g\x84]\xd4.*\x8d\xf4\x93\xf5oSE\x0\xc7\xd8!I\xca!\xc6\xa2\x94" "N\xc9\x1c\x17\x30\xc6=C)\xe5\xf\xbe\x42P\x81\x16\xde\xb0!u:\xbb\x64\xabu,E\xe0\n" "\xd6\x97\xd9\x9c\r\xdf\xf0\x9e\xaf\xaa\x8d\xb9\x18\x9fZ\xe7\xfdL\xfcX\xf9\x9\x8d" "\xfg\xec\xc4\x89qJ}v\x84\xe8[\x2\xc0\xa5\xb8\xd5\x98\xef\x32\xa7\x91\x37\xe1\x1a" "\x12\xc8\xc1L\xfc\xc0\xbd\xa0\xef\xfa/,#\x98\xb0\xcd\xd5\xea\xfc\x9\x66\xb1\xccl" "\xb0\xaaQ\xf2%\xfd%\xc4\x99I\xfe\x9fx\xb1\x89\xfei\x8eO\xd3\x7fu[\x1e\x9a\xd1-\x80" "~\x16\xcb\xfdg\x1e\x37IM\xdc@v0\xdbw\xf0qV\x2;[G\xf0\xa4y\x9b\x96I\x2\x8cV\x2\x16" "u\nj|\x89\xc7\xc3\xcc\n/\xad \x11\x13\xac\xb1\x8e\xb0\xba\x31\xbc\xe9\xb0\x63\x1a" "\xbc\x96\xa5\x84\xf4\xd4\xf7\x8c\rp\x82\xf7\x43\xe8\x99\xb1\xc0\x12\xec\xec\x31\xe4" "\x99\x96>\xbb\xbd\xfb\x97\xd9,\x99\xe5\x63\xc8\xe9]\x8d\x37\x2\xe4\xed\x81i\x89\x19" "\x1e\xcc\x46\xd1U\xc2\x85\xbd\xbd\xfc{(<)\xb0\xe5\xc8\x0\x34]\xd4\xb\xcc\xc0z\xbd" "\xff\x17>\x15\x96\x17\x7\x34\xa3\xd9\x1d\x89%\x9\xe0\x8a\x94\x8f\xc1'\xe2\xc5\xde" "RWx\xb2\xfd\xf\xc0\x84\x16&\xf8\x1e%\xc0\xdets\xfa\x62t'\xef\xej \xe3\x91$\x8c\xd9" "\xcf\x31\x0 \x9b\xb1s\xd5m\xaf\x8c\x45*8\x8f\x30\xd8\xd9\x61Rv\xe4v \xac\xc1\x94" "1g@J\xae\xb2\xfeil6H\x9e!\x87\x81\x87\xdf\x1\xb4Z\x88\x8f\x34\x4^a\x11JIF\xe2\x9c" "\x16\xa2\x3mw\x89\xb8\xe4l$7uO\xb1\x2|\xbd\x10Z\x8a\\\xb1\xb6\xef\xe2\xb6`\xdc\xc9" "{C\xc7+\x8\xc6\x33\xf9h\xbbT\x99n\xe8\x45+\x8a\xd9;.s\xa8\xed\x46\xe1\xe1s\xe6\xf7" "\xc4Q\xbb\xcc\xddV\xe8<\xa7\xae\xe8\x34\xd0\xfa\x12\xa4Y\xd4r\xc1ZS\xa1]\xd7S\xf9" "<%s\x1e\x9d\x65\x38 \xfb>\xea\x99Wz\xaa\x86v\x1c\xb9\xbc\xb4\xb0@\n\xa7\xf8\xff\x43" "9\xc4\xf0\xbe\x38\x80^/\x1a\x46\x85\x31\x9a\xad\x1a\x88%\x32\xb7\xdf\x96$\x83\xd6" "\xec\x9aG\xb8\xae\x11\x8\x45\x13\xf4\x98\x16\xca\xafM\xec\xaapF\x0\x31\xe7\xff\x9f" "\xbb\xc1?\xba<\x12\xb6:\xec\x32\x85\xb7\x46\x7f\xbc\x39\x9c\xe6X \xa7\xbd\x2\x38" "\xf3\x14\xfd\x15\xb1\xf9\xb0\xd2\x8a^\xf0\x43\xe5\xb2z\xa4\xb3\xe7\x43O\xc4\n\x92" "<[#\xde\xbe\xe9\x61:\x9\xc4\x8e\xbb\x5\xb8\x10l\x9b_\xce\xffz\xa9\x38q\xfb\x90\x1" "k\xd7*\xe8\xc5\x9b\xcd_^\x8e\x91/\xaf\x18\x94\x90o\xfc\xbc\xc0\xfe\x34\xa6\x7f+\x9" "\x5\xc5g@\x85\x81\x5\xd4\x8e\xa5\xf5\xe2\xed\xe2\x9cYj\xcb\x85\xa6\xcZl\x5\x85\x4" "\x81/\xa9\xf\xb0R\x11\xcbm\xe6\xd9]\x0\x98\xc0\xcb\xcd\x8f\xd3yQ\xde\x11\xa1gP\xdb" "\x13\x32>\xb4\xb9\x61\xa4\xdb\xf9;\xae\x32\x32G\x1d\x65JN;z\n\x9f\xc8v\x86\xfc\"" "\xc8\x9b\x6\xf3\xed]\x7f\xae]\x6\x15\xb3\x34\xa7\xfe[\x95\xcb\x3\xc7H\xb2\xf0-\xcb" "\xdd%<\x94\x42\x43\x11X\x82\x31\x8eKt\xda\\LZ\xc6\x63\xbd\xce\x95\x80?gA\xcfPC+\x1c" "Ud\x10}\xd0^\xe0\xb6\xb7\xad\x11 \x80\xfc\x65\xc4\x80%=8\xb2\xa5\xcb\x8k\xc8\xfa" ".6.5\x93\xd4\xf0p\xcb\x16\xee\xc\xfd\xe3\xc5\xc\x39\xd5h\x9d,\xf5\xcdVW\x80\x46\x41" "\xd8R^\xdc\x36\xeb\x9f\xab\x81\x9f\xf5I'\xf\x16\xa7On\xbb\xd8\xa9y\"\xae\xb9\x99" "\x82\xdf\xf0]2#\"-\x4\xfc\x9a\x9c\x38]\xb2\x46\xf4\x14IS*\x1b\xe9\x4\x1a\x64k\xcd" "r\xf4\xd3\xa2\xe6\x82\n\x83),}GHA\x10\xcc\x62\xf1N\\\x8\xcd\x42\xaf\x83\xf7\xbc-" "d\xa0\x95n\xe\xbdp\x15\xbaz\xa3\xbc\xec\xf\xcdX\x85\x30\x8a\xf5\x9\xae\xd4\x2\xf1" "9lz%\xe4~\xb2Y \xcf\xe8\x8f\x95\xb7\xff\x66\xd6\xd5\n\x9e\xef\xc2\xd6o=\x13\x92\xcc" "\x12\xcb\xa2\x63x\xf0ZS\xa4\xc4}D\xb8\x0lj\xa3\x19\x31\xbd\x8f\x44,\x13\xa0\xc2\x1e" "H\xc5\x86\x8a\x1c'Z>\x84\xad_'\xa2\xc9\xff\xe1n\xd8\xea}+7%\xe2\xfc\x31\xb0}\xfb" "\xe9\xbf\x4\xa0}\xc8\"\x86\x19xPw\xd9\x91\x37\xb4\xf7\xcd\xe5z\xa7I\xc\xc2X\xc2\xb2" "\xd1\xc4\xc9 \xf3?\xd1U\xa6\xfd\x1b\xc7\x9c&T\x8b\xe6\x9d\x8e/P\xe5/Cv\xf\xd5\"\xfc" "`Z\xb3V\xa0\xe1\xb8\x8b\xd2\xa6\xda\xd4\xfd\x98\x1eY\x6=\xc7k\xeaV\x15\x92\x66\x4" "%\xce\x39P\xa1\xa8\xae\"\xa8#\x4\xbc\x1e\xa0T*\x94\x35(w:U\xb4\xdb\xa0\x1a$\xab\x34" "\xfb\x45\x2\x1d\x97\x99\xbf)ek-p\x89\x82\xc7\xfh\xb5\x94%\x94\xd9\xe7\xd9\xc4\xb8" "\xfc}\x16\xf3\x1f\xa7\xda\x5 \x9fK2\xc7[.\xf4\xd1\xcbH[\xf8\x33\x39\xb4\xddJ;\x6" "\xb5\x61x\r\xab\xdb\x95\x90$ M\x1b\x10\xc2\x1a\xf5\xb5<\xcf\x11Wj[\xedIAS\x5\x1e" "\xc6\xfc\x89k\xe6\x96`\r\xeex\x6\x1f\x66\x1f\xa0\r\x32\x2\xc\xbe\xee\xda\xb1\x8e" "C-\xc7\x85\xfa\xc8\xb0\x7fG\xd0\xc5\xac\r\x65S\xf5\x62\x8e\xb5`\x90(\x6\xd4\x13+" "\xban\xc\"\x0\x30`\xea\x45\xd4\x37@&\xd0\x0\x9e#\x1b\xe7\x9e\x94\x82\x99\x7l:\x2" "\r<\xcf\x8a\x96\xe6\xf5\xb7\x81\x2}uI\xb\x10\xea\x64\x6v\x92\xcc\x17\x42)_\xf0\x1e" "\x17;\xd3\xd9/\xed\xb3\xa5%n\x81\x34\x1b`\x89\x19\xe4\xfb\x90\x35\x39\x3r\xd5`\x84" "\x9b\xf0\x13M\xb5}C\xe2\x45\xf9rj\x8d;\xf1n\xdc\x36\xc9\x94Wr\x9c\xc2\x1e\xb0\xd6" "6\xb3\x93\x89\rQ\xc6\x96\xb6#L\x4\xd4\xa7\x9\xbd\xd8H\x17L&\xde:\x10)\n\xe7\xe3\xe0" "\xe0\n\xd6\x7f,G\xc0\x97\x46]O\x9f\xb7*\xe2\xcdx\x17\x81\xd8v\xccO\xad\x8fM\xd3$" "\x87H\x1c\x12X\xb2r\xb9\x45v!h\rg\xa0\xdf\xdep[\x92\xdeL\x90'\xa2\x15\x9c\xf3\x95" "\xd1Q\x8c\x1f\xb9p\xfaVl>\xac\xcb\xe5\xbe\xbb\xc6~\xea&\xb0\x1c\x8c>v<\xa3@ TN\xb3" "\xef\xb6\x15\xe1\x84(}\x0[\xf5\x13\xd8?PY\xb4Q\x18IP\xbc\x33r\\\xd3\x83\x92\x1f\x11" "\x1&:\xf8\xf6\x8a\xe5(\xf0\xb8\xfdX\xb2?\xf4\xe3\x33w\xffL\xd4+{\xb8\x62\xc4\xf2" "L\xf3[x\xc1\xa0jY\x91\x9+\xe7\n\xfb\xe7\x63\xd9\x88XL\xa8\xe2zE\xf2\x2\xeav\xc5\xbb" "\xadu\xeb\xa8J\x8ehw\x1\xd2\xff\xa6\xeb\xdb\x8b\x89/\xe0\xb7\xd2\xf6\xbb\"\xa9\xe6" "=\x1\xdb\x96\xf4\x8a\xfaSl\xdb\x36=2\x94\xc6\xb9\x12\xbc\x83\x93\xaf\xe6\xcd\x9\x33" "\xc2\xfbi\xc3\xbb\x9b\x2G\xa6\x9c\x9c\xe9,\xcb\xb8j1\x9c\xba\xfe\x87\x1d\x86\xeb" "\x1b\xef\xf0W\xdf\x17@\xd5\xd7\x89\x43\xb7\x1e\xed\xfb]\x10\xbe\xa9\xc9\xb5\xf5\xb2" "VB\x8f\x84\x83\xbd\xfbtDo\x1\xe1\x97\x4\xbb\x63\xff\x46\xb8\x9a\xc1\xad\x1e\xa9\xe6" "\xb8\x16w@\xd9($\xb7\r\x10\xe6+\xf9\x1e_\x19]<[4\xc8\x9e\xbbv\xdd\xc:\xe8\x15\x83" "\xe6+0\xfa\x89\xbc\x91P]\xdd\xe2\xbaI\x1c\x88\xb2\xcbO\xe1\xff\xe9i\xfa\x63\x9cs" "\x1c\xdf\x8b\xc4\xf4\x2l\x95\x87v\x83\xdf\xfaL\xa8\x45\xcf>\xc8\x17&$\x82\xbb@'\xbb" "~[\x90\xc2\xc5\x61SR\x9f\x62\xfcT\xd2\xb5l\x95\x1c\xda\x1d\xae;\xd3\xc9\xb1h\xbc" "\x93\xcbu\x8\xc9[\xc0\xb9h\x1f\x91\x66\x1d\x8d \x1f\x65W\x1W.\x90\xde\x7\xce \xb2" "\x7f_\x91\xc6\x62\x16\xe6j\x89\xa3\x9c\rp\x80]\xcd\xa7x\x9d>K\xb2\x92\xe1\x93\x46" "G7\xd7%K\xc7\xb\x93\xa5\xc9\xb4\xc4\x9b\xfe\xef=\xf5\xfa-3>\xef\"\xd0g\xdf\x63^b" "d\xd1Q\x13yH\xe4L\xbf\xfc\xe8\xb7\xa2\xf8^\xcf\x80\x8e?O\x8f\x1e\xae<\xc3\xdf\x13" "\xda>\x92\x91\x19\x10\xe9+_\xf6\x41\x15Q\x80\xbeLw\xf5\xec\xc\xcf\n\xd2\xe7\x39_" "\xab\xa6\xb8H\xb3\x88=-\x7W?\xbd\x44k_\x97\x18\xea\x9\xd1\x91\x8b\xab\x44\x87\xb8" "\x19[T6\xc8\x17gcU%\xbau<\xa7\x42:\x97\x83\xff\xeaX^\x99\x32\xfc\xbb\xf6\xef\xaa" "\xed\xd1\xf9\xf1\xe4\xa0\x13\\\x64\xe8\xce\xc2\x83\x87\x66x\xcdV\x8fu\xa1\x16\xac" "\x9cuu(bQv\xa3\xa8\xbc\x8b\x63\xb7\xb9\xe8\xcd\x6\xa9\xb6\r\x0\xc5\xc2\x1fj\x1d\xab" "f\xc7\x80!\x10s{>\x1c\xe8\xab\xa5\xd1@a\xb6\x4\xc1\x8d\x7f\xcfm\xcaq\x8cYBY\xbdt" "TrP\xc0\xd4{0\xe3)}\xbb\x5\xc5\xf\x41(\xb8?X\xfa\x96\x32\x1el\x1f\xe3MR\x96\xe1\x1b" "\xfbL\xc5P\xcd\x80\xa1!M\x82\x1c\x4\xbe\x92\xb7\xae\xee>\xf4\xe4\xb7\xe\x62v5a}T" "\x96\xdc\x32\x81\xfbGG\x18\xe5Is\x3\x19\x9b\xdc\xbc\x33\x18\x42>\xc\"'y_\xf3I#w," "\x7fS\xe6\xcd\x8\x11\xda},#\x10\x18GT\x1e]j$9\xb2\x31?~\xcf_\x12\xd7\x31\xd0\xde" "\x9d\xb8\xbd\x45\xb0\x8e\x1a\xb1)\xee\xc0\xd4\xea\xb8\xec\x63-\xeQv\xadg\xea\x81" "\xc6\x81\xb9 :I\x88\xd2-\xb6\xb6\x5\x9f?\xd8\x87\x8\x89\x66N\x1f\x88\x82\x65\xed" ";1b\x19\xdf\xbe$\xa7\xd4%L\xc2\xf4\x98\x1a\xe4+\xd7\x8cs2`\x19\xc5\x4\xed\xa3\xa4" "\xd3\xfd\x18\x1ap\xddP\x85\x88<\x11\x63|x\xb8+_\xc7\x8e'\x87\x8bS \x8cU\x93\xa5!" "\x14\xd8<7\x2`A\xf8\x1\xd9P\xa6\x9b\xf9\xcb\xc9\xb7[\x12\x81>\xad\xd6\x95\xe6\\\x15" "\x83%K%\xd1t\x3\xfaMY\xf5\x18\xc5r\xf8\xac\x90\xa3\x86\xc9\xb6<\xb6\x62\xf5\r\x9" ",\xdf\x37N\\\x14\xbd\x92\xe5\xf\xf4nO\xef-\x8a\x9e=\xa3g\xe7\xd3\xf3\xba\x17@\rT" "EF9\x92t\xfb\xc8\x1\xc1\x1e\x85\xe8\xd1\x4P\xac\xb\xeazF\x8f\x1b\xa9\x90\xb4\xd9" "Y).@\xbb\xc1\x1d%\x30\xe4.e5g\x19\xa8\\v\xef\xccn\xa9\xa3`)A\x1c\xa1\"[\x11\x44\x81" "\x15\xc1mQ\xc\x4V\xec\xcaY\x8e\xcd\xc3\xed\xed\x5\x15+f\x9d\xe\x7f\xf3\xe8\x3r\xf2" ">\x9\x8cm\x2\xeb\x9eZ\xfb%\x63Y@[\xfc\x81\xcc\x9a\x92uP\xe4\x99L\x9d\xee\x8\x15\xaf" "\xff\xaf-\n_\xd3\xec\xe4\xf9\x5{\xc6\xfe\x4\x87\x61\xf7M\x81\x5~\xef+O\xbe\xd3\x8f" "\x8c\xf6\xdfvYu\xd3\xccQ1\x9?u|9\xe\x1e\x32L\x15\x9apG-xNI\xe6\xcc\xb7Z\xf3\xf3\x3" "\xf9\xca\x91\xe2\xec\xa0\x66JKM\xdd\x83%n\"u?\x1f\xbf+[\x1esw\x93\x90\xc8\xc5\x82" "\xe1\x11:\xcf\xdb!,\x1a\x9a\xa7S}\xdb\x19|<6\xc6\x42\x65z\\rB\xb6\xd2Yv\xbd\x15\xe1" "\xac`}\xb1\x86\xbc/\xfbH\xb\x1c\x95\xb1\xf7\x1f\xaf\x19\x3\xc8\x64\xe0\x36\xdd\xb4" "*h\x1f#\x18\xdc!+\x1b\xe3\xa8\xfdx\x1d\xbai\xda\xf6\x39\xe\xbe)\x9a]W\xd5\x96\xe2" "Ks|R\x9eH\xd7\xd8\xae\x8f)\xd8\x97\xed\xdd\\\xfd\x97\nu\x2\xef\xe9\xdf\xf7\xa8\xde" "\xf5H\xd0}\xfc\xad|\xf7\x17\x1f\x14\x46N\xd1\x85\xca\x1c\xa7\xf8\x12\x64}\x82\xf3" "rg\xf9\x34\xbK\x81\x38G\x10\x99\xbc\x99G\xff\xe8\x83j_\xca\x14]$b\x98\xfaj\x16\xa2" " \xc4\x95}\xc0\x9e\x1f}\xb8\x3\xa4\x88\xbd\x9e#\xe9\xb0j\x94\x8f\x46\x32z\x1t\xf3" "\x85\x64\xf5\xaa\xb4v\xc3\x87\x81\xbd\x1$\x0\x31\xdc\xba\xd5\xf3\xea\x38\xb\xd1\xda" "*W\xd5\x83:(\x4\xf3\x38WA\xd1\x6/\xbe\xc7\xf2\xdc\xb9\x90)\xf6q\xe7= \xc\xdew\x13-\x1a?\x10PP\xd4\xec\xe2\xe" "1PB\xecg\x3UR\xa3'\xe5\xd2\x13\x43U\xb6Xr\xfcpC\xd7\x96\xe4U,6\n\xde\xec\xd5\x8f" "\xfc\xe6\xeb\xc1\x42m6\x4\x16>\x87\x36\xd6X\xb5-\xe\xb3\x1f\x61\xe7\xda$\xce`\x83" "IN\x10;\x1\x38\x8\x42X\x1ftY\x84\xd9\\\xdb\x80\xa5\xb3\x18\x65\x1f\r\x96\x9e\x88" "\xb6\xa1\x92\xd8\xfbh3\xc8\xed\xc1r\x13\x46Q.0\xddV8\xd4\xbf\xa4\xccmj\xe5\x95\x46" "\xd3\"\x61\xfb\r\xa9$\x90\xc8\x1fHj\xf1\"/\xb5\xb8\xa8\xbe\xff\x0\x9au3\xbe\x98\xae" "\xe6|u\x15\x2\xe8\x11\xe6\xd8\n\xce\x82\x31n\x10\x87.\xc0\x38\xf3\xba\x8d\xb2\x88" "D\xe6\"k\xf7o\xb4\xdd\x1dS>2\xdd\x98\xaf\xad\x8hn\xd7\xac_\"\xd2:\xc3\xef\xc4\xca" "<\x88\x7\x96\x33)\xd4\xc5\xe5\x44^H;1\xfe\xb1\xb6\x65\xe8\x1e\xfa\x14\xe5\x0\x16" "\xcfj\xd2\xc9\x90+\xbb\x9\xc1\x16\x9c\xc0\x98|\x89\x65\xe1\x7f\xfd\xa6\xef\x44 \x9c" "X\xe\x87\xe2\x14\x35\x9f\xf2\xf1\x65\x8f`,!F\x9e\x86\x1f\xa9:i\"\xfb\x81\x17>\xdc" "0\x87\xd9g\xc2\x98\x61\xb5\xacK\x8b\xf0\x9a\x80\xa3\x9aq\x9b\xbb\xef\x19X3\xa5\x35" "\xb7\x95\x15]1\xd2\xc5\x14\xefw\xb6?\xaf\xea\r>e\xfd=\x3m4\x7f\x9b\x13\x16\x44\x17" "-\x1d\x5\xb1KX\xe0\xa3\xd0^\x1e\xb3\xc6<\xb5\x9c\x99!FWf\xabh\x3?\xd2h\xc3\x5\xa4" "\x84\xcf^\xc0\xfcW\xab\x81\x87\x34\xb6\xfa\xcclSwj'\xe1\xea\xab\xdf\"\xbc\x86/\xef" "\xae\x9aZ\xd8\x64\xaf\xcb.\x10%\xb9.B\xb8\xf7\xfc\x36\xf\xdc\x84\x38J[\x85\xe5\xd3" "\xdc\xb8\xbbZ\x8c\nq\xae\xf4\x43\xfa\xbep\xf6\x1f%H]\xce;]\x13\x9_\x83\x46=\xfe\xd9" "\xd1\xe6\xf0v\xea\x41\xf6\x45\x84\x15\xd6_\xa5\xf1\xfc~\x10\xe7\x1b\xc5S\x80P\xb4" "\x1f\xe2}?\xc5*\x1\x11\xff\x11\x1c\xbe\xa4!\xa9\x63\xcb\x89\x13\xb5<\xc9\xe2\xe9" "\xf5\xf6\xa1 +\xb\x1f\xfe\xbe\x8a\xfd|\x8e\x38\x5\xc6\x31\x2\x8e\x15\xa3\xbc\xe7" "\"|n/UO\xb6\xd8-\xb3\x4U\xd5t\xec\x84\xfd\xbdNX\x9e\xc0\x93\xe7\xa9\xf2hz0\xa0p\x9d" "\xa9&\xaa\x83\x66\xe\x19\xac\x33\x10);\x93\xb6\xb7\x61M|\x8b\x94\x14\x35&\x8b\xf8" "\x8d}\xaa\x8f\x41<\xfa\xa4\xbc\xda\xde;\x6\xe0\xa4\xaf\xb6>f\xcd\xbf\xce?\xff]\xa6" "f\x8c|K\x8c\x9\xf3\x64p1_\x9f\xbdlA\x91{K\xef\xfe\x85\xc2\xfe\x87\x89\xc2l\xf0~\xae" "\x1e\xb5\xf5\x12\x13\xec\x41\x88\xa4)\x8dj~\xca\x9d\xbd\xb3S4\xeerz9>w\x93\x92\x10" "m\xe9\x94#\xbf\xa7\x8e\xae\xda\xff\x42\xe7\x19\xef\x1e\x43\x0\x15\xdcJ\xed\xf\x66" "\xdb\x1b\xc7\"\xd1\xceP\"\xed\x1\xec\x61`\xb9\xc6\xa1\xe0Y\x0jcL\xf1\xc8\x17\x38" "\xaas[\x1b\x8a\xdf;S\xf0\x38\x1c\x92\x1d>\x1d\xb1g\x97\xd9\x35\xa9\rq\x0\xda\xd0" "I2\x13@\x98\xcf\xbe\xf6\x7\xd4\x93\xb1\xc2\x85\x8fK\xbf\xd5\x9f\xd7\x11\x86\x1e\x7f" "\xc8\xd3\xc3\x92u\x13r\x9\xe8x\xb5I'\xebS\x8f\xbc\x1bup\xd9N\xc7*A||\x93\xb9~d\xff" "\xa4\x89\xfe\xaa\x8e\x44\x8f`\xbdq\x98\xeb\x87p\xcU\xaf \xc2k0\xb7\x41\x17\x94\x8d" ":,\x8e\x63\xf5Q\xdf\xa1Y~\x11Q\xfd\x3kE\xe\xd3\x65\xdc\xeb\x62z\x82v\xae\x18kc\xcd" "\xfd\xc9\xbf\xee\xcf\xabI\xe2L\xfc\xc8\x8e\x33o(r\x9\xad|\x19\xed\x66sU%8%\x82\xd3" "J\x1c\x42\x7f\xca\xc4.\xea.+\xb2\xbc\xa3\xb8\x89\xf2\xf9L\x17\x88\x9a\xf1{\x85'\xfa" "\x8c\x98\xdb\x89\xa6/\xfb\xd0\xe7\xd7J\xf8\x3g.\xf0\xac\x1aO\x8a\xb7\x30\xdf\xaa" "~9'\x9d\xbe\xa0\xb7\xeb\x15\x94\x33\x9\xda\xcf\x9a\xe8\xd7\xeaU0\xbf\x42>\x8b\x9" "\xba\xf5\x91\xb7\xfc\xb0\xbf\x32\xbeI\xfc\xe9|\xf6Rx\xb3\xa0x\xe6\x93\xab@\x9\xe8" "\x99\x1e\xdd\x66\xdf_e\x17\xd1\xcb\x89l#\xc9X&\x2h\xb7\xa1\x3\x43tL\x83\x36\x1a}" "L\xfX\xd2\xa3\xb1G\xf8j\xa9\x61\x5\xb6\x8a*h\xfb\x84u\n\xcd\x80~\xfc+C\xe7Z\xaf?" "i\x11\xf@\x7\xf0\xda\xd9\xbe\x64\xc5\x17t\xa9\xev\xf5\x9f{\xa2\x1cN!;\x9e\x3n\x8f" "\xd9[qI\xed\xe8'\xc8\x95\xa7\xc9\x35\xd0\x4\xae\xaa\x65}\x8e\x89\x80\x8b\x94\x35" "\x17\xaa\xe1;\x98\xb7\xfa%\xbb,\x5\xb+\xf3\xd2\xaa\x94\xd0\x36`\x87\xe\xbc\x33\x13" "\xdf(\xb0\x19\xdc\x87\xa8\x34\xaf\xf7\x8d\xd2\x33\xd3)\xb6\x30z\xbd\xe4\x8f{3\x13" "e\x91\xaf\x9f\xdc\x15&\xa3\xb2\x90\xc0tp\x1a\x93\xfdN-#\xe8\xc%\x45*F\x84OgQ\xb1" "\x8e\x38<~e{b-\xf0\xb5\\\x12\xfd\x92\xc6\x96m\xb5L\xc7\xce\x98r\xd3\x81\xd9\xf3" "3qa\xeb>\xf6Y\x16M-\xb7\xb3\xc0\xae\\\x1b\x8f\xbb\\o2Xs\xc3\x46\x9c\x42\xeaxI\xdd" "\xb5J\xb8m\xa4\x99\xe3\x87\x6\x99\xa3I\xba\x1f*\x88+\xbd\xec*-\xef\xeb\xd8\n\x91" "\xe2\xfX\xc\x35_\x99\xd2\xc1\xc1vW\xb2!\x5\x7\xa6\x15\x2kX\xeb\x11YF\x8b\xba\xc0" "k\xac\xd1\x84\xb>\x9eJ/\xed\xbd=\xb9\xb3\xdaj\xa5\x93XW\xc2\xf3Z\x8a\x7\xf8\x99\x34" "\xf0?\x1a\xc4\x17\x9b\xdf-\xea\xca\xcd\x37\xdd`Yh\x90\xd5j\xc5\xde\x35\xd3\x46\xf0" "\\\xcb\xeb\x1\xafwolkx\xc7\xff\xeaw=\x9f\xb0&8\xa2z\x15r\xe8\x85\x6\x62{\xdf)F\x1b" "N\xa9u}=\xc4\xb4\x88\x1c#\xaf\xda\xe1\xb3\xe6\xeax\x90\xe5y\x1a\x5\xac\x9b\xe1K\xfe" "P1\xa5\xe7u\x9f\xe0\xa7z,C<_J\xbd-m\xd2LEZa\xbaK\xbd\xbf\xb8y\x95L0\x1c\x87\xcb\x83" "\xa6Uq\xab\xb4\xed\r\x12\xb3\x82G\xa1\"\xe6\xed%)\xa3\xe9\xf3\x3\xccP3O\xf6\x66\x33" "\x91\x34t\xef[9D\xf4\x31rx\x17\xc3?\x99\x96\x1c\x8f\xaeJ\x9f\xado\x7f\xce\xa2\xca" "=\xcd\x7f\xf6\x30\xe1\xdd\x1a+\x1b.w\x2\xd4[\x90\x2.;\x98o\x8a\xc0*\xe7\x33}\x88" "\x1a\xae;^\xd5\xff\x65\x89\x98,\x3v\xf7\xe0\x18N&woI\x10\xf5vJ\x9e\x87\xc0\xa0\x11" "\xc4\x82h\x84\xb7\x33\xa7\xc9@\x81P/\xd6\x42\xf9\xd0\x1e\xf2\xf0\xd1;\x8c\x32\x2" "\xb0\xc6P\x17\xdcR\xc6\xbb\x89j-]jn\xb7\x18\x65\x95\x39\\\x17\x61\xfb\xa3\xbaxS:" "\xdd\xe3\xcc\x35\xcb\xc6\x1f^0I#Xr!\x7f\x85\x86\x0\xc7\xd9\xdcTFh\x9e/\xdcK\xc1\x8b" "\xae\r\xc6\x9ak\x95\x38\x89\x9ar\xeb\x97-\xa7\x1b\xcf K\xe2\xa1\xbdO;A\xffN\x88\n" "GNx\xb3\xcd\x97\x87%^\xd1)\xff_\xdb\x19q\xbd\xe1\xa6(\xf3\xd0\x3\x1c\x9c\x7r\x94" "e:\x80Pi\xb0s|V\xf1<\xad\x9aw\x12\xc5\xa8\x9c\x8\x36N\xa2\xa7\xecGE\x9f\x1\xeb\x1e" "y\xb1\xeb\xae\xdf\x65\xb7M/\x4\x11)C\xe9%\xc7sS\xb8[\xf4(MD\xf9\xe0\x35\xf9\x8e\xb3" "\x81\x4\xde\x86,\xdbgX\x8b\xdcz\x1\xed\x46\xe3\xb4\x2\x1a\x36\\\x14>\xb8\xf2\xa2" "\x89\xea\x8c\xb8l&\xe+h\x7\x98X\xcd\x80\xd7\xd0\x10\x62\xc7w\xccU\x9\x10,\xa7\x8f" "5\xa1K7\x12(\xd9\xf3\xbey\xc2`\xbb\x44K\xf1/\"\x9emsOE_Gw\xd3\x44\xc4\xad\xf4\xe3" "\xbe\xa7K?\xab\xbe\xf4\xffoP\x81\xc\x9b\xa2\xccL\xeb\x64 E\xc5\x4u\xe0Q\x9d\xcao" "\x80\xdb\xaa\x84\xbb=R\x99;|d\xed\xa5\x7\xd3\xfa\x96#7\x82\xb7\x46\x6\x16\xfcG\x9b" "\xcc\x66\xf1\xfa\x45\xdaPnhAsL\x4\x19z\xfd\xf2.IH\xfb\xe4\x63!\xf2@\xaa\x99\xc9V" "{b>\xde\xf4\x0\x19\x64\x2)B\xa1\x4\xa3\xedM\xedK\x7R\xce\x87}A2\x97\n\xda\xdfj7\x7" "\xe5\xe9\x99\xeb\x90\x83s\x1e\xd7\nLM<\xa5\x16\xe1\xf2\xa2\xcc!\xe7\xa3\x33[\xea" "?)\x98Y\x87v\xca<\xab\xcIZY_\x8\xb1Mm\x4p\x88'\x1a\x42\xde\xc\xd8\x94\xfa.\xf4\x3" "!\xe6U\xfa\x94\x93MV\xde\xa7\x9f\xb0\x9\xe1\x80\x11\xe6O\rq+\x85<\x13\x6\x1d\x9b" "\xf1\x8d$I\x10-\xd6\xb7m\x2l\xb4\x1b\xf1\x88\xa4H\xd7X\xc8\xd6\x11\x11\xec\xc6\x64" "\xa1W|\x90\xba\xee\xf2\x19p\xe1\xf7\x96\xec\x34\xbau\x89h\xc0\x61\xf4\xd3\xa0\xf4" "\xc6\xf2\x96\x7f\x33\xe6\xad,)b\x93\xbe\xee\xebx$L7\xbeI$\xf8\x88\x80m\xd8\xa2\x62" ">z\xfe\xae+?;\x7f\xb2\\,\xa5\xf9\xdb\xa9\xf6\x84\x7f!\xa5\xd2\x35\xe\x9\xea\x9f\xcf" ":{4q\xc7\xf\xb\xba/L\xe9j\xfe(\x86p\xd8\x87\x61\x88\xae\xe1\xc0\xb9G\x7f\x64[=M\x9e" "\xf8\x1f\xab\x33\xaf?l\xd1\xb\xbeyI\xa5\x1e\xfc\xb1\x89\xf8\xd7\xbd\xfd\x18\xcb\xf" "\xf3\x7fR\x95\xf6\x17\xbd!B,\x8\x8e\xbe\x9a\xe3HYr\x8b\xf8\xe2&\xf\x5V\xffl\xf2\x66" "\xbe\x35\x33\xb\xf2\x18:F\xb0\xf2\xe0+\xe6sR`\xfd\x8e\x32\x99K\xc9\xeb\xb6m\xa8\x17" "!x\xc0\xa5\xd2\xa4n\xbf\x81\xd5\x33\xdc\xe\x8d\x85\xf9\xda\x0\x9d\x9c\xeb\xe0\xe5" "\x12\xb9\xb3\xc2" "\xb4\xcd\x1x\x99\x83P\xc8z\xfaO\x8b\xf9\xb1\xd4\xc8\x8f\x14\x46\xf3\xbd(\xb7\xf7" "\xe6\xa1#Se\x4tn\xcd\xe5\x36\xcn\xacy\x8ck\x8e\xff\xb2\x82\xa9\x30\x80nU\x9e\\\x61" "G\xf7[:\x9b\xfbo\x80\xddg v\xf9\x9d\x8e\xbb\x6H\x1\x19m\xc1<\x83\x7f\xe2PmR?\xdb" "\xe6\x87\x1c\xf3\xcd(oU7C\xb2\xc2\x96V\xf8\x62+\xf5\x7\xfd\x99M\x1a,\xbf" "\xb\x62R\xa1gh\x2\xe4\x1a\xac\x85\x8f\xc8\xc0_;\xf\x9b\xd7\xf5\x65\x9d\xaf&5\xbc" "eO-N\xc5\x84\x4v\xdf[\xbe\x92\xc9Om\xfe\x1\xb0S\x81{\xd1\x1e\x98)<\x1d\x82\xd4&\x18" "\xffv\xb7\xd7G|\xf4JU\xa0^bg\xc7\x80(\x84\x97S\x87s\xc4^|\x0Te\xbe\x37\x6\xcf\xed" "\xa1\xa7h\xe3K\x16R\x91\x30\x15\x1c\x81\xc2\x1c\xb7\x9b\\\xa2\x61\x31\x18\xdc\x99" "\x80\x10V\xfb \xdd\xfbw*\xf8\xf6\xc0X\xd2\x91\xbb`\xd1\xbf\xe$\xf1\x9\xc\xfe\x10" "-\xbc\xfc\xdf>\xbe\x9c+\xe9X0\xbct%O\xb3<^\xe9\x61\x17=\x7f\x19,w\xe9\xf3\xcfV\n" "j\xcf\xae!e7\x8f\x8e\xc2\x7\x94\xbc/\xe8\x9b\xe5\xfd,\xc4\xcb{\xc6K\x18\xe\x31ml" "z\x8a\xec\x2\xcd;\xa4\x89\xea\x1b\xc7)\rD? \x17\xdb\\\x9fV\xd3\xc0\x1f`\xaa\xc3\x61" "\xdf\xbb!9\x1d\x46\x31\xe1\xce}\xca\xaf\x8bqGBM.(\x4\x1U.\xb8\xd2\x8e\xa2\x9a.:\xe8" "\xd4\x97\x89\x9b\n\x9a\xb0ur\x89\x43\xe3\x10\xb6\xf1\x19\xf7\xf4t_\xbf\x15vy\xfc" "\xaf\xec\xa4\xb4\x89\xb2\xc9\x89\x16\x95r\xd9\xee\xa4\xeaJ&\x8a\xd5\\\x9\xe5\xf9" "5\xe5\x81\xfb<;\xdfz\x19\xcb\xcaN1\xc2\xf1\x1c\x7f\x94\x4\x1c\x17 \xf4\xaf\xae\xb3" "B\x97\xd0\xd4\x43\xea\x15\xf4PG\xd4(\xe1p\xbe\x83\xe9I\xa7G\xf2\xb0\xeb\x11\x14\xad" "\xfeX\x16\xe4\xc6\xdc\xe2\xe1_\xa5\xc0L\xbf\xc3^\xef\xb2\xff\x31\xe7\xe8$\x9ah\xdc" "\x18+\xea\\\x38\xd9L\xc1MO\xba\x93{\xf7\xddm\r~\x97\xe8\x86\xda\xb9\xca\xbc\x10\x65" "\x15/\xe\xea\x63I\r\x8f\xf3\xfc\xed\xed|f\xb9KC!d\xfa\xce\xec\xd5\x37\xe8\xdd}vO" "\x9cr3\x0\xf6w\xcb\xf9\x62\xf5\x12\xe0\xc2\xbd\x92j\xed\xce\xce\xd2\x3!\x9b\x44\xc6" "\xa3>\xb8\x1fh\xa8\x8ti/\xb\xa4u\xe1Qs\\\x2\xf3|\x7f\x82{|\x18\xa5\xf@<`\xb2k\xa0" "u\x98\xa2\x34\x0y\xecy\x87\xf\xdc\xf1\xd0\xa1\xf\x95\xb4\x91z\xe9\xba\x41O\xbb\xa0" "\r\xd5\x61\xff\xf7\xe3\x66\x9a\x84\rV7\xa6p\xb9\xc7`?\x95\xb\xe1\x94\x10\xda\x99" "(\xf\x83m1exb~\xd4\x6\xe\x8a\xad\x11\x97QB\xbc\x93\x1e\xfb\xb5S!d\x11\xd2\xa3\xee" "\x8\x9e\x4\x35\xd2V\xcfl'\x13O\x97\x42k\xe3\xfd\x8aj\xe9\xa0\xb7\xb6\xb7\xd6`\xe4" "\xbd\xbe\x8b\xaf^\xa8\xd8\x1f\x42I\xf0?\xa5:J\xd8\xc4\x9f\xa7\x9a\\\x34oms8J\xf3" "Mk\xa5s6PyK\x84\xb\xbc\x12\xc2\xd1\xe6\x93\xe6\xa2\xde\x9f\xf5\xb3\x17\x46\x83\x81" "D\xbd\xac~\xcbW\x84\x7f&\xc1\x80{\xee\xa2)\xa7\xef\x3\x32\x92\xdfW|O\xa8\xdfq%\xc9" "_\xbe\xb9\xd3\xc9\xa6z\x95\xea\x90\xf9u\xa9<\xcf\xf6hJ@v6}m\xf1?@6s\xc1\x30\x98\xef" "U\xe1\xc5\x95sIT\x8c\xe2\x17u\xc7\x42\x8d\xd3\x39\x4\xff\xc4\xaa\xe2I\xcb\x65\xc0" "\\*\xc6\xfe\x64?\xb7Z/J\xa2y9 \x13Q:j\x90\x8e\xd6\xbc+\xb5\xc5j8\xa6\x9aZZ\n\xa0" "~\x84\xaeX\x95\xa2\n\xdd\xa2\xca)!E\xd1.\xd4&H\x9/\x9d~y\xeel\xec\x97\x8e\x1a\x35" "H^\xf3\".>\x9d\xd4\xf9\xc2M\xf\xa7Q\x89\x30\x8a\xd0\x38\x19\xb4%(@\xaf\xd4N\x87\xe4" "\xf4W\xfc{\x8e\xf6|\xad(\xc1$+\xeb\xe3v\xbZ\x90\xe3u.\xd2\xf\xa3\xb4G\xe5w\xd6\xb2" "\xc4\x90\xebv\xf5\xb3W\xc0\xa6\x18\x12\x8\xa8\xf9\x95I\xa2\x80\x9b|O\xfe\x37\xe2" ")\xe3\xe0\x1d^{\xd6|o\x82\x11O\xa9\x43jy\xbf\r=o\xb8\x8f''\x92g\xb\xfk\"\xd1L_!\x93" "\xd9\xed\x7f\x12\xf6\xf1\xc7\xf3\x36\xf5\x97\xd2\xf1\xbYAcSP\xeekF#S\xc2\xf2\x11" "\xd0\x18\x10I\x15V\xda\xe1hS\x3P\xe9\x94!\xb5\x9\x10ZnU\xb\xcf\x9e(C`[\x95\xa8\x9c" "\x93\xab$\xb9\xd9\xb7\xed:\x99\x65\xb6\xfc\xa2\x1a\xb9\\V\xb\x2\xe7\x63 /|UF\x14" "\x19\x98N\xdb\x14M\xe\xbb\xef\x64\x36\xaa\xa3\xc6\x89Y\xb0\x86\x9bX\xe5\xbc\xbcT" "Cl#\x8a\xc9:\xaf\x88.[\xc0\x14\xe0?^\xae\xb6q\xac<\xc0\x90\xeb\xcb\xfb*\xaci\x18" "l\xf3gF\xf5\x35sj,\x8b\xd7\x3\xaa\xbbz\xb8\xc9\xdf\x63\xd7\x31\x91\xb9\x8e\xe4'\x94" "s\xdc\xa2\x98\xc4\x1aog\x98>\xf9\x1b.V\xefY\xb9\x33Y\xd4\x5\xb4/Z0\xac\x81\x17\xcf" "{\xe5/\x1\x2!7D\x1e\xfa\x8T\x9b\xca\xdb.\xfb\x90\xadL\xcd\x93\xa6\x2*\x84$\xa8n\xd4" "\xa4\x8c!3&s{\xd9h\xe6'\xf6\xf8\xa8\xe8\x6gk\xfc\xd6\xa6Q~b;\x84 J]\x8d\xfa\x46\xea" "\xe6\xab\xe8\x98p\xff;\xb1\x9c\x64R\xff\xa3\xa5\xab\xd0\xe0\xcd\x41\x8f\xfd/\xf2" "!\x82{\xd3\x13\xd7S\xa6\x34\x34\xea\x1b\xf9\x82*\xa9\xd7\xf2\xe8\x39\xe9\xa0\xde" "\xbb\xea\xad\xd3\xa4\xeaGF\xdc\xb2\x81K\x98\xa5/\xa0\r\xb4\xc1\xc7\x1b\xd7hpI\xb5" "\xfa\xea\xf5\x64\x95\x7\xc2\x30\x35\x13\xf1\xb3\xa6\xf4\xf7\xdex;\xcc\xf8Z\xea\x62" "\x8b\x1a\xfd\x8fG0v\xe9Q\x95\xd1\xe8\xaf\x64\xa0]\x5\xa6\x61\xe2\xb2\xf7wy\x14I\x5" "\xa2\xc5`\x1d\xf0\xee\xf0\xc8\x81+\x8d\x9aQeH\x93\x96\xac\x9d\xe5MqRP\xa3\xac\xce" "\xffVY\xb1\xf5\x1a\xd7\xa7#\x9d\x9a\x8b\xc7\x63\x1a\x35\xdf$N\x9c\xf1\xa3\xd0\x80" "\xde\x8f\xdf\x9\x5-\xaf\xb2\x0\xb9\x7\xe8\xda[\xb2@N\xfa\xb1N]5\x0w\x10\xf3i\xd3" "\xdc\xe9\x65M\x3\x32\xbb\x19\xa5\xbc\x9b\xcf\x10\xc2\xae\x8a\x12\xd9x1\xbf\xd0\xc0" "h\x81\xbe\xf8\xca\xc8\xa9\xbd\xeb\x42\xa2\x64Y2T\xad\x8dr\xfa\x97\xf1\x89\x90\x1a" "\x85x0\xcfR\xcf\x13\x7f\xcbmF\xb9\xb9\x34\xb9\x8eR\xa2Q\xb0)B-\xda\xee\xe2j\xaa\x89" "\xa5~;\xc0\xc4\xe\x95\xbc\xdc\x9d\x9a\xa3j4\x80U \xa6G\xa1\xdd]\xe1H\xd7\xd5\r\xc9" "\xea\xd7\r\x92<\x9cx\xdb\x90\xf8\xba\x2\xd6\x8c<\xec\x9f_\xd7q\xc3\x31@\xb9;\x82" "\xec\x6<\x8d\xa7\xd9\x64\x44\xbe\xb4\xfd\x1f\x94\x38\xc0\xb\x1ct}\x88\x33\xdd\n\x1e" "\x12\xfe 6\xbf\x38\xb4\xae\xa8\xf8p\x8b\xd3\xe3\xe2\x89\x42Z\xbb\xe7\xa6\xce\n\x9b" ":N\xb6\xd6\xcf\x2\x1a\x3\xa4\xb\x32\xa6\xfb'\xf7\x14\xab(\xb1\xa8\xd0\xa7\xbe\x38" "\xe3X\\\xfb\xdf\x46\xac\x9\x6\xb0\x65\x65\x99\x99\x83\x31\xba\xeb$\xe9N\xff\xc3\xd5" "k7\xa6\xf3\x36\x95\xc8G\xb4^\xaeJ\xbe\x90q(\x98~{\xc6\x1c\x9c,\xbc\x35\xb8\xed\xb6" "\xc4\xd0\x0\x4\xd3m\xd0_\xe0\x1\xfe%\xa0\x44\xbb\x32Q\x17\xff\xcd:\xe3\x7h@)\xc2" "\x9e\xd0\xce\xdasM\x1b\x96\x85\xdaL\xday\xc5S\xee\xfb~&\xd3\xe3\x1c\xaa\x1b\x81^" "1\xd0q\x8b\x19\xb\xe6\x91\xab\xff\x96\xc3\xc8\x9a\xd3\xab\x86i\xa6\x91!I\xe5\x9e" "\xebVn\xc9Q\x13\x89_\x17\xd5\xae\x2\x1e\x1e\xe2\x85\xd0\xc4\x9e\x5\x41S\x94Nc\xe0" "\x19\xfb\xbb\x8\x63\xda\xce\x34\x1bS\xcd[\x97o{a\xed\x8/d#\xdc\xb6\x31IM.mF\x85\xbc" "\xeay\xf5\xdc\xd4\xdb\x9eN2[8\xc7\x39\x10\xd8\xc9\x45\xb0" "Y\xc3n&!\x19V\xe6vY\xbc\x13\xac\x10\n\xe8\xbf\xbc)z\x8cL\x89\x85\xfb_\xb4\"r7R\x85" "n9\xd5q5W\xe4\xeb?\x14\xc5\xe1_\x82-\"\x4\xef\x14\xa9\x1cj\xb8\x13ll\xcb\xf9\x4\xbe" "\xabr\r\xaa\xacWu\xa4\xad'6)\x86\xebx\xd9\x95\xb7\xebp\x91\x35\x19\xf0\xb0\xd2\x95" "\x91\x62O\x15\x92\x85\x88\xc\xa1\x8b\x18\x32@A\xc\xbd\xe\x9a)?\" \xc6\xff\xc2\x89" "f\x8c\xa8 \xccn?\x8cn$\xc4\x37(\xe\x6sy\xbe\xbb}\xcd{\xfe\xe7:\x80M\xe0Hf\xc1\x2" "H\x8ar\x1d\xc5\xc1\x9f\x64\xc1{\x1b\xa6\xf5\x43\xfd\x2J+\xdd\xf2\xb4='\x18[sU\xec" "\xe2\xfa{\x9f\x36}]V\xcf@\xe8\xc8\x61\x3\x9bp&\xb4\x65\xd4\n\xc2\x64\xbd\xf4\xd4" ";\xb5\x9e\x45\x1a\x15/\x2\x19\x80\xdfr\xac\x89\xcaS\xff\xf8\xdd*xI\x87{\xd8\xff\xe" "\xd6T%L\xe9\x3y%\xd3\xc0t}#\xde\xde\xf3?\x95\x10\xa6s\xc\x95\x37P:F\x12\xc7k6i\x8e" "K\xb1)z?\xf7,\xaa\x98{\xfd\xf\xb8\x1TO\xa5\xb0GSx\xf\xae\xeau\xa5g\xea\x18\x9\x8f" "*\xe8O\"b \xdf\x46\x42\xa7\xbo\x5Ww-{\xa1\xf1;\xef|\xe9\xd9\xc1\xf3%O7;\xa0\xfc\xfc" "D\xc0\x6?\xcf\xf3\xc2\xd7\xb4\x8b\x1c\xdd\xed\x8fx\xa1\xec|\x6i\\\xe8\x89g\xbi!\xf9" "\x8d\x98\x65G\xfbu\xff?\xaf\xbe\x9\n-3\xc4\x1a\x1f_\xec\xdd,!\xe5\xef\x80\x8d|\xd4" "\xa7\x19[w\x15ve!\xc0\x8\x15\xf5$\xe7]\x1bUH\x16\xfa\xda\x8\xb6\xc2\x46\xd1\xb6l" "\xde\xc4\xbf\x19\x9\xd4\rH\xd5\xa2[\xb\x16\x15R?\xba\xc1\xee\xc4\x9f@M\xd7\"G\xb2" "\xc0|\xef\xb4\x5\xfa\xaa'9s\xe8qK\x13\xae^v=b\xd0w\xf1_\xbb\x15\x3\r{@b'S5\x98{\xc5" "\xed\x9b\xce$s\xba\xac\xc9\xfe\x39\xea\x65\xd5\xa7\xff\xe\x37g\x129\xaf;Jj6\x95i\xb9\xd8u\x7f\xd0T\xcc" "\rkb\xee)\xcdl\xf2\xfc\xbcj\x8dW\xa2\xf9\xc6\xa5\x4\xba\xb4\x10\x4\xdfR\x92\xda\xfa" "\xec\x65\xa2\x86\x1b\x43-\xc4\x1a\x36\x81\x36\x11{teSw\x7f\x1f\xa0\xf7\xb2\xe3\xfa" "\xf2S\xa0\xbf@\xd3\x92\xb4\xe0\x46\xcfiz\xbfM\x8b\x32h\xe4\xf2\x64\x84\x39\xad\xe9" "\xd2\xe4U$\xf3\xc0\xe0R\x7k\xf3T\x0\xcb\xdd\x16\xe7\xf\x88#\x9d\xeat\xcd'c2u\xcc" "\xed\xe4\x9ck|#\x7f\xb7\xbd \x1b=\xfa\x9bw\x94UYaAM\x80\xfd\\\x32\x3*3\x10\xb6\xb3" "-F\xa6\xe7\x44\x93O\x9dh\xc_\xfd\x81\xf3\x31\x99\x1d\x1c\x99~\xb3\xe4\xce$\x19\x16" "\x17M\xa8\xbf\xb5\x6\xb0\xff\x91\x8c\x61\x17Wjo\xcd\xf4\xbd\x9d\xd9\xc\x9bRs3\x1c" "[\xf0~X\x97\xe9\xf0*\xa3)l\xc0\\\xf4~H\xb5X\x86\xb8\x82o(\"\x14\xc\xc8OT\xb8\xb9" "\xd6G}\x98\x93\xeet\xfes\xe3\x92\x97\xbf\x41N\x1y\xbd\xb2Qf\xe8\x83mI\xb2\xad\xd6" "'J\xff\x33\xc8#a\x19yh\xfd\xfa\xcc\xa4\x9b\x85w-\xe9\xa1H\xe0\x17\xa8\xff\xc6*8\xa3" "\xb\xe5\x85\x5\x13\x7\x17'\xf3\xba\x34\xdd\x64L\xe0\x8b\xf3\xfd*U\x8\x9s\n\\5\x91" "\xd6\xc;\xe>\xd2N\xafW\x81}L\x84\xa4\x66\xc5\xf0\x37\x94\xe6\xae\xb3\xe1\x84j\xb2" "\xe9:]\xcc>\xf8\x35\x66J\xe0\x13\x46I7E\x11\x80\xab\xb9\x1dT\xcc\x81\x96|\xf8^\xe6" "\xb9\xd7\\\x14\xa7\x7fs\x7f\xa6\xb4\x14\xed\x66\x7f\xca\xba\x82\xde\xd6\x65;\x8d" "fI\xcf\xe5{Fr\xc4N\xf\xb\xfeZ\xd6\x30\xc4\x8c\xcfT\x9b|\xd2\xde\xae\x9cU'\xd0G\x83" "\xecS\x19\xbb\x9e\xf7\xd7P\xd8{\xa3\xc6\xb9\xb8\x19T\\\xa2\x42\xd4\x1fv\xfc\xd3\xdf" "/\x88\x42\xfaW\x14\xaf\xf9\xe5\x13\x9b\xd2\x90\x8a\x0=\\\xe\x62\x63\xa2\xbb\xe4\x10" "\\Q\x0\x87\xdb\xe\xcd|KW\xcc:\xf6M\xba\xaa\xc5\xde!\xbc\xab\x8aX\x0\x32%\xef\xe6" "{\xe7\xf9\xa6p\x9e\xee%\xd3Y\xfc\x1a\xeb\xc9i\x13\xf\x30P\xc0\xeb\xb6\xd8\xb7HY\xad" "T\x86_@\x8\x63\xd7i\xe9\x1d\xb9\xed\xeb\x43\x85%\xa7\xc7\xca\xa6\x8b\r\x19\x84u\xa4" "I\xf5\xf8{^\xbbI^\xbb\xd0\xdc\xe8{\xbf\x35@\x86y0+M\xc6m\x89?KAX\xe1\xb5\x30T\xab" "\x9b\x19|n\xcb\x7y+\xa9\xc8\xc5\xb9\xc9\x0\xaf\xc5\xa0\\\xc9\xc3\x1bPxBz\x1c}tD\x9b" "\x9e\xb8\x61{?\x0\x98\xef\xf3\xc5\x86tM\xbd'Z\x11}\n\xa1J\x4,Q\xb7Pa0\xdeYiM\xb9" "\xe4]H\xf3\x9a\x31\x41\x1b\x65\x65\x12\xa3-<\xd9\x66\x86\x80js\xca\x7f\x46\xdc\xf9" "\xa4\x87,\x3\x34\xc8\x9f\xfc)H\xa2\xbd\x98\xbb/\x0:\x85\x83L\x4\x98w\xa4r\x9f<\xf0" "\x1\xb1\x38X\x14\xa1{\xaf \xa0\xefup\x8d\xdf\xfKemA\"\xe3\ryM\xa0H\xd8; \x1a%,\x92" "\xc8\xc9(\x9\xcc\x30'\x15\n\xd6^\xcc\x94\xcb\x14i\xc5\xdbV\x96ZB\xb3g\xca'\x1[\x16" "\x1a\xcb#\x18hk\xc3\x45\x1e\x3\xa2\x99\xf6}\xe0\xad\xbd\xe7\xf3\x38\x7!5e\xcf\xaa" "\xb7\xa5\xad\x4\xa4\x42\xfd<\xb7\x10\xa6\xd4\xb7\x8a\x62\xc3\x18\x81_\xf2\xd9\xe1" "K\x93W\xe8\xbb\xd1?\xaa\xbe\x9d\x9e\xa4<\xc\x39\xbfIv\xff\x3\xd1W;\x15q\xe3\x1<\xfe" "\xd9\xbf\xaa\xc\x42\x1~\xcf%\xd7\xc1-pA\xez\ry\xe3}]P]\x11\xda\x96\x96\xe2\xb1\x13" "\x1\x9e\x10\x35Z\xffIg\xc5n\xa8mCb\xa8\x9b\x42\xcc\x1\xf3\xab\xf0\xde\xa5\xf0)\xef" "\xc/\xd3\xf3;\xfdX\xe3\x1a\x65 @\xac\x61yX_\x9b\xb0>\xb\xf8\xf1\xe9M\xa9\x32@\xf5" "c\x7f\xa6!h{\xb4\xb7\xed\xc3\xa2\xf5\xf8\x9f\xd1\x43\x44\x12\x33:\xa9\xb9{\xd0\xc1" "\xd3\x62(Z\xb6\x43\xf4&\xf7]\xd8T\xf1\x16\xa0\xd8\xbb\xdc\xdb\x80\xceQ<\xc4VP\x94" "[Tor\xcai\xdd\x9d'\x7\xeb{[\xdd\x95\x1\xfe\xba\xc3\xc4GhR\xa1\xd2\x1dl\xec\x9a%\xe4" "\xd1g\x1d\xcd\xbb\xb6{o\xb0*x\xda\xab\xb5_\x14\xe\xec\x15~\xb9\x10u\xe1\xf5\xcf\xbc" "*\xa8\xd8\xd3\xfe\x99\xfGB\x9b\xc5s\xb6R\xd0\xdag9\x9\xf3k\xf1XR\xa7\xff\xd9\x91" "\xd9'\xe9\x9al\x95o3@\x8a\x8f^\xdcm{ \xe\xf6=\xce\xb2\xcf\xb8\xda\x94u\xd3\x45(#" "\x8fMZz\xac\xb9\x5\xe6\xa7if*1\xdd\xadNuy_\x11\xf3\x33+\xee\x3\x9b\xea~\xb9\xa9)" "Z\x93\xe8\xf0Z\x9x\xd8\x81s\xc2\xf4\x8az@=\xaa\xf4|\x4\x44\xacI\xe3TJ*\xa3\x19\x17" "mQ\x91\x1bI\xda\xc\x3O>\x9c\x33\x84\xf9\x6=D\x9e\xad\xde`I\x1e\xd2,;\xb5\xc0\xba" "\xc3\x1f\xc5\x64\xbbu\xcfuY|\x97{\xd9\xab\xf9\x5\x99;\xde\xc6\x86r\x8b\x1c;\xce]" "\xf\x63\x2\xb3\xe0\x34\xe5V\xe4?\xbe\x18Q\xb2\xd1\x37\xcfs\x8a'\x7f\xc4\xce?(\x9c" "\x1bj\xca\x82\xf9t\x1\xea\xc8\xe\xa9\xa7h,\xdc\x9aX\x8a\xb1\x0\xc8\x44\x8b`\xac\xb" "6\xf\x1a\xf0:\xb5RU6\xc3\x43Q\xdc}\x11i\x19>q\xfa\x12\x89.\xe7\x9a\x9e\x41U/]\xee" "\xe0^\x9bqE\x87(\x88R\xdeyM\x16\xc5q\xa4\xd6\x1c*A\xdf\xb1\xc5\xe0\xc0\xe6\xe2\xe9" "\xdcN\xc7\x92\x7f\xb7kR\xec\xb\xd5\x81\xf6\x98)i\xc8\xdd$\x0\x37t(\xfcup\x10\xad" "\x3\x9c\xc3\xc9\x17\x42\x1a~ \xd2\x61\x3K\x9f\x86\xc6\x97#\xe9\x82:&H\xd6H\x87\x9e" "\x13\xba\xaa\x98\xbcY\xe4Q\x80\xec\xd9\x7\x80L\x1\x32\xb1OZ\x90pXi\xa8\xc3\xb0k\x1a" "`086@)\xf3\x80\x1e\xf7L\x8fy\x8fq+\xeb*\xebU\xa9\x17\xe4\xe1Y\x7\xe1`p\xa0\xf9\xb5" ")(\x92\xa0P\x82\xb8\xccZQ\xaa\xcb\x34\xe2'\xfa\x8b\x38\x9c\x8$[\xda?\x3W\xf\x4\xc1" "\xa0\x64\x62L\x89)\x93\x8e\x96k\xcd\x98\x1c\x11\xf7\x5\x9\xbc\x65\xbe}=\x18%\xa9" "\x18\xa7<\x9c\x34y\xcd\x93$\xcc`N\xb\x38\xbd\xd7{\xeb\x80-O\xe0\xc6\xc7]\xc1IOh\x16" "\xddR\xf)\\\x1a#\xd0\xc\x8e\xc1nE\xd9\xd3\xaa\x9e[l\x13\x8bvi\xbe\x34\xf6+rP\xfb" "\x1`4\xfc=E\x9f\xacI\x1b\xb4\x7P\x1f\x99\xffi\x15\xf1{\xa0X\x7f\x17\xd1\x9f\x5\xe4" "\x1\x1a\x82`\xc6\xd9\xea\x10\xcf\xe8M\xb4\xcd\xaco\\\xb8\xf8\xa8\xc1\x9dq\xa8\xb5" "\x1c\x80?\xec\xaa^x\xd0\x90\xeq~m\xb0\xf1m\xb5\xe3\xfdvk\"\x10\x33\xd6LF\x95\x12" "s\x99\xca\x9eUY7K\xbeq|w'F\xff\x2\xbe\r\x9c\xda\x2\x16\xa2\x2H\x9a\xa5\x87- \xe\x9c" "\x96\xa7\xco7\x9&L@G\x84z`cS\xfc>\xab\x9\x95\xcb\xe4\xdc\x92\x9\xcdS\xd2\xf8i\xe8" "\xfbI\x95-%\x7\xc2\x8d\x97\x8a\x44HH\xcf}@ \xeV\xa1\xdd\xe\xca=\xd2\xcd\x86\x1a\xb8" "\x2\x9e\x8f\xed\x1e.\xa8\xa4\xb4WQJ\xc\x11\x8cld\xb3\xff\xde\xaf\xd9\xfa?\xbf\x92" "\xdc\x13-\xc4\xac\xb1\xdd\x8.\xd5\xef\x10\xe1\xc8[\xd4`\x1a>\xf2\xa6\xb5\x8=\xed" "U\xf5\xd9\xd2\xc5u\xd0\xeb\xa8\x97\x0\xb4\x80m\xbc\xc6\xe5\xd2\xa2\xad&\xc7,\xb5" "P.\xaf\x92\xce\x2\xeb\x7i\xb5R\xf7\xb3r\xed\xc1\xd1N\xbc\x12TUE\xd5^\x1b\xe0\xca" "\xce\x86\xe\xa9P\xc8\x91\xf4z\x6n3O\xda:\xfa_\xcc\xe5\xcbX\xa1!\xc7\n\x64n\x8f\xcf" ";k=+\xdd\xbd;\xb1\x37\xabK\x1b\x30V449C-\xf4\xaa\x8\x9bp\xb4u\x11\xcf\xec\x8f\xf6" "\xbc>\x97\xb3 \xf8\xbe\xe6\xfbI\x98\x1d\xd5\xb4\x11 ~\xe7\xf4\xbc\xaa]\x17\xe9\xae" "0\xfby\xca\x88|\x4 \xc8\x2L\xb1\x44Q7\xe2\x43\xd4/\xcb\xfe\xa9obY\xdd\xd0]3[9\xe" "\xd2X\r\xc8-\n\xba\xee^f\x9dS~vn~\xc1lQ*\x8bG\xaa\xe6\x38\r\x89\x94\xc8}\x0\xdf\xed" "\x9f]\x85#*\x84\xe3\xd3\xcb>\xa5\xb3\x7\xc1l\xbb/\x96.\xff\xa1l\xae\x18\xa2\xb6\xf8" "\xb1\xef\x4 \xe0K\x1e\x86X\xf3h\xb7\xd9M\x94\x9a\xea'\xac\xa6\xad\x42\x90\x7\x36" "<\xe8p\xcd\xe7W=\xca\xb8\xe9\x81=\xdb\x31\x81\x63\x45%tA\x18\"\x8\x90\xa4\xc1rI\xce" "z\xe3\x14\xa9\xad\xcd\xe3\x89\x94\x9f\x14\x64\x97kJ\x81\x9e\x87\xb7X\x8a\xaa\xf4" "\xee\x1aP\x1c\x3\xa1\xc7\xe9(\xc3\xb4@\x1e\xbe\xb2\xeb^\xc5\xb6]\x6\xd6\x1c\x11\x83" "\x1aP\xe5\x91$\xee\x7f\xda\x18\xfcI\xca\xfa*\xe4\x7\xafRm\x1a\x94\xa3\x5\x96\xe5" "\xaa\x91\xe7\x99\x1e\xf4\xc0\\\xb0\xff\x34\x8e\x86\x94,pl\xfc\xd8y\xb5'\xc8\xe5\xf0" "\xc\xcd\x36 \xf2\xe1\x11\x83\x17\x17,\xe\xf4\xcd\xa0r\xfa\xf9\x95\xd0\xd8\xdb\xb" "\x83\\\xc9\xdf\x19!\xfa\x42\xbc\xd2\x61=8\xb1I\xa9\xff\xc4QNr{E<|\x8d\xed\xec\xf4" "^\x1el\x15\xb7\xf2\xd5\xe8\x41\xb2\x8es\xe6)\x8e\xd6\x45\xaa\x91\x33z\x7\x2\x18y" "\xc9\xc3\xc8\x6\x18\x37\"\x42\xf0\xc6\xd4 nW\xfc\xb6\xe\x42m\xac\xc9\xeb\xe8\x31" "\x9c\xcd\xc3\xa6\xab}\x7K\x85\xfb\xfa\xa9K!5y\n\xe8/\xb3\xa4\x89;D\xf2\x41N?\x9f" "=\xa8Z\x83\x8\x41\x7f\x19{\x92\x81\xc-l\x80\xb2\xfb\x8drZi\xa5\xdfn\x19|\xd8*w\xdf" "\xac}\x82\xed\x90:I\xe8\x1d'\xe6%jrhX\xa6\xf4~\xef\xfc\xac\x83\xae\xd1p\xe2 Y\xc4" "\x1a\xae\x41\x9c\x13\x97\x43\x6w\xb1\xe3\x8dM\x10\xea\x1ds\xd5\x9b\x83m\xc1\xa0\x32" "\xf5\xff<_\xcb\x37\xb1Q\xca\x33\xdeo\xed\xb9\xb6s$p\x96^\xc1\x95G\xe1\xcf*qz\x1d" "\x85\x8a\xco\xf0Zt\xfc\xc9\xb5\x12\xe4\xf5\x4\xe9\xde+\xda\x92*%N\xd8\x10\xb0\xca" "\n5,>m\xb3\xe0\x8e\xc0\xaf\xd8#\x91i\x7f\x38\x18\xbdP\xa9\xcc\x3\xaa\x1a\xd6*\x9d" "\xdb\xe4/Z\xb7\xf4\xbc\xc1N^\xf4j#u\xf\x8b\x9\x95\x9c\xbJ\xfd\xd7\x9f{\xfd\x8f\x9b" "\xa0\xdd\xe9*\xe6\x31\xacR\xcgdTepG\xed\x18\xa0r2D\xe9\xaa\xcf\x63\x94\xc7\xd1\xdf" "\xe2\xcR\xef\xde\xd8\x32\xb1\xaa\xe4\xdd\x2\x15'\x1f\xc4n\xf5\xb9\r\xe2QO\xb1\x18" "9jz`i\xbbI\xb9[\xb2@amA\x15\x9b\xe7+_\xb3}O 7\xc3\x9a\x41\x63\x18\x3y\xe5\xe9\x1a" "\xdc\x98p\x3\xb0\xa1\xcdgl\xcb\x8c\xf6\xe4OR<;t\xd5\x43\xd5^\xb3\xcc\x46TcD\x7 \xbe" "\x8\xee?\x85\xa6\xb\x93\x98g=~I\x0\xc4X9y\x88|n\"\xd3\xf2|\r\xb0\x35\x9as\x5\xb5" "FRt\xd0\x9f{\xcb;{\x4\x89;,\x9c\xb5v\xe8\xe5p\xb4\x9e\xfc@\x9c\xe5\x5\x45H\xff\xb1" "\xb1\x9d\xd3\x9\x80)\x95\x83`\xb0\xd9\x36\xb7\xb1\x7\xce\x4\x66H\xba\x43{\xef\xa9" "\xbe\xf6{\x8c\xbd\xde\xcb\x82\xcd\x9cK\x1b\xcd\xc7\xfcj\xf2`u\xf3\xcb)$\xdf\xac\xf5" "\xf1\xc4\x16\r\x1f\x96\xf2\xd7Y+W\xed\xb1\xca\xd2\xe\xf9\x39Sq\xd6\xaa\xc1y\x1e\x98" "\xbfK\xc8K\xfd\x81\xb9*\\+@\xdb\xfe\xe3\xd5\xe\xe9&\x9d\xf6\x32\xa6\x8c\x9fn\xf7" "]i\x93\x9evJ\x1bOR~I\x93\x9z\x1b\xf2\x8cnV\x90\xab\x9e\x32\xc7;)\xd0'^\x10\xf9U\x9b" "\xa7\xf9k\xf7\xc7\x1iL\xe1\x31\x33\xe6\xfb\xa2'l\x12[\x83\xf4:\x84\xcf>\x8a\xbaJ" "\x86\xb1\x80\xf6hB&~p\xf5\xc7\x94\x30\x36\x89\x96*\xe0g)\xe,\xf8~?\xddwN\xd1s\xf9" "\x1f\xa1\xfb\xb0\xf6\xeb\xa3\xef\x1a\x34\xe8&`Ia\xd2\xcbG\xb4\xb&\ry\xb9\xb2\xfd" "\x1d\xe5\x84\xeay2\x9d\xc8\xecu\xe8M\xbc\xd9\xb\x88\x8cY\xe8\xf7\xe5\xe9\xfN,\xf7" "\xad\x8c\xc5\xd6\xacjB\xbb\n\xba'#n\xe4\xd6\x8e\x99J\x1f\xa5\xe5\xec\x15\xa5\\\x15" "\xb0\x30\x62\x97\xa6\x37\xd6in\x19\x33\xd8\xc0\xe9\xc4\xe8\x1a\x46%\xf4'\xaaG\xb7" "\xe8U;X\nE\xc1h^`&~V>\x9a\x37\x85\xa9\xc1n2\xdf\xa6jU\xff\xcc\xc8\xeb\xce\x39V\xc1" "\xe9w\x8b\x64%\x8e\x9i_\xae\x8kI>=/\xccL\xf6\x90N*\xb2+K\xa6\x31\xc5\x5'\xa5h\x1" "s{\xfc\xd8\x81\xbf\x4\x99\x1bvwf/\xb\xc6p\x9b\x98\x1em\xd9\xdf\xa9\xc\xd3g.\xa0\xe" "\x0\xbf&I\x16<= \xc6\xba\xea\xf3\xfa,\xf5l\xdc^\xcc$b\x89\x36\xbd\xc5\xa3\x9\x10" "\xce\xe7\xaf\xb9~\xddO\x1a\x38\xfa\xb7\xfa:\\\xad\x31\xbb\xb8!\xea\x10;g\xf9\x9d" "\xbt\xd7\xc1W\xa3Q\x14K\x9du[6\xe2P\xfd\xa9mhk\xf4\xd6\x9d{o\xd6\xbfX\x8\xf7\x15" "\xfc\x39=\xe1[\x86\xa6\xe4\xb1\xe8x\xad\x83\x11^\x90\xed\xa0ST\xfc\x1c\xbc\x17\x34" "\xa0$`|\x8\x1f\xc2)\xad\x35w\x0\x30\xd7}\xd1\x64\xc8\xe2U>\x97\x45\xed@\xd9\xbc\xe5" "Bu6y:\xf0\x13\x66Z9L\xf9\x66\xf2SW\x13\xed,J?\xf8\x16\xf5\xc+\xc9\xc9\xdc\xbf\xe5" "2#\xd0j\x0\x92h\xdaYk\xf8\x94\xce\x95\x80\xef#\xf4\xee\xe7\xdb\x88wpp\x9f~\xa8\x90" "\x9e\xf7\x44\xba\xe\xa8Rg\xe6%s\xdb\xa5\x1c%\xf7u(\x87\n\xd3\x17\xf1\xed\x63\xb2" "\x80/\xc5M\x81\xd1I\xa2\x12\x17\x62\xdc\xcav\xe^\xa5\xe7\xac\x32\xa1\xd4\x81\x91" "\xd6<\xbf\x1e\x4\x9bx\xdf\xa7\xbb+\"7\xa9\xd5/qHY\xf5\xeal\x92\xd4L\x17\xb6N\xfd" "P~,\x98 W\\\xa9\xba\x46\x2o\xbc\xc2^\xfb\xca\x84\x9a\xbcJ\x9c\x38U \xe5\xd7\xd6J" "x}\xfd#\"\x9b\xfa\xca\x7\x85\xaa!\x9f\x31\ro\x2\x10\xe4\xaa\xfd_u\x3>\xd5`\xf1#\x96" "Dv\x97+\xdb*\x80\x87\xdf\x61\xd0\xffG\xfe\xf5r\x0\x9a\x81\x80\x9cp!\xd6-\xbaS\xf6" "\xb6\xa2k\x97mS\x94\xef\xf1\x9\xb3\xafX\x8c\xf8\xde\xb4K\xb0\x7\x63Rd#\xd8\x7x6\xd5" "\xe3\xbc\xe1\x3x\xce\x95\xcf\x14\xd8s,\xca\xb6\x91\xdd\xd1?\x9a\x0\xd2\x85\xf2\xd6" "?\xa8\xe7\xb1\x61\x36\xb1\xa8\xed\xfb\x44\xa4\x62%M\xe6\xd3\xa5\xecq\xb\x91\x84\xc2" "\xbf\x8b#\xeb\x1a\xad\xc2\xd4\xb\xcbS\x82-\xd2\x9fN\\\xb0\x45>\x86<\x11\xaas\xe1" "\xbb\xfc(\xe3\x36\xbd\xb5\x9c\xe3\xe8\x80\x65\xea\x9d\x8by\x99\x14\x61\xbc:\r\\\x97" "\xfe\xba\xb0`y\xf7\xa1\xde\xfb\x82\xbc\xa1/(2\x9c\x6:\xb7&\xab|j-\xac\xda\xc6\xe1" "\xda\x46\xe5\x82\x85\x1V\x95\xa4\xb2\x6\xd9\xe0\xa4\xdfp\x93\x3:\x9e\x42\xdd\x9|" "j\xc0\xad\x87\xfd\xf4+\x8d\x45\x39\x36s\x14H\xdd\xd3\x87\nI\xc\xd4\x8f\xce\x94+\xae" "j\x88\xcc\xf\x85%x\x8e\"\"\x39\xa3\x84v\x94``\xa8\xfe\xb6\x95\x96\x13\xb2\x8a\x1" "\x9\x2\x93\xa9\xf5\x89_{P\x99\x85\xe3\x64>\xe4wR\xeb\xad\x36MTC~\xf2\xcel?\xe8jM" "+\xe1(\x12W{\x12m\xf1\x32\xcc}`-\xc5\xecl\xee\xd3\x4\x1a\xf2\x8\xb6\x9b~\x98\xcc" "\xadH\xb2\xe6\xd9\x9a\xb6\x7\xbb\xb3:\x19\xea\n\xd9\x41k1\xe1\x45\xd3\x93\x9e\x4" "\xe9\xb4\xaf\xbc\xc2PL\x82\xd8y\xde\xe5\x44U\xc0\xf5\xd0\x1c\x2\x8d\x46H\xbd=;\x9c" "\xd2\x3\x65\x37vA\x2\x0}\xf0\x35\xa9\xed\x96`\x12?\xae\xda%Zs\x85\xad\xab_\x13\xe3" "\xfd\xc4\x90P=\x9b\x63\x1cS\x7f\x1c\x44G\xa4\xfdO\xe3\xf1\xcb\xb2\x42pT1\xa9\x85" "\x8a\xc`\xfa\x8a\x83l0t\x97i\x80S\xcd\x8c\x62\xf2\x1a\xad\x3\xab\x6\xac\xa9 \xbc" "\xad\x87\xf6\x8a\xfc\x45\x39\xf3\x9d\x9dgY\xb7\xc0N\x15\xed\xe5\x9b\xbc\xc0OR\x8a" "'z\x92qR\xec\x89@\x91\x92\xf2\xe5&\xf7\x99!\xa4\xe7o\xec\xe2\x37?3u\xc3\xc0\xa3j" "\xe1\xd6\xf3\xbd\x1bpXj\xb9\x46\x1f\x65\xdf\xc1\xc5\x65K[Z\xec_\x92\xd6\x38z\x11" "\xbb(\xb8\x1d#f\xfe\x46:^\xa0\xf8\x19\x8a\x1f\xd8\xdf\xe0\x88\x9a(\x1e\x10\x16\xd7" "!\x88\x2=\xe9\xc0$Gd\xe4\x80\xb8\x1\xf8\x33\x81\x36\xb\xffz5\x9V\x9\xa6\xe6\x11t" "\xb0'L+r\x93P\x9f\x9cNN\xec)\xe,S\x8c\x2\xad\xb8w\xc8\xb2\x1f\x62\xc0p\xf5\x8c\xea" "\x8b\xb4\x36\xd3\xb3G\x6\xdejo\xe8\xda\xe9\x31\xca\xaf\xba\x63J\xca\x19H\xda\x44" "\xc2\xce\xf4\xd8\xbek\x19M\xb5 \xb5\xe2G\xaf\x46\xf3\x1e\xe8P}\xeb\x17" "t\xabr\x81\xa3+\xd0\xfdnd9\xfe\xe6\xe9JI\xa8V~h\xd3\x15l\xb3\x42\x12\xea\x86\xb6" "\xe9\x7f(fM\xad\xac\xf5\x17>d\xc7\xd3\x92\x37\xd0tK1_\xab{k\x85\xa6\xa2\x95Z\x8f" "E\xeb\xff\xbd\x87\x9b\xda_|\xb3(\\rAP\x2x\xed\x45t\xe4\x64\xad\xb3\xd3\xf0\x7fZc" "V\x8s\xab\xa6\xe7\xf9\xf3\xf5\xaf\xc5\x80\xd0o\xe0%K\xce\xa4\xda\x8a\xf4\xdf\xad" "\x93\xb9\"]ck\xc\xadzDf\xd3\xel7\x8b].\x15\xe5J\r&\x86\xf9q\xb8\xa3\xa0K\xd4\x12" "\xeaMYxK\xf7;{\x82\x15~9\x80V\xa4\x8f\xd3\x91gt \xdd\\\x85\xc3\xae\xd1G\x9\x87\x1f" "\xa3\x19\xb5gx\x89\x2.\x1b;\x9e'\x17-\xee]\xf9\xaa`L\x98\x30|Wn)+\xbd\x17\x83k\xef" "\x6\x8b\xe3\x41\x36S\x8e\xa7z\xd4\xa0\x0\x89O\xd8%\x1e\x99P\xfc\xc4\x1bp\xc2\xbe" "\x93h\x15\x0V\xbc\xd4\x1b\xad\xb9\x1d\x89M\xa2\xf9\x8dY\x9b\xf2$\x12\xf\xc5\xa5p" "(\xc8\xddU\x14\x8cx\x8a$\xf8\xfe\xb1\x9d\xa2\x37\xfc\xa4\x93\xa9\xa0\xe3\x13\xe3" "{\xae Z\x0\x82\x9c\x9f}\xby\x3i\xf6\xcf[\x1cT\xf4\xef\xe3\x91xQ\xe9\xf6z)\xdd&M+" "\xa0\xb1\xbd\xb0]\xe9\xc6\x89K0\xcf\x8d[-7\xa9`\xb2K\x14\xacR\xe9\x34!\xda]?.D\x84" "\xd8p\xf3\x33\xce\x95\x44\xa9\xf5x\xed\xee\x46\xde\x93\x12[\xd6^\x5\x84=G\\d\xb2" "\xfc\x3li\x9e\xec\xd9\xa1\xb5K\\\xa8\xc3|\x2\x36]\xfez\xfe\x91\x82\x4\xf6\xe4\x9" "\xd2N\xf9.\x8a\xf2-\x13%\xf8K\xd3\x17\x16\xad\xd0\rS#\xd3M\xa1w\xb1\xdd\x37{w\xa5" "\n\x8\xd8o\x13\x0\x0\x39\xbaN\x15\x1\xed\xabm\xdb\x0s\xbaxC\xe2/I\xf9<\x80\xbb}~" "\x9\xa1,\xe\x9c*\xf0P\xfa\x39\xa8>\xcf\x87\xe6\x6r%zb\xafo6\x86\xaa\x17\xb0\xf2\x46" "\xfc\xf1\xa1\x9\xcc/z*t\xec\xd6(I\xc7\x41\xd4]\x92\xbe\xb3\x86Kcw\xf6HXZr\x92\xf2" "\x98\xcc\xcci\x8a\x96\xf4\xc8\x39\xed\xc7I_P\xb3$LY\xed*1" "5\x9\xe2\x61\x32\xec)\x6p\x92\xc1%xqQ\x4\xdf\xf4\xcc\xe\x30\xec\x1d\xa6\xc1\x39\x61" "\xb9\xf8\xb6\x8a\x88\x65\xfc\xab(\x9d\\\xba\x90M\x88\x91\xaa\x7f\xec{\xd5|\xb4\x18" "<\xefU\xad|\xbd\xa7\x1\xd2\xcf\n\x38x\xc5*w\xe1\xe2,\xfc\xb4\xbf\x8f\xf5\xe3\xe0" "\x83?M\xdeY\xf2\xe8\xa6\xdc^\xb9\xb6%\xf0ZeuD\\\xf9\x82g\xe4\x42\x6\x1d*\xd9\x9b" "R\xccx\x9d\x1d\x8fi\x88\x43<\\\r\x1dKOQ\xf\x8cs\xf6\xbb\xa8\xe9)6.\xbf\x38\xd2l\x9b" "\xe8\xae\xca\xec\x33\xf2h\xe2r]?Q\xcd\x32|H\xd2\xab\xc5.&[\xe6:*/\xc8tT\xae\x42\x0" ">\xb5\xa2\x8dl\xa5\xda-~\x8a\xbb\xb9\xe8\x43\x9bh>\x8e\x63\x1f.m\xa1\xf4\xb8\\\x4" "\xd8\xbb\xb1s\xf,\xaa\x9\x1f\x1b\x1e\xef\x31\xe0\x8f\xa4\xdf\x9a\x9b\x9e\xb8\xc6" "B\x1c\xd5\xbc\xc0\xf6\xde\xd6\x7f\xd1\x96\x17!:\x80\xd1\x80$\xaby\xf4\x8\xf7\xcf" "\xe3hD\x83\x81\x9c\x85\xa0\x61\xc5;O\xe8S\xe3\x82\xa3\xa7w\x8f\xa4q\xa1\x96\xf2N" "\x12K\x14\x36)\x92j$b\x0\x37\xe5\xf7>\xe2\x93\x1\x95\xe2\xec\xf4\xec\xd5\x34\x61" "\xb5\xb7\xc5\xaa\x46\xc0`T\x13\x66?F\xec\xed\x8a" ">\x98\x33K\x9c*\xb4\x30\xf4\x35\xf7\x92\x17ht\xdf\x89\xf2\xf1g\\]5\xf\xa2\x17$\xa0" "\xd2\xf1\x9ak$\xf8o\x85\x8d\n\xf6\x93M\x8f\xb8@\x16\xcf\xff%\x8b\xa1Y5\xa2\x61-O" "\xa0m\xc5W\x95\x34\xc7\x19\x33$\xb2\x82\xa8\xf5\xa6z\x8cw\xee\xe3^\xcf/\xc7\x0Z=" "\x8d]n\xd4\xa4\xe1\x9d\x38XH\xa8\xb9Z\xa6\x45\x45s\x81]\x1\x82\xf4\xc9:?\xac\xe7" "-|,3\xce\xe1\x94\x99\xd1#*\xdf\xb7\x42\xe6!*l\x93\x66k\xc1\xda\xc3\xa4'\\\x12(\xab" "\x98\xb9w\x98P\xea)\x1e\xdd\xa7\xbb\xf1K^,h\xaa&\xf1\xb8w\x92\n\xff\x9c\xa3\x7\x88" "4\x87\x98\xb4\x42;9O\xad\x93[5\xe3\xd5\xe7\x12w\xec\x32\xb1\x42\xa3\x86\xa9o\xec" "\xe1O\xb9m;1\xfb\x36\xb3\x64@\xa7\x1c-\x83\xc5\xda\x38\xc9\xfe\xdf\x38\x14\x8f|\xd5" "\x87H\xbb&\x12\xbeKH\x95\xb0.\x8e\xb0\x9a[\xeuH\xcd\xe6\xc9\x39\xce\x88\x80\xeb\x89" "\xb1\x9b>&\xf3T\xcb!\xad*1\xf8\xdbkIh?\xc7\xfdxP\xa8\x1fK\x80\x1b\xb9\xf1\x8h\x84" "5\xa2\xb8\xff\x61v\x7\xc5p\xde\xfc\xe9\xc4Xj\xbd]\xa7\xcd*\x81\xc9<\x9eS\xc3\xec" "\xc7\x9d\x63{\xe3\xd0\xd9\xf8\xb0\xb0\x82\x14\xaf)\xb7\xc5%\xc6\x41[\x89\xe0u\x9c" "\\c\x89\xbf\x0\xd0\x1e\x88M\x9f\xf8k\x1b\xd3[\xa5\xd6y\xe8\xf\x93\xd2Y\xe8\x85\x88" "\xc5\xef^\x81\xd8\x9a)\xb4\x81N\xf4\xa5L\xb3wP\x18/Pf-\xb8\xfb\xc2z\x3\xff\xb3\xd0" "\xbc\xeb\xa5\xcc\xa6\x81\x5\xd5|,$k\x9\"+%\x92mSh\xe6'(\xac\xb1\xb9\x8f\xf5\x1e\xb1\xfej\x13\x8e\x66" "\x3\x61\xca\xf8\xf3\x7M\xe1+q7\xdbH\x19\xbc\xa2\xb3\x94\x9\x63l\x8f\xf8\x36\x8c\x7" "\xcc\x46TQ\x81\x8e~ro\x2\xc9\xdc\x80>\x1eS\xfa\x4\xde&\xccY\xb2K]\x86\xcd\x16\xa1" "\xab~\xa7\x30:\xf8\xcb\xb2\xad|\xe3\x2V\x5,\xd4\xc3\xb0\x86\x44m\xb5\xbd\x86w\xa6" "\xc8\xfd\xc1;\xfcx$#\xe9iLz`P\x1a\xde\x93\xa3\xc8g\xa5\x94\xc0L\xc0\xfb\x16&\xfd" "\xe2\x84\xb5\x66\xea\x1eOo{y\xf4\xf2/\xe9\xc5\x86\xd2]\x8b@\xc0\xa4\x14{z+\xe2J\x83" "\xaf\xa6_*\xdf\xf8\x16\xd6V\x19\x5-\x81\xc9\xcc\x87\xbesr3\xaa\x9\x16\xb9\xcc\x41" "sn\xa4\x63\xfM\x10\xc0\x86z\xae\x5\x9f\"\xec\xbc\x38h\xed\xd1\x1fL\xc9}\xc4\x45\x81" "\xc5.\xf5\xa5\x87\x9d\xa4\xe\x35\x62\x81\xbc\xe\x1er\xc0^\xf\x3\x9ag\x9f\xc\x13\x95" "^oW\x7f\xb6\xe7\x8c\x94\x81\xe\xbc\x9cu\xd9Q\x9axh\xd4t\xb3-\x8a,b\xd7\xe8&0\x5\x93" "%\xa9\xcd\x33\xd2\xca\x35\xd0\x36\x9b\xd4\\\xd6\xf1}\x83\xc2\xc3\x1r\x1b\xd3\xc9" "\xc3Lh\xb0\xe7\x9\xdf\xe5\xb\x42\x8aO\x5\x17\x86\xab\x64\xf7\x7\xddNM\x8a\x7^\x6" "W\"\xd5\xb6\x8e^\x90\x95\xc5\x18L\xd7\xc0\x12\x46\xcf\xc4\x18\xf7Y\x14\xf0\xa0\x1b" "\x8\x8f\xff\xfa\xdf\x85\xc8I\x9c\xb1@\x8fs\x96\xb0\xd9K\xb]\xfe\x84\xe9\xa6\x19\xc5" "^\x87$\n\x81\xaf\x16\xee\x89\x39\x84\xfe\x33\x1f\x15\xf5\x97\xcd<\x94\x15S?\x9bS" "V>G\x8d\x8cj\x15\x9e\x42\x8a\x80m3\xf4\x61o\xfd\x81\x3\xad\"\x1a\x19\x84UG\x9{\xd9" "\xf1\xb2\x34\xc1\xfe\xdc\xdc\xfa\r\x8f\xfe\xc3V\x13\x5\x15\xc5\xc5\x11\xfe\\[\xa8" "\xd2_\xf6\x1e\x63ht\x1c\xc4\x66Y,\xd9 in\x96L\xfc\xb\xde\x1c^\xb\x1f\xba\xda\x15" "\xb8q\xd8\xee\x1a\xd9K\xc4\xa4,\xbaj\xf0Rj\x6\x1d\x15\x35\xd8\xf3\xfbL\xfc\xf2I\xad" "\xf9g.s\xa4\xafZ\xe3R\xb1\x91\x1]\xe3\x31\xdb\xff*\x88\x98\x39\xc4\xe\xa4\xd3\x15" "\x81\x36\x4\xf4OoQ\x14M\x0\x14\xfbi\xfb\xc5\xd4\xd6M\x94\x86\xb7(]u3\xa7\x46P9 !" "/\x1e\xe2\x8b\x61\xb9\xb4Oy\xe1]\xccQ\xfb\xfe\xdc\xb9\x1b\x9e\xab\x18\xbf\x94%%\xdf" "\x15\xe6vD\xbdM\x5)\xfe\x44\x33\x31u\xed\x90\x9c\x6\xd6\xec\x35(\xf\xf1\x35K\xdc" "\xfbP\x92\x95\xff\x31#\xe2\xa5\x31\x8yv\xenz\xf5\xb0\xd6\xfd\x44\xc1O\x82\xcaL\xa8" "\x9f\xc4\x17qt^\x12\x90\xac\x86\x90\x9d\xcd\x89J6\xb\x9cT\x99\x39R,~T\xab\x92\xd1" "\xcf\xb[\xdcL\xf8\xe9\xc8\xb9\xfdI\xb5\xf2\x46\xb6\xbbQ\xfb\xb8\x81\xebj\x11\x84" "\xb2\x38:\xcf\xa9\xc8\x90}\xd7<\x8b\xe9\xa2\x0\xe5U\xf6t\xc7=\xe7\r\x9c\x17\x1e\xb3" "\xa2\x13?\xc8\x5\x8c\x1a\x44\xad\xf8\xb1\x43\xac\xb4;9M\x14.\xed\x9f\xbe\xa7\xb0" "\xcc;\xe9`\xe0\x38N\xf1\xdc\xf4\x9J\"\xe0\xb3\xb4\xb7;\x88\xec\xeQ\x83\xb2\x99o\xd9" "\x6\xb9\xbf=\x12\xa8\x18\xc8\x17\xb1j\xfb\x99\xbf|\r\xe1\x91\xee\xf8\xae\xed\x90" "\xfa\x13\x7f\xd2\xab\x84\xdc\x9d'\xe4\x97\x93^\xc1\xbeG\xd5\xb2U^\x98\xd1X\x6\x87" "\xff\x82\xcb\xf0\xb9\xb7o\xe0sb\xc\xe3:$P\x9\\\xe8Y\xa8\x9eh\xa9M\x96\xfd\x9c\x8a" "\xe0{\xb9\xd0`\x8ag\xc1}\xc1\\\xa2s\xc0\x13\xc8\x16\x15\xe\xed\x83\xd0?P.}\xbf \x8b" "wH\x11z\xd5\x9b$\x18|`\xe4\xa4O\xac\\\x9dS\xca\x11\xa2\xf5\x42m.P7''\xc5v\x4&GH_" "?\x6\xa7y\xc1\x1a\x39\x8e\xb9\x14@\xc7M\x85\x66T\x87\x10\x42\xa9v\xcdT\xf8\xf3\xe7" "q\xac\x35\"j\x8b\xdd\xb8x\x84\xa1\xd7:\x88\x80\x19\xe1\x18\x45I]o5N$\xaf#\xa9\xcd" "\xaf\xee\xba}Q|\xaf\xd8\x9cz7\x96\xee\xfc vF~[.\xf4\xa2\x44\xd2i\xfa\xd7\x41\xb2" "KM\xde\xa4\xd5#t\xaeVUE\x7f\xa3\xfK\x8b\x1b\"\x11\nh\xbb\x90\x11\xf5^\xdf\xf5G\x83" "\x82\xcf\xc3\xff\x17\xc3\xe5*7k\xe2\x95\xd3Ty \x12|\x96$|\x9c-\x6\x9e\xa9\xf1\n\x41" "\xd2\x6\xe4[\"\x89\x1\xd8\xecG\xf2\x61TLK\xd1\x97\x46\x92\xecQ\x95\x83\x9a\x63\x8d" "\xe4\x91\x2)\xf\xd0\x9f\x83\x1a\x1b[c\x98\xee\x8c#7\xb1\x8b\xa4~)\xd3\xa2(\xcc<\xf1" "D}\xf2\xde\x31`\xb2\xf2\xea\x11\xeb\xd3\x43\r\x44\xd1v\xc1:Z\x87lk\xf1\x37\x65\xfb" "/J\xa9\xe7\xe0\xad\x31\x1a:\x83.}N\xc3\xd0J\x15L\x4\xc5\xb\xdd~\x8\xc3)\xc0\xc6\x82" "\xc5\x66i\xfdpM\xa7\xb4\xc4\xa5jP\xf5\xf`\xad\xc6\xa3\xf\x31T'\x6\xf8\x9/\xdf@`5" "\x16{\xda\xfe\xf9\x81\x11\xe3\x9d=\x8b\xe1?\x5~DV,\x1b\x3\x31\x15\xc8\xc4\xad\xca" "\xba\x90\xb7\xf7&[rg\x95,Qd\xe6\x8a\x44\x34\xb7hAx\xa1\xae\x46\xe7\xbf\x10\xe3\x44" "\xab\x99y\x94\x61\xab\xae\x9e=NBM\xe0\xbd\x99\xa6l\xd3\xb0\xfa\xcf)\xef\x82H" "\x91\x83\x31\x7n\xc4X\xa8_\x98\xcb\xb0\xfc\nxc\xe\x99\xdbz\xb0\xf1x\xc6)\xbbrlQ\x18" "%\xcbr%\x14\xca\x36}\xcd\xd0g\xa7\x31\xc8\xedr2N\\\xf7\x15\xa1&\x2\xf6\xa4\x9f\x92" "\x1f\x6\x32\x17_a^\x1d\x93\xbb\"V\x84\xb5\xf\x39\xb2me\xa0\x11\xe\x9e\xa4_\xabQv" "?\xb7\x85\xe5\x5\x94+K\xe\r\x8d\xe2\x13V\xd5\x8c]\x87\xefiE}\xd4yD\xb3NK))<\xd5\x35" "\xf7\xc2Zv+\xf2\x42\x33/\x12\x95]\xaa\xb\x4\xaf\x9b\xf\x1a\xe4\xbb\xcb-J\xbf\x16" "7@8VmA\x9eq\xd8\xb9\xd9\x1a\xaf\x8b(8\xc3\xf6\x9dx\x2\xd9\x10\x1\x83~\xeai\xbeG\xf5" "\x95\xf8\x64\xee\x3\xfe\"p\xe0UVh\xcq\x9a\xf\x33\xe2IS\xf7\xbb\xe3\r\x3\xc3\x1f\x88" "\x12Z\x88\x8a\x9f\xc4t\x6W\x8cy\xddi\x9a\x9es\xae\xc1y\x97\x37N\xc9N\x9f\x1G\x0x" "\x6@}\xf2\x13\xed\xf9\xfa\xe4W\xf3\x96\xe4\x3\x92\x91\xc2>\nT\xe6\xd0|(e#t\xa3g@" "L:\x8cP\xa7N\xaaL\xee\xae\xa9\x8a\x5\xec\"\x0\x3\xa8\xf\x35\x65\xad\x5\x10\n\x39" "|\x89\xde\xde\x62\x9b\xa9\xafg\xcd\xf1`\x8b\x8\xba\x1\xf6SD\xbd\x44\xb5\xd8\xa6U" "\xe1\xfb\xd2R\x1b\xf\xac\x16\xb\xfb\x46()loq-\x98\xef\xef\xd2\x8c\xbe&1\xdcMS\xbd" "\x91T\x83Xl\x96\x19\xc7\xa6\x65\xea$8w\xb4\xd3LU\rG:6\xf9\xc1\xdd\xab\xa8\x9a|rz" "&%\xf7l\xc3\xd8sN\xfe\x91?\x4\xbfj\x9a\xba\x43Z\xb3,\xe2o!$\x99\xcbLN\x97\xda`+K" "Q\xc3[#\x7f\x93>\xf5\x1e\x9\x1b\xea\xcb\x8e\n\xc2u\xb1\x43\x39\xe1\x32\x99\x37\x43" "x\xff\xb3\xa0\xf2V\x91\xdd\x7f+\xee\xa5\xed\xb9\xbd\x15*\xdc\x86\xd0\x1f\xa3\xe9" "\xac\xee\xf2\xee\xc4[\xd0\x16\xe2U\xdcX\xdf*\x9c\\\xd6J\x7\xb4\xbc\x41\xb\x37\xa1" "7!\r\xcf!L0'\xd1\x87g&V}\x9cP\x92o\xf4U\x3\x91\x7\x9a\x2\xc7\xb4\x8|\x11\x8\xc5\x9" "\xd8\x8fV\xdf\xcez\xc5\x97\x88\xea\x14\xa4/\xc6\x94\x19\x88*\x86\x9c\x62Ta\x88\x43" "y\xf\x98qC\xa6\xba\x0`\x82\x97\x39\xcb\xe2\x13\xe3\x1\x94\xf2\x1d\x1-\xce\xd3\x4" "G\x8G\xed\xc+\x8fY\x7f\xf\xd5p\xeb\x4\x41\xc3\xa1S\x84\x30\x9d\xd8?.\xef\xd3\xd2" "v\x9\xdd\x9\xc\x5W9\x1a\x4\xbb\xf9\x11\n\xfd\xd0\r\xd5\x84\xbe\xbb\xcb\x42P\x17M" "u\x3\xd8\x61\xb\xec\xa0\xae\x95\xaa\xba\x34\xa3\n\xbb~\xce\xf6\x8e\x10vj\xda\xc8" "\x1a(\x14\x5\x1bOHDx\xc6k94\x84\x36hvp\x18_\x17\x17\xf8M\xa0\x62\xd4\x8f\xe0w,\x98" "g\x13\xee\xc9\xfbZ\xf2\xdf\x8d\xda\x8d\xbdv\xaa\xcb\x89\x82\x17\x61\xf7op\xbc\x34" "\xc9\x37vo\x16\xf0\xeX\x98\xea\x15\x31\xe8\xb4\xb4\xff\x65\xea\x1\x89\xa8\xea\xb7" ":\x3\x8\x9e ^y\x1a\x65SJ\xc9\x91\x13\xf9u\xeaR#\xb4\x38\x88\x41\xe3\x80\x1\x14\x2" "\x0\x0\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30" "000000000000000000000000000000000000000000000\r000000000000000000000000000000000" "0000000000000000000000000000000\r00000000000000000000000000000000000000000000000" "00000000000000000\r0000000000000000000000000000000000000000000000000000000000000" "000\r0000000000000000000000000000000000000000000000000000000000000000\r000000000" "0000000000000000000000000000000000000000000000000000000\r00000000000000000000000" "00000000000000000000000000000000000000000\r0000000000000000000000000000000000000" "000000000000000000000000000\rcleartomark\n\x80\x3" ; int s050000l_afm_len = 9686; char* s050000l_afm = "StartFontMetrics 3.0\nComment Copyright URW Software, Copyright 1997 by URW\nCom" "ment Creation Date: 10/21/1999\nComment See the file COPYING (GNU General Public" " License) for license conditions.\nFontName StandardSymL\nFullName Standard Symb" "ols L\nFamilyName Standard Symbols L\nWeight Regular\nItalicAngle 0.0\nIsFixedPi" "tch false\nUnderlinePosition -229\nUnderlineThickness 46\nVersion 001.005\nNotic" "e URW Software, Copyright 1997 by URW\nEncodingScheme FontSpecific\nFontBBox -18" "0 -293 1090 1010\nCapHeight 673\nXHeight 500\nDescender -222\nAscender 673\nStar" "tCharMetrics 190\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\nC 33 ; WX 333 ; N excla" "m ; B 128 -13 240 686 ;\nC 34 ; WX 713 ; N universal ; B 31 0 681 673 ;\nC 35 ; " "WX 500 ; N numbersign ; B 20 0 481 631 ;\nC 36 ; WX 549 ; N existential ; B 25 0" " 478 673 ;\nC 37 ; WX 833 ; N percent ; B 63 -7 771 673 ;\nC 38 ; WX 778 ; N amp" "ersand ; B 41 -13 750 675 ;\nC 39 ; WX 439 ; N suchthat ; B 48 -13 414 503 ;\nC " "40 ; WX 333 ; N parenleft ; B 53 -172 300 680 ;\nC 41 ; WX 333 ; N parenright ; " "B 30 -172 277 680 ;\nC 42 ; WX 500 ; N asteriskmath ; B 65 127 427 546 ;\nC 43 ;" " WX 549 ; N plus ; B 10 0 539 533 ;\nC 44 ; WX 250 ; N comma ; B 56 -120 194 102" " ;\nC 45 ; WX 549 ; N minus ; B 11 239 535 294 ;\nC 46 ; WX 250 ; N period ; B 6" "9 -13 181 100 ;\nC 47 ; WX 278 ; N slash ; B 0 0 254 673 ;\nC 48 ; WX 500 ; N ze" "ro ; B 23 -13 471 686 ;\nC 49 ; WX 500 ; N one ; B 117 0 390 673 ;\nC 50 ; WX 50" "0 ; N two ; B 25 0 475 686 ;\nC 51 ; WX 500 ; N three ; B 39 -13 435 686 ;\nC 52" " ; WX 500 ; N four ; B 16 0 469 680 ;\nC 53 ; WX 500 ; N five ; B 29 -13 443 699" " ;\nC 54 ; WX 500 ; N six ; B 36 -13 468 685 ;\nC 55 ; WX 500 ; N seven ; B 24 -" "7 448 673 ;\nC 56 ; WX 500 ; N eight ; B 54 -13 440 686 ;\nC 57 ; WX 500 ; N nin" "e ; B 31 -13 460 686 ;\nC 58 ; WX 278 ; N colon ; B 81 -13 193 463 ;\nC 59 ; WX " "278 ; N semicolon ; B 83 -120 221 463 ;\nC 60 ; WX 549 ; N less ; B 26 0 523 522" " ;\nC 61 ; WX 549 ; N equal ; B 11 142 537 391 ;\nC 62 ; WX 549 ; N greater ; B " "26 0 523 522 ;\nC 63 ; WX 444 ; N question ; B 70 -13 412 686 ;\nC 64 ; WX 549 ;" " N congruent ; B 11 0 537 475 ;\nC 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;\nC 66" " ; WX 667 ; N Beta ; B 29 0 592 673 ;\nC 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;\n" "C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;\nC 69 ; WX 611 ; N Epsilon ; B 32 0 61" "7 673 ;\nC 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;\nC 71 ; WX 603 ; N Gamma ; B 2" "4 0 609 673 ;\nC 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;\nC 73 ; WX 333 ; N Iota " "; B 32 0 316 673 ;\nC 74 ; WX 631 ; N theta1 ; B 18 -13 623 686 ;\nC 75 ; WX 722" " ; N Kappa ; B 35 0 722 673 ;\nC 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;\nC 77 " "; WX 889 ; N Mu ; B 28 0 887 673 ;\nC 78 ; WX 722 ; N Nu ; B 29 0 720 673 ;\nC 7" "9 ; WX 722 ; N Omicron ; B 41 -13 715 686 ;\nC 80 ; WX 768 ; N Pi ; B 25 0 745 6" "73 ;\nC 81 ; WX 741 ; N Theta ; B 41 -13 715 686 ;\nC 82 ; WX 556 ; N Rho ; B 28" " 0 563 673 ;\nC 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;\nC 84 ; WX 611 ; N Tau ;" " B 33 0 607 673 ;\nC 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;\nC 86 ; WX 439 ;" " N sigma1 ; B 40 -222 436 513 ;\nC 87 ; WX 768 ; N Omega ; B 34 0 736 686 ;\nC 8" "8 ; WX 645 ; N Xi ; B 40 0 599 673 ;\nC 89 ; WX 795 ; N Psi ; B 15 0 781 686 ;\n" "C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;\nC 91 ; WX 333 ; N bracketleft ; B 86 " "-165 299 673 ;\nC 92 ; WX 863 ; N therefore ; B 163 -13 701 433 ;\nC 93 ; WX 333" " ; N bracketright ; B 33 -165 246 673 ;\nC 94 ; WX 658 ; N perpendicular ; B 15 " "0 652 673 ;\nC 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ;\nC 96 ; WX 500 " "; N radicalex ; B 480 857 1090 913 ;\nC 97 ; WX 631 ; N alpha ; B 41 -13 622 513" " ;\nC 98 ; WX 549 ; N beta ; B 61 -222 515 740 ;\nC 99 ; WX 549 ; N chi ; B 12 -" "210 522 513 ;\nC 100 ; WX 494 ; N delta ; B 40 -13 481 740 ;\nC 101 ; WX 439 ; N" " epsilon ; B 22 -13 427 513 ;\nC 102 ; WX 521 ; N phi ; B 27 -222 490 686 ;\nC 1" "03 ; WX 411 ; N gamma ; B 5 -219 484 513 ;\nC 104 ; WX 603 ; N eta ; B 0 -222 52" "7 513 ;\nC 105 ; WX 329 ; N iota ; B 0 -13 301 513 ;\nC 106 ; WX 603 ; N phi1 ; " "B 36 -222 587 513 ;\nC 107 ; WX 549 ; N kappa ; B 33 0 558 513 ;\nC 108 ; WX 549" " ; N lambda ; B 24 -13 548 740 ;\nC 109 ; WX 576 ; N mu ; B 33 -219 567 500 ;\nC" " 110 ; WX 521 ; N nu ; B -9 -13 475 513 ;\nC 111 ; WX 549 ; N omicron ; B 35 -13" " 501 513 ;\nC 112 ; WX 549 ; N pi ; B 10 -13 530 500 ;\nC 113 ; WX 521 ; N theta" " ; B 43 -13 485 686 ;\nC 114 ; WX 549 ; N rho ; B 50 -220 490 513 ;\nC 115 ; WX " "603 ; N sigma ; B 30 -13 588 500 ;\nC 116 ; WX 439 ; N tau ; B 10 -13 418 500 ;\n" "C 117 ; WX 576 ; N upsilon ; B 7 -13 535 513 ;\nC 118 ; WX 713 ; N omega1 ; B 12" " -13 671 583 ;\nC 119 ; WX 686 ; N omega ; B 42 -13 684 513 ;\nC 120 ; WX 493 ; " "N xi ; B 27 -222 469 766 ;\nC 121 ; WX 686 ; N psi ; B 12 -222 701 513 ;\nC 122 " "; WX 494 ; N zeta ; B 60 -222 467 756 ;\nC 123 ; WX 480 ; N braceleft ; B 58 -16" "5 397 673 ;\nC 124 ; WX 200 ; N bar ; B 65 -177 135 673 ;\nC 125 ; WX 480 ; N br" "aceright ; B 79 -165 418 673 ;\nC 126 ; WX 549 ; N similar ; B 17 196 529 325 ;\n" "C 160 ; WX 762 ; N Euro ; B 53 -4 722 671 ;\nC 161 ; WX 620 ; N Upsilon1 ; B -2 " "0 610 687 ;\nC 162 ; WX 247 ; N minute ; B 27 476 228 735 ;\nC 163 ; WX 549 ; N " "lessequal ; B 29 0 526 639 ;\nC 164 ; WX 167 ; N fraction ; B -180 0 340 673 ;\n" "C 165 ; WX 713 ; N infinity ; B 26 115 688 414 ;\nC 166 ; WX 500 ; N florin ; B " "2 -174 494 687 ;\nC 167 ; WX 753 ; N club ; B 86 -26 660 544 ;\nC 168 ; WX 753 ;" " N diamond ; B 142 -36 600 550 ;\nC 169 ; WX 753 ; N heart ; B 117 -33 631 528 ;" "\nC 170 ; WX 753 ; N spade ; B 113 -36 629 591 ;\nC 171 ; WX 1042 ; N arrowboth " "; B 24 -16 1024 512 ;\nC 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;\nC 173 " "; WX 603 ; N arrowup ; B 45 0 571 910 ;\nC 174 ; WX 987 ; N arrowright ; B 49 -1" "5 959 511 ;\nC 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;\nC 176 ; WX 400 ;" " N degree ; B 50 380 350 686 ;\nC 177 ; WX 549 ; N plusminus ; B 10 0 539 662 ;\n" "C 178 ; WX 411 ; N second ; B 20 476 413 735 ;\nC 179 ; WX 549 ; N greaterequal " "; B 29 0 526 639 ;\nC 180 ; WX 549 ; N multiply ; B 17 9 533 525 ;\nC 181 ; WX 7" "13 ; N proportional ; B 27 114 639 416 ;\nC 182 ; WX 494 ; N partialdiff ; B 26 " "-10 462 753 ;\nC 183 ; WX 460 ; N bullet ; B 50 155 410 518 ;\nC 184 ; WX 549 ; " "N divide ; B 10 2 536 525 ;\nC 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;\nC" " 186 ; WX 549 ; N equivalence ; B 14 87 538 446 ;\nC 187 ; WX 549 ; N approxequa" "l ; B 14 121 527 408 ;\nC 188 ; WX 1000 ; N ellipsis ; B 111 -13 889 100 ;\nC 18" "9 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;\nC 190 ; WX 1000 ; N arrowhor" "izex ; B -60 220 1050 276 ;\nC 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 62" "9 ;\nC 192 ; WX 823 ; N aleph ; B 175 0 662 689 ;\nC 193 ; WX 686 ; N Ifraktur ;" " B 10 -54 578 736 ;\nC 194 ; WX 795 ; N Rfraktur ; B 26 -16 759 730 ;\nC 195 ; W" "X 987 ; N weierstrass ; B 159 -211 870 574 ;\nC 196 ; WX 768 ; N circlemultiply " "; B 43 0 733 691 ;\nC 197 ; WX 768 ; N circleplus ; B 43 0 733 689 ;\nC 198 ; WX" " 823 ; N emptyset ; B 39 -24 781 718 ;\nC 199 ; WX 768 ; N intersection ; B 40 0" " 732 507 ;\nC 200 ; WX 768 ; N union ; B 40 -18 732 489 ;\nC 201 ; WX 713 ; N pr" "opersuperset ; B 20 0 673 470 ;\nC 202 ; WX 713 ; N reflexsuperset ; B 20 -125 6" "73 470 ;\nC 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;\nC 204 ; WX 713 ; N " "propersubset ; B 37 0 690 470 ;\nC 205 ; WX 713 ; N reflexsubset ; B 37 -125 690" " 470 ;\nC 206 ; WX 713 ; N element ; B 45 0 505 470 ;\nC 207 ; WX 713 ; N notele" "ment ; B 45 -58 505 555 ;\nC 208 ; WX 768 ; N angle ; B 26 -1 738 672 ;\nC 209 ;" " WX 713 ; N gradient ; B 36 0 681 687 ;\nC 210 ; WX 790 ; N registerserif ; B 50" " -13 740 690 ;\nC 211 ; WX 790 ; N copyrightserif ; B 51 -13 741 690 ;\nC 212 ; " "WX 890 ; N trademarkserif ; B 18 269 855 673 ;\nC 213 ; WX 823 ; N product ; B 2" "5 -124 803 751 ;\nC 214 ; WX 549 ; N radical ; B 10 -35 515 913 ;\nC 215 ; WX 25" "0 ; N dotmath ; B 69 209 169 311 ;\nC 216 ; WX 713 ; N logicalnot ; B 15 40 680 " "367 ;\nC 217 ; WX 603 ; N logicaland ; B 23 -1 583 476 ;\nC 218 ; WX 603 ; N log" "icalor ; B 30 -1 578 476 ;\nC 219 ; WX 1042 ; N arrowdblboth ; B 27 -19 1023 506" " ;\nC 220 ; WX 987 ; N arrowdblleft ; B 30 -19 939 506 ;\nC 221 ; WX 603 ; N arr" "owdblup ; B 39 0 567 909 ;\nC 222 ; WX 987 ; N arrowdblright ; B 45 -19 954 506 " ";\nC 223 ; WX 603 ; N arrowdbldown ; B 44 0 572 909 ;\nC 224 ; WX 494 ; N lozeng" "e ; B 18 -1 466 740 ;\nC 225 ; WX 329 ; N angleleft ; B 25 -152 306 757 ;\nC 226" " ; WX 790 ; N registersans ; B 50 -12 740 679 ;\nC 227 ; WX 790 ; N copyrightsan" "s ; B 49 -12 739 679 ;\nC 228 ; WX 786 ; N trademarksans ; B 5 277 725 673 ;\nC " "229 ; WX 713 ; N summation ; B 14 -123 695 752 ;\nC 230 ; WX 384 ; N parenlefttp" " ; B 40 -293 436 926 ;\nC 231 ; WX 384 ; N parenleftex ; B 40 -79 92 925 ;\nC 23" "2 ; WX 384 ; N parenleftbt ; B 40 -293 436 926 ;\nC 233 ; WX 384 ; N bracketleft" "tp ; B 0 -80 341 926 ;\nC 234 ; WX 384 ; N bracketleftex ; B 0 -85 55 925 ;\nC 2" "35 ; WX 384 ; N bracketleftbt ; B 0 -80 340 926 ;\nC 236 ; WX 494 ; N braceleftt" "p ; B 201 -75 439 926 ;\nC 237 ; WX 494 ; N braceleftmid ; B 14 -85 255 935 ;\nC" " 238 ; WX 494 ; N braceleftbt ; B 201 -70 439 926 ;\nC 239 ; WX 494 ; N braceex " "; B 201 -79 255 925 ;\nC 241 ; WX 329 ; N angleright ; B 21 -152 302 757 ;\nC 24" "2 ; WX 274 ; N integral ; B 2 -107 291 916 ;\nC 243 ; WX 686 ; N integraltp ; B " "332 -83 715 922 ;\nC 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ;\nC 245 ; " "WX 686 ; N integralbt ; B 39 -81 415 921 ;\nC 246 ; WX 384 ; N parenrighttp ; B " "54 -293 450 926 ;\nC 247 ; WX 384 ; N parenrightex ; B 398 -70 450 935 ;\nC 248 " "; WX 384 ; N parenrightbt ; B 54 -293 450 926 ;\nC 249 ; WX 384 ; N bracketright" "tp ; B 22 -80 360 926 ;\nC 250 ; WX 384 ; N bracketrightex ; B 305 -85 360 925 ;" "\nC 251 ; WX 384 ; N bracketrightbt ; B 20 -80 360 926 ;\nC 252 ; WX 494 ; N bra" "cerighttp ; B 17 -75 255 926 ;\nC 253 ; WX 494 ; N bracerightmid ; B 201 -85 442" " 935 ;\nC 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ;\nC -1 ; WX 250 ; N " ".notdef ; B 0 0 0 0 ;\nEndCharMetrics\nEndFontMetrics\n" ; int s050000l_pfb_len = 33709; char* s050000l_pfb = "\x80\x1\xfb\x15\x0\x0%!PS-AdobeFont-1.0: StandardSymL 001.005\n%%CreationDate: T" "hu Oct 21 1999\n% Copyright URW Software, Copyright 1997 by URW\n% URW Software," " Copyright 1997 by URW\n% See the file COPYING (GNU General Public License) for " "license conditions.\n% As a special exception, permission is granted to include " "this font\n% program in a Postscript or PDF file that consists of a document tha" "t\n% contains text to be displayed or printed using this font, regardless\n% of " "the conditions or license applying to the document itself.\n12 dict begin\n/Font" "Info 10 dict dup begin\n/version (001.005) readonly def\n/Notice (URW Software, " "Copyright 1997 by URW. See the file COPYING (GNU General Public License) for lic" "ense conditions. As a special exception, permission is granted to include this f" "ont program in a Postscript or PDF file that consists of a document that contain" "s text to be displayed or printed using this font, regardless of the conditions " "or license applying to the document itself.) readonly def\n/Copyright (Copyright" " URW Software, Copyright 1997 by URW) readonly def\n/FullName (Standard Symbols " "L) readonly def\n/FamilyName (Standard Symbols L) readonly def\n/Weight (Regular" ") readonly def\n/ItalicAngle 0.0 def\n/isFixedPitch false def\n/UnderlinePositio" "n -229 def\n/UnderlineThickness 46 def\nend readonly def\n/FontName /StandardSym" "L def\n/PaintType 0 def\n/WMode 0 def\n/FontBBox {-180 -293 1090 1010} readonly " "def\n/FontType 1 def\n/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def\n/E" "ncoding 256 array \n0 1 255 {1 index exch /.notdef put} for \ndup 32 /space put\n" "dup 33 /exclam put\ndup 34 /universal put\ndup 35 /numbersign put\ndup 36 /exist" "ential put\ndup 37 /percent put\ndup 38 /ampersand put\ndup 39 /suchthat put\ndu" "p 40 /parenleft put\ndup 41 /parenright put\ndup 42 /asteriskmath put\ndup 43 /p" "lus put\ndup 44 /comma put\ndup 45 /minus put\ndup 46 /period put\ndup 47 /slash" " put\ndup 48 /zero put\ndup 49 /one put\ndup 50 /two put\ndup 51 /three put\ndup" " 52 /four put\ndup 53 /five put\ndup 54 /six put\ndup 55 /seven put\ndup 56 /eig" "ht put\ndup 57 /nine put\ndup 58 /colon put\ndup 59 /semicolon put\ndup 60 /less" " put\ndup 61 /equal put\ndup 62 /greater put\ndup 63 /question put\ndup 64 /cong" "ruent put\ndup 65 /Alpha put\ndup 66 /Beta put\ndup 67 /Chi put\ndup 68 /Delta p" "ut\ndup 69 /Epsilon put\ndup 70 /Phi put\ndup 71 /Gamma put\ndup 72 /Eta put\ndu" "p 73 /Iota put\ndup 74 /theta1 put\ndup 75 /Kappa put\ndup 76 /Lambda put\ndup 7" "7 /Mu put\ndup 78 /Nu put\ndup 79 /Omicron put\ndup 80 /Pi put\ndup 81 /Theta pu" "t\ndup 82 /Rho put\ndup 83 /Sigma put\ndup 84 /Tau put\ndup 85 /Upsilon put\ndup" " 86 /sigma1 put\ndup 87 /Omega put\ndup 88 /Xi put\ndup 89 /Psi put\ndup 90 /Zet" "a put\ndup 91 /bracketleft put\ndup 92 /therefore put\ndup 93 /bracketright put\n" "dup 94 /perpendicular put\ndup 95 /underscore put\ndup 96 /radicalex put\ndup 97" " /alpha put\ndup 98 /beta put\ndup 99 /chi put\ndup 100 /delta put\ndup 101 /eps" "ilon put\ndup 102 /phi put\ndup 103 /gamma put\ndup 104 /eta put\ndup 105 /iota " "put\ndup 106 /phi1 put\ndup 107 /kappa put\ndup 108 /lambda put\ndup 109 /mu put" "\ndup 110 /nu put\ndup 111 /omicron put\ndup 112 /pi put\ndup 113 /theta put\ndu" "p 114 /rho put\ndup 115 /sigma put\ndup 116 /tau put\ndup 117 /upsilon put\ndup " "118 /omega1 put\ndup 119 /omega put\ndup 120 /xi put\ndup 121 /psi put\ndup 122 " "/zeta put\ndup 123 /braceleft put\ndup 124 /bar put\ndup 125 /braceright put\ndu" "p 126 /similar put\ndup 161 /Upsilon1 put\ndup 160 /Euro put\ndup 162 /minute pu" "t\ndup 163 /lessequal put\ndup 164 /fraction put\ndup 165 /infinity put\ndup 166" " /florin put\ndup 167 /club put\ndup 168 /diamond put\ndup 169 /heart put\ndup 1" "70 /spade put\ndup 171 /arrowboth put\ndup 172 /arrowleft put\ndup 173 /arrowup " "put\ndup 174 /arrowright put\ndup 175 /arrowdown put\ndup 176 /degree put\ndup 1" "77 /plusminus put\ndup 178 /second put\ndup 179 /greaterequal put\ndup 180 /mult" "iply put\ndup 181 /proportional put\ndup 182 /partialdiff put\ndup 183 /bullet p" "ut\ndup 184 /divide put\ndup 185 /notequal put\ndup 186 /equivalence put\ndup 18" "7 /approxequal put\ndup 188 /ellipsis put\ndup 189 /arrowvertex put\ndup 190 /ar" "rowhorizex put\ndup 191 /carriagereturn put\ndup 192 /aleph put\ndup 193 /Ifrakt" "ur put\ndup 194 /Rfraktur put\ndup 195 /weierstrass put\ndup 196 /circlemultiply" " put\ndup 197 /circleplus put\ndup 198 /emptyset put\ndup 199 /intersection put\n" "dup 200 /union put\ndup 201 /propersuperset put\ndup 202 /reflexsuperset put\ndu" "p 203 /notsubset put\ndup 204 /propersubset put\ndup 205 /reflexsubset put\ndup " "206 /element put\ndup 207 /notelement put\ndup 208 /angle put\ndup 209 /gradient" " put\ndup 210 /registerserif put\ndup 211 /copyrightserif put\ndup 212 /trademar" "kserif put\ndup 213 /product put\ndup 214 /radical put\ndup 215 /dotmath put\ndu" "p 216 /logicalnot put\ndup 217 /logicaland put\ndup 218 /logicalor put\ndup 219 " "/arrowdblboth put\ndup 220 /arrowdblleft put\ndup 221 /arrowdblup put\ndup 222 /" "arrowdblright put\ndup 223 /arrowdbldown put\ndup 224 /lozenge put\ndup 225 /ang" "leleft put\ndup 226 /registersans put\ndup 227 /copyrightsans put\ndup 228 /trad" "emarksans put\ndup 229 /summation put\ndup 230 /parenlefttp put\ndup 231 /parenl" "eftex put\ndup 232 /parenleftbt put\ndup 233 /bracketlefttp put\ndup 234 /bracke" "tleftex put\ndup 235 /bracketleftbt put\ndup 236 /bracelefttp put\ndup 237 /brac" "eleftmid put\ndup 238 /braceleftbt put\ndup 239 /braceex put\ndup 241 /anglerigh" "t put\ndup 242 /integral put\ndup 243 /integraltp put\ndup 244 /integralex put\n" "dup 245 /integralbt put\ndup 246 /parenrighttp put\ndup 247 /parenrightex put\nd" "up 248 /parenrightbt put\ndup 249 /bracketrighttp put\ndup 250 /bracketrightex p" "ut\ndup 251 /bracketrightbt put\ndup 252 /bracerighttp put\ndup 253 /bracerightm" "id put\ndup 254 /bracerightbt put\nreadonly def\n/UniqueID 5021339 def\ncurrentd" "ict end\ncurrentfile eexec\r\x80\x2\x8ak\x0\x0\xe9\x8d\x9\xd7`\xa3\xc2,\xf1\x19\xf9" "\xdci\x9a\"\xc3[[5\xedj\xa2\x35\x93\xc7mT\xca\xbb^\x94+\xf7\xd6\xdd\x84\xf1\x66K" "\x89i\x9ct\xb4r\xde\x9f\x8em\xf9%\xf6\xc4\xf2\x4\xe9\xf1\xc6\x39\xb4\xdb\xa9\x88" "\xed*\xc4\x19\xff++\xde`[\x8e\xe3&N\xdd\x66\x41-O!\xc6J\xc5\"\xbd\xfc|U\x2\xf9\xc3" "\xf3\xe5Y+; \x93\xd3<\x9b\xfa\xed\xd2\xd4\x9e\x89\xaa\xba\xa8\x32\xe2?\x6.\x91\xa2" "P2Q\x9d\x18h\x81nD\xb4\xe0tw\x95\x0=y0)\x9dn\x1e*[\xfe\rY]\xc9~\x14\x9\x89\xce\x81" "\xd8\xd7\xf8R\xff\x9c\xdcz\x1b\x1bY\x8ci\x13\x1d\xee\x0[AX\x5\xa1m\x8a\x13\xe5\x92" "v\x17\xae\x7f$zq\xce\xc}V\xaf\xd7]\x85\xed-\x9f \xff\x9al8\xe8\xd5 Q\x97\xd0\x87" "\x80\x18\xc\xca\x9c\x35R+\x16\x9\xb5\x1rMMd\x0\x16\x9b\x91\xbc\xebjM\xe0\n\xfcx\x1c" "\xf8\x87\x30\x12\xb3\x11}\"\xa1\x85\x87\x89UC\xdb\xc2\xa1\xff\xc7u#v\xde\xcdL\x92" "\xa6\x91\"\x42X\xe8\xf8\xf1\x13\xf2\xa5\xcb=\x8d\xa1\xf\xe8#\xc6\x65j\x88\x0\xcb" "\xc7\xff\xd0\x18\xa2\x8a\xc2\x88_5\xe2.\xf9\xfbT\x9b\x0\xe2=1\xbb\xa3\x4\xdd\x9c" "(\xdf\x2\xa8\xc3p\xceI\xc5\x8a@\xc9\xf6s\xad\x61\xf5\xab\xee\x9d\x62\xeb\xacY\xb" "ZD\xf2\xba\xbd\x96\xe1\x37\x46M\xb0\x66\xb6\x2\xa5\xd8\xd4>\xd0\x41\xb7\x80\xf0\xfb" "\x98\xf9\x95/ \xad\x80\x84\x19\x9a\xdf\xee\x9e\xcb\x19<\x1\x87r\xe6:Z\x83\xbb\x6" "\x0\x96/\xe7$\xf6\x33Q\xb4\xb7\xa1\x64\x12t:\xd1J8A\x88wv\x8a\xf4#\xe3\x34\x8dH\xed" "w<.\x87\x62L\xfe\xf7w\xa1[hr\xf5\x44\x88\xe4,HI\xaemT\xcb\x85}\xc0\x97.\x1bW\xc8" "\x8f@\xb8\x99(\xea\x43\xc1\x8d\xbcs\x18/i\xb5/\xb\xd6kq3\x88\x16vaj\xb6ir2@\xf1}" "^\xaa\xa2|\x8e)Xb(\x8d\xc3\x9\x18\xd0\x0\x8\xc9Y*Q\xf3\x9e\x30\xdd\xc4\x62\xf6(v" "T\xec\xcc\x13\xfb\x95%\xf6\xea\xc5p\x9e\x95/\xb2\x37\xe8\xcb\x8p\xca\xc5\xdd\xc1" "=\xa5\x8d\xbd\x6\r\x31\x93\xfc\x92\xe6\xc4\xce\xf3\xbc\xfd\x81\xcek6y\xbf\xc5\x85" "W\x96\xcd\xfa\x8a&\xd6:e\x9a/\xf7\xa1\xa7\xe3\x18\xa7\xf7o\xf8\xe\x84j-d}8\xe8'\xff" "\xafT\xbdZ\x92!\xee\xb4\x16\xa4u\xea\xbfN\xf0@\x9b<\xc1Pw\xe0\x1ft,F\xed\x43\xca" "r\x92L2\xe4\x8axb$c9f\x80\xca\xc3\x63@lRJ\x9b;v\x8c\xd5\xa6\x89&C\xf7\x8b|\xd6\\" "a\xe\xbf\xeb\xd1\x5\x8d\xfe\xeag\xd8\xa9\xb9\xaf\xd9\xbf\x39\x3:V\x85\x65\x37\xc0" "ou\xba\xb0\xa4py\xdf\xf6L\xf7\x34<\xd6\xe7\xfe{\xb1\xfb\xce\xe3'I\xc9\x14\x35\xcb" "\x86\xf7U\rP\\\x81\xde\xff\xbe\x1e:\x1f\x63\x4\xdd\x3\xcd \x84+3]\x7f\xcen\xb3\x1f" "\x17W$\xd5\x1c\x18H\x0\xc3um\xb0\x44\xe2\xfe\x4\xbfS\xe9\x95\xfb\x42Z\xac\x96\xfc" "\xef\x38L\x93\x3\x34\xb5\xf3\x84Sl\xb3\xab\xd9\x84G\x84K\xab\xf0L\xa7g\xed\xb7\x7" "\x86\x13,yl\xc2\xf6S\x8R'Z\xb4\xdf\xc\x8bM.\xae\x1\x38\xe\xd2Nb\xf5\xa8]\xc8\x34" "]Ulg\xf0\xf\x62-2\xdd\x66\xfe\x18!\x91i\xda\xca\x37\x44\xa8\x19\xcf\xac\xc3\x5\xfc" "\xa9G\x1a\r\xe5\x93n'\xe;-N\x12\x11\xd9\xda\x8d\xe2ny\xcoV\xc2\xce\x8b\x19\xe1u%" "n\x8b\xf8[\x8eR\xdb}\xa8\xc4O\xe5.W\xafH\xde\x9bw\x16X\x13\x9bk\x81\xb3`\x92\xec" "\xe2\xb6)\xc0\xf6M1\xd6-\xc7\xd4\"\xc2\xa2\x4\xbc\x4\x14\xccox\xf4\xe9u\xbf\x8f'" "\xa1|\xc3\xb3[1\xed\x31;Rt\xf4\x87\xa9.\xbb\x33\xb0*\xf4r\xeb\xd8LK\x1b@\x6\xe5\xc5" "\"\x8aor\"\xda\xb4\x90%\x9d\xe2\"?L\xbc\xdd\x0jeI\xf0\x80\x85\xea\xea\xe5\x1eM{\x8" "\xac\xc8\xb0\x8e\x8f\x98\xdb\xf7\x9e\xd4\"\x1\x32\xa7U\xc0\x7\x36\x66\x0\xfc'\xe0" "\xba\xdds\xc8u\x7Ko!\x1d\xa0_\xf1\x45G0\xf3\xdd\xfe\x96\xd3l\xa1/\x82I\xcb\xe7L\x82" "\xa9@\xf1\xd6\x2\x5\xcd\x96$\xae\xb7\x82M[\n\x15x\xeb?\xd4_\xfd\xb9~f\xbf\xf\xaa" "'\xbc%\xe6\x31\xc2\x6t\xe7\xd6\xdb^L\xc7\xb1\xf:ws\x1a\xa3\xa5:\x18~R\x11\xda\x39" "\xf2\xe9|\x2\x36\xe3o\x87\x14\xc4\x9d\x63\xen\x1f\xb4\"\x6\xca\xd9\x36\x17\x94\xa9" "\xe0\x2\x36\x9c\xcc\x65\x87\xf9\xa4\xcb\xce\\\xfd\xe2\x66V\xdd\x8a\x36\x66<\xa8." "\xfc\x1e\x93\xccX\x86>:)\x0\x90\x90\x62 \x92?TN\x8c\xa0^\\\x83w$\xaf\xc6t\xe6\x0" "\x82x\xfc\xc6\x96\x46,\xd7\x98j\xa3\xb8\x84\xed\\\x17\xf9\xd0\x35\xb9\xa1\xa1i\xd9" "\xf8\xf2\x88u\xf7\xe5\xd7\xba\xb3\x46h\xb6\x1d\x2ow\xe3rw\xd5>\x9e\x4g\x15/j\xc7" "\xabV\xae\x92\x6\xf1Qws.\xad{*\x0\x37\x99\x86'r\xb2\x41\xd6X\x18\xc0\xd2\xd6\xc5" "?\xd0\x94\\\xaa\x17\x19\xdb\x44o|\xe5\xc3\x83\xf2\x8b\xb1\xf4\x19\xf0#\xf3\xde\xf2" "\x4\xe8\x95\xb8\x5t\x7\x64\x8e\xfe\x19s\xdc\x8f{\x8c\x17\xab\xaa\x17\x16\xabi\xf3" "\xbf\x5u\xf5\x64\xc3@\xf\xb5[\xc4\x30\xf4U\xb2\x66\x87\x1eui\xc3\x9a\x81\xbd\xb0" "\x82\xfaQ4#\x92r\xf9\xd6\x9d/[\xe4\x93)%U\xa5\x11Z\r\xbd\xf3\r\xa7\x1b\xdd\xa4\x18" "\xcdXu\xbf,\xc\xcf\x0\xe2\x36\xf2\xc9pV\xb1\x2\xe8\xe0\x14\xc2\xc1\x18\xa7l\xf7\x9c" "\x10\xfe)!\xd3 \"\xb8\xf9\x64\x43\xbf\xa1\xb3\x41\x89\xe5\xc5\xab\xcf\xecQ\xad \xcc" "E\x8\xacSvi\xb\xcf\xe0\x1d\xc8\xf9$\xfa\x19\no\x12\x95\xc1\\t\xdd\xad^\x9c@G\xad" "\x1\x45v\x85\x8a&_\xfc\xe0\xbe\x9ew\xe7\x63\xe9\x11\xbb\x66#Y\xdf\x98\xddvsg\xda" "\xe1\xb6\x86\xee\xde\xca\xe1\xf0\xc9\xcb\xc5K\xc4\xcd\x46\xe5\x14q%k\xd3@\xb3\x38" "\xc3\x8d\xcb\xd6\xd3'\xfem#H\xb4\xeb*\x1c\x95\xbf\x8/.J\x1b\xda\xdb\xe3I\xfb\x33" "\x1a\xe9\xea\x0,` \x97tbeEZ\\`\xa7\xc0\xbb\xd2\xf4\x7\xc8\xa7\xe5\xfe\x9f\xbe\xa4" "\xbd\x8e\xc9\x96%\x42\xe2\xe3\x2\x1a\xc\xa4\xf;?\xfd\xb7\x90Y!g\xaf\xb2\x1d\xbb\xb9" "\xec\xa9\x1-\x6\x8o\x1d\xe6t\x9f\xf3\xc6;\xe3n\nU\xa9\xa1\x3@m\x8c\xcc\x9Yu\x87/" "\xe8\x95\xb8\xc4:*DZ\xfa^\x3\xc7\x90$\x89\xd4\xf4\xc4\xa9\xac\x82\x91!\xe5\x32\xc6" "`L\x5\x9c\x35VR\xfc\x9c/\x16\xa5S\xd5\x36\x8b\xa0u-\xfd\xcaL\xe\x9b\x94K\xd1\xc2" "\xd1\x15\xc2^D!\xeb\xe4\x12\xb1q)\n\xb0\xd0\xe5\xb0\xb2\xc4+\xbeX\xa4\xeb\x39\xea" "a\xc7\x10Im\xd8\xa4\xf0\xdevu\x9f]U\xf5W\"JK\x95I\xce\xa2\x1b\x8f\xe2w\xfcXH\x8f" "\xc3i\xd9\xc0\xf1\xa3\xdcR\xb8T!%\xbb\x42V\x1bYK\xdf\x33\xbe\x43\xae\xf9?\x0\xee" "\\`'J\xff\xc0T\x84\xb0\x1\x1d\x8c\x46_V\xbb\x9d\x4\xfe\xb8\x8bm\xe5O\xc2\x10K\x7" "\xdc^\xc8\xcd\x41\x9d\x9fY~_M\xdf\xc0\xbb\xb0\xe9 b\x9f\xdf\x6I+\xecx\xc9p\xc1\xe6" "e=K\xbf\x92\xd3\xf1\xca\xbd\xc4\xfb\xae\x38\xb\"\xf1\xdbn\x8a\xa9\xb0P\xe3:8M\\\xad" "\x95\x43\xa3\xad\xbf\x91\xa4\xa9@Yp] \xd9\x6\xfc|\xeb%w\xcaP\x4\x33\x9e\xcb\xd2\xa3" "g\x9f)\xeb\x43\xc8\x92G\xfa\x11\x35\xb\xad\x35\xeb\xc9\x38\xbb\xd7\x45\xf7tr}\xe9" ".\xb7\x8b\xfc\xbd\xb1\x9\xc5@\"\xad\x9\xc2\x1e\x85`\r\xcbp\xcb\x1bQ\xae\xea\xb9\xcc" "\xe5{\x8b\x14\xc5N\xeb\x1e\x95j\x8c\x39\x61tr\x16X\x8\"\xc5\x31\xbe\xa4\x5\x13\x18" "(:<\xf1\xf6\x12\x36\xbM>\xd7\x85\xecv\xc5\x9e\xa4u\xc1[\x15\xe9\xe1\x93\x14\xbf\xc6" "\xa1(\x92I\x1c\xd9\xd7\xcb:\xfd\x90 \xbd(\xb6\x85\x12\x9e\xf9\xe2\xc1Q\xc5\x95\x99" "\xf1\xe8\xe1>\xea\x8f\xb5tl\xce\x8a\xe3\x17i\x1a(\xd2\x63\xc7w\x14\xe5\xf4\x1\xf9" "\xed\xae\xf0\x85\xb7*\x86\xa9\xcf]\xfdVs\x9e;\xfc\xabI)g\x9e\xf1\x11\xd2\x33x\xa4" "CD\xc\xf9R=;\xf2?\x9b\xdc\xdc\xd7\xf2\xc4\ru\x9\x9f\x37w\xe6on?\x1a\xe4\xde\xf3\xd5" "\xb0\x62\xff\xbb/\xbd\xa4\xb9\x38\xf8\xft\xb6\xbe\x30\x32\xbb\xa7\x7f\x99P\x18xV" "\x7fH\xa6N\xb0\x9f\x16\x84\xf0\x95\xf8\xb4\xe4\x7\xa7\x8c\x96H%\xab\xdbq\xfa\xad" "\xb4*\xab|A\xe1\x46\xff\xd2\x1a\xc7\x42W@I\xdc\xa2W\xe9\xf3\xd4\xce\x46\xd2\x0\xf7" "v\xedy\x15\xee\xa1\x91^2\x11w\x96=\xed\xb2\xa2L\x87\x1\xd7\n&XV\x8c\xf1\x31?\xdc" "Af\xe6\xeaY\xa4\xbd\x30\x9\x30\x91\x1c\x13\xb7\xbfNr\x1/\xc9\x9c\xcc\xda;\x8cm\x7" "\xfe\xbf\x15\xc0\xa1\\\x1\xb2 \xa6\xdf\xbb\x1d\x80\xce\xeds\x81+\xe5%\xe5\xb7\xb3" "[\xad\x9bgr\xc6g<\xa1\xf5\x80\xff\xf1o<\x96\xb9\xb9\xb7\xf0\x41\xae\xd5\xc\xdf\xcf" "rF\xdb xt6\xc9\xe2\xb8pm8Y\x13r\xba\xda\xc2\x19\xb8=\xdb;\xfa\x1a\xf8S\xaa:}\xa4" "\x1b\x16\xbd\xf5\xe4,\x82w\xc2\xccs\xc1\xc9\xf6h\x93\x1e\x66\xadU#\xd4\x35\xdb\xe6" "\x80q\xd0V\xcb\x8f\xe1\xde\x17\x9cRD\xccQ\x1d@\xbb\xa8\x31\x1d\x97j! \xa6\xc4n\x85" "\xb9\x39)\x1f`9L\x91\x1e\x30\xa2\x14\xad\x3\xbf\xe5\x8a\x3\xe9/\xc6{\xfe\x81\xb8" "(\x2\x8e&6P\xd2{\x6\x45X\xe3\xebr\xf0\x1b@\xcaL\xf0)\xb6\xf1\xc1\x84\x31\x93\xfb" "#r\x1f\x1fo\x19\x92/\x82\x1c(\xec\xd4\x34\xf\x10\xe9n\xb3\x8bx\x8cX\x9c\xb8\x81[" "\xb7\x8\xb0\xc4l7\x8e\x8c\x16\xea\xccr\xcc\xf9\xca\xb\x9e\xbd\xb0\xb4\x90j\xf5\x8f" "\xc5\xcb\x8e}b\x19\x1f\x1c\x11\x94;\xb7m\x82%\x12X\xc4\xb2Q\xaa\x95\x61\xd4*\xdc" "\xf0\xa5\xf9\x18I\x1e\x6;j\x88\xcd\xf4\xe0\xc8\xd4\x1c\x96\x8dW\xc6\xe3\xfb\xcdk" "\xc6\x18\xd1\x39\xa6\x87\x30>\xe1*k1\xbb\xf2:\x4\xf1\x95\x90T\x4h\xbb\x12\xbc\x46" "\xc3\xe6\x9fK\xab}\x19Z\x1f\xe7\xdb@\x98\x9\xf5\xa6\xb0\x17\x8aw\xa4y/i\xc2\x34\x89" "\xf5\x3\x43y\xb4\xa7\x66\x8c\xc1\xc9\x36\x9a\x36\xf8\x95\x1b\xe8\xc8^#\xd2\xe4}\xed" "\xf3q\x8c\n*\xdf\x81j\xcb\xfb\xda\x1d\x46\xae\x86)4H\xab\xc7\x32\xdb\x99\xc1znt}" "\xfe L\xb1\x16\x1c\x94\x30\xad\xa3x{\xdb\x92\x45V#O\x9e,\xfa\xe7W\x1f\x95\x42\xfc" "\x6\xc7\xb7\xcc\x6\xf6\x30\xd4<\x4\xa4T\xc2\xdb\xd1\xb2\x35I1\x1b\x3\xd8\xba\xce" "\x1\xfe\xad\x8e\xfIg\xf5\x14\xad\x83G)W\xcb/\xd7\x66\x1b\xd1\x82\x15\xaf\x41\x66" "\x9\x66\x9e\x87\x8cr\xe1\xb8\xf6\x92\xc4I\x11\x95\x8c\xb9\x8b\xca\xc7\xc3\x8yV\xe5" "6\x9eoA\xf1`>\xd4\x96\xf4vo\xd3Q~\x88h\r7\x10OTU\xd0\xbwi\xaa\x1e\xb0I}e\xb9\xc5" "9R\xb4\xce\xca`\xad\xd1V\xd9\x1f\x86\xc6\xcnh=\xe2\xd6\x7f\xd9\x0\xe0\n\xffU\x80" "\x4\xa6n\x12\xa9\xc1\xb9K.\xac\x61\x62\xc8\x96\x10\x94>e\xdeR\xfc\x63\xa8\xff\x4" "\xc6\xe0\xb8\xc\xbf\xe5>\x15\xf9\x46G\xc5\xea@\xec\xc4*k\xdb\xbe\x98\x1c\xc2\x7f" "\xed\x8d\xf2\x13i\xc3p\x12\x8|\xe7t\x8\xb7xf\xec\xb3\x81\xf0\xa1\xdd\x65\x17rr\x8b" "\x8e\x7r\x8b\xc8*\xd7\"%\xc9L\x86\xb2\x45\x1d\x89\x1c\x1e\x1b\xf8\x43\x6}8\xec\x94" "#\xa2i\xda\xaa=q\xeb\xa0\x7f\xb7\xf5\x98+\xd7<\xcf\x1\xc6\x15\xce\x12\xb3\x96\xf6" "V\xd8n\xeLb\xbf\xf0\x30Uf\xcb\xc8\x39\xb1\x84\x30\x46\xca\xe4\xb5y\x93\xf8l\xb5\xd5" "\xee\x8aS\x81\xc3?\x13n\x1\xb7yI.=\xc\x86xyC\x4\x63$\x88~\xb4\xe9'0vx\xf2\xc8\xc8" "\xaf\x15\xd5\xafxu\x84%N\x99\xba\xf1\xe3\x34]\x89\xee\xca\x11\x84l\xcc\xd6+\xf0\x8b" "l97\xf7\xa3\xd8\x16\xcan\xd3\xcq\x99\x9a\x39-4\xf0NP.\x1\x93O-\xf0GA\xer\xb5\nS\xf1" "\x10y\x10\x35\x2\x8\xeu\xe0\x31K\xdd\xaa\x96@\x88\x7f\xd0\xb2\xd2H\xb7>\x8e\xa8\xb" "\xd8\xcfib\x7f\r\x34Zsy\x1f%{\xb5\x9b;\nv$;\xb0k\xd0\xb1\xfc\xa3\x44\x8e\xf0\x8f" "\x1/\xe7\xd6\x96\rY)#\xb1:ib\xb0\xeb\xef\xf6\xee\x81Kl\xb3i\xca\xd2\x39\x9a;>9\xad" "\x7f\r\xd9\xc3/\xc7\xea\xab\x81\x9e\xec\xc9\xb3\xfd\x97\x12\x31\xa8\x33\xd0\xb\xcf" "x\xce\"I3\xc4\xf\x1f\xd3\x1a\xb1\x1d\x89\x93.\xd5`F\xd8{\xeb\xeb\r\x4\xdf\xab\xa8" "\x8f \x7\x7\x45\xa4\xfa%\xcd\xc7\xf4\x82\xf6\xa2\x9e\x32\xd5\xcf\xcdP\xfc\xe2:\x12" "\x81\xcc\x91M\x9d/\xa2\xd6!\x14\xe0\x2\x93\xe2\xe7N%\xe9\x9c\xe2\xdb\x6\x96\xdex" "\xb6{\xcbG\xaey7!\xe6\x95\x8cm\xa4shSj\\\x9f\x9f\xbc\x13M\xddM\x8\xbf\\\xb-;\xb4" "\xf8\x63\xeb,\xe\x88\xe8i\x96\x45\xa4\x1a\xde\x9c\xe5\xbf\xc8w\xd7\xc3\xc7\xbc\xab" "#o\xb5\x8\xe5\xc8\xfbj\x1c\x33\x17\x96p\xe2\x94\xa7\xa0h\x19\x95\x81\x96\\\xf\xfd" "\x8b\x11!\xf4\x63 \x88\xbc\x96\x93\x14\xd1\x31\x92\x46\xe8\xc9\xe4VK\xc6\xbb\xb7" "#i\x8e\xdd\x94\x9d\x12V\xb\x33\xf7p\xfb\xec\xbe\xa8\xc2;\xed\xddW\xe0\x8c\x91\x65" "B\xc\xaf\x1b\x35HR\xb0{j\xf7\xf\x3R\xff\xbc\xc7\x1c\x91r\xd6-\x85\xc6{\xcd\x90\xcb" "\xd7\x33I\x1e\xcft|\xcaubP\xfeP\x93\xa9\xb8\x45\x7f\xf\xabo\xb3\xf3\x65\xcd\x16@" "\xe3\x0s\xd6\xf3Yo\x89nU\xd1\xc0\x63\x95s(K\xe2\xbe\x1c\xa0\r\xb0\x36\xd4\xd0U'N" "b\xe\xc8u\xc5\xd1o&\x89\xb2\x8\x65\xba\xe0\xf1K\x14S\xcf\xfe\xfc\xacY\xfe\xfv\xbe" "\x88\xd1m_\xaf\"\x91Ivy\x16\xee\xe5\xd3~K+\x6\n:75\xfc\xbd\x7\x87\x5\xfc\xe3\xe7" "\x95\x44\x35h\xc6\xb7K\x1e\xd8\xf4\xcq&a\xb\xeaR\x80\x83\x34\x9c+\xb6\n\xd9\xc1^" "\xdc\xd2X\x8c\x9\xc7\x1eS\x99\xc0\xdf~\xe8\xe5\x1cK\xf6x\x91\xee\x65%\x33VM~Z\xf2" "\xd8\x91\n\x98y\xdc\xa3\x82\xee\x62\x37\x8e*<~\xdft7\xb5\xf6\x39\xb6\x33\xff\xd5" "\xaf\xd3\x45Z{\x1d\xa9\xc4\xc7\xfe\xc\x3\xca\x92{\xc9\x33\xd8\x82\x1e/\x9byb\xb8" "\xe7uqv)\xe2K\xc9\x80\xbeQ~\xab\xeeg\xce\x87 =\x4#\xe8V\xf1\xeJ[p\x16\x95/i(\xa1" "\xd3\x8\n\xac\xe%\x63\xb\x19\xab\xd7\xb4\xbb\xbe>\xc9Y\xd6\x3\x43\xffM\xf7\x15\x45" "^\xa4[_\xe5\xa6\xe3\xfc\xc7~\xa1\x18\x3y\x19\xb2\xa2\xb1\xde\xdapZ\xfdS$1\xbe\x9a" "\xd7S\x9\xec\xf8&\xaf}c\xed\xa6\xc1\x43K\x6\xbc^\x9a\xcb\x43\xee \x9e{k\xc2\x1g\x2" "\x8c\xa7\x85\xd3\x93\xbaw\x9c\xe7\xa1t\xa8\x98\x8c/v#\xcc\xf2\xce\x9a\xc3\xc8\x98" ",\x86Q t\xb\xd7IL\xca\xe3(\xbb\x37\xaaHs\xff\xd9\x9c\x46\xd2\x0Y\xc1\xc5\xbc\xb9" "\xac\xa5\xe0\xfa\x9e\x12\x0\xd1%\x45\xdf\x87lX\xe\x1e\xcd\x18\x82\x95\xa7\x90\xe0" "9r\x9e\xf9\x39!\x17\x4N\x15pQ\xce\x87\xef?\xe5\x9b\xff\xf2U|q8\xd4\xc6\x30h\xf\x93" "\xf3\x1d\xc5\x1b\x87\xcd\x7f\xd8\xd2\x14.\x16\xb8\x9b:\xbf\xfd\xa3n\xf0Q\xb5\x64" "\xeb\x1f\x8a\xc1\x8d\xf7\x0r\x93\x0\xd3\xfaZ\xbe\xf4\x9bS\xa8\x87\xfa\xdb\r\xcd" "[>\xb\"\xd9\x88\xc2\xd6\x7\xdd,\x9fQ\x6\xf8:R\x1euV\x84\xab\xf2\x19`\xa0\xf9\x3\x30" "f\xd5s\xdf\x4:\xdf\x95\xf7\xc8\xe9\xf8\"\xcb\x1f\xbd^\xed\x34\xd0U\xf\x44\xfa\xbf" "sj^c8\xab\x99\xcd\xc\xed\x9c\x8a'\x9\xc\x85\xb4\x98\x19\x9c>\xb5g\xf2\xe9%g\xfe\x87" "\xb2\x8\x99\xa3\xb6\x84=q\xd4;(\xb1\xc2\r\xe0Y\xc1\x2\xc0X\x2Td/$\xef\xd1\x1e\xc8" "\xac(\x19\xdd\xab\xf1\xadK\x1c\xd9\xaf\xe9,\xc0\xe4n\x19He\xb9\x80\xb2\x8c\xd5\x43" "\xdf\x6\xac#\xef\xc9\xc6L\xbe\xe9\xd9!\xc2\x9cioG\xbd\x8ep\xbm|\x1d\x5.u\xf7Y|]Q" "\xbf.k\x9c\x97\xf1_\xc\xb8\x4o\x9" "\x80\xb0yhWb\x16&\xeb\xc8\x2\xd5\xf3\x19\x8e\xd9\x1e\xc3!R-o\xa8O\xc3\xbcu/joG\xfc" ",\x5\x1a\xd1\x93\xadN@l\xa0\x15\n\x9aw\xde\x93q\xf8\x32\xd3\xac\xa7\xa8L\xa8\xc3" "\xf7\xd9}\xc5\xe9H\\O*w\xef\x7\x19\x19\xcc\x90\xbe\x7f\xe1\x36\x18\xa4\xa9\xbds\x87" "\n\x96\x8c\xb8\xba$h\x87\x8\xf4\x85\xc1Xr\x88\x82 \xe7:\xa6\x62\x36\x8f\x41\xe\xf7" "k4eVc\xc5J\xae\xfe\xe8'\xb7\xc5S\xab\xc8%\x43\xfa\x8e\x8d\xde\x13#\xc6\x4\xf\xb8" "\xf2O\xc2\x13\xa1\x88\xf1\x94\x9aG\x1\xb7<\x4\x64\xad\x96W\xa7ST@0x\x97\xd8\x16\xb3" "\xe4\xb6\xda\xcav\x84\xf9*Kt&-w)i\xde\xe7\x11\xe4\xed\x9e\xe1\x15\xfb\x7f\x91\xbd" "\x9d\x1a=@2_\x13[.\x3sP\xa3kC\xcfZL\xad\xeah\xac\xa3h\xf9\x92x\xfa^\xcd\xff\r\x10" "\xed\x15\x17H\x9c>YV\x8c\xf5g`\x15\xd0m)nz&\x1=\x12\x82\xb0\xbe\x1a\xed\x1e\x1b\xb" "r\xa9\xbd\xf8\xe8\xd7\xbc\xc1\x46\x33\x87\\\x7\xcf\\\xca )e\xc0\xab\x8d\xcf%\xc\x33" "\x99\x0s&\xca@\xb0\xe3\xb4Z\x9f\x82\xe6\x1\xb0\xf6\x9d\x36,\xc9\x35-\xef\xaf\xb0" "\x17\xf7g\x10\xf8)\xde\xe9\xf4\xba\xdf\xcfU\xc\x83\x86\x8bQ\x0\xac\x89\x35\x17\xa8" "N\r\xd8\xca,\r\xbf\x35n\nzS0\x80\xed\x1b\x39\xdei\xd1\xa3\x1f\r/\xc4\xd8\xc\xf0\x9e" "u\xa8$\x1\xb9\xe2\x5\x95\x35q\xc2\x98\x8c\xc6\x8a\xe6\x1e\xc\x98nv1\xb8\"\xff\x44" "\x80\x98\xf0\x15\xa9%\xfa\x95\x89\xd4\xdaO\xbGA2\x18\xa6\xc4T-E\xae\x8f\x32\x83\x18" "\xebgiD\xd9\xcd\x6\x11&<\xe4\xf1\xbe\xc8G\r\x1b\x86\x46\xde\x66\xd3Qdb\x0\xb5\xa3" "\xe8\xc7\xa7i@TL\xff\xcdo\xdc\x98$'[\xa4\x9^\xf0\x8f[C\xcf$\xdb}\x8b\x1a\xb\x19n" "%[\xd6\x9\x8d\xbc?\x98Y\xd4\x9a\x15\x9ci\"\x84\xb5.\xde\xd6\x32\x2\x30\x64\x87\xc9" "\x97@\xde\xe2R\xee\xb2\xcejSG\x9e\xaf\x7f\xcd`W4kj\x83\xad\x35x\xe6R\x18\xee;\xfa" "R\xf9\xfdpR\xdb\xb3\xb3\xf8\x41\x88|\xab\x19\x39_dw\x9f\x64\xd3\xf9\xb4\xa3\xfe\x39" "G\xb6\xa5\x1\xb6\x8b\xc2\x88\xc6\xef\x89/4\xf8\xe2\n\x94`[lB\xdf\x84\xd6\x1e\xdc" "\xd0\x0\xdb\xab&\xf4\xa1\xe7\xbb-\xa0\xa9&\xbav+!\x12\xbc\x10\x92\x1b\x38~\x10\r" "\x9d\xb2\x9\x5\xe2}G\xf0\xdb<|\xc6\x7f)\xe4\xef\xebo\x17\x9f\x14K\x83\xae\x94\x93" "\xf7$\xabX\x9e\x94\xbf\xfb\xdc\xda\x86\xfe+\xb3>aX\xbf\x15G2\x10\x15\xd4n\x16g\xa2" "/\xcc|V\xd3\xc6\xc\xa2U\x10\\\xec\x8b\x3\xe8\x8b\xfa\x66\x95\x4$\xe8y\xd6\xdb,O\xfd" "\x9dm\xf3Z\xb3\xec\xc8\xd5\xdai\x91g\x84\xe2t\xbd?\xc3 w\xd6\x63n\xd7\x34\x3\x10" "U\x6\xfe\x86\xc7\x39=m\xa5\xc0\xf4:\x88G\xef\xd4m)\x99\xc2\xa6\x62\xb2\xca\xee\x14" "\xad\x13\xe4\x8f\x14\x87\xf5\x34\xb6\x66\xbd\x38\x82\xd5\xad\x91\xde\xd5\x0#\x84" "\xc\x31\x37^\xe1\xbf\xb5@\x19\xf\x11\xc9S\xc3\xc8l\xf\x66\x13\x9eW\xecP\xaa\xd8\xfe" "\x9b\n\xa1T%\xfs\xc0\xe1+\x85\xb4+R\xf4k}\xc8^\xc0\x61\xc\xcd\xd0\x8c/?zS_\xd6\x9" "\x89~G+\xe4\xa4\"\x8e\x45\x16\x93\x92\x1e\xd1\xf6\xfd\x9b\xfd\xab\x63\x8d\xa1Q#\xf3" "U-\xc8\xbe\x5\x30\xc8\xa7n\x85\xf5\x9e\x13\xd9[Z\xe4\x1d\x31q\xf8\xc3\xaa\x8d\xad" "\n\x2\xc3t\x9e \x90\xc6\xa7\x95\xd5\x36\x5\x34\xcN\x9bYh\x18\xaa\xb1\xc\xa1&\xe8" "O\x90#\xc8\x1b\xf2<\xc7?a\xdd\xc6\x61\x99\xe5\x62x\n\xde\xbd.\x90\x35G\x9\x8aY\x15" "\xfcrh\x19\x8a\xf3\x1\xc5\x1\xd5\x9b\x90\xf5\xbcP}\xa3\xb2\xfa\xe2r\x87\x46\xcb\xc4" "\xec\xda\xdf\x62\xae\xb3\xff\x19R\xd7\xd9\xf1\x4*\xc5\x44\x8aw\xf3`\xb3M\xa1\xe7" "\x82\xf3\xf1\x1\x94\xb3\xd4\x34\x36\xb4\x11v\x94W_v\x11\xd1\xe3\x42\x7f\x7fx\x14" "\xd9J\xf7\xf5\xc1\xfe&\x8a\xfd\x82\xc2\xe7\xe9\xe3\xf6\xe0\xb8\xb5\xfd\x82}\xb4\xe7" "\xb4~\x13\x17\x93\xc6\xe2\x9b\x33\xc9\xb0\x85t5\xe4\xd5\x7fQ^\xbc)\x90#\xa4\x38\xe1" "t\x15\x4\x3\xc8\x94\xae\xf5\xc%\xacZ\xaf\x7f\x87 U\xfa\xf3\xc1\xed\x1\x44\xa6\xc1" "\x2\x8e%,:\xf2P\xa1\x81\xbe\xc8s\x2\x83\xa0\x87\x84^\xb7t\xd9\xd6O\xb8\xe7;7p\xb4" "\x1eu\x5\xe4\xa5\x2\xff\x35^?u\x82\xf3)p%\x8T\x9d^\x7Q\x12\x44U\x81\x45\xd9\xc4W" "\xdfHV\x15Y%\x93\x82\x7f\x8e\x16\xe0\xc3\x92\x1\x9e\x9b\xb9\xaf\xa2\x9d.\xc3~(\xf5" "_\x1d\x81-?U-\xd4>\x9ap\x7f\xb2\x36R\xe9\x44\x96{=\xa0\x9\x45=\x84\x18\xc0\xd7\x9" "\x2\x1b=`6\x13\x36\x11S&d\xe9.\xb7\xccx\xa0\xaa\xea~\xc8>\xd8\x35\x35Q\xb6\xd7\xed" "Eq\xe4\x66\xe5\\\x0\xda\x9)d[\x99\x8c\x12\xf2\x96\x9dv\xa2}V\xee\x94\xd9\x81\xfe" "\xec[\x95z\xc\xa6\x37\xa0J?\n\xe1\xbe\xf5}\x8a\x83\xd1\xa1Y?\xe0M\xa2\x96H\"\x91" "@\x91\x85\xf0\xe2\xae\x9\xfeL$9\xe2\xf4W\x9fT\xc7\x84\xc5\xa5=8\x97\xb6\xaf\x8b\x9" "[\x9a\x98\x5K\xf8\x9f\xeb\xaf\x16\xc4\x81\xf3Vu<\x8b\xb8\x1\x95\xbd$DZ\x80*\x5\x17" "\xae\x9\x44\xee\xc6\x30y\x96\xf8\x38\x1b-\x97Mye\xe3\xf3\xe9\"\x96\xbe\x91\xdelT" "\x86\x30\xe7&#le\x8d\x98\x61\xca\xb9\x8b%ryC/\xa4t\x85O\x92\x16\xec{m'\xa1\x32\x1a" "{g\n\xdere\xc1\xbj\xa5\x9\xbf\xd3\xad\xfa\x44\xcc:\x1d\x33\xdc\x82\xdcL\x1b\x13\x9d" "\x95\xdd\xd7\xa2\x31k\xfa&\xc6\x8\xb4\n\x36\xba\x9b\xf9/D\x1e\xbb\xc8:]\xb\x46'\xc5" "h\xf6]\\\x5\x37(Abz\x8d\x8e\x30Y\xd8su\x19\x93\\\"\x15\xbei\xd4\xc5\xf6\rM\xff#\n" "\x9\xe7$1\xc1\xf0\xac\x98\x85\x92\x5twZ\x12$\xc3\xc5Y\xb0\xf3@\x8S\x2\xd0z\xd4\x1" "b\x0\x44;;\xb0\x65\xcb\x7n\x89\x83\x81\xfa\xf8z\xf0\xab\x61\x1aU\xa4\x1b\x92\xed" "m\x95\x10\x95\x17Q\xc0\xed\xb\xcf\xbc\xee\xa7\x92\xffk\x87\x97\x94\x89y\x1d\xc8;" "\x88\xe7Gp\xc0}\xf3Nx+\xbd\x14\x37{\x3\x99\x2[\x1\x1c}\xb9,\xa2\xdb}\x8\x9\x9ah\xe3" "\x95\xe9\xf2\x82\xf8\xd7\x16\x9e\x41\x38\xdc\xe2\x82N\x5>\xe7om\xe8\xb5\x82\x96\xba" "8\xb0\xd9\xd2s\xe3\xa4\x61o`\xf2\x91\xdb\xf4\x34hH\xe7\xdc\n\xf3\xb6:v\xd8?\x6\xab" "\xcf!uU\nU\xb6\xcbJ1h\xf0\xd3?\xae\x38\x9e\x4\x84\xeeg{\xdd\xe1l\x10o9\xbf\xfb\x37" "\xf9\r\x89\x12\xab\x66t\xa6\x31\xa3\xe1.\xfb.\x3\x91\xbc\xe4*\x1d\xb0\x98\x12\xdb" "\xd0\xfb\xb\xb0\x1a\xbb\x13N\xbd\xbn\xca\x13J~\xa7\xe0\xee\x66\xf8\x9\xc4n_\xad\xb7" "\x0\x85\xd7\xf0\xc8\xf7\xd7\x8f\xa8\x64\xf2\x41\xeaP\x1b\xdc\xdf\xb8\xfb\x1d$\x96" "\xd9j\xc2\x33\x37\x15l\xb6?\x99!\xbf\x84\xb0j\x7f\x9d\xe4$\xed\xb0\x90p\xd0\x9e\xfc" "\xfc\xd3*pa\xc9\x90\xbf\xa0\x88\x17N\xc4Z\xfJ8X\x3\xc6\x64\xc2.\xab\x4\x1bq\xcc\x95" "\x9d\x9f<\xf8\xfc\xb2~k\xe9\xd7\xe1\x36\x18H,0\xdeT%8/\xb9\x64\xa3\xbd\x82\xe7\x42" "j\x8c\xa0\xac\x81\xa8\xc0\x9bl\xb\x41o3\xc5JE\xc4\xf5{\xbf\x10&\xa1,[\xaa\x1aU@\xe7" "\xdb^\x95N\xe1\x1\xc3jp6#\xa7)\xc\xe3\x2u>\xc1X\xb6_\x81\xf|F\xc5\\\x7f\x9f\x12z" "\xa3\x94_\xe2\xa3 \xa6\xaaI21%\xc8^\x17J\x82\x8cU\x97\x83\x10~\xdd~9g\xbb\x1f\\\x61" "c\xb9\xa1[\x8c\x9d+\xe8\x44\x19\xfd\x9c\xf\x36\x1\x8b\xde\x46+{\xee J\xf1^\xae\xe3" "\xe4\xf5\xfe\x39\xa2it+\xa5\x39\x8b\xc6\xdc\xdb\xac\xfd\x34\x66\x99\xa2\x8b\x8dp" "\x8e\x8b\x9\xef\x0\xc4\xff\xe6\xfc\x8b\xe1!\xce\x97\xaem\x92\xb0\x42\x89SDI*\xd9" "\xa6i2\x91\x35\x63\x2\\\xb\xeb\x65\xca\x34?\xbc\xdd\x12\x1e\x12lIi-R\xabK\xcbq_R" "\xdb\x80h\xc\xfU\xa2 \x1b\"\xc2\xf2\x63\xd3\x8a\x89\xcc\x89\x81\xc5k\xcd\xb2\x45" "\x80SG\xa7\x97\xd0\xd7\x1e\x2\xa1\x1b\x82\x38\xfb\xc2\x42\x45\x62P\x1\xech\x90\xcf" "\xb1\xa0\x93\x99\x37\xaa\xb8/\xf6\x35\xdeR\xe4}b\xcb\xb3\x8dL\x89R5V\x12]v\x1e\xfb" "\xeeV\x91o.\xd3Q\xa8\xc8\xbe\xde\xb3u\xb4\x0\xa5I\x9e\xf7\xcc}\xb0\xd9\xd7\xf6\x6" "G\xc3\x41l\xe1\xd5\x5)>\xc1(\x9c\xc0\x18\x14y\xb2\x8aq\xac\xcc\xd3]\x1cI\x7f\x62" "\x84\x43\xfd\x33)\x1aH\xf7\xaf\xa1\xd6\xa6u\xae+\xaa\xc9\xfb\xc4\xa1\x89\xfc\x4\xa4" "B\xb\x91\xe3\xd5\x1e\xd1\xba\x42\xc2\xac\xa6|\xdd\xab\x41\x63\x8c\x82#of\xa8\xf2" "\xce\xf2\xc6j3\xd5\x42S\xb5`\x99\x89\x16\x8e\x1c\xb5\xe9.\x9a\x46%j\x87\x10O\xf\xa8" "9\r\xbb\xfb\x81H\xd7\xf9\x0\xb9\x63J>g\xb0\xf7\x61\xbf\xf5\xf4\x16\xb-\xb2\x15(\xd0" "\xa4\xd5Xt\xee\xa9\xf0\x15\xd9R\xcb\x8f\xf8\x8f:\xfe\x83O\xc1\xea\x1d\xe2s\xb9\xc0" "\x4\x8e\x45\xe3\xe2\xaaW\xe4\xc0\x92\x61\x8bP\xb3\xc1\xf5\x15!\xd0>\x9b\xa7\x43\x89" "\xab\x46\x13\xb0\x33},tx_(\xee\xe5t\xf1\x81x\xc1g\xe6\xa3\xb5\xa5\xf6\x61?\xbeX\xb5" "\x84\xa3S\"$X\xb6\xe5J\xc8\xaa\x8\xf3\x1a\xb0v\x1e\x15g&_\xff@\xcb>u\x9\x63\xf8\x17" "\x9dI\\\"b\x84\x12Sg\xd1\xac]\x18\x8f\\\xa6\xa9\xfe\xf%\x12_05=\xf5N\x96\xe1\xf6" "\xc5\x11\xc9\x38\xe1\x0\xbe\xc\x1bJ\xe6\x8dN33yO\xb\xc9]\x9a\xe9\xbbQ~\r\x18<\xfe" "\x88\xe0H;\xca\x95x\xf\xb6\x43|\xd3\xc2\xbc:\xf9\x65\xbck\xc5\x8d\x84]0F\xce]\x12" "\xec\x92\x85\xc1\xfd\xde\x31\x46`\xa9`\xaf~J\x7f\x7\xf9\xf\x95\xf\x6\xc7{\xe9\xf2" "o\xa9\x1f\x14\xfa\xc8\xdd\x90N\xaey\xe\xd2\x16\xe7\xcc\"\xffG_\x8f\x46.\x1a\x46\xbc" "\xdaq\xa9\xd6]\x7\xde\xdc\x3\x8d\x0\xf4\x93\xb3\x88ogI\x83\xdc\xfd\xd7\xd7`\xfb\xde" "{\xaa\xcdx\xac\x12\xf1\x8d\xefU\x88i8\xf8\x8b\x99\xadO\xc8\xa4 \xcb\xd6\x0\x36\x15" "\xd4\xe3\x1f\xf2\x94+5\xf7,\x1a\x1f\xb1<+\"bRs\xf7\x15\xe5\xd8\x9aM\xfe\x43\xe2\x4" "ub\xf7~\x9c\x8e\\))\xbd\xc7gN\xe9\xbe\xaa\x8c|\xe8\x2\x1d(I-\\Tv\x8c\x0*6j\x86+\xba" "\x99\x39\xb\xe4\x87\xe4x\x15\x13\xb8\n{\xcd]G\xdc#T\x1c\x9aU\xb9\x45\\S\xe9\x32]" "\rw\xfb\x3\x90\xcd~\x12\xce.N4X\x1aJ\xb5$\xa6\xa9\x1f\xd3\xbd\xb9\xe0ySDq\x16\xc7" "\xe4\xf4)\xa9\x9f\xf6\xc4\xc1\x1b\x1c\xed\x99\xe5\x11'\xc3\x9\x4\xbd\xf3\xed\x12" "\xd7&\x1c\x31\xaaH3\xacr_U\x97\xb3\xc1\x17\nH\x92\xc3\xcc\xc7\x65\xf0!)D-I\x1b\x12" "'\x4\x13\xa4l\x92\xc9\xb8=A\xea\xdb\x8\xc7\x80\x37\xa1\xc8\x63\x5\x99i_\x0\xbd|\x8b" ")\x84\x15@:\xec\x63\x2\x37\x43/~ou8Q\xcb\x35\x88\xe2)\xac\x8a\xe\xe3u\xd8\x15\xac" "\xc\x2%\x0\x61\x9\xbd\xf8\xe0\xb4\x96\xde\xdd*\xa9\xcf\xaa\x16(jFb\xe2Vw\x8b\x12" "\\\xb4\xdb\x5\xd2R\xaa\x66\xda\xda]\x16\x1e\xf6\xa5\x97\x1e\x9e\xd8\\\x91=\x1b\xef" "\xa7\xd8\x62\xaa\xb7\xe1k\xc9^\x3\x95\x64`\xe1\xf5Z\xa7YH\x0`\r_\r\x14\x33\xee\x8f" "\xf\xb\xe4\xce\xc4\x3\xcf\xed\xcaRsFE\x82n\xb6\x96\x1a\xf0\xc4\xe1\xdf\xfai\xf1\x93" "\xe\x19h\x15\x39\x96\xe\xb5\x8b\xc3\x86\xfe\x31\xf2\x66\xf5\xe1\xb\x13\xbeMOF\xa2" "\x9b\xa9T\x3\xe7\x5\xca\x8d\xbc\xdc\xc0<'5\x9\xd9\xa8\xbd\xedna\x18\xda\xf7\xfb\xc3" "c\xc7\xe7\x84\xf8\x30o\x8e\xebwI\xccm\x85^\xd2\x9f\x99\xc7\xea\x8b\x43\x37\x8c\x12" "s\x8f\xb8\x13\xfb\x82\\\xde\xad\x8a\x66N\x1f\xad\xf1\x1fz\xb8O\xa7\xe4%{\xd1\xef" "\x7f\xcb\xc3\x1e-\xa8\xa8X/C\xbej\xe0\xfc\xa6g`HLQ\"\xcb\x38\x17iQD\x99\x19\x34\x1a" "\x9e\xb6\x0\x93\xed\xce\xea\x34\x7f\xf8:\x16'\x8c\x37\xa9\xff\x38 +'\xa4\xf7\\\x6" "o\xe4\x43\xa2\x41\xb6\x30\x14\x9cXWP\xe2\xd8\x15\xf6'\xa1%\x42v\xdb\xea\xe8\x18\"" "p\xf2i\x9a\xc1\xe7\x8cj\x9v~)jdn^\xde\xd4\x84=.\xb8\xa6\x86s\xac[\x81\xe0\x65\x10" "\xdb\x64\x87%G\xa9*K\xc8Q\xe7h\xf4=\xa0S\xa6\xbb;\xe8\x9c\xbe\xf1\x66\xe8\xa3\x41" "\x9e\xed\xe1\xb9}\xf8\x8ai\x8c\xf_\x86M\x81\xb5\xc4\xf7\xad\x97\xeb\xf7\x8bN\xe8" ",\xcdq\xa3L9\x8d\xd3\xf7\x46\x9\xc5U\xb7\x65<\xe2~x\xbe\r\xe7\xca\xa1\x1d\xe7\x8f" "\xca\xc0\xe0)1\x1\xa2\xa8\xc5TYA)\x1cV\xd4\x95\x7f\xcd\x65\xe3l\xccW\xc8\xc9\xdc" "\xcc\x7@z\x11\xf5\xc9\xcb!O\xf5\x8\xa5\xf6\x17\xff$\xf0\xb6\x17\x0Mg\x87\xea\xca" "\x97)a\x8\xb8\xb0\x2v\xf3\xb7\xe2\x8a\xf1\xdb\x99\x8c\x36\xefQ|8\xd9m\xbc\xaf\x33" "\xde\xb8\x99\xa3\x44\xa6\xc0G\xcd\xd2\x66*\x2\xb9O9\xacR\x8a!\xff\xaa\xfe\x36Gp\xbc" "\xfb\x99_b\xeb\xcm\x7o\x12$\x1fr\xe4\xb2\x84\xf0\x85\xa3\xc6\xfe\x92\x63\xf8y\xaf" "\x8c\x4\x99y\xf5\x1e\xbfI1M\xd0\x33\x1e\x93_\x94\xf2\xa5\x8a\x10y\x6\xc2&^;\xd6\xd6" "D\xeau\xc9(\xee\x81&\x8e}\xb0\xd2\xb6\x17u\xcb\xdc\xfc\xe7\x43\xef\x1a\xe9xLJ\x9b" "-N\xb0\xd5\xbc&Q\xd7\x9f\x10\x83\x6r&p9\x9d*\x90\xe4Sdg\xc0\r\xe8o\xf4\xa4\xf4\xa5" "\x11v\xedr\x1e\xa3\xa1\xc7,\xee\x35LT\xf6-\xb4\x98*Vc\x7\xcf\xd3 \xd6$[\xc3\x10\x8a" "\x5OD\xb3\xf4\xf6\x1f\xde,\x84\xab\x41m\x18\x16\x45\x44\x30\xb6\x46\x8cW\xd8l\x15" "R\x18\xc6\xf0_\xae\x1f\xe2*}\xa4\x61\xe9`\xc2\x10\xecnD\xbd\x7f\xeay|\x1c\xc6\xb6" "?_\x93\xe7[\xf6\xce\x42\xddU\x9e\xb1\xe9z\x8c\xd0\x1d\xaa\xd4\xe9\xaf*TH\x96\xf6" "\xe5\x97\xed\x16\xd6\x84~HS\x9d\xf\xe0\xc1\xdf\x99)\x86\x30\xec+F]\xd0\x37\xcav\x17" "\xea\xd3\x4\x99\x39rK\xb3\xd4(\xe9\x13}\xdag\x9\xdd\xe2\xe7.\x16\xc8\xc\xc9`\xcb" "\x85\xf1r{\xf3\x8\x45\xfaQ\xfc\xa8\xd5+`\x99\xa6Z\xc\xdd\x44M\xaa\x35SG\x82\xae\x34" "|\xfa}\x84\x9a\xd3\xa9\x37I\xdb\x90\x41\x3\xe5\x97\xf6\xddV\xe0\x32\x2_Y\xf7\xb7" "$\xd1\xc9G5\x80\x99\xff;3nmh\x8br\xbd\x11[\x86\xd6\xd0\xc5M\xd4W\xb7\xbc\xe4\x43" "RL\xb0q\x8a\x82\xd6\x66\x1f\xbb\x5g;\x86\xa3\xef\x66\xd1\x98\x17\x88\x3\x9a\x1e&" "Y\x7f/lQ\xd0U\xb1\xde\x1d\x32\x14]9\xb2\x44\xc9\x1e\xb3\xef\xd2<=Kx[\x96)j\xcb\x8c" "\xe2\x18\x82\xb4\x81L\xa4\xd2^\xd8\x8a;g)\x89\xc\xca\x88\x43\xc1\xe2\xf7\x46(\x9b" "N;\xf5\x19n&\x8c\\\x8\xe5&p\xe8u\xae\xedN\x9c\xefoE\xa7\ro\x94J\xa9Q\x8c.\xc8`\xd1" "c\x13\x1b\x66\xe6\x1b\xe3\x44\xaa\xfa\xf\xcdKZ\xf2H0\xda.\x98\x11\xc4\x2L\xb8\x7" "\xaf)\xceV\xa5wfk\xb8\xa6\xae\x62\xddx\xf>\xd0(5-\xee\x9bj\xeft\x83I\xf0q\xf1Q\xb9" "\xb3:\\p}i\xc\xac\xac\xdc\x1f\xbc\x8e\xaa\xb9 \xd1\x1cN\xbf@h'2\x93\x3\x32\xa7T," "\x0.\xd0\xe4\xef-<\xc5\xa6\x11\xa4\x85\x85\xfc\x0\x97\x42o\x97\x10\xd6\xde\xa7\xf" "\x1f\xfc\xa6[=9\xc8u6\x9a\x91\xc0\x45\xaes\xd2\xde(\xb5H\xf6\xbd\x8d\rv\xe8te^z\xb6" "\xef[\xf9\xa4\xe0\x8e\x12\xa1\xad\x86\x7f\xf1\xb7\xc\xb0\xf2\xac=\x19\x8d_p\xc3\xa2" "Q\x5\x82\x91\xd7\xf5\x37\xe6j\xf5l\x87\xc1\x19\x16\x39\xbw\x5\x82\x11\x7\xc6X\xd2" "\xa4\x3\xcf\x1cl\xacy\x13u\x5\xd9\x4\xa6\xe3\x1f\x34\xef#\x4_\x92:\xc4\n\xa9\x33" "PX\xadv\r\xcd\xdf\x43\xaa\x9bQfR\xfb\x81\xfd\xe9\x1\xd2\x9c\xc3\xd2\xea\x99\xc4/" "\xb8\xcb\xb1\n\\\xfc\x4\x3\xc5\xdbrV\xc7\xd3\xad\x11\x93M?\xcd\xcb\xde{\x87\xe1\x19" "f\xfd\x33\x61!\xc\xc5\x11\x45\x9c\xd8+a\xca\x45\xe2\x8\xa9.\xdc\x4\xc\xd5\x8b((\xfa" "\xd6R\xab\x38\x46\xc0\x41_\xbb\xc5\x3\xc9%\x1d\x7f\xa6\x61\xfb\x8e_\xd1g\xfd>\x9d" "\xf8\xbb\x17\xa5-#\x1\xc2\x1f\x97K\x16\x34\n\xc7\xe4\x31'+H\x89_\x83v\x87\xcb\x41" "\xeeu\x95\xa8&1S8\xd9\x97\xfb\xa4:\x9f\x8a\n\x90g\"\x95\x37\xc8\\\xaa\xab\xc2\x66" "p\x0\xe6\x96\x1f\\\xa1\x1d`\xd3\xcb\x97\r\xe\x5\x9etF\xf1\xb4!f)-\x96\xab\xae\x83" "\xa1\x85\xdd\xee\xab\xbf\xf0\xd9\xdaT\xce\xd5\xcb\x12\xe7\x82\xa2kq(\xf0\xda\x66" "\xeb\xbc\xba\x7f\x45\xb6\xd4R*;\xaa\xfa\x39\xd7\x64\xb7\xc8>\xfd\xa7w\xdd\x17\x37" " \xd4\x1e\xcIII7/\x9b\xe6\x1d\xe1u\xba\xe4\xad\xb\xf8\xd7\x88\xb3\xd5\x3+\xc4n\x95" "\x82\x12\x90\xcblfQ\"\"\xc\xcdl\xff%\x44\xb3\xad\x1e\x11\xdd\xee<\xc\x65\x31\x81" "\xab\xe2\xfjf\xa4\xe8\x98\xebHcj\x8d`\x87\xfbyGz\xaaT\x19\xb7\x85\xda\xd5OI\xca\xa8" "\xc3\x42\x7f)s\xa4\x9a[\x6Gg\xaf\xc3\xb0(\xfaS\xca\x96@\x1d\x91*qQJ\xbe\xdbh\xe6" "\xa4\x1b-\xc6\x19\x4\x1a\xe1\xb7\x98\xc1\xd6\xd0\x64G\x8b\xa1|\r\x4\xfs\xf1\xd1X" "\xc7/\xef\x16\r\x30\xb8\n\x9e\xe8\x5K\xa8\x86\xfi\xf2$\x1ai&sz\x4\xe\x6\xfe)ED\xa3" "\x93\xfb\xa3\x8e\x9d\x85\n\xda\xae\xc2\xae\x18;\x12\xfbwl\x82\xcb\x34`\xdbL\xee\xff" "\xac\xfa\xba\x62\x9cz\xe\xdc\x66-\x8f\xc4\x8bY\xdb\x18\xe8\xc5\x90\x8dI\x13Y\xa9" "\xc1\xda\xbe\x14\x18\xb4ix\x92L\xd0\x2\x8f\x1e\x19\x39\x99\x4s\x7f\x41\xad\x8d\xe1" "\rB\x14\xd0]jM\xb4\x85\xcb\xfc\xf4\xdf\x9!\xe4\xe6)\xab\x83Ji\\1{y\x1b\xaa\xf9\x2" "\xecY#\x1b\x85n>dhh\xce\x13\xfb\xd5\xcc\x41\xb6\xfd\xf3\xe4\xd9\x18\xa0.\xfa\xa2" "\n\xab}Rj\x4\xed\xcb.\xb3\x88\xa2\xcc\xbc\xee\xdb\x9d\xb\r\xf1\x34>\x18\x31\x7f\x46" "\xa6\x5L+\xbb\x14 \x1a\x92\xaf\xbc\x45,v\xf\x16\xe1,\xf9L\x8a\x90\x1fP\xf1&>\x1\x93" "\x8\xc5\xaa\xd2\x46\xca\x64W\xb\x12 2\x94\x8b\xbc\xfe\x11R\x93|,2\xb7\x64\xf7\x8b" "\xc2H\x17Jr\xa7\x6\xfc\xe7H~\xe6\xc6\x5\xd4\x8e\xaf\xc2)\xc9 `w\xa3\xf0\xfe\x8h\xad" "_\xed\xab\x9a\x9b\x7\xa7\xd7\xd9s\xfd\xaa\xb8\x91P\x9a\x8c\x8c<\xb9\x86+\xbf\xe0" "L\xd0\xc3P]\xf3\xea\x8aKQ\x98\x17\x5\xb3\x8f\xf5\x3\xab\xc1\x7f\xd8\x82\x30\xbf$" "/\xd7\x37\x31K\x9d{a9\x89\x43\x8d\x9e\xfq\xd5\xcb\xecw\xf1\xd9:Q}\x9f\xe0\x8e\n\xa1" "8\xd3\xaaU\xc2\x32\xf4\x93\xcc\xc1\xf1>\xc4_.\x7[\xb3\xa9_\rJ2\xd5\xdd!v\xa0k\xcb" "\xcc\xfa\x8d\xf\xf2\xe2 \n\xd6\xf2\xcb\x91\xd3%\xeeH@\xaeJ'\xc8p\x9e\xec\xed\xe5" "h,\xf\xd5\xd9MW\x7\x90\xe3\x4\xb9\xb4\xfb\xff\x8\x85-\x98\x95\xf7\xfa\xa0\x46Ob^" "}Q\xf3\xfbT$\xee%\xe8\x9d\xa3\x39\x36\xde_1=\x13\xf3\xa5\xc5\x65\xe3>\xde\x87\xb2" ",\xad!\x1e\xb5\x8bp\xf6q\xf5\xa8\xc4s\xa1X\x98\xef=5\xc0\xd4\x96\xc6+\x1\xdd\xa1" "\x96\x39\x99\xd3\x13\xb4u\xdb\xe8\xaa\x88\x8aMf\xcf\xe1\xaf\x9c\x86p}\x86&z\xb1\x8f" "\xbf\xed\xe6\x88H\xbb\xb9\xddZ\xf6\xa5\x81{U\x94\xc6\xa7M\xae\x1c\xb8>\xbe\xd6\x16" "\xf7\xbd\xe4\xa4\xe6\x1b-C" "\xad\x97\xb0\xccX\xd4\x65{\xc2z\xefvr\x15\xcf\xe5\xc9\xf7\xa8}\xf9\xd4\x39\xce\xcf" "a$\xba\xf2na\x9e}z\n\xff\xb6x\xdfn\xb3\xd6\x63\xbc\x9fw\xaa\xcdu\xfa\xba\xd0\xb4" "\x16\"\xc3\xd5\xac\x9ax\xa4\x32YW\x15_6\xc9\xdb\xe2\xd1\xdf\xa8\x1b\xf0\xe1\x1e\x5" "\x12\x97\x8b\xc8\xe7M0\xb7?\xc9\xfbx59\xa1\xc1\x32\x1b\x89;O\xf9xp\x84\x18R\x80\x96" "{--\xf7&\x90\x33\x99\x94V;\x8a\xbd\x37\x1f\xfb\xb8\x32\x16[\xf1g\xf\x1b\x18\x19\x88\xda\x99\x62\x62\xbb\x3&\xef\x95\x91\xbc\xcd" "\xb4\xd4\x80v\x86\x45\x1dXB\xd7\xa7\x9d^_Q\x4R\x8c\x89\x17\x8e(jA\x15\xb9\xec\xdd" "6\xcc;\x1a\x8\xf3\x1cT\xa2\x94\x30'\xde\x1\x14\xee\x35\xd0\x96\x37\x9c\x16\x97\xff" "`3aUt\x1c\xb4\x66\x9b<\xa4\x1cn\xad%\x8f})\xea;L\x93%\x11\xf6\x97\xee\xda\"\xb9\xc" "\x0\xe\xd5\xdf\x81p\xf0\xe1\x89\xb1\x10\x13\xe3\x85)S\xc2\xfa/\xb2\x19\x7\xc5\xe1" "\x9b\x83\x43\xfe\x43R\x9fr\x19\xfe\xcf\xa8\xb4\xa7\xbb>\x1\xfct\xeb-\xc1H\x94\xe" "3-\x1fS\xf4\xf7\"lx\xb1X\xca\xdf\x82\xd7V\xb2\x1e\x96q\x8d\xb7{\xa7\xac\xa3\x1f\xd5" "'\x9d\x19\xb1\xcf@i\xc\xf3\xf7\xa3\x62\x46\x11\xba\xb4\xa7\xb0\xeew\xb4\xe3\n\x10" "\x9b\xbc\x15I\xd0\xa6\xf9\xb6\xf7\x36?s\"j\xd1\x9b\x92\x95\x82L\x15#\xa8\xca\xe\xfd" "\x87\x8c\xdf\x81\xe8\xdf\x64\x15m\x7f_\x6\x87\x30\xeb\x30J\xbe\xe1\x34J\x9f\x8d\x36" "m\x5@\xe9\x13\xd8\xf7\x9e\x9d\xa8\x4M\xe9\x0\x66\xa6\x39yo\xe6%i\xc7\x8a\xd5\xe5" "-\xa7\x85;\\\xd2Qs\x7f\xce\xd1\xe1~us\xb5\x34\x1a\xe6\x92~\xf3\x8b\xb5z\x84\x37\xc" "\xca\xa5\x6\xbf\x96V\xea\x0\xc7\xd6Z\xfcj|bSB\xf3i\xbd\x93'E\xfdN\xc2ZZ\xfbW\xc9" "\xbc\xc\x8c\x82\xde\x8e\x9es\x90\xb1`d\xef\xff\xbd\x15\x1d\x9e\x16\x9f\x42\xbb\xf5" "\xec\x9d\xf5,\xf8\x82\x89\xea\x9d\x82\x9a)\xa5\x61\xb0<\xcb\x14\xbcj\xc\xc6'|\xd5" "5$\xe9L\n\xa1s\xd4\xb7->\xd2\xfd}}\xc7\xa2[|\xb9\xb7h1\xb\x88Z\x99H\x3\x37\xce,\x11" "\xfe\x90=\x7f\xc5\xb5\x93v\xc9=l\x16\x9d%\xb9\xe8\xa2\xce\xc8\xb5\xd9q\xf7\x7f\x0" ")\xb6\x1d\x36\xd9\xc4j_\xea}I\xff\xe0\x32\xc;\x83\xf5\xa7\xdd\xa4\x8e\xe4\xa5\xe1" "W!\xf7x\x12\xc5\xf6\x18xFp\xc9-r6\xcd\x1d\x19$\x8f\xc8\xc9\xel\xb\xc8v\xa1\xd9\xe3" "\xb5\x38W\xfd>\xe7y\xfHn~\xc4\xdd=\xa9\x44\x96}b\xf7\xe8\xd7\x6\xa9\xf6\xeb\xff\x86" "\xb3\x8aS\x0\xdfoTD\x14\x89xE3Q\xbf\x8d#\x2\x15\xd3RW\xbbT\xa7\x2\xef\xeb\xb4\xba" "\x90\xf5<\xd1\x34i\x9\x32\x9e\x92\xe0\x64q\x2Y\xff\x8a\x33\xf1\xa9\xcc\xa5\xae[\xfd" "\xea\x62\x87\x65\x39\xc0\xaay\xb2\xdb\xd9_\xb\x80\xacQ\x84.\xdf\xac\x8b\xa6\xc7\x9a" "\xa9\xf0\x91\x41\x13\xca)VS\x84W\x1b\x88Z\xed\x9f\xf1\xe2\xdf;\xdd\x66u\x14\xa7\x8e" "\xe2kY\xf9\x62\x61\xb6&\x8bz\xfb$]\xe6\xee\x93\x9\x43\xc3\xd5,#\x8e\xbbm\xef\x8f" "gw\xdc\x98@\xd0\xc2 \xae\x81u\\t,<\xf4/l\xf3\xc3:,jO\xab\xca\x1\xea\x12\xc3{,\xd8" "\x99\xcex\xe\x43\x45\x92\xf2<\x7f\xe9o\x87\x8a\xa5\xf1\x96\xd9\xa7\xb\xb3\xd5\x44" "$z_)PB\x84!\x81\xd7\x8f\x1d\xd5\x8a\xf0\x9d\x99\xd2_FG\xbf\xefY\xe1\x33\xd4%z\xa6" "\x89\xbd\xcf$\x85\x32UnjL\xfd\xf5X\xbf\xc1\xaf\x8d\x9\x91\x88\x9a\xd6\x1d\x8b\xa1" "\r\xa5v\xd1\x36k\xe4\xf6\xb0 8\x99\xf9\xa0/\xab\x34\xe9!\xe9\xa7\xb0\x9c-\x6\xf8" "\xc6`\xb\x9f\xfc\xb1\x87\xd9\\\x1f\xac\xf7=\x1e\xcd\xb2\x8b\xd4\xf5\x14;\xac\xae" "^\x19=\xc0\xd1\x96\xe1j\xb2\xe4\xd3\x16\x8av$\xde\x98\x8e\x1b%\xe5\x64\x6\xf1+hF" "\xc6m~\xe0w\x1eq\xbex\xe2\xab\xa6\x37\x36M\xf7t\xf9\x1b\xd4>f\x8\x35\x9b\x85@\xbd" "\xf2.(\xc3K\xae\x81\xae[\xfeP\xd7TU<\xb6\x85\x8a\x8c/\xb7\xdf\xe8@B\x1bp+\x99\xf2" "+\"\x14U\xd2\x8a\xc5_+\x8b\x1\xe5\xc6\xed\x89}B\xfe\x45\xa3m9o+&?\xe5\x16\x63\xf8" "\x98\xfdtv0\xde\xa1\x34\xd7X\x95MR\xa4N6\xc7\x43\xdc\xd5\x83\x1fs*#\xd4\xaa\xf4\x9a" "\xcfk\xcb\xb3\x88J!\x6<\xf0\xa0\x7\xe2Qk\xfaqh>4\xb3\x61\xd4\x45oSS\xe7,\x1d\xb7" "\xc6\x93\xc9\xd0\x35z\xe8\x17\x9a\x64O/7=\\v?^l\x8c\x8bHr\x88\xfb\x83w\x11'\x84\xfc" "P\xb3\x1e\x39\xdd]i\xd1J\xa8\x93\xb5U47L\xec\xf6\x19\xa9\x8bG\xee\xf8\x1c\x8c\xd2" "\xb\xd3\xb1\x83\x86T\xf3\x8\xfc\xaf\x94PO\xd5\xfd\x8e\x93\xf0zG`\xc1\x82\x65\x11" "Ew\x89\x90\x12.*\xfa{V#\x6\x1e\xc3\xf4\xd7\xd9\xf0\x61\xf2\xb7\xa7\xa0\x9a<\xcd\xc3" "<\xb1` \x93\x36\x9a\xcf\xf1\xeb\x1cm\xfds\xdf\xd6zJ\xa9x\xba\x1b\xa4\x96\xbc\x17" "\xef\xdf\xe7\xa8\xf5\x33Hl;i\xdf\x1\xbcZ #\x2\x35\x45O9\xf7\xach\xcaU\xa4\r\x9a\x5\xe2\xe3\x85\x83\\" "\x88\x82\x88\xc2L\xd9\xfcQ\xad\"PI1\"\xe0\x30&U\xc4\x63\xcd~\x11\x88\xb5\x8\x13\x87" "\xc4gK\xf1n\xdd,\x1f\x1eI\xb2h\x99\xdb^\x1aL\xb1\xbfj\xfe\x14\xdd$@\x8w\xf8\xc8\x65" "{\xa4\xd3\"|v|\x19q\xbd\x33\xefpG,%B\xb6\x1H\xfcJ\xe3\x10\x35$\xb\xf5x\xe3\xbaL\xe8" "\xa4y\xfe\xb4\xab-\x6\xca\x63\xf8\xb8\xc\xb0\xb5\x92\xb2\xe6\x97}\xb0+\xd2\xd9\xf8" "\x13\x35\xf1?\x80?\\\\\xae\x42\x2\x36\xe8\xc5\xc1\x1d\xc4\xd6|!\xc\xf2iKG\xe7\xd7" "\x1bG\xc2\x9c(\x0\x61\xb9\xca.O\xd8\xa3\x3\xba\x12\xae\xf8\x15P;g\x95_b\xbf\xcd{" "*.\xa4\xe3\x1fy\x99\x87\xbd\xad]\x2\x8b)\xeb\x1d\x91\xbf\x89J\x8c\xc7\xf4u\x1d\x15" "\xd1\x1f\x80\xc4\xc\xe\xaa\x38\xafZ\x9c\xf6\x9d\x89\x42\xa2\x13R\xe3\x65|6W\xd9+" "@\x98^\xdc\x1e\xbf\xa8\x7\xc5(Zt\xc4}\xfd\xffy\xc4\x1a\xaa\"\x82n\xc0\x16\x1e:Nb" "IfO{\x7fR\x16\x1d\xe\xd4\x63\xc\xa4\xcf\xddmh\xfe+KzMd\xd7\x5\x1b,\x12\xcd\xeM\xae" "\xf\x66\x93-x\x81\xd6\x1\xfb\x62\xf3\xee\xacU.eL-\xe5\xbd\xaf\x65\x17\x8e\xfa\xc1" "\xd9\x1d\xda\xdf\x43\x98\xb\x1a#\xd5\xc3\xb5\xd3\x8a\x39\x11UH\xb7\x12K\x8b\xc5\xfc" "\x8f\x45\xe1_2\xf5\x6\xef\r}\xcf\x45\xc9=)%\x82\x91\x33\xa7\x32\xa8X\xcdo&\xa3Tj" "a;\xc1\x2J\x8d\x31'nR\x93\"\xd8\x7[\xfc\x9e\x97\x4\x15\x94\xf\x96\xef\x9b\xe1\x14" "\xaa<\x97\xfc\xc0\x8ang\x97\x1ahT\xf4\xcf\xdf\x8fkC\xa8\xd9\xfc\xe5<\xde\xaa\x81" "\xaco\x97\xa3T_\x91\x88Ymx\xb6\xa3\x34v\xdf\xb8\x38\xfdlO\xa7\x85tr\x3\x13=E\x18" "\xae\xe0\xc\x18J\xe0\xfd\xf5\xdb\x85\x3&\xad\x9f\xdc\xdb$K\xb4\xf6Y\xb6n3\x19\x33" "OY\xea \x88\xe4\x95tw\xa5\xde\xfc\xa2\xd4\xa5\xfa>7\xfb\xfe\xd1\x38\x45\x0xN\x8\xff" "\xa2\xf5\xaa\x41w\x95\xa1\xd2\xfeT\x82.\x10\xcb(E\x15\xb6\xf3\x94\xe7h\x1f\xd9\x11" "Q\xb\xd6\x8e\xfa\"\x95y0`\x86%wZd\xa4\x8d\xc$\x92\xbe\xb3\xeb\xfe/\x85\xbbn\xbeJ" "^@\x9f\xc7\xf1J\x98\xf9#\x93\x6\xc5\xeb>m\x4\xd7\x41\xbf=\xfcG\x8b\xd0<\xcf\xff\xf8" "H\xe0\xed\x18\xe4{\xec\xb6\xc5\\\x39\xa4\x66\"\x83\xf3\xc4\xe2\xdf\xb7l\xae\xf1l" "O\xab\x89\x44\xc1\xff\x62\x43\xe2'\x15\xaf\xbM\xe2\xfdjD.\xa5j\\\x88\xa6\xb9<6\xeb" "\xe5\"\xb5\xc4`\x14\xbc\x3\xe8\x61gH\x1dY\x9b\xc3\xfe\xee\x5\x64\xa0\x90\xe4\x35" "q\xb0\xdb\xe0\x96\x11H-i\xa2Pbm\xcb\x90\x96h\xf1\x45\xf9\xb6&\xf9\xa7\x90\x7fJ\x17" "x\xe8\xac\x6j\xf5\xb9\xee\x2Qr\x91w&\xcc\xf4\x16K\x1e\xc~|\x94\xe3\xb7\xdf\x85\x16" "\xc7\x8b\x1cr\xf6\xfdW\xca\n\xed\xe\x41\x9f,]\xd1\xff$\xf4t8\xc0\xe0G>\xdf\x9b_\xcf" "'|\x84\xd5\x0\xa4\xff\x5Uf\xee~\xcb\xf5prb\xfd\xcd\x82_\xaf}\xa1\x65\x66'Q\xe0\x81\x13\x4\xec\xc1\xa7\xc7?\xf8\x6\x38\r\xac]aa\x13" "\x88\xf3}z\x92\xdd\xa1\xc5\x35\xa3\x36Z\x82\"\x7f\x99\x9e?=\xde\x8b\xbdr\xa5#+32" "\xe0\xcb'S\x12\xcd(\xf4\xc8@\xc9]\xe6\x36n\x2\x81p(x,\xe6\xee|V\xa0\x4\xd6\xdeJ'" "\x86\x6\xf\xcbkm\x5\xaf\xdd\xc7\x43\xc2\x10\xf6\xf0\x45\x86\x3\x38,\x1b\xe8>a\xe9" "\xa0\x38\x35\xc2\xf6\xbb\xa1\xa4v\x5\x64\x63[\xe8\x99\xf7[\xd2;\xf6\xf6\x36\x37\x1b" "\xd2#\x8br3\x12 \x15o\xda\xf0\xa5\xd9\x32\xd2H)\xea\x5Kky\x10\xa7\x38\xc0<#\x1d\x1d" "\xbc\x9c\xaf\x1\x65\xd4\x9\x1a\x31\x35\r\xa2u\x97i$\xf8<\xb4\x18~a\x89\x17\xb5o\xd9" "\xb8\x81\xbb%\xa8\xd7\xf8t\x1b@z\x89\xab&q\x9d\xb2W\xd9\xe6\xb6\xc<%\x87\x8cX\x96" "\x9M\xff\xc5\x88\x91\xfc|\xa3\xea\xeaj\xe4\x87l\xe3k=2\x82\xc4\xd1\xda\xb3sSL&\x11" "\x4\xd2\x35\xca\x94\xc0\x8a\x9d\xaa\x3\x95@e\xf\xbb\x97\xba\x61\xd5\xd9\x7$K\xe0" "\xb6\xae\x1a\xe2\xc3\x15\xfcz\x13\xfd\x19I`\x92.]T\xc8R\x8e\x8a\xe6\x65\x1e\x9b\x36" "\xd7&j\xc9\x5\x8a\xe9~\xe0\xaf['\xb4\xc0\x45\xae\xc4\xd2\xbe\xd7\xc4,\xab\x91N\x10" "h\xcc\x85\x38\x86\x1a\xec\xee\x62\x43\xb3\xd3\x8f`\xae\x9\xcd\x65]\xa0Z+\xcb\x1a" "\x15\xf9\x14\xa4\xb8\x19\xd1\xe1s\xc4\xab\xf8\xd2_?)\xb4\\K\xcd\xcd\xcb\xff>$\xad" "\xd7\xe7j\xea\x86g_\xd8\xe8wIH\xa1\x62]\xbd^\xe5\xfe\xc0\xd5\x12\xde\x9f,\xa7\xe9" "\x1b\x97\xaf\xdfJK\xf2\x42I\x9bm\x8f\x4vk\xb\x8eu\"\xcf\x88H\xa4\xbc\xbe\x38,9\xcb" "\xb3\xbf\x39>\xf1\x3G\xf1\x8a.m\xfa\xa6\x84.1\xcb\x9e\xee\xe4\x19\xc7\x62\xde\xbf" "\xca\xf4\x9c\xd7\xbfXt\xf9\x92\xa7\x87\x3\x8\x17\xe9\xda\x99\x81\xb0\xd9\xe\xcd\xc5" "8\xeb\xb1\x81+\x88\xc9kn\x93\xb3P\xb3'\xea]sx\x87z\xac\x9dq)\xc1P\xc5q\xec\xddH\x8" "\xf0$y\xbb\xfc\x87\xf1\xdf\x80\xdf\x86\xedkW39\xb6\x9b\xcd\xec$\xfb\x9d\xf9<\x87" "\x1aj\xab\x8f\xa2\x36\xb3\xd3\x9a\xba\xa1@C!\xd9\x3)qI\x92\x38\x99\xdf\xb4G\x2\x1b" "\x95\x10\x42\x4\x41\xb9\xfd\x8a\xe8\x9e&gD\x1dvp\xb4\x6\x14\x39\xcf\xd8v}0\xd2\xd2" "\x98\xea\x15\xc1\xab-\xd7\xb2_\xa5\x14\xba\xb9\xf7\x14\x17l\x8a\xe5\xa2\x4\xbb\x16" "|\xdb\x33[\x13*5\xf6\xbd\x14\xb7\xf\xfdp1\xce\xbc~\x18\x9$\xf2O\xc5\x41q\x99\xcf" "!\x1e\xe8\xe6\xa5^\x9J\xfbV73N\x8d\x42\x16\x8d\xa0\xdb\xcd\xa3\xb2S6pY\x88\xc9)\xef" "\xe6\x8aV\xff\xdb\x15n\xac\x31\xc\xce\r\x6}\xc6\xb5\x64\x63Jq\xd6\xcb\xd6\xf9\xca" "\x9f\x86\x8f\xd2\xae\x88w\x8d*\xc5*\xe7\x8d\xdb\xb7\xfa\x9c\x93\x9d\xba\x89}=\xcd" "\xe0\xac\xf6\xe0MYe=\xf2+\xcbp\xf9\xfb\xfc\xfe\xc1\xeep>\x92;\x7\xe0\xd4\x13p\xc4" "\xe4\xcfp\xff\x63\xf8\xc7\x9c\\\x64\x38\xf8g%\xa5\xeI\xe3\xee\xe1\x86\x87\xea\x32" "Ne\x1d\xab\xad\x2.\x8ax\xefW\xc6\x30\xf1.\x9b*\xff\x39\x86q$\r\xc2" "\x16\xa2\x9c^\xc1}D\xe0_\x1a\x8d\xde\x90v\xde\x92\x45n\x96\x9c\x80U\xb8Z<\x4\x4\x13" "e\xec\x35\xd7\x9f,\x5\xab\xd0u\xf1N\xb2n\xeeG\x8d\xef\xf3\xd1/\xcf\x99\x37\xdd\x39" "\x1\xd5\x9\xb6\x95\xf8\xc1\xfaY\r\x97}x\xdb\x84\xb2\x84\x95\x62\xc4`e\x98\x42\xa7" "\xb9\xf\x8b!\xc2\xcc'\xd6\x42Xhr\xc4\x9bSM)\x9b?\xb7\xe1Mp\xa8h\x13\x83qU\xf\x9e" "\x2\x1at\xd2\xa6\xe0\xf6}\x90\xd5>\xc4\x8P,@\xd8\xdcQ\xea\xab\xbe\x86\xfb\xf5W**" "\x7f\x12\x1b\xea\x99\xbe\xb\x0\x45\xd2\xc5\x16\xd1\xc\x9b\xeb\x81>\x16\xf4@\x82Z" "w\xd4\xde\xde,\x8bI\xc4\xac[q\xc1\x1e\xbd\x8f\x8f\xc4\xcds\xa6.G\xf7\xeb!/\xf0W\"" "\x81\xb4'\x96\x33/pr\x8d\x92\x5\xce\x38W\xc\x96\xbd\x89\xb3\xf2\xa3\xed\xf4\x98\xca" "\x83\xa3z\xcb@'\xb5\x61\xde(\xba\x37\xb9\x19\x9d\x4\xa5n\x14ql\xebJF3\x0v7\xb2\x16" "\xb9\xf6\xba*N\xca\x8a-\xe0\xcd\x63\xff\x9\x44\xdc\x63\x5\x9b\xef\xef\r\xfbS\xa4" "\x8e\xf6/T\xf1[\xc0\x35SVxy#\xedr\x9ax-\x96+Mx#]\xe8\xdc\xb3\x18\x92\x63\x8fQ\x0" "\xf\x89\x81\xb8k\xfb\xd8S\xb2\x89)\xf8\x96\xa0S\xbr\xf0u\xcc\xb\xfa\xc7\x99\x63\x1f" ".Q\xf4t\xac/\x98\xe6\xe2\xfa\xb8\x9c+8\x90\x0y\x13\xbb\x98\x41\x96\x9b\x44\xedv\xd4" "\xe8\x88\xd9\xb3\xd9\x84\x1d\xfa\xc5\xd4\x14Y\xdb\xe7#7E\xbbNy\xfc\"\xfd~Ff\x1\x15" ">\xfe<\xd7p\n\xa8j\xca\xd0{\x6\x92\xce\xaak\x0\xb2\rv\x8c^`R\x89LY\x15`~\x9c\xbc" "I\xf8\xfeOo<3\x4_\xb4\xf0\xec \xa3\xc9H\xaf(\xe8\xf\xb6\x7f\x37\x9c\xcc\x1b\xd0\x19" "\xb3\x39S!\x91\xcd\xb8\x3\xca\x96v\x97~\xd9\xca\x1\xbb\x3\x95SH\x17_\x8c\xaa\x95" "\xa0qC'\xd5\x9b\x82\x44M\xf2*\xc4\xee\x8fPI\xc9\x14s\xf2&\xd4\xf2|\xe4\x2\xbb\xea" "o@l\xf2\x18r\xb1[\x19\xafl\xc\xdby\x8f\x80i\x94\xec\x1a\xa9\x5\x66\x37\xb1\x39\x12" "\xef\xfa\x8\xdc\x1[\xb6\x7f<\xa7\xa4\xc8,^4\xd3\x9d\x88\xcd\xd5(|0D\xba\x95\xf2\xf7" "_km\xb9\xf1\xd6\n\x41\xfa\x90\x34\xd9\x1b\xd9\xcb\xec\xfc|\xe7\xd7o@H o_\xab\x9\x1" "\xf7\xcd\xd6\x39\xed\x6\x8c\xc8+\xe1|5\xf6\xdb\xb8\xd8Y\x95\xa6?\xf6\x9eR\xbc\n\x1" "&\x16\x62\x15>\xc3@\xfd@'\xea\xad[\x1b\x81\x1f\xad\x9e\x16\x66\x39\x18\xe4n\x98;" "\x2\xa3\xad\x97\xeeTW\x8b\xf6Y\x9e" "y\xa9\x9\xf\x35\xbe,\x9f\xde\x41\xe\xbf\xf0^\xa7\x61 \xc7\xd5+*b\xd6s\x8b\x1b" "J\x9f \xeek:|\x1c\x6\x41\xb5P-R\xa2\x8d\x95\xdd\x7\xda\x8f\xc8\xeb\x96\xa2\x34V_" "\xb0\xb9\xd8,\xbb&4P\xf9)\xc9\x15]=)\xae*u\xeb\xe8\x93\xd1\xebt\xb6\xf0\x62\x8f[" "\xcaL\x90\xa7\xdd\x94=\xb0\xe9\x9b\x17\x8a\r\x83RH\x0\xb3\x61\r\x65\x14u\x90Y\x83" "\xe8OY\x5\xf4\x9b\xe\xf1-\x88\xc\xee\".\x91;[\xa5\x1b\xc5S*\xfar/\x8e\xf9%LI\xf7" "\xf6/tMX\xb\xfb\xde\xe1}@\xff\x9a\x4\xac+\xf6@\x16\xd4g:E8\xa6nR#\x8bOL\x1d\x37\xac" "\x94\xf1\xf6\\{\xed\xa2\x46\x8a\x10\xb0\xdf\xa3!\xb1\x8c\x84\xe3x\xcd\xd2U\\E=b\xc9" ",B\x93\xba\n\xedg3\xaa\xfc\xad\xfbH\x8d\xfb\xe5\x45\xde\x91\xe4\x12\xc8\xa1\xad\x4" "\xd9Y\xc7Rb\xe9*7\xc4\xd1\xbbH\xdc\xdc\xa4\xc8\xf6\xd9\xfb\x7\xa9\x18\xbo\x9cV\xef" "\xa9\xad\x9a\xb9\xfeH\xed\x61\xd5\x9cZK\xf\xc2\x84\x35\x1d\x43\x9e~P>\x92\x35\xa3" "\x8\x63@\x8f\xa5\xa9\x9a\xaai<\xb8\xae\xbb\xa6\xeb\x84v\x0\x92\x34\xbe\x91L\xe2\x35" "\xbc m\x9\x32\x0\xd3Y7C\xea\xe9\xdb@\xf6\x39\xea\xb1o\xd3\xa7\xd0I\x0_\xbf\x93\x86" "\x96\x94\x8d\x82\xbc%gLi\xd1\xd7\xed\xd0\xb6\xd5\x14\x38\x18<0v\x9c\xa3\x10N\xb3" "x\xb8+\xcb^`]\x1e\x6Z\x11\xe1x\x92\xe0\xa3.\xb0\x7f\xa9t\xd3\xc6\xf7\xc\xb\x65s\x84" "\xae\x83\x9ft\xc6\"\x65n\xfb\xd3\x87\x8az\xff\x1a\x1\xa2\x93>G\xf3\x66\x95;\xd2\x87" "s\x87\x8cl\x99\x9f\x39\xab\xb2pH\xe5\x39p\xa5\xc8\x8a\x13|u\xe4\x9c\x91\xa5\x33\x16" "\xc5\xf9\x4\x44\x64\xe4\xc\x1e\xeb>\xba\x35v*I\n?\xfe\x8f\xc8\x86\xd2\x99\xe9\xec" "\xfc\xfeU=\xbf\x33I\x13\xb3\xe\x3\xe5\xbf\xbd=\xe0\x62\x7\xbfG\xcd\xaa\xeaL\xfc\x81" "G\xbb\xfa\x15Mb\x95\xbd\x46\xafh\xad)\x8b\\\x2\xfb\x5i\xb6\xcaR\x13\x61\x42|U\xd4" "V\xffm\x80\x83\x41\x7f;\xb3\xee\x88:\x95}\xd0\xe4S\xa8\x89\xd3\x89\xbd\xf5tQk\xe1" "GI\x9c\xb0-\x9dv\xb\x62\xdd\xe4\xee\xebp\xa7\xfd\xc1#8\xab\xd0\x1dp\x9c\xcd%o\xfa" "_b\xa7\xf4\xaam<\x7f#]\xae'eS\xda\x64\x99\x31G\xb5\xb8ob\xc4s\xd0\xd3\xed\x14\x88" ">\xd0\xdet\xf1\xc6#\xf3\xe6$\x9dj\xf1W\x1d\xc1w\xd2~,\x1f\xb\xff~\xd9\xdc\xce\x8f" "\xcb\xd3{\xea\x85\x1\xae\xa6\xc6\xd7\xb2YB\xb\xdf\xb8\x4\xe3\xbf\xa4\xe3\x39p\x8d" "\x19\xfc\xa7H\xd8\xed\x84\x5\x4\x39\xba\x7fZ\x8\x8d\xa4\x80/\xdc\x46\xb9Z\x99\x95" "\x9e\x95\xf1\x84\x7\xab\xe2\x39p\x1ao\xba}n \x94\x64\x1cP\x9d\xa6o\xe5Vtz!\xb0\xd7" ">>~\x15{\xa4\x1\x82\x95\xee\xe6\x83\xd0\xfb\xdb\xfdRC~\xf5\x81\xb0\xe\xf2\xddX&a" "\xa4\xa9\x9b\x2\xf6h\\\xb1\x83\xac\x80\x1f\x3\x8e\x32\x37\xeb\"\xf9P\x8cT\xb3N\x6" "\xa1\xaa\xfd\xb4\xfcj\xdd\xacQ\x10\xd2V\x9dI!\xef\x8b\x43\xc6\xce\x36>d)Q\xba\xdf" "\x0\xad\x1\xb5m&,\xb0ynk\xc3P\xf\xb7`\xac\xe1\xe7\xc9\xfe\x44\xd6\x81l\x84\x6;z\xff" "\xe\xa0M\x91\x8d\x4\x8d\xc1\x93\xfc\x7\xba\xd3\xbb\x8ez\x17\x8f\x87 \xb6\x8a\x80" "\x2~\x9f\xf2\xfeK\xf8\xf6\x1\xdeH\xb4\xc8\x63\xaej\xf\\\xc9\xfc\xa4\x61O\xb4\x87" "\xa0\xd7\xe4,\xc1~\xc4)\xe1\x9L\x6q\x8aL\x1\xc5\x32\xcd\x8P>\xed\x35\xbe\xf2\xa8" "<\x86\xe8Z\x8et\xcb\x93\x64\xa0\x1dz\xa5\x1a\xf9\xa7\xadY\xe9;x\xe3\xd1\x19\xe4\x0" "\xed\x46\xc6\x8\xc7\x1e\x33\xfa\xcd)\xe4$\x12\x36&\xb5\x35\xa7\xec\x87\xcf,\x12\xd1" "\x96\xe3x\x98g2\xc8\x94\x81\xd8\x8f\x14\xfc\xf9P}\xcdP\x83\x41\x10\xc0q\xb6\x88`" "\x9\xe\x12\x8c\xb5%\xea\xc3\xb5\x19\xc2\x19\x1d\xcc}9\xd5\x87\xe5o\xb3:\xc6\xbb#" "\x12\xeb!}\x8\xbd\xf9\xc9\xeb\x34\xce\x91\n\x7Gp1\xd4\xed\xc8\"nqB\x1fj\xe9\xb\xfc" "C\xc7\x39\x89(\xdc/\xdf\x62\xa5H2L\x99\xe7@\xb5\x81\\\xba\xc9\x15\x7f/[Q\xa4j\x1c" "\xf6\xec\xb6\xa0\x37S\xe7\xfdI\xcbJ\x4\xe5\xe8\xab\x19\xc4\xac/\xb5\x6\x18\xbd\x9f" "\x14\x17\xfa\xf3\x42%R:j\xf9\xf9\xb2>\xf9\x82\x83\x1c_\x19\x46\x46\x7\x95\xe0\xb5" "\x97\xb\x38;\xf8\xad\xde\xb0\x45\xc5N\x9cY?^\x1f\x9d\xaa\xef}\xc5\x8b\xda(\x19 \x9f" "\x5\xae\xacO\xf2\x34\xe3\xbfG\xec_Ilu2$\x17\xa9m\xe3\xb7\xcP\x96\x93-\xd0\x2\x63" "\x84\xc3\xd1R`Db\x92\xbaz\xc\xc5p\xa2\x9ak1\xb7\xa3u\x96\xdb\x1^\xc0\x84k\xfd\n\x66" "L\xda\x3)\xe8\xa4R$\x1c\xbctC\xb4\xcf\xcb\xecH\xb9J\x1f\xb2\xba\xd1\x7\x32h\xaf\xd3" "#\x1b\xb2\x1a\xc3v\x2\xdb\xf5\x65\x37\x80!^A\x8\xe2\xd4\xf7\x16K\x12\xe7H$9ss\xc4" "\x5\x18H\x88g5s\xb1\xf2&=\xbb\xcd\xc0|\xea\xdb-\"\x2\xa1\x8a\xd0\x36R\xf0\x35_\xab" "\xf0\xdf\x8\xc3\x2xIb\x90\x30o\x93\xbe~B\xf6\x63\xb5\x1eO\xf~I\xd3)#p\xc9+E\xbb\xb7" "f\x7H\xcd\xad\x64\x1b\x1c-$\xbd\xc3=\xdd\x92r\xc8\xbclL\x80\xfd\xb1\xd6Gj\xa6\xa1" "}\xe\x35\xb4>\xf7\xd3\xfb\xc7\x82\x8f\x2\x9\xd6\xf8;\x4\xaf\x1d\xf3P\xce\x10\xa3" "\xaf\x84\x85[\xb9\n/\xde\xc6\xfymZ \xee\xe1\xb3#\xed\xfd\xe3\xd6\x99P\xce\x90\x89" "A\x84$m\xce)I\x9c>\x87\xef\xfdV0\xaa\xbe\x14\x42\xe2\x39\x9f\x3\x93\xf2\x1b\xeb\x96" "p\x8bl\xf0\xb6\xb2\x7\xe4rs\xbb\xe3\x3\xa3P$\xcfI\x89\x93(\xc8q\x91\xbf\xbf\xff\xef" "\x95\x0\x61\x1b\xeb\xee\xdb'\x93;\x1fS\xd6\xbc\x80^\xd7\xc3'\x1f\xe9M\xcc\x7f\xfa" "\x9f/S\x81\xc\xd3\xd0\x89I\xd5\xab\xb\x14J\x8f\xacS;\xa3\xeer\xbc\xe2\xbe\\\xd8\x80" "4\xc6\x30<}2?\xef$2\xed\xc9G\xca\xd4\xafk\x1c\x38\xbe\x9b\xd1H\xca\xca\x12\x32?f" "\xebW\xc3\x9lr\xf8&\x8etl\xff\xd4\xef\x80\xdf^\xcb\xcfR-\x85\xaa\x41\x16o\xdd\xed" "\xfe\x8d\x84<\xb2[\x99u\x90\x8b]\xe7\xc4\xda\xb8\xff\xf7\xb9\x8b\x8c$\xec\x1e\x84" "w\x12p\xea\x87{*^\xdc\xe1U9hY\x91\x97\x19\"\xf5\x4\x4\xb1K\xbf\x10\xe6\x62\x64\xfd" "\x82\x7\xcf\x5\xc|\x3\x11\xd3\x87\xc6+x\xaa\xac+\x96\x9d\x31_Jyc\xa7\x9f\x8erO^\xfa" "\x1\x90%\xe7y\xej\\\x90+}\xa8WC\x8e\x84\xa9\xbf\xf6y@\x9d\xed\xf5\xa4\xa0\xf6p\xae" "E6\xf0P#\xa9\xe1\x12\xf1\x7f\xa4\xa2\xf\x18\x14\xf" "\xf5\x65\x8\x8b\xe1qK\xc1\x97\x1\xa1Qf\xde\x32\x42\x9a\xb5\x5\x90;\xa5.\x1e\xf0r" "\xa3\x4\xd1\x44\x87U\xce\x0\xdcp\x82\xdf}\x99\x6\x35WL\x9a[f\xda\xad\n\x45`Y\x3\xd7" "1y\xe0\xed\x9e&0\xf4\x38\x61\xe2#T\xea\x16\x41\x8c\xec\xdf\xdc\xa0R\x1\xe2\xf7Z\xb6" "\xf7\xb3\xea\xe3\x36\xc4\xeb\xf7\xe3\x85\x1c\xc0\x97\xe2\x10[\xea\xed!\x11\x44M\xe9" "\x83\xc6\xb8/\x11\xb3/\xdd\x61\xea\xb4S1\xf7\xeb\xc1\xf9<\xef\x31\xf2#\xfc\xe6\xa3" "I\xd8\x96\x96Q\xab\x62zH\x13\x14\xfb\xa2\xa3\xaa\x95\x3'%\x7f\x8fP\xe6\x9e\x1a \x94" "8\x16\xef\x41\"Z\xe1\xb7h\x11\xc5\xaf\x88\x97lKN\x2t\xb4:X\xf6:'\xea\x89X\xa3\xf5" "\xd8uD\x8c\xb5z\xbb\xebHYf\x8a\x11Q\x8\x97ha\x1T*\x8\x30\xac\x31\xf0v\xc5\xed\x66" "&\xec\xd9\xee\xd0J\xd3\xe7\x62\xe9\x31\x8c{\xab\x7\xad\x32\x4\x83\x1fW\xb4\xf1\r" "\xee\xed\x8\x95\xe2\x46h\xaa\xdc\xbe\xba\x92W\xf1\xec\x41\x91\x11\xe7%\x7f\xca\x9" "\x8d<\xa8\x9a\x1d\xed\x16\x9M\x10#\x1b\xbc\xdc\xaf\xac\x11\x66\xc0\x8ap\x7t\x97H" "\xe8\xc4\xf5\x0\xb9\xb8{\x84\xe8\x11pBWZ[\rPe#U\xdfl\xc6\x1c\xd2\xc7\x85\xb1\xc6" "\x81\x1d\xb2\xe9\xb9\xb7\xb4rf\xb4\xa1\x8K\xe1\xf3\xf7\xd1\x88\xfb\xd9IL\xecQ\x16" "\xfa\x62|\x80i\x95\x1\x13\xf7\x9\x9\x36\xf1\r\xe3\xd7\x1d\xe1\xb7\n\xfcV\xb6\x1e" "\xe2\x45\xefrx\x86\xb\x64\x11\x32\x33\xa8\xa7\x81z\xc\xa2>_\x8\x37\xc\xd4\x85H\xe4" "utx\xb0W\xa0\xaeY\xe9\xce\x81\xa4\xed\x7f\xf3\xac=!\x17\x35L\xb0\xa9\x86#p]\xea\xfa" "\xd8\x9c\xe0\xc5\xb5\x19gv\xcb]Cy \xbb\\r\xa8\xa7\x18\xae\x62\x9b%\xe2S\xc7U\x1U" "T b\x14\x80\xaf\xa2\xb9\x1bun\x96|\x7f$\xe3\x0Tb\xcd\x14\x96\xfbX\xf3JB\xa9\xd5\x9a" "\x10\xd6\xd6\x8b\xb3\xc4%\x66\x16\x10Y\xdf\xbb\xcb\xa5i\xa0\x89\xd9\xc1\xdb\xae\xbd" "\xe6Q\xb2']Y\xdf\x9\x33\xdc!\xd0\xa9\x2\xf2\x1c_P7)\x9cn\x8f\xb9T\x16\x91\xed\x13" "\xc0\xe3jZ\xf5\x8d{\x8b\xb3`\xe8\xbd\xd2\xa7{$\x13\x8b\x88\xa5\xaa)8\x6o\xf6\xb0" "\x98\x32l+C\x85\x38\x0\xea\xa4\xa3\x4\x10\"\x81\x32^\xcd\xfb\xb2\xbb\x14\x0\xf0\x9e" "\xde\xe9z\xe8\x12r\x8c\xc1S\xf7\xea\xbcJ|\xf7\x61\x9at\xb4\x95\xfc\x82\xb5\xa8\x9a" "\x9e\x2\x46\xf9\x83\"\xc2&k\xf8\x38\xbd\x1d\xef\xb5\x16\xc7\xa3q\xd9\x1b\xf5s\xde" "\x96\xf0P\x1\xecH\xfd\xcb\x9e\x90\x45\xab\x1f\xc9\x10\xf6\xb9\x34J\xdbI\xc3\x8e\xb7" "P#\x1n#\x98\x84\x66\x2\xe2\xfez\x7\xa9\xc\xa8\x63v\xfc\x12]\x8b\xed\x19V\xb8\x97" "x\x1d\xefn\xb4)\x82\x4\xe4\xb5Q\xee\xc3\xce\x13\xb1\xfe\xe5q\x1f\x10\xc0\xc8#,\xcd" "S?\x82\x31p'\xa8|0\xb9\x1b\xc1M\x91\xe1J\xd3\xac\x92\x17x0C\\'\xfa\x8b\x8f\x8d\xbc" "u\xc0L\xab\x1\x81\x45^\xab=\x1e\x10\x1b\x14\x97JoO\xb9\x9c\x87\xed\x43_8\xf \x87" "C\x8bK7\x1d\x1e\x61\x13\xbd\x65\x19\xaf\xbf\xd9$O\x3\x84\xda\xe1\x85\x2Z\xea\x64" "W@\x1fTT^4\x94\x12\x1\x5\x9c\xe7V\xcf\x7f\xabO\xa5\x83\xf9\x86\xa8\xb4\xd5Y\xe8\x34" "\xef\x33\x1ah3\x97\x1c\x89\xf9lX\xcd_\xb3\xbe\x13\\\xb0oe\x8f\xe2\x62u\x9\xc8\xcd" "\xfa\x91\xed\xeb\x43\x9e\xb3\x86\xe3\xbf\x9b\xc4\xdcNr\x90\xa2\xff\xea\xe\xc2\\\xb" "\x9c\x2\x12\x85\xab\xcc\x82\x1b\xef\xa4\x42\xc8|\xed\xb0\xa6\xc2\x34,\x93=\xd4\x61" "\x16\xcaxm\xfa>\xe4:\x7f:\xea\xcaI\xe4\xf3\xa1\xd4\x4\xe5\x9e\xb3V\x11\xcf\xc6\x8e" "\xbf\xb5\x32\x1e\xe4\xd8q\xb2\x6\xac\x86\x92\x93\xc\x89-\xd7\xcd\xc7\xb3\x1b\xae" "\xa9\xa4\x39\xff\xfb\xc5\xf9\xd3\xcb\xa3\xe7\x1fV8\xdcm\xcb\x8c\x64\xf7\x63\xe2T" "\xc3'\xf7sR){\xd7\x6\xf3\xa9\xb4\xec\xf0\x45\xb1\xf1\x32\xefx\xc2\x96~91\x0\xbeW" "\xae\xa4\xb6\xa5\xa8\xcdQ\xb6\x8b\xc1\x14\xad\x91\xe1\xe4\x35\x12\xb8\x7\x98\x34" "FNJ\x92\x31\xce\x83\x98%\xce\xcd@\xfq\xde\xa1\xb4\xda \x10\xd8\x9f?\xa8Po&\x88\x8f" "%VOo\xbXdv\x8a\xbe=>\x85{\xc2\x65\xfbk\x99\xe9Td\x95\xe4\xbe?{;\xd6\x16\xed\xa6\xfc" "\xa1\x9f\x5\xb8M\xf9j+qt\xcd\x31P)\x8.\xc0=t\xe9\xb1o\xdeU\xe6\xc5\x1c\x86\xb0\xe6" "\xc0\xa1\x87Ru\xfb\xc8\xf2N\x8\xef\xf2k\xa2?\n\x96?z@\xc3Y\xdf\x33\xa2s\x1f\x13\xfe" ",\x90_o`\xac\xb4=M\x3\xcc\x63r\\\x85\xa4\x6\x10\x80\x89\xc3=\x82\xe1\xaa\x10|\xcf" "\x7f\x5\x17\xbe\xbaVCv\xc2\x1c\xc2X\x9d\xday\x94\xcd\x35s\x97\"P\x9c\x63\xcO\x88" "\x95\xbf\x36\x87\xbb\x8a\xba\xe7;^\x1c\x42\x91Y\x94\xc6\x14\xe9\x87kz\x1d\xc5q\xc0" "n\xf0\x0\xd7\xecY\xde\xb5(\x19\xae$Qj\xaf\x5K\xb9\x15\x45\x31\x1\x16\xf9\xc4j\xf6" "SC\x85?\x89\x66h\xdc\xeeGX\x99\xd0\x8fK\xc4\x5\xef\xbd\xc9\xd4U\xd2\xb4\x8c\xd2=" "\x1d\xd4\xe4\xb\x89H\xfb\xf8\x34\x13+\x83\xbf{\x95\xe/\x83\xa0\x91\\\xc2w\xd4\x95" "\x1b\x1d\x9b\xf8\xc9\xd7\xc2\x90\xe\xd2\"\xca\x89\xe7\xaa\xb7\xe6M(\xb0\xd9\n\xdf" "\x9cG\n\xc9\n\xfa\x39Zc\x96\x46\x4\x65\x39\x36\xa6\x18\xdb\xbe\xe3<\xaa\x44t\xed" "R*\xce\xe5\x61\x4}\xc1\x63\xc7\x84\xd5\xb8\xa2n\x4%k\x16\xf9lc\xee\xba;c\xdd\x8c" "\xb0V\x83M\xf7\xf8\x46\xfa\x32\xe3/\xf\xfc\x14\xf0t\xf0\x38\x91\x81m\xe8`\xf2\x1" "\x2\x80`\xc3\x4;9\x1f\xe9\x85\x8c\xf2\x96\"\xd5T\x18\xd6\x7f^nlq\x8f\x1f\xc2\xe6" "-\xaf\x1d\xd4\xcfy\xeb\x95\xa1m\x9c?\xec\xcd\xed\xf2\x61\xf9\xf4\x19\x5\xf8\xb8\xc3" "\x9b\x9b\xff\xb2\xc0\xe8\xd6^\xe4\xf9\xcb\xaeR\xb5_\xb3\xbb\xe1\x7\xc0\x8c:\xbd\x66" "\x8e\x91`\x1c\x84\x9a\xf2\xe0\x34\xb9\x9d\xe6\x89\x12$\xa5\x61\xb7\x44\x9a\xec=\xb" "\xe4u\x99\x1fR!\x1b\x9d\x16h1\x1a\xaaz\xc9\x18^x\xf9\xf\xd3\x1a\x32Kl\x82\xf\x7f" "\x8e\x18\x9e\x95,\xd1^W\xd4uC\xe\x1b\xea\xf7S|\xf6\x64\x9e\x80\xe3]\xf1o\xc0:q\xea" "\x16*\x19\xb7\xd2\x96\x17\xbdZ\xf3\x41\xe7\xec\x81\xdd\xc3\x38`o\xe0PvI\xbfv\x1e" "\xcaor\xdc\xd2\xb2\x17\x97\x32\xba\xebQ\xd6Wy\x1\x9eg\x8c\xc8\x46\xf1\x84\xba\xae" "\x95U\xf\xc4\x30\xd6\xc4\xe3\x15\xc1\xa6\x61\x93.Z\x8cM=\x81\xac\xb4\x45\xe2\xb0" "\xb8\x7w\x1e*\xad\x84\x65\x84\x7f\xbf\xde\xfdr\x9\xd1\r\xbf\xa7\xfa\xf2\xc3\x4\x1a" "g\x8cp\xa1\xc8\x7\xa6\xf8.\xb4Hh\x8c\x8e\x9al\x96\x8f\x7f\x9fL\xbf\xa8\x85\x5\x99" "ur\xcej\xa2(\xca\xc0\xa8\xfI\x96IW\x1~\x90\x90\xbe\xe3lVl\x6\xe7\x9b\xeb\xed\xc2" "\xde\x9ay\x2u\xe\x1d%\xf2\xb4\xa5\x1e\x10\"\x1bN\xf8-\x8f\x1f\xbf\xad\xdc\xe9\xf9" "h/8C\xa5\x81\xeb\x10\xb5\\\xeaJ\x8e\xa1\xe2\xf7\xc8Kc\x94\xe0N\xa4\xb6\xbc\x9d\x9a" "\xd3\x44\xc4\x14wrJ\x19os\xd9+\x9c\x43X\xf7:?\x88/DR\x4\\\"UQ'\xbf\x9c\xaa\xf5'w" "\xc2\x0\xd6y\x86\"|\xb1\x7f\x94\xa1\x18\xba\x66\x34(\xab?\xdd\xa9\\\x35\x9a\x35;" "J\xae\x31\xf9K\x4\xd8J\x9c\xci\x94\x7\xca\xaf\xb2r\xaeX\xef\x32\x8e\x90\x65\xb5|" "3\xbc\x9b\xd7[5\xe4\xf7\xd2\xa6\x9a\xff\xb2\x13z\x9GW=R\x97+\x1J(\xf1G\x0\xf0\xfc" "*\xf0\xaf\xb7\x1f\xa3\xc0\x38\xa4\xfb_\xc2\xee/\xc6Q%\x96\xb4-;r\xa6\x12\xb8\x62" "c\x86+\xd3\xb2\xdd\x43\x33u\x86\x11\x7tt\xfa\xc0\xa7\"\xe1\xd9\x19\x9d\x66Q\n\x1a" "\x86\xf8\x7\xaa\r\xe7\x1c\x13\x92\r[\xd7\x32\x88t\xbf\x1a\xe+\x80\xc6\xd0v8\xf2\x61" "\xac$\xdc\xf7HS\x1\xc5\xd5\xcf\n\x8b\x62\xd6\x46\x88\x17\xd5{\x9e\xb8\x35\xa3\xf9" "\x96n\xbfs\"<\xb5\x90\x9a\x1a\xe2\xa8[\xc9\xf\x1.\xe2kHJ@\xc8\xa9\x98\xad\xa3!\xa0" "\xfa\x95\x5\xd9\xa0\x9c\x8f\x61\xd7\x8\xe8\xc{_GY\x9d\x12\xe0 \xfey\xd6;\xcb\xb6" "\"~AX\xac\xfd\x41\x87\x9\x41\xfdwOe%\xb7\x8ag\x81\xfbPQ\x9a\xd9$\xe\xc7\xf3\x1c\x1b" "\x85\xaa\xd4\x87\x45\xea.X\xef\x88\xb8\x90\xbf\x9c\\\xc5\x91\x1H\xae\xd5)\xf2iO\x1c" "\xec\x8b\xe,0\x95*M\xd9\"\x1dS\xba\x84l\xbb\xaa-g\xd6N\xc2]\xb9\x7f\xef\x89s\xd5" "\x12\x7\x93\xf\xe5XL\xde(\xa2sF\x8e\xd7q<\xf2\xe8\x86]\xec(^ \xf4\x9a\xd3\xe6\xca" "NC\x90\x8a\x91\x16\xdf\x1b\xae\x41\xbf\xdbrK;\xf2\xcb\xfd%^\xe\xb6\x95`\xb3)\xb7" "\xee\xa1K\xbc\xdf\xd0\x39\x8c\x66:\xb9\xc1<\xfcx\x98\xc6t\xbf\xa2\x7\x1\x8c\xd1\xc8" "R\x81\xc4\xbc\x99[\x16\xee\xc7w\xf5\x1b\r\x19)\x10\x5SS,L>\x8eq\xac\xc6\xda\xf2\x19" "4qpM?\xb9-\xe4\x94\xe8\x9f\x81\xbb\xf7\xbbp\r\xf\xe4m\x9a!\xf9\xcck\xf2Q\xae\x31" "\xf4\x3\x34\xc6k\xd4\xf\x80\x1d\x2\xed\x63\xb5,>\xc6\xa1\x30=e\x9e\xde\x33\xc\xd5" "=\xe8P(\x99\xeb\xc6\xdd\xa6U\xde=X1\x4\xe0\x1e\x12\x30\x1\xbc\xa6\xfb;\xa5\xff\xd4" "\xf1\xe5\x6\xcf~\xd5\x9f\xe3\xf9\x91\x80\x8b\"r\xb1\x19r\x10\xe5\xea!;;\xf7\xd6\xa2" "\x17|\xca;\x4\x83\x44{\xdb\x44\xad,\x80\xe0L\xf5\xe3hR_\x8dk\x9b\xa6\xb1\x14\xa4" "\x14\\,\x8ai1\x13!\xc8\xd5\xceh/.\x13\xeeG \xe0V\x8e\xfd\x84\x88\xfa\xf5w`\xa9\x37" "\"\xdf\xda\x84\x89\xefIc\xf2\xe6Yx\xad\xfa\xb8\xb9\xc9\xc8\xd9\x14\x61\x80\xb9+<" "\x84\xc7%\xe1\xf5\xe\xa1\x35\x0Kdy|\xa6\xc6\xa8|\x95\x95.\x8f]h\x95\x8b\x64\x42v" "\xd1\x6\xe3pj\xf1S\xca'\xf\x15\x9fo\x8a\xd7o\xb\x9fK\xe4\x93WO\xf5I\xadj\xb9\x9\xd4" ".W\x18\x42@\x1\xd8\xaa\x17V}\xfe\xc6j>\xc\xda\xf9\x8c\x89\xe5jF\x92\xf0\xd5\x85\xb1" ">\x8c\x8e\x1d\xd4\xa5\x80\x1b\x1e\xee\x8b:3;c\xd4Ne\xa2\xc5\n\x1b\x46\x61Z\xfcU\x3" "\x90\xc1\x66\x8e\xa0j\xb0\xf6\xf9\xa1u\xe4\x8\xb1V\x8b\xb4p\xf7:\x9b\xab\xc7\xf8" "'\x95\xad\x94\x6\x15p\x1e\xf5\xe2\x4h\x87\x41Gp\xff\xbe\x9c\x86\xbe\xcb\xef\x31\xda" "o)O\xae\xd8\xe4\xf9\xca\x8Ja\x91]/q\x94\xadW\x8f\xd5\xb9\xe0\x1fL#\x2w\x8\xad\xd4" "2o\xd7\xbH\xd0\xcb\xf9\xb4-\xf2\x86\x7\x84\x85\x9d\xd9\xcb\xc7\x7\x2\xc\x39\x17\xd1" "\x92\xc\xe1\x64\xa6q\xd5\xe0\x9d&\x85\x45\xdf\xb9\xd2UZ\x1c{\x82\n\xc8\x2\x0|T\xb4" "\x3\xe1\xa6\xf9U>l\xd5,d\x81nx\x8e\x61\x15\xeb\xe9R\rW\xaa]\x2x\xc1\xe6\x94\xf\xb8" "\x9Y\x94\x1a\xf7\x8b\xdd\x96\x87ry\xca\xb4\\\x9e\xf7\xe4}\x90\xd2K[>\x8i\xb7i\xd3" "\xa0\xfb\x3\xdc\xday\xee:R4\x9f?\xe8\x92\x4\xaf\xe5\x17\xb9tU\xea\x1b\x5o\x87\xcd" "\x84\x62\x2Y<\xb7v\x8d\xd8\x93!\xaf=\xbd\xc0\xc1\x88\xda%\xb9i\x9c\xden\xb\x19(\xcb" "@`\xf0\x9bOjl+hp\xb\xc1N\xb9\xfe(\x90\xfe\xcb^8\x9ev\x6\x18mD\x17\xf5\xf5\xa6\xba" "\xbd\xf4<\x13R\xf4\xfe\xb4:\x99i\x8e\xcas\xc7\xd7\xeb\x93\xff]8\xeb\xfem\x10,\xfd" "\r\x98j\xf3\x91\x84\xb4\xe0\x7\xbf\x65\x13\x1bj-\xab\xd1Y0 \xe2\xfd\xbaU\x9e\x93" "\x9d\xaf\x7fl\xba\xce!vH\x9d\x45\xab\x86\xf\xa4\xa0Y0\xcdw\x18\x9cg\xd4\xb7-\xf0" "?\xe8\xcfH$\x19\x97&!\xde_/\x1\x43\xea\x14\xf5\xdc\x8\x46;0+\xe1\xf4\xbds\xcd\x1f" "l[\x17\xc7Mw@\xc8\x2\xcf\x19z\xb3\xf4\x12\xb6\x97\xc2\xbc\x8f\x41t>\xb2\xbeU\xe2" "8\xdc\xdcj\x2S\xa7.cG\x9d\xbfV>j\x16\x19\x35\xf7\x7f\xe[\xc5\x37-\xd1\xf9*\xe1v>" "\x5\xe0\x19\xb4yg\x80\x9d\x42p\x93$\xea\xde\x6\xce\xcd\x85\xda\xab\xc4V\xd9\xe9\x3" "\xe0\x8=:t\xd5\xcd-\xf3\xb\xf1\xdb\x14w\xa6\xa7\x1aU\xa5#Y\xf4\x94\xf,3\x9b\xdbn" "\xdb\xaa\xde>aML|6\xfa+&\xac\xcb\xf5 W\x9d\xf8\x9ar9\xec\x62xi\xae\xc6(\xe7\xf4\xac" "\x9\xea\x13/~-\x3\x4\x8\xdc\x91\xf2Yl\x95J\x9c\x2o\xad\xcc\x41o\x1e\x6\x1bHCr!\xb5" "\r\x8aKs\\\x91\xd6\xe8\xd2\x93~DT\xb0\xe8\xd1\xf5S\xb8J5\xc4>\x11\x1\xf4\x97\xf5" "\xe4)\xd6\xe0\x85/\x1\x12\x13\xe7\x6\x8dS\xe4\xdcioo\x7f\xf9\x63}:\xc5\xed(\xb0\xf8" "\xb5[\xaa\xba\xbf\xe8\xe9\xaa\x7f\xa6\x1rE\xb\xd1{a[\x1b\x89\x4\x8f\xcf\xee\x82\x95" "R\x7z\xbc\x1d\x30\x61\\\x9bW%p\x1c\xb3\x9e\x66u@L\x82\x30\xba'9Z\xc8\xb5\x44O1\x86" "\x0\xdd\xe1\x3\xd3\x3\x9c\xde\xf4\x65\xeh\xa9\xf1(\xc\xa8J\xa8\xcf\x87\xc6R\xae\xb4" "\\\xce\xaf\xd1\xa2\x17\x93\x38Z\x17MJZX0p\x5\x93\xcd\xd9Ma7O\xf4\xebV>\xea\xee\x80" "\xb7\x61#\xe\xd6\x1d\x6\xbe\x11\xfaWM\xe0\xael4RX:\xa5\x37h#\x8a%\xf5p\xef\xf0\xaf" "_^\xbf\xde\xea\x98\xc8Z\xfd\xa5\x33\x19\x18&\x11\xe3\xe6(VY\xec\x99\xd2zq\x8a\xc5" "\xa1\xcd|\xd8\xf,\x97\xbf\xe9\xbb\xed\xf6\x91*A\xa1q\xecX:\xe\xaaJ\xc5q\xb4\x95\xac" "x\xb2u\xbe\xd4\x9e\xb3*\x2\x2\xa0\x7f\x1e\xbc\xb0\xa8\x9f\xd2\xd1\xcbn\xc4\x36\x31" "\xe8\xe2hi\xaaj\xbdw_1\xe1\xca\xe5\x15\x8f\x90J\xc\x14\xa4\xefr\xd5\x1e P?\xf7\x81" "Lqz\xf\x9b(\xae\x19\x89zD\x8d\x89\x5r]\xa4\xe4\xf\x17\xf6\xd7\x97\x85\x38\x9Z\xdd" "^\x82\xe\x80\xde\x9f&\x1a\xce\x43\xd7}K\xf9u\x10\xf7t\x86\xe\x45\x3|y<(\x91[\x1\xcf" "\xbf|c\x88\xb2\xe9\"[\xe'!\xcf_\xbbR\xba-\xa6\xbf\xbc\x11\xd5\x15>\xd1\x42?\xab\xc0" "V$\xb5J\x1a`#^\xe2n\x90\x8f\x63\xc5(&1_\x1a\xd8O\xc7\x9d\xe2>\xd7\x93\xccuexGY\x0" "\xe7\xa9\xba\x8a\x81.\x6\xd2\xb9r\x15VH?\xce\x1\xec\xdb\x7f\x83\x19\xbJo.\xb8r\x8f" "[\xf9\x41\xa5\x93L\x96\x5H\xe4\xa8\xc0\xd1\x7fg\x8\x38\x66\x7\xa0P*\x1c\xeb\xc\xf8" "\xee+\xa7\r\xe\xb\x35\x0\x19\xba\xf4\x15\xa6n\xe5\xe\xa8\xa8\xce\xefx\xad$$!\xd7" "9|\x6\xca\xf7\x62\xf6\xb4\xbbT\xbb;\x84\x84\xf3\x98\x0\xf\x5q\xf3\xc9\x11\x1e\x96" "\x16J\xf8\x42\nz\xaa\xd2\xb6\xb5\x5n\xc3]\xb\xd0+F\xa7\xe0\x7\xe2N\x1c\xdd\x16\x31" "\xd3\x43\x85m\xa9\xa4\xb6n\xf3\x65\x61\x84K\x16\xe6\xbe\xb6\xf0\x8b\r\xc8\xde\x4" "\xb0\x43\x64\x33]fW\xff\x91\x64\x95\xc3\xf9\xaa]\x87\xa2\xe4UB\x8a-H\x9fp\xc2\xaa" "\xe0;d9\nn\x8\x30\x94\xe9%\xf7_\x7f.\xa2\x9a\x44\xc7n\xbbP\xd6-\x91\xfdx\xc3\x3\\" "\xf4\xbb\xe1==r\x5\xda\xa2\x8e\xbb\xb2XEn(8\xc6\x41\xabQ\xe1\x65%\x94\xc9/Y/\xf8" "\xd3\x1d\x90\xc6\xf1y\xe0gt~\x9dI\x9a^\xf\xcc\xf5\xc1gS\xbf\xb7\n\x32\x1\xfd\xee" "d\x1c\x9f\x45\xcc\xff\xad\x87\x9eGyc\xc8\xd8\x91\x62\x19Tt\xef\x98O\x1e\xd3\xd6\x93" "i\x90Z=U\xcag\x3\x88\x92\x13\xfd\x8c\xfd{\x2\x9a;\xe8\xad\xaa\xbf\x62\x1\x11g_oe" "\xdf_[\x5\xc6\x35\xeb\xff\xd9\xd6\xc5s\xb0\xd6!tH\xc8\x81\xa4\xd2Rb\xce\xfd\xf4\x90" "\x83\xe7uX\x9a@n\xd0?\x8b\x0\x38\xdc|G\xe1\xb4\x84\xdd\xff\x3Y\x94\xf4\xa6 \x9#\xc8" "^\xdc\x82\x36\xd2\xe\x46\xb0\xd3\xe6\x17\xa8\xb0&\xcfpp\xce\xd1K3@\xe6\xdc\x34\xfe" "\xf0 \xa9\xbep.\x17\xf4\xbc\xbcs\x87p\xe7oG\xff\xd8IaN$ }\xfa^o\x8d*\xaa\xb2\x4Q" "\xd4\x41%\x46\xe4\xe\x8c\xbfV\xda\x8d\x12\x1f\x36N\x3\xee\x31\xc\xe1\xcb\x7fo\xa5" "\x1ck\xce\xde\x9f\xc1\x98\xb6m9\xd5{#\xec\xcd\x34\x41\x46\x5\x93\xf4N\xc2,\xb4\x33" "[\xf1\x9e\x9\xdd\xd8\x91\x84\xdc\xf\x9\xf6\x82\xdc\xa1\x87\x63\xear\xdbl\x8e\x32" "\xfa\xaa\x8f\x0-I\xf9\x2='\xb5\x8\x39Z\xb7Q\xbe[\x2\xb5\xdb\x30\x9d\xc9\xa5\x1b@" "\xe7uR\xbe\xe4\x8e\x37\x9f\xe4x\xbf\x33~\x3\x9d\xef\xcd\x99*\xfc/q*[\xf\x64n\xf0" "\x90+Y=\x8e\x9f\x3\xbd\x9e\xb5\x12\xee\x34N\x11_\x84g\x1f!\xe5\xb5\xd0;\n\xc0T\x84" "\x81\xa9\xa0r\x92\xf7\x9b\xf7LAw.\x16\x61\x1d\x15\xcf\x15\xec\x7\x98\x14\xec\xa3" "\x1d\xf3\x80\xee?V\xe9\xbd\xb3\x9e\x0(\xb1W\x93g\n\xa6\xd1\xeb\xee\x19`0q\xee<\xa5" "\x17\xfd\xa6\xf8\xc5v<\x9c\x97\xd1\x1e\xf6,\xd1\x95\x42\x41+U\xd5PX\x2t\x94\x14?" "!}\xf4/\xf2\xde\x1cR\x9eS=\r\xdd\x46\xeb\xfa\x88m\xdc\xb9\x7-)\x9c\x13&m|\x7\xa2" "\xce\x9f[v\xad\xdb\x44\xee\x65\x13$M}MU\xbe\x1a\xad\x98\x82\x14\x31(\xe\x33H\x89" "q\x8b`\xb3\xe5\x89)\xa1\xb7\x19}K\xe0\x37S\xe2*[\xea!f\x9aN\xe7\x8a\xb0p\xa4\x1f" ".\xb0\x1a\x30\xf2\x0\x61\x9f\xcd\xb7\\\xff\x89\x81R\xf0\xc4K/\xa2U\x8\xcb\x34\x66" "a\xf4\xfexF\x92\x8dR\x1J\xe2\x89\x81\xd8\x3\xea\xe\xb8R^j#\x18\xcd.\xd9os\x86\xa2" "*\xc3`%\x2|]\x9dP\x18kZ(0\xde\x6+\x7\xefV\xba\x35\x88:\xe1\xa0\xc7k\xe5J\x9\x86\xeb" "\xa0\x8f\xc4\x64\xb]\x18\xbd$\x7f,\xad}\x9f\x95\xbi\x8d\x11\xeb\x11\xaa\xe9\xf8G" "\xf9%>\x91\xadL\xb5j\x1b\x8d\xc5\r\x19\xb8\x13\x62\xd1\xe1\xb0\x46\x61\xe5\x8f\xc8" "k\x1\x65\x3\xbc\xff\xb6;=\xee\xf0<]\xfd\xfd\xb7\xcf,s-w\xa0\xd5_\xf7}/jz\xe2\xa8" "\x96\xbc\x11\x84\xc9\xde\xb\xe3\x19$\xe0\x87\xe0\x82\x86(B~\xe\x61\xf5\x64\x14u\xc0" "f\xcc\x66\xdb\x89\xc\x41}\xf5\x87\x9f\x11[\xf5\xd5+\x9b\xca\x3\xbbH" "-\xa2\x39\x37/J\xf2\xdc\x92\xac\xf7'*5\xcf\x62,\xf6%\x12\x18\xdf\x39\xd9\xb3\xd0" "DM6\xc8\xb7\xef}\xb3\xf7\xebW\xdf\x36\\\xed\x86\xf4\xa9-Hx,!\x94\x0\xb1:\n\x96\xab" "2\xe0\x9e\x12K\x8a\xa0\x85\xbcP\x8c\x44\xe2\x99\xb7\xd5h\x9d\xbd|\xe0\x98\x1c!'\xd6" "\x85;\xc0\x99\xe4\x37\xca\x5\x92\xafh\x1c\xe6\xffq\xa2\xdd$\x80y\x97(\x8a\xfa\x1a" "@v\x2\x34-\x18\xf0i_D\"A\xc8\x97P\x4\x32\xfdsR\x9e\xeaU\x94\x8c\xa7~\x86\xc3\xf6" "\xd4\xe8u\xae\xd4\xdc\xc5\x37}\x5Z\x8\xce\xc7\x0W\xe4\x13\x32@\xc6;\xa2\x8c\x1c\xa9" "\x6#\xbe\xb5\x12\xe8\x9fO?\xcaV#\x9a\xd0\xc5z\x7f\xa9\xccmN\xbc~\xff\xb4'Io\xc3m" "\x5\xc3\x95\xcd\xea\xfbZ!\xdd\x43\xc\x98\xfd\x80\x94>\xc4\x1e{A\xa6\x41\xa2\x8f\xc2" "W\x92\x46\x92\xa5\x92\xc1\xae\xa4\x97\x12\xdf\xa7\xba\xa4o\x8cUbj\x1f\x30\xfd\x1" "\x10]/\x9f\x46\xb\xdf\xfa\x83\x42\xcc\xad'{\xa5\xd1\x1d\x81[E\xad\xad[\xe5\xf7;\xd7" ">\xb5\xe2\xe5\xfc\xcc \x88;\xb5\xa1\xb5\xd5\xd5i\xc9\x93[\xb\xe7\x1e\x7f\xb8/\xb2" "\xd1\xb4\xc2\xa8\xdc\xe2\x42\x36\xf6]+\x8f\xbf\xf5\x6o\xa3\x0\xf6g\xa4\xd2\xb6\xf1" "P\xa9\xb1\xc2\xc6\xe5\rkod/\xaf\xf\xdb\x85\xcm~\xfd\x95_\x85\x82\x38O\x1a\x93z\x9a" "2\xdd\x35tt\x3\xba\x93\xde|\xf7\xed\xe4\x37\xed\xb8>\x84\xe9\xdb\xaf\xfc\xe\x45\xf9" "\x1Q\x1d\xfc>e\x14\x34\xbdX\xf0\xfcR\xc2\x8fl\xac\x35.\xb7\xac\xe4\xed\x61\xf4\x9d" "\xf8\xce\xbf\xbe\xc\x9\x64\xe4\x84\xd2\xca\x8c\xa5\xf1\xfb\xc8\x39\xb9\x7\xf8\xc2" "\xb5\xa4 \xcc\xa0\x65\x82\x86\x88'\xe9\x11S\x1\xfa\xa2\xbb\x43N[\xc9\xcc\x19x!\x7f" "\xf5\xa9\x9a\x30\x38\xac\xf1:\x9d\x8f\xf8~\xa5\x45\xe4\x9d\xa1\xe9\xdd\xd0\xe9S\xf3" "\x9c\xe7\xfe\xa2\xb0g+D3\x1d\x85\xa0:0\x15\x39\x9eO-\x3\xebr\xda\x46\x93\xf7\x33" "\xa3K\xfa\x87)x\x6\xe\x65\xdcNB\x89O4\x14s\xee\xed`C\x1c\xe8\xfe\x1f,\xfc>WF\xc1" "\xea\xd9n\"\x8c\xcd\x12\x3\xb\xbagK\xd3\xef\xc3\xdb{\xc7oV\xb7X\xa3\x91\xd4K\xd6" "\xe9:Ke\xc1\xb1\x9\xda\x98\x81\x1b\x8\xffJ\x1c\x98\x19\xb$\xfe\xb0\xfd\xa2\x10\x7f" "\xf8\x37\xbb;)\xc3\x1a\xfb-\xde\xbc\x35\x93\xedm\xf\xf0\xe8\x8b\x85\x32\"\x30\xac" "\xa6\xf9\xcb\x82\xd6\x41\xa6~`,:\xb@\xa6\x95\xac\x1breS\x8aS\xb0M\xd2+T9Tn\x8cN\xf9" "`p\xb6\x44i\x86\xb\x82\xbaO\xb7;BOh\x12\xcbX\xe\x17qPj\x89\x1cg\x8d\xf4\x85\x17\x84" "\xeb\x30\xca\xa4\xd3\xdf\xe1@\xe5\x18\x62/\x87\x37\xb8oM\x9c\xff\xd8pq2\xe2\xb1[" "\xe6\xb9\x87\xdd\x30\xa3\xbe\x84\x33\xe7\xdf\xfd\xe4\xd6*\xfc\x8em\xdf\xcf\xd6\x8d" "\x7\xb2\xfd\xe9NBS\xb7U\x1\xd2\xc8\xe9\xf5VB\xe\x14\xc8\x89\x93\x32*$\xc3\x1fn7\xd4" "[\xa1\xa2\xe0\x34\xb3\xf7I\xd3p^C\xce\xf5\x45\xd4z\xf8iHD\x8d\xd0\xb8\x86\xcc:\x98" "\xa1\xc1\xb8\x39\x9b\xee\xa8k\xa1\xf3\xa6\x9f\xd5\xa4\xef,\xed\xb6p\xf5\xb9$\x9e" "\x17h\x97\xe4\x6\x14\x9a\xe0\xc6\x6=\xa4\x9a\xca\xfb\x1d\xbf\xf7\x11\xb9w\xdc\x7f" "]Jg6n\x93\xc7\xb7\xd2\xcf\xe4\x61\xe8\xfa\xa4\xd1i\x10\x9c\x8>l\xdd\x15\x64\xe5\x94" "\r;\xcf\x64!\xabhO\x83" "\x8a\xb2\x16[\xcfn\xc6\xd3\xa9=\xe2\xbd\x6)\x1bl\x4\xf8\x65\x87\x85\xa2\xf7\x1aL" "\xcf(j\xbb\x90'f\xa4^\x97%\xf0\xdeVMq\xcf\x9dQJ\r\x88\xa2\xfa\xcb\x11\x9c\x7f`w\xd9" "W\x16\xe5\xac\x93T9\xb4\x7f\xa0 \x8e\x9e_\xd9\x66\x61y\xf4Z!\xef\xc4\x17\xb8.\x11" "\rl,\xb5\xd7$\xc3\xfc\x10\x32\xdd[$dL\xa4\x91\x8dL\xb4\xdf\xb=\x8e\xcd\xdc\xb2\xe1" ";\xaa\x96}v\xd4\xab\xcc$9 ^\x4\xc9;\x11$\xc\xae\x2\\\x45m\xe5\xda%\x34\xa5$\xaf\xd8" "~N`\xd6.\xb1\xab}\x1dT\xe2>b\x9d\xd8\x87T\xc0V\xe7\x8f\x5~\xf6lI}\x99:\xf6\x1f\x9b" "fTJ<\xa6\x99\xdf\xb2\xed\xeer\"\x19\x19\x9dIb\xcbr\xd3No{_\xc4\xbc\x45\xef\xd1$\xb" "\xf4\xa8z+\x88\x35\\\xaa?\xbc\xfb\xdf\x61Y\xbc\x1cr\xdb\x44\x89\xbc\xa2yP~\x8d\xbe" "g\xb1h\xdb\x9ek>\xe1\xe0$\xe4.\x2\xcb\x7j\xb7\x1e\xe6\x9\xf8\x8a\x10\x9b\xf0\xf\xf7" "_\xc9\x1aS\xd4\x91Q\xf1\xf8O\xd1_\x99\x3\xf1\xd3\xa3\xc6\x66\x18\xc4\xc0\x7!\x87" "_\x84\xa9\xb2UFfs\xdf{\xfe\xfd\x19:\xb0\r#\x94\x97\xd5\xae\xfaoxpY4\xf1\xaa\xad\x9b" "jQQ;\xaesI\xccOR\x15LC\xe0\x36\x16\xbc\xdc\xda\xaa\x9d\xbd\x16\x8d\xce\xd6v\xbch" "\xf\xfcj\xc\xcd\x9c/n\xfe\x80|\xf6\xab]\x82\xd2\xbau\xdc\xa1\xc2\xd7\xe0\x8d%\xbf" "\xfd\x64\x8c\xd3[\x1e\x3\x82t\xaa\xd7\xcf\xc2q\xff\xef\xeb\xa5\rv\xd6\xd2)'\xb4\xd7" "\x93\x1f\xbb\xc3\xcfJ\xec\x10\x1e\x7\x43L\xd8\xba\xa2\x8dz4O+K'U\xa6\xf7\x46\xa6" "ch\xcc\xdax\xa0\xc4\n\xf1\xc1\xae\xf1\x81\x32\x13\xbc\x1b\xbd\x17\x15\x1b\xa7s-\xfb" "\x8bY\x3x\xbe\xc8\x42\x66\xa3\xda\xa3Hqf\x9d\xb9\x97\xb1x\xf7\x99\xc0]1\r\xa0\xd9" "}>\xd2\xf4\xb3\x1e\x33\xe4\xf1\x34\xb1y\x81\x8bo\xaa\xe8\r\xdc\x15\x99\xd0M\xc8\xfd" "\x18\x92\xa9^\xbb\x12\x8eq\x9c\xfb\x88^\x13\xfd\xbf\xab\x96\xbe\xd7\x32\x63~u\xa4" "#{\x3\x9\x90\xac\xf7\x9\x64\xbc?\x16\xb0\x95i\xc\x8bT\xd1\x62p\xb9\x0\x45\x63~\xe" "P\x94{[l\xe\xc4\x38<\xf4z\xf5\x8awq\"\x11{\x1d\x93\x91.\x1d\x93\x90\xd3\x64\xe7\x65" "?\x92\xf)_\xbdy\xc6\x35\xa1\x12H\x15\x83\xbbx\x18\x44\xe3\xef\xf4\xc8\x66|\x1f\x8a" "\xab\xbdmt\xf6\x37\x86\x11\xfa\xa1\xb0\x91u\xba\x98\xef\xfc\x2\xf9\xce'\xd6l}\x18" "\xc\xe4\xe8\xa7m\xa7\xcd\xb8\x99\x1&\rr\xafy\xf8R\x94\x7f\x89\xdb)\x93\xdd\x1d\x11" "\xce\xd6 /p\xb9\xa6\xca\xecz\x82\x13\xc8N\xee\x4\x36;\xd2\xd6\xb\xc9\xbb\xe9\x36" "\x89\xfa\xfe\xa0\xed\xe5u\xd4\x89\xa0\x31Q\x98\x18\xaeP\x8cY\x9a{\x14;\x1b_\xe2\xae" "\x16J\x82\x63{w\xcb\xe4\x36\xd7\xcd]\x18@\xf1\xbe\xc3\xe4\xd6\xfa\xbe\xb3\xde\xea" "\xbbW\xc\xde'\x0p\xb1\x41~,r?\x85>\x0\xa1\xd1\xd1*.\xc6\xca#\xaax\xe1\x36\xb1|\x7" "\xe7\xb6\x9a)\x16\r\x61\xbaTW\x83\xa3\x86K\x1d\xa0\x89\x42\xfe@\xcd\"\n\xc3\x80\x8a" "\xfcoi\xf1\x1c\x8b\xc8\xe2v\x1at\xd8s\x8c\xd4\x1b\xe9\x44\xfcP[%\xc3\xa7\x84\xe1" "]\xbc\xec\x5\x9\x99\xc8\xe1\xf5WI\xc8\x32\xd6M\xfe\x1a\xf1\x19\xe5\xddJ\x5\x32^\xcc" "f+\xcf\x7fjp\xdfo+a1\xba=\x95\xf0\xd3V?\x7f\x43\xa6x\xeb\x9c\x44\xf7\xf5\xaaP\xa8" "\x6\x1al\x16\xd0N\x9\xb8\xac\x5\x82x\x9\xbe\xec\x45\x1a\xf1\xe2\xc2S\xfI*,\xaf\\" "\xf3\x80\x1\xf2\xa6\x16\x86\xc2Lj\x11\x13\xe9\x9\x8b,I\xf9\x92\xd3*\xc4\xa8\xf0i" "t\xef\x9f\x97K$\x11!\x91^\xce\x38\x33LA\x82x\xf\x9e\x32\xd4 _t\x84\xc0\x33\xd5\x97" "\xc0\x91\rG\xbc\x37\x64\x0mK_\xc2\x8a\x46\x15\xbd'\xb4n[\xb9\xbb\x84\x83\xb5\x46" "\x19\x33\xdc\x9e\x8i>\x9\xc2g\xba\xeb\x17P\rv>\xde\xfbP6\xf8 \x8\x1c\x1a\xd0\xc7" "1\x12\x32\x6\xdewO\xa4\x64\xb9\xdf\x19\xe2\xbeIK;0\xe2\x9a\xb\x8a\xad&6\x2\x35~\xd1" "\x1a\x66\x62r\xbb\xb1\x14\xa1\xe4\x90\x43\x1d\x83\x8b\xe1\x9a&\x8e\xa9j\x8d\x64n" "\xdc\x15Y\x80\x38Y\x85$yk\x89\xa8W\xb0%\x93S\xd0\xc2V\xf+9\xb6\xde\x83\x83\xcb\xb6" "\xcaM\xf\xfb#Z+v\x1b\xa3\xf7\x94\xd0g\xf1o\xd0\xe6Qq\x18&\x14\xc8\xc8(\x83\xbd\x92" "\x3\x31\x8f\x38\xe1'\x9a\xc7\x13\xe6\x8e\xe3\x93\xef\xaeL\xb\xef\x1dOP\x9d\x19\xf5" "@E\x92\xf0h\x90S\xd4\x7\xf1pj?a\xee\xf0\xce\x1dn\xbc\xffI\x1\xd8w\x15\x63\xb0\xe4" "\xfb\x7\x85\x97\xf9\xc5\x90$\xb0\xc6z\xef\x2\x1W\xc0\x94Q\xef\xfb_\xbau\xa9\xc2x" "\r\x87\xa8\x65t]\xc\xe8\xd1\xf5\x35\xdd\x7\xfe\n\x17\xd5t\xbb\x14W\xb5\xd1\xee\x9d" "\xc5\xdc\x41\xec\x41\x8a\xa3\x18\x32\xeZ\xbc\x7\xb+g]\x1c\x46?w\xd7'S\x1cx|\xeb\xb4" "f\x7-\xf\xda\xf2$\xa1\x90?\x18\xdf\x46\xe9\x8b\xb4\xccR\x88\xf1\x1f\x88oW\rw\xb\x34" "k\xe0\x5\x98\xf9\x92\x9\xeb\xc5\xf2\xcc^\xd4\xaf\x88\xa9mlc$\xc4n\x96I\xb2\xfc\x37" "\xb5k\n\x7+\xad\xb2\xc7\xf8\xafK\xe1\xcaYx\xd9\xdb\x9a\x45\xc9\x9d\x41i\x1\xcf\x8c" "0\x90-=O\xd4\x13i_\x18\x4\x34\x45\x88\x8e\x91\xa7k\xd5r\xccL>\xd8\xea\xbf\xf2\x96" "\xfe\x8a\x8e\xd3\x32\x5'\xee\xc\x98\x82\xed\xf4\x9cn\xb8\x39\xa1\xaa\xfa\xcb\x82" "\xac\xdb\x87\xd4\xa1@\x97\nj`<\xdf\xe8\xbe\xe7-\x8auQ\xe\x43\xd1i\x0\x1a\xdb),\xc6" "\xb6-\x6\x93R\xc4\xcf\xf9\x6n\x12\xd8\"l\x14\x36*0\xa6(\x8e\x38QY7\xfcT\x1d\x1d^" "\xca\xb8\xa3)\x10\x98\xd3<\xfa\xf8\x93\x39\xc4\x38\x44\xf8N\xe3\xc5\x7f\x17\x15\x35" "O\xd2\xab\x8f\xef\xa1\r>\x4\xf4\x31\xb6gG\xe9\x1a\xee,\x93_g\xd2Uk\xebK\x16\x41\x8b" "<\xa8\x18\xc8\xb8_\x83\xb5\x92\xca\x99\x15\xd3\x41\x14\x1d\xc5*fvM\xb0\xbbt\x10@" "\x88\xd9\x31Y\xc8\xcf\x31U\x83\x34\xe0\xbf\xd4\xc0\x1a\x12.Z\xb0o5\xb7Q\xf7\xfe\xa6" "O?\x7\xe1\x6\x43\x81O85p3\xb3M\x82\xe7\x1c\xf9\x9e\x94\x81\xbd\x44\xf0\\\x9b:\xb0" "\xdd\xd0\xc9\x2\x8d[%\x1e\xf3\xbc\x16}m\xc1\x37u\x87\x1c\xad)\xda\x1f\xd9\x1e\x46" "\x1P\xf5\x15\x6\xb4\xfe\x13\x4T\xf2\xe7\xa3\xe4\xc9\xa4\xa2\xd7\xe6\xc4\x32\x91\xf7" "\xd9\x41\x8d\x87r\xf5uV`a\xf\xa4\x90\x9bT]YM\xb\xf9\x8\xc8\x10\x92y9\x9c\xeb)3\xd1" "\xec\xbb\xdd\xb1\x85\xb8\x41ra\xf[\xb\xe7\x12\xda~2O\x93\x38\xba|VdDI\xf\x83)2\xfd" "\xb3?\xd0\x9e\x39{\xe0j\r\xe\xc0n\x94o\xf0gs\xa3\x38\xed\xe4\xe3\xbe\x9f\xc8\xac" "\xf9\x8b\xc9\x81\xe1\xaf\xc\x41/\xc0\xbdsX\x93$6\xbd\xdc\x43\xb0|\x6\x19\x9\xd9)" "h.}\xe9\x87*\xfbm\x9bW\xe9m\xef\x7f\xf9\xdd\xbeJd\xef!\xd1\x41\x89\xf7\x0Zd\xd2\x13" "`z\xbeH\xc6p\"\x98\xc\xb3h\x17\x41\xd6\x33\xdc\xc1]_\xd3HL\xac\xea\xf5\x6k\xaf\xdd" "\x86>>\xae\x64\xb6\x82n\xd7\xd7Ht\xab\xac\xaf(\xce\x96\"\xb1\xb8\xd4\x34*-\x83\x36" "\x8w_\x97\xd0\xa5Y\xce\x42\x33\x0\x8c\x41/\xb0\x11~r\xe4S\x7\xb0\x99\xc6G$\x14\x15" "\x6\xb2\xa9\xc5\x65\xedT\x1dG\x8fI\xae]\x98\xcc\x9a\x9bu\x11\x3\xef\xcb\xb9\xf0\x97" "\x99\xfa\x87O\xd3\xc9\xbe\xab\xeY|\xe6\xeb\x42_\x93\xf4\xb8\x35`\xdb\x87\xf7Q\x82" "\xa7U\xcc\xa3\xdd\xdd\xb8pve\xa8\xbe\x1\n@\xec\x61\x17\x4l\x91\xe5\x33\x7f\xb7\xca" "7~\xc9o\x6;\xa5\xe1\xf9{\xfe\x1c\x12\x14qq\x3`l\xd3s\x85\x36&\xfd\x46\x6 \x13\r\xb0" " \xb0_N\xa1\xd3\x64K*\x8d\xa1\x1c\xdd,l*\x6Q\x17'\x80\x98\x63\xb\xc7\xf\xdc\xe0\x65" "\x1b\xc5\x16\x85\x84\x1d\x82O\xa4-\xf0\xea\xb5\x42|@\x81\x98\xdb\x9'\xc9\x11\x66" "\xb4l\x9d\x89\xa7`\xee\xdb\x93\x8\xa5\x15\xcvu\xbc\x5\xec\xcc\xbc\x0Q\xea\x8d\xa1" "\xfd\xe8\x13,\xc0\x64\x12\xf1\xd6\xdc\xe0+\xc7o\xfc\xee\xb8\x87\x5\x64\x7\x86 \xf9" "\xfa\x7f\xda\x86x\x11\xa3\x30O\x0\xa4\x16\x9d\x96\xe5\xcf\xec.\xbf\xa9\r\x81\xdd" "\xe0yIe\x9d\x31?\xf7\xf8@+\xdb\x1e\xeaL\xe0\x16\x63\xe3\xbe\xc0\x4\x0\xaa\x33\xf6" "\xb8\x16ij\x13\xc8\xdb\xc3\x38\xaa\x19/\xcc>\x6\xc4[v\xea\x41\xef\x15k6E\xbf\xc3" "\xee_\x1f+\x15\xef\x8f\xefv\"\x0q\x96\xf9\xd8'\x90\x97\x91\x9a\"T1\xe6h;\xb3\xca" "\xbbq\xdf\xf8\xd8\xa5y\xd1t\xb2\x6?H\xd6;\x7f\xe1j\x9c\x83\xdf\xf1\xff\xae\xbf\xd3" ">\x9c\xa2\x93\xa8\xc3\xe6\xf9P\x1es\x90\xb\xf?\\i\x86\xeb.zt0{m\x86\xb8H\x6'\xc3" "\x9c-\x1!\\O\x95\xba\xed\x4#\x5\xd7 \xdd\xe7\x11k\x93\x19\xe\x87\xd5\xf5\x5\n\xa0" "\xdb\xd0\xe8\xd6\x98\x8a\x98.}*\x1bp\xb3\xb7\xf5\xf8\xb8\x6\xf4\x9d\x36&\xdd\x1e" "\\\xb7\x3\x38\x3]\xf5S\xab\xdbL\xe6\xbeK_\x97}\xb8r(\x99\xce\x46\xc3\xd0\xaa\x83" "1C\x8f\x1c\"\xe1iy\x83\xb8*:k\x12\x8f*\xe5\x13P\x9f\xc6m\x8aV\xf4\xf7IUqm\x0\x8\x1e" "O\x1d\xcf\xda\x34@\x8f\xfc\x5\xca\x46\x81\x37\x97%\x18\x83x4?\x87^sK\xf5\xdd\xce" "\x99\x18l\x95\x32\x99\x98\x0\xcdKBc\x10^\xf3\x14\xb8\xce\x10*>\xc7\xb5\xec\x8\x38" "\xe6\x61\x8c\xc0\x16\xd8\xda\xb5\xc4Yv\xf4\x91\xcf\xc1\xf5\x42\xb6\x2\xc\x90}d\xf8" "\"\xbb\x62j\xa0?\x4\x34H\x4\xda\x44M\xe1M\xe2U\x85\x32w\xdd\x16x\xaf\xaa\xf8*\xb3" "\x85\x1a\xaf\xd2\xc8\xff\xb6\xb7\xa2^\xb5\xa1\x16Y6\xac\x2\xa5?\xca[j$\xc5\xb0\xc9" "\x88M\x1\xb5H\x95\xcd\xc6\xe6LO0a\xd2\xeav\xa7\xb4\xf7\xb0\x16O\xaf\x3\xac\xcd?\xbe" "\x9b\xcez\x12\xd2\xa3z\xf3\xf4L.\x86O\xbe\x84\"\xd4\x61\xabU<\x10\x1f\x9e!\xa5\xb" "\xbd\xcbm\xdf\x39N/\x80\xf9J,r\x1f\xfd\xba\x3v\x88\xf0\x16\xc9\xbe\xc8\xdc\x1b\xbb" "i\xca\x91\xb0H#\xca\xa2\xfd\x7\xaa\xb\x1f\x10q!2Q\xd2GS\xfcz\x8e\x15&(\xe2?[\xbf" "\xcb\xae\xcb\xf\x61\xca\xc8\xdc\xc6\xa8\xff\xca\x3\x11H='\x98\x45\xcJ\xf2\x1fW\x98" "v?[N\xc5N\x99\xcc%\xcc\xf0\x1\x9e\x95\xc7\xb8\x99g\xef\xf0\xe0\x2\xf5vX;\xf8\xff" "\xa6hP\x0n\x9f\xeb\xf\x46\x18\xab" ";\xf2\xa8\xcd\x65\xcf\xe9vN\x8d\x99\x98\xb1\xd9r\xca\xcf\x11'8\xd7\x80LM/TU)\x3\x1f" "\x81\x30o_\xbb\xe9t\x6\x39\x35uL\x8d\x8aU\xcc\xce\x35\xfe\xf8\r\xbb\x63\x19\xa4\xc" "$\x84\xda\x95\xc7w\xd9\xab\x30\xdeV\xf0q\xec\x32\x98\xe3\x16\x33X\xc5\xf2\xd7\xd0" "\xb8\x96\x8c\xa4\xdfr{\x8c|~W\x12\x36\xb7\xfc\x30\x8dl\x9a\xed\x82J~\xa3R\x7f\xcc" "\xf2\x62n\xea\xd5\x81\r\x45\xdf\x80\x1a\xb7\\\xd9X\xcb\x42\xa0\xf\xf9sJ\xe6\xa9\xd8" "p\xa4\x39-bI\x96/\x81\xbb\x14]b?_8\x4\x6\x2]N:I\x15\x9\x43\x9c\xa5\xc9Uy8ab\xaa\x2" "\xd4W@\x80\xaa\xaf\xda \x3\xa2\xcch\x1\x65t\x9f\xd5\xdc\xea\xa9\x1b\xf4{\xd8\x38" "\xf1j!\xe1\x16\xa3\x96\xe9\xe6\xf7X\xd4\x1d\xf5\r?\x16\x10\xf7\xd8\xa6RW\xae\x0\xf2" "\xce\xdel\xab\n\xda\x9b\x16\xd9\xad\xdc\x30\xcbz\x6\x8b\x35\x8e$z\xb5\xc1\x81\x9" "\"\xa7\xe#\xd6\xf\xcb]\x13\xb5" "\xe5\x99|\xb2\xd1\x15\xab\xdd\x35\xc8\xd8\xd6N\xc1\xba\xc\xb\x1d\xa8o\xc4\xb\xb1" "\xa4V\xc0=y\xbe\x63\xa8p\xe9\xa8\x82\xc2\x35\x95\xb\xeb\xabs;ZP\xad\xb0|5\xbd\x8c" "\x7f\x88\x7\xf6\x3\xfd\x7\x34\xb4\x96\xe1\xa7\x83\xe5\x18\xa9\x6\x9b\xc2,\xe8\xf4" "\x8f)\xb9\x5\xa1\x8f\x11\xf\xda\x8e\xe4:\xcf\"\xbe\xdf\x99\xb2\xeb\xb1\xe6\x7\xd1" "\xab\x92\r\xc2\x90\xe3\r\x4\x1c\x46\x8a\xc\xf2}\x94\x83Q\xd5\xcr\x5uRd\xdcj\xddR" "y\xca\x17*\xbf'\xba\x1b\x93\xa6#\xf2\xe4yd\x9Y,\xe8L\x1a\xe4\x10.K\x92!\xc6\xa8\xc8" "Fc\x19\xe6\xbf\xe0\x89u\x9dh\xddX\xf7L\x19\xb3\xdf\x9e\x14\n\xa3\x1a\xc2kuD\xa8I" "seP{5\xf8U\x86\xb6\x2U\x81\xb8\xf\x66G\xff\xf7\x13\x39\xac\xdd\x1\xc2\xfe\x36\xc6" "\xb7\xe6\x15\xca#0J\x82\x8f\xb7\x9d\x89\x15\x45\xab\x8c\xf5\xd1Q)\xb9u\xaa\x66\x13" "+\x89\xbd\x18\xe8\x9a\x91\x6\xb7\xa9]\xe0J;\xb4\xf0\x80%q\x88l\\8\xd0Z\xd0\x9a;\xe3" "\xbb)`\x12\x8b\xf2+p\xa8\x10*, c\x83L\x96\x9c\xf0P\xa5\xaf<\x5\n\x33G5\x8e\x0\xfd" "\xb0\x39\x1d\xc3\xe0\xbe\xfd\xb1\xe5!x$:\r\xde]\xc8?\xc7\xa8T\xeb\xa1\x98,\xe7\xff" "e\xe7P\xb9\xc4\xdd\x86\xdd\xb7\xffJ\xe7\xb7'\x2\xd3\xcb\xc7\xa0\xb3i\x10-$|\xae\x19" "g}\x99\x8f{U\xf\x90\x1a\xday\xa8#\x19\xf2N\x18\x6\xf4M\xd8%\x32m\x7f]\xf6\xa9\xc0" "\xbb\x95\x46\xeb(\xe1\xd6\xdb\xdb,\xc1\x8b\xa3\xd4\x63\xab\xd8\x38\xb2\x8\x41\x9c" "\x16\x8a-\xe6\x8f%(%\xfa\xf4%\xfe\x39\x7f\x85/\xbf\xb4\xd3yins\xb8K\x9a\x87\x64X" "\xf5&\xa6#\xa5\xa0#\x8a!\xc\xd5\xbbq\\3\xd3\xa8\xb4\x83R\x90,-\x83\xd1\x89R\xc5_" "\xa7I\x88Q2\xabk~m\xb7\x94\xb1Y\x88\xb9\xd5\x11\x43\x81$\xd8\xdd\xe3g\x8ateO\x92" "S\xd0\xb8\xb5p;\xd0\xd3[?~\xa2\x94\xfd\xd9\xb4\x46\x1\xa8\xe7<\xcb?\xdb\xd9\x80\xc2" "9\x1dLy(\xb4\x1b\x46\xe9\xad\x16\x38\x86\xac\xc2\xb6\x8c\\L*\x6\x91\x1a\x7f\xb3n" "\xccTK}\x88lu\xda\xcbR0\x8e\xe0\xef\xea^?\x16\xa1\x10(\xa5\x39)\xf7\xb4\x95\x38\x96" "\x1\xbd\xca\x15\x86\x9\xb9\xd8\xbe\x1a]h\xe5\xce\x38'\x18\x9a\xfJ~\x18-\xb0\xeb\x81" "\xfa\r\xcdlXp\x98\xf2\x64\xa3\xd0\xe2\x4\x9f\x84\xc8\xa4\xe8\xffP:h\xe8\x10+CjK\xc9" "V\xeb\x90\x81\x14<\xf2\xcb\x90:\xbas\x7\xf\x8b\xf\x39" "\x80\xce\xb2\x88\x14\x94$\x96\x8b\xc1\n\xb2\x46j\x15\xce\xdb\xdfU\xe\xea\x62<\x16" "*:yc\xd6W\xce\xd1\x19\x10\x16\x2\x89\x8b#\xd7\xcb\x99\x61\x8b[=Y\x86\x8fZ\xc3\x1c" "\xe2\x89\xef\x1d\xf5k\xa4\xc5\xc3\x98\x6\x8dZ\x92\x8aJ\xa5\x33%\xd9[\xd1\xc7t\xf0" "\xd1\xd5\x3\x62\x8b\xa1ToFC\x3\xe0\xf4T\xccj\xca\x98\xd0\x32\xac\xf0Xr\xda\x95\xa9" "\x18\x8d\xf\"K\x87\\\x5\x15|/\xc9\x93\xd6U!\xa7p\xe6\x96$\x7\xa2,\xf*\x14\xb8\x0" "d\xbb\xc7OIla\xb4\x42U\xc4\xcQ\xbd\xf6\r\xbf\xa7\x90\xfw)mY\xab\xf6\x1f\x96O\xef" "\xb6\xaf\xf3\xf5\xdc\xcd\xd7\xa8\x12\xfb^\xc3\xcm\xc8\x6;\xd8(\xf6\xad\xea\xd2\x42" "\xdc\nnr\xb1\x0\xa6\x94\xac$\x8\x9d\x15\xb\x87)\xdeZ2*\xd7}\x84\xe7\xf4\xa6%p\xa1" "x\xf0\xa9\xec\r\xd3*{\x90\x91x\xd9\xa5\x44\x43\xc\xff\x30\xe2\xe5p\xdb\xbb\x64\x9d" "\x9e\x19UK9Tg\x13\x4~\xe0\x86\x1b\x8a\r\x96\xfi\r..\x16\xf$\xf1R\xf6\xf0\xa9?k\x13" "\xb1\xeb$w\xa4\x16\xfb\xf3\xc1R\x96\xdd\xb1:=\x9\xf7q\xd8\x61\x8a\x85\xde\xc2\x36" "/\x88\xd1\x17\xf1\xbb\x17N\x82\x9f\x96\xf9\xbe\x96[\x17S!\xa3\xbb\x7\x46\x37k\x95" "&\xb\x82\xcf\x34\x13M)\xba\x64%\xd9\xb8nvG\x91\xd6\x99xAQ\xbf&\xd4\xdc[\x1\xcc\xf" "\x88&\x1d\xf8\x8e<\xab\xb3q\xd3\x34\xe1\xa2\xf5\xf6\x9R\xecp8@? E\xf7\x9%\xe9\xd8" "\xb4\x9e\xcc\x33\xb\xd9\xfV=8\x94\xb1\\\xe6)\xe6\x86\xe3\xba\xe5\x94\xe5\xc2Q/y\x82" "\xea\xb9_\xd4<\xd5\x95\xd8\xec_\xdf\x96/^Rw\xe4\x16\xa9\x1c'\x91x\xbd\x98\xd0\x82" "\xce\xd5\x65P\x15\xc9\xf4%\xc0H\xae\xc1\x35\xf5\xbf\x41&\r\xeat\xfc\x1c\x16\x98L" "=\xb8\xde\xaa\n\x65\xc1\x42kz^\x91\xac_g\xe2\"\x90^\xfc\xdd)|\x1c\xaa\x1d\xfc\x17" "\xfa\x1a=\xe4\x62\xd3 \n\x14\x91\xd4\x1b&\xf7\x99G]\xae\xd3\xd6\xe3\xb1\xfe\x92=" "<\xacPX#\xa1\xe7|\xe6\xb0|\xc.\xfe\xc2\x7\x34z\x8e\x44\xd3\xc5\xd1\x96\x37l{~\xdc" "\xe7\xc9\xbe\xd0Q\x9d\xa1\x91\xa6?\xab\x42z\xb9\x30\xc1\x15oQ\xc8\xd5\xac[\xd9\xd0" "b\xe0\xe0@\x89\x35]\xf1\x61\x94P\xc4\r\x0P\xbe\xcf\x10\x37\xbd\xc9\xb6-}L\x90\xb7" "b\x19\x99\x1d!Z7\xb3\x10\x91\xcf\xd8\x32\xd6\xa9Vi\xdd\x2\xb9\x4\n\xc2\xb6\x4\x19" "\xdc\xf0\x64\xaap\xa3\xc9\x1a\x10\xe5\xe4\x8p\x93$o\xb9VE\x82\x8au\x8d\x83_Q\xdc" "\xc7\xab\x13;6\r\xbb\x0<\xee\xaa\xa1\x10-\xfc\x7\x93\x1f\xe\xe2\x38'=\x9d\xc4\xc9" "\xc8\xb8\xff\x8\x92\x32\xbf\x82?\xfd\xd7\xa3=\r~\x14 p\xf2@\xd0x\xfd\xf5\x90\xda" "\xfd\x88\xb8\x96)\xb0'Z\xf4\"\xebT\xbc\x12\x85\xea\xe5\x8c\xad\x6\xbc+\x12\xd5\xa0" "\xc2\xbf\xe5\x1cM\x10\x82\xaa#\xea\xaf\x33\x42q\xc0R>1\x93\xd6\xaaKj0\xbc\xca\x62" "\xed\xb6\x62\xd3\r\x93\xf5\xf5S\xa2\x11\x61,\xc2\xea}\xa1\xd1\x91\x12\xcb\x98\x17" "'\xed\xf4\x41\x36\xef\x35\x8e\xda\x2\x44\x46I\x0\x8a\x8e\x9d\xb0\x98Z\xce\x34\xa5" "k\xcc\xd4\x93\x37\x81\x38\xaf?\x16\x32\xcd\x88RY\xf0\x1f\x97\xa3\x8b\x18TC\xe3\xb4" "@\x8a\xaa\x6\xc0\x95)@5E\xdcv\x8b\xe1\xf6\xe4\xb4\xe8^\xc2\xf0\x94\xab\x6\xd4\xed" "xb\x4\x89\xde\x90\x14\xed=Jv\xaf\x19\xa7\\=e\xc7<\xf8\xb3\xae\xda\x99>\x97(\x9b\xba" "AgX\xd5\x61\xd6\xdc\x12#\xf3\xa5\xa7@\xc2\xa6O\xe4\xaa\x2\xa8\xaf.\xff\xf0\xa3\xfd" "\x8c\r\xac\xc5\xb6\xa9\xf0\xea\xe8\x83\x33Y\xbfk\xef\x10\xd0;\xd9\x31\xf0[\xea\\" "\xc1\x17\xe2\x1a\xa4\xe3\xa4\x86\x84SW\xa2V\xaf\x1a\xc2\x82\x96qit[\xce\x45\x92\xb4" "P\x1c\xf4\x10\xe4\x4Z\x8a\xc4{\xf7/\x80,\xe9>V)H\xb0\x8Hs\xf3?\x87#@\xb4\x93\x9T" "\xa9z\xe2^\x9ctgq\x17\xeb\xba\xcc\x18\xe5\xcf\x9d\xa2\x89\x61\xe6\x44,T_~\xe1\r\x6" "\x89\xca\xd6{^~\x9a\xbc\xba\xd9\x34g.\x1:b+\xcd\xe5\x41\xa2\xba\xea\x62\xf9W\xc1" "\x99\xfc>\xeb\x1b\xb8\x9\x1e\xd8\xac\x15\x9fZ\xfb\x61\xd3X\x93\xaf\xba\xa5\x88*\n)P\xf9\xac\xdb\xb8\x8dH\xb9\xd7\x64\x80" "\x91[\r\xd9\x85\x7L\x4)\xe9\xf4\xec\x35lm\x1f\x41\x80\x96\xea\xd1\x8c\xb7\x66\x9d" "\xcev\xe8\xb2\x1ak\xc\xf1\x9d\xba\xf1\xe7\x9e,p\xa1\x88\x8f\xfc\xaev\x17\x45\x18" "\xc3U\xc3\xf7\x33\xb6\xd0Q\xd9\x37\x1byi\x8\xc0\x9b\xa1\xcb\x9f\xe3\xc7\xe1nE)\x91" "!&\xb5%>\xffj\xce\xcd\xa3\xc3\x7f\xcc\xc7\x61\xf9\xd7\x81\xf0\xc7^\xb7\x7\\\x12\x1c" "hT\x7\x6\x95\x8e&\x16n\x19\xe1\xc0\xb2\x9e\xe0\x8d,#\x82\xf9\x9a\xc7\xe\xe4\xeeJ" "b\x96\xa4\xff\xecU/=\xb6G\x1a\xa4-;8\x85r#\xfeQ\x1d\n\xa3Z\x84\xb1\xc1 Z0K-\xb\xfc" "\x95\xff\xfb\xd6\x3\xe8\xe6\xf4.`\x1z(\x8\xba\xbe\x0\xc2p\xce\xbao\x93\xb8;\xb9\xc4" "\x1cw\x87\x99'4\x17\x1f\xc2\xa4\xf0\xb4o\x6\xc6\xf0)\xc8,\xcc\x98[|<\x84\xea\x65" "Tx\xffy\xe8\xab\x8f\xe6\xcc\xe5\x91\xec\xb3\x9c\x35:\x80\x1\x14\x2\x0\x0\x30\x30" "00000000000000000000000000000000000000000000000000000000000000\r0000000000000000" "000000000000000000000000000000000000000000000000\r000000000000000000000000000000" "0000000000000000000000000000000000\r00000000000000000000000000000000000000000000" "00000000000000000000\r0000000000000000000000000000000000000000000000000000000000" "000000\r0000000000000000000000000000000000000000000000000000000000000000\r000000" "0000000000000000000000000000000000000000000000000000000000\r00000000000000000000" "00000000000000000000000000000000000000000000\rcleartomark\n\x80\x3" ; swftools_0.9.2+git20130725.orig/lib/pdf/CharOutputDev.cc0000644000175000017500000011234112216332640021710 0ustar gawaingawain/* CharOutputDev.cc implements a pdf output device (OutputDev). This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "../../config.h" #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_DIRENT_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_FONTCONFIG #include #endif // xpdf header files #include "popplercompat.h" #include "CharOutputDev.h" // swftools header files #include "../os.h" #include "../log.h" #include "../mem.h" #include "../utf8.h" #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../gfxpoly.h" #include "../devices/record.h" #include "../devices/ops.h" #include "../devices/polyops.h" #include "../devices/render.h" #include "../png.h" // linked-in font data #include "fonts.h" typedef struct _fontfile { const char*filename; int len; // basename length int used; struct _fontfile*next; } fontfile_t; // for pdfswf_addfont static fontfile_t* global_fonts = 0; static fontfile_t* global_fonts_next = 0; static int fontnum = 0; /* config */ struct fontentry { const char*pdffont; const char*filename; char*afm; int afmlen; char*pfb; int pfblen; char*fullfilename; DisplayFontParam *dfp; } pdf2t1map[] ={ {"Times-Roman", "n021003l", n021003l_afm, n021003l_afm_len, n021003l_pfb, n021003l_pfb_len}, {"Times-Italic", "n021023l", n021023l_afm, n021023l_afm_len, n021023l_pfb, n021023l_pfb_len}, {"Times-Bold", "n021004l", n021004l_afm, n021004l_afm_len, n021004l_pfb, n021004l_pfb_len}, {"Times-BoldItalic", "n021024l", n021024l_afm, n021024l_afm_len, n021024l_pfb, n021024l_pfb_len}, {"Helvetica", "n019003l", n019003l_afm, n019003l_afm_len, n019003l_pfb, n019003l_pfb_len}, {"Helvetica-Oblique", "n019023l", n019023l_afm, n019023l_afm_len, n019023l_pfb, n019023l_pfb_len}, {"Helvetica-Bold", "n019004l", n019004l_afm, n019004l_afm_len, n019004l_pfb, n019004l_pfb_len}, {"Helvetica-BoldOblique", "n019024l", n019024l_afm, n019024l_afm_len, n019024l_pfb, n019024l_pfb_len}, {"Courier", "n022003l", n022003l_afm, n022003l_afm_len, n022003l_pfb, n022003l_pfb_len}, {"Courier-Oblique", "n022023l", n022023l_afm, n022023l_afm_len, n022023l_pfb, n022023l_pfb_len}, {"Courier-Bold", "n022004l", n022004l_afm, n022004l_afm_len, n022004l_pfb, n022004l_pfb_len}, {"Courier-BoldOblique", "n022024l", n022024l_afm, n022024l_afm_len, n022024l_pfb, n022024l_pfb_len}, {"Symbol", "s050000l", s050000l_afm, s050000l_afm_len, s050000l_pfb, s050000l_pfb_len}, {"ZapfDingbats", "d050000l", d050000l_afm, d050000l_afm_len, d050000l_pfb, d050000l_pfb_len}}; typedef struct _drawnchar { gfxcoord_t x,y; int charid; gfxcolor_t color; } drawnchar_t; class CharBuffer { drawnchar_t * chars; int buf_size; int num_chars; public: CharBuffer() { buf_size = 32; chars = (drawnchar_t*)malloc(sizeof(drawnchar_t)*buf_size); memset(chars, 0, sizeof(drawnchar_t)*buf_size); num_chars = 0; } ~CharBuffer() { free(chars);chars = 0; } void grow(int size) { if(size>=buf_size) { buf_size += 32; chars = (drawnchar_t*)realloc(chars, sizeof(drawnchar_t)*buf_size); } } void addChar(int charid, gfxcoord_t x, gfxcoord_t y, gfxcolor_t color) { grow(num_chars); chars[num_chars].x = x; chars[num_chars].y = y; chars[num_chars].color = color; chars[num_chars].charid = charid; } }; char* writeOutStdFont(fontentry* f) { FILE*fi; char namebuf1[512]; char namebuf2[512]; char* tmpFileName = mktmpname(namebuf1); sprintf(namebuf2, "%s.afm", tmpFileName); fi = fopen(namebuf2, "wb"); if(!fi) return 0; int written = fwrite(f->afm, 1, f->afmlen, fi); if(written<0) return 0; fclose(fi); sprintf(namebuf2, "%s.pfb", tmpFileName); fi = fopen(namebuf2, "wb"); if(!fi) return 0; written = fwrite(f->pfb, 1, f->pfblen, fi); if(written<0) return 0; fclose(fi); return strdup(namebuf2); } void unlinkfont(char* filename) { int l; if(!filename) return; msg(" Removing temporary font file %s", filename); l=strlen(filename); unlink(filename); if(!strncmp(&filename[l-4],".afm",4)) { memcpy(&filename[l-4],".pfb",4); unlink(filename); memcpy(&filename[l-4],".pfa",4); unlink(filename); memcpy(&filename[l-4],".afm",4); return; } else if(!strncmp(&filename[l-4],".pfa",4)) { memcpy(&filename[l-4],".afm",4); unlink(filename); memcpy(&filename[l-4],".pfa",4); return; } else if(!strncmp(&filename[l-4],".pfb",4)) { memcpy(&filename[l-4],".afm",4); unlink(filename); memcpy(&filename[l-4],".pfb",4); return; } } static int config_use_fontconfig = 1; static int fcinitcalled = 0; GFXGlobalParams::GFXGlobalParams() : GlobalParams((char*)"") { //setupBaseFonts(char *dir); //not tested yet } GFXGlobalParams::~GFXGlobalParams() { msg(" Performing cleanups"); int t; for(t=0;t=32 && *s1<=63) s1++; while(*s2>=32 && *s2<=63) s2++; if(*s1!=*s2) break; s1++;s2++; } return *s1 - *s2; } static char fc_ismatch(FcPattern*match, char*family, char*style) { char*fcfamily=0,*fcstyle=0,*fcfullname=0,*filename=0; FcBool scalable=FcFalse, outline=FcFalse; FcPatternGetString(match, "family", 0, (FcChar8**)&fcfamily); FcPatternGetString(match, "style", 0, (FcChar8**)&fcstyle); FcPatternGetString(match, "file", 0, (FcChar8**)&filename); FcPatternGetBool(match, "outline", 0, &outline); FcPatternGetBool(match, "scalable", 0, &scalable); if(scalable!=FcTrue || outline!=FcTrue) return 0; if (!stralphacmp(fcfamily, family)) { msg(" Font %s-%s (%s) is a match for %s%s%s", fcfamily, fcstyle, filename, family, style?"-":"", style?style:""); return 1; } else { //msg(" Font %s-%s (%s) is NOT a match for %s%s%s", fcfamily, fcstyle, filename, family, style?"-":"", style?style:""); return 0; } } #endif static inline char islowercase(char c) { return (c>='a' && c<='z'); } char* fontconfig_searchForFont(char*name) { #ifdef HAVE_FONTCONFIG if(!config_use_fontconfig) return 0; // call init ony once if (!fcinitcalled) { fcinitcalled = 1; // check whether we have a config file char* configfile = (char*)FcConfigFilename(0); int configexists = 0; FILE*fi = fopen(configfile, "rb"); if(fi) { configexists = 1;fclose(fi); msg(" Initializing FontConfig (configfile=%s)", configfile); } else { msg(" Initializing FontConfig (no configfile)"); } if(!configexists) { /* A fontconfig instance which didn't find a configfile is unbelievably cranky, so let's just write out a small xml file and make fontconfig happy */ FcConfig*c = FcConfigCreate(); char namebuf[512]; char* tmpFileName = mktmpname(namebuf); FILE*fi = fopen(tmpFileName, "wb"); fprintf(fi, "\n\n");// #ifdef WIN32 fprintf(fi, "WINDOWSFONTDIR\n"); #endif fprintf(fi, "~/.fonts\n"); #ifdef WIN32 fprintf(fi, "WINDOWSTEMPDIR_FONTCONFIG_CACHE\n"); #endif fprintf(fi, "~/.fontconfig\n"); fprintf(fi, "\n"); fclose(fi); FcConfigParseAndLoad(c, (FcChar8*)tmpFileName, 1); FcConfigBuildFonts(c); FcConfigSetCurrent(c); } if(!FcInit()) { msg(" FontConfig Initialization failed. Disabling."); config_use_fontconfig = 0; return 0; } FcConfig * config = FcConfigGetCurrent(); if(!config) { msg(" FontConfig Config Initialization failed. Disabling."); config_use_fontconfig = 0; return 0; } /* add external fonts to fontconfig's config, too. */ fontfile_t*fd = global_fonts; while(fd) { FcConfigAppFontAddFile(config, (FcChar8*)fd->filename); msg(" Adding font %s to fontconfig", fd->filename); fd = fd->next; } FcFontSet * set = FcConfigGetFonts(config, FcSetSystem); msg(" FontConfig initialized. Found %d fonts", set?set->nfont:0); if(!set || !set->nfont) { msg(" FontConfig has zero fonts. Disabling."); config_use_fontconfig = 0; return 0; } if(getLogLevel() >= LOGLEVEL_TRACE) { int t; int p; for(p=0;p<2;p++) { if(set) { for(t=0;tnfont;t++) { char*fcfamily=0,*fcstyle=0,*filename=0; FcBool scalable=FcFalse, outline=FcFalse; FcPatternGetString(set->fonts[t], "family", 0, (FcChar8**)&fcfamily); FcPatternGetString(set->fonts[t], "style", 0, (FcChar8**)&fcstyle); FcPatternGetString(set->fonts[t], "file", 0, (FcChar8**)&filename); FcPatternGetBool(set->fonts[t], "outline", 0, &outline); FcPatternGetBool(set->fonts[t], "scalable", 0, &scalable); if(scalable && outline) { msg(" %s (%s) -> %s", fcfamily, fcstyle, filename); } } } set = FcConfigGetFonts(config, FcSetApplication); } } } char*family = strdup(name); int len = strlen(family); const char*styles[] = {"BoldItalic", "Medium", "Regular", "Bold", "Italic", "Black", "Narrow"}; const char*style = 0; int t; for(t=0;tl+1 && !strcmp(family+len-l, styles[t]) && islowercase(family[len-l-1])) { style = styles[t]; family[len-l]=0; break; } } if(!style) { char*dash = strchr(family, '-'); if(!dash) dash = strchr(family, ','); if(dash) { *dash = 0; style = dash+1; } } FcPattern*pattern = 0; if(style) { msg(" FontConfig: Looking for font %s (family=%s style=%s)", name, family, style); pattern = FcPatternBuild(NULL, FC_OUTLINE, FcTypeBool, FcTrue, FC_SCALABLE, FcTypeBool, FcTrue, FC_FAMILY, FcTypeString, family, FC_STYLE, FcTypeString, style, NULL); } else { msg(" FontConfig: Looking for font %s (family=%s)", name, family); pattern = FcPatternBuild(NULL, FC_OUTLINE, FcTypeBool, FcTrue, FC_SCALABLE, FcTypeBool, FcTrue, FC_FAMILY, FcTypeString, family, NULL); } FcResult result; FcConfigSubstitute(0, pattern, FcMatchPattern); FcDefaultSubstitute(pattern); FcFontSet*set = FcFontSort(0, pattern, 1, 0, &result); if(set) { int t; for(t=0;tnfont;t++) { FcPattern*match = set->fonts[t]; //FcPattern*match = FcFontMatch(0, pattern, &result); if(fc_ismatch(match, family, (char*)style)) { char*filename=0; if(FcPatternGetString(match, "file", 0, (FcChar8**)&filename) != FcResultMatch) { msg(" FontConfig: Couldn't get fontconfig's filename for font %s", name); filename=0; } //FcPatternDestroy(match); msg(" fontconfig: returning filename %s", filename); free(family); FcPatternDestroy(pattern); FcFontSetDestroy(set); return filename?strdup(filename):0; } } } free(family); FcPatternDestroy(pattern); FcFontSetDestroy(set); return 0; #else return 0; #endif } static DisplayFontParamKind detectFontType(const char*filename) { if(strstr(filename, ".ttf") || strstr(filename, ".TTF")) return displayFontTT; if(strstr(filename, ".pfa") || strstr(filename, ".PFA") || strstr(filename, ".pfb")) return displayFontT1; return displayFontTT; } DisplayFontParam *GFXGlobalParams::getDisplayFont(GString *fontName) { msg(" looking for font %s", fontName->getCString()); char*name = fontName->getCString(); /* see if it is a pdf standard font */ int t; for(t=0;t Couldn't save default font- is the Temp Directory writable?"); } else { msg(" Storing standard PDF font %s at %s", name, pdf2t1map[t].fullfilename); } DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), displayFontT1); dfp->t1.fileName = new GString(pdf2t1map[t].fullfilename); pdf2t1map[t].dfp = dfp; } return pdf2t1map[t].dfp; } } int bestlen = 0x7fffffff; const char*bestfilename = 0; #ifndef HAVE_FONTCONFIG /* if we don't have fontconfig, try a simple filename-comparison approach */ fontfile_t*f = global_fonts; while(f) { if(strstr(f->filename, name)) { if(f->len < bestlen) { bestlen = f->len; bestfilename = f->filename; } } f = f->next; } #endif /* if we didn't find anything up to now, try looking for the font via fontconfig */ char*filename = 0; if(!bestfilename) { filename = fontconfig_searchForFont(name); } else { filename = strdup(bestfilename); } if(filename) { msg(" Font %s maps to %s\n", name, filename); DisplayFontParamKind kind = detectFontType(filename); DisplayFontParam *dfp = new DisplayFontParam(new GString(fontName), kind); if(kind == displayFontTT) { dfp->tt.fileName = new GString(filename); } else { dfp->t1.fileName = new GString(filename); } free(filename); return dfp; } else { msg(" Font %s not found\n", name); return GlobalParams::getDisplayFont(fontName); } } DisplayFontParam *GFXGlobalParams::getDisplayCIDFont(GString *fontName, GString *collection) { DisplayFontParam*dfp = GlobalParams::getDisplayCIDFont(fontName, collection); if(!dfp) { dfp = this->getDisplayFont(fontName); } return dfp; } CharOutputDev::CharOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2) :CommonOutputDev(info, doc, page2page, num_pages, x, y, x1, y1, x2, y2) { this->type3active = 0; this->xref = 0; this->current_text_stroke = 0; this->current_text_clip = 0; this->config_bigchar=0; this->config_extrafontdata = 0; this->config_detectspaces = 1; this->config_space_between_lines = 0; this->config_linkdatafile = 0; this->page2page = 0; this->num_pages = 0; this->links = 0; this->last_link = 0; }; CharOutputDev::~CharOutputDev() { } void CharOutputDev::setParameter(const char*key, const char*value) { if(!strcmp(key,"detectspaces")) { this->config_detectspaces = atoi(value); } else if(!strcmp(key,"space_between_lines")) { this->config_space_between_lines = atoi(value); } else if(!strcmp(key,"extrafontdata")) { this->config_extrafontdata = atoi(value); } else if(!strcmp(key,"linkdatafile")) { this->config_linkdatafile = strdup(value); } } void CharOutputDev::setDevice(gfxdevice_t*dev) { this->device = dev; } static char*getFontName(GfxFont*font) { char*fontid; GString*gstr = font->getName(); char* fname = gstr==0?0:gstr->getCString(); if(fname==0) { char buf[32]; Ref*r=font->getID(); sprintf(buf, "UFONT%d", r->num); fontid = strdup(buf); } else { fontid = strdup(fname); } char*fontname= 0; char* plus = strchr(fontid, '+'); if(plus && plus < &fontid[strlen(fontid)-1]) { fontname = strdup(plus+1); } else { fontname = strdup(fontid); } free(fontid); return fontname; } static void dumpFontInfo(const char*loglevel, GfxFont*font); static int lastdumps[1024]; static int lastdumppos = 0; /* nr = 0 unknown nr = 1 substituting nr = 2 type 3 */ static void showFontError(GfxFont*font, int nr) { Ref*r=font->getID(); int t; for(t=0;tnum) break; if(t < lastdumppos) return; if(lastdumpposnum; if(nr == 0) msg(" The following font caused problems:"); else if(nr == 1) msg(" The following font caused problems (substituting):"); else if(nr == 2) msg(" The following Type 3 Font will be rendered as graphics:"); dumpFontInfo("", font); } static void dumpFontInfo(const char*loglevel, GfxFont*font) { char* id = getFontID(font); char* name = getFontName(font); Ref* r=font->getID(); msg("%s=========== %s (ID:%d,%d) ==========", loglevel, name, r->num,r->gen); GString*gstr = font->getTag(); msg("%s| Tag: %s", loglevel, id); if(font->isCIDFont()) msg("%s| is CID font", loglevel); GfxFontType type=font->getType(); switch(type) { case fontUnknownType: msg("%s| Type: unknown",loglevel); break; case fontType1: msg("%s| Type: 1",loglevel); break; case fontType1C: msg("%s| Type: 1C",loglevel); break; case fontType3: msg("%s| Type: 3",loglevel); break; case fontTrueType: msg("%s| Type: TrueType",loglevel); break; case fontCIDType0: msg("%s| Type: CIDType0",loglevel); break; case fontCIDType0C: msg("%s| Type: CIDType0C",loglevel); break; case fontCIDType2: msg("%s| Type: CIDType2",loglevel); break; } Ref embRef; GBool embedded = font->getEmbeddedFontID(&embRef); char*embeddedName=0; if(font->getEmbeddedFontName()) { embeddedName = font->getEmbeddedFontName()->getCString(); } if(embedded) msg("%s| Embedded id: %s id: %d",loglevel, FIXNULL(embeddedName), embRef.num); gstr = font->getExtFontFile(); if(gstr) msg("%s| External Font file: %s", loglevel, FIXNULL(gstr->getCString())); // Get font descriptor flags. if(font->isFixedWidth()) msg("%s| is fixed width", loglevel); if(font->isSerif()) msg("%s| is serif", loglevel); if(font->isSymbolic()) msg("%s| is symbolic", loglevel); if(font->isItalic()) msg("%s| is italic", loglevel); if(font->isBold()) msg("%s| is bold", loglevel); free(id); free(name); } GBool CharOutputDev::needNonText() { return gFalse; } void CharOutputDev::endPage() { msg(" endPage (GfxOutputDev)"); if(this->previous_link) { if(device->setparameter) { device->setparameter(device, "link", ""); } } if(this->links) { kdtree_destroy(this->links); this->links = 0; } GFXLink*l = this->last_link; while(l) { GFXLink*last = l->last; l->draw(this,device); delete l; l = last; } this->last_link = 0; this->previous_link = 0; } static inline double sqr(double x) {return x*x;} GBool CharOutputDev::upsideDown() { return gTrue; }; GBool CharOutputDev::useDrawChar() { return gTrue; } const char*renderModeDesc[]= {"fill", "stroke", "fill+stroke", "invisible", "clip+fill", "stroke+clip", "fill+stroke+clip", "clip"}; static char tmp_printstr[4096]; char* makeStringPrintable(char*str) { int len = strlen(str); int dots = 0; if(len>=80) { len = 80; dots = 1; } int t; for(t=0;t124) { c = '.'; } tmp_printstr[t] = c; } if(dots) { tmp_printstr[len++] = '.'; tmp_printstr[len++] = '.'; tmp_printstr[len++] = '.'; } tmp_printstr[len] = 0; return tmp_printstr; } void CharOutputDev::updateTextMat(GfxState*state) { } void CharOutputDev::beginString(GfxState *state, GString *s) { int render = state->getRender(); if(current_text_stroke) { msg(" Error: Incompatible change of text rendering to %d while inside cliptext", render); } msg(" beginString(%s) render=%d", makeStringPrintable(s->getCString()), render); } static gfxline_t* mkEmptyGfxShape(double x, double y) { gfxline_t*line = (gfxline_t*)malloc(sizeof(gfxline_t)); line->x = x;line->y = y;line->type = gfx_moveTo;line->next = 0; return line; } void CharOutputDev::drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode charid, int nBytes, Unicode *_u, int uLen) { FontInfo*current_fontinfo = this->info->getFontInfo(state); if(!current_fontinfo || (unsigned)charid >= current_fontinfo->num_glyphs || !current_fontinfo->glyphs[charid]) { msg(" Invalid charid %d for font %p (%d characters)", charid, current_fontinfo, current_fontinfo?current_fontinfo->num_glyphs:0); return; } gfxfont_t*current_gfxfont = current_fontinfo->getGfxFont(); if(!current_fontinfo->seen) { dumpFontInfo("", state->getFont()); device->addfont(device, current_gfxfont); current_fontinfo->seen = 1; } CharCode glyphid = current_fontinfo->glyphs[charid]->glyphid; int render = state->getRender(); gfxcolor_t col = gfxstate_getfillcolor(state); GFXLink*link = 0; if(links) { kdarea_t*a = kdtree_find(this->links, x+dx/2,y+dy/2); if(a) { link = (GFXLink*)a->data; #if 0 if(link) { printf("area [%d %d %d %d] (link [%f %f %f %f]) contains (%f,%f)\n", a->bbox.xmin, a->bbox.ymin, a->bbox.xmax, a->bbox.ymax, link->x1, link->y1, link->x2, link->y2, x+dx/2, y+dy/2 ); } #endif } if(link != previous_link) { previous_link = link; device->setparameter(device, "link", link?link->action:""); } } // check for invisible text -- this is used by Acrobat Capture if (render == RENDER_INVISIBLE || render == RENDER_FILL && state->getFillColorSpace()->isNonMarking() || render == RENDER_STROKE && state->getStrokeColorSpace()->isNonMarking()) { col.a = 0; if(!config_extrafontdata) return; } GfxFont*font = state->getFont(); if(font->getType() == fontType3) { /* type 3 chars are passed as graphics */ msg(" type3 char at %f/%f", x, y); return; } Unicode u = uLen?(_u[0]):0; gfxmatrix_t m = current_fontinfo->get_gfxmatrix(state); this->transformXY(state, x-originX, y-originY, &m.tx, &m.ty); gfxbbox_t bbox; msg(" drawChar(%f,%f,c='%c' (%d), u=%d <%d> '%c') CID=%d render=%d glyphid=%d font=%p size=%f", m.tx, m.ty, (charid&127)>=32?charid:'?', charid, u, uLen, u, font->isCIDFont(), render, glyphid, current_gfxfont, m.m00); gfxglyph_t* gfxglyph = ¤t_gfxfont->glyphs[glyphid]; int space = current_fontinfo->space_char; if(config_extrafontdata && config_detectspaces && space>=0 && m.m00 && !m.m01) { /* space char detection */ //bool different_y = last_char_y - m.ty; bool different_y = m.ty < last_char_y - last_ascent*last_char_y_fontsize || m.ty > last_char_y + last_descent*last_char_y_fontsize; double expected_x = last_char_x + last_char_advance*last_char_x_fontsize; double rightx = m.tx + gfxglyph->advance * m.m00; if(different_y) { expected_x = m.tx - width/2; } if((!different_y || config_space_between_lines) && !last_char_was_space && !current_fontinfo->usesSpaces()) { int space = current_fontinfo->space_char; float width = fmax(m.m00*current_fontinfo->average_advance, last_char_x_fontsize*last_average_advance); if(m.tx - expected_x >= width*4/10) { msg(" There's a %f pixel gap between char %d and char %d (expected no more than %f), I'm inserting a space here", m.tx-expected_x, last_char, glyphid, width*4/10 ); #ifdef VISUALIZE_CHAR_GAPS bbox = gfxline_getbbox(gfxglyph->line); gfxline_t*rect = gfxline_makerectangle(last_char_x,m.ty,m.tx,m.ty+10); gfxcolor_t red = {255,255,0,0}; device->fill(device, rect, &red); gfxline_free(rect); #endif gfxmatrix_t m2 = m; m2.tx = expected_x + (m.tx - expected_x - current_gfxfont->glyphs[space].advance*m.m00)/2; if(m2.tx < expected_x) m2.tx = expected_x; device->drawchar(device, current_gfxfont, space, &col, &m2); if(link) { link->addchar(32); } } } last_average_advance = current_fontinfo->average_advance; last_char_advance = gfxglyph->advance; last_char_x_fontsize = m.m00; last_char_y_fontsize = -m.m11; last_char = glyphid; last_char_x = m.tx; last_char_y = m.ty; last_ascent = current_gfxfont->ascent; last_descent = fmax(current_gfxfont->descent, current_gfxfont->ascent/3); last_char_was_space = GLYPH_IS_SPACE(gfxglyph); if(m.tx < expected_x && rightx < expected_x + 1 && GLYPH_IS_SPACE(gfxglyph)) { msg(" Dropping dedented space char at %f-%f (before %f)", m.tx, rightx, expected_x); return; } } device->drawchar(device, current_gfxfont, glyphid, &col, &m); if(link) { link->addchar(current_gfxfont->glyphs[glyphid].unicode); } } void CharOutputDev::endString(GfxState *state) { } void CharOutputDev::endTextObject(GfxState *state) { } /* the logic seems to be as following: first, beginType3Char is called, with the charcode and the coordinates. if this function returns true, it already knew about the char and has now drawn it. if the function returns false, it's a new char, and type3D0 and/or type3D1 might be called with some parameters. Afterwards, all draw operations until endType3Char are part of the char (which in this moment is at the position first passed to beginType3Char). the char ends with endType3Char. The drawing operations between beginType3Char and endType3Char are somewhat different to the normal ones. For example, the fillcolor equals the stroke color. (Because the stroke color determines the color of a font) */ GBool CharOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode charid, Unicode *u, int uLen) { msg(" beginType3Char %d u=%d", charid, uLen?u[0]:0); type3active = 1; if(config_extrafontdata) { FontInfo*current_fontinfo = info->getFontInfo(state); if(!current_fontinfo) { msg(" Couldn't find font info"); return gFalse; } gfxfont_t*current_gfxfont = current_fontinfo->getGfxFont(); /*m.m00*=INTERNAL_FONT_SIZE; m.m01*=INTERNAL_FONT_SIZE; m.m10*=INTERNAL_FONT_SIZE; m.m11*=INTERNAL_FONT_SIZE;*/ if(!current_fontinfo || (unsigned)charid >= current_fontinfo->num_glyphs || !current_fontinfo->glyphs[charid]) { msg(" Invalid type3 charid %d for font %p", charid, current_fontinfo); return gFalse; } gfxcolor_t col={0,0,0,0}; CharCode glyphid = current_fontinfo->glyphs[charid]->glyphid; gfxmatrix_t m = current_fontinfo->get_gfxmatrix(state); this->transformXY(state, 0, 0, &m.tx, &m.ty); device->drawchar(device, current_gfxfont, glyphid, &col, &m); } /* the character itself is going to be passed using the draw functions */ return gFalse; /* gTrue= is_in_cache? */ } void CharOutputDev::type3D0(GfxState *state, double wx, double wy) { } void CharOutputDev::type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury) { } void CharOutputDev::endType3Char(GfxState *state) { type3active = 0; msg(" endType3Char"); } void CharOutputDev::beginPage(GfxState *state, int pageNum) { this->currentpage = pageNum; this->last_char_was_space = 1; this->last_char_y = 0; this->last_char_y_fontsize = 0; this->last_ascent = 0; this->last_descent = 0; this->previous_link = 0; } void GFXLink::draw(CharOutputDev*out, gfxdevice_t*dev) { int x1,y1,x2,y2; out->transformXY_stateless(this->x1, this->y1, &x1, &y1); out->transformXY_stateless(this->x2, this->y2, &x2, &y2); gfxline_t points[5]; points[0].type = gfx_moveTo; points[0].x = x1; points[0].y = y1; points[0].next = &points[1]; points[1].type = gfx_lineTo; points[1].x = x1; points[1].y = y2; points[1].next = &points[2]; points[2].type = gfx_lineTo; points[2].x = x2; points[2].y = y2; points[2].next = &points[3]; points[3].type = gfx_lineTo; points[3].x = x2; points[3].y = y1; points[3].next = &points[4]; points[4].type = gfx_lineTo; points[4].x = x1; points[4].y = y1; points[4].next = 0; msg(" drawing link %.2f/%.2f %.2f/%.2f %.2f/%.2f %.2f/%.2f to %s (\"%s\")", points[0].x, points[0].y, points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y, action, text); dev->drawlink(dev, points, action, text); } void GFXLink::addchar(int unicode) { msg(" Adding '%c' (%d) to link %s", unicode, unicode, action); char buf[8]; int l = writeUTF8(unicode, buf); while(size+l+1>=buf_size) { buf_size += 32; text = (char*)rfx_realloc(text, buf_size); } strcpy(text+size, buf); size += l; } GFXLink::GFXLink(GFXLink*last, const char*action, double x1, double y1, double x2, double y2) { this->buf_size = 0; this->size = 0; this->text = 0; this->last = last; this->action = strdup(action); this->x1 = x1; this->y1 = y1; this->x2 = x2; this->y2 = y2; } GFXLink::~GFXLink() { free((void*)this->action); if(this->text) free(this->text); this->text = 0; this->action = 0; } void CharOutputDev::processLink(Link *link, Catalog *catalog) { double x1, y1, x2, y2; msg(" drawlink"); link->getRect(&x1, &y1, &x2, &y2); LinkAction*actionobj=link->getAction(); char buf[128]; char*s = 0; const char*type = "-?-"; char*named = 0; int page = -1; msg(" drawlink actionobj=%d", actionobj->getKind()); switch(actionobj->getKind()) { case actionGoTo: { type = "GoTo"; LinkGoTo *ha=(LinkGoTo *)link->getAction(); LinkDest *dest=NULL; if (ha->getDest()==NULL) dest=catalog->findDest(ha->getNamedDest()); else dest=ha->getDest()->copy(); if (dest){ if (dest->isPageRef()){ Ref pageref=dest->getPageRef(); page=catalog->findPage(pageref.num,pageref.gen); } else page=dest->getPageNum(); sprintf(buf, "%d", page); s = strdup(buf); delete dest; } } break; case actionGoToR: { type = "GoToR"; LinkGoToR*l = (LinkGoToR*)actionobj; GString*g = l->getFileName(); if(g) s = strdup(g->getCString()); if(!s) { /* if the GoToR link has no filename, then try to find a refernce in the *local* file */ GString*g = l->getNamedDest(); if(g) s = strdup(g->getCString()); } } break; case actionNamed: { type = "Named"; LinkNamed*l = (LinkNamed*)actionobj; GString*name = l->getName(); if(name) { s = strdup(name->lowerCase()->getCString()); named = name->getCString(); if(!strchr(s,':')) { if(strstr(s, "next") || strstr(s, "forward")) { page = currentpage + 1; } else if(strstr(s, "prev") || strstr(s, "back")) { page = currentpage - 1; } else if(strstr(s, "last") || strstr(s, "end")) { if(this->page2page && this->num_pages) { page = this->page2page[this->num_pages-1]; } } else if(strstr(s, "first") || strstr(s, "top")) { page = 1; } } } } break; case actionLaunch: { type = "Launch"; LinkLaunch*l = (LinkLaunch*)actionobj; GString * str = new GString(l->getFileName()); GString * params = l->getParams(); if(params) str->append(params); s = strdup(str->getCString()); delete str; } break; case actionURI: { char*url = 0; type = "URI"; LinkURI*l = (LinkURI*)actionobj; GString*g = l->getURI(); if(g) { url = g->getCString(); s = strdup(url); } } break; case actionUnknown: { type = "Unknown"; LinkUnknown*l = (LinkUnknown*)actionobj; s = strdup(""); } break; default: { msg(" Unknown link type!"); break; } } if(!s) s = strdup("-?-"); if(!getGfxGlobals()->linkinfo && (page || s)) { msg(" File contains links"); getGfxGlobals()->linkinfo = 1; } char*action = 0; if(page>0) { int t; int lpage = -1; for(t=1;t<=this->num_pages;t++) { if(this->page2page[t]==page) { lpage = t; break; } } if(lpage<0) { lpage = page; } char buf[80]; sprintf(buf, "page%d", lpage); action = buf; } else if(s) { action = s; if(this->config_linkdatafile) { FILE*fi = fopen(config_linkdatafile, "ab+"); fprintf(fi, "%s\n", s); fclose(fi); } } this->last_link = new GFXLink(this->last_link, action, x1, y1, x2, y2); if(!this->links) { this->links = kdtree_new(); } kdtree_add_box(this->links, x1,y1,x2,y2, this->last_link); #if 0 printf("adding link %p at %f %f %f %f to tree\n", this->last_link, x1, y1, x2, y2); #endif msg(" storing \"%s\" link to \"%s\" (%f %f %f %f)", type, FIXNULL(action), x1, y1, x2, y2); free(s);s=0; } void CharOutputDev::saveState(GfxState *state) { msg(" saveState %p", state); updateAll(state); }; void CharOutputDev::restoreState(GfxState *state) { updateAll(state); } void CharOutputDev::updateFont(GfxState *state) { GfxFont* gfxFont = state->getFont(); if (!gfxFont) { return; } char*id = getFontID(gfxFont); msg(" Updating font to %s", FIXNULL(id)); free(id);id=0; if(gfxFont->getType() == fontType3) { infofeature("Type3 fonts"); } updateTextMat(state); } static const char* dirseparator() { #ifdef WIN32 return "\\"; #else return "/"; #endif } void addGlobalFont(const char*filename) { fontfile_t* f = (fontfile_t*)malloc(sizeof(fontfile_t)); memset(f, 0, sizeof(fontfile_t)); f->filename = filename; int len = strlen(filename); char*r1 = strrchr((char*)filename, '/'); char*r2 = strrchr((char*)filename, '\\'); if(r2>r1) r1 = r2; if(r1) { len = strlen(r1+1); } f->len = len; msg(" Adding font \"%s\".", filename); if(global_fonts_next) { global_fonts_next->next = f; global_fonts_next = global_fonts_next->next; } else { global_fonts_next = global_fonts = f; } } void addGlobalLanguageDir(const char*dir) { #ifdef HAVE_POPPLER msg(" NOT adding %s to language pack directories (not implemented with poppler)", dir); #else msg(" Adding %s to language pack directories", dir); FILE*fi = 0; char* config_file = (char*)malloc(strlen(dir) + 1 + sizeof("add-to-xpdfrc") + 1); strcpy(config_file, dir); strcat(config_file, dirseparator()); strcat(config_file, "add-to-xpdfrc"); fi = fopen(config_file, "rb"); if(!fi) { msg(" Could not open %s", config_file); return; } globalParams->parseFile(new GString(config_file), fi); fclose(fi); #endif } void addGlobalFontDir(const char*dirname) { #ifdef HAVE_DIRENT_H DIR*dir = opendir(dirname); if(!dir) { msg(" Couldn't open directory %s", dirname); return; } struct dirent*ent; int fonts = 0; while(1) { ent = readdir (dir); if (!ent) break; int l; char*name = ent->d_name; char type = 0; if(!name) continue; l=strlen(name); if(l<4) continue; if(!strncasecmp(&name[l-4], ".pfa", 4)) type=1; if(!strncasecmp(&name[l-4], ".pfb", 4)) type=3; if(!strncasecmp(&name[l-4], ".ttf", 4)) type=2; if(type) { char*fontname = (char*)malloc(strlen(dirname)+strlen(name)+2); strcpy(fontname, dirname); strcat(fontname, dirseparator()); strcat(fontname, name); addGlobalFont(fontname); fonts++; } } msg(" Added %s to font directories (%d fonts)", dirname, fonts); closedir(dir); #else msg(" No dirent.h"); #endif } swftools_0.9.2+git20130725.orig/lib/pdf/fonts.h0000644000175000017500000000322612216332640020147 0ustar gawaingawain#ifndef __fonts_h__ #define __fonts_h__ #ifdef __cplusplus extern "C" { #endif extern char* d050000l_afm; extern int d050000l_afm_len; extern char* d050000l_pfb; extern int d050000l_pfb_len; extern char* n019003l_afm; extern int n019003l_afm_len; extern char* n019003l_pfb; extern int n019003l_pfb_len; extern char* n019004l_afm; extern int n019004l_afm_len; extern char* n019004l_pfb; extern int n019004l_pfb_len; extern char* n019023l_afm; extern int n019023l_afm_len; extern char* n019023l_pfb; extern int n019023l_pfb_len; extern char* n019024l_afm; extern int n019024l_afm_len; extern char* n019024l_pfb; extern int n019024l_pfb_len; extern char* n021003l_afm; extern int n021003l_afm_len; extern char* n021003l_pfb; extern int n021003l_pfb_len; extern char* n021004l_afm; extern int n021004l_afm_len; extern char* n021004l_pfb; extern int n021004l_pfb_len; extern char* n021023l_afm; extern int n021023l_afm_len; extern char* n021023l_pfb; extern int n021023l_pfb_len; extern char* n021024l_afm; extern int n021024l_afm_len; extern char* n021024l_pfb; extern int n021024l_pfb_len; extern char* n022003l_afm; extern int n022003l_afm_len; extern char* n022003l_pfb; extern int n022003l_pfb_len; extern char* n022004l_afm; extern int n022004l_afm_len; extern char* n022004l_pfb; extern int n022004l_pfb_len; extern char* n022023l_afm; extern int n022023l_afm_len; extern char* n022023l_pfb; extern int n022023l_pfb_len; extern char* n022024l_afm; extern int n022024l_afm_len; extern char* n022024l_pfb; extern int n022024l_pfb_len; extern char* s050000l_afm; extern int s050000l_afm_len; extern char* s050000l_pfb; extern int s050000l_pfb_len; #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/pdf/cmyk.h0000644000175000017500000000023012216332640017751 0ustar gawaingawain#ifndef __cmyk_h__ #define __cmyk_h__ void convert_cmyk2rgb(float c,float m,float y,float k, unsigned char*r, unsigned char*g, unsigned char*b); #endif swftools_0.9.2+git20130725.orig/lib/pdf/InfoOutputDev.h0000644000175000017500000001332412216332640021571 0ustar gawaingawain/* InfoOutputDev.h A special output device which collects information about a PDF file, like fonts, Type3 glyphs and so on. This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __infooutputdev_h__ #define __infooutputdev_h__ #include "popplercompat.h" #include "GfxFont.h" #include "OutputDev.h" #include "SplashOutputDev.h" #include "Page.h" #ifdef HAVE_POPPLER #include #include #include #include #else #include "xpdf/config.h" #include "SplashTypes.h" #include "SplashPath.h" #include "SplashFont.h" #include "SplashFontFile.h" #endif #ifdef HAVE_POPPLER #include #else #include "GHash.h" #endif #include "../gfxdevice.h" #include "../gfxtools.h" #include "../gfxfont.h" #include "../q.h" #define INTERNAL_FONT_SIZE 1024.0 #define GLYPH_IS_SPACE(g) ((!(g)->line || ((g)->line->type==gfx_moveTo && !(g)->line->next)) && (g)->advance) struct GlyphInfo { SplashPath*path; int unicode; int glyphid; double advance; double x1,y1,x2,y2; double advance_max; }; typedef struct _fontclass { float m00,m01,m10,m11; char*id; unsigned char alpha; } fontclass_t; class FontInfo { gfxfont_t*gfxfont; char*id; double scale; gfxfont_t* createGfxFont(); public: fontclass_t*fontclass; FontInfo(fontclass_t*fontclass); ~FontInfo(); gfxmatrix_t get_gfxmatrix(GfxState*state); gfxfont_t* getGfxFont(); char usesSpaces(); double lastx,lasty; int lastchar; double lastadvance; double ascender,descender; void grow(int size); void resetPositioning(); GfxFont*font; double max_size; int num_glyphs; GlyphInfo**glyphs; char seen; int space_char; float average_advance; int num_chars; int num_spaces; }; extern char*getFontID(GfxFont*font); extern gfxmatrix_t gfxmatrix_from_state(GfxState*state); class InfoOutputDev: public OutputDev { GlyphInfo* currentglyph; SplashOutputDev*splash; char previous_was_char; Page *page; dict_t*fontcache; FontInfo*last_font; FontInfo*current_type3_font; SplashFont*current_splash_font; public: int x1,y1,x2,y2; int num_links; int num_ppm_images; int num_jpeg_images; int num_fonts; int num_polygons; int num_chars; int num_layers; int num_text_breaks; double average_char_size; void dumpfonts(gfxdevice_t*dev); FontInfo* getFontInfo(GfxState*state); InfoOutputDev(XRef*xref); virtual ~InfoOutputDev(); virtual GBool useTilingPatternFill(); virtual GBool upsideDown(); virtual GBool needNonText(); virtual GBool useDrawChar(); virtual GBool interpretType3Chars(); virtual GBool checkPageSlice(Page *page, double hDPI, double vDPI, int rotate, GBool useMediaBox, GBool crop, int sliceX, int sliceY, int sliceW, int sliceH, GBool printing, Catalog *catalog, GBool (*abortCheckCbk)(void *data) = NULL, void *abortCheckCbkData = NULL); virtual void startPage(int pageNum, GfxState *state); virtual void endPage(); virtual void drawLink(Link *link, Catalog *catalog); virtual void updateFont(GfxState *state); virtual void saveState(GfxState *state); virtual void restoreState(GfxState *state); virtual GBool beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, Unicode *u, int uLen); virtual void type3D0(GfxState *state, double wx, double wy); virtual void type3D1(GfxState *state, double wx, double wy, double llx, double lly, double urx, double ury); virtual void endType3Char(GfxState *state); virtual void fill(GfxState *state); virtual void eoFill(GfxState *state); virtual void drawChar(GfxState *state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode *u, int uLen); virtual void updateTextMat(GfxState*state); virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, int width, int height, GBool invert, POPPLER_INTERPOLATE GBool inlineImg); virtual void drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE int *maskColors, GBool inlineImg); virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GBool maskInvert POPPLER_MASK_INTERPOLATE); virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, POPPLER_INTERPOLATE Stream *maskStr, int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap POPPLER_MASK_INTERPOLATE); private: FontInfo* getOrCreateFontInfo(GfxState*state); }; #endif //__infooutputdev_h__ swftools_0.9.2+git20130725.orig/lib/pdf/bbox.h0000644000175000017500000000070312216332640017745 0ustar gawaingawain#ifndef __bbox_h__ #define __bbox_h__ #ifdef __cplusplus extern "C" { #endif typedef struct _ibbox { int xmin,ymin,xmax,ymax; struct _ibbox*next; } ibbox_t; ibbox_t ibbox_clip(ibbox_t* outer, ibbox_t* inner); ibbox_t* ibbox_new(int x1, int y1, int x2, int y2, int rowsize); void ibbox_destroy(ibbox_t*b); ibbox_t*get_bitmap_bboxes(unsigned char*alpha, int width, int height, int rowsize); #ifdef __cplusplus } #endif #endif //__bbox_h__ swftools_0.9.2+git20130725.orig/lib/pdf/popplercompat.cc0000644000175000017500000000212512216332640022036 0ustar gawaingawain#include #include #include #include "popplercompat.h" #ifdef HAVE_POPPLER static char* getTempDir() { #ifdef WIN32 char*dir = getenv("TMP"); if(!dir) dir = getenv("TEMP"); if(!dir) dir = getenv("tmp"); if(!dir) dir = getenv("temp"); if(!dir) dir = "C:\\"; #else char* dir = "/tmp/"; #endif return dir; } char* mktmpname(char*ptr) { static char tmpbuf[128]; char*dir = getTempDir(); int l = strlen(dir); char*sep = ""; if(!ptr) ptr = tmpbuf; if(l && dir[l-1]!='/' && dir[l-1]!='\\') { #ifdef WIN32 sep = "\\"; #else sep = "/"; #endif } // used to be mktemp. This does remove the warnings, but // It's not exactly an improvement. #ifdef HAVE_LRAND48 sprintf(ptr, "%s%s%08x%08x",dir,sep,(unsigned int)lrand48(),(unsigned int)lrand48()); #else # ifdef HAVE_RAND sprintf(ptr, "%s%s%08x%08x",dir,sep,rand(),rand()); # else static int count = 1; sprintf(ptr, "%s%s%08x%04x%04x",dir,sep,time(0),(unsigned int)tmpbuf^((unsigned int)tmpbuf)>>16,count); count ++; # endif #endif return ptr; } #endif swftools_0.9.2+git20130725.orig/lib/pdf/XMLOutputDev.h0000644000175000017500000000213512216332640021334 0ustar gawaingawain/* XMLOutputDev.h This file is part of swftools. Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __xmloutputdev_h__ #define __xmloutputdev_h__ #include "OutputDev.h" #include "TextOutputDev.h" class XMLOutputDev: public TextOutputDev { public: XMLOutputDev(char*filename); virtual void startPage(int pageNum, GfxState *state); virtual void endPage(); virtual ~XMLOutputDev(); private: FILE*out; }; #endif //__xmloutputdev_h__ swftools_0.9.2+git20130725.orig/lib/pdf/pdf2jpeg.c0000644000175000017500000001072012216332640020507 0ustar gawaingawain/* pdf2jpeg.c Converts a pdf page to a jpeg. Copyright (c) 2010 Matthias Kramm Copyright (c) 1998-2009 Derek Noonburg Swftools 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. Swftools 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 swftools; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "parseargs.h" #include "gmem.h" #include "GString.h" #include "GlobalParams.h" #include "Object.h" #include "PDFDoc.h" #include "SplashBitmap.h" #include "Splash.h" #include "SplashOutputDev.h" #include "config.h" #include "../jpeg.h" static int page = 1; static int width = 0; static int resolution = 150; static int quality = 95; static char ownerPassword[33] = ""; static char userPassword[33] = ""; static char cfgFileName[256] = ""; static GBool printVersion = gFalse; static GBool printHelp = gFalse; static char output[256] = "output.jpg"; static ArgDesc argDesc[] = { {"-p", argInt, &page, 0, "first page to print"}, {"-r", argInt, &resolution, 0, "resolution, in DPI (default is 150)"}, {"-q", argInt, &quality, 0, "jpeg conversion quality"}, {"-w", argInt, &width, 0, "zoom to this width"}, {"-o", argString, &output, sizeof(output), "resolution, in DPI (default is 150)"}, {"-opw", argString, ownerPassword, sizeof(ownerPassword), "owner password (for encrypted files)"}, {"-upw", argString, userPassword, sizeof(userPassword), "user password (for encrypted files)"}, {"-cfg", argString, cfgFileName, sizeof(cfgFileName), "configuration file to use in place of .xpdfrc"}, {"-v", argFlag, &printVersion, 0, "print copyright and version info"}, {"-h", argFlag, &printHelp, 0, "print usage information"}, {"-help", argFlag, &printHelp, 0, "print usage information"}, {"--help", argFlag, &printHelp, 0, "print usage information"}, {"-?", argFlag, &printHelp, 0, "print usage information"}, {NULL} }; int main(int argc, char *argv[]) { PDFDoc *doc; GString *fileName; GString *ownerPW, *userPW; SplashColor paperColor; SplashOutputDev *splashOut; GBool ok; int exitCode; int pg; exitCode = 99; // parse args ok = parseArgs(argDesc, &argc, argv); if (!ok || argc != 2 || printVersion || printHelp) { fprintf(stderr, "pdf2jpeg version %s\n", xpdfVersion); fprintf(stderr, "%s\n", xpdfCopyright); if (!printVersion) { printUsage("pdf2jpeg", " -o ", argDesc); } goto err0; } fileName = new GString(argv[1]); // read config file globalParams = new GlobalParams(cfgFileName); globalParams->setupBaseFonts(NULL); // open PDF file if (ownerPassword[0]) { ownerPW = new GString(ownerPassword); } else { ownerPW = NULL; } if (userPassword[0]) { userPW = new GString(userPassword); } else { userPW = NULL; } doc = new PDFDoc(fileName, ownerPW, userPW); if (userPW) { delete userPW; } if (ownerPW) { delete ownerPW; } if (!doc->isOk()) { exitCode = 1; goto err1; } paperColor[0] = paperColor[1] = paperColor[2] = 0xff; splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); splashOut->startDoc(doc->getXRef()); if(page>=1 && page<=doc->getNumPages()) { double r = resolution; if(width) { int old_width = doc->getPageCropWidth(page); r = 72.0*width/old_width; } doc->displayPage(splashOut, page, r, r, 0, gFalse, gTrue, gFalse); SplashBitmap*bitmap = splashOut->getBitmap(); if(bitmap) { Guchar*rgb = bitmap->getDataPtr(); int width = bitmap->getWidth(); int height = bitmap->getHeight(); jpeg_save(rgb, width, height, quality, output); } } delete splashOut; exitCode = 0; // clean up err1: delete doc; delete globalParams; err0: // check for memory leaks Object::memCheck(stderr); gMemReport(stderr); return exitCode; } swftools_0.9.2+git20130725.orig/lib/pdf/aconf.h0000644000175000017500000000062112216332640020100 0ustar gawaingawain/* aconf.h. Generated by configure. */ /* * aconf.h * * Copyright 2002 Glyph & Cog, LLC */ #ifndef ACONF_H #define ACONF_H #include "../../config.h" #define SYSTEM_XPDFRC "/etc/xpdf/xpdfrc" #define HAVE_STRINGS_H 1 #define TEXTOUT_WORD_LIST 1 // todo: // // HAVE_STRINGS_H // HAVE_BSTRING_H // HAVE_SYS_SELECT_H // SELECT_TAKES_INT // HAVE_FSEEK64 // HAVE_MKSTEMPS // HAVE_FSEEKO 1 #endif swftools_0.9.2+git20130725.orig/lib/pdf/CommonOutputDev.cc0000644000175000017500000000733212216332640022266 0ustar gawaingawain#include "popplercompat.h" #include "CommonOutputDev.h" #include "../log.h" #include "../gfxdevice.h" int config_break_on_warning = 0; CommonOutputDev::CommonOutputDev(InfoOutputDev*info, PDFDoc*doc, int*page2page, int num_pages, int x, int y, int x1, int y1, int x2, int y2) { this->info = info; this->doc = doc; this->xref = doc->getXRef(); if(x2user_movex = x; this->user_movey = y; this->user_clipx1 = x1; this->user_clipy1 = y1; this->user_clipx2 = x2; this->user_clipy2 = y2; } void CommonOutputDev::startPage(int pageNum, GfxState*state) { double x1,y1,x2,y2; PDFRectangle *r = this->page->getCropBox(); state->transform(r->x1,r->y1,&x1,&y1); state->transform(r->x2,r->y2,&x2,&y2); if(x2movex = -(int)x1 - this->user_clipx1 + this->user_movex; this->movey = -(int)y1 - this->user_clipy1 + this->user_movey; if(this->user_clipx1|this->user_clipy1|this->user_clipx2|this->user_clipy2) { this->width = this->user_clipx2 - this->user_clipx1; this->height = this->user_clipy2 - this->user_clipy1; } else { this->width = x2-x1; this->height = y2-y1; } beginPage(state, pageNum); } void CommonOutputDev::transformXY(GfxState*state, double x, double y, double*nx, double*ny) { state->transform(x,y,nx,ny); *nx += movex; *ny += movey; } void CommonOutputDev::transformXY_stateless(double x, double y, int*xout, int*yout) { cvtUserToDev(x, y, xout, yout); *xout += movex; *yout += movey; } GBool CommonOutputDev::interpretType3Chars() { return gTrue; } GFXOutputGlobals::GFXOutputGlobals() { this->featurewarnings = 0; this->jpeginfo = 0; this->textmodeinfo = 0; this->linkinfo = 0; this->pbminfo = 0; } GFXOutputGlobals::~GFXOutputGlobals() { feature_t*f = this->featurewarnings; while(f) { feature_t*next = f->next; if(f->string) { free(f->string);f->string =0; } f->next = 0; free(f); f = next; } this->featurewarnings = 0; } static GFXOutputGlobals*gfxglobals=0; static void showfeature(const char*feature, char fully, char warn) { if(!gfxglobals) gfxglobals = new GFXOutputGlobals(); feature_t*f = gfxglobals->featurewarnings; while(f) { if(!strcmp(feature, f->string)) return; f = f->next; } f = (feature_t*)malloc(sizeof(feature_t)); f->string = strdup(feature); f->next = gfxglobals->featurewarnings; gfxglobals->featurewarnings = f; if(warn) { msg(" %s not yet %ssupported!",feature,fully?"fully ":""); } else { msg(" File contains %s",feature); } } void warnfeature(const char*feature,char fully) { showfeature(feature,fully,1); if(config_break_on_warning) { msg(" Aborting conversion due to unsupported feature"); exit(1); } } void infofeature(const char*feature) { showfeature(feature,0,0); } GFXOutputGlobals* getGfxGlobals() { if(!gfxglobals) gfxglobals = new GFXOutputGlobals(); return gfxglobals; } gfxcolor_t gfxstate_getfillcolor(GfxState * state) { GfxRGB rgb; double opaq = state->getFillOpacity(); state->getFillRGB(&rgb); gfxcolor_t col; col.r = colToByte(rgb.r); col.g = colToByte(rgb.g); col.b = colToByte(rgb.b); col.a = (unsigned char)(opaq*255); return col; } bool text_matrix_is_skewed(GfxState * state) { double*ctm = state->getCTM(); double*tm = state->getTextMat(); double m00 = ctm[0]*tm[0] + ctm[2]*tm[1]; double m01 = ctm[1]*tm[0] + ctm[3]*tm[1]; double m10 = ctm[0]*tm[2] + ctm[2]*tm[3]; double m11 = ctm[1]*tm[2] + ctm[3]*tm[3]; return (m00<0 || m10<0); } swftools_0.9.2+git20130725.orig/lib/python/0002755000175000017500000000000012216332657017424 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/python/Makefile.in0000644000175000017500000000602112216332640021456 0ustar gawaingawaintop_builddir = ../.. srcdir = @srcdir@ top_srcdir = @top_srcdir@ include ../../Makefile.common all: gfx.$(SLEXT) static: SWF$(A) gfx$(A) exe: mypython$(E) swfpython$(E) testmem$(E) primitives.$(O): primitives.c primitives.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c primitives.c -o primitives.$(O) tagmap.$(O): tagmap.c tagmap.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c tagmap.c -o tagmap.$(O) taglist.$(O): taglist.c taglist.h tagmap.h tag.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c taglist.c -o taglist.$(O) tag.$(O): tag.c tag.h tagmap.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c tag.c -o tag.$(O) tags.$(O): tags.c tags.h tagmap.h tag.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c tags.c -o tags.$(O) image.$(O): image.c image.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c image.c -o image.$(O) action.$(O): action.c action.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c action.c -o action.$(O) pyutils.$(O): pyutils.c pyutils.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c pyutils.c -o pyutils.$(O) gfx.$(O): gfx.c $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c gfx.c -o gfx.$(O) SWF.$(O): SWF.c pyutils.h primitives.h taglist.h $(C) -Wall -Wno-unused -fPIC $(PYTHON_INCLUDES) -c SWF.c -o SWF.$(O) SWF_OBJS=SWF.$(O) taglist.$(O) tag.$(O) image.$(O) tags.$(O) tagmap.$(O) action.$(O) primitives.$(O) pyutils.$(O) SWF_DEPS=../librfxswf$(A) ../libbase$(A) SWF.$(SLEXT): $(SWF_OBJS) $(SWF_DEPS) Makefile $(L) -g $(SHARED) $(SWF_OBJS) $(SWF_DEPS) -o SWF.$(SLEXT) $(PYTHON_LIB) $(LIBS) SWF$(A): $(SWF_OBJS) $(SWF_DEPS) Makefile $(AR) cru SWF$(A) $(SWF_OBJS) $(SWF_DEPS) $(RANLIB) SWF$(A) GFX_DEPS=../libgfxpdf$(A) ../libgfxswf$(A) ../librfxswf$(A) ../libgfx$(A) ../libbase$(A) gfx.$(SLEXT): gfx.$(O) $(GFX_DEPS) Makefile $(L) -g $(SHARED) gfx.$(O) -o gfx.$(SLEXT) $(GFX_DEPS) $(PYTHON_LIB) $(LIBS) $(CXXLIBS) gfx$(A): gfx.$(O) $(GFX_DEPS) Makefile mkdir -p tmp ar cru gfx$(A) gfx.$(O) for file in $(GFX_DEPS);do rm -f tmp/*;cd tmp;ar x ../$$file || cp ../$$file .;cd ..;$(AR) q gfx$(A) tmp/*.$(O) || break;done $(RANLIB) gfx$(A) #TODO: install: # for debugging: mypython$(E): mypython.c Makefile $(L) -Wno-redundant-decls -g $(PYTHON_INCLUDES) mypython.c -o mypython$(E) $(PYTHON_LIB) swfpython$(E): swfpython.c Makefile primitives.$(O) tagmap.$(O) taglist.$(O) tag.$(O) tags.$(O) action.$(O) pyutils.$(O) SWF.$(O) $(L) -Wno-redundant-decls -g $(PYTHON_INCLUDES) swfpython.c -o swfpython$(E) $(PYTHON_LIB) ../librfxswf$(A) ../png.$(O) $(LIBS) testmem$(E): testmem.c Makefile $(L) $(PYTHON_INCLUDES) testmem.c -o testmem$(E) $(PYTHON_LIB) $(LIBS) test: test6 test1: SWF.$(SLEXT) ./test_create.py swfdump -p tmp/test.swf test2: SWF.$(SLEXT) ./test_combine.py swfdump -u -p tmp/combined.swf test3: SWF.$(SLEXT) ./test_simple.py test4: SWF.$(SLEXT) ./test_movie.py swfdump -u -p tmp/test.swf test5: SWF.$(SLEXT) ./test_image.py swfdump -u -p tmp/test.swf test6: SWF.$(SLEXT) ./test_sprite.py clean: rm -f *.o *.obj *.so mypython swfpython .PHONY: test test1 test2 static all exe swftools_0.9.2+git20130725.orig/lib/python/image.c0000644000175000017500000001035212216332640020641 0ustar gawaingawain#include #ifdef HAVE_STAT #undef HAVE_STAT #endif //#include "/usr/include/python2.3/Imaging.h" #include "../../config.h" #ifdef HAVE_PYTHON_IMAGING #include #endif #include "pyutils.h" #undef HAVE_STAT #include "../rfxswf.h" /* redefine the ImagingObject struct defined in _imagingmodule.c */ /* there should be a better way to do this... */ typedef struct { PyObject_HEAD #ifdef HAVE_PYTHON_IMAGING Imaging image; #endif } ImagingObject; int image_getWidth(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; return image->image->xsize; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } int image_getHeight(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; return image->image->ysize; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } int image_getBPP(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; if(!strcmp(image->image->mode, "1") || !strcmp(image->image->mode, "L") || !strcmp(image->image->mode, "P")) { return 8; } if(!strcmp(image->image->mode, "I") || !strcmp(image->image->mode, "F")) { return 32; } if(!strcmp(image->image->mode, "RGB") || !strcmp(image->image->mode, "RGBA") || !strcmp(image->image->mode, "CMYK") || !strcmp(image->image->mode, "YCbCr")) { return 32; } PyErr_SetString(PyExc_Exception, setError("Unknown image format (%s).", image->image->mode)); return 0; #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); return 0; #endif } RGBA* image_toRGBA(PyObject*_image) { #ifdef HAVE_PYTHON_IMAGING if(strcmp(_image->ob_type->tp_name, "ImagingCore")) { PyErr_SetString(PyExc_Exception, setError("not an image: %s", _image->ob_type->tp_name)); return 0; } ImagingObject*image = (ImagingObject*)_image; printf("mode: %s\n", image->image->mode); printf("depth: %d\n", image->image->depth); printf("bands: %d\n", image->image->bands); printf("xsize: %d\n", image->image->xsize); printf("ysize: %d\n", image->image->ysize); int bpp = image_getBPP(_image); if(!bpp) return 0; RGBA*rgba = (RGBA*)malloc(image->image->xsize * image->image->ysize * sizeof(RGBA)); if(!strcmp(image->image->mode, "RGBA")) { int y,ymax=image->image->ysize; int width = image->image->xsize; RGBA*dest = rgba; for(y=0;yimage->image32[y]); int x; for(x=0;ximage->mode)); #else PyErr_SetString(PyExc_Exception, "imaging not compiled in"); #endif return 0; } #ifdef HAVE_PYTHON_IMAGING extern PyObject*PyImagingNew(Imaging imOut); #endif PyObject* rgba_to_image(RGBA*rgba, int width, int height) { #ifdef HAVE_PYTHON_IMAGING #ifndef WIN32 Imaging img = ImagingNew("RGBA", width, height); int y; if(!img->image32) { fprintf(stderr, "No array allocated!\n"); return 0; } for(y=0;yimage32[y]); RGBA* src = &rgba[width*y]; int x; for(x=0;x 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 */ #ifndef __tagmap_h__ #define __tagmap_h__ #include #undef HAVE_STAT #include "../rfxswf.h" extern PyTypeObject TagMapClass; int tagmap_obj2id(PyObject* self, PyObject* obj); PyObject* tagmap_id2obj(PyObject* self, int _id); int tagmap_add(PyObject* self, PyObject* obj); void tagmap_addMapping(PyObject*self, int id, PyObject*obj); PyObject* tagmap_getObjectList(PyObject* self); PyObject* tagmap_new(); #endif swftools_0.9.2+git20130725.orig/lib/python/pyutils.c0000644000175000017500000000360212216332640021270 0ustar gawaingawain#include #include #include #include #include char* setError(char*format, ...) { char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } return strdup(buf); } static int verbose = 0; void mylog(char*format, ...) { char buf[1024]; int l; va_list arglist; if(!verbose) return; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); l = strlen(buf); while(l && buf[l-1]=='\n') { buf[l-1] = 0; l--; } fprintf(stderr, "[SWF] %s\n", buf); fflush(stderr); } #define PY_NONE Py_BuildValue("s", 0) PyObject* FindMethodMore(PyObject*ret, PyMethodDef f[], PyObject*self, char* a) { if(ret==NULL) { ret = Py_FindMethod(f, self, a); } else { if(!strcmp(a, "__methods__")) { /* we are being dir()ed. Complete the function table */ PyObject* add = Py_FindMethod(f, self, a); int t; mylog("taglist_getattr: append common funtions %08x %08x\n", ret, add); for(t=0;t #define PY_NONE Py_BuildValue("s", 0) extern int verbose; void setVerbosity(int verbose); char* setError(char*format, ...); void mylog(char*format, ...); PyObject* FindMethodMore(PyObject*ret, PyMethodDef f[], PyObject*self, char* a); void dummy_dealloc(PyObject* self); PyMethodDef* addMethods(PyMethodDef*obj1, PyMethodDef*obj2); #define PY_CHECK_TYPE(o,c) ((o)->ob_type == (c)) #define PY_ASSERT_TYPE(o,c) {if((o)->ob_type != (c)) {printf("Invalid type: %08x(%d)", (int)(o), (o)->ob_refcnt);exit(1);}} #define PY_ERROR(s,args...) (PyErr_SetString(PyExc_Exception, setError(s, ## args)),NULL) #define PY_TYPE(o) ((o)->ob_type->tp_name) #endif swftools_0.9.2+git20130725.orig/lib/python/action.h0000644000175000017500000000222512216332640021041 0ustar gawaingawain/* action.h Python wrapper for librfxswf- actionscript stuff (header) Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __action_h__ #define __action_h__ #include #undef HAVE_STAT #include "../rfxswf.h" extern PyTypeObject ActionClass; PyObject* f_Action(PyObject* self, PyObject* args, PyObject* kwargs); ActionTAG* action_getAction(PyObject* self); PyMethodDef* action_getMethods(); #endif swftools_0.9.2+git20130725.orig/lib/python/tag.c0000644000175000017500000003123112216332640020331 0ustar gawaingawain#include #undef HAVE_STAT #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" #include "primitives.h" #include "action.h" #include "tag.h" #include "tagmap.h" //---------------------------------------------------------------------------- typedef struct _TagObject { PyObject_HEAD tag_internals_t internals; } TagObject; //---------------------------------------------------------------------------- static PyMethodDef generic_methods[] = { {NULL, NULL, 0, NULL} }; static tag_internals_t generic_tag = { parse: 0, dealloc: 0, fillTAG: 0, tagfunctions: generic_methods, datasize: 0, }; //---------------------------------------------------------------------------- static struct tag_parser { int id; tag_internals_t*spec; struct tag_parser* next; } tag_parsers[1024]; static char parsers_initialized = 0; void register_tag(int id, tag_internals_t*spec) { assert(id>=0 && id<1024); if(!parsers_initialized) { memset(tag_parsers, 0, sizeof(tag_parsers)); parsers_initialized = 1; } tag_parsers[id].id = id; tag_parsers[id].spec = spec; }; static tag_internals_t* get_parser(int id) { if(parsers_initialized<2) { int t; struct tag_parser*last = &tag_parsers[0]; for(t=0;t<1024;t++) { if(tag_parsers[t].spec) { last->next = &tag_parsers[t]; last = &tag_parsers[t]; } } parsers_initialized = 2; } assert(id>=0 && id<1024); return tag_parsers[id].spec; } //---------------------------------------------------------------------------- static void tag_dealloc(PyObject * self) { TagObject*tag = (TagObject*)self; if(tag->internals.tag) mylog("-%08x(%d) tag_dealoc [%s]\n", (int)self, self->ob_refcnt, swf_TagGetName(tag->internals.tag)); else mylog("-%08x(%d) tag_dealoc [?]\n", (int)self, self->ob_refcnt); if(tag->internals.dealloc) { if(!tag->internals.data) mylog("-%08x(%d) tag_dealoc: Warning: calling dealloc without any data(?)\n", (int)self, self->ob_refcnt); tag->internals.dealloc(&tag->internals); } if(tag->internals.data) { free(tag->internals.data); tag->internals.data = 0; } if(tag->internals.tag) { swf_DeleteTag(0, tag->internals.tag); tag->internals.tag = 0; } Py_DECREF(tag->internals.tagmap); tag->internals.tagmap = 0; PyObject_Del(self); } //---------------------------------------------------------------------------- static int fillTAG(PyObject*self) { TagObject*tag = (TagObject*)self; if(tag->internals.tag) return 1; if(!tag->internals.fillTAG) { PyErr_SetString(PyExc_Exception, setError("No way to fill TAG with data")); return 0; } if(!tag->internals.fillTAG(&tag->internals)) { return 0; // pass through exception } if(!tag->internals.tag) { PyErr_SetString(PyExc_Exception, setError("Couldn't fill tag")); return 0; } return 1; } //---------------------------------------------------------------------------- static PyObject* tag_isShape(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; return PyInt_FromLong(swf_isShapeTag(self->internals.tag)); } static PyObject* tag_isFont(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; int id = self->internals.tag->id; int isfont=0; if(id == ST_DEFINEFONT || id == ST_DEFINEFONT2) isfont = 1; return PyInt_FromLong(isfont); } static PyObject* tag_isImage(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; return PyInt_FromLong(swf_isImageTag(self->internals.tag)); } static PyObject* tag_isDefiningTag(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; return PyInt_FromLong(swf_isDefiningTag(self->internals.tag)); } static PyObject* tag_isPlacement(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; return PyInt_FromLong((self->internals.tag->id == ST_PLACEOBJECT || self->internals.tag->id == ST_PLACEOBJECT2)); } static PyObject* tag_getBBox(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; if(!PyArg_ParseTuple(args, "")) return NULL; if(!fillTAG((PyObject*)self)) return NULL; return f_BBox2(swf_GetDefineBBox(self->internals.tag)); } static PyObject* tag_setBBox(PyObject * _self, PyObject*args) { TagObject*self = (TagObject*)_self; PyObject*bbox = 0; if(!PyArg_ParseTuple(args, "O!", &BBoxClass, &bbox)) return NULL; if(!fillTAG((PyObject*)self)) return NULL; swf_SetDefineBBox(self->internals.tag, bbox_getSRECT(bbox)); return PY_NONE; } //---------------------------------------------------------------------------- static PyMethodDef common_tagfunctions[] = {{"isShape", tag_isShape, METH_VARARGS, "tests whether the tag is a shape tag"}, {"isImage", tag_isImage, METH_VARARGS, "tests whether the tag is an image"}, {"isFont", tag_isFont, METH_VARARGS, "tests whether the tag is a font"}, {"isDefiningTag", tag_isDefiningTag, METH_VARARGS, "tests whether the tag is a defining tag"}, {"isPlacement", tag_isPlacement, METH_VARARGS, "tests whether the tag is a placement"}, {"getBBox", tag_getBBox, METH_VARARGS, "get's the tags bounding box"}, {"setBBox", tag_setBBox, METH_VARARGS, "set's the tags bounding box"}, {NULL, NULL, 0, NULL} }; static PyObject* tag_getattr(PyObject * self, char* a) { TagObject*tag = (TagObject*)self; PyObject* ret = NULL; int t; /* -- fields -- */ if(!strcmp(a, "tagid")) { if(!fillTAG(self)) return 0; return Py_BuildValue("i", tag->internals.tag->id); } if(!strcmp(a, "name")) { if(!fillTAG(self)) return 0; char* name = swf_TagGetName(tag->internals.tag); return Py_BuildValue("s", name); } if(!strcmp(a, "data")) { if(!fillTAG(self)) return 0; return Py_BuildValue("s#", tag->internals.tag->data, tag->internals.tag->len); } if(tag->internals.getattr) { PyObject* ret = tag->internals.getattr(&tag->internals, a); if(ret) return ret; } /* search for a tag specific function */ if(tag->internals.tagfunctions) { mylog(" %08x(%d) tag_getattr: tag has specific functions\n", (int)self, self->ob_refcnt); ret = Py_FindMethod(tag->internals.tagfunctions, self, a); if(ret) return ret; PyErr_Clear(); ret = FindMethodMore(ret, common_tagfunctions, self, a); mylog(" %08x(%d) tag_getattr %s: %08x\n", (int)self, self->ob_refcnt, a, ret); if(ret) return ret; PyErr_Clear(); } ret = Py_FindMethod(common_tagfunctions, self, a); mylog(" %08x(%d) tag_getattr %s: %08x\n", (int)self, self->ob_refcnt, a, ret); return ret; } static int tag_setattr(PyObject * _self, char* a, PyObject * o) { TagObject*self= (TagObject*)_self; /* a setattr will almost certainly change the tag data, so delete the tag */ if(self->internals.tag) { swf_DeleteTag(0, self->internals.tag); self->internals.tag = 0; } if(self->internals.setattr) { int ret = self->internals.setattr(&self->internals, a, o); return ret; } return 1; } //---------------------------------------------------------------------------- // Tag Constructors //---------------------------------------------------------------------------- PyObject* tag_new(tag_internals_t*tag_internals) { TagObject*tag = PyObject_New(TagObject, &TagClass); mylog("+%08x(%d) tag_new\n", (int)tag, tag->ob_refcnt); memcpy(&tag->internals, tag_internals, sizeof(tag_internals_t)); if(tag->internals.datasize) { tag->internals.data = malloc(tag->internals.datasize); memset(tag->internals.data , 0, tag->internals.datasize); } else { tag->internals.data = 0; } tag->internals.tag = 0; tag->internals.tagmap = tagmap_new(); return (PyObject*)tag; } PyObject* tag_new2(TAG*t, PyObject* tagmap) { TagObject*tag = PyObject_New(TagObject, &TagClass); mylog("+%08x(%d) tag_new2 tag=%08x id=%d (%s)\n", (int)tag, tag->ob_refcnt, t, t->id, swf_TagGetName(t)); PyObject*mytagmap = tagmap_new(); int num = swf_GetNumUsedIDs(t); if(num) { // tag has dependencies int * positions = malloc(num*sizeof(int)); swf_GetUsedIDs(t, positions); int i; for(i=0;idata[positions[i]]); PyObject*obj = tagmap_id2obj(tagmap, id); if(obj==NULL) { PyErr_SetString(PyExc_Exception, setError("TagID %d not defined", id)); return NULL; } //mylog("+%08x(%d) tag_new2 handling id %d at %d/%d\n", (int)tag, tag->ob_refcnt, id, positions[i], t->len); //mylog("+%08x(%d) tag_new2 add dependency %d to id %d, object %08x(%d)\n", (int)tag, tag->ob_refcnt, i, id, obj, obj->ob_refcnt); tagmap_addMapping(mytagmap, id, obj); } free(positions); } tag_internals_t*spec = get_parser(t->id); if(spec) { memcpy(&tag->internals, spec, sizeof(tag_internals_t)); } else { memcpy(&tag->internals, &generic_tag, sizeof(tag_internals_t)); } if(tag->internals.datasize) { tag->internals.data = malloc(tag->internals.datasize); memset(tag->internals.data, 0, tag->internals.datasize); } else { tag->internals.data = 0; } tag->internals.tag = swf_InsertTag(0, t->id); swf_SetBlock(tag->internals.tag, t->data, t->len); tag->internals.tagmap = mytagmap; // call tag->internals.init()? return (PyObject*)tag; } //---------------------------------------------------------------------------- /* serialize */ TAG* tag_getTAG(PyObject*self, TAG*prevTag, PyObject*tagmap) { TagObject*tag = (TagObject*)self; if(!fillTAG(self)) return 0; mylog(" %08x(%d) tag_getTAG: tag=%08x id=%d (%s)", (int)self, self->ob_refcnt, tag->internals.tag, tag->internals.tag->id, swf_TagGetName(tag->internals.tag)); TAG* t = swf_InsertTag(prevTag, tag->internals.tag->id); swf_SetBlock(t, tag->internals.tag->data, tag->internals.tag->len); if(swf_isDefiningTag(t)) { int newid = tagmap_add(tagmap, self); swf_SetDefineID(t, newid); } int num = swf_GetNumUsedIDs(t); if(num) { // tag has dependencies int * positions = malloc(num*sizeof(int)); swf_GetUsedIDs(t, positions); int i; for(i=0;idata[positions[i]]); PyObject* obj = tagmap_id2obj(tag->internals.tagmap, id); if(obj==NULL) { PyErr_SetString(PyExc_Exception, setError("Internal error: id %d not known in taglist:")); free(positions); return 0; } //int newid = tagmap_obj2id(tag->internals.tagmap, obj); int newid = tagmap_obj2id(tagmap, obj); if(newid>=0) { mylog(" %08x(%d) tag_getTAG: dependency %d) %d->%08x -> assigning(%08x) id %d", (int)self, self->ob_refcnt, i, id, obj, tagmap, newid); } else { /* TODO: this is only needed for sprites, so maybe it should throw an exception otherwise */ newid = tagmap_add(tagmap, obj); mylog(" %08x(%d) tag_getTAG: added dependency %d) %d->%08x -> assigning(%08x) id %d", (int)self, self->ob_refcnt, i, id, obj, tagmap, newid); } PUT16(&t->data[positions[i]], newid); } free(positions); } return t; } //---------------------------------------------------------------------------- tag_internals_t* tag_getinternals(PyObject*self) { TagObject*tag = (TagObject*)self; mylog(" %08x(%d) tag_getInternals\n", (int)self, self->ob_refcnt); return &tag->internals; } //---------------------------------------------------------------------------- PyObject* tag_getDependencies(PyObject*self) { TagObject*tag = (TagObject*)self; mylog(" %08x(%d) tag_getDependencies\n", (int)self, self->ob_refcnt); return tagmap_getObjectList(tag->internals.tagmap); } //---------------------------------------------------------------------------- int tag_print(PyObject * self, FILE * fi, int flags) { TagObject*tag = (TagObject*)self; mylog(" %08x(%d) tag_print flags=%08x\n", (int)self, self->ob_refcnt, flags); if(!fillTAG(self)) return -1; //fprintf(fi, "tag-%08x-%d-%s", (int)tag->internals.tag, tag->internals.tag->id, swf_TagGetName(tag->internals.tag)); fprintf(fi, "%s", swf_TagGetName(tag->internals.tag)); return 0; } //---------------------------------------------------------------------------- PyTypeObject TagClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "Tag", tp_basicsize: sizeof(TagObject), tp_itemsize: 0, tp_dealloc: tag_dealloc, tp_print: tag_print, tp_getattr: tag_getattr, tp_setattr: tag_setattr, }; swftools_0.9.2+git20130725.orig/lib/python/tags.c0000644000175000017500000010771212216332640020524 0ustar gawaingawain#include "pyutils.h" #include "primitives.h" #include "action.h" #include "taglist.h" #include "tag.h" #include "tags.h" #include "image.h" #include "../png.h" //---------------------------------------------------------------------------- typedef struct _font_internal { SWFFONT* font; } font_internal_t; staticforward tag_internals_t font_tag; static int font_parse(tag_internals_t*self) { font_internal_t*font = (font_internal_t*)self->data; /* TODO */ PyErr_SetString(PyExc_Exception, setError("Font parsing not implemented yet")); return 0; } static void font_dealloc(tag_internals_t*self) { font_internal_t*font = (font_internal_t*)self->data; if(font->font) { swf_FontFree(font->font); font->font = 0; } } static int font_fillTAG(tag_internals_t*self) { font_internal_t*fi = (font_internal_t*)self->data; if(self->tag) return 1; self->tag = swf_InsertTag(0, ST_DEFINEFONT2); swf_FontSetDefine2(self->tag, fi->font); return 1; } static PyObject* f_DefineFont(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"filename", NULL}; char*filename = 0; PyObject*tag; SWFFONT* font; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", kwlist, &filename)) return NULL; font = swf_LoadFont(filename, 0); if(!font) { PyErr_SetString(PyExc_Exception, setError("Could not load %s", filename)); return NULL; } tag = tag_new(&font_tag); tag_internals_t*itag = tag_getinternals(tag); font_internal_t*fi = (font_internal_t*)itag->data; font->id = 0; fi->font = font; return (PyObject*)tag; } static SWFFONT* font_getSWFFONT(PyObject*self) { PY_ASSERT_TYPE(self, &TagClass); tag_internals_t*itag = tag_getinternals(self); font_internal_t*fi = (font_internal_t*)itag->data; return fi->font; } static tag_internals_t font_tag = { parse: font_parse, fillTAG: font_fillTAG, dealloc: font_dealloc, getattr: 0, setattr: 0, tagfunctions: 0, datasize: sizeof(font_internal_t), }; //---------------------------------------------------------------------------- typedef struct _placeobject_internal { SWFPLACEOBJECT* po; PyObject*character; } placeobject_internal_t; staticforward tag_internals_t placeobject_tag; static void po_dealloc(tag_internals_t*self) { placeobject_internal_t*pi = (placeobject_internal_t*)self->data; if(pi->po) { swf_PlaceObjectFree(pi->po); pi->po = 0; } } static int po_parse(tag_internals_t*self) { placeobject_internal_t*i = (placeobject_internal_t*)self->data; if(i->po) return 1; if(!self->tag) return 0; SWFPLACEOBJECT* swfpo = malloc(sizeof(SWFPLACEOBJECT)); swf_GetPlaceObject(self->tag, swfpo); i->po = swfpo; swf_DeleteTag(0, self->tag);self->tag = 0; if(i->po->id) { i->character = tagmap_id2obj(self->tagmap, i->po->id); if(i->character) { Py_INCREF(i->character); } else { //PyErr_Clear(); //? } } return 1; } static int po_fillTAG(tag_internals_t*self) { placeobject_internal_t*pi = (placeobject_internal_t*)self->data; self->tag = swf_InsertTag(0, ST_PLACEOBJECT2); swf_SetPlaceObject(self->tag, pi->po); return 1; } static PyObject* po_getattr(tag_internals_t*self,char*a) { placeobject_internal_t*i = (placeobject_internal_t*)self->data; if(!po_parse(self)) return PY_ERROR("Couldn't parse placeobject"); if(!strcmp(a, "character")) { if(!i->character) return PY_NONE; Py_INCREF(i->character); //TODO: ?? return i->character; } else if(!strcmp(a, "matrix")) { return f_Matrix2(&i->po->matrix); } else if(!strcmp(a, "cxform")) { /* TODO */ return 0; } return 0; } static int po_setattr(tag_internals_t*self,char*a, PyObject*obj) { placeobject_internal_t*si = (placeobject_internal_t*)self->data; if(!strcmp(a, "cxform")) { /* TODO */ return 0; } return -1; } static PyObject* po_create(PyObject* self, PyObject* args, PyObject* kwargs,char move) { static char *kwlist[] = {"character", "depth", "matrix", "colortransform", "ratio", "name", "clipdepth", "action", NULL}; PyObject*character = 0; int depth; int clipdepth = 0; PyObject*matrix = 0; PyObject*cxform = 0; PyObject*action = 0; int ratio = 0; char* name = 0; SWFPLACEOBJECT* po; po = malloc(sizeof(SWFPLACEOBJECT)); memset(po, 0, sizeof(SWFPLACEOBJECT)); swf_GetPlaceObject(0, po); PyErr_Clear(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|O!O!isiO!", kwlist, &character, &depth, &MatrixClass, &matrix, &CXFormClass, &cxform, &ratio, &name, &clipdepth, &ActionClass, &action )) return NULL; po->depth = depth; po->clipdepth = clipdepth; po->ratio = ratio; po->name = name; po->move = move; if(clipdepth) po->clipdepth = clipdepth; if(matrix) po->matrix = matrix_getMatrix(matrix); if(cxform) po->cxform = colortransform_getCXForm(cxform); if(action) po->actions = action_getAction(action); PyObject*tag; tag = tag_new(&placeobject_tag); tag_internals_t*itag = tag_getinternals(tag); placeobject_internal_t*pi = (placeobject_internal_t*)itag->data; pi->po = po; if(!move) { pi->po->id = tagmap_add(itag->tagmap,(PyObject*)character); } else { pi->po->id = 0; } mylog("+%08x(%d) PlaceObject %08x(%d)\n", (int)tag, tag->ob_refcnt, character, character->ob_refcnt); return (PyObject*)tag; } static PyObject* f_PlaceObject(PyObject* self, PyObject* args, PyObject* kwargs) { return po_create(self, args, kwargs, 0); } static PyObject* f_MoveObject(PyObject* self, PyObject* args, PyObject* kwargs) { return po_create(self, args, kwargs, 1); } static tag_internals_t placeobject_tag = { parse: po_parse, fillTAG: po_fillTAG, dealloc: po_dealloc, getattr: po_getattr, setattr: po_setattr, tagfunctions: 0, datasize: sizeof(placeobject_internal_t), }; //---------------------------------------------------------------------------- staticforward tag_internals_t bgcolor_tag; static PyObject* tag_setbackgroundcolor_getrgb(PyObject * self, PyObject*other) { tag_internals_t*itag = tag_getinternals(self); int r,g,b; r = itag->tag->data[0]; g = itag->tag->data[1]; b = itag->tag->data[2]; return Py_BuildValue("(iii)", r,g,b); } static PyMethodDef setbgcolor_methods[] = {{"getRGB", tag_setbackgroundcolor_getrgb, METH_VARARGS, "get's the color set by this tag"}, {NULL, NULL, 0, NULL} }; static PyObject* f_SetBackgroundColor(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"color", NULL}; int r=0,g=0,b=0; PyObject*tag; PyObject*color; tag = tag_new(&bgcolor_tag); tag_internals_t*itag = tag_getinternals(tag); /* 1st try- copy constructor */ if(!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &ColorClass, &color)) { PyErr_Clear(); /* 2nd try- color's contructor */ color = f_Color(NULL, args, kwargs); } if(!color) return NULL; itag->tag = swf_InsertTag(0, ST_SETBACKGROUNDCOLOR); RGBA rgba = color_getRGBA(color); swf_SetU8(itag->tag, rgba.r); swf_SetU8(itag->tag, rgba.g); swf_SetU8(itag->tag, rgba.b); mylog(" %08x(%d) SetBackgroundColor(%02x,%02x,%02x) (colorobj=%08x(%d))\n", (int)tag, tag->ob_refcnt, rgba.r, rgba.g, rgba.b, color, color->ob_refcnt); Py_DECREF(color); return (PyObject*)tag; } static tag_internals_t bgcolor_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: setbgcolor_methods, datasize: 0, }; //---------------------------------------------------------------------------- staticforward tag_internals_t protect_tag; static PyObject* f_Protect(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"password", NULL}; char*password = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", kwlist, &password)) return NULL; PyObject*tag = tag_new(&protect_tag); tag_internals_t*itag = tag_getinternals(tag); itag->tag = swf_InsertTag(0, ST_PROTECT); if(password) { swf_SetPassword(itag->tag, password); } mylog("+%08x(%d) f_Protect", (int)tag, tag->ob_refcnt); return (PyObject*)tag; } static tag_internals_t protect_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: 0, datasize: 0, }; //---------------------------------------------------------------------------- staticforward tag_internals_t showframe_tag; static PyObject* f_ShowFrame(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"name", NULL}; char*name= 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", kwlist, &name)) return NULL; PyObject*tag = tag_new(&showframe_tag); tag_internals_t*itag = tag_getinternals(tag); itag->tag = swf_InsertTag(0, ST_SHOWFRAME); mylog("+%08x(%d) f_ShowFrame", (int)tag, tag->ob_refcnt); return (PyObject*)tag; } static tag_internals_t showframe_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: 0, datasize: 0, }; //---------------------------------------------------------------------------- staticforward tag_internals_t removeobject_tag; static PyObject* f_RemoveObject(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"depth", NULL}; int depth; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &depth)) return NULL; PyObject*tag = tag_new(&removeobject_tag); tag_internals_t*itag = tag_getinternals(tag); itag->tag = swf_InsertTag(0, ST_REMOVEOBJECT); swf_SetU16(itag->tag, depth); mylog("+%08x(%d) f_RemoveObject", (int)tag, tag->ob_refcnt); return (PyObject*)tag; } static tag_internals_t removeobject_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: 0, datasize: 0, }; //---------------------------------------------------------------------------- staticforward tag_internals_t sprite_tag; typedef struct _sprite_internal { PyObject* taglist; } sprite_internal_t; static int sprite_fillTAG(tag_internals_t*self) { mylog("+%08x(?) sprite_fillTAG", (int)self); sprite_internal_t*si = (sprite_internal_t*)self->data; TAG*sprite = swf_InsertTag(0, ST_DEFINESPRITE); swf_SetU16(sprite, 0); //id swf_SetU16(sprite, 0); //frames TAG*tag = taglist_getTAGs2(si->taglist, self->tagmap, 0); if(!tag) { /* pass through exception */ return 0; } TAG*tag2 = tag; while(tag2->next) tag2 = tag2->next; swf_InsertTag(tag2, ST_END); sprite->next = tag; tag->prev = sprite; swf_FoldSprite(sprite); self->tag = sprite; return 1; } static PyObject* f_Sprite(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"name", NULL}; char*name= 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", kwlist, &name)) return NULL; PyObject*tag = tag_new(&sprite_tag); tag_internals_t*itag = tag_getinternals(tag); sprite_internal_t*si = (sprite_internal_t*)itag->data; si->taglist = taglist_new(); mylog("+%08x(%d) f_DefineSprite", (int)tag, tag->ob_refcnt); return (PyObject*)tag; } static PyObject* sprite_getattr(tag_internals_t*self,char*a) { sprite_internal_t*si = (sprite_internal_t*)self->data; if(!strcmp(a, "tags")) { Py_INCREF(si->taglist); return si->taglist; } return 0; } static int sprite_setattr(tag_internals_t*self,char*a, PyObject*obj) { sprite_internal_t*si = (sprite_internal_t*)self->data; if(self->tag) { swf_DeleteTag(0, self->tag); self->tag = 0; } if(!strcmp(a, "tags")) { PY_ASSERT_TYPE(obj,&TagListClass); Py_DECREF(si->taglist); si->taglist = obj; Py_INCREF(si->taglist); return 0; } return 1; } static tag_internals_t sprite_tag = { parse: 0, fillTAG: sprite_fillTAG, dealloc: 0, getattr: sprite_getattr, setattr: sprite_setattr, tagfunctions: 0, datasize: sizeof(sprite_internal_t), }; //---------------------------------------------------------------------------- staticforward tag_internals_t end_tag; static tag_internals_t end_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: 0, datasize: 0, }; //---------------------------------------------------------------------------- staticforward tag_internals_t text_tag; typedef struct _text_internal { char*text; SWFFONT* swffont; RGBA rgba; int size; SRECT bbox; } text_internal_t; staticforward tag_internals_t placeobject_tag; static int text_fillTAG(tag_internals_t*self) { text_internal_t*ti = (text_internal_t*)self->data; self->tag= swf_InsertTag(0, ST_DEFINETEXT2); swf_SetU16(self->tag, /*ID*/0); ti->bbox = swf_SetDefineText(self->tag, ti->swffont, &ti->rgba, ti->text, ti->size); return 1; } static PyObject* text_getattr(tag_internals_t*self,char*a) { text_internal_t*si = (text_internal_t*)self->data; if(!strcmp(a, "bbox")) { return f_BBox2(si->bbox); } return 0; } static PyObject* f_DefineText(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"font", "text", "size", "color", NULL}; PyObject*tag = 0; PyObject*otext; char*text = 0; int size = 0; RGBA rgba = {255,0,0,0}; PyObject*color = 0; PyObject*font = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!Oi|O!", kwlist, &TagClass, &font, &otext, &size, &ColorClass, &color)) return NULL; if(PyUnicode_Check(otext)) { text = PyString_AS_STRING(PyUnicode_AsUTF8String(otext)); } else if(PyString_Check(otext)) { text = PyString_AS_STRING(otext); } if(color) rgba = color_getRGBA(color); mylog("DefineText: text = %s", text); tag = tag_new(&text_tag); tag_internals_t* itag = tag_getinternals(tag); text_internal_t*ti = (text_internal_t*)itag->data; ti->swffont = font_getSWFFONT(font); int font_id = tagmap_add(itag->tagmap, font); // add dependency on font ti->swffont->id = font_id; // for swf_SetDefineTexts ti->text = strdup(text); ti->rgba = rgba; ti->size = size; return (PyObject*)tag; } static tag_internals_t text_tag = { parse: 0, fillTAG: text_fillTAG, dealloc: 0, getattr: text_getattr, setattr: 0, tagfunctions: 0, datasize: sizeof(text_internal_t), }; //---------------------------------------------------------------------------- staticforward tag_internals_t image_tag; typedef struct _image_internal { RGBA*rgba; int size; int width; int height; int bpp; char isindexed; char islossless; } image_internal_t; staticforward tag_internals_t image_tag; static int image_fillTAG(tag_internals_t*self) { image_internal_t*ti = (image_internal_t*)self->data; self->tag= swf_InsertTag(0, ST_DEFINEBITSLOSSLESS2); swf_SetU16(self->tag, /*ID*/0); swf_SetLosslessBits(self->tag, ti->width, ti->height, ti->rgba, BMF_32BIT); return 1; } static void image_dealloc(tag_internals_t*self) { image_internal_t*pi = (image_internal_t*)self->data; if(pi->rgba) { free(pi->rgba);pi->rgba = 0; } } static int image_parse(tag_internals_t*self) { image_internal_t*i= (image_internal_t*)self->data; if(i->rgba) return 1; if(!self->tag) return 0; i->rgba = swf_ExtractImage(self->tag, &i->width, &i->height); i->bpp = 32; i->isindexed = 0; i->islossless = 1; swf_DeleteTag(0, self->tag);self->tag = 0; return 1; } static int imagetag_getWidth(PyObject* self) { tag_internals_t*itag = tag_getinternals(self); image_internal_t*pi = (image_internal_t*)itag->data; return pi->width; } static int imagetag_getHeight(PyObject* self) { tag_internals_t*itag = tag_getinternals(self); image_internal_t*pi = (image_internal_t*)itag->data; return pi->height; } static PyObject* f_DefineImage(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"image", NULL}; PyObject*image = 0; PyObject*tag = tag_new(&image_tag); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", kwlist, &image)) return NULL; tag = tag_new(&image_tag); tag_internals_t* itag = tag_getinternals(tag); image_internal_t*ti = (image_internal_t*)itag->data; ti->rgba = image_toRGBA(image); if(!ti->rgba) // pass through exception return 0; ti->width = image_getWidth(image); ti->height = image_getHeight(image); ti->isindexed = 0; ti->islossless = 1; ti->bpp = 32; ti->size = ti->width*ti->height; return (PyObject*)tag; } static PyObject* image_getattr(tag_internals_t*self,char*a) { image_internal_t*i = (image_internal_t*)self->data; if(!strcmp(a, "image")) { if(!i->rgba) { image_parse(self); } PyObject* image = rgba_to_image(i->rgba, i->width, i->height); return image; } return 0; } static PyObject* image_save(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!image_parse(itag)) return PY_ERROR("Couldn't parse image"); image_internal_t*fi = (image_internal_t*)itag->data; char*filename = 0; if(!PyArg_ParseTuple(args, "s", &filename)) return NULL; png_write(filename, (unsigned char*)fi->rgba ,fi->width, fi->height); return PY_NONE; } static PyMethodDef image_methods[] = {{"save", image_save, METH_VARARGS, "saves an image as PNG"}, {NULL, NULL, 0, NULL} }; static tag_internals_t image_tag = { parse: image_parse, fillTAG: image_fillTAG, dealloc: image_dealloc, getattr: image_getattr, setattr: 0, tagfunctions: image_methods, datasize: sizeof(image_internal_t), }; //---------------------------------------------------------------------------- staticforward tag_internals_t shape_tag; typedef struct _shape_internal { SHAPE2*shape2; } shape_internal_t; staticforward tag_internals_t shape_tag; static int shape_fillTAG(tag_internals_t*self) { shape_internal_t*ti = (shape_internal_t*)self->data; self->tag= swf_InsertTag(0, ST_DEFINESHAPE3); swf_SetU16(self->tag, /*ID*/0); swf_SetShape2(self->tag, ti->shape2); return 1; } static int shape_parse(tag_internals_t*self) { shape_internal_t*i= (shape_internal_t*)self->data; if(i->shape2) return 1; if(!self->tag) return 0; SHAPE2* shape2 = malloc(sizeof(SHAPE2)); swf_ParseDefineShape(self->tag, shape2); i->shape2 = shape2; swf_DeleteTag(0, self->tag);self->tag = 0; return 1; } static void shape_dealloc(tag_internals_t*self) { shape_internal_t*pi = (shape_internal_t*)self->data; if(pi->shape2) { swf_Shape2Free(pi->shape2); pi->shape2 = 0; } } static PyObject* f_DefineImageShape(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"image", NULL}; PyObject*image = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &TagClass, &image)) return NULL; PyObject*tag = tag_new(&shape_tag); tag_internals_t* itag = tag_getinternals(tag); shape_internal_t*ti = (shape_internal_t*)itag->data; ti->shape2 = 0; /*HACK*/ int width = imagetag_getWidth(image); int height = imagetag_getHeight(image); int id = tagmap_add(itag->tagmap, image); itag->tag= swf_InsertTag(0, ST_DEFINESHAPE3); swf_SetU16(itag->tag, 0); swf_ShapeSetBitmapRect(itag->tag, id, width, height); return (PyObject*)tag; } /* TODO: move to lib/ */ SHAPE2*swf_StringToShape2(char*s,FILLSTYLE*f, LINESTYLE*l) { drawer_t draw; swf_Shape11DrawerInit(&draw, 0); draw_string(&draw, s); draw.finish(&draw); SHAPE*s1 = swf_ShapeDrawerToShape(&draw); SRECT r = swf_ShapeDrawerGetBBox(&draw); RGBA col;col.r=col.g=col.b=128;col.a=255; if(l) swf_ShapeAddLineStyle(s1, 1, &col); if(f) swf_ShapeAddSolidFillStyle(s1, &col); draw.dealloc(&draw); SHAPE2*shape2 = swf_ShapeToShape2(s1); swf_ShapeFree(s1); shape2->bbox = malloc(sizeof(SRECT)); *(shape2->bbox) = r; if(f && shape2->numfillstyles) shape2->fillstyles[0] = *f; if(l && shape2->numlinestyles) shape2->linestyles[0] = *l; return shape2; } static PyObject* f_DefineShape(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"s", "fill", "line", NULL}; char*s = 0; PyObject*fillstyle=0,*linestyle=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|OO", kwlist, &s,&fillstyle,&linestyle)) return NULL; PyObject*tag = tag_new(&shape_tag); tag_internals_t* itag = tag_getinternals(tag); shape_internal_t*ti = (shape_internal_t*)itag->data; FILLSTYLE _f,*f=0; LINESTYLE _l,*l=0; if(fillstyle) { f = &_f; if(PY_CHECK_TYPE(fillstyle, &ColorClass)) { f->type = /*FILL_SOLID*/ 0; f->color = color_getRGBA(fillstyle); } else { return PY_ERROR("Invalid Fillstyle"); } } if(linestyle) { l = &_l; if(PyTuple_Check(linestyle) && PyTuple_GET_SIZE(linestyle)==2) { float f = 0.0; PyObject*color = 0; if(!PyArg_ParseTuple(linestyle, "fO!", &f, &ColorClass, &color)) return 0; l->width = (int)(f*20); l->color = color_getRGBA(color); } else { return PY_ERROR("Invalid Linestyle"); } } ti->shape2 = swf_StringToShape2(s,f,l); itag->tag = 0; return (PyObject*)tag; } static PyObject* shape_getfillstyles(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int num = fi->shape2->numfillstyles; return Py_BuildValue("i", num); } static PyObject* shape_getlinestyles(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int num = fi->shape2->numlinestyles; return Py_BuildValue("i", num); } static PyObject* shape_getfillstyle(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int nr = 0; if(!PyArg_ParseTuple(args, "i", &nr)) return NULL; int num = fi->shape2->numfillstyles; if(nr < 0 || nr >=num) return PY_ERROR("fillstyle index out of range"); return f_FillStyle2(fi->shape2->fillstyles[nr]); } static PyObject* shape_getlinestyle(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int nr = 0; if(!PyArg_ParseTuple(args, "i", &nr)) return NULL; int num = fi->shape2->numfillstyles; if(nr < 0 || nr >=num) return PY_ERROR("fillstyle index out of range"); return f_LineStyle3(fi->shape2->linestyles[nr]); } static PyObject* shape_setfillstyle(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int nr = 0; PyObject*fs = 0; if(!PyArg_ParseTuple(args, "iO!", &nr, &FillStyleClass, &fs)) return NULL; int num = fi->shape2->numfillstyles; if(nr < 0 || nr >=num) return PY_ERROR("fillstyle index out of range"); fi->shape2->fillstyles[nr] = fillstyle_getFillStyle(fs); return PY_NONE; } static PyObject* shape_setlinestyle(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); if(!shape_parse(itag)) return PY_ERROR("Couldn't parse shape"); shape_internal_t*fi = (shape_internal_t*)itag->data; int nr = 0; PyObject*ls = 0; if(!PyArg_ParseTuple(args, "iO!", &nr, &LineStyleClass, &ls)) return NULL; int num = fi->shape2->numlinestyles; if(nr < 0 || nr >=num) return PY_ERROR("linestyle index out of range"); fi->shape2->linestyles[nr] = linestyle_getLineStyle(ls); return PY_NONE; } static PyMethodDef shape_methods[] = {{"numfillstyles", shape_getfillstyles, METH_VARARGS, "get's the number of fillstyles"}, {"numlinestyles", shape_getlinestyles, METH_VARARGS, "get's the number of linestyles"}, {"getfillstyle", shape_getfillstyle, METH_VARARGS, "get's one fillstyle"}, {"getlinestyle", shape_getlinestyle, METH_VARARGS, "get's one linestyle"}, {"setfillstyle", shape_setfillstyle, METH_VARARGS, "set's one fillstyle"}, {"setlinestyle", shape_setlinestyle, METH_VARARGS, "set's one linestyle"}, {NULL, NULL, 0, NULL} }; static tag_internals_t shape_tag = { parse: shape_parse, fillTAG: shape_fillTAG, dealloc: shape_dealloc, getattr: 0, setattr: 0, tagfunctions: shape_methods, datasize: sizeof(shape_internal_t), }; //---------------------------------------------------------------------------- typedef struct _videostream_internal { VIDEOSTREAM* stream; int lastiframe; } videostream_internal_t; staticforward tag_internals_t videostream_tag; staticforward tag_internals_t videoframe_tag; static int videostream_parse(tag_internals_t*self) { videostream_internal_t*videostream = (videostream_internal_t*)self->data; /* TODO */ PyErr_SetString(PyExc_Exception, setError("videostream parsing not implemented yet")); return 0; } static void videostream_dealloc(tag_internals_t*self) { videostream_internal_t*videostream = (videostream_internal_t*)self->data; if(videostream->stream) { swf_VideoStreamClear(videostream->stream); free(videostream->stream); videostream->stream = 0; } } static int videostream_fillTAG(tag_internals_t*self) { videostream_internal_t*fi = (videostream_internal_t*)self->data; if(self->tag) return 1; PyErr_SetString(PyExc_Exception, setError("videostream filling not implemented")); return 0; } static PyObject* f_DefineVideoStream(PyObject* self, PyObject* args, PyObject* kwargs) { PyObject*tag = tag_new(&videostream_tag); int width=0,height=0,frames=65535; static char *kwlist[] = {"width", "height", "frames", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|i", kwlist, &width, &height, &frames)) return NULL; tag_internals_t*itag = tag_getinternals(tag); videostream_internal_t*fi = (videostream_internal_t*)itag->data; fi->stream = malloc(sizeof(VIDEOSTREAM)); memset(fi->stream, 0, sizeof(VIDEOSTREAM)); TAG*t = swf_InsertTag(0, ST_DEFINEVIDEOSTREAM); swf_SetU16(t, 0); /* id */ swf_SetVideoStreamDefine(t, fi->stream, frames, width, height); itag->tag = t; fi->lastiframe = -65536; return (PyObject*)tag; } static VIDEOSTREAM* videostream_getVIDEOSTREAM(PyObject*self) { PY_ASSERT_TYPE(self, &TagClass); tag_internals_t*itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)itag->data; return fi->stream; } static PyObject* videostream_getbwidth(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)itag->data; int width = fi->stream->bbx; return Py_BuildValue("i", width); } static PyObject* videostream_getbheight(PyObject*self, PyObject*args) { tag_internals_t*itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)itag->data; int height = fi->stream->bby; return Py_BuildValue("i", height); } static PyObject* videostream_addBlackFrame(PyObject*self, PyObject*args, PyObject*kwargs) { tag_internals_t*_itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)_itag->data; TAG* t = swf_InsertTag(0, ST_VIDEOFRAME); PyObject*tag = tag_new(&videoframe_tag); tag_internals_t*itag = tag_getinternals(tag); swf_SetU16(t,0); /* id */ swf_SetVideoStreamBlackFrame(t, fi->stream); fi->lastiframe = fi->stream->frame; itag->tag = t; tagmap_addMapping(itag->tagmap, 0, self); return tag; } static PyObject* videostream_addFrame(PyObject*self, PyObject*args, PyObject*kwargs) { tag_internals_t*_itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)_itag->data; PyObject*image = 0; char*type=0; // none, "i", "p" int quant=7; static char *kwlist[] = {"image", "quant", "type", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|is", kwlist, &image, &quant, &type)) return NULL; if(fi->stream->owidth != image_getWidth(image)) { PyErr_SetString(PyExc_Exception, setError("bad image width %d!=%d", image_getWidth(image), fi->stream->width));return 0; } if(fi->stream->oheight != image_getHeight(image)) { PyErr_SetString(PyExc_Exception, setError("bad image width %d!=%d", image_getHeight(image), fi->stream->height));return 0; } PyObject*tag = tag_new(&videoframe_tag); tag_internals_t*itag = tag_getinternals(tag); RGBA*pic = image_toRGBA(image); if(!pic) return 0; /*{ int f,j=0,i=0,rr,gg,bb; FILE *o; RGBA*it = pic; char*filename="test.ppm"; printf("Creating %s %dx%d\n",filename, 512,512); o=fopen(filename, "wb"); fprintf(o,"P6\n%d %d\n255\n",512, 512); while(j<512*512) { rr=it->r; gg=it->g; bb=it->b; fprintf(o,"%c%c%c",rr,gg,bb); it++; j++; } fclose(o); }*/ TAG* t = swf_InsertTag(0, ST_VIDEOFRAME); if((type && (type[0]=='I' || type[0]=='i')) || (type==0 && fi->lastiframe+64 < fi->stream->frame)) { swf_SetU16(t,0); /* id */ swf_SetVideoStreamIFrame(t, fi->stream, pic, quant); fi->lastiframe = fi->stream->frame; } else { swf_SetU16(t,0); swf_SetVideoStreamPFrame(t, fi->stream, pic, quant); } itag->tag = t; tagmap_addMapping(itag->tagmap, 0, self); free(pic); return tag; } static PyObject* videostream_addDistortionFrame(PyObject*self, PyObject*args, PyObject*kwargs) { tag_internals_t*_itag = tag_getinternals(self); videostream_internal_t*fi = (videostream_internal_t*)_itag->data; static char *kwlist[] = {"image", "quant", NULL}; int quant=7; PyObject* array = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|i", kwlist, &array, &quant)) return NULL; signed char* movex = malloc(fi->stream->bbx * fi->stream->bby * 1); signed char* movey = malloc(fi->stream->bbx * fi->stream->bby * 1); RGBA** pics = (RGBA**)malloc(fi->stream->bbx * fi->stream->bby * sizeof(void*)); signed char* itx=movex; signed char* ity=movey; RGBA**pic=pics; int x,y; if(!array || !PySequence_Check(array)) return PY_ERROR("Not an array"); if(PySequence_Length(array) < fi->stream->bby) return PY_ERROR("Array (y) has to have at least %d elements, but has only %d ", fi->stream->bby, PySequence_Length(array)); for(y=0;ystream->bby;y++) { PyObject*line = PySequence_GetItem(array, y); if(!line || !PySequence_Check(line)) return PY_ERROR("Not an array of arrays"); if(PySequence_Length(line) < fi->stream->bbx) return PY_ERROR("Inner arrays (x) have to be at least %d long- %dth is only %d", fi->stream->bbx, y, PySequence_Length(line)); for(x=0;xstream->bbx;x++) { PyObject*pixel = PySequence_GetItem(line, x); PyObject*xy = 0; PyObject*image = 0; if(!pixel) { xy = image = 0; } else { if(PyComplex_Check(pixel)) { xy = pixel; image = 0; } else if(PyString_Check(pixel)) { xy = 0; image = pixel; } else if(PyTuple_Check(pixel)) { int size = PyTuple_GET_SIZE(pixel); if(size!=2) return PY_ERROR("Tuples have to have size 2 (xy,img)"); xy = PyTuple_GetItem(pixel, 0); if(!xy) return 0; if(!PyComplex_Check(xy)) return PY_ERROR("Tuples must be (COMPLEX,string)"); image = PyTuple_GetItem(pixel, 1); if(!image) return 0; if(!PyString_Check(image)) return PY_ERROR("Tuples must be (complex,STRING)"); } } *itx = *ity = 0; *pic= 0; if(xy) { *itx = (signed char)PyComplex_RealAsDouble(pixel); *ity = (signed char)PyComplex_ImagAsDouble(pixel); } if(image) { char*string; int size; PyString_AsStringAndSize(image,&string,&size); if(size<256*3) { return PY_ERROR("image strings must be >= 256*3"); } *pic = malloc(sizeof(RGBA)*16*16); int t; for(t=0;t<16*16;t++) { (*pic)[t].r = string[t*3]; (*pic)[t].g = string[t*3+1]; (*pic)[t].b = string[t*3+2]; (*pic)[t].a = 255; } } itx++; ity++; pic++; } } PyObject*tag = tag_new(&videoframe_tag); tag_internals_t*itag = tag_getinternals(tag); TAG* t = swf_InsertTag(0, ST_VIDEOFRAME); swf_SetU16(t,0); /* id */ swf_SetVideoStreamMover(t, fi->stream, movex, movey,(void**)pics, quant); itag->tag = t; tagmap_addMapping(itag->tagmap, 0, self); for(x=0;xstream->bbx*fi->stream->bby;x++) { if(pics[x]) { free(pics[x]);pics[x] = 0; } } free(movex); free(movey); free(pics); return tag; } static PyMethodDef videostream_methods[] = {{"xblocks", videostream_getbwidth, METH_VARARGS, "get's the number of horizontal blocks"}, {"yblocks", videostream_getbheight, METH_VARARGS, "get's the number of vertical blocks"}, {"addFrame", (PyCFunction)videostream_addFrame, METH_KEYWORDS, "add a Video Frame"}, {"addBlackFrame", (PyCFunction)videostream_addBlackFrame, METH_KEYWORDS, "add a black Video Frame"}, {"addDistortionFrame", (PyCFunction)videostream_addDistortionFrame, METH_KEYWORDS, "add a MVD frame"}, {NULL, NULL, 0, NULL} }; static tag_internals_t videostream_tag = { parse: videostream_parse, fillTAG: videostream_fillTAG, dealloc: videostream_dealloc, getattr: 0, setattr: 0, tagfunctions: videostream_methods, datasize: sizeof(videostream_internal_t), }; //============================================================================ static tag_internals_t videoframe_tag = { parse: 0, fillTAG: 0, dealloc: 0, getattr: 0, setattr: 0, tagfunctions: 0, datasize: 0 }; //============================================================================ static PyMethodDef TagMethods[] = { /* TAGS */ {"BackgroundColor", (PyCFunction)f_SetBackgroundColor, METH_KEYWORDS, "Create a SetBackGroundColor Tag."}, {"Protect", (PyCFunction)f_Protect, METH_KEYWORDS, "Create a Protect Tag."}, {"Font", (PyCFunction)f_DefineFont, METH_KEYWORDS, "Create a DefineFont Tag."}, {"Text", (PyCFunction)f_DefineText, METH_KEYWORDS, "Create a DefineText Tag."}, {"PlaceObject", (PyCFunction)f_PlaceObject, METH_KEYWORDS, "Create a PlaceObject Tag."}, {"RemoveObject", (PyCFunction)f_RemoveObject, METH_KEYWORDS, "Create a RemoveObject Tag."}, {"MoveObject", (PyCFunction)f_MoveObject, METH_KEYWORDS, "Create a PlaceObject Move Tag."}, {"VideoStream", (PyCFunction)f_DefineVideoStream, METH_KEYWORDS, "Create a Videostream."}, {"Image", (PyCFunction)f_DefineImage, METH_KEYWORDS, "Create an SWF Image Tag."}, {"ImageShape", (PyCFunction)f_DefineImageShape, METH_KEYWORDS, "Create an SWF Image Shape Tag."}, {"Shape", (PyCFunction)f_DefineShape, METH_KEYWORDS, "Create an SWF Shape Tag."}, {"ShowFrame", (PyCFunction)f_ShowFrame, METH_KEYWORDS, "Create an SWF Show Frame Tag."}, {"Sprite", (PyCFunction)f_Sprite, METH_KEYWORDS, "Create an SWF Sprite Tag."}, {NULL, NULL, 0, NULL} }; PyMethodDef* tags_getMethods() { TagClass.ob_type = &PyType_Type; register_tag(ST_PLACEOBJECT,&placeobject_tag); register_tag(ST_PLACEOBJECT2,&placeobject_tag); register_tag(ST_REMOVEOBJECT,&removeobject_tag); register_tag(ST_REMOVEOBJECT2,&removeobject_tag); register_tag(ST_SETBACKGROUNDCOLOR,&bgcolor_tag); register_tag(ST_DEFINEFONT,&font_tag); register_tag(ST_PROTECT,&protect_tag); register_tag(ST_DEFINETEXT,&text_tag); register_tag(ST_DEFINEBITSJPEG,&image_tag); register_tag(ST_DEFINEBITSJPEG2,&image_tag); register_tag(ST_DEFINEBITSJPEG3,&image_tag); register_tag(ST_DEFINEBITSLOSSLESS,&image_tag); register_tag(ST_DEFINEBITSLOSSLESS2,&image_tag); register_tag(ST_DEFINESHAPE,&shape_tag); register_tag(ST_DEFINESHAPE2,&shape_tag); register_tag(ST_DEFINESHAPE3,&shape_tag); register_tag(ST_SHOWFRAME,&showframe_tag); register_tag(ST_DEFINEVIDEOSTREAM,&videostream_tag); register_tag(ST_VIDEOFRAME,&videoframe_tag); register_tag(ST_DEFINESPRITE,&sprite_tag); register_tag(ST_END,&end_tag); return TagMethods; } swftools_0.9.2+git20130725.orig/lib/python/SWF.c0000644000175000017500000003307212216332640020222 0ustar gawaingawain/* SWF.c Python wrapper for librfxswf- module core. Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #include #include #undef HAVE_STAT #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" #include "./tags.h" #include "./taglist.h" #include "./primitives.h" #include "./action.h" /* TODO: 1) taglist is rfxswflib's linked list. It should maybe implemented as Python list, which would, however, mean that we would have to convert the list back and forth for the following functions: load, save, writeCGI, unfoldAll, foldAll, optimizeOrder 2) taglist should have an ID handler. Every time a tag is inserted, it's ID is stored in a lookup list. 3) */ //-------------------------- Types ------------------------------------------- staticforward PyTypeObject SWFClass; /* Tags, Objects */ typedef struct { PyObject_HEAD SWF swf; //swf.firstTag is not used PyObject*taglist; char*filename; } SWFObject; //---------------------------------------------------------------------------- static PyObject* f_create(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"version", "fps", "bbox", "name", NULL}; SWFObject* swf; int version = 6; double framerate = 25; PyObject * obbox = 0; SRECT bbox = {0,0,0,0}; char* filename = 0; swf = PyObject_New(SWFObject, &SWFClass); mylog("+%08x(%d) create\n", (int)swf, swf->ob_refcnt); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|idOs", kwlist, &version, &framerate, &obbox, &filename)) return NULL; if(obbox) { if (!PY_CHECK_TYPE(obbox, &BBoxClass)) { obbox = f_BBox(0, obbox, 0); if(!obbox) return NULL; } bbox = bbox_getSRECT(obbox); } memset(&swf->swf, 0, sizeof(SWF)); if(filename) swf->filename = strdup(filename); else swf->filename = 0; swf->swf.fileVersion = version; swf->swf.frameRate = (int)(framerate*0x100); swf->swf.movieSize = bbox; swf->taglist = taglist_new(); if(swf->swf.fileVersion>=6) swf->swf.compressed = 1; mylog(" %08x(%d) create: done\n", (int)swf, swf->ob_refcnt); return (PyObject*)swf; } //---------------------------------------------------------------------------- static PyObject* f_load(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist1[] = {"filename", NULL}; static char *kwlist2[] = {"data", NULL}; char* filename = 0; char* data = 0; int len = 0; SWFObject* swf; int fi; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist1, &filename)) { PyErr_Clear(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#", kwlist2, &data, &len)) { PyErr_Clear(); PyArg_ParseTupleAndKeywords(args, kwargs, "s:load", kwlist1, &filename); return 0; } } swf = PyObject_New(SWFObject, &SWFClass); mylog("+%08x(%d) f_load\n", (int)swf, swf->ob_refcnt); memset(&swf->swf, 0, sizeof(SWF)); if(filename) { if(!filename) { PyErr_SetString(PyExc_Exception, setError("Couldn't open file %s", filename)); return 0; } swf->filename = strdup(filename); fi = open(filename,O_RDONLY|O_BINARY); if (fi<0) { return PY_ERROR("Couldn't open file %s", filename); } if(swf_ReadSWF(fi,&swf->swf)<0) { close(fi); return PY_ERROR("%s is not a valid SWF file or contains errors",filename); } close(fi); } else { reader_t r; reader_init_memreader(&r, data, len); swf->filename = 0; if(swf_ReadSWF2(&r, &swf->swf)<0) { return PY_ERROR(" is not a valid SWF file or contains errors"); } r.dealloc(&r); } swf_FoldAll(&swf->swf); swf->taglist = taglist_new2(swf->swf.firstTag); if(swf->taglist == NULL) { return NULL; } swf_FreeTags(&swf->swf); swf->swf.firstTag = 0; return (PyObject*)swf; } //---------------------------------------------------------------------------- static PyObject * swf_save(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"name", "compress", NULL}; SWFObject*swfo; SWF*swf; int fi; char*filename = 0; int compress = 0; if(!self) return NULL; swfo = (SWFObject*)self; swf = &swfo->swf; filename = swfo->filename; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|si", kwlist, &filename, &compress)) return NULL; mylog(" %08x(%d) f_save filename=%s compress=%d\n", (int)self, self->ob_refcnt, filename, compress); // keyword arg compress (=1) forces compression if(compress) swf->compressed = 1; swf->firstTag = taglist_getTAGs(swfo->taglist); /*if(!swf->firstTag) return NULL;*/ // fix the file, in case it is empty or not terminated properly { TAG*tag = swf->firstTag; if(!tag) tag = swf->firstTag = swf_InsertTag(0,ST_END); while(tag && tag->next) { tag = tag->next; } if(tag->id != ST_END) { tag = swf_InsertTag(tag,ST_END); } } fi = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); if(fi<0) { PyErr_SetString(PyExc_Exception, setError("couldn't create output file %s", filename)); return 0; } if(swf_WriteSWF(fi, swf)<0) { close(fi); PyErr_SetString(PyExc_Exception, setError("WriteSWC() failed.")); return 0; } close(fi); swf_FreeTags(swf); /*{ TAG * t = swf->firstTag; while (t) { mylog("tag: %08x\n",t); mylog(" id: %d (%s)\n", t->id, swf_TagGetName(t)); mylog(" data: %08x (%d bytes)\n", t->data, t->len); mylog(" next: %08x\n", t->next); TAG * tnew = t->next; mylog("->free data\n"); if (t->data) free(t->data); mylog("->free tag\n"); free(t); t = tnew; } }*/ swf->firstTag = 0; mylog(" %08x(%d) f_save filename=%s done\n", (int)self, self->ob_refcnt, filename); return PY_NONE; } //---------------------------------------------------------------------------- static PyObject * swf_writeCGI(PyObject* self, PyObject* args) { SWFObject*swf = (SWFObject*)self; if(!self || !PyArg_ParseTuple(args,"")) return NULL; swf->swf.firstTag = taglist_getTAGs(swf->taglist); if(!swf->swf.firstTag) return NULL; swf_WriteCGI(&swf->swf); swf_FreeTags(&swf->swf); swf->swf.firstTag = 0; return PY_NONE; } //---------------------------------------------------------------------------- //TODO: void swf_Relocate(SWF*swf, char*bitmap); // bitmap is 65536 bytes, bitmap[a]==0 means id a is free static PyMethodDef swf_functions[] = {{"save", (PyCFunction)swf_save, METH_KEYWORDS, "Save SWF to disk"}, {"writeCGI", (PyCFunction)swf_writeCGI, METH_VARARGS, "print SWF as CGI to stdout"}, {NULL, NULL, 0, NULL} }; //---------------------------------------------------------------------------- static void swf_dealloc(PyObject* self) { mylog("-%08x(%d) swf_dealloc\n", (int)self, self->ob_refcnt); SWFObject*swfo; SWF*swf; swfo = (SWFObject*)self; swf = &swfo->swf; if(swfo->filename) { free(swfo->filename); swfo->filename = 0; } Py_DECREF(swfo->taglist); swfo->taglist = 0; PyObject_Del(self); } //---------------------------------------------------------------------------- static int swf_print(PyObject * self, FILE *fi, int flags) //flags&Py_PRINT_RAW { mylog(" %08x(%d) print \n", (int)self, self->ob_refcnt); SWFObject*swf = (SWFObject*)self; swf_DumpHeader(fi, &swf->swf); //void swf_DumpSWF(FILE * f,SWF*swf); return 0; } //---------------------------------------------------------------------------- static PyObject* swf_getattr(PyObject * self, char* a) { SWFObject*swf = (SWFObject*)self; PyObject* ret = 0; if(!strcmp(a, "fps")) { double fps = swf->swf.frameRate/256.0; mylog(" %08x(%d) swf_getattr %s = %f\n", (int)self, self->ob_refcnt, a, fps); return Py_BuildValue("d", fps); } else if(!strcmp(a, "version")) { int version = swf->swf.fileVersion;; mylog(" %08x(%d) swf_getattr %s = %d\n", (int)self, self->ob_refcnt, a, version); return Py_BuildValue("i", version); } else if(!strcmp(a, "name")) { char*filename = swf->filename; mylog(" %08x(%d) swf_getattr %s = %s\n", (int)self, self->ob_refcnt, a, filename); return Py_BuildValue("s", filename); } else if(!strcmp(a, "bbox")) { return f_BBox2(swf->swf.movieSize); } else if(!strcmp(a, "tags")) { PyObject*ret = (PyObject*)(swf->taglist); Py_INCREF(ret); mylog(" %08x(%d) swf_getattr %s = %08x(%d)\n", (int)self, self->ob_refcnt, a, ret, ret->ob_refcnt); return ret; } else if(!strcmp(a, "filesize")) { int s = swf->swf.fileSize; return Py_BuildValue("i", s); } else if(!strcmp(a, "width")) { int w = (swf->swf.movieSize.xmax - swf->swf.movieSize.xmin) / 20; return Py_BuildValue("i", w); } else if(!strcmp(a, "height")) { int h = (swf->swf.movieSize.ymax - swf->swf.movieSize.ymin) / 20; return Py_BuildValue("i", h); } else if(!strcmp(a, "framecount")) { int f = swf->swf.frameCount; return Py_BuildValue("i", f); } ret = Py_FindMethod(swf_functions, self, a); mylog(" %08x(%d) swf_getattr %s: %08x\n", (int)self, self->ob_refcnt, a, ret); return ret; } //---------------------------------------------------------------------------- static int swf_setattr(PyObject * self, char* a, PyObject * o) { SWFObject*swf = (SWFObject*)self; if(!strcmp(a, "fps")) { double fps; if (!PyArg_Parse(o, "d", &fps)) goto err; swf->swf.frameRate = (int)(fps*0x100); mylog(" %08x(%d) swf_setattr %s = %f\n", (int)self, self->ob_refcnt, a, fps); return 0; } else if(!strcmp(a, "version")) { int version; if (!PyArg_Parse(o, "i", &version)) goto err; swf->swf.fileVersion = version; mylog(" %08x(%d) swf_setattr %s = %d\n", (int)self, self->ob_refcnt, a, version); return 0; } else if(!strcmp(a, "name")) { char*filename; if (!PyArg_Parse(o, "s", &filename)) goto err; if(swf->filename) { free(swf->filename);swf->filename=0; } swf->filename = strdup(filename); mylog(" %08x(%d) swf_setattr %s = %s\n", (int)self, self->ob_refcnt, a, filename); return 0; } else if(!strcmp(a, "bbox")) { PyObject *obbox = o; if (!PY_CHECK_TYPE(obbox, &BBoxClass)) { obbox = f_BBox(0, o, 0); if(!obbox) return 1; } SRECT bbox = bbox_getSRECT(obbox); swf->swf.movieSize = bbox; mylog(" %08x(%d) swf_setattr %s = (%d,%d,%d,%d)\n", (int)self, self->ob_refcnt, a, bbox.xmin,bbox.ymin,bbox.xmax,bbox.ymax); return 0; } else if(!strcmp(a, "tags")) { PyObject* taglist; taglist = o; PY_ASSERT_TYPE(taglist,&TagListClass); Py_DECREF(swf->taglist); swf->taglist = taglist; Py_INCREF(swf->taglist); mylog(" %08x(%d) swf_setattr %s = %08x\n", (int)self, self->ob_refcnt, a, swf->taglist); return 0; } err: mylog(" %08x(%d) swf_setattr %s = ? (%08x)\n", (int)self, self->ob_refcnt, a, o); return 1; } //---------------------------------------------------------------------------- static PyTypeObject SWFClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "SWF", tp_basicsize: sizeof(SWFObject), tp_itemsize: 0, tp_dealloc: swf_dealloc, tp_print: swf_print, tp_getattr: swf_getattr, tp_setattr: swf_setattr, }; //---------------------------------------------------------------------------- static PyMethodDef SWFMethods[] = { /* SWF creation*/ {"load", (PyCFunction)f_load, METH_KEYWORDS, "Load a SWF from disc."}, {"create", (PyCFunction)f_create, METH_KEYWORDS, "Create a new SWF from scratch."}, {0,0,0,0} // save is a member function }; PyMethodDef* swf_getMethods() { SWFClass.ob_type = &PyType_Type; return SWFMethods; } // ============================================================================= #include "primitives.h" #include "action.h" #include "tag.h" #include "taglist.h" static PyObject* module_verbose(PyObject* self, PyObject* args, PyObject* kwargs) { int _verbose = 0; static char *kwlist[] = {"verbosity", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &_verbose)) return NULL; setVerbosity(_verbose); return Py_BuildValue("s", 0); } static PyMethodDef LoggingMethods[] = { /* Module functions */ {"verbose", (PyCFunction)module_verbose, METH_KEYWORDS, "Set the module verbosity"}, {0,0,0,0} }; void initSWF(void) { srand48(time(0)*getpid()); PyObject*module; PyMethodDef* primitive_methods = primitive_getMethods(); PyMethodDef* tag_methods = tags_getMethods(); PyMethodDef* action_methods = action_getMethods(); PyMethodDef* swf_methods = swf_getMethods(); PyMethodDef* all_methods = 0; all_methods = addMethods(all_methods, primitive_methods); all_methods = addMethods(all_methods, tag_methods); all_methods = addMethods(all_methods, action_methods); all_methods = addMethods(all_methods, swf_methods); all_methods = addMethods(all_methods, LoggingMethods); module = Py_InitModule("SWF", all_methods); /* Python doesn't copy the PyMethodDef struct, so we need to keep it around */ // free(all_methods) } swftools_0.9.2+git20130725.orig/lib/python/tagmap.c0000644000175000017500000001270212216332640021031 0ustar gawaingawain/* tagmap.c Python wrapper for librfxswf. Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #undef HAVE_STAT #include "pyutils.h" #include "tagmap.h" typedef struct { PyObject_HEAD PyObject* obj2id; PyObject* id2obj; PyObject* objlist; int currentID; } TagMapObject; //---------------------------------------------------------------------------- PyObject* tagmap_new() { PyObject* self = (PyObject*)PyObject_New(TagMapObject, &TagMapClass); TagMapObject*tagmap = (TagMapObject*)self; tagmap->obj2id = PyDict_New(); tagmap->id2obj = PyDict_New(); tagmap->objlist = PyList_New(0); tagmap->currentID = 0; //IDs start at 1 /* mylog("+%08x(%d) tagmap_new %08x(%d) %08x(%d), %08x(%d)", (int)self, self->ob_refcnt, tagmap->obj2id, tagmap->obj2id->ob_refcnt , tagmap->id2obj, tagmap->id2obj->ob_refcnt , tagmap->objlist, tagmap->objlist->ob_refcnt);*/ return self; } //---------------------------------------------------------------------------- int tagmap_obj2id(PyObject* self, PyObject* obj) { TagMapObject*tagmap = (TagMapObject*)self; PyObject*id = PyDict_GetItem(tagmap->obj2id, obj); if(id == 0) return -1; int _id = PyLong_AsLong(id); return _id; } //---------------------------------------------------------------------------- PyObject* tagmap_id2obj(PyObject* self, int _id) { TagMapObject*tagmap = (TagMapObject*)self; PyObject*id = PyLong_FromLong(_id); PyObject*obj = PyDict_GetItem(tagmap->id2obj, id); Py_DECREF(id); return obj; } //---------------------------------------------------------------------------- int tagmap_getFreeID(PyObject*self) { TagMapObject*tagmap = (TagMapObject*)self; int last = tagmap->currentID; do { tagmap->currentID++; PyObject*id = PyLong_FromLong(tagmap->currentID); PyObject*test = PyDict_GetItem(tagmap->id2obj,id); Py_DECREF(id); if(test == 0) { PyErr_Clear(); mylog(" %08x(%d) tagmap_getFreeID -> %d", (int)self, self->ob_refcnt, tagmap->currentID); return tagmap->currentID; } } while(last != tagmap->currentID); mylog(" %08x(%d) tagmap_getFreeID -> -1", (int)self, self->ob_refcnt); return -1; } //---------------------------------------------------------------------------- static void tagmap_add_mapping(PyObject*self, int id, PyObject* obj) { TagMapObject*tagmap = (TagMapObject*)self; PyList_Append(tagmap->objlist, obj);//Py_INCREF(obj); done by PyList_Append PyObject*id_obj = PyLong_FromLong(id); PyDict_SetItem(tagmap->obj2id, obj, id_obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem PyDict_SetItem(tagmap->id2obj, id_obj, obj);//Py_INCREF(id_obj);Py_INCREF(obj); done by PyDict_SetItem Py_DECREF(id_obj); } //---------------------------------------------------------------------------- void tagmap_addMapping(PyObject*self, int id, PyObject* obj) { TagMapObject*tagmap = (TagMapObject*)self; int id2 = tagmap_obj2id(self, obj); if(id2>=0) { assert(id==id2); return; } tagmap_add_mapping(self, id, obj); } //---------------------------------------------------------------------------- int tagmap_add(PyObject* self, PyObject* obj) { TagMapObject*tagmap = (TagMapObject*)self; int id = tagmap_obj2id(self, obj); if(id>=0) { mylog(" %08x(%d) tagmap_add %08x->%d (again)", (int)self, self->ob_refcnt, (int)obj, id); return id; } id = tagmap_getFreeID(self); tagmap_add_mapping(self, id, obj); mylog(" %08x(%d) tagmap_add %08x->%d", (int)self, self->ob_refcnt, (int)obj, id); return id; } //---------------------------------------------------------------------------- void tagmap_dealloc(PyObject* self) { TagMapObject*tagmap = (TagMapObject*)self; mylog("-%08x(%d) tagmap_dealloc %08x(%d) %08x(%d), %08x(%d)", (int)self, self->ob_refcnt, tagmap->obj2id, tagmap->obj2id->ob_refcnt , tagmap->id2obj, tagmap->id2obj->ob_refcnt , tagmap->objlist, tagmap->objlist->ob_refcnt); Py_DECREF(tagmap->obj2id); tagmap->obj2id = 0; Py_DECREF(tagmap->id2obj); tagmap->id2obj = 0; Py_DECREF(tagmap->objlist); tagmap->objlist = 0; PyObject_Del(self); } //---------------------------------------------------------------------------- PyObject* tagmap_getObjectList(PyObject* self) { mylog(" %08x(%d) tagmap_getObjectList", (int)self, self->ob_refcnt); TagMapObject*tagmap = (TagMapObject*)self; return tagmap->objlist; } //---------------------------------------------------------------------------- PyTypeObject TagMapClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "TagMap", tp_basicsize: sizeof(TagMapObject), tp_itemsize: 0, tp_dealloc: tagmap_dealloc, tp_print: 0, tp_getattr: 0, tp_setattr: 0, }; swftools_0.9.2+git20130725.orig/lib/python/gfx.c0000644000175000017500000017117212216332640020353 0ustar gawaingawain/* gfx.c Python wrapper for gfx convert Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #include #include #undef HAVE_STAT #include "../../config.h" #include "../gfxtools.h" #include "../devices/swf.h" #include "../devices/render.h" #include "../devices/rescale.h" #include "../devices/text.h" #ifdef USE_OPENGL #include "../devices/opengl.h" #endif #include "../pdf/pdf.h" #include "../readers/swf.h" #include "../readers/image.h" #include "../log.h" #include "../kdtree.h" #include "../utf8.h" #include "../gfxdevice.h" #include "../gfximage.h" #define PYTHON_GFX_VERSION VERSION #if PY_MAJOR_VERSION >= 3 #define PYTHON3 #define M_FLAGS (METH_VARARGS|METH_KEYWORDS) #else #define M_FLAGS (METH_KEYWORDS) #endif typedef struct _state { gfxsource_t*pdfdriver; gfxsource_t*swfdriver; gfxsource_t*imagedriver; } state_t; #ifdef PYTHON3 #define STATE(m) ((state_t*)PyModule_GetState(m)) #else static state_t global_state = {0,0,0}; #define STATE(m) &global_state; #endif static PyTypeObject OutputClass; static PyTypeObject PageClass; static PyTypeObject DocClass; static PyTypeObject FontClass; static PyTypeObject GlyphClass; static PyTypeObject CharClass; static PyTypeObject KDTreeClass; static PyTypeObject BitmapClass; typedef struct { PyObject_HEAD gfxdevice_t*output_device; PyObject*pyobj; //only for passthrough } OutputObject; typedef struct { PyObject_HEAD PyObject*parent; gfxpage_t*page; int nr; } PageObject; typedef struct { PyObject_HEAD gfxdocument_t*doc; char*filename; int page_pos; } DocObject; typedef struct { PyObject_HEAD gfxfont_t*gfxfont; } FontObject; typedef struct { PyObject_HEAD FontObject*font; int nr; } GlyphObject; typedef struct { PyObject_HEAD FontObject*font; int nr; gfxmatrix_t matrix; int size; gfxcolor_t color; } CharObject; typedef struct { PyObject_HEAD kdtree_t*kdtree; } KDTreeObject; typedef struct { PyObject_HEAD gfximage_t*image; } BitmapObject; static char* strf(char*format, ...) { char buf[1024]; int l; va_list arglist; va_start(arglist, format); vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); return strdup(buf); } static inline PyObject*pystring_fromstring(const char*s) { #ifdef PYTHON3 return PyUnicode_FromString(s); #else return PyString_FromString(s); #endif } static inline int pystring_check(PyObject*o) { #ifdef PYTHON3 return PyUnicode_Check(o); #else return PyString_Check(o); #endif } static inline PyObject*pyint_fromlong(long l) { #ifdef PYTHON3 return PyLong_FromLong(l); #else return PyInt_FromLong(l); #endif } static inline const char*pystring_asstring(PyObject*s) { #ifdef PYTHON3 return PyUnicode_AS_DATA(s); #else return PyString_AsString(s); #endif } PyObject*forward_getattr(PyObject*self, char *a) { PyObject*o = pystring_fromstring(a); PyObject*ret = PyObject_GenericGetAttr(self, o); Py_DECREF(o); return ret; } #define PY_ERROR(s,args...) (PyErr_SetString(PyExc_Exception, strf(s, ## args)),(void*)NULL) #define PY_NONE Py_BuildValue("s", 0) //--------------------------------------------------------------------- PyDoc_STRVAR(output_save_doc, \ "save(filename)\n\n" "Saves the contents of an output device to a file\n" "Depending on what the output device is, the contents\n" "of the file may be plain text, an image, an SWF file,\n" "etc.\n" "For the ImageList device, several files (named\n" "filename.1.png, filename.2.png etc.) might be created)\n" ); static PyObject* output_save(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; char*filename = 0; static char *kwlist[] = {"filename", NULL}; int ret; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &filename)) return NULL; Py_BEGIN_ALLOW_THREADS gfxresult_t*result = self->output_device->finish(self->output_device); self->output_device = 0; ret = result->save(result, filename); result->destroy(result); Py_END_ALLOW_THREADS if(ret < 0) { return PY_ERROR("Couldn't write to %s", filename); } return PY_NONE; } PyDoc_STRVAR(output_startpage_doc, \ "startpage(width, height)\n\n" "Starts a new page/frame in the output device.\n" "The usual way to render documents is to start a new page in the\n" "device for each page in the document:\n" "\n" "for pagenr in range(1,doc.pages+1):\n" " page = doc.getPage(pagenr)\n" " output.startpage(page.width, page.height)\n" " page.render(output)\n" " output.endpage()\n" "\n" "It is, however, also possible to render more than one document page\n" "to a single output page. E.g. for side-by-side or book views.\n" ); static PyObject* output_startpage(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; int width=0, height=0; if (!PyArg_ParseTuple(args, "ii", &width, &height)) return NULL; Py_BEGIN_ALLOW_THREADS self->output_device->startpage(self->output_device, width, height); Py_END_ALLOW_THREADS return PY_NONE; } /* as the definition of the python image type comes from another module (not included here, reproduce the necessary structure and extract the image without using the type definition */ typedef struct { PyObject_HEAD gfximage_t*image; PyObject* strrepr; } ImageObject; static gfximage_t*toImage(PyObject*_bitmap) { if(!_bitmap || !_bitmap->ob_type->tp_name || strcmp(_bitmap->ob_type->tp_name, "Image")) { PY_ERROR("Second argument to fillbitmap must be an image"); return 0; } ImageObject*bitmap = (ImageObject*)_bitmap; return bitmap->image; } static gfxline_t*toLine(PyObject*_line) { int t; int num = PyList_Size(_line); gfxline_t first; first.next = 0; gfxline_t*last=&first; for(t=0;tnext = l; last = l; if(type[0]=='m') { l->type = gfx_moveTo; if(size!=3) return PY_ERROR("need 2 values for move"); l->x = PyFloat_AsDouble(PyTuple_GetItem(p, 1)); l->y = PyFloat_AsDouble(PyTuple_GetItem(p, 2)); } else if(type[0]=='l') { l->type = gfx_lineTo; if(size!=3) return PY_ERROR("need 2 values for line"); l->x = PyFloat_AsDouble(PyTuple_GetItem(p, 1)); l->y = PyFloat_AsDouble(PyTuple_GetItem(p, 2)); } else if(type[0]=='s') { l->type = gfx_splineTo; if(size!=5) return PY_ERROR("need 4 values for spline"); l->x = PyFloat_AsDouble(PyTuple_GetItem(p, 1)); l->y = PyFloat_AsDouble(PyTuple_GetItem(p, 2)); l->sx = PyFloat_AsDouble(PyTuple_GetItem(p, 3)); l->sy = PyFloat_AsDouble(PyTuple_GetItem(p, 4)); } else { return PY_ERROR("Unknown line code '%s'", type); } } return first.next; } PyDoc_STRVAR(output_fillbitmap_doc, \ "fillbitmap()\n\n" "fill a polygon with a bitmap pattern\n" ); static PyObject* output_fillbitmap(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; PyObject*_line=0; PyObject*_bitmap=0; static char *kwlist[] = {"line", "bitmap", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O", kwlist, &PyList_Type, &_line, &_bitmap)) return NULL; gfximage_t*image = toImage(_bitmap); if(!image) return PY_ERROR("invalid image"); gfxline_t*line = toLine(_line); if(!line) return 0; /* TODO */ gfxmatrix_t m; memset(&m, 0, sizeof(gfxmatrix_t)); m.m00 = m.m11 = 1.0; self->output_device->fillbitmap(self->output_device, line, image, &m, 0); gfxline_free(line); return PY_NONE; } PyDoc_STRVAR(output_fill_doc, \ "fill()\n\n" "fill a polygon with a color\n" ); static PyObject* output_fill(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; PyObject*_line=0; PyObject*_bitmap=0; static char *kwlist[] = {"line", "color", NULL}; PyObject* color=0; int a=255,r=0,g=0,b=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O", kwlist, &PyList_Type, &_line, &color)) return NULL; if(!PyArg_ParseTuple(color, "iiii:color", &a, &r, &g, &b)) { return NULL; } gfxcolor_t c; c.r = r; c.g = g; c.b = b; c.a = a; gfxline_t*line = toLine(_line); if(!line) return 0; /* TODO */ gfxmatrix_t m; memset(&m, 0, sizeof(gfxmatrix_t)); m.m00 = m.m11 = 1.0; self->output_device->fill(self->output_device, line, &c); gfxline_free(line); return PY_NONE; } PyDoc_STRVAR(output_stroke_doc, \ "stroke()\n\n" "stroke a polygon with a color\n" ); static PyObject* output_stroke(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; PyObject*_line=0; PyObject*_bitmap=0; static char *kwlist[] = {"line", "width", "color", NULL}; PyObject* color=0; int a=255,r=0,g=0,b=0; float width = 1.0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!fO", kwlist, &PyList_Type, &_line, &width, &color)) return NULL; if(!PyArg_ParseTuple(color, "iiii:color", &a, &r, &g, &b)) { return NULL; } gfxcolor_t c; c.r = r; c.g = g; c.b = b; c.a = a; gfxline_t*line = toLine(_line); if(!line) return 0; self->output_device->stroke(self->output_device, line, width, &c, /*TODO*/ gfx_capRound, gfx_joinRound, 0.0); gfxline_free(line); return PY_NONE; } PyDoc_STRVAR(output_endpage_doc, \ "endpage()\n\n" "Ends a page in the output device. This function should be called\n" "once for every startpage()\n" ); static PyObject* output_endpage(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; if (!PyArg_ParseTuple(args, "")) return NULL; Py_BEGIN_ALLOW_THREADS self->output_device->endpage(self->output_device); Py_END_ALLOW_THREADS return PY_NONE; } PyDoc_STRVAR(output_setparameter_doc, \ "setparameter(key, value)\n\n" "Set a output-device dependent parameter" ); static PyObject* output_setparameter(PyObject* _self, PyObject* args, PyObject* kwargs) { OutputObject* self = (OutputObject*)_self; static char *kwlist[] = {"key", "value", NULL}; char*key=0,*value=0; if (args && !PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist, &key, &value)) return NULL; self->output_device->setparameter(self->output_device, key, value); return PY_NONE; } PyDoc_STRVAR(f_createSWF_doc, \ "SWF()\n\n" "Creates a device which renders documents to SWF (Flash) files.\n" "Depending on the way the document parser behaves (see the poly2bitmap\n" "and bitmap parameters), the resulting SWF might use vector operations\n" "and Flash Texts to display the document, or just a single bitmap.\n" ); static PyObject* f_createSWF(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {NULL}; if (args && !PyArg_ParseTupleAndKeywords(args, kwargs, "", kwlist)) return NULL; OutputObject*self = PyObject_New(OutputObject, &OutputClass); self->output_device = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_swf_init(self->output_device); return (PyObject*)self; } PyDoc_STRVAR(f_createImageList_doc, \ "ImageList()\n\n" "Creates a device which renders documents to bitmaps.\n" "Each page that is rendered will create new bitmap.\n" "Using save(), you can save the images to a number\n" "of files\n" ); static PyObject* f_createImageList(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "", kwlist)) return NULL; OutputObject*self = PyObject_New(OutputObject, &OutputClass); self->output_device = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_render_init(self->output_device); return (PyObject*)self; } PyDoc_STRVAR(f_createPlainText_doc, \ "PlainText()\n\n" "Creates a device which can be used to extract text from documents,\n" "by passing it as parameter to page.render().\n" "The extracted text can be saved by plaintext.save(filename).\n" ); static PyObject* f_createPlainText(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "", kwlist)) return NULL; OutputObject*self = PyObject_New(OutputObject, &OutputClass); self->output_device = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_text_init(self->output_device); return (PyObject*)self; } #ifdef USE_OPENGL PyDoc_STRVAR(f_createOpenGL_doc, \ "OpenGL()\n\n" "Creates a device which renders everything to OpenGL.\n" "Can be used for desktop display and debugging.\n" "This device is not available on all systems.\n" ); static PyObject* f_createOpenGL(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "", kwlist)) return NULL; OutputObject*self = PyObject_New(OutputObject, &OutputClass); self->output_device = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); gfxdevice_opengl_init(self->output_device); return (PyObject*)self; } #endif static jmp_buf backjump; static int has_backjump = 0; static PyObject* convert_gfxline(gfxline_t*line) { gfxline_t*l; int len = 0, i = 0; l = line; while(l) {l=l->next;len++;} PyObject*list = PyList_New(len); l = line; while(l) { PyObject*point=0; if(l->type == gfx_moveTo) { point = PyTuple_New(3); PyTuple_SetItem(point, 0, pystring_fromstring("m")); PyTuple_SetItem(point, 1, PyFloat_FromDouble(l->x)); PyTuple_SetItem(point, 2, PyFloat_FromDouble(l->y)); } else if(l->type == gfx_lineTo) { point = PyTuple_New(3); PyTuple_SetItem(point, 0, pystring_fromstring("l")); PyTuple_SetItem(point, 1, PyFloat_FromDouble(l->x)); PyTuple_SetItem(point, 2, PyFloat_FromDouble(l->y)); } else if(l->type == gfx_splineTo) { point = PyTuple_New(5); PyTuple_SetItem(point, 0, pystring_fromstring("s")); PyTuple_SetItem(point, 1, PyFloat_FromDouble(l->x)); PyTuple_SetItem(point, 2, PyFloat_FromDouble(l->y)); PyTuple_SetItem(point, 3, PyFloat_FromDouble(l->sx)); PyTuple_SetItem(point, 4, PyFloat_FromDouble(l->sy)); } else { point = PY_NONE; } PyList_SetItem(list, i, point); l = l->next; i++; } return list; } static PyObject* convert_matrix(gfxmatrix_t*m) { PyObject*columns = PyTuple_New(3); PyObject*column0 = PyTuple_New(2); PyTuple_SetItem(column0, 0, PyFloat_FromDouble(m->m00)); PyTuple_SetItem(column0, 1, PyFloat_FromDouble(m->m10)); PyTuple_SetItem(columns, 0, column0); PyObject*column1 = PyTuple_New(2); PyTuple_SetItem(column1, 0, PyFloat_FromDouble(m->m01)); PyTuple_SetItem(column1, 1, PyFloat_FromDouble(m->m11)); PyTuple_SetItem(columns, 1, column1); PyObject*column2 = PyTuple_New(2); PyTuple_SetItem(column2, 0, PyFloat_FromDouble(m->tx)); PyTuple_SetItem(column2, 1, PyFloat_FromDouble(m->ty)); PyTuple_SetItem(columns, 2, column2); return columns; } static PyObject* convert_color(gfxcolor_t*col) { PyObject*obj = PyTuple_New(4); PyTuple_SetItem(obj, 0, pyint_fromlong(col->a)); PyTuple_SetItem(obj, 1, pyint_fromlong(col->r)); PyTuple_SetItem(obj, 2, pyint_fromlong(col->g)); PyTuple_SetItem(obj, 3, pyint_fromlong(col->b)); return obj; } static PyObject* lookup_font(gfxfont_t*font); static PyObject* char_new(gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix); static PyObject* create_bitmap(gfximage_t*img); static gfxfontlist_t* global_fonts; static char callback_python(char*function, gfxdevice_t*dev, const char*format, ...) { OutputObject*self = (OutputObject*)dev->internal; if(!PyObject_HasAttrString(self->pyobj, function)) return 0; va_list ap; va_start(ap, format); PyObject*tuple = PyTuple_New(strlen(format)); int pos = 0; while(format[pos]) { char p = format[pos]; PyObject*obj = 0; switch(p) { case 's': { char*s = va_arg(ap, char*); obj = pystring_fromstring(s); break; } case 'i': { int i = va_arg(ap, int); obj = pyint_fromlong(i); break; } case 'd': { int i = va_arg(ap, double); obj = PyFloat_FromDouble(i); break; } case 'c': { void* ptr = va_arg(ap, void*); gfxcolor_t*col = (gfxcolor_t*)ptr; obj = convert_color(col); break; } case 'f': { void* ptr = va_arg(ap, void*); obj = lookup_font((gfxfont_t*)ptr); break; } case 'l': { void* ptr = va_arg(ap, void*); gfxline_t*line = (gfxline_t*)ptr; obj = convert_gfxline(line); break; } case 'I': { void* ptr = va_arg(ap, void*); obj = create_bitmap((gfximage_t*)ptr); break; } case 'O': { void* ptr = va_arg(ap, void*); obj = (PyObject*)ptr; break; } case 'm': { void* ptr = va_arg(ap, void*); obj = convert_matrix((gfxmatrix_t*)ptr); break; } default: { obj = PY_NONE; break; } } PyTuple_SetItem(tuple, pos, obj); pos++; } va_end(ap); PyObject*f = PyObject_GetAttrString(self->pyobj, function); if(!f) return 0; PyErr_Clear(); PyObject* result = PyObject_CallObject(f, tuple); Py_DECREF(tuple); if(!result) { if(!has_backjump) { PyErr_Print(); PyErr_Clear(); return 1; } else { longjmp(backjump, 1); } } else { Py_DECREF(result); return 1; } } static int my_setparameter(gfxdevice_t*dev, const char*key, const char*value) { callback_python("setparameter", dev, "ss", key, value); return 1; } static void my_startpage(gfxdevice_t*dev, int width, int height) { callback_python("startpage", dev, "ii", width, height); } static void my_startclip(gfxdevice_t*dev, gfxline_t*line) { callback_python("startclip", dev, "l", line); } static void my_endclip(gfxdevice_t*dev) { callback_python("endclip", dev, ""); } static void my_stroke(gfxdevice_t*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit) { char*cap = 0; char*joint = 0; if(cap_style == gfx_capButt) cap = "butt"; else if(cap_style == gfx_capRound) cap = "round"; else if(cap_style == gfx_capSquare) cap = "square"; if(joint_style == gfx_joinMiter) joint = "miter"; else if(joint_style == gfx_joinRound) joint = "round"; else if(joint_style == gfx_joinBevel) joint = "bevel"; callback_python("stroke", dev, "ldcssi", line, width, color, cap, joint, miterLimit); } static void my_fill(gfxdevice_t*dev, gfxline_t*line, gfxcolor_t*color) { callback_python("fill", dev, "lc", line, color); } static void my_fillbitmap(gfxdevice_t*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*imgcoord2devcoord, gfxcxform_t*cxform) { callback_python("fillbitmap", dev, "lImx", line, img, imgcoord2devcoord, cxform); } static void my_fillgradient(gfxdevice_t*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*matrix) { callback_python("fillgradient", dev, "lgsm", line, gradient, type, matrix); } static void my_addfont(gfxdevice_t*dev, gfxfont_t*font) { callback_python("addfont", dev, "f", font); } static void my_drawchar(gfxdevice_t*dev, gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { PyMethodObject*obj = (PyMethodObject*)PyObject_GetAttrString(((OutputObject*)(dev->internal))->pyobj, "drawchar"); if(!obj) { /* if the device doesn't support chars, try drawing a polygon instead */ if(!font) return; gfxglyph_t*glyph = &font->glyphs[glyphnr]; gfxline_t*line2 = gfxline_clone(glyph->line); gfxline_transform(line2, matrix); my_fill(dev, line2, color); gfxline_free(line2); return; } PyFunctionObject*f = (PyFunctionObject*)obj->im_func; PyCodeObject*c = (PyCodeObject*)f->func_code; if(c->co_argcount == 2) { /* new style drawchar method */ CharObject*chr = (CharObject*)char_new(font, glyphnr, color, matrix); callback_python("drawchar", dev, "O", chr); } else { callback_python("drawchar", dev, "ficm", font, glyphnr, color, matrix); } } static void my_drawlink(gfxdevice_t*dev, gfxline_t*line, const char*action, const char*text) { callback_python("drawlink", dev, "lss", line, action, text); } static void my_endpage(gfxdevice_t*dev) { callback_python("endpage", dev, ""); } static gfxresult_t* my_finish(gfxdevice_t*dev) { callback_python("finish", dev, ""); return 0; } PyObject* passthrough_create(PyObject*obj) { OutputObject*self = PyObject_New(OutputObject, &OutputClass); self->pyobj = obj; Py_INCREF(obj); self->output_device = (gfxdevice_t*)malloc(sizeof(gfxdevice_t)); memset(self->output_device, 0, sizeof(gfxdevice_t)); self->output_device->name = strdup("passthrough"); self->output_device->setparameter = my_setparameter; self->output_device->startpage = my_startpage; self->output_device->startclip = my_startclip; self->output_device->addfont = my_addfont; self->output_device->endclip = my_endclip; self->output_device->stroke = my_stroke; self->output_device->fill = my_fill; self->output_device->fillbitmap = my_fillbitmap; self->output_device->fillgradient = my_fillgradient; self->output_device->drawchar = my_drawchar; self->output_device->drawlink = my_drawlink; self->output_device->endpage = my_endpage; self->output_device->finish = my_finish; self->output_device->internal = self; return (PyObject*)self; } PyDoc_STRVAR(f_createPassThrough_doc, \ "PassThrough(device)\n\n" "Creates a PassThrough device, which can be used as parameter in calls\n" "to page.render().\n" "device needs to be a class implementing at least the following functions:\n\n" "setparameter(key,value)\n" "startclip(outline)\n" "endclip()\n" "stroke(outline, width, color, capstyle, jointstyle, miterLimit)\n" "fill(outline, color)\n" "fillbitmap(outline, image, matrix, colortransform)\n" "fillgradient(outline, gradient, gradienttype, matrix)\n" "addfont(font)\n" "drawchar(font, glyph, color, matrix)\n" "drawlink(outline, url)\n" "If any of these functions are not defined, a error message will be printed,\n" "however the rendering process will *not* be aborted.\n" ); static PyObject* f_createPassThrough(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"device", NULL}; PyObject*obj; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", kwlist, &obj)) return NULL; return passthrough_create(obj); } static PyMethodDef output_methods[] = { /* Output functions */ {"save", (PyCFunction)output_save, M_FLAGS, output_save_doc}, {"startpage", (PyCFunction)output_startpage, M_FLAGS, output_startpage_doc}, {"fill", (PyCFunction)output_fill, M_FLAGS, output_fill_doc}, {"fillbitmap", (PyCFunction)output_fillbitmap, M_FLAGS, output_fillbitmap_doc}, {"stroke", (PyCFunction)output_stroke, M_FLAGS, output_stroke_doc}, {"endpage", (PyCFunction)output_endpage, M_FLAGS, output_endpage_doc}, {"setparameter", (PyCFunction)output_setparameter, M_FLAGS, output_setparameter_doc}, {0,0,0,0} }; static void output_dealloc(PyObject* _self) { OutputObject* self = (OutputObject*)_self; if(self->output_device) { gfxresult_t*result = self->output_device->finish(self->output_device); if(result) { result->destroy(result);result=0; } self->output_device = 0; } PyObject_Del(self); } static PyObject* output_getattr(PyObject * _self, char* a) { OutputObject*self = (OutputObject*)_self; /* if(!strcmp(a, "x1")) { return pyint_fromlong(self->output_device->x1); } else if(!strcmp(a, "y1")) { return pyint_fromlong(self->output_device->y1); } else if(!strcmp(a, "x2")) { return pyint_fromlong(self->output_device->x2); } else if(!strcmp(a, "y2")) { return pyint_fromlong(self->output_device->y2); }*/ return forward_getattr(_self, a); } static int output_setattr(PyObject * _self, char* a, PyObject * o) { OutputObject*self = (OutputObject*)_self; if(!pystring_check(o)) return -1; const char*value = pystring_asstring(o); self->output_device->setparameter(self->output_device, a, value); return -1; } static int output_print(PyObject * _self, FILE *fi, int flags) { OutputObject*self = (OutputObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } //--------------------------------------------------------------------- static PyMethodDef glyph_methods[]; static void glyph_dealloc(PyObject* _self) { GlyphObject* self = (GlyphObject*)_self; Py_DECREF(self->font); PyObject_Del(self); } static PyObject* glyph_getattr(PyObject * _self, char* a) { GlyphObject*self = (GlyphObject*)_self; FontObject*font = self->font; if(!strcmp(a, "unicode")) { return pyint_fromlong(font->gfxfont->glyphs[self->nr].unicode); } else if(!strcmp(a, "advance")) { return PyFloat_FromDouble(font->gfxfont->glyphs[self->nr].advance); } else if(!strcmp(a, "polygon")) { return convert_gfxline(font->gfxfont->glyphs[self->nr].line); } return forward_getattr(_self, a); } static int glyph_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static PyObject* glyph_new(FontObject*font, int nr) { GlyphObject*glyph = PyObject_New(GlyphObject, &GlyphClass); glyph->font = font; Py_INCREF(glyph->font); glyph->nr = nr; return (PyObject*)glyph; } static int glyph_print(PyObject * _self, FILE *fi, int flags) { GlyphObject*self = (GlyphObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } static PyMethodDef glyph_methods[] = { /* Glyph functions */ {0,0,0,0} }; //--------------------------------------------------------------------- static PyMethodDef font_methods[]; static void font_dealloc(PyObject* _self) { FontObject* self = (FontObject*)_self; PyObject_Del(self); } static PyObject* font_new(gfxfont_t*gfxfont) { FontObject*font = PyObject_New(FontObject, &FontClass); font->gfxfont = gfxfont; return (PyObject*)font; } static gfxfontlist_t* global_fonts = 0; static PyObject* lookup_font(gfxfont_t*font) { PyObject*fontobj = gfxfontlist_getuserdata(global_fonts, font->id); if(!fontobj) { fontobj = font_new(font); global_fonts = gfxfontlist_addfont2(global_fonts, font, fontobj); } Py_INCREF(fontobj); return fontobj; } static PyObject* font_getattr(PyObject * _self, char* a) { FontObject*self = (FontObject*)_self; if(!strcmp(a, "num_glyphs")) { return pyint_fromlong(self->gfxfont->num_glyphs); } else if(!strcmp(a, "name")) { return pystring_fromstring(self->gfxfont->id); } return forward_getattr(_self, a); } static int font_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static PyObject* font_glyph(PyObject * _self, PyObject* args, PyObject* kwargs) { FontObject*self = (FontObject*)_self; static char *kwlist[] = {"nr", NULL}; static long nr = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &nr)) return NULL; return glyph_new(self, nr); } static int font_print(PyObject * _self, FILE *fi, int flags) { FontObject*self = (FontObject*)_self; fprintf(fi, "", self->gfxfont->id, _self, _self?_self->ob_refcnt:0); return 0; } static PyMethodDef font_methods[] = { /* Font functions */ {"get_glyph", (PyCFunction)font_glyph, M_FLAGS, "get a glyph from this font"}, {0,0,0,0} }; //--------------------------------------------------------------------- static PyMethodDef char_methods[]; static void char_dealloc(PyObject* _self) { CharObject* self = (CharObject*)_self; Py_DECREF(self->font); PyObject_Del(self); } static PyObject* char_getattr(PyObject * _self, char* a) { CharObject*self = (CharObject*)_self; FontObject*font = self->font; gfxglyph_t*glyph = &font->gfxfont->glyphs[self->nr]; if(!strcmp(a, "unicode")) { return pyint_fromlong(glyph->unicode); } else if(!strcmp(a, "advance")) { return PyFloat_FromDouble((self->matrix.m00 * glyph->advance)); } else if(!strcmp(a, "matrix")) { return convert_matrix(&self->matrix); } else if(!strcmp(a, "color")) { return convert_color(&self->color); } else if(!strcmp(a, "size")) { return pyint_fromlong(self->size); } else if(!strcmp(a, "glyph")) { return glyph_new(font, self->nr); } else if(!strcmp(a, "font")) { Py_INCREF(font); return (PyObject*)font; } else if(!strcmp(a, "x")) { int x = self->matrix.tx; return pyint_fromlong(x); } else if(!strcmp(a, "y")) { int y = self->matrix.ty; return pyint_fromlong(y); } int lsb = 0; //left side bearing int x1 = self->matrix.tx - (self->matrix.m00) * lsb; int y1 = self->matrix.ty - (-self->matrix.m11) * font->gfxfont->ascent; int x2 = self->matrix.tx + (self->matrix.m00) * font->gfxfont->glyphs[self->nr].advance; int y2 = self->matrix.ty + (-self->matrix.m11) * font->gfxfont->descent; if(!strcmp(a, "bbox")) { PyObject*bbox = PyTuple_New(4); PyTuple_SetItem(bbox, 0, pyint_fromlong(x1)); PyTuple_SetItem(bbox, 1, pyint_fromlong(y1)); PyTuple_SetItem(bbox, 2, pyint_fromlong(x2)); PyTuple_SetItem(bbox, 3, pyint_fromlong(y2)); return bbox; } else if(!strcmp(a, "x1")) { return pyint_fromlong(x1); } else if(!strcmp(a, "y1")) { return pyint_fromlong(y1); } else if(!strcmp(a, "x2")) { return pyint_fromlong(x2); } else if(!strcmp(a, "y2")) { return pyint_fromlong(y2); } return forward_getattr(_self, a); } static int char_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static PyObject* char_new(gfxfont_t*font, int glyphnr, gfxcolor_t*color, gfxmatrix_t*matrix) { FontObject*fontobj = (FontObject*)lookup_font(font); CharObject*chr = PyObject_New(CharObject, &CharClass); chr->font = fontobj; Py_INCREF(fontobj); chr->nr = glyphnr; chr->matrix = *matrix; chr->size = ceil(1024*fabs(matrix->m00 + matrix->m10)); //horizontal size chr->color = *color; return (PyObject*)chr; return 0; } static int char_print(PyObject * _self, FILE *fi, int flags) { CharObject*self = (CharObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } static PyMethodDef char_methods[] = { /* char functions */ {0,0,0,0} }; //--------------------------------------------------------------------- static PyObject* page_render(PyObject* _self, PyObject* args, PyObject* kwargs); static PyObject* page_asImage(PyObject* _self, PyObject* args, PyObject* kwargs); PyDoc_STRVAR(page_render_doc, \ "render(output, move=(0,0), clip=None)\n\n" "Renders a page to the rendering backend specified by the output\n" "parameter. Rendering consists of calling a number of functions on the\n" "output device, see the description of the \"PassThrough\" device.\n" "The page may be shifted to a given position using the move parameter,\n" "and may also be clipped to a specific size using the clip parameter.\n" "The clipping operation is applied after the move operation.\n" "If you don't need to specify custom page sizes or clippings, use\n" "page.draw instead.\n" ); static PyObject* page_render(PyObject* _self, PyObject* args, PyObject* kwargs) { PageObject* self = (PageObject*)_self; static char *kwlist[] = {"dev", "move", "clip", NULL}; OutputObject*output = 0; PyObject*move=0; PyObject*clip=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|OO", kwlist, &OutputClass, &output, &move,&clip )) return NULL; int x=0,y=0; int cx1=0,cy1=0,cx2=0,cy2=0; if(move) { if (!PyArg_ParseTuple(move, "ii", &x,&y)) return NULL; } if(clip) { if (!PyArg_ParseTuple(clip, "iiii", &cx1,&cy1,&cx2,&cy2)) return NULL; } Py_BEGIN_ALLOW_THREADS if(x|y|cx1|cx2|cy1|cy2) self->page->rendersection(self->page, output->output_device,x,y,cx1,cy1,cx2,cy2); else self->page->render(self->page, output->output_device); Py_END_ALLOW_THREADS return PY_NONE; } PyDoc_STRVAR(page_draw_doc, \ "draw(output)\n\n" "Renders a page to the rendering backend specified by the output\n" "parameter, with the default for page width and height.\n" ); static PyObject* page_draw(PyObject* _self, PyObject* args, PyObject* kwargs) { PageObject* self = (PageObject*)_self; static char *kwlist[] = {"dev", NULL}; PyObject*output = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O", kwlist, &output)) return NULL; PyObject*passthrough = 0; if(output->ob_type != &OutputClass) { passthrough = passthrough_create(output); output = passthrough; } gfxdevice_t*device = ((OutputObject*)passthrough)->output_device; if(setjmp(backjump)) { /* exception in the code below*/ has_backjump = 0; //FIXME: this clear the exception, for some reason //if(passthrough) { // Py_DECREF(passthrough); //} return 0; } has_backjump = 1; device->startpage(device, self->page->width, self->page->height); self->page->render(self->page, device); device->endpage(device); has_backjump = 0; if(passthrough) { Py_DECREF(passthrough); } return PY_NONE; } PyDoc_STRVAR(page_asImage_doc, \ "asImage(width, height)\n\n" "Creates a bitmap from a page. The bitmap will be returned as a string\n" "containing RGB triplets. The bitmap will be rescaled to the specified width and\n" "height. The aspect ratio of width and height doesn't need to be the same\n" "as the page.\n" ); static PyObject* page_asImage(PyObject* _self, PyObject* args, PyObject* kwargs) { PageObject* self = (PageObject*)_self; static char *kwlist[] = {"width", "height", "allow_threads", NULL}; int width=0,height=0; int allow_threads=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii|i", kwlist, &width, &height, &allow_threads)) return NULL; if(!width || !height) { return PY_ERROR("invalid dimensions: %dx%d", width,height); } PyThreadState *_save=0; if (allow_threads) { Py_UNBLOCK_THREADS } gfxdevice_t dev1,dev2; gfxdevice_render_init(&dev1); dev1.setparameter(&dev1, "antialise", "2"); dev1.setparameter(&dev1, "fillwhite", "1"); gfxdevice_rescale_init(&dev2, &dev1, width, height, 0); dev2.startpage(&dev2, self->page->width, self->page->height); self->page->render(self->page, &dev2); dev2.endpage(&dev2); gfxresult_t*result = dev2.finish(&dev2); gfximage_t*img = (gfximage_t*)result->get(result,"page0"); int l = img->width*img->height; int ll = l*3; unsigned char*data = (unsigned char*)malloc(ll); int s,t; for(t=0,s=0;tdata[t].r; data[s+1] = img->data[t].g; data[s+2] = img->data[t].b; } result->destroy(result); result=0; free(img->data); free(img); PyObject *ret; #ifdef PYTHON3 ret = PyByteArray_FromStringAndSize((char*)data,ll); #else ret = PyString_FromStringAndSize((char*)data,ll); #endif free(data); if (allow_threads) { Py_BLOCK_THREADS } return ret; } static PyMethodDef page_methods[] = { /* Page functions */ {"render", (PyCFunction)page_render, M_FLAGS, page_render_doc}, {"draw", (PyCFunction)page_draw, M_FLAGS, page_draw_doc}, {"asImage", (PyCFunction)page_asImage, M_FLAGS, page_asImage_doc}, {0,0,0,0} }; static void page_dealloc(PyObject* _self) { PageObject* self = (PageObject*)_self; if(self->page) { self->page->destroy(self->page); self->page=0; } if(self->parent) { Py_DECREF(self->parent); self->parent=0; } PyObject_Del(self); } static PyObject* page_getattr(PyObject * _self, char* a) { PageObject*self = (PageObject*)_self; if(!strcmp(a, "size")) { return Py_BuildValue("(ii)", self->page->width, self->page->height); } if(!strcmp(a, "doc")) { Py_INCREF(self->parent); return self->parent; } if(!strcmp(a, "nr")) { return pyint_fromlong(self->nr); } else if(!strcmp(a, "width")) { return pyint_fromlong(self->page->width); } else if(!strcmp(a, "height")) { return pyint_fromlong(self->page->height); } return forward_getattr(_self, a); } static int page_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static int page_print(PyObject * _self, FILE *fi, int flags) { PageObject*self = (PageObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } //--------------------------------------------------------------------- PyDoc_STRVAR(doc_getPage_doc, "getPage(nr)\n\n" "Get one page from a document file. The nr parameter specifies\n" "which page to retrieve. Counting starts at 1, so the first page\n" "can be retrieved by\n" " page = doc.getPage(1)\n" ".\n" "You can find out how many pages a document contains by querying\n" "its pages field (doc.pages)\n" ); static PyObject*page_new(DocObject*doc, int pagenr) { PageObject*page = PyObject_New(PageObject, &PageClass); page->page = doc->doc->getpage(doc->doc, pagenr); page->nr = pagenr; page->parent = (PyObject*)doc; Py_INCREF(page->parent); if(!page->page) { PyObject_Del(page); return PY_ERROR("Couldn't extract page %d", pagenr); } return (PyObject*)page; } static PyObject* doc_getPage(PyObject* _self, PyObject* args, PyObject* kwargs) { DocObject* self = (DocObject*)_self; static char *kwlist[] = {"nr", NULL}; int pagenr = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &pagenr)) return NULL; return page_new(self, pagenr); } static PyObject* doc_getiter(PyObject* _self) { DocObject* self = (DocObject*)_self; self->page_pos = 1; Py_INCREF(self); return (PyObject*)self; } static PyObject* doc_iternext(PyObject* _self) { DocObject* self = (DocObject*)_self; if(self->page_pos > self->doc->num_pages) { return NULL; } return page_new(self, self->page_pos++); } PyDoc_STRVAR(doc_getInfo_doc, "getInfo(key)\n\n" "Retrieve some information about a document. For PDF files, key\n" "can have the following values:\n\n" "\"title\", \"subject\", \"keywords\", \"author\", \"creator\", \"producer\",\n" "\"creationdate\", \"moddate\", \"linearized\", \"tagged\", \"encrypted\",\n" "\"oktoprint\", \"oktocopy\", \"oktochange\", \"oktoaddnotes\", \"version\".\n\n" "If the \"oktocopy\" digital rights management flag is set to \"no\", then the\n" "pdf parser won't allow you to access the PDF file. Trying to extract pages\n" "from it will raise an exception.\n" ); static PyObject* doc_getInfo(PyObject* _self, PyObject* args, PyObject* kwargs) { DocObject* self = (DocObject*)_self; static char *kwlist[] = {"key", NULL}; char*key = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &key)) return NULL; char*s = self->doc->getinfo(self->doc, key); return pystring_fromstring(s); } PyDoc_STRVAR(doc_setparameter_doc, "setparameter(key, value)\n\n" "Pass a parameter or setting to the document parser. Unlike\n" "the module level setparameter() function, the parameters set\n" "using setparameter will only be valid for the object itself\n" "during its lifetime.\n" ); static PyObject* doc_setparameter(PyObject* _self, PyObject* args, PyObject* kwargs) { DocObject* self = (DocObject*)_self; static char *kwlist[] = {"key", "value", NULL}; char*key = 0, *value=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist, &key,&value)) return NULL; self->doc->setparameter(self->doc, key, value); return PY_NONE; } PyDoc_STRVAR(f_open_doc, "open(type, filename) -> object\n\n" "Open a PDF, SWF or image file. The type argument should be \"pdf\",\n" "\"swf\" or \"image\" accordingly. It returns a doc object which can be\n" "used to process the file contents.\n" "E.g.\n" " doc = open(\"pdf\", \"document.pdf\")\n" " doc = open(\"swf\", \"flashfile.swf\")\n" " doc = open(\"image\", \"image.png\")\n" "If the file could not be loaded, or is a encrypted PDF file without\n" "a proper password specified, an exception is being raised.\n" "If the filename argument contains a '|' char, everything behind\n" "the '|' is treated as password used for opening the file.\n" "E.g.\n" " doc = open(\"pdf\", \"document.pdf|mysecretpassword\")\n" ".\n" "Notice that for image files, the only supported file formats right now\n" "are jpeg and png.\n" ); static PyObject* f_open(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"type", "filename", NULL}; char*filename=0; char*type=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist, &type, &filename)) { static char *kwlist2[] = {"filename", NULL}; type = 0; PyErr_Clear(); if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist2, &filename)) return NULL; } DocObject*self = PyObject_New(DocObject, &DocClass); if(!type) { //autodetect type = "pdf"; //default int l = strlen(filename); if(l>4) { if(filename[l-4]=='.') { if(strchr("pP", filename[l-3]) && strchr("dD", filename[l-2]) && strchr("fF", filename[l-1])) type = "pdf"; if(strchr("jJ", filename[l-3]) && strchr("pP", filename[l-2]) && strchr("gG", filename[l-1])) type = "image"; if(strchr("pP", filename[l-3]) && strchr("nN", filename[l-2]) && strchr("gG", filename[l-1])) type = "image"; if(strchr("sS", filename[l-3]) && strchr("wW", filename[l-2]) && strchr("fF", filename[l-1])) type = "swf"; } else if(filename[l-5]=='.') { type = "image"; } } } state_t*state = STATE(module); if(!strcmp(type,"pdf")) { Py_BEGIN_ALLOW_THREADS self->doc = state->pdfdriver->open(state->pdfdriver,filename); Py_END_ALLOW_THREADS } else if(!strcmp(type, "image") || !strcmp(type, "img")) { Py_BEGIN_ALLOW_THREADS self->doc = state->imagedriver->open(state->imagedriver, filename); Py_END_ALLOW_THREADS } else if(!strcmp(type, "swf") || !strcmp(type, "SWF")) { Py_BEGIN_ALLOW_THREADS self->doc = state->swfdriver->open(state->imagedriver, filename); Py_END_ALLOW_THREADS } else return PY_ERROR("Unknown type %s", type); if(!self->doc) { PyObject_Del(self); return PY_ERROR("Couldn't open %s", filename); } self->filename = strdup(filename); return (PyObject*)self; } static PyMethodDef doc_methods[] = { /* PDF functions */ {"getPage", (PyCFunction)doc_getPage, METH_KEYWORDS, doc_getPage_doc}, {"getInfo", (PyCFunction)doc_getInfo, METH_KEYWORDS, doc_getInfo_doc}, {"setparameter", (PyCFunction)doc_setparameter, METH_KEYWORDS, doc_setparameter_doc}, {0,0,0,0} }; static void doc_dealloc(PyObject* _self) { DocObject* self = (DocObject*)_self; if(self->doc) { self->doc->destroy(self->doc); self->doc=0; } if(self->filename) { free(self->filename);self->filename=0; } PyObject_Del(self); } static PyObject* doc_getattr(PyObject * _self, char* a) { DocObject*self = (DocObject*)_self; if(!strcmp(a, "pages")) { return pyint_fromlong(self->doc->num_pages); } if(!strcmp(a, "filename")) { return pystring_fromstring(self->filename); } return forward_getattr(_self, a); } static int doc_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static int doc_print(PyObject * _self, FILE *fi, int flags) { DocObject*self = (DocObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } //--------------------------------------------------------------------- PyDoc_STRVAR(f_createKDTree_doc, \ "KDTree()\n\n" "Creates a KDTree, which can be used to store bounding boxes\n" ); static PyObject* f_createKDTree(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "", kwlist)) return NULL; KDTreeObject*self = PyObject_New(KDTreeObject, &KDTreeClass); self->kdtree = kdtree_new(); return (PyObject*)self; } static void gfx_kdtree_dealloc(PyObject* _self) { KDTreeObject* self = (KDTreeObject*)_self; /* FIXME: we still need to Py_DECREF all PyObjects in the tree */ kdtree_destroy(self->kdtree); PyObject_Del(self); } static PyObject* gfx_kdtree_getattr(PyObject * _self, char* a) { KDTreeObject*self = (KDTreeObject*)_self; return forward_getattr(_self, a); } static int gfx_kdtree_setattr(PyObject * self, char* a, PyObject * o) { return -1; } static int gfx_kdtree_print(PyObject * _self, FILE *fi, int flags) { KDTreeObject*self = (KDTreeObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } PyDoc_STRVAR(gfx_kdtree_add_box_doc, "put(bbox, data)\n\n" "Add a rectangular area to the tree. All queries within that area\n" "will subsequently return 'data'\n" ); static PyObject* gfx_kdtree_add_box(PyObject* _self, PyObject* args, PyObject* kwargs) { KDTreeObject* self = (KDTreeObject*)_self; static char *kwlist[] = {"bbox", "data", NULL}; int x1=0,y1=0,x2=0,y2=0; PyObject*value=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "(iiii)O", kwlist, &x1, &y1, &x2, &y2, &value)) return NULL; kdtree_add_box(self->kdtree, x1,y1,x2,y2, value); Py_INCREF(value); return PY_NONE; } PyDoc_STRVAR(gfx_kdtree_find_doc, "find(x,y)\n\n" "Look for a coordinate in the kdtree. It will return last inserted object covering that position, or None.\n" ); static PyObject* gfx_kdtree_find(PyObject* _self, PyObject* args, PyObject* kwargs) { KDTreeObject* self = (KDTreeObject*)_self; static char *kwlist[] = {"x", "y", NULL}; int x=0,y=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ii", kwlist, &x, &y)) return NULL; PyObject*value = (PyObject*)kdtree_find(self->kdtree, x,y); if(!value) { return PY_NONE; } else { Py_INCREF(value); return value; } } static PyMethodDef gfx_kdtree_methods[] = { {"add_box", (PyCFunction)gfx_kdtree_add_box, METH_KEYWORDS, gfx_kdtree_add_box_doc}, {"find", (PyCFunction)gfx_kdtree_find, METH_KEYWORDS, gfx_kdtree_find_doc}, {0,0,0,0} }; //--------------------------------------------------------------------- PyDoc_STRVAR(f_createBitmap_doc, \ "Bitmap()\n\n" "Creates a Bitmap, which can be used to store bounding boxes\n" ); static PyObject* create_bitmap(gfximage_t*img) { BitmapObject*self = PyObject_New(BitmapObject, &BitmapClass); self->image = malloc(sizeof(gfximage_t)); self->image->data = malloc(sizeof(gfxcolor_t)*img->width*img->height); memcpy(self->image->data, img->data, sizeof(gfxcolor_t)*img->width*img->height); self->image->width = img->width; self->image->height = img->height; return (PyObject*)self; } static void gfx_bitmap_dealloc(PyObject* _self) { BitmapObject* self = (BitmapObject*)_self; free(self->image->data); free(self->image); PyObject_Del(self); } static PyObject* gfx_bitmap_getattr(PyObject * _self, char* a) { BitmapObject*self = (BitmapObject*)_self; if(!strcmp(a, "width")) { return pyint_fromlong(self->image->width); } else if(!strcmp(a, "height")) { return pyint_fromlong(self->image->height); } return forward_getattr(_self, a); } static int gfx_bitmap_setattr(PyObject * self, char* a, PyObject * o) { return -1; } PyDoc_STRVAR(gfx_bitmap_save_png_doc, "save_jpeg(filename, quality)\n\n" "Save bitmap to a png file.\n" ); static PyObject* gfx_bitmap_save_png(PyObject* _self, PyObject* args, PyObject* kwargs) { ImageObject* self = (ImageObject*)_self; static char *kwlist[] = {"filename", NULL}; char*filename=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &filename)) return NULL; gfximage_save_png_quick(self->image, filename); return PY_NONE; } PyDoc_STRVAR(gfx_bitmap_save_jpeg_doc, "save_jpeg(filename, quality)\n\n" "Save bitmap to a jpeg file. The quality parameter is optional.\n" ); static PyObject* gfx_bitmap_save_jpeg(PyObject* _self, PyObject* args, PyObject* kwargs) { ImageObject* self = (ImageObject*)_self; static char *kwlist[] = {"filename", "quality", NULL}; char*filename=0; int quality=95; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i", kwlist, &filename, &quality)) return NULL; gfximage_save_jpeg(self->image, filename, quality); return PY_NONE; } static int gfx_bitmap_print(PyObject * _self, FILE *fi, int flags) { BitmapObject*self = (BitmapObject*)_self; fprintf(fi, "", _self, _self?_self->ob_refcnt:0); return 0; } static PyMethodDef gfx_bitmap_methods[] = { {"save_png", (PyCFunction)gfx_bitmap_save_png, METH_KEYWORDS, gfx_bitmap_save_png_doc}, {"save_jpeg", (PyCFunction)gfx_bitmap_save_jpeg, METH_KEYWORDS, gfx_bitmap_save_jpeg_doc}, {0,0,0,0} }; //--------------------------------------------------------------------- #ifndef PYTHON3 #define PYTHON23_HEAD_INIT \ PyObject_HEAD_INIT(NULL) \ 0, #else #define PYTHON23_HEAD_INIT \ PyVarObject_HEAD_INIT(&PyType_Type, 0) #endif PyDoc_STRVAR(output_doc, "An Output object can be used as parameter to the render()\n" "call of a page. It's not possible to create this type of\n" "object directly (i.e., from a class), however you can\n" "use a PassThrough() device to pass things over to Python.\n" "Examples for classes implementing the Output class are: \n" "ImageList, SWF, PlainText and PassThrough.\n" ); static PyTypeObject OutputClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Output", tp_basicsize: sizeof(OutputObject), tp_itemsize: 0, tp_dealloc: output_dealloc, tp_print: output_print, tp_getattr: output_getattr, tp_setattr: output_setattr, tp_doc: output_doc, tp_methods: output_methods }; PyDoc_STRVAR(page_doc, "A Page object contains a single page of a document.\n" "page.width and page.height (or page.size) contain the\n" "page dimensions. page.nr is the number of the page, and\n" "page.doc is the parent document.\n" ); static PyTypeObject PageClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Page", tp_basicsize: sizeof(PageObject), tp_itemsize: 0, tp_dealloc: page_dealloc, tp_print: page_print, tp_getattr: page_getattr, tp_setattr: page_setattr, tp_doc: page_doc, tp_methods: page_methods }; PyDoc_STRVAR(doc_doc, "A Doc object is used for storing a document (like a PDF).\n" "doc.pages contains the number of pages in the document,\n" "and doc.filename the name of the file the document was\n" "created (loaded) from. If the document was created from\n" "an image file, the number of pages is always 1\n" ); static PyTypeObject DocClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Doc", tp_basicsize: sizeof(DocObject), tp_itemsize: 0, tp_dealloc: doc_dealloc, tp_print: doc_print, tp_getattr: doc_getattr, tp_setattr: doc_setattr, tp_doc: doc_doc, tp_methods: doc_methods, tp_iter: doc_getiter, tp_iternext: doc_iternext, #ifndef PYTHON3 tp_flags: Py_TPFLAGS_HAVE_ITER, #endif }; PyDoc_STRVAR(font_doc, "A font is a list of glyphs\n" ); static PyTypeObject FontClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Font", tp_basicsize: sizeof(FontObject), tp_itemsize: 0, tp_dealloc: font_dealloc, tp_print: font_print, tp_getattr: font_getattr, tp_setattr: font_setattr, tp_doc: font_doc, tp_methods: font_methods, }; PyDoc_STRVAR(glyph_doc, "A glyph is a polygon and a unicode index\n" ); static PyTypeObject GlyphClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Glyph", tp_basicsize: sizeof(GlyphObject), tp_itemsize: 0, tp_dealloc: glyph_dealloc, tp_print: glyph_print, tp_getattr: glyph_getattr, tp_setattr: glyph_setattr, tp_doc: glyph_doc, tp_methods: glyph_methods, }; PyDoc_STRVAR(char_doc, "A char is a glyph at a given position (in a given color)\n" ); static PyTypeObject CharClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Char", tp_basicsize: sizeof(CharObject), tp_itemsize: 0, tp_dealloc: char_dealloc, tp_print: char_print, tp_getattr: char_getattr, tp_setattr: char_setattr, tp_doc: char_doc, tp_methods: char_methods, }; PyDoc_STRVAR(gfx_bitmap_doc, "A bitmap.\n" ); static PyTypeObject BitmapClass = { PYTHON23_HEAD_INIT tp_name: "gfx.Bitmap", tp_basicsize: sizeof(BitmapObject), tp_itemsize: 0, tp_dealloc: gfx_bitmap_dealloc, tp_print: gfx_bitmap_print, tp_getattr: gfx_bitmap_getattr, tp_setattr: gfx_bitmap_setattr, tp_doc: gfx_bitmap_doc, tp_methods: gfx_bitmap_methods, }; PyDoc_STRVAR(gfx_kdtree_doc, "A kdtree is a two dimensional tree for storing bounding box data\n" ); static PyTypeObject KDTreeClass = { PYTHON23_HEAD_INIT tp_name: "gfx.KDTree", tp_basicsize: sizeof(KDTreeObject), tp_itemsize: 0, tp_dealloc: gfx_kdtree_dealloc, tp_print: gfx_kdtree_print, tp_getattr: gfx_kdtree_getattr, tp_setattr: gfx_kdtree_setattr, tp_doc: gfx_kdtree_doc, tp_methods: gfx_kdtree_methods, }; //===================================================================== PyDoc_STRVAR(f_setparameter_doc, \ "setparameter(key,value)\n\n" "Set a parameter in the gfx module (which might affect the PDF\n" "parser or any of the rendering backends). This is a parameter\n" "which would usually be passed with the \"-s\" option to pdf2swf.\n" "For a list of all parameters, see the output of\n" " pdf2swf -s help\n" "and\n" " pdf2swf somefile.pdf -s help\n" ".\n" ); static PyObject* f_setparameter(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"key", "value", NULL}; char*key=0,*value=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist, &key, &value)) return NULL; state_t*state = STATE(module); state->pdfdriver->setparameter(state->pdfdriver,key,value); return PY_NONE; } PyDoc_STRVAR(f_verbose_doc, \ "verbose(level)\n\n" "Set the logging verbosity of the gfx module. Log levels are:\n" "level=-1 Log nothing\n" "level=0 (fatal) Log only fatal errors\n" "level=1 (error) Log only fatal errors and errors\n" "level=2 (warn) Log all errors and warnings\n" "level=3 (notice) Log also some rudimentary data about the parsing/conversion\n" "level=4 (verbose) Log some additional parsing information\n" "level=5 (debug) Log debug statements\n" "level=6 (trace) Log extended debug statements\n" "All logging messages are written to stdout.\n" ); static PyObject* f_verbose(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"val", NULL}; int val; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist, &val)) return NULL; setConsoleLogging(val); return PY_NONE; } PyDoc_STRVAR(f_addfont_doc, \ "addfont(filename)\n\n" "Passes an additional font file to the PDF parser. If a PDF contains\n" "external fonts (i.e. fonts which are not contained in the PDF itself)\n" "then the files added by addfont() will be searched.\n" ); static PyObject* f_addfont(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"filename", NULL}; char*filename=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &filename)) return NULL; state_t*state = STATE(module); state->pdfdriver->setparameter(state->pdfdriver,"font", filename); return PY_NONE; } PyDoc_STRVAR(f_addfontdir_doc, \ "addfontdir(dirname)\n\n" "Passes a complete directory containing fonts to the PDF parser. Any\n" "font file within this directory might be used to resolve external fonts\n" "in PDF files\n" ); static PyObject* f_addfontdir(PyObject* module, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"filename", NULL}; char*filename=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", kwlist, &filename)) return NULL; state_t*state = STATE(module); state->pdfdriver->setparameter(state->pdfdriver,"fontdir", filename); return PY_NONE; } static PyMethodDef gfx_methods[] = { /* sources */ {"open", (PyCFunction)f_open, M_FLAGS, f_open_doc}, {"addfont", (PyCFunction)f_addfont, M_FLAGS, f_addfont_doc}, {"addfontdir", (PyCFunction)f_addfontdir, M_FLAGS, f_addfontdir_doc}, {"setparameter", (PyCFunction)f_setparameter, M_FLAGS, f_setparameter_doc}, {"verbose", (PyCFunction)f_verbose, M_FLAGS, f_verbose_doc}, /* devices */ {"SWF", (PyCFunction)f_createSWF, M_FLAGS, f_createSWF_doc}, {"ImageList", (PyCFunction)f_createImageList, M_FLAGS, f_createImageList_doc}, {"PlainText", (PyCFunction)f_createPlainText, M_FLAGS, f_createPlainText_doc}, {"PassThrough", (PyCFunction)f_createPassThrough, M_FLAGS, f_createPassThrough_doc}, #ifdef USE_OPENGL {"OpenGL", (PyCFunction)f_createOpenGL, M_FLAGS, f_createOpenGL_doc}, #endif {"KDTree", (PyCFunction)f_createKDTree, M_FLAGS, f_createKDTree_doc}, /* sentinel */ {0, 0, 0, 0} }; PyDoc_STRVAR(gfx_doc, \ "This module contains a PDF parser (based on xpdf) and a number of\n" "rendering backends. In particular, it can extract text from PDF pages,\n" "create bitmaps from them, or convert PDF files to SWF.\n" "The latter functionality is similar to what is offered by swftools'\n" "(http://www.swftools.org) pdf2swf utility, however more powerful-\n" "You can also create individual SWF files from single pages of the PDF\n" "or mix pages from different PDF files.\n" ); void gfx_free(void*module) { state_t*state = STATE(module); if(state->pdfdriver && state->pdfdriver->destroy) state->pdfdriver->destroy(state->pdfdriver); if(state->swfdriver && state->swfdriver->destroy) state->swfdriver->destroy(state->swfdriver); if(state->imagedriver && state->imagedriver->destroy) state->imagedriver->destroy(state->imagedriver); memset(state, 0, sizeof(state_t)); } #ifdef PYTHON3 static struct PyModuleDef gfx_moduledef = { PyModuleDef_HEAD_INIT, "gfx", gfx_doc, sizeof(state_t), gfx_methods, /*reload*/NULL, /*traverse*/NULL, /*clear*/NULL, gfx_free, }; #endif PyObject * PyInit_gfx(void) { initLog(0,0,0,0,0,2); #ifdef PYTHON3 PyObject*module = PyModule_Create(&gfx_moduledef); #else PyObject*module = Py_InitModule3("gfx", gfx_methods, gfx_doc); OutputClass.ob_type = &PyType_Type; PageClass.ob_type = &PyType_Type; DocClass.ob_type = &PyType_Type; FontClass.ob_type = &PyType_Type; CharClass.ob_type = &PyType_Type; KDTreeClass.ob_type = &PyType_Type; BitmapClass.ob_type = &PyType_Type; #endif state_t* state = STATE(module); memset(state, 0, sizeof(state_t)); state->pdfdriver = gfxsource_pdf_create(); state->swfdriver = gfxsource_swf_create(); state->imagedriver = gfxsource_image_create(); PyObject*module_dict = PyModule_GetDict(module); PyDict_SetItemString(module_dict, "Doc", (PyObject*)&DocClass); PyDict_SetItemString(module_dict, "Page", (PyObject*)&PageClass); PyDict_SetItemString(module_dict, "Output", (PyObject*)&OutputClass); PyDict_SetItemString(module_dict, "Char", (PyObject*)&CharClass); PyDict_SetItemString(module_dict, "Font", (PyObject*)&FontClass); PyDict_SetItemString(module_dict, "KDTree", (PyObject*)&KDTreeClass); PyDict_SetItemString(module_dict, "Bitmap", (PyObject*)&BitmapClass); PyDict_SetItemString(module_dict, "VERSION", (PyObject*)pystring_fromstring(PYTHON_GFX_VERSION)); return module; } #ifndef PYTHON3 void initgfx(void) { PyInit_gfx(); } #endif swftools_0.9.2+git20130725.orig/lib/python/tags.h0000644000175000017500000000177112216332640020527 0ustar gawaingawain/* tags.h Python wrapper for librfxswf- various tag implementations Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __tags_h__ #define __tags_h__ #include #undef HAVE_STAT #include "../rfxswf.h" PyMethodDef* tags_getMethods(); #endif swftools_0.9.2+git20130725.orig/lib/python/tag.h0000644000175000017500000000334312216332640020341 0ustar gawaingawain/* tag.h Python wrapper for librfxswf- tag handlers Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __tag_h__ #define __tag_h__ #include #undef HAVE_STAT #include "../rfxswf.h" #include "tagmap.h" typedef struct _tag_internals { int (*parse)(struct _tag_internals*); int (*fillTAG)(struct _tag_internals*); void (*dealloc)(struct _tag_internals*); int datasize; void*data; PyObject* (*getattr)(struct _tag_internals*, char* a); int (*setattr)(struct _tag_internals*, char* a, PyObject*val); PyMethodDef* tagfunctions; TAG*tag; PyObject* tagmap; } tag_internals_t; PyObject* tag_new(tag_internals_t*tag_internals); PyObject* tag_new2(TAG*_tag, PyObject* tagmap); TAG* tag_getTAG(PyObject*self, TAG*prevTag, PyObject*tagmap); PyObject* tag_getDependencies(PyObject*self); tag_internals_t* tag_getinternals(PyObject*tag); void register_tag(int id, tag_internals_t*spec); PyMethodDef* tag_getMethods(); extern PyTypeObject TagClass; #endif swftools_0.9.2+git20130725.orig/lib/python/primitives.c0000644000175000017500000004576412216332640021771 0ustar gawaingawain/* primitives.c Python wrapper for librfxswf- primitive objects (implementation) Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #undef HAVE_STAT #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" #include "primitives.h" //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD RGBA rgba; } ColorObject; PyObject* f_Color2(U8 r, U8 g, U8 b, U8 a) { ColorObject* color = PyObject_New(ColorObject, &ColorClass); color->rgba.r = r; color->rgba.g = g; color->rgba.b = b; color->rgba.a = a; return (PyObject*)color; } PyObject* f_Color(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"r", "g", "b", "a", NULL}; ColorObject* color; int r=0,g=0,b=0,a=255; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "iii|i", kwlist, &r,&g,&b,&a)) { char*s= 0; int mya = -1; PyErr_Clear(); static char *kwlist[] = {"col", "alpha", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i", kwlist, &s, &mya)) return NULL; if(mya>=0) a=mya; sscanf(s, "%02x%02x%02x%02x",&r,&g,&b,&a); } color = PyObject_New(ColorObject, &ColorClass); mylog("+%08x(%d) color_new(%d,%d,%d,%d)\n", (int)color, color->ob_refcnt, r,g,b,a); return f_Color2(r,g,b,a); } static PyObject* color_getattr(PyObject * self, char* a) { ColorObject*color = (ColorObject*)self; if(!strcmp(a, "r")) { return Py_BuildValue("i", color->rgba.r); } else if(!strcmp(a, "g")) { return Py_BuildValue("i", color->rgba.g); } else if(!strcmp(a, "b")) { return Py_BuildValue("i", color->rgba.b); } else if(!strcmp(a, "a")) { return Py_BuildValue("i", color->rgba.a); } else if(!strcmp(a, "alpha")) { return Py_BuildValue("i", color->rgba.a); } else if(!strcmp(a, "rgb")) { char text[80]; sprintf(text, "%02x%02x%02x", color->rgba.r, color->rgba.g, color->rgba.b); return PyString_FromString(text); } else if(!strcmp(a, "rgba")) { char text[80]; sprintf(text, "%02x%02x%02x%02x", color->rgba.r, color->rgba.g, color->rgba.b, color->rgba.a); return PyString_FromString(text); } return PY_ERROR("bad attribute"); } static int color_setattr(PyObject * self, char* attr, PyObject* o) { ColorObject*color = (ColorObject*)self; if(!strcmp(attr, "r")) { if (!PyArg_Parse(o, "d", &color->rgba.r)) goto err; return 0; } else if(!strcmp(attr, "g")) { if (!PyArg_Parse(o, "d", &color->rgba.g)) goto err; return 0; } else if(!strcmp(attr, "b")) { if (!PyArg_Parse(o, "d", &color->rgba.b)) goto err; return 0; } else if(!strcmp(attr, "a")) { if (!PyArg_Parse(o, "d", &color->rgba.a)) goto err; return 0; } err: mylog("swf_setattr %08x(%d) %s = ? (%08x)\n", (int)self, self->ob_refcnt, attr, o); return 1; } RGBA color_getRGBA(PyObject*self) { ColorObject*color = 0; if (!PyArg_Parse(self, "O!", &ColorClass, &color)) { RGBA dummy; memset(&dummy, 0, sizeof(dummy)); mylog("Error: wrong type for function color_getRGBA"); return dummy; } return color->rgba; } void color_dealloc(PyObject* self) { mylog("-%08x(%d) color_dealloc\n", (int)self, self->ob_refcnt); PyObject_Del(self); } PyTypeObject ColorClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "Color", tp_basicsize: sizeof(ColorObject), tp_itemsize: 0, tp_dealloc: color_dealloc, tp_print: 0, tp_getattr: color_getattr, tp_setattr: color_setattr, }; //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD SRECT bbox; } BBoxObject; //void swf_ExpandRect(SRECT*src, SPOINT add); //void swf_ExpandRect2(SRECT*src, SRECT*add); PyObject* f_BBox(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"xmin", "ymin", "xmax", "ymax", NULL}; BBoxObject* bbox; float xmin,ymin,xmax,ymax; if(!kwargs) { if (!PyArg_ParseTuple(args, "ffff", &xmin, &ymin, &xmax, &ymax)) return NULL; } else { if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ffff", kwlist, &xmin, &ymin, &xmax, &ymax)) return NULL; } SRECT box; box.xmin = (int)(xmin*20); box.ymin = (int)(ymin*20); box.xmax = (int)(xmax*20); box.ymax = (int)(ymax*20); mylog("+%08x(%d) bbox_new(%d,%d,%d,%d)\n", (int)self, self?self->ob_refcnt:0, box.xmin, box.ymin, box.xmax,box.ymax); bbox = PyObject_New(BBoxObject, &BBoxClass); bbox->bbox = box; return (PyObject*)bbox; } PyObject* f_BBox2(SRECT box) { BBoxObject* bbox; bbox = PyObject_New(BBoxObject, &BBoxClass); bbox->bbox = box; return (PyObject*)bbox; } static PyObject* bbox_getattr(PyObject * self, char* a) { BBoxObject*bbox = (BBoxObject*)self; if(!strcmp(a, "xmin")) { return Py_BuildValue("f", bbox->bbox.xmin/20.0); } else if(!strcmp(a, "ymin")) { return Py_BuildValue("f", bbox->bbox.ymin/20.0); } else if(!strcmp(a, "xmax")) { return Py_BuildValue("f", bbox->bbox.xmax/20.0); } else if(!strcmp(a, "ymax")) { return Py_BuildValue("f", bbox->bbox.ymax/20.0); } return NULL; } static int bbox_setattr(PyObject * self, char* a, PyObject* o) { BBoxObject*bbox= (BBoxObject*)self; if(!strcmp(a, "xmin")) { float xmin; if (!PyArg_Parse(o, "f", &xmin)) goto err; bbox->bbox.xmin = (int)(xmin*20); return 0; } else if(!strcmp(a, "ymin")) { float ymin; if (!PyArg_Parse(o, "f", &ymin)) goto err; bbox->bbox.ymin = (int)(ymin*20); return 0; } else if(!strcmp(a, "xmax")) { float xmax; if (!PyArg_Parse(o, "f", &xmax)) goto err; bbox->bbox.xmax = (int)(xmax*20); return 0; } else if(!strcmp(a, "ymax")) { float ymax; if (!PyArg_Parse(o, "f", &ymax)) goto err; bbox->bbox.ymax = (int)(ymax*20); return 0; } err: mylog("swf_setattr %08x(%d) %s = ? (%08x)\n", (int)self, self->ob_refcnt, a, o); return 1; } void bbox_dealloc(PyObject* self) { mylog("-%08x(%d) bbox_dealloc\n", (int)self, self->ob_refcnt); PyObject_Del(self); } SRECT bbox_getSRECT(PyObject*self) { BBoxObject*bbox= 0; if (!PyArg_Parse(self, "O!", &BBoxClass, &bbox)) { SRECT dummy; memset(&dummy, 0, sizeof(dummy)); mylog("Error: wrong type for function color_getRGBA"); return dummy; } return bbox->bbox; } PyTypeObject BBoxClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "BBox", tp_basicsize: sizeof(BBoxObject), tp_itemsize: 0, tp_dealloc: bbox_dealloc, tp_print: 0, tp_getattr: bbox_getattr, tp_setattr: bbox_setattr, }; SRECT bbox_getBBox(PyObject*self); //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD MATRIX matrix; } MatrixObject; PyObject* f_Matrix2(MATRIX* m) { PyObject*self = (PyObject*)PyObject_New(MatrixObject, &MatrixClass); MatrixObject*matrix = (MatrixObject*)self; matrix->matrix = *m; return self; } PyObject* f_Matrix(PyObject* _self, PyObject* args, PyObject* kwargs) { PyObject*self = (PyObject*)PyObject_New(MatrixObject, &MatrixClass); MatrixObject*matrix = (MatrixObject*)self; mylog("+%08x(%d) f_Matrix", self, self->ob_refcnt); static char *kwlist[] = {"x", "y", "scale", "rotate", "pivotx", "pivoty", NULL}; float x=0,y=0,scale=1.0,rotate=0,pivotx=0,pivoty=0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ffffff", kwlist, &x,&y,&scale,&rotate,&pivotx,&pivoty)) return NULL; mylog(" %08x(%d) f_Matrix: x=%f y=%f scale=%f rotate=%f", self, self->ob_refcnt, x,y,scale,rotate); swf_GetMatrix(0, &matrix->matrix); matrix->matrix.tx = (int)(x*20); matrix->matrix.ty = (int)(y*20); if(!rotate) { matrix->matrix.sx = (int)(scale*65536); matrix->matrix.sy = (int)(scale*65536); } else { matrix->matrix.sx = (int)(scale*cos(rotate)*65536); matrix->matrix.sy = (int)(scale*cos(rotate)*65536); matrix->matrix.r0 = (int)(scale*sin(rotate)*65536); matrix->matrix.r1 = (int)(-scale*sin(rotate)*65536); } if(pivotx || pivoty) { SPOINT p,d; p.x = (int)(pivotx*20); p.y = (int)(pivoty*20); p = swf_TurnPoint(p, &matrix->matrix); matrix->matrix.tx += matrix->matrix.tx-p.x; matrix->matrix.ty += matrix->matrix.ty-p.y; } /* TODO: rotate */ return self; } static PyObject* matrix_getattr(PyObject * self, char* a) { PY_ASSERT_TYPE(self,&MatrixClass); MatrixObject*matrix = (MatrixObject*)self; if(!strcmp(a, "entries")) { return Py_BuildValue("(ffffff)", matrix->matrix.sx/65536.0, matrix->matrix.r0/65536.0, matrix->matrix.r1/65536.0, matrix->matrix.sy/65536.0, matrix->matrix.tx/20.0, matrix->matrix.ty/20.0 ); } return NULL; } static int matrix_setattr(PyObject * self, char* a, PyObject* o) { PY_ASSERT_TYPE(self,&MatrixClass); return 0; } MATRIX matrix_getMatrix(PyObject*self) { mylog(" %08x(%d) matrix_getMatrix", self, self->ob_refcnt); PY_ASSERT_TYPE(self,&MatrixClass); MatrixObject*matrix = (MatrixObject*)self; return matrix->matrix; } void matrix_dealloc(PyObject* self) { mylog("-%08x(%d) matrix_dealloc", self, self->ob_refcnt); PyObject_Del(self); } //SPOINT swf_TurnPoint(SPOINT p, MATRIX* m); //SRECT swf_TurnRect(SRECT r, MATRIX* m); PyTypeObject MatrixClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "Matrix", tp_basicsize: sizeof(MatrixObject), tp_itemsize: 0, tp_dealloc: matrix_dealloc, tp_print: 0, tp_getattr: matrix_getattr, tp_setattr: matrix_setattr, tp_compare: 0, tp_repr: 0, tp_as_number: 0, tp_as_sequence: 0, tp_as_mapping: 0, tp_hash: 0, // dict(x) tp_call: 0, // x() tp_str: 0 // str(x) }; //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD CXFORM cxform; } CXFormObject; PyObject* f_ColorTransform(PyObject* _self, PyObject* args, PyObject* kwargs) { int r0=256,g0=256,b0=256,a0=256,r1=0,g1=0,b1=0,a1=0; static char *kwlist[] = {"r_mul", "g_mul", "b_mul", "a_mul", "r_add", "g_add", "b_add", "a_add", NULL}; PyObject*color; if(!kwargs) { if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiiii", kwlist, &r0,&g0,&b0,&a0, &r1,&g1,&b1,&a1)) return NULL; } CXFORM c; c.r0 = r0; c.g0 = g0; c.b0 = b0; c.a0 = a0; c.r1 = r1; c.g1 = g1; c.b1 = b1; c.a1 = a1; CXFormObject*self = PyObject_New(CXFormObject, &CXFormClass); self->cxform = c; return (PyObject*)self; } static PyObject* colortransform_getattr(PyObject * self, char* a) { return NULL; } static int colortransform_setattr(PyObject * self, char* a, PyObject* o) { return 0; } CXFORM colortransform_getCXForm(PyObject*self) { CXFormObject*cxform= 0; if (!PyArg_Parse(self, "O!", &CXFormClass, &cxform)) { CXFORM dummy; memset(&dummy, 0, sizeof(dummy)); mylog("Error: wrong type for function color_getRGBA"); return dummy; } return cxform->cxform; } void colortransform_dealloc(PyObject* self) { mylog("-%08x(%d) colortransform_dealloc", self, self->ob_refcnt); PyObject_Del(self); } PyTypeObject CXFormClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "ColorTransform", tp_basicsize: sizeof(CXFormObject), tp_itemsize: 0, tp_dealloc: colortransform_dealloc, tp_print: 0, tp_getattr: colortransform_getattr, tp_setattr: colortransform_setattr, }; //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD GRADIENT gradient; } GradientObject; PyObject* f_Gradient(PyObject* self, PyObject* args, PyObject* kwargs) { return NULL; } static PyObject* gradient_getattr(PyObject * self, char* a) { return NULL; } static int gradient_setattr(PyObject * self, char* a, PyObject* o) { return 0; } GRADIENT gradient_getGradient(PyObject*self) { GradientObject*gradient = 0; if (!PyArg_Parse(self, "O!", &gradient, &gradient)) { GRADIENT dummy; memset(&dummy, 0, sizeof(dummy)); mylog("Error: wrong type for function color_getRGBA"); return dummy; } return gradient->gradient; } void gradient_dealloc(PyObject* self) { mylog("-%08x(%d) gradient_dealloc", self, self->ob_refcnt); PyObject_Del(self); } PyTypeObject GradientClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "Gradient", tp_basicsize: sizeof(GradientObject), tp_itemsize: 0, tp_dealloc: gradient_dealloc, tp_print: 0, tp_getattr: gradient_getattr, tp_setattr: gradient_setattr, }; //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD LINESTYLE ls; } LineStyleObject; PyObject* f_LineStyle2(RGBA color, int width) { LineStyleObject* self = PyObject_New(LineStyleObject, &LineStyleClass); self->ls.color = color; self->ls.width = width; return (PyObject*)self; } PyObject* f_LineStyle3(LINESTYLE ls) { LineStyleObject* self = PyObject_New(LineStyleObject, &LineStyleClass); self->ls = ls; return (PyObject*)self; } PyObject* f_LineStyle(PyObject* _self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"line", "color", NULL}; float linewidth; PyObject*color; if(!kwargs) { if (!PyArg_ParseTuple(args, "fO!", &linewidth, &ColorClass, &color)) return NULL; } return f_LineStyle2(color_getRGBA(color), (int)(linewidth*20)); } LINESTYLE linestyle_getLineStyle(PyObject*_self) { LineStyleObject* self = (LineStyleObject*)_self; return self->ls; } static PyObject* linestyle_getattr(PyObject * _self, char* a) { LineStyleObject*self = (LineStyleObject*)_self; if(!strcmp(a, "width")) { return Py_BuildValue("i", self->ls.width); } else if(!strcmp(a, "color")) { return f_Color2(self->ls.color.r, self->ls.color.g, self->ls.color.b, self->ls.color.a); } return NULL; } static int linestyle_setattr(PyObject * _self, char* a, PyObject* o) { LineStyleObject*self = (LineStyleObject*)_self; if(!strcmp(a, "color")) { self->ls.color = color_getRGBA(o); return 0; } return -1; } static LINESTYLE linestyle_getlinestyle(PyObject*_self) { LineStyleObject*self = (LineStyleObject*)_self; return self->ls; } static void linestyle_dealloc(PyObject* self) { mylog("-%08x(%d) linestyle_dealloc", self, self->ob_refcnt); PyObject_Del(self); } static int linestyle_print(PyObject * _self, FILE *fi, int flags) //flags&Py_PRINT_RAW { LineStyleObject* self = (LineStyleObject*)_self; fprintf(fi, "line-%d-%02x%02x%02x%02x", self->ls.width, self->ls.color.r, self->ls.color.g, self->ls.color.b, self->ls.color.a); return 0; } PyTypeObject LineStyleClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "linestyle", tp_basicsize: sizeof(LineStyleObject), tp_itemsize: 0, tp_dealloc: linestyle_dealloc, tp_print: linestyle_print, tp_getattr: linestyle_getattr, tp_setattr: linestyle_setattr, }; //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD FILLSTYLE fs; } FillStyleObject; PyObject* f_FillStyle2(FILLSTYLE fs) { FillStyleObject* self = PyObject_New(FillStyleObject, &FillStyleClass); self->fs = fs; return (PyObject*)self; } PyObject* f_SolidFillStyle2(RGBA color) { FillStyleObject* self = PyObject_New(FillStyleObject, &FillStyleClass); self->fs.type = FILL_SOLID; self->fs.color = color; return (PyObject*)self; } PyObject* f_SolidFillStyle(PyObject* _self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"color", NULL}; PyObject*color; if(!kwargs) { if (!PyArg_ParseTuple(args, "O!", &ColorClass, &color)) return NULL; } return f_SolidFillStyle2(color_getRGBA(color)); } FILLSTYLE fillstyle_getFillStyle(PyObject*_self) { FillStyleObject* self = (FillStyleObject*)_self; return self->fs; } static void fillstyle_dealloc(PyObject* self) { mylog("-%08x(%d) linestyle_dealloc", self, self->ob_refcnt); PyObject_Del(self); } static int fillstyle_print(PyObject * _self, FILE *fi, int flags) //flags&Py_PRINT_RAW { FillStyleObject* self = (FillStyleObject*)_self; if(self->fs.type == FILL_SOLID) fprintf(fi, "fill-solid(%02x%02x%02x%02x)", self->fs.color.r, self->fs.color.g, self->fs.color.b, self->fs.color.a); else fprintf(fi, "fill-%02x", self->fs.type); return 0; } PyObject* fillstyle_issolid(PyObject*_self, PyObject*args) { FillStyleObject* self = (FillStyleObject*)_self; int b = self->fs.type == FILL_SOLID; return PyInt_FromLong(b); } static PyMethodDef FillStyleMethods[] = { /* Module functions */ {"isSolid", fillstyle_issolid, METH_VARARGS, "Queries whether this is a solid fill"}, {0,0,0,0} }; static PyObject* fillstyle_getattr(PyObject * _self, char* a) { FillStyleObject* self = (FillStyleObject*)_self; if(!strcmp(a, "color")) { return f_Color2(self->fs.color.r, self->fs.color.g, self->fs.color.b, self->fs.color.a); } return Py_FindMethod(FillStyleMethods, _self, a); } static int fillstyle_setattr(PyObject * _self, char* a, PyObject* o) { FillStyleObject*self = (FillStyleObject*)_self; if(!strcmp(a, "color")) { self->fs.color = color_getRGBA(o); return 0; } return -1; } PyTypeObject FillStyleClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "fillstyle", tp_basicsize: sizeof(FillStyleObject), tp_itemsize: 0, tp_dealloc: fillstyle_dealloc, tp_print: fillstyle_print, tp_getattr: fillstyle_getattr, tp_setattr: fillstyle_setattr, }; //---------------------------------------------------------------------------- static PyMethodDef primitive_methods[] = { {"Color", (PyCFunction)f_Color, METH_KEYWORDS, "Create a new color object."}, {"Gradient", (PyCFunction)f_Gradient, METH_KEYWORDS, "Create a new gradient object."}, {"ColorTransform", (PyCFunction)f_ColorTransform, METH_KEYWORDS, "Create a new colortransform object."}, {"Matrix", (PyCFunction)f_Matrix, METH_KEYWORDS, "Create a new matrix object."}, {"BBox", (PyCFunction)f_BBox, METH_KEYWORDS, "Create a new bounding box object."}, {"SolidFillStyle", (PyCFunction)f_SolidFillStyle, METH_KEYWORDS, "Creates a new solid fill style."}, {"LineStyle", (PyCFunction)f_SolidFillStyle, METH_KEYWORDS, "Creates a new line style."}, {NULL, NULL, 0, NULL} }; PyMethodDef* primitive_getMethods() { GradientClass.ob_type = &PyType_Type; CXFormClass.ob_type = &PyType_Type; BBoxClass.ob_type = &PyType_Type; MatrixClass.ob_type = &PyType_Type; FillStyleClass.ob_type = &PyType_Type; LineStyleClass.ob_type = &PyType_Type; return primitive_methods; } swftools_0.9.2+git20130725.orig/lib/python/action.c0000644000175000017500000000620412216332640021035 0ustar gawaingawain/* action.c Python wrapper for librfxswf- actionscript stuff Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #include #undef HAVE_STAT #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" #include "action.h" typedef struct { PyObject_HEAD ActionTAG*action; } ActionObject; PyObject* f_Action(PyObject* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"code", NULL}; ActionObject* action; char*code = 0; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", kwlist, &code)) return NULL; action = PyObject_New(ActionObject, &ActionClass); action->action = 0; return (PyObject*)action; } static PyObject* action_getattr(PyObject * self, char* a) { ActionObject*action = (ActionObject*)self; /* if(!strcmp(a, "r")) { return Py_BuildValue("r", action->rgba.r); } else if(!strcmp(a, "g")) { return Py_BuildValue("g", action->rgba.g); } else if(!strcmp(a, "b")) { return Py_BuildValue("b", action->rgba.b); } else if(!strcmp(a, "a")) { return Py_BuildValue("a", action->rgba.a); }*/ return NULL; } static int action_setattr(PyObject * self, char* attr, PyObject* o) { ActionObject*action = (ActionObject*)self; /* if(!strcmp(attr, "r")) { if (!PyArg_Parse(o, "d", &action->rgba.r)) goto err; return 0; } else if(!strcmp(attr, "g")) { if (!PyArg_Parse(o, "d", &action->rgba.g)) goto err; return 0; } else if(!strcmp(attr, "b")) { if (!PyArg_Parse(o, "d", &action->rgba.b)) goto err; return 0; } else if(!strcmp(attr, "a")) { if (!PyArg_Parse(o, "d", &action->rgba.a)) goto err; return 0; } err: mylog("swf_setattr %08x(%d) %s = ? (%08x)\n", (int)self, self->ob_refcnt, attr, o);*/ return 1; } ActionTAG* action_getAction(PyObject*self) { ActionObject*action= 0; if (!PyArg_Parse(self, "O!", &ActionClass, &action)) { return 0; } return action->action; } PyTypeObject ActionClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "Action", tp_basicsize: sizeof(ActionObject), tp_itemsize: 0, tp_dealloc: dummy_dealloc, tp_print: 0, tp_getattr: action_getattr, tp_setattr: action_setattr, }; static PyMethodDef action_methods[] = { {"Action", (PyCFunction)f_Action, METH_KEYWORDS, "Create a new action object."}, {NULL, NULL, 0, NULL} }; PyMethodDef* action_getMethods() { ActionClass.ob_type = &PyType_Type; return action_methods; } swftools_0.9.2+git20130725.orig/lib/python/primitives.h0000644000175000017500000000451612216332640021764 0ustar gawaingawain/* primitives.h Python wrapper for librfxswf- primitive objects (structs, prototypes) Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __primitives_h__ #define __primitives_h__ #include #undef HAVE_STAT #include "../rfxswf.h" /* exported to allow casting to this type */ extern PyTypeObject ColorClass; extern PyTypeObject BBoxClass; extern PyTypeObject CXFormClass; extern PyTypeObject GradientClass; extern PyTypeObject MatrixClass; extern PyTypeObject LineStyleClass; extern PyTypeObject FillStyleClass; PyObject* f_Color(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_ColorTransform(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_Gradient(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_BBox(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_BBox2(SRECT bbox); PyObject* f_Matrix(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_Matrix2(MATRIX* m); PyObject* f_FillStyle2(FILLSTYLE fs); PyObject* f_SolidFillstyle(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_SolidFillstyle2(RGBA color); PyObject* f_LineStyle(PyObject* self, PyObject* args, PyObject* kwargs); PyObject* f_LineStyle2(RGBA color, int width); PyObject* f_LineStyle3(LINESTYLE ls); RGBA color_getRGBA(PyObject*self); CXFORM colortransform_getCXForm(PyObject*self); GRADIENT gradient_getGradient(PyObject*self); SRECT bbox_getSRECT(PyObject*self); MATRIX matrix_getMatrix(PyObject*self); FILLSTYLE fillstyle_getFillStyle(PyObject*self); LINESTYLE linestyle_getLineStyle(PyObject*self); extern PyMethodDef* primitive_getMethods(); #endif swftools_0.9.2+git20130725.orig/lib/python/taglist.c0000644000175000017500000002463412216332640021236 0ustar gawaingawain#include #undef HAVE_STAT #include "../rfxswf.h" #include "../log.h" #include "./pyutils.h" #include "primitives.h" #include "action.h" #include "tag.h" #include "tagmap.h" #include "taglist.h" //---------------------------------------------------------------------------- typedef struct { PyObject_HEAD PyObject* taglist; } TagListObject; //---------------------------------------------------------------------------- static void taglist_showcontents(PyObject* self) { TagListObject*taglist = (TagListObject*)self; int t, l = PyList_Size(taglist->taglist); for(t=0;ttaglist, t); mylog(" %08x(%d) taglist_showcontents item=%08x(%d)\n", (int)self, self->ob_refcnt, item, item->ob_refcnt); } } //---------------------------------------------------------------------------- PyObject * taglist_new() { TagListObject* taglist = PyObject_New(TagListObject, &TagListClass); mylog("+%08x(%d) taglist_new", (int)taglist, taglist->ob_refcnt); taglist->taglist = PyList_New(0); return (PyObject*)taglist; } //---------------------------------------------------------------------------- PyObject * taglist_new2(TAG*tag) { TagListObject* taglist = PyObject_New(TagListObject, &TagListClass); mylog("+%08x(%d) taglist_new2 tag=%08x", (int)taglist, taglist->ob_refcnt, tag); PyObject* tagmap = tagmap_new(); int nr=0, len=0; TAG*t = tag; TAG*last = t; while(t) {len++;last=t;t=t->next;} if(last && last->id==ST_END) { swf_DeleteTag(0, last); last = 0; len--; if(len==0) tag = 0; } taglist->taglist = PyList_New(len); nr = 0; t = tag; while(t) { PyObject*newtag = tag_new2(t, tagmap); if(newtag==NULL) { // pass through exception Py_DECREF(tagmap); return NULL; } PyList_SET_ITEM(taglist->taglist,nr,newtag);Py_INCREF(newtag); if(swf_isDefiningTag(t)) { int id = swf_GetDefineID(t); tagmap_addMapping(tagmap, id, newtag); } nr++; t=t->next; Py_DECREF(newtag); } Py_DECREF(tagmap); return (PyObject*)taglist; } //---------------------------------------------------------------------------- TAG* taglist_getTAGs(PyObject*self) { PyObject* tagmap = tagmap_new(); TAG* tag = taglist_getTAGs2(self, tagmap, 1); Py_DECREF(tagmap); return tag; } //---------------------------------------------------------------------------- TAG* taglist_getTAGs2(PyObject*self, PyObject*tagmap, int addDependencies) { if(!PY_CHECK_TYPE(self,&TagListClass)) { PyErr_SetString(PyExc_Exception, setError("Not a taglist (%08x).", self)); return 0; } TagListObject*taglist = (TagListObject*)self; /* TODO: the tags will be modified by this. We should set mutexes. */ int l = PyList_Size(taglist->taglist); int t; TAG* tag = 0; TAG* firstTag = 0; mylog(" %08x(%d) taglist_getTAGs", (int)self, self->ob_refcnt); for(t=0;ttaglist, t); if(addDependencies) { PyObject* deps = tag_getDependencies(item); int l = PyList_Size(deps); int t; for(t=0;tfirstTag; swf_FoldAll(&swf); taglist->firstTag = swf.firstTag; taglist->lastTag = 0; // FIXME taglist->searchTag = 0;*/ return PY_NONE; } //---------------------------------------------------------------------------- static PyObject * taglist_unfoldAll(PyObject* self, PyObject* args) { SWF swf; /* TagListObject*taglist = (TagListObject*)self; if(!self || !PyArg_ParseTuple(args,"")) return NULL; swf.firstTag = taglist->firstTag; swf_UnFoldAll(&swf); taglist->firstTag = swf.firstTag; taglist->lastTag = 0; // FIXME taglist->searchTag = 0;*/ return PY_NONE; } //---------------------------------------------------------------------------- static PyObject * taglist_optimizeOrder(PyObject* self, PyObject* args) { SWF swf; /* TagListObject*taglist = (TagListObject*)self; if(!self || !PyArg_ParseTuple(args,"")) return NULL; swf.firstTag = taglist->firstTag; swf_UnFoldAll(&swf); taglist->firstTag = swf.firstTag; taglist->lastTag = 0; // FIXME taglist->searchTag = 0;*/ return PY_NONE; } //---------------------------------------------------------------------------- static PyMethodDef taglist_functions[] = {{"foldAll", taglist_foldAll, METH_VARARGS, "fold all sprites (movieclips) in the list"}, {"unfoldAll", taglist_unfoldAll, METH_VARARGS, "unfold (expand) all sprites (movieclips) in the list"}, {"optimizeOrder", taglist_optimizeOrder, METH_VARARGS, "Reorder the Tag structure"}, {NULL, NULL, 0, NULL} }; static PyObject* taglist_getattr(PyObject * self, char* a) { PyObject* ret = Py_FindMethod(taglist_functions, self, a); mylog(" %08x(%d) taglist_getattr %s: %08x\n", (int)self, self->ob_refcnt, a, ret); return ret; } //---------------------------------------------------------------------------- static int taglist_length(PyObject * self) { TagListObject*tags = (TagListObject*)self; mylog(" %08x(%d) taglist_length", (int)self, self->ob_refcnt); return PyList_GET_SIZE(tags->taglist); } //---------------------------------------------------------------------------- static int taglist_contains(PyObject * self, PyObject * tag) { /* TODO: optimize! */ TagListObject*taglist = (TagListObject*)self; PyObject*list = taglist->taglist; int l = PyList_Size(list); int t; for(t=0;tob_refcnt, list, list->ob_refcnt); if (PyArg_Parse(list, "O!", &TagClass, &tag)) { if(!taglist_contains(self, tag)) { mylog(" %08x(%d) taglist_concat: Adding Tag %08x(%d)", (int)self, self->ob_refcnt, tag, tag->ob_refcnt); PyList_Append(taglist->taglist, tag); } else { mylog(" %08x(%d) taglist_concat: Already contains Tag %08x(%d)", (int)self, self->ob_refcnt, tag, tag->ob_refcnt); } Py_INCREF(self); return self; /* copy tag, so we don't have to do INCREF(tag) (and don't get problems if the tag is appended to more than one taglist) */ /* TODO: handle IDs */ /* TAG*t = tag_getTAG(tag); TAG*nt = 0; mylog("taglist_concat: Tag", (int)self, self->ob_refcnt); // copy tag nt = swf_InsertTag(0, t->id); swf_SetBlock(nt,t->data,t->len); PyObject*newtag = tag_new(taglist->swf, nt); if(swf_isDefiningTag(t)) { int id = swf_GetDefineID(t); PyObject*id = PyLong_FromLong(id); PyDict_SetItem((PyObject*)(taglist->char2id), list, id); Py_INCREF(id); PyDict_SetItem((PyObject*)(taglist->id2char), id, list); Py_INCREF(id); } Py_INCREF(self); return self;*/ } PyErr_Clear(); if (PyList_Check(list)) { int l = PyList_Size(list); int t; for(t=0;ttaglist); /*TAG* tags = taglist_getTAGs(self); TAG* tags2 = taglist_getTAGs(list); TAG* tags3; tags3 = swf_Concatenate(tags,tags2); PyObject* newtaglist = taglist_new(tags3); swf_FreeTags(tags3); Py_INCREF(newtaglist);*/ } PyErr_Clear(); PyErr_SetString(PyExc_Exception, setError("taglist concatenation only works with tags and lists (%08x).", list)); return 0; } //---------------------------------------------------------------------------- static PyObject * taglist_item(PyObject * self, int index) { TagListObject*taglist = (TagListObject*)self; PyObject*tag; tag = PyList_GetItem(taglist->taglist, index); if(!tag) return 0; mylog(" %08x(%d) taglist_item(%d): %08x", (int)self, self->ob_refcnt, index, tag); Py_INCREF(tag); return tag; } //---------------------------------------------------------------------------- static void taglist_dealloc(PyObject* self) { TagListObject*taglist = (TagListObject*)self; mylog("-%08x(%d) taglist_dealloc list=%08x(%d)\n", (int)self, self->ob_refcnt, taglist->taglist, taglist->taglist->ob_refcnt); Py_DECREF(taglist->taglist); taglist->taglist = 0; PyObject_Del(self); } //---------------------------------------------------------------------------- static PySequenceMethods taglist_as_sequence = { sq_length: taglist_length, // len(obj) sq_concat: taglist_concat, // obj += [...], obj1+obj2 sq_repeat: 0, // x*n, intargfunc sq_item: taglist_item, // obj[3] sq_slice: 0, // x[i:j] intintargfunc sq_ass_item: 0, // x[i] = y intobjargproc sq_ass_slice: 0, // x[i:j] = v intintobjargproc sq_contains: taglist_contains, //??? }; PyTypeObject TagListClass = { PyObject_HEAD_INIT(NULL) 0, tp_name: "TagList", tp_basicsize: sizeof(TagListObject), tp_itemsize: 0, tp_dealloc: taglist_dealloc, tp_print: 0, // print x tp_getattr: taglist_getattr, // x.attr tp_setattr: 0, // x.attr = v tp_compare: 0, // x>y tp_repr: 0, // `x`, print x tp_as_number: 0, tp_as_sequence: &taglist_as_sequence, }; swftools_0.9.2+git20130725.orig/lib/python/taglist.h0000644000175000017500000000244312216332640021235 0ustar gawaingawain/* taglist.h Python wrapper for librfxswf- taglist handlers, header file Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __taglist_h__ #define __taglist_h__ #include #undef HAVE_STAT #include "../rfxswf.h" #include "./tagmap.h" extern PyTypeObject TagListClass; PyObject * taglist_new(); /* warning: will modify tag order*/ PyObject * taglist_new2(TAG*tag); TAG* taglist_getTAGs(PyObject*); /* for sprites: */ TAG* taglist_getTAGs2(PyObject*self, PyObject*tagmap, int addDependencies); PyMethodDef* taglist_getMethods(); #endif swftools_0.9.2+git20130725.orig/lib/python/image.h0000644000175000017500000000223112216332640020643 0ustar gawaingawain/* image.h Python wrapper for librfxswf- image handling Part of the swftools package. Copyright (c) 2003 Matthias Kramm 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 */ #ifndef __image_h__ #define __image_h__ #include #undef HAVE_STAT #include "../rfxswf.h" int image_getWidth(PyObject*image); int image_getHeight(PyObject*image); int image_getBPP(PyObject*image); RGBA* image_toRGBA(PyObject*image); PyObject* rgba_to_image(RGBA*rgba, int width, int height); #endif swftools_0.9.2+git20130725.orig/lib/bitio.c0000644000175000017500000005644012216332640017354 0ustar gawaingawain/* bitio.c part of swftools implementation of bitio.h. Copyright (C) 2003 Matthias Kramm 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 */ #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_IO_H #include #endif #include #include #define __USE_LARGEFILE64 #include #include #include "../config.h" #ifdef HAVE_ZLIB #include #define ZLIB_BUFFER_SIZE 16384 #endif #include "./bitio.h" /* ---------------------------- null reader ------------------------------- */ static int reader_nullread(reader_t*r, void* data, int len) { memset(data, 0, len); return len; } static void reader_nullread_dealloc(reader_t*r) { memset(r, 0, sizeof(reader_t)); } static int reader_nullseek(reader_t*r, int pos) { return pos; } void reader_init_nullreader(reader_t*r) { r->read = reader_nullread; r->seek = reader_nullseek; r->dealloc = reader_nullread_dealloc; r->internal = 0; r->type = READER_TYPE_NULL; r->mybyte = 0; r->bitpos = 8; r->pos = 0; } /* ---------------------------- file reader ------------------------------- */ static int reader_fileread(reader_t*reader, void* data, int len) { int ret = read((int)reader->internal, data, len); if(ret>=0) reader->pos += ret; return ret; } static void reader_fileread_dealloc(reader_t*r) { if(r->type == READER_TYPE_FILE2) { close((ptroff_t)r->internal); } memset(r, 0, sizeof(reader_t)); } static int reader_fileread_seek(reader_t*r, int pos) { return lseek((ptroff_t)r->internal, pos, SEEK_SET); } void reader_init_filereader(reader_t*r, int handle) { r->read = reader_fileread; r->seek = reader_fileread_seek; r->dealloc = reader_fileread_dealloc; r->internal = (void*)handle; r->type = READER_TYPE_FILE; r->mybyte = 0; r->bitpos = 8; r->pos = 0; } int reader_init_filereader2(reader_t*r, const char*filename) { #ifdef HAVE_OPEN64 int fi = open64 #else int fi = open #endif (filename, #ifdef O_BINARY O_BINARY| #endif O_RDONLY); reader_init_filereader(r, fi); r->type = READER_TYPE_FILE2; return fi; } /* ---------------------------- mem reader ------------------------------- */ typedef struct _memread { unsigned char*data; int length; } memread_t; static int reader_memread(reader_t*reader, void* data, int len) { memread_t*mr = (memread_t*)reader->internal; if(mr->length - reader->pos < len) { len = mr->length - reader->pos; } if(!len) return 0; memcpy(data, &mr->data[reader->pos], len); reader->pos += len; return len; } static int reader_memseek(reader_t*reader, int pos) { memread_t*mr = (memread_t*)reader->internal; if(pos>=0 && pos<=mr->length) { reader->pos = pos; return pos; } else { return -1; } } static void reader_memread_dealloc(reader_t*reader) { if(reader->internal) free(reader->internal); memset(reader, 0, sizeof(reader_t)); } void reader_init_memreader(reader_t*r, void*newdata, int newlength) { memread_t*mr = (memread_t*)malloc(sizeof(memread_t)); mr->data = (unsigned char*)newdata; mr->length = newlength; r->read = reader_memread; r->seek = reader_memseek; r->dealloc = reader_memread_dealloc; r->internal = (void*)mr; r->type = READER_TYPE_MEM; r->mybyte = 0; r->bitpos = 8; r->pos = 0; } /* ---------------------------- zzip reader ------------------------------ */ #ifdef HAVE_ZZIP static int reader_zzip_read(reader_t*reader, void* data, int len) { return zzip_file_read((ZZIP_FILE*)reader->internal, data, len); } static void reader_zzip_dealloc(reader_t*reader) { memset(reader, 0, sizeof(reader_t)); } static int reader_zzip_seek(reader_t*reader, int pos) { return zzip_seek((ZZIP_FILE*)reader->internal, pos, SEEK_SET); } void reader_init_zzipreader(reader_t*r,ZZIP_FILE*z) { r->read = reader_zzip_read; r->seek = reader_zzip_seek; r->dealloc = reader_zzip_dealloc; r->internal = z; r->type = READER_TYPE_ZZIP; r->mybyte = 0; r->bitpos = 8; r->pos = 0; } #endif /* ---------------------------- mem writer ------------------------------- */ typedef struct _memwrite { unsigned char*data; int length; } memwrite_t; static int writer_memwrite_write(writer_t*w, void* data, int len) { memwrite_t*mw = (memwrite_t*)w->internal; if(mw->length - w->pos > len) { memcpy(&mw->data[w->pos], data, len); w->pos += len; return len; } else { memcpy(&mw->data[w->pos], data, mw->length - w->pos); w->pos = mw->length; return mw->length - w->pos; } } static void writer_memwrite_finish(writer_t*w) { if(w->internal) free(w->internal); w->internal = 0; } static void dummy_flush(writer_t*w) { } void writer_init_memwriter(writer_t*w, void*data, int len) { memwrite_t *mr; mr = (memwrite_t*)malloc(sizeof(memwrite_t)); mr->data = (unsigned char *)data; mr->length = len; memset(w, 0, sizeof(writer_t)); w->write = writer_memwrite_write; w->flush = dummy_flush; w->finish = writer_memwrite_finish; w->internal = (void*)mr; w->type = WRITER_TYPE_MEM; w->bitpos = 0; w->mybyte = 0; w->pos = 0; } /* ------------------------- growing mem writer ------------------------------- */ typedef struct _growmemwrite { unsigned char*data; int length; U32 grow; } growmemwrite_t; static int writer_growmemwrite_write(writer_t*w, void* data, int len) { growmemwrite_t*mw = (growmemwrite_t*)w->internal; if(!mw->data) { fprintf(stderr, "Illegal write operation: data already given away"); exit(1); } if(mw->length - w->pos < len) { int newlength = mw->length; while(newlength - w->pos < len) { newlength += mw->grow; } #ifdef NO_REALLOC unsigned char*newmem = (unsigned char*)malloc(newlength); memcpy(newmem, mw->data, mw->length); free(mw->data); mw->data = newmem; #else mw->data = (unsigned char*)realloc(mw->data, newlength); #endif mw->length = newlength; } memcpy(&mw->data[w->pos], data, len); w->pos += len; return len; } static void writer_growmemwrite_finish(writer_t*w) { growmemwrite_t*mw = (growmemwrite_t*)w->internal; if(mw->data) { free(mw->data);mw->data = 0; } mw->length = 0; free(w->internal);mw=0; memset(w, 0, sizeof(writer_t)); } void* writer_growmemwrite_memptr(writer_t*w, int*len) { growmemwrite_t*mw = (growmemwrite_t*)w->internal; if(len) { *len = w->pos; } return mw->data; } void* writer_growmemwrite_getmem(writer_t*w) { growmemwrite_t*mw = (growmemwrite_t*)w->internal; void*ret = mw->data; /* remove own reference so that neither write() nor finish() can free it. It's property of the caller now. */ mw->data = 0; return ret; } void writer_growmemwrite_reset(writer_t*w) { growmemwrite_t*mw = (growmemwrite_t*)w->internal; w->pos = 0; w->bitpos = 0; w->mybyte = 0; } void writer_init_growingmemwriter(writer_t*w, U32 grow) { growmemwrite_t *mw = (growmemwrite_t *)malloc(sizeof(growmemwrite_t)); mw->length = 4096; mw->data = (unsigned char *)malloc(mw->length); mw->grow = grow; memset(w, 0, sizeof(writer_t)); w->write = writer_growmemwrite_write; w->flush = dummy_flush; w->finish = writer_growmemwrite_finish; w->internal = (void*)mw; w->type = WRITER_TYPE_GROWING_MEM; w->bitpos = 0; w->mybyte = 0; w->pos = 0; } /* ---------------------------- file writer ------------------------------- */ typedef struct _filewrite { int handle; char free_handle; } filewrite_t; static int writer_filewrite_write(writer_t*w, void* data, int len) { filewrite_t * fw= (filewrite_t*)w->internal; w->pos += len; int l = write(fw->handle, data, len); if(l < len) fprintf(stderr, "Error writing to file: %d/%d", l, len); return l; } static void writer_filewrite_finish(writer_t*w) { filewrite_t *mr = (filewrite_t*)w->internal; if(mr->free_handle) close(mr->handle); free(w->internal); memset(w, 0, sizeof(writer_t)); } void writer_init_filewriter(writer_t*w, int handle) { filewrite_t *mr = (filewrite_t *)malloc(sizeof(filewrite_t)); mr->handle = handle; mr->free_handle = 0; memset(w, 0, sizeof(writer_t)); w->write = writer_filewrite_write; w->finish = writer_filewrite_finish; w->internal = mr; w->type = WRITER_TYPE_FILE; w->bitpos = 0; w->mybyte = 0; w->pos = 0; } void writer_init_filewriter2(writer_t*w, char*filename) { #ifdef HAVE_OPEN64 int fi = open64 #else int fi = open #endif (filename, #ifdef O_BINARY O_BINARY| #endif O_WRONLY|O_CREAT|O_TRUNC, 0644); writer_init_filewriter(w, fi); ((filewrite_t*)w->internal)->free_handle = 1; } /* ---------------------------- null writer ------------------------------- */ static int writer_nullwrite_write(writer_t*w, void* data, int len) { w->pos += len; return len; } static void writer_nullwrite_finish(writer_t*w) { memset(w, 0, sizeof(writer_t)); } void writer_init_nullwriter(writer_t*w) { memset(w, 0, sizeof(writer_t)); w->write = writer_nullwrite_write; w->flush = dummy_flush; w->finish = writer_nullwrite_finish; w->internal = 0; w->type = WRITER_TYPE_NULL; w->bitpos = 0; w->mybyte = 0; w->pos = 0; } /* ---------------------------- zlibinflate reader -------------------------- */ typedef struct _zlibinflate { #ifdef HAVE_ZLIB z_stream zs; reader_t*input; unsigned char readbuffer[ZLIB_BUFFER_SIZE]; #endif } zlibinflate_t; #ifdef HAVE_ZLIB static void zlib_error(int ret, char* msg, z_stream*zs) { fprintf(stderr, "%s: zlib error (%d): last zlib error: %s\n", msg, ret, zs->msg?zs->msg:"unknown"); if(errno) perror("errno:"); exit(1); } #endif static int reader_zlibinflate(reader_t*reader, void* data, int len) { #ifdef HAVE_ZLIB zlibinflate_t*z = (zlibinflate_t*)reader->internal; int ret; if(!z) { return 0; } if(!len) return 0; z->zs.next_out = (Bytef *)data; z->zs.avail_out = len; while(1) { if(!z->zs.avail_in) { z->zs.avail_in = z->input->read(z->input, z->readbuffer, ZLIB_BUFFER_SIZE); z->zs.next_in = z->readbuffer; } if(z->zs.avail_in) ret = inflate(&z->zs, Z_NO_FLUSH); else ret = inflate(&z->zs, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) zlib_error(ret, "bitio:inflate_inflate", &z->zs); if (ret == Z_STREAM_END) { int pos = z->zs.next_out - (Bytef*)data; ret = inflateEnd(&z->zs); if (ret != Z_OK) zlib_error(ret, "bitio:inflate_end", &z->zs); free(reader->internal); reader->internal = 0; reader->pos += pos; return pos; } if(!z->zs.avail_out) { break; } } reader->pos += len; return len; #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } static int reader_zlibseek(reader_t*reader, int pos) { fprintf(stderr, "Erro: seeking not supported for zlib streams"); return -1; } static void reader_zlibinflate_dealloc(reader_t*reader) { #ifdef HAVE_ZLIB zlibinflate_t*z = (zlibinflate_t*)reader->internal; /* test whether read() already did basic deallocation */ if(reader->internal) { inflateEnd(&z->zs); free(reader->internal); } memset(reader, 0, sizeof(reader_t)); #endif } void reader_init_zlibinflate(reader_t*r, reader_t*input) { #ifdef HAVE_ZLIB zlibinflate_t*z = (zlibinflate_t*)malloc(sizeof(zlibinflate_t)); memset(z, 0, sizeof(zlibinflate_t)); int ret; memset(r, 0, sizeof(reader_t)); r->internal = z; r->read = reader_zlibinflate; r->seek = reader_zlibseek; r->dealloc = reader_zlibinflate_dealloc; r->type = READER_TYPE_ZLIB; r->pos = 0; z->input = input; memset(&z->zs,0,sizeof(z_stream)); z->zs.zalloc = Z_NULL; z->zs.zfree = Z_NULL; z->zs.opaque = Z_NULL; ret = inflateInit(&z->zs); if (ret != Z_OK) zlib_error(ret, "bitio:inflate_init", &z->zs); reader_resetbits(r); #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } /* ---------------------------- zlibdeflate writer -------------------------- */ typedef struct _zlibdeflate { #ifdef HAVE_ZLIB z_stream zs; writer_t*output; unsigned char writebuffer[ZLIB_BUFFER_SIZE]; #endif } zlibdeflate_t; static int writer_zlibdeflate_write(writer_t*writer, void* data, int len) { #ifdef HAVE_ZLIB zlibdeflate_t*z = (zlibdeflate_t*)writer->internal; int ret; if(writer->type != WRITER_TYPE_ZLIB) { fprintf(stderr, "Wrong writer ID (writer not initialized?)\n"); return 0; } if(!z) { fprintf(stderr, "zlib not initialized!\n"); return 0; } if(!len) return 0; z->zs.next_in = (Bytef *)data; z->zs.avail_in = len; while(1) { ret = deflate(&z->zs, Z_NO_FLUSH); if (ret != Z_OK) zlib_error(ret, "bitio:deflate_deflate", &z->zs); if(z->zs.next_out != z->writebuffer) { writer->pos += z->zs.next_out - (Bytef*)z->writebuffer; z->output->write(z->output, z->writebuffer, z->zs.next_out - (Bytef*)z->writebuffer); z->zs.next_out = z->writebuffer; z->zs.avail_out = ZLIB_BUFFER_SIZE; } if(!z->zs.avail_in) { break; } } return len; #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } void writer_zlibdeflate_flush(writer_t*writer) { #ifdef HAVE_ZLIB zlibdeflate_t*z = (zlibdeflate_t*)writer->internal; int ret; if(writer->type != WRITER_TYPE_ZLIB) { fprintf(stderr, "Wrong writer ID (writer not initialized?)\n"); return; } if(!z) { fprintf(stderr, "zlib not initialized!\n"); return; } z->zs.next_in = 0; z->zs.avail_in = 0; while(1) { ret = deflate(&z->zs, Z_SYNC_FLUSH); if (ret != Z_OK) zlib_error(ret, "bitio:deflate_flush", &z->zs); if(z->zs.next_out != z->writebuffer) { writer->pos += z->zs.next_out - (Bytef*)z->writebuffer; z->output->write(z->output, z->writebuffer, z->zs.next_out - (Bytef*)z->writebuffer); z->zs.next_out = z->writebuffer; z->zs.avail_out = ZLIB_BUFFER_SIZE; } /* TODO: how will zlib let us know it needs more buffer space? */ break; } return; #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } static void writer_zlibdeflate_finish(writer_t*writer) { #ifdef HAVE_ZLIB zlibdeflate_t*z = (zlibdeflate_t*)writer->internal; writer_t*output; int ret; if(writer->type != WRITER_TYPE_ZLIB) { fprintf(stderr, "Wrong writer ID (writer not initialized?)\n"); return; } if(!z) return; output= z->output; while(1) { ret = deflate(&z->zs, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) zlib_error(ret, "bitio:deflate_finish", &z->zs); if(z->zs.next_out != z->writebuffer) { writer->pos += z->zs.next_out - (Bytef*)z->writebuffer; z->output->write(z->output, z->writebuffer, z->zs.next_out - (Bytef*)z->writebuffer); z->zs.next_out = z->writebuffer; z->zs.avail_out = ZLIB_BUFFER_SIZE; } if (ret == Z_STREAM_END) { break; } } ret = deflateEnd(&z->zs); if (ret != Z_OK) zlib_error(ret, "bitio:deflate_end", &z->zs); free(writer->internal); memset(writer, 0, sizeof(writer_t)); //output->finish(output); #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } void writer_init_zlibdeflate(writer_t*w, writer_t*output) { #ifdef HAVE_ZLIB zlibdeflate_t*z; int ret; memset(w, 0, sizeof(writer_t)); z = (zlibdeflate_t*)malloc(sizeof(zlibdeflate_t)); memset(z, 0, sizeof(zlibdeflate_t)); w->internal = z; w->write = writer_zlibdeflate_write; w->flush = writer_zlibdeflate_flush; w->finish = writer_zlibdeflate_finish; w->type = WRITER_TYPE_ZLIB; w->pos = 0; z->output = output; memset(&z->zs,0,sizeof(z_stream)); z->zs.zalloc = Z_NULL; z->zs.zfree = Z_NULL; z->zs.opaque = Z_NULL; ret = deflateInit(&z->zs, 9); if (ret != Z_OK) zlib_error(ret, "bitio:deflate_init", &z->zs); w->bitpos = 0; w->mybyte = 0; z->zs.next_out = z->writebuffer; z->zs.avail_out = ZLIB_BUFFER_SIZE; #else fprintf(stderr, "Error: swftools was compiled without zlib support"); exit(1); #endif } /* ----------------------- bit handling routines -------------------------- */ void writer_writebit(writer_t*w, int bit) { if(w->bitpos==8) { w->write(w, &w->mybyte, 1); w->bitpos = 0; w->mybyte = 0; } if(bit&1) w->mybyte |= 1 << (7 - w->bitpos); w->bitpos ++; } void writer_writebits(writer_t*w, unsigned int data, int bits) { int t; for(t=0;t> (bits-t-1))&1); } } void writer_resetbits(writer_t*w) { if(w->bitpos) w->write(w, &w->mybyte, 1); w->bitpos = 0; w->mybyte = 0; } unsigned int reader_readbit(reader_t*r) { if(r->bitpos==8) { r->bitpos=0; r->read(r, &r->mybyte, 1); } return (r->mybyte>>(7-r->bitpos++))&1; } unsigned int reader_readbits(reader_t*r, int num) { int t; int val = 0; for(t=0;tmybyte = 0; r->bitpos = 8; } U8 reader_readU8(reader_t*r) { U8 b = 0; if(r->read(r, &b, 1)<1) { fprintf(stderr, "bitio.c:reader_readU8: Read over end of memory region\n"); } return b; } S8 reader_readS8(reader_t*r) { S8 b = 0; if(r->read(r, &b, 1)<1) { fprintf(stderr, "bitio.c:reader_readU8: Read over end of memory region\n"); } return b; } U16 reader_readU16(reader_t*r) { U8 b1=0,b2=0; if(r->read(r, &b1, 1)<1) { fprintf(stderr, "bitio.c:reader_readU16: Read over end of memory region\n"); } if(r->read(r, &b2, 1)<1) { fprintf(stderr, "bitio.c:reader_readU16: Read over end of memory region\n"); } return b1|b2<<8; } U32 reader_readU32(reader_t*r) { U8 b1=0,b2=0,b3=0,b4=0; if(r->read(r, &b1, 1)<1) fprintf(stderr, "bitio.c:reader_readU32: Read over end of memory region\n"); if(r->read(r, &b2, 1)<1) fprintf(stderr, "bitio.c:reader_readU32: Read over end of memory region\n"); if(r->read(r, &b3, 1)<1) fprintf(stderr, "bitio.c:reader_readU32: Read over end of memory region\n"); if(r->read(r, &b4, 1)<1) fprintf(stderr, "bitio.c:reader_readU32: Read over end of memory region\n"); return b1|b2<<8|b3<<16|b4<<24; } float reader_readFloat(reader_t*r) { float f; r->read(r, &f, 4); return f; U8 b1=0,b2=0,b3=0,b4=0; r->read(r, &b1, 1); r->read(r, &b2, 1); r->read(r, &b3, 1); r->read(r, &b4, 1); U32 w = (b1|b2<<8|b3<<16|b4<<24); return *(float*)&w; } double reader_readDouble(reader_t*r) { double f; r->read(r, &f, 8); return f; U8 b[8]; r->read(r, b, 8); U64 w = ((U64)b[0]|(U64)b[1]<<8|(U64)b[2]<<16|(U64)b[3]<<24|(U64)b[4]<<32|(U64)b[5]<<40|(U64)b[6]<<48|(U64)b[7]<<56); return *(double*)&w; } char*reader_readString(reader_t*r) { writer_t g; writer_init_growingmemwriter(&g, 16); while(1) { U8 b = reader_readU8(r); writer_writeU8(&g, b); if(!b) break; } char*string = (char*)writer_growmemwrite_getmem(&g); g.finish(&g); return string; } unsigned int read_compressed_uint(reader_t*r) { unsigned int u = 0; unsigned int b; do { b = reader_readU8(r); u = u<<7|b&0x7f; } while(b&0x80); return u; } int read_compressed_int(reader_t*r) { int i = 0; int b; b = reader_readS8(r); i = b&0x7f; if(b&0x40) i|=0xffffff80; //sign extension if(!(b&0x80)) return i; do { b = reader_readS8(r); i = i<<7|b&0x7f; } while(b&0x80); return i; } void writer_writeString(writer_t*w, const char*s) { int l = strlen(s); char zero = 0; w->write(w, (void*)s, l); w->write(w, &zero, 1); } void writer_writeU8(writer_t*w, unsigned char b) { w->write(w, &b, 1); } void writer_writeU16(writer_t*w, unsigned short v) { unsigned char b1 = v; unsigned char b2 = v>>8; w->write(w, &b1, 1); w->write(w, &b2, 1); } void writer_writeU32(writer_t*w, unsigned long v) { unsigned char b1 = v; unsigned char b2 = v>>8; unsigned char b3 = v>>16; unsigned char b4 = v>>24; w->write(w, &b1, 1); w->write(w, &b2, 1); w->write(w, &b3, 1); w->write(w, &b4, 1); } void writer_writeFloat(writer_t*w, float f) { w->write(w, &f, 4); return; unsigned v = *(unsigned*)&f; unsigned char b1 = v; unsigned char b2 = v>>8; unsigned char b3 = v>>16; unsigned char b4 = v>>24; w->write(w, &b1, 1); w->write(w, &b2, 1); w->write(w, &b3, 1); w->write(w, &b4, 1); } void writer_writeDouble(writer_t*w, double f) { w->write(w, &f, 8); return; unsigned long long v = *(unsigned long long*)&f; unsigned char b1 = v; unsigned char b2 = v>>8; unsigned char b3 = v>>16; unsigned char b4 = v>>24; unsigned char b5 = v>>32; unsigned char b6 = v>>40; unsigned char b7 = v>>48; unsigned char b8 = v>>56; w->write(w, &b1, 1); w->write(w, &b2, 1); w->write(w, &b3, 1); w->write(w, &b4, 1); w->write(w, &b5, 1); w->write(w, &b6, 1); w->write(w, &b7, 1); w->write(w, &b8, 1); } void write_compressed_uint(writer_t*w, unsigned int u) { if(u<0x80) { writer_writeU8(w, u); } else if(u<0x4000) { writer_writeU8(w, u>>7|0x80); writer_writeU8(w, u&0x7f); } else if(u<0x200000) { writer_writeU8(w, u>>14|0x80); writer_writeU8(w, u>>7|0x80); writer_writeU8(w, u&0x7f); } else if(u<0x10000000) { writer_writeU8(w, u>>21|0x80); writer_writeU8(w, u>>14|0x80); writer_writeU8(w, u>>7|0x80); writer_writeU8(w, u&0x7f); } else { writer_writeU8(w, u>>28|0x80); writer_writeU8(w, u>>21|0x80); writer_writeU8(w, u>>14|0x80); writer_writeU8(w, u>>7|0x80); writer_writeU8(w, u&0x7f); } } void write_compressed_int(writer_t*w, int i) { if(i>=-0x40 && i<0x40) { writer_writeU8(w, i&0x7f); } else if(i>=-0x2000 && i<0x2000) { writer_writeU8(w, (i>>7)&0x7f|0x80); writer_writeU8(w, i&0x7f); } else if(i>=-0x100000 && i<0x100000) { writer_writeU8(w, (i>>14)&0x7f|0x80); writer_writeU8(w, (i>>7)&0x7f|0x80); writer_writeU8(w, (i)&0x7f); } else if(i>=-0x8000000 && i<0x8000000) { writer_writeU8(w, (i>>21)&0x7f|0x80); writer_writeU8(w, (i>>14)&0x7f|0x80); writer_writeU8(w, (i>>7)&0x7f|0x80); writer_writeU8(w, (i)&0x7f); } else { writer_writeU8(w, (i>>28)&0x7f|0x80); writer_writeU8(w, (i>>21)&0x7f|0x80); writer_writeU8(w, (i>>14)&0x7f|0x80); writer_writeU8(w, (i>>7)&0x7f|0x80); writer_writeU8(w, (i)&0x7f); } } swftools_0.9.2+git20130725.orig/lib/ttf.h0000644000175000017500000001127212216332640017042 0ustar gawaingawain/* ttf.h Parser and writer for truetype font files. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #ifndef __ttf_h__ #define __ttf_h__ #include "types.h" typedef struct _ttf_table { U32 id; struct _ttf_table*prev; struct _ttf_table*next; U8*data; int len; int memsize; } ttf_table_t; typedef struct _table_maxp { U16 maxPoints; U16 maxContours; U16 maxComponentPoints; U16 maxComponentContours; U16 maxZones; U16 maxTwilightPoints; U16 maxStorage; U16 maxFunctionDefs; U16 maxInstructionDefs; U16 maxStackElements; U16 maxSizeOfInstructions; U16 maxComponentElements; U16 maxComponentDepth; } table_maxp_t; typedef struct _table_os2 { S16 xAvgCharWidth; U16 usWeightClass; U16 usWidthClass; U16 ySubscriptXSize; U16 ySubscriptYSize; U16 ySubscriptXOffset; U16 ySubscriptYOffset; U16 ySuperscriptXSize; U16 ySuperscriptYSize; U16 ySuperscriptXOffset; U16 ySuperscriptYOffset; U16 yStrikeoutSize; U16 yStrikeoutPosition; U16 sFamilyClass; U8 panose_FamilyType; U8 panose_SerifStyle; U8 panose_Weight; U8 panose_Proportion; U8 panose_Contrast; U8 panose_StrokeVariation; U8 panose_ArmStyle; U8 panose_Letterform; U8 panose_Midline; U8 panose_XHeight; U32 ulCharRange[4]; U16 fsSelection; U16 fsFirstCharIndex; U16 fsLastCharIndex; S16 sTypoAscender; S16 sTypoDescender; S16 sTypoLineGap; U16 usWinAscent; U16 usWinDescent; /* for version >= 0x0001 */ U32 ulCodePageRange1; U32 ulCodePageRange2; /* for version >= 0x0002 */ S16 sxHeight; S16 sCapHeight; U16 usDefaultChar; U16 usBreakChar; U16 usMaxContext; } table_os2_t; typedef struct _table_hea { U16 advanceWidthMax; S16 minLeftSideBearing; S16 minRightSideBearing; S16 xMaxExtent; S16 caretSlopeRise; S16 caretSlopeRun; S16 caretOffset; } table_hea_t; #define GLYPH_ON_CURVE 0x01 #define GLYPH_CONTOUR_START 0x40 #define GLYPH_CONTOUR_END 0x80 typedef U32 unicode_t; typedef struct _ttfpoint { int x,y; U8 flags; } ttfpoint_t; typedef struct _ttfglyph { U16 advance; S16 bearing; S16 xmin,ymin,xmax,ymax; int code_size; U8*code; int num_points; ttfpoint_t*points; } ttfglyph_t; typedef struct _table_head { U16 flags; U16 units_per_em; S16 xmin,ymin,xmax,ymax; U16 macStyle; U16 lowest_readable_size; S16 dir_hint; } table_head_t; typedef struct _table_post { U32 italic_angle; U16 underline_position; U16 underline_thickness; } table_post_t; typedef struct _table_cvt { S16*values; int num; } table_cvt_t; typedef struct _table_gasp { int num; struct { U16 size; U16 behaviour; } *records; } table_gasp_t; typedef struct _table_code { U8*code; int size; } table_code_t; typedef struct _ttf { char*family_name; /* nameId 1 */ char*subfamily_name; /* nameId 2 */ char*font_uid; /* nameId 3 */ char*full_name; /* nameId 4 */ char*version_string; /* nameId 5 */ char*postscript_name; /* nameId 6 */ ttf_table_t*tables; table_head_t*head; table_maxp_t*maxp; table_os2_t*os2; table_hea_t*hea; table_post_t*post; table_cvt_t*cvt; table_gasp_t*gasp; table_code_t*prep; table_code_t*fpgm; U16 flags; char is_vertical; S16 ascent; S16 descent; // ymin, *not* negative ymin S16 lineGap; int num_glyphs; ttfglyph_t*glyphs; int unicode_size; unicode_t*unicode; U32 version; } ttf_t; ttf_t*ttf_new(); ttf_t* ttf_open(const char*filename); void ttf_reduce(ttf_t*ttf); ttf_t*ttf_load(void*data, int length); ttf_table_t*ttf_addtable(ttf_t*ttf, U32 tag); void ttf_create_truetype_tables(ttf_t*ttf); void ttf_dump(ttf_t*ttf); void ttf_destroy(ttf_t*ttf); void ttf_save(ttf_t*ttf, const char*filename); void ttf_save_eot(ttf_t*ttf, const char*filename); #endif swftools_0.9.2+git20130725.orig/lib/types.h0000644000175000017500000000362712216332640017416 0ustar gawaingawain#ifndef __rfxtypes_h__ #define __rfxtypes_h__ #include "../config.h" #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif /* little/big endian stuff */ #define PUT8(ptr,x) {((U8*)(ptr))[0]=x;} #define PUT16(ptr,x) {((U8*)(ptr))[0]=(U8)(x);((U8*)(ptr))[1]=(U8)((x)>>8);} #define PUT32(ptr,x) {((U8*)(ptr))[0]=(U8)(x);((U8*)(ptr))[1]=(U8)((x)>>8);((U8*)(ptr))[2]=(U8)((x)>>16);((U8*)(ptr))[3]=(U8)((x)>>24);} #define GET16(ptr) (((U16)(((U8*)(ptr))[0]))+(((U16)(((U8*)(ptr))[1]))<<8)) #define GET32(ptr) (((U16)(((U8*)(ptr))[0]))+(((U16)(((U8*)(ptr))[1]))<<8)+(((U16)(((U8*)(ptr))[2]))<<16)+(((U16)(((U8*)(ptr))[3]))<<24)) #define SWAP16(s) ((((s)>>8)&0x00ff)|(((s)<<8)&0xff00)) #define SWAP32(s) (SWAP16(((s)>>16)&0x0000ffff)|((SWAP16(s)<<16)&0xffff0000)) #ifdef WORDS_BIGENDIAN #define LE_16_TO_NATIVE(s) SWAP16(s) #define LE_32_TO_NATIVE(s) SWAP32(s) #define BE_16_TO_NATIVE(x) (x) #define BE_32_TO_NATIVE(x) (x) #else #define LE_16_TO_NATIVE(x) (x) #define LE_32_TO_NATIVE(x) (x) #define BE_16_TO_NATIVE(s) SWAP16(s) #define BE_32_TO_NATIVE(s) SWAP32(s) #endif // SWF Types #if SIZEOF_SIGNED_LONG_LONG != 8 #error "no way to define 64 bit integer" #endif #if SIZEOF_SIGNED != 4 #error "don't know how to define 32 bit integer" #endif #if SIZEOF_SIGNED_SHORT != 2 #error "don't know how to define 16 bit integer" #endif #if SIZEOF_SIGNED_CHAR != 1 #error "don't know how to define 8 bit integer" #endif typedef unsigned long long U64; typedef signed long long S64; typedef unsigned U32; typedef signed S32; typedef unsigned short U16; typedef signed short S16; typedef unsigned char U8; typedef signed char S8; #if SIZEOF_VOIDP == SIZEOF_SIGNED_LONG_LONG typedef unsigned long long ptroff_t; #elif SIZEOF_VOIDP == SIZEOF_SIGNED typedef unsigned ptroff_t; #else #error "Unknown pointer size" #endif #endif swftools_0.9.2+git20130725.orig/lib/q.c0000644000175000017500000011663012216332640016504 0ustar gawaingawain/* q.c Part of the swftools package. Copyright (c) 2001,2002,2003,2004 Matthias Kramm This program is rfx_free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the rfx_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 rfx_free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "mem.h" #include "types.h" #include "q.h" // ------------------------------- malloc, alloc routines --------------------- #ifndef STRNDUP char* strdup_n(const char*str, int size) { char*m = (char*)rfx_alloc(size+1); memcpy(m, str, size); m[size] = 0; return m; } #endif char*qstrdup(const char*string) { return strdup(string); } char*qstrndup(const char*string, int len) { return strdup_n(string, len); } char* allocprintf(const char*format, ...) { va_list arglist1; va_start(arglist1, format); char dummy; int l = vsnprintf(&dummy, 1, format, arglist1); va_end(arglist1); va_list arglist2; va_start(arglist2, format); char*buf = malloc(l+1); vsnprintf(buf, l+1, format, arglist2); va_end(arglist2); return buf; } // ------------------------------- mem_t -------------------------------------- void mem_init(mem_t*mem) { memset(mem, 0, sizeof(mem_t)); } void mem_clear(mem_t*mem) { rfx_free(mem->buffer);mem->buffer = 0; } void mem_destroy(mem_t*mem) { mem_clear(mem); rfx_free(mem); } static int mem_put_(mem_t*m,const void*data, int length, int null) { int n = m->pos; m->pos += length + (null?1:0); if(m->pos > m->len) { int v1 = (m->pos+63)&~63; int v2 = m->len + m->len / 2; m->len = v1>v2?v1:v2; m->buffer = m->buffer?(char*)rfx_realloc(m->buffer,m->len):(char*)rfx_alloc(m->len); } assert(n+length <= m->len); memcpy(&m->buffer[n], data, length); if(null) m->buffer[n + length] = 0; return n; } int mem_put(mem_t*m,void*data, int length) { return mem_put_(m, data, length, 0); } int mem_putstring(mem_t*m,string_t str) { return mem_put_(m, str.str, str.len, 1); } int mem_get(mem_t*m, void*data, int length) { if(m->read_pos + length > m->pos) { length = m->pos - m->read_pos; } memcpy(data, m->buffer+m->read_pos, length); m->read_pos += length; return length; } // ------------------------------- median ------------------------------------- float medianf(float*a, int n) { int i,j,l,m; float x; int k=n&1?n/2:n/2-1; l=0; m=n-1; while(linternal = i; i->buffer = (unsigned char*)rfx_alloc(1024); i->buffersize = 1024; } int ringbuffer_read(ringbuffer_t*r, void*buf, int len) { unsigned char* data = (unsigned char*)buf; ringbuffer_internal_t*i = (ringbuffer_internal_t*)r->internal; if(r->available < len) len = r->available; if(!len) return 0; if(i->readpos + len > i->buffersize) { int read1 = i->buffersize-i->readpos; memcpy(data, &i->buffer[i->readpos], read1); memcpy(&data[read1], &i->buffer[0], len - read1); i->readpos = len - read1; } else { memcpy(data, &i->buffer[i->readpos], len); i->readpos += len; i->readpos %= i->buffersize; } r->available -= len; return len; } void ringbuffer_put(ringbuffer_t*r, void*buf, int len) { unsigned char* data = (unsigned char*)buf; ringbuffer_internal_t*i = (ringbuffer_internal_t*)r->internal; if(i->buffersize - r->available < len) { unsigned char* buf2; int newbuffersize = i->buffersize; int oldavailable = r->available; newbuffersize*=3;newbuffersize/=2; /*grow at least by 50% each time */ if(newbuffersize < r->available + len) newbuffersize = r->available + len + 1024; buf2 = (unsigned char*)rfx_alloc(newbuffersize); ringbuffer_read(r, buf2, r->available); rfx_free(i->buffer); i->buffer = buf2; i->buffersize = newbuffersize; i->readpos = 0; i->writepos = oldavailable; r->available = oldavailable; } if(i->writepos + len > i->buffersize) { int read1 = i->buffersize-i->writepos; memcpy(&i->buffer[i->writepos], data, read1); memcpy(&i->buffer[0], &data[read1], len - read1); i->writepos = len - read1; } else { memcpy(&i->buffer[i->writepos], data, len); i->writepos += len; i->writepos %= i->buffersize; } r->available += len; } void ringbuffer_clear(ringbuffer_t*r) { ringbuffer_internal_t*i = (ringbuffer_internal_t*)r->internal; rfx_free(i->buffer);i->buffer = 0; rfx_free(i); } // ------------------------------- heap_t ------------------------------- void heap_init(heap_t*h,int elem_size, int(*compare)(const void *, const void *)) { memset(h, 0, sizeof(heap_t)); h->size = 0; h->elem_size = elem_size; h->compare = compare; h->elements = 0; h->max_size = 0; } heap_t* heap_new(int elem_size, int(*compare)(const void *, const void *)) { heap_t*h = malloc(sizeof(heap_t)); heap_init(h, elem_size, compare); return h; } heap_t* heap_clone(heap_t*o) { heap_t*h = malloc(sizeof(heap_t)); memcpy(h, o, sizeof(heap_t)); h->elements = rfx_alloc(sizeof(void*)*h->size); int t; for(t=0;tsize;t++) { h->elements[t] = rfx_alloc(h->elem_size); memcpy(h->elements[t], o->elements[t], h->elem_size); } return h; } void heap_clear(heap_t*h) { int t; for(t=0;tsize;t++) { rfx_free(h->elements[t]); h->elements[t]=0; } rfx_free(h->elements); } void heap_destroy(heap_t*h) { heap_clear(h); free(h); } #define HEAP_NODE_LARGER(h,node1,node2) ((h)->compare((node1),(node2))>0) #define HEAP_NODE_SMALLER(h,node1,node2) ((h)->compare((node1),(node2))<0) static void up(heap_t*h, int node) { void*node_p = h->elements[node]; int parent = node; int tmp = node; do { node = parent; if(!node) break; parent = (node-1)/2; h->elements[node] = h->elements[parent]; } while(HEAP_NODE_SMALLER(h, h->elements[parent], node_p)); h->elements[node] = node_p; } static void down(heap_t*h, int node) { void*node_p = h->elements[node]; int child = node; do { node = child; /* determine new child's position */ child = node<<1|1; if(child >= h->size) break; if(child+1 < h->size && HEAP_NODE_SMALLER(h,h->elements[child],h->elements[child+1])) // search for bigger child child++; h->elements[node] = h->elements[child]; } while(HEAP_NODE_SMALLER(h,node_p, h->elements[child])); h->elements[node] = node_p; } void heap_put(heap_t*h, void*e) { int pos = h->size++; void*data = rfx_alloc(h->elem_size); memcpy(data,e,h->elem_size); if(pos>=h->max_size) { h->max_size = h->max_size<15?15:(h->max_size+1)*2-1; h->elements = (void**)rfx_realloc(h->elements, h->max_size*sizeof(void*)); assert(posmax_size); } h->elements[pos] = data; up(h, pos); } int heap_size(heap_t*h) { return h->size; } void* heap_peek(heap_t*h) { if(!h || !h->size) return 0; return h->elements[0]; } void* heap_chopmax(heap_t*h) { if(!h->size) return 0; void*p = h->elements[0]; h->elements[0] = h->elements[--h->size]; down(h,0); return p; } void heap_dump(heap_t*h, FILE*fi) { int t; for(t=0;tsize;t++) { int s; for(s=0;s<=t;s=(s+1)*2-1) { if(s==t) fprintf(fi,"\n"); } //fprintf(fi,"%d ", h->elements[t]->x); //? } } void** heap_flatten(heap_t*h) { void**nodes = (void**)rfx_alloc((h->size+1)*sizeof(void*)); void**p = nodes; while(h->size) { /*printf("Heap Size: %d\n", h->size); heap_print(stdout, h); printf("\n");*/ *p++ = heap_chopmax(h); } *p++ = 0; return nodes; } // ------------------------------- trie -------------------------------------- trie_t*trie_new() { return (trie_t*)rfx_calloc(sizeof(trie_t)); } static char _trie_put(trielayer_t**t, unsigned const char*id, void*data) { if(!*t) { (*t) = rfx_calloc(sizeof(trielayer_t)); (*t)->rest = (unsigned char*)strdup((char*)id); (*t)->data = data; return 0; } if((*t)->rest && (*t)->rest[0]) { // make room: shift whatever's currently in here one node down _trie_put(&(*t)->row[(*t)->rest[0]], (*t)->rest+1, (*t)->data); (*t)->rest = 0; } if(id[0]) { return _trie_put(&(*t)->row[id[0]], id+1, data); } else { char overwrite = 0; if((*t)->rest) overwrite = 1; (*t)->rest = (unsigned char*)strdup(""); (*t)->data = data; return overwrite; } } static char _trie_remove(trielayer_t*t, unsigned const char*id) { while(t) { if(t->rest && !strcmp((char*)t->rest, (char*)id)) { free(t->rest); t->rest = 0; return 1; } if(!*id) return 0; t = t->row[*id++]; } return 0; } static void trie_rollback_removes(trie_t*t, unsigned const char*id, void*data); static void trie_rollback_adds(trie_t*t, unsigned const char*id, void*data); void trie_put(trie_t*t, unsigned const char*id, void*data) { if(!t->rollback) { _trie_put(&t->start, id, data); } else { char contains = trie_contains(t, id); void*olddata = contains?trie_lookup(t, id):0; _trie_put(&t->start, id, data); if(contains) { trie_rollback_adds(t, id, olddata); } trie_rollback_removes(t, id, data); } } char trie_remove(trie_t*t, unsigned const char*id) { if(!t->rollback) { return _trie_remove(t->start, id); } else { void*olddata = trie_lookup(t, id); char exists = _trie_remove(t->start, id); if(exists) { trie_rollback_adds(t, id, olddata); } return exists; } } int trie_contains(trie_t*trie, unsigned const char*id) { trielayer_t*t = trie->start; while(t) { if(t->rest && !strcmp((char*)t->rest, (char*)id)) return 1; if(!*id) return 0; t = t->row[*id++]; } return 0; } void* trie_lookup(trie_t*trie, unsigned const char*id) { trielayer_t*t = trie->start; while(t) { if(t->rest && !strcmp((char*)t->rest, (char*)id)) return t->data; if(!*id) return 0; t = t->row[*id++]; } return 0; } typedef struct _triememory { const unsigned char*key; void*data; char del; // 0/1 struct _triememory*next; } triememory_t; typedef struct _trierollback { triememory_t*ops; struct _trierollback*prev; } trierollback_t; static void trie_rollback_adds(trie_t*t, unsigned const char*id, void*data) { trierollback_t*rollback = (trierollback_t*)t->rollback; triememory_t*m = (triememory_t*)rfx_calloc(sizeof(triememory_t)); m->key = id; m->data = data; m->del = 0; m->next = rollback->ops; rollback->ops = m; } static void trie_rollback_removes(trie_t*t, unsigned const char*id, void*data) { trierollback_t*rollback = (trierollback_t*)t->rollback; triememory_t*m = (triememory_t*)rfx_calloc(sizeof(triememory_t)); m->key = id; m->data = data; m->del = 1; m->next = rollback->ops; rollback->ops = m; } void _trie_dump(trielayer_t*t, char*buffer, int pos) { int i; for(i=0;i<256;i++) { if(t->row[i]) { buffer[pos]=i; _trie_dump(t->row[i], buffer, pos+1); } } if(t->rest) { buffer[pos]=0; printf("%s%s %08x\n", buffer, t->rest, (int)t->data); } } void trie_dump(trie_t*t) { char buffer[256]; _trie_dump(t->start, buffer, 0); } void trie_remember(trie_t*t) { trierollback_t*old = (trierollback_t*)t->rollback; t->rollback = (trierollback_t*)rfx_calloc(sizeof(trierollback_t)); ((trierollback_t*)t->rollback)->prev = old; } void trie_rollback(trie_t*t) { trierollback_t*rollback = (trierollback_t*)t->rollback; if(!rollback) { fprintf(stderr, "Internal error: can't roll back this trie any further\n"); return; } t->rollback = ((trierollback_t*)t->rollback)->prev; triememory_t*op = rollback->ops; while(op) { triememory_t*next = op->next; if(op->del) { if(!_trie_remove(t->start, op->key)) { fprintf(stderr, "Internal error: can't delete key %s in trie during rollback\n", op->key); } } else { if(_trie_put(&t->start, op->key, op->data)) { fprintf(stderr, "Internal error: overwrote key %s in trie during rollback\n", op->key); } } free(op); op = next; } } // ------------------------------- crc32 -------------------------------------- static unsigned int crc32[256]; static char crc32_initialized=0; static void crc32_init(void) { int t; if(crc32_initialized) return; crc32_initialized = 1; for(t=0; t<256; t++) { unsigned int c = t; int s; for (s = 0; s < 8; s++) { c = (0xedb88320L*(c&1)) ^ (c >> 1); } crc32[t] = c; } } static uint64_t crc64[256]; static char crc64_initialized=0; static void crc64_init(void) { int t; if(crc64_initialized) return; crc64_initialized = 1; for(t=0; t<256; t++) { unsigned int c = t; int s; for (s = 0; s < 8; s++) { c = ((c&1)?0xC96C5795D7870F42ll:0) ^ (c >> 1); } crc64[t] = c; } } // ------------------------------- string_t ----------------------------------- void string_set2(string_t*str, const char*text, int len) { str->len = len; str->str = text; } void string_set(string_t*str, const char*text) { if(text) { str->len = strlen(text); } else { str->len = 0; } str->str = text; } string_t string_new(const char*text, int len) { string_t s; s.len = len; s.str = text; return s; } string_t string_new2(const char*text) { string_t s; if(text) { s.len = strlen(text); } else { s.len = 0; } s.str = text; return s; } string_t* string_new3(const char*text, int len) { if(!text) { string_t*s = malloc(sizeof(string_t)); s->len = 0; s->str = 0; return s; } else { string_t*s = malloc(sizeof(string_t)+len+1); s->len = len; s->str = (const char*)(s+1); memcpy((char*)s->str, text, len); ((char*)s->str)[len]=0; return s; } } string_t* string_new4(const char*text) { int l = strlen(text); return string_new3(text, l); } void string_free(string_t*s) { if(!s) return; s->len = 0; if((string_t*)(s->str) == s+1) { s->str = 0; rfx_free(s); } else { rfx_free((char*)(s->str)); s->str = 0; rfx_free(s); } } char* string_cstr(string_t*str) { return strdup_n(str->str, str->len); } char* string_escape(string_t*str) { int t; int len = 0; for(t=0;tlen;t++) { if(str->str[t]<0x20) len+=3; else len++; } char*s = malloc(len+1); char*p=s; for(t=0;tlen;t++) { if(str->str[t]<0x20) { *p++ ='\\'; unsigned char c = str->str[t]; *p++ = "0123456789abcdef"[c>>4]; *p++ = "0123456789abcdef"[c&0x0f]; } else { *p++ = str->str[t]; } } *p++ = 0; assert(p == &s[len+1]); return s; } unsigned int crc32_add_byte(unsigned int checksum, unsigned char b) { crc32_init(); return checksum>>8 ^ crc32[(b^checksum)&0xff]; } unsigned int crc32_add_string(unsigned int checksum, const char*s) { crc32_init(); if(!s) return checksum; while(*s) { checksum = checksum>>8 ^ crc32[(*s^checksum)&0xff]; s++; } return checksum; } unsigned int crc32_add_bytes(unsigned int checksum, const void*_s, int len) { unsigned char*s = (unsigned char*)_s; crc32_init(); if(!s || !len) return checksum; do { checksum = checksum>>8 ^ crc32[(*s^checksum)&0xff]; s++; } while(--len); return checksum; } unsigned int string_hash(const string_t*str) { int t; unsigned int checksum = 0; crc32_init(); for(t=0;tlen;t++) { checksum = checksum>>8 ^ crc32[(str->str[t]^checksum)&0xff]; } return checksum; } unsigned int string_hash2(const char*str) { unsigned int checksum = 0; const char*p = str; crc32_init(); while(*p) { checksum = checksum>>8 ^ crc32[(*p^checksum)&0xff]; p++; } return checksum; } uint64_t string_hash64(const char*str) { uint64_t checksum = 0; const char*p = str; crc64_init(); while(*p) { checksum = checksum>>8 ^ crc64[(*p^checksum)&0xff]; p++; } return checksum; } unsigned int string_hash3(const char*str, int len) { string_t s; s.str = str; s.len = len; return string_hash(&s); } void string_dup2(string_t*str, const char*text, int len) { str->len = len; str->str = strdup_n(text, len); } void string_dup(string_t*str, const char*text) { str->len = strlen(text); str->str = strdup(text); } int string_equals(string_t*str, const char*text) { int l = strlen(text); if(str->len == l && !memcmp(str->str, text, l)) return 1; return 0; } int string_equals2(string_t*str, string_t*str2) { if(str->len == str2->len && !memcmp(str->str, str2->str, str->len)) return 1; return 0; } char* concat2(const char* t1, const char* t2) { int l1 = strlen(t1); int l2 = strlen(t2); char*text = malloc(l1+l2+1); memcpy(text , t1, l1); memcpy(text+l1, t2, l2); text[l1+l2] = 0; return text; } char* concat3(const char* t1, const char* t2, const char* t3) { int l1 = strlen(t1); int l2 = strlen(t2); int l3 = strlen(t3); char*text = malloc(l1+l2+l3+1); memcpy(text , t1, l1); memcpy(text+l1, t2, l2); memcpy(text+l1+l2, t3, l3); text[l1+l2+l3] = 0; return text; } // ------------------------------- stringarray_t ------------------------------ typedef struct _stringlist { int index; struct _stringlist*next; } stringlist_t; typedef struct _stringarray_internal_t { mem_t pos; stringlist_t**hash; int num; int hashsize; } stringarray_internal_t; void stringarray_init(stringarray_t*sa, int hashsize) { stringarray_internal_t*s; int t; sa->internal = (stringarray_internal_t*)rfx_calloc(sizeof(stringarray_internal_t)); s = (stringarray_internal_t*)sa->internal; mem_init(&s->pos); s->hash = rfx_calloc(sizeof(stringlist_t*)*hashsize); s->hashsize = hashsize; } void stringarray_put(stringarray_t*sa, string_t str) { stringarray_internal_t*s = (stringarray_internal_t*)sa->internal; int pos; int hash = string_hash(&str) % s->hashsize; char*ss = string_cstr(&str); mem_put(&s->pos, &ss, sizeof(char*)); stringlist_t*l = rfx_alloc(sizeof(stringlist_t)); l->index = s->num; l->next = s->hash[hash]; s->hash[hash] = l; s->num++; } char* stringarray_at(stringarray_t*sa, int pos) { stringarray_internal_t*s = (stringarray_internal_t*)sa->internal; char*p; if(pos<0 || pos>=s->num) return 0; p = *(char**)&s->pos.buffer[pos*sizeof(char*)]; if(p<0) return 0; return p; } string_t stringarray_at2(stringarray_t*sa, int pos) { string_t s; s.str = stringarray_at(sa, pos); s.len = s.str?strlen(s.str):0; return s; } static stringlist_t* stringlist_del(stringarray_t*sa, stringlist_t*l, int index) { stringlist_t*ll = l; stringlist_t*old = l; while(l) { if(index==l->index) { old->next = l->next; memset(l, 0, sizeof(stringlist_t)); rfx_free(l); if(old==l) return 0; else return ll; } old = l; l = l->next; } fprintf(stderr, "Internal error: did not find string %d in hash\n", index); return ll; } void stringarray_del(stringarray_t*sa, int pos) { stringarray_internal_t*s = (stringarray_internal_t*)sa->internal; string_t str = stringarray_at2(sa, pos); int hash = string_hash(&str) % s->hashsize; s->hash[hash] = stringlist_del(sa, s->hash[hash], pos); *(char**)&s->pos.buffer[pos*sizeof(char*)] = 0; } int stringarray_find(stringarray_t*sa, string_t* str) { stringarray_internal_t*s = (stringarray_internal_t*)sa->internal; int hash = string_hash(str) % s->hashsize; int t; stringlist_t*l = s->hash[hash]; //TODO: statistics while(l) { string_t s = stringarray_at2(sa, l->index); if(string_equals2(str, &s)) { return l->index; } l = l->next; } return -1; } void stringarray_clear(stringarray_t*sa) { stringarray_internal_t*s = (stringarray_internal_t*)sa->internal; mem_clear(&s->pos); int t; for(t=0;thashsize;t++) { stringlist_t*l = s->hash[t]; while(l) { stringlist_t*next = l->next; memset(l, 0, sizeof(stringlist_t)); rfx_free(l); l = next; } } rfx_free(s->hash);s->hash=0; rfx_free(s); } void stringarray_destroy(stringarray_t*sa) { stringarray_clear(sa); rfx_free(sa); } // ------------------------------- type_t ------------------------------- char ptr_equals(const void*o1, const void*o2) { return o1==o2; } unsigned int ptr_hash(const void*o) { return string_hash3((const char*)&o, sizeof(o)); } void* ptr_dup(const void*o) { return (void*)o; } void ptr_free(void*o) { return; } char int_equals(const void*o1, const void*o2) { return o1==o2; } unsigned int int_hash(const void*o) { return string_hash3((const char*)&o, sizeof(o)); } void* int_dup(const void*o) { return (void*)o; } void int_free(void*o) { return; } char charptr_equals(const void*o1, const void*o2) { if(!o1 || !o2) return o1==o2; return !strcmp(o1,o2); } unsigned int charptr_hash(const void*o) { if(!o) return 0; return string_hash2(o); } void* charptr_dup(const void*o) { if(!o) return 0; return strdup(o); } void charptr_free(void*o) { if(o) { rfx_free(o); } } char stringstruct_equals(const void*o1, const void*o2) { if(!o1 || !o2) return o1==o2; string_t*s1 = (string_t*)o1; string_t*s2 = (string_t*)o2; int l = s1->lenlen?s1->len:s2->len; int r = memcmp(s1->str, s2->str, l); if(r) return 0; else return s1->len==s2->len; } unsigned int stringstruct_hash(const void*o) { if(!o) return 0; return string_hash(o); } string_t*string_dup3(string_t*o) { if(!o) return 0; if(!o->str) { string_t*s = malloc(sizeof(string_t)); s->str=0; s->len=0; return s; } string_t*s = rfx_alloc(sizeof(string_t)+o->len+1); s->len = o->len; s->str = (const char*)(s+1); memcpy((char*)s->str, o->str, s->len); ((char*)s->str)[s->len]=0; return s; } void stringstruct_free(void*o) { if(o) string_free(o); } type_t int_type = { equals: int_equals, hash: int_hash, dup: int_dup, free: int_free, }; type_t ptr_type = { equals: ptr_equals, hash: ptr_hash, dup: ptr_dup, free: ptr_free, }; type_t charptr_type = { equals: charptr_equals, hash: charptr_hash, dup: charptr_dup, free: charptr_free, }; type_t stringstruct_type = { equals: stringstruct_equals, hash: stringstruct_hash, dup: (dup_func)string_dup3, free: stringstruct_free, }; // ------------------------------- dictionary_t ------------------------------- #define INITIAL_SIZE 1 static int max(int x, int y) { return x>y?x:y; } dict_t*dict_new() { dict_t*d = rfx_alloc(sizeof(dict_t)); dict_init(d, INITIAL_SIZE); return d; } dict_t*dict_new2(type_t*t) { dict_t*d = rfx_alloc(sizeof(dict_t)); dict_init(d, INITIAL_SIZE); d->key_type = t; return d; } void dict_init(dict_t*h, int size) { memset(h, 0, sizeof(dict_t)); h->hashsize = size; h->slots = h->hashsize?(dictentry_t**)rfx_calloc(sizeof(dictentry_t*)*h->hashsize):0; h->num = 0; h->key_type = &charptr_type; } void dict_init2(dict_t*h, type_t*t, int size) { memset(h, 0, sizeof(dict_t)); h->hashsize = size; h->slots = h->hashsize?(dictentry_t**)rfx_calloc(sizeof(dictentry_t*)*h->hashsize):0; h->num = 0; h->key_type = t; } dict_t*dict_clone(dict_t*o) { dict_t*h = rfx_alloc(sizeof(dict_t)); memcpy(h, o, sizeof(dict_t)); h->slots = h->hashsize?(dictentry_t**)rfx_calloc(sizeof(dictentry_t*)*h->hashsize):0; int t; for(t=0;thashsize;t++) { dictentry_t*e = o->slots[t]; while(e) { dictentry_t*n = (dictentry_t*)rfx_alloc(sizeof(dictentry_t)); memcpy(n, e, sizeof(dictentry_t)); n->key = h->key_type->dup(e->key); n->data = e->data; n->next = h->slots[t]; h->slots[t] = n; e = e->next; } } return h; } static void dict_expand(dict_t*h, int newlen) { assert(h->hashsize < newlen); dictentry_t**newslots = (dictentry_t**)rfx_calloc(sizeof(dictentry_t*)*newlen); int t; for(t=0;thashsize;t++) { dictentry_t*e = h->slots[t]; while(e) { dictentry_t*next = e->next; unsigned int newhash = e->hash%newlen; e->next = newslots[newhash]; newslots[newhash] = e; e = next; } } if(h->slots) rfx_free(h->slots); h->slots = newslots; h->hashsize = newlen; } dictentry_t* dict_put(dict_t*h, const void*key, void* data) { unsigned int hash = h->key_type->hash(key); dictentry_t*e = (dictentry_t*)rfx_alloc(sizeof(dictentry_t)); if(!h->hashsize) dict_expand(h, 1); unsigned int hash2 = hash % h->hashsize; e->key = h->key_type->dup(key); e->hash = hash; //for resizing e->next = h->slots[hash2]; e->data = data; h->slots[hash2] = e; h->num++; return e; } void dict_put2(dict_t*h, const char*s, void*data) { assert(h->key_type == &charptr_type); dict_put(h, s, data); } void dict_dump(dict_t*h, FILE*fi, const char*prefix) { int t; for(t=0;thashsize;t++) { dictentry_t*e = h->slots[t]; while(e) { if(h->key_type!=&charptr_type) { fprintf(fi, "%s%08x=%08x\n", prefix, (int)e->key, (int)e->data); } else { fprintf(fi, "%s%s=%08x\n", prefix, (char*)e->key, (int)e->data); } e = e->next; } } } int dict_count(dict_t*h) { return h->num; } static inline dictentry_t* dict_do_lookup(dict_t*h, const void*key) { if(!h->num) { return 0; } unsigned int ohash = h->key_type->hash(key); unsigned int hash = ohash % h->hashsize; /* check first entry for match */ dictentry_t*e = h->slots[hash]; if(e && h->key_type->equals(e->key, key)) { return e; } else if(e) { e = e->next; } /* if dict is 2/3 filled, double the size. Do this the first time we have to actually iterate through a slot to find our data */ if(e && h->num*3 >= h->hashsize*2) { int newsize = h->hashsize; while(h->num*3 >= newsize*2) { newsize = newsize<15?15:(newsize+1)*2-1; } dict_expand(h, newsize); hash = ohash % h->hashsize; e = h->slots[hash]; if(e && h->key_type->equals(e->key, key)) { // omit move to front return e; } else if(e) { e = e->next; } } /* check subsequent entries for a match */ dictentry_t*last = h->slots[hash]; while(e) { if(h->key_type->equals(e->key, key)) { /* move to front- makes a difference of about 10% in most applications */ last->next = e->next; e->next = h->slots[hash]; h->slots[hash] = e; return e; } last=e; e = e->next; } return 0; } void* dict_lookup(dict_t*h, const void*key) { dictentry_t*e = dict_do_lookup(h, key); if(e) return e->data; return 0; } char dict_contains(dict_t*h, const void*key) { dictentry_t*e = dict_do_lookup(h, key); return !!e; } char dict_del(dict_t*h, const void*key) { if(!h->num) return 0; unsigned int hash = h->key_type->hash(key) % h->hashsize; dictentry_t*head = h->slots[hash]; dictentry_t*e = head, *prev=0; while(e) { if(h->key_type->equals(e->key, key)) { dictentry_t*next = e->next; h->key_type->free(e->key); memset(e, 0, sizeof(dictentry_t)); rfx_free(e); if(e == head) { h->slots[hash] = next; } else { assert(prev); prev->next = next; } h->num--; return 1; } prev = e; e = e->next; } return 0; } char dict_del2(dict_t*h, const void*key, void*data) { if(!h->num) return 0; unsigned int hash = h->key_type->hash(key) % h->hashsize; dictentry_t*head = h->slots[hash]; dictentry_t*e = head, *prev=0; while(e) { if(h->key_type->equals(e->key, key) && e->data == data) { dictentry_t*next = e->next; h->key_type->free(e->key); memset(e, 0, sizeof(dictentry_t)); rfx_free(e); if(e == head) { h->slots[hash] = next; } else { assert(prev); prev->next = next; } h->num--; return 1; } prev = e; e = e->next; } return 0; } dictentry_t* dict_get_slot(dict_t*h, const void*key) { if(!h->num) return 0; unsigned int ohash = h->key_type->hash(key); unsigned int hash = ohash % h->hashsize; return h->slots[hash]; } void dict_foreach_keyvalue(dict_t*h, void (*runFunction)(void*data, const void*key, void*val), void*data) { int t; for(t=0;thashsize;t++) { dictentry_t*e = h->slots[t]; while(e) { dictentry_t*next = e->next; if(runFunction) { runFunction(data, e->key, e->data); } e = e->next; } } } void dict_foreach_value(dict_t*h, void (*runFunction)(void*)) { int t; for(t=0;thashsize;t++) { dictentry_t*e = h->slots[t]; while(e) { dictentry_t*next = e->next; if(runFunction) { runFunction(e->data); } e = e->next; } } } void dict_free_all(dict_t*h, char free_keys, void (*free_data_function)(void*)) { int t; for(t=0;thashsize;t++) { dictentry_t*e = h->slots[t]; while(e) { dictentry_t*next = e->next; if(free_keys) { h->key_type->free(e->key); } if(free_data_function) { free_data_function(e->data); } memset(e, 0, sizeof(dictentry_t)); rfx_free(e); e = next; } h->slots[t]=0; } rfx_free(h->slots); memset(h, 0, sizeof(dict_t)); } void dict_clear_shallow(dict_t*h) { dict_free_all(h, 0, 0); } void dict_clear(dict_t*h) { dict_free_all(h, 1, 0); } void dict_destroy_shallow(dict_t*dict) { dict_clear_shallow(dict); rfx_free(dict); } void dict_destroy(dict_t*dict) { if(!dict) return; dict_clear(dict); rfx_free(dict); } // ------------------------------- mtf_t -------------------------------------- mtf_t* mtf_new(type_t*type) { NEW(mtf_t, mtf); mtf->type = type; return mtf; } void mtf_increase(mtf_t*m, const void*key) { mtf_item_t*item = m->first; mtf_item_t*last = 0; while(item) { if(m->type->equals(item->key, key)) { item->num++; if(item->num>m->first->num) { if(last) last->next = item->next; else m->first = item->next; item->next = m->first; m->first = item; } return; } last = item; item = item->next; } NEW(mtf_item_t,n); if(last) last->next = n; else m->first = n; n->key = key; n->num = 1; } void mtf_destroy(mtf_t*m) { if(!m) return; mtf_item_t*item = m->first; m->first = 0; while(item) { mtf_item_t*next = item->next; item->next = 0; free(item); item = next; } free(m); } // ------------------------------- map_t -------------------------------------- typedef struct _map_internal_t { dict_t d; } map_internal_t; void map_init(map_t*map) { map_internal_t*m; map->internal = (map_internal_t*)rfx_calloc(sizeof(map_internal_t)); m = (map_internal_t*)map->internal; dict_init(&m->d, INITIAL_SIZE); } void map_put(map_t*map, string_t t1, string_t t2) { map_internal_t*m = (map_internal_t*)map->internal; string_t s; char* s1 = string_cstr(&t1); dict_put2(&m->d, s1, (void*)string_cstr(&t2)); rfx_free(s1); } const char* map_lookup(map_t*map, const char*name) { map_internal_t*m = (map_internal_t*)map->internal; const char*value = dict_lookup(&m->d, name); return value; } static void freestring(void*data) { rfx_free(data); } static void dumpmapentry(void*data, const void*key, void*value) { FILE*fi = (FILE*)data; fprintf(fi, "%s=%s\n", (char*)key, (char*)value); } void map_dump(map_t*map, FILE*fi, const char*prefix) { int t; map_internal_t*m = (map_internal_t*)map->internal; dict_foreach_keyvalue(&m->d, dumpmapentry, fi); } void map_clear(map_t*map) { map_internal_t*m = (map_internal_t*)map->internal; dict_free_all(&m->d, 1, freestring); rfx_free(m); } void map_destroy(map_t*map) { map_clear(map); rfx_free(map); } // ------------------------------- array_t -------------------------------------- array_t* array_new1() { array_t*d = malloc(sizeof(array_t)); memset(d, 0, sizeof(array_t)); d->entry2pos = dict_new(); return d; } array_t* array_new2(type_t*type) { array_t*d = malloc(sizeof(array_t)); memset(d, 0, sizeof(array_t)); d->entry2pos = dict_new2(type); return d; } void*array_getkey(array_t*array, int nr) { if(nr >= array->num || nr<0) { fprintf(stderr, "error: reference to element %d in array[%d]\n", nr, array->num); return 0; } return array->d[nr].name; } void*array_getvalue(array_t*array, int nr) { if(nr >= array->num || nr<0) { fprintf(stderr, "error: reference to element %d in array[%d]\n", nr, array->num); return 0; } return array->d[nr].data; } int array_append(array_t*array, const void*name, void*data) { while(array->size <= array->num) { array->size += 64; if(!array->d) { array->d = malloc(sizeof(array_entry_t)*array->size); } else { array->d = realloc(array->d, sizeof(array_entry_t)*array->size); } } dictentry_t*e = dict_put(array->entry2pos, name, (void*)(ptroff_t)(array->num+1)); if(name) { array->d[array->num].name = e->key; } else { array->d[array->num].name = 0; } array->d[array->num].data = (void*)data; return array->num++; } int array_find(array_t*array, const void*name) { int pos = (int)(ptroff_t)dict_lookup(array->entry2pos, name); return pos-1; } int array_find2(array_t*array, const void*name, void*data) { dict_t*h= array->entry2pos; dictentry_t*e = dict_get_slot(array->entry2pos, name); while(e) { int index = ((int)(ptroff_t)e->data) - 1; if(h->key_type->equals(e->key, name) && array->d[index].data == data) { return index; } e = e->next; } return -1; } int array_update(array_t*array, const void*name, void*data) { int pos = array_find(array, name); if(pos>=0) { array->d[pos].data = data; return pos; } return array_append(array, name, data); } int array_append_if_new(array_t*array, const void*name, void*data) { int pos = array_find(array, name); if(pos>=0) return pos; return array_append(array, name, data); } void array_free(array_t*array) { dict_destroy(array->entry2pos); if(array->d) { free(array->d);array->d = 0; } free(array); } // ------------------------------- list_t -------------------------------------- struct _commonlist; typedef struct _listinfo { int size; struct _commonlist*last; } listinfo_t; typedef struct _commonlist { void*entry; struct _commonlist*next; listinfo_t info[0]; } commonlist_t; int list_length_(void*_list) { commonlist_t*l = (commonlist_t*)_list; if(!l) return 0; return l->info[0].size; } void list_concat_(void*_l1, void*_l2) { commonlist_t**l1 = (commonlist_t**)_l1; commonlist_t**l2 = (commonlist_t**)_l2; if(!*l1) { *l1 = *l2; } else if(*l2) { (*l1)->info[0].last->next = *l2; (*l1)->info[0].last = (*l2)->info[0].last; (*l1)->info[0].size += (*l2)->info[0].size; } *l2 = 0; } void list_append_(void*_list, void*entry) { commonlist_t**list = (commonlist_t**)_list; commonlist_t* n = 0; if(!*list) { n = (commonlist_t*)malloc(sizeof(commonlist_t)+sizeof(listinfo_t)); *list = n; (*list)->info[0].size = 0; } else { n = malloc(sizeof(commonlist_t)); (*list)->info[0].last->next = n; } n->next = 0; n->entry = entry; (*list)->info[0].last = n; (*list)->info[0].size++; } /* notice: prepending uses slighly more space than appending */ void list_prepend_(void*_list, void*entry) { commonlist_t**list = (commonlist_t**)_list; commonlist_t* n = (commonlist_t*)malloc(sizeof(commonlist_t)+sizeof(listinfo_t)); int size = 0; commonlist_t* last = 0; if(*list) { last = (*list)->info[0].last; size = (*list)->info[0].size; } n->next = *list; n->entry = entry; *list = n; (*list)->info[0].last = last; (*list)->info[0].size = size+1; } void list_free_(void*_list) { commonlist_t**list = (commonlist_t**)_list; commonlist_t*l = *list; while(l) { commonlist_t*next = l->next; free(l); l = next; } *list = 0; } void list_deep_free_(void*_list) { commonlist_t**list = (commonlist_t**)_list; commonlist_t*l = *list; while(l) { commonlist_t*next = l->next; if(l->entry) { free(l->entry);l->entry=0; } free(l); l = next; } *list = 0; } void*list_clone_(void*_list) { commonlist_t*l = *(commonlist_t**)_list; void*dest = 0; while(l) { commonlist_t*next = l->next; list_append_(&dest, l->entry); l = next; } return dest; } swftools_0.9.2+git20130725.orig/lib/gfxfont.h0000644000175000017500000000300312216332640017711 0ustar gawaingawain/* swffont.h Functions for loading external fonts. Header file of swffont.c Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #ifndef __gfxfont_h__ #define __gfxfont_h__ #include "gfxdevice.h" #ifdef __cplusplus extern "C" { #endif /* The quality parameter is given by 1 divided by the zoom factor at which the font still looks good. 1=normal, 0.5=double resolution etc. */ gfxfont_t* gfxfont_load(const char*id, const char*filename, unsigned int flags, double quality); void gfxfont_save(gfxfont_t*font, const char*filename); void gfxfont_save_eot(gfxfont_t*font, const char*filename); void gfxfont_fix_unicode(gfxfont_t*font, char remove_duplicates); void gfxfont_free(gfxfont_t*font); void gfxfont_add_unicode2glyph(gfxfont_t*font); #ifdef __cplusplus } #endif #endif //__gfxfont_h__ swftools_0.9.2+git20130725.orig/lib/gfxtools.h0000644000175000017500000001044612216332640020114 0ustar gawaingawain/* gfxtools.h Various utility functions for dealing with gfxdevices (header file). Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #ifndef __gfxtools_h__ #define __gfxtools_h__ #ifdef __cplusplus extern "C" { #endif #include #include "../lib/mem.h" #include "../lib/gfxdevice.h" typedef struct _gfxdrawer { void*internal; gfxcoord_t x,y; void (*moveTo)(struct _gfxdrawer*d, gfxcoord_t x, gfxcoord_t y); void (*lineTo)(struct _gfxdrawer*d, gfxcoord_t x, gfxcoord_t y); void (*splineTo)(struct _gfxdrawer*d, gfxcoord_t sx, gfxcoord_t sy, gfxcoord_t x, gfxcoord_t y); void (*close)(struct _gfxdrawer*d); void* (*result)(struct _gfxdrawer*d); } gfxdrawer_t; typedef struct _gfxpoint { gfxcoord_t x,y; } gfxpoint_t; typedef struct _gfxfontlist { gfxfont_t*font; void*user; struct _gfxfontlist*next; } gfxfontlist_t; void gfxdrawer_target_gfxline(gfxdrawer_t*d); void gfxtool_draw_dashed_line(gfxdrawer_t*d, gfxline_t*line, float*dashes, float phase); gfxline_t* gfxtool_dash_line(gfxline_t*line, float*dashes, float phase); void gfxline_dump(gfxline_t*l, FILE*fi, char*prefix); gfxline_t* gfxline_append(gfxline_t*line1, gfxline_t*line2); void gfxline_free(gfxline_t*l); gfxline_t* gfxline_clone(gfxline_t*line); void gfxline_optimize(gfxline_t*line); void gfxdraw_cubicTo(gfxdrawer_t*draw, double c1x, double c1y, double c2x, double c2y, double x, double y, double quality); void gfxdraw_conicTo(gfxdrawer_t*draw, double cx, double cy, double tox, double toy, double quality); gfxline_t*gfxline_fromstring(const char*string); gfxbbox_t gfxline_getbbox(gfxline_t*line); gfxbbox_t gfxbbox_expand_to_point(gfxbbox_t box, gfxcoord_t x, gfxcoord_t y); void gfxbbox_intersect(gfxbbox_t*box1, gfxbbox_t*box2); void gfxline_transform(gfxline_t*line, gfxmatrix_t*matrix); /* tries to remove unnecessary moveTos from the gfxline */ gfxline_t* gfxline_restitch(gfxline_t*line); /* reverses in place */ gfxline_t* gfxline_reverse(gfxline_t*line); void gfxmatrix_dump(gfxmatrix_t*l, FILE*fi, char*prefix); void gfxmatrix_transform(gfxmatrix_t*m, gfxcoord_t* v1, gfxcoord_t*dest); void gfxmatrix_invert(gfxmatrix_t*src, gfxmatrix_t*dest); void gfxmatrix_unit(gfxmatrix_t*m); void gfxmatrix_multiply(gfxmatrix_t*m1, gfxmatrix_t*m2, gfxmatrix_t*dest); gfxfontlist_t* gfxfontlist_create(); gfxfontlist_t*gfxfontlist_addfont(gfxfontlist_t*list, gfxfont_t*font); gfxfontlist_t*gfxfontlist_addfont2(gfxfontlist_t*list, gfxfont_t*font, void*user); gfxfont_t*gfxfontlist_findfont(gfxfontlist_t*list, char*id); char gfxfontlist_hasfont(gfxfontlist_t*list, gfxfont_t*font); void* gfxfontlist_getuserdata(gfxfontlist_t*list, const char*id); void gfxfontlist_free(gfxfontlist_t*list, char deletefonts); gfxbbox_t* gfxline_isrectangle(gfxline_t*_l); gfxbbox_t gfxbbox_expand_to_bbox(gfxbbox_t box, gfxbbox_t box2); gfxline_t*gfxline_makerectangle(double x1, double y1, double x2, double y2); gfxline_t*gfxline_makecircle(double x,double y,double rx, double ry); void gfxline_show(gfxline_t*line, FILE*fi); void gfxgradient_destroy(gfxgradient_t*gradient); typedef struct _gfxparam { const char*key; const char*value; struct _gfxparam* next; } gfxparam_t; typedef struct _gfxparams { gfxparam_t*params; gfxparam_t*last; } gfxparams_t; gfxparams_t* gfxparams_new(); void gfxparams_store(gfxparams_t*params, const char*name, const char*value); void gfxparams_free(gfxparams_t*params); void gfxline_normalize(gfxline_t*line, double sizex, double sizey); gfxbbox_t gfxbbox_transform(gfxbbox_t*bbox, gfxmatrix_t*m); #ifdef __cplusplus } #endif #endif //__gfxtools_h__ swftools_0.9.2+git20130725.orig/lib/os.h0000755000175000017500000000311012216332640016661 0ustar gawaingawain/* os.h header file for operating system dependent functions Part of the swftools package. Copyright (c) 2005 Matthias Kramm 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 */ #ifndef __os_h__ #define __os_h__ #include "../config.h" #ifdef __cplusplus extern "C" { #endif extern char path_seperator; #ifdef WIN32 char* getRegistryEntry(char*path); int setRegistryEntry(char*key,char*value); #endif typedef struct _memfile { void*data; int len; } memfile_t; memfile_t* memfile_open(const char*path); void memfile_close(memfile_t*file); char* getInstallationPath(); char* concatPaths(const char*base, const char*add); char* stripFilename(const char*filename, const char*newext); char* mktempname(char*buffer, const char*ext); void move_file(const char*from, const char*to); char file_exists(const char*filename); int file_size(const char*filename); int open_file_or_stdin(const char*filename, int attr); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/bitio.h0000644000175000017500000000745012216332640017356 0ustar gawaingawain/* bitio.h Generic object-oriented reading/writing. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #include #include "types.h" #include "../config.h" #ifdef HAVE_ZZIP #include "zzip/lib.h" #endif #ifndef __rfxswf_bitio_h__ #define __rfxswf_bitio_h__ #define READER_TYPE_FILE 1 #define READER_TYPE_MEM 2 #define READER_TYPE_ZLIB_U 3 #define READER_TYPE_ZLIB_C 4 #define READER_TYPE_ZLIB READER_TYPE_ZLIB_U #define READER_TYPE_NULL 5 #define READER_TYPE_FILE2 6 #define READER_TYPE_ZZIP 7 #define WRITER_TYPE_FILE 1 #define WRITER_TYPE_MEM 2 #define WRITER_TYPE_ZLIB_C 3 #define WRITER_TYPE_ZLIB_U 4 #define WRITER_TYPE_NULL 5 #define WRITER_TYPE_GROWING_MEM 6 #define WRITER_TYPE_ZLIB WRITER_TYPE_ZLIB_C typedef struct _reader { int (*read)(struct _reader*, void*data, int len); int (*seek)(struct _reader*, int pos); void (*dealloc)(struct _reader*); void *internal; int type; unsigned char mybyte; unsigned char bitpos; int pos; } reader_t; typedef struct _writer { int (*write)(struct _writer*, void*data, int len); void (*flush)(struct _writer*); void (*finish)(struct _writer*); void *internal; int type; unsigned char mybyte; unsigned char bitpos; int pos; } writer_t; void reader_resetbits(reader_t*r); unsigned int reader_readbit(reader_t*r); unsigned int reader_readbits(reader_t*r, int num); U8 reader_readU8(reader_t*r); U16 reader_readU16(reader_t*r); U32 reader_readU32(reader_t*r); float reader_readFloat(reader_t*r); double reader_readDouble(reader_t*r); char*reader_readString(reader_t*r); unsigned int read_compressed_uint(reader_t*r); int read_compressed_int(reader_t*r); void writer_resetbits(writer_t*w); void writer_writebit(writer_t*w, int bit); void writer_writebits(writer_t*w, unsigned int data, int bits); void writer_writeU8(writer_t*w, unsigned char b); void writer_writeU16(writer_t*w, unsigned short v); void writer_writeU32(writer_t*w, unsigned long v); void writer_writeFloat(writer_t*w, float f); void writer_writeDouble(writer_t*w, double f); void writer_writeString(writer_t*w, const char*s); void write_compressed_uint(writer_t*w, unsigned int u); void write_compressed_int(writer_t*w, int i); /* standard readers / writers */ void reader_init_filereader(reader_t*r, int handle); int reader_init_filereader2(reader_t*r, const char*filename); void reader_init_zlibinflate(reader_t*r, reader_t*input); void reader_init_memreader(reader_t*r, void*data, int length); void reader_init_nullreader(reader_t*r); #ifdef HAVE_ZZIP void reader_init_zzipreader(reader_t*r,ZZIP_FILE*z); #endif void writer_init_filewriter(writer_t*w, int handle); void writer_init_filewriter2(writer_t*w, char*filename); void writer_init_zlibdeflate(writer_t*w, writer_t*output); void writer_init_memwriter(writer_t*r, void*data, int length); void writer_init_nullwriter(writer_t*w); void writer_init_growingmemwriter(writer_t*r, U32 grow); void* writer_growmemwrite_memptr(writer_t*w, int*len); void* writer_growmemwrite_getmem(writer_t*w); void writer_growmemwrite_reset(writer_t*w); #endif //__rfxswf_bitio_h__ swftools_0.9.2+git20130725.orig/lib/gfxdevice.h0000644000175000017500000000674212216332640020217 0ustar gawaingawain#ifndef __gfxdevice_h__ #define __gfxdevice_h__ #ifdef __cplusplus extern "C" { #endif #define GFX_SUBPIXEL 2560 typedef double gfxcoord_t; typedef enum {gfx_moveTo, gfx_lineTo, gfx_splineTo} gfx_linetype; typedef enum {gfx_joinMiter, gfx_joinRound, gfx_joinBevel} gfx_joinType; typedef enum {gfx_capButt, gfx_capRound, gfx_capSquare} gfx_capType; typedef struct _gfxline { gfx_linetype type; gfxcoord_t x,y; gfxcoord_t sx,sy; struct _gfxline*next; /*NULL=end*/ } gfxline_t; typedef struct _gfxglyph { gfxline_t*line; gfxcoord_t advance; int unicode; // array? const char*name; } gfxglyph_t; typedef struct _gfxfont { const char*id; int num_glyphs; int max_unicode; double ascent,descent; gfxglyph_t*glyphs; int* unicode2glyph; } gfxfont_t; typedef struct _gfxcolor { unsigned char a; unsigned char r; unsigned char g; unsigned char b; } gfxcolor_t; typedef struct _gfxmatrix { double m00,m10,tx; double m01,m11,ty; } gfxmatrix_t; typedef struct _gfximage { /* if the data contains an alpha layer (a != 255), the r,g,b values will have to be premultiplied */ gfxcolor_t*data; unsigned width; unsigned height; } gfximage_t; /* gradients: A radial gradient will start at 0,0 and have a radius of 1,0 An axial gradient starts at -1,0 and ends at 1,0 */ typedef enum {gfxgradient_radial, gfxgradient_linear} gfxgradienttype_t; typedef struct _gfxgradient { gfxcolor_t color; float pos; // 0.0 - 1.0 struct _gfxgradient*next; //NULL=end } gfxgradient_t; typedef struct _gfxcxform { float rr,rg,rb,ra, tr; float gr,gg,gb,ga, tg; float br,bg,bb,ba, tb; float ar,ag,ab,aa, ta; } gfxcxform_t; typedef struct _gfxbbox { gfxcoord_t xmin, ymin, xmax, ymax; } gfxbbox_t; typedef struct _gfxresult { void (*write)(struct _gfxresult*gfx, int filedesc); int (*save)(struct _gfxresult*gfx, const char*filename); void* (*get)(struct _gfxresult*gfx, const char*name); void (*destroy)(struct _gfxresult*gfx); void*internal; } gfxresult_t; typedef struct _gfxdevice { const char* name; // gfx device name int (*setparameter)(struct _gfxdevice*dev, const char*key, const char*value); void (*startpage)(struct _gfxdevice*dev, int width, int height); void (*startclip)(struct _gfxdevice*dev, gfxline_t*line); void (*endclip)(struct _gfxdevice*dev); void (*stroke)(struct _gfxdevice*dev, gfxline_t*line, gfxcoord_t width, gfxcolor_t*color, gfx_capType cap_style, gfx_joinType joint_style, gfxcoord_t miterLimit); void (*fill)(struct _gfxdevice*dev, gfxline_t*line, gfxcolor_t*color); /* expects alpha channel in image to be non-premultiplied */ void (*fillbitmap)(struct _gfxdevice*dev, gfxline_t*line, gfximage_t*img, gfxmatrix_t*imgcoord2devcoord, gfxcxform_t*cxform); //cxform? tiling? void (*fillgradient)(struct _gfxdevice*dev, gfxline_t*line, gfxgradient_t*gradient, gfxgradienttype_t type, gfxmatrix_t*gradcoord2devcoord); //? void (*addfont)(struct _gfxdevice*dev, gfxfont_t*font); void (*drawchar)(struct _gfxdevice*dev, gfxfont_t*font, int glyph, gfxcolor_t*color, gfxmatrix_t*matrix); void (*drawlink)(struct _gfxdevice*dev, gfxline_t*line, const char*action, const char*text); void (*endpage)(struct _gfxdevice*dev); const char* (*geterror)(); gfxresult_t* (*finish)(struct _gfxdevice*dev); void* internal; } gfxdevice_t; #ifdef __cplusplus } #endif #endif //__gfxdevice_h__ swftools_0.9.2+git20130725.orig/lib/kdtree.h0000644000175000017500000000521112216332640017517 0ustar gawaingawain/* kdtree.h Implementation of 2d kd trees. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #ifndef __kdtree_h__ #define __kdtree_h__ #ifdef __cplusplus extern "C" { #endif #include /* 3 A | | 2 <---- ----> 0 | | V 1 */ typedef enum {KD_RIGHT=0, KD_DOWN=1, KD_LEFT=2, KD_UP=3} kdtype_t; typedef struct _kdbbox { int32_t xmin, ymin, xmax, ymax; } kdbbox_t; struct _kdbranch; struct _kdarea; typedef struct _kdbranch kdbranch_t; typedef struct _kdarea kdarea_t; struct _kdbranch { kdtype_t type; kdarea_t*side[2]; int32_t xy; }; struct _kdarea { kdarea_t*neighbors[4]; kdbbox_t bbox; kdbranch_t*split; void*data; }; typedef struct _kdtree { kdarea_t*root; } kdtree_t; /* usually a subset of the tree, e.g. caused by intersecting the tree with a halfplane */ typedef struct _kdarea_list { struct _kdarea_list*next; struct _kdarea_list*prev; kdarea_t*area; } kdarea_list_t; typedef struct _kdresult_list { void*data; struct _kdresult_list*next; } kdresult_list_t; kdtree_t* kdtree_new(); void kdarea_destroy(kdarea_t*area); void kdbranch_destroy(kdbranch_t*b); void kdtree_destroy(kdtree_t*tree); kdarea_t* kdtree_find(kdtree_t*tree, int x, int y); void kdtree_add_box(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2, void*data); kdresult_list_t*kdtree_find_in_box(kdtree_t*tree, int32_t x1, int32_t y1, int32_t x2, int32_t y2); void kdtree_print(kdtree_t*tree); kdarea_t*kdarea_neighbor(kdarea_t*area, int dir, int xy); #define kdarea_left_neighbor(area, y) (kdarea_neighbor((area), KD_LEFT, (y))) #define kdarea_right_neighbor(area, y) (kdarea_neighbor((area), KD_RIGHT, (y))) #define kdarea_top_neighbor(area, x) (kdarea_neighbor((area), KD_TOP, (x))) #define kdarea_bottom_neighbor(area, x) (kdarea_neighbor((area), KD_BOTTOM, (x))) #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/lib/utf8.c0000644000175000017500000000351312216332640017125 0ustar gawaingawain#include #include #include #include "utf8.h" static char utf8buf[16]; int writeUTF8(unsigned int charnum, char*dest) { dest[0] = 0; if(charnum < 0x80) { dest[0] = charnum; dest[1] = 0; return 1; } else if(charnum <0x800) { /* 0000 0080-0000 07FF 110xxxxx 10xxxxxx */ dest[0] = 0xc0 | (charnum >> 6); dest[1] = 0x80 | (charnum & 0x3f); dest[2] = 0; return 2; } else if(charnum < 0x10000) { /* 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx */ dest[0] = 0xe0 | (charnum >> 12); dest[1] = 0x80 |((charnum >> 6)&0x3f); dest[2] = 0x80 |((charnum )&0x3f); dest[3] = 0; return 3; } else if(charnum < 0x200000) { /* 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ dest[0] = 0xf0 | (charnum >> 18); dest[1] = 0x80 |((charnum >> 12)&0x3f); dest[2] = 0x80 |((charnum >> 6 )&0x3f); dest[3] = 0x80 |((charnum )&0x3f); dest[4] = 0; return 4; } else if(charnum < 0x4000000) { /* 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ dest[0] = 0xf8 | (charnum >> 24); dest[1] = 0x80 |((charnum >> 18)&0x3f); dest[2] = 0x80 |((charnum >> 12)&0x3f); dest[3] = 0x80 |((charnum >> 6 )&0x3f); dest[4] = 0x80 |((charnum )&0x3f); dest[5] = 0; return 5; } else if(charnum < 0x80000000) { /* 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx */ dest[0] = 0xfc | (charnum >> 30); dest[1] = 0x80 |((charnum >> 24)&0x3f); dest[2] = 0x80 |((charnum >> 18)&0x3f); dest[3] = 0x80 |((charnum >> 12)&0x3f); dest[4] = 0x80 |((charnum >> 6 )&0x3f); dest[5] = 0x80 |((charnum )&0x3f); dest[6] = 0; return 6; } else { fprintf(stderr, "Illegal character: 0x%08x\n", charnum); dest[0] = 0; return 0; } } char* getUTF8(unsigned int charnum) { memset(utf8buf, 0, sizeof(utf8buf)); writeUTF8(charnum, utf8buf); return utf8buf; } swftools_0.9.2+git20130725.orig/lib/gfximage.h0000644000175000017500000000077712216332640020044 0ustar gawaingawain#ifndef __gfximage_h__ #define __gfximage_h__ #include #include "gfxdevice.h" gfximage_t*gfximage_new(int width, int height); void gfximage_save_jpeg(gfximage_t*image, const char*filename, int quality); void gfximage_save_png(gfximage_t*image, const char*filename); void gfximage_save_png_quick(gfximage_t*image, const char*filename); gfximage_t* gfximage_rescale(gfximage_t*image, int newwidth, int newheight); bool gfximage_has_alpha(gfximage_t*image); void gfximage_free(gfximage_t*b); #endif swftools_0.9.2+git20130725.orig/lib/wav.h0000644000175000017500000000124012216332640017034 0ustar gawaingawain/* wav.h Header file for wav.c Part of the swftools package. Copyright (c) 2001 Matthias Kramm This file is distributed under the GPL, see file COPYING for details */ struct WAV { unsigned short tag; unsigned short channels; unsigned long sampsPerSec; unsigned long bytesPerSec; unsigned short align; unsigned short bps; unsigned char*data; unsigned int size; }; int wav_read(struct WAV*wav, const char* filename); int wav_write(struct WAV*wav, const char*filename); void wav_print(struct WAV*wav); int wav_convert2mono(struct WAV*src, struct WAV*dest, int rate); swftools_0.9.2+git20130725.orig/lib/xml.h0000644000175000017500000000251612216332640017046 0ustar gawaingawain/* xml.h Lightweight and fast xml parser. Part of the swftools package. Copyright (c) 2010 Matthias Kramm 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 */ #ifndef __xml_h__ #define __xml_h__ #include "bitio.h" typedef struct _xmlattribute { const char*name; const char*value; struct _xmlattribute*next; } xmlattribute_t; typedef struct _xmlconsumer { void (*start_tag)(struct _xmlconsumer*, char*name, xmlattribute_t*attributes); void (*data)(struct _xmlconsumer*, char*data, int len); void (*end_tag)(struct _xmlconsumer*, char*name); void*internal; } xmlconsumer_t; int xml_parse(reader_t*reader, xmlconsumer_t*out); #endif swftools_0.9.2+git20130725.orig/lib/base64.h0000644000175000017500000000155512216332640017334 0ustar gawaingawain/* base64.h Copyright (c) 2010 Matthias Kramm 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 */ #ifndef __base64_h__ #define __base64_h__ void write_base64(FILE*fi, const char* s); #endif swftools_0.9.2+git20130725.orig/lib/gfxsource.h0000644000175000017500000000430412216332640020250 0ustar gawaingawain/* pdfswf.h Header file for pdfswf.cc. Part of the swftools package. Copyright (c) 2001 Matthias Kramm 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 */ #ifndef __gfxsource_h__ #define __gfxsource_h__ #include "gfxdevice.h" #ifdef __cplusplus extern "C" { #endif struct _gfxdocument; struct _gfxpage; typedef struct _gfxsource { void (*setparameter)(struct _gfxsource*src, const char*name, const char*value); struct _gfxdocument* (*open)(struct _gfxsource*src, const char*filename); void (*destroy)(struct _gfxsource*src); void*internal; } gfxsource_t; typedef struct _gfxdocument { gfxsource_t*driver; int num_pages; void* (*get)(struct _gfxdocument*gfx, const char*name); void (*destroy)(struct _gfxdocument*gfx); void (*setparameter)(struct _gfxdocument*gfx, const char*name, const char*value); char* (*getinfo)(struct _gfxdocument*gfx, const char*key); struct _gfxpage* (*getpage)(struct _gfxdocument*gfx, int page); void (*prepare)(struct _gfxdocument*gfx, gfxdevice_t*device); void*internal; } gfxdocument_t; typedef struct _gfxpage { gfxdocument_t*parent; gfxcoord_t width; gfxcoord_t height; int nr; void (*render)(struct _gfxpage*gfx, gfxdevice_t*output); void (*rendersection)(struct _gfxpage*gfx, gfxdevice_t*output, gfxcoord_t x, gfxcoord_t y, gfxcoord_t x1, gfxcoord_t y1, gfxcoord_t x2, gfxcoord_t y2); void (*destroy)(struct _gfxpage*page); void*internal; } gfxpage_t; #ifdef __cplusplus } #endif #endif //__gfxsource_h__ swftools_0.9.2+git20130725.orig/lib/readers/0002755000175000017500000000000012216332657017530 5ustar gawaingawainswftools_0.9.2+git20130725.orig/lib/readers/Makefile.in0000644000175000017500000000110312216332640021556 0ustar gawaingawain# Generated automatically from Makefile.in by configure. top_builddir = ../.. srcdir = . top_srcdir = ../.. include ../../Makefile.common all: swf.$(O) image.$(O) libswf: ../libswf$(A) swf.$(O): swf.c swf.h $(C) swf.c -o swf.$(O) image.$(O): image.c image.h $(C) image.c -o image.$(O) swfrender: $(libswf_objects) ../../src/swfrender.c ../devices/render.$(O) $(L) ../../src/swfrender.c $(libswf_objects) ../librfxswf$(A) ../gfxtools.$(O) ../png.$(O) ../devices/render.$(O) -o swfrender $(LIBS) install: uninstall: clean: rm -f *.o *.obj *.lo *.a *.lib *.la gmon.out swftools_0.9.2+git20130725.orig/lib/readers/image.c0000644000175000017500000001067612216332640020756 0ustar gawaingawain#include #include #include #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../log.h" #include "../mem.h" #include "../jpeg.h" #include "../png.h" #include "image.h" typedef struct _image_page_internal { } image_page_internal_t; typedef struct _image_doc_internal { gfximage_t img; } image_doc_internal_t; void imagepage_destroy(gfxpage_t*image_page) { image_page_internal_t*i= (image_page_internal_t*)image_page->internal; free(image_page->internal);image_page->internal = 0; free(image_page);image_page=0; } void imagepage_render(gfxpage_t*page, gfxdevice_t*output) { image_page_internal_t*i = (image_page_internal_t*)page->internal; image_doc_internal_t*pi = (image_doc_internal_t*)page->parent->internal; gfxcxform_t cxform; memset(&cxform, 0, sizeof(cxform)); cxform.rr = 1; cxform.gg = 1; cxform.bb = 1; cxform.aa = 1; gfxmatrix_t m; memset(&m, 0, sizeof(m)); m.m00 = 1; m.m11 = 1; gfxline_t* rect = gfxline_makerectangle(0, 0, pi->img.width, pi->img.height); output->fillbitmap(output, rect, &pi->img, &m, &cxform); gfxline_free(rect); } void imagepage_rendersection(gfxpage_t*page, gfxdevice_t*output, gfxcoord_t x, gfxcoord_t y, gfxcoord_t _x1, gfxcoord_t _y1, gfxcoord_t _x2, gfxcoord_t _y2) { image_page_internal_t*i = (image_page_internal_t*)page->internal; image_doc_internal_t*pi = (image_doc_internal_t*)page->parent->internal; gfxcxform_t cxform; memset(&cxform, 0, sizeof(cxform)); cxform.rr = 1; cxform.gg = 1; cxform.bb = 1; cxform.aa = 1; gfxmatrix_t m; memset(&m, 0, sizeof(m)); m.m00 = 1; m.m11 = 1; m.tx = x; m.ty = y; gfxline_t* rect = gfxline_makerectangle(0, 0, pi->img.width, pi->img.height); gfxline_t* rect2 = gfxline_makerectangle(_x1, _y1, _x2, _y2); output->startclip(output, rect2); output->fillbitmap(output, rect, &pi->img, &m, &cxform); output->endclip(output); gfxline_free(rect); gfxline_free(rect2); } void image_doc_destroy(gfxdocument_t*gfx) { image_doc_internal_t*i= (image_doc_internal_t*)gfx->internal; free(i->img.data);i->img.data = 0; free(gfx->internal);gfx->internal=0; free(gfx);gfx=0; } void image_doc_setparameter(gfxdocument_t*gfx, const char*name, const char*value) { image_doc_internal_t*i= (image_doc_internal_t*)gfx->internal; } gfxpage_t* image_doc_getpage(gfxdocument_t*doc, int page) { image_doc_internal_t*di= (image_doc_internal_t*)doc->internal; if(page != 1) return 0; gfxpage_t* image_page = (gfxpage_t*)malloc(sizeof(gfxpage_t)); image_page_internal_t*pi= (image_page_internal_t*)malloc(sizeof(image_page_internal_t)); memset(pi, 0, sizeof(image_page_internal_t)); image_page->internal = pi; image_page->destroy = imagepage_destroy; image_page->render = imagepage_render; image_page->rendersection = imagepage_rendersection; image_page->width = di->img.width; image_page->height = di->img.height; image_page->parent = doc; image_page->nr = page; return image_page; } static void image_setparameter(gfxsource_t*src, const char*name, const char*value) { msg(" (gfxsource_image) setting parameter %s to \"%s\"", name, value); } static gfxdocument_t*image_open(gfxsource_t*src, const char*filename) { gfxdocument_t*image_doc = (gfxdocument_t*)malloc(sizeof(gfxdocument_t)); memset(image_doc, 0, sizeof(gfxdocument_t)); image_doc_internal_t*i= (image_doc_internal_t*)malloc(sizeof(image_doc_internal_t)); memset(i, 0, sizeof(image_doc_internal_t)); gfxcolor_t*data = 0; unsigned width = 0; unsigned height = 0; if(!png_load(filename, &width, &height, (unsigned char**)&data)) { if(!jpeg_load(filename, (unsigned char**)&data, &width, &height)) { msg(" Couldn't load image %s", filename); return 0; } } i->img.data = data; i->img.width = width; i->img.height = height; image_doc->num_pages = 1; image_doc->internal = i; image_doc->get = 0; image_doc->destroy = image_doc_destroy; image_doc->setparameter = image_doc_setparameter; image_doc->getpage = image_doc_getpage; return image_doc; } gfxsource_t*gfxsource_image_create() { gfxsource_t*src = (gfxsource_t*)malloc(sizeof(gfxsource_t)); memset(src, 0, sizeof(gfxsource_t)); src->setparameter = image_setparameter; src->open = image_open; return src; } swftools_0.9.2+git20130725.orig/lib/readers/swf.c0000644000175000017500000004640012216332640020465 0ustar gawaingawain#include #include #include "../gfxdevice.h" #include "../gfxsource.h" #include "../gfxtools.h" #include "../log.h" #include "../mem.h" #include "../png.h" #include "../rfxswf.h" #include "swf.h" typedef struct _map16_t { void** ids; } map16_t; typedef struct _swf_page_internal { int frame; } swf_page_internal_t; typedef struct _swf_doc_internal { map16_t*id2char; SWF swf; int width,height; MATRIX m; } swf_doc_internal_t; #define TYPE_SHAPE 1 #define TYPE_BITMAP 2 #define TYPE_SPRITE 3 #define TYPE_FONT 4 #define TYPE_TEXT 5 typedef struct _character { U16 id; TAG*tag; char type; void*data; } character_t; typedef struct _placement { SWFPLACEOBJECT po; int age; int startFrame; } placement_t; typedef struct _sprite { int frameCount; } sprite_t; typedef struct _render { map16_t*id2char; gfxdevice_t*device; MATRIX m; int clips; int*clips_waiting; placement_t*current_placement; } render_t; //---- object/depth handling ---- map16_t* map16_new() { map16_t*map = rfx_calloc(sizeof(map16_t)); /* TODO: replace this by a more sophisticated data structure */ map->ids = (void**)rfx_calloc(sizeof(character_t)*65536); return map; } character_t*map16_get_id(map16_t*map, int id) { if(id<0 || id>=65536) return 0; return map->ids[id]; } void map16_free(map16_t*map) { free(map->ids); } void map16_add_id(map16_t*map, int nr, void*id) { if(map->ids[nr]) fprintf(stderr, "Warning: ID %d defined more than once\n", nr); map->ids[nr] = id; } void map16_remove_id(map16_t*map, int nr) { map->ids[nr] = 0; } void map16_enumerate(map16_t*map, void (*f)(void*self, int id, void*data), void*self) { int t; for(t=0;t<65536;t++) { if(map->ids[t]) { f(self, t, map->ids[t]); } } } //---- placements ---- placement_t* placement_unit() { placement_t*placement = rfx_calloc(sizeof(placement_t)); swf_GetPlaceObject(0, &placement->po); return placement; } placement_t* placement_join(placement_t*p1, placement_t*p2) { placement_t*placement = rfx_alloc(sizeof(placement_t)); *placement = *p1; swf_MatrixJoin(&placement->po.matrix, &p1->po.matrix, &p2->po.matrix); return placement; } static void placement_free(placement_t*p) { swf_PlaceObjectFree(&p->po); free(p); } //---- conversion stuff ---- static void convertMatrix(MATRIX*from, gfxmatrix_t*to) { to->m00 = from->sx / 65536.0; to->m10 = from->r1 / 65536.0; to->m01 = from->r0 / 65536.0; to->m11 = from->sy / 65536.0; to->tx = from->tx/20.0; to->ty = from->ty/20.0; } static void convertCXForm(CXFORM*from, gfxcxform_t*to) { memset(to, 0, sizeof(gfxcxform_t)); to->aa = from->a0 / 256.0; to->rr = from->r0 / 256.0; to->gg = from->g0 / 256.0; to->bb = from->b0 / 256.0; to->ta = from->a1; to->tr = from->r1; to->tg = from->g1; to->tb = from->b1; } static gfxgradient_t* convertGradient(GRADIENT*from) { gfxgradient_t*g = rfx_calloc(from->num * sizeof(gfxgradient_t)); int t; for(t=0;tnum;t++) { g[t].pos = from->ratios[t] / 255.0; g[t].color = *(gfxcolor_t*)&from->rgba[t]; if(tnum-1) g[t].next = &g[t+1]; else g[t].next = 0; } return g; } gfxline_t* swfline_to_gfxline(SHAPELINE*line, int linestyle, int fillstyle0) { gfxdrawer_t d; SCOORD x=0,y=0,xx=0,yy=0; gfxline_t*l; gfxdrawer_target_gfxline(&d); if(line && line->type != moveTo) { fprintf(stderr, "Warning: Shape doesn't start with a moveTo\n"); } xx = line?line->x+1:0; while(line) { if(line->fillstyle0 == fillstyle0 || line->fillstyle1 == fillstyle0 || line->linestyle == linestyle) { if(line->type == lineTo) { if(xx!=x || yy!=y) d.moveTo(&d, x/20.0,y/20.0); d.lineTo(&d, line->x/20.0,line->y/20.0); xx = line->x; yy = line->y; } else if(line->type == splineTo) { if(xx!=x || yy!=y) d.moveTo(&d, x/20.0,y/20.0); d.splineTo(&d, line->sx/20.0, line->sy/20.0, line->x/20.0,line->y/20.0); xx = line->x; yy = line->y; } } x = line->x; y = line->y; line = line->next; } l = d.result(&d); return l; } //---- bitmap handling ---- static gfximage_t* gfximage_new(RGBA*data, int width, int height) { gfximage_t* b = (gfximage_t*)rfx_calloc(sizeof(gfximage_t)); b->data = (gfxcolor_t*)data; b->width = width; b->height = height; return b; } static gfximage_t* findimage(render_t*r, U16 id) { character_t*c = (character_t*)map16_get_id(r->id2char, id); assert(c && c->type == TYPE_BITMAP); gfximage_t*img = (gfximage_t*)c->data; /*char filename[80]; sprintf(filename, "bitmap%d.png", id); png_write(filename, (unsigned char*)img->data, img->width, img->height); printf("saving bitmap %d to %s\n", id, filename);*/ return c->data; } //---- shape handling ---- static void renderFilled(render_t*r, gfxline_t*line, FILLSTYLE*f, CXFORM*cx, MATRIX*po_m) { if(f->type == FILL_SOLID) { gfxcolor_t c = *(gfxcolor_t*)&f->color; r->device->fill(r->device, line, &c); } else if(f->type == FILL_TILED || f->type == FILL_CLIPPED) { gfximage_t* img = findimage(r, f->id_bitmap); gfxmatrix_t m; gfxcxform_t gfxcx; convertCXForm(cx, &gfxcx); MATRIX m2; swf_MatrixJoin(&m2, po_m, &f->m); convertMatrix(&m2, &m); m.m00/=20.0; m.m10/=20.0; m.m01/=20.0; m.m11/=20.0; /* TODO: handle clipped */ r->device->fillbitmap(r->device, line, img, &m, &gfxcx); } else if(f->type == FILL_LINEAR || f->type == FILL_RADIAL) { gfxmatrix_t m; gfxgradient_t* g; MATRIX* m2 = &f->m; //swf_MatrixJoin(&m2, po_m, &f->m); double z = f->type==FILL_RADIAL?4:4; m.m00 = m2->sx/z/20.0; m.m10 = m2->r1/z/20.0; m.m01 = m2->r0/z/20.0; m.m11 = m2->sy/z/20.0; m.tx = m2->tx/20.0; m.ty = m2->ty/20.0; g = convertGradient(&f->gradient); r->device->fillgradient(r->device, line, g, f->type == FILL_LINEAR ? gfxgradient_linear : gfxgradient_radial, &m); free(g); } } //---- font handling ---- typedef struct { int numchars; gfxline_t**glyphs; } font_t; typedef struct textcallbackblock { render_t*r; MATRIX m; } textcallbackblock_t; static void textcallback(void*self, int*chars, int*xpos, int nr, int fontid, int fontsize, int xstart, int ystart, RGBA* color) { textcallbackblock_t * info = (textcallbackblock_t*)self; font_t*font = 0; int t; character_t*cfont = map16_get_id(info->r->id2char, fontid); if(!cfont) { fprintf(stderr, "Font %d unknown\n", fontid); return; } if(cfont->type != TYPE_FONT) { fprintf(stderr, "ID %d is not a font\n", fontid); return; } font = cfont->data; for(t=0;tm; SPOINT p; p.x = x; p.y = y; p = swf_TurnPoint(p, &m); m.sx = (m.sx * fontsize) / 1024; m.sy = (m.sy * fontsize) / 1024; m.r0 = (m.r0 * fontsize) / 1024; m.r1 = (m.r1 * fontsize) / 1024; m.tx = p.x; m.ty = p.y; gfxmatrix_t gm; convertMatrix(&m, &gm); if(chars[t]<0 || chars[t]>= font->numchars) { fprintf(stderr, "Character out of range: %d\n", chars[t]); } else { gfxline_t*line = gfxline_clone(font->glyphs[chars[t]]); gfxline_transform(line, &gm); FILLSTYLE f; f.type = FILL_SOLID; f.color = *color; renderFilled(info->r, line, &f, 0, 0); gfxline_free(line); } } } //---- tag handling ---- static map16_t* extractDefinitions(SWF*swf) { map16_t*map = map16_new(); TAG*tag = swf->firstTag; while(tag) { int id = 0; if(swf_isDefiningTag(tag)) { id = swf_GetDefineID(tag); } if(tag->id == ST_DEFINESPRITE) { character_t*c = rfx_calloc(sizeof(character_t)); sprite_t*s = rfx_calloc(sizeof(sprite_t)); swf_SetTagPos(tag, 0); swf_GetU16(tag); //id s->frameCount = swf_GetU16(tag); //frameno c->tag = tag; c->type = TYPE_SPRITE; c->data = s; map16_add_id(map, id, c); } else if(tag->id == ST_DEFINESHAPE || tag->id == ST_DEFINESHAPE2 || tag->id == ST_DEFINESHAPE3) { character_t*c = rfx_calloc(sizeof(character_t)); c->tag = tag; c->type = TYPE_SHAPE; map16_add_id(map, id, c); } else if(tag->id == ST_DEFINEFONT || tag->id == ST_DEFINEFONT2 || tag->id == ST_DEFINEFONT3) { character_t*c = rfx_calloc(sizeof(character_t)); SWFFONT*swffont = 0; font_t*font = (font_t*)rfx_calloc(sizeof(font_t)); swf_FontExtract(swf, id, &swffont); font->numchars = swffont->numchars; font->glyphs = (gfxline_t**)rfx_calloc(sizeof(gfxline_t*)*font->numchars); int t; RGBA color_white = {255,255,255,255}; for(t=0;tnumchars;t++) { if(!swffont->glyph[t].shape->fillstyle.n) { swf_ShapeAddSolidFillStyle(swffont->glyph[t].shape, &color_white); } SHAPE2*s2 = swf_ShapeToShape2(swffont->glyph[t].shape); font->glyphs[t] = swfline_to_gfxline(s2->lines, 0, 1); if(tag->id==ST_DEFINEFONT3) { gfxmatrix_t m = {1/20.0,0,0, 0,1/20.0,0}; gfxline_transform(font->glyphs[t], &m); } swf_Shape2Free(s2); } swf_FontFree(swffont); c->tag = tag; c->type = TYPE_FONT; c->data = font; map16_add_id(map, id, c); } else if(tag->id == ST_DEFINETEXT || tag->id == ST_DEFINETEXT2) { character_t*c = rfx_calloc(sizeof(character_t)); c->tag = tag; c->type = TYPE_TEXT; c->data = 0; map16_add_id(map, id, c); } else if(tag->id == ST_DEFINEBITSJPEG || tag->id == ST_DEFINEBITSJPEG2 || tag->id == ST_DEFINEBITSJPEG3 || tag->id == ST_DEFINEBITSLOSSLESS || tag->id == ST_DEFINEBITSLOSSLESS2) { character_t*c = rfx_calloc(sizeof(character_t)); int width, height; void*data = swf_ExtractImage(tag, &width, &height); gfximage_t*b = gfximage_new(data, width, height); c->tag = tag; c->type = TYPE_BITMAP; c->data = b; map16_add_id(map, id, c); } tag = tag->next; } return map; } void swf_FreeTaglist(TAG*tag) { while(tag) { TAG * tnew = tag->next; if (tag->data) rfx_free(tag->data); rfx_free(tag); tag = tnew; } } static void increaseAge(void*self, int id, void*data) { placement_t*p = (placement_t*)data; p->age++; } static map16_t* extractFrame(TAG*startTag, int frame_to_extract) { map16_t*depthmap = map16_new(); TAG*tag = startTag; int frame = 1; int insprite = 0; for(;tag;tag = tag->next) { if(tag->id == ST_DEFINESPRITE) { while(tag->id != ST_END) tag = tag->next; continue; } if(tag->id == ST_PLACEOBJECT || tag->id == ST_PLACEOBJECT2) { placement_t* p = rfx_calloc(sizeof(placement_t)); p->age = 1; p->startFrame = frame; swf_GetPlaceObject(tag, &p->po); if(p->po.move) { placement_t*old = (placement_t*)map16_get_id(depthmap, p->po.depth); if(!(p->po.flags&PF_CHAR)) p->po.id = old->po.id; if(!(p->po.flags&PF_MATRIX)) p->po.matrix = old->po.matrix; if(!(p->po.flags&PF_CXFORM)) p->po.cxform = old->po.cxform; if(!(p->po.flags&PF_RATIO)) p->po.ratio = old->po.ratio; map16_remove_id(depthmap, old->po.depth); placement_free(old); } map16_add_id(depthmap, p->po.depth, p); } if(tag->id == ST_REMOVEOBJECT || tag->id == ST_REMOVEOBJECT2) { U16 depth = swf_GetDepth(tag); map16_remove_id(depthmap, depth); } if(tag->id == ST_SHOWFRAME || tag->id == ST_END || !tag->next) { if(frame == frame_to_extract) { return depthmap; } if(tag->id == ST_SHOWFRAME) { frame++; map16_enumerate(depthmap, increaseAge, 0); } } if(tag->id == ST_END) break; } return depthmap; } // ---- rendering ---- void swf_ShapeApplyMatrix(SHAPE2*shape, MATRIX*m) { } RGBA swf_ColorTransform(RGBA*color, CXFORM*cx) { RGBA dest; dest.r = (cx->r0*color->r + cx->r1*256) >> 8; dest.g = (cx->g0*color->g + cx->g1*256) >> 8; dest.b = (cx->b0*color->b + cx->b1*256) >> 8; dest.a = (cx->a0*color->a + cx->a1*256) >> 8; return dest; } void renderOutline(render_t*r, gfxline_t*line, LINESTYLE*l, CXFORM*cx) { RGBA c = swf_ColorTransform(&l->color, cx); gfxcoord_t width = l->width/20.0; r->device->stroke(r->device, line, width, (gfxcolor_t*)&c, gfx_capRound, gfx_joinRound, 0.0); } void swf_ApplyMatrixToShape(SHAPE2*shape, MATRIX*m) { SHAPELINE*line = shape->lines; while(line) { SPOINT p; p.x = line->x; p.y = line->y; p = swf_TurnPoint(p, m); line->x = p.x; line->y = p.y; p.x = line->sx; p.y = line->sy; p = swf_TurnPoint(p, m); line->sx = p.x; line->sy = p.y; line = line->next; } } static void renderCharacter(render_t*r, placement_t*p, character_t*c) { if(c->type == TYPE_SHAPE) { SHAPE2 shape; swf_ParseDefineShape(c->tag, &shape); MATRIX m,m2; swf_MatrixJoin(&m2, &r->m, &r->current_placement->po.matrix); swf_MatrixJoin(&m, &m2, &p->po.matrix); swf_ApplyMatrixToShape(&shape, &m); SHAPELINE*line = shape.lines; int t; for(t=1;t<=shape.numlinestyles;t++) { gfxline_t*line = swfline_to_gfxline(shape.lines, t, -1); if(line) renderOutline(r, line, &shape.linestyles[t-1], &p->po.cxform); gfxline_free(line); } for(t=1;t<=shape.numfillstyles;t++) { gfxline_t*line; line = swfline_to_gfxline(shape.lines, -1, t); if(line) { if(!p->po.clipdepth) { renderFilled(r, line, &shape.fillstyles[t-1], &p->po.cxform, &p->po.matrix); } else { r->device->startclip(r->device, line); r->clips_waiting[p->po.clipdepth]++; } } gfxline_free(line); /*line = swfline_to_gfxline(shape.lines, -1, -1, t); if(line) renderFilled(r, line, &shape.fillstyles[t-1], &p->po.cxform); gfxline_free(line);*/ } } else if(c->type == TYPE_TEXT) { TAG* tag = c->tag; textcallbackblock_t info; MATRIX mt,mt2; swf_SetTagPos(tag, 0); swf_GetU16(tag); swf_GetRect(tag,0); swf_GetMatrix(tag,&mt); swf_MatrixJoin(&mt2, &r->m, &mt); swf_MatrixJoin(&info.m, &mt2, &p->po.matrix); info.r = r; swf_ParseDefineText(tag, textcallback, &info); } } // ---- main ---- static void placeObject(void*self, int id, void*data) { render_t*r = (render_t*)self; placement_t*p = (placement_t*)data; character_t*c = map16_get_id(r->id2char, p->po.id); if(!c) { fprintf(stderr, "Error: ID %d unknown\n", p->po.id); return; } if(c->type == TYPE_SPRITE) { placement_t*oldp = r->current_placement; r->current_placement = placement_join(oldp, p); int*old_clips_waiting = r->clips_waiting; r->clips_waiting = rfx_calloc(sizeof(r->clips_waiting[0])*65536); sprite_t* s = (sprite_t*)c->data; TAG*spritetags = c->tag->next; map16_t* depths = extractFrame(spritetags, s->frameCount>0? p->age % s->frameCount : 0); map16_enumerate(depths, placeObject, r); int t; for(t=0;t<65536;t++) { int i; for(i=0; iclips_waiting[t]; i++) { r->device->endclip(r->device); } } free(r->clips_waiting); r->clips_waiting = old_clips_waiting; placement_free(r->current_placement); r->current_placement = oldp; } else { renderCharacter(r, p, c); } } void swfpage_destroy(gfxpage_t*swf_page) { swf_page_internal_t*i= (swf_page_internal_t*)swf_page->internal; free(swf_page->internal);swf_page->internal = 0; free(swf_page);swf_page=0; } void swfpage_render(gfxpage_t*page, gfxdevice_t*output) { swf_page_internal_t*i = (swf_page_internal_t*)page->internal; swf_doc_internal_t*pi = (swf_doc_internal_t*)page->parent->internal; map16_t* depths = extractFrame(pi->swf.firstTag, i->frame); render_t r; r.id2char = pi->id2char; r.clips = 0; r.device = output; r.m = pi->m; r.clips_waiting = malloc(sizeof(r.clips_waiting[0])*65536); r.current_placement = placement_unit(); memset(r.clips_waiting, 0, sizeof(r.clips_waiting[0])*65536); int t; for(t=0;t<65536;t++) { if(depths->ids[t]) { placeObject(&r, t, depths->ids[t]); } int i; for(i=0; iendclip(output); } } free(r.clips_waiting); } void swfpage_rendersection(gfxpage_t*page, gfxdevice_t*output, gfxcoord_t x, gfxcoord_t y, gfxcoord_t _x1, gfxcoord_t _y1, gfxcoord_t _x2, gfxcoord_t _y2) { swf_doc_internal_t*pi = (swf_doc_internal_t*)page->parent->internal; /* FIXME */ swfpage_render(page,output); } void swf_doc_destroy(gfxdocument_t*gfx) { swf_doc_internal_t*i= (swf_doc_internal_t*)gfx->internal; swf_FreeTags(&i->swf); free(gfx->internal);gfx->internal=0; free(gfx);gfx=0; } void swf_doc_setparameter(gfxdocument_t*gfx, const char*name, const char*value) { swf_doc_internal_t*i= (swf_doc_internal_t*)gfx->internal; } gfxpage_t* swf_doc_getpage(gfxdocument_t*doc, int page) { swf_doc_internal_t*di= (swf_doc_internal_t*)doc->internal; if(page < 1 || page > doc->num_pages) return 0; gfxpage_t* swf_page = (gfxpage_t*)malloc(sizeof(gfxpage_t)); swf_page_internal_t*pi= (swf_page_internal_t*)malloc(sizeof(swf_page_internal_t)); memset(pi, 0, sizeof(swf_page_internal_t)); pi->frame = page; swf_page->internal = pi; swf_page->destroy = swfpage_destroy; swf_page->render = swfpage_render; swf_page->rendersection = swfpage_rendersection; swf_page->width = di->width; swf_page->height = di->height; swf_page->parent = doc; swf_page->nr = page; return swf_page; } void swf_setparameter(gfxsource_t*src, const char*name, const char*value) { msg(" setting parameter %s to \"%s\"", name, value); } gfxdocument_t*swf_open(gfxsource_t*src, const char*filename) { gfxdocument_t*swf_doc = (gfxdocument_t*)malloc(sizeof(gfxdocument_t)); memset(swf_doc, 0, sizeof(gfxdocument_t)); swf_doc_internal_t*i= (swf_doc_internal_t*)malloc(sizeof(swf_doc_internal_t)); memset(i, 0, sizeof(swf_doc_internal_t)); TAG*tag = 0; int f; int frame; render_t r; gfxdevice_t d; if(!filename) { return 0; } f = open(filename,O_RDONLY|O_BINARY); if (f<0) { perror("Couldn't open file: "); return 0; } if FAILED(swf_ReadSWF(f,&i->swf)) { fprintf(stderr, "%s is not a valid SWF file or contains errors.\n",filename); close(f); return 0; } swf_UnFoldAll(&i->swf); i->id2char = extractDefinitions(&i->swf); i->width = (i->swf.movieSize.xmax - i->swf.movieSize.xmin) / 20; i->height = (i->swf.movieSize.ymax - i->swf.movieSize.ymin) / 20; swf_GetMatrix(0, &i->m); i->m.tx = -i->swf.movieSize.xmin; i->m.ty = -i->swf.movieSize.ymin; swf_doc->num_pages = i->swf.frameCount; swf_doc->internal = i; swf_doc->get = 0; swf_doc->destroy = swf_doc_destroy; swf_doc->setparameter = swf_doc_setparameter; swf_doc->getpage = swf_doc_getpage; return swf_doc; } static void swf_destroy(gfxsource_t*src) { memset(src, 0, sizeof(*src)); free(src); } gfxsource_t*gfxsource_swf_create() { gfxsource_t*src = (gfxsource_t*)malloc(sizeof(gfxsource_t)); memset(src, 0, sizeof(gfxsource_t)); src->setparameter = swf_setparameter; src->open = swf_open; src->destroy = swf_destroy; return src; } swftools_0.9.2+git20130725.orig/lib/readers/swf.h0000644000175000017500000000200312216332640020461 0ustar gawaingawain/* swf.h Part of the swftools package. Copyright (c) 2008 Matthias Kramm 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 */ #ifndef __swfsource_h__ #define __swfsource_h__ #include "../gfxsource.h" #ifdef __cplusplus extern "C" { #endif gfxsource_t*gfxsource_swf_create(); #ifdef __cplusplus } #endif #endif //__pdfsource_h__ swftools_0.9.2+git20130725.orig/lib/readers/image.h0000644000175000017500000000032612216332640020752 0ustar gawaingawain#ifndef __image_h__ #define __image_h__ #include "../gfxdevice.h" #include "../gfxsource.h" #ifdef __cplusplus extern "C" { #endif gfxsource_t*gfxsource_image_create(); #ifdef __cplusplus } #endif #endif swftools_0.9.2+git20130725.orig/missing0000755000175000017500000001452012216332640016724 0ustar gawaingawain#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.in; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`$configure_ac'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`$configure_ac'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`$configure_ac'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 swftools_0.9.2+git20130725.orig/Makefile.common.in0000644000175000017500000000461012216332640020660 0ustar gawaingawain# --------------------- init -------------------------- # shells, skripts, tools etc. SHELL = @SHELL@ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @SET_MAKE@ # compiling DEFS=@DEFS@ INCLUDES= DEP=@CC@ -MM $(DEFS) $(INCLUDES) @CPPFLAGS@ C=@CC@ -c $(DEFS) $(INCLUDES) @CPPFLAGS@ @CFLAGS@ CC=@CXX@ -c $(DEFS) $(INCLUDES) @CPPFLAGS@ @CXXFLAGS@ L=@CC@ $(DEFS) LL=@CXX@ $(DEFS) AR=@AR@ LIBTOOL=@LIBTOOL@ SC=$(LIBTOOL) @CC@ -c $(DEFS) $(INCLUDES) @CPPFLAGS@ @CFLAGS@ SCC=$(LIBTOOL) @CXX@ -c $(DEFS) $(INCLUDES) @CPPFLAGS@ @CXXFLAGS@ SL=$(LIBTOOL) --mode=link @CC@ $(DEFS) -rpath $(libdir) SLL=$(LIBTOOL) --mode=link @CXX@ $(DEFS) -rpath $(libdir) LIBS= @LDFLAGS@ @LIBS@ CXXLIBS=@CXXLIBS@ transform = @program_transform_name@ CPPFLAGS=@CPPFLAGS@ PYTHON_LIB=@PYTHON_LIB@ PYTHON_INCLUDES=@PYTHON_INCLUDES@ PYTHON_INSTALL_PATH=@PYTHON_INSTALL_PATH@ PYTHON_EXECUTABLE=@PYTHON_EXECUTABLE@ RUBY_CPPFLAGS=@RUBY_CPPFLAGS@ RUBY_LDFLAGS=@RUBY_LDFLAGS@ RUBY_LIBS=@RUBY_LIBS@ RUBY_INSTALLDIR=@RUBY_INSTALLDIR@ # libtool stuff OBJEXT=@OBJEXT@ EXEEXT=@EXEEXT@ AREXT=@AREXT@ SHARED=@SHARED@ E=$(EXEEXT) O=$(OBJEXT) A=$(AREXT) SLEXT=@SLEXT@ ECHO=@ECHO@ RANLIB=@RANLIB@ STRIP=@STRIP@ # installing LN_S = @LN_S@ PACKAGE = @PACKAGE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ UNINSTALL_DATA = rm -f INSTALL_PROGRAM = @INSTALL_PROGRAM@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ datadir = @datadir@ libdir = @libdir@ includedir = @includedir@ sysconfdir = @sysconfdir@ pkgdatadir = $(datadir)/@PACKAGE@ # man pages mandir = @mandir@ man1dir = $(mandir)/man1 # ------------------- defines ------------------------- INSTALL_BIN = echo installing $$file to $(bindir);$(INSTALL_PROGRAM) $$file $(bindir)/`echo $$file|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'` UNINSTALL_BIN = ff=`echo $$file|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`;echo rm -f $(bindir)/$$ff;rm -f $(bindir)/$$ff INSTALL_MAN1 = ff=$(srcdir)/$$file.1; inst=`echo $$file | sed '$(transform)'`.1; echo "$(INSTALL_DATA) $$ff $(man1dir)/$$inst"; $(INSTALL_DATA) $$ff $(man1dir)/$$inst UNINSTALL_MAN1 = ff=$(srcdir)/$$file.1; inst=`echo $$file | sed '$(transform)'`.1; echo "rm -f $(man1dir)/$$inst"; rm -f $(man1dir)/$$inst #%.o: %.c # $(C) $< -o $@ #%: %.o # $(L) $< -o $@ ../lib/librfxswf.a $(LIBS) #%.o: %.cc # $(CC) -DDATADIR=\"$(pkgdatadir)\" -I../lib -Ittf2pt1 -Ixpdf $< -o $@ # GNU Makefile stuff .SUFFIXES: swftools_0.9.2+git20130725.orig/ltmain.sh0000644000175000017500000061001712216332640017150 0ustar gawaingawain# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.26 TIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)" # Be Bourne compatible (taken from Autoconf:_AS_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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done # user sometimes does CC=-gcc so we need to match that to 'gcc' trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` # and sometimes libtool has CC=-gcc but user does CC=gcc extendcc=${host}-${CC} # and sometimes libtool has CC=-gcc but user has CC=-gcc # (Gentoo-specific hack because we always export $CHOST) mungedcc=${CHOST-${host}}-${trimedcc} case "$@ " in "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) tagname=CC break ;; "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) extracted_serial=`expr $extracted_serial + 1` 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" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) echo "\ $PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP Copyright (C) 2008 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." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.[fF][09]?) xform=[fF][09]. ;; *.for) xform=for ;; *.java) xform=java ;; *.obj) xform=obj ;; *.sx) xform=sx ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$srcfile" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static | -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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$deplibdir/$depdepl" ; then depdepl="$deplibdir/$depdepl" elif test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" else # Can't find it, oh well... depdepl= fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) case " $deplibs" in *\ -l* | *\ -L*) $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; esac if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` 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 major=`expr $current - $age` else major=`expr $current - $age + 1` fi case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then case $archive_cmds in *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; esac else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) case " $deplibs" in *\ -l* | *\ -L*) $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; esac if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec 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 "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` else compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` fi ;; * ) compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible (taken from Autoconf:_AS_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 variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. # Make sure env LD_LIBRARY_PATH does not mess us up if test -n \"\${LD_LIBRARY_PATH+set}\"; then export LD_LIBRARY_PATH=\$progdir:\$LD_LIBRARY_PATH fi " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \$*\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` else relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables 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 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of 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] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: