diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/app/Makefile.tpl wfdb-10.4.2/app/Makefile.tpl --- wfdb-10.4.1/app/Makefile.tpl 2005-09-09 11:17:04.000000000 -0400 +++ wfdb-10.4.2/app/Makefile.tpl 2006-05-04 14:30:53.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 23 May 2000 -# Last revised: 9 September 2005 +# Last revised: 4 May 2006 # This section of the Makefile should not need to be changed. CFILES = ann2rr.c bxb.c calsig.c ecgeval.c epicmp.c fir.c ihr.c mfilt.c \ @@ -30,6 +30,9 @@ # `make' or `make install': build and install applications, clean up install: all $(BINDIR) $(PSPDIR) scripts + rm -f pschart psfd + $(MAKE) pschart psfd # be sure compiled-in paths are up-to-date + $(STRIP) pschart psfd $(SETXPERMISSIONS) $(XFILES) ../install.sh $(BINDIR) $(XFILES) cp $(PSFILES) $(PSPDIR) @@ -73,10 +76,10 @@ $(CC) $(CFLAGS) nst.c -o $@ $(LDFLAGS) -lm plotstm: plotstm.c $(CC) $(CFLAGS) plotstm.c -o $@ -pschart: pschart.c +pschart: $(CC) $(CFLAGS) -DPROLOG=\"$(PSPDIR)/pschart.pro\" pschart.c -o $@ \ $(LDFLAGS) -psfd: psfd.c +psfd: $(CC) $(CFLAGS) -DPROLOG=\"$(PSPDIR)/psfd.pro\" psfd.c -o $@ $(LDFLAGS) sigamp: sigamp.c $(CC) $(CFLAGS) sigamp.c -o $@ $(LDFLAGS) -lm diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/app/rdann.c wfdb-10.4.2/app/rdann.c --- wfdb-10.4.1/app/rdann.c 2004-11-28 12:52:09.000000000 -0500 +++ wfdb-10.4.2/app/rdann.c 2006-04-26 09:57:38.000000000 -0400 @@ -1,9 +1,9 @@ /* file rdann.c T. Baker and G. Moody 27 July 1981 - Last revised: 28 November 2004 + Last revised: 26 April 2006 ------------------------------------------------------------------------------- rdann: Print an annotation file in ASCII form -Copyright (C) 1981-2004 George B. Moody +Copyright (C) 1981-2006 George B. Moody This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -28,6 +28,12 @@ */ #include +#ifndef BSD +#include +#else +#include +#define strchr index +#endif #ifndef __STDC__ extern void exit(); #endif @@ -223,12 +229,12 @@ (void)printf("Elapsed time Sample # "); else if (xflag) (void)printf(" Seconds Minutes Hours "); - else { - if (*(mstimstr((WFDB_Time)(-1))) == '[') + else if (strchr(mstimstr((WFDB_Time)(-1)), '/')) (void)printf(" Time Date Sample # "); - else + else if (*(mstimstr((WFDB_Time)(-1))) == '[') + (void)printf(" Time Sample # "); + else (void)printf(" Time Sample # "); - } (void)printf("Type Sub Chan Num\tAux\n"); } diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/conf/cygwin-slib.def wfdb-10.4.2/conf/cygwin-slib.def --- wfdb-10.4.1/conf/cygwin-slib.def 2005-08-08 07:23:46.000000000 -0400 +++ wfdb-10.4.2/conf/cygwin-slib.def 2006-04-07 10:04:16.000000000 -0400 @@ -137,6 +137,7 @@ ( cp -p /usr/bin/cygwin1.dll $(BINDIR); \ cp -p /usr/bin/cygz.dll $(BINDIR) ) cp $(WFDBLIB_DLLNAME) $(BINDIR) + cd $(BINDIR); $(SETLPERMISSIONS) *.dll lib-post-uninstall: rm -f $(LIBDIR)/$(WFDBLIB_BASENAME) diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/conf/version.def wfdb-10.4.2/conf/version.def --- wfdb-10.4.1/conf/version.def 2006-04-06 21:30:42.000000000 -0400 +++ wfdb-10.4.2/conf/version.def 2006-05-04 00:30:32.000000000 -0400 @@ -1,10 +1,10 @@ # file: version.def G. Moody 24 May 2000 -# Last revised: 6 April 2006 +# Last revised: 4 May 2006 # Each release of the WFDB Software Package is identified by a three-part # version number, defined here: MAJOR = 10 MINOR = 4 -RELEASE = 1 +RELEASE = 2 VERSION = $(MAJOR).$(MINOR).$(RELEASE) # RPMRELEASE can be incremented if changes are made between official diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/Makefile.tpl wfdb-10.4.2/doc/Makefile.tpl --- wfdb-10.4.1/doc/Makefile.tpl 2006-03-02 12:46:37.000000000 -0500 +++ wfdb-10.4.2/doc/Makefile.tpl 2006-05-04 17:42:37.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 24 May 2000 -# Last revised: 2 March 2006 +# Last revised: 4 May 2006 # Change the settings below as appropriate for your setup. # Set COLORS to 'color' if you have a color printer and would like to print @@ -208,4 +208,4 @@ cd wag-src; make clean cd wpg-src; make clean cd wug-src; make clean - rm -f index.htm index.html wag/* wpg/*.htm* wpg/*.pdf wug/*.ps wpg/info/w* wug/* *~ + rm -f index.htm index.html wag/* wpg/*.htm* wpg/*.pdf wpg/*.ps wpg/info/w* wug/* *~ diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wag-src/edf2mit.1 wfdb-10.4.2/doc/wag-src/edf2mit.1 --- wfdb-10.4.1/doc/wag-src/edf2mit.1 2005-06-13 00:58:45.000000000 -0400 +++ wfdb-10.4.2/doc/wag-src/edf2mit.1 2006-05-04 11:36:08.000000000 -0400 @@ -1,6 +1,6 @@ .TH EDF2MIT 1 "4 December 2002" "WFDB 10.3.1" "WFDB Applications Guide" .SH NAME -edf2mit, mit2edf \- convert between EDF and MIT formats +edf2mit, mit2edf \- convert between EDF and WFDB-compatible formats .SH SYNOPSIS \fBedf2mit -i\fR \fIedffile\fR [ \fIoptions\fR ... ] .br @@ -8,10 +8,10 @@ .SH DESCRIPTION .PP These programs convert EDF (European Data Format) files into -MIT-format files (as used in PhysioBank) and vice versa. European +WFDB-compatible files (as used in PhysioBank) and vice versa. European Data Format was originally designed for storage of polysomnograms. .PP -\fBedf2mit\fR reads the specified \fIedffile\fR and creates MIT-format +\fBedf2mit\fR reads the specified \fIedffile\fR and creates WFDB-compatible signal and header files containing the same data. Options for \fBedf2mit\fR include: .TP @@ -34,7 +34,7 @@ \fB-v\fR Verbose mode (print debugging output). .PP -\fBmit2edf\fR reads the specified MIT-format \fIrecord\fR (header and signal +\fBmit2edf\fR reads the specified WFDB-format \fIrecord\fR (header and signal files) and creates an EDF file containing the same data. Output from \fBmit2edf\fR is always in the standard little-endian format. Options for \fBmit2edf\fR include: @@ -49,7 +49,7 @@ Verbose mode (print debugging output). .PP -Note that MIT format does not include a standard way to specify the +Note that WFDB format does not include a standard way to specify the transducer type or the prefiltering specification; these parameters are not preserved by these conversion programs. Also note that use of the standard signal and unit names specified for EDF is permitted but not enforced by diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wag-src/getpagenos.c wfdb-10.4.2/doc/wag-src/getpagenos.c --- wfdb-10.4.1/doc/wag-src/getpagenos.c 2004-03-09 11:47:35.000000000 -0500 +++ wfdb-10.4.2/doc/wag-src/getpagenos.c 2006-05-04 09:37:02.000000000 -0400 @@ -4,6 +4,11 @@ */ #include +#ifndef BSD +# include +#else /* for Berkeley UNIX only */ +# include +#endif main() { diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wag-src/install0.tex wfdb-10.4.2/doc/wag-src/install0.tex --- wfdb-10.4.1/doc/wag-src/install0.tex 2004-03-08 16:09:41.000000000 -0500 +++ wfdb-10.4.2/doc/wag-src/install0.tex 2006-05-04 11:57:00.000000000 -0400 @@ -28,201 +28,55 @@ \maketitle -\section*{Summary} -This appendix briefly describes how to install the WFDB Software Package on a -new system. The package includes C-language sources for the WFDB library and -for the applications described in this manual; \LaTeX{}, {\tt texinfo}, and -{\tt troff} sources for this and other manuals; and a one-minute sample record -({\tt 100s}). - -\section*{How to obtain the WFDB Software Package} -The latest version of the WFDB Software Package can always be downloaded in -source form from PhysioNet and its mirrors (see {\tt -http://www.physio\-net.org/physio\-tools/wfdb.shtml}); binaries for popular -operating systems and development snapshots, as well as quick-start guides -including installation notes for popular operating systems, are also usually -available there. - -\subsection*{UNIX, GNU/Linux, and similar operating systems} - -Before beginning the installation of the WFDB Software Package, obtain and -install the {\tt libwww} package from {\tt http://www.w3.org/Library/} or from -{\tt http://\-www.physio\-net.org/physio\-tools/libwww/}. This package is -provided with most current versions of GNU/Linux. (If you have a program -called {\tt libwww-config}, then {\tt libwww} is installed already.) You may -omit this step if you do not wish to have NETFILES support. - -Also download and install the {\tt XView} software packages from {\tt -http://www.\-physio\-net.org/\-physio\-tools/xview/} if you wish to use WAVE. -Sources are available, as are binaries for several versions of GNU/Linux. If -you are using SunOS or Solaris, XView binaries are available in the Open Look -Software Development package and may be installed already. (If you have a -program called {\tt textedit}, then {\tt XView} is installed already.) If you -are able to use an existing set of binaries, these are recommended, since the -sources may take a {\em long} time to compile. Be sure that the directory -containing {\tt textedit}, usually {\tt /usr/openwin/bin}, is in your {\tt -PATH}. You may omit this step if you do not wish to use {\em WAVE}. - -If you have downloaded the software from PhysioNet or another source, you -will have a {\tt gzip}-compressed {\tt tar} archive. Unpack it using -the commands: - -\begin{verbatim} -gzip -d wfdb.tar.gz -tar xfv wfdb.tar -\end{verbatim} - -(If you have GNU {\tt tar}, as on GNU/Linux, you can combine these into a -single command: {\tt tar xfvz wfdb.tar.gz}.) - -This will create a directory with a name of the form {\tt wfdb-}{\em m.n.r}, -where {\em m.n.r} is the version number of the included WFDB library (e.g., -{\tt 10.3.0}). Enter this directory. - -You should now be ready to configure, compile, and install the software, using -the commands: - -\begin{verbatim} -./configure -make install -\end{verbatim} - -The {\tt ./configure} command asks where you wish to install the package. -If you accept the default ({\tt /usr}), you will need root permissions when -runnning {\tt make install}. If you choose another location, follow the -instructions given by {\tt configure} for setting your {\tt PATH} and -{\tt LD\_LIBRARY\_PATH} environment variables. - -Depending on the speed of your system and of your C compiler, {\tt make} will -generally require between 1 and 10 minutes. - -\subsection*{Mac OS X (Darwin)} - -The WFDB Software Package, including WAVE, has been successfully compiled under -Mac OS X 10.2 (Darwin 6.0.1) and 10.3. It should also work under 10.1, but -this has not been tested. +This appendix briefly describes how to install the WFDB Software Package +on a new system. The package includes C-language sources for the WFDB +library and for most of the applications described in this manual, sources +for this manual, the {\em WFDB Programmer's Guide}, and the +{\em WAVE User's Guide}, and a one-minute sample record ({\tt 100s}). + +The latest version of the package can always be downloaded in +source form from {\tt http://physio\-net.org/\-physio\-tools/\-wfdb.shtml}, +the WFDB home page on PhysioNet. Binaries for popular operating systems and +development snapshots are also usually available there. + +The process for installing the package is the same on all platforms, and +is documented in detail in the quick-start guides for the popular platforms +that can be found on the WFDB home page. In brief: -Before compiling the WFDB Software Package, download and install: +\begin{enumerate} +\item +\emph{Install any prerequisites needed for your platform.} These include +{\tt gcc} (the GNU Compiler Collection), related software development tools +such as {\tt make}, a supported HTTP client library (either {\tt libcurl} or +{\tt libwww}; this can be omitted if NETFILES support is not desired), the +XView libraries (needed for WAVE only), and X11 (needed by XView). All of these +components are free (open-source) software available for all popular platforms, +including GNU/Linux, Mac OS X, MS Windows, and Unix. The quick start guides +list recommended packages and where to find them. -\begin{itemize} \item -Mac OS X Developer Tools (from {\tt -http://\-devel\-oper.\-apple.\-com/\-tools/\-xcode/)} +\emph{Download and unpack the WFDB Software Package.} Versions for all +platforms are built from a single package of portable sources; the most +recent package is always available at +{\tt http://physio\-net.org/physio\-tools/wfdb.tar.gz}. + \item -libwww (from Fink, {\tt http://\-fink.\-source\-forge.\-net/}) +\emph{Configure the package for your system.} The {\tt configure} script +creates a customized building procedure for your system and allows you +a few choices about where to install the package. + \item -an X11 package (from Fink, {\tt http://\-fink.\-source\-forge.\-net/}; -XDarwin, {\tt http://\-www.\-xdar\-win.\-org/}; or Apple, -{\tt http://\-www.\-apple.\-com/\-macosx/\-features/\-x11/\-download/}) +\emph{Make and verify a test build.} The package includes a set of test +scripts that are run to verify basic operations of the WFDB library and +many of the applications, permitting them to be tested before installation. + \item -XView (from PhysioNet, -{\tt http://\-www.\-physionet.\-org/\-physiotools/\-xview/}) -\end{itemize} - -Now follow the instructions in the previous section for installing from sources -under Unix or GNU/Linux. - -\subsection*{MS-Windows} - -The WFDB Software Package, except for WAVE, has been successfully compiled -under all modern versions of MS-Windows (including MS-Windows 95, 98, ME, NT, -2000, and XP) using the Cygwin development environment. - -If you have not already done so, install the Cygwin development environment -(freely available from {\tt http://\-www.\-cygwin.\-com/}). This includes -{\tt gcc} (the GNU C/C++ compiler) as well as a comprehensive assortment of -other Unix utilities ported to MS-Windows. Accept the defaults suggested by -the installer, but be sure to select and install the {\tt gcc}, -{\tt binutils}, and {\tt make} packages from the {\tt Devel} category -(these are not installed by default in a minimal Cygwin installation). - -\emph{Important:} Although you may be able to compile the WFDB software -package using a proprietary compiler, this is \emph{not supported}. The -{\tt Makefile.dos} files in several of the subdirectories of the package's -source tree can be used with the {\tt make} utilities provided with most -commercial C compilers, although you will need to customize them for your -compiler. Your feedback is appreciated. - -Before beginning the installation of the WFDB Software Package, obtain and -install the {\tt libwww} package from {\tt http://www.w3.org/Library/} or -from {\tt http://\-www.physio\-net.org/physio\-tools/libwww/}. You may -omit this step if you do not wish to have NETFILES support. - -Open a Cygwin terminal window (the Cygwin installer will have added this to -your MS-Windows start menu). Perform the remaining steps by typing the -commands given below into the terminal window. - -Check that {\tt gcc} is accessible by typing the command: - -\begin{verbatim} -which gcc -\end{verbatim} - -The output of this command should be: - -\begin{verbatim} -/usr/bin/gcc -\end{verbatim} - -If you don't see this output, repeat the steps above as necessary to correct -the problem before continuing. - -Unpack the {\tt gzip}-compressed {\tt tar} archive you downloaded earlier, -using the {\tt tar} command included with the Cygwin package: - -\begin{verbatim} -tar xfvz wfdb.tar.gz -\end{verbatim} - -If your browser decompressed the file during the download, use this command -instead: - -\begin{verbatim} -tar xfv wfdb.tar -\end{verbatim} - -This will create a directory with a name of the form {\tt wfdb-}{\em m.n.r}, -where {\em m.n.r} is the version number of the included WFDB library (e.g., -{\tt 10.3.0}). Enter this directory. - -You should now be ready to configure, compile, and install the software, using -the commands: - -\begin{verbatim} -./configure -make install -\end{verbatim} - -If you have Microsoft or Turbo C or C++, and a Microstar Laboratories DAP 1200- -or 2400-series analog interface board, you can compile {\tt sample} (a program -for creating database records from analog signals, and for replaying them in -analog form). To do so successfully, you must first have installed the -Microstar {\tt \#include} files and DAP interface library on your system. -Specifically, files {\tt c\_lib.c}, {\tt clock.h}, and {\tt ioutil.h} must be -installed in your {\tt include} directory, and the version of the file -{\tt cdapl.lib} that is compatible with your compiler must be installed in a -directory in which libraries are found by your linker. Read and customize -{\tt lib/Makefile.dos} and {\tt app/Makefile.dos} as appropriate for your -compiler, and use your compiler's {\tt make} utility to generate {\tt wfdb.lib} -and then {\tt sample.exe}. - -\subsection*{Other systems} - -Copy the contents of {\tt http://www.\-physio\-net.\-org/physio\-tools/wfdb/} -to your hard disk. Note that the text files are in UNIX format (i.e., lines -are terminated by ASCII line-feed characters only). If your system expects -text files in MS-DOS format (with both a carriage return and a line-feed at the -end of each line; VMS is one such system), use {\tt u2d.exe} (available from -PhysioNet) to reformat the text files under MS-DOS. If your system is a -Macintosh (which expects that lines are terminated by carriage returns only), -you will have to reformat the text files yourself, which may be done under -MS-DOS on a PC using {\tt u2m.exe}, or on a Macintosh using third-party -software. - -The WFDB Software Package is written in highly portable C, and (with the -exception of a few MS-DOS or UNIX-specific display or data-acquisition -programs) should be easy to compile with any K\&R or ANSI C compiler. -The UNIX and MS-DOS {\tt make} description files ({\tt Makefile} -and {\tt Makefile.dos} in {\tt wfdb} and in each of its subdirectories) -should get you started. +\emph{Make, install, and test a final build.} +\end{enumerate} + +See the quick start guide for your platform for detailed step-by-step +instructions. + +\emph{Important:} Although you may be able to compile the WFDB Software Package +using a proprietary compiler, this is \emph{not supported}. \end{document} diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wag-src/wav2mit.1 wfdb-10.4.2/doc/wag-src/wav2mit.1 --- wfdb-10.4.1/doc/wag-src/wav2mit.1 2003-02-12 16:14:44.000000000 -0500 +++ wfdb-10.4.2/doc/wag-src/wav2mit.1 2006-05-04 11:31:15.000000000 -0400 @@ -1,6 +1,6 @@ .TH WAV2MIT 1 "12 February 2003" "WFDB 10.3.2" "WFDB Applications Guide" .SH NAME -wav2mit, mit2wav \- convert between .wav and MIT formats +wav2mit, mit2wav \- convert between .wav and WFDB-compatible formats .SH SYNOPSIS \fBwav2mit -i\fR \fIfile\fR\fB.wav\fR [ \fIoptions\fR ... ] .br @@ -8,18 +8,18 @@ .SH DESCRIPTION .PP These programs convert files in the widely-used \fB.wav\fR audio file -format into MIT-format files (as used in PhysioBank) and vice versa. -Most \fB.wav\fR files are already written in an MIT-compatible format, +format into WFDB format files (as used in PhysioBank) and vice versa. +Most \fB.wav\fR files are already written in a WFDB-compatible format, although the reverse is not true. (An embedded header is required -by \fB.wav\fR format, and is allowed but is not usually present in MIT-format +by \fB.wav\fR format, and is allowed but is not usually present in WFDB-format signal files.) .PP -\fBwav2mit\fR creates a WFDB (MIT-format) record from \fIfile\fR\fB.wav\fR. +\fBwav2mit\fR creates a WFDB record from \fIfile\fR\fB.wav\fR. If the input file is written in an MIT-compatible signal file format, all that is required in this case is to create a suitable -MIT-format \fB.hea\fR header file that describes the \fB.wav\fR file's format. +WFDB-format \fB.hea\fR header file that describes the \fB.wav\fR file's format. Some \fB.wav\fR files are written using variants of the format that are not -compatible with MIT format; the current version of \fBwav2mit\fR does not +readable by the WFDB library; the current version of \fBwav2mit\fR does not attempt to convert such files, but warns that they are not compatible. Options for \fBwav2mit\fR include: .TP @@ -30,9 +30,9 @@ Create the specified \fIrecord\fR (default: use the base name of the input file as the record name). .PP -\fBmit2wav\fR reads the specified MIT-format \fIrecord\fR (header and signal +\fBmit2wav\fR reads the specified WFDB-format \fIrecord\fR (header and signal files) and creates a \fB.wav\fR file containing the same data. Note that -much of the data description contained in the MIT-format header file cannot +much of the data description contained in the WFDB-format header file cannot be preserved in the \fB.wav\fR file. Options for \fBmit2wav\fR include: .TP \fB-h\fR diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wpg-src/wpg0.tex wfdb-10.4.2/doc/wpg-src/wpg0.tex --- wfdb-10.4.1/doc/wpg-src/wpg0.tex 2006-04-06 14:26:43.000000000 -0400 +++ wfdb-10.4.2/doc/wpg-src/wpg0.tex 2006-05-04 11:27:18.000000000 -0400 @@ -168,36 +168,41 @@ @cindex record name @cindex tape -The databases for which the WFDB library was designed consist of a small -number of @dfn{records}, each of which is quite large (typically a -megabyte or more). Database records usually originate as multi-channel -analog tape recordings that have been digitized and stored as disk -files. For this historical reason, they are often referred to as -@dfn{tapes}. Each record contains a continuous recording from a single -subject. A typical application program accesses only a single record, -and most (if not all) of the access within the record is sequential. -Much less frequently, it may be of interest to compare the contents of -several records, or to select sets of records. These databases are -therefore qualitatively different from those for which conventional -database management software is written. +The databases for which the WFDB library was designed consist of a +small number of @dfn{records}, each of which is quite large (typically +a megabyte or more). Before 1990, database records usually originated +as multi-channel analog tape recordings that had been digitized and +stored as disk files. For this historical reason, they are sometimes +referred to as @dfn{tapes}, although most newly created records are +digitally recorded onto disk media. Each record contains a continuous +recording from a single subject. A typical application program +accesses only a single record, and most (if not all) of the access +within the record is sequential. Much less frequently, it may be of +interest to compare the contents of several records, or to select sets +of records. These databases are therefore qualitatively different +from those for which conventional database management software is +written. @cindex file names -Records are identified by @dfn{record names}, which are three-digit -numbers for MIT DB records, four-digit numbers for AHA DB records, and -four-digit numbers prefixed by @samp{e} for ESC DB records. You may -create database records with names containing letters, digits, and -underscores. Case is significant in record names that contain letters, -even in environments such as MS-DOS for which case translation is -normally performed by the operating system on file names; thus -@samp{e0104} is the name of a record found in the ESC DB, whereas -@samp{E0104} is not. A record is comprised of several files, which -contain signals, annotations, and specifications of signal attributes; -each file belonging to a given record normally includes the record name -as the first part of its name. A record is an extensible collection of -files, which need not all be located in the same directory, or even on -the same physical device. Thus it is possible, for example, to create -on a magnetic disk a file of your own annotations for a record -distributed on a CD-ROM, and to treat your file as part of the record. +Records are identified by @dfn{record names} of up to 20 characters +(the limit is @code{MAXRNL}, defined in @file{}). For +example, record names in the MIT DB are three-digit numbers, those in +the AHA DB are four-digit numbers, and those in the ESC DB are +four-digit numbers prefixed by the letter @samp{e}. You may create +database records with names containing letters, digits, and +underscores. Case is significant in record names that contain +letters, even in environments such as MS-Windows for which case +translation is normally performed by the operating system on file +names; thus @samp{e0104} is the name of a record found in the ESC DB, +whereas @samp{E0104} is not. A record is comprised of several files, +which contain signals, annotations, and specifications of signal +attributes; each file belonging to a given record normally includes +the record name as the first part of its name. A record is an +extensible collection of files, which need not all be located in the +same directory, or even on the same physical device. Thus it is +possible, for example, to create a local disk file of your own +annotations for a record read from a web server or a CDROM, and to +treat your file as part of the record. @node Concepts 2, Concepts 3, Concepts 1, Overview @unnumberedsec Signals, Samples, and Time @@ -294,7 +299,9 @@ @cindex waveform editor @itemize @bullet @item -A @emph{waveform editor}, such as @code{wave} (@pxref{Sources}), reads the +A @emph{waveform editor}, such as @code{wave} (see the +@uref{http://@-www.@-physionet.@-org/@-physio@-tools/@-wug/, +@cite{WAVE User's Guide}}), reads the digitized signals of a database record and displays them with annotations superimposed on the waveforms. Such a program allows the user to select any portion of the signals for display at various scales, @@ -379,24 +386,24 @@ @file{rdsamp} --- available from PhysioNet in source and ready-to run formats --- to translate files into text format. -Chapter 1 of this guide begins with a simple example program that reads -a few samples from a database record. This example should help you -understand the mechanics of compiling and using a program that does -something with an ECG database. Chapter 2 introduces the library -functions themselves, with a number of brief examples; you may wish to -skim through this material on a first reading to get acquainted with -what is available, and then refer to it as needed while writing your -programs. Data structures for annotations and for signal and annotator -attributes are described in chapter 3. Chapter 4 contains a table of -annotation types and descriptions of several annotation-mapping macros. -Database files and related topics are discussed in chapter 5, which can -be skipped on a first reading. Chapter 6 contains additional example -programs that illuminate a few of the darker corners of the WFDB library. -The glossary defines the ordinary-sounding words such as @dfn{signal} -that have specialized meanings in this guide; such words are -@dfn{emphasized} in their first appearances in order to warn you that -you should look them up in the glossary on a first reading -(@pxref{Glossary}). +Chapter 1 of this guide begins with a simple example program that reads a few +samples from a database record. The C version of this program is also +translated into a variety of other languages supported by the WFDB library +itself or by separately available bindings. This example should help you +understand the mechanics of compiling and using a program that does something +with an ECG database. Chapter 2 introduces the library functions themselves, +with a number of brief examples; you may wish to skim through this material on +a first reading to get acquainted with what is available, and then refer to it +as needed while writing your programs. Data structures for annotations and for +signal and annotator attributes are described in chapter 3. Chapter 4 contains +a table of annotation types and descriptions of several annotation-mapping +macros. Database files and related topics are discussed in chapter 5, which +can be skipped on a first reading. Chapter 6 contains additional example +programs that illuminate a few of the darker corners of the WFDB library. The +glossary defines the ordinary-sounding words such as @dfn{signal} that have +specialized meanings in this guide; such words are @dfn{emphasized} in their +first appearances in order to warn you that you should look them up in the +glossary on a first reading (@pxref{Glossary}). If the WFDB library has not yet been installed on your system, @pxref{Installation, , Installing the WFDB Software Package}. @@ -420,23 +427,33 @@ At the end of the guide is a list of sources for databases and other materials that may be useful to readers (@pxref{Sources}). -Many friends have contributed to the development of the WFDB library. Thanks -to Paul Albrecht, Ted Baker, Phil Devlin, Scott Greenwald, Isaac Henry, David -Israel, Roger Mark, Joe Mietus, Warren Muldrow, and especially to Paul -Schluter, whose elegant 8080 assembly language functions inspired these (long -live @code{getann}!). Pat Hamilton and Bob Farrell contributed ports, to -classic Mac OS and the MS 32-bit Windows environments, respectively. Jose -Garcia Moros and Salvador Olmos contributed Matlab/Octave reimplementations of -a useful subset of the WFDB library. Jonas Carlson wrote, documented, and -contributed a set of Matlab wrappers for the WFDB library. Thanks also to the -many readers of earlier versions of this guide; if this edition answers your -questions, it is because someone else has already asked them, and hounded the -author until he produced comprehensible answers. +Many friends have contributed to the development of the WFDB library. +Thanks to Paul Albrecht, Ted Baker, Phil Devlin, Scott Greenwald, +Thomas Heldt, Isaac Henry, David Israel, Roger Mark, Joe Mietus, +Warren Muldrow, Wei Zong, and especially to Paul Schluter, whose +elegant 8080 assembly language functions inspired these (long live +@code{getann}!). Pat Hamilton and Bob Farrell contributed ports, to +classic Mac OS and the MS 32-bit Windows environments, respectively. +Jose Garcia Moros and Salvador Olmos contributed Matlab/Octave +reimplementations of a useful subset of the WFDB library. Jonas +Carlson wrote, documented, and contributed a set of Matlab wrappers +for the WFDB library. Isaac Henry contributed SWIG wrappers that +provide interfaces for a variety of scripting languages, as well as a +set of translations of the C example programs in this guide into the +languages supported by the SWIG wrappers. Mike Dakin provided the +first implementation of NETFILES (HTTP client support in the WFDB +library) based on the W3C's @code{libwww}. Following the W3C's +decision to end development of @code{libwww}, Benjamin Moody +reimplemented NETFILES using @code{libcurl}, and also implemented +variable-layout records. Thanks also to the many readers of earlier +versions of this guide; if this edition answers your questions, it is +because someone else has already asked them, and hounded the author +until he produced comprehensible answers. Before May, 1999, and the release of version 10.0.0 of the library, the WFDB library was known as the DB library, and this guide was the @cite{ECG Database Programmer's Guide}. The name of the library was changed because -of confusion caused by the recent proliferation of another library with +of confusion caused by the proliferation of another library with the same name (a reimplementation of the Berkeley Unix DBM library). The names of this guide, and of the @cite{WFDB Applications Guide} (formerly the @cite{ECG Database Applications Guide}), have been changed in view of @@ -478,8 +495,8 @@ @ifinfo You can format and print copies of this guide using TeX if you have it (see @file{makefile} in the @file{doc} directory of the library distribution for -instructions on doing so). You may obtain a preformatted version suitable for -output on any PostScript device from @uref{http://www.physionet.org/}. +instructions on doing so). You may obtain preformatted versions in PDF and +PostScript formats from @uref{http://www.physionet.org/}. @end ifinfo @node Recent changes, Usage, Overview, Top @@ -492,6 +509,19 @@ WFDB Software Package distribution, for information on any more recent changes that may not be described here. +@unnumberedsubsec Changes in version 10.4.2 + +Mathias Gruber reported a line in wfdbio.c that used void pointer arithmetic +(permitted as an extension by gcc but not allowed by ANSI/ISO C or most other C +compilers). This operation has been replaced by ANSI/ISO C-conformant code. + +@unnumberedsubsec Changes in version 10.4.1 + +A bug caused incorrect output from WFDB library function strtim() when called +with the argument "i", following use of setifreq() to change the effective +sampling frequency, resulting in incorrect output from example 10 in the WFDB +Programmer's Guide. This has now been corrected. + @unnumberedsubsec Changes in version 10.4.0 Version 10.4.0 and later versions of the WFDB library are intended to @@ -835,7 +865,7 @@ is specified to be located in a non-existent directory, the WFDB library will attempt to create the directory (including, if necessary, any non-existent parent directories). This feature simplifies the use of record names that -include directory information, as is common when reading data from a CD-ROM or +include directory information, as is common when reading data from a CDROM or a web server such as PhysioNet. For example, using the WFDB path (@file{. http://@-www.@-physio@-net.@-org/@-physio@-bank/@-data@-base}), if the current directory, @file{.}, does not contain a subdirectory named @@ -1079,17 +1109,21 @@ @cindex compiling @cindex loader options -To compile the example program on a Unix system, we can say: +The WFDB library is developed and tested using @code{gcc}, the GNU C/C++ +compiler, but careful attention has been given to making it usable with any +ANSI/ISO C compiler. Since @code{gcc} is free, high quality, and supported, it +is highly recommended that you use it for compiling your WFDB applications. + +To compile the example program using @code{gcc}, we can say: @example -cc -o psamples psamples.c -lwfdb +gcc -o psamples psamples.c -lwfdb @end example @noindent to produce an executable program called @code{psamples}. (Your C -compiler may be named @file{gcc}, @file{acc}, @file{CC}, or something -else, rather than @file{cc}, but under any version of Unix, it will -almost certainly work as shown above.) You may use any other compiler +compiler may be named @file{cc}, @file{acc}, @file{CC}, or something +else, rather than @file{gcc}.) You may use any other compiler options you choose, but the @samp{-lwfdb} option must appear in the @code{cc} command line following any and all source (@file{*.c}) and object (@file{*.o}) file names, in order to instruct the loader to @@ -1108,12 +1142,12 @@ functions contained in the @code{libcurl} or @code{libwww} libraries. If you have dynamically linkable versions of the @code{libcurl} or @code{libwww} libraries, as under GNU/Linux, these will be loaded automatically when you run -@code{psamples}. If you have only static versions of these libraries, as under -Solaris or MS-Windows, however, it is necessary to provide additional arguments -in the @code{cc} command line in order to compile successfully. One way to do -this is to follow the model used to compile the standard WFDB applications -supplied with the WFDB library; see @file{Makefile} in the @file{app} directory -of the WFDB software package source tree. +@code{psamples}. If you have only static versions of these libraries, however, +it is necessary to provide additional arguments in the @code{cc} command line +in order to compile successfully. One way to do this is to follow the model +used to compile the standard WFDB applications supplied with the WFDB library; +see @file{Makefile} in the @file{app} directory of the WFDB software package +source tree. If you are using WFDB version 10.2.6 or a later version and @file{gcc} or a compatible compiler, the @file{wfdb-config} utility is available @@ -1131,30 +1165,26 @@ its @file{*.h} files are installed in non-standard locations, or if you have only static @code{libcurl} or @code{libwww} libraries. -Under MS-Windows, it will be easiest to use @file{gcc}, the GNU C/C++ -compiler, which is included in the freely available Cygwin software -development system (@uref{http://@-www@-.cygwin@-.com/}), -and also in the freely available MinGW package -(@uref{http://@-www@-.mingw@-.org/}). An MS-DOS version of @file{gcc} -is available in the free djgpp package -(@uref{http://@-www@-.delorie@-.com/@-djgpp/}). These are used within a -Cygwin terminal emulator window or an MS-DOS box in exactly the same way -as described above for Unix C compilers. - -The WFDB library is developed and tested using @code{gcc}, but careful -attention has been given to making it usable with any K&R or ANSI/ISO C -compiler. Note, however, that binary versions of the WFDB library that -have been compiled using @code{gcc} are @emph{not} compatible with most -proprietary C/C++ compilers (except under Unix). Since @code{gcc} is -free, high quality, and supported, it is highly recommended that you -use it for compiling your WFDB applications. +Under MS-Windows, @file{gcc} is included in the freely available Cygwin +software development system (@uref{http://@-www@-.cygwin@-.com/}), and also in +the freely available MinGW package (@uref{http://@-www@-.mingw@-.org/}). An +MS-DOS version of @file{gcc} is available in the free djgpp package +(@uref{http://@-www@-.delorie@-.com/@-djgpp/}). These are used within a Cygwin +terminal emulator window or an MS-DOS box in exactly the same way as described +above for C compilers on all other platforms. For most purposes, Cygwin is +recommended, since it provides a Unix-compatible standard C library +(@code{cygwin1.dll}), so that applications behave exactly as they do on all +other platforms. WAVE can only be built under Windows in this way. When +building WFDB-based plugins for use with .NET applications or others such as +Matlab that rely on the native Windows C library, however, the WFDB library +must be recompiled to use the native library. This can be done using either +MinGW gcc, or Cygwin gcc with its @code{-mno-cygwin} option. If you choose to use an incompatible proprietary compiler, you are on your own! You may be able to create a linkable version of the WFDB library from the sources in the @file{lib} directory of the WFDB source tree using a proprietary compiler, but doing so is unsupported (see your -compiler's documentation, and if you are using MS-DOS or MS-Windows, see -@file{Makefile.dos} for hints). If you are not able to build the WFDB +compiler's documentation). If you are not able to build the WFDB library using your compiler, you can compile the library sources together with the source file(s) for your application. It may be easiest to copy the library sources (both the @file{*.c} and the @@ -1320,7 +1350,7 @@ for (int i = 0; i < 10; i++) @{ if (wfdb.getvec(v.cast()) < 0) break; - System.out.println("\t" + v.getitem(0) + "\t" + v.getitem(1)); + System.out.println("\t" + v.getitem(0) +"\t"+ v.getitem(1)); @} @} @} @@ -2886,13 +2916,6 @@ than the time of the most recent annotation read from the pipe. @xref{Example 9}, for an illustration of the use of @code{iannsettime}. -The version of @code{iannsettime} that is included on the first edition -of the MIT-BIH Arrhythmia Database CD-ROM contains a bug that can -occasionally cause incorrect results. To avoid this problem when using -that version of the library, make at least one call to @code{getann} -before using @code{iannsettime}. The bug was corrected in version 4.0 -of the library. - @c @group @node sample, , iannsettime, non-sequential @unnumberedsubsec sample and sample_valid @@ -5007,7 +5030,7 @@ @cindex annotator name @cindex attributes of annotators @cindex AHA-format annotation file -@cindex MIT-format annotation file +@cindex WFDB-format annotation file @cindex standard annotation file @cindex format (annotation file) @cindex information structure (annotator) @@ -5040,11 +5063,12 @@ @cindex @code{WFDB_AHA_WRITE} @cindex @code{WFDB_READ} @cindex @code{WFDB_WRITE} -the file type/access code. Usually, @code{stat} is either @code{WFDB_READ} -or @code{WFDB_WRITE}, to specify standard (``MIT format'') annotation files -to be read by @code{getann} or to be written by @code{putann}. Both MIT -DB and AHA DB annotation files are kept on-line in MIT format. The -symbols @code{WFDB_READ} and @code{WFDB_WRITE} are defined in +the file type/access code. Usually, @code{stat} is either +@code{WFDB_READ} or @code{WFDB_WRITE}, to specify standard (``WFDB +format'') annotation files to be read by @code{getann} or to be +written by @code{putann}. Both MIT DB and AHA DB annotation files can +be (and generally are) stored in WFDB format. The symbols +@code{WFDB_READ} and @code{WFDB_WRITE} are defined in @file{}. An AHA-format annotation file can be read by @code{getann} or written by @code{putann} if the @code{stat} field is set to @code{WFDB_AHA_READ} or @code{WFDB_AHA_WRITE} before calling @@ -5377,7 +5401,7 @@ @emph{collection} of database files (@pxref{Concepts 1, , Records}). Thus, for example, record 100 of the MIT-BIH Arrhythmia Database consists of the files named @file{100.hea}, @file{100.dat}, and @file{100.atr} in the @file{mitdb} -directory of the MIT-BIH Arrhythmia Database CD-ROM (or in PhysioBank, within +directory of the MIT-BIH Arrhythmia Database CDROM (or in PhysioBank, within @uref{http://@-www.@-physio@-net.@-org/@-physio@-bank/@-data@-base/@-mitdb/}), together with any additional files in other directories that you may have associated with record 100 (such as your own annotation file). All files @@ -5502,7 +5526,7 @@ factor of eight. Yet another format has been used more recently for distribution of AHA DB files -on floppy diskettes and CD-ROMs. This format is compatible with neither the +on floppy diskettes and CDROMs. This format is compatible with neither the original AHA format nor with any of the formats supported directly by the WFDB library. Programs @file{a2m} and @file{ad2m}, supplied with the WFDB Software Package, can convert files in this format (as well as those in the original AHA @@ -5553,7 +5577,7 @@ seek times (e.g., optical disk), if many signals must be recorded and Unix's per-process limit on open files would otherwise be exceeded, or if very high speed is required while the file is being created (because of sampling -constraints). CD-ROM signal files, and those available from PhysioNet, are +constraints). CDROM signal files, and those available from PhysioNet, are multiplexed unless the record contains only one signal. @node Multi-Frequency Records, Multi-Segment Records, Multiplexed Signal Files, Database Files @@ -5982,7 +6006,7 @@ @menu * Example 1:: An annotation filter. -* Example 2:: An MIT-to-AHA format annotation translator. +* Example 2:: A WFDB-to-AHA format annotation translator. * Example 3:: An annotation printer. * Example 4:: Generating an R-R interval histogram. * Example 5:: A program that prints signal specifications. @@ -6526,7 +6550,7 @@ @end table @node Example 7, Example 8, Example 6, Examples -@unnumberedsec Example 7: A General-Purpose FIR Filter +@unnumberedsec Example 7: A General-Purpose FIR Filter @cindex digital filter @cindex filter (digital) @@ -6686,7 +6710,7 @@ frequency from the input record. @end table @node Example 8, Example 9, Example 7, Examples -@unnumberedsec Example 8: Creating a New Database Record +@unnumberedsec Example 8: Creating a New Database Record @cindex creating a record @cindex records (creating) @@ -7306,33 +7330,6 @@ signals from @var{record}. @item -Wesley Q. Phortran, IV, wrote this program to print beat times (in -minutes and seconds) and R-R intervals for the reference annotation file -of record @file{100}. Why doesn't it work? -@example - @i{1} #include - @i{2} - @i{3} main() - @i{4} @{ - @i{5} WFDB_Annotation *annot; - @i{6} WFDB_Anninfo ai; - @i{7} int t; - @i{8} - @i{9} ai.name = "atr"; -@i{10} ai.stat = WFDB_READ; -@i{11} if (annopen(100, ai, 1)) @{ -@i{12} while (getann(1, annot)) @{ -@i{13} printf("%s\t(%d)\t%s\n", timstr(annot.time), -@i{14} annot.time, mstimstr(annot.time - t)); -@i{15} t = annot.time; -@i{16} @} -@i{17} @} -@i{18} @} -@end example -Extra credit: Without actually trying it out, what @emph{does} it -produce on the standard output? - -@item Using @code{isigsettime} on a format 8 signal introduces a random offset into the signal, since the contents of a format 8 signal file are first differences rather than amplitudes. For an AC-coupled signal such as an @@ -7352,53 +7349,37 @@ of 100 msec or less? @item -This exercise assumes that you have access to the MIT-BIH Arrhythmia -Database, either on a CD-ROM or via PhysioNet. Since the 360 Hz sampling -frequency used in that database is an integer multiple of 60 Hz, it is +This exercise and the next assume that you have access to the web, so +that you can obtain the freely available input records needed from PhysioNet. +Since the 360 Hz sampling frequency used in the MIT-BIH Arrhythmia +Database is an integer multiple of the 60 Hz mains frequency, it is quite easy to design a 60 Hz notch filter that can be applied to the -database. Write a program that filters two input signals and writes -out the filtered data using @code{putvec} (@pxref{Example 7}, for a -model program). Try it out on MIT-BIH record @file{122} (or use record -@file{mitdb/x_mitdb/x_122} from PhysioNet). Use your programs from -the previous exercises to display your output. - -@item -If you used Example 7 as a model in the previous exercise, you may have -noticed that it is quite slow. Make it faster by arranging for -@code{sample} to return a pointer to a vector of samples from all -signals (thereby reducing the number of function calls). Speed it up -further by defining a macro that calls the function only if the proper -sample vector is not already in the circular buffer; otherwise the macro -should evaluate to a pointer to the correct sample vector. - -@item -Prof. Nottin Ventedhier says, ``Real programmers don't use inefficient -library I/O routines --- they write their own, in assembly language.'' -Implement a version of the QRS detector in Example 10 @emph{without} -using the WFDB library. (To keep it simple, assume that only one input -format --- of your choice --- needs to be supported.) How much faster -than the original is your version? - -@item -(Non-trivial) Write a QRS detector that is independent of sampling frequency. -Some useful constants (for adult human ECGs): average normal QRS duration = 80 -milliseconds, average QRS amplitude = 1 millivolt, average R-R interval = 1 -second; assume that upper and lower limits for these quantities are within a -factor of 3 of the average values. Run your detector on MIT-BIH Arrhythmia -Database record @file{200}. (This record is available on PhysioNet. If you -have a NETFILES-enabled WFDB library, use the default WFDB path, and open +database to suppress power-line interference (for example, by +averaging pairs of samples that are 180 degrees out of phase). Write +a program that filters two input signals and writes out the filtered +data using @code{putvec} (@pxref{Example 7}, for a model program). +Try it out on MIT DB record @file{122} (if you have a NETFILES-enabled +WFDB library, use the default WFDB path, and open record +@file{mitdb/122}; otherwise, download the record from +@uref{http://www.physio@-net.org/physio@-bank/data@-base/mitdb/}.) +Use your programs from the previous exercises to display your output +and compare it with the original signals. + +@item +(Non-trivial) Write a QRS detector that is independent of sampling +frequency without using @code{setifreq}. Some useful constants (for +adult human ECGs): average normal QRS duration = 80 milliseconds, +average QRS amplitude = 1 millivolt, average R-R interval = 1 second; +assume that upper and lower limits for these quantities are within a +factor of 3 of the average values. Run your detector on MIT-BIH +Arrhythmia Database record @file{200}. (If you have a +NETFILES-enabled WFDB library, use the default WFDB path, and open record @file{mitdb/200}; otherwise, download the record from -@uref{http://www.physio@-net.org/physio@-bank/data@-base/mitdb/}.) Read the -documentation on the annotation comparator, @file{bxb}, and figure out how to -use it to compare the annotation file produced by your program against the -reference annotator @file{atr}. How does your detector compare to Example -10? - -@item -If the previous exercise was too easy, modify your detector so that the -annotations it generates match those in the @file{atr} file. Copying -the @file{atr} file is not permitted. You may find this rather -difficult. Good luck! +@uref{http://www.physio@-net.org/physio@-bank/data@-base/mitdb/}.) +Read the documentation on the annotation comparator, @file{bxb}, and +figure out how to use it to compare the annotation file produced by +your program against the reference annotator @file{atr}. How does +your detector compare to Example 10? @end enumerate @node Glossary, Installation, Exercises, Top @@ -7441,10 +7422,10 @@ @item AHA format @cindex AHA format (defined) -The format used for interchange of AHA DB and MIT DB records on 9-track -tape between institutions, not used for on-line files because it is -relatively wasteful of storage space compared to MIT format -(q.v.). +The format formerly used for interchange of AHA DB and MIT DB records +on 9-track tape between institutions, not used for on-line files +because it is relatively wasteful of storage space compared to other +WFDB-compatible formats. (q.v.). @item Annotation @cindex annotation (defined) @@ -7466,7 +7447,7 @@ @cindex annotator name (defined) A name associated with an annotation file. The annotation file name is constructed from the record name by appending a @samp{.} and the annotator -name. On CD-ROMs and MS-DOS file systems, the annotator name is restricted +name. On CDROMs and MS-DOS file systems, the annotator name is restricted to three characters. @item Annotator [number] @@ -7523,11 +7504,12 @@ Each such structure specifies the size and type of the calibration pulse, and the customary plotting scale, for a particular type of signal. -@item CD-ROM -@cindex CD-ROM (defined) -A read-only medium used for distribution of the MIT-BIH and ESC -databases, among others. CD-ROMs are physically identical in appearance -to audio compact disks. +@item CDROM +@cindex CDROM (defined) +A read-only medium used for distribution of a number of databases +readable using the WFDB library, including the ESC and Long-Term ST +databases, among others. CDROMs are physically identical in +appearance to audio compact disks. @item Closing [a record] The process of completing I/O associated with a record. @@ -7670,8 +7652,11 @@ @item MIT format @cindex MIT format (defined) -The standard format for storage of WFDB records on CD-ROMs, used on the -MIT, ESC, and MGH DB CD-ROMs, among others, and on PhysioNet. +One of a set of WFDB-compatible formats for header, signal, and +annotation files that were first used for the MIT-BIH Arrhythmia +Database. The term WFDB-compatible format should be used unless referring +specifically to the formats used for the MIT DB (single-segment header format, +signal format 212, and bit-packed annotation format). @item Modification label @cindex modification label (defined) @@ -7804,7 +7789,7 @@ files, and a header file, all of which are associated with the same original signals. Only the header file is mandatory. Although records are sometimes called tapes for historical reasons, -records are now more commonly maintained on CD-ROMs or magnetic disks +records are now more commonly maintained on CDROMs or magnetic disks than on tape. @item Record name @@ -7939,6 +7924,11 @@ an annotation'' is the sample number of the sample to which the annotation ``points''. +@item WFDB-compatible format +@cindex WFDB-compatible format (defined) +Any of the standard formats readable and writable by the WFDB library, +for storage of WFDB records in PhysioBank and on CDROMs. + @item WFDB library A set of functions (subroutines), able to read and write database files, callable by C and C++ programs, and described in this guide. @@ -7952,209 +7942,82 @@ This appendix briefly describes how to install the WFDB Software Package on a new system. The package includes C-language sources for the WFDB -library and for a variety of applications (@pxref{WFDB Applications}), -@TeX{} source for this manual, @code{troff} source for Unix @code{man} -pages for the package, and a one-minute sample record (@samp{100s}). - -@menu -* Distribution:: How to obtain the latest version of the WFDB - Software Package. -* Unix installation:: Installing the WFDB Software Package on Unix, - GNU/Linux, and similar systems. -* Mac OS X installation:: Installing the WFDB Software Package under - Mac OS X (Darwin). -* MS-Windows installation:: Installing the WFDB Software Package on - MS-Windows PCs. -* Other installation:: Installing the WFDB Software Package on other systems. -@end menu - -@node Distribution, Unix installation, Installation, Installation -@unnumberedsec How to obtain the WFDB Software Package +library and for a variety of applications (@pxref{WFDB Applications}) including +@code{WAVE}, sources for this manual, the @cite{WFDB Applications Guide}, and +the @cite{WAVE User's Guide}, and a one-minute sample record (@samp{100s}). The latest version of the WFDB Software Package can always be downloaded in -source form from PhysioNet -(@uref{http://www.physio@-net.org/physio@-tools/wfdb.shtml}) and its mirrors; -binaries for popular operating systems and development snapshots, as well as -quick-start guides including installation notes for popular operating systems, -are also usually available there. - -@node Unix installation, Mac OS X installation, Distribution, Installation -@unnumberedsec Unix, GNU/Linux, and similar operating systems +source form from @uref{http://www.physio@-net.org/physio@-tools/@-wfdb.shtml}, +the WFDB home page on PhysioNet. Binaries for popular operating systems and +development snapshots are also usually available there. + +The process for installing the package is the same on all platforms, and +is documented in detail in the quick-start guides for the popular platforms +that can be found on the WFDB home page. In brief: @cindex curl @cindex libcurl @cindex libwww @cindex W3C libwww - -Before beginning the installation of the WFDB Software Package, obtain and -install the @code{libcurl} package from @uref{http://curl.haxx.se/}, or else -the @code{libwww} package from @uref{http://www.w3.org/Library/} or -@uref{http://@-www.physio@-net.org/physio@-tools/libwww/}. One or both of -these packages is provided with most current versions of GNU/Linux. (If you -have a program called @code{curl-config}, then @code{libcurl} is installed -already; if you have one named @code{libwww-config}, then @code{libwww} is -installed already.) You may omit this step if you do not wish to have NETFILES -support. - -@cindex XView toolkit - -If you wish to use @emph{WAVE}, also download and install the @code{XView} -software from @uref{http://www.physio@-net.org/physio@-tools/xview/}. Sources -are available, as are binaries for several versions of GNU/Linux. If you are -using SunOS or Solaris, XView binaries are available in the Open Look Software -Development package and may be installed already. (If you have a program -called @code{textedit}, then @code{XView} is installed already.) If you are -able to use an existing set of binaries, these are recommended, since the -sources may take a @emph{long} time to compile. Be sure that the directory -containing @code{textedit}, usually @code{/usr/openwin/bin}, is in your -@code{PATH}. You may omit this step if you do not wish to use @emph{WAVE}. - -If you have downloaded the software from PhysioNet or another source, you -will have a @code{gzip}-compressed @code{tar} archive. Unpack it using -the commands: - -@example -gzip -d wfdb.tar.gz -tar xfv wfdb.tar -@end example - -(If you have GNU @code{tar}, as on GNU/Linux, you can combine these into a -single command: @samp{tar xfvz wfdb.tar.gz}.) - -This will create a directory with a name of the form @code{wfdb-}@var{m.n.r}, -where @var{m.n.r} is the version number of the included WFDB library (e.g., -@code{10.2.6}). Enter this directory. - -You should now be ready to configure, compile, and install the software, using -the commands: - -@example -./configure -make install -@end example - -The @code{./configure} command asks where you wish to install the package. -If you accept the default (@code{/usr}), you will need root permissions when -runnning @code{make install}. If you choose another location, follow the -instructions given by @code{configure} for setting your @code{PATH} and -@code{LD_LIBRARY_PATH} environment variables. - -Depending on the speed of your system and of your C compiler, @samp{make} will -generally require between 1 and 10 minutes. - -@node Mac OS X installation, MS-Windows installation, Unix installation, Installation -@unnumberedsec Mac OS X (Darwin) - -The WFDB Software Package, including WAVE, has been successfully compiled under -Mac OS X 10.2 (Darwin 6.0.1) and 10.3. It should also work under 10.1, but -this has not been tested. - -Before compiling the WFDB Software Package, download and install: - -@itemize @bullet -@item -Mac OS X Developer Tools (from @uref{http://developer.apple.com/tools/xcode/}) -@item -libcurl or libwww (from Fink, @uref{http://fink.sourceforge.net/}) -@item -an X11 package (from Fink, @uref{http://fink.sourceforge.net/}; Apple, -@uref{http://www.apple.com/macosx/features/@-x11/@-download/}; or XDarwin, -@uref{http://www.xdarwin.org/}) +@enumerate @item -XView (from PhysioNet, @uref{http://www.physionet.org/physiotools/xview/}) -@end itemize - -Now follow the instructions in the previous section for installing from sources -under Unix or GNU/Linux. - -@node MS-Windows installation, Other installation, Mac OS X installation, Installation -@unnumberedsec MS-Windows +@emph{Install any prerequisites needed for your platform.} These include +@code{gcc} (the GNU Compiler Collection), related software development tools +such as @code{make}, a supported HTTP client library (either @code{libcurl} or +@code{libwww}; this can be omitted if NETFILES support is not desired), the +XView libraries (needed for WAVE only), and X11 (needed by XView). All of these +components are free (open-source) software available for all popular platforms, +including GNU/Linux, Mac OS X, MS Windows, and Unix. The quick start guides +list recommended packages and where to find them. -The WFDB Software Package, except for WAVE, has been successfully compiled -under all modern versions of MS-Windows (including MS-Windows 95, 98, ME, NT, -2000, and XP) using the Cygwin development environment. - -If you have not already done so, install the Cygwin development environment -(freely available from @uref{http://www.cygwin.com}). This -includes @code{gcc} (the GNU C/C++ compiler) as well as a comprehensive -assortment of other Unix utilities ported to MS-Windows. Accept the defaults -suggested by the installer, but be sure to select and install the @code{bc}, -@code{curl-devel}, @code{gcc}, @code{gcc-mingw}, @code{gv}, @code{ImageMagick}, -@code{make}, @code{sunrpc}, and @code{xorg-x11-devel} packages -(these are not installed by default in a minimal Cygwin installation). - -@emph{Important:} Although you may be able to compile the WFDB software package -using a proprietary compiler, this is @emph{not supported}. The -@code{Makefile.dos} files in several of the subdirectories of the package's -source tree can be used with the @code{make} utilities provided with most -commercial C compilers, although you will need to customize them for your -compiler. Your feedback is appreciated. - -Open a Cygwin terminal window (the Cygwin installer will have added this to -your MS-Windows start menu). Perform the remaining steps by typing the -commands given below into the terminal window. - -Check that @code{gcc} is accessible by typing the command: - -@example -which gcc -@end example - -The output of this command should be: - -@example -/usr/bin/gcc -@end example - -If you don't see this output, repeat the steps above as necessary to correct -the problem before continuing. - -Unpack the @code{gzip}-compressed @code{tar} archive you downloaded earlier, -using the @code{tar} command included with the Cygwin package: - -@example -tar xfvz wfdb.tar.gz -@end example - -If your browser decompressed the file during the download, use this command -instead: +@item +@emph{Download and unpack the WFDB Software Package.} Versions for all +platforms are built from a single package of portable sources; the most +recent package is always available at +@uref{http://www.physio@-net.org/physio@-tools/wfdb.tar.gz}. -@example -tar xfv wfdb.tar -@end example +@item +@emph{Configure the package for your system.} The @code{configure} script +creates a customized building procedure for your system and allows you +a few choices about where to install the package. -This will create a directory with a name of the form @code{wfdb-}@emph{m.n.r}, -where @emph{m.n.r} is the version number of the included WFDB library (e.g., -@code{10.2.6}). Enter this directory. +@item +@emph{Make and verify a test build.} The package includes a set of test +scripts that are run to verify basic operations of the WFDB library and +many of the applications, permitting them to be tested before installation. -You should now be ready to configure, compile, and install the software, using -the commands: +@item +@emph{Make, install, and test a final build.} +@end enumerate -@example -./configure -make install -@end example +See the quick start guide for your platform for detailed step-by-step +instructions. -@node Other installation, , MS-Windows installation, Installation -@unnumberedsec Other systems +@emph{Important:} Although you may be able to compile the WFDB Software Package +using a proprietary compiler, this is @emph{not supported}. -Copy the contents of @uref{http://www.@-physio@-net/physio@-tools/wfdb/} to -your hard disk. Note that the text files are in Unix format (i.e., lines are -terminated by ASCII line-feed characters only). If your system expects text -files in MS-DOS format (with both a carriage return and a line-feed at the end -of each line; VMS is one such system), use @file{u2d.exe} (available from -PhysioNet) to reformat the text files under MS-DOS. If your -system is a Macintosh (which expects that lines are terminated by carriage -returns only), you will have to reformat the text files yourself, which may be -done under MS-DOS on a PC using @file{u2m.exe}, or on a Macintosh using -third-party software. +@unnumberedsec The WFDB library and languages other than C -The WFDB Software Package is written in highly portable C, and (with the -exception of a few MS-DOS or Unix-specific display or data-acquisition -programs) should be easy to compile with any K&R or ANSI C compiler. -The Unix and MS-DOS @file{make} description files (@file{Makefile} -and @file{Makefile.dos} in @file{wfdb} and in each of its subdirectories) -should get you started. +If you wish to use or develop WFDB applications in C, C++ or Fortran, +everything necessary is included in the WFDB Software Package. + +The separate @code{wfdb-swig} package provides wrappers for the WFDB library +so that it can be used by applications written in a variety of other languages +supported by SWIG, the Simplified Wrapper Interface Generator. At the time +of writing, the languages that are known to work with @code{wfdb-swig} wrappers +are Perl, Python,, Java, and C#. Other languages supported by SWIG include +Guile, mzScheme, PHP, Ruby, and Tcl. You will need to install @code{wfdb-swig} +wrappers for your platform and language after installing the WFDB Software +Package. Download the @code{wfdb-swig} package from +@uref{http://physio@-net.org/physio@-tools/wfdb-swig.shtml}, the +@code{wfdb-swig} home page on PhysioNet, and build and install the wrappers +you need following the instructions on that page. + +The separate WFDB_tools package provides WFDB library wrappers for +Matlab; download it from +@uref{http://physio@-net.org/physio@-tools/mat@-lab/wfdb_tools/}, the +WFDB_tools home page on PhysioNet, and build and install it following the +instructions on that page. @node WFDB Applications, Extensions, Installation, Top @appendix WFDB Application Programs @@ -8272,32 +8135,33 @@ The motivation for developing the MIT and AHA databases was to provide material for evaluating the accuracy of arrhythmia detectors, -particularly with respect to ventricular arrhythmias. Between 1984 and -1987, the Association for the Advancement of Medical Instrumentation -(AAMI) sponsored the development of a recommended practice (designated -ECAR) for using the databases for this purpose. The aim of ECAR was to -specify the evaluation methodology in sufficient detail to permit -reproducible testing, and to encourage informed comparisons of the -performance of ventricular arrhythmia detectors in the analysis of these -standard test recordings. More recently, the AAMI has developed, and -ANSI has adopted as American National Standards, a standard (ANSI/AAMI -EC38:1998) for ambulatory electrocardiographs, and a companion standard -(ANSI/AAMI EC57:1998) for testing and reporting performance results of -cardiac rhythm and ST segment measurement algorithms. EC38 and EC57 -specify standard protocols for evaluating -the automated analysis algorithms that are included in many such -devices. These protocols include those developed for the earlier -recommended practice, and extend them to evaluation of supraventricular -arrhythmia and ischemia detection. EC38 and EC57 specify the use of -@file{bxb}, @file{rxr}, @file{mxm}, and @file{epic} to perform -evaluations, and further specifies the use of the MIT DB (as well as two -other databases included on the MIT-BIH Arrhythmia Database CD-ROM), the -AHA DB, and (for devices that perform analysis of the ST segment) the -ESC DB. If you are interested in this subject, obtain copies of the -American National Standards for @cite{Ambulatory Electrocardiographs} -(ANSI/AAMI EC38:1998) and for @cite{Testing and Reporting Performance -Results of Cardiac Rhythm and ST Segment Measurements Algorithms} (ANSI/AAMI -EC57:1998; @pxref{Sources}). +particularly with respect to ventricular arrhythmias. Between 1984 +and 1987, the Association for the Advancement of Medical +Instrumentation (AAMI) sponsored the development of a recommended +practice (designated ECAR) for using the databases for this purpose. +The aim of ECAR was to specify the evaluation methodology in +sufficient detail to permit reproducible testing, and to encourage +informed comparisons of the performance of ventricular arrhythmia +detectors in the analysis of these standard test recordings. More +recently, the AAMI has developed, and ANSI has adopted as American +National Standards, a standard (ANSI/AAMI EC38:1998) for ambulatory +electrocardiographs, and a companion standard (ANSI/AAMI EC57:1998) +for testing and reporting performance results of cardiac rhythm and ST +segment measurement algorithms. EC38 and EC57 specify standard +protocols for evaluating the automated analysis algorithms that are +included in many such devices. These protocols include those +developed for the earlier recommended practice, and extend them to +evaluation of supraventricular arrhythmia and ischemia detection. +EC38 and EC57 specify the use of @file{bxb}, @file{rxr}, @file{mxm}, +and @file{epic} to perform evaluations, and further specifies the use +of the MIT DB (as well as two other databases formerly available on +the MIT-BIH Arrhythmia Database CDROM and now freely available on +PhysioNet), the AHA DB, and (for devices that perform analysis of the +ST segment) the ESC DB. If you are interested in this subject, obtain +copies of the American National Standards for @cite{Ambulatory +Electrocardiographs} (ANSI/AAMI EC38:1998) and for @cite{Testing and +Reporting Performance Results of Cardiac Rhythm and ST Segment +Measurements Algorithms} (ANSI/AAMI EC57:1998; @pxref{Sources}). @cindex QRS detector @cindex detector (QRS) @@ -8375,8 +8239,9 @@ @strong{11}:381-384 (1984). Program @file{nst} adds calibrated amounts of noise to ECGs (or other signals), generating an output record in WFDB format. @file{nst} was used to generate the graded series of noisy ECG -records in the @file{nstdb} directory of the MIT-BIH Arrhythmia Database -CD-ROM. These records are among those specified as standard test +records in the MIT-BIH Noise Stress Test Database (see +@uref{http://physio@-net.org/physio@-bank/data@-base/nstdb/}). +These records are among those specified as standard test material by EC38 (section 4.2.14.2) and EC57 (section 3.2). @node Signal processing, Graphics, Evaluation, WFDB Applications @@ -8453,8 +8318,6 @@ @example wave -r @var{record [ }-a @var{annotator ]} -view @var{record annotator} -wview @var{record annotator} pschart @var{[ [ options ... ] script ... ]} psfd @var{[ [ options ... ] script ... ]} @end example @@ -8462,29 +8325,20 @@ @cindex ECG waveform editor @cindex waveform editor @file{wave} is an X Window System client application for viewing -and editing WFDB records. (@file{wave} is not included in the WFDB software -package, but is available separately; @pxref{Sources}.) @file{wave} can be -run on Unix systems, and can be accessed remotely using networked PCs or -other systems for which X11 servers are available. Run @file{wave} -without any arguments to obtain instructions for printing its on-line -manual. - -@file{view}, included on the MIT-BIH Arrhythmia Database and European ST-T -Database CD-ROMs, among others, is an MS-DOS application for viewing WFDB -records on CGA, EGA, VGA, SVGA, XGA, or Hercules graphics-capable PCs. See -@file{bin.doc} in the @file{bin} directory of the CD-ROM for more -information. - -@file{wview}, included on recent (1995 and later) CD-ROMs and also -available separately (@pxref{Sources}, is an MS-Windows application for -viewing WFDB records. It has most of the display capabilities of -@file{wave}, but lacks support for annotation editing. +and editing WFDB records. (@file{wave} is included in the WFDB software +package.) @file{wave} can be +run on all popular platforms, including FreeBSD, GNU/Linux, Mac OS X, +MS Windows, Solaris, and other systems for which X11 servers are available. +Run @file{wave} without any arguments to obtain instructions for printing its +on-line manual. @file{pschart} and @file{psfd} produce annotated ``chart recordings'' and ``full-disclosure'' plots that can be printed on PostScript devices. These programs were used to prepare the @cite{MIT-BIH Arrhythmia Database Directory} and the @cite{European ST-T Database -Directory}. +Directory}. The popular Chart-O-Matic web service +(@uref{http://physionet.org/cgi-bin/chart}) creates browser-viewable plots +using @file{pschart}. @node Extensions, Sources, WFDB Applications, Top @appendix Extensions @@ -8580,7 +8434,7 @@ with which your files will begin, to allow @code{annopen} to recognize the format automatically; a good choice of such a number is one in which the first byte is non-zero (to distinguish it from AHA format files) and -the high six bits of the second byte are zero (to distinguish it from MIT +the high six bits of the second byte are zero (to distinguish it from WFDB format files). Some users may wish to define additional annotation codes. An easy and @@ -8667,7 +8521,7 @@ @itemx MIT-BIH Arrhythmia Database Directory @itemx MIT-BIH Polysomnographic Database @itemx MIMIC Database -@itemx MGH/Marquette Foundation Waveform Database CD-ROMs +@itemx MGH/Marquette Foundation Waveform Database CROMs @itemx Other reference databases of physiologic signals @itemx WFDB Software Package @itemx W3C libwww sources @@ -8686,9 +8540,9 @@ about ten public mirrors are located elsewhere in the US and around the world (see @uref{http://@-www.@-physio@-net.@-org/@-mirrors/} for a list). -@cindex CD-ROM +@cindex CDROM @cindex ESC DB -@item European ST-T Database CD-ROM +@item European ST-T Database CDROM @itemx European ST-T Database Directory @itemx VALE Database Directory @sp 1 @@ -8706,7 +8560,7 @@ Over half of this database has been contributed to PhysioNet (see above), from which it may be downloaded freely. -@cindex CD-ROM +@cindex CDROM @cindex LTST DB @item Long-Term ST Database @sp 1 @@ -8818,7 +8672,7 @@ is the name of the kernel only, and the largest component of these distributions is actually GNU software, it is proper to refer to them as GNU/Linux distributions). GNU software for all popular (and many other) -operating systems is available on CD-ROM or tape from the address above, and +operating systems is available on CDROM or tape from the address above, and is also freely available by anonymous FTP from @code{ftp.gnu.org} and and many other archive sites. Please support the FSF with a donation if you use GNU software. @@ -8832,7 +8686,7 @@ @TeX{}, etc. available. CTAN is indexed on the World Wide Web (one such index is @uref{http://www.ctan.org/}). -The Unix @TeX{} distribution is also distributed on CD-ROM and in other tape +The Unix @TeX{} distribution is also distributed on CDROM and in other tape formats by the Free Software Foundation (address above) and others. It is also included with most GNU/Linux distributions (see below). @@ -8909,12 +8763,12 @@ GNU/Linux is freely available by anonymous FTP in source and binary form from many sites, including: @display -tsx-11.mit.edu +www.kernel.org metalab.unc.edu ftp.funet.fi @end display -Many low-cost (typically US$10 to US$30) distributions of GNU/Linux on CD-ROMs +Many low-cost (typically US$10 to US$30) distributions of GNU/Linux on CDROMs are widely available. Among the more popular are: @display @@ -8923,60 +8777,56 @@ WWW: @uref{http://www.debian.org/} +Fedora + +WWW: @uref{http://fedora.redhat.com/} + + Gentoo (non-commercial) WWW: @uref{http://www.gentoo.org/} -MandrakeSoft S.A. -43, rue d'Aboukir -75002 Paris -France - -email: @email{webmaster@@linux-mandrake.com} -WWW: @uref{http://www.linux-mandrake.com/} -telephone: +1 626 296 6290 (USA), +33(0) 1 40 41 00 41 (France) -telefax: +1 801 765 1313 +Knoppix (non-commercial, live CD) + +WWW: @uref{http://www.knoppix.org/} + + +Mandriva + +WWW: @uref{http://www.mandriva.com/} Red Hat -2600 Meridian Parkway -Durham, NC 27713 -email: @email{orders@@redhat.com} WWW: @uref{http://www.redhat.com/} -telephone: 1 888 733 4281 (USA and Canada) or +1 919 547 0012 -telefax: +1 919 547 0024 Slackware -email: @email{info@@slackware.com} WWW: @uref{http://www.slackware.com/} -S.u.S.E. GmbH -Schanzaeckerstr. 10 -D-90443 Nurnberg -Germany - -email: @email{suse@@suse.de} -WWW: @uref{http://www.suse.de/} (Germany), @uref{http://www.suse.com/} (USA) -telephone: +49 911 74053 31 -telefax: +49 911 7417755 +SuSE (Novell) + +WWW: @uref{http://www.novell.com/linux/} + + +Ubuntu + +WWW: @uref{http://www.ubuntu.com/} @end display @item Compilers and software development systems -Any ANSI/ISO C compiler (or any K&R C compiler, if you still have one) -can be used to compile the WFDB library and applications that use it. -Under Unix and GNU/Linux, high-quality free compilers and development -tools are universally available and taken for granted. Even if you must -work in the MS-Windows or MS-DOS environment, however, there is no -reason to purchase expensive, bloated, and inferior proprietary -compilers and software development systems, since there are several -excellent, highly recommended, and completely free alternatives based -on the GNU C/C++ compiler (gcc). +Any ANSI/ISO C compiler can be used to compile the WFDB library and +applications that use it. Under Unix and GNU/Linux, high-quality free +compilers and development tools are universally available and taken for +granted. Even if you must work in the MS-Windows or MS-DOS environment, +however, there is no reason to purchase expensive, bloated, and inferior +proprietary compilers and software development systems, since there are several +excellent, highly recommended, and completely free alternatives based on the +GNU C/C++ compiler (gcc). Using any of these packages does not limit you to creating free (open source) software, although you are certainly encouraged to do so. If you @@ -9003,9 +8853,11 @@ WWW: @uref{http://www.mingw.org/} -This is another freely available software development platform for -MS-Windows, also based on @code{gcc} and many of the same utilities as -Cygwin. +This is another freely available software development platform for MS-Windows, +also based on @code{gcc} and many of the same utilities as Cygwin. The +difference is that applications built by MinGW gcc use the native MS-Windows C +library, while those built by Cygwin gcc generally use Cygwin's Unix-compatible +standard C library. @cindex djgpp @item djgpp @@ -9036,6 +8888,10 @@ The most popular Web browsers may be downloaded by anonymous FTP. @display +Firefox +FTP: @code{ftp.mozilla.org} +WWW: @uref{http://www.mozilla.org/firefox/} + Netscape FTP: @code{ftp.netscape.com} WWW: @uref{http://www.netscape.com/} @@ -9047,6 +8903,10 @@ MS Internet Explorer FTP: @code{ftp.microsoft.com} WWW: @uref{http://www.microsoft.com/} + +Opera +FTP: @code{ftp.opera.com} +WWW: @uref{http://www.opera.com/} @end display @end table @@ -9062,6 +8922,9 @@ @ifinfo 280 adu = (280 adu - (-300 adu)) / 10 adu/mmHg = 58 mmHg. @end ifinfo +@ifhtml +280 adu = (280 adu - (-300 adu)) / 10 adu/mmHg = 58 mmHg. +@end ifhtml @item 4. @iftex @@ -9070,16 +8933,24 @@ @ifinfo 120 mmHg = 120 mmHg * 10 adu/mmHg + (- 300 adu) = 900 adu. @end ifinfo +@ifhtml +120 mmHg = 120 mmHg * 10 adu/mmHg + (- 300 adu) = 900 adu. +@end ifhtml @item 5. The range of sample values is @iftex -@minus{}2048 to +2047 adu, or @minus{}174.8 +@minus{}2047 to +2047 adu, or @minus{}174.7 to +234.7 mmHg. The +special value @minus{}2048 @end iftex @ifinfo --2048 to +2047 adu, or -174.8 +-2047 to +2047 adu, or -174.7 to +234.7 mmHg. The special value -2048 @end ifinfo -to +234.7 mmHg. +@ifhtml +-2047 to +2047 adu, or -174.7 to +234.7 mmHg. The special value -2048 +@end ifhtml +adu, if found in the input, is replaced with @code{WFDB_INVALID_SAMPLE} +(-32768) to indicate missing or out-of-range samples. @item 6. We don't know how big @file{signal.dat} is, because we don't know how @@ -9097,50 +8968,13 @@ one-fifth. @item 8. -On a Unix system that supports the @samp{graph} and @samp{plot} -commands, a simple solution is to write the sample numbers and values on -the standard output in two-column ASCII format. The plotting is then -performed by the pipeline: -@example -@var{your-program} | graph | plot -@end example - -@item 11. -Line 5 allocates storage for a pointer; in line 12, @code{getann} needs -storage for the annotation structure. @samp{t} is declared as an -@code{int} in line 7, which works on a 32-bit machine, but probably not -on a 16-bit machine. Line 11 contains three errors (did you find all of -them?): the first argument to @code{annopen} should be a character -string, not an integer; the second argument should be a @emph{pointer} -to a @code{WFDB_Anninfo} object, not the object itself; and (as written) -the @samp{if} condition is satisfied only if @code{annopen} fails (it -returns zero if successful). Line 12 also contains three errors: the -first argument to @code{getann} is the annotator number, but the first -(in this case, the only) input annotator is @code{0}, not @code{1}; the -second argument to @code{getann} should be, but is not, a pointer to an -allocated @code{WFDB_Annotation} structure; and the @samp{while} loop -terminates only if @code{getann} @emph{succeeds}. There are two errors -in lines 13 and 14: @samp{annot.time} is a long integer (unless -@code{long} is equivalent to @code{int} on your machine, @samp{%d} is an -incorrect specification for printing it); and the functions -@code{timstr} and @code{mstimstr} return pointers to static storage that -is overwritten by each call. If the other errors are fixed, the -@code{printf} statement will print the same string twice (which one -depends on the order of evaluation of function arguments, which may vary -between compilers). Having fixed all of these errors, the output is -still incorrect, since @code{getann} returns rhythm and signal quality -annotations as well as beat labels (only the latter should be used for -calculating R-R intervals), and @samp{t} is not initialized, which makes -the first interval wrong in any case. As for the extra credit question, -the program probably produces nothing at all on its standard output! -If, by some miracle, @code{annopen} succeeds, it returns zero, and the -body of the @samp{if} is never executed. If @code{annopen} simply -fails, perhaps because the input annotation file can't be opened, -@code{getann} also fails, and the program probably dumps core with an -illegal memory reference in the @code{printf} statement, since -@code{annot} hasn't been initialized. More likely, the program will -dump core in @code{annopen}, attempting to reference memory location -100. +If you have installed PhysioToolkit's @code{plt} package, a simple +solution is to write the sample numbers and values on the standard +output in two-column ASCII format. The plotting is then performed by +the pipeline: +@example +@var{your-program} | plt 0 1 +@end example @end table diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wug-src/wave/ppm/allow-edit.ppm.gz wfdb-10.4.2/doc/wug-src/wave/ppm/allow-edit.ppm.gz --- wfdb-10.4.1/doc/wug-src/wave/ppm/allow-edit.ppm.gz 1999-06-24 11:38:39.000000000 -0400 +++ wfdb-10.4.2/doc/wug-src/wave/ppm/allow-edit.ppm.gz 1999-06-24 11:38:39.000000000 -0400 @@ -1,4 +1,4 @@ -2allow-edit.ppmMn0)t슢AtE t-"z#6VpHC} C8 %N>\o^o޽vt??|8=f{}9n/6t:(Oo +Cgu{(L%g8 yvJɲ@=ؐ֫dCTY{ግ-X?9U/qnbjM>a8~%X;s)#rpmGh@dguv` /\J+-7羢M}}՚įbU8D Z;k[iLz.vn/eNͼX 8&G}=CYnQ{ h-pb~6%̅uk_pzNd5=` pkAy?_n0̞6zq};MלC>M V}>KKDU@%N)YX}z(P/9Kzy~d<yjB9Mhފtz3L-ScxBqZCe1NYj qzx[М4jۧnLb|gL֜=,TI%'u,h:Jņ}h`''q3`l;*bZgqĦgh]k!< ! i \YkTg33~h턯upQ=m_%=GZ;oW!wfbq6v7\𜡓ھz +Pr7allow-edit.ppmMn0)t슢AtE t-"z#6VpHC} C8 %N>\o^o޽vt??|8=f{}9n/6t:(Oo +Cgu{(L%g8 yvJɲ@=ؐ֫dCTY{ግ-X?9U/qnbjM>a8~%X;s)#rpmGh@dguv` /\J+-7羢M}}՚įbU8D Z;k[iLz.vn/eNͼX 8&G}=CYnQ{ h-pb~6%̅uk_pzNd5=` pkAy?_n0̞6zq};MלC>M V}>KKDU@%N)YX}z(P/9Kzy~d<yjB9Mhފtz3L-ScxBqZCe1NYj qzx[М4jۧnLb|gL֜=,TI%'u,h:Jņ}h`''q3`l;*bZgqĦgh]k!< ! i \YkTg33~h턯upQ=m_%=GZ;oW!wfbq6v7\𜡓ھz Gя1؟_n_vǷ|Ͻew~~}~}}7}ӭ}W~_v!14@ ؾU|oU?ec='}~?)Ooyy mOr7oo>O?M4g) ?߾է?v?;r7>p9=Jvz[}VgwS;8 ƻp>rz+蓲WuvؤOGӟ2$Sez>zݟ +P̉?g]z |/W0@Ȁ\_W.?[ϼ-VpH{ޗ?6?GK8r7NyNCN_wMiy|T%/iZfӓĿm1 +i*?ܧNi֛㋻?͑{i&J߻.AqJ.'Mz\ݓdh,;e>6CWOM/'eCrҮl՝DüO564H98pe8h#N=B{pʩAf fq7O]o 6 ~!OWG>Cx{O85[q/@Ĝ#1yw]2aÚ_l&˃HA)췼fHӱ(ƦO}7ܺ1`ĉ'4lY/>cWJEIE\^fǼmE.}t}l}lcܙ!Qc<25O-FH}]yI]3A&&/>NAH{/ؚyd/tRGQxAi`*N[ i׀'jE] A/w꼛ƀڋmdFYm<&i/Pņ;FD̛wG Tt"1SΙɠ{~ +$~x2 AW Y,|͒zوKl#.}y2 Ki7{_{yud@x ZN80fcOе[C-c!*&N DKdJŽEx8p>eiy؛f'w_邏3+qd8o u#nfL(z7? +H!?我Ǐ͏^t٘MUG34[0 +Y,')td a e!؅l#M +ˌQW':s6=JK>rǍa?]&R>OoBR c"AEezmGoWH1R~#d4ȑ]}6IB8NNqYB9)3^1dmδu-ӂr#tm|Ԍ +A;%ѐlpz2I1~i9Gm Ӈykޔ*;ܼpf $˺`Xxo!M6-*~2y_<=}AgJl {8z6\0w3nF̀zOQt߶-q d~E=1[q E^4ow٧{Ib NAWT'bEW0O$bDS he/od QB@>q% 桗 $i$#0FHkh&IK~?EׇُFWQN?Ql@b0(G'#xG-Pe8Ce5pN qn8N y3vqZ9]* ˼o(J~q8!+Ӑ!0.F9k>]}zVl޳u;a,|ʧa'P@PNaxƊqAن6:fuLG8mw77zEH1"Cw$ގpQ9woC9x3*^t vgP[K}'!gu݇F!?O!\f HR>eyPt36 Cmn_>x}A]= ͥdt1Qc q0IMO"ePD3 qK(! <('>Ä2MX/̒&/乧1>:"oEQT^"F. EʘLX}cp^*66*096P/2LB1|kD]MҎ7,xmx1p4`ǿ}]=1D}bqȞj(`Ń +:k((btz8=A$o7ie,I6; crByarsC1}zكڪU + sp9 3ABeAx { {x[PL/a<Ԅ0]mc47aA +#lD׶$niH'<^oc~&KX-҄&($ IMv?0T1Ҥъhl(Ĕ<}~B16m<6N 1HTi+6z< Q)R@$HBc~WպDnڕᔻ>3<~Ob^(3 ?vmUzۇ|O?nl il p -U( +Hfrriߚγ^&Jsu%}Aګ`T%Hǽ,|(@Xtjzq71ZT^ -U؛]E7n)'w %q mqT֦G+qxI- &~mkN{cU] 0 b^?t}ôn`W@(92DD=x2%os-xo 3mIzk )M"/YiIfɡ(g#6&fx9D-QZrlo !*b%DlW2:D+HL~~&FhgA_qVYoחegm9ln}qa3cd)=$0л"ٜ {Pnwet9al664OsE&$"#rO|$3dkK`"$L469XN'cwcA]#.n3By4KvNxR9 # W<=J(*S&ͯo)粩"@M!c9xN\4Si3zy%o?dAGu; 41xS? O8S-IlTϱ]T&?oFIn VySI&/|i%l3%A0&>NL>OyU^qrl+ +, b0qH‡)AXz-^+EOX Ulb\,0HuD16k!rr8H*^>wvwz& DWl<\KNq}c㨎~pK:ߒק7G +s_;*)Zs߂ dDȓ_?-EEl/6V#e<52;o iN:S^ٳYT({4JH(>b-o8<=ڱyȻ'vȻلt#A#{(am·[@3$}{9Uʜ7Ocl[YV]PT^)1 f4 'Ard-Kj efʴ+W?Q#3e+ASfwkrÑ )bn"q$.odnw韙ZDK⼋I|%>G9yqw'ؼ['Bfb!wEmbΣa0=K2x(mc`h4fgeDi)/pS<O .eWi? +w4%sݐwiq1|7ۛwKQQȧY9>M]m?*yW]'NYQ&S*=*oG18y-QԫΜgA-͏%rf9x&xt2hflE}s.B]ѭH"Q,b4Rr,^#")O*_`z#l|v(oK.K^μ-;>6$SIrFN/} wg(杉myS^X`ːtEyNO(#rcƍG;.]@1hB}h R<>/ď>΍)yXK]^ʿζdssAo JiލM#(>ŠL\Nm~5Ecb]ǧHUƈO"o8┻ΛXT`9>4L.~q7yx4^( ^1[QNzj_ ʉs./iu9ztQci74TwQNl`Ql:ӱS81:4M%?&Z{4w9 o! +)/ù@A9g;N:("q + +XKN2'xGBʃ^vz60{.#SL4d̃84_^,-/R i|yw] Re8ƺqL J~ 8P/uqhdSx >E\/b)Kʌ*b1MATc5PAfE6B۪[W8AZE%SZ@ zW,Z:g({d_)xAK¦N2[ LgxY}]Ta ,7ų)zԠj 3K1[H?o+?*|2k6_u_u;~_v/[OƕR&y.*~_y۞'xJ9J}7Jk(OXKyR׭y7}p1ENRˋk;<#Ueϔ_ 5!% X;_os}/A& HJSYHxKPihTpqS2vfA9U.L#WEb-n=;TqSԸ[ok-K>HI`kec.J_O1IG-kgdy |ky)붷#e׆d6z>=C Xc ~IT"mV+,pE+/5AW"IS%$}])ss,9*3q&A72NT7ZHsJb]`?f?QpxTL0L@ N}7hBi>i vy )J~/dHA;Ɋm~N4 -nkwNAí:hEs9R$T(PGN^]z*l/m^L9W9=~KJyfŷs9)Da'\' <.$i[QrNF4B.(iRY r?MTTa5&XllTvp]ٛ` ld̃RduE4fwHJ`SZh(FFk,=2JUs0pm)L>aL6A>hd R$Ec=D[k0ۀJpΡzljL&M 'b@bIybj~a82-4,[^h e-_fqV옽Y]C*/MmѢD5i8uLLTΎQ@dtEEic.ZIYXfwhn)ck៙l>DKZZ_ ]4 k>tXH'z-9tm-w*d 2,YuidVM[Zըn!X/X] / G:hKslAQTxI4J9P sC*٭Յ&,1q6v +I n(*Q& t-s0g=L?&t(t->-LrxِUQrM-92JZpJ틦KW$}BO% f`Gzy~p?l_o2*xnrOGGWJJ5X)g-Z2J;VAشWhQ'AgJ7/v%*R{SA¢kcmDn߳3fj&\ǫN)/j6·8 qi14lQΖ`#)Vm; bJ&^zd==BM_GOaK^8m{fiV4jw +/,-.7WE@qyܵ'{aB?GbpڕypݔDƃJE>*feXjbEH'V]ʟXx}צBlo& ˖v4riO'wIOQo4if#c>W rm ҃:OqŎX*P~YEK 7W唕20%\3dny\xa*!+.ŸӰupsE 4LCd9WC;/8 ?.7w[:QFwOFQ|HB읷[sh/ALX%Ay-yR䃝06Z[M{&4-!y, %MYFRmUϧRfAk]ܓϵgTzzN7mqp) )>S 둾7 l(y]* P-NbWXbJYsivԘ[:1JeX.J(mtGW8 MKc][Z4:gk/+Vc+ȋbQ-}tbKVK[/i4W_,f K.h`lc!4YMښ\){g*-f͡FN+W4FQ#YDz8F9ИgEV`ق"'h;G=R GIiphS[P8'l_/W`{z^#7 +Q)i*L424ƺNC!nEpwXr9eY~*{ka1n,Jqn۱ƚ,yJ{r LѬq4!ڤ𥃊7qVע9A8hl58j]u0VMyY &&mA@v#mtn6Es-j!;k$cߢ3i A1>UV|qe6obGCJ`sFIGVrYw5<ع‘p=4㦯OkB:xt]9Xq}Y߮ +Ig7jm̖U ?mS^3YY|nEK {o 0r1nuI|}(+p+~BE6H"(2?TԎnTc^Q˴5ƥbu2,Ntvayp4MZO,RfWL(@ЅdmCFd9EOke0i}dA?S >Bk|?߿8{7/VI3kŧA^HH^`vmŽ=)$v9\Ѡ|J(eД{; +_69רփT=q/wk)sPۈ<1ZʟwVog<͞ I[\^3_E':A^ jVE!-_gBlp\߷g -{V3Ֆ40*ӺFxroE?r*W^Tekacſ~8-Z+eM3]pV6> bT䔅%G9s miC%4F!S1c2}WwdbN!bEcВUsLxZ~[Roo)L4tv}xǸvnt8X3R碙N|=@Q(ߝfaNHqm]c6Y~d/ocܣ˃^G_u^{ks)8fے_ Iݫ^qcp _<1<_ կyĤD43w]7?L~vAn!jdN72Zu$O]բX[/x˓D*f+HW[ o{f[9=DE[vՃ.e4k^쉱e+$: 7֌#Z~k%m Ef~l'4upޭߩNAWDZ(/}et[PwI>~ [ۿ.7>pO_w{+6__ QWsq*k Ϻ}ws7~`E]gŕu= ;}c8~͕1"7~7]_(**Z4.^t!\JS=q>.~nOze4~!olJh&~ۯH/7κ<ňM7x]V2Dqo|ϙ=E t4Zi1y\+%d[vf[S?%ٵ5^ a'D`ڜIkmSNY5}ҹqɥ*끺ũ/}&V|H)}dm2X{"KkJ9pQmk뀞gwmLk6/[̹X5o:@5໾;c '~w=~ۏ0_1ƩeqwgAE7uq1ۢKŕ8w8kE@eRU=5XZ D )0ӸxETl|mD23>9. +Ip: ĎSu+|Mh +oaV0#kZt'Q  XW"I$EXhd=Eb]8hXm)Ҏ?G ;EA5OWtsPzepe >me%m73Rnt]Ln!K-maM$wʍ3~6z,1q=(Ȕ[ Ǽ8qJ?`tQ~̲D/),qvscW=MTc.3_Ǜ4J,'Zz^FRWS`摀O\L"AP0kKM^ t.f6dϚfLK Ǩqi%&@G-O-4 4r7Q8=bd$4pٳPB in,Wz]y+W.8:\]>[ hfsۓPKOo7W-ؒxIbڞgƕ`k9tKY5o:42(cvg_z{3чݯ;vX9Em$٨xd4;ޞRf"Hu\2R,2&BIC.OL.-dD"4=YHcK/s5ɥKvx`6Ik +czakszYK99N[}lNP)Es>W^_i% l4-9XZEp9i[29DLk%2)gI3ҰQUD o4X07&]Wť1q Գv,NY 7l㨷:~g,ME]$QڳހoirId.$]+a xx)ZūWqNoG!%մgxk u*|6j0wMDBҖVB2tmj}p޲Mfkh w9ɫcaD_vz/"42@b;نHEa(|n[ϵ$;kv$` +;XEah.ڊ( ZC'߳nq}{]eRr|7Ҭ@1V^d6s?)t0떎 +I[uTcqscV뤙q-CtqԾ1; _EaaCx]_ *蚝2Ry.V^OXHi쬵1B,Ph'6ݢp7 VF.+mvb+~Kޖ¬ 6ERFE緾Ay{gUŬI󯽿?"ݟƗ5RpӅyF{Z _Lbce,ǩ}7#BBIST V'FNa^dAol8sb55':sdf7Kr\S 9=#xmZfCWsArY-smrsYӰĬ@Q1BW8AھFA/u]zn`Ü#cPen{Ql3%zCІ~,kEƚ6 Ϭez%/pE+y;=)sm9K- MC}dSUә_e f.]P&֥)`'MYPwFcd[M8!I6Sux{ 6یv2[xtUj]8w! mn݇Fr,'󸮋_^#L  Z5]v(2,Qˬ1Hw[oe+%gY55&^huFM ~KX +6N)H71+Ak#Kcet \y PDXbvރn53q][YӝޖP^UsUDzt:{04|߯rwSæax u6j{=Od Ȁ=sZ-|.E82Dq~%wP=௛ u|̞w0`WcHˤepۮd]4w^ψd_ :Ul6⎩n*N4.LD}aj=OT4w?-bfϔ%o‰)VJ!ԯ UM?VNJ'fMd<,vQ}ʷ&=vK 8Nqڵ>FVя;PVн3Z~}[ݰHn:Q:lҌf45h*=8vrDSQ\uoA7!F?krѼciaXi2PV#һohݵp;ٶZ'{V- %Ac31i_pinγ_(#-zo&]ӕfd$BNzR8AsL{lO,80)<<XQb[+ø-֨e[EbUJtWsJ'(]Mh6-bft b/TjEf| +e䢫g +ݱU1TSFåͩk,$A'\&'׈4iͽ;'@!NN_3*0|o흻"oV&=6 %-JjBcDT׃Zc3~QUSsEl&VoQ2$d; e/5>)[:zx/vc+ӝ5Z„|؏Z]e}aeas.]c h<nמ sE1{۶ϚuEQ]؂|͎cY|A x!Yxk_ '4ǂID[ +lVmϜD5r~uT~V3ݬZ-f>Km.ܓ{I=\%boxCwf`. xcfT )K[lPm[мńf7L f~uE4*qG]"D5b6iW0)%\FG1x5)[&B[- P2sŝHѿf9ȡ<;-v6o{pbFͼQ D9p%fUb.f㞵~dKs@[HZ& )Xi{{nYPbWd|-4uz)ؤL$Nq~KT> a"X,[p~Kf}*foKiˬ什%G& 8⥗;RJOցw)PM4P: tw/xtu ilu̪y9┭]L'pǹ.(G'ylkaD- "#JCV-دQQi͙mME )+,ަ)-F^kLIN"lS)Y3ZB(c^/9׫*=eAɓtP eLZ1_ҨEbkwP}{?~cM]} /Q +e1.M{XCi G7ٺP0y]ܿrf`Zf B .{ USu33>.'jD\K eI5Oj`}Nhlm7Q]?Ĺ +ۢ*i@ ,$:sg &KǕ =b]~Q؉b:fysKwugmH_BP25ږᣯtE'\jiόYE->__ݿ/zVA;C<3HEup'3RQ8]d /*>`$j_Gt# +l$nآVMa%6<]Wu}x,pucGEQ[om̬i͢%L}\]k;~C*t%.`/F' ,gZm9OȆΚ0S#f*w7rźUsaxpYwz }m4i!}j&BޖP4싥koڰg#7[FZ3M +X4Pm0/ubxc)G&ٜˤfK!SE3t#lRƻGՏzt8(;] ;E\.,%3=6{^ y{xAnumo繿u埾a:aVhws(ŵʢ1 :1߬f6 g?xCgeW5%Y_G36c N/lTh靻 icke@Eœ[f_Y M{J,iyC QjiL+s{o*% Z —S= ݣ[HLj:|5SDY:SM!2l~ԑVrW=z+yǍN~U%c`u`ix?~(nkYٳdxLn)؃VBRo2+fC#E` + #1獆 +K#3# S2L(Yo흯Aq缅B:f!ekk) $c4Rg}"F?Q$ ֪ Ǽg7:9;Y^ޑb]X@!@^F,3'o>/*%%f!~|s:oWW@Oz~3#˯84mG56o{ay$ޮէ=WN~*>Li_w&Huя\t믌x%O|C~墜_gO~%U D]2a?ӹ@E_"S+ow#2D +mH7D +8QlHņTq7>Iq|s⅐%P o|݋_x믺Ҕ[I)D8/yq]?ڭ}/2/M^OQ uw, ~h<]uk 촅0,FWGQi +"E~}:w;h/F2Z^4`؇; ߟb^a3X{ʷAkx[pBЛS?YR3Yw ++OxNj{(׭I?d[CjqN܉&KJQHf̀;t?D;67/GSQJm)6{^;3st7*xh5)~1}K~TK cq +`*g*aݤelcF C(N#'阢?q|$ҝqm{AS{'yoxph]Ozi,QbV|uՑzhM*<,b6HB /mLUүOg6ioIQ1;Q?m E,Riã@_W.JG0^Гzi \S(7ީ +/^cwĢOZYfouR!3wޚLK*7/<7P~K,:E +`AF@DH"}wg=4;",׃6; 6ivQT-<+[@#lKF3<{ +b|; łBtY \O'z. +\-V<恔g=eLe\2E:BQ|2M.2WRbJZ&p0+bJSVZ)j>$/f66ضnޖm%je +I +~R$#h񼳢.Ag?7~Wb +[G7Lc+^rY?<@,v1=ˈnZ\2K̾G!QZHs/<1KC_qy e{!|l)"ei%J~yY^_e{Bhosưx;sb_P餙֡Z) pdt@^qK FP5y[[SK1["] /x5dw~ya<̔m7Z{2-?Qu1$<{0WJ4S4i{UZ?tYιhŹQ0I>E~￝ZmEog ~ĨEynEt7_1 }͕os\`΁xӵ)-1ތ|~a>6s1㯮6cq7EЇ!RpSqp8MJ{+ow>?ַ KXWPQ0ڿ +i3c'aEI/gdWj +OveXwڵ[]HbɎ( 9*j,a{foG q; XfC/ LQK3ޙے⤩܈feYs ]0XL1&_Ƀ_c@8[_tbㅥ'n+ w8fu& wU@ƘKK0dѵ=hg.{a:R ٖCoK@ZITٯ8d0cЊ|ܤ 2A:83Zx{،#jsEY$wI JYPGdNڪg\*$bl``sRjԞ7ek 2 I]GH`}~pl\3i.S$\K͚pe2nWmߺ7M`:ܩxqcK;-H;!#)A&egNUdXؾy8t +֎D,L6bEܛKɫFKR5 +ALby0b9Ci&nzt=#Y?[oڪgGbz}`\5-t"<(C +W֌NE{=pHnW9h$W: mذϏBpY<۬SQ&E;w2*jfu)oKX1o" FKRߨX8}K1ĕ#w_dvJ̷tJӆRMa ,"7KԞյ p!>jдFǒ1+ʦRY`Oi*Z.sjW~`l O{;#9%ic*a*ޭL lI <4fLG/"$ٜAȾ)(`WF@/sZd1˲ôtF#BN9Qg3ZT)D +YI/~Xʱ?ڔC_q_hoe,1hf7i E.K^4l^xl ƬI٨x⷟c͎L{]N۹=X g-*ulX屍2)Uژ``wGF \Fۘ˾6L: d "z3ݡK-x;1fO{ngj_LoBl`=FzyO'|oqmrkXB+n4E~Yt{04nn5vﰢҿ`kZH첻3 7hcD;WLsPѮ=,bHҺ1͎W<mۑu=;2BS`di C޲ܭ<ī-a׾iU۟^4`x XPi.N"],+[~2Ź2BEL(m}[ŮW&9kܳk+# _beڬ"ETGCHYY +vbkhÿ*2GJkc{_T1RDNK늞WMBhteJwCvVO6X%\S0Sv 3+kM:Nnu--(auҰ͚w~-'o 4vqGg=m@uR-~XU4`/q ikrAǸ"IJTQHNl' Kΰ miѤY.̼z5A+P>t,Mbwhgh؝3~5w<>?]RWQEc O\g PZmĉzZymI͙]iH--dy-E"- +,Hw.V(s]zwFvQ0+q1/w^ja~/v.0xwؾ~BB( ʸQIԬ㖚ҚlS_*dԹ +8xΎ^.oG5Z^u"m.(rb=x~/By2Ks+nڋwS[ڧDr@ жq[ƽ +zrҬ a~<48uWI6q8]hex;d[_"Z(ЏV mN-Cxd9îE;n4);ֱ:~X$Z6S`$݊M⡦~n#uIQk +C(tm_^t8Gh5zMv +ڵz2%ф*=4bA2iY >GqoK C`9*z >[6b-;9;/ʸ̚!=cեUy֌Eg9w}XBCaWU31'.A8R&>qT6}hw+Ei5m)V|Z2RAkϻq8iY3ncjpH*k Y{z978Z + Ľ֛ Ȕ@- }Q\(~#[E0,F7_J8EkK?pg߽iXؤƉ03qy.bofhO`YV2Í~vC@IB qG;%\FOʦeE1ѹ>2ؚo"7W E e mJQwǕv#DtONͱN_0U + z06F8^ҋ& OK#;V9käMktΘfo55гv fA<?E=6<~M7S{HWzMvŨh^c XtNxj aZfC,@LD{F[a?Di9Pĵ' Bt136ϓnOyĆ*`vsZD.lf-]&;[\\rWB7 +"yk顷%0>ub*~|A-fWk%ѫe&CGefFWhYP(Ч!x2bzFKgfy:Mzzo|!JV ùjv;I4XS ܅rP's-tmlքe"ANAVfiEuJ%K*fќY+k02l~1r`DAQL=A|lh`57.Kp +TGb LhrA 4њlv:Qx &e{y&6 L[swe-r HxU18WGt/\sY__q'6jqhkc0/ +W1[Mpka#G6xhN ȿoK$"*X)EaҶs{ 6EkU.b.Pi[KE]nZkRs Utk[{z >̢"5c1geZȶ헨:126;^Op^qsM zn&//qE^;lobG>?zޝ_g%O||`f_لظ{7> 3Ws߽@]|^'}ݡu|B`<wzdϮ{/$>" u<Եq%0.ú[mw}}4gۆI?]2&ZBKfͳH럿zd/%,oskVb6}\֙^bt8q{Ʒ2.wڲb0, Ԣp"ȓ~S;W^g}7(E_\ upy7=GSn#KRJo%'|YWKĐ0 +{YBdlZ_w苐AbC3q|5űHهc(ኗ^igC_q*j"rkYڦ\a*S벷ż]WafƨUn^6Td^(wmjGZ_LzWp`,"G]FNYbrooKXY{i{ 1<3ޭOKjy˼PIVjƷ%]#:1%#9X^arsg"7oW-VC<%,'2^Lv@N@7N-GW7CPμ-R4 + ^9\ż;WQT a~uQ{8է<)f)|ߵ1S,A836;~B!n!Gd l60[Y]:m}CY?JV|OBzM~O_ _v;ߋs~3k:05gΊ"Oa&;1 ha{Y%XQ8=;6+ cM}c^4se[sP"_Ebf5L x[fo5i{^'eWh:hdb=O{Ox֛Mbx\w0zM}o<9>zCq1N"{̀w¤w;bPX`~2E㍻xNT!gx+6h;* +__9mZTK86.s&8?4b wֹwf)RWt\DΣn7_?#uHV%,{Fik&u@`Mzc/HXzvyxq x^XƜAv JKK>0w(ԗN +u.[o=Fzv6*v69#o}˛i{$KZ&1yD)am$;qw`cq(Ĉ nG.*]I=滾; *F/SI~ /  6\10 %wAG +fY[b{HE~ "/E lTО}$Qi;m=*iOnjnepV(OhѾ0R] +P$qPVx#huX +KJ] pOR/Qct=8w'm禙^Jm6cО]L3?t. n%1O[ +)s?gq7(V5If&͏&!   8${owTV0 J#y-/J abG{ӟJL(p_G6pC n't:{>m C`*Cp^d\O1Nhbz)/Br#ʴvYMb˝^_[%{ibm;Eε,WiUl<Bsz&*%/@/V%MFrP5, 98㿳PhXݧ*6/y6Z8˺prQ>X`Vx(~{oyz@b@S.gX6h=WΜ&!k=?HC܍8"A\۩vr9Q,[ιu%Dӂ-ɑ8~}v6\mv6tG7S~.}h5p6)ߧS/XtLCߏT<w6He +q'!Uyya~ogxܘ^?G d^4b6[p"Ѫ,-Eϫ80qN8 ĐF{ԡg;8QrSUx,4?ݮOFO:~?[ܿVRk|u:/"c-m}@1+_[7$\MsFw]s0;+tCHy hRMUD.G@lڵgm0v"l1Omd?No!-!vP$>.F"E?rQI7\!pHst+9XŚ1`mkOToHafb4` li;zTb k? 94T̷F tWj.v + +k} +=qEr6->ueW]ȳ{" \U a\?Jsi-<_31!͖JԎb+L읖tL܉u_oSޖdY4̤nՊAzyjwhFCt`n' \OXvnY`N yj [&.0zQVc4yoX14|n1^"ﹶ]#@ ~4Їϭ7pԸȧvZ2 ;v~b>MڧyB&f +,q)%/oV.Fm5_ww>g]XEQ `]G_QqK^[9hGÃr{{ֱ[osJkcqZ2BmsArxwt&&pLJsq,Z@a\0|';1Oy6ʧ!'ů8/i`#Fقlޖ\8I+/sGϾgqˆ>dH,6(>lM [Bq+-t[:kr! N7,ahU8"obT8O{ݨooG/+h0Y0_ـ5;\0Ӊݿ6ZC jn T<&{1\3~J^\үX|$+ +ه®(zvMҹ-5gDsP%\1.M`PC_qusRQiG&ϿAp±"KUc "HCZ4 3 L]u.#Hc4>pۏ6  ΐ{§>`:#Li%zv,v(DKHBqFeQe/r8M8еM=H2P+wl!vP"yeUhoל8YҗngD Bq JseScx^t,nmvl-uQ2QQT*uK' 0ع-ԎIZ6{-aQYIAZhh$Rx@Ac]aJpKE^=Bi$10~[嗧A/-؅M2JO2--NLz7Q-GN+8#sNXâu\\? ~ړp{!Eی@=K7y4Tsw׌Ǯ\WŮgـEA- +TCV)Puswea9;B~=ښ*|f0&ޕQjA"~wZ\}F< n2q߫2(r9AZfD3ӂ]86ḿ +&};.;\h +\fSVr乸~2L:In"YI|W].B[fٖE~nil`ʹfPg)%g՘T^_'9YHP1I>hks,@aB- LuCv(L@J{W, K?L1 2a~k[ZJQ^[VQGyÛpF_]$E_P+dk\\\dseK}g@5 Ա=~\EdƹlY.KO9zpuVMqIܮkKϤ ..Dc3oVfzS=hp? o 1!Uk%|*FLdj4 TM~$/pf1𝖥,LrѮ*8yIM9 O UXX50i} , JN Sz%":] sPTQ =,mnoWo;TOJ zivg1].b& 8^یN*u ZOu4q+an;dQ'9T,V!jmW0|12 U:s5;m$v3o^č(blGlW!\gxhmI&V_GB yL ,qnZBCl{yw}g4/rvMzrzƄ?E zYsMZ;/ڙ!]f?-ӲHw]gQ\_U{gm Zk Vo;~3^_򕷻e{|-W˧~eb~9~X:,'=r{rfB+^z9cn dFn쵱0=v |zy ֪5'l `нbG$[{N]!2K +*ZEhinĀ-YJG̶g_\{csԲ5MuYiũ;9> yo .QbZ襉&j9Xbuލ£n1(<}~d9Ch֌QQ zƌ6f4'L}C!L +_\K'(Ý)QE4-Ql8Уb\P(]g OLKX=l3![/pK( +pq&u!LU1QO^6)F%+I$R^`9$鴹v-ԿbҲ^臌$4{=Iy/T\vFʅei邮, +O~ocἶpe{ɾYdSfb򉱩-dH!T yP|&Y7Fʸ{h5xx$ ~ x̏cÑ88FrbI)^xXng@w:('&q+-mdꐯfw"MzSC yF98EJ_ꗛq~N(;J:IG$ߗV񕷻m6cv&b6SYobT1~zX 1edƨU ieʈ4R:|.sxݰp6{ǸDڋ)v!jrETBhe0r/G\@6{X6.6A2=pkdKCل( +Y6-d)w*VAqȓ mAc[h }|XTַ)1~w%Q~QәqB19٣ؔǾ2_H  Xqﻥfkc(' +?JZ9q,iwM}U7:1Yo)6 ۥ` SlnyP,MXԛ%N`Mme!L -7ֶzT׾~8ުQ +AuESݮB/C{H1s۟f{ ;zm-`Oo7*Ũavu0(מysL3~ q,3)8~KM]jj<`o~ %Tnwk"H8s&-6Fu{`q7*:ͱE9/w{6K+*59+g 򫚁}eD&UO ң@ECQ .)6lM5FA'pL9#aqEYa^M!̝+X̸kj6k9 +[Er֊),9'(sQŁ䪪 H݂Z[Fߕ6i,p]~sl~nTd~؟6k F %2T5 +1>XQ& 0 5a }2Si䀸e^_FD\ͻQH (68Ck,urL,p殮ZCA5C{1? F]g?xӑ7d5چ&Ans]$]Eաϳ(6@zņVpcs 1WF]v&gmwzC)q 4anR֞<j5uw"_IKHh cezBYwZك+ӪYwQ1[Ʃw4r8 Y&IS#{jlV[,!€VO(|i31sп8WO|j `q'\*8?"' ߹G"ep`PDȘqn.6E@&n䍻Á&DAN<1}-z6p=fUG?S9 w/\sXaf +G.BoBINE+bC@4h~~3Em:b;?-=}azS0EFĪ@zGQn3$|Lyv{v:]3k4f`f1u LKX~L5Ѱ˱XC{>;K׆SPfIfMOhjsbDS0w١o97qį(?F \Їe'HxY/[KcOC\:[%]o_y"" l`3z{E'5eaS8N]d̑+ԅz&OiԬ5#,ӧkO;1<_'6l*P#buJMك-mz sQn,BbSbu;^,EX% &j[#g;JQ3Kk} P,}VTYr%(Pԥ߼}@9-~q"'=i3bj\Ff}Q| k\49Sխj1;s۔hݷ2 (zXcQkA|ds 0F+o8CMA8&UD]ڤ?*K2L|X#0)aO YpmCkᯀPzm B% yObBwx¢gd6,i fo5%;7Muqde:|'Jwݵ\QnE>, +"~U`{YelN;Ľ>ǁEu?۝e(kI.cE@5I3Co;wt +wi/i2|͚]pw1~8Mk/,S8k7ᷔ,A1N 8aK ,k$dcxiuruZߵ}=zvҜ(쓦 n)FfLm4iz2| pYX/ YH1i$+jh Z֙.Taw_lWoMt=p1,\:w.iogatmS=0 ,I@ G[4I*.J2f<s#BKeYV'|*^c]//o+h#8՘j QwmgBUz=XO~Z-5'P( ;AƠjj*c/+~ 'V|32ҧ>&KO*֙=%[reMۥ1"b\2hvF[>10k)[-̏ QeMZ2sׯqqIw/z4(:k7)4 )`ZTll؋^rAI}`<|&r;SiArR4w]\AxQ1?/IVHdx rdg7|ٜDAi~:VEspf#!V4A=C4۝>Yk挊{wc@ӡ;e߇-ƱaZ% ]t3m4d_Z/(`z 0 +C42QZgQI1f1wFc^c ˋ:{An4joH[ +ax9X󍩧V}Yzb3wk)gᨾ.^X]2>50"\FO+.&^ X$n'xUfQQ$0ذ_swx ;e3.}ݟZW\foW_"փ;ebA\(Q>rk@)\AY^cmH^ͬ)%膏y酹gd5zFgM2FE gQ[~"u癉+(]t4J.us3ޖdX#2ثڠ(@h"Hba ES ,wiM 1Iѱd5ExfY @Ȝn#aeU(j.l eX@Yz gg|Ud=U8bX>; -Y]UNx9NlFk#k@dw[lv.JwfKtWCH)YV]֎dw֞ak\]S.rt +vp[(_LHk3\e"+5gߟ+ZNAuyX.71-~<;~rXoޖBIhgW>WL[EwZO?@+g VrvjG۸kx4%Q#K 06-t/`7 9eߣqWf[L\蠟3ֆgN5-nп$y\͞,K;H B|t6]YrF,Eo`&:HM>s'NQ4 zV(y'Mbm[ײ[ Vd.hL 4 +şU + ڿy&$?#ۓ 1ùpⵏi4sqQ6H`OoޱbhtER,N h￵lhEKc3?R?Yo>൏XBc@.H5 4q2,Nǽ5&M&E?r4" Xľ_H,Qee8El4K/w; f.b8~_[ `oɻa(N ]nvlf,'M3 ÒEY2"&y!dH1bEB1)"ޖ;Uzܵ,6^lo#kS3Z26b$_k̦8xA~_LOoBmT )m;1W<=Esun!c>{c[~6CtDXlny^B{6`J_[:$C*>ֶ$Q ,BEO3ЌKs?"No\/2Zc'f1 wqdm.U,}DiPlVҴVjr?@RҖ"o1wqw;r2#wG/m_4, +D#,b_PB)s; +47-M]`BI[5wiѶG$}jD"BjddE{m vɌӭg.*ڪwA q2,;Maܺ>[TBRz-t衷he3` +ʢh>NW,]6¹ FiŋEȉ>=taaFy'4j8m@V6X=v,&9p`0,@Ѯ_rZݰhKld{TgAd؄063-^7s?bH/]f=滵+#kUBJیgklgjjf䋉C!p]Q\!]z~Uҁ^=|&uQI7?xMS̤IHJ."Л[JEFiD- յ +7f@k_Օ?zar̴bUC Do^/ G`ϔ]fBfQ'[s5Dw{=f +J/)w183ox(a3!CM((}$[VPڬ9GrYZZdmdiߌbgI a.n|RgӽPEE[Oy[B%Ègj~ 0l6ԥ1Iբ~a?TqĢoxw^ztZ8mی8 D 4W<$r٨Ңr-݌/7piFّeD}w܅.{r[-mm)뻿)W~ߓ#6[mD7^ηN O/'n +/u9~ݱU 0C9V Z/$6 !;m1?Nk>:OG΀#p|}>:̙kRPK8 }ė="&vXkSC- +e0x.3{m)c5ÒmBl&R.tީQT>+ZJAߍkړyW +V\)i6Ei5,ցo-LlNﰞуVr@VX~ Fwy[JهԓpI J`,(Ttws?kc;- + @9'uHCi|;}~aL K#e&h#acepH1 M%DiYlbC/+9ߌgvs77~Wʠp;$̌,/~eF(sF6¹DQ˟\(-Z"qD'>_F[nFPE;wC:#CO + }57v֗}/+5FST{|&V/BhL"³g ^%t4ז(Zj\Q`Fi2ApNSiA'cڟ&/k);ym S5O(LFĵHCZ+DcS6zϋoq^r 6Y)W$ѿW[I`Duwg}1CyMwv$Ξ ׮ydr2Cr>" +|o<9jLM Յk[W~wAⷐyi-D`/p14X &mU 8)Oo.6aʰ=+Ș~$:nH_3oK|lp>B3U8 zW,1$f,&FA `94#AWа,!Zp$ >p2 ῎RKٹ/+:%ms~)ODyP"?!OTi`),הȶ9(y0c^W*pۅXb6YM+ ާoð ixp꽖hNe( \E_} q1i$ȜsXs'"K ď@|/c6Gq %>9 ۝^yrR!o]{܊Vq4*BK("Ѯ=q̡KCHhXhg46j>(0_{m0&)$)"oY~,x=G]&GVc|T=4WB{ȏp:)U(0092Mev|\}[2v#Fs\p,Xpӳ.-`% UQ0,a {Őz+6B1"8YT2R /YM|2atˆh:?x'sL@:^mؤ|3 !L8qS8dYi~:PBR(7QI 2 \=hڢ. }bvdW䲘) (0 __$<(-!rf"+A54&ɮxwvhxn;ӒgzC*;2`_~t02F/4;y'y4N<9BSէ-d+ɵh6ET~Jv,].-X~Ƶ-n^ W I>~s&-IK'+c9)G]rCy$-'!DŽ +=ZpB) +di1osp*?}c"W|m"կ2{&F<+<9 +?B >vd쏟]oyS]k & !3xr{thFfEXmL4r.8?EP{V潵g12z6n.&B-&wt^g\ƕ-gzcI&rΚq>,*L shT:m9#^"ެ|E[Mzր\f'snjPU.P7>E~BUu[,~~<;# +]aY`Q"\55*s\m N=$;mv503~*i\1}o£>{yc+o0BL32<(-&3Hd׼(Gfdlܟ!apʏyt\Nv|\l0m22#)G2Wn|55˟ɍܞ}'. q34z-${ eLvRQNII{̲eLK[0UJjS{i<(gvc[#9 qcƃtn[NKcTd5T߿Ռ4E+/아MqnͽsK6"bnwt*3@{=xU߸'a ]&2.5g <V\9li{A))ޱH4"}L,ڇx, ~_v!<11 /l۶?1 k9 JUtxe.ڍMfGBG21墊0BޝH)k5R56k_zPc94ҳ{=@d% uejBߧosf0_2cVv{+X`_J9tmF,rO|l]ٳn7]) vF,c[ +C"< +V1۴hK;(u8(zhpj뺀WƁ q +؏A--O7qDB?&?Wp~qWf^A1g(={ Nvn[;}̚v98 :08q6@f'^E@x2{n۳6?Sŀ=ev&7]C])738Ըlb`r;xN$vvW?kalc6v.=z!zѶ`ՀȐAa@ykEC]GV^;L(Ph'A7[Wt0pՃLas{fikDQhZڥ0dK &P}=Rѡi:%y%%6u1cuR,k?弥Qι1ұ!f庻T7J'= xƻ62"Wi< B^ h`ߦ<|$\S݌ ۵cy;`ha[y<&el]Eڵ]L+R ־f|vV򻢱$d;n}:p{)ͷ +խڐc_F^gٵW4P/P14Bcˁ۲Y;"J\/?'|ޚ/r` {ztq0tt%/zdV + 2VO!KPPq{RXYxӘ2@Wqjۜ zGɋ+$ `VMϝkDQ䟵m,p"_G^ YE {*oK0e&Iwa$/BY4r .m'WqlݞV-hQU!-{F3k`e.W]z;xa.i۵_ TѕI#Uϴض;z|P Q}8]uRh י_R7QDvb[ =4TDE~YݹzE͚V&u,zD{=ny~3DQd%‡qU5Z:u,/aGJÜU4am82Mv<vVǎrEu .ۆF:39(j9 w@0]s!fnF0Ú iQ4.ZGp+0:0 [|[؏GoaǪ Eۅ*(aM̱O;ǵE;h6~tRz H,~D‡<R1{-^^_Z1{#GA=i.&[$7u~ qҴ}Ԯ(ֆ!T;\+ָ EWMH)Yg* A_60V,/=7#{#en-e"*RA74ϘB6끅'ԸS{=R郝aTDi `ym[Kg];Tvⱂbݶԫs)Hg4h}Np.`z[ +5S[yK(9\Dˈ8 KC]#em@nQ-^S 9Ћ0Y_Yv1rk כOD&=QT;债P; H Y* +@ƮlvX58nH1ZQ>0`SuVӘMݵ/={7v.iov;ݷmozUyq*C\ѤɅear =SDs޵}TwxYzj&62) +nNm!5Ct21Gx1gczvx 1<2/^+~oյ[gBfobnu@:ix 6`FDmd/ |Ø7`/oPYo +r_b0NAugvG%/ڤZ|Mh}E,k}z6^g4UJxދyM+H0nϡ,defaUzb7Eu5lVɏ/H)瞙oCcScnM\+EԩT|4Soo% ?Kb69i&Ȍ}?ihlדLl9s<b&@7MhBiɻ"[~[ 0߂ 氓X+Oz qc/**[)de9TM;i~_24F)V^+)X^wTZZH~MҨ7;lZmJf)]Nfh,Y@r43%Rc*ΔOv1tmߊ+r`hH=h#|ӏeb?aW8N5W|*d&0+vC4=Ef'n =EDC^u'\KIɌ0W& v+UWT~1bdug!2 ^/t r 6xa!^{77p2vvߖ宅3 +]}6-h>5(N2w(a3gyƓs{Ǐ,s\Nַn\f<>PTIIoH\JwCJ]ԘWQN6a+TwVIpL<cߍ97+v2uI&xnu+iJ.޿W>#oy'ȋVmXc2?lfeO!;߂%t+De8p(Q)< CZ-\t(Jm%T buSY~7LOmاLpK~aBWwA}~9)`2'Lv8--Jud5OٲX +y:`d 'f˰~mXkѤwMng;}5xjlN@{Wi 2v;zJpa-F iyɼak>(vk?Ӳ_ɛM8Fcg"]4Il1 ۜv8O3 M1}_G i>l#NB¶chb'dӺ>TY["'m N.<*fLGS> K!ml'= (miW2a&=qMF@~C40#)hq% 'y#) KȻw /Ip&Qd૖n&Dd\oH 9~H]@bqAtU*B\9D> ΍`MiBFWZf2i]#z7 lUQY}፯&6<-U,6_&9}2 bӡ L?aZ(s0LUْ^g풍繿Xw{\kK4zUf>W9MmlJc52|ûrXlҕ4suL+7ĶCww`j"vXX`[tMEEFi?6u5~| at13๪izd^rbu|}o2B?R!@H~pוR}xF +=.͚\"*kEwR0bN~ 1*Oᩍe~61M +) +ȿ>1W9e0ܟP:(8@ RA1>%ޖBG5^H%uo=tH 6 "&`1HloZAo]a]xV{RڣJN׵m1wtߖeVpAk9~o4EP8-X|Ӣrv>&Ѯto}~bC׿3(qpo|md8,|;^"=N**xe{_v/ WGQQ xLdJ]9Ü뻿3MJKҘNo;ǭp/~e2P?Cq7h={B2gN'wyp+QZ(?5K8AEqb R'J_1`XO/t>d;=y;$+<=s#mGwhwݐ#9A_q߾/ڍQGX&""#gPu?`XB)XEQ[Z9VDAǴȥ +<;55,K@2ԋ~%'igA{ŷH~eZ&&_@nmh8 8ф +qis~ SZcMxͫ_VH G(0;CAbc +MqD~XEvh>II~Ox'CX1z}NBm#ehch]T\ Ib($L7Dz[u qYo{ﵡHC;jK/,r8 /9 kھ"̪G :6;$p"h-T:R: \}gOz8|5n_z޳/ӂ= Q2+eWQu\ p\gK*I/kLI,3ΊkX i J@ٯ>I!|d dQ/(?oUˣM߄k:,믺2~eE!^@zov-@V)W ܊'JO$UΔՌ c#ǏZ([>HC,9$DN 8xhj J#3}2S-UJ +q7seӨ:+σ-G|&oeetĈGeFT1*?j2SZ3qOh)~b ^JlY/?wi;؂5)`b1sCɠG3Y YCbVĊUۜ&`8Gv{3.F~ȃ{#KT~ţe G tГC)R =h4'뻿/,gy8 1I.޴p"!gNoG9Y> ADa>"eЋ4li1v&HÙsP|3,-Aq%O5I)3h~Whr҄#$ ^zLu2ZaMX^Li8e{Y> :%B2kԘc4~h&ʌvE'~&PAt1^Td.MQE('dE |ed bx_LJIo,*=|b<^M$YŞP&v9#.Osts1miS0 +̂ :S' +]&Rq%8uuB%"*SO%"+- v^M©.0!#-2c[6XED }5L  լWubV}Ne+w^ҔìXJs~ yᬨD0(6P"Wmlя|f9^ _lc O])3ݤ9<Oz `i(3xi؀8N }P Y]\\AkFk|uعk.o7y[޴)0T6?¸~'CȸZHŵ}=Ȱ?!rfg,}8żnz/@iS,JEne7V Qc(x]5iBYU+h5{hgJgmVzQid76\q%"~⢒NM .~Y."=pӥ%Y1K<'W2Jy2N.лӧw CECZoK1YE I5-'; + / RڟYIV@qZuqq$K{?Kn2\ylfIh<@aY_xG˂7ɡ\(%mFmXի^rh3*놛n.=׮?0U7vra1Qy6JcN nm۵:(cᇥqQ|H-SxҦ,,E9孼3A-d4LOO/K~8nfrȹ2[עG08 aHBrY>(~d4YfgH_%vSppTFSw9XI!N vg嬫l (GB KrD`OV΅d-˘WۖRf`CzAdTJN!l f-t<_%iϼd߲ҭIoŃu:X_Q梘3:Nq- ~|̘omDdfaSh%2  +Nteu54œD1ſ}[̓| 8wſ&3EY<'Xxb0WY?4sQQY[)[4hWl9E?E9[ olN,bKhWkϼ[lІ@Avn;XF. ]ے8f?]'0BH,իrPv)N+sj m8S~s~ ~~}b4ŘUPhSϬME?)~yy{m]P8@1_ٸUJD]Fck[1@鞻YKitXf` h~n{7f;~E'?/9ybug#cy=sdvCNIzJHw-oEkj¹n"piT$p#xUg liBKEi0Z*ւ@QXrF+籜SH]bwMyh))X[#b{BwێW +^TAX58wm꬙NpXɂ:Pg7iWLa 9죥][s[r!XW 27.ƎAѳ%6R֬:>-pr +wsۄ9k_`|nmi?BƶR8X(v. "Vm=_TͯK.y)X]stzEq\@uEk;n'T'K` 64}6 L(nTjj7BKy,cBM#R$:`FTy:<۲k/B-(5RE͟[kێhp(hO/,Xv@ͩM;u9Vb̢Xh Lħ4 wIGkEE٭Q0#MڤƶCf\r4 lY/C=#Ѡ:6q}n?moW#賢 +dսֳ.{JL]{Ƈ{Whj'DEi%6JO-æ2Աc+{m0d^~5(CT;32ň١b'eQfUsrQ<}?)n6NvƝka-фR`M;&Q&TdbxІE1˕@rⷋ\[Zu_5;{lm h"\47 _>;[>^ +9s7*u.<̽qLεPۆîТ!Q\XoyۻWuv0FۉA4V1Ӌ ȥ#(; qg( kmM3+Omg6 +_E +i{myeP T?iOAY}j!Usj{TT$hæCv2}0 \ QB>ӹ.g/LưFNh;!_DiBVdZZDV\7.bYh$#p_EN\?"1^h3b-oŎ׻GNt–Ce{XɈ-EE->g[P3D®lq(R-pJ`!6-QUb8Phs 1vai4ۅ'LFo&0b|vx^w'*#NuB(Gb vrS{g^6C-30Qux<3F\[DC 57 l/EE{gvw i90Yl9|5rՋqXEGkAUd=1et}\w.d?o8f0ZKG0NZKⷴ ;F!ȓYͨ0h>YESUtPv(QØW^vB2҃O).~vmmU^pM.= .h J_{DPF1gUo1yw7}PfVQ՜+&RVlWE%. Drr[FE4 @EaVY@=i.L ]LU(hG66Z(3M7˫3b3:U2]fc^MSF![פP-@a _a҂j@xhts?̩Dlp*9KP* t/Ս spFƎ҃QV%A1lTNk,ִ6 xI@ز4k_4u*r&DGA&wprE{3,yǹy:k^ZWEOYsGGwZ/n?kc#$}__/_:u{ƿnsWw^K/5{5uƢs˾6_MwƇO۲٤i +Dzl t!s2Ry$iTEwzք?{m<(gc`>mo7w7(h#!omDpG| 6h6z`Wz'"{Ps7݀{=m͂V +#ؼC#6<̕<}[kyg+qX#uwibonU|4ebp 0WCLmfڔ_$07 o0h:ZkMbky\KOzoƭH`i&G`>)O~7N__pg_~~?p=bi)_sv ;~349^g_W_>_v/bu#<\!R[;}OEq+?bMx5F⯼mgHe{W$JGkz=Qa>0sﮏBO +ړbKO{fLKѳ3 PЉ]?Rn +O3/:{XENT:,q8L +t.@9meқUw몘7@-CPO"'fv_ioi.{Q1hRx`QXЂP"mI#MmȁʁI̶lcsA[Sݡ +RjyϞ,I3w|~sk꩷ֻs1?ǜk>E{3h/ڟ`Gc()2@S2D{;&ZS Po}m8NWp\<9vHUD/~~0 +~!9yE%2dz}~q@@M@xkG2m70;/g4bOpC_'ig:FMCVLj%<{`MouG*5iQ "Qk +M[% 쫇ExSߴFM,ERy@ȑ7-i7Q2m0kKljNCeߴitEvtIk2R4ߔ8Zيz-c` 頺u*i8By|͊;  6\|fY,b۾$06t8 +PbY28p28nR뾡ʯ9 Nq.GO^oy[7|}d`uFͦ4tkll83P7mX8yc.m.~X|L\_vcJxjer "N| !X|Lԫ ֢ JY<hΚD9Bלh@fin LKl!5v.:(4I}ӛ_&BO;ѡӾpL&si.@ylwRCD~3mT~\5rm<]}gyBvU=)eZLy708*2ܻ[pKL-cV((wQo>~g?4c '}'_A;2 mD=7؏Jy~V|(>1؟p6+![riF(8+}qOf#?7&Ƿoz }m$Wп]25\8b(i:T%JC7^{d-MD븏} S'qg{2s&..#5-uis5JP*Kw'O07,9.:F3~H"g.GG"m e3)@[gi Eo!'cV(o[ci<#w-igխ2K "QĆ(>CGhJ󼀏dp?= l0iDƘ"o,..:ǧXjnƶO{Kbz p wV20k^Hjdf|[~ G;%36hf -8C/YƑΛ68Ul'-m)AG.IF9C(CT )E(5WG9V6$!˟&~X(@! fA8 Q&C܋>z ah+hKh֎ۖڹZ \bqs|,7]ϐ'qT;p0j%B]gȤg eXҦeRJ8ѪE+Y` ;p4ڱMS>r Ӽs_X6bo)e/WshRDUC$29疖n#SAqYВP+ɥ$F:v[[1.z'tÓ2[,p7{V富h0½N*Bh # CE%9uʀgt1{ +pFIA >ymh11 G;.x߮6-G7: +8ͫ%S+\L 041,1HZ@6V y|64AGwbڞ[g%3Yco"/}qW=02"aWȳDLۘ+]B<ҝ(M {gH衱&EMy_X$}mڤg*:ԑmoWӴH=*tj^`ڴQw~UVia Ve<%p4Q])F-h +3=iq23txI[6/; F}EsepT *0=tPck ʂ98ui"TM6ܚhQI>ܛb rL5zA%ujc<"G;mb=,7aH&ÈxZ\$0]*o,e|Wk}ZRiᕼ=M8DJح_'ztP]tz`#9&4h~eq9hΑsYɻ&& 6T3B;+Sy۾G4 v2vN؅S c=8u0MBS!CC|vPtBj;aPiYdkWr2q=. `"ن1h +C mLx l׌BeVMltn g"0-]1Ŏity"gw,Ҳ]wp͸1զ#=KάL(.ˌS(j\EWy^2-,:q-@b8zϷ)`׉eG2q~7-Ȉz41TΠ+}.Z3kvu8Xe^` hi3]NP*ꪀkв! HGujggfnf?۳JEZ.P$)xPYD@[ ڸ8bZGœ^2r= +̶(ouQOaqsQzdvcPTö^$ +ra1/(ySahkPsZqw_fVw xɢMJ@0d&f剃MQ}(z #XK9n2bIYwՍ+,+.{}qI?+8=n)79k +XB HY7)(0d1,]ҝ.}tAÅ9oQAILh"o +¬Z($c%㮳>IqBӭgn@cck)Pi.ئd tzf;eBZu+&nV&]:^}r[p ŐYQvgufO9QO1f8A/<N(1FK ve7+w̯cM^ wFu< oaԶia>b!&M;bGlQp۴Ѥ&_wઑ;BVPe +&WlPcv[fmk_{l:ķqu<y'fɋT2DǷuFҊgOQO穼s]Bڍg/坬}̶Ki=k)v:jΒkOeOƳ7kH O-XYΔ'[Ig)ɵg5 +Oemh,k@~*k;J>%2:_KXFlu<fזrԨ+bty^y(iAsMU3&@Լ_hf}$ @&ys?M `QA3z1'Kxa^hhȀҝu?q՜šhIE^SHNYj1 67m8|ҭo;`KgXvgQ3;hݗiNZf=MΛVp]-x(iVgNΎʃhiۂ9l#LB~ R~~ۿ;woOVl.'SȎ$ +aС}q 6;Օi92Źէ}Kauڠ!ՌkQ|;Z$wɩqؔ{};[JмkQ8Z[Z76@+doWrW@/s;hVd3m fJĴ6JTs[4Vk,{olMc@2pWEUXLP2B_Ǿ.9Gۥhf0a5n_#q7Ŋ$זzwUC~y }zl'2$1Ic25$Nތw獙˸@|=8s.:iOcwr^c6* Hv79o[n~M܉/&x٦}IML( !ſ_'B4hf')P U^q(d_,yxeCEr 4[Q| P 7T.chp=x[ |-[GmcKfEOoooƞĠ2Ͽ@]NG{Q ~#rPu;q=1'K d?Qx,K>'|vL~=(D!@ego-3"f9t8mZWHuWdC8.RK~2)lަ,Su2Oځ|e7c ʼÃDV^Ӿ8Uld\xlϐ0j>3߱NFo CH66M %=(i kݮʏe 3w'6ȧ'\)%{/տɃsm#v D!SŸp" +۾q!Zy+e/7(N=im}ߕ+^߸bf1}~}u_Ɍc6e*]|<cƷ),.At´ոW;27؏VVSiԶ(]*Rg0ň,Aqu y%$LCB&5 +mȤLnJAoĭ)&dxtZ6V@ڣkʾ.ʶ+Ma8lՌkڏ85%/x'n`+WRc`in0 _-;ѩB jTakrڿtlڹgNeH5) 4f"ޝO!XY'X3^ O9$Ud~ՉG"ƭb8M ??5$` j/ b1G+AGATs3ۅsyD N%;G$#xC#yt.$`Av ŵHca,vE̘`2`♲dNKp=Ra, @β8k6w -Ep 3h+YM^"R0EqѸfԷ<"M%cYШ-ڊ|p`_l+nF[P%E% >鳯/EɽQC>FC}mK(jI0s(9ZJ|/#؅H`:q5e=G!jI׾ _dt?N74^\ +"q|=⻿9^ᵯC0|s1 {\u*"L":&|fTI(4-W$g?+!C]Šۣ_縈 lD0PxTͨ6DdLBk<$l#{z`3o&Qgdѵ@nz5۵PBP0U0o1̍f1}zj뾛UKne}YuY5*NiOg~;.^ ^}xK Ny\Xoo1c|F`)O AUEa0_~/ķՆާ0vWp4KrP95"nQʯ900$N_䯽 <2n򢭸ΆKRr Ǩ<Nez ^V㫴PH[ ّnn}k^'&`Lے yo\QCq3()o{[xڷkey1 M#gf5D_$2?&N=.ԋ:/o-.`V=A'WG<@ [VpTM׆?-l擞?x. T6Ÿ Px{Ք]0]Υ)R + ^%{o¥۴<'m*"-<3#a_oTm Or(P&8Iy s nnJ}Nø~>/Qy[\D8` ݩ@x<9~ `JЗ  ~Got@9hxIJeG8#ӕ(FU0IS Q@kKhv*=>H!(Z*t$L|N~@,o!@fJ@e'4$7!8v3Rq& 8@MGo +HPjZWZ4 1IH˞ٴ!x"4RָʌϨ-䏀eV82j#TYmF6+f!|Pٸ!;z2U:qʹ/b6ƅ{:͙o;=1fmE7VU) ̾~4#1)YK&oj[,=b,y6nFPNz0-5Q$gdYvʼnqsih.O_~]>2S0*V9>qq)*eIĿ)i]Ϗ0 /c_$*ȥC,MRY-s63 B:6ӇEÜ\Xo'=Y9}G]@ LT1sy1,`R=i'I F}RNJq q=ޟ_8(G|" *%hC̕2ٝ􂌕IR ;a1 p|S .y /27&l1̶Ud~ݘ֕oɹyި?Glo߀G?ei1"B /TA4I1[LIk8l'~qbEͣKUE(ݕ#MQMA 15-7EQ>7VT7,f=f76 Gum`h *_#~G0 2D'- +=GN^ +@w4$cV kVHN9!6{ +%*adI߾#h%Lh+ݼkpyۜB;ݖQzaeIdC) 2QbDrF #ILrB.?[8 _6Աr\Jo^'wbن QQ&fp @2Üs08C0{|wm X.‰r$ڊmb|\s}9\2Y?RL\ +=T$d Gߦ&Ch>FDHǝ`)$~\ PPH|4Eğֆ2 ņdxbJ,*UU J23$Mv`@^^ɍQof>tLfX(obC?[p~&`yt02QWaHɿM̐ٴOg}ð+\ƶ_e;?#%ǦS[OBAe_ƄLS8~ ] a&])1]UNLG< \QYrKH6.ӱegq?SE+xӆRˢd}6E~Lɋvy52l16hCRպd&, + bW!AQ&۞(1 w +=|V)Q+|e ^?>Zguh^w#_L%G/֝ _>2Zqo_8Rci ٦ߒ 1˳L7Tt5gX.IX3iگkۦŬyoeא9yAUG}ƍvۘ^F͠&z4Hr8Ls՛m?'Уc:.4qN9fa\fj51')D<[rxv H oQc1 O!#LDPԦ${nnu86Hi|A$4-Mͦ4%AÄ@+(Jش@q7Lٴlhl~ ͌xbMbv BZUpNzu}݃<[ri,#XJ<kArs +O-['\<@s1@3]oMLfVse )Ŝ6[< R'PT/AK|[ 9tu?qL^x e +B}smfLFRfK+Sܺi;Z@H>euUN eN[J6k4ia)iiJ;{!X^lhcH0֏)w U@?k|o)K ehM,2ye\F~H| mn热bhՁ9{rq=@ ƨI-"<-X165`+ UO^~Wڍuux],tڬU/&=o fځ?oyҽ͗~' ϊ5q,iO1;#",VF0$_1#m-Y^@CxQzs1 Qh :QO9 mZUd^O'ߴEнvƮm*+כN;(FϚ-xZ#mҚ7"?+PPUvB(:w`V#  * xl _3jm0j2DSUN+/Hoc2;fr[ǴMJL9GSj i`'{ [+) @J  Y[A)eESJc}ЙS{MToJ_S2#>|sv~iMqSpaBxmHl#:~p`@fQpufπM+*2]?8r\!@cv`'F]Fk֑8&,Mgmo{t8Jwr@jRTZ7-{ D4gigĞǍ0޴NMs )׆E`(Sy]ǦE[C+VrDc2b5o k| ņ>*u wos7.=M8)Lנ2(A3졉؊ A!PlU9 +,>w7%)(`OE&M|U 7n݊'AG>4y-ZWhkRlv@Ҥj&z,% 8V(n8c2anWPed[W1m +d6 j7dnVw#]iaށFNvX4|J\7-ڪ6mNCi3tA1]px.0#U8X;7#<(u +<@hB)C[}umJ&AiN۶YϏ'8 +aǎ>L/ q-8G_L6qoM1 F"UJY +FEle:\x"Cm6ҧI\!0ƽOMt>(\g-9̤;hXyqBʇiLk5dfŷ$pXLy  0b с )nM2R>=;D?!tcL6Qd:Vlu"m\&He(}O;Ό6m;i{ tٌ ̀ifaQ.ܱH{c>dp!v w%ϛ97C x|fq2{h + `1vG(x$!0awkٸ{ú*yqW¡X%w+y@ 褍[TN<,_,0gLIwnݾMkO&Tp䖋z^1,F<6PҹUJu:MbLHfAZjk +RKoôHk̿YPo";j[<Du=Ă2p[qU#Q9zT'[Q`IWeV!sޑǠ'jۆVmW+"1%Eml6TrW쉮 1vܷFJtVXWKq7=sĄaxj9=W~ ,lܼRϿŞWeϜ +3Y_Y',!b Xu!o[bHPح;)B3d}9RB +DmREAӸ8oB$  Y sx2_Γ\,(uiϿ@0G5q?*#w&W8G/͏kO_k7)xqʏxSP6&*nߕ6bfsxռfNsh"H(cš(w}h/2Kdɐ 0UUS}N#nu;@eLH="¹Y6oR-:uR9:! +551CVwҫ#i?6kS*!.>`t2MlT"ەkvp|dElB2w6mvwЕ%#3gAjY=6[=D3%:qYCic0YF2_&t^lY.lVrVQvšX1oD#P{7dGO@5K&s[8\1pū f[v߮X ~<ƨ,<{(#&HEJ9 fIic捺 +8}\d9?p&m|YR %YZ\Ll(uQ}õݪ+IZX:n} gMa<ʼ1Q!6+@l!1{8Lm0Xp8nimc~L6nWy7Ӑu<46" ,'y(6 >%8ԁJ`НƚX%FGc,V+n<*J1f38)쩒V=w8 EЭuKnZ%\Y|-CZ藧![e\Xu92vkG.ݔCd=mRDw -?o;rx0+}@" ;_;$qh.ldV==~n#A +wcbm8W]5G+LA ' 8{ebxMZf> 0pxNԑ(aI|ǬsWqmqoj }R 䎰4Yx>wWۮf  +!d m$Ty_`v ll@\ymn⏶o:a4Bx {xxY4Z2y;f2gR/yc.N +6aN39-vwFoI +o[_4Q,4.8i]b ^Cavwpdv֫+@f?hVɸ5u y,a +#EɒY;iqӬ(orARa;2uךY eN5hܖ|72уnwߖAm_?Bþ06}xn|vNK8iup/}vR4o \t8p* sq+&3N,[?sj#]tc6m?Fo|6$CW57nAHr( Mi2up`{;ԬyrN9ؐ~%=Ǹi3hxxV%s_bm$.lh}6r%4 9r,؊PqyJY!~K>Bv%޽U>(RS%D!9'"X)$zP웗jLѴӀGtVֺû*]sCM-Sng)`%83#ڬ##]G–-W>d<\un(AX`N'tCb딬>lU7^Uq&⑲Jj6zP[Ծ{bQDנj-,mmC@WqM+_w b +>Uq¶AG۸O:PTѤwu,YuiEwvr4- 4Cm#bW BIT25“?_LLCkfXu_|M}<:U?[oJ(G?=Bsb I5R`vUX?n;OiLqI/n1a3 #QNtv]M+ʸ63L#ʝKŭy֡4DG?.^o_?6~D\o2&&Ͽd8@}]Lϛj׵VMx ѵ(k0m0cZW2{Q;'eX4^su|BL,n1ʪYfaM5JdW~͔~x-x1@Q?4S#٢kEyK$_EZƼDbq?%'xzg Vm;a~?AY¾ MWOYPC}SqXr3*f\E')χ[',e-@4ohIO+o{ۂ[bc&EA^S7-o7؏\rk|u_XwL]Vpv¸i]fNg͕K , ^9O>,X + KhrH?i%un_vmϳeʯda03`TމQ[Ї}n51+!wQct0ZqBg=7MkH.A0P%Y޿wy[ X}Rg+P8('TO!eHjIYw]051jk!i='- +$l]gO[[@A6j泊ca9~q1lylr]/ Nw(\6n"<58szQUjeW B3.U<=Ԟ:' {9(k M{?Tb,^HM=Y^p31P(|'J~*}``eI,7mh?/ >/jp*կzyviA ^l`Jp-7P]Q)QE}f!s4?!XZK[#:A#FWQ w-m(zO]uUo:Ujt}Eiydy~V9.~P&}J@\"6S[a1YQmL߆&scV[)$;!]QUj;  +܈j[HRǓqq}p !q9J OmE q?sWJ:SIpT1 I⑄_|MQ[f(ڳˡyл)GAq'%+cS9 9d4rdh>b>@3Pr_R`\521R!XLq+(𶷼1nô$#(!6K\g7#FcSۋvDb,h"CuY<aƉޠ 7pwkI6{+w/ f^޹^~?kyZ)Kmwwdcj1:0#I|^` RU&%xҕ3kOE  o#w 9D(NJ`CH攍fhHF-nJ4BȔ?2MFwM?sTu9R"4} s +Jn(= +SaHU[ +EFTu6D7 !RH~wD +]E YB4 x)UTeBPK_+9pq?* +wBՁQ 2įJ!&ua'mݼ7#RW`T('>5m'AU/Y[0̌/CDQ2 +^`1^ +~R Y2rCr<6:2\&c,s)l-0rѕ@[;Žj 2@.S,Q2a!CO Tm3m_+ :c R0I3+;%#X9$ߨ _ +yyҨVwX%F(|z1׶h?m]PK#̀R˚*.N_KU$)I*U^{(IuӾ0@4l5՘x*꘽Wq?4xhA:g Cj^߆r=0.rD<:F9aZͫm1.}YiA6. Bc'Cᷩ!مkֲwK!L<符)fLDBXK߳ʒ-$pl3\7o*6w 3 Kt M6P:ǷIK$!1;=bgy[b\ȑ793^t7Eݼ1%fp ]5it%2 [HeeU}F O4[.4Z-0Y@?gh +~v%:Ǽ/F2zJ Ǣ!hl6IZΔc6eg oTÌ0%ȒmPRJ&*L# rh2_r6@3dC9 +q'"aix!srrC&֑H&cB@}.%~ 'm6j +B@3b%u肴u\[tDsq:?ACK +1FnaIҢԟ O-\{̵LҧOXa=âx<'_f*''b9C +g 3M'KJG$tߋ +w3w}7H8eKd"j$Sա k89l&."%OƒލγQ@#G*)+Džc裧PQ"DŽiu [0L%$fg|SADLC%p%9r;!g|\4|kzRH@VfGb|zׇ[D2&/{r@۾^@k8E8K&b,HsŤ,F*fs\RE\ [ v[vLHXF\soۣn$a9=ϵݨ0,<" ++ B5$1&=*c1BmtOU+}Ok\H͇T2b*J4E/Z:ӴrԢXapaWaQ ~ͫ |@2窫9d*!]$~~C-\7Kvg)]oWe+̣/f6J&dW".@4vȯu:3gwzQVqm:Rs*s]~=wPӋȰ+žZleB@~7ak,"E˞ä~!BmQ<2P`*kǀeiý%P/%[n~M"\ɪ:?7KP}g 7<^R] +{zN;C/:kzq +v=S xNHY7KA,OŌ_x/eڴ~3훎ˇ.t[dFg7|V?Ψ LoZm1 +[Lgb3[p *pQL}mU/"H~6e{"rȕ\ +mݮz:/'0 4cb4KJOy) 8)J0x2n%4quѡG@];t,f{Px֌d$@!Q{9CLomy717&b]pD y@:&E;WKb &1 pQneo7T|2@7@<4f}m}چ۾;7Q5"eC2;lmhcF .xr!+HF¿8*RdX +.1 P)椖_:hg4F~jc~H4!>;)+Ե3 _XQY3TX-QsV:Tm6~֍ }]<v]DފyРݎf|= ,6|V?ayN2䎇/v{V 7薷M}~ A23L⩽'V]eںoS>ǔV g;hP5T6/JHٺLkM9vˌŞs`0֬.嘦+,ŖSl@ľ)H0 /m vմROW7$UG3l; ΐ]ӇoKc^ox;xڳ]g87~fJzVW~=,!J¢EY,V_\T@J4Zi#y.kά*ua*#?GS!ƍ'mW5B ˎ Ƚ TVũZX?LV{ڷ@}B.PU{S̻ϕ:ry^!FݐL2{`-;+ +? |(kW~Yx.ڦGgc'|o~[8HqUndchONړ5]uUnJBR,O6lJdd|m GU#1q1:n'#ӂ$ZwQnnVT37:$!`*90aew87F誘LgPB Ec iCPAX2]$۹똷i[@430l;N3{S_c5uۓ~׵?.Bxұ+ a3 Yのcf@7l]=z <{@f ,$Ç\ YZG淎iA_k%x"ܵ_}7-Z5%<%5]$4)n53>t]B֑Ek 3ydL, P~'v/΃2м鍯xnX/_7@_2QO¿(zofpͯaOM2 )P})G8yOw !h^6Ƅ#:hlL+Nm>ߔRXGG834拊4YtfJyבPlُg;l^W偢h=CoGUo}mc.:1*|/Qý\|yNxV ϿvWl)Q~yq-7=w-ot&O[ +۸ϬvxQbеצZ7bF$;׼l5,0 AMLf0NB.r;) sBXC'=0`|!.6iZt (tVL l!ǽs+HBH:EʾsC{iE.oyyFWį[pi?4fyC>#뗇#/<;+!Ñ%0,_FUi,lѾ8#]T봞sk &mb>~ iXzmTYok -Έx/;'/&2Og-3P;C^tXqաʾi+ɇY}Ns~\V%܃5Ct`-ߢ<,Xej@8Hgvy,j^abO~_&G~|wM,dzy|1싟ڵ< b= +GΆ(|4!LKUM묇t2mԱSCV,l]DBhRSl{.}8uLP>1s )sb <kMw#hd#X}PA9l/PgMp@4o}maH68'ЉXQ<۾94m(o贯zX0(@9:Ӈ2ri'V=W(~yXk9<ύ7ʕ[),Yc3_T̳\8_(G%uzw1Q87V8rʐjV:RMczNykc4.U(Oz@gVҌ>ծʜ!E'z\jbx heM/XyjViBд^P /#u.T*Q>B2Eu`fU Y9ڥ1U|ֆaU!`}A2 +25טš4]ǡ١ b$3s΀-nS6>oS:3Ů\ҚXDE4nS SE"iȡcAq1'/|~c4]SYP_,yw-4ƴ"C!ΐĢζY5X6&]@2Äv K[ Eu'+dQaҩB:b A)4L|MF# >{ه^Vqˌ}i:aWwq$s^clEGTt?ua42>ۻYh1]0d>.E&Rmo +Վ)`~+pRâM2n;o|p^ U`T>WJsp;R 85`ˮ+4QC ų$1u-m$IQi6kb\20@!@Dit32ޖrM< xЪ[NiZ@mBcaNZC٨ڞ*dpl{~?DuYlv3(p; ´ڬƣ4o9>b7_צrW,zR } pت,U {`KOKx;3>& ,wF0ß>?|JO\A03 sB"tGaMwEH1Wg+/㴯˗K_]\,k("!(S$z "Y#v^YHjw:¥ѻi譏Yqa-Y*9?ZlCEKYU$`T] `K䐝[`mw)P#<@X:V G=]cSqN!,'Wns~TSQz<ovE6N@l\)R`Zig$Qf.n7u7g=q1kK^=mZB M(n-eI܄}d۪}j+!~r#Dq|S|QM m~')wU[wKT1Dy8<;*E*~3LΪ+x5zZm6{Ug,e"υ31c`{ + *])l}z nT-[)cB>A k#b;e,j ]> ~{wsy{i)Mdm^oƏc"=ʾɴ~M̢]w'fhݑmۜ$mUYC輐cHՔ>B]*0ì8 G Y~ॏuSi߮i߻c4,Mm ++fStM*1fhWnxgg{塀PS\ۼ^pmf2)-^cN)s$1- pnL"v{лZ_:1eDf_FT^)B,.>vH1]tlrS*:DmH]]bv.#c,Pi|g}1a3[0յ]= H5#FQr!Tp-0zg:[m/X"Iw}mn\crd;C_^kNS5YQ,v1$)-9?yAvR̟ pe, +>{7qŀuaޢ9+ц֊zw 5Rup) ߰Xct8Yf`ڊ'"hJ:fkOOܱߕ:&M9VL)LtQ9ep-KRfB)s_qh^vΚր)YloJ#>O=Cz!X~)꧑ +wKwnrN%ؕ%!xy\aZ Cm|GɡjѹOF毊\@o .]nc|Y?'sTJxh ]=Vmoqʛ]MYho#VmJ?4wVLP-/LNo yEK7EgEbeKyϢ^U)Y!dsgq/#ntʽ;KyԼ?{Ǎ[l>vF܁[3,@A[4jJsxth\ ""I p]$VD_(_Z@3&fh3^'[BaV'/J82U%O:IE7aG,Va;), x8|՝tfK,n +v|8w5?ߌ2um7>O܏;Kɸ;Lwv$.TQOe5m5ߢY^ POm¯}2eC~P d0qH*|it!cs_(2x'x Qh y3s+vݓ*3;1RB廖xSDj>d< +}W ^ģ&f&f}!7/߳w{Rmil-ɼݍq?F(߸p4WxVү2CSwy|$OEmሼә$`vI.̶G*#j~.NW2(;@4u۟R҃L{ >.jqѼ_ls}_5񩘿yIQYutޏ뗪y'F3oΎGŖiRɌ\g DKH,,Mǯׯ?멂o黎2ae=ٟP`6iBu2 +dFy2 +RRT3Z|A\_E8#{7GB՜󸩯sC@G\m|T%P:]cS9 +jzIuL>`f_%:ҔGҺ6]EyئrN]9(-f| m'5w@\c杼ϖ?'R\8:ey'Rty7a,-*I͸]wQeuYK!,YwVjq oj@?;#872\`Ky L^Jmz=$8v͏`b~gFvgyy(:^nw z;`\?zbRښR.ܧ={@040(#jJ3>2pa& +䢽4&g>Q%1*?J\$]y)߼C܏;y3U +D.j֯a +xمmO1Zbp2l0 T{d{O7=ͮYzJ[r=( _f_6sm}<|Ó% *!P锏RAs+.-l!9v8{{ pou&c$<7]Ye_ͷ@ +2\SӷD9kuO>=*1YEl62hRK8\:\ Wd~UZ&E)&&|=fH*1<{.5M<.7&<6[BاLx柉uqz>7>~g|g>Oqpu6wt|Ut~;j25Q>Rqzlo=*/7m̔^VBwkѿ[Em 29PA/Eý>@m?u͜cƃHo;m?&<z!#]$=($V>2;M[N˵lɅ;^ַ]Li@/ld1Ӵ@˶ ) >{BAW UYC$Hn ̜Ҿ7o}~>ӞooWga:%vMԫuBC2e}/iX2k6kb)֧ KՁszS]tsM3XX +eti!ƹe<}kowQM?wN c>+pڸǛ.ntr5Ӡ(wrNw2DD`hto|;~ʋ_=Y=ﮮ=r<804ս#>oa;Dm<>淍<  bF]K^<%~S^%Oz?O+U0NAim  ۫5 O/ܗ wQo~[|`OOzb0oL.#׃ecj3_X@vbr2X0߻'(L_QfIA+'|ǿ??7N_o +'y~ې$#εiQ1.5א.Nvm =|pp{eެ啔eJNAsc$7js88CQI skQd ~KZs}mkKWbiߔDZ%u6Uy`T:q+*.sIq;Y9.[rP?zC͏@ ^M/[Rg =q{Pc}=? >'XM&8Jׄ/mTB;2-;eXSΆD + +zͯyܓ?zw2?z/}෡\2ʟ{cJah$;R3~ͫƒ>6#f! +7Mly6>^m:fW؍vUiR@'>eM,~-ybl]vR:wۤ ت#h :D p`eK+4OˣcAmgz_Zw7 ԟHx!ns7:,iCWͻB 6۸~o\b/zrÏxh볞l~lIfg|΄_|߿+`3#|6.}s6w@6/ og6>'+v8FakSVt1ٿ]i?/z3?:8>xo|]ۮ!$A旿-uu!{/ Vݠ\|;Кڸ#v1 Hqi>uܟp!m܈͗i2Sm8;O̻g{$5y.uЬFQ]DΖQ (Zky1Vжgu;-qhz#a>BDžck< {8:C]L Q`x%Ky׈N /:rYs^?= ҇?4"Up6့rSV.6d2j/|/pۗ 1gc(%\}d?˒曾~q@Ѓ?C?wzz, ;OB5Х?/|~9Fόz*dP=kCEY_mJ&oc\ՍyyL|`k⯨wʢO-$ *.8.Pi ЯR \8LVMy-7&) PB.T{Έڕ<%0CmVJG]Þf{(Y(+`r4oNnN2/6\ g;@Σ__H ~Տy+ķ6_t/~ >PN:#:ꏒq?Jwƕ~> _i* +oɶ%&d!Q2ri;dv$l1E3+3Ws/n(<0 t}oOK?΂^SYsoyST𔸙ZBkW~#.D͛rNJ{o1K8Yh61Z:g-%zmД,ďq"g62!} =lFR֙40!o ̌~0\kTQٸ?7~g<1x0A澈‡H?!;#9]R'w A,OD` 1 +Bؿ;>Sj`0z}a¸~$o^~mh)şf2YO^"^q6GTm^ְh%Nz351Oǻ7TrzMW t\iu&93:%qk._Mf):\5uzTh+}]lbEEXY\v:Rpc P[]ewbCі9˿}%03@P|!Kg==aЧ뗿 &t.YxGyq'mm( J9CG?zC.뛈,۾%lZ?cIu%:H51b 6wC{CPcOؼׁGjȿQ8Ԓ ƃ,}HģeߨO%&fB3[m[CMOυum{x4y~y)$6Hm~z{!nt_ҳ1h9wbNKش12F A u2n& %uÿ^/[Y?^T7I8J߲*dsp;7o}ws.`\_G Βotr$O0f%YJSנc츓Y3:OSCkL=OQ|SOmwƕ+F !$j]E%a4V 4sw`paH1TtkAdWܚvћ;MbA~vL;UmnZ|s TG*ow FAE +g )eM[IGi˺ݴ?D۶/(qocv&pJ'[>q/5\v2q?nBqAL)5*fø&OECDc3M͘SS: j/&\7˓EmY>4܉'~Li!L|2۸|fRTpN͒=;H֓J[d,Pg~j;{C8@M3֦w,vQ6YI捋 ØmZ*0ɝ+)hpU`I!k:2LYǗ9z̪ƣ6.&*H @$9 cu.v.oH7%X`GŽ{oO&_f6_+?E6_ߟ3,U]?{_>j9?˯2 s&9::Kw$5)^m +T iβ]6e|/E![%0eXwv&,(aŃE 1_\ަ}YO?09LA=ۂ/ 'BN?} pvk?]Aĝ2^ 1\YuힴizR|#82oauِ2!i(S v ?O}ͯyo\IOޝmoyc^߼S.@)Fl(ټ.M~>BxftMo|5_OYfp.fV~V=0 -o.6X>>Ҍz"S&&}sV] #ϪaDOC"gW%afqRP|uʽJ62EbYYՇNxQe<hB|EePcm6˱Cv!Bb$>-&1Dٮ6z8i;)6."r9}Ņ۴X0o^FThL8>QS(`>f/̅c*\klfH)͛qmE)Sb; ҄kU{q4ߣ_@HŦMLUw ==G@X\۷ͷj8lO<Ѳf+ +;eY2P,v4^' _~G(.kuy~=f-'ݗljSI|/wIdv!>ݿ8{R'TQ`~[zD qv~&"ԌW=\t4ʪ$ZŊ۸A2#IjViKIlzo1],ksg+r˄Myd^A$%5/XNϜR\y¦:7nIJ3m6顐*7/rЧь{!;Nzyz>oIj wҴm4(8p.Дv(b@lWf݌ =`}GcoyݮG}ni7 +\C-i07M6j#cMs1vsq HUd8`й 9Ѵ_淞.q#7ZTR47JF!b/+L+yˣtܹwZ7ȔL>;4a-Ye _^w_) ODYGN^# [`u :R,_8vi ʭ.̭H J? ']|@f_xw7xgW nB$@#tV<4=PUb8MAs%@i6i9UL{U6 Q2@?\n0D]6 PKL&֧`3?vb ?BGvuxe ? mAZߡ4X-Yqof. hrvtM@5Dyt|Ui v)cL \2ۼw_xrjp;hc'&DO[&8 ]CuEeh4.lPNH`{%G~qU3Uu"ǼF)qXhͻfyN2r s7(*<&#`Z4dku\}4 q4p e'lmg]x/P匷].}eP]}zG<cp}Җ)L}PxTۙ_S֗Kjy܅خf?0~(vEkϣlSkuwCN‡Jutށ>OC֝uUt}?-aXDA7na rb4 =.IU3^:*Ζ>Z圴wU0'YՋk&]mdYM։q()&BNt zخx\i9fP8bboEKא5gήo O-ZrfKVg(FEwڲ4M=()ECf9PUq e\<1:)InfAګxxAq&=xqїM}2WHAUTmm)ژ9d̡恱>YH'ZSsBSP7ͳpXLd'P&6Q `ےj <¦샌50?L ~k5)ti_z{|cJs "=d+8Sht|U u؄vmN(,x(<JH'6muk #ch#!Z9#oO9 E7\UpYhM“# z8sEP k/hԹGc°;eFc9>bWО9iߜ̽OIaX.WC`X=~?|ڴD nնb-O%aD0qܾ'T]=Mv>!>IR"sTea֑4Ͱ<cu Fr#! oW'*rd'n\r虳s,Si\jN{2mYFC~ pdB~qN| k"Ne8#+umzq^CNlP oWQ3*0 B?8yoFӳV=2#^C[`5cru䙫ؔE ia}C*g^pϭ̬+2nO?b1P`+vHV [smڎh:̈́Tˈ8{Sp.@Pbsۀ92)4]mr 70/MER̒/+j˷Xi?6حJ63u\w>FgV=xnt`*FB2(#n< ovUb^ s$Ɨ'q>EІ(łVLqmwDy9 o%pW +&V%=:M Czt;xDls=XJj)@\h jX FL|f7c]f@<18Ø>Hbg<&bUh_@fU#dwv.u^TX*`1lh),},ۏܾLÌ1rP)a>W̐ ӲOL鹏[4VƮ;t֊~<@.ۀք!/΍ 3آ8?3?[hܟWC<( \ No newline at end of file diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wug-src/wave/ppm/firefox-new-helper.ppm.gz wfdb-10.4.2/doc/wug-src/wave/ppm/firefox-new-helper.ppm.gz --- wfdb-10.4.1/doc/wug-src/wave/ppm/firefox-new-helper.ppm.gz 1969-12-31 19:00:00.000000000 -0500 +++ wfdb-10.4.2/doc/wug-src/wave/ppm/firefox-new-helper.ppm.gz 2006-05-04 17:21:54.000000000 -0400 @@ -0,0 +1,185 @@ +rpZDfirefox-new-helper.ppm ^U. _Ҵe +Dj*A-l'_Vǻ6ieҭ\~o@TP `Ĕ"IH ;d-BVK}VvwߪYo9טc9sÏ{K_z^|W]: ЇO~ԑ}G?9]NN9d<B Nh>48! H@o\,nY @`!z UNvC@+ ǎ:/De9KbPLYb#\ra2pJ!3F2o-3c$ eb|~チx}n {`6x0 g/Mk?0j nݣ' qde[r"1"O,5E=!uTF'XH%gğ\/؈7(kc<ųv! k)D5z0(&5~qiԫV0*qn3N*B0ނ) UN AO d/mx#Lقԑ P̫hb8E FK-j X8 iiDTb #  z'FVg0hTzJȌu’!!7鱝r7I= ~gxT3DJ4Z χy 9ىaP}e{s6BS2e8 +'f~mx JBo H#~1{f|p9R p`PwN-ۖ65_wU 7U' O2!5(D%`aZt5q#j(*Z vtHƂKX)^,\w᷀~Do +o9^ =b?^rfP@W 4R $V/9Ttubr= P <(N mj8u` _h +(!۩7x'}0bʸ}g< NN6Yi qhw%5'*h cKEMAYʀE6򰷵݋v+օ!sT +:^Q&R桽9qbݰ`#qx# @xeD+X> 'Z<7$aqrpһbƣMQVFBf6 3Ғu5Lm^pzMHv0~j5&i'ZR;<)O=&{j<Ӎ<;G ~Yy=遭yXEE>p‡8l85E2N+*I40,"KdiM ɢ ֨A Cyˈ葖l㍛dYWnaH{%SZgmmMU ^d5ߌT=4f\1,g* ͆&4e0C +;LSِMPD3Om"0n43q9~vK# +)ZCܤIL-'*SCbCރ8uO%rtzvbLa=wE1L!pCoyvZܦƲH/3SbuI9ŰL-/M1Y-@UNstc&,V:oѤiE>R^yl%@35L +ASm{( +5V6a<`]i- cDJ'V#kńTlkYQ\e"oIace5j@݈oBlf3k8B61:VEl\,XԀ(uZ bOOk\_ n7rQmkVDEkȇnuw01N*Y +5XlA)3HxF|ۨ/.ax/M1qhm3Ȫ ++[ ,0vj5if^#LlIM-kd>Sz(W^RXS4I](Bno oKOuS֌ (hQDŸjwj#jA@ZGkSSf*I-bjCǫ CQq4vPoqt-26u,0R.z~&j34'Q5Gfj^5hQaPݧN? 6F״.&ѬbF]qSLQ0G&WnI42Mc,P #|;e{F2M-Xj44U6 2sTmOajcd),y( +Y|SQ2W%5hI x,n/Zu~["q+Nk=d>u⊯\]}j|~ot܅۵{Q0f{tљGV5El1Ū FS(񴎺Rص˜lE~ YEn]2N'*V08.Ye+m>#f ?_r܋iOݴgugO Kpi}y'޽e]  4#x`{؂CQVg}j@mq+.A;:gC>OH?X̑(?|AG?f_<#=c@Kxۻԥs;]s,k׬4a=L6B?#osC/osVNwwhsЮ)g4jRv +c0N*p> 2$n3o҉Aqoe{8n[&C7w"s'7O|b?,Btʋ74rdx wD%..^VU쭛ւn +bEW؃o\![W4* r.]EQy,y5 xk_@]Pd/B U=_Ҏ0""lP*o-ƒe+qӦ[2Lx9Ou{M,P !ۢ0EHkY| /o\}x>9si2ÓRޙjpwGAV _Z/B0ϛ\@7?p߂ 2~ӟP<-_:mN([Bf7/4K7AC.]E"@%Қ0O86$Q6&XyiP6%Ds%6ɲxa"[u+ . +JfV_m2|; ZˠS}ǿcc @=~׫QT<9+2=Tψ߰1[eE$/pm0{+_W !1TrF:-ʏ `FeأH].XKg y*lvU'UX `sm{l/ʰ5b30mRܮ`Pj|I7h1õ'fuS};^lQ}+B2 †AU_*b0y I0$B +/?B ||mfIU&zɿ6}j,?bB׮A&N<1j襨+oIE}#G,8`  F_tb XAe90o׭Zz0yB݁ +zy75}uoF.<(fπf)8y|FeHf$q񾚪mo2LyB3zw?XT~='{:T#a˶P3ݲG<ك>G +__f> rĽHij+R+v +L띀YDdN!dɃCe2REF`) UVM;J˕/4ū⍑/S#|!>O5ė[~L]Tsfc^lj+)ߒ5O(v_4|YUr[WCeru1;VaT U k5"3$jۦaTPHfE5#(B?`tNV8U23zh/K7 Դ;MALRQst<)o2lDc}b +←aj|8nǣNϦd|yG'8UTȗQ2x<9\/9(C޼XBnmfU[fT4 /ۤ]3}g8b3nfY%bjoפsWcX[5W-z`]hV߫d1. +^mǦ#oRm|5w:Q(Z ]A;PQ;%Ϫ):bУL3>cmˣ *L,MP [zL1RϪR15wTCSlE~ $qTI09άKcdJs[i^ 3qVKt T T5> "zT'H;rR^LZT]ȦH7BTK".dtas-מ}# kbnaYi+mR(+inS`@fh\xM>Po +<8`l(mfy6H[F;zث1FƳ8E(KWY=ʬ؃᤼QVq^G]ǤEVmO{4qٱխRov̎\%(nej]Hn;9z +ыb"@#_:dYo^o4)fLou֎o%cȹЭߥbŁy*g]ęE5aw UZq.LQ]6uk +JfV_25Dů!Rv<=vLm,`tniO=ǘO_6|Uo!匡q3=gSofӜ'ьN(- +oh8EGLPoRKSW/8~H^ta?H#Ns #/{ِ l SlDl|`_#vf|e_/٫*2*e *iy8S,+ӆE3W+CzfPʿ{UY` E_,C^5f{3iΓNxvhFVwۢT]v9{ToL_x|iַ/8]gl%2]*$-:g]I,wj+t5j*IFgmgk4m|6bvZ-΅)ƢlMqdf`SƢ>`VdHknbw}G|˿:O}O}dZ@.[jw]PܳK/<#6oXȿGVݶ/86GD,A0'Կxyz~ZG+PrvJAsd %Kh{u"vɐ +do[ȿAB+.yQGBG<r]XTU'p0ֳI,.Uņ;l)fUG8rjY8X&/%4N͸e @f $g|vt嗮|dK{,߱v# :O_,[@F?c:l[7E C L| _/q=ȧmowÑ߄?4WO8|@vJ_'ͭKoTiDB}iN= 8q  yp\_ǯ)Sf#5*aK)fSYe7c!j#;(e̕f2\eȕ4)J,RݏoC¼\m= nl-odل ߽$oua-1|w^ C +ƨX +W gKQQ=frZ<092VBNOZwގ .*qec,>K$+~l|oWUfq8SYę:bjyfse-{Ub]3|u]z1 i3Wi5)*3\4Q!tF1Pˢk3F,. oWz x;_a=ѕ|[{-:IFX !05CdC &3|q5Q{a'b0CA{(F@1,Dw)> PE4<'- ^8&%cAMtaLj[,Fgiɩ=lcɲU;eTg7@5]Cں#^ cP,E0kW^ 0pE}npj}Oǥ-oG+ je<5.W = QO~n2<\&_wm@0 !+X%&tӟ +>þ`@x۔+ 8cKIהu-ZxmgFe]dvae0EX'b<X}=M}5yDq575X&2C`+Ʒ6ޱG? G<<@xǚ۟w1<>=Odp 1jO n_MQ 0bDn ùK/n/^3|A%Btp[E_QEɎ_5y֬Mbf`sm3(ߌjY2[W<ˠȟVkj2N'،YVZl}*yVQBH n\^<2#v|}*k_ ׽ꕈA x1$[#ezģV[7U,@S)ɘ zĮ׭&ƵkMC֮YIu~̾`{ptT Xz0IF* NsGE04ɮDq/f~T7ː-{DMBD P*eѐ'`|[Н2ɿlo/"!E<*Q #r7xRw_wO NkN6[zxP -Z >`E-11bhLLJ'[xsPE}4~^R +[=zjyfse-ۮUb]3u!^1 l3 WiA)*3\4͏Fm`wPQX}h)ٟ9%bBȇ`8 L So<c&l_Ga7?2!" 4 *k':Be(HN֬+O&š)"eȵNuF48d*OB}1mjiTg7@5݁YsFdR|SMkF'*cDf:֣F/ iC0G:s.B2 >1*|Ea EjJ"h2i2)h1C5&Wʺ0ɲ)ZCF?`.O8y23zNhwg= +TO"{Yޠ{ Zp)ݺȐ8:Zߌ6bx+z ;ЎԗufMm.L5kkg(6aیH7}8A]U2(gtS֌Ӝ'q3*3V+].6AJ[u;T#؋g4Q9H!B7|MiZն VJ`^%D U,qL¨YS̶Q:C\fb7 }Y6sbY-{DMl V*eѐ'l|b~9,aUMʷ- uH#c}lqiQLPO-]R z'Ml-yXBgD3|u]6UKd4 M6_n0 &ۮJe IٛreF梄Af |X+a-*6骍6;UA¤4el1dlt2t(c)Wȯ]b4_mX8a2&]؏'\V/Ǡ0k7imFS+uzK1G5t{VϦL\GqƆbSiPkֲ*)3˦h  jѰMQْzM4yp̼&O5"{Q$3]:!g-8yP( 2AA3 +Jw2$"2MFʎ_5y֬Mbf`sm3(ߌjY[W-'ˠȟ6UvqI'f̲JEDZ#b]ήbW y2cKUr6YksC]Lb$QGl,<f6Y^p3O+e;,]="WܦpJ[(hHg5^cBͳ2%:,|-1;ȘE2U򝲪չ"fq5K &n:QL![^QqFbsfU]E7&/{DvqTaLY% V3;c v +@eR%DRZ/U\ad1 B:ڪ 넨"C:Ϡ_p+U,)!vъ<~X eK=~=^g>,W jtdV%( +zU08ː\!Cwъ48+.݊j16If0LuAqv. TØ ۀTXu>{gvL{!Ʒ_>QGٖ|TR\mGl(Q lCpDI3ç`~CH<0j?[Hjyω~ˎDhů3T1@*B_28\v/Nn\ofj+pJqNey[G LŴiRm&u +tօNM*0jYSnny"iΓ69|<o~_d.}}3|:h~l1Pk~ O8/9@6m@6*y|jKnBDИnX} N;d)eXH)o_F/{ 0vO#@G4Tj) OA HQG? `5:m0<(Jcöo^,Mul]6)nWzE ZWq?I'f̲J fߚ2J@4lԀt,b&2|!M71hBjx@nā+o] s}=Ϟ!F_SI,v9GC!wj0C_Ʒh2!~̾}a_[՜fKY57i 5ҲlG~ ,+inS&ŷi;e:n]z#"1 -B> +p`%P< +P >j)I&`.^TE/~ß#uۭoܩ Mk/]'ׂK_<5_3ƒBJr:W#> +54)i!Q6%VM2Fe]da"[, ek5\%32۠ñU@_}g9 +pצ @1b,fyhPw1hP⮼iĥ0e2h{ϺگOu#^!ghGՅOWA9k +ٰ'^[|ȶEL;|uh8XX|a#Ⱥmkf>Y95|\ٺhP׈jCxz.AѲ2n"krR^Tsn^g*[q`sm3(ߌj-Y2دK8SƭiCJ?N$،YV oHIHcy6r\g<,*:*9Hv.PlE5nl]+04R|%т-JY4$c0Eo 'IiaI@԰CT^CH>Pu^LGXdq7knTu=N(rJ(l%UNzO ^ #7T=dπ\Jka4BM!e|0բ;HvL-ڸuę^R䯻{u\{VEQzîbY̏`+Y jXMyYT3e4VbdtF 3"+1fUx@vus|<;e:گڸդ5*&=U޳6&4i!Qۚh+Umm&Z0s2l,f?viC23zSƢŷ:6uҬ͛Y Y(xuo=#]/mI7PIyUn|{1@־MYzt/8+둿+eTSf3LmiR[)š-~U?AfMDkYSُ] ni|C0_3kg(Ǩ7,~[=tu?^a#~Ӎ}'=Qk_/?|V ?.Pd/^ yBz;DlI/EnްPO֯E_"Mwe7*`^\̇=,ꏟT\%g^e'x\5a9gA$hu /;ÉI\ >0> -X•XB!d<`|Myt1F,[`;O@K*&%7a $dC=?VW +[305=|޶Uׂ4N͸eTZɢŷ:" Uf=`T/ѩN:{:w pO08K'f.\0K陛]cAo%t?"j4gx 6~1L~ ]tCW2 W_Wә/"\oq\h!?@B p7!94J,a/]0^8 lrqnZ -&+r=#0߸v}#&X_+Nb#G7@κ-VXp[jV%~\Dq/"쉚)rTMdQ,Ʒu&|ݎ&r'o&ke +c=Lޒ|گWÏ,3 !(Gq +L0[x|+^<G b$~lo/EĨ;z< zǚ*d?W +VCb4_2+i/KWݶWw2.Fw\\s~9GG¤N!mԢ (>c%~[=sao[^<JksTli^(gD]d=WHh@Foiz!=4= C%gllDw߂-y/+* Oč0ذz$\} +Dn< RCO_`a'W@ 8z *{[͹Af. +d"޵i"U?>g z|h3d3h5b~}#WcV4t/_p~$Gآ[2$]p{pX _Ҫ:0kwP.#Fa"F+ &gh|\9H `5DwC*J s>9GR?gM^/0b*%W~1ݾn\E`>!j|:W:> Cfj3 Zwٟ9E/~!B M]e}y\gG?VC`Ci3qNNdVaVwTm<5FXƷD P57Lr s8JӞLfV_wXVi򛴉ӱmķ Aq_p, ;ۻ<y]G3M;! (D?G-2`[ h924X0HB0#yN}4A\}\E/[ʣ-qWy(X x޲|ftMw@("ݹr9t hLbî?Zp[pc[j32c"ą`˯o;܎Xen^rVm1Ȩt[CKc|445fZ3NstRl0N]2UjdZ@Lt|ަQ=z@5:lo/hG=f砀O8䱠 ։gu H,*u5Ҏo4^WQuZG9Qx59,k/L~ @tķJcj' +ދ.jDΩAfN.CdK\ЄO/| _ }hJ`[%@Kj7KqQ<:Kcdjs*M8僯Bٯ2kbĤ|{R>XSz?RsS\;6|Xim˟p6$>-a4Nt8pwXEÐ?lsBPM#jk| bJ)?CZ"-1lŅ/Vr~̱N_k1@өԈEnXi9c8ͫԃÆcF600ŮbH9Mz ,$`'xU-N;o)yαy Ё8 {sy^B<2 &CZKtJ^ գB~!bSᠢj;ċM{"0 <ْ%7]{MzTZ"ت$7V3Nstb5|J 4,ƗN x.w1\[B,b׳"o.$CzdD=<ķYxUT 9Px5{Ubٽ;e䥶G0)Va*ew2ב }:wf*7+fY3En4!CMѐy#}<,;mg_3N*u8wЯI!TjU)Sf])X5h$W ˶U77h@2[4N!et m;eu;ߪ d̰͘[{2jM(ݼMfՋJbP*,1cnبM*AHRMUj!X7!uԊT ]52lڸi>.)^2S4nҲ;ߊL[lΆEE1,a+VQŜ4R!*MNSTqV>=4"ed3enxC+.&K*LcZ7nj ]4Nsvb6033c?EoUd9PxXUߡS7!X-Bk 4ٔYZSe`u?cQTʼXD2ܙ߬peY*Vܦ2 ˘a6Q]>Y"eTiF sj69Mmu]ׂ{"[Ӟge.VFMee?20ӲEJ]0q?)dLY hl5ߊ|B]lmș U}(KL\O#n^ph Y6Wű;YLSj+gLά¸YAc봌f05HSVVdj8cmhN%&N8PS^Bگ27m3<1ڤ$fơV&NZ*k=#P6M8͇5EKfx`MZyg18O{ d cYWƭ.yNJF(CTcŕZhpÖ#S&ϔΚ`&v". -jɦ޸%tM8m*̌{yozM 9PxXt͓ܕ'V뻷d,6~7oX7d$ϬPfQEM6@V+TEque>߼*egX8DFb;3k܌O]㐅y[dPSld٘mўO0 O8-6m7]G=E#뮾*(m^*qX"cxUKL1y_?Pyw?6@/A6 ?dkϺ.0#<7deGRk1X6G=G?f#ί_{7Pnx8p~ᫀi^P?CĜ4q0/.NVs +T]bhUnP @,@61SVCTq$?m2Ł&}N +zsOs6m1|ޱcJ_>E/~!O88fH<:5 @ @ۼ>C%l?A\"-F<}'޽ea!l񟻛n]#VggGx5 3 |ӟe:Y gXs7Ns! +QSJAoU! X  񣴄pƾ]Duz%梋/a֥jDA-8WEp^]~;oG)kR-]/[!}`>b췾-@Gh׮!) 6 +&5zS>3Gْ_O엱0mt%!!`"4c_vdKy ?8`X +`Cu,zy_*AdM.UIۖC~;EVf =շu=LR@AEu5 +eh}a@"CpCگ#<V*7!֯75C4ދ !Ku ŷMm22V{M4T8 +~ cA6<@Ju1`'>i2[8PT!u&o0 d+B:0^͸<UsyzpCTh z@SF!!Uzg-QsӟKz C!a` *U,D.\f%BENJ5 +f V1R!YC }S|\2*V!"".p~ƑOG5箿G]8pGmad}o.g^֣(t4g>t- Erd-]*h4/X@+k +L4{c7hr6O'!{-O{&O4VǘB7YJʥg=#7%޾zEHjr =C]qJ-T<|. _FڪUϰ?[@׮ MNmgOL2iNΓc\T^ N[큢mVr~x gpK&H!ps<&ޢbW1鶀 a 㟐jmA-?xU" 4SHΕAyNq6枻-_sui @*S3<`܅=a ECfe3 1.H8緸 ?yuhl &U_jBs ƶ>J#%[Nyԑ-ډĨ-JjAyj^ $Ŝh +&Ji]^QKw3%6m̬ W3ѐ8\ɒzb'9"*5)>K~Ym =R) F4dc ['0`&J8~pCM ppF GB F*dѧ4#7ij䬱odaձ+@QA-5[E&d +n {i%C*[\;<v#,b*_+l3)Gz\D C'B* +:ofKWpn< Q?,ԣŢ`ļZ0/@Xu$,% erA ?BƸuƣGX vo϶SŨ(@ܞ"lVuC*ue1L]b~mpR[-éU{?{źTm%Xu&*BxFT!.<:牢4:xTXЎmɄNy(Jy +ѵIZjLwUUC&$fNƽ:vF +\Dayf̓m*zj[J :j/,i'CFe~F#зjoco9N5+ԣxRMtjh2FKEDM{k,4*[p0%+S@6)"LTexIE壈۴a:clᷢj[%LB)8dӭcȕ5I1Y- f*-#'(ߪl 3>m%F@}6bH QHTljT!|Т;#1N +i㊤bc +4UofjEbQZeaʨlk ӞL}jybfծT큢kT|k4 ǯ质OU۴-;G(`M3[];%mM{{7:GPѦI6n$55Ȁ+\l@3omO{W5=.*i/4giatuئraCo&So5m4Un+7\#%ΠH|yuW=R~*CtTWQ%h:պߘdbY;ɯncQBft0m^3/4SWCPCMγdf3F};eeLTۙy.:Y 6F&6AcJkUY]yщ0ztjCNb>lW4>*7%U9i6ޏ2e(+NI8O\qSfItaiO&:E5C8Y~&~*qmL,|0MԬZqW)nJ4KM{b8jj  h1U[V%'{.@3%==x `UYBUǥ&P6R"Hͬ])f y -ŢN[.5mbGqیHEF _e5eyDytMۃ2T6;e=#Sԭ ͤͽ7m0`̎ R6@C.w|2߬*g?Mnӽ6e]{dӭ>Ϧ5EE*ķ|?:&?ʖaҀm6G +7 O]k )cݤ,1 L[՛SW3!q6 ӛf2ի -ӞO6U)vdR,386WeU 23sűlR3:OwQu6(S2z_S&QǨ6m#<1h9)n<+8q)jsRt-jjoE؜[/SxAQQ^o woYiHlްE$>jғ j$Gڗ&M0X[8kY5i^0][s+)5}l Fz tFoM]Umѩ)-ȴmAZUڍU"[}MEKK11j8Kn]z㹟;}oN; SW+Y[5]AoܬUd0L~:3/:E+'bLh[^ӣ8S 4*i}_m{ 'UJB>'z~b?~C?Y_?Wo⃿ 3PWLQ|-ZLp(k_A08k 2/Q(]ﭶSoz4)Mۃ2T6eo2dhQ zƟZT>M뙉EbK{ hƋ u#Sג4)A<gfC؜gKnCJVi |q:3ݲ})xjؐiG#!cݤmHc8EnMķ: Maid6p +#;z~&67fcV]=PoC%cg'֮Yy7N9(V+>׮tue2)VzuZR֥x;GOs1Oz(7x-d??c~[o3=CB8jȼ/3i*E5u9Z]ܢR6Dqk0C˪HՅJm\Ϝrg[w'עʻ6m=_>c?wb..f8 -*kb{Cd n1/܅_`;9P)j@!-8S@ۛe_60\g3lŷDE h)A`M"n@B~9#s`@DG4xl%79g!}ы_@Ytj8p's:RA?m{:)G<홟=3ltX|k=( OC? _\zsdzyGD e2ҤU|vf;iHf8fkeLex‹F5S6SVTQHܤ*5[b!@+Z[ym:ei,yq}곧o `22oo\/|7x`EM[pe_X`rH{_կ@$PGK,_~wA>_<0`~Go7b ؋Xp8 ?'b bSN~މ!%~ƑOG~14((zx ?rC$fL~EoihM5xvjLguf2B\%C7:.Vb2{:!"ioQK ؾnv4G!`#U +D%W)xÁ\}9 Oa@+(9@5zL`h+@ Be_Dh X>9F0"ԃ3h!#`;AAc%ŒP`䡨8X@/|8!\!`F6|RÎl' Nk‹M6m;eIY0tkcW6&FBų?s +/QvrM""cOӗ ?:3Qe)-؞)"zy Ilm^{!6E#"0'[d?^P~g t٠e20"D` E|3c航ȥlf))'<1XyX5N*X(1u 1fXc|>!JգXFW:.VbErJ2%=wWyo^t won ̱͵F0 @x +;jq۴oUTbP[k^SlA @)<H3lzK]^1U@y ]SrKlp7"hchn! 9ԣ_TïO 3U;< .PQ0ÄAquQfT2w`”|ŒjxD!Nj&vI4'I"M}Q1tx\ΚHK_U+*nK ]]SgMjM0A'%0X޴,23"U E%fF^^,j"1+[lr*3]{*li|ʾla>fƙ.6|PwFO*yj#"sC0 Qt0'Yߺ㟶z5 s &OmCV]%G  +Ȍi}[ AgęDΨT*Mwf>/߸&w=xyX-z$%bلiSv.(Czivig0U*V4ZX'"\QǞ)*ZqFj4PQQ*Aڵ1o/G?{FьFঽTj&sTyMVqa";FLOA'9dbMWaćٟ952ӞOٗ "+M@1i绀3~0[ T +GZg^HPVҤs!;SZT]K`݁j kλJDqg჻Ԇ7Y O|%O[`"E1" 27F=_TX7ީoƛ,u98v[*w(=S45hU?!k5tkc/NM~jJ{z=.U0J8^JejճMz׼TۦάW ig5>6KSw$YgͱL5iZ]&?l)*swک]80N{&h ujubR,ZqԌ $$:5Wiv6s(m3;LE*F}LZo #)Y<\m89b^XZiSZ i~8DSÎlZqD93ŢmܵLRU%F_v}mSia{RZ14|"  z*䉢Dˊ?8)w~=ksckQ[=rE֪ +qsǧ=CVj^a.*^< +A*g~Sy@LP'ρǐu=(M6VUuDY94shEȆmάՏvf8#꒦:mdLhY=צTt:8!:LYKpӀ0RNYE knگTu;ΣKg>ke-GJ|3;N$eXa3t+Um7EEDڙ=UFZהNi)Uzuq]wىU^8T cɪkMNMfdKh ,{ҫf*2,.gY"ӜN]L6ZTYTNqՌ0H=Mn[No\}E]1⓾ tPyESVF]/;#w}Rc.ٰ-բь#Lŷ`{en&Cp_6`6 x\t¢ܾz>>.5~}꫔&[A 1K/ x2mF(ιk]~ !]}-DnSܚ'},π&3աYdAЌo"2/0dVj3V?7!`yMɠj8\7{nްϝ +tҰ6H |}VKW|257l + BUSw޾Ͼ7e-ϸf6Mc a]ˆ͉^1,YeS-_q3^Õ z+ڥFzV򳁴32s|m +Ł7M 9?/~ {Z4"D_ǫVR~?|">/|5'{Чp+.Aڅzs>~OyÏ-h!m&/T7|_'xdN60OBwxԀϙg.C\o`n@mgz\t` oCqDMq3M6i2$ +~N7i@LerK/x`zLF_E46wfp_?a5zYg%7A'K/4=wa;'@lf=2m _xT&S ȼ{QKҧr2suE,*@߀w蒹aӽɒ[qnjZX!NEY0ElvfŎ6a왗vq}G,8څߊE +\g3ڌ 8RS'AK]>Ns,EjV^Qxvیz5x[ú=*SeŎm[,_M!ъ%V[|o?{s{b/Ba횕Md--@L\!p=C ѫя>g.D ? <*Aۖu5Um0T*ⳙ24"\9Nsl .cԩյfV +³V'X֢>@cWoё!Qf>NA$dPVe#o{U_kn߼a= r\B% la˖/%An="Ex a@>1" +[PtV+o]XBvy"!}Sa,b|x9N;ܟ@GGBKM]luK=Q/]7mhe-E9iO&f|lķ!m!*C2mϼ(0Z Yz7=wWy97/f}F(h-˗a~"<0wN]&&'- x|`=| 4۸vM=o@N4p;X~ GKo|ޱniTր u Uvpgu$@zƑO33շ ݡsæ{;S`ۢV)V|SkQ݁Y*`3ߪkc}CqjlFl/axld|̆CF`ySb}C}_ 69M֤LXþj~qtnR>5@|>lXCnm! qu $OGЧFע\tF"dq'IX4Jl?Ji g7H;KOP\.Fܰ;u.Lf0P=R8 Ny!aM3S(=zWQbf7Uk׺=34gͱHz#5d`>N!YdFikwޭ(5lķ ԼؾP%Ƿu{bS:~Ol(4}W@lmel6xCPmRX->ӛE.vH5૘Tu1;FlN +f:RehfEjK8jUXTg3lՑgK32#RԈ\}PQz Sn'=>;s%sæ{;%%*4){_68ե`Imތ| {ig#Z޾P<ꀖ S<_qcU*=i3ܚ]U"SopȼjǷѯB~_ʫg_*LvCӦ!;GMu)RRW.ۮ.#\oa+s&qYZeZ@G Nwz23ݬ~*.5+e]Ȳ'6!nDxj|ب@˘=De6 +cQ4ζg4T>/f=>R]27TE C,8/}R6ox2.hߡ8 s]AEQ.Ǯ* ԂY 0S[T5ӥU[m~D]"dsq'L+R'4ۏRZ+a⌼?e6AʾcZ3ܜh*ũ nרsNe/ۡ ̒QueZڌ 8O $vgBF}sJ"]3Qܴɍk6oX_&䙐'Rf|,uQ/Db/.=qf+*@l,I~WnC-1SE yv'#_&~LknZ۴h8zT(Ά*g;zCl=R[17TE C.N稩.EJjj{#{{|Ӥ3R7 ^6+7 /HWAC0DdӺ{˺Z bjLLW=B5ӥU[8JgYצz˸q͒ޠˮjyĮ%eߙjT^̴r(uB(5" ~Win 9 +(`ڴ+q5R - |~Xp7f)RQdgq3}|bQkXt,J]f.dWs-B/|j p.9B[/{ы_F$a2pGԃSN _|gUG?g?|b@w(0w1y$PR68@4 (DM_${SŏV,Y ]a*gԃ $8cےĨ0FTK{1lQ \yPb^A;A3Hg)@=iT0El> lLZvъUK1c@{oa[= +ta_<x릵@-XyRaEbD%h.B]- %7K!uo_"8_7";#XB:cztP +2# |J­d~QGSx4o_gtZ}$؜Y8 gYwm%|Bs#yb%䯽P4|O~U=CoHO~ƵktِFT5(2@twqKƒ-+(Ӈ`8\j#qBB0g?hG:5[af\$Ea%P,e{ӍzN&!.U?>|jկK/p+}#q79ly47 #gXI`60;5`-o{:]W~}NYkXqު5G?I޹r9_H01}5.0A ⽥VbD]z)B! b-9%d+8Bᡸ>Nĥ6n5/ +@!bT0eb !xr #& @%|Z 7;+>TUA%u70D~6"4x7JAX*[?ØPH\d~V\$(DH1Ll +.1C& _ç9l@2F-aK<=^6H6L\q7f ]b)!U0lF߰,-"G+pZx3arઆ= +"PqyNw,*9l|O f|ݸSҞe/A D|XQQc k +LbsS0LjXs| AflG>jX/Zqk_#spIHs:;;.V+2ZnYLg!:m2C t9:(>=90!P58dQ_l]Q3v7 %Z6/Pn 3|>ƕM$5yH6̩ۂSI43bk5֣} f}LƷ )WT~o7%ZjE޳s"PJDp2A@1EE37 + *(7atz[<3|:}"D8rgL1=nE?mo <]]cX!"d=WR؇B>0\ꋪXH wC Jѡ9l6G[|[ح~q5@f,+<~ȃǺY3Y[9..W$ФK$&Hi@ =s~"*^?d~$cD K y \Ip9pP wh9F|kJ>է~YWFgj^뮦$<.@e˗/;`sva1C% `G~{|lQ)@{X-o/'3- GB<`|KQy~K$,* +)!9;td5`|\gVCHC5OVd #m W0~aPVĆp)H$? s` y0 +EIp0(EԻ , +vś\;x4 & dr1X#p[1 -f:8o#5 q:eNjGig`SosF9լJ?g?xvQV3CCnx#;w/QƸ"dnF&B]a= , D*rPNvp'Zefq\U심! ꄬ@ԩh%F*PrcFߡӁԣ}5iEld8 +0>bSLM}lD԰d`LYl4x{ _ ==6_Ңzt@`;EyVoL`K|S7D4'3ђ!йt<%WsVMܔ\,d7J%3ȓr|1=U)p;S@zfM &Skpc\AexNb5SȐf$CL4N9Ui \ IQ֌ +i[=jYr!7loO;d޳ddUSѰMٌE]|bBv +`:(3 M1EYԕ.O+i vfo.jLJ~ %v,}N vIgS16Ԩ?Ykd쑕)$H6.cTÝ'j:F5~sUE<ܣU=UTtTBlrF,ڣ*YaM&]cgV/VΦBSb&UXl9\ 6g'ge)|.-"ڝ9oQ*aY _D1?.5̬T4a͘UO$9ʐ=STq2gV Pwl gePuBu_^Y}6UiEWEұm2'/1Յ)XoSdW|LZk,̼֬(J'kޘg㟾It:T5RNSH:sQj*I#zv5ř=5 Y]SifPzEGk+ƕ- r91WSMfw(umfܤNYtU?ӟQdVjHWz 3r3[jl!EmfaҘNrR7Q/7e>&szIq}rL?kof^R5o̳O$TV} ))GBm5rؑva=rQ>^͇>`ZĴ/^_Ti< -B]˚qe3[cbLe2BZhIM9*AgY3YEfT}g~IY3<(LU=f%HM9]~3ޥmceukϦ |g6ϗNM~/R'7[v״.Pwڳq3hnf`oB)MiǢ;d4;VfJ`diSJUѤ+{,:qnC0l_w47DxET,R%LGWjY* mrf~T,|)^T h; g hR&+sY]U\n#v~V(̗"b:W-*Y%:@#˙ Z(ޥƞ5j&LּbQPhL˞3 Jc0E.)Oqfu +1 ^zy׊vNg.+k{: fjj!Dv[ Nh9ٸ̿tSWbN])1vkMcekf-񾚪EvMAQ"IW.3P5>,\=.kƒAҺ6_3Ee 9sTβg5*;iLYn$L$fQWjyҳcVԔw:]6VfoYV l +mqFۇltR;5ff|Pm߼/cRrE_h0ny:M2n?kj (gleyEʶWƚLz%𭲨.+|QV)"[^QoR@Fy󄢥$ٮ^,'FĢhkhpWcFfl>uvTSi*ZuՍ$8:U7JlY~/OW4M%"uYtt`,Nk:*H͗͢Eř}>!@vP]~,TW&UUly4W2C كYYʣ0GK+\=d@,g.gm^T{{fxŚ0Y +Du2.{ά2+qhܺ>ř)`&{A]+*ySp,"}S` b֪RPdO Q&f\LiL'9uua +)֛ٛ2i$5GE3 gUѤnpőf7!_sgUk/'+D榒g,a:R{W M0mkS'5vh}MUfKi?mm=mG +yl!DvS Nh9ٸ̿n#yN]]uiwVoSdW|LZ,C@g̋BT]|Ʃ=}RufZ ))GBm5rؑva=rQYtEތ,ÚΑU-NnJ3E40+:Z_!v.3P5>,\=.kƒAҺ6_3Ee 9sTBt +첫u"kSz֠IxM$fQWjyҳcVԔw:]6VfoYV l +"h,ZqFLK@k3ܣr_1áG!;ks]5/fK=v#[Eu3]#Fmg;o$_2ȌE;G]o&>EpߩgUZ"q)8Ew[jWjw*F ׶9A4'<3.Hc,Qhת:-o-ZȆ|t ά(t}*45*Z/L"ϚDauUW:NVFQ&dd8j*z}H5`CbgS6|]݉o ~%EEKT3Y* m'U. wVek"o76_JU:E&kM^m࠘, +a`[0 mz0$'cwMN9/U';Jc t1)[p bU$ȣFB2uUld4S\jM;6i Y{K73.l\M; Lqru_4a!7n^` +4n]cP/fv}XF;%SNQ {jfr;UV_s]VɌD ,.%9)Zl% lM*enW[e]gmi)Nk|C<<]P~/Ot7SY}06IYi;fT;b^^Z}5)mr_S]FͻթTKINekq˽ +)4#KA'E.!zkc*sL6&|8ndSBZ,-Ӛ.nY<s7D~lv&UW ό021RSs]Hmޠ`!Dl8{QqV)[ o'w6Y6Ek>HѕlY_N&өQ#k ͩګ$Z ~Pc'4 ))NnAAuڰdeC|5Hwmڰyzd6m5P2!=mWK4׆.e4ph@jb󢜆xy +-k4'@E!yh6)j擻cՎz{ƥ~)(vgv[L.Ϝ>7'N%4mp؅ӑ׹;*nc_ek|Ңu\fǷ}^ e 1T yFA2AŪ_+2 ,ʮOkK=gGS&Q춘V'n_?~ )H+}WLȳrPEճ&*ѶQ4":Ct0dݺۀB&5H{oQ{6u'֮IW1>A\We9*B74͋B7CW*=yE`Ңfpr궁Y3~2:Mh^Բ9듈t@` s_?/3JYD2QP eNFb "񗙨:M0nnȡ˪Uw%kL[rEϪIqY;,ti/;2w56.Y艢T&?wNI1f]c,`Y'6FӃo7wrw +u#°jM [o0.z\UgVvZ <̪HǨd*I P]Ua5&ẽ4R%d>yrij&RVoړ?NDpF`wfEH8)qmdUiTB} +Y񁭃 6n~v?GBVuE@ #M?j$6OqaAvj̋BEn*6L4'@E!ayh +,=u]|r]c5̼g\Z?82bwfńK܅`(pg۶5>D=*GYFGQNMACc1~Y=U_MAF#X7=-jũ?ҍmH Ky@T|#wifk An^Q6L8OEVd Ь`Vv]|r]ce̼g\]jmDL$ݙ淿i0H,eiK< VjD9Re`_ubtDcKZ|ݓ{So,X1O~G,8Þ̄w ﭶ`GVQ Ww[6:;,j|kY,3d^WayQHCrJ'P`]"TZ? KvC𒙓@=ߋ'3ڄV-:d@@E3\fMw4,{UF s="ҨNrȀc\v,CT bnە5dһ>x_/WݶTGQ։-woȡ˰aw%kL[rEϪIqY;,ti/;2w56.Y艢T1a,o*֞{.[xuW_8 +$;oԧ?q)'dڟo- .8FdkCJS8P ݄e^B*hȺXmƷ"~v%73};?x׾z3Qr-d{צ 3V5=d[`n]6Ϭm4yU Qk T^Չ0z[kۥ,zӜẽ.R%d>yrij&RVojg*F}+'ϹK1m~vkn;rƟ3#^6x1&Vorsw 5X%P:yCHDo2uhLVB c;/_pU_*p~xWxKXz$! -Lŷ9.Rݚ +=jƼ(!^n^ksH3~~TT +Q'w5ưK=gGS&Q+*3 ]nlf#臮{UϻO{E޻e37ޱw׽|{ݫ^ye`m羞O%sv=j 5L&*3oN!l@G'ŷSVK`#--ۓ?oCr(v7;*jTqCW3ު&v\_(L 7/r J3j0EV^YT`VEZu5]t1v]f=Wm{&,d:&Q+*|/H[d˟ x< {_nQ?ԧ?=3?Xl-Qkҗ gﳟs7‚[`;{0u{/lE յ ^ AyB-3awƷU*;[Tzwi[:<}ٻN{s_~7K|+30ۮx8s Q TUVYM?;Е|O^}ֺ.Eh:f0%( z淿Of^'K޵ ڋZVu@C}o~_2P@dy{gr{+P/}.~waÇ.9{L̳ϸ"1l08:~ MBẼyϷ ^/@S p*Jqig^rXwN=t o8}gp5#]cSm}޾zn6ΕQ\f%boqhSQ4-ј%T|w(F]VmWW?SmϪd)g*ztRrV07}N'G.ɋ25(K/@$ 2#e b2#"}llMﭶy vgG]۷ 7!;k',3qJ@2b)~yrij&RVo>u'"d)!.}p!}]~ƵkA*N\"y )O|҂?~ _r܋LPG=0<9G#\|!E JDhN>ɇ@OogkT#izR_|~Z@+ 5(^p9O~߲O֯B5NQ׭ X[x󒛈E10jۨd04(ZᆡɀTN.7/r J3j0EV6>7MOkYD]ķa*B\A?#d !yhrĂ͋O a;nǫ -H0e2[d1mse ҂-ţU-Cxe_ YD+rXlOؾƒgdn +DNТ+P 4Fxĺ.1 +h%''E/ }k>}!H`_>C`Spᕫ~}۪EWσf!w5P˜`Q>fvYoh?晕2muU Qk T^U]UaUYD.f*U<]ut4 a)7O9H5:ϒ0rAҕ.{:\E( ^f%ia-.AD+(=A~ݱdŚo5R{6 Վ4n.*3`9H6SdO/jCP +[z:꺚.hhOyϸI{4?f!1bwf]h1^5@jk77V>' P[Z?(JT ,~stprz\Do _ U2&L $ +B,fv!1M7^B\;kS*y (TS3dU/z~Os!! Ǡ`1/zA=?uV xAZf$XOe\ Clu)`)B߸:; +׭m:E`kAQ%hmdgͣn9!T {u1.Eӑ4ko1/ qp+Nv jH^b Lx+-TQ8ŝӍQ ˺v᷾xyn$x8Vm3|(;Yy6x{IB!Qe_̣<}'hŒ{nl&űj&'!zѰnOȟpiP֣Z˺3ev~ժC?oMvarZ>G'!g%xt.{d뒼.Y艢T;2A z@4Nqus DŽiS'vC'ǀ;XPzhJs>(laP^Bq"G$ )2;S z 5k_} ֆRXFB=ZΔ̀* 3ω "ž(I<7]N\/}:{ ex~KD"p ~S +C&) Tpyg[0 [1Vma(w܂LLU?A* ACS`j擻=f=2XDL$ݙvKS-~/MB5O8D<'GF@Cka}7jߚ %!Ĵ@6Qq/:8G^"NbqQCI_m}Ep0 Ă#hٌwe5t)'Q`f u #[EtΚDOݥܑ-(ݺp:>+/IJ =YE&PEᅬ#b5lER3W,!D01X Yá4U-֪HV /3+kU|mÞ~/P݌ķ] ~!E=~3+ew7ڼ&&dQh|oBFUnb{jnWs?w* W=Wu-"-٭JTQxD|)fSPQQƿg;!AA8ާNu#EdfkĊȟ]˪PV3kjpUQa>\Wf^gҬe=Vو4#EK6ƛ +b KR`@f +4rˠrREgM>صݮ́ '%Ju]2Y^Mݹ&kpm9]z+j2 ۧ.oHJOċ jIfm T2'{iW} \$9'Oi9/r]mHah@2m=<-ݫ}l}ݸ`M{A;CD"yl"n/e· 9cLIUɥ]tBvI AJfA@#T$pVfTC +%b&Hve$ssMsVY($p;Wyc!S ɹ'.]rę*rXq"|i9"-EbD{Il9dҥ57@KFbuWSNl<7vp){QJ,o2dDwquj.ҲJ:R\)3 bTBxI)(u"%B/0ߒQfyx[!fDJg1ߖw ^@J+#zBCQMo z-edw5夊FF)|Oi݋RTgyە.3uƾ9_u^6:媏}7t?dnz[_)Y 5a BQm~V%p^رݪ9kw|y@HljfvBrWb[Md@O 퓢T/JXwi;%tE:Qrdރm^9Y-͆Z?)||,kF$@ zL.%!>p_*V~v1iB&LR7g!) r'f~ХQ ".40jgi,R`{ttK}'s x!/%KSFGY Ӂ#)aǴhSfdecH**bijp5ȍgxO~aB$KP2$$T片1Qs|GҬ%YƑ)*CrݭbYKv11Wl/Th0M]@[ܓ:ۮ aO2Ym >oM)a1#kɨ1s8XF2F%|5RFs 53:| Zl.rkTKieSX'jn0< oY5#wP]M9Ao +?SZ(YvLɑo[3Yzg,"]lAhl/xΪ`;N9%Vsde@ڬI|Ҿ&a|4k/Vfi)oS=!fW9fMu2l),.e~&0C|g-Gr>PFM>Δ$@KY#~0*L'ՌV1MR2O C>_vn`m"1? +_Z~+,?͓e^ݠ`YZ +LuҺ|Rl|'is x!/%KS†FYQ.olsbٝ'ocl/BsO3Y$*VlE@Q=",@9e6/=|󯯮4.ondeUaXZ2jAt%N^VCl-W1'Hdp;FMAJ\q()#-2EE2.2嶞R#=dh! e-˴yŕf7WrJc+ C4nKѮ,3p^MEՔ*:3:)|+&ϦDȧ+C&sKّ2;.Cˈ,1Ȅ4Bm1GX",ВX(LMQI 6{jz#__ ]s~O?ZٽVF<+f3Ku])'Ut60.?u/JR]9$;[Jbvܮ]wEe:̮0{9]rV"nx$ēܘn}χ1xTyM'aO_|ʱkWmu{a}^/]?סeaܵ~-,MX򬄮,/[QDeR27Xz\,Y5H+pp@<ë^&TXn0 /a(sZd3w1M2aa 7Nr!] Cϐf m,'sx-߽͛k,T \ No newline at end of file diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/doc/wug-src/wug0.tex wfdb-10.4.2/doc/wug-src/wug0.tex --- wfdb-10.4.1/doc/wug-src/wug0.tex 2006-02-27 11:21:57.000000000 -0500 +++ wfdb-10.4.2/doc/wug-src/wug0.tex 2006-05-04 17:29:11.000000000 -0400 @@ -630,7 +630,10 @@ \subsection*{About window managers} -{\small +{ +\begin{latexonly} +\small +\end{latexonly} Some window managers require you to place and size windows manually, so the terminal window may not appear immediately. Usually such window managers show an outline of the window in place of the mouse @@ -673,12 +676,15 @@ user interface applications, much of what you see will be familiar. This exercise does not assume that you have any such experience, but you may find it helpful to read through an introductory book on the -Open Look user interface such as Sun's {\it OpenWindows User's Guide}, -or a more general introduction such as O'Reilly's {\it X Window System -in a Nutshell}. Please note that, although \WAVE{} uses many Open +Open Look user interface such as the {\it OpenLook User's Guide}, +available freely from +(\htmladdnormallink{http://www\-.oreilly\-.com/open\-book/open\-look/} +{http://www.oreilly.com/openbook/openlook/}). +Please note that, although \WAVE{} uses many Open Look controls, it is not fully Open Look compliant; in particular, actions within its signal window (see chapter 2) do not comply with Open Look style guidelines.} + \index{Open Look} \subsection*{If you need to run \WAVE{} remotely} @@ -724,11 +730,11 @@ \index{rdann command@{\tt rdann} command} The output should be \begin{verbatim} - 21596 2 1 - 21597 -2 -5 - 21598 -5 -6 - 21599 -5 -5 - 0:59.508 21423 N 0 0 0 + 21596 982 995 + 21597 978 989 + 21598 975 988 + 21599 975 989 + 0:59.508 21423 N 0 0 0 \end{verbatim} If you do not obtain this output, see your system administrator. @@ -1152,6 +1158,7 @@ choose signals. The {\sf Analyze} window also contains buttons specifying various actions that you can apply to the signals. The separate {\sf Analysis Commands} window behaves like an OpenWindows {\tt cmdtool} +window (a scrollable terminal emulator). \index{cmdtool@{\tt cmdtool}} \begin{figure} \centerline{\epsfig{file=analysis-commands}} @@ -1164,7 +1171,7 @@ \end{latexonly} \label{fig:analysis-commands} \end{figure} -window (a scrollable terminal emulator). Commands may be run in the +Commands may be run in the {\sf Analysis Commands} window either by clicking left on action buttons \index{action buttons} in the {\sf Analyze} window, or by typing directly into the window (depending @@ -1678,11 +1685,11 @@ \index{annotation!chan@{\tt chan}} \index{signal!number} Using the \amenubutton{Show annotations} menu button -in \WAVE{}'s {\sf View} window, you +in \WAVE{}'s {\sf View} window, \begin{wrapfigure}[6]{l}{6cm} \mbox{\epsfig{file=attach-to-signals}} \end{wrapfigure} -may choose to display annotations attached to signals, rather than +you may choose to display annotations attached to signals, rather than in the center of the signal window as is the usual default. In this case, the {\tt chan} field of each annotation specifies the signal number of the signal to which it is attached. If annotation editing is enabled when annotations @@ -1871,12 +1878,19 @@ \index{environment variables!EDITOR} \index{textedit command@{\tt textedit} command} -Click left on the \button{Edit menu} button in the {\sf Analyze} +Click left on the \button{Edit menu} button in the {\sf Analyze} window. \begin{wrapfigure}[12]{r}{7.25cm} \mbox{\epsfig{file=system-menu}} \end{wrapfigure} -window. Unless your \WAVE{} menu has already been customized, \WAVE{} -pops up a notice as shown at right. Click left on \button{Copy} to +Unless your \WAVE{} menu has already been customized, \WAVE{} +pops up a notice as shown +\begin{latexonly} +at right. +\end{latexonly} +\begin{htmlonly} +above. +\end{htmlonly} +Click left on \button{Copy} to continue with this exercise. After a few seconds, the \WAVE{} menu file appears (in an OpenWindows {\tt textedit} window as in figure~\ref{fig:wave-menu}, unless you have specified a different @@ -2503,14 +2517,14 @@ \subsection*{Controlling \WAVE{} from a web browser} -Most web browsers, such as Mozilla or Netscape, can use so-called \emph{helper} +Most web browsers, such as Firefox or Mozilla, can use so-called \emph{helper} or \emph{viewer} applications. These are external applications that are invoked by the browser to present data in formats that (usually) are not supported by the browser directly. For example, browsers often use {\tt ghostscript} to display PostScript data. It is possible to configure Mozilla and other web browsers so that \WAVE{} can be used indirectly as a helper application. -\index{Mozilla}\index{Netscape}\index{web browser} +\index{Mozilla}\index{Firefox}\index{web browser} By using \hyperref{{\tt wavescript}} @@ -2524,8 +2538,35 @@ You can set up your browser to view files with the MIME type {\tt appli\-cation/\-x-wavescript} using {\tt wavescript}. Some browsers, -including Mozilla and Netscape, also allow you to specify that any URL with the -{\tt .xws} suffix should be handled by {\tt wavescript}. +including Firefox, Mozilla, and Netscape, also allow you to specify that any +URL with the {\tt .xws} suffix should be handled by {\tt wavescript}. + +If you use Firefox, click on any {\tt .xws} link +\begin{rawhtml} +(such as this one) +\end{rawhtml} +and Firefox will open a dialog box asking what it should do. + +\begin{figure} +\centerline{\epsfig{file=firefox-new-helper}} +\caption{Adding {\tt wavescript} as a Firefox helper: step 1.} +\label{fig:firefox-new-helper} +\end{figure} + +Choose ``Open with'', click on ``Browse...'', and choose {\tt wavescript} +(usually in {\tt /usr/bin}) in the file selection dialog, then check +``Do this automatically for files like this from now on.'' The dialog +box will expand to include instructions for modifying your choice. + +\begin{figure} +\centerline{\epsfig{file=firefox-new-helper2}} +\caption{Adding {\tt wavescript} as a Firefox helper: step 2.} +\label{fig:firefox-new-helper} +\end{figure} + +Dismiss the dialog by clicking ``OK'', and \WAVE{} should open the +record specified by the {\tt .xws} file. +\index{Firefox} If you use Mozilla, choose {\sf Preferences} from the {\sf Edit} menu, then open the {\sf Navigator} category and choose {\sf Helper Applications}. @@ -2662,14 +2703,16 @@ \index{Galeon}\index{Konqueror}\index{Mozilla}\index{Netscape}\index{Opera} \index{web browser} -\WAVE{} uses a web browser to display external data associated with link -annotations, and to display the on-line version of this guide. A suitable web -browser must be installed on the \WAVE{} host in order for this to work. By -default, \WAVE{} uses Mozilla (\htmladdnormallink{{\tt -http://www.mozilla.org/}}{http://www.mozilla.org/}); several other browsers, -including Galeon, Konqueror, Netscape, and Opera, can also be controlled by -\WAVE{}. If you prefer to use one of these rather than Mozilla, set the -environment variable {\tt URLV} to the name of your browser. +On Unix and Unix-like platforms such as GNU/Linux, \WAVE{} uses a web +browser to display external data associated with link annotations, and +to display the on-line version of this guide. A suitable web browser +must be installed on the \WAVE{} host in order for this to work. By +default, \WAVE{} uses Firefox (\htmladdnormallink{{\tt +http://www.mozilla.org/firefox/}}{http://www.mozilla.org/firefox/}); +several other browsers, including Galeon, Konqueror, Mozilla, +Netscape, and Opera, can also be controlled by \WAVE{}. If you prefer +to use one of these rather than Firefox, set the environment variable +{\tt URLV} to the name of your browser. \WAVE{} controls the web browser in the same way it controls other external programs: by running commands in the {\sf Analysis Commands} @@ -2689,21 +2732,21 @@ The program {\tt url\_view} is a shell script (normally installed at the same time as \WAVE{}, and in the same directory) that handles starting the browser if necessary and instructing it to display the specified -URL. If {\tt URLV} is not set, or if you have set it to {\tt mozilla}, +URL. If {\tt URLV} is not set, or if you have set it to {\tt firefox}, {\tt url\_view} does so using the command: \begin{verbatim} - ( mozilla -remote 'openURL($URL)' || mozilla $URL ) & + ( firefox -remote 'openURL($URL)' || firefox $URL ) & \end{verbatim} \noindent -In this case, \WAVE{} (via {\tt url\_view}) first uses Mozilla's -{\tt -remote} option to instruct an already-running copy of Mozilla -to open the desired URL. This is a very fast operation if Mozilla is -already running (since Mozilla is already in RAM, it is not necessary -to load another in order to run the {\tt mozilla -remote ...} +In this case, \WAVE{} (via {\tt url\_view}) first uses Firefox's +{\tt -remote} option to instruct an already-running copy of Firefox +to open the desired URL. This is a very fast operation if Firefox is +already running (since Firefox is already in RAM, it is not necessary +to load another in order to run the {\tt firefox -remote ...} process, and the remote process efficiently delivers its message and -exits immediately). If Mozilla was not running, the {\tt -mozilla -remote} command fails, and (in this case only) {\tt url\_view} -starts a new Mozilla browser process. +exits immediately). If Firefox was not running, the {\tt +firefox -remote} command fails, and (in this case only) {\tt url\_view} +starts a new Firefox browser process. \index{Mozilla} The {\tt url\_view} script includes analogous commands for each of the other @@ -2725,7 +2768,7 @@ {\tt } tag at the beginning of the line, since \WAVE{} uses this tag to identify the browser interface command within the menu file.) Consult the documentation for your browser to see what commands will be needed. (The {\tt --remote} option is used by Mozilla, Netscape, and Opera; Galeon and +-remote} option is used by Firefox, Mozilla, Netscape, and Opera; Galeon and Konqueror use variations on this approach, and other browsers will probably require different methods.) Browsers that do not support any means of remote control are best avoided (since the only way to use them is to start a @@ -4760,42 +4803,30 @@ \section{Remote access requirements} -\index{network access}\index{modem access}\index{PPP}\index{SLIP}\index{TERM} -\index{Ethernet} -In order to use \WAVE{}, you may log onto a \WAVE{} host directly, or you -may do so remotely using virtually any local system (computer or X -terminal) connected by TCP/IP-based Ethernet to a \WAVE{} host. (PPP, -SLIP, or TERM serial-line connections also work, and may be acceptable -for viewing data, but even 28.8 Kbaud connections are likely to be -intolerably slow for extensive annotation editing.) Thus it is -possible for several users to access \WAVE{} simultaneously using a -single \WAVE{} host, provided only that each user's computer or terminal -runs an X server. X servers are available for virtually any computer -in current use, including those running any version of UNIX, as well -as for MS-DOS and MS-Windows PCs, Macintoshes, Amigas, and DEC VAXen +\index{network access}\index{modem +access}\index{PPP}\index{SLIP}\index{TERM} \index{Ethernet} Since any +recently manufactured PC or Macintosh can act as a \WAVE{} host, +remote access to \WAVE{} is likely to be of interest mainly to those +seeking to use older hardware. For this purpose, virtually any local +system (computer or X terminal) connected by TCP/IP-based Ethernet to +a \WAVE{} host can be used. (PPP, SLIP, or TERM serial-line +connections also work, and may be acceptable for viewing data, but +even fast serial connections are likely to be intolerably slow for +extensive annotation editing.) Thus it is possible for several users +to access \WAVE{} simultaneously using a single \WAVE{} host, provided +only that each user's computer or terminal runs an X server. Free or +inexpensive X servers are available for virtually any computer made in +the last 20 years, including those running any version of UNIX, as well as +for MS-DOS and MS-Windows PCs, Macintoshes, Amigas, and DEC VAXen running VMS. -\index{Linux}\index{X Window System!XFree86 server} For many users -seeking to add an additional point of access to \WAVE{}, a networked -PC may be attractive. With current CPUs and graphics adapters, -rendering speed is much faster than was available on far more -expensive workstations only a few years ago. X server software for -MS-Windows is freely available as part of Cygwin, and may be a good -choice if you are heavily invested in Windows-based software. (For -less than the cost of a commercial Windows X server, however, you can -buy a 300 Gb disk drive and install Linux, X.org, and \WAVE{} on it -with 298 Gb to spare. Consider this before choosing a commercial X -server for Windows.) If costs of maintenance and system administration are a -concern, an X terminal is probably a better choice than a networked -PC. - \section{Data} \index{MIT-BIH Arrhythmia Database} \index{European ST-T Database}\index{MIT-BIH Polysomnographic Database} \index{MGH/MF Waveform Database} You may find that an existing database of digitally recorded signals may be useful for your studies. PhysioNet, at \htmladdnormallink{http://www.physionet.org/,}{http:/www.physionet.org/}, -offers free on-line access to over 30 such databases with thousands of +offers free on-line access to over 40 such databases with thousands of recordings ranging in length from a few seconds to several days. These include all or most of the MIT-BIH Arrhythmia Database, the European ST-T Database, the MIT-BIH Polysomnographic Database, the @@ -4900,10 +4931,10 @@ \index{WWW}\index{WFDB Software Package}\index{downloading} \index{installing \WAVE{}} Current sources for \WAVE{}, and precompiled \WAVE{} binaries for -PCs running Linux and SPARCstations running SunOS and -Solaris, may be obtained from PhysioNet. Point your Web browser to -\htmladdnormallink{{\tt http://www.physionet.org/}} -{http://www.physionet.org/} for details. +GNU/Linux or Mac OS X may be obtained from PhysioNet. Point your Web browser +to +\htmladdnormallink{{\tt http://www.physionet.org/}}{http://www.physionet.org/} +for details. Note that \WAVE{} cannot be run at all until the WFDB library (contained within the WFDB Software Package) and the XView libraries ({\tt libxview.so.3} and diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/lib/Makefile.tpl wfdb-10.4.2/lib/Makefile.tpl --- wfdb-10.4.1/lib/Makefile.tpl 2006-02-24 23:22:16.000000000 -0500 +++ wfdb-10.4.2/lib/Makefile.tpl 2006-05-04 14:26:09.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 24 May 2000 -# Last revised: 24 February 2006 +# Last revised: 4 May 2006 # This section of the Makefile should not need to be changed. INCLUDES = $(INCDIR)/wfdb/wfdb.h $(INCDIR)/wfdb/ecgcodes.h \ @@ -10,7 +10,9 @@ MFILES = Makefile Makefile.dos # `make' or `make all': build the WFDB library and wfdb-config -all: setup $(OFILES) wfdb-config +all: setup $(OFILES) + rm -f wfdb-config + $(MAKE) wfdb-config # be sure that compiled-in paths are up-to-date $(BUILDLIB) $(OFILES) $(BUILDLIB_LDFLAGS) # `make install': install the WFDB library and headers @@ -32,7 +34,7 @@ setup: sed "s+DBDIR+$(DBDIR)+" wfdblib.h -wfdb-config: wfdb-config.c Makefile +wfdb-config: $(CC) $(CFLAGS) -DVERSION='"$(VERSION)"' -DCFLAGS='"$(CFLAGS)"' \ -DLDFLAGS='"$(LDFLAGS)"' -I$(INCDIR) -o $@ wfdb-config.c diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/lib/wfdb.h0 wfdb-10.4.2/lib/wfdb.h0 --- wfdb-10.4.1/lib/wfdb.h0 2006-04-06 21:30:17.000000000 -0400 +++ wfdb-10.4.2/lib/wfdb.h0 2006-05-04 00:31:00.000000000 -0400 @@ -1,5 +1,5 @@ /* file: wfdb.h G. Moody 13 June 1983 - Last revised: 6 April 2006 wfdblib 10.4.1 + Last revised: 4 May 2006 wfdblib 10.4.2 WFDB library type, constant, structure, and function interface definitions _______________________________________________________________________________ @@ -33,7 +33,7 @@ /* WFDB library version. */ #define WFDB_MAJOR 10 #define WFDB_MINOR 4 -#define WFDB_RELEASE 1 +#define WFDB_RELEASE 2 #define WFDB_NETFILES 1 /* if 1, library includes code for HTTP, FTP clients */ #define WFDB_NETFILES_LIBCURL 1 diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/lib/wfdbio.c wfdb-10.4.2/lib/wfdbio.c --- wfdb-10.4.1/lib/wfdbio.c 2006-02-23 18:53:52.000000000 -0500 +++ wfdb-10.4.2/lib/wfdbio.c 2006-04-11 09:48:57.000000000 -0400 @@ -1,5 +1,5 @@ /* file: wfdbio.c G. Moody 18 November 1988 - Last revised: 23 February 2006 wfdblib 10.4.0 + Last revised: 11 April 2006 wfdblib 10.4.0 Low-level I/O functions for the WFDB library _______________________________________________________________________________ @@ -1251,7 +1251,8 @@ memcpy(c->data + c->size, ptr, size); c->size += size; count += size; - ptr += size; + p = (char *)ptr + size; /* avoid arithmetic on void pointer */ + ptr = (void *)p; nmemb--; } return (count); diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/Makefile.tpl wfdb-10.4.2/Makefile.tpl --- wfdb-10.4.1/Makefile.tpl 2006-02-24 23:22:49.000000000 -0500 +++ wfdb-10.4.2/Makefile.tpl 2006-05-04 14:09:46.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 24 May 2000 -# Last revised: 24 February 2006 +# Last revised: 4 May 2006 # This section of the Makefile should not need to be changed. # 'make' or 'make all': compile the WFDB applications without installing them diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/MANIFEST wfdb-10.4.2/MANIFEST --- wfdb-10.4.1/MANIFEST 2006-03-02 12:42:04.000000000 -0500 +++ wfdb-10.4.2/MANIFEST 2006-05-04 17:43:33.000000000 -0400 @@ -388,6 +388,8 @@ doc/wug-src/wave/ppm/file-print.ppm.gz doc/wug-src/wave/ppm/file-save.ppm.gz doc/wug-src/wave/ppm/find-window.ppm.gz +doc/wug-src/wave/ppm/firefox-new-helper2.ppm.gz +doc/wug-src/wave/ppm/firefox-new-helper.ppm.gz doc/wug-src/wave/ppm/galeon-new-helper.ppm.gz doc/wug-src/wave/ppm/GTKWave.ppm.gz doc/wug-src/wave/ppm/help-intro.ppm.gz diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/NEWS wfdb-10.4.2/NEWS --- wfdb-10.4.1/NEWS 2006-04-06 21:34:12.000000000 -0400 +++ wfdb-10.4.2/NEWS 2006-05-04 16:53:57.000000000 -0400 @@ -1,3 +1,19 @@ +10.4.2: + Mathias Gruber reported a line in wfdbio.c that used void pointer + arithmetic (permitted as an extension by gcc but not allowed by + ANSI/ISO C or most other C compilers). This operation has been + replaced by ANSI/ISO C-conformant code. + + Column headings produced using rdann's -v option are now correct + even when the starting time, but not the starting date, has been + specified in the input record's .hea file. + + Problems with compiled-in paths in several applications (wfdb-config, + wavescript, pschart, and psfd) occurred as a result of Makefile + bugs, which have now been fixed. + + Many minor documentation updates. + 10.4.1: A bug caused incorrect output from WFDB library function strtim() when called with the argument "i", following use of setifreq() to diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/psd/Makefile.tpl wfdb-10.4.2/psd/Makefile.tpl --- wfdb-10.4.1/psd/Makefile.tpl 2003-02-19 22:15:06.000000000 -0500 +++ wfdb-10.4.2/psd/Makefile.tpl 2006-05-04 14:20:47.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 24 May 2000 -# Last revised: 19 February 2003 +# Last revised: 4 May 2006 # This section of the Makefile should not need to be changed. # Programs to be compiled. @@ -18,12 +18,8 @@ ../install.sh $(BINDIR) $(XFILES) $(MAKE) clean -# `make scripts': install scripts +# `make scripts': customize and install scripts scripts: - cp $(SCRIPTS) $(BINDIR) - cd $(BINDIR); $(SETXPERMISSIONS) $(SCRIPTS) - -# `make custom-scripts': customize and install scripts sed s+BINDIR+$(BINDIR)+g $(BINDIR)/hrfft sed s+BINDIR+$(BINDIR)+g $(BINDIR)/hrlomb sed s+BINDIR+$(BINDIR)+g $(BINDIR)/hrmem diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/README.WINDOWS wfdb-10.4.2/README.WINDOWS --- wfdb-10.4.1/README.WINDOWS 2005-06-08 14:51:19.000000000 -0400 +++ wfdb-10.4.2/README.WINDOWS 2006-04-29 20:33:21.000000000 -0400 @@ -1,4 +1,5 @@ -file: README.WINDOWS G. Moody 8 June 2005 +file: README.WINDOWS G. Moody 8 June 2005 + Last revised: 29 April 2006 This file contains additional notes about how to build the WFDB Software Package under MS-Windows in various non-standard and unsupported ways. @@ -39,6 +40,11 @@ Method A: (easy) + Use a Cygwin (terminal emulator) window throughout the installation + below. We do not recommend attempting to build and install native + Windows binaries of the WFDB Software Package using a DOS window + (Windows Command Prompt). + 1. First perform a standard WFDB installation from sources using Cygwin, following the instructions in 'INSTALL'. @@ -46,23 +52,60 @@ keeping them separate from the standard Cygwin paths to avoid confusion. A good choice is '/opt/wfdb'. - 3. Install libcurl and its associated SDK within the directory you chose in - step 2 (e.g. /opt/wfdb). Set your PATH variable to include the 'bin' - directory in your install path by typing (in a Cygwin terminal window): - export PATH="/opt/wfdb/bin:$PATH" + 3. Install a native Windows version of libcurl: + + a. Download the no-SSL libcurl binary package for Win32 from + http://curl.haxx.se/download/ + and move the zip file into your (Cygwin) home directory. + As of 29 April 2006, the most recent version of this file was: + libcurl-7.15.3-win32-nossl.zip + (The SSL and SSL+SSPI enabled versions of libcurl should also work if + the additional libraries they need are installed, but this has not been + tested. The WFDB library does not require SSL or SSPI support.) + + b. Create a directory for the native Windows binaries: + mkdir -p /opt/wfdb/bin + This command also creates /opt and /opt/wfdb if necessary. + + c. Unpack libcurl into /opt: + cd /opt + unzip ~/libcurl-*nossl.zip + The libcurl files will unpack into a version-numbered directory under + /opt, such as /opt/libcurl-7.15.3. Copy the needed files into /opt/wfdb: + cd /opt/libcurl-7.15.3 + cp -p bin/curl-config /opt/wfdb/bin + cp -p lib/* /opt/wfdb/bin + cp -pr include /opt/wfdb + + d. Edit /opt/wfdb/bin/curl-config, replacing + prefix=/usr/local + with + prefix=/opt/wfdb + and changing + echo -L$(exec_prefix)/lib -lcurl -L/home/dast/src/win32 ... + to + echo -L$(exec_prefix)/bin -lcurl + (deleting the remainder of the line following '-lcurl'). + + 4. Add /opt/wfdb/bin to the beginning of your PATH: + export PATH="/opt/wfdb/bin:$PATH" replacing '/opt/wfdb' with your install path, if different. See README.NETFILES for further information. - - 4. In this directory (the top-level directory of the WFDB Software Package, - containing the file you are now reading), type: + + Repeat this step whenever you start a new Cygwin window and wish to + use the native Windows WFDB binaries. + + 5. Use 'cd' to return to this directory (the top-level directory of the + WFDB Software Package, containing the file you are now reading), and type: ./configure --no-cygwin --prefix=/opt/wfdb make install - replacing '/opt/wfdb' with your install path, if different ('make install' - will create this directory if it does not exist). + replacing '/opt/wfdb' with your install path, if different. - 5. In this directory, test the installation by typing: - make check - If there are any errors, look in the checkpkg directory for details. + Note: If you run + make check + many of the checks will fail because text files written by the WFDB + applications will be in DOS format (with CR+LF line terminators). This + is normal and is not an indication of problems. Method B: (experts only) @@ -80,13 +123,10 @@ /mingw/bin/gcc If you don't see this output, rerun the MinGW and MSYS installers. - 3. Install libcurl and its associated SDK (see above). + 3. Install libcurl (see steps 2-4 above). 4. In this directory (the top-level directory of the WFDB software package, containing the file you are now reading), type: ./configure make install - 5. In this directory, test the installation by typing: - make check - If there are any errors, look in the checkpkg directory for details. diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/wave/Makefile.tpl wfdb-10.4.2/wave/Makefile.tpl --- wfdb-10.4.1/wave/Makefile.tpl 2005-12-02 11:47:10.000000000 -0500 +++ wfdb-10.4.2/wave/Makefile.tpl 2006-05-04 14:16:10.000000000 -0400 @@ -44,7 +44,9 @@ all: wave # `make install': compile and install WAVE and its help files -install: $(BINDIR) $(HELPDIR)/wave $(MENUDIR) $(RESDIR) wave wave.hlp news.hlp +install: $(BINDIR) $(HELPDIR)/wave $(MENUDIR) $(RESDIR) wave.hlp news.hlp + rm -f wave.o analyze.o xvwave.o + $(MAKE) wave # make sure all compiled-in paths are up-to-date $(STRIP) wave; $(SETXPERMISSIONS) wave; ../install.sh $(BINDIR) wave cp $(HELPFILES) wave.hlp wave.info demo.txt $(HELPDIR)/wave cd $(HELPDIR)/wave; $(SETPERMISSIONS) $(HELPFILES) wave.info demo.txt @@ -104,7 +106,7 @@ # `make guide': print the WAVE User's Guide guide: - cd ../../manuals/wavguide; make guide + cd ../doc; make wug-book # `make TAGS': make an `emacs' TAGS file TAGS: $(HFILES) $(CFILES) @@ -119,7 +121,7 @@ $(PRINT) README REGCARD $(HFILES) $(CFILES) $(HELPFILES) $(OTHERFILES) # Dependencies and special rules for compilation of the modules of `wave' -wave.o: wave.h wave.c +wave.o: $(CC) -c $(WCFLAGS) -DHELPDIR=\"$(HELPDIR)\" wave.c init.o: wave.h xvwave.h init.c $(CC) -c $(WCFLAGS) init.c @@ -143,11 +145,11 @@ $(CC) -c $(WCFLAGS) sig.c annot.o: wave.h xvwave.h annot.c $(CC) -c $(WCFLAGS) -DWAVEVERSION=\"$(WAVEVERSION)\" annot.c -analyze.o: wave.h xvwave.h analyze.c +analyze.o: $(CC) -c $(WCFLAGS) -DMENUDIR=\"$(MENUDIR)\" analyze.c scope.o: wave.h xvwave.h scope.c $(CC) -c $(WCFLAGS) scope.c -xvwave.o: wave.h xvwave.h bitmaps.h xvwave.c +xvwave.o: $(CC) -c $(WCFLAGS) -DRESDIR=\"$(RESDIR)\" xvwave.c help.o: help.c $(CC) -c $(WCFLAGS) -w help.c diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/waverc/Makefile.tpl wfdb-10.4.2/waverc/Makefile.tpl --- wfdb-10.4.1/waverc/Makefile.tpl 2002-06-19 21:43:50.000000000 -0400 +++ wfdb-10.4.2/waverc/Makefile.tpl 2006-05-04 14:14:08.000000000 -0400 @@ -1,5 +1,5 @@ # file: Makefile.tpl G. Moody 24 May 2000 -# Last revised: 19 June 2000 +# Last revised: 4 May 2006 # Change the settings below as appropriate for your setup. # `make all' creates wavescript and wave-remote without installing them. @@ -8,7 +8,9 @@ # `make install' installs `url_view', `wavescript', and `wave-remote'. See # the WAVE User's Guide for instructions on setting up `wavescript' as a helper # application for your Web browser. -install: $(BINDIR) wavescript wave-remote +install: $(BINDIR) wave-remote + rm -f wavescript + $(MAKE) wavescript # make sure wavescript has the correct BINDIR $(STRIP) wavescript $(STRIP) wave-remote $(SETXPERMISSIONS) url_view wavescript wave-remote diff -Naur --exclude Makefile --exclude info wfdb-10.4.1/waverc/url_view wfdb-10.4.2/waverc/url_view --- wfdb-10.4.1/waverc/url_view 2002-06-20 10:10:04.000000000 -0400 +++ wfdb-10.4.2/waverc/url_view 2006-05-04 15:08:45.000000000 -0400 @@ -1,20 +1,21 @@ #!/bin/sh # file: url_view G. Moody 16 April 1997 -# Last revised: 20 June 2002 +# Last revised: 4 May 2006 # Use this script to view an HTML document or any other URL (specified by # the command-line argument to this script). Set the environment variable # URLV to specify your favorite web browser; if you have not done so, -# url_view will attempt to use Mozilla. +# url_view will attempt to use Firefox. if [ $# -lt 1 ]; then echo usage: url_view URL; exit fi if [ "x$URLV" = "x" ]; then - URLV=mozilla + URLV=firefox else case $URLV in + Fir*) URLV=firefox ;; Gal*) URLV=galeon ;; Kfm*) URLV=konqueror ;; Kon*) URLV=konqueror ;; @@ -27,7 +28,7 @@ case $URLV in gal*) $URLV -x $1 2>/dev/null & ;; konq*|kfm*) kfmclient openURL 2>/dev/null $1 ;; - moz*|net*|ope*) ( $URLV -remote "openURL($1)" 2>/dev/null || $URLV $1 ) & ;; + fir*|moz*|net*|ope*) ( $URLV -remote "openURL($1)" 2>/dev/null || $URLV $1 ) & ;; *) $URLV $1 & ;; esac